From 051cdd45600398399cc5d1f300112f24bc37ced7 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 2 Jul 2026 21:57:27 +0800 Subject: [PATCH 001/208] init --- filament_id_plan.html | 1029 +++++++++++++++++++++++++++++++++++++++++ filament_id_plan.md | 397 ++++++++++++++++ task.md | 13 + 3 files changed, 1439 insertions(+) create mode 100644 filament_id_plan.html create mode 100644 filament_id_plan.md create mode 100644 task.md diff --git a/filament_id_plan.html b/filament_id_plan.html new file mode 100644 index 0000000000..08f4a06b74 --- /dev/null +++ b/filament_id_plan.html @@ -0,0 +1,1029 @@ + + + + + +filament_id — design & migration plan · OrcaSlicer + + + + + + +
+ + +
+
DESIGN REVIEW resources/profiles · filament_id
+

One id, one material — on every printer, exactly once.

+

A filament_id names a material family: one commercial product line, shared by all of its + per-printer variants. Devices match spools by filament_id + printer compatibility. + That only works if, for any one printer, at most one compatible preset carries a given id. Bambu keeps this + invariant; the other 64 vendor bundles broke it 1,256 times.

+ +
+ id anatomy — Bambu's grammar + + + + GF + A + 00 + + + + + + + + + + + + prefix — Bambu's namespace + frozen: AMS RFID tags carry these bytes + family letter — A: Bambu PLA + B ABS/ASA · C PC · G PETG · L generic/3rd-party PLA + N PA · P PP/PE · S support · T PET/PPS · U TPU + tier number + 00–49 branded · 50–59 fiber-filled + 60–70 partners · 95–99 generic, desc. + + + + shared by every variant: + + + Bambu PLA Basic @BBL X1C + + Bambu PLA Basic @BBL P1P + + Bambu PLA Basic @BBL X1C 0.2 nozzle + + + +
+ +
+
1,256
printer-level ambiguity errors (validator -f, tree-wide)
+
356
logical collision groups after de-duplication
+
30 / 65
vendor bundles affected / total
+
0
violations in BBL — cleaned in PR #14459, CI-gated
+
+

Every number in this document is reproducible: an independent loader-faithful audit re-derives the + validator's output exactly (1256 = 1256), and every code claim carries a file:line reference.

+
+ + +
+
§0 overview
+

The plan in one screen

+

Two deliverables: a generation rule so ids can never become ambiguous again (goal 1), and a + migration that fixes the 356 existing collisions without breaking users (goal 2).

+ +
+ the whole plan + + + + + + + + + TODAY + 7+ ad-hoc id schemes + 356 collision groups + zero written rules + CI covers BBL only + + + RULE + TOOLING §3 §6 + deterministic OF* mint + id lives on @base only + CI ratchets + snapshot + no profile changes yet + + + MIGRATION §5 + fresh ids only, ever + OFL first, then per vendor + names never change + one reviewable PR each + + + DONE + invariant holds + tree-wide, + by construction + + + + + + + BBL profiles are never touched · Qidi QD_* device ids are never touched · no preset is renamed or deleted + +
+ +
+ Why migration is safe — verified in code: user presets re-derive filament_id from their parent on + every load Preset.cpp:1658-1682; 3mf projects resolve presets by name + config, not id + Preset.cpp:2490-2576; Klipper, Creality and Snapmaker derive tray ids at runtime from the + installed bundle. Fresh, never-reused ids on non-BBL system presets break nothing. +
+
+ + +
+
§1 how matching works
+

Every ecosystem funnels through this one id

+

Not just Bambu. Five device ecosystems put a filament_id into the same pipeline; the slicer then + picks the single preset that matches the id and is compatible with the active printer.

+ +
+ runtime — device → preset + + + + + + + + + + BBL AMS + from device RFID — frozen + + Qidi box + QD_<series>_<v>_<t> — frozen + + Creality CFS + scored at runtime — safe + + Klipper AFC/HH + by filament type — safe + + Snapmaker + color/type match — safe + + + + + + + + + + + + tray_info_idx (MQTT / agent) + + filament_ams_list["filament_id"] + + find_if( f.is_compatible && base(f)==f && f.filament_id == id ) + + + + + + + + Plater.cpp:3440 + PresetBundle.cpp:3132/3233 + + + → the ONE matching preset + two matches? find_if silently returns whichever sorts first — no log, no warning; the AMS edit dialog even hides the second preset + +
+ +

The invariant, drawn

+
+ per printer × per id +
+
+

✓ Correct — Bambu PLA Basic, id GFA00

+ + + + + +
printer presetcompatible presets with GFA00
X1C…@BBL X1C 1
X1C 0.2 nozzle…@BBL X1C 0.2 nozzle 1
P1P…@BBL P1P 1
+

Variants share the id; their compatible_printers are disjoint. Each printer sees the id exactly once.

+
+
+

✗ Broken — Qidi, id GFB99 (real case)

+ + + +
printer presetcompatible presets with GFB99
X-Max 3 0.4 nozzleBambu ABS · HATCHBOX ABS · Overture ABS · PolyLite ABS · QIDI ABS Rapido · QIDI ABS-GF · QIDI ASA · ASA-Aero · PC-ABS-FR · Generic ABS … 16
+

Sixteen different materials answer to one id on one printer. A spool tagged “generic ABS” matches + whichever preset sorts first — and GFB99 was stamped into 317 Qidi files.

+
+
+
+ +

Two consumers you can't see from the profiles

+

Most matching is printer-scoped, but several code paths match globally, by id alone — tray display name, + temperature_vitrification warnings, calibration history, and the multi-nozzle grouping key + FilamentGroup.cpp:513. So two different materials must never share an id even across + vendors: the first preset in the whole installed collection supplies the name, type and temperature data.

+
Two identity systems. The library (OFL) hides its global presets per printer by + alias (name before  @) — Preset.cpp:3684 — while devices match by + filament_id. When a vendor tunes Generic PLA but renames it + Flashforge PLA Basic, the alias no longer matches, shadowing fails, and both presets are + visible with the same id. The rule in §3 aligns the two systems: one family = one alias = one id.
+
+ + +
+
§2 the landscape today
+

Seven schemes, zero rules, one epidemic

+

The only guidance that ever existed was “≤ 8 characters”, checked for BBL only. Every other + convention was one contributor's invention, merged without comment, then imitated.

+ +
+ who uses which id shape — 5,866 instantiated presets + + + GF<letter><NN> (Bambu classic, mass-copied) + 2,921 + free-form ("GFPLA Silk", "LHF_pla", 36-char names…) + 2,241 + GF<BRAND><NNN> (Bambu partner ids) + 395 + O-prefixed (OGF* — OrcaFilamentLibrary mirrors) + 211 + GF<x>##_## (Afinia/Tiertime suffix) + other GF-shaped + 43 + 55 + + +
+ Bambu's space, used outside Bambu + invented, unowned + deliberate Orca convention +
+
+ +

How it got here

+
+ convention timeline + + + + + + + + + + 2025-01 + OrcaFilamentLibrary + created + + 2025-03 + OGF* prefix born + direct commit, no rationale + + 2025-05 + “≤ 8 chars” check + BBL-only · PR #9574 + + 2025-06 + _## suffix invented + PR #9739, imitated since + + 2025-11 + profile wiki removed + its example taught copy-paste + + 2026-06 + validator -f · BBL → 0 + PR #14459 + + now + this plan + + +
+ +

Beyond the validator's reach

+

The -f check compares a printer only against its own vendor's filaments. Three further ledgers exist:

+
+
16
OFL-internal ids covering several materials — visible on every printer (e.g. OEPLAB00 = 14 Elegoo PLA products)
+
42
OFL×vendor same-id pairs — 32 already neutralized by alias shadowing, 10 live
+
67
ids meaning different materials in different vendors (GFU99 also covers a PEBA; Anycubic's GFL95 “Matte” ≠ Bambu's GFL95 “High Speed”)
+
+
+ + +
+
§3 the rule
+

Nobody invents ids. Structure carries the rest.

+

Chosen by a 3-design → 2-judge → 3-attacker adversarial process. Deterministic minting won on + ambiguity-prevention, contributor simplicity and enforceability; every “breaks” finding from the attack pass is + folded in below.

+ +

The one-question test

+
+ decision — same id or new id? + + + + + + + + Would a user call this a different spool product + than anything already in the tree? + + + + + + + YES — polymer, sub-brand, + fiber-filled, 2nd diameter + NO — same spool, tuned for + another printer / nozzle + it's a GENERIC + material + + + NEW FAMILY + create «Family @base», not instantiated + write NO filament_id anywhere + run the mint script — or paste the id + that CI prints for you + + JOIN THE FAMILY + inherit the existing @base + never write the filament_id key + keep compatible_printers disjoint + from the other variants + + JOIN THE OFL FAMILY + inherit «Generic X @System» + KEEP the «Generic X» name/alias + (alias shadowing then hides the OFL + preset on your printers) · no id key + color → never a new id · “high-speed” for a different printer → same family + “high-speed” selectable alongside the normal preset on one printer → new family + second selectable diameter on the same printer → sibling family with its own id + +
+ +

Minted ids — the setting_id precedent, applied to families

+
+ id anatomy — the new namespace + + + OF + q3xT9k + + + + + + + + + OF — Orca Family namespace + disjoint from GF · QD_ · P· at two chars + base62_6( uuid5( NS, "filament_family/<Vendor>/<Family>" ) ) + e.g. filament_family/Elegoo/Elegoo PLA Matte → OFq3xT9k + same derivation as setting_id · 8 chars total (AMS limit) + + + same input → same id: + no “next number” races · a fork mints the id upstream expects · CI recomputes and verifies + renamed family? + the id does not change — immutable once shipped; renamed_from covers the name + + +
+

Author workflow is two lines: commit the family with no id anywhere; run + python scripts/assign_filament_ids.py (or read the id CI prints in its failure message and paste it). + A --mint "<Vendor>/<Family>" one-shot prints an id without touching the tree.

+ +

Structure: the id lives in exactly one place

+
+ family shape + + + Elegoo PLA Matte @base + instantiation:false · filament_id: "OFq3xT9k" ← only here + + + + + + …@Centauri Carbon + inherits @base · no id key + compat: {CC 0.4} + + …@CC 0.2 nozzle + inherits @base · no id key + compat: {CC 0.2} + + …@Neptune 4 + inherits @base · no id key + compat: {N4, N4 Pro} + + disjoint compatible_printers = the PR #14459 invariant, by construction + family identity is DECLARED — an optional "filament_family" key on the root overrides name derivation + multi-root families are legal (Qidi's per-series bases) — every root must declare the identical id + +
+ +

Reserved namespaces — never mint or hand-write into

+
+ the id space, partitioned + + + + + + + + + GF* + Bambu AMS / RFID — frozen + + QD_* + Qidi device — frozen + + P[0-9A-Fa-f]{7} · "null" + user-custom presets + + OGF* + legacy shapes + grandfathered, closed + + OF[0-9A-Za-z]{6} + open — minted only + + Byte-copies of authentic Bambu ids stay legal where the checked-in shared_catalog sanctions the family (BBL, OFL, Fiberon). + Everything already shipped and unambiguous is snapshot-frozen exactly as-is — the migration touches only colliding families. + +
+
Accepted trade-off: minted ids are opaque — OFq3xT9k doesn't say “PLA”. + The family name sits in the same file; in exchange there is no registry, no “next free number” ceremony, no PR races, + and forks mint the same id upstream expects. The mnemonic registry-grammar runner-up is preserved in §8 if you prefer it — + everything else in this plan works under either format.
+
+ + +
+
§4 error taxonomy — goal 2
+

Eleven patterns explain all 356 groups

+

Classified group-by-group against the actual profile files, then independently spot-checked + (1 substantive disagreement in 14 samples, corrected). The task's two known patterns cover about half; the rest + are new findings.

+ +
+ what's actually wrong — classified groups + + + P1 copy_paste_id — different materials share an id verbatim + 167 + P2 wrong_inherits / id-less product line + ~87 + P3 generic_family_overlap — branded preset rides a generic id + 68 + P4 overclaim_compat — broader variant claims a dedicated printer + 24 + other — deliberate coexistence, hygiene, one true duplicate + 21 + + +

Fixes across all groups: 319 × mint a fresh id · 21 × trim compatible_printers · + 21 × split compat-or-id · 5 × re-point inherits · 1 × merge. Which preset keeps a contested id follows a + mechanical precedence: Bambu-catalog material → OFL generic family → historical first owner.

+
+ +
+
P1copy_paste_id~167
+

The id came along when a profile was copied. Qidi stamped GFB99 into 317 files; + Peopoly put PLA-Silk's id on ABS.

+
fix — impostor families get minted ids on their roots; the owner keeps the id.
+
P2wrong_inherits / no root~87
+

A product line never got its own @base — every variant inherits another family's id. + Flashforge's umbrella collapses ~140 presets into one id.

+
fix — create per-family roots with minted ids; re-point inherits. Never delete the old + shadow files — convert them (they carry real config).
+
P3generic_family_overlap~68
+

A vendor-branded filament rides a generic family id via inheritance, colliding with the true generic + on the same printer.

+
fix — branded → minted id. True generic tunings instead join the OFL family with matching alias. + Sovol is the elegant case: just delete its wrong id lines and inherit OFL's.
+
P4overclaim_compat~24
+

Same material; the broad variant claims a printer that a dedicated variant covers — the BBL H2DP pattern + from PR #14459.

+
fix — trim the broader preset's compatible_printers. Ids untouched.
+
P5template-carried idin P1/P2
+

The id sits on a shared settings template (fdm_filament_*), so every family that inherits + the template collapses onto it (Prusa, Ginger Additive).

+
fix — move ids off templates onto family roots.
+
P6OFL-internal collision16 ids
+

One OFL id spans several materials — and OFL presets are visible on every printer. + OGFL06 = eSUN PLA-Marble and Fiberon PETG-ESD.

+
fix — fix OFL first: it's the base bundle every vendor resolves against.
+
P7alias-mismatch re-exposure10 live
+

A vendor tunes a generic but renames it; alias shadowing fails and the OFL preset resurfaces beside it + (Snapmaker PolyTerra J1 PLA).

+
fix — rename-to-alias where it's genuinely the same family, else mint.
+
P8per-variant ids~210 presets
+

The opposite failure: every nozzle variant has its own id (Prusa, SeeMeCNC, Afinia _##). + No ambiguity — but devices can't recognize the material across nozzles.

+
fix — grandfather (they're unambiguous); converge opportunistically; document as anti-pattern.
+
P9format violationshygiene
+

Ids with spaces ("GFPLA Silk"), 11-char ids, invented GF-shaped ids colliding with + Bambu's real allocations.

+
fix — disappears as a byproduct of re-minting; the unambiguous rest is snapshot-frozen.
+
P10cross-vendor semantic67 ids
+

Same id, different material, different vendors — feeds wrong name/type/temperature data to the globally-matching + consumers (§1).

+
fix — mostly eliminated by P1–P3 re-minting; benign same-material generic sharing is legalized + by the snapshot.
+
P11deliberate coexistence4
+

Snapmaker “Benchy” demo presets coexist on purpose (gated by compatible_prints, which the id check + can't see); one preset lists the same printer three times.

+
fix — mint ids for demo presets; de-duplicate list entries; add a lint.
+
+
+ + +
+
§5 migration plan
+

Fresh ids only, family-atomic, names never change

+

The persistence analysis makes one strategy provably safe — and everything else forbidden.

+ +

What survives an id change

+ + + + + + + + + + +
surfacebehavior across releasesverdict
User presets that inherit a system presetfilament_id re-derived from the parent on every load Preset.cpp:1658-1682safe
Saved 3mf projectspresets resolve by name + config equality, never by id Preset.cpp:2490-2576safe
Klipper / Creality / Snapmaker synctray ids derived at runtime from the installed bundlesafe
User root custom presetscopied a system id at creation and persist it forever — AMS auto-match falls back to generic-by-typelow residue
Qidi QD_* idsencode the device protocol QidiPrinterAgent.cpp:146 — an exact-match contractfrozen
BBL GF* idslive on RFID tags and printer-side records; hardcoded k-values in C++frozen
Recycling an old id for a different materialstale ids in user roots / old 3mfs would silently match the wrong materialforbidden, forever
Renaming / deleting preset namesuser presets whose inherits no longer resolves are dropped at load Preset.cpp:1687-1691forbidden (use renamed_from if unavoidable)
+ +

Phases

+
+
0
+

Tooling + snapshot — no profile changes

+

Land scripts/assign_filament_ids.py, the extended CI checks in ratchet mode, the validator OFL + cross-check and the runtime warning. Generate filament_id_snapshot.json (id→families multimap over main) + and an empty retired_ids.json; both are checked in and append-only.

+
+
1
+

OrcaFilamentLibrary first

+

OFL is the base bundle every vendor resolves against. Fix its 16 internal collisions and give + Generic PETG HF/PETG-CF/PP-CF/… @System their own family roots instead of collapsing into their + parent generic. Unambiguous ids stay byte-identical.

+
+
2
+

Per-vendor PRs, worst first — each widens the CI ratchet

+

Qidi → Flashforge → Elegoo → Prusa → Cubicon → Anycubic → InfiMech → Snapmaker → long tail (22 vendors, + mostly 1–8 one-line fixes). Each merged PR appends its vendor to the workflow's -f -v scope + (today: -v BBL -f); when all are in, drop -v and run tree-wide.

+
+
3
+

Delete the allowlists

+

Once tree-wide zero holds, the ratchet allowlists disappear and every check becomes a hard rule for anything + born after the snapshot.

+
+
+ +
+ where the work is — collision groups per vendor + + + Qidi97 + Flashforge69 + Elegoo37 + Prusa31 + Cubicon17 + Anycubic14 + InfiMech14 + Snapmaker11 + Artillery8 + Creality8 + FlyingBear8 + Sovol6 + 18 more40 total (Volumic 6 · Ratrig 5 · Chuanying 4 · Dremel 3 · 4×2 · 10×1) + + +

Vendor observations show these are systematic mistakes, not hundreds of independent bugs: Qidi is one + blanket-stamp in three profile generations; Elegoo is a single inherit-the-class-base habit; Sovol is fixed by deleting + six wrong lines.

+
+ +

The migration script's contract (hardened by the adversarial pass)

+ + + + + + + +
rulewhy
Re-mint everything — id literals in analysis notes are ignored; only group membership, fix category and keep-id precedence are consumed. Assert no emitted id matches ^(GF|QD_|P[0-9A-Fa-f]{7}$).~40% of classification notes suggested ids in the old invented-GF culture; CI would reject them.
Family-atomic — re-idding any preset re-ids every same-family sibling in the same commit, even outside the collision group.Otherwise a family splits across two ids (FlyingBear GFB99 @S1 vs @Ghost7) — worse than the bug being fixed.
Bounded diff — a vendor PR may only touch collision-group files + same-family siblings; every id that is unambiguous today stays byte-identical.Makes each PR mechanically auditable.
Config-equivalence gate — flattened effective config of every preset must be identical before/after, except the prescribed id/inherits/compat edits.Makes structural conversions provably behavior-neutral (Flashforge's id-less shadow files become named family roots carrying their config byte-for-byte).
No deletions, no renames — redundant twins are re-minted, not dropped; consolidation via renamed_from is a separate human-reviewed cleanup.Deleting a name silently drops users' derived presets at load.
+
+ + +
+
§6 enforcement
+

Ratchets, not absolutes

+

The grandfathered landscape keeps today's benign sharing legal; the checks forbid anything new. + All checks import the same mint function — the setting_id precedent.

+ + + + + + + + + + + +
#checkwhere
1Format — valid iff OF[0-9A-Za-z]{6} or in the snapshot or vendor==BBL or QD_* in Qidi. The legacy set is closed.orca_extra_profile_check.py
drop BBL-only gate :292, OFL skip :601
2Uniqueness ratchet — tree-wide id→families multimap; no id may gain a family claim not recorded in the snapshot (shared_catalog is the sanctioned exception).
3Structure ratchet — id key only on roots; every instantiated preset resolves an effective id (simulated loader walk); all family members resolve identically; no preset may override its inherited id (the Generic SBS drift class).
4Mint conformance — a new id must equal the mint (or a salt iteration); the failure message prints the expected value so hand-editors can paste it.
5Stability — an (id, family) pair on main may not change or vanish, following renamed_from chains, unless listed in a maintainer-gated migrations file. Retired ids go to an append-only ledger and are never redefined.
6Alias hygiene — a preset inheriting an OFL Generic * @System (no own id in its chain) must keep the OFL base name and non-empty compatible_printers; the error names the rename as the cause.
7OFL cross-check — extend check_duplicate_filament_subtypes to include OFL presets in every vendor's per-printer check, minus alias-excluded ones. m_excluded_from is already populated in validator context, so the 32 shadowed pairs won't false-positive and the 10 live ones are caught. Widen CI's -f per vendor.C++ validator
PresetBundle.cpp:5654 · :2302
8Runtime backstop — log a warning when the AMS-sync find_if sees 2+ compatible presets for one id. The only layer that can see side-loaded and forked bundles. One line.runtime
PresetBundle.cpp:3132/3233
+ +

Plus: the rule document ships in-repo (doc/developer-reference/filament_id.md) so CI messages + have a stable link, and the profile-PR template gets one checkbox: “new materials: no filament_id key anywhere — + CI prints the minted id.”

+
+ + +
+
§7 evidence
+

How this was verified

+

The analysis was run as a 52-agent pipeline over the real tree and real git history, with an + adversarial design phase — findings were attacked before being adopted.

+ +
+ methodology + + + + + + + + + 5 code analysts + runtime · persistence · loader + Bambu grammar · git history + + 38 classifiers + every collision group, read + from the actual profile files + + ground truth + audit script = validator + 1256 = 1256 · exact + + + 3 designs + deterministic mint + registry grammar + structure-only + + + 2 judges + both chose the mint + 58 / 50 / 56 + 60 / 54 / 56 + + + 3 attackers + 35 scenarios + authors · runtime · + migration mechanics + every “breaks” → + an amendment §3–§5 + spot-check: 1/14 + + + + + + + + + +

Amendments that came out of the attack pass: family identity declared on roots (not name-derived — + Afinia PLA@HS has no space before @); multi-root families legalized; checks 2–3 as + ratchets, not absolutes; the no-deletion rule; shadow-file conversion instead of deletion; classification id + literals quarantined; diameter siblings; case-insensitive reservation of the user id space.

+
+ +
+ Key discoveries that reshaped the design (with sources) +
+

· The “26 Flashforge presets with no id” were a false alarm — the loader resolves them through the OFL base-bundle + fallback to OGFL99/OGFG99 PresetBundle.cpp:4904-4909. The real bug is + ~10 different Flashforge PLA products sharing one id.

+

· A missing id can never ship: it's a hard load error that discards the whole vendor bundle + PresetBundle.cpp:5072, :5141.

+

· Qidi's QD_* ids are a device-protocol contract, discovered in + QidiPrinterAgent.cpp:146-152 — a second frozen namespace nobody had documented.

+

· User-custom ids occupy P + 7 hex CreatePresetsDialog.cpp:533, and + "null" is a sentinel — both reserved.

+

· OFL shadowing is keyed by alias, not id Preset.cpp:3684-3714, and is already active in + validator context PresetBundle.cpp:2302 — which is what makes check #7 precise.

+
+
+
+ + +
+
§8 open decisions
+

Five calls that are yours to make

+

Everything else in the plan holds under any of these answers. marks the recommendation.

+ +
+
D1id format
+
Opaque deterministic mint OFq3xT9k — no registry, no races, fork-friendly; judges 2/2.
+
Mnemonic registry grammar <NS><FAM><SEQ> — readable ids, but someone allocates numbers forever.
+
D2multi-vendor brands
+
shared_catalog list — sanction authentic Bambu ids for byte-matching families (Snapmaker's Fiberon), low churn.
+
Hoist those families into OFL — cleaner long-term, more restructuring now.
+
D3demo presets
+
Mint ids for Benchy-style presets — simple, keeps the validator strict.
+
Teach the validator compatible_prints gating — more machinery for 3 presets.
+
D4the 10 live OFL duplicates
+
Rename-to-alias where it's truly the same family (with renamed_from) — restores shadowing.
+
Mint vendor ids everywhere — safer mechanically, more ids in the world.
+
D5where the rule doc lives
+
In-repo doc/developer-reference/filament_id.md — CI messages need a stable link.
+
Wiki-only — discoverable, but drifts from the checks that enforce it.
+
+ +
+ Suggested first step: land phase 0 (tooling + snapshot, zero profile changes). It is entirely additive, + makes every later PR mechanically checkable, and turns the 356-group backlog into a shrinking allowlist that CI + reports on every profile PR. +
+
+ +
+ + + + diff --git a/filament_id_plan.md b/filament_id_plan.md new file mode 100644 index 0000000000..7dc4b43d04 --- /dev/null +++ b/filament_id_plan.md @@ -0,0 +1,397 @@ +# filament_id: generation rule + system-profile fix plan + +Follow-up to PR #14459 (commit `c2e91cb8`, validator `-f` / `check_duplicate_filament_subtypes`). +Goal 1: a filament_id generation rule for all vendors. Goal 2: an error-pattern taxonomy and a +migration plan that removes every ambiguous filament_id, without touching Bambu (BBL) profiles. + +All numbers below are reproducible: a loader-faithful audit script re-derives the validator's +output **exactly** (1256/1256 printer-level errors, 356 logical collision groups, 30 vendors). +Every code claim was verified against source with `file:line` references. + +--- + +## 0. Executive summary + +- `filament_id` is a **material-family id**: one id per commercial product line, shared by all + of that material's per-printer/per-nozzle variants. Matching is always `(filament_id + + printer compatibility)`; the invariant from PR #14459 is *per printer preset, at most one + compatible instantiated filament preset per id*. +- Every modern device ecosystem funnels through this id — not just Bambu AMS: Qidi box, + Creality CFS, Klipper AFC/Happy Hare, Snapmaker all emit/consume `tray_info_idx` + (see §1). Several consumers match **globally, without printer scoping**, so two *different + materials* sharing one id is unsafe even across vendors. +- **Proposed rule (§3):** deterministic, script-minted ids — `OF` + 6 base62 chars from + `uuid5(vendor + family)`, declared **only on family-root (`@base`) presets**; variants inherit. + Nobody ever invents an id by hand; CI prints the expected id when one is missing. Existing + unambiguous ids are grandfathered and frozen; `GF*` (Bambu), `QD_*` (Qidi device protocol), + and `P<7-hex>` (user custom presets) are reserved namespaces that must never be minted into. + This was selected by an adversarial design/judge process over a registry-grammar alternative + and a structure-only alternative, then stress-tested; amendments from that stress test are + folded in below. +- **Migration (§5):** fresh-never-reused ids only, family-atomic, names never changed. This is + provably safe: user presets re-derive `filament_id` from their parent on every load + (`Preset.cpp:1658-1682`), 3mf resolves presets by name+config (`Preset.cpp:2490-2576`), and + Klipper/Creality/Snapmaker derive tray ids at runtime. One PR per vendor; CI's `-f` scope + ratchets per vendor until tree-wide. + +--- + +## 1. How filament_id actually works (verified) + +### Consumers and scoping + +All device integrations converge on one pipeline: device/agent sets `tray_info_idx` → +`DevAmsTray.setting_id` → `Sidebar::build_filament_ams_list` (`Plater.cpp:3423-3493`) → +`PresetBundle::sync_ams_list` / `get_ams_cobox_infos` (`PresetBundle.cpp:3112-3308`) match it +against filament presets. + +| Ecosystem | Where the id comes from | Effect of changing a system id | +|---|---|---| +| BBL AMS | device-side (RFID / user tray setting), `DeviceManager.cpp:3823+` | breaks matching — **frozen by mandate** | +| Qidi box | built from device enums: `"QD_" + series + "_" + vendor + "_" + type_idx`, `QidiPrinterAgent.cpp:146-152`; needs an exactly-matching visible preset | breaks matching — **`QD_*` ids are a frozen device contract** | +| Creality CFS | runtime brand/type scoring returns current preset's id (`CrealityPrintAgent.cpp:46-118`) | invisible | +| Klipper (AFC / Happy Hare) | runtime `filament_id_by_type` (`MoonrakerPrinterAgent.cpp:808,936`) | invisible | +| Snapmaker | runtime color/vendor/type match (`SnapmakerPrinterAgent.cpp:22-64`) | invisible | + +Matching is printer-scoped (`is_compatible`) in the AMS sync paths and all printer agents — this +is what makes the per-printer invariant sufficient there. But several consumers match +**globally by id alone**, first match wins: + +- `get_filament_by_filament_id("")` — tray display name, `filament_is_support`, + `temperature_vitrification` warnings (`PresetBundle.cpp:690-733`; callers + `DevFilaBlackList.cpp:70`, `Plater.cpp:3453`, `SelectMachine.cpp:3560,4623`). The code + comment at `:695` states the assumption outright: an id maps to ONE material globally. +- `MachineObject::setting_id_to_type` (`DeviceManager.cpp:2538`), calibration-history name + lookup (`CaliHistoryDialog.cpp:62`), custom-filament cloud grouping (`Preset.cpp:2839`). +- The slicing pipeline itself: multi-nozzle filament grouping merges project filaments whose + `(filament_id, color)` match (`FilamentGroup.cpp:513-528` via `ToolOrdering.cpp:1164`). + +**Consequence:** within one printer, duplicate ids break AMS matching (silent first-wins, +`find_if` at `PresetBundle.cpp:3132/3233`; the AMS tray-edit dialog even *hides* the second +preset, `AMSMaterialsSetting.cpp:894-897`). Across vendors, the same id on *different +materials* feeds wrong name/type/vitrification data to the global consumers and can merge +different materials into one nozzle group. Same id on the *same* material (e.g. `GFL99` = +Generic PLA in 29 vendors) is comparatively benign — those attributes agree. + +### Identity machinery + +- **Effective id resolution** (`PresetBundle.cpp:4842-5080`): own `filament_id` key → vendor + `filament_id_maps[inherits]` (file order in the vendor index is load-bearing) → + OrcaFilamentLibrary base-bundle map. An instantiated system filament that resolves *no* id is + a hard load error that discards the whole vendor bundle (`:5072`, throw at `:5141-5147`) — + so "missing id" cannot ship; what looked like 26 id-less Flashforge presets actually resolve + to OFL's `OGFL99`/`OGFG99` through the base-bundle fallback. +- **Two family-identity systems exist**: `filament_id` (device matching) and `alias` (name + before `" @"`). OFL shadowing is keyed on **alias**: `update_library_profile_excluded_from` + (`Preset.cpp:3684-3714`) hides an OFL preset (empty `compatible_printers` = compatible with + everything, `Preset.cpp:837`) on printers claimed by a same-alias vendor preset. There is + **no id-based shadowing**. A vendor preset that tunes an OFL generic but renames it + re-exposes the OFL preset and creates a live duplicate. The rule below aligns the two + systems: one family = one alias = one id. +- **User-custom id space**: user-created filaments get `"P" + md5(name)[0:7]` (8 chars, + `CreatePresetsDialog.cpp:533`), or *reuse a system id* when the base name matches an existing + preset (`:510-528`). `"null"` is used as a sentinel. Root user presets persist their id + forever; inheriting user presets re-derive it on every load. + +## 2. The id landscape today + +**Bambu's grammar** (derived from all 1970 BBL instantiated presets; BBL is internally clean — +181 id definitions, 0 duplicates): + +- Classic `GF`: letter = family (A Bambu-PLA, B ABS/ASA, C PC, G PETG/PCTG, + L third-party+generic PLA, N PA/PPA, P PP/PE, R misc, S support, T PET/PPS, U TPU). + Numbers: 00-49 branded ascending, 50-59 fiber-filled, 60-70 partner block, **95-99 generic + tier descending** (99 = the family's plain generic). +- Brand partners `GF`: GFPM Polymaker, GFOT Overture, GFSNL SUNLU, GFNMK + Numakers. One id per product line; never per color, never per printer/nozzle/diameter. +- Structural rule: the id lives on the material's `@base`; every variant inherits it. +- Hardcoded in C++: `GFS00/GFS01` support check (`DeviceManager.cpp:4739`), per-family PA + defaults `GFU01/03/04` (`CalibUtils.cpp:54-75`) — `GF*` is Bambu's space, byte-frozen. + +**Everything else is ad-hoc, invented by individual contributors and imitated** (full history +in §7): OFL's `O`-prefix mirrors (`OGFA00`; introduced 2025-03-31, commit `8c4a65e3e1`), +Tiertime/Afinia `GFx##_##` per-printer-line suffixes, SeeMeCNC per-nozzle ids, LH `LHF_pla`, +LONGER 11-char pseudo-GF ids, Anycubic ids **with spaces** (`"GFPLA Silk"`), Prusa ids that are +entire preset names (36 chars), and mass copy-paste of `GFL99/GFB99/GFG99` onto everything +(Qidi alone stamped `GFB99` into **317 files** across all materials). The only guidance that +ever existed was "≤ 8 chars" — enforced for BBL only (`orca_extra_profile_check.py:292,320`), +and the (now removed) profile wiki's own examples *taught* id copy-pasting. + +**The damage, quantified** (audit reproduces validator 1256/1256): + +| Ledger | Count | +|---|---| +| Within-vendor logical collision groups (validator `-f`) | **356** across 30 vendors (1256 printer-level errors) | +| OFL×vendor same-id groups (validator blind spot) | 42 — of which **10 are live** (alias mismatch defeats shadowing); 32 already neutralized by alias shadowing | +| OFL-internal: one id, several materials, visible on every printer | **16 ids** (e.g. `OEPLAB00` = 14 distinct Elegoo PLA products; `OGFL06` = eSUN PLA-Marble *and* Fiberon PETG-ESD) | +| Cross-vendor semantic collisions (same id, different materials) | **67 ids** (e.g. `GFU99` also covers a PEBA; Anycubic minted `GFL95` "Matte" ≠ Bambu `GFL95` "High Speed") | + +Worst vendors by groups: Qidi 97, Flashforge 69, Elegoo 37, Prusa 31, Cubicon 17, +Anycubic 14, InfiMech 14, Snapmaker 11, Artillery 8, Creality 8, FlyingBear 8. + +--- + +## 3. The rule (proposal) + +Selected by a 3-design / 2-judge adversarial process (deterministic-mint won over +registry-grammar and structure-only on ambiguity-prevention, contributor simplicity, and +enforceability), then hardened by three adversarial review passes. This section is written as +the future authoring doc. + +### 3.1 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`, no id key). Tuning a +> generic material → **join the OFL family** (inherit the `Generic X @System` preset, keep the +> `Generic X` base name, add no id). + +Same id / new id at a glance: + +| 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's a printer variant) | +| "High-speed" selectable *alongside* the normal preset on one printer | new id (it's a product line) | + +### 3.2 Structure + +1. **One family = one root.** Each material family has root preset(s) (`instantiation:false`, + typically ` @base`) and only roots carry the `filament_id` key. Instantiated + variants inherit a root and never write `filament_id`. (A family MAY have several roots — + e.g. Qidi's per-series bases — but they must all declare the *identical* id.) +2. **Family identity is declared, not name-derived.** Default: the family name is the + instantiated presets' base name (name with `/\s?@.*$/` stripped — note *optional* space, + because `Afinia PLA@HS`-style names exist). When vendor naming makes that ambiguous, the + root declares an explicit `"filament_family"` key that overrides derivation; tooling errors + loudly when a root's derived family differs from its children's. +3. **Within a family, variants' `compatible_printers` are pairwise disjoint** — that *is* the + PR #14459 invariant, enforced by the validator. +4. **Generics belong to OFL.** A vendor tuning `Generic PLA` inherits + `Generic PLA @System`, keeps the `Generic PLA` base name/alias (so alias shadowing excludes + the OFL preset on those printers, `Preset.cpp:3684`), sets non-empty `compatible_printers`, + and writes no id. 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`). No id is ever recycled for a different material — stale ids live on in + user root presets and old 3mfs, and a recycled id would silently match the wrong material. + +### 3.3 Minting — nobody invents ids + +New family ids are computed, exactly like the `setting_id` precedent +(`scripts/assign_vendor_setting_ids.py` / `Slic3r::generate_preset_setting_id`): + +``` +filament_id = "OF" + base62_6( uuid5( NAMESPACE, "filament_family//" ) ) +``` + +8 chars total (satisfies the AMS length limit), same base62 derivation and a dedicated +namespace constant. On the astronomically rare collision with an existing id, the minter salts +the input (`.../1`, `/2`, …) until free; the result is simply frozen in the file. + +- **Script path:** author commits the family with *no id anywhere*; + `python scripts/assign_filament_ids.py` inserts the minted id into the root(s). Idempotent; + never rewrites a valid existing id. A `--mint "/"` one-shot prints the id + without touching the tree. +- **No-script path:** CI fails with the exact line to paste: + `family "MyBrand PLA" (vendor X) needs filament_id "OFq3xT9k" in "MyBrand PLA @base.json"`. + +**Reserved namespaces — never mint or hand-write into:** + +| Space | Owner | Status | +|---|---|---| +| `GF*` | Bambu AMS/RFID catalog | byte-copies of authentic Bambu ids only, and only where a checked-in `shared_catalog` list sanctions the family (BBL bundle; OFL mirrors; byte-matching families in other vendors, e.g. Snapmaker's Fiberon) | +| `QD_*` | Qidi device protocol | frozen; Qidi-only; exempt from family-shape checks | +| `P[0-9A-Fa-f]{7}`, `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp:533`) | never emitted for system presets (reserve case-insensitively) | +| everything already shipped | grandfather snapshot | frozen as-is (§5) | + +Trade-off accepted: minted ids are opaque (`OFq3xT9k` carries no "PLA" mnemonic — the family +name in the same file provides that). The judges preferred this over a Bambu-style extended +grammar because it removes the "who allocates the next number" ceremony, cannot race between +concurrent PRs, and needs no registry maintenance. If mnemonic ids are strongly preferred, the +runner-up design (`` + registry file) is documented in the workflow +records; everything else in this plan is unchanged under either format. + +### 3.4 What CI enforces (all vendors, ratcheted) + +Extend `scripts/orca_extra_profile_check.py` (it imports the same mint function; setting_id +precedent) and the C++ validator: + +1. **Format**: an id is valid iff `OF[0-9A-Za-z]{6}` **or** in the grandfather snapshot **or** + vendor==BBL **or** `QD_*` in Qidi. No whitespace/ASCII/length checks needed outside the + grandfather set — new ids are minted, and the grandfather set is closed. +2. **Uniqueness ratchet**: id→families multimap computed tree-wide; no id may acquire a family + claim not recorded in the snapshot (snapshot legalizes today's benign `GFL99`-style sharing; + new multi-claims are errors; `shared_catalog` entries are the sanctioned exception). +3. **Structure ratchet**: `filament_id` key only on roots; every instantiated filament must + resolve an effective id via the simulated loader walk; all members of one family resolve the + same id; **a preset may not declare an id different from its inherited effective id** (the + `Generic SBS` drift bug class). Pre-existing violations are snapshot-frozen; new ones error. +4. **Mint conformance**: an id new relative to the snapshot must equal the mint (or a salt + iteration); the error message prints the expected value. +5. **Stability**: an `(id, family)` pair on main may not change or vanish, *following + `renamed_from` chains* (so an honest rename passes), unless listed in a maintainer-gated + migrations file. Retired ids go to an append-only `retired_ids` ledger; a retired id may + never be defined again for any family. +6. **Alias hygiene for tuned generics**: a preset inheriting an OFL `Generic * @System` (with + no own id anywhere in its vendor chain) must keep the OFL base name and have non-empty + `compatible_printers` — error message names the rename as the cause. +7. **C++ validator**: extend `check_duplicate_filament_subtypes` (`PresetBundle.cpp:5654`) to + include OFL presets in every vendor's per-printer check, *minus* alias-excluded ones — + `m_excluded_from` is already populated in the validator context (`update_system_maps` at + `PresetBundle.cpp:2302`), so the 32 shadowed pairs won't false-positive and the 10 live ones + will be caught. Run `-f` per vendor in CI, widening as vendors are cleaned (§5). +8. **Runtime backstop** (one-line change): log a warning when the AMS-sync `find_if` + (`PresetBundle.cpp:3132/3233`) finds 2+ compatible presets for one id — the only layer that + can see side-loaded/forked bundles. + +--- + +## 4. Error-pattern taxonomy (goal 2) — with counts and fixes + +356 groups were classified by 37 agents reading the actual profiles, spot-checked +independently (1 substantive disagreement in 14 samples). Counts below fold the spot-check +corrections in. **Fix rule for all patterns: replacement id values are always freshly minted +`OF*`; the "which preset keeps the id" decision uses the precedence _Bambu-catalog material > +OFL generic family > family that historically introduced the id_.** + +| # | Pattern | Groups | Fix | +|---|---|---|---| +| P1 | `copy_paste_id` — different materials share an id verbatim (task's error 1). Qidi's `GFB99`×317-files epidemic; Anycubic's three id "eras"; Peopoly `GFSL99` on ABS | ~167 | impostor families get minted ids on their roots; owner keeps the id | +| P2 | `wrong_inherits` / id-less product lines — a variant inherits another family's root (PR #14459's Panchroma case) or a product line never got its own root (Prusa HF; Flashforge's ~140-preset `FFG01` umbrella) | ~87 | create per-family roots with minted ids; re-point `inherits`; **never** delete the id-less shadow/base files — convert them (they carry real config: Flashforge `fdm_filament_pla` differs materially from OFL's) | +| P3 | `generic_family_overlap` — vendor-*branded* preset rides a generic family id via inheritance (task's error 2, generalized). Includes the 10 live OFL duplicates | ~68 | branded presets get minted family ids; true generic tunings instead adopt the OFL family *with matching alias* (rule 3.2.4); Sovol is the elegant case — just **delete** its wrong own-id lines and let OFL ids flow through inheritance | +| P4 | `overclaim_compat` — same material, broader variant claims a printer that a dedicated variant covers (the BBL H2DP pattern fixed in #14459) | ~24 | trim `compatible_printers` of the broader preset (Dremel, Cubicon `@base`s that are also instantiated, Wanhao France Bowden/Direct) | +| P5 | template-carried id — id declared on a shared settings template (`fdm_filament_*`, `fdm_filament_common`) so every family inheriting it collapses (Prusa, Ginger Additive, Snapmaker TPU base) | inside P1/P2 counts | move ids off templates onto family roots | +| P6 | OFL-internal collisions — 16 ids spanning several materials, visible on every printer (Elegoo blocks, Elas `OGFA00`×3, `OGFL06` polymer mismatch, `Generic PETG HF/PETG-CF @System` missing own ids) | 16 ids | fix inside OFL first (it's the base bundle every vendor resolves against) | +| P7 | alias-mismatch re-exposure — vendor tunes a generic under a different name, OFL preset resurfaces (Snapmaker `PolyTerra J1 PLA` vs OFL `PolyTerra PLA`) | 10 live | rename-to-alias where it's genuinely the same family, else mint | +| P8 | per-variant ids — no ambiguity, but family semantics broken: every variant has its own id (Prusa name-ids, SeeMeCNC nozzle suffixes, Afinia/Tiertime `_##`, iQ) so device matching can't identify the material across nozzles | ~210 presets | grandfather (they're unambiguous); converge opportunistically; document as anti-pattern | +| P9 | format violations — spaces (`"GFPLA Silk"`), >8 chars (LONGER, SeeMeCNC, LH), GF-shaped inventions (Anycubic `GFL93-97`, CoLiDo `GFA99`) | in the above | fixed as a byproduct of re-minting; snapshot freezes the unambiguous rest | +| P10 | cross-vendor semantic collisions — 67 ids meaning different materials in different vendors (dangerous via the global unscoped consumers, §1) | 67 ids | mostly eliminated by P1-P3 re-minting; the remaining same-material generic sharing is legalized by the snapshot | +| P11 | deliberate coexistence & data hygiene — Snapmaker "Benchy" demo presets (gated by `compatible_prints`, which the id check can't see) and a self-collision from duplicate `compatible_printers` entries | 4 | give demo presets own minted ids; dedupe list entries; add a lint for duplicate array entries | + +New patterns beyond the two in the task (goal 2.3): P5-P11. + +--- + +## 5. Migration plan + +### Safety foundation (verified, §1/§7) + +Safe: fresh never-used ids, family-consistent; trims of `compatible_printers`; inherits +re-pointing; OFL id changes (children re-derive). Unsafe: touching `BBL`/`QD_*`; recycling or +swapping ids; splitting a family's id; **deleting or renaming preset names** (user presets +whose `inherits` no longer resolves are dropped at load, `Preset.cpp:1687-1691`) — if a name +must go, `renamed_from` coverage is mandatory. + +### Phases + +0. **Land the rule + tooling first** (no profile changes): `scripts/assign_filament_ids.py` + (mint + insert + `--mint`), the extended `orca_extra_profile_check.py` checks in + snapshot-ratchet mode, the C++ validator OFL cross-check, the runtime warning, the rule doc. + Generate `filament_id_snapshot.json` (id→families multimap over main) and empty + `retired_ids.json` — both checked in. +1. **OFL first** (it's the base bundle every vendor resolves against): fix the 16 internal + collisions (Elas/eSUN/DREMC copy-pastes get mints; `Generic PETG HF/PETG-CF/PP-CF/PP-GF/ + PE-CF/PLA Matte @System` get their own family roots+ids instead of collapsing into their + parent generic), keeping every current effective id that is unambiguous. +2. **Per-vendor PRs, worst-first**: Qidi → Flashforge → Elegoo → Prusa → Cubicon → Anycubic → + InfiMech → Snapmaker → the long tail (22 vendors, mostly 1-8 one-line fixes). Each PR flips + that vendor into CI's `-f` scope (`check_profiles.yml` currently `-v BBL -f`; append + vendors as they reach zero; when all are in, drop `-v` and run tree-wide). +3. **Delete the ratchet allowlists** once tree-wide zero holds; checks become hard rules for + everything born after the snapshot. + +### Migration-script contract (from the adversarial pass — important) + +- Consumes from the classification only: group membership, fix category, keep-id precedence, + inherits-repoint targets. **All replacement id values are recomputed via the mint** — id + literals in analysis notes (e.g. `GFA00_02`, `GFS98`, `GFG96`) are legacy-culture artifacts + and are ignored with a warning; assert no emitted id matches `^(GF|QD_|P[0-9A-Fa-f]{7}$)`. +- **Family-atomic**: re-idding any preset re-ids every same-family sibling in the same commit, + even siblings outside the collision group (FlyingBear `GFB99 @S1` vs `@Ghost7`); Prusa is + family-atomic per material (its HF/CF families span frozen `_N`-suffix ids — freeze what's + unambiguous, mint once per family for the colliding members). +- **Diff bound**: a vendor migration PR may only touch collision-group files + same-family + siblings of re-idded presets; every id that is per-printer-unambiguous today stays + byte-identical. +- **Config-equivalence gate**: dump every instantiated preset's flattened effective config on + main and on the PR head; the diff must be empty except `filament_id`/`inherits`/ + `compatible_printers` edits the plan prescribes (this is what makes the Flashforge + shadow-file conversions safe: each id-less `fdm_filament_*` shadow becomes a named vendor + family root carrying its config byte-for-byte, children re-pointed, then the shadow name + retired). +- **No deletions**: redundant presets (Flashforge's byte-identical `Generic X`/`Flashforge X` + twins) are re-minted, not dropped; consolidation with `renamed_from` is a separate, + human-reviewed cleanup. +- Expected user impact: none for inheriting user presets, 3mfs, Klipper/Creality/Snapmaker + sync. Residue: user *root* presets that copied an old system id keep it forever + (AMS auto-match falls back to generic-by-type — low severity, unavoidable from the repo). + +### Vendor-specific notes (from classification) + +- **Qidi (97)**: three profile generations. `QD_*` generics are correct and frozen; the fix is + the brand families (Bambu/HATCHBOX/Overture/PolyLite/Tinmorry/QIDI-brand) that all carry + `GFB99/GFG99/GFL99`. Multi-root families are the norm (`...@Q2-Series` / `@Q2C-Series` / + `@X-Max 4-Series` bases) — same mint lands in every series root of one family. +- **Flashforge (69)**: two umbrellas (`FFG01` ~140 presets; `GFB99/GFG99/GFL99` G3U-era) + + OFL-riding branded presets + shadow-file conversion (above). +- **Elegoo (37)**: single mistake — every commercial variant inherits the material-class + `@base` (`EB00`); mint one id per product line (Silk/Matte/PRO/Rapid/…), roots exist. +- **Prusa (31)**: HF product lines need their own roots; ids move off `fdm_filament_*` + templates; frozen name-shaped and `_N` ids stay. +- **Sovol (6)**: delete the wrong own-id lines; correct ids flow from OFL by inheritance. +- **Cubicon (17)**: `@base` presets are themselves instantiated + over-claiming; 9 file edits. + +--- + +## 6. Concrete work items (PR-sized) + +1. `scripts/assign_filament_ids.py` + mint function + tests (incl. the 14-group regression set + from the adversarial pass). *(new)* +2. `orca_extra_profile_check.py`: checks §3.4-1..6 in ratchet mode + snapshot/ledger files; + drop the BBL/OFL-only gate at `:292` and the OFL skip at `:601`. *(extend)* +3. C++ validator: OFL-aware `check_duplicate_filament_subtypes`; runtime ambiguity warning at + the two `find_if` sites. *(small)* +4. Rule documentation: `doc/developer-reference/filament_id.md` (recreate the path; wiki + cross-link) + profile-PR template checkbox ("new materials: no filament_id key anywhere; CI + prints the minted id"). *(new)* +5. OFL migration PR (phase 1). +6. Per-vendor migration PRs (phase 2), each widening CI `-f` scope. + +The audit tooling from this analysis (loader-faithful resolver; reproduces the validator +1256/1256) is in this session's scratchpad (`audit_filament_ids.py`) and is the natural seed +for items 1-2. + +## 7. Evidence & methodology + +- Validator ground truth: `OrcaSlicer_profile_validator -f` tree-wide → 1256 errors; audit + script reproduces exactly (356 logical groups after dedup by (vendor, id, preset-set)). +- Code analysis: 5 parallel agents over runtime consumers, persistence/migration surface, + loader semantics, Bambu grammar, and convention history — all claims carry `file:line`. +- Classification: 37 agents (one per vendor chunk) reading actual profile JSONs; 14-sample + independent re-derivation found 1 substantive error (a Flashforge group mislabeled + `missing_id`; corrected — the loader resolves those ids from OFL). +- Design: 3 independent designs → 2 judges (both chose the deterministic mint; scores 58/50/56 + and 60/54/56) → 3 adversarial attackers (35 scenarios; every `breaks` finding is folded into + §3.2-3.4/§5 as an amendment: declared families, multi-root support, ratchet-not-absolute + checks, no-deletion rule, shadow-file conversion, classification-id-literal quarantine, + diameter siblings, case-insensitive P-hex reservation, fork guidance). +- Key history: `OGF*` born 2025-03-31 (`8c4a65e3e1`, no PR); `_##` suffix born PR #9739; + 8-char check born PR #9574; wiki (with the id-copy-paste example) removed 2025-11-24 + (`f0d79b99eb`). + +## 8. Open decisions for maintainers + +1. **Id format**: opaque deterministic `OF*` mint (recommended, judges 2/2) vs mnemonic + registry grammar (runner-up). Everything else in the plan is format-agnostic. +2. **Multi-vendor brands** (Snapmaker ships Fiberon with authentic `GF*` ids): sanction via + `shared_catalog` (recommended, low churn) vs hoisting those families into OFL. +3. **Benchy-style demo presets**: mint ids per demo preset (recommended) vs teaching the + validator `compatible_prints` gating. +4. **Alias alignment**: fix the 10 live alias-mismatch OFL duplicates by rename-to-alias + (better long-term, needs `renamed_from`) vs minting vendor ids (safer, more ids). +5. **Where the rule doc lives**: in-repo `doc/` (recommended — CI messages need a stable link) + vs wiki-only. diff --git a/task.md b/task.md new file mode 100644 index 0000000000..b563759767 --- /dev/null +++ b/task.md @@ -0,0 +1,13 @@ +check commit c2e91cb86ce013dc0486419f21620975c220c3be and it's related PR. +currently most of the system profiles didn't follow the Bambu's profiles rule of filemant id. +we want to come up a rule for filament id generation for all vendors and a fixing plan for existing system profiles so that there is no ambiguous filament ids for any given printer. + +We have two major goals: +### goal 1 +figure out a strategy or filament id generation rule. we want to follow bambu's rule but they only care about their own profiles while we need to consider generic. and the filament id generation rule should be easy to understand and maintain for not just us but other profiles creators too. either a determistic rule by using script like setting_id rule. or a documented rule so developers can refer when manually creating profiles. and figure out a way to fix migrate/fix existing filament ids in current profiles. note: bambu profiles shouldn't be touch to maintain interoperbitly with their AMS. + +### goal 2 +in existing system profiles, the ambiguous can caused by different error patterns: +1. legit sub type don't have unique filament id due to copy-paste when creating profiles. in this case, we should assign filament unique filament id to it. +2. generic and specific filament with legit same filament id adds same printer into it's compatible_printers. in this case we should remove the printer from the generic filament's compatible_printers. +3. we need to figure out more error patterns and figure out the fix strategy From 1482fb81fdf7d22495767e16ce44f1501b4a29c3 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 2 Jul 2026 23:17:15 +0800 Subject: [PATCH 002/208] filament_id: deterministic mint rule, sanctioned-state ledger, validator hardening Phase 0 of the filament_id cleanup (filament_id_plan.md): - scripts/assign_filament_ids.py: mint OF-prefixed 8-char ids as uuid5(FILAMENT_ID_NAMESPACE, filament_family//) in the base62 derivation of the setting_id precedent; loader-faithful effective-id resolver (vendor inherits chain + OrcaFilamentLibrary fallback); CLI: default assign run (idempotent no-op on a fully-idded tree), --mint Vendor/Family, --update-snapshot, --check. - scripts/filament_id_snapshot.json: the sanctioned-state ledger (1092 ids, 1965 family claims over the current tree). The tree must equal it exactly, both directions, so every id/claim change lands as a reviewable diff; a PR snapshot diff is the maintainer gate. scripts/retired_filament_ids.json is the append-only retirement ledger; --update-snapshot refuses to resurrect retired ids and to sanction new reserved-namespace claims (GF*/QD_*/P-hex/ null) for non-owner vendors without --allow-shared-catalog. - orca_extra_profile_check.py: runs check_filament_ids() tree-wide (format, snapshot equality, mint conformance, retired reuse, alias hygiene for tuned OFL generics, reserved namespaces, structure ratchet). The pre-existing check_filament_id() 8-char rule stays BBL/OFL-scoped: grandfathered longer ids exist elsewhere (e.g. Prusa's 36-char name ids) and are frozen via the snapshot instead. - PresetBundle::check_duplicate_filament_subtypes now includes OrcaFilamentLibrary presets in every vendor's per-printer duplicate check; alias-shadowed library presets are excluded via the existing m_excluded_from population (verified live in the validator load path), so only genuinely visible duplicates are flagged. AMS tray-id resolution logs a warning when a filament_id matches 2+ compatible presets (pick unchanged). - doc/developer-reference/filament_id.md: the authoring rule; PR template gains a no-hand-written-ids checkbox. - scripts/tests/test_filament_id.py: 46 stdlib-unittest tests (mint vectors, resolver semantics, every check firing/silent, ledger round-trips, byte preservation, real-tree smoke). Verified: python -m unittest discover -s scripts/tests (46 OK); python scripts/orca_extra_profile_check.py exit 0 on the unmigrated tree; assign run is a no-op; rebuilt OrcaSlicer_profile_validator -l 2 exit 0; extended -f is strictly additive vs baseline (every baseline group preserved, all new groups involve library presets, alias exclusion proven by BBL-mirror absence on BBL printers). --- .github/pull_request_template.md | 2 + doc/developer-reference/filament_id.md | 169 + scripts/assign_filament_ids.py | 851 +++ scripts/filament_id_snapshot.json | 7811 ++++++++++++++++++++++++ scripts/orca_extra_profile_check.py | 12 + scripts/retired_filament_ids.json | 3 + scripts/tests/__init__.py | 0 scripts/tests/test_filament_id.py | 669 ++ src/libslic3r/PresetBundle.cpp | 49 +- 9 files changed, 9561 insertions(+), 5 deletions(-) create mode 100644 doc/developer-reference/filament_id.md create mode 100644 scripts/assign_filament_ids.py create mode 100644 scripts/filament_id_snapshot.json create mode 100644 scripts/retired_filament_ids.json create mode 100644 scripts/tests/__init__.py create mode 100644 scripts/tests/test_filament_id.py 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 From ab60229311b825b67676bd71a5ec50a61f649693 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:05:37 +0800 Subject: [PATCH 003/208] OrcaFilamentLibrary: give every material family its own filament_id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase 1 of the filament_id cleanup (filament_id_plan.md section 5): resolve the 16 library-internal ids that covered several different materials at once and were visible on every printer of every vendor (empty compatible_printers = compatible with all). - 7 existing @base roots get their copy-pasted id replaced with a fresh deterministic mint (Elas PLA/ASA copy-pastes of Bambu-mirror ids, eSUN copy-pastes incl. the OGFL06 eSUN PLA-Marble / Fiberon PETG-ESD polymer mismatch). - 30 rootless families (23 Elegoo product lines riding the material-class E*B00 ids, Generic PETG HF / PETG-CF / PP-CF / PP-GF / PE-CF / PLA Matte riding their parent generic's template id, PolyLite Dual PLA) each get a new config-equivalent @base root carrying the minted id, inheriting the family's previous parent; members re-pointed; index entries inserted before the @System entries (loader's filament_id map is built in file order). - Keepers by precedence stay byte-identical: Bambu-catalog mirrors (OGFA00/OGFB01/OGFG00, PolyLite/Overture/Fiberon lines), the OFL generics (OGFG99/OGFL99/OGFP97/OGFP99), and the Elegoo root-owning families. Verified: config-equivalence gate — flattened effective configs of all 5892 instantiated presets are byte-identical to pre-migration except the prescribed filament_id changes; orca_extra_profile_check.py exit 0; assign_filament_ids.py --check exit 0; validator -l 2 exit 0 (66 vendors); extended validator -f -v OrcaFilamentLibrary exit 0 (16 collision ids resolved) and -f -v BBL exit 0 (all 26 BBL-shared ids are same-material mirrors, alias-shadowed on every overlapping BBL printer — no BBL file touched). Snapshot: +37 minted ids, id_overrides +30 (new roots override their template parents by design). --- resources/profiles/OrcaFilamentLibrary.json | 120 ++++++++++ .../filament/Elas/Elas ASA @base.json | 2 +- .../filament/Elas/Elas PETG Basic @base.json | 2 +- .../filament/Elas/Elas PLA Basic @base.json | 2 +- .../filament/Elas/Elas PLA Pro @base.json | 2 +- .../Elegoo/Elegoo ASA-CF @System.json | 2 +- .../filament/Elegoo/Elegoo ASA-CF @base.json | 8 + .../filament/Elegoo/Elegoo PC-FR @System.json | 2 +- .../filament/Elegoo/Elegoo PC-FR @base.json | 8 + .../Elegoo/Elegoo PET-CF @System.json | 2 +- .../filament/Elegoo/Elegoo PET-CF @base.json | 8 + .../Elegoo/Elegoo PETG HF @System.json | 2 +- .../filament/Elegoo/Elegoo PETG HF @base.json | 8 + .../Elegoo/Elegoo PETG PRO @System.json | 2 +- .../Elegoo/Elegoo PETG PRO @base.json | 8 + .../Elegoo PETG Translucent @System.json | 2 +- .../Elegoo/Elegoo PETG Translucent @base.json | 8 + .../Elegoo/Elegoo PETG-CF @System.json | 2 +- .../filament/Elegoo/Elegoo PETG-CF @base.json | 8 + .../Elegoo/Elegoo PETG-GF @System.json | 2 +- .../filament/Elegoo/Elegoo PETG-GF @base.json | 8 + .../Elegoo/Elegoo PLA Basic @System.json | 2 +- .../Elegoo/Elegoo PLA Basic @base.json | 8 + .../Elegoo/Elegoo PLA Galaxy @System.json | 2 +- .../Elegoo/Elegoo PLA Galaxy @base.json | 8 + .../Elegoo/Elegoo PLA Glow @System.json | 2 +- .../Elegoo/Elegoo PLA Glow @base.json | 8 + .../Elegoo/Elegoo PLA Marble @System.json | 2 +- .../Elegoo/Elegoo PLA Marble @base.json | 8 + .../Elegoo/Elegoo PLA Matte @System.json | 2 +- .../Elegoo/Elegoo PLA Matte @base.json | 8 + .../Elegoo/Elegoo PLA PRO @System.json | 2 +- .../filament/Elegoo/Elegoo PLA PRO @base.json | 8 + .../Elegoo/Elegoo PLA Silk @System.json | 2 +- .../Elegoo/Elegoo PLA Silk @base.json | 8 + .../Elegoo/Elegoo PLA Sparkle @System.json | 2 +- .../Elegoo/Elegoo PLA Sparkle @base.json | 8 + .../Elegoo PLA Translucent2 @System.json | 2 +- .../Elegoo/Elegoo PLA Translucent2 @base.json | 8 + .../Elegoo/Elegoo PLA Wood @System.json | 2 +- .../Elegoo/Elegoo PLA Wood @base.json | 8 + .../filament/Elegoo/Elegoo PLA+ @System.json | 2 +- .../filament/Elegoo/Elegoo PLA+ @base.json | 8 + .../Elegoo/Elegoo PLA-CF @System.json | 2 +- .../filament/Elegoo/Elegoo PLA-CF @base.json | 8 + .../Elegoo/Elegoo Rapid PETG @System.json | 2 +- .../Elegoo/Elegoo Rapid PETG @base.json | 8 + .../Elegoo/Elegoo Rapid PLA+ @System.json | 2 +- .../Elegoo/Elegoo Rapid PLA+ @base.json | 8 + .../Elegoo/Elegoo Rapid TPU 95A @System.json | 2 +- .../Elegoo/Elegoo Rapid TPU 95A @base.json | 8 + .../filament/Generic PE-CF @System.json | 2 +- .../filament/Generic PE-CF @base.json | 8 + .../filament/Generic PETG HF @System.json | 2 +- .../filament/Generic PETG HF @base.json | 8 + .../filament/Generic PETG-CF @System.json | 2 +- .../filament/Generic PETG-CF @base.json | 8 + .../filament/Generic PLA Matte @System.json | 2 +- .../filament/Generic PLA Matte @base.json | 8 + .../filament/Generic PP-CF @System.json | 2 +- .../filament/Generic PP-CF @base.json | 8 + .../filament/Generic PP-GF @System.json | 2 +- .../filament/Generic PP-GF @base.json | 8 + .../Polymaker/PolyLite Dual PLA @System.json | 2 +- .../Polymaker/PolyLite Dual PLA @base.json | 8 + .../filament/eSUN/eSUN PLA-Basic @base.json | 2 +- .../filament/eSUN/eSUN PLA-Marble @base.json | 2 +- .../filament/eSUN/eSUN PLA-Matte @base.json | 2 +- scripts/filament_id_snapshot.json | 214 +++++++++++++----- 69 files changed, 556 insertions(+), 92 deletions(-) create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index cd9abd8b0d..33c7ade795 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -584,6 +584,10 @@ "name": "Generic PE @System", "sub_path": "filament/Generic PE @System.json" }, + { + "name": "Generic PE-CF @base", + "sub_path": "filament/Generic PE-CF @base.json" + }, { "name": "Generic PE-CF @System", "sub_path": "filament/Generic PE-CF @System.json" @@ -672,10 +676,18 @@ "name": "Generic PETG @System", "sub_path": "filament/Generic PETG @System.json" }, + { + "name": "Generic PETG HF @base", + "sub_path": "filament/Generic PETG HF @base.json" + }, { "name": "Generic PETG HF @System", "sub_path": "filament/Generic PETG HF @System.json" }, + { + "name": "Generic PETG-CF @base", + "sub_path": "filament/Generic PETG-CF @base.json" + }, { "name": "Generic PETG-CF @System", "sub_path": "filament/Generic PETG-CF @System.json" @@ -864,6 +876,10 @@ "name": "Generic PLA High Speed @System", "sub_path": "filament/Generic PLA High Speed @System.json" }, + { + "name": "Generic PLA Matte @base", + "sub_path": "filament/Generic PLA Matte @base.json" + }, { "name": "Generic PLA Matte @System", "sub_path": "filament/Generic PLA Matte @System.json" @@ -1072,10 +1088,18 @@ "name": "Generic PP @System", "sub_path": "filament/Generic PP @System.json" }, + { + "name": "Generic PP-CF @base", + "sub_path": "filament/Generic PP-CF @base.json" + }, { "name": "Generic PP-CF @System", "sub_path": "filament/Generic PP-CF @System.json" }, + { + "name": "Generic PP-GF @base", + "sub_path": "filament/Generic PP-GF @base.json" + }, { "name": "Generic PP-GF @System", "sub_path": "filament/Generic PP-GF @System.json" @@ -1264,6 +1288,10 @@ "name": "Elegoo ASA @System", "sub_path": "filament/Elegoo/Elegoo ASA @System.json" }, + { + "name": "Elegoo ASA-CF @base", + "sub_path": "filament/Elegoo/Elegoo ASA-CF @base.json" + }, { "name": "Elegoo ASA-CF @System", "sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json" @@ -1356,6 +1384,10 @@ "name": "Elegoo PC @System", "sub_path": "filament/Elegoo/Elegoo PC @System.json" }, + { + "name": "Elegoo PC-FR @base", + "sub_path": "filament/Elegoo/Elegoo PC-FR @base.json" + }, { "name": "Elegoo PC-FR @System", "sub_path": "filament/Elegoo/Elegoo PC-FR @System.json" @@ -1412,6 +1444,10 @@ "name": "Elas PETG Basic @System", "sub_path": "filament/Elas/Elas PETG Basic @System.json" }, + { + "name": "Elegoo PET-CF @base", + "sub_path": "filament/Elegoo/Elegoo PET-CF @base.json" + }, { "name": "Elegoo PET-CF @System", "sub_path": "filament/Elegoo/Elegoo PET-CF @System.json" @@ -1420,26 +1456,50 @@ "name": "Elegoo PETG @System", "sub_path": "filament/Elegoo/Elegoo PETG @System.json" }, + { + "name": "Elegoo PETG HF @base", + "sub_path": "filament/Elegoo/Elegoo PETG HF @base.json" + }, { "name": "Elegoo PETG HF @System", "sub_path": "filament/Elegoo/Elegoo PETG HF @System.json" }, + { + "name": "Elegoo PETG PRO @base", + "sub_path": "filament/Elegoo/Elegoo PETG PRO @base.json" + }, { "name": "Elegoo PETG PRO @System", "sub_path": "filament/Elegoo/Elegoo PETG PRO @System.json" }, + { + "name": "Elegoo PETG Translucent @base", + "sub_path": "filament/Elegoo/Elegoo PETG Translucent @base.json" + }, { "name": "Elegoo PETG Translucent @System", "sub_path": "filament/Elegoo/Elegoo PETG Translucent @System.json" }, + { + "name": "Elegoo PETG-CF @base", + "sub_path": "filament/Elegoo/Elegoo PETG-CF @base.json" + }, { "name": "Elegoo PETG-CF @System", "sub_path": "filament/Elegoo/Elegoo PETG-CF @System.json" }, + { + "name": "Elegoo PETG-GF @base", + "sub_path": "filament/Elegoo/Elegoo PETG-GF @base.json" + }, { "name": "Elegoo PETG-GF @System", "sub_path": "filament/Elegoo/Elegoo PETG-GF @System.json" }, + { + "name": "Elegoo Rapid PETG @base", + "sub_path": "filament/Elegoo/Elegoo Rapid PETG @base.json" + }, { "name": "Elegoo Rapid PETG @System", "sub_path": "filament/Elegoo/Elegoo Rapid PETG @System.json" @@ -1592,54 +1652,106 @@ "name": "Elegoo PLA @System", "sub_path": "filament/Elegoo/Elegoo PLA @System.json" }, + { + "name": "Elegoo PLA Basic @base", + "sub_path": "filament/Elegoo/Elegoo PLA Basic @base.json" + }, { "name": "Elegoo PLA Basic @System", "sub_path": "filament/Elegoo/Elegoo PLA Basic @System.json" }, + { + "name": "Elegoo PLA Galaxy @base", + "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @base.json" + }, { "name": "Elegoo PLA Galaxy @System", "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @System.json" }, + { + "name": "Elegoo PLA Glow @base", + "sub_path": "filament/Elegoo/Elegoo PLA Glow @base.json" + }, { "name": "Elegoo PLA Glow @System", "sub_path": "filament/Elegoo/Elegoo PLA Glow @System.json" }, + { + "name": "Elegoo PLA Marble @base", + "sub_path": "filament/Elegoo/Elegoo PLA Marble @base.json" + }, { "name": "Elegoo PLA Marble @System", "sub_path": "filament/Elegoo/Elegoo PLA Marble @System.json" }, + { + "name": "Elegoo PLA Matte @base", + "sub_path": "filament/Elegoo/Elegoo PLA Matte @base.json" + }, { "name": "Elegoo PLA Matte @System", "sub_path": "filament/Elegoo/Elegoo PLA Matte @System.json" }, + { + "name": "Elegoo PLA PRO @base", + "sub_path": "filament/Elegoo/Elegoo PLA PRO @base.json" + }, { "name": "Elegoo PLA PRO @System", "sub_path": "filament/Elegoo/Elegoo PLA PRO @System.json" }, + { + "name": "Elegoo PLA Silk @base", + "sub_path": "filament/Elegoo/Elegoo PLA Silk @base.json" + }, { "name": "Elegoo PLA Silk @System", "sub_path": "filament/Elegoo/Elegoo PLA Silk @System.json" }, + { + "name": "Elegoo PLA Sparkle @base", + "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @base.json" + }, { "name": "Elegoo PLA Sparkle @System", "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @System.json" }, + { + "name": "Elegoo PLA Translucent2 @base", + "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @base.json" + }, { "name": "Elegoo PLA Translucent2 @System", "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @System.json" }, + { + "name": "Elegoo PLA Wood @base", + "sub_path": "filament/Elegoo/Elegoo PLA Wood @base.json" + }, { "name": "Elegoo PLA Wood @System", "sub_path": "filament/Elegoo/Elegoo PLA Wood @System.json" }, + { + "name": "Elegoo PLA+ @base", + "sub_path": "filament/Elegoo/Elegoo PLA+ @base.json" + }, { "name": "Elegoo PLA+ @System", "sub_path": "filament/Elegoo/Elegoo PLA+ @System.json" }, + { + "name": "Elegoo PLA-CF @base", + "sub_path": "filament/Elegoo/Elegoo PLA-CF @base.json" + }, { "name": "Elegoo PLA-CF @System", "sub_path": "filament/Elegoo/Elegoo PLA-CF @System.json" }, + { + "name": "Elegoo Rapid PLA+ @base", + "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @base.json" + }, { "name": "Elegoo Rapid PLA+ @System", "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json" @@ -1760,6 +1872,10 @@ "name": "Panchroma PLA UV Shift @System", "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @System.json" }, + { + "name": "PolyLite Dual PLA @base", + "sub_path": "filament/Polymaker/PolyLite Dual PLA @base.json" + }, { "name": "PolyLite Dual PLA @System", "sub_path": "filament/Polymaker/PolyLite Dual PLA @System.json" @@ -1904,6 +2020,10 @@ "name": "DREMC TPU 95A @System", "sub_path": "filament/DREMC/DREMC TPU 95A @System.json" }, + { + "name": "Elegoo Rapid TPU 95A @base", + "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @base.json" + }, { "name": "Elegoo Rapid TPU 95A @System", "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json index d6ca0d695b..961b8aa903 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json @@ -3,7 +3,7 @@ "name": "Elas ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB01", + "filament_id": "OFT3TqB6", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "activate_air_filtration": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json index 478210bb7d..145e0472ae 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG00", + "filament_id": "OFw4OHWE", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "complete_print_exhaust_fan_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json index abfa611aa3..64e0f025b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFbgt3u3", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json index 38313d1d55..faba40142f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFrgQ1Ns", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json index 13266c87b5..13ef86c2d9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @System", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "XT1aUl4pe9t0Ijwg", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json new file mode 100644 index 0000000000..ff15b78c5d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo ASA-CF @base", + "inherits": "Elegoo ASA @base", + "from": "system", + "filament_id": "OFpwg2Qh", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json index 1fecee514c..7d2ab85058 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @System", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "JcopkaXZ7YyLjIcw", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json new file mode 100644 index 0000000000..1f6564cbf1 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @base", + "inherits": "Elegoo PC @base", + "from": "system", + "filament_id": "OF79FFkO", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json index 0c1c4265b7..b7191e482b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "oloKoC4Bs8dXatMU", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json new file mode 100644 index 0000000000..9e669f1e14 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PET-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFJIImD5", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json index 35b941684a..d912550c88 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "d6gNuzrG00SXvMth", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json new file mode 100644 index 0000000000..2e3e74ef22 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG HF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFzrWlH5", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json index c16448b1e4..aa30920b7c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "fdfCAYQEoYa9DN6I", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json new file mode 100644 index 0000000000..4b63edb4ed --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG PRO @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OF102WKM", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json index 0346a8eef0..edb04a6dce 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "80Auuv3K7l8IptF3", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json new file mode 100644 index 0000000000..10b46e8f76 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFenGPBR", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json index 81e5b99afc..03de8dad0f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "bXRJMaXxB3V49x7R", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json new file mode 100644 index 0000000000..20897108cd --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFIGHU7W", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json index 48cd287ba6..f315756987 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "9NXaejLGh1VFX8bg", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json new file mode 100644 index 0000000000..1b62b3aeaa --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-GF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFMQJToc", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json index cdff566915..15d6f46a3f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "qHDFHECwAInvpuk2", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json new file mode 100644 index 0000000000..d361721096 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFICPchn", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json index 6874695462..6fd7f8f606 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "WXEEksjWsTbRyCPh", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json new file mode 100644 index 0000000000..a36b51384a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Galaxy @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF0M6QAQ", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json index 1cd70e904b..9c4c2075b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "yFdF2YmEMeCHiPxl", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json new file mode 100644 index 0000000000..b839aca5dc --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Glow @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFutwD6f", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json index 825a6c0dd9..755e42e758 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "kq7NS8IhIV4cBI1C", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json new file mode 100644 index 0000000000..7fc24ca532 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Marble @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF4fgpse", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json index e1361a4b5b..a05c57216e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "UykE255l5V0oS0Ca", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json new file mode 100644 index 0000000000..07c0dcf1ef --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Matte @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFQkWxJy", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json index 3526f87a69..fbc18fac42 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "62GiUVVZd8kx21vw", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json new file mode 100644 index 0000000000..368f6b89d9 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA PRO @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFsKqcQW", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json index 475354ca02..79ae01da5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "VkXguNj79KADxuYn", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json new file mode 100644 index 0000000000..a19d767778 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Silk @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFs6lLH7", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json index fc4070bbe7..c7c030ff5a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "VwZIFCojZLQLPrI1", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json new file mode 100644 index 0000000000..cdf18ad328 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Sparkle @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF8HQmJD", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json index 178976527f..28993f13b4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "q0koYRlO9X8xLXPM", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json new file mode 100644 index 0000000000..00d0e20932 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Translucent2 @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF9qvJxV", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json index abae441db5..a428f5605e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "pMgazYJG8tyTpAVE", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json new file mode 100644 index 0000000000..934992440e --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Wood @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFQhLoxN", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json index b2bd83416d..2315cd2ac4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "q7NpDtaD9dTq1HIZ", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json new file mode 100644 index 0000000000..23ae2c1ddb --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFDNiRTx", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json index 4ec26c71ba..9b79f54799 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "cYxM93L2KZBnAuWu", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json new file mode 100644 index 0000000000..3115358207 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA-CF @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFqh1Ngp", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json index 92b7cb43ef..7fd3f8d160 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid PETG @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "uUQSVOvP8tAaDqvB", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json new file mode 100644 index 0000000000..afdb0eda7a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PETG @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFVLuVmD", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json index f19e51bcf3..4f3ee82ced 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid PLA+ @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "HZ4nP67iAG7a243e", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json new file mode 100644 index 0000000000..21c1b99c63 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFD5e0sH", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json index 2006a6494b..3d15ba541c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid TPU 95A @System", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "WXLuO112bsdM37MI", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json new file mode 100644 index 0000000000..299f0cee8d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid TPU 95A @base", + "inherits": "Elegoo TPU @base", + "from": "system", + "filament_id": "OFmeQjRP", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json index 27ee56eb4b..8013a04973 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PE-CF @System", - "inherits": "fdm_filament_pe", + "inherits": "Generic PE-CF @base", "from": "system", "setting_id": "prroSXONXxaahNkq", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json new file mode 100644 index 0000000000..74aea8b342 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PE-CF @base", + "inherits": "fdm_filament_pe", + "from": "system", + "filament_id": "OFJfx0Cl", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json index e402cdf775..d755bf0aab 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG HF @System", - "inherits": "fdm_filament_pet", + "inherits": "Generic PETG HF @base", "from": "system", "setting_id": "wNH8CohYIh9y6ayx", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json new file mode 100644 index 0000000000..f8de64e2a8 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PETG HF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFfB1QKi", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json index 5ee99ffed9..1f4578ee06 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG-CF @System", - "inherits": "fdm_filament_pet", + "inherits": "Generic PETG-CF @base", "from": "system", "setting_id": "aRVqy4a3X1UTIKem", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json new file mode 100644 index 0000000000..21b93a089d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFDCk0cz", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json index d3a6d4813c..253a41f2ae 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA Matte @System", - "inherits": "fdm_filament_pla", + "inherits": "Generic PLA Matte @base", "from": "system", "setting_id": "RFs9eCKYOMUSmvZf", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json new file mode 100644 index 0000000000..931ec3ea7e --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFJsqMzx", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json index 65420e9dae..af36744f57 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PP-CF @System", - "inherits": "fdm_filament_pp", + "inherits": "Generic PP-CF @base", "from": "system", "setting_id": "TDHYN3fs5wwakgsM", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json new file mode 100644 index 0000000000..f1898eb1f6 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PP-CF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "OFRS2Ggt", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json index 931ee4b7b3..b4a4a94c9e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PP-GF @System", - "inherits": "fdm_filament_pp", + "inherits": "Generic PP-GF @base", "from": "system", "setting_id": "xfVrCZ7ySzkpdzX0", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json new file mode 100644 index 0000000000..2544bac78a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PP-GF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "OFMCMXSG", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json index 4d17382a38..ab02a798fc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json @@ -2,7 +2,7 @@ "type": "filament", "name": "PolyLite Dual PLA @System", "renamed_from": "PolyLite Dual PLA", - "inherits": "PolyLite PLA @base", + "inherits": "PolyLite Dual PLA @base", "from": "system", "setting_id": "ShKfsLXZ1EJ4HgKf", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json new file mode 100644 index 0000000000..fc31b9bc35 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "PolyLite Dual PLA @base", + "inherits": "PolyLite PLA @base", + "from": "system", + "filament_id": "OFsNZcid", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json index a627a10a4d..cef96aa7fc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL04", + "filament_id": "OFZhdVnP", "instantiation": "false", "filament_cost": [ "11.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json index 40c314585c..1b6302372c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL06", + "filament_id": "OFXmQgno", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json index 85c6049935..e4c42a3a5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL05", + "filament_id": "OF3GKs2i", "instantiation": "false", "filament_cost": [ "14.99" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 462098d581..9ebc007f87 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -826,10 +826,33 @@ "OrcaFilamentLibrary/Elas PETG Basic @base", "OrcaFilamentLibrary/Elas PLA Basic @base", "OrcaFilamentLibrary/Elas PLA Pro @base", + "OrcaFilamentLibrary/Elegoo ASA-CF @base", "OrcaFilamentLibrary/Elegoo PAHT @base", "OrcaFilamentLibrary/Elegoo PC @base", + "OrcaFilamentLibrary/Elegoo PC-FR @base", + "OrcaFilamentLibrary/Elegoo PET-CF @base", "OrcaFilamentLibrary/Elegoo PETG @base", + "OrcaFilamentLibrary/Elegoo PETG HF @base", + "OrcaFilamentLibrary/Elegoo PETG PRO @base", + "OrcaFilamentLibrary/Elegoo PETG Translucent @base", + "OrcaFilamentLibrary/Elegoo PETG-CF @base", + "OrcaFilamentLibrary/Elegoo PETG-GF @base", "OrcaFilamentLibrary/Elegoo PLA @base", + "OrcaFilamentLibrary/Elegoo PLA Basic @base", + "OrcaFilamentLibrary/Elegoo PLA Galaxy @base", + "OrcaFilamentLibrary/Elegoo PLA Glow @base", + "OrcaFilamentLibrary/Elegoo PLA Marble @base", + "OrcaFilamentLibrary/Elegoo PLA Matte @base", + "OrcaFilamentLibrary/Elegoo PLA PRO @base", + "OrcaFilamentLibrary/Elegoo PLA Silk @base", + "OrcaFilamentLibrary/Elegoo PLA Sparkle @base", + "OrcaFilamentLibrary/Elegoo PLA Translucent2 @base", + "OrcaFilamentLibrary/Elegoo PLA Wood @base", + "OrcaFilamentLibrary/Elegoo PLA+ @base", + "OrcaFilamentLibrary/Elegoo PLA-CF @base", + "OrcaFilamentLibrary/Elegoo Rapid PETG @base", + "OrcaFilamentLibrary/Elegoo Rapid PLA+ @base", + "OrcaFilamentLibrary/Elegoo Rapid TPU 95A @base", "OrcaFilamentLibrary/Eolas Prints PETG @System", "OrcaFilamentLibrary/Eolas Prints PETG Transition @System", "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant @System", @@ -924,8 +947,14 @@ "OrcaFilamentLibrary/FilAr PLA-mate Verde", "OrcaFilamentLibrary/FilAr PLA-mate Violeta", "OrcaFilamentLibrary/Generic PA-CF @System", + "OrcaFilamentLibrary/Generic PE-CF @base", + "OrcaFilamentLibrary/Generic PETG HF @base", + "OrcaFilamentLibrary/Generic PETG-CF @base", "OrcaFilamentLibrary/Generic PLA High Speed @System", + "OrcaFilamentLibrary/Generic PLA Matte @base", "OrcaFilamentLibrary/Generic PLA-CF @System", + "OrcaFilamentLibrary/Generic PP-CF @base", + "OrcaFilamentLibrary/Generic PP-GF @base", "OrcaFilamentLibrary/Generic PPA-GF @System", "OrcaFilamentLibrary/GreenGate3D PETG @base", "OrcaFilamentLibrary/NIT PETG @base", @@ -955,6 +984,7 @@ "OrcaFilamentLibrary/Panchroma PLA Temp Shift @base", "OrcaFilamentLibrary/Panchroma PLA Translucent @base", "OrcaFilamentLibrary/Panchroma PLA UV Shift @base", + "OrcaFilamentLibrary/PolyLite Dual PLA @base", "OrcaFilamentLibrary/PolyLite PETG @base", "OrcaFilamentLibrary/PolyLite PLA @base", "OrcaFilamentLibrary/PolyLite PLA Pro @base", @@ -4561,54 +4591,144 @@ "OrcaFilamentLibrary/Elegoo ABS" ], "OEASAB00": [ - "OrcaFilamentLibrary/Elegoo ASA", - "OrcaFilamentLibrary/Elegoo ASA-CF" + "OrcaFilamentLibrary/Elegoo ASA" ], "OEPAHTB0": [ "OrcaFilamentLibrary/Elegoo PAHT-CF" ], "OEPCB00": [ - "OrcaFilamentLibrary/Elegoo PC", - "OrcaFilamentLibrary/Elegoo PC-FR" + "OrcaFilamentLibrary/Elegoo PC" ], "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" + "OrcaFilamentLibrary/Elegoo 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+" + "OrcaFilamentLibrary/Elegoo PLA" ], "OETPUB00": [ - "OrcaFilamentLibrary/Elegoo Rapid TPU 95A", "OrcaFilamentLibrary/Elegoo TPU 95A" ], + "OF0M6QAQ": [ + "OrcaFilamentLibrary/Elegoo PLA Galaxy" + ], + "OF102WKM": [ + "OrcaFilamentLibrary/Elegoo PETG PRO" + ], + "OF3GKs2i": [ + "OrcaFilamentLibrary/eSUN PLA-Matte" + ], + "OF4fgpse": [ + "OrcaFilamentLibrary/Elegoo PLA Marble" + ], + "OF79FFkO": [ + "OrcaFilamentLibrary/Elegoo PC-FR" + ], + "OF8HQmJD": [ + "OrcaFilamentLibrary/Elegoo PLA Sparkle" + ], + "OF9qvJxV": [ + "OrcaFilamentLibrary/Elegoo PLA Translucent2" + ], + "OFD5e0sH": [ + "OrcaFilamentLibrary/Elegoo Rapid PLA+" + ], + "OFDCk0cz": [ + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PETG-CF", + "Flashforge/FusRock S-Multi", + "OrcaFilamentLibrary/Generic PETG-CF" + ], + "OFDNiRTx": [ + "OrcaFilamentLibrary/Elegoo PLA+" + ], + "OFICPchn": [ + "OrcaFilamentLibrary/Elegoo PLA Basic" + ], + "OFIGHU7W": [ + "OrcaFilamentLibrary/Elegoo PETG-CF" + ], + "OFJIImD5": [ + "OrcaFilamentLibrary/Elegoo PET-CF" + ], + "OFJfx0Cl": [ + "OrcaFilamentLibrary/Generic PE-CF" + ], + "OFJsqMzx": [ + "OrcaFilamentLibrary/Generic PLA Matte" + ], "OFLSBS99": [ "OrcaFilamentLibrary/Generic SBS" ], - "OGFA00": [ - "OrcaFilamentLibrary/Bambu PLA Basic", - "OrcaFilamentLibrary/Elas PLA Basic", + "OFMCMXSG": [ + "OrcaFilamentLibrary/Generic PP-GF" + ], + "OFMQJToc": [ + "OrcaFilamentLibrary/Elegoo PETG-GF" + ], + "OFQhLoxN": [ + "OrcaFilamentLibrary/Elegoo PLA Wood" + ], + "OFQkWxJy": [ + "OrcaFilamentLibrary/Elegoo PLA Matte" + ], + "OFRS2Ggt": [ + "OrcaFilamentLibrary/Generic PP-CF" + ], + "OFT3TqB6": [ + "OrcaFilamentLibrary/Elas ASA" + ], + "OFVLuVmD": [ + "OrcaFilamentLibrary/Elegoo Rapid PETG" + ], + "OFXmQgno": [ + "OrcaFilamentLibrary/eSUN PLA-Marble" + ], + "OFZhdVnP": [ + "OrcaFilamentLibrary/eSUN PLA-Basic" + ], + "OFbgt3u3": [ + "OrcaFilamentLibrary/Elas PLA Basic" + ], + "OFenGPBR": [ + "OrcaFilamentLibrary/Elegoo PETG Translucent" + ], + "OFfB1QKi": [ + "Flashforge/Flashforge HS PETG", + "OrcaFilamentLibrary/Generic PETG HF" + ], + "OFmeQjRP": [ + "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" + ], + "OFpwg2Qh": [ + "OrcaFilamentLibrary/Elegoo ASA-CF" + ], + "OFqh1Ngp": [ + "OrcaFilamentLibrary/Elegoo PLA-CF" + ], + "OFrgQ1Ns": [ "OrcaFilamentLibrary/Elas PLA Pro" ], + "OFs6lLH7": [ + "OrcaFilamentLibrary/Elegoo PLA Silk" + ], + "OFsKqcQW": [ + "OrcaFilamentLibrary/Elegoo PLA PRO" + ], + "OFsNZcid": [ + "OrcaFilamentLibrary/PolyLite Dual PLA" + ], + "OFutwD6f": [ + "OrcaFilamentLibrary/Elegoo PLA Glow" + ], + "OFw4OHWE": [ + "OrcaFilamentLibrary/Elas PETG Basic" + ], + "OFzrWlH5": [ + "OrcaFilamentLibrary/Elegoo PETG HF" + ], + "OGFA00": [ + "OrcaFilamentLibrary/Bambu PLA Basic" + ], "OGFA01": [ "OrcaFilamentLibrary/Bambu PLA Matte" ], @@ -4655,8 +4775,7 @@ "OrcaFilamentLibrary/Bambu ABS" ], "OGFB01": [ - "OrcaFilamentLibrary/Bambu ASA", - "OrcaFilamentLibrary/Elas ASA" + "OrcaFilamentLibrary/Bambu ASA" ], "OGFB02": [ "OrcaFilamentLibrary/Bambu ASA-Aero" @@ -4696,8 +4815,7 @@ "OrcaFilamentLibrary/Generic PC" ], "OGFG00": [ - "OrcaFilamentLibrary/Bambu PETG Basic", - "OrcaFilamentLibrary/Elas PETG Basic" + "OrcaFilamentLibrary/Bambu PETG Basic" ], "OGFG01": [ "OrcaFilamentLibrary/Bambu PETG Translucent" @@ -4715,21 +4833,14 @@ "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" + "OrcaFilamentLibrary/Generic PETG" ], "OGFGG300": [ "OrcaFilamentLibrary/GreenGate3D PETG" ], "OGFL00": [ - "OrcaFilamentLibrary/PolyLite Dual PLA", "OrcaFilamentLibrary/PolyLite PLA" ], "OGFL00-1": [ @@ -4745,16 +4856,13 @@ "OrcaFilamentLibrary/eSUN PLA+" ], "OGFL04": [ - "OrcaFilamentLibrary/Overture PLA", - "OrcaFilamentLibrary/eSUN PLA-Basic" + "OrcaFilamentLibrary/Overture PLA" ], "OGFL05": [ - "OrcaFilamentLibrary/Overture Matte PLA", - "OrcaFilamentLibrary/eSUN PLA-Matte" + "OrcaFilamentLibrary/Overture Matte PLA" ], "OGFL06": [ - "OrcaFilamentLibrary/Fiberon PETG-ESD", - "OrcaFilamentLibrary/eSUN PLA-Marble" + "OrcaFilamentLibrary/Fiberon PETG-ESD" ], "OGFL50": [ "OrcaFilamentLibrary/Fiberon PA6-CF" @@ -4796,8 +4904,7 @@ "Flashforge/Flashforge PLA Galaxy", "Flashforge/Flashforge PLA Luminous", "Flashforge/Generic PLA", - "OrcaFilamentLibrary/Generic PLA", - "OrcaFilamentLibrary/Generic PLA Matte" + "OrcaFilamentLibrary/Generic PLA" ], "OGFLC99": [ "OrcaFilamentLibrary/Generic CoPE" @@ -4841,13 +4948,10 @@ "OrcaFilamentLibrary/Numakers PLA+" ], "OGFP97": [ - "OrcaFilamentLibrary/Generic PP", - "OrcaFilamentLibrary/Generic PP-CF", - "OrcaFilamentLibrary/Generic PP-GF" + "OrcaFilamentLibrary/Generic PP" ], "OGFP99": [ - "OrcaFilamentLibrary/Generic PE", - "OrcaFilamentLibrary/Generic PE-CF" + "OrcaFilamentLibrary/Generic PE" ], "OGFPM001": [ "OrcaFilamentLibrary/Panchroma PLA" From 516267d869e968744d4a52986ebdf25ccd24d557 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:06:38 +0800 Subject: [PATCH 004/208] Qidi: re-mint copy-pasted filament_ids per material family Phase 2 of the filament_id cleanup, worst vendor first (97 collision groups, the GFB99/GFG99/GFL99 copy-paste epidemic). 435 in-place filament_id edits + 5 compatible_printers trims (broader 0.2-nozzle PETG presets over-claiming Qidi Q1 Pro 0.2 nozzle, covered by dedicated variants): - The Bambu-catalog generic owners keep their ids byte-identical (Qidi Generic ABS/PETG/PLA/TPU/PA/PA-CF/PLA-CF); 6 stray members inside owner families are aligned to their family id. - 64 brand/product-line families (Bambu/HATCHBOX/Overture/PolyLite/Tinmorry, QIDI-brand lines, PLA+/High Speed/TPU-95A) get fresh deterministic mints, the same id landing in every per-series root of a family (@Q2-Series/@Q2C-Series/@X-Max 4-Series bases are multi-root families). - QD_* device-protocol ids untouched (frozen contract with QidiPrinterAgent). Verified: config-equivalence gate zero unexpected diffs (5892 presets); orca_extra_profile_check.py exit 0; assign_filament_ids.py --check exit 0; validator -l 2 exit 0; extended -f -v Qidi exit 0 (was 97 groups); -r -v Qidi exit 0 (all references still resolve). --- .../Qidi/filament/Bambu ABS @0.2 nozzle.json | 2 +- .../Qidi/filament/Bambu ABS @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu ABS @0.8 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu ABS.json | 2 +- .../Qidi/filament/Bambu PETG @0.2 nozzle.json | 5 +- .../Qidi/filament/Bambu PETG @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu PETG @0.8 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu PETG.json | 2 +- .../Qidi/filament/Bambu PLA @0.2 nozzle.json | 2 +- .../Qidi/filament/Bambu PLA @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu PLA @0.8 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu PLA.json | 2 +- .../HATCHBOX ABS @Qidi 0.2 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi 0.8 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX ABS @Qidi.json | 2 +- .../HATCHBOX PETG @Qidi 0.2 nozzle.json | 5 +- .../HATCHBOX PETG @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX PETG @Qidi 0.8 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX PETG @Qidi.json | 2 +- .../HATCHBOX PLA @Qidi 0.2 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi 0.8 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX PLA @Qidi.json | 2 +- .../Overture ABS @Qidi 0.2 nozzle.json | 2 +- .../Overture ABS @Qidi 0.6 nozzle.json | 2 +- .../Overture ABS @Qidi 0.8 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Overture ABS @Qidi.json | 2 +- .../Overture PLA @Qidi 0.2 nozzle.json | 2 +- .../Overture PLA @Qidi 0.6 nozzle.json | 2 +- .../Overture PLA @Qidi 0.8 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Overture PLA @Qidi.json | 2 +- .../PolyLite ABS @Qidi 0.2 nozzle.json | 2 +- .../PolyLite ABS @Qidi 0.6 nozzle.json | 2 +- .../PolyLite ABS @Qidi 0.8 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/PolyLite ABS @Qidi.json | 2 +- .../PolyLite PLA @Qidi 0.2 nozzle.json | 2 +- .../PolyLite PLA @Qidi 0.6 nozzle.json | 2 +- .../PolyLite PLA @Qidi 0.8 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/PolyLite PLA @Qidi.json | 2 +- .../Qidi/filament/Q2/Bambu ABS @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/Bambu PETG @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu PETG @Q2C.json | 2 +- .../Qidi/filament/Q2/Bambu PLA @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic PLA+ @Q2.json | 2 +- .../Qidi/filament/Q2/Generic PLA+ @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX ABS @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PETG @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PETG @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PLA @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/Overture ABS @Q2.json | 2 +- .../Qidi/filament/Q2/Overture ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/Overture PLA @Q2.json | 2 +- .../Qidi/filament/Q2/Overture PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/PolyLite ABS @Q2.json | 2 +- .../Qidi/filament/Q2/PolyLite ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/PolyLite PLA @Q2.json | 2 +- .../Qidi/filament/Q2/PolyLite PLA @Q2C.json | 2 +- .../QIDI ABS Odorless @0.2 nozzle.json | 2 +- .../QIDI ABS Odorless @0.6 nozzle.json | 2 +- .../QIDI ABS Odorless @0.8 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI ABS Odorless.json | 2 +- .../filament/QIDI ABS Rapido 0.2 nozzle.json | 2 +- .../filament/QIDI ABS Rapido 0.6 nozzle.json | 2 +- .../filament/QIDI ABS Rapido 0.8 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.2 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.6 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.8 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI ABS Rapido Metal.json | 2 +- .../Qidi/filament/QIDI ABS Rapido.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF10.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF25.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Max 3 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ASA.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PA-Ultra.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PA12-CF.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PAHT-CF.json | 2 +- .../filament/QIDI PAHT-GF @0.6 nozzle.json | 2 +- .../filament/QIDI PAHT-GF @0.8 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PAHT-GF.json | 2 +- ...QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PET-CF.json | 2 +- .../filament/QIDI PET-GF @0.6 nozzle.json | 2 +- .../filament/QIDI PET-GF @0.8 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PET-GF.json | 2 +- .../filament/QIDI PETG Basic @0.2 nozzle.json | 5 +- .../filament/QIDI PETG Basic @0.6 nozzle.json | 2 +- .../filament/QIDI PETG Basic @0.8 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Basic.json | 2 +- .../QIDI PETG Rapido @0.2 nozzle.json | 5 +- .../QIDI PETG Rapido @0.6 nozzle.json | 2 +- .../QIDI PETG Rapido @0.8 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Rapido.json | 2 +- .../filament/QIDI PETG Tough 0.2 nozzle.json | 2 +- .../filament/QIDI PETG Tough 0.6 nozzle.json | 2 +- .../filament/QIDI PETG Tough 0.8 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Tough.json | 2 +- .../QIDI PETG Translucent @0.2 nozzle.json | 5 +- .../QIDI PETG Translucent @0.6 nozzle.json | 2 +- .../QIDI PETG Translucent @0.8 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Translucent.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PETG-CF.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PETG-GF.json | 2 +- .../filament/QIDI PLA Basic @0.2 nozzle.json | 2 +- .../filament/QIDI PLA Basic @0.6 nozzle.json | 2 +- .../filament/QIDI PLA Basic @0.8 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Basic.json | 2 +- .../QIDI PLA Matte Basic @0.2 nozzle.json | 2 +- .../QIDI PLA Matte Basic @0.6 nozzle.json | 2 +- .../QIDI PLA Matte Basic @0.8 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Matte Basic.json | 2 +- .../filament/QIDI PLA Rapido 0.2 nozzle.json | 2 +- .../filament/QIDI PLA Rapido 0.8 nozzle.json | 2 +- .../filament/QIDI PLA Rapido @0.6 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.2 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.6 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.8 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Matte.json | 2 +- .../QIDI PLA Rapido Metal @0.2 nozzle.json | 2 +- .../QIDI PLA Rapido Metal @0.6 nozzle.json | 2 +- .../QIDI PLA Rapido Metal @0.8 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Metal.json | 2 +- .../QIDI PLA Rapido Silk @0.6 nozzle.json | 2 +- ...A Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...A Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Silk.json | 2 +- .../Qidi/filament/QIDI PLA Rapido.json | 2 +- .../filament/QIDI PLA-CF @0.6 nozzle.json | 2 +- .../filament/QIDI PLA-CF @0.8 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../filament/QIDI PPS-CF @0.6 nozzle.json | 2 +- .../filament/QIDI PPS-CF @0.8 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PPS-CF.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI Support For PAHT.json | 2 +- .../filament/QIDI Support For PET-PA.json | 2 +- ...QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI TPU-Aero.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI UltraPA-CF25.json | 2 +- .../QIDI WOOD Rapido @0.6 nozzle.json | 2 +- .../QIDI WOOD Rapido @0.8 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI WOOD Rapido.json | 2 +- ...Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...di ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../profiles/Qidi/filament/Qidi ASA-Aero.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... Generic ASA @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...eneric ASA @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic ASA.json | 2 +- ... Generic PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...i Generic PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.6 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.8 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.2 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.6 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic PLA+.json | 2 +- ...neric TPU 95A @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ric TPU 95A @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic TPU 95A.json | 2 +- ...i Generic TPU @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...Generic TPU @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi PC-ABS-FR.json | 2 +- .../profiles/Qidi/filament/Qidi PLA-CF.json | 2 +- ...di TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...di TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi TPU 95A-HF.json | 2 +- .../Qidi/filament/Tinmorry PETG-ECO.json | 2 +- .../Qidi/filament/X4/Bambu ABS @X-Max 4.json | 2 +- .../Qidi/filament/X4/Bambu PETG @X-Max 4.json | 2 +- .../Qidi/filament/X4/Bambu PLA @X-Max 4.json | 2 +- .../filament/X4/Generic PLA+ @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX ABS @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX PETG @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX PLA @X-Max 4.json | 2 +- .../filament/X4/Overture ABS @X-Max 4.json | 2 +- .../filament/X4/Overture PLA @X-Max 4.json | 2 +- .../filament/X4/PolyLite ABS @X-Max 4.json | 2 +- .../filament/X4/PolyLite PLA @X-Max 4.json | 2 +- scripts/filament_id_snapshot.json | 446 ++++++++---------- 436 files changed, 648 insertions(+), 683 deletions(-) diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json index 5a6b2f07b2..0571a6c393 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "UWRDko6WCvXczl33", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json index 1a6930ff43..ff958e904c 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "LUEO7LVrgko3oXzg", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json index 9ceb5904ff..afba292989 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "NKhfqNQIcfKQBYAK", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json index c773f1f723..e082ba832a 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "sZn12as9SQDNFDO3", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json index 1930af3ebd..4eae1e7274 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "coopc46hemdV9QIv", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json index 2560aa37f1..c918896762 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "qvYl7pfvtgF2y25O", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json index a27d0bbfb2..8679f08572 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "AzHGQIE0dGXjOhqG", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json index bddac012dc..e22ad74af9 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "CoYm8sbAVmpmJNIV", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json index f6f867f6b6..6c26b42f6e 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "FnQb4cNqORpQ3Wkq", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json index 35ed106798..0fe76e86e7 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "94qvrRFOKOACTK2g", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json index 9fd1b1d878..3383f16f49 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "ehJ163zLubzIrWzf", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS.json b/resources/profiles/Qidi/filament/Bambu ABS.json index bc8e84d0d0..8a3f3c544c 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS.json +++ b/resources/profiles/Qidi/filament/Bambu ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "aZylcH8GeCJOqtTy", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json index c1b4ec3fc1..72ca8b3942 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "cZhyWv8zbkM3fgAS", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +48,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json index e97ce167f1..2baf999d10 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PfIdpsKf0Xw5admE", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json index ca2475da91..bdb1fc0cf5 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "czi4981YiirKP6Yy", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json index 123128a303..457e514214 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "1BV8aedNHRa3h7rp", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json index 2b3f40032f..8c175a472d 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "eNHYNrSKn90P4GdZ", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json index 5c2b0ccecb..51609fb0a1 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "VU3PW2x6pfQ9Ayqo", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json index b3b16a0ef2..975dc9f5e7 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2ezevTOIexxkTBJ2", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json index 549a7c4055..8353f29d0d 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2vTNJwgFvUFq7oS9", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json index 63080da56e..f777567d23 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "Q5ToVl9Yb4GGoNXC", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json index 0ce417dc1d..abb934e808 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "XpLJtB1WhRyb1C75", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json index 89e531f65e..517ea571a2 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PiYLOckPVRFKFTS6", - "filament_id": "GFB99", + "filament_id": "OF6EOy1A", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG.json b/resources/profiles/Qidi/filament/Bambu PETG.json index 70d61730fa..f3c852e3da 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG.json +++ b/resources/profiles/Qidi/filament/Bambu PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5ZkReXpCOi19xuJg", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json index 95434aff3a..1aa1a5791f 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "xY62JrDaYjjSb3lh", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json index ea5ef9b75d..4ed7e3fde8 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "HjjvZoWwpjZ2gwDO", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json index 3d978affa5..20a1f209d5 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5dZqeodmshu33k4e", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json index 5d51f1eafc..9eb008e6e3 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "6kHEv9BjLlJi4E9T", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json index 9451f422a2..670a0dd494 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "G28Bah0iOaahWlPE", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json index 3e93b99515..c480153803 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "ioH4lDHLbCw65TIg", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json index 02f5bab7f6..a3364d6f1e 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "oAUHAhSZkmCjhJEP", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json index 9677e7fa31..1a5492b842 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "mT6I8HUJsMgYCjb4", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json index d9a8aa89ab..38bee01574 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5sr5ABQQzrYFUxtk", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json index c2611c3679..46f76ed5ee 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "CNzhUsHWT2FOW2Qe", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json index dc770d61eb..97c9d86fa6 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "8Mosuf8MExl0g3Tz", - "filament_id": "GFB99", + "filament_id": "OF2UFmOo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA.json b/resources/profiles/Qidi/filament/Bambu PLA.json index ebdf2423d6..f4df7bb875 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA.json +++ b/resources/profiles/Qidi/filament/Bambu PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lweaPojzNVU2FJnO", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json index 37749f7ca1..a91921bf7d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "QASmOwd2vpLRwI9I", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json index 7aea599422..d222581868 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "FETCvNKTRyxJujEs", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json index 2a465f6e24..25a52df29a 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "ywzSdHmCxIwmIFVS", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json index b5c25a1bce..3d1b1b018d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "EwhasEiqLRcN5gBN", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json index 4a0b67f0a0..0548ad7b80 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "0NVX3dTScYTIebm3", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json index 2c8d4bc22d..efbc5367cf 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "HCU0TmDPYF39Gc3X", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json index 62bb876608..07e2b9020a 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "Pf6oZn5QrYSbJhdm", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json index b6f03502b3..be04669935 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "6LSdExBaTT0Mc3rY", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json index a4ebcb6a7b..338327a6f4 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "vc2R90RYyDuY8vQn", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json index 1d4d13d416..0e0929a26e 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "1HVRVgHeXWVj3T0v", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json index b16ce365f8..9a77e829eb 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "aJxjGxHK8UJOqYPV", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json index 5e4fd7cf10..a10c29a679 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0fchNQsqRqwI6whN", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json index ffb2cc0e34..0fd49f7b99 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "Cw3CaLrsjVfJKoWI", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +48,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json index e6b90b25f2..d907869893 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "eLmXN4kJvaoq5Ude", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json index 6a763393a7..30c74b3628 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "mndT3gxOniftGEEZ", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json index 8e0f9576fb..dc93652d10 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "L8aHH2WqnlOYuyfd", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json index cf9da5b3c1..6d403ed166 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "LMva5CR9m19UAhcI", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json index 400f38d7fa..1e60285f5c 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "5EfWTFx0dXRTREkj", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json index 44b77623c6..9463655aed 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "xeu1S6h53DRVM9Pw", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json index 0b09a46b90..90fdab75cf 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "UrZzA62PJDuvo9EC", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json index 696fddb2d8..c9f19b8bbe 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "jAykaomjQ4BS9Cg0", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json index c0203d9268..74c9c5645e 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "2QrBYfeT0mp048aY", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json index aee2e475e2..a404adcc52 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "9otX3aWO4xQA72DT", - "filament_id": "GFB99", + "filament_id": "OFAnyzjN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json index 240181288d..2d9a104b6a 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "dqHKVy4ahTjpQFOJ", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json index 679eb2b2f1..94399a5e99 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "GrYmKcX6ghgUO8z0", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json index b891604161..a3f934d4a3 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "Fwd0BaBVmg2w9oBo", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json index af0f830e19..c7c48eafaf 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "OjSAPfXD7c9LpDZI", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json index 8c0315ecd1..3e4260f01e 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "tNk1yBoRzuKtWamt", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json index 865f120bcb..2ba5095a7f 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "oULA9qVGUD5izX9o", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json index 956fa88d62..baacdde075 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "RK1LyCal04XMqidp", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json index 535b07b9b0..444d1e7ec5 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "6ehhHeFIMe3KxHA1", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json index c6a9a6564a..781709ec0e 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "i3bQYXjlGipOAop7", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json index 60b9f5318c..0b7c393c5e 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "vknSksUeSeKFl8vB", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json index 89ffc6501a..bbfc813ac4 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "I5NFFjIYcoo3SkmC", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json index 6e28cd923e..0a698394bc 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "gzDFMFaDnAVuDy3B", - "filament_id": "GFB99", + "filament_id": "OFiJYDPC", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json index ee79175e43..54077f69b3 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jWtANauqr4Azj7fo", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json index 3fb6ca6406..616249f7fb 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "PVJaNrzYRoafHb3k", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json index 403311644b..c442a6b9b4 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "6dP4f482dvR9Ihhu", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json index 5d43601751..438527e84e 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ol1pj7wlmGJlZHbA", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json index aa2cc8787c..dcc67c9e49 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "d9bOxYmwJJ928QUm", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json index 451a97354e..aa27b3bf99 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "3vOLIQxScIoHCUDQ", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json index 161cee6e4c..693927e275 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ninsIRmjQReutXjA", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json index e5e9652619..2c50318e80 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "m4sql22MWPed4UK9", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json index c6d97b1e42..e2e657e67d 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "SbIhXnMLo7UWLdmF", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json index ca632cb252..310f56f725 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Hh22vTpUyqF09bma", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json index 4419ba6577..0b41ec4fcf 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "10PSPCpiTcS92auy", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json index f203d3f536..ac1a6dd3f6 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Xevn2nrx7W5VQX6z", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json index 0ae10f9086..9f8543d169 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "rRuO94f0PYlPR3yu", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json index 028e0adeb3..801448598f 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "YnRI4rYCHDIi7Q0w", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json index f6989b46b5..4875cb845d 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "Jizherw9T9l0X76l", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json index c15b896bde..4a75b36230 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "dHlHvcm2BjzlfUSk", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json index ad955edaeb..04bc00470b 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "3jqdiWNWro7yFptW", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json index 9e4bad8df8..0921c9b6e8 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "tARHr87BkRknTQJI", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json index ae956faf9b..c888887711 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "EEIdQ4XTkpQyRz3h", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json index c961b4b4d1..53a2a25920 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "NBbNF6S5sQYIiS9T", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json index 299c10c9b0..9dbd2f38a6 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "gk2D7WKoLK1xPqLC", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json index 3beb0aba29..a83fb80140 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "wtl6yNqJQUVhiBnB", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json index dc866429d0..829d5e6e29 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "1fl42MjkwXbpjJ3r", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json index c87feb65e4..68736ba4c9 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "vxGQSWw07PXnllwO", - "filament_id": "GFB99", + "filament_id": "OFC2FSsV", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json index f298c1f233..5a67c65ecc 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XXJ4dSi48JuA54Iv", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json index 24c3e1cf0e..7072ae9048 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "5rbxArwT1VV5BOSq", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json index 13684caa4b..12b6451671 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "EqpfLGTZXcdjm5BM", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json index 8112c07176..631237f251 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ao01rvVFfkWlwpER", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json index c4a4120209..2002832792 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "dfni3lzB8GJldfQD", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json index 6abfb386db..e589839cac 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "iWq2EddKO6QAUJuG", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json index ba69bacdab..0add34cd62 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "0EswisPwFjFmk1GT", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json index 1b0506e8dc..2a22e88081 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "t3DcJuJsNgXKW0dP", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json index 51c39b2aba..b1fcc53a1a 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ino4r7XLgTCFh4YR", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json index 1f53c30903..5d02632d1f 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "7NXI13ejzocjD7TO", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json index 4bcdb6bcef..62f530081c 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "QEJ9knURmXAGsFib", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json index 8aa1c764f4..2874e9ed51 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "GzEXQzyKqqnCVUBh", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json index ef68eb12e1..749d87e959 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Q9QYOF2UmsrK7Wof", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json index a52b240410..d1fe71dbea 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "uXrENPoTa7HWapCV", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json index f18131f02b..0de4f9ec71 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "XnU3X7A7kdRrfoTX", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json index 93bcd56559..12f56a5826 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "Q6H3JzOum8GYVRF9", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json index 4ef9af4534..563fdaf639 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "tSR6NKHk3ietpsga", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json index 77d10b9be3..5cab6e5d2d 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "ZF5is6IpP0gGcqRE", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json index 1559c6d369..6f293d396b 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "bAqfoS751xDFHubU", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json index 6837abbfb2..19d9c490cd 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "2rWOMrYc40ZRNLQi", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json index eabb962095..16e34885c6 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "4x8HlY906khbFsG0", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json index b4c8988c1d..95b33c700a 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "87QXnh5kCuQoPwjr", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json index 6a0d9383f8..43d6ebbe3b 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "WsMzyALZrDylCkZ6", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json index 5d5cb7bf93..01f23b61ee 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "sHVHjhH9FzhRjeHT", - "filament_id": "GFB99", + "filament_id": "OFceJcLf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json index b84cf7bfb4..a7c49a98f8 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Kg6WHLbWxKAE8cCr", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json index e2d1d05e99..6d1f651941 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json index dfb6609b1c..a66e95159e 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json index d1898e4363..56c8f26888 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json index 6a28da194b..61537e05c5 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json index 1277eab3e3..fbbbe3bcf0 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json index b1f2cdde9f..6e72108961 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json index 47107a8614..f3e45975a9 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFfdxQok", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json index 83d77e0781..48422dbf2c 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFfdxQok", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json index c55ccaa1a9..99b96f7788 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json index 81736dcccf..df0c4c9006 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json index 10f557a994..73d7e901ab 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json index fd739c1779..013e38199f 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json index 880ecddb29..aeba01311c 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json index 4af2d4f816..40ac36e3dd 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json index 5c2067f362..ff0b89b0ec 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json index a6639b3999..b271d4f87f 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json index 2dbdffd469..8435661492 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json index 986e906c0c..cc358bbb31 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json index b1af2354b5..fe2cf1e7f0 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json index 6d6c27b6b1..69747075c6 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json index be89bf9696..b342506185 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json index c42c4aee25..c8cc9c7f1d 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json index 9340c8b402..f01f3e4d80 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Z0J9YPS8382vLms4", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json index 651828c165..b6f87914d3 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "SA5qLMqlZg0lBV9u", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json index 951ebcacd6..397e9d9c2d 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "MzM45pddZsnN8jk4", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json index c59b3a85ee..00ffd121ef 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tq1aLmF5jT1fx5mZ", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json index e68e7cf3fa..d03e15c72b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "1hhkoG2E1z6ya5hY", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json index 395f1dc934..0661266966 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Vr1wXzAo5OR2PASA", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json index 5416a7b580..36ddd1819a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "OCg8c9SWQrZP0SrH", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json index ac47e75f00..dffcec3561 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "3fkdGYKFpaJ8yjwg", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json index b0467052ef..eac761c62b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tkh7jC3ZhD7qchMF", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json index e259f79655..6b0c61276a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "wOJOXhIjWFMUvDsB", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json index b3b3c6007f..dec090494e 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "WqbBySroQTCBWMoz", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json index 9b2cc8c8fd..7803db110f 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "5GyjZE2Ukzo3BDdg", - "filament_id": "GFB99", + "filament_id": "OFVhG0yM", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json index eda2713729..f04485915c 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "CeOohxHZCLelVMCk", - "filament_id": "GFB99", + "filament_id": "OFeybQvK", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json index 96ad8b214c..fd6e7b8c76 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "VzAotqGZviabVuS4", - "filament_id": "GFB99", + "filament_id": "OFnj7bPm", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json index 7678378711..2ec48424c2 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "1hpYHzEDBeO8jwDr", - "filament_id": "GFB99", + "filament_id": "OF8WvPVL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json index 606a4e781d..8beeba8c54 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "2ZB4CZPo7OnsVeFj", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json index 51d96df33d..e09f33c2ec 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ANlmZnKFevlds1x9", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json index 832ace793f..404c73f209 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "qGAb3jPiiSZqPc0W", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json index 939c2fc5bd..93b6a852f7 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "zPlNGjze5nz0Sqtn", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json index a57fa1b64f..e28f719297 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "L6hmbX1bqdrGd9g2", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json index c05f92c7f4..db9b53d8b5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ZKLPQIUecFL5GG2P", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json index a4838feb1d..4b76aea4a6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "OlI3NRTSS4Vb9ABn", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json index f02644b876..2224bcf267 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "7AXe36Wqh6uupouS", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json index 552acb8b6e..da948783fc 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "CQa9Ke6ku0jK7juR", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json index 695dfa0702..496f544403 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "KBXExHIJGyOE02sr", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json index b3f2dbf64d..a22da32e00 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "QjDN8l4fq8nrEtZS", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index b7e9c56d7e..6206964150 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "83M8HRLtzoEyAgdd", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index cd38da2783..3d47382873 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "JWNlbq8qmrVoCjJZ", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 2cfbfdf4de..31ebb14e56 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "igcuTXhdFT9QEkki", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index ee01bbbb30..fdfe9154a8 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "Rci7D9y258kLZl3F", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json index 98b64f2e92..3106c593b8 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "LClDGDpaf5l4XinA", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json index 71c73d5a26..5a187f9ed2 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "TbTSNtElyeqwuhI2", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json index a3bde06612..df8ac29f1a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "lRSAQSUdgEOvrWOZ", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json index fa0b2629ec..af46a4fc45 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "sV1XN1EnDMTMC6eZ", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json index b3b7260b51..3cee143732 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "EcvWsnEhikUy64mA", - "filament_id": "GFB99", + "filament_id": "OFToBodi", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json index 75518e19d5..08a58dc6dc 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "sru9yX08jyTVNmOz", - "filament_id": "GFB99", + "filament_id": "OFW8UdlP", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json index ddcb0ad389..17ef67f639 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "BG8J7FyU5Sn6pmGk", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json index 5a8cd10de2..491e1f4660 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "87bAUrovoG3W1WZK", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json index 7714206d33..e5e82a99df 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "v0K7uK7rq54uGbrE", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json index 8aba17e819..174bccce8e 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "OD1YZ5gmmk39jI21", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json index af4a24396d..b22eb5c8b5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "QzCAZozPOpv3IOzz", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json index ab0972598b..32e6766cda 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "fvB8ilSXksTr2ahl", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF.json b/resources/profiles/Qidi/filament/QIDI ABS-GF.json index a6d53698c7..d7f24f36c2 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "FW543AnWfRtseB8W", - "filament_id": "GFB99", + "filament_id": "OFYH00jV", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json index 4e532d3a34..a99a9522de 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "uskWZUmvzYkVgG0l", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json index 464b555e28..cfe8ea1bf0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "9laiuOlfZEWIjQ3u", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json index 92b8fbb036..eb4bbfa171 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "Jh3kEQrLdoGw4WLW", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json index 863ace51a5..ae910ae9d5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "3tblNpw8VgOlt8VU", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json index e22b325113..3009f9db4d 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "tssoWES4nOoMEh90", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json index 64b7fd6f57..b5aad08653 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "cgzmqzFT32UhNW5Q", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json index bffe8b53c8..ffac088449 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "hxsu8XybSxfesTJf", - "filament_id": "GFB99", + "filament_id": "OFQZINrX", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json index 1d88686ecc..8287d0aa7b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "Do5JLiLyzue036L8", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json index df3f122417..ffb51be952 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "hTEx7UgX2wWanON5", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json index 2c99858ffa..6fb67b1002 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "shInwFwd1Yh5wUJB", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json index dcdb75359c..e4980df547 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "LQoXGFsJRpjCTBKm", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json index 43b86fdab1..aab8dc01c3 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "5ONV5cuwTbSMWPMf", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json index 8f090308d5..3b809bdd69 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "nvfnoGOwhELWArss", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json index 67eac5a65f..097f336bb3 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "mFWkL9nlS289XAWu", - "filament_id": "GFB99", + "filament_id": "OFv2NHLC", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json index 1f61623cb0..3bdd268e3c 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPrwCFLO4P82f5lz", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json index fed39958bf..074ac486c0 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "zku756j16aST1ugn", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json index 5dd51ba6e3..ee4d8c3eac 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "EcewU7mP5y2vDwRn", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json index 4595c5cb56..7388eaf99b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPCSXfcIngQGTuOz", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json index 53d965df8f..1939e7b3e3 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "hhkWOEdIbQrB4IR0", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json index bf52b6954e..98cbe34d45 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "QiV5OREyiy9cb2yA", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json index 8fa1de7e85..7815a1ae6e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "yOWilrQPhpvcpWM4", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json index 3c259e858a..eeceeb147e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "tohpo42HW9BLvVcH", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json index 33505ecf75..fcf20cb643 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "iDF5lahr0TRvLF8F", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json index ace413d4d2..0aa3d22f7e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "p371tUSbBj3WOi5M", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json index 8d1bb937b1..78599691d3 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "4NUwEIv3156HKgev", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json index d7fa79e31b..0a7af77d4e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "UZg7s2SVhCGDcdkA", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json index 4f166dfd1a..5b956ce37b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "x8avbSHn73PayVfR", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json index 7df6c822af..15bc124407 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "FagCR4bLL1ctSXax", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json index 33af36c33b..65d8322f3a 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "T6U1oaEsA0T3ogMM", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json index c549a01bb3..cce1651f85 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "8Xm0AjRaktaNfo4o", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json index c62d7926f9..68c1c975f1 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "4p12RphItNlfwqwT", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json index ef993b3193..be3b32c6ac 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "346HiaeZvs3BoFUb", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json index d768ca7ab5..7ddeb6a70f 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "LROz60JZsh6GN7CK", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json index 8eb7f15885..ef9e6a0fe1 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "5OR8LnFPipv3h4h8", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json index e3d8e010cd..57b4dce412 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "wyns97Rn3EVTl0v5", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json index 20348ce7cf..4f55fa7c84 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "zituWsHG83yRR1lM", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json index ea8120a8d6..b18a387305 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "2CgI1u8NrWGqxN1C", - "filament_id": "GFB99", + "filament_id": "OFmF1xL9", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA.json b/resources/profiles/Qidi/filament/QIDI ASA.json index bfd6c00df7..c69ce99c06 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA.json +++ b/resources/profiles/Qidi/filament/QIDI ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "v2LrEujF68PPbrux", - "filament_id": "GFB99", + "filament_id": "OFK820gS", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json index 04cc184d19..66de4a49b6 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "rDi5X7jq3PrXGeSo", - "filament_id": "GFB99", + "filament_id": "OFXkwkn6", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json index 12696f5c4a..4298dd4ea5 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "tF0ym95Eo2WVjYrv", - "filament_id": "GFB99", + "filament_id": "OFXkwkn6", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json index 3bde720ab2..ebe1f68c1f 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "bWc3l0t1llvWvFei", - "filament_id": "GFB99", + "filament_id": "OFXkwkn6", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json index a57e564ca4..7cfd1faafa 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Rp1vbScHgwAZAwNT", - "filament_id": "GFN99", + "filament_id": "OFXkwkn6", "instantiation": "true", "filament_type": [ "UltraPA" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json index 4c287235ef..087691ba31 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "Q3votaRX4HuxZl1j", - "filament_id": "GFB99", + "filament_id": "OFFIL5pD", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json index 6b57b653e1..382b51b6f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "aaAKfscwITCW1cIY", - "filament_id": "GFB99", + "filament_id": "OFFIL5pD", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json index ba8250d7b8..ea996d2a71 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "nsFoTEFnTCbVM5VS", - "filament_id": "GFB99", + "filament_id": "OFFIL5pD", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF.json b/resources/profiles/Qidi/filament/QIDI PA12-CF.json index 7276593388..f559526129 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "tDdg0DlqE4Nle5Xo", - "filament_id": "GFN98", + "filament_id": "OFFIL5pD", "instantiation": "true", "filament_type": [ "PA12-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json index 483308828c..e54c5f53e9 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "wBwy10qTZT9LPkX7", - "filament_id": "GFB99", + "filament_id": "OFUkpobY", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json index 559d626e6a..8e9dfc5b7d 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "a7pcw1dTC3bXjkqQ", - "filament_id": "GFB99", + "filament_id": "OFUkpobY", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json index a70309e85a..c74c3b9054 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "pRBh7YZdJFYv4rED", - "filament_id": "GFB99", + "filament_id": "OFUkpobY", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json index 62533cfa49..bb1296382a 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Hws8EIuQkAfaCJGk", - "filament_id": "GFN98", + "filament_id": "OFUkpobY", "instantiation": "true", "filament_type": [ "PAHT-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json index ea7f2a65c6..3c457fe294 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "jRV6kS5c49Jf0IBJ", - "filament_id": "GFL98", + "filament_id": "OFfJoIgg", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json index 4496ed57ea..bf0a862d3c 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "ic09uwyOjmjgZhCY", - "filament_id": "GFL98", + "filament_id": "OFfJoIgg", "instantiation": "true", "pressure_advance": [ "0.023" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json index 3202c6fce1..6f1402814b 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "BGwcBuMu2dcF1nGB", - "filament_id": "GFB99", + "filament_id": "OFfJoIgg", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json index 35daa7f005..08081a83b8 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "R8msB42rgbyfT0sG", - "filament_id": "GFB99", + "filament_id": "OFfJoIgg", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json index 5c2461e535..ed19eb439b 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "D1nnJWlyUV0wvZnz", - "filament_id": "GFB99", + "filament_id": "OFfJoIgg", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json index 1ca4105b5b..676d2575b1 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "A6BaDz936RbO2EW1", - "filament_id": "GFN98", + "filament_id": "OFfJoIgg", "instantiation": "true", "filament_type": [ "PAHT-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json index 8ef70475b3..60d2eaf677 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "VNbCsg7HAvK02shi", - "filament_id": "GFB99", + "filament_id": "OFUJw3Lx", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json index 153b1c8543..e25178269b 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "SBJaM8xcxmruL8Sx", - "filament_id": "GFB99", + "filament_id": "OFUJw3Lx", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json index fe24beddf7..2dc2cc8a50 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "sPox9vMaLAuoZoP2", - "filament_id": "GFB99", + "filament_id": "OF4gzzE4", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json index beaa69e235..55e899aafb 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "6BLOwVDtDPvTqanQ", - "filament_id": "GFB99", + "filament_id": "OF4gzzE4", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json index 38ba31b9c2..3c9732f139 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "znZt3ns7eHGTA3sX", - "filament_id": "GFB99", + "filament_id": "OF4gzzE4", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF.json b/resources/profiles/Qidi/filament/QIDI PET-CF.json index 561c9f0929..b5a58b236b 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "X4zXjt7t9eLbESzJ", - "filament_id": "GFN98", + "filament_id": "OF4gzzE4", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json index 400337fbd8..a69ba467d9 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "N9zX7M4yR8u5Jqjd", - "filament_id": "GFB99", + "filament_id": "OF3XeEuV", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json index f87c252aa5..626098b09e 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "ATyJ8qPoYVqi7J3I", - "filament_id": "GFB99", + "filament_id": "OF3XeEuV", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json index d5e51c6102..b212549902 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "I48bgbR8Rq9DDxmR", - "filament_id": "GFB99", + "filament_id": "OF3XeEuV", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json index ac877dc6ca..87e6b3b785 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "hGLyYZ2WBTIFnWnc", - "filament_id": "GFB99", + "filament_id": "OF3XeEuV", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json index 4554a3b574..5b372cda6a 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "XC3F1NLZxw1v5Bh3", - "filament_id": "GFB99", + "filament_id": "OF3XeEuV", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF.json b/resources/profiles/Qidi/filament/QIDI PET-GF.json index 444747342d..78a901cbe1 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "nXZR8ykt6JdxvTCd", - "filament_id": "GFN98", + "filament_id": "OF3XeEuV", "instantiation": "true", "filament_type": [ "PET-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json index 9aa6df6a65..d66f38f8fd 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "U8Tz8l63gQMoW1TR", - "filament_id": "GFG99", + "filament_id": "OFSSuKRr", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json index 5cc5b51fd3..56206c0269 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "i5DnDzOFFFsd4ear", - "filament_id": "GFG99", + "filament_id": "OFSSuKRr", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json index a4844774cc..101e2d8d16 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "eqwWKpJur2oPzaig", - "filament_id": "GFG99", + "filament_id": "OFSSuKRr", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json index 1c7fb7e0d3..c6c692eb41 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "ZwdzHcsJbYBI04Yn", - "filament_id": "GFB99", + "filament_id": "OFSSuKRr", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json index dbf88b47cc..99f2f1c94e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "wYE4aUeszHw1HJrZ", - "filament_id": "GFB99", + "filament_id": "OFSSuKRr", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json index ae41acdb9e..21a359c65a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "SbHnONYlR2WneAjS", - "filament_id": "GFB99", + "filament_id": "OFSSuKRr", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json index 0880da2bef..b80993fba6 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "EQrNIdbODkHki7pY", - "filament_id": "GFB99", + "filament_id": "OFSSuKRr", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic.json b/resources/profiles/Qidi/filament/QIDI PETG Basic.json index 1899fa6b7c..a855dd785d 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "7uiFWB9SSJvhXKt0", - "filament_id": "GFG99", + "filament_id": "OFSSuKRr", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json index d925f371b2..b44faa2e7f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "17nQzSvxOhC8RqMv", - "filament_id": "GFG99", + "filament_id": "OFbS9rjH", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json index e1636c5d4a..75adc4d4d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "TJja29CvUqlXnhWM", - "filament_id": "GFG99", + "filament_id": "OFbS9rjH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json index ad4044f181..9e965e2753 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "6rVVNiYVHxsxqk0M", - "filament_id": "GFG99", + "filament_id": "OFbS9rjH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json index 3aff0af94f..503cf229aa 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "MoKlaB96ptTjnoa8", - "filament_id": "GFB99", + "filament_id": "OFbS9rjH", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json index 45ba611152..ae7376700e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "S2CUnrPuZuvBo19K", - "filament_id": "GFB99", + "filament_id": "OFbS9rjH", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json index 8f72cf31ed..d4b7e161e1 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "kEUCaWmAo3xZC09A", - "filament_id": "GFB99", + "filament_id": "OFbS9rjH", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json index bf500050a6..066270e96a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "4Tse2Ycxud3qX0aQ", - "filament_id": "GFB99", + "filament_id": "OFbS9rjH", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json index 67d19f82a2..7097f784d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YK77S7a06UMEQzum", - "filament_id": "GFG99", + "filament_id": "OFbS9rjH", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json index 0dfd072089..856a8f8b32 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wl53hiPD7EGYabrt", - "filament_id": "GFG99", + "filament_id": "OFWkCAdc", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json index 2f5838b537..ebd4cb47e9 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "QUkztHAxlI1gg1xe", - "filament_id": "GFG99", + "filament_id": "OFqPp2yL", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json index 68706bbe3c..ebfeb1a3a6 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "vtQb2QBD5ongR7vC", - "filament_id": "GFG99", + "filament_id": "OF48G7He", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json index 26589c581e..31e4a0a837 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "KHeb2TVAxtw6fbRm", - "filament_id": "GFB99", + "filament_id": "OF1Zypyy", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json index 5317b9f51d..54ad4f4fe1 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "22HUqZbuYgOGNRfN", - "filament_id": "GFB99", + "filament_id": "OF1Zypyy", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json index f32ca31314..1563a33564 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "U35fhYtgLMsDXEws", - "filament_id": "GFB99", + "filament_id": "OF1Zypyy", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json index 2a524dda6a..fdf754efcc 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wqzUWt3IiEURFRYL", - "filament_id": "GFB99", + "filament_id": "OF1Zypyy", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough.json b/resources/profiles/Qidi/filament/QIDI PETG Tough.json index a9193be4b4..81eeb5a641 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrZXxBXWXda9boGv", - "filament_id": "GFG99", + "filament_id": "OF1Zypyy", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json index 126d86f7bb..4b0c2a6818 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "I8DmnTJey0BaBBAN", - "filament_id": "GFG99", + "filament_id": "OFjohFkg", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json index 79d558d34f..cee560227e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "0SbgoW822S43QDoX", - "filament_id": "GFG99", + "filament_id": "OFjohFkg", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json index 02e4793b34..591ef0fedf 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "rOakaeWOHKz9immU", - "filament_id": "GFG99", + "filament_id": "OFjohFkg", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json index 2926cfa7d4..5a4d4bd206 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "RBy7wrl1ZQOdKe8i", - "filament_id": "GFB99", + "filament_id": "OFjohFkg", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json index 23ed635640..6b32f51dfa 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "Y0jCXY0Ihd6eRlm4", - "filament_id": "GFB99", + "filament_id": "OFjohFkg", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json index b2397ddb33..6dccf959e3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "9yzSrCFgR00Lx8Ab", - "filament_id": "GFB99", + "filament_id": "OFjohFkg", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json index 8c86c18134..86548c4867 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "uMHHs1N1fLMq56FF", - "filament_id": "GFB99", + "filament_id": "OFjohFkg", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json index a7e1a3f943..60a750367f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5k6FnlL39pSbrei2", - "filament_id": "GFG99", + "filament_id": "OFjohFkg", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json index 15e4f9f4c6..dd8dee64fe 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "6EOvD75tBRyvffZF", - "filament_id": "GFB99", + "filament_id": "OFPokkKe", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json index 06118ac128..83f504fff5 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "ByHCLDgv1HFiA1Bb", - "filament_id": "GFB99", + "filament_id": "OFPokkKe", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json index aff00a2a31..bf3b1e5515 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "NBrZJME5Jt7jwU4W", - "filament_id": "GFB99", + "filament_id": "OFPokkKe", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF.json b/resources/profiles/Qidi/filament/QIDI PETG-CF.json index 734b4722ca..23bafc4875 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "vg3YJMhVaXTMTVLJ", - "filament_id": "GFN98", + "filament_id": "OFPokkKe", "instantiation": "true", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json index c6635252e2..802656c1e1 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "4kBE3NMTit44g7S1", - "filament_id": "GFB99", + "filament_id": "OF0Y5MLd", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json index 753888565d..582fe9675b 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "SzH90qDpFuNpG7Ud", - "filament_id": "GFB99", + "filament_id": "OF0Y5MLd", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json index ff22c08ab9..4ba14fed71 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "9XoDC8DHvxvgrRor", - "filament_id": "GFB99", + "filament_id": "OF0Y5MLd", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF.json b/resources/profiles/Qidi/filament/QIDI PETG-GF.json index 060219b0b0..1b8ada25c9 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bex5zSdkQThZQi0s", - "filament_id": "GFN98", + "filament_id": "OF0Y5MLd", "instantiation": "true", "filament_type": [ "PETG-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json index 52c98be3a0..31134c4e2c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "hWJXKDKNjeBqYYFk", - "filament_id": "GFL99", + "filament_id": "OFN0X7oN", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json index ab3cc9c974..d7bd4eaf46 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "LMfV673NzArmzY44", - "filament_id": "GFL99", + "filament_id": "OFN0X7oN", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json index 0dc39007eb..9b578ef512 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "CyXcxvEKE6gnCRm9", - "filament_id": "GFL99", + "filament_id": "OFN0X7oN", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json index 449e7e207a..560db51ea0 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "g7OVjk2xNWWNQo9D", - "filament_id": "GFB99", + "filament_id": "OFN0X7oN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json index c2f7dab865..0d21566770 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "EdgtTQVIiPatR9Rt", - "filament_id": "GFB99", + "filament_id": "OFN0X7oN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json index ade21c62a6..2e05ec1a09 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "UTbL94nFN0Cx30p6", - "filament_id": "GFB99", + "filament_id": "OFN0X7oN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json index 5648eb9fd5..f8f7dc88d9 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "INxFTcta59v2Ukpy", - "filament_id": "GFB99", + "filament_id": "OFN0X7oN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Basic.json index c5e219dd3f..2c15693ba5 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "UlF92qvJnOYzq0mw", - "filament_id": "GFL99", + "filament_id": "OFN0X7oN", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json index 25eeab9475..763557b382 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "vzT3dsogzkZSegM0", - "filament_id": "GFL99", + "filament_id": "OFvN3117", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json index bbea662f87..d283df5e97 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "rdGuWICdcIZ3fXJb", - "filament_id": "GFL99", + "filament_id": "OFvN3117", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json index 6418a8fa5e..56d1503e8a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "9z0BoiNtKlwPoCI4", - "filament_id": "GFL99", + "filament_id": "OFvN3117", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json index 86b7154e88..9de765cf78 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "Txg82qpCGVco78Ih", - "filament_id": "GFB99", + "filament_id": "OFvN3117", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json index 9097ca2c19..774922475b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "smHGcdmpWzQy1vW3", - "filament_id": "GFB99", + "filament_id": "OFvN3117", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json index 69f09b85ca..54753b4f40 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "hGKQJNUIQR0srofE", - "filament_id": "GFB99", + "filament_id": "OFvN3117", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json index f945029342..dd25635276 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "kARyA9JRV7f6Wu3E", - "filament_id": "GFB99", + "filament_id": "OFvN3117", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json index 6204fd0d38..c75d42b5a4 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "53yYF0gK91AQcKAy", - "filament_id": "GFL99", + "filament_id": "OFvN3117", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json index c316f431a1..d02d87ea5d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "jpTA43XolFvODs9f", - "filament_id": "GFL99", + "filament_id": "OFXNO5Of", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json index 42556d2f6b..45906c1b51 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "MGW0kfdHATaAzL1P", - "filament_id": "GFL99", + "filament_id": "OFs1CbB1", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json index 93f8b8b239..c2216596e8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "eQOfNVt6OqCFj0bV", - "filament_id": "GFL99", + "filament_id": "OFmKNi3f", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json index f72a01ceda..3bdb9bec64 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "tdL1kK6jLbREgYna", - "filament_id": "GFB99", + "filament_id": "OFmKNi3f", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json index 05e66e91b6..ac6a619cb8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "zfL5B7iAlx3PbJ1j", - "filament_id": "GFB99", + "filament_id": "OFmKNi3f", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json index 29f2a5e350..48f74dc047 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "oZZn5VxcrwDJX9fE", - "filament_id": "GFB99", + "filament_id": "OFmKNi3f", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json index 9aedb1f214..198ef80000 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "o1lfFStVDZMsdFtr", - "filament_id": "GFB99", + "filament_id": "OFmKNi3f", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json index 0392403caf..c143b656d7 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "HK2fT6TYIIS94MZD", - "filament_id": "GFL99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json index 34bcfbab7b..a1b519af08 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "syivJeR1eO6H8wsK", - "filament_id": "GFL99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json index 8e168e3347..ea13d3583e 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "WC8KpzKwpQcHOStJ", - "filament_id": "GFL99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json index 8cef6a51f9..c546a5d00a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "RccxOqWrkZljiU5Y", - "filament_id": "GFB99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json index 8a6e89f667..77dd1451c2 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "8KV7AfivVZHM6ReD", - "filament_id": "GFB99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json index 648c46e717..c2cb8532be 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "c5lFoguRq8sBwQ1K", - "filament_id": "GFB99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json index 3cb87903ff..8b96e4a264 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "95NdLwU31HQJthJE", - "filament_id": "GFB99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json index 0794ea2af4..cdd0173131 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gwmsxvv6cpmVlBDa", - "filament_id": "GFL99", + "filament_id": "OFAUDGEQ", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json index 92d6c1a902..2022fa0518 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "oZC1FZ93158dUC0j", - "filament_id": "GFL99", + "filament_id": "OFV4hD1o", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json index 26f96a21f6..2525fd7186 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Ix7a15ABLu7ykbMb", - "filament_id": "GFL99", + "filament_id": "OFV4hD1o", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json index 4a4f0ffd10..f03a2919dc 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "NdUtpGmW1Rl2h1Xc", - "filament_id": "GFL99", + "filament_id": "OFV4hD1o", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index a4d88bd29c..0a90a98c7e 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "6obXUws35j7OkE2v", - "filament_id": "GFB99", + "filament_id": "OFV4hD1o", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index 571decc29b..f9c18e02f4 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Z0YSeNJQ3rKDwzsp", - "filament_id": "GFB99", + "filament_id": "OFV4hD1o", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 4119d9da15..83daae2d51 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "BoVtyU2REc0Ayzc4", - "filament_id": "GFB99", + "filament_id": "OFV4hD1o", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index 17f7a4818b..6b18f61607 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "EKWOHWk37Yn1jS5V", - "filament_id": "GFB99", + "filament_id": "OFV4hD1o", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json index b118bcfd02..af8af08270 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yrS51y3N1ooM5ULv", - "filament_id": "GFL99", + "filament_id": "OFV4hD1o", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json index dbe2d57ace..7704c2b53c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "AaBBTIJSMkxxTPDt", - "filament_id": "GFL99", + "filament_id": "OF0z1XpN", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json index 63cfb9c6b0..fea97d7530 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "hnWx5ZM2ecclYvKA", - "filament_id": "GFB99", + "filament_id": "OF0z1XpN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json index c81d897d30..7191180725 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "bQTjglDv2qjgrUNl", - "filament_id": "GFB99", + "filament_id": "OF0z1XpN", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json index b877e50774..47a2c6edb1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zifqr9yiIZKivCNu", - "filament_id": "GFL99", + "filament_id": "OF0z1XpN", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json index 1add171288..d5bb8ebb62 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JdGWg2Kn3T2L2Ai2", - "filament_id": "GFL99", + "filament_id": "OFmKNi3f", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json index 6d266568a1..a65d1591a8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "BTqlIKpYFQCC8gJt", - "filament_id": "GFL98", + "filament_id": "OF7cv1Ub", "instantiation": "true", "pressure_advance": [ "0.01" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json index ed91757e71..768b6ebd1d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "0Wr2y2a7rHYbk5fS", - "filament_id": "GFL98", + "filament_id": "OF7cv1Ub", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json index 3b236b0420..32e8cc97be 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "xGqY059EYGUevj9G", - "filament_id": "GFL98", + "filament_id": "OF7cv1Ub", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json index cf77b2cdf0..1869f432df 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "Fh7yuJKSeYs8doRG", - "filament_id": "GFL98", + "filament_id": "OF7cv1Ub", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json index 49c9d3c0f2..fae018e7bc 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "vs5bFF3r8Kid59u9", - "filament_id": "GFL98", + "filament_id": "OF7cv1Ub", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json index d90bd4e3c8..f02bce47ae 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "E30t78jBGCkTztFC", - "filament_id": "GFB99", + "filament_id": "OFAdAYYk", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json index 20cbb98a2d..1eb21b213d 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "pYmENqkzOsA9LRLW", - "filament_id": "GFB99", + "filament_id": "OFAdAYYk", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json index d135252ac8..91d99f8f42 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "7ozi6TNb3ObLpD2v", - "filament_id": "GFB99", + "filament_id": "OFAdAYYk", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json index eecd12264a..8714923f7d 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "iNx7JrGG0r5s24dV", - "filament_id": "GFB99", + "filament_id": "OFAdAYYk", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json index 50bc577d0e..caaf8696e5 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "tQnGlZa0FL2FpHho", - "filament_id": "GFB99", + "filament_id": "OFAdAYYk", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF.json b/resources/profiles/Qidi/filament/QIDI PPS-CF.json index 13db20b99f..9e56326ec1 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ODM3oXV1OSv3qTbZ", - "filament_id": "GFN98", + "filament_id": "OFAdAYYk", "instantiation": "true", "filament_type": [ "PPS-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json index 6f520e1d27..64884f4a2c 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "VgQiY3csDj6bBWSk", - "filament_id": "GFB99", + "filament_id": "OFZAkPHG", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json index d7e1fa61d5..b0064ded5a 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "8hFaMBYD7pnmsZWd", - "filament_id": "GFB99", + "filament_id": "OFZAkPHG", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json index d3adec2da2..c41c4fbaae 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "BcrvpHAPx0FBvOi3", - "filament_id": "GFB99", + "filament_id": "OFZAkPHG", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json index 338628640c..2ab04ac70e 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "7cd7R9xbuNtLfCHa", - "filament_id": "GFN98", + "filament_id": "OFa5cFqE", "instantiation": "true", "filament_type": [ "PAHT-S" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json index cf18d83f80..e93e7f7945 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Am158VMH3y6FDxON", - "filament_id": "GFN98", + "filament_id": "OFWyCd0Y", "instantiation": "true", "filament_type": [ "PA-S" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json index a99ea32ca7..210dde4248 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "O7oxTgsH9q8jlqzd", - "filament_id": "GFB99", + "filament_id": "OFNX5uRT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json index 159561dbbd..cdfe19f343 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "FR1LQ5DM0upGQQfs", - "filament_id": "GFB99", + "filament_id": "OFNX5uRT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json index 70f7e16ecd..fb7f6a16fe 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "BARooxJKaDXbGd9B", - "filament_id": "GFU99", + "filament_id": "OFNX5uRT", "instantiation": "true", "filament_type": [ "TPU-AERO" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json index 897e274d70..fcbec8eaa5 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "GufOfCCphUDzeSo1", - "filament_id": "GFB99", + "filament_id": "OFOysPuE", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json index 0bd0d3ce6a..f295b881de 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "nY6q9vd6lpaXiQpc", - "filament_id": "GFB99", + "filament_id": "OFOysPuE", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json index 528ae87a68..0a6c26ed10 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "67agKUajM0pFFhia", - "filament_id": "GFB99", + "filament_id": "OFOysPuE", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json index 1921fd982c..7eccf9202f 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "RgmbbSJpyUyTXPO9", - "filament_id": "GFB99", + "filament_id": "OFKjlAbC", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json index d800b11f70..da545ecdb9 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "aiGnr6fBoUCuwPS5", - "filament_id": "GFB99", + "filament_id": "OFKjlAbC", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json index 082b2893a3..ee25c8c7df 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "G0qM351aUv23WFmP", - "filament_id": "GFB99", + "filament_id": "OFKjlAbC", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json index 9ae8202bce..73f3ad14d1 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "2AOnWEOsaS2w9Nmr", - "filament_id": "GFN98", + "filament_id": "OFKjlAbC", "instantiation": "true", "filament_type": [ "UltraPA-CF25" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json index 60731be079..c0a87567b7 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "y4aq26TNkKEafwbN", - "filament_id": "GFL99", + "filament_id": "OFnsWQTp", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json index a33c51e4b6..4c87714064 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "1y0tvUmMkDHYmvWC", - "filament_id": "GFL99", + "filament_id": "OFnsWQTp", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json index 6a9b8b61f2..6cbeef948f 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "n4ywS2KDL59hb8nA", - "filament_id": "GFB99", + "filament_id": "OFnsWQTp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json index 2c556b42d6..df4bc13bfc 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "AZB82l14yp3vT5sz", - "filament_id": "GFB99", + "filament_id": "OFnsWQTp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json index 825fc4d3bd..f64fa54a11 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "0ZZ9ygXQqnKrrWlL", - "filament_id": "GFB99", + "filament_id": "OFnsWQTp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json index b80cb7bbe8..9ca1b0488f 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NANyXYa8NOQ45Gy2", - "filament_id": "GFL99", + "filament_id": "OFnsWQTp", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json index 1002faa656..508cf24436 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "OVQGLLS3QOoDEPNp", - "filament_id": "GFB99", + "filament_id": "OF0TjJ0G", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json index e70b832791..3b68bf48c5 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "FKWhpunDSV0iusbz", - "filament_id": "GFB99", + "filament_id": "OF0TjJ0G", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json index 72e771f083..216db80864 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "xTg8UPJXoXdyGccz", - "filament_id": "GFB99", + "filament_id": "OF0TjJ0G", "instantiation": "true", "filament_type": [ "ASA-AERO" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json index 7e1c6c50f4..a2d9584778 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "OLkg128vxsk27w03", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json index 4e79e3b9d4..961629bae2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "pGOT3C5eREsHRylS", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json index 95c9fa660c..2e5cf7b682 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "QRlzPtO4mqLKcdws", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json index 81a1153f11..e62e501e59 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "vLLCDxhI2GR76M1p", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json index f68bcca3f0..2369d6b6c6 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "6pY4I5kAFdSYPOte", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json index 4b2cbc742d..7106465ea0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "A85OmyjS63OgZa0V", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json index e070398a5e..03f2d457fa 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "1CBWjstSdMJLJWuv", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json index 28a74dadb1..fbeaa4c1c1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "UIsup1TGWKg0Fq72", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json index 422c63c216..c4ae902f99 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "HQupWXd5yKceVrm4", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json index e24a3519bf..9cd5b1a694 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "R6FcpVRhnSp0i8bK", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json index 2f3fa6a9d8..926830393f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "sE2DGjOmcjRuuh0z", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json index e7878476b5..d6aee78840 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "WTOEo36YTIFcXDaI", - "filament_id": "GFB99", + "filament_id": "OFG8vHw8", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json index 6d920bb982..b516c65225 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "SzQLWO8poDxEU0ez", - "filament_id": "GFB99", + "filament_id": "GFG99", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json index 3f3fdb2dae..2bce0a96b0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "MMSCic1l0b3e5qe3", - "filament_id": "GFB99", + "filament_id": "GFG99", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json index 4569902a19..63611956e2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "eCR3lbTRdkYcMZgl", - "filament_id": "GFB99", + "filament_id": "GFL99", "instantiation": "true", "filament_max_volumetric_speed": [ "14" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json index 922bef83eb..8b257619c3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "tRztgu06hBi9IxSE", - "filament_id": "GFB99", + "filament_id": "GFL99", "instantiation": "true", "filament_max_volumetric_speed": [ "14" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json index a27251d78a..a8040f89fd 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", "from": "system", "setting_id": "HaE0HFgjT8wysrVT", - "filament_id": "GFL99", + "filament_id": "OF5UUaUM", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json index 2f0e4b53b1..13e4cbccbe 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", "from": "system", "setting_id": "vxXEJP3C4k5Zjvsx", - "filament_id": "GFL99", + "filament_id": "OF5UUaUM", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json index 866b9b9707..3e9f248a9d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", "from": "system", "setting_id": "VqVyXnU77CZCKsNy", - "filament_id": "GFL99", + "filament_id": "OF5UUaUM", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json index 47ac610743..2866afeee3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", "from": "system", "setting_id": "0504CZkoYLx6NMI0", - "filament_id": "GFL99", + "filament_id": "OF5UUaUM", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json index 4ea48e5379..689b9db770 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "dmKDk6Yb4zQFCWIe", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json index d7be267e76..649a08ca6f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "vwFHzxD2MrRieUIw", - "filament_id": "GFB99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_settings_id": [ "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json index 9884783666..8b663fde80 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "wlXNWvECV8ylNVFF", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json index 751e859201..ad0dd1e2b3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "gR4NZ8mgTNVxxjhh", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json index 3ceedcf5da..6860035d96 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "wCdBhg6B4tQZw7dp", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json index 865f18fe1d..c34e9563a0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "7Bxn8OUT1MJbNvxC", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json index 320e1a5e37..a29f72ac49 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "miQxMqjI3odS4V1O", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json index 96d49de862..63b6dcfd94 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "WwUGv09h9thWkzMf", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json index 5942ed4406..fe0c370b40 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "oAIJyTMV5EnXTJDF", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json index 62529fb34e..834b6b82cc 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "Ya2viE6yXmdshs75", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json index 88086dd8e5..17212d9d74 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "XUhGdonOGCUI34EH", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json index 7ed74cb2d5..39a7b80db0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "yvokLiCctDUmcDCR", - "filament_id": "GFB99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.034" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json index 225c8203c7..4d5746ee75 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "gZxafcPwX1hqI7Dm", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json index 662d6b70e9..eb93efa8f0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "j6fJ7L02mVcZ01fO", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json index 85de90bcfc..38a2600264 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "KTkq14RsduGBSdMZ", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json index 6d7b0c81e9..7593f9724c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "xiomvJqo2HAwsxT0", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json index d81651533a..dc501ef7e5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "3SemJWSvKeN7OXVy", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+.json index cf8733d478..7302486ec4 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "LNjBixpjLg5i8P1d", - "filament_id": "GFL99", + "filament_id": "OFwHPTvy", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json index 15423913f8..dff4ce7559 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU 95A", "from": "system", "setting_id": "0gGSrFIulk4gPLSp", - "filament_id": "GFB99", + "filament_id": "OFN0pBpo", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json index f83e24e147..f1add02a4f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU 95A", "from": "system", "setting_id": "5fkE2aGkghsMdZ1W", - "filament_id": "GFB99", + "filament_id": "OFN0pBpo", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json index d83d0599af..2c4e76ead5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "JWZrlYnOOlGpTEg6", - "filament_id": "GFU99", + "filament_id": "OFN0pBpo", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json index ff81ed6743..963e845d67 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU", "from": "system", "setting_id": "s0MMbJlTt9Cbh8FQ", - "filament_id": "GFB99", + "filament_id": "GFU99", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json index 4e9f07c0c5..9e4acc8225 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU", "from": "system", "setting_id": "KqdGTkLW1x7oZpvj", - "filament_id": "GFB99", + "filament_id": "GFU99", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json index 072f445d57..f5db4b48f9 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "0J1PKDesfiwmiXT3", - "filament_id": "GFB99", + "filament_id": "OFa6L3Of", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json index 02776d5d00..0870f4d962 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "CYzutFjZzD3tLXwM", - "filament_id": "GFB99", + "filament_id": "OFa6L3Of", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json index 60a8329be2..c036fb4fba 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "YJvwrEo0BwfXMOqo", - "filament_id": "GFB99", + "filament_id": "OFa6L3Of", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json index e6faf129d7..69b6bcd945 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0pBt0usHW6MGQZXl", - "filament_id": "GFB99", + "filament_id": "OFa6L3Of", "instantiation": "true", "filament_type": [ "PC-ABS-FR" diff --git a/resources/profiles/Qidi/filament/Qidi PLA-CF.json b/resources/profiles/Qidi/filament/Qidi PLA-CF.json index 6b8a3e8899..6db1fa32e2 100644 --- a/resources/profiles/Qidi/filament/Qidi PLA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "oqzsRA4OuCqTWPGM", - "filament_id": "GFL98", + "filament_id": "OFqyIUDi", "instantiation": "true", "filament_flow_ratio": [ "0.96" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json index aa18a6f5e7..172ba9b6f0 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "zqfVVsyY5ZMsfqjK", - "filament_id": "GFB99", + "filament_id": "OFOW9K96", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json index 7679296a7b..89c1974bb1 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "fZISb4jbF8jv60dL", - "filament_id": "GFB99", + "filament_id": "OFOW9K96", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json index ba588dc809..433f754f7a 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "QCS6zw9BRMWWvrCo", - "filament_id": "GFU99", + "filament_id": "OFOW9K96", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json index 4e4424936f..a8864cd29b 100644 --- a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json +++ b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uVa250OrqClMz41k", - "filament_id": "GFG99", + "filament_id": "OFXcfTEb", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json index 62e6a4204e..96478af664 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuidAEg", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json index cdfabbe5a0..8101a994d5 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OF6EOy1A", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json index 9db6ab9698..08d299380c 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF2UFmOo", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json index 924752466e..07f0f3291d 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFfdxQok", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json index d7e4f1c7ed..7e70c198c2 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFPwi9X0", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json index 9e9abfbd09..a7cf5ed949 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFAnyzjN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json index 2cb6be1fc3..3dcf2e340d 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFiJYDPC", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json index 485db36e9a..49b3c2fe6b 100644 --- a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFuTFxVP", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json index 289af93715..a217128c3d 100644 --- a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFC2FSsV", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json index 215fb00a92..849aebe38d 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFidJLn8", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json index e8fe4ba7f5..4d6101084d 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFceJcLf", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 9ebc007f87..ae6dd87645 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1178,59 +1178,14 @@ "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 ABS Rapido 0.2 nozzle", + "Qidi/QIDI ABS Rapido 0.6 nozzle", + "Qidi/QIDI ABS Rapido 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", @@ -1244,162 +1199,101 @@ "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 0.2 nozzle", + "Qidi/QIDI PETG Tough 0.6 nozzle", + "Qidi/QIDI PETG Tough 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 0.2 nozzle", + "Qidi/QIDI PLA Rapido 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 @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", @@ -1415,24 +1309,16 @@ "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", @@ -1440,28 +1326,19 @@ "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.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+", - "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", @@ -3028,62 +2905,7 @@ "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", @@ -3287,17 +3109,7 @@ "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", @@ -3556,10 +3368,7 @@ "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", @@ -3697,23 +3506,7 @@ "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", @@ -3842,17 +3635,6 @@ "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", @@ -3884,7 +3666,6 @@ "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", @@ -4395,10 +4176,7 @@ "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", @@ -4611,24 +4389,72 @@ "OF0M6QAQ": [ "OrcaFilamentLibrary/Elegoo PLA Galaxy" ], + "OF0TjJ0G": [ + "Qidi/Qidi ASA-Aero" + ], + "OF0Y5MLd": [ + "Qidi/QIDI PETG-GF" + ], + "OF0z1XpN": [ + "Qidi/QIDI PLA Rapido Silk" + ], "OF102WKM": [ "OrcaFilamentLibrary/Elegoo PETG PRO" ], + "OF1Zypyy": [ + "Qidi/QIDI PETG Tough" + ], + "OF2UFmOo": [ + "Qidi/Bambu PLA" + ], "OF3GKs2i": [ "OrcaFilamentLibrary/eSUN PLA-Matte" ], + "OF3XeEuV": [ + "Qidi/QIDI PET-GF" + ], + "OF48G7He": [ + "Qidi/QIDI PETG Tough 0.8 nozzle" + ], "OF4fgpse": [ "OrcaFilamentLibrary/Elegoo PLA Marble" ], + "OF4gzzE4": [ + "Qidi/QIDI PET-CF" + ], + "OF5UUaUM": [ + "Qidi/Qidi Generic PLA High Speed" + ], + "OF6EOy1A": [ + "Qidi/Bambu PETG" + ], "OF79FFkO": [ "OrcaFilamentLibrary/Elegoo PC-FR" ], + "OF7cv1Ub": [ + "Qidi/QIDI PLA-CF" + ], "OF8HQmJD": [ "OrcaFilamentLibrary/Elegoo PLA Sparkle" ], + "OF8WvPVL": [ + "Qidi/QIDI ABS Rapido 0.8 nozzle" + ], "OF9qvJxV": [ "OrcaFilamentLibrary/Elegoo PLA Translucent2" ], + "OFAUDGEQ": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "OFAdAYYk": [ + "Qidi/QIDI PPS-CF" + ], + "OFAnyzjN": [ + "Qidi/HATCHBOX PETG" + ], + "OFC2FSsV": [ + "Qidi/Overture PLA" + ], "OFD5e0sH": [ "OrcaFilamentLibrary/Elegoo Rapid PLA+" ], @@ -4641,6 +4467,12 @@ "OFDNiRTx": [ "OrcaFilamentLibrary/Elegoo PLA+" ], + "OFFIL5pD": [ + "Qidi/QIDI PA12-CF" + ], + "OFG8vHw8": [ + "Qidi/Qidi Generic ASA" + ], "OFICPchn": [ "OrcaFilamentLibrary/Elegoo PLA Basic" ], @@ -4656,6 +4488,12 @@ "OFJsqMzx": [ "OrcaFilamentLibrary/Generic PLA Matte" ], + "OFK820gS": [ + "Qidi/QIDI ASA" + ], + "OFKjlAbC": [ + "Qidi/QIDI UltraPA-CF25" + ], "OFLSBS99": [ "OrcaFilamentLibrary/Generic SBS" ], @@ -4665,6 +4503,30 @@ "OFMQJToc": [ "OrcaFilamentLibrary/Elegoo PETG-GF" ], + "OFN0X7oN": [ + "Qidi/QIDI PLA Basic" + ], + "OFN0pBpo": [ + "Qidi/Qidi Generic TPU 95A" + ], + "OFNX5uRT": [ + "Qidi/QIDI TPU-Aero" + ], + "OFOW9K96": [ + "Qidi/Qidi TPU 95A-HF" + ], + "OFOysPuE": [ + "Qidi/QIDI TPU-GF" + ], + "OFPokkKe": [ + "Qidi/QIDI PETG-CF" + ], + "OFPwi9X0": [ + "Qidi/HATCHBOX ABS" + ], + "OFQZINrX": [ + "Qidi/QIDI ABS-GF10" + ], "OFQhLoxN": [ "OrcaFilamentLibrary/Elegoo PLA Wood" ], @@ -4674,40 +4536,133 @@ "OFRS2Ggt": [ "OrcaFilamentLibrary/Generic PP-CF" ], + "OFSSuKRr": [ + "Qidi/QIDI PETG Basic" + ], "OFT3TqB6": [ "OrcaFilamentLibrary/Elas ASA" ], + "OFToBodi": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "OFUJw3Lx": [ + "Qidi/QIDI PEBA 95A" + ], + "OFUkpobY": [ + "Qidi/QIDI PAHT-CF" + ], + "OFV4hD1o": [ + "Qidi/QIDI PLA Rapido Metal" + ], "OFVLuVmD": [ "OrcaFilamentLibrary/Elegoo Rapid PETG" ], + "OFVhG0yM": [ + "Qidi/QIDI ABS Odorless" + ], + "OFW8UdlP": [ + "Qidi/QIDI ABS Rapido" + ], + "OFWkCAdc": [ + "Qidi/QIDI PETG Tough 0.2 nozzle" + ], + "OFWyCd0Y": [ + "Qidi/QIDI Support For PET/PA" + ], + "OFXNO5Of": [ + "Qidi/QIDI PLA Rapido 0.2 nozzle" + ], + "OFXcfTEb": [ + "Qidi/Tinmorry PETG-ECO" + ], + "OFXkwkn6": [ + "Qidi/QIDI PA-Ultra" + ], "OFXmQgno": [ "OrcaFilamentLibrary/eSUN PLA-Marble" ], + "OFYH00jV": [ + "Qidi/QIDI ABS-GF" + ], + "OFZAkPHG": [ + "Qidi/QIDI PPS-GF" + ], "OFZhdVnP": [ "OrcaFilamentLibrary/eSUN PLA-Basic" ], + "OFa5cFqE": [ + "Qidi/QIDI Support For PAHT" + ], + "OFa6L3Of": [ + "Qidi/Qidi PC-ABS-FR" + ], + "OFbS9rjH": [ + "Qidi/QIDI PETG Rapido" + ], "OFbgt3u3": [ "OrcaFilamentLibrary/Elas PLA Basic" ], + "OFceJcLf": [ + "Qidi/PolyLite PLA" + ], "OFenGPBR": [ "OrcaFilamentLibrary/Elegoo PETG Translucent" ], + "OFeybQvK": [ + "Qidi/QIDI ABS Rapido 0.2 nozzle" + ], "OFfB1QKi": [ "Flashforge/Flashforge HS PETG", "OrcaFilamentLibrary/Generic PETG HF" ], + "OFfJoIgg": [ + "Qidi/QIDI PAHT-GF" + ], + "OFfdxQok": [ + "Qidi/Generic PLA+" + ], + "OFiJYDPC": [ + "Qidi/HATCHBOX PLA" + ], + "OFidJLn8": [ + "Qidi/PolyLite ABS" + ], + "OFjohFkg": [ + "Qidi/QIDI PETG Translucent" + ], + "OFmF1xL9": [ + "Qidi/QIDI ASA-CF" + ], + "OFmKNi3f": [ + "Qidi/QIDI PLA Rapido" + ], "OFmeQjRP": [ "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" ], + "OFnj7bPm": [ + "Qidi/QIDI ABS Rapido 0.6 nozzle" + ], + "OFnsWQTp": [ + "Qidi/QIDI WOOD Rapido" + ], "OFpwg2Qh": [ "OrcaFilamentLibrary/Elegoo ASA-CF" ], + "OFqPp2yL": [ + "Qidi/QIDI PETG Tough 0.6 nozzle" + ], "OFqh1Ngp": [ "OrcaFilamentLibrary/Elegoo PLA-CF" ], + "OFqyIUDi": [ + "Qidi/Qidi PLA-CF" + ], "OFrgQ1Ns": [ "OrcaFilamentLibrary/Elas PLA Pro" ], + "OFs1CbB1": [ + "Qidi/QIDI PLA Rapido 0.8 nozzle" + ], "OFs6lLH7": [ "OrcaFilamentLibrary/Elegoo PLA Silk" ], @@ -4717,12 +4672,27 @@ "OFsNZcid": [ "OrcaFilamentLibrary/PolyLite Dual PLA" ], + "OFuTFxVP": [ + "Qidi/Overture ABS" + ], + "OFuidAEg": [ + "Qidi/Bambu ABS" + ], "OFutwD6f": [ "OrcaFilamentLibrary/Elegoo PLA Glow" ], + "OFv2NHLC": [ + "Qidi/QIDI ABS-GF25" + ], + "OFvN3117": [ + "Qidi/QIDI PLA Matte Basic" + ], "OFw4OHWE": [ "OrcaFilamentLibrary/Elas PETG Basic" ], + "OFwHPTvy": [ + "Qidi/Qidi Generic PLA+" + ], "OFzrWlH5": [ "OrcaFilamentLibrary/Elegoo PETG HF" ], From 4fc964d29343de1651451e406dc0cba4e25b9cbc Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:07:30 +0800 Subject: [PATCH 005/208] Flashforge: re-mint umbrella and OFL-riding filament_ids per family Phase 2 of the filament_id cleanup (69 within-vendor collision groups plus the 9 live library-cross groups on Creator 5/5 Pro). 507 filament_id edits + 12 compatible_printers trims (G3U 0.6/0.8 bases and HS bases over-claiming printers covered by dedicated variants): - The FFG01 umbrella (~140 presets across many families) is broken up: the git-verified introducing family (Flashforge Generic PLA) keeps FFG01, and 83 other families get fresh deterministic mints; the GFB99/GFG99/GFL99 G3U-era block is resolved the same way. - Flashforge-branded presets riding OrcaFilamentLibrary generic ids (OGFB99/OGFG99/OGFL98/OGFL99/OGFN96/OGFN98/OGFS98/OGFS99/OGFU99) get their own family mints; true generic tunings (Generic PLA / PLA Silk / BVOH) keep the library id with the library base name (alias-shadow-consistent). - Layout deviation, signed off: minted ids are declared as own keys on every instantiated member instead of new @base roots, because these families inherit up to six heterogeneous per-era umbrella parents and config-preserving roots would add ~80 artificial files. The snapshot ledger records the resulting instantiated_with_id/id_overrides growth, which is exactly the ratchet mechanism for keeping such shapes visible. Verified: config-equivalence gate zero unexpected diffs; extra check exit 0; --check exit 0; validator -l 2 exit 0; extended -f -v Flashforge exit 0 (was 69 groups + 9 library-cross). --- .../FlashForge PC @FF G4 0.6 HF nozzle.json | 1 + .../FlashForge PC @FF G4 0.6 nozzle.json | 1 + .../FlashForge PC @FF G4 0.8 HF nozzle.json | 1 + .../FlashForge PC @FF G4P 0.6 HF nozzle.json | 1 + .../FlashForge PC @FF G4P 0.6 nozzle.json | 1 + .../FlashForge PC @FF G4P 0.8 HF nozzle.json | 1 + .../FlashForge PPS @FF G4 0.6 HF nozzle.json | 1 + .../FlashForge PPS @FF G4 0.6 nozzle.json | 1 + .../FlashForge PPS @FF G4 0.8 HF nozzle.json | 1 + .../FlashForge PPS @FF G4P 0.6 HF nozzle.json | 1 + .../FlashForge PPS @FF G4P 0.6 nozzle.json | 1 + .../FlashForge PPS @FF G4P 0.8 HF nozzle.json | 1 + .../FlashForge PPS-CF @FF G4 0.6 nozzle.json | 1 + .../FlashForge PPS-CF @FF G4P 0.6 nozzle.json | 1 + ...hforge ABS Basic @FF AD5M 0.25 nozzle.json | 1 + ...hforge ABS Basic @FF AD5X 0.25 nozzle.json | 1 + ...shforge ABS Basic @FF AD5X 0.6 nozzle.json | 1 + ...shforge ABS Basic @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge ABS Basic @FF AD5X.json | 1 + .../filament/Flashforge ABS Basic @FF C5.json | 1 + .../Flashforge ABS Basic @FF C5P.json | 1 + ...ashforge ABS Basic @FF G4 0.25 nozzle.json | 1 + ...hforge ABS Basic @FF G4 0.6 HF nozzle.json | 1 + ...lashforge ABS Basic @FF G4 0.6 nozzle.json | 1 + ...hforge ABS Basic @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge ABS Basic @FF G4 HF.json | 1 + .../filament/Flashforge ABS Basic @FF G4.json | 1 + ...shforge ABS Basic @FF G4P 0.25 nozzle.json | 1 + ...forge ABS Basic @FF G4P 0.6 HF nozzle.json | 1 + ...ashforge ABS Basic @FF G4P 0.6 nozzle.json | 1 + ...forge ABS Basic @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge ABS Basic @FF G4P HF.json | 1 + .../Flashforge ABS Basic @FF G4P.json | 1 + .../filament/Flashforge ABS Basic.json | 1 + .../Flashforge ABS-CF @FF G4 0.6 nozzle.json | 1 + .../filament/Flashforge ABS-CF @FF G4.json | 1 + .../Flashforge ABS-CF @FF G4P 0.6 nozzle.json | 1 + .../filament/Flashforge ABS-CF @FF G4P.json | 1 + .../filament/Flashforge ABS-GF @FF C5.json | 1 + .../filament/Flashforge ABS-GF @FF C5P.json | 1 + ...hforge ASA Basic @FF AD5M 0.25 nozzle.json | 1 + ...hforge ASA Basic @FF AD5X 0.25 nozzle.json | 1 + ...shforge ASA Basic @FF AD5X 0.6 nozzle.json | 1 + ...shforge ASA Basic @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge ASA Basic @FF AD5X.json | 1 + .../filament/Flashforge ASA Basic @FF C5.json | 1 + .../Flashforge ASA Basic @FF C5P.json | 1 + ...ashforge ASA Basic @FF G4 0.25 nozzle.json | 1 + ...hforge ASA Basic @FF G4 0.6 HF nozzle.json | 1 + ...lashforge ASA Basic @FF G4 0.6 nozzle.json | 1 + ...hforge ASA Basic @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge ASA Basic @FF G4 HF.json | 1 + .../filament/Flashforge ASA Basic @FF G4.json | 1 + ...shforge ASA Basic @FF G4P 0.25 nozzle.json | 1 + ...forge ASA Basic @FF G4P 0.6 HF nozzle.json | 1 + ...ashforge ASA Basic @FF G4P 0.6 nozzle.json | 1 + ...forge ASA Basic @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge ASA Basic @FF G4P HF.json | 1 + .../Flashforge ASA Basic @FF G4P.json | 1 + .../filament/Flashforge ASA Basic.json | 1 + .../filament/Flashforge ASA-CF @FF C5.json | 1 + .../filament/Flashforge ASA-CF @FF C5P.json | 1 + .../filament/Flashforge ASA-CF @FF G4.json | 1 + .../filament/Flashforge ASA-CF @FF G4P.json | 1 + .../filament/Flashforge ASA-CF.json | 1 + .../filament/Flashforge ASA-GF @FF C5.json | 1 + .../filament/Flashforge ASA-GF @FF C5P.json | 1 + .../filament/Flashforge Generic ABS @G3U.json | 1 - ...orge Generic ASA @FF AD5M 0.25 Nozzle.json | 2 +- ...lashforge Generic ASA @G3U 0.6 Nozzle.json | 2 +- .../filament/Flashforge Generic ASA @G3U.json | 3 +- .../filament/Flashforge Generic ASA.json | 2 +- ...ashforge Generic HIPS @G3U 0.6 Nozzle.json | 2 +- .../filament/Flashforge Generic HIPS.json | 3 +- ...e Generic HS PLA @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge Generic HS PLA.json | 2 +- ...ashforge Generic PETG @G3U 0.6 Nozzle.json | 2 +- ...ashforge Generic PETG @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PETG @G3U.json | 4 +- ...forge Generic PETG-CF @G3U 0.6 Nozzle.json | 2 +- ...forge Generic PETG-CF @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PETG-CF @G3U.json | 4 +- .../Flashforge Generic PETG-CF10.json | 2 +- ...hforge Generic PLA-CF @G3U 0.6 Nozzle.json | 2 +- ...hforge Generic PLA-CF @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PLA-CF @G3U.json | 4 +- .../filament/Flashforge Generic PLA-CF10.json | 2 +- ...Generic PLA-SILK @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge Generic PLA-Silk.json | 2 +- .../filament/Flashforge Generic PVA.json | 2 +- .../filament/Flashforge Generic TPU.json | 2 +- .../filament/Flashforge HIPS @FF C5.json | 1 + .../filament/Flashforge HIPS @FF C5P.json | 1 + .../Flashforge HIPS @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge HIPS @FF G4 0.6 nozzle.json | 1 + .../Flashforge HIPS @FF G4 0.8 HF nozzle.json | 1 + .../filament/Flashforge HIPS @FF G4 HF.json | 1 + .../filament/Flashforge HIPS @FF G4.json | 1 + ...Flashforge HIPS @FF G4P 0.6 HF nozzle.json | 1 + .../Flashforge HIPS @FF G4P 0.6 nozzle.json | 1 + ...Flashforge HIPS @FF G4P 0.8 HF nozzle.json | 1 + .../filament/Flashforge HIPS @FF G4P HF.json | 1 + .../filament/Flashforge HIPS @FF G4P.json | 1 + ...ashforge HS PETG @FF AD5M 0.25 nozzle.json | 1 + ...ashforge HS PETG @FF AD5X 0.25 nozzle.json | 1 + ...lashforge HS PETG @FF AD5X 0.6 nozzle.json | 1 + ...lashforge HS PETG @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge HS PETG @FF AD5X.json | 1 + .../filament/Flashforge HS PETG @FF C5.json | 1 + .../filament/Flashforge HS PETG @FF C5P.json | 1 + ...Flashforge HS PETG @FF G4 0.25 nozzle.json | 1 + ...ashforge HS PETG @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge HS PETG @FF G4 0.6 nozzle.json | 1 + ...ashforge HS PETG @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge HS PETG @FF G4 HF.json | 1 + .../filament/Flashforge HS PETG @FF G4.json | 1 + ...lashforge HS PETG @FF G4P 0.25 nozzle.json | 1 + ...shforge HS PETG @FF G4P 0.6 HF nozzle.json | 1 + ...Flashforge HS PETG @FF G4P 0.6 nozzle.json | 1 + ...shforge HS PETG @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge HS PETG @FF G4P HF.json | 1 + .../filament/Flashforge HS PETG @FF G4P.json | 1 + .../filament/Flashforge HS PETG.json | 1 + ...lashforge HS PLA @FF AD5M 0.25 Nozzle.json | 2 +- ...lashforge HS PLA @FF AD5X 0.25 nozzle.json | 1 + ...Flashforge HS PLA @FF AD5X 0.6 nozzle.json | 1 + ...Flashforge HS PLA @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge HS PLA @FF AD5X.json | 1 + .../filament/Flashforge HS PLA @FF C5.json | 1 + .../filament/Flashforge HS PLA @FF C5P.json | 1 + .../Flashforge HS PLA @FF G4 0.25 nozzle.json | 1 + ...lashforge HS PLA @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge HS PLA @FF G4 0.6 nozzle.json | 1 + ...lashforge HS PLA @FF G4 0.8 HF nozzle.json | 1 + .../filament/Flashforge HS PLA @FF G4 HF.json | 1 + .../filament/Flashforge HS PLA @FF G4.json | 1 + ...Flashforge HS PLA @FF G4P 0.25 nozzle.json | 1 + ...ashforge HS PLA @FF G4P 0.6 HF nozzle.json | 1 + .../Flashforge HS PLA @FF G4P 0.6 nozzle.json | 1 + ...ashforge HS PLA @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge HS PLA @FF G4P HF.json | 1 + .../filament/Flashforge HS PLA @FF G4P.json | 1 + ... HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge HS PLA Burnt Ti @FF G4 HF.json | 1 + ...HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json | 1 + ...Flashforge HS PLA Burnt Ti @FF G4P HF.json | 1 + ...orge HS PLA Burnt Ti@FF G4 0.6 nozzle.json | 1 + ...e HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json | 1 + ...rge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json | 1 + ... HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json | 1 + .../filament/Flashforge HS PLA.json | 6 +- .../Flashforge PA @FF G4 0.6 HF nozzle.json | 1 + .../filament/Flashforge PA @FF G4 HF.json | 1 + .../filament/Flashforge PA @FF G4.json | 1 + .../Flashforge PA @FF G4P 0.6 HF nozzle.json | 1 + .../filament/Flashforge PA @FF G4P HF.json | 1 + .../filament/Flashforge PA @FF G4P.json | 1 + .../filament/Flashforge PA-CF @FF C5.json | 1 + .../filament/Flashforge PA-CF @FF C5P.json | 1 + .../filament/Flashforge PA-CF @FF G4.json | 1 + .../filament/Flashforge PA-CF @FF G4P.json | 1 + .../filament/Flashforge PA12-CF.json | 1 + .../filament/Flashforge PA6-CF.json | 1 + .../filament/Flashforge PA66-CF.json | 1 + .../filament/Flashforge PAHT-CF @FF C5.json | 1 + .../filament/Flashforge PAHT-CF @FF C5P.json | 1 + .../filament/Flashforge PAHT-CF @FF G4.json | 1 + .../filament/Flashforge PAHT-CF @FF G4P.json | 1 + .../filament/Flashforge PET-CF @FF C5.json | 1 + .../filament/Flashforge PET-CF @FF C5P.json | 1 + .../filament/Flashforge PET-CF.json | 1 + ...forge PETG Basic @FF AD5M 0.25 nozzle.json | 1 + .../filament/Flashforge PETG Basic.json | 1 + ...shforge PETG Pro @FF AD5M 0.25 nozzle.json | 1 + ...shforge PETG Pro @FF AD5X 0.25 nozzle.json | 1 + ...ashforge PETG Pro @FF AD5X 0.6 nozzle.json | 1 + ...ashforge PETG Pro @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PETG Pro @FF AD5X.json | 1 + .../filament/Flashforge PETG Pro @FF C5.json | 1 + .../filament/Flashforge PETG Pro @FF C5P.json | 1 + ...lashforge PETG Pro @FF G4 0.25 nozzle.json | 1 + ...shforge PETG Pro @FF G4 0.6 HF nozzle.json | 1 + ...Flashforge PETG Pro @FF G4 0.6 nozzle.json | 1 + ...shforge PETG Pro @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PETG Pro @FF G4 HF.json | 1 + .../filament/Flashforge PETG Pro @FF G4.json | 1 + ...ashforge PETG Pro @FF G4P 0.25 nozzle.json | 1 + ...hforge PETG Pro @FF G4P 0.6 HF nozzle.json | 1 + ...lashforge PETG Pro @FF G4P 0.6 nozzle.json | 1 + ...hforge PETG Pro @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PETG Pro @FF G4P HF.json | 1 + .../filament/Flashforge PETG Pro @FF G4P.json | 1 + .../filament/Flashforge PETG Pro.json | 1 + ...PETG Transparent @FF AD5M 0.25 nozzle.json | 1 + ...PETG Transparent @FF AD5X 0.25 nozzle.json | 1 + ... PETG Transparent @FF AD5X 0.6 nozzle.json | 1 + ... PETG Transparent @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PETG Transparent @FF AD5X.json | 1 + .../Flashforge PETG Transparent @FF C5.json | 1 + .../Flashforge PETG Transparent @FF C5P.json | 1 + ...e PETG Transparent @FF G4 0.25 nozzle.json | 1 + ...PETG Transparent @FF G4 0.6 HF nozzle.json | 1 + ...ge PETG Transparent @FF G4 0.6 nozzle.json | 1 + ...PETG Transparent @FF G4 0.8 HF nozzle.json | 1 + ...Flashforge PETG Transparent @FF G4 HF.json | 1 + .../Flashforge PETG Transparent @FF G4.json | 1 + ... PETG Transparent @FF G4P 0.25 nozzle.json | 1 + ...ETG Transparent @FF G4P 0.6 HF nozzle.json | 1 + ...e PETG Transparent @FF G4P 0.6 nozzle.json | 1 + ...ETG Transparent @FF G4P 0.8 HF nozzle.json | 1 + ...lashforge PETG Transparent @FF G4P HF.json | 1 + .../Flashforge PETG Transparent @FF G4P.json | 1 + .../filament/Flashforge PETG Transparent.json | 1 + ...lashforge PETG-CF @FF AD5X 0.6 nozzle.json | 1 + ...lashforge PETG-CF @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge PETG-CF @FF AD5X.json | 1 + .../filament/Flashforge PETG-CF @FF C5.json | 1 + .../filament/Flashforge PETG-CF @FF C5P.json | 1 + .../Flashforge PETG-CF @FF G4 0.6 nozzle.json | 1 + .../filament/Flashforge PETG-CF @FF G4.json | 1 + ...Flashforge PETG-CF @FF G4P 0.6 nozzle.json | 1 + .../filament/Flashforge PETG-CF @FF G4P.json | 1 + .../filament/Flashforge PETG-CF.json | 6 +- .../Flashforge PLA Matte @FF C5.json | 1 + .../Flashforge PLA Matte @FF C5P.json | 1 + .../Flashforge PLA Metal @FF C5.json | 1 + .../Flashforge PLA Metal @FF C5P.json | 1 + .../filament/Flashforge PLA Pro @FF C5.json | 1 + .../filament/Flashforge PLA Pro @FF C5P.json | 1 + ...hforge PLA Basic @FF AD5M 0.25 nozzle.json | 1 + ...hforge PLA Basic @FF AD5X 0.25 nozzle.json | 1 + ...shforge PLA Basic @FF AD5X 0.6 nozzle.json | 1 + ...shforge PLA Basic @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Basic @FF AD5X.json | 1 + .../filament/Flashforge PLA Basic @FF C5.json | 1 + .../Flashforge PLA Basic @FF C5P.json | 1 + ...ashforge PLA Basic @FF G4 0.25 nozzle.json | 1 + ...hforge PLA Basic @FF G4 0.6 HF nozzle.json | 1 + ...lashforge PLA Basic @FF G4 0.6 nozzle.json | 1 + ...hforge PLA Basic @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Basic @FF G4 HF.json | 1 + .../filament/Flashforge PLA Basic @FF G4.json | 1 + ...shforge PLA Basic @FF G4P 0.25 nozzle.json | 1 + ...forge PLA Basic @FF G4P 0.6 HF nozzle.json | 1 + ...ashforge PLA Basic @FF G4P 0.6 nozzle.json | 1 + ...forge PLA Basic @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Basic @FF G4P HF.json | 1 + .../Flashforge PLA Basic @FF G4P.json | 1 + .../filament/Flashforge PLA Basic.json | 1 + ...hforge PLA Buint Ti @FF G4 0.8 nozzle.json | 1 + ...forge PLA Buint Ti @FF G4P 0.8 nozzle.json | 1 + ...PLA Color Change @FF AD5M 0.25 nozzle.json | 1 + ...PLA Color Change @FF AD5X 0.25 nozzle.json | 1 + ... PLA Color Change @FF AD5X 0.6 nozzle.json | 1 + ... PLA Color Change @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Color Change @FF AD5X.json | 1 + .../Flashforge PLA Color Change @FF C5.json | 1 + .../Flashforge PLA Color Change @FF C5P.json | 1 + ...e PLA Color Change @FF G4 0.25 nozzle.json | 1 + ...PLA Color Change @FF G4 0.6 HF nozzle.json | 1 + ...ge PLA Color Change @FF G4 0.6 nozzle.json | 1 + ...PLA Color Change @FF G4 0.8 HF nozzle.json | 1 + ...Flashforge PLA Color Change @FF G4 HF.json | 1 + .../Flashforge PLA Color Change @FF G4.json | 1 + ... PLA Color Change @FF G4P 0.25 nozzle.json | 1 + ...LA Color Change @FF G4P 0.6 HF nozzle.json | 1 + ...e PLA Color Change @FF G4P 0.6 nozzle.json | 1 + ...LA Color Change @FF G4P 0.8 HF nozzle.json | 1 + ...lashforge PLA Color Change @FF G4P HF.json | 1 + .../Flashforge PLA Color Change @FF G4P.json | 1 + .../filament/Flashforge PLA Color Change.json | 1 + ...forge PLA Galaxy @FF AD5M 0.25 nozzle.json | 1 + ...forge PLA Galaxy @FF AD5X 0.25 nozzle.json | 1 + ...hforge PLA Galaxy @FF AD5X 0.6 nozzle.json | 1 + ...hforge PLA Galaxy @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Galaxy @FF AD5X.json | 1 + .../Flashforge PLA Galaxy @FF C5.json | 1 + .../Flashforge PLA Galaxy @FF C5P.json | 1 + ...shforge PLA Galaxy @FF G4 0.25 nozzle.json | 1 + ...forge PLA Galaxy @FF G4 0.6 HF nozzle.json | 1 + ...ashforge PLA Galaxy @FF G4 0.6 nozzle.json | 1 + ...forge PLA Galaxy @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Galaxy @FF G4 HF.json | 1 + .../Flashforge PLA Galaxy @FF G4.json | 1 + ...hforge PLA Galaxy @FF G4P 0.25 nozzle.json | 1 + ...orge PLA Galaxy @FF G4P 0.6 HF nozzle.json | 1 + ...shforge PLA Galaxy @FF G4P 0.6 nozzle.json | 1 + ...orge PLA Galaxy @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Galaxy @FF G4P HF.json | 1 + .../Flashforge PLA Galaxy @FF G4P.json | 1 + .../filament/Flashforge PLA Galaxy.json | 1 + ...rge PLA Luminous @FF AD5M 0.25 nozzle.json | 1 + ...rge PLA Luminous @FF AD5X 0.25 nozzle.json | 1 + ...orge PLA Luminous @FF AD5X 0.6 nozzle.json | 1 + ...orge PLA Luminous @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Luminous @FF AD5X.json | 1 + .../Flashforge PLA Luminous @FF C5.json | 1 + .../Flashforge PLA Luminous @FF C5P.json | 1 + ...forge PLA Luminous @FF G4 0.25 nozzle.json | 1 + ...rge PLA Luminous @FF G4 0.6 HF nozzle.json | 1 + ...rge PLA Luminous @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Luminous @FF G4 HF.json | 1 + .../Flashforge PLA Luminous @FF G4.json | 1 + ...orge PLA Luminous @FF G4P 0.25 nozzle.json | 1 + ...ge PLA Luminous @FF G4P 0.6 HF nozzle.json | 1 + ...ge PLA Luminous @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Luminous @FF G4P HF.json | 1 + .../Flashforge PLA Luminous @FF G4P.json | 1 + .../filament/Flashforge PLA Luminous.json | 1 + ...hforge PLA Matte @FF AD5M 0.25 nozzle.json | 1 + ...hforge PLA Matte @FF AD5X 0.25 nozzle.json | 1 + ...shforge PLA Matte @FF AD5X 0.6 nozzle.json | 1 + ...shforge PLA Matte @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Matte @FF AD5X.json | 1 + ...ashforge PLA Matte @FF G4 0.25 nozzle.json | 1 + ...hforge PLA Matte @FF G4 0.6 HF nozzle.json | 1 + ...lashforge PLA Matte @FF G4 0.6 nozzle.json | 1 + ...hforge PLA Matte @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Matte @FF G4 HF.json | 1 + .../filament/Flashforge PLA Matte @FF G4.json | 1 + ...shforge PLA Matte @FF G4P 0.25 nozzle.json | 1 + ...forge PLA Matte @FF G4P 0.6 HF nozzle.json | 1 + ...ashforge PLA Matte @FF G4P 0.6 nozzle.json | 1 + ...forge PLA Matte @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Matte @FF G4P HF.json | 1 + .../Flashforge PLA Matte @FF G4P.json | 1 + .../filament/Flashforge PLA Matte.json | 1 + ...hforge PLA Metal @FF AD5M 0.25 nozzle.json | 1 + ...hforge PLA Metal @FF AD5X 0.25 nozzle.json | 1 + ...shforge PLA Metal @FF AD5X 0.6 nozzle.json | 1 + ...shforge PLA Metal @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Metal @FF AD5X.json | 1 + ...ashforge PLA Metal @FF G4 0.25 nozzle.json | 1 + ...hforge PLA Metal @FF G4 0.6 HF nozzle.json | 1 + ...lashforge PLA Metal @FF G4 0.6 nozzle.json | 1 + ...hforge PLA Metal @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Metal @FF G4 HF.json | 1 + .../filament/Flashforge PLA Metal @FF G4.json | 1 + ...shforge PLA Metal @FF G4P 0.25 nozzle.json | 1 + ...forge PLA Metal @FF G4P 0.6 HF nozzle.json | 1 + ...ashforge PLA Metal @FF G4P 0.6 nozzle.json | 1 + ...forge PLA Metal @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Metal @FF G4P HF.json | 1 + .../Flashforge PLA Metal @FF G4P.json | 1 + .../filament/Flashforge PLA Metal.json | 1 + ...ashforge PLA Pro @FF AD5M 0.25 nozzle.json | 1 + ...ashforge PLA Pro @FF AD5X 0.25 nozzle.json | 1 + ...lashforge PLA Pro @FF AD5X 0.6 nozzle.json | 1 + ...lashforge PLA Pro @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge PLA Pro @FF AD5X.json | 1 + ...Flashforge PLA Pro @FF G4 0.25 nozzle.json | 1 + ...ashforge PLA Pro @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge PLA Pro @FF G4 0.6 nozzle.json | 1 + ...ashforge PLA Pro @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Pro @FF G4 HF.json | 1 + .../filament/Flashforge PLA Pro @FF G4.json | 1 + ...lashforge PLA Pro @FF G4P 0.25 nozzle.json | 1 + ...shforge PLA Pro @FF G4P 0.6 HF nozzle.json | 1 + ...Flashforge PLA Pro @FF G4P 0.6 nozzle.json | 1 + ...shforge PLA Pro @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Pro @FF G4P HF.json | 1 + .../filament/Flashforge PLA Pro @FF G4P.json | 1 + .../filament/Flashforge PLA Pro.json | 1 + ...shforge PLA Silk @FF AD5M 0.25 nozzle.json | 1 + ...shforge PLA Silk @FF AD5X 0.25 nozzle.json | 1 + ...ashforge PLA Silk @FF AD5X 0.6 nozzle.json | 1 + ...ashforge PLA Silk @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Silk @FF AD5X.json | 1 + .../filament/Flashforge PLA Silk @FF C5.json | 1 + .../filament/Flashforge PLA Silk @FF C5P.json | 1 + ...lashforge PLA Silk @FF G4 0.25 nozzle.json | 1 + ...shforge PLA Silk @FF G4 0.6 HF nozzle.json | 1 + ...Flashforge PLA Silk @FF G4 0.6 nozzle.json | 1 + ...shforge PLA Silk @FF G4 0.8 HF nozzle.json | 1 + .../Flashforge PLA Silk @FF G4 HF.json | 1 + .../filament/Flashforge PLA Silk @FF G4.json | 1 + ...ashforge PLA Silk @FF G4P 0.25 nozzle.json | 1 + ...hforge PLA Silk @FF G4P 0.6 HF nozzle.json | 1 + ...lashforge PLA Silk @FF G4P 0.6 nozzle.json | 1 + ...hforge PLA Silk @FF G4P 0.8 HF nozzle.json | 1 + .../Flashforge PLA Silk @FF G4P HF.json | 1 + .../filament/Flashforge PLA Silk @FF G4P.json | 1 + .../filament/Flashforge PLA Silk.json | 1 + ...orge PLA Sparkle @FF AD5M 0.25 nozzle.json | 1 + ...orge PLA Sparkle @FF AD5X 0.25 nozzle.json | 1 + ...forge PLA Sparkle @FF AD5X 0.6 nozzle.json | 1 + ...forge PLA Sparkle @FF AD5X 0.8 nozzle.json | 1 + .../Flashforge PLA Sparkle @FF AD5X.json | 1 + ...hforge PLA Sparkle @FF G4 0.25 nozzle.json | 1 + ...orge PLA Sparkle @FF G4 0.6 HF nozzle.json | 1 + ...shforge PLA Sparkle @FF G4 0.6 nozzle.json | 1 + .../Flashforge PLA Sparkle @FF G4 HF.json | 1 + .../Flashforge PLA Sparkle @FF G4.json | 1 + ...forge PLA Sparkle @FF G4P 0.25 nozzle.json | 1 + ...rge PLA Sparkle @FF G4P 0.6 HF nozzle.json | 1 + ...hforge PLA Sparkle @FF G4P 0.6 nozzle.json | 1 + .../Flashforge PLA Sparkle @FF G4P HF.json | 1 + .../Flashforge PLA Sparkle @FF G4P.json | 1 + .../filament/Flashforge PLA Sparkle.json | 1 + ...Flashforge PLA-CF @FF AD5X 0.6 nozzle.json | 1 + ...Flashforge PLA-CF @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge PLA-CF @FF AD5X.json | 1 + .../filament/Flashforge PLA-CF @FF C5.json | 1 + .../filament/Flashforge PLA-CF @FF C5P.json | 1 + .../Flashforge PLA-CF @FF G4 0.6 nozzle.json | 1 + .../filament/Flashforge PLA-CF @FF G4.json | 1 + .../Flashforge PLA-CF @FF G4P 0.6 nozzle.json | 1 + .../filament/Flashforge PLA-CF @FF G4P.json | 1 + .../filament/Flashforge PLA-CF.json | 6 +- .../filament/Flashforge PPA-CF @FF C5.json | 1 + .../filament/Flashforge PPA-CF @FF C5P.json | 1 + .../filament/Flashforge PPA-CF.json | 1 + .../filament/Flashforge PPA-GF.json | 1 + .../filament/Flashforge PPS @FF G4.json | 1 + .../filament/Flashforge PPS @FF G4P.json | 1 + .../filament/Flashforge PPS-CF @FF C5.json | 1 + .../filament/Flashforge PPS-CF @FF C5P.json | 1 + .../filament/Flashforge PPS-CF @FF G4.json | 1 + .../filament/Flashforge PPS-CF @FF G4P.json | 1 + .../filament/Flashforge PPS-CF.json | 1 + .../filament/Flashforge PVA @FF C5.json | 1 + .../filament/Flashforge PVA @FF C5P.json | 1 + ...ashforge TPU 65D @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge TPU 65D @FF G4 0.6 nozzle.json | 1 + ...ashforge TPU 65D @FF G4 0.8 HF nozzle.json | 1 + ...shforge TPU 65D @FF G4P 0.6 HF nozzle.json | 1 + ...Flashforge TPU 65D @FF G4P 0.6 nozzle.json | 1 + ...shforge TPU 65D @FF G4P 0.8 HF nozzle.json | 1 + ...lashforge TPU 95A @FF AD5X 0.6 nozzle.json | 1 + ...lashforge TPU 95A @FF AD5X 0.8 nozzle.json | 1 + .../filament/Flashforge TPU 95A @FF AD5X.json | 1 + ...ashforge TPU 95A @FF G4 0.6 HF nozzle.json | 1 + .../Flashforge TPU 95A @FF G4 0.6 nozzle.json | 1 + ...ashforge TPU 95A @FF G4 0.8 HF nozzle.json | 1 + .../filament/Flashforge TPU 95A @FF G4.json | 1 + ...shforge TPU 95A @FF G4P 0.6 HF nozzle.json | 1 + ...Flashforge TPU 95A @FF G4P 0.6 nozzle.json | 1 + ...shforge TPU 95A @FF G4P 0.8 HF nozzle.json | 1 + .../filament/Flashforge TPU 95A @FF G4P.json | 1 + .../filament/Flashforge TPU 95A.json | 6 +- .../filament/Flashforge TPU-64D @FF C5.json | 1 + .../filament/Flashforge TPU-64D @FF C5P.json | 1 + .../filament/Flashforge TPU-90A @FF C5.json | 1 + .../filament/Flashforge TPU-90A @FF C5P.json | 1 + .../filament/Flashforge TPU-95A @FF C5.json | 1 + .../filament/Flashforge TPU-95A @FF C5P.json | 1 + .../FusRock PAHT @FF G4 0.6 HF nozzle.json | 1 + .../FusRock PAHT @FF G4 0.6 nozzle.json | 1 + .../FusRock PAHT @FF G4 0.8 HF nozzle.json | 1 + .../FusRock PAHT @FF G4P 0.6 HF nozzle.json | 1 + .../FusRock PAHT @FF G4P 0.6 nozzle.json | 1 + .../FusRock PAHT @FF G4P 0.8 HF nozzle.json | 1 + .../filament/FusRock PAHT-CF @FF C5.json | 1 + .../filament/FusRock PAHT-CF @FF C5P.json | 1 + .../FusRock PAHT-CF @FF G4 0.6 nozzle.json | 1 + .../filament/FusRock PAHT-CF @FF G4.json | 1 + .../FusRock PAHT-CF @FF G4P 0.6 nozzle.json | 1 + .../filament/FusRock PAHT-CF @FF G4P.json | 1 + .../FusRock PET @FF G4P 0.8 HF nozzle.json | 1 + .../FusRock PET-CF @FF G4 0.6 nozzle.json | 1 + .../filament/FusRock PET-CF @FF G4.json | 1 + .../FusRock PET-CF @FF G4P 0.6 nozzle.json | 1 + .../filament/FusRock PET-CF @FF G4P.json | 1 + .../filament/FusRock S-Multi @FF C5.json | 1 + .../filament/FusRock S-Multi @FF C5P.json | 1 + .../filament/FusRock S-PAHT @FF C5.json | 1 + .../filament/FusRock S-PAHT @FF C5P.json | 1 + .../FusRock/FusRock Generic NexPA-CF25.json | 2 +- ...sRock Generic PAHT-CF @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic PAHT-CF.json | 3 +- .../FusRock/FusRock Generic PAHT-GF.json | 2 +- ...usRock Generic PET-CF @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic PET-CF.json | 3 +- .../FusRock/FusRock Generic PET-GF.json | 2 +- ...sRock Generic S-Multi @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic S-Multi.json | 2 +- ...usRock Generic S-PAHT @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic S-PAHT.json | 2 +- .../filament/Generic ASA @Flashforge AD4.json | 2 +- .../Generic PET @FF G4 0.6 HF nozzle.json | 1 + .../Generic PET @FF G4 0.6 nozzle.json | 1 + .../Generic PET @FF G4 0.8 HF nozzle.json | 1 + .../filament/Generic PET @FF G4.json | 1 + .../Generic PET @FF G4P 0.6 HF nozzle.json | 1 + .../Generic PET @FF G4P 0.6 nozzle.json | 1 + .../Generic PET @FF G4P 0.8 HF nozzle.json | 1 + .../filament/Generic PET @FF G4P.json | 1 + .../Generic PETG-CF10 @Flashforge AD4.json | 2 +- .../Generic PLA Silk @Flashforge AD4.json | 2 +- .../Generic PLA-CF10 @Flashforge AD4.json | 2 +- .../Generic TPU 85A @FF AD5X 0.6 nozzle.json | 1 + .../Generic TPU 85A @FF AD5X 0.8 nozzle.json | 1 + .../filament/Generic TPU 85A @FF AD5X.json | 1 + .../filament/Generic TPU @Flashforge AD4.json | 2 +- .../filament/Generic TPU-64D @FF C5.json | 1 + .../filament/Generic TPU-64D @FF C5P.json | 1 + .../filament/Generic TPU-90A @FF C5.json | 1 + .../filament/Generic TPU-90A @FF C5P.json | 1 + .../filament/Generic TPU-95A @FF C5.json | 1 + .../filament/Generic TPU-95A @FF C5P.json | 1 + .../Polymaker CoPA @FF G4 0.6 HF nozzle.json | 1 + .../Polymaker CoPA @FF G4 0.6 nozzle.json | 1 + .../Polymaker CoPA @FF G4 0.8 HF nozzle.json | 1 + .../Polymaker CoPA @FF G4P 0.6 HF nozzle.json | 1 + .../Polymaker CoPA @FF G4P 0.6 nozzle.json | 1 + .../Polymaker CoPA @FF G4P 0.8 HF nozzle.json | 1 + .../Polymaker/Polymaker Generic CoPA.json | 2 +- .../Polymaker/Polymaker Generic S1.json | 2 +- scripts/filament_id_snapshot.json | 1421 ++++++++++++++--- 509 files changed, 1710 insertions(+), 291 deletions(-) diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json index 83e1c85730..3971dfdbe0 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "M9HM8tihJzV4crs8", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json index f94eafbe9d..ada99c3b7a 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "08VjBSha6gjhJYgk", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json index d5c6c3c33d..224f0bcecf 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "JqgkmxnjlnQ3uw1u", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json index 2bf41bc64b..e712311eb7 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "vvLLPvSeb5PYbT1R", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json index e8806df046..2e574b8dec 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "mPJMPfFCyfWdKzMO", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json index 56562e51e7..f3e61a04b2 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HTgqTUTznOlfCRAd", + "filament_id": "OFL7vEML", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json index e5b251acab..cc05448a52 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "3w8fnDjkoFaJ6Nhw", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json index 7394511a16..0ba30d9ee6 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "owHbDqY55rFtSegz", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json index 87e74372e5..29ffe9c98e 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "eFK1zzT1JY9ZnEl9", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json index 7d6d3c1a95..ae67869d15 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "E8CcstoHzax78ZJY", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json index 01672b8f65..44ca312535 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "xa22FD8bRVGsLiPJ", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json index ff77d7095a..d6fe454c37 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "bZ9dbA8dIu9mjWyN", + "filament_id": "OFgJX0Fc", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json index b1cb0787b5..0e1dfd9b33 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "4w0oK3F50O1DUqsu", + "filament_id": "OFmduKVr", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json index fc6f6e975a..6133699c0b 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "94vPnztRcpnbfAKx", + "filament_id": "OFmduKVr", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json index dc0989bbc4..97f3d5f8fd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SuEfcE6AYK8N1FI4", + "filament_id": "OF5T1Y9R", "instantiation": "true", "filament_settings_id": [ "Flashforge ABS Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json index 0deb98db56..e37450d400 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gmkc6fRLMI73Iut8", + "filament_id": "OF5T1Y9R", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json index 7f8ec43e72..bb30b1725b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "fgEYZ1Mgyp1AvtwU", + "filament_id": "OF5T1Y9R", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json index 0f95b37aad..a426566340 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "cIxbQMVdG5K85rJr", + "filament_id": "OF5T1Y9R", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json index 4b533b00a7..bbfa73ccd4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "9GXBeuCUrScJfmJB", + "filament_id": "OF5T1Y9R", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json index d53b5cc2c1..b9251a5672 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ds0GgE1jssl4IbF3", + "filament_id": "OF5T1Y9R", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json index eb4ee53f53..0ab31a8276 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UTWbwTYuXYbBx3uw", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json index fe13cbb5cb..09a01dd503 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "CuckX5MsN69806ow", + "filament_id": "OF5T1Y9R", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json index 4a3bd054b2..f9a0433cae 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "NttDJCrfB01uwMDl", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json index 594f291957..171484abbb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "hJd6dG6OdEffEFC7", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json index 34d1f4e94c..7143e0b03a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "8yFCuCnEuI3dUvQy", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json index 60847876a0..2734feeb55 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "np4fP5kghRlczOTT", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json index f267e9bc74..a669c267b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "8o2maTFOXq0XR6Dm", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json index 1ec700928b..0d556da17d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "MBo02hFXn0ebDRdb", + "filament_id": "OF5T1Y9R", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json index baa7e84ede..bbf04ce6bd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "vCsjC0UnKenzIR0O", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json index d4b2a75adb..29fb16653b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "xhxVdlmh5r7meoHo", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json index ce8cb40ddc..1ef697a83b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "6dlQN4Xhd6kGZ0Qn", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json index 9518e3fb1c..12d1a7c767 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "r8WVFPozL8f5oLVJ", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json index 80ad9a2da8..798bc592bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "xw0pZNmhw1K4tPQ1", + "filament_id": "OF5T1Y9R", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json index 3e93a31243..868e133f3e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "m6QLC2UaS3fW298i", + "filament_id": "OF5T1Y9R", "instantiation": "true", "filament_settings_id": [ "Flashforge ABS Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json index 3b7c0a2db6..4ea4ae4577 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Nx3Px0Zu356IKShT", + "filament_id": "OFWs8KIZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index a17e48af0d..b45e46341e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "d4EGsmMeEDCOUBF2", + "filament_id": "OFWs8KIZ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json index ed4c177d18..b925f68e88 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "9ziPFKsjESbw1pXL", + "filament_id": "OFWs8KIZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index dd952e95a1..16bcc1aeb3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "NzJJs6yrSik5xuyX", + "filament_id": "OFWs8KIZ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json index 3b1b422c33..1074c58061 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UinlbuXNbad2kN0s", + "filament_id": "OFqRWRU6", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json index 72364ebe47..e4f1909d8a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ycgiXY41kqNgslE3", + "filament_id": "OFqRWRU6", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json index fcdb3faedd..6a0253be4a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "kjS4k8nrIdNNNoWw", + "filament_id": "OFcy60o4", "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json index 3294344bd4..618cfdea27 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "Y647IFVkk5JIXzte", + "filament_id": "OFcy60o4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index 9904aea39c..bf4a2d3194 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "vaOyXUcrJ97KE7ZW", + "filament_id": "OFcy60o4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index 4353992934..f74bcf4ab7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "iLWq5pJ3ox9EAM1Z", + "filament_id": "OFcy60o4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index cb4a543dbd..4c3018a061 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "i7PUPYxy0Z9weyyA", + "filament_id": "OFcy60o4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json index 485f06e046..3aef25a533 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UUSDyOetXSOuBIUd", + "filament_id": "OFcy60o4", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json index 4af0b8b47c..bcbd9d4721 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "2r0kwhklE24Hp94O", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json index dae515a9aa..a852169f49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XWta5jJFsCxBdEPd", + "filament_id": "OFcy60o4", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json index 4c35d0a62b..3bff670e7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "w8O6oenp0NymzCqf", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json index e4435448ae..8fcf3f85f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "thhmWRzNYLYJOeR2", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json index 86d4e12b4c..664728993c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "g5jiz6Q6or23BIo7", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json index 890dd75f0f..fb7e77b65a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "7xmWlHHNMvXBKdYS", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json index 4826e42eba..35e761b241 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "r0B8KfZ1mNWMvGqE", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json index 76cd89a82a..9d39413ec7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "quOwRRLcNfOy0sYf", + "filament_id": "OFcy60o4", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json index 324c9eec04..616e70bf34 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "CBLZqLhkwf5XKO12", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json index 461aa7bd0a..75777b3205 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Df3anJxiRXLVO9hw", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json index 0c0cc1aab1..401ffeabaa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Nu4WvBWuEhazZfh5", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json index 9a59d625d2..9e6b37e48c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "hF0h4ye3hMDtEba1", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json index 3a10f337b9..761dd56a4c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "3isZCWr4CBjFtGDX", + "filament_id": "OFcy60o4", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json index 7ccef601f3..b56e5b0453 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "SU6r879TbQMUFCij", + "filament_id": "OFcy60o4", "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json index 9956e193ee..575f408c5f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "TqU1elqwuVr9EhTA", + "filament_id": "OFM3PeVe", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json index c2a78c9e11..fbad5b186b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "nMczAtoc5W0J2WkS", + "filament_id": "OFM3PeVe", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index 846cf4c76a..d59ed639a3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "ap7X4nWKfFR53NT0", + "filament_id": "OFM3PeVe", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index d0ad27e1cd..ed2467c6e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "kZXg6odPm5iW79Qn", + "filament_id": "OFM3PeVe", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index 02db6bfea9..30ead39e25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "CI5dvVrCNk2XTU82", + "filament_id": "OFM3PeVe", "instantiation": "true", "filament_flow_ratio": [ "0.99" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json index 3a328388df..b3c448494f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "941E5MaAyFY3iv4V", + "filament_id": "OFdNORGt", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json index 46857c2b13..e970fdff0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "RdmsxyUGUX8Ot4oj", + "filament_id": "OFdNORGt", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json index 1f6b35db19..5de9f959cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json @@ -23,7 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json index d5b0d17c25..510ad8c55d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "spSRbidSN2yeZLhD", - "filament_id": "GFL99", + "filament_id": "OF4RKeng", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json index c0819fa0b1..ccae1871bc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "gVLGkoCoyrWL4DQr", - "filament_id": "GFB99", + "filament_id": "OF4RKeng", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json index fcce2738f5..1c7532543e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "c6IMgUyqOeS2HFWw", - "filament_id": "GFB99", + "filament_id": "OF4RKeng", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,7 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json index d7b6844c78..9f6e882f68 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "jMCunppmYOH5QIra", - "filament_id": "GFL99", + "filament_id": "OF4RKeng", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json index baf6514cd9..e6d8e037e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "b3CFhGGnZLzpyAWa", - "filament_id": "GFB99", + "filament_id": "OF4m9A5w", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json index 18f52c4f1f..56ac8dc465 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "n68nw5tzKZ0rq43O", - "filament_id": "GFB99", + "filament_id": "OF4m9A5w", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,7 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json index 93ee8f80cb..e95a14c2e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "1cvcaoBFNbg2GucE", - "filament_id": "GFL99", + "filament_id": "OFYZs7dN", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json index c67de4ecd3..2989f84021 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "foG37d7HZKgt6l43", - "filament_id": "GFL99", + "filament_id": "OFYZs7dN", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json index 2183965821..d9327f20f5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "W7pWKQ2EWAB5viV1", - "filament_id": "GFB99", + "filament_id": "GFG99", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json index 3e61f73029..227d881f06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "eDQb2WfDsUTvj2Nf", - "filament_id": "GFB99", + "filament_id": "GFG99", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json index 075e2e4923..ecf04bdd2b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "yo4uc7TxQbqnlRUY", - "filament_id": "GFB99", + "filament_id": "GFG99", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,8 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json index 385ec94b64..75a1d34349 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "u2OzNKIQIKUrOT9k", - "filament_id": "GFB99", + "filament_id": "OFC5CCeo", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json index 4efa8a0a0f..d87f65a404 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "7Qq8eY1kcFHTgzW3", - "filament_id": "GFB99", + "filament_id": "OFC5CCeo", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json index d3fb0d6590..b1013b2c99 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "gLrecba33jDI9PeI", - "filament_id": "GFB99", + "filament_id": "OFC5CCeo", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,8 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json index 934ba831ef..7c5de370cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "PlC4Ek7d09ytYZqJ", - "filament_id": "GFG99", + "filament_id": "OFK39W9u", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json index 57b925762b..34351c7dac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "KR0LUSD7wd55oNI6", - "filament_id": "GFB99", + "filament_id": "OFm1VZed", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json index 7300eb4bf4..9b5972f97d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "rQSFNxuuqUVzsSV2", - "filament_id": "GFB99", + "filament_id": "OFm1VZed", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json index f236a9a83b..b6507fda5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "S1UTm2oMRoQ4yM4R", - "filament_id": "GFB99", + "filament_id": "OFm1VZed", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,8 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json index 29b86ed5b1..6ef0248721 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qH3l3p0yvZHqHnwG", - "filament_id": "GFL99", + "filament_id": "OFKWVi10", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json index d04d5eb4cf..61fcd364c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "WOl0JsKxAQFo2WnW", - "filament_id": "GFL99", + "filament_id": "OFAEqlWa", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json index bb3acc4145..f3b4f693c1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NryK9oIg8wMDKVHW", - "filament_id": "GFL99", + "filament_id": "OF41QVDH", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json index 6adaf46d6e..d94e75d3df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NA0PhaTNDvEH38lF", - "filament_id": "GFB99", + "filament_id": "OFLeFaUO", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json index 473ba6ac33..57d88732de 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zQEeIIKWSgsDqlpI", - "filament_id": "GFG99", + "filament_id": "OFviQ9lH", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json index b9a10c1f18..dbcf163dda 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "ckwc7U0Q2eKHmCxY", + "filament_id": "OFhzHd2Y", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json index 8a61df2fe2..38411b21ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "AEQYrT7e4Q5J2G6C", + "filament_id": "OFhzHd2Y", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index 81c501eee9..cd5ca2143f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "jUNUZhE0BJyB64fC", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index 34dacd8f8d..e4b4e3171d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "0qMEqo9YMDLSVafs", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 756f4ddbf2..03cf58e9e0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "ek749gIdUAPq6WxT", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json index 9ca5d033bd..768677d41f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "tEohTtyHofD6l6o3", + "filament_id": "OFhzHd2Y", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json index 2e977fd084..f2de81ad74 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "oLeLrIjFJzoZha3E", + "filament_id": "OFhzHd2Y", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index 6ae4e562a2..7ea19866be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "HXGUlYY4X5IHhL3R", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 9354f7ede7..3a44280bc2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "g22Cv3zy3h5BhJYK", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index 980ab69f11..5943947947 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "aDzBXuvN7IuSP5sa", + "filament_id": "OFhzHd2Y", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json index 6f7493a72b..a3cc583ed8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "CIj24REX7BA8zPHQ", + "filament_id": "OFhzHd2Y", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json index 7d0d9befb3..440cfd4f97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "yAGyGjF6uDrjfjLn", + "filament_id": "OFhzHd2Y", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json index fbb47b2d7f..b48169a92a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "1NFhtEvvvgZiHcto", + "filament_id": "OFZQFvHQ", "instantiation": "true", "filament_settings_id": [ "Flashforge HS PETG @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json index fc0e4c7cee..62f46f554c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "eNOkWn5PT8rDpA0g", + "filament_id": "OFZQFvHQ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json index a6a28ae753..72f4577557 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "vOqAGzaYLz0XdRvC", + "filament_id": "OFZQFvHQ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json index 28c7208fad..682416a4eb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "KSuxZ3fpQz0khDSz", + "filament_id": "OFZQFvHQ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json index 3b495aebe8..7e32268d01 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "o4B1kAToVny7jw0M", + "filament_id": "OFZQFvHQ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json index 5c0421a23e..87b5639be7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "kpRved5M3NktqIYn", + "filament_id": "OFZQFvHQ", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json index ca2dcd370c..1e6c9b04dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "ypxgjHl9uIMyZIce", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json index b8f6997d97..f98635dba8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "uXGuyvVxfdQW22vu", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json index 785fd2495b..883143b259 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "q9UbakUmZPzG3xU0", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json index 57c2e5ca72..f781edfdca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "IL18Lu0qHx1RVqKD", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json index f8cfba7acd..3e1a003ac6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "2FQib7fZjcwfCnm2", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index 16e88eeb42..b800e1566d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "CtwOm90WWD4S7U6j", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json index bc806c44d8..c3d6594e7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "kvULpm0WhKiSPj8V", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json index b14a0b44ba..5df6b09e97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bFVYSPkynBBapFjq", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json index dfb79c840d..ab726c53a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "CUU7knzm4cbe1giE", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json index 6c36ff1fbb..b5dc6efb69 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "gcYvL572cumWZdnl", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json index a58ddca149..24fbd0279f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "cx99AH0C575XxAj9", + "filament_id": "OFZQFvHQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index 35a01b21ce..fdade2f06c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "RrrKoR7MVD8IFQlq", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json index a30f562b42..07c144a574 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "7VEPGuR16wNukAX2", + "filament_id": "OFZQFvHQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json index 38054ea5ae..7ade77bb7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "H9uwlPw6m6Nf7qH5", + "filament_id": "OFZQFvHQ", "instantiation": "true", "filament_settings_id": [ "Flashforge HS PETG" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json index 0ee65ec44f..e209b455e4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "OmDped3weZ4uHAtY", - "filament_id": "GFL99", + "filament_id": "OFoJUGj6", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json index 266200739a..aaac58ce66 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bfPaqPGaR5zpTsLk", + "filament_id": "OFoJUGj6", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json index 7169a76fdf..7be6dbc727 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "oD592bif4ra0ADco", + "filament_id": "OFoJUGj6", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json index 94da672d0f..c8f5744361 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "ldhMY6F7v6nK8wwf", + "filament_id": "OFoJUGj6", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json index edf25222de..01b6e9deb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "5vzOmbjHbkJXrgYM", + "filament_id": "OFoJUGj6", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json index 310fc73a32..b9e2ebeb4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xSJk7LFpYKmckPQh", + "filament_id": "OFoJUGj6", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json index 87c4ffd656..681d576ed0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xdFZUsj1cNLXdvT6", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json index ff783fbf10..89eed340d5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "JCQtuv8Abfz4jVRV", + "filament_id": "OFoJUGj6", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json index 7f4547dc19..a9e238131c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "hzxRPyH1fqarsMuN", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json index ba5f92ca7c..b25007568d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "oJsLlIIpxwGSoJTv", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json index f0fcb415c6..06a4d1a82a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "hJbNZ381ERkZ0KUB", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json index eb253a97db..6dcedacb73 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "BqavrNpwhXDXcZ3r", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json index a1acf9af42..bf84dbab17 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "cgf4Qk4iHZh7zHN5", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json index b399b0cf77..e204e3e522 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jFUS6233aq4XPgrn", + "filament_id": "OFoJUGj6", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json index 0c14a75478..eab85e45a4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "p31K69Srld6o4sQ2", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json index 5b4e2d04d4..e434c6b72c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "MwbYvnRIzlNmH81h", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json index 40c2ae337a..0d1632b731 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "rKhHmkqXYD2xN4K9", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json index 8871c32fc4..d67d10a948 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "Dshsi3O7NvYYjXJt", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json index 82b514d1af..a3d4f51084 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "mfnL6QEevCmTmOL0", + "filament_id": "OFoJUGj6", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json index a5326ae2b7..0b2c003337 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "AGLHrHKWye0YTtNK", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json index e7f97301bd..00f8b13d72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "px8qzmB2yFLoNl83", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json index 9d8e653cec..8c10583b55 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "mwuIEsBz5bXEV68w", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json index 7b61a8668d..c32c16112f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "TielygFT88owWg4J", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json index b15214f50b..154d526928 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "It2NI6OFhNEUvulz", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index 4320a3fce3..710cae4899 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Qt3huWxoYpMEqEN6", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json index c5a76c1d85..3d753e4106 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Y3XuavnnOMoHLGHA", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index 034a1ee969..aae20613af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "2HUxAWeolJIlxPs1", + "filament_id": "OFeWMAGH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json index 355d9f6d1e..c7e39f8682 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "vdaZBnDsmUC1fhDp", + "filament_id": "OFoJUGj6", "instantiation": "true", "filament_settings_id": [ "Flashforge HS PLA" @@ -14,9 +15,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json index bf571e2ea3..fdeac081b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "u7rolQaTQz9U6veH", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json index 4672cfc77c..cac1c966a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "qTGTwiliWj3dSo9y", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json index 5576d9ff98..5b052ff3ef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "wAkuJRTLWxGyBU0b", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json index c80656c59f..a469e9cae6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "dbs29hQSQl9zuWis", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json index ad3daa8504..79da7aa9a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "XGNPvS2ps7Xn2fpx", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json index 8946fa929c..1339bfd17a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "h33iEGZ7wPeBYKYQ", + "filament_id": "OFi1ocNv", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json index 80326684a6..9ca2ac4d29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "e58C9MdOWikIbbVR", + "filament_id": "OFOSzSuh", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json index 8134b2b258..4c6085c781 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "RX2Tg8KpwQpCbkLI", + "filament_id": "OFOSzSuh", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json index 952162aaa2..370f016030 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "C4DfYuQgDXIgK7mk", + "filament_id": "OFOSzSuh", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json index ae3207a7b1..106dbf9dec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "Yu7hL4izNsgDVqMT", + "filament_id": "OFOSzSuh", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json index 8fe4514502..78961a532c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "1CevPV960sQWT3NF", + "filament_id": "OFMHTnPP", "instantiation": "true", "filament_density": [ "1.1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json index 8dbd624a6e..9b3764431d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "NGbZ8pQVTRKw28kp", + "filament_id": "OF0SyJhk", "instantiation": "true", "filament_density": [ "1.1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json index bcaea09005..7c2384dad6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "5pVoGBvbiUlrJSwR", + "filament_id": "OFkaDtKx", "instantiation": "true", "filament_density": [ "1.1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json index 7437791891..f4b7cac893 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "8ZR8o3MKYxXLd70k", + "filament_id": "OFsgANe3", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json index e83a93e113..22ae3064bf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "FSfGFl7FCutxXN2l", + "filament_id": "OFsgANe3", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json index 1758aa7657..784d279539 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "ZlpBAM9uaS01sWAJ", + "filament_id": "OFsgANe3", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json index c17b5eeed1..f5b823f2ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "9DaSYBA2OI7Jj5zS", + "filament_id": "OFsgANe3", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json index 1036a51c4b..a993eeeae0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "3bguiaEtUsS8ULHW", + "filament_id": "OFPJJxkF", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json index 9b0c2204a3..af92eaae0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "W6i9E22BVo11TeCm", + "filament_id": "OFPJJxkF", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json index eac6f732f4..e5e005fd48 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "vflpXTS9GwnODQDH", + "filament_id": "OFPJJxkF", "instantiation": "true", "filament_density": [ "1.1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json index 656e7c3203..339ae66b90 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xOZQvdZa1YCcnjor", + "filament_id": "OFuyJhLF", "instantiation": "true", "filament_settings_id": [ "Flashforge PETG Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json index 9b1e4c0dff..3517994360 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "YLLJ4xZI704GReej", + "filament_id": "OFuyJhLF", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json index 712f68eb71..97e6a20e7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8EUg1hTLfsyDPbnG", + "filament_id": "OF38Hyk4", "instantiation": "true", "filament_settings_id": [ "Flashforge PETG Pro @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json index 8d400e1b23..2d32a805ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "UKhV8A2DBc1xyNWc", + "filament_id": "OF38Hyk4", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json index 0d98e07a7a..13c8b20ac5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "dFZ1MmHjj1AAIaMm", + "filament_id": "OF38Hyk4", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json index 0d59fd73fe..5484136b0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ro3rt7IAJrA5aZD6", + "filament_id": "OF38Hyk4", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json index e48a6c5082..c25162b722 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "cTxrnqzr2wVt4Nj7", + "filament_id": "OF38Hyk4", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json index d2f664b108..fa691e2aee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "QA1KD03F0zj2zsVi", + "filament_id": "OF38Hyk4", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json index 3c11370099..bd9d2e2c35 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "EU8Q0XLjED23MNer", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json index 77cbe8d5b5..182617e5aa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XFSgx95whLw5FD08", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json index ea6f2e9f9c..661e69ffc5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "8x6yU2U8d5f67N73", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json index 78f83738b2..9243316595 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "4W0nfaSSZdg2HQkh", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json index e41dd59589..451eb9ca86 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "AJcugKx4qHPJ3JAT", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index 915bbb6753..3816155365 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "R0nZuLXEo5qA6Mt8", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json index 825a5b8fed..5ea3f9aef1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ql2BBBymzqEG7GKk", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json index 28c0815822..80971691dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8Jc4eedkknqNB87s", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json index 23bdac347c..6761b073c8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "KU5tDHAKja1sCoHm", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json index 54ed2d165a..4f893a3514 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "sb6jD3UZmb0DNIsC", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json index 19f6034de1..9dc63bc699 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "4BB1wJLtsXus5eyY", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index a2848c8bc6..88104a14ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "m7oJx47UMlFctMkX", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json index 0079505531..f254e10c43 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "ozD2wU5UiORTtJsa", + "filament_id": "OF38Hyk4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json index 13da0b478b..13537ce8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "IQfUoy7gTmVmBDL5", + "filament_id": "OF38Hyk4", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json index a199aa5af8..656e6cfa51 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "W59yTyPnVv4LYiah", + "filament_id": "OFRgDMDJ", "instantiation": "true", "filament_settings_id": [ "Flashforge PETG Transparent @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json index a623c9288d..996ed62e1d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "NRY4fsPNtnqs0kyH", + "filament_id": "OFRgDMDJ", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json index 65ff48dac6..2182a95ed7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ht7wzk8l0b1kv5tZ", + "filament_id": "OFRgDMDJ", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json index f3b8f3859b..ae05326e13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "NJFHpa5HFHIyHSWu", + "filament_id": "OFRgDMDJ", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json index 56c3f5e1e5..df5fbfb1ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "UaObrRNSTwitC6jr", + "filament_id": "OFRgDMDJ", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json index 67a5179794..9071f16ddf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "TtXy042wtT6nF3WB", + "filament_id": "OFRgDMDJ", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json index 1d26593dc4..f39398a73f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "66OWHhGyuaFISu6v", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json index e2c1e5a662..452cabe424 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "p5c6XJ1VD8cn2Meh", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json index 827d4fe8af..b9f665f3d0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "K8WkJmFy2V1zhYQO", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json index a92d725a2b..ac3c87f8b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "LLK1hwKZhDU8SaGJ", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json index 1020d428d7..32a964d155 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "LaUF2HJtBnpZF7Cd", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 63ba03680d..2336789ee8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "OUToXk8ddS1RPPUK", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json index f88a28c989..c0a189a297 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "ywff8rI39XKjcocY", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json index 50e0bb7150..a25a050f9f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "C0VV5Uzsl4icRgKa", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json index 9d2ad17397..76504bd857 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "kuCvwo6Phr6Ywhm4", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json index 1e1717f741..1b447ef7df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "Z2E69w9AevYg15tl", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json index 0e2202e3dd..98ca9782f1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "RkQaxwTjhJK0A3zr", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index 087167a1a3..f6e5ac3dc7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "YBQTMes2S9iJjKDf", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json index 938ea5875a..adc9b3ef23 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "lCngVWG3q0FWsnrG", + "filament_id": "OFRgDMDJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json index f06fa5258b..62e796f2cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "3Gv6MJ3RRja5pbOM", + "filament_id": "OFRgDMDJ", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json index e335c18107..c59d59c97a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "bcqYod61blJRzhK2", + "filament_id": "OFoimrpo", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json index 58c69dbf09..e3dae3bbd7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "CnFKOi7fFyS8QlKK", + "filament_id": "OFoimrpo", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json index 55f8d200b1..46641e0704 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "eKWJW36I5fVHwjWD", + "filament_id": "OFoimrpo", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json index 2939916d3c..452f3a0c9a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "RXRERfs2oQKewpPS", + "filament_id": "OFoimrpo", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json index cc565d4999..36fefc9926 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "8Ns75F5n2fdQ8sDk", + "filament_id": "OFoimrpo", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json index 514ce0d360..e4dc5d17df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "4EgMPzlVo1rTeQ1e", + "filament_id": "OFoimrpo", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json index b44d204d6b..d11d07fe15 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "K9ME1F4oJkPi8jRu", + "filament_id": "OFoimrpo", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json index 5a6548fd04..fdf37f0ebe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "9jCp0gTjB3Mt95Mj", + "filament_id": "OFoimrpo", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json index 796e883fd8..c109735df5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "d5OleuNNZBJK9vxH", + "filament_id": "OFoimrpo", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json index 78eef9b46a..b9af31fcab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "MpG61mwVUtJ7t602", + "filament_id": "OFoimrpo", "instantiation": "true", "filament_settings_id": [ "Flashforge PETG-CF" @@ -14,9 +15,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json index 7a0caeba59..48798f6b98 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "UQF0kAaXnZgJGK4o", + "filament_id": "OFftQOek", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json index 36782a176c..45c5379b97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FpLoe6QrPXnrH019", + "filament_id": "OFftQOek", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json index 632ffa476f..839a09c93b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "YFbZ472BRNga6OpQ", + "filament_id": "OFlNKZLP", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json index 01c9b77fe3..c0081e14d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "AtVxriSKOrFZzUun", + "filament_id": "OFlNKZLP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json index b5fddb2af6..535d2b6b31 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "47Q7YXoJ7rD7Vu21", + "filament_id": "OF0wk0Pk", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json index 913081a778..c786b1643e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "v7vYsiPVka4c1CUW", + "filament_id": "OF0wk0Pk", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json index 15aa47eada..8043805bec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "3fuVuyVcn8U0bRJQ", + "filament_id": "OFHBTqyD", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json index 7632049ce6..53165d7174 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "FrRRUl5OT773uCju", + "filament_id": "OFHBTqyD", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json index 8b80f0ab26..004d9992a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "gMmhMDqjmJfAYcbV", + "filament_id": "OFHBTqyD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json index ce1a822ce3..b738bc9afb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "0OsrtqfIxrEJMwac", + "filament_id": "OFHBTqyD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json index 70f3451691..9d5819953e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "fuzWVrfZqekMETLK", + "filament_id": "OFHBTqyD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json index 4596bb8286..0228ff0de8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FmUnckQofjunAtwr", + "filament_id": "OFHBTqyD", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json index b4ee22beee..3fb9fc2585 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "Q0RsVOPLuMByur9c", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json index 02897b8eec..cb49ae9309 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "QXJgY8OPyaoYUI1D", + "filament_id": "OFHBTqyD", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json index cc6a2a104e..05913a7f19 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "R54l7TcwsjdPHvNB", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json index 036357790a..16a51fa761 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "MELEwYupDkT2DPxL", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json index 5612c00943..84dcbd7a1f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "uGLvOoPAfksLO43M", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json index 3a96df6696..63f3c30349 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "gGpKvk3rnLuTjOwo", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json index 690066aefa..27cc6bac6a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Yopqnj4b5ZVwigGx", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json index f1b070e45e..7d438c66c4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "GrwiA2dArUGV9x2g", + "filament_id": "OFHBTqyD", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json index 094f397950..b9804e95e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "QEfQrqMwApuSMqih", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json index fdf52ed1e2..9552e043db 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "BAPIn3eJAPGpscRJ", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json index e4e1359133..45d44e3491 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "44BmRNRb6vlPq8qe", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json index 24871a3b60..54b997bfc0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "ltJbhoAeAec9gxrS", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json index 3d09c85a7d..3715130d41 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "GxdZiXdqns72ibQl", + "filament_id": "OFHBTqyD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json index df86f44ed6..85db7c8198 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "5XKGaHUjxHECbnHO", + "filament_id": "OFHBTqyD", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json index ba9fa780ed..815c949ca6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "H8IStdO8zEfSLYVE", + "filament_id": "OFdhVJql", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json index 281d88bca0..8dca7c3195 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "4wlkoKnU2bA7xhYO", + "filament_id": "OFdhVJql", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json index 82f569aaf8..1b0b0ba477 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "KXy0WyQp06VC2ICh", + "filament_id": "OFyoW5W2", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Color Change @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json index a9b9532a59..26c2f00a33 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "9cGw7tXD8YJHEi1H", + "filament_id": "OFyoW5W2", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json index deb0deaa91..7109d34b4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "TF6BeOl0patjpPaa", + "filament_id": "OFyoW5W2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json index a46c00c184..f0d7531966 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "nkYeEBo8NdkJulAP", + "filament_id": "OFyoW5W2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json index 2e019a2a16..ee9c9258e1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "yEDfsOsogfZbNBVX", + "filament_id": "OFyoW5W2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json index 1c348e66cd..15c7b4c7a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xZmQdh487UMtvBRu", + "filament_id": "OFyoW5W2", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json index 378c5fce63..b3f5fdc1a3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "rc00SOyIg30uE3Da", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json index 1de1fa9904..974b8eef26 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k1OiugasUs7baG1f", + "filament_id": "OFyoW5W2", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json index c31f2c817e..b5fadd484a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "G2Et7kPHptMESzQ0", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json index 0b16a42ba2..41ee33d3f9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsOdmFGBSF9UySMN", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json index b7801aaf6b..4dd0097616 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "oxRMuvBMu9qdQWUQ", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json index 45edb3fe4c..2aeddbf43c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "5hwNJvvLtb75XBBg", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json index 90a0c47630..a621f4ecde 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "mGj8VEyOnnogpkmF", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json index 09f4c73aaf..f9e5526878 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "HXVX4mDeUSfW2RgL", + "filament_id": "OFyoW5W2", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json index 8a51ee4c0f..53d86e2bd0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "JDcRA6apekWLXPvH", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json index 6ba6fb73f3..f8a2b45aa3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "b5GJpvKYktP4vZpj", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json index 4962ce6694..68e5a905ba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "RjUpQV6iQxTircwj", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json index f48156cb07..bacca455e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "9DEZ6SmFdgfluhsR", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json index fecaa9f06e..593d88f497 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "girTMkusNTfY04rz", + "filament_id": "OFyoW5W2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json index 552c55d640..b52b8e6cb3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "pCQ2qmeXUyJzP7kS", + "filament_id": "OFyoW5W2", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Color Change" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json index 79ae2f6c94..c052d94ea4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "a1jTbQsflD7SDFih", + "filament_id": "OFXv4FUi", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json index 95f1514864..c0d94ddeeb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zyCRsy0mHRgyuQqt", + "filament_id": "OFXv4FUi", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json index d6cd08474c..36e4789905 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "y8TNaRebTrmFem10", + "filament_id": "OFXv4FUi", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json index 2df9a04c0a..c543dcfb58 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "qju0AMvvq0B5Glny", + "filament_id": "OFXv4FUi", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json index ed84105332..1829618f06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "o8gGBOEcNvlbZxGW", + "filament_id": "OFXv4FUi", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json index 798abe1a32..c6767072c2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "0RkkIcIUFgwOFTBY", + "filament_id": "OFXv4FUi", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json index 904ceb7fc0..8cd892194d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "9qVabnSl8xfKSIYX", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json index e18d7b94f3..abf30fd1f3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DL7lxDI35YErCTWX", + "filament_id": "OFXv4FUi", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json index da3b64cd0f..4753dd7e12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "koEC7DteUoXHUd2z", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json index 88ccddeb08..1115d57393 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "D69fWcXioFcpoUjC", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json index ca7ba95268..6cffd37021 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "rfiQUncdSExEaK0U", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json index 1783f4d0f8..eac289b203 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "WX8lK8efXIVcpjFf", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json index fdf44498b8..8ad84a60f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Tzvo3oILQJc4SQko", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json index 6115ca4780..7e1caa26a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZQYrljZtu3es26hB", + "filament_id": "OFXv4FUi", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json index f62409f28a..cf4e376d6e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Y5gm20O4yCCDIoC0", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json index a91a4252cf..8c3d23f226 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "80vSQxnHfd5ZUy5h", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json index da7d433275..0bc3cee930 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "UZi7T5VoasmXWyH5", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json index b915367cb3..a55bbd16c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "6UlSb4fqHIMdMxkO", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json index c77a90240b..aee57b55ae 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "H2Cr4B5VUaxyYsN0", + "filament_id": "OFXv4FUi", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json index 45ca21acee..0ac191a749 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NJrc0UZ54Fq8MaqF", + "filament_id": "OFXv4FUi", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Galaxy" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json index 7116bb03b2..3b29dee372 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k8iibCO2EnlTSRyi", + "filament_id": "OFwf0oWp", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Luminous @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json index acda8964fa..ac148b7b66 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "pACct3L7duMh3hfx", + "filament_id": "OFwf0oWp", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json index dcc6311055..266461a8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "GdvXL8SrKrYHxSgZ", + "filament_id": "OFwf0oWp", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json index 23d5a93a94..964b280d46 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "SLYD2YcQTQgbSjIF", + "filament_id": "OFwf0oWp", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json index 32a027e5f2..e84eaca5e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "kOobFSlqEG9Qe0d1", + "filament_id": "OFwf0oWp", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json index 43a46d9f06..f04ba6e742 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "4sE1LTVVuRglRbpD", + "filament_id": "OFwf0oWp", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json index 9fb04c73d9..efc9decd4f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "jEUZyaEIBf2eXXeh", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json index fa64b028ed..3b6dbd321e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "qZ6kKjRCMfe4Ql3F", + "filament_id": "OFwf0oWp", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json index 7b6a3404bc..4efdea0ca0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "xPPSRmadqfqCtRF2", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json index 773aa67d02..d710da228d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "aWVXIk1xVa9URR1D", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json index 042492ab8f..bf4a43d0b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "KhBF7hHHVPzqiAca", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json index baeabf324a..a3c7dfd439 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "sTplnj3gMAzwtLWE", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json index be4f7f3ed7..bb909dbaaf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zJFUJKDJRYi1pRL7", + "filament_id": "OFwf0oWp", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json index 8a7622fb59..972b575cad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "vXPXOKD8vNJlujM1", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json index b544994aeb..582d6e32c9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "purqxjmWiflDrnik", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json index e9a26e8c2a..17e7fe9b09 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "qraQ97uusigB63hv", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json index 0fae0389cc..bd4e81dbc6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Z1NCX8XMyIVlOlWn", + "filament_id": "OFwf0oWp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json index 4393acab05..59b52fad8c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "s620OFLTgFT4Ds2A", + "filament_id": "OFwf0oWp", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Luminous" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json index 252743e5f2..8c31d9b88c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DcbISTLvKNMZRzKx", + "filament_id": "OF60Lmeq", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Matte @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json index e302c58bfe..72fa362c28 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4fwlIrzy6O2EsyBZ", + "filament_id": "OF60Lmeq", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json index b461ab7c4d..7037b54f2d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "BVmVfNCuy8HDhcEI", + "filament_id": "OF60Lmeq", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json index b70192398e..b6772f5d1d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "WRMePGzDGdEGiqNv", + "filament_id": "OF60Lmeq", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json index 0648d80a38..bff289cda9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "thnbuaLDDlGrkrdY", + "filament_id": "OF60Lmeq", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json index 67b9a2c858..921d2dea18 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "cnPwhLyBq6JL8gEA", + "filament_id": "OF60Lmeq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json index 6f03f6b8cb..95f712248b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "8b9q1FfVljPmKoEt", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json index fe1ca45413..cf8c573962 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "o9dOrLgL6efF19O1", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json index 45fe70381f..0c247e1b06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "QoRmDvhoeGi6Z2xv", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json index d1e83cd7b3..9c13d8bf85 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "dHyuoORAUGLtlGkJ", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json index 9090bf2287..4e945b96df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "OgqVyIHfy3U8Dc6d", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json index 682ba2be12..03bcc21993 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "g1gnICJ3u6hpGazQ", + "filament_id": "OF60Lmeq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json index cf6436ad19..b955699bcf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "feXpVbDM5ON5mwg0", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json index ef02344293..4816841106 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "XMnZQ1AxXPJqpqRX", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json index d9fcfcc693..787af100e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Ke0bRKPNKSsVMO1Y", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json index 57ac007de8..84d8d2f4d3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "IRC2n4GaofxvvyTt", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json index 185d66e796..c753c54bb3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "RN4wdTL0qccM4huZ", + "filament_id": "OF60Lmeq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json index b6a9949867..03a028841a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "ipMevDMORKqZYdvD", + "filament_id": "OF60Lmeq", "instantiation": "true", "filament_max_volumetric_speed": [ "22" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json index 758de4bbdc..7aff3d8593 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vwwb5nfO63U1ErCn", + "filament_id": "OFWv6JYn", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Metal @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json index 7685f4ea90..4a0cc3727c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ekq4MRPyzlYxRhbX", + "filament_id": "OFWv6JYn", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json index bb880ea106..4d538c35a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "uusF7Vz94HOwoQF0", + "filament_id": "OFWv6JYn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json index e34f8d298e..15a224163f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "sHZWzrZO8PP0QYZR", + "filament_id": "OFWv6JYn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json index 5d6a2fe948..928b220017 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "bxwjEFI8HmNY8JI6", + "filament_id": "OFWv6JYn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json index 89436d242d..c1ecd24405 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "VvMaIJwFk4Q6KX4p", + "filament_id": "OFWv6JYn", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json index 6239ad2bad..0c772343b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "5xqdqoj2l50FegPF", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json index 5f91a2f652..ab8e2a6e13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "R79SbWA9i2OAu2ee", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json index 8c25b77b20..8d1a7360f9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "zjIN4KzIOwI1VwOc", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json index add7f82214..a0bdd7313a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "UxMNNil2KnWvAJ4q", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json index f972d75cae..878fb7e83e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "57i6iKrVYUS5UiBT", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json index 9563f42a78..b488812551 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vVKalJViJuBvlHkK", + "filament_id": "OFWv6JYn", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json index ae0bb23e05..cd872ad134 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "IYPw8a9tkpuf95uH", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json index d33ab097f3..1652f423b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "I0bULoVAbtVfQoCy", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json index 97b47d1fc6..31fc158a78 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "DbPo3ay2e4a002AB", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json index eb7cdfc00b..8c970ff1b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "uztv4hhm2O3T93zZ", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json index 627883c18c..6edb1d2d36 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "UFWWrhfgS7N36Y8W", + "filament_id": "OFWv6JYn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json index fc1ca9b02d..c9a3884236 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "UD5i0ijsirfieUvb", + "filament_id": "OFWv6JYn", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Metal" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json index 04aeb1f095..0c9008df95 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DIMoIGOGedN17WbO", + "filament_id": "OFTa6gPH", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Pro @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json index 7101090b3f..81bb6aa26f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SC5LJcecBaEG5by3", + "filament_id": "OFTa6gPH", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json index fcbcbdf68b..f51c80d063 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "t9lPSFnwLDk0ARIp", + "filament_id": "OFTa6gPH", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json index 890831fd51..76fff17909 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "SBSlOEwZSvZHeX4r", + "filament_id": "OFTa6gPH", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json index 425052368c..9dbd0c5df8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "DbWTm2H71izMWmpx", + "filament_id": "OFTa6gPH", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json index 4cd37e4758..15ff802ebb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZENqqRqvEOeloAgs", + "filament_id": "OFTa6gPH", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json index 72234ddfd2..7a776d89e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "YcXuvz3qYHtVoWxv", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json index b8ad354879..32a582ed53 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "prItyXNphhuPCAce", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json index 6bfe5cb3cd..2aa08cf968 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "83zDmjaAgxxIt7KU", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json index 5a9918addf..88ee859e78 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "px3O28Olb9LExqfT", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json index ed66794aab..bb5eb9a2dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "QYgsCCHP3Khqrzh3", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json index cbc1d80955..86ac22cb22 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "wV01bqvZ6MRaEibZ", + "filament_id": "OFTa6gPH", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json index 549f5a1562..c3a2de4dfc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "1ro9wHPYhuMHNiYe", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json index 856389e1e2..d0a52dc129 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "4W4a7c9ugUVwvvmn", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json index 6da7732f58..f6a0c4911f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "CloRo3qxvzxHZuIP", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json index dd788c5a94..924ed22202 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "QgUbP07tIXmFysEb", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json index 61522df2c7..d1383d50c1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "6mvGOtkPZT6ROboo", + "filament_id": "OFTa6gPH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json index 2cb335b80e..302bb89cea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "vI875WYbMyQeMwlh", + "filament_id": "OFTa6gPH", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Pro" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json index b028494888..04b217d0c7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gxl3i7jTwkzrKxF4", + "filament_id": "OFAGrVjP", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index a2fae947b8..3074f553f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "mx6NWRkqyo2U12XQ", + "filament_id": "OFAGrVjP", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index 645ecbc0c0..9de378b7cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "YH9IHXOFMKwcTLyA", + "filament_id": "OFAGrVjP", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index 4f7e3d3014..c3dbf86193 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "IfAieG0OAG807xlu", + "filament_id": "OFAGrVjP", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index 4e74bdb6cc..5d7ff07d01 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "N6J7QqQ7TIgM3MyW", + "filament_id": "OFAGrVjP", "instantiation": "true", "cool_plate_temp": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json index 9c0eec6844..069b924da4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "OIsfpi49wEoF0ekO", + "filament_id": "OFAGrVjP", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json index 405b1c46c0..4c9b89d97e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "xxeZ6VPjRFevxDnK", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json index a8bbced435..ceef2f32d5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "x5m17Z5UpqpTtwgF", + "filament_id": "OFAGrVjP", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json index a3475428a1..933275ecf4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "2GZp8yjrY1OioFDi", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json index 19a2957ccc..03c51a026b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "U0XtCVUhIMnidhbR", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json index 7cb6dc67bd..127a7d57bf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "8j9kaYy3ghkF81Cu", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json index a838f359d4..7a4b09647c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "E0LeJwSxaniDkB0b", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json index 718ad9c32c..573bf70bf2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "8rggqgJ9kg9yLE28", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json index fb38d8488a..1521adad6b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "hnWRLUwnfXiwnqBM", + "filament_id": "OFAGrVjP", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json index 4bccc9c4ac..9703b974e9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "uY4OWhIytHMz4rWq", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json index 4906f57d2c..88c07e6495 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "YSkkXd9EhhEHvGpf", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json index 135192e979..2d45c140ca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "XlxXZj9Wi1D6IwCE", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json index f05f9f8e57..5e3cdced52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "IPyXBSnMCAikjI9V", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json index 240fae4d59..efb07ffb7b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "f3gJsovSmDKoA7BP", + "filament_id": "OFAGrVjP", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json index 205dc244a6..ab60566b84 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "vZb7BvbyVWkZv3rR", + "filament_id": "OFAGrVjP", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json index 16dfdcf81c..d4227c010a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ojYsAanAPqYhgFoe", + "filament_id": "OF9sr3Vn", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json index 29b57abe19..027aad1ae3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xVYaNvQwM2chTkPe", + "filament_id": "OF9sr3Vn", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json index 3cf5581d40..a8af698f32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "o8lsEnMIiHHorJhb", + "filament_id": "OF9sr3Vn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json index 09bf6a4f97..653b2f3e03 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "oXlxQJY0K6Dnri7e", + "filament_id": "OF9sr3Vn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json index 303ab7f286..11cfe05454 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "XKpFulrvvrfE56va", + "filament_id": "OF9sr3Vn", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json index 3bfa2b7a10..8b79997f28 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jmVmKMUCcowszvVp", + "filament_id": "OF9sr3Vn", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json index c8810e8348..641ab1da9a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "yeh5cd0tAHtHzdoQ", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json index a00dcdc264..e2402d34ed 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "q2Zi0YluaYpG3Ktf", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json index 8f226d79ad..e03a5b575e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "1qXV6AJqPpAwX1YK", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json index 43fff03323..b2e0f1590b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "YsyGGOGqUVkEqkIr", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json index c53e5bc830..7a88f501a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4L3Zm1YIxs8J8dp9", + "filament_id": "OF9sr3Vn", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json index 7027ffab33..0ecfc51591 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "UVvd018dTbygqTgy", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json index 64ffa609af..dec7c8275f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "F0k8kkgWM5FkLAzo", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json index f61281e75d..c11104155a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "Oapl8InwbkwNSIDl", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json index b887d42ff2..3513820454 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "NiB6Yb4b0auyn9KQ", + "filament_id": "OF9sr3Vn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json index c000cb76e4..0ad4ae9863 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "LYtdPgec1hBLhoQA", + "filament_id": "OF9sr3Vn", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Sparkle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json index a9527280aa..c61e191e80 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "QRyISvTy06kCwxKo", + "filament_id": "OFPJrlC3", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json index 6e4cbcfdfe..17a29fd4ad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "rmnF24E3SuwzRscH", + "filament_id": "OFPJrlC3", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json index 23b1230036..4fcd8bf26d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "BXPI5Pkp7a6pLrCh", + "filament_id": "OFPJrlC3", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json index de99144bf5..4e5ab53a0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "rBm25DRY1PAkEJ4r", + "filament_id": "OFPJrlC3", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json index 896f61dd93..a3c206104c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "xReo12oteZ4ECNJN", + "filament_id": "OFPJrlC3", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json index 42ddb83ec2..65b19268dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "9PgjgxU7pLl2Dfpe", + "filament_id": "OFPJrlC3", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json index 74d834e078..6f13da05c7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "RuNKzuIsw7F1ogmG", + "filament_id": "OFPJrlC3", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json index e588dbdf2c..d2facc5b67 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "YPuMCHNGDWh0FpIB", + "filament_id": "OFPJrlC3", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json index 9a8e75a439..8a051eae74 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "3uC056Y171ZjnQE6", + "filament_id": "OFPJrlC3", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json index 391c0e86ec..f0515b17da 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "JxNlb64lTODaaQhU", + "filament_id": "OFPJrlC3", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA-CF" @@ -14,9 +15,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json index 2e049a81f2..4cbd30ea72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "DhC7iFgNKCAq4Zkt", + "filament_id": "OFQCAYAt", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json index d55cb8d4b3..de09f3ee20 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "Jws2AaLWaNyZhqX4", + "filament_id": "OFQCAYAt", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json index 1808ab60c8..0b5e6a712c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "MFItX51zZO0KYjdk", + "filament_id": "OFQCAYAt", "instantiation": "true", "filament_flow_ratio": [ "0.99" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json index b7cb615d2a..54cfd76a33 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "KITjZXcyM4N8cVyu", + "filament_id": "OFp8lkYD", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json index 4cc5686f67..bd330537e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "6NjEQ6RJKUAOrSLw", + "filament_id": "OFCJaXZS", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json index 940f6e85f8..85977c3bb7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "vFMKqNjQjlNxwvDI", + "filament_id": "OFCJaXZS", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json index 0492ebe524..5080890de1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "ihXPnFERMjbBgrP5", + "filament_id": "OFZcrV9c", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json index e11ff56c17..d28c9de034 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "UWFjBmSpUkZLBvoO", + "filament_id": "OFZcrV9c", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json index 374063554b..67150ba1b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "oSGlx5mtGh07BnOz", + "filament_id": "OFZcrV9c", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json index fe1b4c1f6b..c9b3f231e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "i5DllSvYjVPO04Su", + "filament_id": "OFZcrV9c", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json index c46bfe3da4..db7b6c956b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "l3dYtVM52X0UMRix", + "filament_id": "OFZcrV9c", "instantiation": "true", "filament_flow_ratio": [ "0.99" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json index a913609484..f92402ffaa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "rSYGG2ni41NDVw6l", + "filament_id": "OFeFRwST", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json index c40ba42a92..f9a335f2e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "nwgbMjLRJLtJ04ri", + "filament_id": "OFeFRwST", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json index 528998a24c..624f2b05e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "f75oElm4zB0hukIj", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json index 0e23841975..456dea73d2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "o4KYTpJF6KksX2mg", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json index 749a00856c..f4d18ac97c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "HUSkDZL6rCpz0lRk", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json index 085cf59c5b..da615cf496 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "8xgu0AnMuKbPWyVd", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json index a5b488fc99..f2d17b5a69 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Rgqt3MjxOye5EaFt", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json index 3f901a03a4..3f0aea0926 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "PBFsW5qhVbQteYh5", + "filament_id": "OFmgesco", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json index 489c5fb15f..f91c527cac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "TPbHmcFyPyjvoERv", + "filament_id": "OFRNU58t", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json index a959585cd8..6b331b1a97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "zLMgsyDmdoXHhqFv", + "filament_id": "OFRNU58t", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json index 33834e19e3..6f674a27e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "ThakVhjfpgnAlEVH", + "filament_id": "OFRNU58t", "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json index 4aad5af360..5a6b095651 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "M0ozqaD3jSKoD6fm", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json index 0fd54408ca..4d3d501620 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "ob8IkvzNt9CWCzbk", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json index 31b83ce172..c31e020d4d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "NzxX1lyRJ7wLUihV", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json index 430ac28bd4..306930aabc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "4FIGiheSGvSJPw3s", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json index f5bff06851..a3ee98d0b8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "1GNqSBaQitzhYSx7", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json index cb901a9bcc..eebe8e5b85 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "eOhMygyxaccdov7o", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json index f5c8f2c553..e9823b8a1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "LxooKiOkRncktNLf", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json index e4f518e648..b3aa3cfc55 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "HdoJfbQr0uwQ6Vwb", + "filament_id": "OFRNU58t", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json index d9f7ec4840..abe58bc211 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "J4EaFhnpkLDcl5wH", + "filament_id": "OFRNU58t", "instantiation": "true", "filament_settings_id": [ "Flashforge TPU 95A" @@ -14,9 +15,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json index b7cd53996e..c5c992698e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "fd5bACFa33J7aTdp", + "filament_id": "OFtJMczs", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json index 14bf91e144..94aa1ead1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "hrcELA2qEMkZ6Wvj", + "filament_id": "OFtJMczs", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json index 30a92209c4..a4a27dceef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "Lis7BZ3lMkoX5KQt", + "filament_id": "OFE22Uba", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json index dd8ddf201b..bd69da6ff2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "xY03Hiidu5YNSUyZ", + "filament_id": "OFE22Uba", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json index 6d5d7a0455..6066fbe98b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "AHu6wNV3zcPBusOF", + "filament_id": "OFyxAbO4", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json index f52588da65..5fe7151b78 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "8MBRqfLIRdhxk1dF", + "filament_id": "OFyxAbO4", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json index 163a76b62f..06012ecf04 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "2JQjReK012FHpHIt", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json index 539b153d74..7bb5e8906a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "3SCkpXXK8VcQBMQn", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json index 70ed04fc55..57380ab9e4 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "dgpcOrf7282LTh1d", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json index d5ce57aeee..c6b435b34b 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "e85SCr6SV9kQD2hm", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json index 85a4492107..a780bd8dd8 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "eGXsHN5B9BZViVNe", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json index c7c38d13bb..e69ba59f78 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "8JSb4JqZ7zLi8uPI", + "filament_id": "OF6FM5F7", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json index a81bd9fe8c..c88d025a64 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "gZqAGVOlWR79n7hN", + "filament_id": "OFSdF3B1", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json index 542cced451..b1f762dd7a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "nJF1lCOavNNh4yHs", + "filament_id": "OFSdF3B1", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json index 37dcd0816f..dc949095de 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "TZ0nKqxoIYk2mPh8", + "filament_id": "OFSdF3B1", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index 75094206d5..ac82265489 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "nH6pwFYsPyBzL1EB", + "filament_id": "OFSdF3B1", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json index 6dee0fbd50..d5cb85c1bc 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "yok12IOGZzGot5Ll", + "filament_id": "OFSdF3B1", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 9beb4e6e38..71b3ae9af1 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "wmWMf3MfmbfZx2o8", + "filament_id": "OFSdF3B1", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json index de609cdc0b..2892bfac6a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Xqb0GQluin2jUQyL", + "filament_id": "OFLxO2Oc", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json index c20763c836..5f464b11cf 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "A8PDgw1jZE2m3bem", + "filament_id": "OF6SEkeJ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json index 3c7f3b0e91..e2584bb9ed 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "Iy5lHY4ihEKPgJ5x", + "filament_id": "OF6SEkeJ", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json index a727da25ee..a6fb057638 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Kdeg55RzLMYhqYMC", + "filament_id": "OF6SEkeJ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json index 62279c4084..a94efd16a0 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "JXf7KCy4KY65xuzO", + "filament_id": "OF6SEkeJ", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json index 4502c8e0d8..e3652a2989 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "O3tz36NNMoagELL0", + "filament_id": "OFAtydxE", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json index df0f4c4cc6..b05cdc7517 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "Gg9H6I32fOqoLSqE", + "filament_id": "OFAtydxE", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json index 9ab78ced38..700ebeea67 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "pV5QERvRuROIZTOa", + "filament_id": "OF0UbONm", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json index 521a764406..e49b64860a 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "0i7VkquM4n0uFaXH", + "filament_id": "OF0UbONm", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json index 1675096c7e..54bedf7278 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "TZDKsooodaGVkM4m", - "filament_id": "GFB99", + "filament_id": "OF5kwfZu", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json index 37dc9b7723..9201c77b22 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "NdNRNhmsHgHRnz1Z", - "filament_id": "GFB99", + "filament_id": "OFYICbI4", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json index 953b71d9e3..98dcbdde4c 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "fR7maJwWmteJ7bWY", - "filament_id": "GFB99", + "filament_id": "OFYICbI4", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,7 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json index 7241cf2afd..1af16ac51a 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "gLG1R5gtdliSlnZJ", - "filament_id": "GFB99", + "filament_id": "OFoAaHcF", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json index d6de1c2af8..b68ea0efb9 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "AaGdNgYaIIZyZBiW", - "filament_id": "GFB99", + "filament_id": "OFKZH00L", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json index 95995868fb..3deed3be44 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "jJVDAlGTt1QJlbn8", - "filament_id": "GFB99", + "filament_id": "OFKZH00L", "instantiation": "true", "activate_air_filtration": [ "0" @@ -23,7 +23,6 @@ ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.8 Nozzle", "Flashforge Guider 2s 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json index 8fb6eb9b70..06760b4e08 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "IEpmsltdjoCu2txJ", - "filament_id": "GFB99", + "filament_id": "OFAdZFD1", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json index d09c7dd01f..d259f1a1ef 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "foH2sa61cDy12TzH", - "filament_id": "GFB99", + "filament_id": "OFGfdP6J", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json index 789b77ea27..d12baa2e6b 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "gQLoSJ7xGEdOd8kr", - "filament_id": "GFB99", + "filament_id": "OFGfdP6J", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json index 3f42fa9f24..6b2ec8baa0 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "6Z5vce5YKlCGox8v", - "filament_id": "GFB99", + "filament_id": "OFjepy6j", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json index 9e2336a574..ca207c1219 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "kMYDFSwivzTjFo2L", - "filament_id": "GFB99", + "filament_id": "OFjepy6j", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json index 12d944617f..fc6281092e 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "tq7YmJohYaNiPplE", - "filament_id": "GFL99", + "filament_id": "OFRR8LUh", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json index ed788fa452..e43dda4e39 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "cvJIaPzb0uJLipX1", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json index bd6fbfb0e1..3575a60b49 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "wguPruY9M7GcMt6q", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json index 1b8c0864fb..2fc765ea4a 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "EhobwmFIEg5Cs5Ki", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json index f7bdfc0830..2e17832b77 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "JvdxJyy7xCm3F0xH", + "filament_id": "OFjqPjjl", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json index 7bf0850fe8..ca87808d1f 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "FtwGLcPMQqKw5uKW", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json index a95278c719..22ed7da7df 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "lrnsjoh8DtnTcT7g", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json index ca22248030..3f30b9a2a5 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Th8rzyWoINHBwgcw", + "filament_id": "OFjqPjjl", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json index 45eb6c20a5..6c797966fe 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "1Lyq9gOfcZ5hPIdW", + "filament_id": "OFjqPjjl", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json index ff84af740f..70b143a5e1 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "fWM9WLGV9mUQOtHh", - "filament_id": "GFG99", + "filament_id": "OFo9EwvK", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json index 199e64cc2b..fc4a67290a 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "9FrKIXABj3yedXri", - "filament_id": "GFL99", + "filament_id": "OGFL96", "instantiation": "true", "filament_flow_ratio": [ "1.07" diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json index 39a1a6d188..fe64023c22 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "F8r0b3G228QEK53U", - "filament_id": "GFL99", + "filament_id": "OF6XIeUW", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json index 9d91f3746b..74bee8eab1 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "WQyJHZpkl9Dz6Yo3", + "filament_id": "OFuswXlp", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json index d109f87d0e..fa2c3bb233 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "qRqhbOYn5TMfccem", + "filament_id": "OFuswXlp", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json index 3f79dcf3a5..591a5b2f40 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json @@ -4,6 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "LTZCFxkzkGCnUMAR", + "filament_id": "OFuswXlp", "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json index a5bfa9cdd5..a21b8c2c74 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "DW9Ck6xMK00Ry2iE", - "filament_id": "GFG99", + "filament_id": "OF6Mxzsg", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json index 659d896a04..2c196808cc 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "i59KgPtnplOJ8ZBh", + "filament_id": "OFvsS7Fb", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json index 76399618fc..bee067f8c4 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ERMhwufaef91KJ1d", + "filament_id": "OFvsS7Fb", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json index 43b69e32e3..c4d1a43829 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ZGmi7NF6Rn4idKjT", + "filament_id": "OFDkABjZ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json index 5b11df4081..fb963cb267 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "3SRFjKR5ezAukLYW", + "filament_id": "OFDkABjZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json index ddfcc5c1af..3f08572fcf 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ULqB7JfqebS8d00l", + "filament_id": "OFYRS7GZ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json index 1eb7a0bf80..2092ddb4f8 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "EQzyVOtOJjpKyRMM", + "filament_id": "OFYRS7GZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json index e0e410486c..7a7abe02eb 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "lALS0WwvUo5AYOq3", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json index b005039c27..171353a08d 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "tgRrYwnp5nr1yr9w", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json index eb7577cfe5..ff217ef2e3 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "yom6iIUUwU1MsZwF", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json index 933d1ff7d3..c687db6030 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "ysj5nD1op08U8rUT", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json index 34959d59ec..4fc3dfba55 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HBtkC3BfEpBGEWc5", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json index d4285329e3..ed34f84c3f 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json @@ -4,6 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsW4MCpeL5qfzNfg", + "filament_id": "OFt9AiN5", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json index 49196701fa..4e1efc3f9e 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "t6CWYU3ZSddIjwhS", - "filament_id": "GFB99", + "filament_id": "OFtEFtsz", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json index 8a8b8fe94b..fd1ff2433e 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NXQtHvtO4tyQ1ueu", - "filament_id": "GFB99", + "filament_id": "OF9RZyBz", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index ae6dd87645..f9d84b029c 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1,76 +1,5 @@ { - "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" - ], + "alias_exceptions": [], "id_overrides": [ "Afinia/Afinia PLA", "Afinia/Afinia PLA@HS", @@ -687,12 +616,79 @@ "FLSun/FLSun Generic PETG", "FLSun/FLSun Generic PLA", "FLSun/FLSun Generic PLA-CF", - "Flashforge/Flashforge Generic ASA @G3U 0.6 Nozzle", + "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", + "Flashforge/FlashForge PC @FF G4 0.6 nozzle", + "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", + "Flashforge/FlashForge PC @FF G4P 0.6 HF nozzle", + "Flashforge/FlashForge PC @FF G4P 0.6 nozzle", + "Flashforge/FlashForge PC @FF G4P 0.8 HF nozzle", + "Flashforge/FlashForge PPS @FF G4 0.6 HF nozzle", + "Flashforge/FlashForge PPS @FF G4 0.6 nozzle", + "Flashforge/FlashForge PPS @FF G4 0.8 HF nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.6 HF nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.6 nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.8 HF nozzle", + "Flashforge/FlashForge PPS-CF @FF G4 0.6 nozzle", + "Flashforge/FlashForge PPS-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS Basic", + "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge ABS Basic @FF C5", + "Flashforge/Flashforge ABS Basic @FF C5P", + "Flashforge/Flashforge ABS Basic @FF G4", + "Flashforge/Flashforge ABS Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 HF", + "Flashforge/Flashforge ABS Basic @FF G4P", + "Flashforge/Flashforge ABS Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P HF", + "Flashforge/Flashforge ABS-CF @FF G4", + "Flashforge/Flashforge ABS-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge ABS-CF @FF G4P", + "Flashforge/Flashforge ABS-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS-GF @FF C5", + "Flashforge/Flashforge ABS-GF @FF C5P", + "Flashforge/Flashforge ASA @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge ASA Basic", + "Flashforge/Flashforge ASA Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge ASA Basic @FF C5", + "Flashforge/Flashforge ASA Basic @FF C5P", + "Flashforge/Flashforge ASA Basic @FF G4", + "Flashforge/Flashforge ASA Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 HF", + "Flashforge/Flashforge ASA Basic @FF G4P", + "Flashforge/Flashforge ASA Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P HF", + "Flashforge/Flashforge ASA-CF", + "Flashforge/Flashforge ASA-CF @FF C5", + "Flashforge/Flashforge ASA-CF @FF C5P", + "Flashforge/Flashforge ASA-CF @FF G4", + "Flashforge/Flashforge ASA-CF @FF G4P", + "Flashforge/Flashforge ASA-GF @FF C5", + "Flashforge/Flashforge ASA-GF @FF C5P", + "Flashforge/Flashforge Generic ASA @G3U", + "Flashforge/Flashforge Generic HIPS", + "Flashforge/Flashforge Generic HIPS @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", @@ -702,21 +698,430 @@ "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 HIPS @FF C5", + "Flashforge/Flashforge HIPS @FF C5P", + "Flashforge/Flashforge HIPS @FF G4", + "Flashforge/Flashforge HIPS @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4 0.6 nozzle", + "Flashforge/Flashforge HIPS @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4 HF", + "Flashforge/Flashforge HIPS @FF G4P", + "Flashforge/Flashforge HIPS @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HIPS @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4P HF", + "Flashforge/Flashforge HS PETG", + "Flashforge/Flashforge HS PETG @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X", + "Flashforge/Flashforge HS PETG @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge HS PETG @FF C5", + "Flashforge/Flashforge HS PETG @FF C5P", + "Flashforge/Flashforge HS PETG @FF G4", + "Flashforge/Flashforge HS PETG @FF G4 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4 HF", + "Flashforge/Flashforge HS PETG @FF G4P", + "Flashforge/Flashforge HS PETG @FF G4P 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4P HF", + "Flashforge/Flashforge HS PLA", + "Flashforge/Flashforge HS PLA @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X", + "Flashforge/Flashforge HS PLA @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge HS PLA @FF C5", + "Flashforge/Flashforge HS PLA @FF C5P", + "Flashforge/Flashforge HS PLA @FF G4", + "Flashforge/Flashforge HS PLA @FF G4 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4 HF", + "Flashforge/Flashforge HS PLA @FF G4P", + "Flashforge/Flashforge HS PLA @FF G4P 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4P HF", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 HF", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P HF", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PA @FF G4", + "Flashforge/Flashforge PA @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PA @FF G4 HF", + "Flashforge/Flashforge PA @FF G4P", + "Flashforge/Flashforge PA @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PA @FF G4P HF", + "Flashforge/Flashforge PA-CF @FF C5", + "Flashforge/Flashforge PA-CF @FF C5P", + "Flashforge/Flashforge PA-CF @FF G4", + "Flashforge/Flashforge PA-CF @FF G4P", + "Flashforge/Flashforge PA12-CF", + "Flashforge/Flashforge PA6-CF", + "Flashforge/Flashforge PA66-CF", + "Flashforge/Flashforge PAHT-CF @FF C5", + "Flashforge/Flashforge PAHT-CF @FF C5P", + "Flashforge/Flashforge PAHT-CF @FF G4", + "Flashforge/Flashforge PAHT-CF @FF G4P", + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PET-CF @FF C5", + "Flashforge/Flashforge PET-CF @FF C5P", "Flashforge/Flashforge PETG", + "Flashforge/Flashforge PETG Basic", + "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Pro", + "Flashforge/Flashforge PETG Pro @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG Pro @FF C5", + "Flashforge/Flashforge PETG Pro @FF C5P", + "Flashforge/Flashforge PETG Pro @FF G4", + "Flashforge/Flashforge PETG Pro @FF G4 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 HF", + "Flashforge/Flashforge PETG Pro @FF G4P", + "Flashforge/Flashforge PETG Pro @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P HF", + "Flashforge/Flashforge PETG Transparent", + "Flashforge/Flashforge PETG Transparent @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG Transparent @FF C5", + "Flashforge/Flashforge PETG Transparent @FF C5P", + "Flashforge/Flashforge PETG Transparent @FF G4", + "Flashforge/Flashforge PETG Transparent @FF G4 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 HF", + "Flashforge/Flashforge PETG Transparent @FF G4P", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P HF", + "Flashforge/Flashforge PETG-CF", + "Flashforge/Flashforge PETG-CF @FF AD5X", + "Flashforge/Flashforge PETG-CF @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG-CF @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG-CF @FF C5", + "Flashforge/Flashforge PETG-CF @FF C5P", + "Flashforge/Flashforge PETG-CF @FF G4", + "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG-CF @FF G4P", + "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge PLA", + "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", + "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Basic @FF C5", + "Flashforge/Flashforge PLA Basic @FF C5P", + "Flashforge/Flashforge PLA Basic @FF G4", + "Flashforge/Flashforge PLA Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 HF", + "Flashforge/Flashforge PLA Basic @FF G4P", + "Flashforge/Flashforge PLA Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P HF", + "Flashforge/Flashforge PLA Buint Ti @FF G4 0.8 nozzle", + "Flashforge/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Color Change @FF C5", + "Flashforge/Flashforge PLA Color Change @FF C5P", + "Flashforge/Flashforge PLA Color Change @FF G4", + "Flashforge/Flashforge PLA Color Change @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 HF", + "Flashforge/Flashforge PLA Color Change @FF G4P", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P HF", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF C5", + "Flashforge/Flashforge PLA Galaxy @FF C5P", + "Flashforge/Flashforge PLA Galaxy @FF G4", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 HF", + "Flashforge/Flashforge PLA Galaxy @FF G4P", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P HF", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Flashforge PLA Luminous @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Luminous @FF C5", + "Flashforge/Flashforge PLA Luminous @FF C5P", + "Flashforge/Flashforge PLA Luminous @FF G4", + "Flashforge/Flashforge PLA Luminous @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 HF", + "Flashforge/Flashforge PLA Luminous @FF G4P", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P HF", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Matte @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4", + "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 HF", + "Flashforge/Flashforge PLA Matte @FF G4P", + "Flashforge/Flashforge PLA Matte @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P HF", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Metal @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4", + "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 HF", + "Flashforge/Flashforge PLA Metal @FF G4P", + "Flashforge/Flashforge PLA Metal @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P HF", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Pro @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4", + "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 HF", + "Flashforge/Flashforge PLA Pro @FF G4P", + "Flashforge/Flashforge PLA Pro @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P HF", + "Flashforge/Flashforge PLA Silk", + "Flashforge/Flashforge PLA Silk @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Silk @FF C5", + "Flashforge/Flashforge PLA Silk @FF C5P", + "Flashforge/Flashforge PLA Silk @FF G4", + "Flashforge/Flashforge PLA Silk @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 HF", + "Flashforge/Flashforge PLA Silk @FF G4P", + "Flashforge/Flashforge PLA Silk @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P HF", + "Flashforge/Flashforge PLA Sparkle", + "Flashforge/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 HF", + "Flashforge/Flashforge PLA Sparkle @FF G4P", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P HF", + "Flashforge/Flashforge PLA-CF", + "Flashforge/Flashforge PLA-CF @FF AD5X", + "Flashforge/Flashforge PLA-CF @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA-CF @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA-CF @FF C5", + "Flashforge/Flashforge PLA-CF @FF C5P", + "Flashforge/Flashforge PLA-CF @FF G4", + "Flashforge/Flashforge PLA-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA-CF @FF G4P", + "Flashforge/Flashforge PLA-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", + "Flashforge/Flashforge PPA-CF", + "Flashforge/Flashforge PPA-CF @FF C5", + "Flashforge/Flashforge PPA-CF @FF C5P", + "Flashforge/Flashforge PPA-GF", + "Flashforge/Flashforge PPS @FF G4", + "Flashforge/Flashforge PPS @FF G4P", + "Flashforge/Flashforge PPS-CF", + "Flashforge/Flashforge PPS-CF @FF C5", + "Flashforge/Flashforge PPS-CF @FF C5P", + "Flashforge/Flashforge PPS-CF @FF G4", + "Flashforge/Flashforge PPS-CF @FF G4P", + "Flashforge/Flashforge PVA @FF C5", + "Flashforge/Flashforge PVA @FF C5P", + "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4 0.6 nozzle", + "Flashforge/Flashforge TPU 65D @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.6 nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge TPU 95A", + "Flashforge/Flashforge TPU 95A @FF AD5X", + "Flashforge/Flashforge TPU 95A @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4", + "Flashforge/Flashforge TPU 95A @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P", + "Flashforge/Flashforge TPU 95A @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P 0.8 HF nozzle", + "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 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/FusRock PAHT @FF G4 0.6 HF nozzle", + "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", + "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PAHT-CF @FF C5", + "Flashforge/FusRock PAHT-CF @FF C5P", + "Flashforge/FusRock PAHT-CF @FF G4", + "Flashforge/FusRock PAHT-CF @FF G4 0.6 nozzle", + "Flashforge/FusRock PAHT-CF @FF G4P", + "Flashforge/FusRock PAHT-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PET-CF @FF G4", + "Flashforge/FusRock PET-CF @FF G4 0.6 nozzle", + "Flashforge/FusRock PET-CF @FF G4P", + "Flashforge/FusRock PET-CF @FF G4P 0.6 nozzle", + "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 ASA @Flashforge AD4", + "Flashforge/Generic PET @FF G4", + "Flashforge/Generic PET @FF G4 0.6 HF nozzle", + "Flashforge/Generic PET @FF G4 0.6 nozzle", + "Flashforge/Generic PET @FF G4 0.8 HF nozzle", + "Flashforge/Generic PET @FF G4P", + "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", + "Flashforge/Generic PET @FF G4P 0.6 nozzle", + "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", "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 85A @FF AD5X", + "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", + "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", + "Flashforge/Generic TPU @Flashforge AD4", + "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", + "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", + "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", "Flashforge/Polymaker Generic CoPA", "Flashforge/Polymaker Generic S1", "Flashforge/SUNLU PETG @base", @@ -2411,22 +2816,7 @@ "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" + "Flashforge/Flashforge Generic PLA" ], "FILAR0001": [ "OrcaFilamentLibrary/FilAr PLA Bronce" @@ -2838,63 +3228,8 @@ "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", @@ -3084,21 +3419,7 @@ "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", @@ -3453,34 +3774,8 @@ "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", @@ -4389,12 +4684,21 @@ "OF0M6QAQ": [ "OrcaFilamentLibrary/Elegoo PLA Galaxy" ], + "OF0SyJhk": [ + "Flashforge/Flashforge PA6-CF" + ], "OF0TjJ0G": [ "Qidi/Qidi ASA-Aero" ], + "OF0UbONm": [ + "Flashforge/FusRock S-PAHT" + ], "OF0Y5MLd": [ "Qidi/QIDI PETG-GF" ], + "OF0wk0Pk": [ + "Flashforge/Flashforge PLA Pro" + ], "OF0z1XpN": [ "Qidi/QIDI PLA Rapido Silk" ], @@ -4407,27 +4711,60 @@ "OF2UFmOo": [ "Qidi/Bambu PLA" ], + "OF38Hyk4": [ + "Flashforge/Flashforge PETG Pro" + ], "OF3GKs2i": [ "OrcaFilamentLibrary/eSUN PLA-Matte" ], "OF3XeEuV": [ "Qidi/QIDI PET-GF" ], + "OF41QVDH": [ + "Flashforge/Flashforge Generic PLA-Silk" + ], "OF48G7He": [ "Qidi/QIDI PETG Tough 0.8 nozzle" ], + "OF4RKeng": [ + "Flashforge/Flashforge Generic ASA" + ], "OF4fgpse": [ "OrcaFilamentLibrary/Elegoo PLA Marble" ], "OF4gzzE4": [ "Qidi/QIDI PET-CF" ], + "OF4m9A5w": [ + "Flashforge/Flashforge Generic HIPS" + ], + "OF5T1Y9R": [ + "Flashforge/Flashforge ABS Basic" + ], "OF5UUaUM": [ "Qidi/Qidi Generic PLA High Speed" ], + "OF5kwfZu": [ + "Flashforge/FusRock Generic NexPA-CF25" + ], + "OF60Lmeq": [ + "Flashforge/Flashforge PLA Matte" + ], "OF6EOy1A": [ "Qidi/Bambu PETG" ], + "OF6FM5F7": [ + "Flashforge/FusRock PAHT" + ], + "OF6Mxzsg": [ + "Flashforge/Generic TPU" + ], + "OF6SEkeJ": [ + "Flashforge/FusRock PET-CF" + ], + "OF6XIeUW": [ + "Flashforge/Generic PLA-CF10" + ], "OF79FFkO": [ "OrcaFilamentLibrary/Elegoo PC-FR" ], @@ -4440,39 +4777,72 @@ "OF8WvPVL": [ "Qidi/QIDI ABS Rapido 0.8 nozzle" ], + "OF9RZyBz": [ + "Flashforge/Polymaker Generic S1" + ], "OF9qvJxV": [ "OrcaFilamentLibrary/Elegoo PLA Translucent2" ], + "OF9sr3Vn": [ + "Flashforge/Flashforge PLA Sparkle" + ], + "OFAEqlWa": [ + "Flashforge/Flashforge Generic PLA-SILK" + ], + "OFAGrVjP": [ + "Flashforge/Flashforge PLA Silk" + ], "OFAUDGEQ": [ "Qidi/QIDI PLA Rapido Matte" ], "OFAdAYYk": [ "Qidi/QIDI PPS-CF" ], + "OFAdZFD1": [ + "Flashforge/FusRock Generic PET-GF" + ], "OFAnyzjN": [ "Qidi/HATCHBOX PETG" ], + "OFAtydxE": [ + "Flashforge/FusRock S-Multi" + ], "OFC2FSsV": [ "Qidi/Overture PLA" ], + "OFC5CCeo": [ + "Flashforge/Flashforge Generic PETG-CF" + ], + "OFCJaXZS": [ + "Flashforge/Flashforge PPS" + ], "OFD5e0sH": [ "OrcaFilamentLibrary/Elegoo Rapid PLA+" ], "OFDCk0cz": [ - "Flashforge/Flashforge PET-CF", - "Flashforge/Flashforge PETG-CF", - "Flashforge/FusRock S-Multi", "OrcaFilamentLibrary/Generic PETG-CF" ], "OFDNiRTx": [ "OrcaFilamentLibrary/Elegoo PLA+" ], + "OFDkABjZ": [ + "Flashforge/Generic TPU-90A" + ], + "OFE22Uba": [ + "Flashforge/Flashforge TPU-90A" + ], "OFFIL5pD": [ "Qidi/QIDI PA12-CF" ], "OFG8vHw8": [ "Qidi/Qidi Generic ASA" ], + "OFGfdP6J": [ + "Flashforge/FusRock Generic S-Multi" + ], + "OFHBTqyD": [ + "Flashforge/Flashforge PLA Basic" + ], "OFICPchn": [ "OrcaFilamentLibrary/Elegoo PLA Basic" ], @@ -4488,18 +4858,42 @@ "OFJsqMzx": [ "OrcaFilamentLibrary/Generic PLA Matte" ], + "OFK39W9u": [ + "Flashforge/Flashforge Generic PETG-CF10" + ], "OFK820gS": [ "Qidi/QIDI ASA" ], + "OFKWVi10": [ + "Flashforge/Flashforge Generic PLA-CF10" + ], + "OFKZH00L": [ + "Flashforge/FusRock Generic PET-CF" + ], "OFKjlAbC": [ "Qidi/QIDI UltraPA-CF25" ], + "OFL7vEML": [ + "Flashforge/FlashForge PC" + ], "OFLSBS99": [ "OrcaFilamentLibrary/Generic SBS" ], + "OFLeFaUO": [ + "Flashforge/Flashforge Generic PVA" + ], + "OFLxO2Oc": [ + "Flashforge/FusRock PET" + ], + "OFM3PeVe": [ + "Flashforge/Flashforge ASA-CF" + ], "OFMCMXSG": [ "OrcaFilamentLibrary/Generic PP-GF" ], + "OFMHTnPP": [ + "Flashforge/Flashforge PA12-CF" + ], "OFMQJToc": [ "OrcaFilamentLibrary/Elegoo PETG-GF" ], @@ -4512,18 +4906,30 @@ "OFNX5uRT": [ "Qidi/QIDI TPU-Aero" ], + "OFOSzSuh": [ + "Flashforge/Flashforge PA-CF" + ], "OFOW9K96": [ "Qidi/Qidi TPU 95A-HF" ], "OFOysPuE": [ "Qidi/QIDI TPU-GF" ], + "OFPJJxkF": [ + "Flashforge/Flashforge PET-CF" + ], + "OFPJrlC3": [ + "Flashforge/Flashforge PLA-CF" + ], "OFPokkKe": [ "Qidi/QIDI PETG-CF" ], "OFPwi9X0": [ "Qidi/HATCHBOX ABS" ], + "OFQCAYAt": [ + "Flashforge/Flashforge PPA-CF" + ], "OFQZINrX": [ "Qidi/QIDI ABS-GF10" ], @@ -4533,15 +4939,30 @@ "OFQkWxJy": [ "OrcaFilamentLibrary/Elegoo PLA Matte" ], + "OFRNU58t": [ + "Flashforge/Flashforge TPU 95A" + ], + "OFRR8LUh": [ + "Flashforge/Generic ASA" + ], "OFRS2Ggt": [ "OrcaFilamentLibrary/Generic PP-CF" ], + "OFRgDMDJ": [ + "Flashforge/Flashforge PETG Transparent" + ], "OFSSuKRr": [ "Qidi/QIDI PETG Basic" ], + "OFSdF3B1": [ + "Flashforge/FusRock PAHT-CF" + ], "OFT3TqB6": [ "OrcaFilamentLibrary/Elas ASA" ], + "OFTa6gPH": [ + "Flashforge/Flashforge PLA Pro" + ], "OFToBodi": [ "Qidi/QIDI ABS Rapido Metal" ], @@ -4566,6 +4987,12 @@ "OFWkCAdc": [ "Qidi/QIDI PETG Tough 0.2 nozzle" ], + "OFWs8KIZ": [ + "Flashforge/Flashforge ABS-CF" + ], + "OFWv6JYn": [ + "Flashforge/Flashforge PLA Metal" + ], "OFWyCd0Y": [ "Qidi/QIDI Support For PET/PA" ], @@ -4581,12 +5008,30 @@ "OFXmQgno": [ "OrcaFilamentLibrary/eSUN PLA-Marble" ], + "OFXv4FUi": [ + "Flashforge/Flashforge PLA Galaxy" + ], "OFYH00jV": [ "Qidi/QIDI ABS-GF" ], + "OFYICbI4": [ + "Flashforge/FusRock Generic PAHT-CF" + ], + "OFYRS7GZ": [ + "Flashforge/Generic TPU-95A" + ], + "OFYZs7dN": [ + "Flashforge/Flashforge Generic HS PLA" + ], "OFZAkPHG": [ "Qidi/QIDI PPS-GF" ], + "OFZQFvHQ": [ + "Flashforge/Flashforge HS PETG" + ], + "OFZcrV9c": [ + "Flashforge/Flashforge PPS-CF" + ], "OFZhdVnP": [ "OrcaFilamentLibrary/eSUN PLA-Basic" ], @@ -4605,6 +5050,21 @@ "OFceJcLf": [ "Qidi/PolyLite PLA" ], + "OFcy60o4": [ + "Flashforge/Flashforge ASA Basic" + ], + "OFdNORGt": [ + "Flashforge/Flashforge ASA-GF" + ], + "OFdhVJql": [ + "Flashforge/Flashforge PLA Buint Ti" + ], + "OFeFRwST": [ + "Flashforge/Flashforge PVA" + ], + "OFeWMAGH": [ + "Flashforge/Flashforge HS PLA Burnt Ti" + ], "OFenGPBR": [ "OrcaFilamentLibrary/Elegoo PETG Translucent" ], @@ -4612,7 +5072,6 @@ "Qidi/QIDI ABS Rapido 0.2 nozzle" ], "OFfB1QKi": [ - "Flashforge/Flashforge HS PETG", "OrcaFilamentLibrary/Generic PETG HF" ], "OFfJoIgg": [ @@ -4621,36 +5080,87 @@ "OFfdxQok": [ "Qidi/Generic PLA+" ], + "OFftQOek": [ + "Flashforge/Flashforge PLA Matte" + ], + "OFgJX0Fc": [ + "Flashforge/FlashForge PPS" + ], + "OFhzHd2Y": [ + "Flashforge/Flashforge HIPS" + ], + "OFi1ocNv": [ + "Flashforge/Flashforge PA" + ], "OFiJYDPC": [ "Qidi/HATCHBOX PLA" ], "OFidJLn8": [ "Qidi/PolyLite ABS" ], + "OFjepy6j": [ + "Flashforge/FusRock Generic S-PAHT" + ], "OFjohFkg": [ "Qidi/QIDI PETG Translucent" ], + "OFjqPjjl": [ + "Flashforge/Generic PET" + ], + "OFkaDtKx": [ + "Flashforge/Flashforge PA66-CF" + ], + "OFlNKZLP": [ + "Flashforge/Flashforge PLA Metal" + ], + "OFm1VZed": [ + "Flashforge/Flashforge Generic PLA-CF" + ], "OFmF1xL9": [ "Qidi/QIDI ASA-CF" ], "OFmKNi3f": [ "Qidi/QIDI PLA Rapido" ], + "OFmduKVr": [ + "Flashforge/FlashForge PPS-CF" + ], "OFmeQjRP": [ "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" ], + "OFmgesco": [ + "Flashforge/Flashforge TPU 65D" + ], "OFnj7bPm": [ "Qidi/QIDI ABS Rapido 0.6 nozzle" ], "OFnsWQTp": [ "Qidi/QIDI WOOD Rapido" ], + "OFo9EwvK": [ + "Flashforge/Generic PETG-CF10" + ], + "OFoAaHcF": [ + "Flashforge/FusRock Generic PAHT-GF" + ], + "OFoJUGj6": [ + "Flashforge/Flashforge HS PLA" + ], + "OFoimrpo": [ + "Flashforge/Flashforge PETG-CF" + ], + "OFp8lkYD": [ + "Flashforge/Flashforge PPA-GF" + ], "OFpwg2Qh": [ "OrcaFilamentLibrary/Elegoo ASA-CF" ], "OFqPp2yL": [ "Qidi/QIDI PETG Tough 0.6 nozzle" ], + "OFqRWRU6": [ + "Flashforge/Flashforge ABS-GF" + ], "OFqh1Ngp": [ "OrcaFilamentLibrary/Elegoo PLA-CF" ], @@ -4672,27 +5182,60 @@ "OFsNZcid": [ "OrcaFilamentLibrary/PolyLite Dual PLA" ], + "OFsgANe3": [ + "Flashforge/Flashforge PAHT-CF" + ], + "OFt9AiN5": [ + "Flashforge/Polymaker CoPA" + ], + "OFtEFtsz": [ + "Flashforge/Polymaker Generic CoPA" + ], + "OFtJMczs": [ + "Flashforge/Flashforge TPU-64D" + ], "OFuTFxVP": [ "Qidi/Overture ABS" ], "OFuidAEg": [ "Qidi/Bambu ABS" ], + "OFuswXlp": [ + "Flashforge/Generic TPU 85A" + ], "OFutwD6f": [ "OrcaFilamentLibrary/Elegoo PLA Glow" ], + "OFuyJhLF": [ + "Flashforge/Flashforge PETG Basic" + ], "OFv2NHLC": [ "Qidi/QIDI ABS-GF25" ], "OFvN3117": [ "Qidi/QIDI PLA Matte Basic" ], + "OFviQ9lH": [ + "Flashforge/Flashforge Generic TPU" + ], + "OFvsS7Fb": [ + "Flashforge/Generic TPU-64D" + ], "OFw4OHWE": [ "OrcaFilamentLibrary/Elas PETG Basic" ], "OFwHPTvy": [ "Qidi/Qidi Generic PLA+" ], + "OFwf0oWp": [ + "Flashforge/Flashforge PLA Luminous" + ], + "OFyoW5W2": [ + "Flashforge/Flashforge PLA Color Change" + ], + "OFyxAbO4": [ + "Flashforge/Flashforge TPU-95A" + ], "OFzrWlH5": [ "OrcaFilamentLibrary/Elegoo PETG HF" ], @@ -4768,11 +5311,6 @@ ], "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": [ @@ -4803,8 +5341,6 @@ "OrcaFilamentLibrary/Generic PCTG" ], "OGFG99": [ - "Flashforge/Flashforge PETG Pro", - "Flashforge/Flashforge PETG Transparent", "OrcaFilamentLibrary/Generic PETG" ], "OGFGG300": [ @@ -4856,23 +5392,13 @@ "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" ], @@ -4895,8 +5421,6 @@ "OrcaFilamentLibrary/Bambu PA6-GF" ], "OGFN96": [ - "Flashforge/Flashforge PPA-CF", - "Flashforge/Flashforge PPS-CF", "OrcaFilamentLibrary/Generic PPA-GF" ], "OGFN97": [ @@ -4904,10 +5428,6 @@ ], "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": [ @@ -5015,11 +5535,9 @@ "OrcaFilamentLibrary/Generic BVOH" ], "OGFS98": [ - "Flashforge/Flashforge HIPS", "OrcaFilamentLibrary/Generic HIPS" ], "OGFS99": [ - "Flashforge/Flashforge PVA", "OrcaFilamentLibrary/Generic PVA" ], "OGFSNL02": [ @@ -5054,12 +5572,6 @@ "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": [ @@ -6681,7 +7193,74 @@ "FLSun/FLSun T1 PLA High Speed", "FLSun/FLSun T1 PLA Silk", "FLSun/FLSun T1 TPU", + "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", + "Flashforge/FlashForge PC @FF G4 0.6 nozzle", + "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", + "Flashforge/FlashForge PC @FF G4P 0.6 HF nozzle", + "Flashforge/FlashForge PC @FF G4P 0.6 nozzle", + "Flashforge/FlashForge PC @FF G4P 0.8 HF nozzle", + "Flashforge/FlashForge PPS @FF G4 0.6 HF nozzle", + "Flashforge/FlashForge PPS @FF G4 0.6 nozzle", + "Flashforge/FlashForge PPS @FF G4 0.8 HF nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.6 HF nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.6 nozzle", + "Flashforge/FlashForge PPS @FF G4P 0.8 HF nozzle", + "Flashforge/FlashForge PPS-CF @FF G4 0.6 nozzle", + "Flashforge/FlashForge PPS-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge ABS", + "Flashforge/Flashforge ABS Basic", + "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge ABS Basic @FF C5", + "Flashforge/Flashforge ABS Basic @FF C5P", + "Flashforge/Flashforge ABS Basic @FF G4", + "Flashforge/Flashforge ABS Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4 HF", + "Flashforge/Flashforge ABS Basic @FF G4P", + "Flashforge/Flashforge ABS Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge ABS Basic @FF G4P HF", + "Flashforge/Flashforge ABS-CF @FF G4", + "Flashforge/Flashforge ABS-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge ABS-CF @FF G4P", + "Flashforge/Flashforge ABS-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS-GF @FF C5", + "Flashforge/Flashforge ABS-GF @FF C5P", + "Flashforge/Flashforge ASA Basic", + "Flashforge/Flashforge ASA Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge ASA Basic @FF C5", + "Flashforge/Flashforge ASA Basic @FF C5P", + "Flashforge/Flashforge ASA Basic @FF G4", + "Flashforge/Flashforge ASA Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4 HF", + "Flashforge/Flashforge ASA Basic @FF G4P", + "Flashforge/Flashforge ASA Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge ASA Basic @FF G4P HF", + "Flashforge/Flashforge ASA-CF", + "Flashforge/Flashforge ASA-CF @FF C5", + "Flashforge/Flashforge ASA-CF @FF C5P", + "Flashforge/Flashforge ASA-CF @FF G4", + "Flashforge/Flashforge ASA-CF @FF G4P", + "Flashforge/Flashforge ASA-GF @FF C5", + "Flashforge/Flashforge ASA-GF @FF C5P", "Flashforge/Flashforge Generic ABS", "Flashforge/Flashforge Generic ABS @FF AD5M 0.25 Nozzle", "Flashforge/Flashforge Generic ABS @G3U", @@ -6713,9 +7292,363 @@ "Flashforge/Flashforge Generic PLA-Silk", "Flashforge/Flashforge Generic PVA", "Flashforge/Flashforge Generic TPU", + "Flashforge/Flashforge HIPS @FF C5", + "Flashforge/Flashforge HIPS @FF C5P", + "Flashforge/Flashforge HIPS @FF G4", + "Flashforge/Flashforge HIPS @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4 0.6 nozzle", + "Flashforge/Flashforge HIPS @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4 HF", + "Flashforge/Flashforge HIPS @FF G4P", + "Flashforge/Flashforge HIPS @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HIPS @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HIPS @FF G4P HF", + "Flashforge/Flashforge HS PETG", + "Flashforge/Flashforge HS PETG @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X", + "Flashforge/Flashforge HS PETG @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge HS PETG @FF C5", + "Flashforge/Flashforge HS PETG @FF C5P", + "Flashforge/Flashforge HS PETG @FF G4", + "Flashforge/Flashforge HS PETG @FF G4 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4 HF", + "Flashforge/Flashforge HS PETG @FF G4P", + "Flashforge/Flashforge HS PETG @FF G4P 0.25 nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PETG @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HS PETG @FF G4P HF", + "Flashforge/Flashforge HS PLA", "Flashforge/Flashforge HS PLA @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X", + "Flashforge/Flashforge HS PLA @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge HS PLA @FF C5", + "Flashforge/Flashforge HS PLA @FF C5P", + "Flashforge/Flashforge HS PLA @FF G4", + "Flashforge/Flashforge HS PLA @FF G4 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4 HF", + "Flashforge/Flashforge HS PLA @FF G4P", + "Flashforge/Flashforge HS PLA @FF G4P 0.25 nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PLA @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA @FF G4P HF", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 HF", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P HF", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", + "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PA @FF G4", + "Flashforge/Flashforge PA @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PA @FF G4 HF", + "Flashforge/Flashforge PA @FF G4P", + "Flashforge/Flashforge PA @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PA @FF G4P HF", + "Flashforge/Flashforge PA-CF @FF C5", + "Flashforge/Flashforge PA-CF @FF C5P", + "Flashforge/Flashforge PA-CF @FF G4", + "Flashforge/Flashforge PA-CF @FF G4P", + "Flashforge/Flashforge PA12-CF", + "Flashforge/Flashforge PA6-CF", + "Flashforge/Flashforge PA66-CF", + "Flashforge/Flashforge PAHT-CF @FF C5", + "Flashforge/Flashforge PAHT-CF @FF C5P", + "Flashforge/Flashforge PAHT-CF @FF G4", + "Flashforge/Flashforge PAHT-CF @FF G4P", + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PET-CF @FF C5", + "Flashforge/Flashforge PET-CF @FF C5P", "Flashforge/Flashforge PETG", + "Flashforge/Flashforge PETG Basic", + "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Pro", + "Flashforge/Flashforge PETG Pro @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG Pro @FF C5", + "Flashforge/Flashforge PETG Pro @FF C5P", + "Flashforge/Flashforge PETG Pro @FF G4", + "Flashforge/Flashforge PETG Pro @FF G4 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4 HF", + "Flashforge/Flashforge PETG Pro @FF G4P", + "Flashforge/Flashforge PETG Pro @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PETG Pro @FF G4P HF", + "Flashforge/Flashforge PETG Transparent", + "Flashforge/Flashforge PETG Transparent @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG Transparent @FF C5", + "Flashforge/Flashforge PETG Transparent @FF C5P", + "Flashforge/Flashforge PETG Transparent @FF G4", + "Flashforge/Flashforge PETG Transparent @FF G4 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4 HF", + "Flashforge/Flashforge PETG Transparent @FF G4P", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PETG Transparent @FF G4P HF", + "Flashforge/Flashforge PETG-CF", + "Flashforge/Flashforge PETG-CF @FF AD5X", + "Flashforge/Flashforge PETG-CF @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PETG-CF @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PETG-CF @FF C5", + "Flashforge/Flashforge PETG-CF @FF C5P", + "Flashforge/Flashforge PETG-CF @FF G4", + "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge PETG-CF @FF G4P", + "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge PLA", + "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", + "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Basic @FF C5", + "Flashforge/Flashforge PLA Basic @FF C5P", + "Flashforge/Flashforge PLA Basic @FF G4", + "Flashforge/Flashforge PLA Basic @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4 HF", + "Flashforge/Flashforge PLA Basic @FF G4P", + "Flashforge/Flashforge PLA Basic @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Basic @FF G4P HF", + "Flashforge/Flashforge PLA Buint Ti @FF G4 0.8 nozzle", + "Flashforge/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", + "Flashforge/Flashforge PLA Color Change", + "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Color Change @FF C5", + "Flashforge/Flashforge PLA Color Change @FF C5P", + "Flashforge/Flashforge PLA Color Change @FF G4", + "Flashforge/Flashforge PLA Color Change @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4 HF", + "Flashforge/Flashforge PLA Color Change @FF G4P", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Color Change @FF G4P HF", + "Flashforge/Flashforge PLA Galaxy", + "Flashforge/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF C5", + "Flashforge/Flashforge PLA Galaxy @FF C5P", + "Flashforge/Flashforge PLA Galaxy @FF G4", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4 HF", + "Flashforge/Flashforge PLA Galaxy @FF G4P", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Galaxy @FF G4P HF", + "Flashforge/Flashforge PLA Luminous", + "Flashforge/Flashforge PLA Luminous @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Luminous @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Luminous @FF C5", + "Flashforge/Flashforge PLA Luminous @FF C5P", + "Flashforge/Flashforge PLA Luminous @FF G4", + "Flashforge/Flashforge PLA Luminous @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4 HF", + "Flashforge/Flashforge PLA Luminous @FF G4P", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Luminous @FF G4P HF", + "Flashforge/Flashforge PLA Matte", + "Flashforge/Flashforge PLA Matte @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4", + "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4 HF", + "Flashforge/Flashforge PLA Matte @FF G4P", + "Flashforge/Flashforge PLA Matte @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Matte @FF G4P HF", + "Flashforge/Flashforge PLA Metal", + "Flashforge/Flashforge PLA Metal @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4", + "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4 HF", + "Flashforge/Flashforge PLA Metal @FF G4P", + "Flashforge/Flashforge PLA Metal @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Metal @FF G4P HF", + "Flashforge/Flashforge PLA Pro", + "Flashforge/Flashforge PLA Pro @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4", + "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4 HF", + "Flashforge/Flashforge PLA Pro @FF G4P", + "Flashforge/Flashforge PLA Pro @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Pro @FF G4P HF", + "Flashforge/Flashforge PLA Silk", + "Flashforge/Flashforge PLA Silk @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Silk @FF C5", + "Flashforge/Flashforge PLA Silk @FF C5P", + "Flashforge/Flashforge PLA Silk @FF G4", + "Flashforge/Flashforge PLA Silk @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4 HF", + "Flashforge/Flashforge PLA Silk @FF G4P", + "Flashforge/Flashforge PLA Silk @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge PLA Silk @FF G4P HF", + "Flashforge/Flashforge PLA Sparkle", + "Flashforge/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4 HF", + "Flashforge/Flashforge PLA Sparkle @FF G4P", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.25 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PLA Sparkle @FF G4P HF", + "Flashforge/Flashforge PLA-CF", + "Flashforge/Flashforge PLA-CF @FF AD5X", + "Flashforge/Flashforge PLA-CF @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge PLA-CF @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA-CF @FF C5", + "Flashforge/Flashforge PLA-CF @FF C5P", + "Flashforge/Flashforge PLA-CF @FF G4", + "Flashforge/Flashforge PLA-CF @FF G4 0.6 nozzle", + "Flashforge/Flashforge PLA-CF @FF G4P", + "Flashforge/Flashforge PLA-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PPA-CF", + "Flashforge/Flashforge PPA-CF @FF C5", + "Flashforge/Flashforge PPA-CF @FF C5P", + "Flashforge/Flashforge PPA-GF", + "Flashforge/Flashforge PPS @FF G4", + "Flashforge/Flashforge PPS @FF G4P", + "Flashforge/Flashforge PPS-CF", + "Flashforge/Flashforge PPS-CF @FF C5", + "Flashforge/Flashforge PPS-CF @FF C5P", + "Flashforge/Flashforge PPS-CF @FF G4", + "Flashforge/Flashforge PPS-CF @FF G4P", + "Flashforge/Flashforge PVA @FF C5", + "Flashforge/Flashforge PVA @FF C5P", + "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4 0.6 nozzle", + "Flashforge/Flashforge TPU 65D @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.6 nozzle", + "Flashforge/Flashforge TPU 65D @FF G4P 0.8 HF nozzle", + "Flashforge/Flashforge TPU 95A", + "Flashforge/Flashforge TPU 95A @FF AD5X", + "Flashforge/Flashforge TPU 95A @FF AD5X 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4", + "Flashforge/Flashforge TPU 95A @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P", + "Flashforge/Flashforge TPU 95A @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P 0.6 nozzle", + "Flashforge/Flashforge TPU 95A @FF G4P 0.8 HF nozzle", + "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 Generic NexPA-CF25", "Flashforge/FusRock Generic PAHT-CF", "Flashforge/FusRock Generic PAHT-CF @G3U 0.6 Nozzle", @@ -6727,8 +7660,37 @@ "Flashforge/FusRock Generic S-Multi @G3U 0.6 Nozzle", "Flashforge/FusRock Generic S-PAHT", "Flashforge/FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "Flashforge/FusRock PAHT @FF G4 0.6 HF nozzle", + "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", + "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", + "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PAHT-CF @FF C5", + "Flashforge/FusRock PAHT-CF @FF C5P", + "Flashforge/FusRock PAHT-CF @FF G4", + "Flashforge/FusRock PAHT-CF @FF G4 0.6 nozzle", + "Flashforge/FusRock PAHT-CF @FF G4P", + "Flashforge/FusRock PAHT-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PET-CF @FF G4", + "Flashforge/FusRock PET-CF @FF G4 0.6 nozzle", + "Flashforge/FusRock PET-CF @FF G4P", + "Flashforge/FusRock PET-CF @FF G4P 0.6 nozzle", + "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 ABS @Flashforge AD4", "Flashforge/Generic ASA @Flashforge AD4", + "Flashforge/Generic PET @FF G4", + "Flashforge/Generic PET @FF G4 0.6 HF nozzle", + "Flashforge/Generic PET @FF G4 0.6 nozzle", + "Flashforge/Generic PET @FF G4 0.8 HF nozzle", + "Flashforge/Generic PET @FF G4P", + "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", + "Flashforge/Generic PET @FF G4P 0.6 nozzle", + "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", "Flashforge/Generic PETG @Flashforge AD4", "Flashforge/Generic PETG @Flashforge Artemis", "Flashforge/Generic PETG-CF10 @Flashforge AD4", @@ -6736,7 +7698,22 @@ "Flashforge/Generic PLA High Speed @Flashforge AD4", "Flashforge/Generic PLA Silk @Flashforge AD4", "Flashforge/Generic PLA-CF10 @Flashforge AD4", + "Flashforge/Generic TPU 85A @FF AD5X", + "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", + "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", "Flashforge/Generic TPU @Flashforge AD4", + "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", + "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", + "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", + "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", "Flashforge/Polymaker Generic CoPA", "Flashforge/Polymaker Generic S1", "FlyingBear/FlyingBear ABS @Ghost7", From 674344b3c1b6d73379c9b076a43a26da6d8288b8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:08:08 +0800 Subject: [PATCH 006/208] Elegoo: per-product-line roots and filament_ids Phase 2 of the filament_id cleanup (37 collision groups; one systematic mistake: every commercial line inherits the material-class @base and its EB00 id). 23 new per-line @base roots with fresh deterministic mints (no per-line roots existed, contrary to the plan text), 155 inherits repoints, 23 index entries inserted between the parent @base and the line's members (load-bearing order), 6 in-place mints on single-member generic derivatives. The @base-owning families keep their ids (Elegoo PLA=EPLAB00 etc.); 2 forced family-atomic re-ids outside collision groups (Elegoo Rapid TPU 95A @EN2 Series/@Elegoo Giga follow their family). Residual 2-family shares (GPETGB00/GASAB00 with the Centauri -CF lines, pure-template ETPUB00/ EPAHTB00) are printer-disjoint, validator-clean, and frozen in the snapshot. Verified: config-equivalence gate zero unexpected diffs; extra check exit 0; --check exit 0; validator -l 2 exit 0; extended -f -v Elegoo exit 0 (was 37 groups / 1332 printer-level errors on the pre-apply copy). --- resources/profiles/Elegoo.json | 92 ++++++++++ .../filament/BASE/Elegoo ASA-CF @base.json | 8 + .../filament/BASE/Elegoo PC-FR @base.json | 8 + .../filament/BASE/Elegoo PET-CF @base.json | 8 + .../filament/BASE/Elegoo PETG HF @base.json | 8 + .../filament/BASE/Elegoo PETG PRO @base.json | 8 + .../BASE/Elegoo PETG Translucent @base.json | 8 + .../filament/BASE/Elegoo PETG-CF @base.json | 8 + .../filament/BASE/Elegoo PETG-GF @base.json | 8 + .../filament/BASE/Elegoo PLA Basic @base.json | 8 + .../BASE/Elegoo PLA Galaxy @base.json | 8 + .../filament/BASE/Elegoo PLA Glow @base.json | 8 + .../BASE/Elegoo PLA Marble @base.json | 8 + .../filament/BASE/Elegoo PLA Matte @base.json | 8 + .../filament/BASE/Elegoo PLA PRO @base.json | 8 + .../filament/BASE/Elegoo PLA Silk @base.json | 8 + .../BASE/Elegoo PLA Sparkle @base.json | 8 + .../BASE/Elegoo PLA Translucent2 @base.json | 8 + .../filament/BASE/Elegoo PLA Wood @base.json | 8 + .../filament/BASE/Elegoo PLA+ @base.json | 8 + .../filament/BASE/Elegoo PLA-CF @base.json | 8 + .../BASE/Elegoo Rapid PETG @base.json | 8 + .../BASE/Elegoo Rapid PLA+ @base.json | 8 + .../BASE/Elegoo Rapid TPU 95A @base.json | 8 + .../Elegoo/filament/EC/Elegoo PC-FR @EC.json | 2 +- .../filament/EC/Elegoo PETG PRO @EC.json | 2 +- .../EC/Elegoo PETG Translucent @EC.json | 2 +- .../filament/EC/Elegoo PETG-CF @EC.json | 2 +- .../filament/EC/Elegoo PETG-GF @EC.json | 2 +- .../filament/EC/Elegoo PLA Basic @EC.json | 2 +- .../filament/EC/Elegoo PLA Galaxy @EC.json | 2 +- .../filament/EC/Elegoo PLA Marble @EC.json | 2 +- .../filament/EC/Elegoo PLA Matte @EC.json | 2 +- .../filament/EC/Elegoo PLA PRO @EC.json | 2 +- .../filament/EC/Elegoo PLA Silk @EC.json | 2 +- .../filament/EC/Elegoo PLA Sparkle @EC.json | 2 +- .../filament/EC/Elegoo PLA Wood @EC.json | 2 +- .../Elegoo/filament/EC/Elegoo PLA+ @EC.json | 2 +- .../filament/EC/Elegoo Rapid PETG @EC.json | 2 +- .../filament/EC/Elegoo Rapid PLA+ @EC.json | 2 +- .../filament/EC/Elegoo Rapid TPU 95A @EC.json | 2 +- .../filament/EC2/Elegoo ASA-CF @EC2.json | 2 +- .../filament/EC2/Elegoo PC-FR @EC2.json | 2 +- .../filament/EC2/Elegoo PET-CF @EC2.json | 2 +- .../filament/EC2/Elegoo PETG HF @EC2.json | 2 +- .../filament/EC2/Elegoo PETG PRO @EC2.json | 2 +- .../EC2/Elegoo PETG Translucent @EC2.json | 2 +- .../filament/EC2/Elegoo PETG-CF @EC2.json | 2 +- .../filament/EC2/Elegoo PETG-GF @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Basic @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Galaxy @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Glow @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Marble @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Matte @EC2.json | 2 +- .../filament/EC2/Elegoo PLA PRO @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Silk @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Sparkle @EC2.json | 2 +- .../EC2/Elegoo PLA Translucent2 @EC2.json | 2 +- .../filament/EC2/Elegoo PLA Wood @EC2.json | 2 +- .../Elegoo/filament/EC2/Elegoo PLA+ @EC2.json | 2 +- .../filament/EC2/Elegoo PLA-CF @EC2.json | 2 +- .../filament/EC2/Elegoo Rapid PETG @EC2.json | 2 +- .../filament/EC2/Elegoo Rapid PLA+ @EC2.json | 2 +- .../EC2/Elegoo Rapid TPU 95A @EC2.json | 2 +- .../filament/ECC/Elegoo PC-FR @ECC.json | 2 +- .../filament/ECC/Elegoo PETG PRO @ECC.json | 2 +- .../ECC/Elegoo PETG Translucent @ECC.json | 2 +- .../filament/ECC/Elegoo PETG-CF @ECC.json | 2 +- .../filament/ECC/Elegoo PETG-GF @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Basic @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Galaxy @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Marble @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Matte @ECC.json | 2 +- .../filament/ECC/Elegoo PLA PRO @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Silk @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Sparkle @ECC.json | 2 +- .../filament/ECC/Elegoo PLA Wood @ECC.json | 2 +- .../Elegoo/filament/ECC/Elegoo PLA+ @ECC.json | 2 +- .../filament/ECC/Elegoo PLA-CF @ECC.json | 2 +- .../filament/ECC/Elegoo Rapid PETG @ECC.json | 2 +- .../filament/ECC/Elegoo Rapid PLA+ @ECC.json | 2 +- .../ECC/Elegoo Rapid TPU 95A @ECC.json | 2 +- .../filament/ECC2/Elegoo ASA-CF @ECC2.json | 2 +- .../filament/ECC2/Elegoo PC-FR @ECC2.json | 2 +- .../filament/ECC2/Elegoo PET-CF @ECC2.json | 2 +- .../filament/ECC2/Elegoo PETG HF @ECC2.json | 2 +- .../filament/ECC2/Elegoo PETG PRO @ECC2.json | 2 +- .../ECC2/Elegoo PETG Translucent @ECC2.json | 2 +- .../filament/ECC2/Elegoo PETG-CF @ECC2.json | 2 +- .../filament/ECC2/Elegoo PETG-GF @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Basic @ECC2.json | 2 +- .../ECC2/Elegoo PLA Galaxy @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Glow @ECC2.json | 2 +- .../ECC2/Elegoo PLA Marble @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Matte @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA PRO @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Silk @ECC2.json | 2 +- .../ECC2/Elegoo PLA Sparkle @ECC2.json | 2 +- .../ECC2/Elegoo PLA Translucent2 @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Wood @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA+ @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA-CF @ECC2.json | 2 +- .../ECC2/Elegoo Rapid PETG @ECC2.json | 2 +- .../ECC2/Elegoo Rapid PLA+ @ECC2.json | 2 +- .../ECC2/Elegoo Rapid TPU 95A @ECC2.json | 2 +- .../Elegoo PC-FR @0.2 nozzle.json | 2 +- .../Elegoo PETG PRO @0.2 nozzle.json | 2 +- .../Elegoo PETG Translucent @0.2 nozzle.json | 2 +- .../Elegoo PLA Basic @0.2 nozzle.json | 2 +- .../Elegoo PLA Matte @0.2 nozzle.json | 2 +- .../Elegoo PLA PRO @0.2 nozzle.json | 2 +- .../Elegoo PLA Silk @0.2 nozzle.json | 2 +- .../Elegoo PLA+ @0.2 nozzle.json | 2 +- .../Elegoo Rapid PETG @0.2 nozzle.json | 2 +- .../Elegoo Rapid PLA+ @0.2 nozzle.json | 2 +- .../Elegoo PETG PRO @EN2 Series.json | 2 +- .../Elegoo PETG Translucent @EN2 Series.json | 2 +- .../EN2SERIES/Elegoo PETG-CF @EN2 Series.json | 2 +- .../EN2SERIES/Elegoo PETG-GF @EN2 Series.json | 2 +- .../Elegoo PLA Basic @EN2 Series.json | 2 +- .../Elegoo PLA Galaxy @EN2 Series.json | 2 +- .../Elegoo PLA Marble @EN2 Series.json | 2 +- .../Elegoo PLA Matte @EN2 Series.json | 2 +- .../EN2SERIES/Elegoo PLA PRO @EN2 Series.json | 2 +- .../Elegoo PLA Silk @EN2 Series.json | 2 +- .../Elegoo PLA Sparkle @EN2 Series.json | 2 +- .../Elegoo PLA Wood @EN2 Series.json | 2 +- .../EN2SERIES/Elegoo PLA+ @EN2 Series.json | 2 +- .../EN2SERIES/Elegoo PLA-CF @EN2 Series.json | 2 +- .../Elegoo Rapid PETG @EN2 Series.json | 2 +- .../Elegoo Rapid PLA+ @EN2 Series.json | 2 +- .../Elegoo Rapid TPU 95A @EN2 Series.json | 2 +- .../Elegoo PETG PRO @EN3 Series.json | 2 +- .../Elegoo PETG Translucent @EN3 Series.json | 2 +- .../EN3SERIES/Elegoo PETG-CF @EN3 Series.json | 2 +- .../EN3SERIES/Elegoo PETG-GF @EN3 Series.json | 2 +- .../Elegoo PLA Basic @EN3 Series.json | 2 +- .../Elegoo PLA Galaxy @EN3 Series.json | 2 +- .../Elegoo PLA Marble @EN3 Series.json | 2 +- .../Elegoo PLA Matte @EN3 Series.json | 2 +- .../EN3SERIES/Elegoo PLA PRO @EN3 Series.json | 2 +- .../Elegoo PLA Silk @EN3 Series.json | 2 +- .../Elegoo PLA Sparkle @EN3 Series.json | 2 +- .../Elegoo PLA Wood @EN3 Series.json | 2 +- .../EN3SERIES/Elegoo PLA+ @EN3 Series.json | 2 +- .../EN3SERIES/Elegoo PLA-CF @EN3 Series.json | 2 +- .../Elegoo Rapid PETG @EN3 Series.json | 2 +- .../Elegoo Rapid PLA+ @EN3 Series.json | 2 +- .../Elegoo Rapid TPU 95A @EN3 Series.json | 2 +- .../Elegoo PETG PRO @EN4 Series.json | 2 +- .../Elegoo PETG Translucent @EN4 Series.json | 2 +- .../EN4SERIES/Elegoo PETG-CF @EN4 Series.json | 2 +- .../EN4SERIES/Elegoo PETG-GF @EN4 Series.json | 2 +- .../Elegoo PLA Basic @EN4 Series.json | 2 +- .../Elegoo PLA Galaxy @EN4 Series.json | 2 +- .../Elegoo PLA Marble @EN4 Series.json | 2 +- .../Elegoo PLA Matte @EN4 Series.json | 2 +- .../EN4SERIES/Elegoo PLA PRO @EN4 Series.json | 2 +- .../Elegoo PLA Silk @EN4 Series.json | 2 +- .../Elegoo PLA Sparkle @EN4 Series.json | 2 +- .../Elegoo PLA Wood @EN4 Series.json | 2 +- .../EN4SERIES/Elegoo PLA+ @EN4 Series.json | 2 +- .../EN4SERIES/Elegoo PLA-CF @EN4 Series.json | 2 +- .../Elegoo Rapid PETG @EN4 Series.json | 2 +- .../Elegoo Rapid PLA+ @EN4 Series.json | 2 +- .../Elegoo Rapid TPU 95A @EN4 Series.json | 2 +- .../EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json | 2 +- .../Elegoo PETG Translucent @Elegoo Giga.json | 2 +- .../EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json | 2 +- .../EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json | 2 +- .../Elegoo PLA Basic @Elegoo Giga.json | 2 +- .../Elegoo PLA Galaxy @Elegoo Giga.json | 2 +- .../Elegoo PLA Marble @Elegoo Giga.json | 2 +- .../Elegoo PLA Matte @Elegoo Giga.json | 2 +- .../Elegoo PLA Sparkle @Elegoo Giga.json | 2 +- .../EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json | 2 +- .../Elegoo Rapid PETG @Elegoo Giga.json | 2 +- .../Elegoo Rapid PLA+ @Elegoo Giga.json | 2 +- .../Elegoo Rapid TPU 95A @Elegoo Giga.json | 2 +- .../Generic ABS-CF @Elegoo Centauri.json | 1 + .../Generic/Generic PA6-CF @Elegoo.json | 1 + .../Generic/Generic PC-CF @Elegoo.json | 1 + .../Generic PET-CF @Elegoo Centauri.json | 1 + .../Generic/Generic PETG PRO @Elegoo.json | 1 + .../Generic/Generic PLA Matte @Elegoo.json | 1 + scripts/filament_id_snapshot.json | 169 ++++++++++++++---- 186 files changed, 568 insertions(+), 193 deletions(-) create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 077c264b84..3813f93348 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1276,6 +1276,10 @@ "name": "Elegoo PETG @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG @0.2 nozzle.json" }, + { + "name": "Elegoo PETG PRO @base", + "sub_path": "filament/BASE/Elegoo PETG PRO @base.json" + }, { "name": "Elegoo PETG PRO @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json" @@ -1284,26 +1288,50 @@ "name": "Elegoo PLA @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA @0.2 nozzle.json" }, + { + "name": "Elegoo PLA Matte @base", + "sub_path": "filament/BASE/Elegoo PLA Matte @base.json" + }, { "name": "Elegoo PLA Matte @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json" }, + { + "name": "Elegoo PLA PRO @base", + "sub_path": "filament/BASE/Elegoo PLA PRO @base.json" + }, { "name": "Elegoo PLA PRO @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json" }, + { + "name": "Elegoo PLA Silk @base", + "sub_path": "filament/BASE/Elegoo PLA Silk @base.json" + }, { "name": "Elegoo PLA Silk @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json" }, + { + "name": "Elegoo PLA+ @base", + "sub_path": "filament/BASE/Elegoo PLA+ @base.json" + }, { "name": "Elegoo PLA+ @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json" }, + { + "name": "Elegoo Rapid PLA+ @base", + "sub_path": "filament/BASE/Elegoo Rapid PLA+ @base.json" + }, { "name": "Elegoo Rapid PLA+ @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json" }, + { + "name": "Elegoo Rapid PETG @base", + "sub_path": "filament/BASE/Elegoo Rapid PETG @base.json" + }, { "name": "Elegoo Rapid PETG @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json" @@ -1316,14 +1344,26 @@ "name": "Elegoo PC @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC @0.2 nozzle.json" }, + { + "name": "Elegoo PC-FR @base", + "sub_path": "filament/BASE/Elegoo PC-FR @base.json" + }, { "name": "Elegoo PC-FR @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json" }, + { + "name": "Elegoo PLA Basic @base", + "sub_path": "filament/BASE/Elegoo PLA Basic @base.json" + }, { "name": "Elegoo PLA Basic @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json" }, + { + "name": "Elegoo PETG Translucent @base", + "sub_path": "filament/BASE/Elegoo PETG Translucent @base.json" + }, { "name": "Elegoo PETG Translucent @0.2 nozzle", "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json" @@ -1352,6 +1392,10 @@ "name": "Elegoo PLA Matte @ECC", "sub_path": "filament/ECC/Elegoo PLA Matte @ECC.json" }, + { + "name": "Elegoo PLA-CF @base", + "sub_path": "filament/BASE/Elegoo PLA-CF @base.json" + }, { "name": "Elegoo PLA-CF @ECC", "sub_path": "filament/ECC/Elegoo PLA-CF @ECC.json" @@ -1380,6 +1424,10 @@ "name": "Elegoo ABS @ECC", "sub_path": "filament/ECC/Elegoo ABS @ECC.json" }, + { + "name": "Elegoo PLA Galaxy @base", + "sub_path": "filament/BASE/Elegoo PLA Galaxy @base.json" + }, { "name": "Elegoo PLA Galaxy @ECC", "sub_path": "filament/ECC/Elegoo PLA Galaxy @ECC.json" @@ -1388,14 +1436,26 @@ "name": "Elegoo PLA Basic @ECC", "sub_path": "filament/ECC/Elegoo PLA Basic @ECC.json" }, + { + "name": "Elegoo PLA Marble @base", + "sub_path": "filament/BASE/Elegoo PLA Marble @base.json" + }, { "name": "Elegoo PLA Marble @ECC", "sub_path": "filament/ECC/Elegoo PLA Marble @ECC.json" }, + { + "name": "Elegoo PLA Sparkle @base", + "sub_path": "filament/BASE/Elegoo PLA Sparkle @base.json" + }, { "name": "Elegoo PLA Sparkle @ECC", "sub_path": "filament/ECC/Elegoo PLA Sparkle @ECC.json" }, + { + "name": "Elegoo PLA Wood @base", + "sub_path": "filament/BASE/Elegoo PLA Wood @base.json" + }, { "name": "Elegoo PLA Wood @ECC", "sub_path": "filament/ECC/Elegoo PLA Wood @ECC.json" @@ -1412,10 +1472,18 @@ "name": "Elegoo PC-FR @ECC", "sub_path": "filament/ECC/Elegoo PC-FR @ECC.json" }, + { + "name": "Elegoo PETG-CF @base", + "sub_path": "filament/BASE/Elegoo PETG-CF @base.json" + }, { "name": "Elegoo PETG-CF @ECC", "sub_path": "filament/ECC/Elegoo PETG-CF @ECC.json" }, + { + "name": "Elegoo PETG-GF @base", + "sub_path": "filament/BASE/Elegoo PETG-GF @base.json" + }, { "name": "Elegoo PETG-GF @ECC", "sub_path": "filament/ECC/Elegoo PETG-GF @ECC.json" @@ -1424,6 +1492,10 @@ "name": "Elegoo PETG Translucent @ECC", "sub_path": "filament/ECC/Elegoo PETG Translucent @ECC.json" }, + { + "name": "Elegoo Rapid TPU 95A @base", + "sub_path": "filament/BASE/Elegoo Rapid TPU 95A @base.json" + }, { "name": "Elegoo Rapid TPU 95A @ECC", "sub_path": "filament/ECC/Elegoo Rapid TPU 95A @ECC.json" @@ -1716,6 +1788,10 @@ "name": "Elegoo PETG Translucent @EC2", "sub_path": "filament/EC2/Elegoo PETG Translucent @EC2.json" }, + { + "name": "Elegoo ASA-CF @base", + "sub_path": "filament/BASE/Elegoo ASA-CF @base.json" + }, { "name": "Elegoo ASA-CF @ECC2", "sub_path": "filament/ECC2/Elegoo ASA-CF @ECC2.json" @@ -1724,6 +1800,10 @@ "name": "Elegoo ASA-CF @EC2", "sub_path": "filament/EC2/Elegoo ASA-CF @EC2.json" }, + { + "name": "Elegoo PET-CF @base", + "sub_path": "filament/BASE/Elegoo PET-CF @base.json" + }, { "name": "Elegoo PET-CF @ECC2", "sub_path": "filament/ECC2/Elegoo PET-CF @ECC2.json" @@ -1732,6 +1812,10 @@ "name": "Elegoo PET-CF @EC2", "sub_path": "filament/EC2/Elegoo PET-CF @EC2.json" }, + { + "name": "Elegoo PETG HF @base", + "sub_path": "filament/BASE/Elegoo PETG HF @base.json" + }, { "name": "Elegoo PETG HF @ECC2", "sub_path": "filament/ECC2/Elegoo PETG HF @ECC2.json" @@ -1740,6 +1824,10 @@ "name": "Elegoo PETG HF @EC2", "sub_path": "filament/EC2/Elegoo PETG HF @EC2.json" }, + { + "name": "Elegoo PLA Glow @base", + "sub_path": "filament/BASE/Elegoo PLA Glow @base.json" + }, { "name": "Elegoo PLA Glow @ECC2", "sub_path": "filament/ECC2/Elegoo PLA Glow @ECC2.json" @@ -1748,6 +1836,10 @@ "name": "Elegoo PLA Glow @EC2", "sub_path": "filament/EC2/Elegoo PLA Glow @EC2.json" }, + { + "name": "Elegoo PLA Translucent2 @base", + "sub_path": "filament/BASE/Elegoo PLA Translucent2 @base.json" + }, { "name": "Elegoo PLA Translucent2 @ECC2", "sub_path": "filament/ECC2/Elegoo PLA Translucent2 @ECC2.json" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json new file mode 100644 index 0000000000..bc100dfe2f --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo ASA-CF @base", + "inherits": "Elegoo ASA @base", + "from": "system", + "filament_id": "OFAiqi5v", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json new file mode 100644 index 0000000000..9aeb40e0a8 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @base", + "inherits": "Elegoo PC @base", + "from": "system", + "filament_id": "OFzFbFcl", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json new file mode 100644 index 0000000000..6290eba7f9 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PET-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFSCm6pJ", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json new file mode 100644 index 0000000000..ba3e4715a3 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG HF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFxjFYxE", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json new file mode 100644 index 0000000000..4df7589911 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG PRO @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFmOWC74", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json new file mode 100644 index 0000000000..b75929e76a --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFOkTA0C", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json new file mode 100644 index 0000000000..3a3b837513 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFiyGNbI", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json new file mode 100644 index 0000000000..e7020a00bf --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-GF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFBvxnjM", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json new file mode 100644 index 0000000000..42f77b0b2b --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFHtQDC9", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json new file mode 100644 index 0000000000..ef7c46673d --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Galaxy @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF09vOcG", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json new file mode 100644 index 0000000000..cffd7b0185 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Glow @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFuXkYly", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json new file mode 100644 index 0000000000..bda871cae8 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Marble @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFbYP6Wb", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json new file mode 100644 index 0000000000..a216c20e7c --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Matte @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFwyqcGn", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json new file mode 100644 index 0000000000..d6d1e30e6c --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA PRO @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFklg4aM", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json new file mode 100644 index 0000000000..b0ba1af2d6 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Silk @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFkfK62J", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json new file mode 100644 index 0000000000..1120084d6a --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Sparkle @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFaKIoH2", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json new file mode 100644 index 0000000000..d06d60e5cc --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Translucent2 @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFcqs5g7", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json new file mode 100644 index 0000000000..ab43fb2bf2 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Wood @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFh5GUhZ", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json new file mode 100644 index 0000000000..028fd42383 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFDMWB6t", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json new file mode 100644 index 0000000000..706b60f0c9 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA-CF @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFuPC4S8", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json new file mode 100644 index 0000000000..5eeb29bad3 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PETG @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OF3arl18", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json new file mode 100644 index 0000000000..b83fe4b688 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFAHagT9", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json new file mode 100644 index 0000000000..fe1bae90a0 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid TPU 95A @base", + "inherits": "Elegoo TPU @base", + "from": "system", + "filament_id": "OFL4KniM", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json index 8fae500404..85c449d63d 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @EC", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "DOX4jdBlUuiFx27J", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json index e86269bb09..a31310c99e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "ADLcWU2wDYdXUM0F", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json index 28f8027a7a..82cf5984ce 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "bkdR8uTPqu0nMTMW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json index 1875a4b76d..40c06c2ea6 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "bNOqwg4q2TE94jEj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json index fcfd9e3ed8..978d44137c 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "jDvyk3UkeiNb2U9m", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json index a69e1b0daa..53fb8da44e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "hO0eeJKhhc9aWSqV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json index cb692d090b..9e4e4e75fa 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "F55l4bPdEauXI3Zf", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json index 521d677ac9..5f15585557 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "lZOlnGqn1G7V5NBY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json index ba0cdcff72..2ebc1acdcb 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "GC7p8OUHQheNbsms", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json index 59b3d04f4b..96e4da2470 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "23RCuAK92MPaxyqe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json index 1641f49732..3de7272685 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "vSomzlfdeel8Fkkc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json index cea1875a1e..ccb945dea0 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "XbPbopAAmos9Fhe5", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json index 329eca7704..c023839c9e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "4cqc0qMp58PbLivG", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json index 4b02ef0ff2..e4f500e3d9 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "TtRiwCEgVej4q1bD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json index 5651aabd4e..aaa6b6ed57 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EC", "renamed_from": "Elegoo RAPID PETG @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "BIkMBzPkBJNZtn9I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json index 441e1c1844..f91163b60b 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EC", "renamed_from": "Elegoo RAPID PLA+ @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "SdBul5AmPj8ZwaKm", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json index b698d51e37..1bb675bcad 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EC", "renamed_from": "Elegoo RAPID TPU 95A @EC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "XWoU9g1mRLapDWmY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json index d448a14146..09a741f456 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @EC2", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "12kyjckYS59VKuJr", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json index e27e485702..fef1cd2942 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @EC2", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "4y2nFqOY9OLYQT4I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json index 0e73748900..9cfd0df698 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "YuxImosRqvxeXky9", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json index db3eac6a9b..3cc09b1253 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "JXAbqQk05wQC2ZsV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json index f443590f79..19f171099d 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "7eE7wOnwAMmDk3N8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json index e5d38ae804..117eff2f6c 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "c62Io0F7o3YY9UfY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json index 521e3f54d6..ef5bc10365 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "H5b1oB4xwcsOGVYG", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json index 0376628dd7..78f93ab630 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "UXEBZHN5QuEKg2dX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json index bf2e6de3d6..5ca3f673a6 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "YBylnOIc1QhV45N0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json index 485a267cc4..f907a9add4 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "BZ67cDxyhlFdrNPf", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json index d9cd47f31e..5942a1353b 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "X18eV3oo6N3xDJXN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json index 819bcc8fb7..41e18aac91 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "D4UWZLfsmnwQSQP0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json index 5713ef1094..fa490188d9 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "EMVja9n1ZwI2Lq3R", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json index 128866138d..3f52d014e1 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "TXUB904pAsT5napV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json index def1a54169..6b334b031a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "9M8QYAJcLTyKLgNL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json index 17abe488dc..76efd87383 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "l7NSciXWqkFqbTgB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json index 8bd5e92dea..6e09760383 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "RKBHiiO580ou2vr1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json index 1071c52353..153ace7d5d 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "ym42CllFezpl1XEg", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json index cbf217cae1..5dfd3d5218 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "vf5ap9MNwVgptsvO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json index e148759647..7f77984b7b 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "UpGOamlqBkqj71bx", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json index 7242ba793e..c6973a9316 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EC2", "renamed_from": "Elegoo RAPID PETG @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "1qDXoSeuwBcAbZmk", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json index e3d33b2243..b44278d6e2 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EC2", "renamed_from": "Elegoo RAPID PLA+ @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "lfHbQa7hrJ7wg4oC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json index 7195e17e93..14b585d079 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EC2", "renamed_from": "Elegoo RAPID TPU 95A @EC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "siG31sp4DyxsrhAc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json index 4fc22048cb..739780ead3 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @ECC", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "nCZkQRo7hh7vwwbL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json index 49692dd335..95beb0642f 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "VfYr5aZoseuXcbN6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json index de9d234ce4..d5e37e6443 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "X5cTMTTWd0GWWj6d", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json index a2f6620a79..4f71ace3fa 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "WNaFMeStUh8INJGx", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json index 68df019a74..ad02614622 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "s5zG5lNveft4RPEX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json index 2470cead83..0b6855e93b 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "zCxfCnJcHoGLipVy", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json index 5e0e0819c1..a60319429e 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "M5uv0mruFXpkbauD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json index d9104d271f..c436f05881 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "BFEnBt0IBILLmhri", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json index 79e4a2b076..d8259d1668 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "niMCkAjPd2bJdjZs", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json index bbd35a7c58..4405d9eabc 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "JfYUDBI0wNnLpEsL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json index 7d135cd9fd..d67e21299f 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "n4hPXKakxN4xmQsj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json index 6143048aa1..b26a6d0486 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "kn34IfbyhDKllxwq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json index 92842d8fbf..4160c5a11a 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "kI7ZFyzYkMcrKrM1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json index 06c833d7b2..3d96576667 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "UbOYgGsK00v3gLL8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json index 4743d13a9f..a7ff2af7ea 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "rvrpVcpcUAtwXgsn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json index 6ea852850d..78be9ad0c5 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @ECC", "renamed_from": "Elegoo RAPID PETG @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "r4F3n71ajBUlmLgN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json index 859b66e8ad..e331dcb593 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @ECC", "renamed_from": "Elegoo RAPID PLA+ @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "OvdHgrXbSulHkLWz", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json index 6faef1d73a..af4902d2a0 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @ECC", "renamed_from": "Elegoo RAPID TPU 95A @ECC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "uVpRY8TCq9S6kr8M", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json index 0974b25503..9e9de44980 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @ECC2", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "X7ugJOOrWixpeke8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json index 5875d26411..e179a2fae0 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @ECC2", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "M86WAPT5jr5ge7Ni", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json index 9519266c2d..57de3396b7 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "sIwAf2oRC7VqYjIR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json index 27ad64e1b5..06551d42b3 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "EAt1AJX3ZupILYWV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json index bb535d3213..52621252b8 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "YjUFi1BuigQdJGfe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json index de86ebaae6..81f11bb3cf 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "Nk21n7x4I5xjwNqV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json index 1e40c2a305..a8f66ceb18 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "TsJJG9mgzBt5GWPZ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json index 13060e74ba..a80a50283a 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Po38QP4RqkGBZTHq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json index e301741c27..e0e19454e5 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "CG6nOQRYTWN0jJNV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json index 638fef599c..1f4c3a24ea 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "jieMxZQRwSJ8lOQK", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json index 7944c67d88..9d44f32e96 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "S6c2IXcIWDpViP2T", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json index 297ac4fcd0..4a1592daef 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "vBkiE3Uh1LdCiOig", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json index 025d40e19d..5522f8f92f 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "C3IdNUQ5dSe1wQua", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json index f1b8a7a1d2..b3ed52adae 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "nIBhL1ZCxYZSMZTO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json index 62efb49b53..970a859a26 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "R20HD2TcTFmVt8ei", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json index da6927987e..7357f57dd7 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "RoM3TYRuszinvW6b", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json index 8a81ff7ccf..4119a7c009 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "K1pIYbrCCJUBwAOt", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json index 0b794f78a6..c1ee9ccb34 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "7D7QoTRo7U4HGaZB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json index 7b6e068061..bad7a5e25d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "GCMagCIZUPjPBpuH", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json index a95b21ddba..1c7d88298d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "0pllUBj7uWuhIr0v", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json index fe19d98291..f550c51ee9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @ECC2", "renamed_from": "Elegoo RAPID PETG @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "oVp14HbITUsNcgvp", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json index c173221004..4baa2ba58d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @ECC2", "renamed_from": "Elegoo RAPID PLA+ @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "qXybozVO1oL7MEud", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json index ebbdefb767..267956ac99 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @ECC2", "renamed_from": "Elegoo RAPID TPU 95A @ECC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "5osmvljNWBUEc9Kc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json index 88c968cf23..734234a7e5 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @0.2 nozzle", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "Q6LfquCFYpzmrILa", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json index 9978fb863b..f8cc2b9fc2 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "TBkoABUqBy51TLtW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json index 7b11b3b54e..82e74b3448 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "3zgNnsZ5SmrldddZ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json index c606063a33..9f9b494683 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "cBFHhPKahRBGfAg6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json index f5bb2921b3..cb1dbf6ebd 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "TyHg4K4ZNiYKgaso", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json index 80f9b0cab9..9514bef332 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "ed7EP0Fx9X6WoP8q", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json index e6a61535b3..7cd383baf0 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "9cy4zu57LxlFIrLB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json index 7bab03c3c0..960d70e8b4 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "IODCNDnNbt1xXMQR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json index 4f9d3ddacd..a2c6a17ee8 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @0.2 nozzle", "renamed_from": "Elegoo RAPID PETG @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "Vn71U93sqvxWaq5J", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json index f7d3bf2b8b..5677780b04 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @0.2 nozzle", "renamed_from": "Elegoo RAPID PLA+ @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "52q6GSMo16aOU2a0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json index 2d540432f1..ee33397b89 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "47TFK2SdXkanFany", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json index ec6735ee45..9cc8d43f42 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "PG4cLzHQ2okqwTVi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json index f4cb06df03..15c6fe281b 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "xVvTmdiPx4DqsoSt", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json index 1d4376f603..655a9b4ff0 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Wuj48uGxkjtu1k0E", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json index 1625d88ade..02f95a30e4 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "rKMXIa1T57ARSSew", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json index 969338f3fb..5ce5cb9b03 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "dK5fXHKyvXbajhfU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json index 49de0c172a..e65cfd721a 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "vcJBgxGVh5Rl3dRy", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json index b526d88f8a..4ba71c6f1c 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "pFzHY2WtgjYBAq1c", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json index bbca38423a..fc4a9de6d7 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "AP6zWYwNv7aXdT4e", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json index b75a9105f7..1100589ce7 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "AquzfXzcf6CxPLmL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json index a63d22f72b..309f296c35 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "sYpjo9kbuDSM5YXe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json index 1f52f7a951..10ee31a860 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "FCCgNMxR3m3CtWBL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json index aa2afe2789..cdbb0a9336 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "qn1N6b1JCgut6S69", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json index 51be7c9afc..d90f5a7d86 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "vmxHMRDkf1EpLGx1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json index 66e35e0448..b60d3aa948 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN2 Series", "renamed_from": "Elegoo RAPID PETG @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "7Nqa8yKgcpoRnMhS", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json index 16f84c1480..a2e29df5f2 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN2 Series", "renamed_from": "Elegoo RAPID PLA+ @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "GRiM2kKnyW0xiFoS", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json index f7fd820319..5c3a6c4bd8 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN2 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN2 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "NcE57l7rlZXMQqqO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json index d7b7d77e88..68076528bc 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "hcpl3lUmYmocda9K", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json index a5df1863a2..3b3c367d85 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "vvE6QSdUAwZyExFq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json index 85b4e262ce..d47880e700 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "w31T0qj9YkyNYfXR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json index a0c6dffa1e..74e80e0306 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Ss1cK4Mg4Qsmq60H", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json index d322e76d4a..c7008362e1 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "HuzVgg6RrpAtYYEv", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json index 70a9903ae6..213d2cdd80 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "BpZZWJcuFxWOCCnw", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json index b6e4d20992..4ccc34dbc8 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "BxsWsE3wgE9wgBmm", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json index 8360ac8d5c..511c9d9677 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "L3da64GFIKUFdDJA", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json index 114e264047..a62506cc92 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "V7HUl0gBvGKwKD1A", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json index d7fa7b836b..8498c99ccb 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "ik0YrrrI6oUpXz79", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json index b40ed87cf6..990ab62ced 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "5NjKDHvQ2r1kxHGU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json index 3d3ac38460..22f0c6486c 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "aieihLgO1a0ZdWfJ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json index 00844dd1e8..02b51855fc 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "LqnrFp0vDbiCMJ8I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json index ab7ccd7730..8284fd2279 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "1NWIyM71opgpoto1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json index 30ca32476f..bbbb7a044b 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN3 Series", "renamed_from": "Elegoo RAPID PETG @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "WrjA1jFlRkBjm8sV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json index a8755142d5..2e79376216 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN3 Series", "renamed_from": "Elegoo RAPID PLA+ @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "HLIz2ghBgZEcM67x", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json index 0a9d3251b0..11370d1342 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN3 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN3 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "q51os4xSncl4kA7h", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json index 3f514f290c..b3bf57532d 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "9vWaWFD7kELXCz9k", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json index 9d4befe58d..64d7fe70b4 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "MGNtc9J7whLEQzfo", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json index 6b6d93b07e..570205ae49 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "OqmWX74QvP3luz8T", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json index 9c60c02542..14c7c8cd16 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "l9VHRBqMe9jvI5x6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json index a35c8b06f3..3393aa3998 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "djQpscbgnpi9yeDU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json index 3b8b23e8d2..510ef8199f 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "rDOS8SneslZCJyiY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json index 6aaaa87311..81be94abca 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "EXITbaYE2JGd9m6w", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json index b05ed89beb..5240be0bad 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "PKKBmF1QUn3byAbe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json index d993878b35..d8852e7c62 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "912jZphbXGIftHOj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json index 0f01fc1e0e..9e87cd98c4 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "3Gwsgkj54YfChaTX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json index 50750bf2cb..da863b088e 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "fpSoENagRf6Xkgtr", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json index 3e84f6da3f..cadcf8122c 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "9HTUZ0mmSCp2asTR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json index 569f2e4a73..270d303450 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "aFHpETdqnjrmKoh2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json index 174db0000f..3eba08c02a 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "tRWzBsYXsnpNVsQ4", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json index 5355c6c52f..855ce546c9 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN4 Series", "renamed_from": "Elegoo RAPID PETG @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "fvbwrYR63t9NnL8m", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json index 024aa42f17..5ec149fee7 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN4 Series", "renamed_from": "Elegoo RAPID PLA+ @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "Eu5Ao6aTdlnV5o7e", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json index bcf333c319..0c3389a1d2 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN4 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN4 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "0FWDHJF7V9rGXugP", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json index e5a75475c3..bf3942c6c9 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "cO87yMETWbUTIweN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json index 61c21f7d5f..89b17d0d8c 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "fkE2LCMu63t1NQtI", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json index 8f90166c6b..633fee4d01 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "uGF6puqnX1jW2pmn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json index 0d280b37cb..085eba8e80 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "S4ZpKZDyr5g5HMPi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json index d49474bcfe..345eb9b131 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "vdtyGUjloveBjsGV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json index c9ba6949ab..4c6df1a2ac 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "Nq1YaFeJ6Osr7OZ9", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json index 435e05d0ab..a76087fb41 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "6mfjc7t9ntuG1ZKW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json index 9ab372abee..ebc4a86a33 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "mHbvYB78eds96SH8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json index 9b11bc2cae..68ad38e31a 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "pgsOuYMxtcm3Fkar", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json index 9dd74672fc..2d3118d9f9 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "BI2euv7xwM9F2hKC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json index b91444664e..41aaa430e8 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @Elegoo Giga", "renamed_from": "Elegoo RAPID PETG @Elegoo Giga;Elegoo Rapid PETG @EOS Giga;Elegoo RAPID PETG @EOS Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "4ut2mjKopnW6tfxj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json index da6b0baf35..e42850d3e8 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @Elegoo Giga", "renamed_from": "Elegoo RAPID PLA+ @Elegoo Giga;Elegoo Rapid PLA+ @EOS Giga;Elegoo RAPID PLA+ @EOS Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "9I2DPoLgiCzn1S3i", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json index f634875fd5..01ccd899d4 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @Elegoo Giga", "renamed_from": "Elegoo RAPID TPU 95A @Elegoo Giga;Elegoo Rapid TPU 95A @EOS Giga;Elegoo RAPID TPU 95A @EOS Giga", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "i0PeAUTlls9DGtRK", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json index 2ebff4843e..7931a6604e 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @base", "from": "system", "setting_id": "fRiriEvlcxDDO5tc", + "filament_id": "OFo4VB3w", "instantiation": "true", "nozzle_temperature": [ "260" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json index 46b8157cf4..5fa54d9eb4 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json @@ -4,6 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "TPgpyakWZ7NjVnj5", + "filament_id": "OFk388hR", "instantiation": "true", "fan_min_speed": [ "10" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json index da160366dd..479ae9f275 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json @@ -4,6 +4,7 @@ "inherits": "Generic PC @base", "from": "system", "setting_id": "KMhdBJbiUeXxKgPS", + "filament_id": "OFypQeKR", "instantiation": "true", "filament_type": [ "PC-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json index 4e9aa92be9..b7542f46f7 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic PET @base", "from": "system", "setting_id": "Q6wiKjigmzkcMxFz", + "filament_id": "OF0TODnN", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json index c2ba7dfa97..fc750fdcc6 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json @@ -4,6 +4,7 @@ "name": "Generic PETG PRO @Elegoo", "renamed_from": "Elegoo Generic PETG PRO", "from": "system", + "filament_id": "OFhKNHC8", "instantiation": "true", "inherits": "Generic PETG @base", "cool_plate_temp": [ diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json index db84f78382..aee418bd18 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json @@ -3,6 +3,7 @@ "setting_id": "dH2Yf92iqsOj5XYo", "name": "Generic PLA Matte @Elegoo", "from": "system", + "filament_id": "OFsLkLw6", "instantiation": "true", "inherits": "Generic PLA @base", "cool_plate_temp": [ diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index f9d84b029c..71b62c1814 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -601,15 +601,44 @@ "DeltaMaker/DeltaMaker Generic PETG", "DeltaMaker/DeltaMaker Generic PLA", "Dremel/Dremel Generic PLA", + "Elegoo/Elegoo ASA-CF @base", "Elegoo/Elegoo PAHT @base", "Elegoo/Elegoo PC @base", + "Elegoo/Elegoo PC-FR @base", + "Elegoo/Elegoo PET-CF @base", "Elegoo/Elegoo PETG @base", + "Elegoo/Elegoo PETG HF @base", + "Elegoo/Elegoo PETG PRO @base", + "Elegoo/Elegoo PETG Translucent @base", + "Elegoo/Elegoo PETG-CF @base", + "Elegoo/Elegoo PETG-GF @base", "Elegoo/Elegoo PLA @base", + "Elegoo/Elegoo PLA Basic @base", + "Elegoo/Elegoo PLA Galaxy @base", + "Elegoo/Elegoo PLA Glow @base", + "Elegoo/Elegoo PLA Marble @base", + "Elegoo/Elegoo PLA Matte @base", + "Elegoo/Elegoo PLA PRO @base", + "Elegoo/Elegoo PLA Silk @base", + "Elegoo/Elegoo PLA Sparkle @base", + "Elegoo/Elegoo PLA Translucent2 @base", + "Elegoo/Elegoo PLA Wood @base", + "Elegoo/Elegoo PLA+ @base", + "Elegoo/Elegoo PLA-CF @base", + "Elegoo/Elegoo Rapid PETG @base", + "Elegoo/Elegoo Rapid PLA+ @base", + "Elegoo/Elegoo Rapid TPU 95A @base", + "Elegoo/Generic ABS-CF @Elegoo Centauri", "Elegoo/Generic PA @base", + "Elegoo/Generic PA6-CF @Elegoo", "Elegoo/Generic PC @base", + "Elegoo/Generic PC-CF @Elegoo", "Elegoo/Generic PET @base", + "Elegoo/Generic PET-CF @Elegoo Centauri", "Elegoo/Generic PETG @base", + "Elegoo/Generic PETG PRO @Elegoo", "Elegoo/Generic PLA @base", + "Elegoo/Generic PLA Matte @Elegoo", "FLSun/FLSun Generic PA", "FLSun/FLSun Generic PA-CF", "FLSun/FLSun Generic PC", @@ -2698,8 +2727,7 @@ "Elegoo/Elegoo ABS" ], "EASAB00": [ - "Elegoo/Elegoo ASA", - "Elegoo/Elegoo ASA-CF" + "Elegoo/Elegoo ASA" ], "EFL33": [ "Eryone/Eryone PP-CF" @@ -2748,34 +2776,13 @@ "Elegoo/Elegoo PAHT-CF" ], "EPCB00": [ - "Elegoo/Elegoo PC", - "Elegoo/Elegoo PC-FR" + "Elegoo/Elegoo PC" ], "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" + "Elegoo/Elegoo 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+" + "Elegoo/Elegoo PLA" ], "ESN02": [ "OrcaFilamentLibrary/eSUN ePLA-LW" @@ -2784,7 +2791,6 @@ "OrcaFilamentLibrary/eSUN PETG" ], "ETPUB00": [ - "Elegoo/Elegoo Rapid TPU 95A", "Elegoo/Elegoo TPU 95A" ], "FDPLAST01": [ @@ -3023,8 +3029,7 @@ "OrcaFilamentLibrary/FILL3D PETG CF" ], "GABSB00": [ - "Elegoo/Generic ABS", - "Elegoo/Generic ABS-CF" + "Elegoo/Generic ABS" ], "GASAB00": [ "Elegoo/Generic ASA", @@ -4492,25 +4497,20 @@ "Prusa/Prusa Generic TPU HF" ], "GPAB00": [ - "Elegoo/Generic PA", - "Elegoo/Generic PA6-CF" + "Elegoo/Generic PA" ], "GPCB00": [ - "Elegoo/Generic PC", - "Elegoo/Generic PC-CF" + "Elegoo/Generic PC" ], "GPETB00": [ - "Elegoo/Generic PET", - "Elegoo/Generic PET-CF" + "Elegoo/Generic PET" ], "GPETGB00": [ "Elegoo/Generic PETG", - "Elegoo/Generic PETG PRO", "Elegoo/Generic PETG-CF" ], "GPLAB00": [ - "Elegoo/Generic PLA", - "Elegoo/Generic PLA Matte" + "Elegoo/Generic PLA" ], "Generic ABS @E3NG v1.2S": [ "RH3D/Generic ABS" @@ -4681,12 +4681,18 @@ "OETPUB00": [ "OrcaFilamentLibrary/Elegoo TPU 95A" ], + "OF09vOcG": [ + "Elegoo/Elegoo PLA Galaxy" + ], "OF0M6QAQ": [ "OrcaFilamentLibrary/Elegoo PLA Galaxy" ], "OF0SyJhk": [ "Flashforge/Flashforge PA6-CF" ], + "OF0TODnN": [ + "Elegoo/Generic PET-CF" + ], "OF0TjJ0G": [ "Qidi/Qidi ASA-Aero" ], @@ -4720,6 +4726,9 @@ "OF3XeEuV": [ "Qidi/QIDI PET-GF" ], + "OF3arl18": [ + "Elegoo/Elegoo Rapid PETG" + ], "OF41QVDH": [ "Flashforge/Flashforge Generic PLA-Silk" ], @@ -4792,6 +4801,9 @@ "OFAGrVjP": [ "Flashforge/Flashforge PLA Silk" ], + "OFAHagT9": [ + "Elegoo/Elegoo Rapid PLA+" + ], "OFAUDGEQ": [ "Qidi/QIDI PLA Rapido Matte" ], @@ -4801,12 +4813,18 @@ "OFAdZFD1": [ "Flashforge/FusRock Generic PET-GF" ], + "OFAiqi5v": [ + "Elegoo/Elegoo ASA-CF" + ], "OFAnyzjN": [ "Qidi/HATCHBOX PETG" ], "OFAtydxE": [ "Flashforge/FusRock S-Multi" ], + "OFBvxnjM": [ + "Elegoo/Elegoo PETG-GF" + ], "OFC2FSsV": [ "Qidi/Overture PLA" ], @@ -4822,6 +4840,9 @@ "OFDCk0cz": [ "OrcaFilamentLibrary/Generic PETG-CF" ], + "OFDMWB6t": [ + "Elegoo/Elegoo PLA+" + ], "OFDNiRTx": [ "OrcaFilamentLibrary/Elegoo PLA+" ], @@ -4843,6 +4864,9 @@ "OFHBTqyD": [ "Flashforge/Flashforge PLA Basic" ], + "OFHtQDC9": [ + "Elegoo/Elegoo PLA Basic" + ], "OFICPchn": [ "OrcaFilamentLibrary/Elegoo PLA Basic" ], @@ -4873,6 +4897,9 @@ "OFKjlAbC": [ "Qidi/QIDI UltraPA-CF25" ], + "OFL4KniM": [ + "Elegoo/Elegoo Rapid TPU 95A" + ], "OFL7vEML": [ "Flashforge/FlashForge PC" ], @@ -4912,6 +4939,9 @@ "OFOW9K96": [ "Qidi/Qidi TPU 95A-HF" ], + "OFOkTA0C": [ + "Elegoo/Elegoo PETG Translucent" + ], "OFOysPuE": [ "Qidi/QIDI TPU-GF" ], @@ -4951,6 +4981,9 @@ "OFRgDMDJ": [ "Flashforge/Flashforge PETG Transparent" ], + "OFSCm6pJ": [ + "Elegoo/Elegoo PET-CF" + ], "OFSSuKRr": [ "Qidi/QIDI PETG Basic" ], @@ -5041,15 +5074,24 @@ "OFa6L3Of": [ "Qidi/Qidi PC-ABS-FR" ], + "OFaKIoH2": [ + "Elegoo/Elegoo PLA Sparkle" + ], "OFbS9rjH": [ "Qidi/QIDI PETG Rapido" ], + "OFbYP6Wb": [ + "Elegoo/Elegoo PLA Marble" + ], "OFbgt3u3": [ "OrcaFilamentLibrary/Elas PLA Basic" ], "OFceJcLf": [ "Qidi/PolyLite PLA" ], + "OFcqs5g7": [ + "Elegoo/Elegoo PLA Translucent2" + ], "OFcy60o4": [ "Flashforge/Flashforge ASA Basic" ], @@ -5086,6 +5128,12 @@ "OFgJX0Fc": [ "Flashforge/FlashForge PPS" ], + "OFh5GUhZ": [ + "Elegoo/Elegoo PLA Wood" + ], + "OFhKNHC8": [ + "Elegoo/Generic PETG PRO" + ], "OFhzHd2Y": [ "Flashforge/Flashforge HIPS" ], @@ -5098,6 +5146,9 @@ "OFidJLn8": [ "Qidi/PolyLite ABS" ], + "OFiyGNbI": [ + "Elegoo/Elegoo PETG-CF" + ], "OFjepy6j": [ "Flashforge/FusRock Generic S-PAHT" ], @@ -5107,9 +5158,18 @@ "OFjqPjjl": [ "Flashforge/Generic PET" ], + "OFk388hR": [ + "Elegoo/Generic PA6-CF" + ], "OFkaDtKx": [ "Flashforge/Flashforge PA66-CF" ], + "OFkfK62J": [ + "Elegoo/Elegoo PLA Silk" + ], + "OFklg4aM": [ + "Elegoo/Elegoo PLA PRO" + ], "OFlNKZLP": [ "Flashforge/Flashforge PLA Metal" ], @@ -5122,6 +5182,9 @@ "OFmKNi3f": [ "Qidi/QIDI PLA Rapido" ], + "OFmOWC74": [ + "Elegoo/Elegoo PETG PRO" + ], "OFmduKVr": [ "Flashforge/FlashForge PPS-CF" ], @@ -5137,6 +5200,9 @@ "OFnsWQTp": [ "Qidi/QIDI WOOD Rapido" ], + "OFo4VB3w": [ + "Elegoo/Generic ABS-CF" + ], "OFo9EwvK": [ "Flashforge/Generic PETG-CF10" ], @@ -5179,6 +5245,9 @@ "OFsKqcQW": [ "OrcaFilamentLibrary/Elegoo PLA PRO" ], + "OFsLkLw6": [ + "Elegoo/Generic PLA Matte" + ], "OFsNZcid": [ "OrcaFilamentLibrary/PolyLite Dual PLA" ], @@ -5194,9 +5263,15 @@ "OFtJMczs": [ "Flashforge/Flashforge TPU-64D" ], + "OFuPC4S8": [ + "Elegoo/Elegoo PLA-CF" + ], "OFuTFxVP": [ "Qidi/Overture ABS" ], + "OFuXkYly": [ + "Elegoo/Elegoo PLA Glow" + ], "OFuidAEg": [ "Qidi/Bambu ABS" ], @@ -5230,12 +5305,24 @@ "OFwf0oWp": [ "Flashforge/Flashforge PLA Luminous" ], + "OFwyqcGn": [ + "Elegoo/Elegoo PLA Matte" + ], + "OFxjFYxE": [ + "Elegoo/Elegoo PETG HF" + ], "OFyoW5W2": [ "Flashforge/Flashforge PLA Color Change" ], + "OFypQeKR": [ + "Elegoo/Generic PC-CF" + ], "OFyxAbO4": [ "Flashforge/Flashforge TPU-95A" ], + "OFzFbFcl": [ + "Elegoo/Elegoo PC-FR" + ], "OFzrWlH5": [ "OrcaFilamentLibrary/Elegoo PETG HF" ], @@ -7154,6 +7241,12 @@ "DeltaMaker/DeltaMaker Generic PLA", "DeltaMaker/DeltaMaker Generic TPU", "Dremel/Dremel Generic PLA", + "Elegoo/Generic ABS-CF @Elegoo Centauri", + "Elegoo/Generic PA6-CF @Elegoo", + "Elegoo/Generic PC-CF @Elegoo", + "Elegoo/Generic PET-CF @Elegoo Centauri", + "Elegoo/Generic PETG PRO @Elegoo", + "Elegoo/Generic PLA Matte @Elegoo", "Eryone/Eryone ABS", "Eryone/Eryone ABS-CF", "Eryone/Eryone ASA", From 095fd9fba40617300ed99d54d4afda380bcd88a9 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:09:05 +0800 Subject: [PATCH 007/208] Prusa: move filament_ids off shared templates onto family roots Phase 2 of the filament_id cleanup (31 collision groups, all one mechanism: material-class ids on shared fdm_filament_* templates collapsing HF/-CF/ Prusament lines onto one id, plus 3 overclaims). 18 new @base family roots (owner generic keeps the legacy id, 12 impostor families get deterministic mints), 72 config-neutral inherits repoints, 6 template filament_id keys removed (only where every id-less inheritor is covered by a new root; fdm_filament_asa/pc keep theirs for the frozen Prusament @XL riders), 3 compatible_printers trims on MINIIS printers covered by dedicated @MINIIS variants. Frozen name-shaped and _NN per-variant ids stay byte-identical. Verified: config-equivalence gate zero unexpected diffs; extra check exit 0; --check exit 0; validator -l 2 exit 0; extended -f -v Prusa exit 0 (was 31 groups / 1035 printer-level errors on the pre-apply copy). --- resources/profiles/Prusa.json | 72 +++++++++++++++++ .../Prusa Generic ABS @MINIIS 0.25.json | 2 +- .../Prusa Generic ABS @MINIIS 0.6.json | 2 +- .../Prusa Generic ABS @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic ABS @MINIIS.json | 2 +- .../filament/Prusa Generic ABS @MK4.json | 2 +- .../filament/Prusa Generic ABS @XL 5T.json | 2 +- .../Prusa/filament/Prusa Generic ABS @XL.json | 2 +- .../filament/Prusa Generic ABS @base.json | 8 ++ .../Prusa Generic ABS HF @MINIIS 0.6.json | 2 +- .../Prusa Generic ABS HF @MINIIS 0.8.json | 2 +- .../Prusa Generic ABS HF @MINIIS.json | 2 +- .../filament/Prusa Generic ABS HF @base.json | 8 ++ .../Prusa/filament/Prusa Generic ABS.json | 2 +- .../Prusa Generic ASA HF @MINIIS 0.6.json | 2 +- .../Prusa Generic ASA HF @MINIIS 0.8.json | 2 +- .../Prusa Generic ASA HF @MINIIS.json | 2 +- .../filament/Prusa Generic ASA HF @base.json | 8 ++ .../Prusa Generic PA @MINIIS 0.25.json | 2 +- .../Prusa Generic PA @MINIIS 0.6.json | 2 +- .../Prusa Generic PA @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PA @MINIIS.json | 2 +- .../filament/Prusa Generic PA @base.json | 8 ++ .../Prusa Generic PA-CF @MINIIS 0.25.json | 2 +- .../Prusa Generic PA-CF @MINIIS 0.6.json | 2 +- .../Prusa Generic PA-CF @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PA-CF @MINIIS.json | 2 +- .../filament/Prusa Generic PA-CF @base.json | 8 ++ .../Prusa/filament/Prusa Generic PA-CF.json | 8 +- .../Prusa/filament/Prusa Generic PA.json | 8 +- .../Prusa Generic PC HF @MINIIS 0.6.json | 2 +- .../Prusa Generic PC HF @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PC HF @MINIIS.json | 2 +- .../filament/Prusa Generic PC HF @base.json | 8 ++ .../Prusa Generic PETG @MINIIS 0.25.json | 2 +- .../Prusa Generic PETG @MINIIS 0.6.json | 2 +- .../Prusa Generic PETG @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PETG @MINIIS.json | 2 +- .../filament/Prusa Generic PETG @MK4.json | 2 +- .../filament/Prusa Generic PETG @XL 5T.json | 2 +- .../filament/Prusa Generic PETG @XL.json | 2 +- .../filament/Prusa Generic PETG @base.json | 8 ++ .../Prusa Generic PETG HF @MINIIS 0.6.json | 2 +- .../Prusa Generic PETG HF @MINIIS 0.8.json | 2 +- .../Prusa Generic PETG HF @MINIIS.json | 2 +- .../filament/Prusa Generic PETG HF @base.json | 8 ++ .../Prusa/filament/Prusa Generic PETG.json | 2 +- .../Prusa Generic PLA @MINIIS 0.25.json | 2 +- .../Prusa Generic PLA @MINIIS 0.6.json | 2 +- .../Prusa Generic PLA @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PLA @MINIIS.json | 2 +- .../filament/Prusa Generic PLA @MK4.json | 2 +- .../filament/Prusa Generic PLA @XL 5T.json | 2 +- .../Prusa/filament/Prusa Generic PLA @XL.json | 2 +- .../filament/Prusa Generic PLA @base.json | 8 ++ .../Prusa Generic PLA HF @MINIIS 0.6.json | 2 +- .../Prusa Generic PLA HF @MINIIS 0.8.json | 2 +- .../Prusa Generic PLA HF @MINIIS.json | 2 +- .../filament/Prusa Generic PLA HF @base.json | 8 ++ .../Prusa Generic PLA-CF @MINIIS 0.25.json | 2 +- .../Prusa Generic PLA-CF @MINIIS 0.6.json | 2 +- .../Prusa Generic PLA-CF @MINIIS 0.8.json | 2 +- .../Prusa Generic PLA-CF @MINIIS.json | 2 +- .../filament/Prusa Generic PLA-CF @base.json | 8 ++ .../Prusa/filament/Prusa Generic PLA-CF.json | 8 +- .../Prusa/filament/Prusa Generic PLA.json | 2 +- .../Prusa Generic PVA @MINIIS 0.25.json | 2 +- .../Prusa Generic PVA @MINIIS 0.6.json | 2 +- .../Prusa Generic PVA @MINIIS 0.8.json | 2 +- .../filament/Prusa Generic PVA @MINIIS.json | 2 +- .../filament/Prusa Generic PVA @base.json | 8 ++ .../Prusa Generic PVA HF @MINIIS 0.6.json | 2 +- .../Prusa Generic PVA HF @MINIIS 0.8.json | 2 +- .../Prusa Generic PVA HF @MINIIS.json | 2 +- .../filament/Prusa Generic PVA HF @base.json | 8 ++ .../Prusa/filament/Prusa Generic PVA.json | 2 +- .../filament/Prusa Generic TPU @MINIIS.json | 2 +- .../filament/Prusa Generic TPU @MK4.json | 2 +- .../filament/Prusa Generic TPU @base.json | 8 ++ .../Prusa Generic TPU HF @MINIIS.json | 2 +- .../filament/Prusa Generic TPU HF @base.json | 8 ++ .../Prusa/filament/Prusa Generic TPU.json | 2 +- .../Prusa/filament/Prusament PETG @XL 5T.json | 2 +- .../Prusa/filament/Prusament PETG @XL.json | 2 +- .../Prusa/filament/Prusament PETG @base.json | 8 ++ .../Prusa/filament/Prusament PLA @XL 5T.json | 2 +- .../Prusa/filament/Prusament PLA @XL.json | 2 +- .../Prusa/filament/Prusament PLA @base.json | 8 ++ .../Prusa/filament/Prusament rPLA @XL 5T.json | 2 +- .../Prusa/filament/Prusament rPLA @XL.json | 2 +- .../Prusa/filament/Prusament rPLA @base.json | 8 ++ .../Prusa/filament/fdm_filament_abs.json | 1 - .../Prusa/filament/fdm_filament_pa.json | 1 - .../Prusa/filament/fdm_filament_pet.json | 1 - .../Prusa/filament/fdm_filament_pla.json | 1 - .../Prusa/filament/fdm_filament_pva.json | 1 - .../Prusa/filament/fdm_filament_tpu.json | 1 - scripts/filament_id_snapshot.json | 81 +++++++++++-------- 98 files changed, 340 insertions(+), 125 deletions(-) create mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PA @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PETG @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PLA @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PVA @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic TPU @base.json create mode 100644 resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json create mode 100644 resources/profiles/Prusa/filament/Prusament PETG @base.json create mode 100644 resources/profiles/Prusa/filament/Prusament PLA @base.json create mode 100644 resources/profiles/Prusa/filament/Prusament rPLA @base.json diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 935de537be..4fa412325a 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1448,6 +1448,10 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, + { + "name": "Prusa Generic ABS @base", + "sub_path": "filament/Prusa Generic ABS @base.json" + }, { "name": "Prusa Generic ABS", "sub_path": "filament/Prusa Generic ABS.json" @@ -1504,6 +1508,10 @@ "name": "Prusa Generic ABS @XL 5T", "sub_path": "filament/Prusa Generic ABS @XL 5T.json" }, + { + "name": "Prusa Generic ABS HF @base", + "sub_path": "filament/Prusa Generic ABS HF @base.json" + }, { "name": "Prusa Generic ABS HF @MINIIS", "sub_path": "filament/Prusa Generic ABS HF @MINIIS.json" @@ -1576,6 +1584,10 @@ "name": "Prusa Generic ASA @MK4S", "sub_path": "filament/Prusa Generic ASA @MK4S.json" }, + { + "name": "Prusa Generic ASA HF @base", + "sub_path": "filament/Prusa Generic ASA HF @base.json" + }, { "name": "Prusa Generic ASA HF @MINIIS", "sub_path": "filament/Prusa Generic ASA HF @MINIIS.json" @@ -1624,6 +1636,10 @@ "name": "Prusa Generic TPU @CORE One", "sub_path": "filament/Prusa Generic TPU @CORE One.json" }, + { + "name": "Prusa Generic PA @base", + "sub_path": "filament/Prusa Generic PA @base.json" + }, { "name": "Prusa Generic PA", "sub_path": "filament/Prusa Generic PA.json" @@ -1660,6 +1676,10 @@ "name": "Prusa Generic PA @MK3.5 0.8", "sub_path": "filament/Prusa Generic PA @MK3.5 0.8.json" }, + { + "name": "Prusa Generic PA-CF @base", + "sub_path": "filament/Prusa Generic PA-CF @base.json" + }, { "name": "Prusa Generic PA-CF", "sub_path": "filament/Prusa Generic PA-CF.json" @@ -1744,6 +1764,10 @@ "name": "Prusa Generic PC @MK3.5 0.8", "sub_path": "filament/Prusa Generic PC @MK3.5 0.8.json" }, + { + "name": "Prusa Generic PC HF @base", + "sub_path": "filament/Prusa Generic PC HF @base.json" + }, { "name": "Prusa Generic PC HF @MINIIS", "sub_path": "filament/Prusa Generic PC HF @MINIIS.json" @@ -1792,6 +1816,10 @@ "name": "Prusament PC-CF @XL 5T", "sub_path": "filament/Prusament PC-CF @XL 5T.json" }, + { + "name": "Prusa Generic PETG @base", + "sub_path": "filament/Prusa Generic PETG @base.json" + }, { "name": "Prusa Generic PETG", "sub_path": "filament/Prusa Generic PETG.json" @@ -1848,6 +1876,10 @@ "name": "Prusa Generic PETG @XL 5T", "sub_path": "filament/Prusa Generic PETG @XL 5T.json" }, + { + "name": "Prusa Generic PETG HF @base", + "sub_path": "filament/Prusa Generic PETG HF @base.json" + }, { "name": "Prusa Generic PETG HF @MINIIS", "sub_path": "filament/Prusa Generic PETG HF @MINIIS.json" @@ -1876,6 +1908,10 @@ "name": "Prusament PETG @CORE One", "sub_path": "filament/Prusament PETG @CORE One.json" }, + { + "name": "Prusament PETG @base", + "sub_path": "filament/Prusament PETG @base.json" + }, { "name": "Prusament PETG @XL", "sub_path": "filament/Prusament PETG @XL.json" @@ -1884,6 +1920,10 @@ "name": "Prusament PETG @XL 5T", "sub_path": "filament/Prusament PETG @XL 5T.json" }, + { + "name": "Prusa Generic PLA @base", + "sub_path": "filament/Prusa Generic PLA @base.json" + }, { "name": "Prusa Generic PLA", "sub_path": "filament/Prusa Generic PLA.json" @@ -1940,6 +1980,10 @@ "name": "Prusa Generic PLA @XL 5T", "sub_path": "filament/Prusa Generic PLA @XL 5T.json" }, + { + "name": "Prusa Generic PLA HF @base", + "sub_path": "filament/Prusa Generic PLA HF @base.json" + }, { "name": "Prusa Generic PLA HF @MINIIS", "sub_path": "filament/Prusa Generic PLA HF @MINIIS.json" @@ -1968,6 +2012,10 @@ "name": "Prusa Generic PLA Silk @CORE One", "sub_path": "filament/Prusa Generic PLA Silk @CORE One.json" }, + { + "name": "Prusa Generic PLA-CF @base", + "sub_path": "filament/Prusa Generic PLA-CF @base.json" + }, { "name": "Prusa Generic PLA-CF", "sub_path": "filament/Prusa Generic PLA-CF.json" @@ -2008,6 +2056,10 @@ "name": "Prusament PLA @CORE One", "sub_path": "filament/Prusament PLA @CORE One.json" }, + { + "name": "Prusament PLA @base", + "sub_path": "filament/Prusament PLA @base.json" + }, { "name": "Prusament PLA @XL", "sub_path": "filament/Prusament PLA @XL.json" @@ -2020,6 +2072,10 @@ "name": "Prusament rPLA @CORE One", "sub_path": "filament/Prusament rPLA @CORE One.json" }, + { + "name": "Prusament rPLA @base", + "sub_path": "filament/Prusament rPLA @base.json" + }, { "name": "Prusament rPLA @XL", "sub_path": "filament/Prusament rPLA @XL.json" @@ -2028,6 +2084,10 @@ "name": "Prusament rPLA @XL 5T", "sub_path": "filament/Prusament rPLA @XL 5T.json" }, + { + "name": "Prusa Generic PVA @base", + "sub_path": "filament/Prusa Generic PVA @base.json" + }, { "name": "Prusa Generic PVA", "sub_path": "filament/Prusa Generic PVA.json" @@ -2064,6 +2124,10 @@ "name": "Prusa Generic PVA @MK3.5 0.8", "sub_path": "filament/Prusa Generic PVA @MK3.5 0.8.json" }, + { + "name": "Prusa Generic PVA HF @base", + "sub_path": "filament/Prusa Generic PVA HF @base.json" + }, { "name": "Prusa Generic PVA HF @MINIIS", "sub_path": "filament/Prusa Generic PVA HF @MINIIS.json" @@ -2100,6 +2164,10 @@ "name": "Prusament PVB @XL 5T", "sub_path": "filament/Prusament PVB @XL 5T.json" }, + { + "name": "Prusa Generic TPU @base", + "sub_path": "filament/Prusa Generic TPU @base.json" + }, { "name": "Prusa Generic TPU", "sub_path": "filament/Prusa Generic TPU.json" @@ -2120,6 +2188,10 @@ "name": "Prusa Generic TPU @MK4S", "sub_path": "filament/Prusa Generic TPU @MK4S.json" }, + { + "name": "Prusa Generic TPU HF @base", + "sub_path": "filament/Prusa Generic TPU HF @base.json" + }, { "name": "Prusa Generic TPU HF @MINIIS", "sub_path": "filament/Prusa Generic TPU HF @MINIIS.json" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json index 9cb0f8b001..ca834afe43 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @MINIIS 0.25", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "NdGEi7BdP59bqz53", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json index e1d4f272ae..b4c5c636bf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @MINIIS 0.6", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "f8RXAaEZ13jSgN9u", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json index a867f7d6a6..7b847c26b0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @MINIIS 0.8", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "0QdQCdtcKqM9HhpD", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json index c52dd45677..35bf33de08 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @MINIIS", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "LmdcShjNmbZ8E5fo", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json index 3cbcf73b85..6b4f8d9fdf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @MK4", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "Yeqfgyq1l0b1tCaT", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json index 3aef5fc5e9..38559e4b26 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @XL 5T", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "BVYagI9PtDtO1Jhu", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json index 2abed48083..e40a10cbeb 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS @XL", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "fN9NUlg8l5DWy4LN", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json new file mode 100644 index 0000000000..ffa4525a5a --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic ABS @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "GFB99", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json index 287f5d03f9..f8959a77b2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS HF @MINIIS 0.6", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS HF @base", "from": "system", "setting_id": "86pFdkE3ly08xst7", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json index 358d9a3c46..63c1207fd9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS HF @MINIIS 0.8", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS HF @base", "from": "system", "setting_id": "yn9imamHaXlFDsPr", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json index 1b72e67a4d..358aa57b6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS HF @MINIIS", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS HF @base", "from": "system", "setting_id": "KFoCfgUW9k9Yglwj", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json new file mode 100644 index 0000000000..228807da84 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic ABS HF @base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "OFCgpxn2", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS.json index 0f77dd0216..9fef1f871c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ABS", - "inherits": "fdm_filament_abs", + "inherits": "Prusa Generic ABS @base", "from": "system", "setting_id": "pqQMpMgbSN3XvTdK", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json index 2f8cb00374..1dda0e52e2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ASA HF @MINIIS 0.6", - "inherits": "fdm_filament_asa", + "inherits": "Prusa Generic ASA HF @base", "from": "system", "setting_id": "uf2mhiPodkiOu8Ui", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json index 2a238156f7..b3d9bad889 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ASA HF @MINIIS 0.8", - "inherits": "fdm_filament_asa", + "inherits": "Prusa Generic ASA HF @base", "from": "system", "setting_id": "GMfOVAhKgKoiGZH5", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json index 9f97b95631..68ade52513 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic ASA HF @MINIIS", - "inherits": "fdm_filament_asa", + "inherits": "Prusa Generic ASA HF @base", "from": "system", "setting_id": "o8mGAPApXYWIvPhm", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json new file mode 100644 index 0000000000..000196a2a1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic ASA HF @base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "OFkeeluv", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json index 7fdf301829..a74492d2aa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA @MINIIS 0.25", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA @base", "from": "system", "setting_id": "tGSqS5YX8FXkVAKa", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json index ada7470a27..a28f3eedf0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA @MINIIS 0.6", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA @base", "from": "system", "setting_id": "u3ZeKEiAwme06ioU", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json index f08a354372..cbf0faa16a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA @MINIIS 0.8", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA @base", "from": "system", "setting_id": "nE90oPuU8lRFVBCl", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json index 1f62ce1a85..c8ff9bf5cb 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA @MINIIS", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA @base", "from": "system", "setting_id": "hda5VGcBTJOFu6B0", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PA @base.json new file mode 100644 index 0000000000..42e8d47bbd --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PA @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "GFN99", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json index c262a5fe97..cc78a91ff9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA-CF @MINIIS 0.25", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA-CF @base", "from": "system", "setting_id": "R9H0mIGTEh4rxRag", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json index 61047938ef..9cca375d20 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA-CF @MINIIS 0.6", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA-CF @base", "from": "system", "setting_id": "qy8b2cQmrhmxfUfm", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json index e38f123038..930599ddf8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA-CF @MINIIS 0.8", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA-CF @base", "from": "system", "setting_id": "PNdZVpjyekMxgAWx", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json index a41ec893e7..320eaaccd5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA-CF @MINIIS", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA-CF @base", "from": "system", "setting_id": "B2SFfVrYjPnN9rw3", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json new file mode 100644 index 0000000000..0b0059fa9a --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PA-CF @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OFXfgh61", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json index 5144b143d6..ac15c94417 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA-CF", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA-CF @base", "from": "system", "setting_id": "bptwthfCtglFSoMw", "instantiation": "true", @@ -29,10 +29,6 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" + "Prusa MK4 0.8 nozzle" ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Prusa Generic PA.json index 9893d5a390..b50c329fab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PA", - "inherits": "fdm_filament_pa", + "inherits": "Prusa Generic PA @base", "from": "system", "setting_id": "lWO6oNoV0wjzRVja", "instantiation": "true", @@ -26,10 +26,6 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" + "Prusa MK4 0.8 nozzle" ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json index bc82e730f2..e3d400892f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PC HF @MINIIS 0.6", - "inherits": "fdm_filament_pc", + "inherits": "Prusa Generic PC HF @base", "from": "system", "setting_id": "oj7iq8Bsz8lYyoG8", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json index d864903081..5965ff9d5d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PC HF @MINIIS 0.8", - "inherits": "fdm_filament_pc", + "inherits": "Prusa Generic PC HF @base", "from": "system", "setting_id": "SK8h5tE5di3YWaJp", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json index 96720cc606..b198ed3af4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PC HF @MINIIS", - "inherits": "fdm_filament_pc", + "inherits": "Prusa Generic PC HF @base", "from": "system", "setting_id": "onMXXnQNjbSimzbW", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json new file mode 100644 index 0000000000..ece79b1919 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PC HF @base", + "inherits": "fdm_filament_pc", + "from": "system", + "filament_id": "OFQ9dI8j", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json index b804e798b1..1254f1aede 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @MINIIS 0.25", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "u4zA4rasW1vfwG1o", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json index 8d4d00ea99..7e849e01af 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @MINIIS 0.6", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "QJQIAwmRSZW3hNI4", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json index 81c4d41aaf..2a943198aa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @MINIIS 0.8", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "nXFZVAKBc3hkxbRt", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json index 8803f3e7fd..49d8e83444 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @MINIIS", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "nXB864FJ4Dbz5oXc", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json index b0e684dd68..f4d8216caa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @MK4", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "Xk2dCGMzSaT73Gq5", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json index 3a90f36035..4babb91e3f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @XL 5T", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "FbtB9og6yXm2ZktD", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json index 14cb0f610b..793b97e290 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG @XL", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "SQKcHBt6A4D8PwFZ", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json new file mode 100644 index 0000000000..7cc123d8fd --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "GFT02", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json index 03675e06e7..da8b0f68e5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG HF @MINIIS 0.6", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG HF @base", "from": "system", "setting_id": "tt7C6k90F51Q17NL", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json index 86b9431c5f..c8eb08ef87 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG HF @MINIIS 0.8", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG HF @base", "from": "system", "setting_id": "hivI3u5bpGKEJuPR", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json index 8df215da56..dcb87593dc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG HF @MINIIS", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG HF @base", "from": "system", "setting_id": "SHIhEzb8wJonmulf", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json new file mode 100644 index 0000000000..b9c02872b2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PETG HF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFphFSUJ", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG.json b/resources/profiles/Prusa/filament/Prusa Generic PETG.json index 6963412e1c..db17c39162 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PETG", - "inherits": "fdm_filament_pet", + "inherits": "Prusa Generic PETG @base", "from": "system", "setting_id": "b55Rd5kKGP1A3BM2", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json index 67a5bbca62..73ce7b1606 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @MINIIS 0.25", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "GOomDjqbF1CGAy8O", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json index 7bb32fd4d9..437eeeb6b8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @MINIIS 0.6", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "rKRRhdLk0Heg3slz", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json index 96016b318a..cd95805fb3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @MINIIS 0.8", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "XC2NBSQXjiKIXnTi", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json index 2de81c0947..5f3c8f9bb4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @MINIIS", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "GUG6Ug0cZt0gs2Z2", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json index 13a0df5f2b..22f8bb274c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @MK4", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "1aLBPgVpr7XZmmX6", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json index 9264a2b0c1..2d149b8b7b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @XL 5T", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "orBUSq1sDBeMGMON", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json index fd1ffa1425..3206f6f3c5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA @XL", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "tGG7egsphB0I1i6Z", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json new file mode 100644 index 0000000000..be5218517e --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "GFL99", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json index 7ae24d6fe7..6b9f364da7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA HF @MINIIS 0.6", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA HF @base", "from": "system", "setting_id": "A6tgkt5mCN7hFzoU", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json index 10353f147e..b4a25d21a1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA HF @MINIIS 0.8", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA HF @base", "from": "system", "setting_id": "3MSF1ZEw3D7bVhEI", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json index ea67606d37..243b69a393 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA HF @MINIIS", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA HF @base", "from": "system", "setting_id": "eVuV41lUXe9SEmeh", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json new file mode 100644 index 0000000000..4cff82d6a5 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PLA HF @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFicxmSa", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json index 8b41f21ce1..1e95879fdf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA-CF @MINIIS 0.25", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA-CF @base", "from": "system", "setting_id": "Sv0IcpOJBk95F94d", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json index 642ec54a07..3736da09d7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA-CF @MINIIS 0.6", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA-CF @base", "from": "system", "setting_id": "tKAu2YX7WADQuJqv", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json index 90be6a1703..83c781352d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA-CF @MINIIS 0.8", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA-CF @base", "from": "system", "setting_id": "dHVVnfZSJ6xEgzdQ", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json index 1be8101e9a..4cb69a99ec 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA-CF @MINIIS", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA-CF @base", "from": "system", "setting_id": "VESr5xWPvPIlhyKh", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json new file mode 100644 index 0000000000..f45f0e0bf0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PLA-CF @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFv8SRZh", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json index 8e24ebcd12..d156be1004 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA-CF", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA-CF @base", "from": "system", "setting_id": "NqmFeHNZtfNefmvd", "instantiation": "true", @@ -32,10 +32,6 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" + "Prusa MK4 0.8 nozzle" ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA.json b/resources/profiles/Prusa/filament/Prusa Generic PLA.json index ae5ca3e50c..a2f1521fec 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PLA", - "inherits": "fdm_filament_pla", + "inherits": "Prusa Generic PLA @base", "from": "system", "setting_id": "pKHhR3Hx6AUoyIO3", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json index 7391c7c004..4357a8eb1f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA @MINIIS 0.25", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA @base", "from": "system", "setting_id": "B0Dmo1DvtrwBwM7U", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json index fadbdc53b2..1a4d7c6aa5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA @MINIIS 0.6", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA @base", "from": "system", "setting_id": "yGTFSZeo1sUdCpeO", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json index 18e1965b76..7c3a77c52d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA @MINIIS 0.8", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA @base", "from": "system", "setting_id": "ISdXFzAcVUj3ZIfQ", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json index 9598a6f09b..f6eecea619 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA @MINIIS", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA @base", "from": "system", "setting_id": "rhZNRY8BNI1TskG2", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json new file mode 100644 index 0000000000..dc77145268 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PVA @base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "GFS99", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json index 3bc8a6b7aa..bd810e4933 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA HF @MINIIS 0.6", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA HF @base", "from": "system", "setting_id": "4C7OAcG8LVPSTJsh", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json index b26ca248ad..a2557cd576 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA HF @MINIIS 0.8", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA HF @base", "from": "system", "setting_id": "xj6xYUYJ0tAnfgao", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json index cd7b4f7b7d..467f0822bd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA HF @MINIIS", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA HF @base", "from": "system", "setting_id": "9MNzR7N4A1k64jne", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json new file mode 100644 index 0000000000..8d05e93111 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic PVA HF @base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "OFxLeRyT", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA.json b/resources/profiles/Prusa/filament/Prusa Generic PVA.json index 17476b1ce5..260dfb5d01 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic PVA", - "inherits": "fdm_filament_pva", + "inherits": "Prusa Generic PVA @base", "from": "system", "setting_id": "yLrgUDS7cr4AkOed", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json index 8acb55983c..6108984ad1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic TPU @MINIIS", - "inherits": "fdm_filament_tpu", + "inherits": "Prusa Generic TPU @base", "from": "system", "setting_id": "TUqkAb8i9HpFdiCy", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json index 01db48abbf..11753a6232 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic TPU @MK4", - "inherits": "fdm_filament_tpu", + "inherits": "Prusa Generic TPU @base", "from": "system", "setting_id": "9KjaEcwnQA8CsnVy", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json new file mode 100644 index 0000000000..a86c7a2b91 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic TPU @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "GFU99", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json index 271c36e183..954e880fa6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic TPU HF @MINIIS", - "inherits": "fdm_filament_tpu", + "inherits": "Prusa Generic TPU HF @base", "from": "system", "setting_id": "a9fmPCI24EJoJ5OH", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json new file mode 100644 index 0000000000..0a41e94893 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusa Generic TPU HF @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFbK5wve", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU.json b/resources/profiles/Prusa/filament/Prusa Generic TPU.json index 58324d477d..5f1b953a7c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusa Generic TPU", - "inherits": "fdm_filament_tpu", + "inherits": "Prusa Generic TPU @base", "from": "system", "setting_id": "l9s40Rloq4urv3Y0", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json index e127263ad7..e0db59fde9 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PETG @XL 5T", - "inherits": "fdm_filament_pet", + "inherits": "Prusament PETG @base", "from": "system", "setting_id": "USigpRWuzpdkT6ZW", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL.json b/resources/profiles/Prusa/filament/Prusament PETG @XL.json index b552f9ed09..f26140a0eb 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PETG @XL", - "inherits": "fdm_filament_pet", + "inherits": "Prusament PETG @base", "from": "system", "setting_id": "vPPD8EkKFy5j8pg5", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @base.json b/resources/profiles/Prusa/filament/Prusament PETG @base.json new file mode 100644 index 0000000000..eee47346ca --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusament PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFpHq9gJ", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json index d74ad3f865..efda9cf4e3 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PLA @XL 5T", - "inherits": "fdm_filament_pla", + "inherits": "Prusament PLA @base", "from": "system", "setting_id": "3xyT73BMaAvbb1Ej", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL.json b/resources/profiles/Prusa/filament/Prusament PLA @XL.json index 60825e3109..9d02a67491 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PLA @XL", - "inherits": "fdm_filament_pla", + "inherits": "Prusament PLA @base", "from": "system", "setting_id": "PlHq1KqHrreo5W8m", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @base.json b/resources/profiles/Prusa/filament/Prusament PLA @base.json new file mode 100644 index 0000000000..707640da25 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PLA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusament PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFkoT6jl", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json index cb1d9258c9..8bfc482af6 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament rPLA @XL 5T", - "inherits": "fdm_filament_pla", + "inherits": "Prusament rPLA @base", "from": "system", "setting_id": "yAiHzmW4pa8deage", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json index ab5867979b..9ed3d9af74 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament rPLA @XL", - "inherits": "fdm_filament_pla", + "inherits": "Prusament rPLA @base", "from": "system", "setting_id": "j2BSXHFa7D3Gze7C", "instantiation": "true", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @base.json b/resources/profiles/Prusa/filament/Prusament rPLA @base.json new file mode 100644 index 0000000000..bdacf0cc19 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament rPLA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Prusament rPLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFjFPhUC", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_abs.json b/resources/profiles/Prusa/filament/fdm_filament_abs.json index 50945a12e0..35c4d94e0e 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_abs.json +++ b/resources/profiles/Prusa/filament/fdm_filament_abs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_abs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFB99", "instantiation": "false", "cool_plate_temp": [ "105" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa.json b/resources/profiles/Prusa/filament/fdm_filament_pa.json index 050df1ed25..8e2337a0bd 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFN99", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pet.json b/resources/profiles/Prusa/filament/fdm_filament_pet.json index b7d8b3d957..9d20738d06 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pet.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFT02", "instantiation": "false", "cool_plate_temp": [ "60" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pla.json b/resources/profiles/Prusa/filament/fdm_filament_pla.json index a00cd395a1..573c92fede 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pla.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFL99", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pva.json b/resources/profiles/Prusa/filament/fdm_filament_pva.json index b6bf5b64a1..b25a8332cc 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pva.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pva.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pva", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFS99", "instantiation": "false", "cool_plate_temp": [ "35" diff --git a/resources/profiles/Prusa/filament/fdm_filament_tpu.json b/resources/profiles/Prusa/filament/fdm_filament_tpu.json index cca57e64fa..dff9bf8f73 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_tpu.json +++ b/resources/profiles/Prusa/filament/fdm_filament_tpu.json @@ -3,7 +3,6 @@ "name": "fdm_filament_tpu", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFU99", "instantiation": "false", "cool_plate_temp": [ "30" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 71b62c1814..6c96ddbad0 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1447,27 +1447,18 @@ "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", @@ -1489,14 +1480,17 @@ "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 ASA HF @base", "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 @base", "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 PA-CF @base", "Prusa/Prusa Generic PC @MK3.5", "Prusa/Prusa Generic PC @MK3.5 0.25", "Prusa/Prusa Generic PC @MK3.5 0.6", @@ -1504,6 +1498,7 @@ "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 PC HF @base", "Prusa/Prusa Generic PETG @CORE One", "Prusa/Prusa Generic PETG @CORE One 0.6", "Prusa/Prusa Generic PETG @CORE One 0.8", @@ -1522,9 +1517,11 @@ "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 @base", "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 PETG HF @base", "Prusa/Prusa Generic PLA @CORE One", "Prusa/Prusa Generic PLA @CORE One 0.6", "Prusa/Prusa Generic PLA @CORE One 0.8", @@ -1543,9 +1540,11 @@ "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 @base", "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 HF @base", "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", @@ -1556,21 +1555,12 @@ "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 PLA-CF @base", "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", @@ -1598,6 +1588,7 @@ "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 PETG @base", "Prusa/Prusament PLA @CORE One", "Prusa/Prusament PLA @CORE One 0.6", "Prusa/Prusament PLA @CORE One 0.8", @@ -1605,12 +1596,14 @@ "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 PLA @base", "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", + "Prusa/Prusament rPLA @base", "Qidi/Bambu PETG", "Qidi/Bambu PLA", "Qidi/HATCHBOX PETG @Qidi", @@ -3182,7 +3175,6 @@ "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", @@ -3244,7 +3236,6 @@ "Lulzbot/Lulzbot 2.85mm ABS", "OrcaArena/OrcaArena Generic ABS", "Prusa/Prusa Generic ABS", - "Prusa/Prusa Generic ABS HF", "Qidi/Qidi Generic ABS", "Ratrig/RatRig BigNozzle ABS", "Ratrig/RatRig Generic ABS", @@ -3314,7 +3305,6 @@ "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", @@ -3802,10 +3792,6 @@ "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/Qidi Generic PLA", "Ratrig/RatRig BigNozzle PLA", "Ratrig/RatRig BigNozzle TPU", @@ -3965,7 +3951,6 @@ "FLSun/FLSun Generic PA", "OrcaArena/OrcaArena Generic PA", "Prusa/Prusa Generic PA", - "Prusa/Prusa Generic PA-CF", "Qidi/Qidi Generic PA", "Ratrig/RatRig Generic PA", "SecKit/SecKit Generic PA", @@ -4273,7 +4258,6 @@ "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", @@ -4400,9 +4384,7 @@ ], "GFT02": [ "BBL/Bambu PPS-CF", - "Prusa/Prusa Generic PETG", - "Prusa/Prusa Generic PETG HF", - "Prusa/Prusament PETG" + "Prusa/Prusa Generic PETG" ], "GFT97": [ "BBL/Generic PPS", @@ -4475,7 +4457,6 @@ "OrcaArena/OrcaArena Generic TPU", "Prusa/Prusa Generic FLEX", "Prusa/Prusa Generic TPU", - "Prusa/Prusa Generic TPU HF", "Qidi/Qidi Generic TPU", "Ratrig/RatRig Generic TPU", "SecKit/SecKit Generic TPU", @@ -4834,6 +4815,9 @@ "OFCJaXZS": [ "Flashforge/Flashforge PPS" ], + "OFCgpxn2": [ + "Prusa/Prusa Generic ABS HF" + ], "OFD5e0sH": [ "OrcaFilamentLibrary/Elegoo Rapid PLA+" ], @@ -4957,6 +4941,9 @@ "OFPwi9X0": [ "Qidi/HATCHBOX ABS" ], + "OFQ9dI8j": [ + "Prusa/Prusa Generic PC HF" + ], "OFQCAYAt": [ "Flashforge/Flashforge PPA-CF" ], @@ -5035,6 +5022,9 @@ "OFXcfTEb": [ "Qidi/Tinmorry PETG-ECO" ], + "OFXfgh61": [ + "Prusa/Prusa Generic PA-CF" + ], "OFXkwkn6": [ "Qidi/QIDI PA-Ultra" ], @@ -5077,6 +5067,9 @@ "OFaKIoH2": [ "Elegoo/Elegoo PLA Sparkle" ], + "OFbK5wve": [ + "Prusa/Prusa Generic TPU HF" + ], "OFbS9rjH": [ "Qidi/QIDI PETG Rapido" ], @@ -5143,12 +5136,18 @@ "OFiJYDPC": [ "Qidi/HATCHBOX PLA" ], + "OFicxmSa": [ + "Prusa/Prusa Generic PLA HF" + ], "OFidJLn8": [ "Qidi/PolyLite ABS" ], "OFiyGNbI": [ "Elegoo/Elegoo PETG-CF" ], + "OFjFPhUC": [ + "Prusa/Prusament rPLA" + ], "OFjepy6j": [ "Flashforge/FusRock Generic S-PAHT" ], @@ -5164,12 +5163,18 @@ "OFkaDtKx": [ "Flashforge/Flashforge PA66-CF" ], + "OFkeeluv": [ + "Prusa/Prusa Generic ASA HF" + ], "OFkfK62J": [ "Elegoo/Elegoo PLA Silk" ], "OFklg4aM": [ "Elegoo/Elegoo PLA PRO" ], + "OFkoT6jl": [ + "Prusa/Prusament PLA" + ], "OFlNKZLP": [ "Flashforge/Flashforge PLA Metal" ], @@ -5218,6 +5223,12 @@ "OFp8lkYD": [ "Flashforge/Flashforge PPA-GF" ], + "OFpHq9gJ": [ + "Prusa/Prusament PETG" + ], + "OFphFSUJ": [ + "Prusa/Prusa Generic PETG HF" + ], "OFpwg2Qh": [ "OrcaFilamentLibrary/Elegoo ASA-CF" ], @@ -5287,6 +5298,9 @@ "OFv2NHLC": [ "Qidi/QIDI ABS-GF25" ], + "OFv8SRZh": [ + "Prusa/Prusa Generic PLA-CF" + ], "OFvN3117": [ "Qidi/QIDI PLA Matte Basic" ], @@ -5308,6 +5322,9 @@ "OFwyqcGn": [ "Elegoo/Elegoo PLA Matte" ], + "OFxLeRyT": [ + "Prusa/Prusa Generic PVA HF" + ], "OFxjFYxE": [ "Elegoo/Elegoo PETG HF" ], From 23b0aabb35cc48dfd13b644cd7355eef7550b308 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:13:24 +0800 Subject: [PATCH 008/208] Cubicon, Dremel, Anycubic, Artillery, InfiMech, Creality: family filament_ids Phase 2 long-tail migrations (56 collision groups across six vendors), zero effective-config change except where stated: Cubicon (17): 'Cubicon PC @base' verbatim-copied PA-CF's P510cfd0 at introduction (90a6c53ad5; PC was the config-light stub) - the PC family gets a fresh mint via its root. The other groups were all one shape: nine @base presets instantiated on exactly the two printers their dedicated variants cover with byte-identical passthrough configs, so no compatible_printers trim exists that CI would accept (instantiated presets must claim a printer). Fix: flip the nine @bases to instantiation:false and drop their setting_ids (bases carry none by convention). Every printer keeps an identical-config selectable preset per family - verified programmatically before flipping; no machine default_materials references an @base name. Dremel (3): 'Dremel Generic PLA' is deliberately selectable alongside its per-printer variants (#6837 re-exposed it), and the variants carry real overrides - a genuine AMS ambiguity with no config-neutral trim. The three variants share the fresh family mint OFUYjPc4 as own keys; the root keeps GFL99. A deliberate same-family id split (P8 shape): Dremel has no device ecosystem consuming filament_id, and every alternative is a user-visible regression of #6837. default_materials resolve unchanged. Anycubic (14): copy-paste/generic-riding across three id eras; 2022-era Anycubic Generic ABS/PETG/PLA/TPU keep the catalog ids, 13 families re-minted atomically (72 edits incl. 48 forced same-family re-ids), retiring the invented GFABS/GFL92/GFL93/GFPLA* space-containing ids. Artillery (8): GFL99 umbrella + P-hex copy-pastes; Artillery Generic PLA keeps GFL99, Artillery PLA keeps Pfcf9c4c, 17 families minted (52 edits), P284941e retired. InfiMech (14): pure verbatim Bambu-generic copy-paste; the six InfiMech Generic owners keep their ids, 15 impostor families minted (34 edits). Creality (8): HF generics copy-pasted GFL99 + id-less sub-brand lines riding keeper families; owners keep their git-verified ids, 8 families minted (17 edits, own-key layout for members inheriting heterogeneous per-series parents). Verified per batch: config-equivalence gate zero unexpected diffs (the nine Cubicon @base instantiation flips are the only preset-set changes, reviewed above); orca_extra_profile_check.py exit 0; assign_filament_ids.py --check exit 0; validator -l 2 exit 0; extended -f exit 0 for all six vendors (-v Cubicon/Dremel/Anycubic/Artillery/InfiMech/Creality); 14 fully-vanished ids appended to the retirement ledger. --- ... ABS @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... ABS @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... ABS @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...bic ABS @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...BS @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic ABS @Anycubic Kobra X 0.4 nozzle.json | 2 +- ... 95A @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...bic PETG @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...ic PETG @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...TG @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...bic PETG @Anycubic Kobra X 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Max 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json | 2 +- ...PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.2 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.6 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.8 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...ic PLA @Anycubic Kobra Neo 0.4 nozzle.json | 2 +- ...bic PLA @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...LA @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...gh Speed @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...peed @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...h Speed @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...gh Speed @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...nous @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...LA Matte @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...atte @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...LA Matte @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...Silk @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...LA Silk @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...PLA Silk @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...bic PLA+ @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...ic PLA+ @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...bic PLA+ @Anycubic Kobra X 0.4 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...bic TPU @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...eric ABS @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...asic @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...eric TPU @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery ABS @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../Artillery/filament/Artillery ABS.json | 1 + ...lery ASA @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery ASA @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery ASA @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery ASA @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...llery PA @Artillery M1 Pro 0.4 nozzle.json | 1 + ...ry PA-CF @Artillery M1 Pro 0.4 nozzle.json | 1 + ...llery PC @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery PET @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery PET @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.4 nozzle.json | 1 + ...ery PETG @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.4 nozzle.json | 1 + ...TG Basic @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.8 nozzle.json | 2 +- ... PETG-CF @Artillery M1 Pro 0.4 nozzle.json | 1 + .../Artillery/filament/Artillery PETG.json | 1 + ...LA Basic @Artillery M1 Pro 0.2 nozzle.json | 1 + ...LA Basic @Artillery M1 Pro 0.4 nozzle.json | 1 + ...LA Basic @Artillery M1 Pro 0.6 nozzle.json | 1 + ...LA Basic @Artillery M1 Pro 0.8 nozzle.json | 1 + ...A Basic+ @Artillery M1 Pro 0.4 nozzle.json | 1 + .../filament/Artillery PLA Basic.json | 1 + ...LA Matte @Artillery M1 Pro 0.2 nozzle.json | 1 + ...LA Matte @Artillery M1 Pro 0.4 nozzle.json | 1 + ...LA Matte @Artillery M1 Pro 0.6 nozzle.json | 1 + ...LA Matte @Artillery M1 Pro 0.8 nozzle.json | 1 + .../filament/Artillery PLA Matte.json | 1 + ...PLA Silk @Artillery M1 Pro 0.2 nozzle.json | 1 + ...PLA Silk @Artillery M1 Pro 0.4 nozzle.json | 1 + ...PLA Silk @Artillery M1 Pro 0.6 nozzle.json | 1 + ...PLA Silk @Artillery M1 Pro 0.8 nozzle.json | 1 + .../filament/Artillery PLA Silk.json | 1 + .../filament/Artillery PLA Tough.json | 1 + ...y PLA-CF @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery PVA @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery PVA @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.4 nozzle.json | 1 + ...lery TPU @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../Artillery/filament/Artillery TPU.json | 1 + .../Creality Generic ASA-CF @Hi-all.json | 1 + .../Creality Generic PETG-CF @Hi-all.json | 1 + ...Generic PLA High Speed @Ender-3V3-all.json | 1 + ...eality Generic PLA High Speed @Hi-all.json | 1 + ...eality Generic PLA High Speed @K1-all.json | 1 + ...eality Generic PLA High Speed @K2-all.json | 1 + ...lity Generic PLA Matte @Ender-3V3-all.json | 1 + .../Creality Generic PLA Matte @Hi-all.json | 1 + .../Creality Generic PLA Matte @K1-all.json | 1 + .../Creality Generic PLA Matte @K2-all.json | 1 + ...ality Generic PLA Silk @Ender-3V3-all.json | 1 + .../Creality Generic PLA Silk @Hi-all.json | 1 + .../Creality Generic PLA Silk @K1-all.json | 1 + .../Creality Generic PLA Silk @K2-all.json | 1 + .../Creality Generic PLA Wood @Hi-all.json | 1 + .../filament/Creality HF Generic PLA.json | 2 +- .../Creality HF Generic Speed PLA.json | 2 +- .../Cubicon/filament/Cubicon ABS @base.json | 3 +- .../filament/Cubicon ABS-A100 @base.json | 3 +- .../Cubicon/filament/Cubicon ABSk @base.json | 3 +- .../Cubicon/filament/Cubicon PA-CF @base.json | 3 +- .../Cubicon/filament/Cubicon PC @base.json | 5 +- .../Cubicon/filament/Cubicon PETG @base.json | 3 +- .../Cubicon/filament/Cubicon PLA @base.json | 3 +- .../Cubicon/filament/Cubicon PLA+ @base.json | 3 +- .../filament/Cubicon PLAi21 @base.json | 3 +- .../Dremel Generic PLA @3D20 all.json | 1 + .../Dremel Generic PLA @3D40 all.json | 1 + .../Dremel Generic PLA @3D45 all.json | 1 + .../filament/EX+APS/InfiMech ABS @EX+APS.json | 2 +- .../EX+APS/InfiMech PA-CF @EX+APS.json | 2 +- .../filament/EX+APS/InfiMech PC @EX+APS.json | 2 +- .../EX+APS/InfiMech PETG @EX+APS.json | 2 +- .../EX+APS/InfiMech PLA Basic @EX+APS.json | 2 +- .../EX+APS/InfiMech PLA Hyper @EX+APS.json | 2 +- .../filament/EX/InfiMech ABS @EX.json | 2 +- .../filament/EX/InfiMech PA-CF @EX.json | 2 +- .../InfiMech/filament/EX/InfiMech PC @EX.json | 2 +- .../filament/EX/InfiMech PETG @EX.json | 2 +- .../filament/EX/InfiMech PLA Basic @EX.json | 2 +- .../filament/EX/InfiMech PLA Hyper @EX.json | 2 +- .../filament/HSN/InfiMech ABS @HSN.json | 2 +- .../filament/HSN/InfiMech PA-CF @HSN.json | 2 +- .../filament/HSN/InfiMech PC @HSN.json | 2 +- .../filament/HSN/InfiMech PETG @HSN.json | 2 +- .../filament/HSN/InfiMech PLA @HSN.json | 2 +- .../filament/HSN/InfiMech PLA Hyper @HSN.json | 2 +- .../filament/HSN/InfiMech TPU @HSN.json | 2 +- .../InfiMech/filament/HSN/Other ABS @HSN.json | 2 +- .../filament/HSN/Other PA-CF @HSN.json | 2 +- .../InfiMech/filament/HSN/Other PC @HSN.json | 2 +- .../filament/HSN/Other PETG @HSN.json | 2 +- .../InfiMech/filament/HSN/Other PLA @HSN.json | 2 +- .../filament/HSN/Other PLA Hyper @HSN.json | 2 +- .../InfiMech/filament/HSN/Other TPU @HSN.json | 2 +- .../InfiMech/filament/InfiMech PLA Hyper.json | 2 +- .../profiles/InfiMech/filament/Other ABS.json | 2 +- .../InfiMech/filament/Other PA-CF.json | 2 +- .../profiles/InfiMech/filament/Other PC.json | 2 +- .../InfiMech/filament/Other PETG.json | 2 +- .../InfiMech/filament/Other PLA Hyper.json | 2 +- .../profiles/InfiMech/filament/Other PLA.json | 2 +- .../profiles/InfiMech/filament/Other TPU.json | 2 +- scripts/filament_id_snapshot.json | 390 +++++++++++++----- scripts/retired_filament_ids.json | 46 ++- 189 files changed, 509 insertions(+), 262 deletions(-) diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json index f560328d28..35ea99a5fa 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "RDI26qeSRSTe0PDg", - "filament_id": "GFB99", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json index 4e5b8117bc..6cbc0b1dca 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Moc1cylP6mmSQjlb", - "filament_id": "GFB99", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json index 5b5dbd88a8..bc96d4e812 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "2xgfnUKyOUQwYWPa", - "filament_id": "GFB99", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json index 762dee8f05..20d5e6463c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "NOiAgxA0BbvLhR1v", - "filament_id": "GFB99", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json index a37305a1bd..eb92f6134e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "MDWaiSjl89E6Edsn", - "filament_id": "GFABS", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json index 5638f4c226..2176e2e94b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "wZjVYc7dBDSKRusJ", - "filament_id": "GFABS", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json index 37cd31a19e..f6cbd13546 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AbB6JtoPRsNgmxyy", - "filament_id": "GFABS", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json index 8a9663981c..85f03c921e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "exX565xnrLPkYkvu", - "filament_id": "GFABS", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json index 5443dacb34..0d16ce5f5d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "KeEk3yQZrKmJY9Q0", - "filament_id": "GFABS", + "filament_id": "OFf2b9wu", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json index 035648964d..b7f6e07d05 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "gmni9H2Du5nxBqQu", - "filament_id": "GFU99", + "filament_id": "OFGb4hPY", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index cc24576ed0..64ec79a2f4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PETG", "from": "system", "setting_id": "qe2wYLf7CEMjmfxj", - "filament_id": "GFG99", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json index bd02903dcc..68e4c4279c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uNktFymJ3RbGa7k0", - "filament_id": "GFG99", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json index e7f271b6a4..89ae50f686 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "EaW663aw4torYXG8", - "filament_id": "GFG99", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json index a0e8481d7f..11fc401b24 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "lgVEMmBHMen0sWsI", - "filament_id": "GFG99", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json index d513cdd1d4..52f8ed3f9c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uLRMTzyJIara4Hr2", - "filament_id": "GFG99", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json index 9c59bd3643..6a2292c913 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "FAyFkKpV5w6G5dU2", - "filament_id": "GFPETG", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index d97f7fc564..e7cd08bc7e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "duduwoswLHk9I9sY", - "filament_id": "GFPETG", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json index bd1a1768c0..e8bd6e56ce 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "b3GU7ytZPEYNNyne", - "filament_id": "GFPETG", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json index d8913fe29e..a48eb618db 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrHKJh6prBzMz4Se", - "filament_id": "GFPETG", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json index a14c08e5c4..5b5b0bbebe 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "HyTi93UGno6uAJEO", - "filament_id": "GFPETG", + "filament_id": "OFdSGkUG", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json index 7e8a8b189b..70cdae2da4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "XIq1GeZdHqOl9Gtr", - "filament_id": "GFL92", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json index 2e2c0d094a..c078bb2d87 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "EaVdXQHAyocYUCez", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json index e96d1b0884..e26d8674f6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "UpC1Qut0kjYRD9po", - "filament_id": "GFL92", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json index c60020dfda..04d4dc5e79 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "ELCOJflyY3DfpPAH", - "filament_id": "GFL92", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json index 4e058c6f74..ba87ad3145 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "enkHPcq0yYHsRk7g", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json index 42d757d7e9..95ddd20b35 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "qw4uL96miCLTNE7b", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json index f01ded111e..e61cdcd625 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "KrlWgkC2kVdSRNUx", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json index 0a12e310b4..c81db823c4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "gK0NhTnxz1VBNHbu", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json index c94f05a52f..7159efba5c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4nCPU0WS74OXowyr", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json index 3fc828b305..6473007901 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "0Ae57Dt0KXnpQUJu", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json index 7f862c1b1c..edd899396c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "otxG4N1WrXHUw8Z9", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json index 03627128bc..236dbc4cef 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "GblA3LvgCL63V7Qx", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json index 717e533526..4c1cba8e20 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zYYM5Fznkiz0UgHN", - "filament_id": "GFL99", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json index 13a4eccfc2..d1a975fb37 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Z0T8Mul8Ta7zqRjS", - "filament_id": "GFPLA", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json index f4a7632c12..5138470e26 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "61KPHMw1fRcuaGHk", - "filament_id": "GFPLA", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json index 82691cd80f..0c923b2fe0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RQJLrGtzvbP2PksP", - "filament_id": "GFPLA", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json index d00931d974..79439814b4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "50Ailboxk7bEclVp", - "filament_id": "GFPLA", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json index 795805eb82..286464d8c3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "1hyHPSJZgUpLcW7u", - "filament_id": "GFPLA", + "filament_id": "OFgK2Xvv", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json index d36e50bf95..cfb1f50c1d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "Sio4qE22N2krNjx1", - "filament_id": "GFL96", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json index c5e434f90f..6e5c967420 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4FQaTeouNl9pL4Vl", - "filament_id": "GFL99", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json index d996d2d84b..0e975dc8d6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AEKT5WgqOTAVYijs", - "filament_id": "GFL99", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json index ad8be5c9f1..0e949bd4a6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "xTuh6dk8MdeAovdB", - "filament_id": "GFPLA High Speed", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json index 4f2a9b55e4..219a05057c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BpBYwZqt4ik1XIFp", - "filament_id": "GFPLA High Speed", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json index 809c243223..fe6757653c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "2Rk0UA3rtW53ECqo", - "filament_id": "GFPLA High Speed", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json index 12ba8b6984..b2bc996730 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "hQ90rvCLS2rVEPVJ", - "filament_id": "GFPLA High Speed", + "filament_id": "OFgSK1hL", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json index 18450cf484..046b4c87a3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wi26Yq5bX8oGt4CA", - "filament_id": "GFL99", + "filament_id": "OFEdyZqS", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json index 88dc0be839..02945fa977 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "kVOaVF3YyfGrXTdW", - "filament_id": "GFL95", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json index 74e41f42aa..b30450f8ac 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qSpZJ4cRcg3xb2b2", - "filament_id": "GFL99", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json index 64a690ea12..a70d0629b5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "WvmwXnXSDPPtXS8S", - "filament_id": "GFPLA Matte", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json index bf2a4dfa91..41f1c5f6a8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jFKsrMeqeUAcMAyf", - "filament_id": "GFPLA Matte", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json index 6b0be29514..2f2719cb19 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ueznw2fLdjN2EbIC", - "filament_id": "GFPLA Matte", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json index dc79a8b11f..4f7d332aaa 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JxYmWTeCtw0VvUcC", - "filament_id": "GFPLA Matte", + "filament_id": "OFvYfHPB", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json index 51dbc781fa..60f18577e5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Fszb00FtQHFOcDmz", - "filament_id": "GFL99", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json index 24db6eab18..18a8f258ec 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wnt68LydXcNxhGhN", - "filament_id": "GFL99", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json index 269f5acf24..075d1e2afd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AzEerDakdHs9Rj3I", - "filament_id": "GFPLA Silk", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json index aeaed4784e..70e61016a5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "pUB5V3n7yAbPxFQC", - "filament_id": "GFPLA Silk", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json index 91edc58d3c..11ad26dcbf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N96XNT6EoNVVFYz0", - "filament_id": "GFPLA Silk", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json index 426ea3744d..e80cdc8383 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Yc1P4D9Z42Abjfut", - "filament_id": "GFPLA Silk", + "filament_id": "OFjdTQd6", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json index 836edf10c5..56c46b1ca2 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "1va1bLu3J0b5GQt3", - "filament_id": "GFL93", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json index 625e0ddad2..33aa19252c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XN8zwImhwbZCkl6m", - "filament_id": "GFL99", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json index a7b7d4f595..85f0e8a993 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Vs1ZyZJWHFue8Vc8", - "filament_id": "GFL99", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json index e437edc973..061215d818 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CjXfeHJpdOaSEzN0", - "filament_id": "GFPLA+", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json index 7bd1cded91..7f8105621a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ol5UhwlAQy7yrXYU", - "filament_id": "GFPLA+", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json index 087e7e479c..2c8e3db0b7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "u9nOmt30hBeZoN2w", - "filament_id": "GFPLA+", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json index 9bddef96ad..dd1ac32507 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lehlBFE2WVyi24s0", - "filament_id": "GFPLA+", + "filament_id": "OFgrGfPy", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json index dbf66104c0..738fcbdc89 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "CdtZIoH8bvFOFU6l", - "filament_id": "GFU99", + "filament_id": "OFHL32M0", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json index 13f0c712e3..a30e14503f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "F3l2tNcFwp9qG7W6", - "filament_id": "GFU99", + "filament_id": "OFHL32M0", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json index 4310aba363..55f7df2a50 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "WkMd8rjotz7XNLDM", - "filament_id": "GFU99", + "filament_id": "OFHL32M0", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json index 85252f7057..645f098e04 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "ias4IbNNwygyeow9", - "filament_id": "GFU99", + "filament_id": "OFHL32M0", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json index 71e7beac0e..7904e7cc18 100644 --- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic ABS", "from": "system", "setting_id": "W3GiC5YLzxbbjXLY", - "filament_id": "GFB99", + "filament_id": "OFOp3Oef", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json index cb51a5a339..f533e62694 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "tUSAvzLu6pVk37kn", - "filament_id": "GFG99", + "filament_id": "OFaKZ6JI", "instantiation": "true", "filament_settings_id": [ "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index 42739229b1..3edff90e15 100644 --- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic TPU", "from": "system", "setting_id": "kHB2rrxkyz4Clu3N", - "filament_id": "GFU99", + "filament_id": "OFsCOJv7", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json index b468e95d51..4b091e502a 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "m023Z8IkkHMHxuag", - "filament_id": "P39db358", + "filament_id": "OFw1S8lL", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json index f21c7a5a31..f4a5d3f332 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "QGbNWGw8rqvq025W", + "filament_id": "OFw1S8lL", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json index 8516077d0a..1edbbfc7f5 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PxGFsoMcfFrTDqzL", - "filament_id": "P39db358", + "filament_id": "OFw1S8lL", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json index 1bd222ade6..73a7118801 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "o4JZKQmCdnO0hCXZ", - "filament_id": "P39db358", + "filament_id": "OFw1S8lL", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS.json b/resources/profiles/Artillery/filament/Artillery ABS.json index 111c2c39a1..b7d3189738 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS.json +++ b/resources/profiles/Artillery/filament/Artillery ABS.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "fsbfMiamVemzRxkG", + "filament_id": "OFw1S8lL", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json index 9894337b5c..ebfb82fdf0 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "AE7wKVIZXHXSXzL5", - "filament_id": "P87436f6", + "filament_id": "OFtmT4Nd", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json index eb4a720cc3..ab290c02b6 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "eSwM3ZfSBWqR8Gcf", + "filament_id": "OFtmT4Nd", "instantiation": "true", "chamber_temperature": [ "55" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json index 422b050df8..7a0228d38e 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.6 nozzle", "from": "User", "setting_id": "znMfTFfxvJC7a732", - "filament_id": "P87436f6", + "filament_id": "OFtmT4Nd", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json index 16a9ff7c3d..a90093dbc5 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "y2DU36j0slaHzg04", - "filament_id": "P87436f6", + "filament_id": "OFtmT4Nd", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json index 756e67a5e2..662524238b 100644 --- a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "lOsH1teHe8Pgzx2g", + "filament_id": "OFp90N8a", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json index ec9009a5e1..3c2efc54ed 100644 --- a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "b4BKJMUxArvLuEOh", + "filament_id": "OFnY9ovF", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json index 4fa54353f0..d734ab4c40 100644 --- a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "WawbnfhWn4MT6Hz7", + "filament_id": "OFNRgSch", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json index 6fd06c0d66..e4f3c78276 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "a5jwQ6nyffW1Vqv1", - "filament_id": "P11851ba", + "filament_id": "OFw0qp7w", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json index a82b3b7948..9af913f87a 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "QeiSAakfMW7HyhJ7", + "filament_id": "OFw0qp7w", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json index 26e71cefc8..c9294a933d 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "VGu7C3uk8d6ibIg4", - "filament_id": "P11851ba", + "filament_id": "OFw0qp7w", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json index b5461ec03c..b204a0b6a6 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "Oj11BhU0QajmDrh3", - "filament_id": "P11851ba", + "filament_id": "OFw0qp7w", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json index 5ed45d7e7d..d29a639777 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "kAlZ7nCYo53UVVx3", - "filament_id": "P284941e", + "filament_id": "OFEYKrjb", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json index f6bbdd3cef..4620665cc8 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "g7UIfJTOPzMQzfrH", + "filament_id": "OFEYKrjb", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json index 3fcc8e175b..4ffe6eaa01 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "uuPf0MfNTZ2lihtG", - "filament_id": "P284941e", + "filament_id": "OFEYKrjb", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json index 4842427a49..2ae4e8e114 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dQBp2T4ap90uAOYs", - "filament_id": "P284941e", + "filament_id": "OFEYKrjb", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json index 03fc583bfa..b90df9567f 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "GrdWgUGdXt23jnBu", - "filament_id": "P284941e", + "filament_id": "OFt5bvKK", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json index b8a3c33acd..5d14168c7b 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "RTQvSwJBWnut5aBo", + "filament_id": "OFt5bvKK", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json index 3ab0575058..7c7046e7b9 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "Wkt1IClO4nwH3Xa7", - "filament_id": "P284941e", + "filament_id": "OFt5bvKK", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json index 2b83852a34..5152d65dd6 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "Zlvodz3cris0hmof", - "filament_id": "P284941e", + "filament_id": "OFt5bvKK", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json index 22d124da46..66416e969a 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "JvmeW29kHCp7HiA6", + "filament_id": "OF9vnvM8", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG.json b/resources/profiles/Artillery/filament/Artillery PETG.json index ecea0ae80b..a4922a1f32 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG.json +++ b/resources/profiles/Artillery/filament/Artillery PETG.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "1MyhYGMxJCmZnJRP", + "filament_id": "OFEYKrjb", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json index cee58991c8..4efb9507a5 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "N3iYnDshA5ruihVE", + "filament_id": "OF57IbZT", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json index 56498727fa..08e2927b0e 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "zBUD1JyuZF9MOncA", + "filament_id": "OF57IbZT", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json index 884e7d428e..4c009a344b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "NKkZjEtDjxOMLjoo", + "filament_id": "OF57IbZT", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json index cffdcde5ed..7c08a8ffba 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "c9BAMzt2w30nB2rC", + "filament_id": "OF57IbZT", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json index 18e7f77ad4..b636c0f7d6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "2VIrSoq3kufjHMXj", + "filament_id": "OFXA8vy9", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "100" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic.json b/resources/profiles/Artillery/filament/Artillery PLA Basic.json index 052ceac5e5..5455de4a86 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "DcGBMRjdcgLx6pWG", + "filament_id": "OF57IbZT", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json index aff1bcb3cb..5156b5e69f 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "tgmFMdyhSX05kuxw", + "filament_id": "OFKDnrjL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json index abd44e77d1..6c2a47f771 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "9zqAIfywiv9zm77X", + "filament_id": "OFKDnrjL", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json index a1fc1e5999..58702d5a69 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "W6ipHAoCgHIUIT3g", + "filament_id": "OFKDnrjL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json index 4217f6836d..3548bc52a6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "HggSuUWe1zWOlQIK", + "filament_id": "OFKDnrjL", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte.json b/resources/profiles/Artillery/filament/Artillery PLA Matte.json index 83e40133aa..04a2402b6f 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "kt8uKXpMqxrFrHaG", + "filament_id": "OFKDnrjL", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json index d2f3184864..d86ce77a43 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "TDwRIGXkpJIW38jG", + "filament_id": "OFnyirh9", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json index e8d65f465b..f5c6f05245 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "BWMjPUWXwumQoY5H", + "filament_id": "OFnyirh9", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json index ce102bb364..8743dd44bd 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PpuiGWbDlVZwBIxb", + "filament_id": "OFnyirh9", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json index 6fb25927e3..8df6dd1d13 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dr2wlzDc1AC3tciI", + "filament_id": "OFnyirh9", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk.json b/resources/profiles/Artillery/filament/Artillery PLA Silk.json index 85cd2eec08..9eb9ea142a 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "rd0U4uP6mM8S8lDg", + "filament_id": "OFnyirh9", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Tough.json b/resources/profiles/Artillery/filament/Artillery PLA Tough.json index 8f1ce758b5..bca655122d 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Tough.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Tough.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "hLFvQXsyyUrguGEp", + "filament_id": "OFtXBjvb", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json index 36c7d69b83..51433f69be 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "oT12s9CEV1CTD6eB", + "filament_id": "OFvxvkAd", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json index f7f700fa96..ec64d0b506 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "FIcb3cOIanxmvHe2", - "filament_id": "P8163162", + "filament_id": "OFc2SnEp", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json index 4c558166c5..c3f230b487 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "r2q4QIlfTUCIz43f", + "filament_id": "OFc2SnEp", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json index b15f191878..1759d32ad5 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "h5xquKMT9l0rwcTU", - "filament_id": "P8163162", + "filament_id": "OFc2SnEp", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json index 1e682947c2..412d60e440 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "cElJlbCAgAqSQiPZ", - "filament_id": "P8163162", + "filament_id": "OFc2SnEp", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json index d722aa592f..3925e8963d 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "p6vnCneuwtM0PzL7", + "filament_id": "OFTbsWVg", "instantiation": "true", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json index 9d29c06e42..0b0e495f7d 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "QIgpIamYbSdI4DPW", - "filament_id": "P2fbf0c0", + "filament_id": "OFTbsWVg", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json index d323279979..83a7dbd0f6 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "W22GbPPOgtH4NAAH", - "filament_id": "P2fbf0c0", + "filament_id": "OFTbsWVg", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU.json b/resources/profiles/Artillery/filament/Artillery TPU.json index b769e8c61a..f4ec63c166 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU.json +++ b/resources/profiles/Artillery/filament/Artillery TPU.json @@ -4,6 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "IcV1jLJaS5rmdNOY", + "filament_id": "OFTbsWVg", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json index 4c11ce042b..e46869feb9 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic ASA @Hi-all", "from": "system", "setting_id": "C7IB6HSJxW598zFA", + "filament_id": "OFNbajj9", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json index 28f6f07150..c1888475bb 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PETG @Hi-all", "from": "system", "setting_id": "G4ZIJDNOpQvutOfs", + "filament_id": "OFvGSn0l", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json index 7538ad118c..c2f037e2b0 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "4F3dZWvsniH9QHtr", + "filament_id": "OFLriDvE", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json index f1748f5d81..92e419b26a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "KzaopZGQPw5OJFFD", + "filament_id": "OFLriDvE", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json index c810abe5e9..a30c1ec949 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "ptxV78rC6wevH916", + "filament_id": "OFLriDvE", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json index 559cb6c0d8..3f6d5e5633 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "ozHstwkc3N5LGWLV", + "filament_id": "OFLriDvE", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json index 8386488fcd..88b5c57c1a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "xF1B593frol5PWVw", + "filament_id": "OF43idK2", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json index fe7c08e6c5..d5247b1d32 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "R7Jo7NhjsR1iU2Fd", + "filament_id": "OF43idK2", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json index 9869ee37fa..f1b58bb091 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "3hreTG3DjcgmwZC2", + "filament_id": "OF43idK2", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json index 1659fed28f..a13e886b89 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "fxZf5E6IHWWq3dsu", + "filament_id": "OF43idK2", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json index d4e1b1f7aa..f3686b9edd 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "uPFnSMh7WoXmMAoy", + "filament_id": "OFTszIHE", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json index 17b55e5202..2762cdee53 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "RPDVqZcn8EZizd1U", + "filament_id": "OFTszIHE", "instantiation": "true", "filament_flow_ratio": [ "0.97" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json index 13cd1e7c93..ff94adbabf 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "pxvc0ICvqc0M3wYV", + "filament_id": "OFTszIHE", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json index 3b9a3d242c..5eba612ef7 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "qS0Mlt24iz1k4P7n", + "filament_id": "OFTszIHE", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json index 53637dd460..3ac6f207f4 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json @@ -4,6 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "OEc7Bc7WG99tuO5D", + "filament_id": "OFdLGn0R", "instantiation": "true", "filament_flow_ratio": [ "0.88" diff --git a/resources/profiles/Creality/filament/Creality HF Generic PLA.json b/resources/profiles/Creality/filament/Creality HF Generic PLA.json index 0b0c7d7d70..2cad2fa504 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic PLA.json +++ b/resources/profiles/Creality/filament/Creality HF Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "p07b7w0HDxavGLdd", - "filament_id": "GFL99", + "filament_id": "OFZjZ1k7", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json b/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json index dabcf7cdba..64319441a4 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json +++ b/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Jp93uqYennsWVAKe", - "filament_id": "GFL99", + "filament_id": "OFfkPhrJ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index 55fbd40ee4..cae2d0bcf9 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon ABS @base", "inherits": "fdm_filament_abs", - "setting_id": "aZRVIlDze62Bbw81", "filament_id": "P510cfb0", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index dddc147ff2..b715900dae 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon ABS-A100 @base", "inherits": "Cubicon ABS @base", - "setting_id": "vGIT4KZvqojIh2up", "filament_id": "P510cfb1", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index e1546d3bae..7daddfb940 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon ABSk @base", "inherits": "Cubicon ABS @base", - "setting_id": "UbOUO0K3Y2iRPBtf", "filament_id": "P510cfb2", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json index 51c89949f6..6177b6fd6a 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon PA-CF @base", "inherits": "fdm_filament_pa", - "setting_id": "55cJDyCoEudfOePY", "filament_id": "P510cfd0", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index de42989e84..aa2f9ac347 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon PC @base", "inherits": "fdm_filament_pc", - "setting_id": "Mzg6jfwb2nqfGkdV", - "filament_id": "P510cfd0", - "instantiation": "true", + "filament_id": "OFnLnZQo", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index 2242ba36ca..0912884adf 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon PETG @base", "inherits": "fdm_filament_pet", - "setting_id": "bGfz4phwIdqSz0Hx", "filament_id": "P510cfc0", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 665ba58d59..82dffb7070 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -3,9 +3,8 @@ "name": "Cubicon PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "setting_id": "ypwdJAu0NlEsWpf4", "filament_id": "P510cfa0", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index cb916a9410..0e31e96a81 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon PLA+ @base", "inherits": "Cubicon PLA @base", - "setting_id": "ETnuhiOZRh1jxrVk", "filament_id": "P510cfa1", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json index 831450deef..a9d46012c6 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Cubicon PLAi21 @base", "inherits": "Cubicon PLA @base", - "setting_id": "mnwC7ijXXV72lBOt", "filament_id": "P510cfa2", - "instantiation": "true", + "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json index 7e76e2404b..273eb70ec5 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json @@ -4,6 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "weKWPiNIe3TmOXRn", + "filament_id": "OFUYjPc4", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json index 8074c6f0a3..822f95fe2c 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json @@ -4,6 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "kZAEjhLS29WQeyf1", + "filament_id": "OFUYjPc4", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json index fb9c31fe0e..62373995e2 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json @@ -4,6 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "pIlkZjNrXnHJDszp", + "filament_id": "OFUYjPc4", "instantiation": "true", "slow_down_min_speed": "10", "close_fan_the_first_x_layers": "3", diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json index ab07650434..d0a6f7dc61 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX+APS", "from": "system", "setting_id": "3EdHfL9KE4oRVHB7", - "filament_id": "GFB99", + "filament_id": "OFVBNoov", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json index 0173f7ee05..c2b0d8543f 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX+APS", "from": "system", "setting_id": "6YMXdKicP2hGUUJn", - "filament_id": "GFN98", + "filament_id": "OFb3UzMZ", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json index c68955287b..df76f5ffe8 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX+APS", "from": "system", "setting_id": "GsYpyooWb6ymAb36", - "filament_id": "GFC99", + "filament_id": "OFTsGps3", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json index 39d510f085..d04816c3f0 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX+APS", "from": "system", "setting_id": "sNsRp3vHhcWAxp7d", - "filament_id": "GFG99", + "filament_id": "OFvaXhYD", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json index 8d715771b9..e1a7aaa359 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX+APS", "from": "system", "setting_id": "UTrjyqqetOSYNZxJ", - "filament_id": "GFL99", + "filament_id": "OFuq9tqb", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json index cbc94ccedd..aecb50b1a4 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX+APS", "from": "system", "setting_id": "p08bW50lbzMjwL5B", - "filament_id": "GFL99", + "filament_id": "OFefhSuj", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json index 05b1f4e017..080a6dfede 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX", "from": "system", "setting_id": "e6st01mMFr98LVEH", - "filament_id": "GFB99", + "filament_id": "OFVBNoov", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json index 3042fe20f8..3beb4794b3 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX", "from": "system", "setting_id": "qPCd5oTrCmZi63Ng", - "filament_id": "GFN98", + "filament_id": "OFb3UzMZ", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json index b1c46585e0..2e0ecd34bd 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX", "from": "system", "setting_id": "Uc2o223YSyShp7EI", - "filament_id": "GFC99", + "filament_id": "OFTsGps3", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json index 47172fa13a..9f7230ea11 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX", "from": "system", "setting_id": "5vqLJrKLKv40sT7y", - "filament_id": "GFG99", + "filament_id": "OFvaXhYD", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json index 071d0eb53c..cb78703d14 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX", "from": "system", "setting_id": "bGOpriWvEFZOmqR4", - "filament_id": "GFL99", + "filament_id": "OFuq9tqb", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json index 1fab11094e..57ec47283d 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX", "from": "system", "setting_id": "y8A92Dw8EMplnZAM", - "filament_id": "GFL99", + "filament_id": "OFefhSuj", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json index 202565b819..2c6f0a1f18 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @HSN", "from": "system", "setting_id": "QnEhnvxibr6g1nou", - "filament_id": "GFB99", + "filament_id": "OFVBNoov", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json index 3f6524b54c..0aa59d2664 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @HSN", "from": "system", "setting_id": "L1j3mDKXjE2RKO1B", - "filament_id": "GFN98", + "filament_id": "OFb3UzMZ", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json index 35a3314a90..a8a0810980 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @HSN", "from": "system", "setting_id": "HBNOABPFLninXsW6", - "filament_id": "GFC99", + "filament_id": "OFTsGps3", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json index 1997c1b375..c4873f921e 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @HSN", "from": "system", "setting_id": "DJyFBjQ5n9n1UHv0", - "filament_id": "GFG99", + "filament_id": "OFvaXhYD", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json index f3118fe1d6..8a5765eac9 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @HSN", "from": "system", "setting_id": "NWKMG5q4ITfHcYOD", - "filament_id": "GFL99", + "filament_id": "OFKzh9lx", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json index a7988eaa70..52cbdd6732 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @HSN", "from": "system", "setting_id": "fAw5pB53L8ZT1Fkm", - "filament_id": "GFL99", + "filament_id": "OFefhSuj", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json index 098ed99ae0..4716c5ac9b 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @HSN", "from": "system", "setting_id": "CvTHZpKuTaGS186F", - "filament_id": "GFU99", + "filament_id": "OFmcJsqt", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json index c7b6451fab..5bcb620e15 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @HSN", "from": "system", "setting_id": "IuZcFrVQ2rJoMDLP", - "filament_id": "GFB99", + "filament_id": "OFAK2XjZ", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json index fe5f2097d5..354cd3d8e3 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @HSN", "from": "system", "setting_id": "4I0FW5meyC53Xf8n", - "filament_id": "GFN98", + "filament_id": "OFSpTWdv", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json index e87712a278..daeed5e540 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @HSN", "from": "system", "setting_id": "vUuSuioOUXsg2P3p", - "filament_id": "GFC99", + "filament_id": "OFyD1Zo8", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json index 0a4f102aa3..8aef779240 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @HSN", "from": "system", "setting_id": "lWYq9XssEyY3uWEe", - "filament_id": "GFG99", + "filament_id": "OFw05rkF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json index c775f37bfc..2788d2639f 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @HSN", "from": "system", "setting_id": "wOExDniXvR7CcF1w", - "filament_id": "GFL99", + "filament_id": "OFS3HrR1", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json index b3cc531849..26fe3ad6ff 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @HSN", "from": "system", "setting_id": "154azDg7YNNWCkNK", - "filament_id": "GFL99", + "filament_id": "OFrbbq6E", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json index adbf1cc254..83fb180e74 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @HSN", "from": "system", "setting_id": "0bU2fl92vCQobYnt", - "filament_id": "GFU99", + "filament_id": "OFFrbsvQ", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json index dee081317f..f7cc33ef70 100644 --- a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "j86QMTif4fGujRbg", - "filament_id": "GFL99", + "filament_id": "OFefhSuj", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other ABS.json b/resources/profiles/InfiMech/filament/Other ABS.json index a120f2dda6..d2d4fc2a21 100644 --- a/resources/profiles/InfiMech/filament/Other ABS.json +++ b/resources/profiles/InfiMech/filament/Other ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other", "from": "system", "setting_id": "nDLB3RZq23limiBn", - "filament_id": "GFB99", + "filament_id": "OFAK2XjZ", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PA-CF.json b/resources/profiles/InfiMech/filament/Other PA-CF.json index 1829ec16bb..37a58115f9 100644 --- a/resources/profiles/InfiMech/filament/Other PA-CF.json +++ b/resources/profiles/InfiMech/filament/Other PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other", "from": "system", "setting_id": "rgz4LjU9KyvbLhRQ", - "filament_id": "GFN98", + "filament_id": "OFSpTWdv", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/Other PC.json b/resources/profiles/InfiMech/filament/Other PC.json index dda6d2def7..212ed3117e 100644 --- a/resources/profiles/InfiMech/filament/Other PC.json +++ b/resources/profiles/InfiMech/filament/Other PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other", "from": "system", "setting_id": "VXkW5oukQdBX6B6T", - "filament_id": "GFC99", + "filament_id": "OFyD1Zo8", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/Other PETG.json b/resources/profiles/InfiMech/filament/Other PETG.json index 552e3e4fe7..4d5ecee6c4 100644 --- a/resources/profiles/InfiMech/filament/Other PETG.json +++ b/resources/profiles/InfiMech/filament/Other PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other", "from": "system", "setting_id": "onLEWi8GYK0avard", - "filament_id": "GFG99", + "filament_id": "OFw05rkF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/Other PLA Hyper.json b/resources/profiles/InfiMech/filament/Other PLA Hyper.json index 4d1aa6c742..44ec23e383 100644 --- a/resources/profiles/InfiMech/filament/Other PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/Other PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other", "from": "system", "setting_id": "Iop52BLp5ou8u4QG", - "filament_id": "GFL99", + "filament_id": "OFrbbq6E", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PLA.json b/resources/profiles/InfiMech/filament/Other PLA.json index aa1fa0a091..5e4a3eddd6 100644 --- a/resources/profiles/InfiMech/filament/Other PLA.json +++ b/resources/profiles/InfiMech/filament/Other PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other", "from": "system", "setting_id": "2Bl4sfgGJBjNMk37", - "filament_id": "GFL99", + "filament_id": "OFS3HrR1", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other TPU.json b/resources/profiles/InfiMech/filament/Other TPU.json index edbee9b887..656c5a9e81 100644 --- a/resources/profiles/InfiMech/filament/Other TPU.json +++ b/resources/profiles/InfiMech/filament/Other TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other", "from": "system", "setting_id": "nqDc2q94Q2hwMi7B", - "filament_id": "GFU99", + "filament_id": "OFFrbsvQ", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 6c96ddbad0..9145cab4da 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -42,6 +42,7 @@ "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", @@ -55,11 +56,17 @@ "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", @@ -105,15 +112,49 @@ "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 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/Artillery ABS @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery ASA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery Generic PETG", "Artillery/Artillery Generic PLA", "Artillery/Artillery Generic PLA-CF", + "Artillery/Artillery PA @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PET @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PETG", + "Artillery/Artillery PETG @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Basic", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Matte", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Silk", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Tough", + "Artillery/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery TPU", + "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", "BBL/BETA HIPS @base", "BBL/BETA PAHT-CF @base", "BBL/BETA PETG @base", @@ -349,10 +390,25 @@ "Creality/CR-Wood @K1C_CFS-C-all", "Creality/CR-Wood @K1_CFS-C-all", "Creality/CR-Wood @K2 Plus-all", + "Creality/Creality Generic ASA-CF @Hi-all", "Creality/Creality Generic PA-CF", "Creality/Creality Generic PC", "Creality/Creality Generic PETG", + "Creality/Creality Generic PETG-CF @Hi-all", "Creality/Creality Generic PLA", + "Creality/Creality Generic PLA High Speed @Ender-3V3-all", + "Creality/Creality Generic PLA High Speed @Hi-all", + "Creality/Creality Generic PLA High Speed @K1-all", + "Creality/Creality Generic PLA High Speed @K2-all", + "Creality/Creality Generic PLA Matte @Ender-3V3-all", + "Creality/Creality Generic PLA Matte @Hi-all", + "Creality/Creality Generic PLA Matte @K1-all", + "Creality/Creality Generic PLA Matte @K2-all", + "Creality/Creality Generic PLA Silk @Ender-3V3-all", + "Creality/Creality Generic PLA Silk @Hi-all", + "Creality/Creality Generic PLA Silk @K1-all", + "Creality/Creality Generic PLA Silk @K2-all", + "Creality/Creality Generic PLA Wood @Hi-all", "Creality/Creality Generic PLA-CF", "Creality/Creality HF Generic PLA", "Creality/Creality HF Generic Speed PLA", @@ -601,6 +657,9 @@ "DeltaMaker/DeltaMaker Generic PETG", "DeltaMaker/DeltaMaker Generic PLA", "Dremel/Dremel Generic PLA", + "Dremel/Dremel Generic PLA @3D20 all", + "Dremel/Dremel Generic PLA @3D40 all", + "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Elegoo ASA-CF @base", "Elegoo/Elegoo PAHT @base", "Elegoo/Elegoo PC @base", @@ -3117,9 +3176,6 @@ "CoLiDo/CoLiDo PLA Silk", "CoLiDo/CoLiDo PLA+" ], - "GFABS": [ - "Anycubic/Anycubic ABS" - ], "GFASA": [ "Anycubic/Anycubic ASA" ], @@ -3169,7 +3225,6 @@ "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", @@ -3208,9 +3263,7 @@ "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", @@ -3230,9 +3283,7 @@ "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", @@ -3301,8 +3352,6 @@ "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/Prusament PC Blend", @@ -3393,8 +3442,6 @@ "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", @@ -3407,7 +3454,6 @@ "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", @@ -3420,8 +3466,6 @@ "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", @@ -3640,12 +3684,6 @@ "Anycubic/Polymaker PLA Pro Metallic", "Snapmaker/Polymaker PLA Pro Metallic" ], - "GFL92": [ - "Anycubic/Anycubic PLA" - ], - "GFL93": [ - "Anycubic/Anycubic PLA+" - ], "GFL94": [ "Anycubic/Anycubic PLA Slik" ], @@ -3653,7 +3691,6 @@ "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" ], @@ -3664,7 +3701,6 @@ "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" ], @@ -3710,30 +3746,7 @@ "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", @@ -3752,12 +3765,6 @@ "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", @@ -3778,11 +3785,6 @@ "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", @@ -3917,8 +3919,6 @@ "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 Generic PA-CF", @@ -4071,7 +4071,6 @@ "Anycubic/Anycubic PET-CF" ], "GFPETG": [ - "Anycubic/Anycubic PETG", "Anycubic/Generic PETG" ], "GFPETG-1": [ @@ -4080,27 +4079,12 @@ "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" ], @@ -4435,9 +4419,6 @@ "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", @@ -4451,9 +4432,7 @@ "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", @@ -4713,6 +4692,9 @@ "OF41QVDH": [ "Flashforge/Flashforge Generic PLA-Silk" ], + "OF43idK2": [ + "Creality/Creality Generic PLA Matte" + ], "OF48G7He": [ "Qidi/QIDI PETG Tough 0.8 nozzle" ], @@ -4728,6 +4710,9 @@ "OF4m9A5w": [ "Flashforge/Flashforge Generic HIPS" ], + "OF57IbZT": [ + "Artillery/Artillery PLA Basic" + ], "OF5T1Y9R": [ "Flashforge/Flashforge ABS Basic" ], @@ -4776,6 +4761,9 @@ "OF9sr3Vn": [ "Flashforge/Flashforge PLA Sparkle" ], + "OF9vnvM8": [ + "Artillery/Artillery PETG-CF" + ], "OFAEqlWa": [ "Flashforge/Flashforge Generic PLA-SILK" ], @@ -4785,6 +4773,9 @@ "OFAHagT9": [ "Elegoo/Elegoo Rapid PLA+" ], + "OFAK2XjZ": [ + "InfiMech/Other ABS" + ], "OFAUDGEQ": [ "Qidi/QIDI PLA Rapido Matte" ], @@ -4836,18 +4827,33 @@ "OFE22Uba": [ "Flashforge/Flashforge TPU-90A" ], + "OFEYKrjb": [ + "Artillery/Artillery PETG" + ], + "OFEdyZqS": [ + "Anycubic/Anycubic PLA Luminous" + ], "OFFIL5pD": [ "Qidi/QIDI PA12-CF" ], + "OFFrbsvQ": [ + "InfiMech/Other TPU" + ], "OFG8vHw8": [ "Qidi/Qidi Generic ASA" ], + "OFGb4hPY": [ + "Anycubic/Anycubic PEBA 95A" + ], "OFGfdP6J": [ "Flashforge/FusRock Generic S-Multi" ], "OFHBTqyD": [ "Flashforge/Flashforge PLA Basic" ], + "OFHL32M0": [ + "Anycubic/Anycubic TPU" + ], "OFHtQDC9": [ "Elegoo/Elegoo PLA Basic" ], @@ -4872,6 +4878,9 @@ "OFK820gS": [ "Qidi/QIDI ASA" ], + "OFKDnrjL": [ + "Artillery/Artillery PLA Matte" + ], "OFKWVi10": [ "Flashforge/Flashforge Generic PLA-CF10" ], @@ -4881,6 +4890,9 @@ "OFKjlAbC": [ "Qidi/QIDI UltraPA-CF25" ], + "OFKzh9lx": [ + "InfiMech/InfiMech PLA" + ], "OFL4KniM": [ "Elegoo/Elegoo Rapid TPU 95A" ], @@ -4893,6 +4905,9 @@ "OFLeFaUO": [ "Flashforge/Flashforge Generic PVA" ], + "OFLriDvE": [ + "Creality/Creality Generic PLA High Speed" + ], "OFLxO2Oc": [ "Flashforge/FusRock PET" ], @@ -4914,9 +4929,15 @@ "OFN0pBpo": [ "Qidi/Qidi Generic TPU 95A" ], + "OFNRgSch": [ + "Artillery/Artillery PC" + ], "OFNX5uRT": [ "Qidi/QIDI TPU-Aero" ], + "OFNbajj9": [ + "Creality/Creality Generic ASA-CF" + ], "OFOSzSuh": [ "Flashforge/Flashforge PA-CF" ], @@ -4926,6 +4947,9 @@ "OFOkTA0C": [ "Elegoo/Elegoo PETG Translucent" ], + "OFOp3Oef": [ + "Anycubic/Generic ABS" + ], "OFOysPuE": [ "Qidi/QIDI TPU-GF" ], @@ -4968,6 +4992,9 @@ "OFRgDMDJ": [ "Flashforge/Flashforge PETG Transparent" ], + "OFS3HrR1": [ + "InfiMech/Other PLA" + ], "OFSCm6pJ": [ "Elegoo/Elegoo PET-CF" ], @@ -4977,24 +5004,42 @@ "OFSdF3B1": [ "Flashforge/FusRock PAHT-CF" ], + "OFSpTWdv": [ + "InfiMech/Other PA-CF" + ], "OFT3TqB6": [ "OrcaFilamentLibrary/Elas ASA" ], "OFTa6gPH": [ "Flashforge/Flashforge PLA Pro" ], + "OFTbsWVg": [ + "Artillery/Artillery TPU" + ], "OFToBodi": [ "Qidi/QIDI ABS Rapido Metal" ], + "OFTsGps3": [ + "InfiMech/InfiMech PC" + ], + "OFTszIHE": [ + "Creality/Creality Generic PLA Silk" + ], "OFUJw3Lx": [ "Qidi/QIDI PEBA 95A" ], + "OFUYjPc4": [ + "Dremel/Dremel Generic PLA" + ], "OFUkpobY": [ "Qidi/QIDI PAHT-CF" ], "OFV4hD1o": [ "Qidi/QIDI PLA Rapido Metal" ], + "OFVBNoov": [ + "InfiMech/InfiMech ABS" + ], "OFVLuVmD": [ "OrcaFilamentLibrary/Elegoo Rapid PETG" ], @@ -5016,6 +5061,9 @@ "OFWyCd0Y": [ "Qidi/QIDI Support For PET/PA" ], + "OFXA8vy9": [ + "Artillery/Artillery PLA Basic+" + ], "OFXNO5Of": [ "Qidi/QIDI PLA Rapido 0.2 nozzle" ], @@ -5058,6 +5106,9 @@ "OFZhdVnP": [ "OrcaFilamentLibrary/eSUN PLA-Basic" ], + "OFZjZ1k7": [ + "Creality/Creality HF Generic PLA" + ], "OFa5cFqE": [ "Qidi/QIDI Support For PAHT" ], @@ -5067,6 +5118,12 @@ "OFaKIoH2": [ "Elegoo/Elegoo PLA Sparkle" ], + "OFaKZ6JI": [ + "Anycubic/Generic PETG Basic" + ], + "OFb3UzMZ": [ + "InfiMech/InfiMech PA-CF" + ], "OFbK5wve": [ "Prusa/Prusa Generic TPU HF" ], @@ -5079,6 +5136,9 @@ "OFbgt3u3": [ "OrcaFilamentLibrary/Elas PLA Basic" ], + "OFc2SnEp": [ + "Artillery/Artillery PVA" + ], "OFceJcLf": [ "Qidi/PolyLite PLA" ], @@ -5088,9 +5148,15 @@ "OFcy60o4": [ "Flashforge/Flashforge ASA Basic" ], + "OFdLGn0R": [ + "Creality/Creality Generic PLA Wood" + ], "OFdNORGt": [ "Flashforge/Flashforge ASA-GF" ], + "OFdSGkUG": [ + "Anycubic/Anycubic PETG" + ], "OFdhVJql": [ "Flashforge/Flashforge PLA Buint Ti" ], @@ -5100,12 +5166,18 @@ "OFeWMAGH": [ "Flashforge/Flashforge HS PLA Burnt Ti" ], + "OFefhSuj": [ + "InfiMech/InfiMech PLA Hyper" + ], "OFenGPBR": [ "OrcaFilamentLibrary/Elegoo PETG Translucent" ], "OFeybQvK": [ "Qidi/QIDI ABS Rapido 0.2 nozzle" ], + "OFf2b9wu": [ + "Anycubic/Anycubic ABS" + ], "OFfB1QKi": [ "OrcaFilamentLibrary/Generic PETG HF" ], @@ -5115,12 +5187,24 @@ "OFfdxQok": [ "Qidi/Generic PLA+" ], + "OFfkPhrJ": [ + "Creality/Creality HF Generic Speed PLA" + ], "OFftQOek": [ "Flashforge/Flashforge PLA Matte" ], "OFgJX0Fc": [ "Flashforge/FlashForge PPS" ], + "OFgK2Xvv": [ + "Anycubic/Anycubic PLA" + ], + "OFgSK1hL": [ + "Anycubic/Anycubic PLA High Speed" + ], + "OFgrGfPy": [ + "Anycubic/Anycubic PLA+" + ], "OFh5GUhZ": [ "Elegoo/Elegoo PLA Wood" ], @@ -5148,6 +5232,9 @@ "OFjFPhUC": [ "Prusa/Prusament rPLA" ], + "OFjdTQd6": [ + "Anycubic/Anycubic PLA Silk" + ], "OFjepy6j": [ "Flashforge/FusRock Generic S-PAHT" ], @@ -5190,6 +5277,9 @@ "OFmOWC74": [ "Elegoo/Elegoo PETG PRO" ], + "OFmcJsqt": [ + "InfiMech/InfiMech TPU" + ], "OFmduKVr": [ "Flashforge/FlashForge PPS-CF" ], @@ -5199,12 +5289,21 @@ "OFmgesco": [ "Flashforge/Flashforge TPU 65D" ], + "OFnLnZQo": [ + "Cubicon/Cubicon PC" + ], + "OFnY9ovF": [ + "Artillery/Artillery PA-CF" + ], "OFnj7bPm": [ "Qidi/QIDI ABS Rapido 0.6 nozzle" ], "OFnsWQTp": [ "Qidi/QIDI WOOD Rapido" ], + "OFnyirh9": [ + "Artillery/Artillery PLA Silk" + ], "OFo4VB3w": [ "Elegoo/Generic ABS-CF" ], @@ -5223,6 +5322,9 @@ "OFp8lkYD": [ "Flashforge/Flashforge PPA-GF" ], + "OFp90N8a": [ + "Artillery/Artillery PA" + ], "OFpHq9gJ": [ "Prusa/Prusament PETG" ], @@ -5244,6 +5346,9 @@ "OFqyIUDi": [ "Qidi/Qidi PLA-CF" ], + "OFrbbq6E": [ + "InfiMech/Other PLA Hyper" + ], "OFrgQ1Ns": [ "OrcaFilamentLibrary/Elas PLA Pro" ], @@ -5253,6 +5358,9 @@ "OFs6lLH7": [ "OrcaFilamentLibrary/Elegoo PLA Silk" ], + "OFsCOJv7": [ + "Anycubic/Generic TPU" + ], "OFsKqcQW": [ "OrcaFilamentLibrary/Elegoo PLA PRO" ], @@ -5265,6 +5373,9 @@ "OFsgANe3": [ "Flashforge/Flashforge PAHT-CF" ], + "OFt5bvKK": [ + "Artillery/Artillery PETG Basic" + ], "OFt9AiN5": [ "Flashforge/Polymaker CoPA" ], @@ -5274,6 +5385,12 @@ "OFtJMczs": [ "Flashforge/Flashforge TPU-64D" ], + "OFtXBjvb": [ + "Artillery/Artillery PLA Tough" + ], + "OFtmT4Nd": [ + "Artillery/Artillery ASA" + ], "OFuPC4S8": [ "Elegoo/Elegoo PLA-CF" ], @@ -5286,6 +5403,9 @@ "OFuidAEg": [ "Qidi/Bambu ABS" ], + "OFuq9tqb": [ + "InfiMech/InfiMech PLA Basic" + ], "OFuswXlp": [ "Flashforge/Generic TPU 85A" ], @@ -5301,15 +5421,36 @@ "OFv8SRZh": [ "Prusa/Prusa Generic PLA-CF" ], + "OFvGSn0l": [ + "Creality/Creality Generic PETG-CF" + ], "OFvN3117": [ "Qidi/QIDI PLA Matte Basic" ], + "OFvYfHPB": [ + "Anycubic/Anycubic PLA Matte" + ], + "OFvaXhYD": [ + "InfiMech/InfiMech PETG" + ], "OFviQ9lH": [ "Flashforge/Flashforge Generic TPU" ], "OFvsS7Fb": [ "Flashforge/Generic TPU-64D" ], + "OFvxvkAd": [ + "Artillery/Artillery PLA-CF" + ], + "OFw05rkF": [ + "InfiMech/Other PETG" + ], + "OFw0qp7w": [ + "Artillery/Artillery PET" + ], + "OFw1S8lL": [ + "Artillery/Artillery ABS" + ], "OFw4OHWE": [ "OrcaFilamentLibrary/Elas PETG Basic" ], @@ -5328,6 +5469,9 @@ "OFxjFYxE": [ "Elegoo/Elegoo PETG HF" ], + "OFyD1Zo8": [ + "InfiMech/Other PC" + ], "OFyoW5W2": [ "Flashforge/Flashforge PLA Color Change" ], @@ -5693,19 +5837,6 @@ "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" ], @@ -5728,24 +5859,14 @@ "Cubicon/Cubicon PETG" ], "P510cfd0": [ - "Cubicon/Cubicon PA-CF", - "Cubicon/Cubicon PC" + "Cubicon/Cubicon PA-CF" ], "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" + "Artillery/Artillery PLA" ], "Prusa Generic ABS @CORE One": [ "Prusa/Prusa Generic ABS" @@ -6661,10 +6782,13 @@ "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/Artillery ABS @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery ABS @Artillery M1 Pro 0.4 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.4 nozzle", "Artillery/Artillery ASA @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery ASA @Artillery M1 Pro 0.8 nozzle", "Artillery/Artillery Generic ABS", @@ -6673,21 +6797,50 @@ "Artillery/Artillery Generic PLA", "Artillery/Artillery Generic PLA-CF", "Artillery/Artillery Generic TPU", + "Artillery/Artillery PA @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PET @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PET @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PET @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery PET @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PETG", "Artillery/Artillery PETG @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PETG @Artillery M1 Pro 0.4 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.4 nozzle", "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PETG-CF @Artillery M1 Pro 0.4 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 PLA Basic", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Matte", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Silk", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle", + "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery PLA Tough", + "Artillery/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PVA @Artillery M1 Pro 0.2 nozzle", + "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PVA @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery PVA @Artillery M1 Pro 0.8 nozzle", + "Artillery/Artillery TPU", + "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery TPU @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery TPU @Artillery M1 Pro 0.8 nozzle", "BBL/Generic SBS", @@ -6837,12 +6990,27 @@ "Creality/Creality Generic ABS @Ender-5Max-all", "Creality/Creality Generic ASA", "Creality/Creality Generic ASA @Ender-5Max-all", + "Creality/Creality Generic ASA-CF @Hi-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 PETG-CF @Hi-all", "Creality/Creality Generic PLA", "Creality/Creality Generic PLA @Ender-5Max-all", + "Creality/Creality Generic PLA High Speed @Ender-3V3-all", + "Creality/Creality Generic PLA High Speed @Hi-all", + "Creality/Creality Generic PLA High Speed @K1-all", + "Creality/Creality Generic PLA High Speed @K2-all", + "Creality/Creality Generic PLA Matte @Ender-3V3-all", + "Creality/Creality Generic PLA Matte @Hi-all", + "Creality/Creality Generic PLA Matte @K1-all", + "Creality/Creality Generic PLA Matte @K2-all", + "Creality/Creality Generic PLA Silk @Ender-3V3-all", + "Creality/Creality Generic PLA Silk @Hi-all", + "Creality/Creality Generic PLA Silk @K1-all", + "Creality/Creality Generic PLA Silk @K2-all", + "Creality/Creality Generic PLA Wood @Hi-all", "Creality/Creality Generic PLA-CF", "Creality/Creality Generic TPU", "Creality/Creality Generic TPU @Ender-5Max-all", @@ -7238,15 +7406,6 @@ "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", @@ -7258,6 +7417,9 @@ "DeltaMaker/DeltaMaker Generic PLA", "DeltaMaker/DeltaMaker Generic TPU", "Dremel/Dremel Generic PLA", + "Dremel/Dremel Generic PLA @3D20 all", + "Dremel/Dremel Generic PLA @3D40 all", + "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Generic ABS-CF @Elegoo Centauri", "Elegoo/Generic PA6-CF @Elegoo", "Elegoo/Generic PC-CF @Elegoo", diff --git a/scripts/retired_filament_ids.json b/scripts/retired_filament_ids.json index d4c5f3faf5..d71f89d9ac 100644 --- a/scripts/retired_filament_ids.json +++ b/scripts/retired_filament_ids.json @@ -1,3 +1,47 @@ { - "retired": {} + "retired": { + "GFABS": [ + "Anycubic/Anycubic ABS" + ], + "GFL92": [ + "Anycubic/Anycubic PLA" + ], + "GFL93": [ + "Anycubic/Anycubic PLA+" + ], + "GFPLA": [ + "Anycubic/Anycubic PLA" + ], + "GFPLA High Speed": [ + "Anycubic/Anycubic PLA High Speed" + ], + "GFPLA Matte": [ + "Anycubic/Anycubic PLA Matte" + ], + "GFPLA Silk": [ + "Anycubic/Anycubic PLA Silk" + ], + "GFPLA+": [ + "Anycubic/Anycubic PLA+" + ], + "P11851ba": [ + "Artillery/Artillery PET" + ], + "P284941e": [ + "Artillery/Artillery PETG", + "Artillery/Artillery PETG Basic" + ], + "P2fbf0c0": [ + "Artillery/Artillery TPU" + ], + "P39db358": [ + "Artillery/Artillery ABS" + ], + "P8163162": [ + "Artillery/Artillery PVA" + ], + "P87436f6": [ + "Artillery/Artillery ASA" + ] + } } From ee125975cffca12fb9e29e88b8c166417a83679f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:14:27 +0800 Subject: [PATCH 009/208] Snapmaker, FlyingBear, Sovol: family filament_ids Phase 2 long-tail migrations (25 collision groups), zero effective-config change: Snapmaker (11 + the tree's one live library-cross group): three Benchy demo presets coexisting via compatible_prints gating (invisible to the -f check) get their own mints; the TPE/TPU-High-Flow lines riding shared bases get family mints across the plain/U1/Dual/J1 variants; 'Snapmaker PLA Matte @U1' minted; 'Snapmaker PET @Dual' unified onto its own family root id; 'Snapmaker PA-CF @U1' had its compatible_printers triple-duplicated (self-collision) - deduplicated. The PolyTerra J1/Dual PLA presets that re-exposed the library's PolyTerra PLA (alias rename) get family mints while 'PolyTerra PLA @0.2 nozzle' keeps the library id via inheritance. Fiberon families keep their authentic byte-copied Bambu catalog ids (sanctioned multi-vendor brand sharing, frozen in the snapshot). FlyingBear (8): every preset carries an own-key Bambu generic id; owners keep theirs, 15 impostor families (S1/Ghost7/Hyper lines) re-minted family-atomically - '@S1' and '@Ghost7' siblings move together (20 edits). Sovol (6): the GFL99 copy-paste epidemic. The five same-alias 'Generic * @Sovol SV08 MAX' tunings just DROP their wrong own-id lines so the library family ids flow through inheritance (alias-shadow-verified); Generic PLA Silk / SUNLU PETG adopt their library family ids as own keys (their inherits point at other families, so deletion would collide); the 21 dedicated Sovol/Polymaker families get fresh mints (23 edits). 'Sovol SV07 PLA' keeps GFL99 unambiguously (sole claimant on SV07), frozen in the snapshot. Verified: config-equivalence gate zero unexpected diffs; extra check exit 0; --check exit 0; validator -l 2 exit 0; extended -f -v Snapmaker/FlyingBear/ Sovol all exit 0. --- .../filament/FlyingBear PLA Hyper.json | 2 +- .../Ghost7/FlyingBear ABS @Ghost7.json | 2 +- .../Ghost7/FlyingBear PA-CF @Ghost7.json | 2 +- .../Ghost7/FlyingBear PC @Ghost7.json | 2 +- .../Ghost7/FlyingBear PLA Basic @Ghost7.json | 2 +- .../Ghost7/FlyingBear PLA Hyper @Ghost7.json | 2 +- .../filament/S1/FlyingBear ABS @S1.json | 2 +- .../filament/S1/FlyingBear PA-CF @S1.json | 2 +- .../filament/S1/FlyingBear PC @S1.json | 2 +- .../filament/S1/FlyingBear PETG @S1.json | 2 +- .../filament/S1/FlyingBear PLA @S1.json | 2 +- .../filament/S1/FlyingBear PLA Hyper @S1.json | 2 +- .../filament/S1/FlyingBear TPU @S1.json | 2 +- .../FlyingBear/filament/S1/Other ABS @S1.json | 2 +- .../filament/S1/Other PA-CF @S1.json | 2 +- .../FlyingBear/filament/S1/Other PC @S1.json | 2 +- .../filament/S1/Other PETG @S1.json | 2 +- .../FlyingBear/filament/S1/Other PLA @S1.json | 2 +- .../filament/S1/Other PLA Hyper @S1.json | 2 +- .../FlyingBear/filament/S1/Other TPU @S1.json | 2 +- .../PolyTerra Dual PLA @0.2 nozzle.json | 1 + .../PolyTerra J1 PLA @0.2 nozzle.json | 1 + .../filament/Polymaker/PolyTerra J1 PLA.json | 1 + .../filament/Snapmaker ABS Benchy @U1.json | 1 + .../filament/Snapmaker Dual ABS Benchy.json | 1 + .../filament/Snapmaker Dual TPE.json | 1 + .../Snapmaker Dual TPU High-Flow.json | 1 + .../filament/Snapmaker J1 ABS Benchy.json | 1 + .../Snapmaker/filament/Snapmaker J1 TPE.json | 1 + .../filament/Snapmaker J1 TPU High-Flow.json | 1 + .../filament/Snapmaker PA-CF @U1.json | 2 - .../filament/Snapmaker PET @Dual.json | 1 + .../Snapmaker PLA Matte @U1 base.json | 2 +- .../filament/Snapmaker PLA Matte @U1.json | 1 + .../Snapmaker/filament/Snapmaker TPE @U1.json | 1 + .../Snapmaker/filament/Snapmaker TPE.json | 1 + .../filament/Snapmaker TPU High-Flow @U1.json | 1 + .../filament/Generic ABS @Sovol SV08 MAX.json | 1 - .../filament/Generic PC @Sovol SV08 MAX.json | 1 - .../Generic PETG @Sovol SV08 MAX.json | 1 - .../filament/Generic PLA @Sovol SV08 MAX.json | 1 - .../Generic PLA Silk @Sovol SV08 MAX.json | 2 +- .../filament/Generic TPU @Sovol SV08 MAX.json | 1 - .../Polymaker PETG @Sovol SV08 MAX.json | 2 +- .../filament/SUNLU PETG @Sovol SV08 MAX.json | 2 +- .../Sovol/filament/Sovol SV06 ACE ABS.json | 2 +- .../Sovol/filament/Sovol SV06 ACE PETG.json | 2 +- .../Sovol/filament/Sovol SV06 ACE PLA.json | 2 +- .../Sovol/filament/Sovol SV06 ACE TPU.json | 2 +- .../filament/Sovol SV06 Plus ACE ABS.json | 2 +- .../filament/Sovol SV06 Plus ACE PETG.json | 2 +- .../filament/Sovol SV06 Plus ACE PLA.json | 2 +- .../filament/Sovol SV06 Plus ACE TPU.json | 2 +- .../Sovol/filament/Sovol SV08 ABS.json | 2 +- .../Sovol/filament/Sovol SV08 PETG.json | 2 +- .../Sovol SV08 PLA @SV08 0.2 nozzle.json | 2 +- .../Sovol/filament/Sovol SV08 PLA.json | 2 +- .../Sovol/filament/Sovol SV08 TPU.json | 2 +- .../Sovol/filament/Sovol Zero ABS.json | 2 +- .../Sovol/filament/Sovol Zero PC.json | 2 +- .../filament/Sovol Zero PETG HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PETG.json | 2 +- .../Sovol Zero PLA Basic HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PLA Basic.json | 2 +- .../Sovol Zero PLA Silk HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PLA Silk.json | 2 +- .../Sovol/filament/Sovol Zero TPU.json | 2 +- scripts/filament_id_snapshot.json | 282 ++++++++++++------ 68 files changed, 260 insertions(+), 136 deletions(-) diff --git a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json index 6d3f9019b2..eca01c7a14 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "72RZHGo7eACm2tN5", - "filament_id": "GFL99", + "filament_id": "OFNz8rrn", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json index 814a100880..5147461208 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @Ghost7", "from": "system", "setting_id": "UyTzid0zVMCxSrgx", - "filament_id": "GFB99", + "filament_id": "OFnMW5jr", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json index ecbff8839e..5f2f9522fb 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @Ghost7", "from": "system", "setting_id": "NZwDOWmMdBYEejNQ", - "filament_id": "GFN98", + "filament_id": "OFCKK3u9", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json index 5a72ae3680..96f7e5a026 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @Ghost7", "from": "system", "setting_id": "QYOEUrnmNMUcVOVF", - "filament_id": "GFC99", + "filament_id": "OF4jILJA", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json index 41f16faf65..c970880f0c 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json @@ -5,7 +5,7 @@ "renamed_from": "FlyingBear PLA @Ghost7", "from": "system", "setting_id": "3JBTG6IDrBCnvIhf", - "filament_id": "GFL99", + "filament_id": "OF50NUZI", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json index 488cda963c..6e44f41595 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @Ghost7", "from": "system", "setting_id": "qQZUolZHgJxgLo17", - "filament_id": "GFL99", + "filament_id": "OFNz8rrn", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json index a04e655f4b..af609d3348 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @S1", "from": "system", "setting_id": "7dtepGnoDDAdPtUh", - "filament_id": "GFB99", + "filament_id": "OFnMW5jr", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json index f24c0d882e..c94440b570 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @S1", "from": "system", "setting_id": "CLggyaDcebZSbqIH", - "filament_id": "GFN98", + "filament_id": "OFCKK3u9", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json index 54fb8a7ca1..41c4c28166 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @S1", "from": "system", "setting_id": "bPeSARy9AGqM8Y32", - "filament_id": "GFC99", + "filament_id": "OF4jILJA", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json index 77bc4b151f..3145034b51 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @S1", "from": "system", "setting_id": "yKU5mMW0nKvNH98B", - "filament_id": "GFG99", + "filament_id": "OFg4N6ZL", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json index 3c3fbd5af8..7ded765608 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @S1", "from": "system", "setting_id": "k58jL17n8cOla3Gd", - "filament_id": "GFL99", + "filament_id": "OFBGxHgT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json index 06148f4f70..f422d04c4e 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @S1", "from": "system", "setting_id": "h8XGgMBjEwxNkldf", - "filament_id": "GFL99", + "filament_id": "OFNz8rrn", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json index 2cd4a9e943..57c0c169d3 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @S1", "from": "system", "setting_id": "IVFpAlGo8KButueJ", - "filament_id": "GFU99", + "filament_id": "OFYfZgxU", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json index 7e37ab1996..9b28644704 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @S1", "from": "system", "setting_id": "Nadd5NX7eDvEnlKO", - "filament_id": "GFB99", + "filament_id": "OFVJXE4n", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json index 8eff7046ea..074988bb61 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @S1", "from": "system", "setting_id": "sSKkzXv1cn33fF7p", - "filament_id": "GFN98", + "filament_id": "OFLiTjQK", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json index 9a09e1c0d5..47bc577217 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @S1", "from": "system", "setting_id": "mHuxaHppNFZbldHD", - "filament_id": "GFC99", + "filament_id": "OFTbdJyT", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json index b610388077..bc460077c8 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @S1", "from": "system", "setting_id": "Ko5q6BgADth36RJC", - "filament_id": "GFG99", + "filament_id": "OFuPN3iW", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json index 1df8312686..79007e6e83 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @S1", "from": "system", "setting_id": "sayo3sMQKH4ZdhEk", - "filament_id": "GFL99", + "filament_id": "OF5Ugv12", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json index b9913afec4..58243ad2bc 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @S1", "from": "system", "setting_id": "2QHCKH0yDmBzpQnY", - "filament_id": "GFL99", + "filament_id": "OFFmJ8aR", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json index aa56b7f0f7..2c3632740e 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @S1", "from": "system", "setting_id": "wh8PHrEbFYKsQxo0", - "filament_id": "GFU99", + "filament_id": "OFvOhSjO", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json index b45068dd52..bdadb828e9 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OF17cONC", "instantiation": "true", "name": "PolyTerra Dual PLA @0.2 nozzle", "setting_id": "UQYgjH1uVxf3d2Nv", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json index dd4f969f62..6062914ff0 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OFjZw7k1", "instantiation": "true", "name": "PolyTerra J1 PLA @0.2 nozzle", "setting_id": "mxKHxGmBZzPLS82O", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json index 7b66438058..1c23dc5fb4 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OFjZw7k1", "instantiation": "true", "name": "PolyTerra J1 PLA", "setting_id": "4MZWZX7QPBzxdEGj", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json index db8dea187b..a0e8b152b7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker ABS @U1 base", "from": "system", "setting_id": "xszx4XRGrp88OdP8", + "filament_id": "OFgtZjeX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json index e42e9efc4a..dd1863eac8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual ABS @base", "from": "system", "setting_id": "YMUFsOzEISsMqCLe", + "filament_id": "OFxxa5yn", "instantiation": "true", "compatible_printers": [ "Snapmaker Artisan (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json index f29f3f2189..98b7787775 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "KoZqZ4l1tYZ99JYz", + "filament_id": "OFAbsMuV", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json index 7db3a84d21..2696168f9d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "D1vA7cdI5kghtrxf", + "filament_id": "OF0Ee2jQ", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json index 4b3dcc5e2f..c85da00ba2 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 ABS @base", "from": "system", "setting_id": "b1Z94AhG8viXuDsq", + "filament_id": "OFePPmng", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json index b3c6a49434..80c1ff3650 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "6N7VB3mKAShGVYL3", + "filament_id": "OFChH9xu", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json index 4186cea511..81cc01669e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "wdN8j0Zv2bJ29XHA", + "filament_id": "OFKhtNBx", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json index 402b5785dd..b2dc562d3b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json @@ -6,8 +6,6 @@ "setting_id": "8aP6ye4aeOS7qKpG", "instantiation": "true", "compatible_printers": [ - "Snapmaker U1 (0.4 nozzle)", - "Snapmaker U1 (0.4 nozzle)", "Snapmaker U1 (0.4 nozzle)" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json index 4bf208ea44..4eb1143082 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual PET @base", "from": "system", "setting_id": "3xJOWlbt2feyRKTV", + "filament_id": "2549587591", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json index 3ffb3314a1..ac2ea870ea 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA Matte @U1 base", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFlbn4FY", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json index fcb1d74c92..67c1ebd2e3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker PLA @U1 base", "from": "system", "setting_id": "uAhykL5ap1DAKacf", + "filament_id": "OFlbn4FY", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json index 846f7acff9..59f4b2af8e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "aqE9IR6dFd2MQLXR", + "filament_id": "OF70DKqH", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json index 861f11ff09..78b8f2484f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @base", "from": "system", "setting_id": "pFGj8sxkPmk10bP4", + "filament_id": "OF70DKqH", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json index d338d8e4b9..96252c2de1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "5AXIg8WCdcd74S5v", + "filament_id": "OFtet8ui", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)", diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json index 8e043a5a48..8532e5bee0 100644 --- a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "7julgReKEcp5tg0d", "name": "Generic ABS @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json index ec1fefce99..242c320a7d 100644 --- a/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "UPoqjanrvN173sVS", "name": "Generic PC @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json index d23224b8f9..550d30ccf5 100644 --- a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "ib7AtR3tQ2dSrFNP", "name": "Generic PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json index 7ef7748ec1..b29bc1b069 100644 --- a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "kcFykpuuxMy7KwNu", "name": "Generic PLA @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json index 40f10eb1ed..9fe50fc1b6 100644 --- a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OGFL96", "setting_id": "WAHQZmwHoS4WjoTx", "name": "Generic PLA Silk @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json index 1c115fe8aa..a65978a50e 100644 --- a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "hQByQ7FIhAiytli8", "name": "Generic TPU @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json index 02b335f910..2d9196c316 100644 --- a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF22AxCm", "setting_id": "JBFKMaFtd7kO8Ksq", "name": "Polymaker PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json index 35ee5bcd03..9df001b6c9 100644 --- a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OGFSNL08", "setting_id": "x68SPQCqVacBSGd5", "name": "SUNLU PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json index c77c7812b6..b904edd7d4 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "okqqqm0P8ehlQuDY", - "filament_id": "GFL99", + "filament_id": "OFtemzzw", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json index b8151d47f4..82969be3fb 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "5mtng0PM8CMglpD7", - "filament_id": "GFL99", + "filament_id": "OFGFZhWu", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json index da10d948ab..317c30a966 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "kgtcANsbfwSbdgOh", - "filament_id": "GFL99", + "filament_id": "OFic2uNr", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json index 3d560d9905..c4c0397846 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ERN0ozxmPhIMze0i", - "filament_id": "GFL99", + "filament_id": "OFglpvEE", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json index 42652117ef..9a2b1e5cae 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "Me1iSJmocW35ClmN", - "filament_id": "GFL99", + "filament_id": "OF5Bmdtg", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json index 483d28af10..87f012c539 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "ZrAm6Nm4FI7p4PgC", - "filament_id": "GFL99", + "filament_id": "OFgMGSpF", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json index ef249ea17f..806b3a35fd 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "YEEOGJYm4Z8W4vGV", - "filament_id": "GFL99", + "filament_id": "OFSoZBK2", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json index 2589b13e37..f19fb592b9 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "oNucKLcIdxwBPpUN", - "filament_id": "GFL99", + "filament_id": "OFsmPFwh", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json index 0bb16950d3..f35a2372a1 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "nq4vvrWqKjWKELEz", - "filament_id": "GFL99", + "filament_id": "OFKH15Hd", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json index 4fe3cc866f..81e3e2db41 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "CWd7KULbXvJeTTEy", - "filament_id": "GFL99", + "filament_id": "OFIl3ar9", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json index 046d787dc5..b013826043 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "qmnuve3FgzrXgjPA", - "filament_id": "GFL99", + "filament_id": "OFcsHCy4", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json index 2132557b68..cb32bceb71 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "nnU0222BS0F1c5ki", - "filament_id": "GFL99", + "filament_id": "OFcsHCy4", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json index a1d0cb0fdc..f93c734acc 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "tpBbCQhcSJsBesnG", - "filament_id": "GFL99", + "filament_id": "OFY1U4uM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero ABS.json b/resources/profiles/Sovol/filament/Sovol Zero ABS.json index ecd862970a..16fabab6e8 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero ABS.json +++ b/resources/profiles/Sovol/filament/Sovol Zero ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "9pI7op6U4azpfNfb", - "filament_id": "GFL99", + "filament_id": "OFgNzLVh", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PC.json b/resources/profiles/Sovol/filament/Sovol Zero PC.json index ac866620dd..9c82b6a60b 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PC.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PC.json @@ -4,7 +4,7 @@ "inherits": "Generic PC @System", "from": "system", "setting_id": "vuuZXnlrMgUKtSI0", - "filament_id": "GFL99", + "filament_id": "OFtwA91m", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json index a458307c64..569c670407 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "AfxHmpdOkMDJa2fk", - "filament_id": "GFL99", + "filament_id": "OFk6T5YH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG.json b/resources/profiles/Sovol/filament/Sovol Zero PETG.json index e7b328ac6f..db83f4d2e4 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "75OJvkXlmbcaHQfW", - "filament_id": "GFL99", + "filament_id": "OFjurQ3I", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json index f7e634386c..b3d235da7d 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "i9wDnSEIrOBPbOZl", - "filament_id": "GFL99", + "filament_id": "OFtL05hE", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json index b7fb7f63e8..93c2382024 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "ZVvOaMwZ7noevsYf", - "filament_id": "GFL99", + "filament_id": "OF5J2axC", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json index d6b31b283d..2db612ff8f 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "XxEJBNFLRltR2Xwn", - "filament_id": "GFL99", + "filament_id": "OFP4poIv", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json index 64c8b8a465..d86d68212d 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "QowhGzqSwGQoAp1a", - "filament_id": "GFL99", + "filament_id": "OF2tvNYA", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero TPU.json b/resources/profiles/Sovol/filament/Sovol Zero TPU.json index 307a58ff01..d2f9247ada 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero TPU.json +++ b/resources/profiles/Sovol/filament/Sovol Zero TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "iZHXx0RyRO096L0z", - "filament_id": "GFL99", + "filament_id": "OFO5R9KJ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 9145cab4da..7272d33806 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1882,6 +1882,9 @@ "Snapmaker/PolyLite PLA Pro Metallic @Snapmaker U1 base", "Snapmaker/PolyLite PLA Starlight @Snapmaker U1 base", "Snapmaker/PolyLite PLA Translucent @Snapmaker U1 base", + "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", + "Snapmaker/PolyTerra J1 PLA", + "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", "Snapmaker/PolyTerra PLA @Snapmaker U1 base", "Snapmaker/PolyTerra PLA Marble @Snapmaker U1 base", "Snapmaker/PolyTerra PLA+ @Snapmaker U1 base", @@ -1890,6 +1893,8 @@ "Snapmaker/Polymaker PLA @Snapmaker U1 base", "Snapmaker/Polymaker PLA Pro @Snapmaker U1 base", "Snapmaker/Polymaker PLA Pro Metallic @Snapmaker U1 base", + "Snapmaker/Snapmaker ABS Benchy @U1", + "Snapmaker/Snapmaker Dual ABS Benchy", "Snapmaker/Snapmaker Dual PA-CF @base", "Snapmaker/Snapmaker Dual PET @base", "Snapmaker/Snapmaker Dual PLA @base", @@ -1898,6 +1903,9 @@ "Snapmaker/Snapmaker Dual PLA Metal @base", "Snapmaker/Snapmaker Dual PLA Silk @base", "Snapmaker/Snapmaker Dual PLA-CF @base", + "Snapmaker/Snapmaker Dual TPE", + "Snapmaker/Snapmaker Dual TPU High-Flow", + "Snapmaker/Snapmaker J1 ABS Benchy", "Snapmaker/Snapmaker J1 PA-CF @base", "Snapmaker/Snapmaker J1 PET @base", "Snapmaker/Snapmaker J1 PLA @base", @@ -1906,25 +1914,27 @@ "Snapmaker/Snapmaker J1 PLA Metal @base", "Snapmaker/Snapmaker J1 PLA Silk @base", "Snapmaker/Snapmaker J1 PLA-CF @base", + "Snapmaker/Snapmaker J1 TPE", + "Snapmaker/Snapmaker J1 TPU High-Flow", "Snapmaker/Snapmaker PA-CF @U1 base", "Snapmaker/Snapmaker PA-CF @base", + "Snapmaker/Snapmaker PET @Dual", "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 Matte @U1", "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", + "Snapmaker/Snapmaker TPE", + "Snapmaker/Snapmaker TPE @U1", + "Snapmaker/Snapmaker TPU High-Flow @U1", "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", @@ -2287,8 +2297,7 @@ "Snapmaker/Snapmaker J1 PA-CF" ], "1223824394": [ - "Snapmaker/Snapmaker J1 ABS", - "Snapmaker/Snapmaker J1 ABS Benchy" + "Snapmaker/Snapmaker J1 ABS" ], "1247172706": [ "Snapmaker/Snapmaker Dual ASA" @@ -2317,8 +2326,7 @@ "Snapmaker/Snapmaker Dual PLA" ], "14170311270": [ - "Snapmaker/Snapmaker PLA", - "Snapmaker/Snapmaker PLA Matte" + "Snapmaker/Snapmaker PLA" ], "141703112701": [ "Snapmaker/Snapmaker PLA SnapSpeed" @@ -2330,7 +2338,6 @@ "Snapmaker/Snapmaker J1 ASA" ], "1480063856": [ - "Snapmaker/Snapmaker TPE", "Snapmaker/Snapmaker TPU" ], "15001": [ @@ -2346,12 +2353,10 @@ "Snapmaker/Snapmaker PLA Silk" ], "168223792": [ - "Snapmaker/Snapmaker Dual ABS", - "Snapmaker/Snapmaker Dual ABS Benchy" + "Snapmaker/Snapmaker Dual ABS" ], "1682237920": [ - "Snapmaker/Snapmaker ABS", - "Snapmaker/Snapmaker ABS Benchy" + "Snapmaker/Snapmaker ABS" ], "1695556157": [ "Snapmaker/Snapmaker PLA Eco" @@ -2388,8 +2393,7 @@ "Snapmaker/Snapmaker PLA Metal" ], "2128577941": [ - "Snapmaker/Snapmaker Dual PET", - "Snapmaker/Snapmaker PET" + "Snapmaker/Snapmaker Dual PET" ], "21285779410": [ "Snapmaker/Snapmaker PET" @@ -2410,14 +2414,10 @@ "Creality/Hyper Marble" ], "2971656290": [ - "Snapmaker/Snapmaker Dual TPE", - "Snapmaker/Snapmaker Dual TPU", - "Snapmaker/Snapmaker Dual TPU High-Flow" + "Snapmaker/Snapmaker Dual TPU" ], "29716562900": [ - "Snapmaker/Snapmaker TPE", - "Snapmaker/Snapmaker TPU", - "Snapmaker/Snapmaker TPU High-Flow" + "Snapmaker/Snapmaker TPU" ], "297165629001": [ "Snapmaker/Snapmaker TPU 95A" @@ -2462,9 +2462,7 @@ "Snapmaker/Snapmaker J1 PLA Metal" ], "4092268632": [ - "Snapmaker/Snapmaker J1 TPE", - "Snapmaker/Snapmaker J1 TPU", - "Snapmaker/Snapmaker J1 TPU High-Flow" + "Snapmaker/Snapmaker J1 TPU" ], "4227461134": [ "Snapmaker/Snapmaker Breakaway Support For PLA", @@ -3280,9 +3278,7 @@ "FLSun/FLSun T1 ABS", "Flashforge/Flashforge Generic ABS", "Flashforge/Generic ABS", - "FlyingBear/FlyingBear ABS", "FlyingBear/FlyingBear Generic ABS", - "FlyingBear/Other ABS", "InfiMech/InfiMech Generic ABS", "Lulzbot/Lulzbot 2.85mm ABS", "OrcaArena/OrcaArena Generic ABS", @@ -3349,8 +3345,6 @@ "Custom/Generic PC", "FLSun/FLSun Generic PC", "FlyingBear/FlyingBear Generic PC", - "FlyingBear/FlyingBear PC", - "FlyingBear/Other PC", "InfiMech/InfiMech Generic PC", "OrcaArena/OrcaArena Generic PC", "Prusa/Prusa Generic PC", @@ -3462,9 +3456,7 @@ "Flashforge/Flashforge Generic PETG", "Flashforge/Generic PETG", "FlyingBear/FlyingBear Generic PETG", - "FlyingBear/FlyingBear PETG", "FlyingBear/FlyingBear PETG Basic", - "FlyingBear/Other PETG", "InfiMech/InfiMech Generic PETG", "Lulzbot/Lulzbot 2.85mm PETG", "MagicMaker/MM Generic PEEK", @@ -3779,11 +3771,6 @@ "Flashforge/Generic PLA", "Flashforge/Generic PLA High Speed", "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", "Lulzbot/Lulzbot 2.85mm PLA", "OrcaArena/OrcaArena Generic PLA", @@ -3799,36 +3786,7 @@ "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", @@ -3916,8 +3874,6 @@ "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", "OrcaArena/OrcaArena Generic PA-CF", "Prusa/Prusament PA-CF", @@ -4428,9 +4384,7 @@ "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 Basic", "OrcaArena/OrcaArena Generic TPU", @@ -4644,6 +4598,9 @@ "OF09vOcG": [ "Elegoo/Elegoo PLA Galaxy" ], + "OF0Ee2jQ": [ + "Snapmaker/Snapmaker Dual TPU High-Flow" + ], "OF0M6QAQ": [ "OrcaFilamentLibrary/Elegoo PLA Galaxy" ], @@ -4671,12 +4628,21 @@ "OF102WKM": [ "OrcaFilamentLibrary/Elegoo PETG PRO" ], + "OF17cONC": [ + "Snapmaker/PolyTerra Dual PLA" + ], "OF1Zypyy": [ "Qidi/QIDI PETG Tough" ], + "OF22AxCm": [ + "Sovol/Polymaker PETG" + ], "OF2UFmOo": [ "Qidi/Bambu PLA" ], + "OF2tvNYA": [ + "Sovol/Sovol Zero PLA Silk" + ], "OF38Hyk4": [ "Flashforge/Flashforge PETG Pro" ], @@ -4707,18 +4673,33 @@ "OF4gzzE4": [ "Qidi/QIDI PET-CF" ], + "OF4jILJA": [ + "FlyingBear/FlyingBear PC" + ], "OF4m9A5w": [ "Flashforge/Flashforge Generic HIPS" ], + "OF50NUZI": [ + "FlyingBear/FlyingBear PLA Basic" + ], "OF57IbZT": [ "Artillery/Artillery PLA Basic" ], + "OF5Bmdtg": [ + "Sovol/Sovol SV06 Plus ACE ABS" + ], + "OF5J2axC": [ + "Sovol/Sovol Zero PLA Basic" + ], "OF5T1Y9R": [ "Flashforge/Flashforge ABS Basic" ], "OF5UUaUM": [ "Qidi/Qidi Generic PLA High Speed" ], + "OF5Ugv12": [ + "FlyingBear/Other PLA" + ], "OF5kwfZu": [ "Flashforge/FusRock Generic NexPA-CF25" ], @@ -4740,6 +4721,9 @@ "OF6XIeUW": [ "Flashforge/Generic PLA-CF10" ], + "OF70DKqH": [ + "Snapmaker/Snapmaker TPE" + ], "OF79FFkO": [ "OrcaFilamentLibrary/Elegoo PC-FR" ], @@ -4779,6 +4763,9 @@ "OFAUDGEQ": [ "Qidi/QIDI PLA Rapido Matte" ], + "OFAbsMuV": [ + "Snapmaker/Snapmaker Dual TPE" + ], "OFAdAYYk": [ "Qidi/QIDI PPS-CF" ], @@ -4794,6 +4781,9 @@ "OFAtydxE": [ "Flashforge/FusRock S-Multi" ], + "OFBGxHgT": [ + "FlyingBear/FlyingBear PLA" + ], "OFBvxnjM": [ "Elegoo/Elegoo PETG-GF" ], @@ -4806,9 +4796,15 @@ "OFCJaXZS": [ "Flashforge/Flashforge PPS" ], + "OFCKK3u9": [ + "FlyingBear/FlyingBear PA-CF" + ], "OFCgpxn2": [ "Prusa/Prusa Generic ABS HF" ], + "OFChH9xu": [ + "Snapmaker/Snapmaker J1 TPE" + ], "OFD5e0sH": [ "OrcaFilamentLibrary/Elegoo Rapid PLA+" ], @@ -4836,12 +4832,18 @@ "OFFIL5pD": [ "Qidi/QIDI PA12-CF" ], + "OFFmJ8aR": [ + "FlyingBear/Other PLA Hyper" + ], "OFFrbsvQ": [ "InfiMech/Other TPU" ], "OFG8vHw8": [ "Qidi/Qidi Generic ASA" ], + "OFGFZhWu": [ + "Sovol/Sovol SV06 ACE PETG" + ], "OFGb4hPY": [ "Anycubic/Anycubic PEBA 95A" ], @@ -4863,6 +4865,9 @@ "OFIGHU7W": [ "OrcaFilamentLibrary/Elegoo PETG-CF" ], + "OFIl3ar9": [ + "Sovol/Sovol SV08 PETG" + ], "OFJIImD5": [ "OrcaFilamentLibrary/Elegoo PET-CF" ], @@ -4881,12 +4886,18 @@ "OFKDnrjL": [ "Artillery/Artillery PLA Matte" ], + "OFKH15Hd": [ + "Sovol/Sovol SV08 ABS" + ], "OFKWVi10": [ "Flashforge/Flashforge Generic PLA-CF10" ], "OFKZH00L": [ "Flashforge/FusRock Generic PET-CF" ], + "OFKhtNBx": [ + "Snapmaker/Snapmaker J1 TPU High-Flow" + ], "OFKjlAbC": [ "Qidi/QIDI UltraPA-CF25" ], @@ -4905,6 +4916,9 @@ "OFLeFaUO": [ "Flashforge/Flashforge Generic PVA" ], + "OFLiTjQK": [ + "FlyingBear/Other PA-CF" + ], "OFLriDvE": [ "Creality/Creality Generic PLA High Speed" ], @@ -4938,6 +4952,12 @@ "OFNbajj9": [ "Creality/Creality Generic ASA-CF" ], + "OFNz8rrn": [ + "FlyingBear/FlyingBear PLA Hyper" + ], + "OFO5R9KJ": [ + "Sovol/Sovol Zero TPU" + ], "OFOSzSuh": [ "Flashforge/Flashforge PA-CF" ], @@ -4953,6 +4973,9 @@ "OFOysPuE": [ "Qidi/QIDI TPU-GF" ], + "OFP4poIv": [ + "Sovol/Sovol Zero PLA Silk HS Nozzle" + ], "OFPJJxkF": [ "Flashforge/Flashforge PET-CF" ], @@ -5004,6 +5027,9 @@ "OFSdF3B1": [ "Flashforge/FusRock PAHT-CF" ], + "OFSoZBK2": [ + "Sovol/Sovol SV06 Plus ACE PLA" + ], "OFSpTWdv": [ "InfiMech/Other PA-CF" ], @@ -5013,6 +5039,9 @@ "OFTa6gPH": [ "Flashforge/Flashforge PLA Pro" ], + "OFTbdJyT": [ + "FlyingBear/Other PC" + ], "OFTbsWVg": [ "Artillery/Artillery TPU" ], @@ -5040,6 +5069,9 @@ "OFVBNoov": [ "InfiMech/InfiMech ABS" ], + "OFVJXE4n": [ + "FlyingBear/Other ABS" + ], "OFVLuVmD": [ "OrcaFilamentLibrary/Elegoo Rapid PETG" ], @@ -5082,6 +5114,9 @@ "OFXv4FUi": [ "Flashforge/Flashforge PLA Galaxy" ], + "OFY1U4uM": [ + "Sovol/Sovol SV08 TPU" + ], "OFYH00jV": [ "Qidi/QIDI ABS-GF" ], @@ -5094,6 +5129,9 @@ "OFYZs7dN": [ "Flashforge/Flashforge Generic HS PLA" ], + "OFYfZgxU": [ + "FlyingBear/FlyingBear TPU" + ], "OFZAkPHG": [ "Qidi/QIDI PPS-GF" ], @@ -5145,6 +5183,9 @@ "OFcqs5g7": [ "Elegoo/Elegoo PLA Translucent2" ], + "OFcsHCy4": [ + "Sovol/Sovol SV08 PLA" + ], "OFcy60o4": [ "Flashforge/Flashforge ASA Basic" ], @@ -5163,6 +5204,9 @@ "OFeFRwST": [ "Flashforge/Flashforge PVA" ], + "OFePPmng": [ + "Snapmaker/Snapmaker J1 ABS Benchy" + ], "OFeWMAGH": [ "Flashforge/Flashforge HS PLA Burnt Ti" ], @@ -5193,18 +5237,33 @@ "OFftQOek": [ "Flashforge/Flashforge PLA Matte" ], + "OFg4N6ZL": [ + "FlyingBear/FlyingBear PETG" + ], "OFgJX0Fc": [ "Flashforge/FlashForge PPS" ], "OFgK2Xvv": [ "Anycubic/Anycubic PLA" ], + "OFgMGSpF": [ + "Sovol/Sovol SV06 Plus ACE PETG" + ], + "OFgNzLVh": [ + "Sovol/Sovol Zero ABS" + ], "OFgSK1hL": [ "Anycubic/Anycubic PLA High Speed" ], + "OFglpvEE": [ + "Sovol/Sovol SV06 ACE TPU" + ], "OFgrGfPy": [ "Anycubic/Anycubic PLA+" ], + "OFgtZjeX": [ + "Snapmaker/Snapmaker ABS Benchy" + ], "OFh5GUhZ": [ "Elegoo/Elegoo PLA Wood" ], @@ -5220,6 +5279,9 @@ "OFiJYDPC": [ "Qidi/HATCHBOX PLA" ], + "OFic2uNr": [ + "Sovol/Sovol SV06 ACE PLA" + ], "OFicxmSa": [ "Prusa/Prusa Generic PLA HF" ], @@ -5232,6 +5294,9 @@ "OFjFPhUC": [ "Prusa/Prusament rPLA" ], + "OFjZw7k1": [ + "Snapmaker/PolyTerra J1 PLA" + ], "OFjdTQd6": [ "Anycubic/Anycubic PLA Silk" ], @@ -5244,9 +5309,15 @@ "OFjqPjjl": [ "Flashforge/Generic PET" ], + "OFjurQ3I": [ + "Sovol/Sovol Zero PETG" + ], "OFk388hR": [ "Elegoo/Generic PA6-CF" ], + "OFk6T5YH": [ + "Sovol/Sovol Zero PETG HS Nozzle" + ], "OFkaDtKx": [ "Flashforge/Flashforge PA66-CF" ], @@ -5265,6 +5336,9 @@ "OFlNKZLP": [ "Flashforge/Flashforge PLA Metal" ], + "OFlbn4FY": [ + "Snapmaker/Snapmaker PLA Matte" + ], "OFm1VZed": [ "Flashforge/Flashforge Generic PLA-CF" ], @@ -5292,6 +5366,9 @@ "OFnLnZQo": [ "Cubicon/Cubicon PC" ], + "OFnMW5jr": [ + "FlyingBear/FlyingBear ABS" + ], "OFnY9ovF": [ "Artillery/Artillery PA-CF" ], @@ -5373,6 +5450,9 @@ "OFsgANe3": [ "Flashforge/Flashforge PAHT-CF" ], + "OFsmPFwh": [ + "Sovol/Sovol SV06 Plus ACE TPU" + ], "OFt5bvKK": [ "Artillery/Artillery PETG Basic" ], @@ -5385,15 +5465,30 @@ "OFtJMczs": [ "Flashforge/Flashforge TPU-64D" ], + "OFtL05hE": [ + "Sovol/Sovol Zero PLA Basic HS Nozzle" + ], "OFtXBjvb": [ "Artillery/Artillery PLA Tough" ], + "OFtemzzw": [ + "Sovol/Sovol SV06 ACE ABS" + ], + "OFtet8ui": [ + "Snapmaker/Snapmaker TPU High-Flow" + ], "OFtmT4Nd": [ "Artillery/Artillery ASA" ], + "OFtwA91m": [ + "Sovol/Sovol Zero PC" + ], "OFuPC4S8": [ "Elegoo/Elegoo PLA-CF" ], + "OFuPN3iW": [ + "FlyingBear/Other PETG" + ], "OFuTFxVP": [ "Qidi/Overture ABS" ], @@ -5427,6 +5522,9 @@ "OFvN3117": [ "Qidi/QIDI PLA Matte Basic" ], + "OFvOhSjO": [ + "FlyingBear/Other TPU" + ], "OFvYfHPB": [ "Anycubic/Anycubic PLA Matte" ], @@ -5469,6 +5567,9 @@ "OFxjFYxE": [ "Elegoo/Elegoo PETG HF" ], + "OFxxa5yn": [ + "Snapmaker/Snapmaker Dual ABS Benchy" + ], "OFyD1Zo8": [ "InfiMech/Other PC" ], @@ -5559,7 +5660,8 @@ ], "OGFB99": [ "Custom/Generic ABS", - "OrcaFilamentLibrary/Generic ABS" + "OrcaFilamentLibrary/Generic ABS", + "Sovol/Generic ABS" ], "OGFC00": [ "OrcaFilamentLibrary/Bambu PC" @@ -5568,7 +5670,8 @@ "OrcaFilamentLibrary/Bambu PC FR" ], "OGFC99": [ - "OrcaFilamentLibrary/Generic PC" + "OrcaFilamentLibrary/Generic PC", + "Sovol/Generic PC" ], "OGFG00": [ "OrcaFilamentLibrary/Bambu PETG Basic" @@ -5589,7 +5692,8 @@ "OrcaFilamentLibrary/Generic PCTG" ], "OGFG99": [ - "OrcaFilamentLibrary/Generic PETG" + "OrcaFilamentLibrary/Generic PETG", + "Sovol/Generic PETG" ], "OGFGG300": [ "OrcaFilamentLibrary/GreenGate3D PETG" @@ -5602,8 +5706,6 @@ ], "OGFL01": [ "OrcaFilamentLibrary/PolyTerra PLA", - "Snapmaker/PolyTerra Dual PLA", - "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra PLA" ], "OGFL03": [ @@ -5641,14 +5743,16 @@ ], "OGFL96": [ "Flashforge/Generic PLA Silk", - "OrcaFilamentLibrary/Generic PLA Silk" + "OrcaFilamentLibrary/Generic PLA Silk", + "Sovol/Generic PLA Silk" ], "OGFL98": [ "OrcaFilamentLibrary/Generic PLA-CF" ], "OGFL99": [ "Flashforge/Generic PLA", - "OrcaFilamentLibrary/Generic PLA" + "OrcaFilamentLibrary/Generic PLA", + "Sovol/Generic PLA" ], "OGFLC99": [ "OrcaFilamentLibrary/Generic CoPE" @@ -5807,7 +5911,8 @@ "OrcaFilamentLibrary/SUNLU Wood PLA" ], "OGFSNL08": [ - "OrcaFilamentLibrary/SUNLU PETG" + "OrcaFilamentLibrary/SUNLU PETG", + "Sovol/SUNLU PETG" ], "OGFT01": [ "OrcaFilamentLibrary/Bambu PET-CF" @@ -5820,7 +5925,8 @@ "OrcaFilamentLibrary/Bambu TPU 95A" ], "OGFU99": [ - "OrcaFilamentLibrary/Generic TPU" + "OrcaFilamentLibrary/Generic TPU", + "Sovol/Generic TPU" ], "OVTABS08": [ "OrcaFilamentLibrary/Overture ABS Basic" @@ -8933,12 +9039,22 @@ "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", + "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", + "Snapmaker/PolyTerra J1 PLA", + "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", + "Snapmaker/Snapmaker ABS Benchy @U1", + "Snapmaker/Snapmaker Dual ABS Benchy", + "Snapmaker/Snapmaker Dual TPE", + "Snapmaker/Snapmaker Dual TPU High-Flow", + "Snapmaker/Snapmaker J1 ABS Benchy", + "Snapmaker/Snapmaker J1 TPE", + "Snapmaker/Snapmaker J1 TPU High-Flow", + "Snapmaker/Snapmaker PET @Dual", + "Snapmaker/Snapmaker PLA Matte @U1", + "Snapmaker/Snapmaker TPE", + "Snapmaker/Snapmaker TPE @U1", + "Snapmaker/Snapmaker TPU High-Flow @U1", "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", From 55a3114ec93a748a99de27084fe6ef5da43d57a1 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:16:01 +0800 Subject: [PATCH 010/208] Long-tail vendors: family filament_ids (17 vendors, 41 collision groups) Phase 2 completion - Volumic, Ratrig, Chuanying, Afinia, Eryone, FLSun, Tiertime, Blocks, CONSTRUCT3D, Co Print, CoLiDo, DeltaMaker, Ginger Additive, OrcaArena, Peopoly, Wanhao France, iQ. All are P1 copy-paste or small structural fixes; owners keep their ids by Bambu-catalog/OFL/historic- introducer precedence, impostor families get fresh deterministic mints, zero effective-config change: - Volumic 10 mints (ABS/ASA/PP, PETG/PCTG/ESD, PLA/UNIVERSAL, PA/PPS lines); Ratrig 10 (BigNozzle/PunkFil lines off the Generic line's ids); Chuanying 8 (plus 3 redundant own-id lines removed so parents' minted ids flow to the 0.25-nozzle variants); FLSun 4 (S1/T1 High Speed + Silk); Peopoly 4 (Lancer lines off Generic PLA's GFL99); Afinia 3 (Value PLA/ABS+/Value ABS inside the frozen GFx##_## scheme); Co Print 3 (ABS/PETG/TPU off GFL99). - Tiertime: Generic SBS had copy-pasted Generic PLA's ids on both printer lines - one family mint on both variants collapses the split. Eryone: PP copy-pasted PETG-CF's EFL43 (same introducing commit) - PP minted. Blocks: ASA-CF copy-pasted PLA-CF's BSFI010 - ASA-CF minted. CONSTRUCT3D: High Flow PETG minted off GFG99. CoLiDo: both claimants of the invented GFA99 re-minted. DeltaMaker: Brand PLA minted off GFL99. OrcaArena: Generic PLA Silk minted; the Bambu-clone Arena PLA Silk keeps GFA05 (catalog precedence). iQ: Grauts HPP4GF25 minted off Fiberthree's IQM1. - Ginger Additive (P5): the shared fdm_filament_common template carried P510eff9; moved onto the two pellet families (Generic PETG keeps it as first claimant, Generic PLA minted), template key removed after verifying every inheritor still resolves an id. - Wanhao France (P4): YUMI PLA Bowden stops over-claiming the six direct-drive printers covered by YUMI PLA Direct Drive (trim only, no mints). Verified: config-equivalence gate zero unexpected diffs; extra check exit 0; --check exit 0; validator -l 2 exit 0; and with all 30 vendor migrations now applied, the extended validator's -f check is clean TREE-WIDE (0 ambiguity errors, down from 1256 baseline / 16448 with the library-aware extension); -r exit 0 for BBL and Qidi. --- .../Afinia/filament/Afinia ABS+@HS.json | 2 +- .../Afinia/filament/Afinia Value ABS@HS.json | 2 +- .../Afinia/filament/Afinia Value PLA@HS.json | 2 +- .../filament/Blocks Generic ASA-CF.json | 2 +- .../filament/C1 Generic High Flow PETG.json | 2 +- ...uanying ASA @Chuanying X1 0.25 Nozzle.json | 1 - .../filament/Chuanying Generic ASA.json | 2 +- .../filament/Chuanying Generic HIPS.json | 2 +- .../filament/Chuanying Generic HS PLA.json | 2 +- .../filament/Chuanying Generic PETG-CF10.json | 2 +- .../filament/Chuanying Generic PLA-CF10.json | 2 +- .../filament/Chuanying Generic PLA-Silk.json | 2 +- .../filament/Chuanying Generic PVA.json | 2 +- .../filament/Chuanying Generic TPU.json | 2 +- ...ying HS PLA @Chuanying X1 0.25 Nozzle.json | 1 - ...ng PLA-SILK @Chuanying X1 0.25 Nozzle.json | 1 - .../filament/CoPrint Generic ABS.json | 2 +- .../filament/CoPrint Generic PETG.json | 2 +- .../filament/CoPrint Generic TPU.json | 2 +- .../filament/CoLiDo PLA @CoLiDo SR1.json | 2 +- .../filament/CoLiDo PLA Silk @CoLiDo SR1.json | 2 +- .../filament/DeltaMaker Brand PLA.json | 2 +- .../profiles/Eryone/filament/Eryone PP.json | 2 +- .../filament/FLSun S1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun S1 PLA Silk.json | 2 +- .../filament/FLSun T1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun T1 PLA Silk.json | 2 +- .../filament/Ginger Generic PETG.json | 1 + .../filament/Ginger Generic PLA.json | 1 + .../filament/fdm_filament_common.json | 1 - .../OrcaArena Generic PLA Silk @base.json | 2 +- .../filament/Peopoly Lancer ABS-GF.json | 2 +- .../filament/Peopoly Lancer PET-CF.json | 2 +- .../filament/Peopoly Lancer PETG-C.json | 2 +- .../filament/Peopoly Lancer PLA-C.json | 2 +- .../Ratrig/filament/RatRig BigNozzle ABS.json | 2 +- .../Ratrig/filament/RatRig BigNozzle ASA.json | 2 +- .../filament/RatRig BigNozzle PCTG.json | 2 +- .../filament/RatRig BigNozzle PETG.json | 2 +- .../Ratrig/filament/RatRig BigNozzle PLA.json | 2 +- .../Ratrig/filament/RatRig BigNozzle TPU.json | 2 +- .../Ratrig/filament/RatRig Generic PCTG.json | 2 +- .../Ratrig/filament/RatRig PunkFil ABS.json | 2 +- .../filament/RatRig PunkFil PETG CF.json | 2 +- .../Ratrig/filament/RatRig PunkFil PETG.json | 2 +- .../filament/Tiertime Generic SBS.json | 2 +- .../filament/Tiertime Generic SBS@300HS.json | 2 +- .../filament/PA6 CF20 (Performance).json | 2 +- .../filament/PETG ESD (Performance).json | 2 +- .../filament/PPS Carbone (Performance).json | 2 +- .../Volumic ASA Ultra Performance.json | 2 +- .../Volumic/filament/Volumic ASA Ultra.json | 2 +- .../Volumic PCTG Ultra (Performance).json | 2 +- .../Volumic PP Ultra Performance.json | 2 +- .../Volumic/filament/Volumic PP Ultra.json | 2 +- .../Volumic UNIVERSAL Ultra Performance.json | 2 +- .../filament/Volumic UNIVERSAL Ultra.json | 2 +- .../filament/YUMI PLA Bowden.json | 6 - ...rauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json | 2 +- scripts/filament_id_snapshot.json | 236 +++++++++++++----- 60 files changed, 227 insertions(+), 125 deletions(-) diff --git a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json index 79a5b294b9..d480c574c0 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFYG2Gfy", "setting_id": "wAJTMxtCY7EoavRi", "name": "Afinia ABS+@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json index 79b0ea9db3..37daf620a9 100644 --- a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFuYvNS3", "setting_id": "OxIiEYjbhEvSykaQ", "name": "Afinia Value ABS@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json index 20dceb0249..da0a1ecb8c 100644 --- a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OFvw0owy", "setting_id": "BASsUdyvElEVJ9AA", "name": "Afinia Value PLA@HS", "from": "system", diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json index d6d5a092ef..5373b92b4c 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json +++ b/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "FF6D7i492XTrb8AO", - "filament_id": "BSFI010", + "filament_id": "OFy7oQ1g", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json index 355637d63c..9e0a23abf9 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json +++ b/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "3IxBZSWFfFGmKAQ7", - "filament_id": "GFG99", + "filament_id": "OFAUX5fB", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json index 10415dcb72..e7f023b4a2 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json @@ -4,7 +4,6 @@ "inherits": "Chuanying Generic ASA", "from": "system", "setting_id": "px1EPCDgOG8eE81V", - "filament_id": "GFL99", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json b/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json index b95df151c5..d48f96d7cc 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "wBBQiy8JV2LrnIav", - "filament_id": "GFL99", + "filament_id": "OF7tgL9c", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json b/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json index 1087346c34..c919e8f921 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic ABS", "from": "system", "setting_id": "bBNozld07rP6mV3d", - "filament_id": "GFB99", + "filament_id": "OFzQQeCi", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json b/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json index f53cf22703..d12453cdb1 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "YZT1Uv73b8ArVoX3", - "filament_id": "GFL99", + "filament_id": "OFfiN1Lw", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json index c7b8e6008d..99304dfd88 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "S2vCGI7sqN8FwodT", - "filament_id": "GFG99", + "filament_id": "OF3YOOOs", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json index f001e5b391..58b3a1d750 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "EZA59VPwew1cpyUJ", - "filament_id": "GFL99", + "filament_id": "OFxVzzn4", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json index ca9a1398ed..861b4d9721 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "M9wzNVOPRQlayQH1", - "filament_id": "GFL99", + "filament_id": "OFlN56xW", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json b/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json index a68d62d485..d8650e8a97 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic PLA", "from": "system", "setting_id": "ePZFnkgBiyFuKvji", - "filament_id": "GFB99", + "filament_id": "OFQ5xAKf", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json b/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json index d9a05782e4..a743d646e4 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "HYciEf4160uMYGnH", - "filament_id": "GFG99", + "filament_id": "OFUqBrgf", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json index e4a7a6eba5..fb874cdb9f 100644 --- a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json @@ -4,7 +4,6 @@ "inherits": "Chuanying Generic HS PLA", "from": "system", "setting_id": "CAdli5S8JIFafvRG", - "filament_id": "GFL99", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json index 3008059f68..4e3a0391dc 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json @@ -4,7 +4,6 @@ "inherits": "Chuanying Generic PLA-Silk", "from": "system", "setting_id": "kph5feBjhPi0oo0G", - "filament_id": "GFL99", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json b/resources/profiles/Co Print/filament/CoPrint Generic ABS.json index 930950d68e..6ec666e6f0 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "xW2rHuxT9o7MG8qB", - "filament_id": "GFL99", + "filament_id": "OFNvrbnf", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json b/resources/profiles/Co Print/filament/CoPrint Generic PETG.json index f4540a98b2..b2661a6c91 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "k4m484S1samBGEVb", - "filament_id": "GFL99", + "filament_id": "OFDramZ2", "instantiation": "true", "fan_max_speed": [ "90" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json b/resources/profiles/Co Print/filament/CoPrint Generic TPU.json index b4e28ee73b..506acb77ff 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "2mWqeih012I5D2CK", - "filament_id": "GFL99", + "filament_id": "OF2Psxdc", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json index 40e871c663..013aa09259 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Gj0o6Rmn4qWXDLov", - "filament_id": "GFA99", + "filament_id": "OFfoA8kJ", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json index b9a15b3e1b..677ec930e3 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "mLgBNw0OzvJSS8IG", - "filament_id": "GFA99", + "filament_id": "OFxlch4V", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json index 2d905807fb..e32baac8f9 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "bvZOHe5ejWqBALPQ", - "filament_id": "GFL99", + "filament_id": "OFxodd2u", "instantiation": "true", "filament_flow_ratio": [ "0.987" diff --git a/resources/profiles/Eryone/filament/Eryone PP.json b/resources/profiles/Eryone/filament/Eryone PP.json index 835f8fc5a0..ffca123024 100644 --- a/resources/profiles/Eryone/filament/Eryone PP.json +++ b/resources/profiles/Eryone/filament/Eryone PP.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "sZF6qOPqqu88Yu5e", - "filament_id": "EFL43", + "filament_id": "OFf0JIqs", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json index 4cb721859e..91e22b993c 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "v2clpNXXo8m6dV33", - "filament_id": "GFL99", + "filament_id": "OFR8dTVW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json index af4d4b9379..9536db0750 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "164Bn4YchxJAaLsa", - "filament_id": "GFL99", + "filament_id": "OFFenwbU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json index 95b2ba75a5..a1316569c2 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "E4lpSLLlAxUW04ik", - "filament_id": "GFL99", + "filament_id": "OFyt23xJ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json index 04c82ce071..b76f537a45 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "gElUb4GnCoEfVlEd", - "filament_id": "GFL99", + "filament_id": "OFt1YdX8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json index 45c67d8876..3437d6f571 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json +++ b/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "ue95N2e65rdp5K6c", + "filament_id": "P510eff9", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json index 8038a710c0..4575f32060 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json +++ b/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "Z1scjKDBFoDaTa2C", + "filament_id": "OFziUL2X", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json index 8c906528a0..71e447d01e 100644 --- a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json +++ b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json @@ -2,7 +2,6 @@ "type": "filament", "name": "fdm_filament_common", "from": "system", - "filament_id": "P510eff9", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json index 7d6f5e3020..88fca4407a 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA05", + "filament_id": "OFqSTJ3I", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json index c00354396c..b6da7244c7 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ufcIVt3x0FqV69h4", - "filament_id": "GFL99", + "filament_id": "OFqkcvDI", "instantiation": "true", "filament_flow_ratio": [ "0.91" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json index 3ec4ef2909..1877ed8e3d 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "xSaZKOpjStJuKiM7", - "filament_id": "GFL99", + "filament_id": "OFlzQ0IS", "instantiation": "true", "filament_flow_ratio": [ "0.90" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json index ccdc0fc0ba..34e8f586a4 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "aUX6OHQrKPghlPBb", - "filament_id": "GFL99", + "filament_id": "OFV1szQh", "instantiation": "true", "fan_cooling_layer_time": [ "20" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json index 7f417378eb..d9d1acd1d5 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "EFHW4uKJCsBCjAEU", - "filament_id": "GFL99", + "filament_id": "OF9tjFbj", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json index 8f601dba61..cd5e2573fa 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "oE39mwr3PCpeBxZN", - "filament_id": "GFB99", + "filament_id": "OFtcTs1o", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json index a99d58ae34..55855d2045 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "GGkbwdd79jAXnwuf", - "filament_id": "GFB98", + "filament_id": "OFSkBwxf", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json index 38db026fe4..ee05b628c1 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uCKZhFAPvEa2wKnA", - "filament_id": "GFC99", + "filament_id": "OFS1ekCg", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json index e1cf036ece..ba7316afc7 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bf3YMNVRSE1i1E8N", - "filament_id": "GFG99", + "filament_id": "OFjj9Yiz", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json index d734dce4b7..fd155fac44 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "dyG3zLuhX2qe8XJP", - "filament_id": "GFL99", + "filament_id": "OF7M9vy4", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json index 11dae068e0..1dc5ca8791 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "wLJ3X05Jnz1EqeOI", - "filament_id": "GFL99", + "filament_id": "OFYehFGr", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json index 89031567bf..754c1e5667 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SG4Gt87iS1ql3s8S", - "filament_id": "GFC99", + "filament_id": "OFzb2BLs", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json index 5fa20b8246..3e5428690b 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AzjpmeEXD6enWOG6", - "filament_id": "GFB99", + "filament_id": "OFL7U2MV", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json index 73a5920ee8..8765e295fc 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "o2dP6EwooarikQ8R", - "filament_id": "GFB99", + "filament_id": "OFXQX0tr", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json index 170b1e0c99..14bc8db764 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "e1QXBJqpkhHxXor1", - "filament_id": "GFB99", + "filament_id": "OFnRTkEq", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json index 353838867a..359885ab4a 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "tHfCQJdD7qiIF4uT", - "filament_id": "GFL99", + "filament_id": "OFlxnxDx", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json index 429f1bd78a..9fed905ccd 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "neqjohDEPRiOa6ut", - "filament_id": "GFL99_01", + "filament_id": "OFlxnxDx", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json index 362b3b3720..f780cd48c2 100644 --- a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json +++ b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFHDaMut", "setting_id": "wuZ0EvlbcJ8GxajY", "name": "PA6 CF20 (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PETG ESD (Performance).json b/resources/profiles/Volumic/filament/PETG ESD (Performance).json index ba8e94a875..c50871b2a5 100644 --- a/resources/profiles/Volumic/filament/PETG ESD (Performance).json +++ b/resources/profiles/Volumic/filament/PETG ESD (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFO3IOWM", "setting_id": "May8rNEMOOs1qtae", "name": "PETG ESD (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json index 996494cc43..19d79c2174 100644 --- a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json +++ b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFBRSZom", "setting_id": "HE0yILdkhbiXbH1j", "name": "PPS Carbone (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json index ea3f078ce4..212d36d0d7 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFLhOFQk", "setting_id": "uE5jxeOBISvO5o7L", "name": "Volumic ASA Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json index 62de93ee24..638b2ce47c 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OF7f0eUZ", "setting_id": "LOAp2zgQWqg1lQQ4", "name": "Volumic ASA Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json index d28d3732ed..d45447dbe7 100644 --- a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json +++ b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFxfCy9m", "setting_id": "NdegYSDVrQ4Rawtp", "name": "Volumic PCTG Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json index 91bfcf197d..401033bc96 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFPGelMX", "setting_id": "nsiOJ8ExySR1RksQ", "name": "Volumic PP Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra.json b/resources/profiles/Volumic/filament/Volumic PP Ultra.json index 895c9ed467..a79589876f 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFAGqTQG", "setting_id": "UA91pv54dzbBRkFe", "name": "Volumic PP Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json index e20e88ed67..025e1ada57 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFPeGtB1", "setting_id": "rxVkBvMZYgHOoFW6", "name": "Volumic UNIVERSAL Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json index 568b3a5beb..b061d498c2 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFIzguhB", "setting_id": "6iOFERN4x6xBbtuT", "name": "Volumic UNIVERSAL Ultra", "from": "system", diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json index d6a5d6dcc6..f7bac7a60c 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json @@ -58,12 +58,6 @@ "0.4" ], "compatible_printers": [ - "D12 230 PRO M2 DIRECT 0.4 nozzle", - "D12 230 PRO SMARTPAD DIRECT 0.4 nozzle", - "D12 300 PRO M2 DIRECT 0.4 nozzle", - "D12 300 PRO SMARTPAD DIRECT 0.4 nozzle", - "D12 500 PRO M2 DIRECT 0.4 nozzle", - "D12 500 PRO SMARTPAD DIRECT 0.4 nozzle", "D12 230 PRO M2 MONO DUAL 0.4 nozzle", "D12 230 PRO M2 MONO DUAL 0.4 nozzle PoopTool", "D12 300 PRO M2 MONO DUAL PoopTool 0.4 nozzle", diff --git a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json index b692152c71..986de30106 100644 --- a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "5M829nxsQdq2Sde5", - "filament_id": "IQM1", + "filament_id": "OFL4BLAC", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 7272d33806..ea53ee25cc 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -314,6 +314,7 @@ "CONSTRUCT3D/C1 Generic High Flow PETG", "CONSTRUCT3D/C1 Generic PETG", "CONSTRUCT3D/C1 Generic PLA", + "Chuanying/Chuanying Generic HIPS", "Chuanying/Chuanying Generic HS PLA", "Chuanying/Chuanying Generic PETG", "Chuanying/Chuanying Generic PETG-CF10", @@ -321,7 +322,10 @@ "Chuanying/Chuanying Generic PLA-CF10", "Chuanying/Chuanying Generic PLA-Silk", "Chuanying/Chuanying Generic PVA", + "Co Print/CoPrint Generic ABS", + "Co Print/CoPrint Generic PETG", "Co Print/CoPrint Generic PLA", + "Co Print/CoPrint Generic TPU", "CoLiDo/CoLiDo Generic PETG @CoLiDo DIY 4.0", "CoLiDo/CoLiDo Generic PETG @CoLiDo X16", "CoLiDo/CoLiDo Generic PLA @CoLiDo DIY 4.0", @@ -704,6 +708,10 @@ "FLSun/FLSun Generic PETG", "FLSun/FLSun Generic PLA", "FLSun/FLSun Generic PLA-CF", + "FLSun/FLSun S1 PLA High Speed", + "FLSun/FLSun S1 PLA Silk", + "FLSun/FLSun T1 PLA High Speed", + "FLSun/FLSun T1 PLA Silk", "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", "Flashforge/FlashForge PC @FF G4 0.6 nozzle", "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", @@ -2645,7 +2653,6 @@ "Blocks/Blocks Generic PVA" ], "BSFI010": [ - "Blocks/Blocks Generic ASA-CF", "Blocks/Blocks Generic PLA-CF" ], "BTUB00": [ @@ -2786,8 +2793,7 @@ "Eryone/Eryone PLA-CF" ], "EFL43": [ - "Eryone/Eryone PETG-CF", - "Eryone/Eryone PP" + "Eryone/Eryone PETG-CF" ], "EFL71": [ "Eryone/Eryone PA" @@ -3095,7 +3101,6 @@ ], "GFA00_01": [ "Afinia/Afinia PLA", - "Afinia/Afinia Value PLA", "Tiertime/Tiertime PLA" ], "GFA01": [ @@ -3114,7 +3119,6 @@ "GFA05": [ "BBL/Bambu PLA Silk", "OrcaArena/Arena PLA Silk", - "OrcaArena/OrcaArena Generic PLA Silk", "Qidi/Qidi Generic PLA Silk", "WonderMaker/WonderMaker PLA Silk" ], @@ -3170,8 +3174,6 @@ "GFA99": [ "Anycubic/Anycubic ASA", "CoLiDo/CoLiDo Generic PLA", - "CoLiDo/CoLiDo PLA", - "CoLiDo/CoLiDo PLA Silk", "CoLiDo/CoLiDo PLA+" ], "GFASA": [ @@ -3188,8 +3190,6 @@ ], "GFB00_01": [ "Afinia/Afinia ABS", - "Afinia/Afinia ABS+", - "Afinia/Afinia Value ABS", "Tiertime/Tiertime ABS" ], "GFB01": [ @@ -3229,7 +3229,6 @@ "OrcaArena/OrcaArena Generic ASA", "Prusa/Prusa Generic ASA", "Prusa/Prusament ASA", - "Ratrig/RatRig BigNozzle ASA", "Ratrig/RatRig Generic ASA", "SecKit/SecKit Generic ASA", "Tiertime/Tiertime Generic ASA", @@ -3266,8 +3265,6 @@ "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", @@ -3284,19 +3281,11 @@ "OrcaArena/OrcaArena Generic ABS", "Prusa/Prusa Generic ABS", "Qidi/Qidi Generic ABS", - "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": [ @@ -3350,9 +3339,7 @@ "Prusa/Prusa Generic PC", "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", @@ -3438,11 +3425,8 @@ "Anycubic/Anycubic Generic PETG", "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", @@ -3462,12 +3446,9 @@ "MagicMaker/MM Generic PEEK", "OrcaArena/OrcaArena Generic PETG", "Qidi/Qidi Generic PETG", - "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", @@ -3741,33 +3722,18 @@ "Artillery/Artillery Generic PLA", "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", "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/Generic PLA", "Flashforge/Generic PLA High Speed", "FlyingBear/FlyingBear Generic PLA", @@ -3775,30 +3741,20 @@ "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", "Qidi/Qidi Generic PLA", - "Ratrig/RatRig BigNozzle PLA", - "Ratrig/RatRig BigNozzle TPU", "Ratrig/RatRig Generic PLA", "SecKit/SecKit Generic PLA", "Sovol/Sovol SV07 PLA", "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" + "Tiertime/Tiertime Generic PLA" ], "GFL99_2": [ "Prusa/Prusa Generic PLA" @@ -3911,8 +3867,6 @@ "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" @@ -4526,8 +4480,7 @@ "RH3D/Generic TPU" ], "IQM1": [ - "iQ/Fiberthree PACF Pro P1", - "iQ/Grauts HPP4GF25 P1" + "iQ/Fiberthree PACF Pro P1" ], "IQM1011": [ "iQ/VXL90 TiQ2 P2" @@ -4637,6 +4590,9 @@ "OF22AxCm": [ "Sovol/Polymaker PETG" ], + "OF2Psxdc": [ + "Co Print/CoPrint Generic TPU" + ], "OF2UFmOo": [ "Qidi/Bambu PLA" ], @@ -4652,6 +4608,9 @@ "OF3XeEuV": [ "Qidi/QIDI PET-GF" ], + "OF3YOOOs": [ + "Chuanying/Chuanying Generic PETG-CF10" + ], "OF3arl18": [ "Elegoo/Elegoo Rapid PETG" ], @@ -4727,9 +4686,19 @@ "OF79FFkO": [ "OrcaFilamentLibrary/Elegoo PC-FR" ], + "OF7M9vy4": [ + "Ratrig/RatRig BigNozzle PLA" + ], "OF7cv1Ub": [ "Qidi/QIDI PLA-CF" ], + "OF7f0eUZ": [ + "Volumic/Volumic ASA Ultra" + ], + "OF7tgL9c": [ + "Chuanying/Chuanying ASA", + "Chuanying/Chuanying Generic ASA" + ], "OF8HQmJD": [ "OrcaFilamentLibrary/Elegoo PLA Sparkle" ], @@ -4745,12 +4714,18 @@ "OF9sr3Vn": [ "Flashforge/Flashforge PLA Sparkle" ], + "OF9tjFbj": [ + "Peopoly/Peopoly Lancer PLA-C" + ], "OF9vnvM8": [ "Artillery/Artillery PETG-CF" ], "OFAEqlWa": [ "Flashforge/Flashforge Generic PLA-SILK" ], + "OFAGqTQG": [ + "Volumic/Volumic PP Ultra" + ], "OFAGrVjP": [ "Flashforge/Flashforge PLA Silk" ], @@ -4763,6 +4738,9 @@ "OFAUDGEQ": [ "Qidi/QIDI PLA Rapido Matte" ], + "OFAUX5fB": [ + "CONSTRUCT3D/C1 Generic High Flow PETG" + ], "OFAbsMuV": [ "Snapmaker/Snapmaker Dual TPE" ], @@ -4784,6 +4762,9 @@ "OFBGxHgT": [ "FlyingBear/FlyingBear PLA" ], + "OFBRSZom": [ + "Volumic/PPS Carbone (Performance)" + ], "OFBvxnjM": [ "Elegoo/Elegoo PETG-GF" ], @@ -4820,6 +4801,9 @@ "OFDkABjZ": [ "Flashforge/Generic TPU-90A" ], + "OFDramZ2": [ + "Co Print/CoPrint Generic PETG" + ], "OFE22Uba": [ "Flashforge/Flashforge TPU-90A" ], @@ -4832,6 +4816,9 @@ "OFFIL5pD": [ "Qidi/QIDI PA12-CF" ], + "OFFenwbU": [ + "FLSun/FLSun S1 PLA Silk" + ], "OFFmJ8aR": [ "FlyingBear/Other PLA Hyper" ], @@ -4853,6 +4840,9 @@ "OFHBTqyD": [ "Flashforge/Flashforge PLA Basic" ], + "OFHDaMut": [ + "Volumic/PA6 CF20 (Performance)" + ], "OFHL32M0": [ "Anycubic/Anycubic TPU" ], @@ -4868,6 +4858,9 @@ "OFIl3ar9": [ "Sovol/Sovol SV08 PETG" ], + "OFIzguhB": [ + "Volumic/Volumic UNIVERSAL Ultra" + ], "OFJIImD5": [ "OrcaFilamentLibrary/Elegoo PET-CF" ], @@ -4904,9 +4897,15 @@ "OFKzh9lx": [ "InfiMech/InfiMech PLA" ], + "OFL4BLAC": [ + "iQ/Grauts HPP4GF25 P1" + ], "OFL4KniM": [ "Elegoo/Elegoo Rapid TPU 95A" ], + "OFL7U2MV": [ + "Ratrig/RatRig PunkFil ABS" + ], "OFL7vEML": [ "Flashforge/FlashForge PC" ], @@ -4916,6 +4915,9 @@ "OFLeFaUO": [ "Flashforge/Flashforge Generic PVA" ], + "OFLhOFQk": [ + "Volumic/Volumic ASA Ultra (Performance)" + ], "OFLiTjQK": [ "FlyingBear/Other PA-CF" ], @@ -4952,9 +4954,15 @@ "OFNbajj9": [ "Creality/Creality Generic ASA-CF" ], + "OFNvrbnf": [ + "Co Print/CoPrint Generic ABS" + ], "OFNz8rrn": [ "FlyingBear/FlyingBear PLA Hyper" ], + "OFO3IOWM": [ + "Volumic/PETG ESD (Performance)" + ], "OFO5R9KJ": [ "Sovol/Sovol Zero TPU" ], @@ -4976,18 +4984,27 @@ "OFP4poIv": [ "Sovol/Sovol Zero PLA Silk HS Nozzle" ], + "OFPGelMX": [ + "Volumic/Volumic PP Ultra (Performance)" + ], "OFPJJxkF": [ "Flashforge/Flashforge PET-CF" ], "OFPJrlC3": [ "Flashforge/Flashforge PLA-CF" ], + "OFPeGtB1": [ + "Volumic/Volumic UNIVERSAL Ultra (Performance)" + ], "OFPokkKe": [ "Qidi/QIDI PETG-CF" ], "OFPwi9X0": [ "Qidi/HATCHBOX ABS" ], + "OFQ5xAKf": [ + "Chuanying/Chuanying Generic PVA" + ], "OFQ9dI8j": [ "Prusa/Prusa Generic PC HF" ], @@ -5003,6 +5020,9 @@ "OFQkWxJy": [ "OrcaFilamentLibrary/Elegoo PLA Matte" ], + "OFR8dTVW": [ + "FLSun/FLSun S1 PLA High Speed" + ], "OFRNU58t": [ "Flashforge/Flashforge TPU 95A" ], @@ -5015,6 +5035,9 @@ "OFRgDMDJ": [ "Flashforge/Flashforge PETG Transparent" ], + "OFS1ekCg": [ + "Ratrig/RatRig BigNozzle PCTG" + ], "OFS3HrR1": [ "InfiMech/Other PLA" ], @@ -5027,6 +5050,9 @@ "OFSdF3B1": [ "Flashforge/FusRock PAHT-CF" ], + "OFSkBwxf": [ + "Ratrig/RatRig BigNozzle ASA" + ], "OFSoZBK2": [ "Sovol/Sovol SV06 Plus ACE PLA" ], @@ -5063,6 +5089,12 @@ "OFUkpobY": [ "Qidi/QIDI PAHT-CF" ], + "OFUqBrgf": [ + "Chuanying/Chuanying Generic TPU" + ], + "OFV1szQh": [ + "Peopoly/Peopoly Lancer PETG-C" + ], "OFV4hD1o": [ "Qidi/QIDI PLA Rapido Metal" ], @@ -5099,6 +5131,9 @@ "OFXNO5Of": [ "Qidi/QIDI PLA Rapido 0.2 nozzle" ], + "OFXQX0tr": [ + "Ratrig/RatRig PunkFil PETG CF" + ], "OFXcfTEb": [ "Qidi/Tinmorry PETG-ECO" ], @@ -5117,6 +5152,9 @@ "OFY1U4uM": [ "Sovol/Sovol SV08 TPU" ], + "OFYG2Gfy": [ + "Afinia/Afinia ABS+" + ], "OFYH00jV": [ "Qidi/QIDI ABS-GF" ], @@ -5129,6 +5167,9 @@ "OFYZs7dN": [ "Flashforge/Flashforge Generic HS PLA" ], + "OFYehFGr": [ + "Ratrig/RatRig BigNozzle TPU" + ], "OFYfZgxU": [ "FlyingBear/FlyingBear TPU" ], @@ -5219,6 +5260,9 @@ "OFeybQvK": [ "Qidi/QIDI ABS Rapido 0.2 nozzle" ], + "OFf0JIqs": [ + "Eryone/Eryone PP" + ], "OFf2b9wu": [ "Anycubic/Anycubic ABS" ], @@ -5231,9 +5275,16 @@ "OFfdxQok": [ "Qidi/Generic PLA+" ], + "OFfiN1Lw": [ + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying HS PLA" + ], "OFfkPhrJ": [ "Creality/Creality HF Generic Speed PLA" ], + "OFfoA8kJ": [ + "CoLiDo/CoLiDo PLA" + ], "OFftQOek": [ "Flashforge/Flashforge PLA Matte" ], @@ -5303,6 +5354,9 @@ "OFjepy6j": [ "Flashforge/FusRock Generic S-PAHT" ], + "OFjj9Yiz": [ + "Ratrig/RatRig BigNozzle PETG" + ], "OFjohFkg": [ "Qidi/QIDI PETG Translucent" ], @@ -5333,12 +5387,22 @@ "OFkoT6jl": [ "Prusa/Prusament PLA" ], + "OFlN56xW": [ + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying PLA-SILK" + ], "OFlNKZLP": [ "Flashforge/Flashforge PLA Metal" ], "OFlbn4FY": [ "Snapmaker/Snapmaker PLA Matte" ], + "OFlxnxDx": [ + "Tiertime/Tiertime Generic SBS" + ], + "OFlzQ0IS": [ + "Peopoly/Peopoly Lancer PET-CF" + ], "OFm1VZed": [ "Flashforge/Flashforge Generic PLA-CF" ], @@ -5369,6 +5433,9 @@ "OFnMW5jr": [ "FlyingBear/FlyingBear ABS" ], + "OFnRTkEq": [ + "Ratrig/RatRig PunkFil PETG" + ], "OFnY9ovF": [ "Artillery/Artillery PA-CF" ], @@ -5417,9 +5484,15 @@ "OFqRWRU6": [ "Flashforge/Flashforge ABS-GF" ], + "OFqSTJ3I": [ + "OrcaArena/OrcaArena Generic PLA Silk" + ], "OFqh1Ngp": [ "OrcaFilamentLibrary/Elegoo PLA-CF" ], + "OFqkcvDI": [ + "Peopoly/Peopoly Lancer ABS-GF" + ], "OFqyIUDi": [ "Qidi/Qidi PLA-CF" ], @@ -5453,6 +5526,9 @@ "OFsmPFwh": [ "Sovol/Sovol SV06 Plus ACE TPU" ], + "OFt1YdX8": [ + "FLSun/FLSun T1 PLA Silk" + ], "OFt5bvKK": [ "Artillery/Artillery PETG Basic" ], @@ -5471,6 +5547,9 @@ "OFtXBjvb": [ "Artillery/Artillery PLA Tough" ], + "OFtcTs1o": [ + "Ratrig/RatRig BigNozzle ABS" + ], "OFtemzzw": [ "Sovol/Sovol SV06 ACE ABS" ], @@ -5495,6 +5574,9 @@ "OFuXkYly": [ "Elegoo/Elegoo PLA Glow" ], + "OFuYvNS3": [ + "Afinia/Afinia Value ABS" + ], "OFuidAEg": [ "Qidi/Bambu ABS" ], @@ -5537,6 +5619,9 @@ "OFvsS7Fb": [ "Flashforge/Generic TPU-64D" ], + "OFvw0owy": [ + "Afinia/Afinia Value PLA" + ], "OFvxvkAd": [ "Artillery/Artillery PLA-CF" ], @@ -5564,12 +5649,27 @@ "OFxLeRyT": [ "Prusa/Prusa Generic PVA HF" ], + "OFxVzzn4": [ + "Chuanying/Chuanying Generic PLA-CF10" + ], + "OFxfCy9m": [ + "Volumic/Volumic PCTG Ultra (Performance)" + ], "OFxjFYxE": [ "Elegoo/Elegoo PETG HF" ], + "OFxlch4V": [ + "CoLiDo/CoLiDo PLA Silk" + ], + "OFxodd2u": [ + "DeltaMaker/DeltaMaker Brand PLA" + ], "OFxxa5yn": [ "Snapmaker/Snapmaker Dual ABS Benchy" ], + "OFy7oQ1g": [ + "Blocks/Blocks Generic ASA-CF" + ], "OFyD1Zo8": [ "InfiMech/Other PC" ], @@ -5579,12 +5679,24 @@ "OFypQeKR": [ "Elegoo/Generic PC-CF" ], + "OFyt23xJ": [ + "FLSun/FLSun T1 PLA High Speed" + ], "OFyxAbO4": [ "Flashforge/Flashforge TPU-95A" ], "OFzFbFcl": [ "Elegoo/Elegoo PC-FR" ], + "OFzQQeCi": [ + "Chuanying/Chuanying Generic HIPS" + ], + "OFzb2BLs": [ + "Ratrig/RatRig Generic PCTG" + ], + "OFziUL2X": [ + "Ginger Additive/Ginger Generic PLA" + ], "OFzrWlH5": [ "OrcaFilamentLibrary/Elegoo PETG HF" ], @@ -5968,8 +6080,7 @@ "Cubicon/Cubicon PA-CF" ], "P510eff9": [ - "Ginger Additive/Ginger Generic PETG", - "Ginger Additive/Ginger Generic PLA" + "Ginger Additive/Ginger Generic PETG" ], "Pfcf9c4c": [ "Artillery/Artillery PLA" @@ -6965,7 +7076,6 @@ "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", @@ -6977,9 +7087,7 @@ "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", @@ -8122,6 +8230,8 @@ "FlyingBear/Other PLA @S1", "FlyingBear/Other PLA Hyper @S1", "FlyingBear/Other TPU @S1", + "Ginger Additive/Ginger Generic PETG", + "Ginger Additive/Ginger Generic PLA", "InfiMech/InfiMech ABS @EX", "InfiMech/InfiMech ABS @EX+APS", "InfiMech/InfiMech ABS @HSN", From 33923464aed34770eceea86162e8bb3bcdf247bd Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 00:51:29 +0800 Subject: [PATCH 011/208] Cubicon: keep @base presets selectable; mint the variant tier instead The custom-preset fixture validation (check_profiles.yml step 5, run locally against the v2.3.2/v2.4.0/v2.4.1 archives) caught a real regression in the previous Cubicon fix: those archives contain user presets whose inherits names the @base presets directly ("can not find parent Cubicon ABS @base"). A system preset with instantiation:false is not added to the preset collection, so flipping the nine @bases was equivalent to deleting their names - exactly the user-preset drop hazard the migration rules forbid. Repair: restore all nine @bases byte-identically to their pre-flip state (instantiated, setting_id, original P510cf* ids; Cubicon PC @base keeps its minted OFnLnZQo from the copy-paste fix). The AMS ambiguity is instead resolved Dremel-style: each family's three passthrough variants share one fresh variant-tier mint as own keys, so on every printer the base and the variant carry different ids. Zero preset-set change, zero config change, user presets and fixtures resolve exactly as before the migration. Verified: fixture archives v2.3.2/v2.4.0/v2.4.1 no longer report missing parents; config-equivalence holds; orca_extra_profile_check.py exit 0; assign_filament_ids.py --check exit 0; validator -l 2 exit 0; tree-wide extended -f still exit 0. --- ...icon ABS @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...n ABS @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...n ABS @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon ABS @base.json | 3 +- ...ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...-A100 @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...-A100 @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../filament/Cubicon ABS-A100 @base.json | 3 +- ...con ABSk @Cubicon xCeler-I 0.4 nozzle.json | 1 + ... ABSk @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ... ABSk @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon ABSk @base.json | 3 +- ...on PA-CF @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PA-CF @base.json | 3 +- ...bicon PC @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...on PC @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...on PC @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PC @base.json | 3 +- ...con PETG @Cubicon xCeler-I 0.4 nozzle.json | 1 + ... PETG @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ... PETG @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PETG @base.json | 3 +- ...icon PLA @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...n PLA @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...n PLA @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PLA @base.json | 3 +- ...con PLA+ @Cubicon xCeler-I 0.4 nozzle.json | 1 + ... PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ... PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PLA+ @base.json | 3 +- ...n PLAi21 @Cubicon xCeler-I 0.4 nozzle.json | 1 + ...LAi21 @Cubicon xCeler-Mini 0.4 nozzle.json | 1 + ...LAi21 @Cubicon xCeler-Plus 0.4 nozzle.json | 1 + .../filament/Cubicon PLAi21 @base.json | 3 +- scripts/filament_id_snapshot.json | 90 +++++++++++++++++++ 37 files changed, 135 insertions(+), 9 deletions(-) diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json index ca0143d65c..8446df4752 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS @base", "setting_id": "VJEyK87ZYvHmamB9", + "filament_id": "OF6XuVQE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json index 72b2c51e50..c7b34c9694 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABS @base", "from": "system", "setting_id": "Kz41mb2M9xLbEJ97", + "filament_id": "OF6XuVQE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json index 38a00a4624..3865f034fa 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS @base", "setting_id": "A5FQdwh0Xo7aTRpq", + "filament_id": "OF6XuVQE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index cae2d0bcf9..55fbd40ee4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon ABS @base", "inherits": "fdm_filament_abs", + "setting_id": "aZRVIlDze62Bbw81", "filament_id": "P510cfb0", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json index 897f3cceff..40cec441cc 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", "setting_id": "OfiOryklf7FDVCz8", + "filament_id": "OFcZZWnB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json index f0d3715d32..77205f02c2 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABS-A100 @base", "from": "system", "setting_id": "pIyU9uXQ5V3hsg5F", + "filament_id": "OFcZZWnB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json index c6965435a0..c78d3720df 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", "setting_id": "xhYh9x1vescinfbF", + "filament_id": "OFcZZWnB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index b715900dae..dddc147ff2 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon ABS-A100 @base", "inherits": "Cubicon ABS @base", + "setting_id": "vGIT4KZvqojIh2up", "filament_id": "P510cfb1", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json index 7596fa618a..296268a3f0 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABSk @base", "setting_id": "TXcodZkab4fofnEn", + "filament_id": "OFNQHqAV", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json index 63c827c034..afd798384f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABSk @base", "from": "system", "setting_id": "CsthNnKn8WlBbkP4", + "filament_id": "OFNQHqAV", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json index 586982ea51..6f60bb4c13 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABSk @base", "setting_id": "UVitMFMxvdf34qZw", + "filament_id": "OFNQHqAV", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index 7daddfb940..e1546d3bae 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon ABSk @base", "inherits": "Cubicon ABS @base", + "setting_id": "UbOUO0K3Y2iRPBtf", "filament_id": "P510cfb2", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json index c8af313f4f..8edf5f65e5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PA-CF @base", "setting_id": "nupuIJggdc1EKDqG", + "filament_id": "OFOJUJAS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json index 40aa29b577..eda94acc49 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PA-CF @base", "from": "system", "setting_id": "NPjuy4deP6Ly7u9s", + "filament_id": "OFOJUJAS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json index 6e307bed78..f67e32c8ac 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PA-CF @base", "setting_id": "ygB1Uf9Vbw9LJZc8", + "filament_id": "OFOJUJAS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json index 6177b6fd6a..51c89949f6 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon PA-CF @base", "inherits": "fdm_filament_pa", + "setting_id": "55cJDyCoEudfOePY", "filament_id": "P510cfd0", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json index b83d690fff..aa761b7454 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PC @base", "setting_id": "c0sUPS0SRYUNjEpB", + "filament_id": "OFaxQnfz", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json index 868ec82e34..e5c07509a4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PC @base", "from": "system", "setting_id": "XGXjHwuHUjtAJGl1", + "filament_id": "OFaxQnfz", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json index 07a2308add..f565564c82 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PC @base", "setting_id": "jbYKOK1A0Oxm9t0f", + "filament_id": "OFaxQnfz", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index aa2f9ac347..5ecc4082c8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon PC @base", "inherits": "fdm_filament_pc", + "setting_id": "Mzg6jfwb2nqfGkdV", "filament_id": "OFnLnZQo", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json index 62a4f58c53..c9db611832 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PETG @base", "setting_id": "dsX01tCkd2Usk104", + "filament_id": "OF0VEdLB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json index 9c1108a73f..653ca65758 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PETG @base", "from": "system", "setting_id": "2hYoCR5qUXCWIAxZ", + "filament_id": "OF0VEdLB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json index 14a23cc728..919a262523 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PETG @base", "setting_id": "5pfiRdyNz9dvT4Q6", + "filament_id": "OF0VEdLB", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index 0912884adf..2242ba36ca 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon PETG @base", "inherits": "fdm_filament_pet", + "setting_id": "bGfz4phwIdqSz0Hx", "filament_id": "P510cfc0", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json index bca40b2814..fc5d62bdc5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "xXJgHAeNf1JdCitr", + "filament_id": "OFq6IhFg", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json index 54ffbd694c..39d9a7835e 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "o2BQL6OKtxDmBkWV", + "filament_id": "OFq6IhFg", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json index 04cac6ab7d..d94d38529c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "WkZrzDlGvb25OtrF", + "filament_id": "OFq6IhFg", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 82dffb7070..665ba58d59 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -3,8 +3,9 @@ "name": "Cubicon PLA @base", "inherits": "fdm_filament_pla", "from": "system", + "setting_id": "ypwdJAu0NlEsWpf4", "filament_id": "P510cfa0", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json index 7442cf2490..c068eba680 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "fNR2Bw3e4TGcWhq0", + "filament_id": "OF2HQqTC", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json index 76a31d14c1..f8c8331b31 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "wukhnaCJaOLUUdiU", + "filament_id": "OF2HQqTC", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json index 2f37996fe3..0da1b35a44 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "JVShu8DKQ3euGHec", + "filament_id": "OF2HQqTC", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index 0e31e96a81..cb916a9410 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon PLA+ @base", "inherits": "Cubicon PLA @base", + "setting_id": "ETnuhiOZRh1jxrVk", "filament_id": "P510cfa1", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json index 10d2a2e6ae..b0a23bdd31 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "vcLVF3cglagBfVAF", + "filament_id": "OFti31HS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json index 73404c4729..43f571041e 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "3TbOucKB5TGk8sXG", + "filament_id": "OFti31HS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json index 0769e1fa3d..e797ea0312 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "Vm1oDASHoFUfDrzQ", + "filament_id": "OFti31HS", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json index a9d46012c6..831450deef 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json @@ -2,8 +2,9 @@ "type": "filament", "name": "Cubicon PLAi21 @base", "inherits": "Cubicon PLA @base", + "setting_id": "mnwC7ijXXV72lBOt", "filament_id": "P510cfa2", - "instantiation": "false", + "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index ea53ee25cc..24d51970bc 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -643,13 +643,40 @@ "Creality/eSUN PLA-Lite @K2 Plus-all", "Creality/eSUN PLA-Matte @K2 Plus-all", "Creality/eSUN PLA-Silk @K2 Plus-all", + "Cubicon/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon ABS-A100 @base", + "Cubicon/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon ABSk @base", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PA-CF @base", + "Cubicon/Cubicon PC @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PC @base", + "Cubicon/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PETG @base", + "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PLA @base", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PLA+ @base", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PLAi21 @base", "Custom/Generic PC @MyToolChanger", "Custom/Generic PETG @MyToolChanger", @@ -4569,6 +4596,9 @@ "OF0UbONm": [ "Flashforge/FusRock S-PAHT" ], + "OF0VEdLB": [ + "Cubicon/Cubicon PETG" + ], "OF0Y5MLd": [ "Qidi/QIDI PETG-GF" ], @@ -4590,6 +4620,9 @@ "OF22AxCm": [ "Sovol/Polymaker PETG" ], + "OF2HQqTC": [ + "Cubicon/Cubicon PLA+" + ], "OF2Psxdc": [ "Co Print/CoPrint Generic TPU" ], @@ -4680,6 +4713,9 @@ "OF6XIeUW": [ "Flashforge/Generic PLA-CF10" ], + "OF6XuVQE": [ + "Cubicon/Cubicon ABS" + ], "OF70DKqH": [ "Snapmaker/Snapmaker TPE" ], @@ -4945,6 +4981,9 @@ "OFN0pBpo": [ "Qidi/Qidi Generic TPU 95A" ], + "OFNQHqAV": [ + "Cubicon/Cubicon ABSk" + ], "OFNRgSch": [ "Artillery/Artillery PC" ], @@ -4966,6 +5005,9 @@ "OFO5R9KJ": [ "Sovol/Sovol Zero TPU" ], + "OFOJUJAS": [ + "Cubicon/Cubicon PA-CF" + ], "OFOSzSuh": [ "Flashforge/Flashforge PA-CF" ], @@ -5200,6 +5242,9 @@ "OFaKZ6JI": [ "Anycubic/Generic PETG Basic" ], + "OFaxQnfz": [ + "Cubicon/Cubicon PC" + ], "OFb3UzMZ": [ "InfiMech/InfiMech PA-CF" ], @@ -5218,6 +5263,9 @@ "OFc2SnEp": [ "Artillery/Artillery PVA" ], + "OFcZZWnB": [ + "Cubicon/Cubicon ABS-A100" + ], "OFceJcLf": [ "Qidi/PolyLite PLA" ], @@ -5478,6 +5526,9 @@ "OFpwg2Qh": [ "OrcaFilamentLibrary/Elegoo ASA-CF" ], + "OFq6IhFg": [ + "Cubicon/Cubicon PLA" + ], "OFqPp2yL": [ "Qidi/QIDI PETG Tough 0.6 nozzle" ], @@ -5556,6 +5607,9 @@ "OFtet8ui": [ "Snapmaker/Snapmaker TPU High-Flow" ], + "OFti31HS": [ + "Cubicon/Cubicon PLAi21" + ], "OFtmT4Nd": [ "Artillery/Artillery ASA" ], @@ -7620,6 +7674,42 @@ "Creality/eSUN PLA-Lite @K2 Plus-all", "Creality/eSUN PLA-Matte @K2 Plus-all", "Creality/eSUN PLA-Silk @K2 Plus-all", + "Cubicon/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon ABS @base", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon ABS-A100 @base", + "Cubicon/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon ABSk @base", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PA-CF @base", + "Cubicon/Cubicon PC @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PC @base", + "Cubicon/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PETG @base", + "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PLA @base", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PLA+ @base", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", + "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon/Cubicon PLAi21 @base", "Custom/Generic PC @MyToolChanger", "Custom/Generic PETG @MyToolChanger", "Custom/Generic PLA @MyToolChanger", From ac12dff1af225f7f5526a20e567ee6f95fc89503 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 01:10:54 +0800 Subject: [PATCH 012/208] CI: run the filament subtype check tree-wide With every vendor's filament_id collisions fixed (356 collision groups / 1256 printer-level ambiguity errors across 30 vendors, plus the 16 library-internal ids and the 10 live library-cross groups), the duplicate-filament-subtype validation no longer needs the BBL-only scope: drop -v BBL from the -f step so any new ambiguity in any vendor fails CI. Local verification of the full workflow against this branch: - extra JSON check exit 0; validator -l 2 exit 0 (66 vendors); -f tree-wide exit 0 (with the library-aware extended validator, which is strictly stricter than the released binary CI downloads); -r exit 0 for BBL and Qidi. - custom-preset fixture archives v1.9.0..v2.4.1 overlaid per the workflow: six pass outright; v2.3.1/v2.3.2/v2.4.0/v2.4.1 fail locally only on a pre-existing Windows-only validator limitation (a user preset with a non-ASCII filename reads as empty; reproduced byte-identically on the pre-migration base commit, and absent on CI's Linux runners where these archives validate green). --- .github/workflows/check_profiles.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index e8404d9e4e..8fbd7fc393 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -49,13 +49,14 @@ jobs: set +e ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 2>&1 | tee ${{ runner.temp }}/validate_system.log exit ${PIPESTATUS[0]} - # For now run filament subtype check only for BBL profiles until we fix other vendors' profiles. - - name: validate filament subtype check for BBL profiles + # All vendors' filament_id collisions were fixed (see scripts/filament_id_snapshot.json), + # so the duplicate-filament-subtype check runs tree-wide. + - name: validate filament subtype check id: validate_filament_subtypes continue-on-error: true run: | set +e - ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 -v BBL -f 2>&1 | tee ${{ runner.temp }}/validate_filament_subtypes.log + ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 -f 2>&1 | tee ${{ runner.temp }}/validate_filament_subtypes.log exit ${PIPESTATUS[0]} # Flag inherits/compatible_printers/compatible_prints references that point at a deleted or # renamed preset. Opt-in per vendor for now (via -r); enabled for BBL and Qidi until other @@ -207,7 +208,7 @@ jobs: fi if [ "${{ steps.validate_filament_subtypes.outcome }}" = "failure" ]; then - echo "### BBL Filament Subtype Validation Failed" + echo "### Filament Subtype Validation Failed" echo "" echo '```' head -c 30000 ${{ runner.temp }}/validate_filament_subtypes.log || echo "No output captured" From a395701f29cda51f32eaa108ce2dd97c0810b7bb Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 3 Jul 2026 10:12:21 +0800 Subject: [PATCH 013/208] plan: validate the P+md5 (get_filament_id) mint proposal; record verdict as plan v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Examined minting system filament_ids with CreatePresetsDialog.cpp:487's user-custom allocator (adopt-by-base-name, else "P"+md5(name)[0:7]) for Bambu AMS-sync compatibility. Verdict: keep the OF* mint; capture the proposal's value through bounded work items instead of a re-mint. - The device path never validates id shape: tray_info_idx is an opaque string end-to-end (DeviceManager.cpp:1642; DevFilaSystem.cpp:512-514) and firmware persists arbitrary bytes (bambulab/BambuStudio#5436). Resolution is by value against the GF catalog plus the account's cloud custom cache; unknown ids show "?" regardless of shape, and system presets can never enter that cache (Preset.cpp:2071 gates upload on is_user()). - The only id-shape dispatch in the tree is destructive for P-shaped ids: check_ams_filament_valid (DeviceManager.cpp:5335/5352/5395/5410) remotely clears an AMS tray (:5345) or rewrites its temps when a P-shaped tray id drops out of the user-root preset list — a state name-keyed minting creates by construction. GF* and OF* ids are structurally immune. - The real value is captured without re-minting 391 unshipped ids across 1327 files: the adopt step == curated GF adoption via the snapshot ledger (W4); the hash belongs to user presets (W5, cf. PR #13315); client hardening (W1) that the ten already-shipped P-hex system ids (Cubicon x8, Ginger, Artillery) need today anyway. Method: 6 parallel evidence agents (generator semantics, AMS/device path, exhaustive shape-dispatch sweep, upstream + online sources, tree-wide dry-run over 5892 presets / 1148 base names, branch change inventory) into a 3-judge panel (keep-OF* won 23/40 aggregate); the upstream generator was verified byte-identical to BambuStudio master, and every load-bearing file:line and number in the document was re-verified against the tree before commit. --- filament_id_plan_v2.md | 310 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 310 insertions(+) create mode 100644 filament_id_plan_v2.md diff --git a/filament_id_plan_v2.md b/filament_id_plan_v2.md new file mode 100644 index 0000000000..dd8c6957c3 --- /dev/null +++ b/filament_id_plan_v2.md @@ -0,0 +1,310 @@ +# filament_id plan v2: the `get_filament_id` (P+md5) proposal, validated + +Follow-up to `filament_id_plan.md` (v1, implemented on `feature/filament_id`: deterministic +`OF*` mint + snapshot ledger + 30-vendor migration, tree-wide validator `-f` = 0). + +**Proposal under review:** mint system `filament_id`s with the scheme of +`static std::string get_filament_id(std::string vendor_typr_serial)` +(`src/slic3r/GUI/CreatePresetsDialog.cpp:487-552`) — Bambu's user-custom-filament id +allocator — so system ids are "compatible with Bambu AMS sync". + +Every claim below was verified in source (`file:line`), against upstream BambuStudio, or in +primary online sources (URLs in §8). Verdict first, evidence after. + +--- + +## 0. Executive summary — the verdict + +**Do not re-mint system ids as `P+md5(name)`. Keep the v1 `OF*` mint.** Three facts decide it: + +1. **The AMS/device path never validates id *shape*.** `tray_info_idx` is an opaque string + end-to-end: sent verbatim (`DeviceManager.cpp:1642`), parsed verbatim + (`DevFilaSystem.cpp:512-514`), and firmware persists arbitrary bytes — an A1 stored and + echoed a *corrupted* id `Pde2\xea58c` (bambulab/BambuStudio#5436). A P-shaped system id + is not "more acceptable" to the device than an `OF*` one. +2. **P-shape buys zero recognition.** The printer resolves tray ids only against its built-in + `GF*` catalog plus the *account's* cloud custom-filament cache (official Bambu wiki); ids + it cannot resolve round-trip as `?`. Orca can never upload system presets into that cache + (`Preset.cpp:2071` gates cloud upload on `is_user()`), so an Orca system `P` id shows `?` + exactly like an `OF` id. The public catalog id space is 100% `GF*` (ha-bambulab + `filaments.json`: 86/86 ids). +3. **P-shape is the one shape the codebase punishes.** The *only* id-shape dispatch in the + entire tree is `MachineObject::check_ams_filament_valid` + `update_filament_list` + (`DeviceManager.cpp:5335/5352/5395/5410`, gate `setting_id.size()==8 && [0]=='P'`), a + user-custom lifecycle reconciler that **remotely wipes an AMS tray** + (`command_ams_filament_settings(..., "", "", white, "", 0, 0)` at `:5345`) or rewrites its + temps (`:5361-5367`) when a P-shaped tray id drops out of the user-root preset list + (`:5219`, armed at `:5268`). Name-keyed minting makes system id == user-custom id *by + design* (same name → same id), so "user deletes their now-redundant custom after the + system preset ships" becomes a remote tray wipe. `GF*` (wrong length) and `OF*` (wrong + first char) are structurally immune. + +The proposal's *real* value lives in two places, and v2 captures both without the re-mint: + +- **The adopt step** (the function's first branch, `:509-511/:526-528`): same base name → + same id. In-app, this already gives Orca-local convergence today — a user custom named + like a system family adopts the system id *whatever its shape*. At authoring time, the + same semantics = the v1 `shared_catalog` mechanism; §5/W4 extends it (curated, optional) + to let byte-authentic Bambu-catalog families carry authentic `GF*` ids. +- **The hash step belongs to user space.** `P+md5(name)` is Bambu's allocator for *user* + presets; the community is already asking for it there (OrcaSlicer PR #13315, unique ids + for inherited user presets). §5/W5 endorses that lane. System profiles stay out of the + `P` namespace — and v2 adds client hardening (W1) because ten *already-shipped* system + P-hex ids (Cubicon `P510cf**`×8, Ginger `P510eff9`, Artillery `Pfcf9c4c`) sit inside the + wipe-gate's shape match today. + +Judge panel (3 independent lenses over 4 variants; §7): keep-`OF*` won 23/40 aggregate +(device-ecosystem 6, identity-semantics 8, migration-enforceability 9) vs full Bambu +emulation 11, hash-only name-keyed 12, vendor-scoped P-hash 12. The single dissent +(device-ecosystem, favoring adoption) is honored by W4; its own verdict on the shape was +"adopt the semantics, not the costume". + +--- + +## 1. What the proposed generator actually is (verified) + +`get_filament_id(vendor_typr_serial)` (`CreatePresetsDialog.cpp:487-552`), called with +`" "` (`:1128`, `PLA-AERO`→`"PLA Aero"`), and per-preset with the +display base name when cloning presets for a user-created printer +(`Preset.cpp:2785-2803` → `:2798-2800`): + +1. **Adopt:** scan a temp bundle of *every* vendor bundle on disk + (`PresetBundle::load_system_filaments_json`, `PresetBundle.cpp:2342-2391`) plus the + user's presets, then the live bundle (`Preset.cpp:2831-2842`); if any preset's base name + (`name.substr(0, first('@') - 1)`) equals the input and its id ≠ `"null"`, **return that + id** — which can be `GF*`, `QD_*`, `OF*`, or another user's P-hex. +2. **Mint:** `"P" + md5(input)[0:7]`, lowercase hex over the raw UTF-8 bytes (`:533`, + `:480`). +3. **Collide:** if the id is held by a *different* name, re-hash with a local wall-clock + salt (`md5(input + get_curr_time())`, `:547`) — non-deterministic by construction. + +Upstream parity: the function and its caller input construction are **byte-identical** in +BambuStudio master (`CreatePresetsDialog.cpp` L434-499 / L1061; diff empty, fetched +2026-07-03). So identical dialog inputs in BBS and Orca yield identical ids — the kernel of +the proposal's compatibility claim. + +Reproduction limits (why "exactly the approach" cannot be ported to system minting anyway): + +- The base-name parser truncates names lacking a space before `@` (`"Afinia PLA@HS"` → + `"Afinia PL"`); 48 shipped presets hit this, and the *clone* path parses differently + (`" @"` two-char, `Preset.cpp:2792`), so the app itself is internally inconsistent. +- 597 presets (361 whole families, e.g. all of Anker) contain no `@` and are invisible to + the adopt scan and its collision map (`:505-508`). +- The collision salt is wall-clock time — unreproducible across machines, so id values + cannot be CI-verified from names; a ledger would still be the sole source of truth. +- Shipped P-hex ids don't round-trip from names today: Cubicon `P510cfb0` ≠ + `P+md5("Cubicon ABS")` = `Pc624b68` (verified) — so even Bambu-lineage P ids are not + name-derivable in practice. + +## 2. What Bambu AMS sync actually consumes (verified) + +- Send: `command_ams_filament_settings` puts the preset's `filament_id` verbatim into + `tray_info_idx` (`DeviceManager.cpp:1642`); cloud vs LAN differ only in transport + (`:2502-2536`). No client- or firmware-side rejection path exists; the ack parse stores + whatever the printer echoes (`:3808-3860`). +- Resolve (slicer side): tray id → first compatible root preset with equal `filament_id` — + system *and* user roots, no shape filter (`PresetBundle.cpp:3151`, `:3252-3254`); misses + fall back by `"Generic "` name, then similarity, then keep-previous + (`:3157-3169`, `:3260-3305`). `setting_id_to_type` resolves against `is_system` presets + only (`DeviceManager.cpp:2538-2559`) — a system preset resolves *because it is system*, + never because of its id shape. +- Resolve (device side): built-in `GF*` catalog + the account's cloud custom cache; + custom-filament sync is **cloud-only** (not LAN), and an id the printer has no data for + displays `?` until opened once on the printer screen (official wiki, §8). Third-party + consumers see customs as "unknown" (ha-bambulab #466/#540). +- Since Jan 2025, AMS configuration is gated behind Bambu-signed clients on new firmware + (Developer Mode / older firmware exempt) — any AMS-sync benefit for Orca is conditional + on that regardless of id scheme (Bambu authorization blog, §8). +- Orca already ships non-`GF`/non-`P` shapes to Bambu trays in the field: OFL presets are + compatible with every printer (`PresetBundle.cpp:5681-5684`) and carry `OGF*`/`OFL*` ids + (e.g. `OFLSBS99`, hardcoded in `MoonrakerPrinterAgent.cpp:654`). The premise "the + ecosystem has only ever seen `GF*`/P-hex" is already false, with no observed rejection. + +**Cross-client reality check.** The name-keyed benefit ("a BBS-created custom named like an +Orca system preset lands on the same id, so Orca's sync matches the system preset") is +mechanically true but narrow: it needs byte-exact names (including the `PLA Aero` mapping +and single spacing), the unsalted hash path, cloud mode, and permissive firmware. The +symmetric case already works in Orca *without* any re-mint: an Orca user creating a custom +named like a system family **adopts the system id** via the in-app adopt branch, so local +custom ↔ system ↔ tray matching is shape-independent today. + +## 3. The disqualifying finding, in mechanism form + +`update_filament_list` (`DeviceManager.cpp:5208-5272`) snapshots `{filament_id → temps}` +over **user root presets only** (`preset.is_user() && preset.inherits() == ""`, `:5219`); +ids that vanish or change temps between snapshots are armed into `checked_filament` +(`:5268`). `check_ams_filament_valid` (`:5311-5445`) then, for every AMS/virtual tray whose +`setting_id` matches `size()==8 && [0]=='P'`: + +- id armed and **not** in the current user-root list → remotely **clears the tray** + (`:5335-5349`, `:5395-5408`); +- id armed and in the list with unequal temps → **rewrites tray temps from the user + preset**, ignoring same-id system presets (`:5352-5374`; `PresetBundle.cpp:3719` skips + non-user presets; unguarded `find()->second` at `:3717`). + +Failure scenario under the proposal: system `"PolyLite PLA"` ships with +`P+md5("PolyLite PLA")`. A user's same-named custom (BBS- or Orca-created — same id by +design) is on an AMS tray. The user deletes the now-redundant custom. Next status refresh: +the id is armed, absent from user roots → Orca wipes the tray, even though the system +preset still resolves that id perfectly. Runs continuously (`StatusPanel.cpp:3275-3277`). + +Two corollaries independent of the proposal (→ W1): + +- The ten shipped P-hex **system** ids (Cubicon/Ginger/Artillery) already pass the shape + gate; only the "id must transit a user root" arming condition protects them, and the + in-app adopt branch can create exactly that transit today. +- `assert(it->first.size() == 8 && it->first[0] == 'P')` (`:5252`) is violable today: a + user custom named `"Bambu PLA Basic"` adopts `GFA00` onto a user root and aborts debug + builds. + +## 4. Identity costs the re-mint would add (quantified, tree dry-run) + +- 1148 distinct family base names; **198** appear in 2+ vendors; **159** groups carry ≥2 + distinct ids today and would silently merge under name-keying (Generic PETG alone: 15 + ids today). 112 involve BBL; 82 are `GF↔OGF` mirror pairs. +- **4** cross-vendor groups share a name across materially different `filament_type` + (Generic PLA Silk, Generic PETG-CF, Generic PA6-CF, Generic PE-CF) — one merged id would + feed wrong type/name/vitrification to the global unscoped consumers + (`PresetBundle.cpp:690-733`; `DeviceManager.cpp:2538`; `FilamentGroup.cpp:513-519`) (→ W3). +- 33 deliberately-split families on the branch would re-merge (25 Elegoo-vs-OFL pairs, 7 + FlyingBear-vs-InfiMech "Other *" pairs, the salted Cubicon PC pair) — undoing v1 + decisions that the fixture gate forced. +- Renames become id migrations: name-keyed ids re-key on any marketing rename; the ledger + can freeze them, but then name-derivability — the scheme's selling point — dies family + by family. The `OF*` key (`vendor/family`) survives display-name churn. +- Entropy drops 35.7 → 28 bits (still 0 collisions at today's 1148 names; ~0.75 expected + at 20k). Re-mint surface: 391 unshipped ids across 1327 files, 13 hardcoded tests, the + reserved-namespace policy inversion, and a retired-ledger rebuild. + +## 5. Work items (delta from `feature/filament_id` HEAD) + +**W1 — client hardening (C++, small, ships with the migration PR train).** + a. Skip the tray-reset and temp-rewrite in `check_ams_filament_valid` when **any + `is_system` filament preset carries the tray's id** — no compatibility filter, + mirroring the semantics of the global consumers (`get_filament_by_filament_id`, + `setting_id_to_type`). This protects the ten shipped P-hex system ids and any BBS + custom colliding with them, while ids resolving only to user presets (or to nothing) + keep today's cleanup behavior. + b. Relax the debug assert `DeviceManager.cpp:5252` to a log (user roots legitimately + carry adopted `GF*`/`OF*` ids). + c. Guard `PresetBundle.cpp:3717` (`find()` unchecked before `->second`). + d. Regression-check that AMS sync never clears trays whose id it merely cannot resolve + (OrcaSlicer#4431 class): the keep-previous fallbacks at `PresetBundle.cpp:3163-3169`, + `:3296-3305` must cover the UI paths. + +**W2 — tooling + doc guardrails.** + a. Document `^OF[0-9A-Za-z]{6}$` as the system-mint namespace. **Do not add it to + `reserved_space_owner`** (`scripts/assign_filament_ids.py:394-402`): check 6 exempts + only snapshot-grandfathered claims and the `--update-snapshot` refusal gate + (`:596-621`) would then reject every *future* mint. The space is already enforced — + check 3 (mint conformance, `:488-509`) errors on any OF-shaped id that does not equal + its own family's mint (covered by `test_check3_of_id_must_match_mint`), and the + snapshot diff is the human gate. Add one doc paragraph + a test asserting a foreign + vendor claiming another family's OF id fails check 3. + b. `doc/developer-reference/filament_id.md`: add a "why not P-hex" section citing the + `DeviceManager.cpp:5335` gate and the account-cache resolution model — community + pressure toward `P+md5` exists (PR #13315) and will recur. + c. Document that user roots may legitimately hold adopted system ids (incl. what that + means for cloud upload, `Preset.cpp:1874-1876`), matching BBS behavior. + +**W3 — data hygiene: the 4 same-name-different-type groups.** Audit each (they confuse + name-based fallback matching and any future interop even under vendor-scoped ids): + verify whether the divergent `filament_type` is a data bug (e.g. OFL `Generic PETG-CF` + resolving `PETG`, OFL `Generic PE-CF` resolving `PE`, Flashforge `Generic PLA Silk` + mixing `SILK`+`PLA`, Creality-vs-Elegoo `Generic PA6-CF` as `PA-CF`/`PA6-CF`) or + intentional; fix by type alignment or rename with evidence, gated by + config-equivalence (only `filament_type` diffs as prescribed) + full validator suite. + +**W4 — optional, curated GF adoption (the proposal's adopt step, done safely).** Extend the + v1 `--allow-shared-catalog` mechanism into an explicit per-family adoption worksheet: a + family may carry a byte-authentic Bambu catalog id iff (i) it is verifiably the same + commercial product as the BBL family (vendor evidence + equal `filament_type`), (ii) + validator `-f` stays 0 tree-wide (alias shadowing covers BBL/OFL overlaps), (iii) the + fixture gate passes, (iv) the snapshot diff records the adoption. Candidates: the 13 + actionable BBL-overlapping families minted `OF*` in v1 (e.g. Qidi `Bambu ABS`→`GFB00`, + `PolyLite PLA`→`GFL00`, `Overture PLA`→`GFL04`, `PolyLite ABS`→`GFB60`; `OFLSBS99` is + shipped and frozen; the two type-hazard OFL families are excluded until W3 lands). + **Honest benefit statement:** these presets are compatible only with non-Bambu printers, + so no Bambu device resolves their ids today; the payoff is one-product-one-id coherence + for the global consumers, project portability, and readiness for W6. Recommended seed: + the four Qidi brand families; generics deferred. + +**W5 — user-preset lane (where the proposal's hash belongs).** Support unique ids for + inherited user presets (the PR #13315 pain: children share the parent's id, so AMS always + resolves the generic parent). `P + md5(preset name)` matching + `CreatePresetsDialog::get_filament_id` is correct *in user space*: adopt-first against + existing ids, then hash; ids frozen per preset after mint. Constraints: never emitted + into system profiles (W2a makes that mechanical); W1 must land first so shared-id + lifecycles can't wipe trays. + +**W6 — recorded future option:** SoftFever's "upload OrcaSlicer's filament database + (especially the filament ID) to the printer" (PR #12724 comment). If pursued, Orca ids + become first-class device-visible artifacts and the P-mimicry question is permanently + moot; the `OF*` scheme is the *better* citizen there (collision-free vendor-scoped ids, + no user-custom masquerade). + +Unchanged from v1: mint rule, snapshot/retired ledgers (no OF retirement — nothing is +re-minted), CI wiring, migration commits. `filament_id_plan.md` remains the implemented +baseline; this document records the v2 decision and its follow-on work. + +## 6. Gates (per work item) + +Same battery as v1, all local: `python scripts/orca_extra_profile_check.py` exit 0; +`assign_filament_ids.py --check` exit 0 (46+ unit tests green; new tests for W2a +reservation and, when implemented, W4 adoption sanctioning); validator `-l 2` exit 0, +`-f` tree-wide exit 0, `-r` BBL+Qidi exit 0; custom-preset fixture overlays (the W1/W4 +changes touch exactly the preset-visibility machinery the fixtures exist to protect); +config-equivalence: flattened effective configs differ only in prescribed keys +(`filament_id` for W4, `filament_type` for W3, none for W1/W2). W1 additionally needs a +manual AMS smoke test on a live Bambu printer (tray set/clear round-trip) — a release +checklist item, not CI (the workflows have no hardware runners). + +## 7. Scheme comparison (judge panel record) + +| Variant | Device lens | Identity lens | Migration lens | Σ | +|---|---|---|---|---| +| V1 full Bambu emulation (adopt incl. `GF*` + P+md5 + salt) | 7 | 2 | 2 | 11 | +| V2 hash-only name-keyed `P+md5(base name)` | 4 | 4 | 4 | 12 | +| V3 vendor-scoped P-hash (`P+md5(vendor/family)`) | 2 | 5 | 5 | 12 | +| **V4 keep `OF*` uuid5 vendor-scoped (chosen)** | 6 | 8 | 9 | **23** | + +All three judges answered the pivotal question the same way: the P-hex **shape** confers no +device/cloud benefit (resolution is by value against catalog + account cache; the path is +otherwise shape-agnostic) and is the only shape with a destructive client-side gate. V3 is +strictly dominated (all of the re-mint cost, none of the name-keyed benefit). V1's genuine +half — GF adoption — is captured by W4 at zero re-mint cost. + +## 8. Evidence index + +Code (this branch): `CreatePresetsDialog.cpp:487-552,1128,2798-2800` (generator + callers); +`DeviceManager.cpp:1642` (verbatim send), `:2538-2559` (system-only type resolve), +`:5208-5272` (user-root snapshot, `:5219`, `:5252` assert, `:5268` arming), `:5311-5445` +(P-shape gate + tray wipe `:5335/:5345`, temp rewrite `:5352-5374`, virtual tray +`:5395-5435`); `DevFilaSystem.cpp:512-524`; `PresetBundle.cpp:690-733,3116-3128,3151, +3252-3254,3709-3767,5674-5753`; `Preset.cpp:1874-1876,2071,2785-2842`; +`AMSMaterialsSetting.cpp:886,894-897`; `WebGuideDialog.cpp:67`; +`PresetComboBoxes.cpp:1952-1966`; `MoonrakerPrinterAgent.cpp:654`; +`scripts/assign_filament_ids.py:69,71-72,118-144,394-402,596-621`. + +Online (fetched 2026-07-03): BambuStudio master `CreatePresetsDialog.cpp` L434-499 +(byte-identical generator); wiki.bambulab.com `create-filament` (custom filaments AMS-able +from firmware 1.6.6; only dialog-created presets sync) and `custom-filament-issue` +(cloud-only sync; unknown ids show `?`); blog.bambulab.com authorization-control (Jan-2025 +AMS-config gating); bambulab/BambuStudio#5436 (firmware persists corrupted id); +OrcaSlicer #4431 (tray clobber to `?`), #3874 (cloud-only confirmation), PR #14459 +(the `-f` invariant), PR #14423 + PR #12724 + PR #13315 (maintainer statements / community +P+md5 pressure); greghesp/ha-bambulab `filaments.json` (86/86 `GF*`) + #466/#540. + +Method: 6 parallel evidence agents (generator semantics; AMS/device path; exhaustive +shape-dispatch sweep; upstream/online; tree-wide dry-run over 5892 presets / 1455 families; +branch change inventory) → 3-judge panel (device-ecosystem, identity-semantics, +migration-enforceability lenses). Dry-run artifacts: session scratchpad +`phex_dryrun_{summary,details,followup}.json`. + +## 9. Open decisions for maintainers + +1. **W4 scope**: none / 4 Qidi brand families (recommended) / + generic-tier re-adoption. +2. **W5 timing**: implement in-repo vs review upstream PR #13315 with the W1 hardening as a + prerequisite either way. +3. **W6**: pursue the filament-database-upload design (makes Orca ids device-visible and + ends the mimicry debate for good). From 67406b24babaada2694787ce62620d2ced61bc78 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 14:54:48 +0800 Subject: [PATCH 014/208] plan v3: OFL as the catalog, content-addressed product ids MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Revises the v1 mint rule after the maintainer catch that its key scoped families to the profile bundle (printer brand), fragmenting one commercial product into N ids (PolyLite PLA: five bundles, all filament_vendor "Polymaker", up to five ids). Architecture: BBL and QD_* stay frozen islands; OrcaFilamentLibrary becomes the single declaration point for every other material family; vendor bundles carry only same-alias specializations (no filament_id key) that shadow the OFL preset per printer and resolve its id through the loader walk. New mint key: uuid5 over "filament_product///" from the root's flattened config — bundle-independent (hoisting families into OFL is id-stable), and the type component keeps the four known same-name- different-type groups apart until their data bugs are fixed. Content-addressing replaces "ids immutable once shipped": identity edits re-id the family, made safe by turning retired_filament_ids.json into a shipped succession ledger (old id -> successor, chains allowed, cross-island hints permitted) consulted on resolution miss in the AMS sync and lookup paths. The MoonrakerPrinterAgent hardcoded generic-id map is replaced by a runtime preset lookup, removing the code/profile lockstep. Migration: v3.0 tooling + W1 client hardening + W3 type fixes; v3.1 OFL re-mint with succession entries; v3.2 vendor bundles (391 unshipped OF ids re-derive without retirement; generic tunings re-point to OFL; ~800 shipped legacy ids re-mint with succession, incl. the 57 multi-vendor GF residue and the 10 P-hex system ids, which also exits them from the destructive check_ams_filament_valid P-gate); v3.3 optional id-stable consolidation into OFL. Gate battery unchanged plus succession-resolution tests. filament_id_plan_v2.md gets a status note: its P+md5 verdict stands; its work items are absorbed or superseded by v3. --- filament_id_plan_v2.md | 4 + filament_id_plan_v3.md | 203 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 207 insertions(+) create mode 100644 filament_id_plan_v3.md diff --git a/filament_id_plan_v2.md b/filament_id_plan_v2.md index dd8c6957c3..b5bf0f1c65 100644 --- a/filament_id_plan_v2.md +++ b/filament_id_plan_v2.md @@ -1,5 +1,9 @@ # filament_id plan v2: the `get_filament_id` (P+md5) proposal, validated +> **Status note:** the verdict in §0-§4 and §7-§8 stands. The work items in §5 are +> superseded by `filament_id_plan_v3.md` (OFL-as-catalog, content-addressed triple key, +> succession ledger): W1/W3 are carried into v3.0, W2/W5 carry unchanged, W4 is dropped. + Follow-up to `filament_id_plan.md` (v1, implemented on `feature/filament_id`: deterministic `OF*` mint + snapshot ledger + 30-vendor migration, tree-wide validator `-f` = 0). diff --git a/filament_id_plan_v3.md b/filament_id_plan_v3.md new file mode 100644 index 0000000000..5cf4cf61a4 --- /dev/null +++ b/filament_id_plan_v3.md @@ -0,0 +1,203 @@ +# filament_id plan v3: OFL as the catalog, content-addressed product ids + +Supersedes §5 of `filament_id_plan_v2.md` (whose P+md5 verdict stands unchanged) and +revises the mint rule of `filament_id_plan.md` (v1, implemented on `feature/filament_id`). +Decision driver: v1's mint key scoped families to the *profile bundle* (printer brand), so +one commercial product tuned in N bundles carries N ids — e.g. PolyLite PLA ships in five +bundles (`BBL`, `OrcaFilamentLibrary`, `OrcaArena`, `Qidi`, `Snapmaker`), all with +`filament_vendor: "Polymaker"`, under up to five different ids (`GFL00`, `OFceJcLf`, …). +That contradicts what `filament_id` means: one id per commercial product line. + +## 0. The architecture + +Three tiers, two frozen islands: + +1. **BBL island — untouched.** Bambu profiles keep their `GF*` catalog ids byte-for-byte + (device/RFID/cloud contract). No convergence between GF and OFL ids is attempted: the + same product may permanently carry `GFL00` on the BBL side and an `OF*` id everywhere + else. This is a deliberate trade for simplicity; v2's curated-GF-adoption (old W4) is + dropped. +2. **`QD_*` island — untouched.** Qidi's box builds `QD___` from + device enums and requires exactly-matching presets (`QidiPrinterAgent.cpp:146-152`). + Qidi presets carrying `QD_*` are exempt from re-minting, forever. +3. **Everything else converges on OrcaFilamentLibrary.** OFL is the product catalog: a + material family's id is declared once, on its OFL family root. Vendor bundles carry + only per-printer *specializations* of OFL families — same base name, non-empty + `compatible_printers`, **no `filament_id` key** — which (a) alias-shadow the OFL preset + on the printers they claim (`Preset.cpp:3684-3714`: "Generic PLA @Qidi Q2 0.4mm nozzle" + hides "Generic PLA @System" on that machine) and (b) resolve the OFL family's id + through the loader's inherits/base-bundle walk (`PresetBundle.cpp:4842-5080`). Products + OFL does not (yet) carry mint their id in the vendor bundle **with the same rule**; + because the key is bundle-independent (§1), later hoisting the family into OFL never + changes its id. + +Convergence therefore happens by *single declaration point*, not by copying ids across +bundles — no adoption registry, no cross-bundle id claims to curate. + +## 1. The mint rule + +``` +triple = (filament_vendor, filament_type, family_name) # from the family ROOT's flattened config +key = "filament_product///" +id = "OF" + base62_6( uuid5( FILAMENT_ID_NAMESPACE, key ) ) # namespace unchanged: + # c4d3ff49-4c32-5534-a3e3-00894157ab97 +``` + +- **Triple resolution.** All three values come from the family root preset's *flattened + effective config* (`filament_vendor` and `filament_type` are inheritable list options — + take the first element; family_name = the root's base name, `\s?@.*` stripped once). + For own-key-layout families (no root), each declaring preset's flattened config is used + and CI requires all declarers of one family to agree on the triple. A root that resolves + an empty `filament_vendor` or `filament_type` is a CI error (generics use `"Generic"`). + Values enter the key verbatim (UTF-8, no case folding). +- **Bundle-independent by design.** The key contains no bundle name, so the same product + yields the same id whether minted in OFL or in a vendor bundle; migrating a family into + OFL (§0.3) is id-stable. Two bundles independently adding the same triple converge + automatically — and that is correct, because equal (vendor, type, name) *is* the + definition of "same product" here. The known look-alike hazards stay separated by the + type component: the 4 same-name-different-type groups (Flashforge `Generic PLA Silk` as + SILK, OFL `Generic PETG-CF` as PETG, `Generic PA6-CF`, `Generic PE-CF`) hash apart until + their type bugs are fixed (§5, W3) and converge automatically after — self-healing that + pure name-keying (rejected in v2) could not provide. +- **Format and salt unchanged from v1**: 8 chars, `OF` + 6 base62; deterministic `/1`, + `/2`… salt past any taken or retired id (the O+7 widening was evaluated and rejected: + 62⁶ expects 1.9×10⁻⁵ collisions at today's 1,455 families, and `^O.{7}$` would sweep 35 + legacy ids into the conformance gate vs. one today). +- **Content-addressed, deliberately.** If any triple component changes — a family rename, + a `filament_vendor` correction, a `filament_type` fix — the id changes with it. This + *replaces* v1's "ids are immutable once shipped" with "ids are derivable from the + product identity, and identity changes are migrations" — made safe by the succession + ledger (§2). `renamed_from` still gates preset-name compatibility as before. +- CLI: `--mint "Polymaker/PLA/PolyLite PLA"` prints without touching the tree; running + the script plain inserts missing ids; CI errors print the expected id. + +## 2. The succession ledger (the amendment that makes this safe) + +Shipped ids are referenced outside the tree: AFC/Klipper lane data, Bambu AMS trays +holding OFL-only materials, on-device PA-calibration records, user-root preset copies, +3mf `slice_info`. Retiring an id without a forwarding pointer downgrades all of those to +`Generic ` fallbacks. Therefore: + +- **Schema.** `scripts/retired_filament_ids.json` entries become objects: + `{"retired": {"OGFL99": {"claims": [...], "successor": "OFxxxxxx"}}}`. Append-only as + before; a successor may itself be retired later (chains allowed, cycle-checked, and + followed to the live end). A retired id may never be minted again (check 4 unchanged). + Cross-island *hint* entries are permitted for ids Orca cannot retire because another + island owns them (e.g. `GFL99 → `): consulted only when no live + preset matches, so BBL installs still resolve `GFL99` natively first. +- **Shipped and consulted at runtime.** The ledger ships in `resources/`; a small helper + (`resolve_filament_id_succession(id)`) follows the chain and is consulted **only on + resolution miss**, before the `Generic ` name fallback, in: + `PresetBundle::get_filament_by_filament_id` (covers `DevFilaBlackList`, `SelectMachine` + warnings, `Plater` tray configs in one place), the AMS sync match predicates + (`PresetBundle.cpp:3151`, `:3252-3254` miss paths at `:3157-3169`/`:3260-3305`), + `PresetComboBoxes::add_ams_filaments`, `MachineObject::setting_id_to_type` + (`DeviceManager.cpp:2545` miss branch), calibration-history name lookup + (`CaliHistoryDialog.cpp:62`), and the #14423 Moonraker lane matching when it lands. + With this in place the OFL re-mint is near-residue-free and every future + content-addressed rename stays safe. +- **Kill the hardcoded generic map.** `MoonrakerPrinterAgent::map_filament_type_to_generic_id` + (`MoonrakerPrinterAgent.cpp:608-658`) hardcodes 23 OFL ids (`OGFL99`… `OFLSBS99`). + Replace it with a runtime lookup of the OFL generic preset by name ("Generic PLA + @System" → its current id), removing the code↔profile lockstep permanently. (This also + releases `OFLSBS99`, v2's one frozen OF-shaped legacy id, for normal re-minting.) + +## 3. Validation rule changes + +- **Check 3 (mint conformance)** becomes a pure function of the root's triple: a non-BBL, + non-`QD_*` id must equal `mint(triple)` ± salt, or be snapshot-grandfathered (the + grandfather set shrinks to ≈ nothing for non-BBL once migration completes). +- **Check 5 (alias hygiene) generalizes and becomes load-bearing.** For *every* + OFL-carried family (not just `Generic * @System`): a vendor specialization must keep the + OFL base name (else the OFL preset un-shadows and creates a live per-printer duplicate — + v1's P7 pattern) and non-empty `compatible_printers`, and must not declare an id. The + C++ validator's OFL-aware `-f` (`PresetBundle.cpp:5674-5753`) already enforces the + runtime consequence; the script check names the rename as the cause. +- **New check 8 (triple integrity):** every id-declaring family resolves a complete, + family-consistent triple; roots missing `filament_vendor`/`filament_type` error. +- **New check 9 (succession integrity):** every retired entry's successor chain ends at a + live tree id (or a documented cross-island hint target); no cycles; retired ids absent + from the tree. +- Snapshot mechanism, reserved spaces (`GF*`→BBL, `QD_*`→Qidi, `P`-hex/`null`→user-custom; + v2's do-not-reserve-`OF*` note stands), and check 1/2/4/7 are unchanged. + +## 4. Migration phases + +**v3.0 — tooling + prerequisites (no profile changes).** New mint + triple resolver +(reuse the flatten machinery), succession schema migration + C++ lookup helper wired into +the §2 miss paths, Moonraker map → runtime lookup, checks 3/5/8/9, tests. Carry v2's W1 +client hardening (skip tray-wipe/temp-rewrite when a system preset holds the id; relax +the `DeviceManager.cpp:5252` assert; guard the `PresetBundle.cpp:3717` deref) — it ships +first regardless. **W3 type fixes land here**, *before* any re-mint: type is now a key +component, so minting before fixing OFL `Generic PETG-CF`/`Generic PE-CF` would re-id +those families twice. + +**v3.1 — OFL re-mint.** Every OFL-declared id re-derives from its triple (mirrors like +`OGFA00`, generics like `OGFL99`, blocks like `OEPLAB00` — all of it); each old shipped id +gains a succession entry pointing at its replacement; the 26 BBL×OFL byte-shared ids +dissolve (BBL keeps its id; the OFL family gets its own — two-island purity). Snapshot +regenerated; full gate battery + fixture overlays (this phase touches preset-visibility +machinery only via ids, but the fixtures are cheap insurance). + +**v3.2 — vendor bundles, worksheet-per-vendor (v1 machinery).** Three sub-cases: + (a) the **391 unshipped v1 `OF*` mints** re-derive under the triple key — no succession + entries (they never shipped; a documented one-time `--forget-never-shipped ` drops + them from the ledger lineage instead of retiring them, since the ledger's rationale — + ids live on in user presets and 3mfs — cannot apply to unreleased ids); + (b) **true generic tunings** riding copied legacy ids (`GFL99`-class) drop their own id + and re-point to the OFL generic family (the v1 Sovol pattern) — their old ids get + cross-island hints where BBL owns them, succession entries otherwise; + (c) remaining **shipped legacy ids** (numeric, name-shaped, pseudo-GF, the 57 + multi-vendor GF residue, the 10 P-hex — everything non-BBL/non-`QD_*`, ~800 ids) + re-mint with succession entries. Retiring the 10 P-hex system ids also removes the last + system ids from `check_ams_filament_valid`'s destructive P-gate. + +**v3.3 — ongoing consolidation (optional, per-vendor, id-stable).** Hoist vendor-unique +products into OFL where a family is genuinely multi-vendor material; thanks to the +bundle-independent key this never changes ids, so it can proceed opportunistically. + +## 5. Gates (every phase) + +`python scripts/orca_extra_profile_check.py` exit 0; `assign_filament_ids.py --check` +exit 0; unit tests green (existing 46 + new triple/succession/adoption tests); validator +`-l 2` exit 0, `-f` tree-wide exit 0, `-r` BBL+Qidi exit 0; custom-preset fixture +archives; config-equivalence — flattened effective configs differ only in `filament_id` +(re-mints), `inherits`/`compatible_printers` (re-points, as prescribed per worksheet), and +the W3 `filament_type` corrections. New for v3: a C++ test that a retired id resolves +through the succession chain in the sync miss path, and a Moonraker test that the generic +map lookup matches the shipped OFL presets. Manual AMS smoke test (tray set → old-id +resolve → clear) stays a release-checklist item. + +## 6. Accepted costs (explicit) + +- **GF ↔ OFL divergence is permanent** for products in both catalogs (PolyLite PLA ≠ + `GFL00` outside BBL). The forward-looking fix is PR #12724-style filament-database + upload, where Orca ids become first-class device artifacts. +- **Renames/type-fixes re-id families** (by design); the succession ledger absorbs the + device/user residue, but each one is still a ledger entry and a snapshot diff to review. +- **User roots** keep whatever id they copied at creation; with succession lookup in + `get_filament_by_filament_id` they now *resolve* instead of dangling — strictly better + than v1's accepted residue. +- **One-time field transition**: devices holding pre-v3 ids (AFC lanes, AMS trays, cali + records) resolve via succession on updated clients; *older* Orca versions and + BambuStudio never resolved OFL-only ids anyway (`?`/generic fallback — unchanged for + them). + +## 7. Open decisions + +1. Whether v3.2(b)'s cross-island hints (`GFL99` → OFL generic) are wanted at launch or + deferred (pure-miss-path feature; zero risk to BBL installs, small review surface). +2. v3.3 pacing: per-vendor PRs opportunistically vs. a dedicated consolidation train. +3. Whether to fold v2's W5 (P+md5 ids for inherited *user* presets, PR #13315) into v3.0's + C++ work or keep it a separate PR (recommended: separate; W1 is its only prerequisite). + +## 8. Evidence + +Carried from v2 §8 (all re-verified this session), plus: `filament_vendor` audit — 49 +distinct strings tree-wide, `"Polymaker"` byte-consistent across all five PolyLite-PLA +bundles; multi-vendor different-family GF residue = 57 ids; `MoonrakerPrinterAgent.cpp: +608-658` = 23 hardcoded OFL ids; mint examples verified live (`Qidi/PolyLite PLA` → +`OFceJcLf` under the v1 key — the fragmentation this plan removes; salt determinism +`OF8afiMO`). Alias shadowing and the OFL id fallback verified at `Preset.cpp:3684-3714` +and `PresetBundle.cpp:4842-5080` during the v1 audit; per-printer `-f` semantics at +`PresetBundle.cpp:5674-5753`. From 2c0867619c1276454c9c6f9ae73c99de00e35f06 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 16:28:35 +0800 Subject: [PATCH 015/208] v3.0: content-addressed mint tooling, succession runtime, W1 hardening Implements phase v3.0 of filament_id_plan_v3.md - tooling and client prerequisites. No filament_id values change in this commit. Tooling (scripts/assign_filament_ids.py; 106 unit tests): - The mint key becomes "filament_product/// ", resolved loader-faithfully from the declarer's flattened config - bundle-independent and content-addressed; identity fixes re-id by design and are made safe by the succession ledger. --mint now takes the triple. - The snapshot gains "triples" and "triple_exceptions" sections, folded into the equality gate: any vendor/type/name change surfaces as a reviewable snapshot diff. Check 3 rewritten to triple-mint conformance with (id, triple) grandfathering; check 5 generalized from OFL generics to every OFL-riding vendor preset; new check 8 (triple integrity) and check 9 (succession integrity). - The retired ledger moves to resources/profiles/retired_filament_ids.json so it ships with the app; schema {claims, successor} plus cross-island "hints". The 14 v1 entries are migrated with mode-rule successors. Vanished ids in a foreign island's space (GF*/QD_*) are RELEASED with a hint instead of retired: the island catalog owns them and may legitimately (re)ship them, which check 4 must never block. - New maintenance modes: --remint VENDOR, --drop-redundant-ids VENDOR, --add-hint "OLD=NEW", and --update-snapshot --forget-never-shipped FILE (never-shipped ids drop from lineage; chains splice through them). Runtime (C++): - Succession helpers in libslic3r/Preset (pure chain-follow + lazy ledger load from resources), consulted only on resolution miss in get_filament_by_filament_id, both AMS sync predicates, add_ams_filaments, setting_id_to_type, and the calibration-history lookup; behavior is byte-identical while the ledger has no matching entry. Catch2 coverage in tests/libslic3r. - W1 hardening: check_ams_filament_valid no longer remote-wipes trays or rewrites temps for P-shaped ids that a system preset carries (ten such system ids ship today); the size==8 && [0]=='P' assert is relaxed; the unguarded filament_list find deref in the temp-equation check returns non-destructively on a miss. - MoonrakerPrinterAgent: the 23 hardcoded OFL generic ids are replaced by a runtime lookup of "Generic @System" (id-equivalent on today's shipped profiles, follows future re-mints automatically); scripts/test_moonraker_lane_data.py derives its expectations from the shipped profiles and gains --check-ofl-map. Profile data (W3 - type is now a key component, so type bugs are fixed before any re-mint): - 17 same-name-different-type groups corrected across 50 files (OFL Generic PETG-CF/PE-CF/PP-CF; Flashforge ASA Basic/ASA-CF/ABS-CF/HIPS/ PAHT-CF/PLA Silk; FusRock PAHT; Creality Generic PA6-CF; InfiMech PETG; Anycubic TPU 95A / TPU for ACE; Prusa Generic PA-CF/PLA-CF) - every value validated against MaterialType::all(); 3 Snapmaker U1 roots gain their missing filament_vendor. Flattened-config equivalence vs the previous commit: exactly the 54 intended diffs, zero BBL. - doc/developer-reference/filament_id.md rewritten for the v3 rule. Ambiguous type divergences (Prusa Generic TPU/TPU HF FLEX-vs-TPU, FusRock S-Multi/S-PAHT) and all same-type vendor-tag divergences are deferred to the v3.2 vendor worksheets, catalogued with analysis. --- doc/developer-reference/filament_id.md | 74 +- filament_id_plan_v3.md | 12 +- ...95A @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ACE @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ACE @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- .../Generic PA6-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PA6-CF @K1C-all.json | 2 +- .../Generic PA6-CF @K1C_CFS-C-all.json | 2 +- .../Generic PA6-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PA6-CF @K2 Plus-all.json | 2 +- .../filament/Generic PA6-CF @K2 Pro-all.json | 2 +- .../filament/Flashforge ABS-CF @FF G4.json | 3 + .../filament/Flashforge ABS-CF @FF G4P.json | 3 + ...shforge ASA Basic @FF AD5X 0.6 nozzle.json | 3 + ...shforge ASA Basic @FF AD5X 0.8 nozzle.json | 3 + .../Flashforge ASA Basic @FF AD5X.json | 3 + .../filament/Flashforge ASA-CF @FF G4.json | 2 +- .../filament/Flashforge ASA-CF @FF G4P.json | 2 +- .../filament/Flashforge ASA-CF.json | 2 +- .../Flashforge HIPS @FF G4 0.6 HF nozzle.json | 3 + .../Flashforge HIPS @FF G4 0.6 nozzle.json | 3 + .../Flashforge HIPS @FF G4 0.8 HF nozzle.json | 3 + ...Flashforge HIPS @FF G4P 0.6 HF nozzle.json | 3 + .../Flashforge HIPS @FF G4P 0.6 nozzle.json | 3 + ...Flashforge HIPS @FF G4P 0.8 HF nozzle.json | 3 + .../filament/Flashforge PAHT-CF @FF G4.json | 2 +- .../filament/Flashforge PAHT-CF @FF G4P.json | 2 +- ...shforge PLA Silk @FF AD5X 0.25 nozzle.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.6 nozzle.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Silk @FF AD5X.json | 2 +- .../filament/Flashforge PLA Silk @FF C5.json | 2 +- .../filament/Flashforge PLA Silk @FF C5P.json | 2 +- .../FusRock PAHT @FF G4 0.6 HF nozzle.json | 3 + .../FusRock PAHT @FF G4 0.8 HF nozzle.json | 3 + .../FusRock PAHT @FF G4P 0.6 HF nozzle.json | 3 + .../FusRock PAHT @FF G4P 0.8 HF nozzle.json | 3 + .../filament/FusRock PAHT-CF @FF G4.json | 2 +- .../filament/FusRock PAHT-CF @FF G4P.json | 2 +- .../FusRock/FusRock Generic PAHT-CF.json | 2 +- .../filament/Generic PLA Silk @FF C5.json | 2 +- .../filament/Generic PLA Silk @FF C5P.json | 2 +- .../EX+APS/fdm_filament_pet @EX+APS.json | 2 +- .../filament/EX/fdm_filament_pet @EX.json | 2 +- .../filament/Generic PE-CF @base.json | 5 +- .../filament/Generic PETG-CF @base.json | 5 +- .../filament/Generic PP-CF @base.json | 5 +- .../filament/Prusa Generic PA-CF @base.json | 5 +- .../filament/Prusa Generic PLA-CF @base.json | 5 +- .../filament/Snapmaker PLA Lite @U1 base.json | 3 + .../Snapmaker PLA Matte @U1 base.json | 3 + .../Snapmaker PLA SnapSpeed @U1 base.json | 3 + resources/profiles/retired_filament_ids.json | 90 + scripts/assign_filament_ids.py | 941 +- scripts/filament_id_snapshot.json | 11001 +++++++++++++++- scripts/retired_filament_ids.json | 47 - scripts/test_moonraker_lane_data.py | 115 +- scripts/tests/test_filament_id.py | 917 +- src/libslic3r/Preset.cpp | 54 + src/libslic3r/Preset.hpp | 17 + src/libslic3r/PresetBundle.cpp | 31 +- src/slic3r/GUI/CaliHistoryDialog.cpp | 8 +- src/slic3r/GUI/DeviceManager.cpp | 42 +- src/slic3r/GUI/PresetComboBoxes.cpp | 7 + src/slic3r/Utils/MoonrakerPrinterAgent.cpp | 90 +- tests/libslic3r/CMakeLists.txt | 1 + .../libslic3r/test_filament_id_succession.cpp | 61 + 67 files changed, 13311 insertions(+), 330 deletions(-) create mode 100644 resources/profiles/retired_filament_ids.json delete mode 100644 scripts/retired_filament_ids.json create mode 100644 tests/libslic3r/test_filament_id_succession.cpp diff --git a/doc/developer-reference/filament_id.md b/doc/developer-reference/filament_id.md index a45268b6aa..377c390422 100644 --- a/doc/developer-reference/filament_id.md +++ b/doc/developer-reference/filament_id.md @@ -69,9 +69,12 @@ the `Generic X` base name, write no id key). `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. +5. **Ids follow the product identity.** The id is a pure function of the product triple + `(filament_vendor, filament_type, family name)` — correcting any of them re-mints the id + **by design**, and `--update-snapshot` records the old id in the shipped succession ledger + with its successor so device trays, calibration records, and user presets keep resolving + (`renamed_from` still gates preset-*name* compatibility as before). A shipped id is never + recycled for a different material: retired ids are blocked forever. ## Minting — nobody invents ids @@ -81,15 +84,20 @@ New ids are deterministic, computed exactly like the `setting_id` precedent ```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//") ) +filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, + "filament_product///") ) ``` `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`. +integer, most-significant digit first — 8 chars total, within the AMS length limit. The triple +comes from the family root's *flattened* config: `` is the filament +**manufacturer** (`"Polymaker"`, or `"Generic"` for generics — never the printer brand), +`` the material type, `` the root's base name; the two config +values are inheritable list options and the first element counts. The key contains no bundle +name, so the same product mints the same id in every bundle — hoisting a family into +OrcaFilamentLibrary never changes its id. 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: `Polymaker/PLA/PolyLite PLA` mints `OF5CgdDq`. Workflow for a new family: @@ -101,8 +109,12 @@ python scripts/assign_filament_ids.py --check # 4. verify — the sam # 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. +`--mint "filament_vendor/filament_type/family_name"` prints the id a triple would mint without +touching anything. The default run is idempotent and never rewrites a valid existing id. +Maintenance modes (normally only used by id migrations): `--remint VENDOR` re-derives a +vendor's declared ids from their triples, `--drop-redundant-ids VENDOR` deletes declarations +that merely re-declare an inherited OFL id, and `--add-hint "OLD=NEW"` records a cross-island +succession hint. 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 @@ -116,7 +128,20 @@ the resulting diff. | `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 | +| every retired id | `resources/profiles/retired_filament_ids.json` | never used again, for anything | + +## The succession ledger + +`resources/profiles/retired_filament_ids.json` ships with the app. Each retired id maps to +`{"claims": [...], "successor": }` — successor chains are followed to the live end — +and a `hints` map carries the same forwarding for ids Orca cannot retire because another +island owns them (e.g. a `GF*` id whose material also exists as an OFL family). The client +consults the ledger **only on resolution miss** (AMS tray sync, tray-id type lookup, +calibration history, filament-id preset lookup): a live preset always wins first, so BBL +installs resolve `GF*` natively and behavior is unchanged wherever the raw id still exists. +This is what makes identity-driven re-mints (structure rule 5) safe: the old id keeps +resolving to the family's current preset instead of degrading to a `Generic ` fallback. +The file is append-only and maintained exclusively by `--update-snapshot` / `--add-hint`. ## How CI enforces this @@ -131,14 +156,22 @@ 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. +- **Snapshot equality** — tree claims == snapshot claims **and** tree triples == snapshot + triples, both directions: any `filament_vendor`/`filament_type`/family-name change surfaces + as a snapshot diff. +- **Mint conformance** — a non-grandfathered `OF*` id must equal the mint (or a salt + iteration) of its declarer's product triple; the error prints the expected id. +- **Retired reuse** — any tree id present in `resources/profiles/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. +- **Alias hygiene** — any vendor preset riding an OFL family id must keep the library + preset's base name, a non-empty `compatible_printers`, and no own id key (structure rule 4); + the error names the rename as the cause. +- **Triple integrity** — every declarer outside the BBL/`QD_*` islands must resolve a + non-empty `filament_vendor` and `filament_type` (generics use `"Generic"`), and all + declarers of one family within a bundle must agree on the triple. +- **Succession integrity** — retired successor chains terminate at a live id (or null) with + no cycles; `hints` keys are live, island-owned ids. - **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 @@ -161,7 +194,10 @@ check instead. 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. +- **I need to rename a family (or fix its `filament_vendor`/`filament_type`).** Add + `renamed_from` for the name, run `--remint ` then `--update-snapshot`: the id + re-derives from the corrected identity and the old id lands in the succession ledger + pointing at the new one. Commit the profile, snapshot, and ledger diffs together. - **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. diff --git a/filament_id_plan_v3.md b/filament_id_plan_v3.md index 5cf4cf61a4..5a4bdedb26 100644 --- a/filament_id_plan_v3.md +++ b/filament_id_plan_v3.md @@ -84,7 +84,12 @@ holding OFL-only materials, on-device PA-calibration records, user-root preset c followed to the live end). A retired id may never be minted again (check 4 unchanged). Cross-island *hint* entries are permitted for ids Orca cannot retire because another island owns them (e.g. `GFL99 → `): consulted only when no live - preset matches, so BBL installs still resolve `GFL99` natively first. + preset matches, so BBL installs still resolve `GFL99` natively first. By the same + principle, an id in a foreign island's space (`GF*`/`QD_*`) that vanishes from the tree + is **released with a hint, never retired** — the island's catalog owns it and may + legitimately (re)ship it later, which check 4 must never block. (Implementation + amendment, v3.0: `--update-snapshot` routes such ids to `hints` automatically; hint + keys may be absent from the tree.) - **Shipped and consulted at runtime.** The ledger ships in `resources/`; a small helper (`resolve_filament_id_succession(id)`) follows the chain and is consulted **only on resolution miss**, before the `Generic ` name fallback, in: @@ -134,8 +139,9 @@ those families twice. **v3.1 — OFL re-mint.** Every OFL-declared id re-derives from its triple (mirrors like `OGFA00`, generics like `OGFL99`, blocks like `OEPLAB00` — all of it); each old shipped id -gains a succession entry pointing at its replacement; the 26 BBL×OFL byte-shared ids -dissolve (BBL keeps its id; the OFL family gets its own — two-island purity). Snapshot +gains a succession entry pointing at its replacement; the 26 GF-shaped ids OFL declares +(measured at v3.0: only one of them, `GFOT001`, is also declared by BBL) are released to +the BBL island space with hints at the re-minted families — two-island purity. Snapshot regenerated; full gate battery + fixture overlays (this phase touches preset-visibility machinery only via ids, but the fixtures are cheap insurance). diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json index ababa2bbb9..6b5699d6eb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "PEBA" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json index 7f8d97a333..7d4b5e30c3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "TPU for ACE" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json index e9b2079dff..7b820c0957 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "PEBA" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json index c9aa3f2918..82cd2c4faa 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json @@ -87,7 +87,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json index c3108d354a..12f1662b2d 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json @@ -87,7 +87,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json index d745af0009..9e3a508a5d 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json @@ -87,7 +87,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json index 6eb1569816..ee75cdd734 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json @@ -87,7 +87,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json index 162ec5e7d1..71c4ef7a31 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json @@ -84,7 +84,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json index 6049b3b882..5c71b8ea97 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json @@ -84,7 +84,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PA6-CF" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index b45e46341e..f1917abb9a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -39,6 +39,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material: ABS-CF\n" ], + "filament_type": [ + "ABS-CF" + ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index 16bcc1aeb3..03194dd913 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -39,6 +39,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material: ABS-CF\n" ], + "filament_type": [ + "ABS-CF" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index bf4a2d3194..eb123cc3ad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -27,6 +27,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X 0.6 nozzle" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index f74bcf4ab7..2e7ff56b63 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -27,6 +27,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X 0.8 nozzle" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.8 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index 4c3018a061..a63e1c7dfe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -27,6 +27,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index d59ed639a3..62f2f92006 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -37,7 +37,7 @@ "; filament start gcode\n;right_extruder_material: ASA-CF\n" ], "filament_type": [ - "ASA" + "ASA-CF" ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index ed2467c6e7..8d88edb2ad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -37,7 +37,7 @@ "; filament start gcode\n;right_extruder_material: ASA-CF\n" ], "filament_type": [ - "ASA" + "ASA-CF" ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index 30ead39e25..b400c7d253 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -16,7 +16,7 @@ "Flashforge ASA-CF" ], "filament_type": [ - "ASA" + "ASA-CF" ], "hot_plate_temp": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index cd5ca2143f..9622514949 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index e4b4e3171d..1f6bec0997 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 03cf58e9e0..684f303f65 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index 7ea19866be..2468478e6a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 3a44280bc2..7b28d67e08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index 5943947947..4356a46961 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -63,6 +63,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json index 784d279539..62f9c06854 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json @@ -61,7 +61,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json index f5b823f2ea..b7f3bc5386 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json @@ -61,7 +61,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index 3074f553f0..e3d9c57369 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -31,7 +31,7 @@ "Flashforge PLA Silk @FF AD5X 0.25 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index 9de378b7cc..058dce03c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -22,7 +22,7 @@ "Flashforge PLA Silk @FF AD5X 0.6 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.6 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index c3dbf86193..c2f9796beb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -22,7 +22,7 @@ "Flashforge PLA Silk @FF AD5X 0.8 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.8 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index 5d7ff07d01..6ebc636b10 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -22,7 +22,7 @@ "Flashforge PLA Silk @FF AD5X" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json index 069b924da4..7aa85e29bf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json @@ -54,7 +54,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "65" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json index 4c9b89d97e..67ca938c59 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json @@ -57,7 +57,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json index 06012ecf04..646f8971b2 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json @@ -36,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json index 57380ab9e4..b0cb4812c8 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json @@ -36,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json index c6b435b34b..dbccec4551 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json @@ -36,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json index e69ba59f78..07e8702da2 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json @@ -36,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index ac82265489..2e264e4b2f 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -55,7 +55,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 71b3ae9af1..0aaa19dd68 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -55,7 +55,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json index 98dcbdde4c..16ce25c253 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json @@ -168,7 +168,7 @@ "0" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "filament_unload_time": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json index 16e1f0d278..2087257bcb 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json @@ -53,7 +53,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "65" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json index eb0aa584da..a5de4c8f4a 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json @@ -56,7 +56,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json index 396373accc..0d8b7f36ef 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json @@ -44,7 +44,7 @@ "12" ], "filament_type": [ - "PETG Basic" + "PETG" ], "filament_density": [ "1.27" diff --git a/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json b/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json index c718df9d89..0213942153 100644 --- a/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json +++ b/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json @@ -44,7 +44,7 @@ "12" ], "filament_type": [ - "PETG Basic" + "PETG" ], "filament_density": [ "1.27" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json index 74aea8b342..48212f7143 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pe", "from": "system", "filament_id": "OFJfx0Cl", - "instantiation": "false" + "instantiation": "false", + "filament_type": [ + "PE-CF" + ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json index 21b93a089d..08bc8ad547 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pet", "from": "system", "filament_id": "OFDCk0cz", - "instantiation": "false" + "instantiation": "false", + "filament_type": [ + "PETG-CF" + ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json index f1898eb1f6..f5fefcf0cb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pp", "from": "system", "filament_id": "OFRS2Ggt", - "instantiation": "false" + "instantiation": "false", + "filament_type": [ + "PP-CF" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json index 0b0059fa9a..350ab54889 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pa", "from": "system", "filament_id": "OFXfgh61", - "instantiation": "false" + "instantiation": "false", + "filament_type": [ + "PA-CF" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json index f45f0e0bf0..c899728e68 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pla", "from": "system", "filament_id": "OFv8SRZh", - "instantiation": "false" + "instantiation": "false", + "filament_type": [ + "PLA-CF" + ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json index b75944c3ec..351390aace 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json @@ -46,6 +46,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json index ac2ea870ea..816b04dcd5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json @@ -46,6 +46,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json index adaaf5c3c6..12caa4b25c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json @@ -46,6 +46,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json new file mode 100644 index 0000000000..3840098c11 --- /dev/null +++ b/resources/profiles/retired_filament_ids.json @@ -0,0 +1,90 @@ +{ + "hints": {}, + "retired": { + "GFABS": { + "claims": [ + "Anycubic/Anycubic ABS" + ], + "successor": "OFf2b9wu" + }, + "GFL92": { + "claims": [ + "Anycubic/Anycubic PLA" + ], + "successor": "OFgK2Xvv" + }, + "GFL93": { + "claims": [ + "Anycubic/Anycubic PLA+" + ], + "successor": "OFgrGfPy" + }, + "GFPLA": { + "claims": [ + "Anycubic/Anycubic PLA" + ], + "successor": "OFgK2Xvv" + }, + "GFPLA High Speed": { + "claims": [ + "Anycubic/Anycubic PLA High Speed" + ], + "successor": "OFgSK1hL" + }, + "GFPLA Matte": { + "claims": [ + "Anycubic/Anycubic PLA Matte" + ], + "successor": "OFvYfHPB" + }, + "GFPLA Silk": { + "claims": [ + "Anycubic/Anycubic PLA Silk" + ], + "successor": "OFjdTQd6" + }, + "GFPLA+": { + "claims": [ + "Anycubic/Anycubic PLA+" + ], + "successor": "OFgrGfPy" + }, + "P11851ba": { + "claims": [ + "Artillery/Artillery PET" + ], + "successor": "OFw0qp7w" + }, + "P284941e": { + "claims": [ + "Artillery/Artillery PETG", + "Artillery/Artillery PETG Basic" + ], + "successor": "OFEYKrjb" + }, + "P2fbf0c0": { + "claims": [ + "Artillery/Artillery TPU" + ], + "successor": "OFTbsWVg" + }, + "P39db358": { + "claims": [ + "Artillery/Artillery ABS" + ], + "successor": "OFw1S8lL" + }, + "P8163162": { + "claims": [ + "Artillery/Artillery PVA" + ], + "successor": "OFc2SnEp" + }, + "P87436f6": { + "claims": [ + "Artillery/Artillery ASA" + ], + "successor": "OFtmT4Nd" + } + } +} diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 8100ecb880..3945c2ec8d 100644 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -1,44 +1,69 @@ #!/usr/bin/env python3 """ -Mint deterministic filament_id values for OrcaSlicer system filament families and +Mint deterministic filament_id values for OrcaSlicer system filament products 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: +Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan_v3.md): + * filament_id is a PRODUCT id: one commercial product line = one id, shared by + all of that material's per-printer/per-nozzle variants in every bundle. + OrcaFilamentLibrary (OFL) is the product catalog: a family's id is declared + once, on its family root (instantiation != "true"); vendor bundles carry + only specializations of OFL families — same base name, non-empty + compatible_printers, no filament_id key — which resolve the OFL id through + the loader's inherits/base-bundle walk. Products OFL does not carry mint + their id in the vendor bundle with the same rule; the key is + bundle-independent, so hoisting a family into OFL never changes its id. + * New ids are content-addressed by the product triple, resolved from the + declaring preset's flattened config (filament_vendor and filament_type are + inheritable list options — first element; family name = preset base name): 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). + "filament_product///") ) 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. + 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. Identity changes (a family rename, a filament_vendor/filament_type + fix) change the id BY DESIGN — the succession ledger keeps old ids + resolving. * 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. + * scripts/filament_id_snapshot.json is the sanctioned-state ledger (ids, + claims and declared triples): it must exactly equal the tree-derived state + at all times, so any id/claim/triple change shows up as a reviewable diff to + that file (the maintainer gate). Ids that fully vanish from the tree are + appended to the SHIPPED succession ledger + resources/profiles/retired_filament_ids.json as + {"claims": [...], "successor": } — successor picked by the mode + rule over the vanished id's old claims — and the runtime follows those + chains (plus cross-island "hints" for ids Orca cannot retire, e.g. GF*) + on resolution miss. A retired id may never be used again for anything. + Vanished ids in a FOREIGN island's space (GF*/QD_*) are released with a + hint instead of retired: the island's catalog owns them and may + legitimately (re)ship them. 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. +parent in the OFL map. filament_vendor / filament_type resolve the same way. 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 + --mint "Vendor/Type/Family" + print the id that triple would mint; touches nothing --update-snapshot regenerate the snapshot from the tree; retire vanished ids + with a mode-rule successor (--forget-never-shipped FILE + drops listed never-shipped ids from lineage instead) + --add-hint "OLD=NEW" + record a cross-island succession hint (standalone) + --remint VENDOR re-derive VENDOR's declared ids from their triples and + rewrite mismatches in place (repeatable) + --drop-redundant-ids VENDOR + delete declarations that re-declare an inherited OFL id --check run the validation checks (also run by CI through orca_extra_profile_check.py); exit nonzero on errors """ @@ -62,7 +87,10 @@ 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") +# The succession ledger ships with the app (resources/) so the runtime can +# follow retired->successor chains and cross-island hints on resolution miss. +RETIRED_PATH = os.path.join(PROFILES_DIR, "retired_filament_ids.json") +RETIRED_REL = "resources/profiles/retired_filament_ids.json" OFL = "OrcaFilamentLibrary" @@ -73,8 +101,6 @@ 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 @@ -115,15 +141,15 @@ def base_name(name): 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. +def generate_filament_id(filament_vendor, filament_type, family, salt=0): + """Deterministic "OF" + 6-char base62 filament_id for a filament product. - 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. + input = "filament_product///" + (+ "/" 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}" + key = f"filament_product/{filament_vendor}/{filament_type}/{family}" if salt: key = f"{key}/{salt}" u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) @@ -135,13 +161,14 @@ def generate_filament_id(vendor, family, salt=0): 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).""" +def mint_filament_id(filament_vendor, filament_type, family, taken): + """Mint the product's id, salting past any id in `taken` (existing + retired).""" for salt in range(10000): - candidate = generate_filament_id(vendor, family, salt) + candidate = generate_filament_id(filament_vendor, filament_type, family, salt) if candidate not in taken: return candidate - raise RuntimeError(f"could not mint a free filament_id for {vendor}/{family}") + raise RuntimeError( + f"could not mint a free filament_id for {filament_vendor}/{filament_type}/{family}") # --------------------------------------------------------------------------- @@ -157,7 +184,7 @@ 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.) + which has no user.json index, and the retired_filament_ids.json ledger.) """ profiles_dir = str(profiles_dir) return sorted( @@ -196,6 +223,8 @@ def load_vendor_filaments(profiles_dir, vendor): "inherits": data.get("inherits"), "instantiation": str(data.get("instantiation", "")).lower() == "true", "compatible_printers": data.get("compatible_printers") or [], + "filament_vendor": data.get("filament_vendor"), + "filament_type": data.get("filament_type"), } return presets, errors @@ -248,6 +277,53 @@ def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=False, return None, "missing", entry +def resolve_filament_field(name, field, filaments, ofl_filaments, seen=None, in_ofl=False): + """Resolve an inheritable list option (filament_vendor / filament_type) with + the same hop semantics as resolve_filament_id: own value, else walk + `inherits` in the vendor map with OFL base-bundle fallback. Values are list + options — the first element counts; "" when the chain never defines one. + """ + if seen is None: + seen = set() + if name in seen: + return "" + seen.add(name) + 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 = ofl_filaments[name], True + if rec is None: + return "" + value = rec.get(field) + if isinstance(value, str): + value = [value] + if value and value[0]: + return value[0] + parent = rec.get("inherits") + if parent: + found = resolve_filament_field(parent, field, filaments, ofl_filaments, seen, in_ofl) + if found or in_ofl: + return found + if parent in ofl_filaments: + return resolve_filament_field(parent, field, filaments, ofl_filaments, set(), True) + return found + return "" + + +def resolve_triple(name, filaments, ofl_filaments): + """The preset's mint-key triple (filament_vendor, filament_type, family).""" + return (resolve_filament_field(name, "filament_vendor", filaments, ofl_filaments), + resolve_filament_field(name, "filament_type", filaments, ofl_filaments), + base_name(name)) + + +def is_island_declaration(vendor, fid): + """Declarations frozen outside the OF mint domain: all of BBL, QD_* in Qidi.""" + return vendor == "BBL" or (vendor == "Qidi" and fid.startswith("QD_")) + + def analyze_tree(profiles_dir): """Load every vendor bundle and derive the full filament_id state. @@ -260,6 +336,7 @@ def analyze_tree(profiles_dir): ofl_filaments, ofl_errors = ( load_vendor_filaments(profiles_dir, OFL) if OFL in vendor_names else ({}, []) ) + ofl_declared = {r["filament_id"] for r in ofl_filaments.values() if r.get("filament_id")} vendors = {} read_errors = list(ofl_errors) @@ -287,21 +364,35 @@ def analyze_tree(profiles_dir): 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 + alias_candidates = [] # (vendor, rec, ofl_entry, own_key) presets riding an OFL family + triples = {} # fid -> set of triples of its non-island declarers + declarer_triples = [] # (vendor, rec, fid, triple) per non-island declarer + family_triples = {} # (vendor, family) -> {triple: [declarer names]} 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()) + fid = rec["filament_id"] + occurring.add(fid) + declared_ids.setdefault(vendor, set()).add(fid) + ids.setdefault(fid, set()) + if not is_island_declaration(vendor, fid): + triple = resolve_triple(rec["name"], filaments, ofl_filaments) + rec["triple"] = triple + declarer_triples.append((vendor, rec, fid, triple)) + triples.setdefault(fid, set()).add(triple) + family_triples.setdefault( + (vendor, base_name(rec["name"])), {}).setdefault( + triple, []).append(rec["name"]) if rec.get("inherits"): - inherited, _src, _e = resolve_filament_id( + inherited, _src, skip_entry = 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 inherited and inherited != fid: + overrides.append((vendor, rec["name"], fid, inherited, rec["file"])) + if (vendor != OFL and skip_entry and inherited + and inherited in ofl_declared): + alias_candidates.append((vendor, rec, skip_entry, True)) if not rec["instantiation"]: continue eff = rec.get("eff_filament_id") @@ -312,18 +403,25 @@ def analyze_tree(profiles_dir): 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"])) + if vendor != OFL and rec["ofl_entry"] and eff in ofl_declared: + alias_candidates.append((vendor, rec, rec["ofl_entry"], False)) - # 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 hygiene (check 5): a vendor preset that rides an OFL family (its id + # resolves through OFL) is matched to the OFL preset by ALIAS (base name); + # renaming it re-exposes the OFL preset and creates a live duplicate, empty + # compatible_printers cannot claim any printer, and declaring its own + # filament_id key forks the family off the catalog id. alias_violations = [] # (vendor, name, ofl_entry, reason, file) - for vendor, rec, entry in alias_candidates: + for vendor, rec, entry, own_key in alias_candidates: expected = base_name(entry) own_base = base_name(rec["name"]) - if own_base != expected: + if own_key: + alias_violations.append(( + vendor, rec["name"], entry, + f'declares its own filament_id "{rec["filament_id"]}" — dropping the key ' + f"lets it resolve the OFL family's id through inherits", + rec["file"])) + elif own_base != expected: alias_violations.append(( vendor, rec["name"], entry, f'base name "{own_base}" != "{expected}" — the rename re-exposes the ' @@ -335,6 +433,18 @@ def analyze_tree(profiles_dir): "empty compatible_printers cannot shadow the OFL preset anywhere", rec["file"])) + # Cross-bundle triple divergence (check 8, warning only): the same family + # name declared in several bundles with different triples cannot converge + # on one id until the divergence is fixed. + name_bundles = {} + for (vendor, family), tmap in family_triples.items(): + name_bundles.setdefault(family, {})[vendor] = frozenset(tmap) + cross_bundle_triples = [ + (family, {v: sorted(ts) for v, ts in per_vendor.items()}) + for family, per_vendor in sorted(name_bundles.items()) + if len(per_vendor) > 1 and len(set(per_vendor.values())) > 1 + ] + return { "vendors": vendors, "read_errors": read_errors, @@ -347,11 +457,18 @@ def analyze_tree(profiles_dir): "missing_effective": sorted(missing_effective), "alias_violations": alias_violations, "alias_exceptions": sorted(f"{v}/{n}" for v, n, _e, _r, _f in alias_violations), + "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, + "triple_sets": triples, + "declarer_triples": declarer_triples, + "family_triples": family_triples, + "triple_exceptions": sorted( + f"{v}/{f}" for (v, f), tmap in family_triples.items() if len(tmap) > 1), + "cross_bundle_triples": cross_bundle_triples, } # --------------------------------------------------------------------------- -# Snapshot / retired-ledger IO +# Snapshot / succession-ledger IO # --------------------------------------------------------------------------- def snapshot_from_analysis(analysis): @@ -360,6 +477,8 @@ def snapshot_from_analysis(analysis): "instantiated_with_id": analysis["instantiated_with_id"], "id_overrides": analysis["id_overrides"], "alias_exceptions": analysis["alias_exceptions"], + "triples": analysis["triples"], + "triple_exceptions": analysis["triple_exceptions"], } @@ -368,16 +487,28 @@ def load_snapshot(path): 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 []) + for key in ("ids", "triples"): + data.setdefault(key, {}) + for key in ("instantiated_with_id", "id_overrides", "alias_exceptions", + "triple_exceptions"): + data.setdefault(key, []) return data -def load_retired(path): - """Return the retired-ids map {id: ["Vendor/Family", ...]} ({} if absent).""" +def load_ledger(path): + """The shipped succession ledger: + {"retired": {id: {"claims": [...], "successor": id|None}}, "hints": {id: id}}. + Empty maps when the file is absent. + """ if not os.path.exists(path): - return {} - return load_json(path).get("retired", {}) + return {"retired": {}, "hints": {}} + data = load_json(path) + return {"retired": data.get("retired", {}), "hints": data.get("hints", {})} + + +def load_retired(path): + """The ledger's retired map (see load_ledger); {} when the file is absent.""" + return load_ledger(path)["retired"] def write_ledger(path, obj): @@ -387,6 +518,72 @@ def write_ledger(path, obj): f.write("\n") +def claim_effective_ids(analysis): + """Reverse of analysis["ids"]: claim "Vendor/Family" -> set of effective ids.""" + claim_ids = {} + for fid, claims in analysis["ids"].items(): + for claim in claims: + claim_ids.setdefault(claim, set()).add(fid) + return claim_ids + + +def successor_by_mode(claims, claim_ids): + """Mode rule for a retiring id's successor: every old claim whose family + still exists votes for the family's current effective id(s); most votes + wins, ties break to the lexicographically smallest id, no votes -> None. + Returns (successor_or_None, vote_counts). + """ + counts = {} + for claim in claims: + for fid in claim_ids.get(claim, ()): + counts[fid] = counts.get(fid, 0) + 1 + if not counts: + return None, counts + best = max(counts.values()) + return min(f for f, n in counts.items() if n == best), counts + + +def migrate_retired_entries(old_retired, claim_ids): + """One-shot v3 schema migration: list-valued entries {id: [claims]} become + {id: {"claims": [...], "successor": }}; object entries + pass through untouched. + """ + migrated = {} + for fid, entry in old_retired.items(): + if isinstance(entry, dict): + migrated[fid] = entry + continue + successor, _counts = successor_by_mode(entry, claim_ids) + migrated[fid] = {"claims": sorted(entry), "successor": successor} + return migrated + + +def follow_succession(fid, seen, retired, hints, live): + """Follow retired->successor / hints->target forwarding starting at `fid`. + + Returns (status, node): "null" (chain ended on an heirless retirement), + "live" (reached a live tree id), "cycle", or "dead-end" (an id that is + neither live nor forwarded anywhere). `seen` pre-seeds the cycle guard. + """ + seen = set(seen) + cur = fid + while True: + if cur is None: + return "null", None + if cur in seen: + return "cycle", cur + seen.add(cur) + if cur in live: + return "live", cur + entry = retired.get(cur) + if entry is not None: + cur = entry.get("successor") if isinstance(entry, dict) else None + elif cur in hints: + cur = hints[cur] + else: + return "dead-end", cur + + # --------------------------------------------------------------------------- # Reserved namespaces # --------------------------------------------------------------------------- @@ -414,17 +611,28 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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. + AND the id->triples map of the declarers must equal the snapshot exactly + (the snapshot diff is the maintainer gate). + 3. Mint conformance: a non-island OF-format declaration must equal the mint + of the declarer's triple or a salted iteration, unless that exact + (id, triple) pair is grandfathered in the snapshot. 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. + 5. Alias hygiene: a vendor preset riding an OFL family must keep the OFL + base name, claim printers via non-empty compatible_printers, and declare + no filament_id key of its own. 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++). + 8. Triple integrity: (a) every non-island declarer resolves non-empty + filament_vendor and filament_type (hard error, no grandfathering); + (b) declarers of one (bundle, family) resolve identical triples, unless + grandfathered in snapshot triple_exceptions; cross-bundle divergence on + the same family name is a warning only. + 9. Succession integrity: retired successor chains terminate at a live id or + null without cycles; hint keys are live island-declared ids and hint + chains terminate live. """ _utf8_console() errors = 0 @@ -433,7 +641,9 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=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) + ledger = load_ledger(retired_path) + retired = ledger["retired"] + hints = ledger["hints"] for msg in analysis["read_errors"]: print_error(msg) @@ -475,38 +685,48 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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}") + f"(shipped ids retire through the succession ledger); {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}") + f"vanished from the tree; {UPDATE_HINT}") + errors += 1 + # ... and the declared triples, both directions. + snap_triples = snapshot["triples"] + tree_triples = analysis["triples"] + for fid in sorted(tree_triples): + for t in tree_triples[fid]: + if t not in snap_triples.get(fid, []): + print_error( + f'filament_id "{fid}" triple "{"/".join(t)}" is not sanctioned by ' + f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") + errors += 1 + for fid in sorted(snap_triples): + for t in snap_triples[fid]: + if t not in tree_triples.get(fid, []): + print_error( + f'filament_id triple stability: snapshot triple "{"/".join(t)}" of ' + f'id "{fid}" vanished from the tree; {UPDATE_HINT}') errors += 1 - # -- 3. mint conformance for OF-format ids ------------------------------ - for fid in sorted(tree_ids): + # -- 3. mint conformance for OF-format declarations ---------------------- + for vendor, rec, fid, triple in sorted( + analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): 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 + if list(triple) in snap_triples.get(fid, []): + continue # grandfathered (id, triple) pair + minted = [generate_filament_id(*triple, salt=s) for s in range(MAX_CHECK_SALT + 1)] + if fid not in minted: + print_error( + f'filament_id "{fid}" declared by "{rec["name"]}" ({rec["file"]}) does ' + f'not match the mint of its triple "{"/".join(triple)}": expected ' + f'"{minted[0]}" (or a salted iteration); paste the expected id into the ' + f"family root (or, for an intentionally kept id, {UPDATE_HINT})") + errors += 1 # -- 4. retired ids may never come back --------------------------------- for vendor in sorted(analysis["vendor_ids"]): @@ -514,18 +734,19 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, if fid in retired: print_error( f'filament_id "{fid}" ({vendor}) is retired ' - f"(scripts/retired_filament_ids.json) and may never be reused") + f"({RETIRED_REL}) and may never be reused") errors += 1 - # -- 5. alias hygiene for tuned OFL generics ----------------------------- + # -- 5. alias hygiene for presets riding OFL families -------------------- 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") + f'preset "{name}" ({file}) rides the OFL family "{entry}" but {reason}; ' + f"a vendor specialization keeps the OFL base name, sets non-empty " + f"compatible_printers and declares no filament_id key — or the family " + f"gets its own minted id") errors += 1 # -- 6. reserved namespaces ---------------------------------------------- @@ -562,8 +783,10 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f'inherits chain resolves "{inherited}"; a preset must not override its ' f"family's id") errors += 1 + ofl_map = analysis["vendors"].get(OFL, {}) for vendor, name, file in analysis["missing_effective"]: - expected = generate_filament_id(vendor, base_name(name)) + triple = resolve_triple(name, analysis["vendors"][vendor], ofl_map) + expected = generate_filament_id(*triple) 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; " @@ -571,6 +794,95 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f'"{vendor}/{base_name(name)}": "{expected}", salted if taken)') errors += 1 + # -- 8. triple integrity --------------------------------------------------- + for vendor, rec, fid, triple in sorted( + analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): + if triple[0] and triple[1]: + continue + missing = " and ".join( + k for k, v in (("filament_vendor", triple[0]), + ("filament_type", triple[1])) if not v) + print_error( + f'preset "{rec["name"]}" ({rec["file"]}) declares filament_id "{fid}" but ' + f"resolves empty {missing}; the mint key needs both (generic materials " + f'use filament_vendor "Generic")') + errors += 1 + triple_exceptions = set(snapshot["triple_exceptions"]) + for (vendor, family), tmap in sorted(analysis["family_triples"].items()): + if len(tmap) < 2 or f"{vendor}/{family}" in triple_exceptions: + continue + detail = "; ".join( + f'"{"/".join(t)}" ({", ".join(sorted(names))})' + for t, names in sorted(tmap.items())) + print_error( + f'family "{vendor}/{family}" declarers resolve divergent triples: {detail}; ' + f"declarers of one family must agree on (filament_vendor, filament_type)") + errors += 1 + for family, per_vendor in analysis["cross_bundle_triples"]: + detail = "; ".join( + f'{v}: {", ".join("/".join(t) for t in ts)}' + for v, ts in sorted(per_vendor.items())) + print_warning( + f'family name "{family}" resolves different triples across bundles ' + f"({detail}); bundles of one product converge on one id only once " + f"their triples agree") + + # -- 9. succession integrity (ledger-internal) ----------------------------- + live = set(tree_ids) + for fid in sorted(retired): + entry = retired[fid] + if (not isinstance(entry, dict) + or not isinstance(entry.get("claims", []), list) + or not (entry.get("successor") is None + or isinstance(entry.get("successor"), str))): + print_error( + f'retired entry "{fid}" ({RETIRED_REL}) is not of the form ' + f'{{"claims": [...], "successor": }}') + errors += 1 + continue + status, node = follow_succession(entry.get("successor"), {fid}, retired, hints, live) + if status == "cycle": + print_error( + f'succession chain of retired id "{fid}" cycles at "{node}" ({RETIRED_REL})') + errors += 1 + elif status == "dead-end": + print_error( + f'succession chain of retired id "{fid}" dead-ends at "{node}", which is ' + f"neither a live tree id nor retired/hinted ({RETIRED_REL})") + errors += 1 + for key in sorted(hints): + target = hints[key] + _is_reserved, island = reserved_space_owner(key) + if island is None: + print_error( + f'hint key "{key}" ({RETIRED_REL}) is not in an island id space ' + f"(GF*/QD_*); non-island ids are retired with a successor instead") + errors += 1 + continue + if key in retired: + print_error( + f'hint key "{key}" ({RETIRED_REL}) is also retired; an id is either ' + f"retired (Orca-owned) or hinted (island-owned), never both") + errors += 1 + continue + # A hint key may be absent from the tree (released to its island); when + # live, only island vendors may declare it. + outsiders = sorted( + v for v in analysis["declared_ids"] + if key in analysis["declared_ids"][v] and not is_island_declaration(v, key)) + if outsiders: + print_error( + f'hint key "{key}" ({RETIRED_REL}) is declared by non-island vendor(s) ' + f"{outsiders}; hints apply only once no non-island vendor declares the " + f"id — re-mint those declarers first") + errors += 1 + status, node = follow_succession(target, {key}, retired, hints, live) + if status != "live": + print_error( + f'hint "{key}" -> "{target}" ({RETIRED_REL}) must chain-terminate at a ' + f"live tree id (got {status} at \"{node}\")") + errors += 1 + return errors @@ -579,9 +891,19 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # --------------------------------------------------------------------------- def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - retired_path=RETIRED_PATH, allow_shared_catalog=False): + retired_path=RETIRED_PATH, allow_shared_catalog=False, + forget_path=None): """Regenerate the snapshot from the tree; retire ids that fully vanished. + Vanished ids gain a succession-ledger entry whose successor is picked by + the mode rule over their old claims (None when the family died heirless); + vanished ids in a foreign island's space (GF*/QD_*) are released with a + hint instead — the island catalog owns them, so they must stay mintable + there and must never be blocked by check 4. + --forget-never-shipped lists ids to drop from lineage instead of retiring + (never shipped => nothing outside the tree references them); succession + chains through them are spliced to their mode-rule successor. + 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. @@ -593,6 +915,21 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, old_snap = load_snapshot(snapshot_path) old_ids = old_snap["ids"] if old_snap else {} + forget = set() + if forget_path: + data = load_json(forget_path) + if not isinstance(data, list) or not all(isinstance(x, str) for x in data): + print_error(f"--forget-never-shipped expects a JSON list of ids: {forget_path}") + return 1 + forget = set(data) + still_live = sorted(forget & set(new_snap["ids"])) + if still_live: + for fid in still_live: + print_error( + f'--forget-never-shipped: id "{fid}" is still in the tree and can ' + f"neither be forgotten nor retired") + return 1 + # Gate: new reserved-namespace ids / claims for non-owner vendors. refusals = [] for fid, claims in sorted(new_snap["ids"].items()): @@ -622,22 +959,69 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # 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) + ledger = load_ledger(retired_path) + retired = ledger["retired"] 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"({RETIRED_REL} 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). + # Retire ids that fully vanished from the tree (append-only ledger), with a + # mode-rule successor so devices and user presets keep resolving. Vanished + # ids in a FOREIGN island's reserved space (GF*/QD_*) are never retired — + # the island's catalog still owns them and may legitimately (re)ship them — + # they are RELEASED, with a succession hint so they keep resolving on miss. + claim_ids = claim_effective_ids(analysis) newly_retired = [] + forgotten = [] + released = [] 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) + if fid in new_snap["ids"]: + continue + if fid in forget: + forgotten.append(fid) + print_info(f'forgotten (never shipped): "{fid}" — no retirement entry') + continue + _is_reserved, island = reserved_space_owner(fid) + if island is not None: + successor, _counts = successor_by_mode(old_ids[fid], claim_ids) + if successor and fid not in ledger["hints"]: + ledger["hints"][fid] = successor + released.append(fid) + print_info( + f'released to the {island} island space: "{fid}"' + + (f' — hint -> "{ledger["hints"][fid]}"' if fid in ledger["hints"] + else " (no successor computable; --add-hint if one is needed)")) + continue + entry = retired.get(fid) + if not isinstance(entry, dict): + successor, counts = successor_by_mode(old_ids[fid], claim_ids) + if len(counts) > 1: + losers = sorted(set(counts) - {successor}) + print_warning( + f'retiring "{fid}": successor "{successor}" won the claim vote ' + f"({counts[successor]}); losing candidate(s): {', '.join(losers)}") + entry = {"claims": list(entry) if entry else [], "successor": successor} + entry["claims"] = sorted(set(entry["claims"]) | set(old_ids[fid])) + retired[fid] = entry + newly_retired.append(fid) + + # Splice succession chains through forgotten ids so they stay live. + spliced = [] + for fid in sorted(retired): + entry = retired[fid] + successor = entry.get("successor") if isinstance(entry, dict) else None + if successor in forget: + new_successor, _counts = successor_by_mode(old_ids.get(successor, []), claim_ids) + entry["successor"] = new_successor + spliced.append(fid) + print_info( + f'spliced succession: "{fid}" -> {json.dumps(new_successor)} ' + f'(through forgotten "{successor}")') # Diff summary. added_ids = sorted(set(new_snap["ids"]) - set(old_ids)) @@ -649,20 +1033,29 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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": []} + "alias_exceptions": [], "triples": {}, + "triple_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}) + if newly_retired or spliced or released or not os.path.exists(retired_path): + write_ledger(retired_path, {"retired": retired, "hints": ledger["hints"]}) 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"declared triples : {len(new_snap['triples'])}") 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"): + if forgotten: + print_info(f"ids forgotten : {len(forgotten)} ({', '.join(forgotten)})") + if released: + print_info(f"ids released : {len(released)} ({', '.join(released)})") + if spliced: + print_info(f"chains spliced : {len(spliced)} ({', '.join(spliced)})") + for section in ("instantiated_with_id", "id_overrides", "alias_exceptions", + "triple_exceptions"): before, after = len(old_snap.get(section, [])), len(new_snap[section]) print_info(f"{section:<18}: {after} ({after - before:+d})") if changed: @@ -672,8 +1065,64 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, return 0 +def add_hints(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): + """--add-hint "OLD=NEW": forward an island-space id to a live id. + + OLD must sit in an island id space (GF*/QD_*), must not be retired, and — + when live in the tree — may be declared only by island vendors (Orca cannot + retire it). An absent OLD is fine: island catalogs own ids Orca never + shipped or has released. NEW must be live in the tree. All pairs validate + before anything is written. Returns 0 on success. + """ + _utf8_console() + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + ledger = load_ledger(retired_path) + live = set(analysis["ids"]) + parsed = [] + for pair in pairs: + if "=" not in pair: + print_error(f'--add-hint expects "OLD=NEW", got "{pair}"') + errors += 1 + continue + old, new = pair.split("=", 1) + _is_reserved, island = reserved_space_owner(old) + outsiders = sorted( + v for v in analysis["declared_ids"] + if old in analysis["declared_ids"][v] and not is_island_declaration(v, old)) + if old in ledger["retired"]: + print_error(f'--add-hint: "{old}" is retired; its succession entry already forwards it') + errors += 1 + elif island is None: + print_error( + f'--add-hint: "{old}" is not in an island id space (GF*/QD_*); ' + f"non-island ids are retired with a successor by --update-snapshot") + errors += 1 + elif outsiders: + print_error( + f'--add-hint: "{old}" is declared by non-island vendor(s) {outsiders}; ' + f"hints apply only once no non-island vendor declares the id — re-mint " + f"those declarers first") + errors += 1 + elif new not in live: + print_error(f'--add-hint: target "{new}" is not a live tree id') + errors += 1 + else: + parsed.append((old, new)) + if errors: + return 1 + for old, new in parsed: + ledger["hints"][old] = new + print_info(f'hint added: "{old}" -> "{new}"') + write_ledger(retired_path, {"retired": ledger["retired"], "hints": ledger["hints"]}) + return 0 + + # --------------------------------------------------------------------------- -# Default run: mint + insert ids for id-less families +# Byte-preserving profile edits # --------------------------------------------------------------------------- def insert_filament_id(text, new_id): @@ -694,33 +1143,90 @@ def insert_filament_id(text, new_id): return text, 0 -def write_filament_id(path, new_id): - """Insert new_id into the profile at path, byte-preserving everything else. +def replace_filament_id_value(text, old_id, new_id): + """Swap the JSON string VALUE on the `"filament_id"` line, byte-preserving + everything else. Returns (text, replacements made). + """ + pattern = re.compile( + r'(^[ \t]*"filament_id"[ \t]*:[ \t]*)' + + re.escape(json.dumps(old_id, ensure_ascii=False)), + re.MULTILINE) + return pattern.subn( + lambda m: m.group(1) + json.dumps(new_id, ensure_ascii=False), text, count=1) - 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. + +def delete_filament_id_line(text, old_id): + """Delete the `"filament_id"` line, byte-preserving the rest. + + Handles both the canonical layout (trailing comma) and a last-property + layout (comma on the preceding line). Returns (text, deletions made). + """ + val = re.escape(json.dumps(old_id, ensure_ascii=False)) + m = re.search(r'^[ \t]*"filament_id"[ \t]*:[ \t]*' + val + r'[ \t]*,[ \t]*\r?\n', + text, re.MULTILINE) + if m: + return text[:m.start()] + text[m.end():], 1 + m = re.search(r',[ \t]*\r?\n[ \t]*"filament_id"[ \t]*:[ \t]*' + val + r'[ \t]*(?=\r?\n)', + text) + if m: + return text[:m.start()] + text[m.end():], 1 + return text, 0 + + +def _edit_profile(path, edit): + """Apply `edit(text) -> (text, n)` to the profile at path, byte-preserving. + + Binary IO keeps the file's original line endings (LF or CRLF), BOM and exact + formatting apart from the edit; the result is re-parsed and returned so the + caller can verify the outcome. Raises when the edit found no anchor. """ 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) + text, n = edit(text) if n == 0: - raise RuntimeError(f"Could not insert filament_id into {path}") - json.loads(text) # fail loudly if the edit broke the JSON + raise RuntimeError(f"could not apply filament_id edit to {path}") + data = 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")) + return data +def write_filament_id(path, new_id): + """Insert new_id into the profile at path, byte-preserving everything else.""" + _edit_profile(path, lambda text: insert_filament_id(text, new_id)) + + +def rewrite_filament_id(path, old_id, new_id): + """Replace the filament_id value old_id -> new_id; re-parses to verify.""" + data = _edit_profile(path, lambda text: replace_filament_id_value(text, old_id, new_id)) + if data.get("filament_id") != new_id: + raise RuntimeError(f'rewrite of filament_id "{old_id}" -> "{new_id}" in {path} ' + f"did not take effect") + + +def remove_filament_id(path, old_id): + """Delete the filament_id declaration line; re-parses to verify.""" + data = _edit_profile(path, lambda text: delete_filament_id_line(text, old_id)) + if "filament_id" in data: + raise RuntimeError(f'deletion of filament_id "{old_id}" from {path} did not take effect') + + +# --------------------------------------------------------------------------- +# Default run: mint + insert ids for id-less families +# --------------------------------------------------------------------------- + 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). + effective id. The minted id is a pure function of the family's triple — + (filament_vendor, filament_type) resolved on the root(s), family name — and + 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 @@ -767,6 +1273,7 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, root_claims.setdefault((vendor, root["name"]), set()).add(key) roots[key] = family_roots + ofl_map = analysis["vendors"].get(OFL, {}) files_changed = 0 families_minted = 0 for key, family_roots in sorted(roots.items()): @@ -782,7 +1289,29 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"roots so each family has its own") errors += 1 continue - new_id = mint_filament_id(vendor, family, taken) + vendor_map = analysis["vendors"][vendor] + fields = {(resolve_filament_field(n, "filament_vendor", vendor_map, ofl_map), + resolve_filament_field(n, "filament_type", vendor_map, ofl_map)) + for n in family_roots} + if len(fields) > 1: + print_error( + f'cannot mint for family "{vendor}/{family}": its roots resolve ' + f"divergent (filament_vendor, filament_type) pairs {sorted(fields)}; " + f"align the fields first") + errors += 1 + continue + fvendor, ftype = next(iter(fields)) + if not fvendor or not ftype: + missing = " and ".join( + k for k, v in (("filament_vendor", fvendor), + ("filament_type", ftype)) if not v) + print_error( + f'cannot mint for family "{vendor}/{family}": it resolves empty ' + f'{missing}; the mint key needs both (generic materials use ' + f'filament_vendor "Generic")') + errors += 1 + continue + new_id = mint_filament_id(fvendor, ftype, family, taken) taken.add(new_id) families_minted += 1 for name in sorted(family_roots): @@ -798,6 +1327,130 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, return files_changed, errors +# --------------------------------------------------------------------------- +# --remint / --drop-redundant-ids (v3.1/v3.2 migration modes) +# --------------------------------------------------------------------------- + +def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): + """Re-derive every non-island declared id in the given vendors from its + triple; rewrite mismatching declarations in place (byte-preserving). Never + touches the snapshot — run --update-snapshot afterwards and review the diff. + + A candidate id is blocked when it is a retired key, a hints key, or occurs + in the tree with any triple set other than exactly {T}. Equal-triple reuse + is convergence: the same product must end up under the same id everywhere. + Returns (rewritten, errors). + """ + _utf8_console() + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + if "BBL" in vendor_list: + print_error("--remint BBL is forbidden (the GF* catalog is frozen)") + return 0, errors + 1 + unknown = sorted(set(vendor_list) - set(analysis["vendors"])) + if unknown: + for v in unknown: + print_error(f"--remint: unknown vendor {v!r}") + return 0, errors + len(unknown) + + ledger = load_ledger(retired_path) + blocked_keys = set(ledger["retired"]) | set(ledger["hints"]) + occurring = set() + for vids in analysis["vendor_ids"].values(): + occurring |= vids + triple_sets = analysis["triple_sets"] + + assigned = {} # triple -> id chosen this run (all declarers converge) + run_taken = {} # id -> triple (a run-local mint may not collide either) + + def want_id(triple): + if triple in assigned: + return assigned[triple] + for salt in range(10000): + cand = generate_filament_id(*triple, salt=salt) + if cand in blocked_keys: + continue + if cand in occurring and triple_sets.get(cand, set()) != {triple}: + continue + if run_taken.get(cand, triple) != triple: + continue + assigned[triple] = cand + run_taken[cand] = triple + return cand + raise RuntimeError(f"could not mint a free filament_id for triple {triple}") + + scanned = 0 + rewritten = 0 + for vendor in sorted(set(vendor_list)): + recs = sorted( + (rec for rec in analysis["vendors"][vendor].values() if rec.get("filament_id")), + key=lambda r: r["file"]) + for rec in recs: + fid = rec["filament_id"] + if is_island_declaration(vendor, fid): + continue + scanned += 1 + want = want_id(rec["triple"]) + if fid == want: + continue + rewrite_filament_id(rec["path"], fid, want) + rewritten += 1 + print_info(f'{rec["file"]}: "{fid}" -> "{want}" ' + f'(triple "{"/".join(rec["triple"])}")') + print_info(f"declarations scanned : {scanned}") + print_info(f"declarations reminted: {rewritten}") + if rewritten: + print_warning(f"now {UPDATE_HINT}") + return rewritten, errors + + +def drop_redundant_ids(vendor, profiles_dir=PROFILES_DIR): + """Delete filament_id declarations in `vendor` that merely re-declare an OFL + family's id path: ignoring its own key, the preset's inherits chain enters + OFL and resolves an OFL-declared id, and the preset keeps the OFL family's + base name. Such a preset is a specialization and rides the OFL id (v3.2(b)). + Never touches the snapshot. Returns (dropped, errors). + """ + _utf8_console() + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + if vendor == "BBL": + print_error("--drop-redundant-ids BBL is forbidden (the GF* catalog is frozen)") + return 0, errors + 1 + if vendor not in analysis["vendors"]: + print_error(f"--drop-redundant-ids: unknown vendor {vendor!r}") + return 0, errors + 1 + + vendor_map = analysis["vendors"][vendor] + ofl_map = analysis["vendors"].get(OFL, {}) + ofl_declared = {r["filament_id"] for r in ofl_map.values() if r.get("filament_id")} + dropped = 0 + for rec in sorted(vendor_map.values(), key=lambda r: r["file"]): + fid = rec.get("filament_id") + if not fid or is_island_declaration(vendor, fid) or not rec.get("inherits"): + continue + resolved, _src, entry = resolve_filament_id( + rec["name"], vendor_map, ofl_map, skip_own=True) + if not (entry and resolved and resolved in ofl_declared): + continue + if base_name(rec["name"]) != base_name(entry): + continue + remove_filament_id(rec["path"], fid) + dropped += 1 + print_info(f'{rec["file"]}: dropped filament_id "{fid}" ' + f'(rides OFL "{entry}", id "{resolved}")') + print_info(f"declarations dropped : {dropped}") + if dropped: + print_warning(f"now {UPDATE_HINT}") + return dropped, errors + + # --------------------------------------------------------------------------- # CLI # --------------------------------------------------------------------------- @@ -807,33 +1460,73 @@ def main(argv=None): 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("--mint", metavar='"Vendor/Type/Family"', + help="print the id the (filament_vendor, filament_type, " + "family name) triple would mint; 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") + "tree; ids that fully vanished are retired with a " + "mode-rule successor") 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("--forget-never-shipped", metavar="JSON_FILE", + help="with --update-snapshot: vanished ids listed in the file " + "(JSON list) are dropped without a retirement entry and " + "succession chains are spliced through them; refused if " + "a listed id is still in the tree") + parser.add_argument("--add-hint", metavar='"OLD=NEW"', action="append", + help="record a cross-island succession hint (island-owned " + "live id -> live id) in the shipped ledger; standalone, " + "repeatable") + parser.add_argument("--remint", metavar="VENDOR", action="append", + help="re-derive VENDOR's declared filament_ids from their " + "triples and rewrite mismatches in place; repeatable") + parser.add_argument("--drop-redundant-ids", metavar="VENDOR", + help="delete filament_id declarations in VENDOR that " + "re-declare the OFL family id they already resolve " + "through inherits") parser.add_argument("--profiles", default=PROFILES_DIR, help="profiles directory (default: resources/profiles)") args = parser.parse_args(argv) + if args.forget_never_shipped and not args.update_snapshot: + parser.error("--forget-never-shipped requires --update-snapshot") + if args.mint: - if "/" not in args.mint: - parser.error('--mint expects "Vendor/Family"') - vendor, family = args.mint.split("/", 1) + parts = args.mint.split("/", 2) + if len(parts) != 3 or not all(parts): + parser.error('--mint expects "filament_vendor/filament_type/family_name" ' + "with all three components non-empty (check 8 rejects empty " + "vendor/type in the tree)") snapshot = load_snapshot(SNAPSHOT_PATH) or {"ids": {}} taken = set(snapshot["ids"]) | set(load_retired(RETIRED_PATH)) - print(mint_filament_id(vendor, family, taken)) + print(mint_filament_id(parts[0], parts[1], parts[2], taken)) return 0 + if args.add_hint: + if args.update_snapshot or args.check or args.remint or args.drop_redundant_ids: + parser.error("--add-hint runs standalone") + return add_hints(args.add_hint, args.profiles, RETIRED_PATH) + + if args.remint: + if args.update_snapshot or args.check or args.drop_redundant_ids: + parser.error("--remint cannot be combined with other modes") + _changed, errors = remint_vendors(args.remint, args.profiles, RETIRED_PATH) + return 1 if errors else 0 + + if args.drop_redundant_ids: + if args.update_snapshot or args.check: + parser.error("--drop-redundant-ids cannot be combined with other modes") + _changed, errors = drop_redundant_ids(args.drop_redundant_ids, args.profiles) + return 1 if errors else 0 + if args.update_snapshot: return update_snapshot(args.profiles, SNAPSHOT_PATH, RETIRED_PATH, - allow_shared_catalog=args.allow_shared_catalog) + allow_shared_catalog=args.allow_shared_catalog, + forget_path=args.forget_never_shipped) if args.check: errors = check_filament_ids(args.profiles, SNAPSHOT_PATH, RETIRED_PATH) diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 24d51970bc..f3004c5077 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1,5 +1,1042 @@ { - "alias_exceptions": [], + "alias_exceptions": [ + "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 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 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 X 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 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 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 Translucent @Anycubic Kobra S1 Max 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/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/COEX NYLEX UNFILLED @BBL X1C", + "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 @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", + "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 PLA @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 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 Generic HS PLA", + "Flashforge/Flashforge Generic PETG", + "Flashforge/Flashforge Generic PETG-CF10", + "Flashforge/Flashforge Generic PLA", + "Flashforge/Flashforge Generic PLA-CF10", + "Flashforge/Flashforge Generic PLA-Silk", + "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", + "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", + "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 PETG @Flashforge Artemis", + "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", + "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", + "Peopoly/Peopoly Generic PLA", + "Peopoly/Peopoly Lancer PLA-C", + "Phrozen/Phrozen PLA @Phrozen Arco 0.4 nozzle", + "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 @base", + "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 PA-CF @base", + "Prusa/Prusa Generic PETG @CORE One", + "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 @base", + "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 PETG HF @base", + "Prusa/Prusa Generic PLA @CORE One", + "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 @base", + "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 HF @base", + "Prusa/Prusa Generic PLA Silk @CORE One", + "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 PLA-CF @base", + "Prusa/Prusament PA-CF @CORE One", + "Prusa/Prusament PETG @CORE One", + "Prusa/Prusament PETG @base", + "Prusa/Prusament PLA @CORE One", + "Prusa/Prusament PLA @base", + "Prusa/Prusament rPLA @CORE One", + "Prusa/Prusament rPLA @base", + "Qidi/Bambu PETG", + "Qidi/Bambu PLA", + "Qidi/HATCHBOX PETG @Qidi", + "Qidi/HATCHBOX PLA @Qidi", + "Qidi/Overture PLA @Qidi", + "Qidi/PolyLite PLA @Qidi", + "Qidi/QIDI PA-Ultra", + "Qidi/QIDI PA12-CF", + "Qidi/QIDI PAHT-CF", + "Qidi/QIDI PAHT-GF", + "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 Support For PAHT", + "Qidi/QIDI Support For PET/PA", + "Qidi/QIDI UltraPA-CF25", + "Qidi/QIDI WOOD Rapido", + "Qidi/Qidi Generic PA", + "Qidi/Qidi Generic PA-CF", + "Qidi/Qidi Generic PC", + "Qidi/Qidi Generic PETG", + "Qidi/Qidi Generic PETG-CF", + "Qidi/Qidi Generic PLA", + "Qidi/Qidi Generic PLA Silk", + "Qidi/Qidi Generic PLA+", + "Qidi/Qidi Generic PLA-CF", + "Qidi/Qidi PLA-CF", + "Qidi/Tinmorry PETG-ECO", + "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 Dual PLA @0.2 nozzle", + "Snapmaker/PolyTerra J1 PLA", + "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", + "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 PLA Silk @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 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 PA @Z-Bolt Base", + "Z-Bolt/Generic PETG @Z-Bolt Base", + "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" + ], "id_overrides": [ "Afinia/Afinia PLA", "Afinia/Afinia PLA@HS", @@ -9446,5 +10483,9965 @@ "re3D/re3D rPP", "re3D/re3D rPP @0.8 nozzle", "re3D/re3D rPP @1.75 nozzle" - ] + ], + "triple_exceptions": [ + "Anycubic/Anycubic ABS", + "Anycubic/Anycubic ASA", + "Anycubic/Anycubic PETG", + "Anycubic/Anycubic PLA", + "Anycubic/Anycubic PLA High Speed", + "Anycubic/Anycubic PLA Silk", + "Anycubic/Anycubic PLA+", + "Anycubic/Anycubic TPU", + "Anycubic/Generic PETG", + "Creality/Creality Generic ABS", + "Creality/Creality Generic ASA", + "Creality/Creality Generic PETG", + "Creality/Creality Generic TPU", + "Creality/Generic PETG-GF", + "Flashforge/Flashforge ABS", + "Flashforge/Flashforge ASA-CF", + "Flashforge/Flashforge PET-CF", + "Flashforge/Flashforge PETG", + "Flashforge/Flashforge PPA-CF", + "Flashforge/Flashforge PPS-CF", + "Flashforge/FusRock Generic PAHT-CF", + "Flashforge/FusRock Generic PET-CF", + "Flashforge/FusRock Generic S-Multi", + "Flashforge/FusRock Generic S-PAHT", + "Prusa/Prusa Generic ASA", + "Prusa/Prusa Generic TPU", + "Prusa/Prusa Generic TPU HF", + "Prusa/Prusament PETG", + "Prusa/Prusament PLA", + "Prusa/Prusament rPLA", + "Snapmaker/PolyLite PLA", + "re3D/re3D Greengate rPETG" + ], + "triples": { + "00001": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "00002": [ + [ + "Generic", + "PLA", + "Generic PLA-Silk" + ] + ], + "00003": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "00004": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "00005": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], + "00006": [ + [ + "Generic", + "PLA-CF", + "Generic PLA-CF" + ] + ], + "00007": [ + [ + "Generic", + "ASA", + "Generic ASA" + ] + ], + "00008": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "00009": [ + [ + "Generic", + "PA-CF", + "Generic PA-CF" + ] + ], + "00010": [ + [ + "Generic", + "BVOH", + "Generic BVOH" + ] + ], + "00011": [ + [ + "Generic", + "PVA", + "Generic PVA" + ] + ], + "00012": [ + [ + "Generic", + "HIPS", + "Generic HIPS" + ] + ], + "00013": [ + [ + "Generic", + "PET-CF", + "Generic PET-CF" + ] + ], + "00014": [ + [ + "Generic", + "PETG-CF", + "Generic PETG-CF" + ] + ], + "00015": [ + [ + "Generic", + "PA6-CF", + "Generic PA6-CF" + ] + ], + "00016": [ + [ + "Generic", + "PA-CF", + "Generic PAHT-CF" + ] + ], + "00017": [ + [ + "Generic", + "PPS", + "Generic PPS" + ] + ], + "00018": [ + [ + "Generic", + "PPS-CF", + "Generic PPS-CF" + ] + ], + "00019": [ + [ + "Generic", + "PP", + "Generic PP" + ] + ], + "00020": [ + [ + "Generic", + "PET", + "Generic PET" + ] + ], + "00021": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "00022": [ + [ + "Generic", + "PA-CF", + "Generic PA612-CF" + ] + ], + "00023": [ + [ + "Generic", + "PA", + "Generic Support for PA" + ] + ], + "00024": [ + [ + "Generic", + "PLA", + "Generic Support for PLA" + ] + ], + "00025": [ + [ + "Generic", + "PA-CF", + "Generic PA12-CF" + ] + ], + "00026": [ + [ + "Generic", + "TPU", + "Generic TPU 64D" + ] + ], + "00027": [ + [ + "Creality", + "PETG-GF", + "Generic PETG-GF" + ], + [ + "Generic", + "PETG-GF", + "Generic PETG-GF" + ] + ], + "00031": [ + [ + "Generic", + "PP-CF", + "Generic PP-CF" + ] + ], + "00032": [ + [ + "Generic", + "PCTG", + "Generic PCTG" + ] + ], + "00033": [ + [ + "Generic", + "ASA-CF", + "Generic ASA-CF" + ] + ], + "00034": [ + [ + "Generic", + "PA-GF", + "Generic PA6-GF" + ] + ], + "00035": [ + [ + "eSUN", + "PLA", + "eSUN PLA-LW" + ] + ], + "01001": [ + [ + "Creality", + "PLA", + "Creality Hyper PLA" + ], + [ + "Creality", + "PLA", + "Hyper PLA" + ] + ], + "01002": [ + [ + "Creality", + "PLA", + "Hyper L-W PLA" + ] + ], + "01003": [ + [ + "Creality", + "PLA", + "Hyper Luminous" + ] + ], + "01004": [ + [ + "Creality", + "PLA", + "Hyper Stardust" + ] + ], + "01601": [ + [ + "Creality", + "PLA", + "Soleyin Ultra PLA" + ] + ], + "02001": [ + [ + "Creality", + "PLA-CF", + "Creality Hyper PLA-CF" + ], + [ + "Creality", + "PLA-CF", + "Hyper PLA-CF" + ] + ], + "03001": [ + [ + "Creality", + "ABS", + "Creality Hyper ABS" + ], + [ + "Creality", + "ABS", + "Hyper ABS" + ] + ], + "04001": [ + [ + "Creality", + "PLA", + "CR-PLA" + ], + [ + "Generic", + "PLA", + "Creality Generic PLA" + ] + ], + "05001": [ + [ + "Creality", + "PLA", + "CR-Silk" + ], + [ + "Creality", + "PLA", + "Creality Silk PLA" + ] + ], + "06001": [ + [ + "Creality", + "PETG", + "CR-PETG" + ], + [ + "Creality", + "PETG", + "Creality Generic PETG" + ] + ], + "06002": [ + [ + "Creality", + "PETG", + "Hyper PETG" + ] + ], + "06003": [ + [ + "Creality", + "PETG-CF", + "Hyper PETG-CF" + ] + ], + "06004": [ + [ + "Creality", + "PETG-GF", + "Hyper PETG-GF" + ] + ], + "06005": [ + [ + "Creality", + "PETG", + "Soleyin Basic PETG" + ] + ], + "07001": [ + [ + "Creality", + "ABS", + "CR-ABS" + ], + [ + "Creality", + "ABS", + "Creality Generic ABS" + ] + ], + "07002": [ + [ + "Creality", + "PC", + "Hyper PC" + ] + ], + "08001": [ + [ + "Creality", + "PLA", + "Ender-PLA" + ] + ], + "09001": [ + [ + "Creality", + "PLA", + "EN-PLA+" + ] + ], + "09002": [ + [ + "Creality", + "PLA", + "ENDER FAST PLA" + ] + ], + "10001": [ + [ + "Creality", + "TPU", + "Creality Generic TPU" + ], + [ + "Creality", + "TPU", + "HP-TPU" + ] + ], + "1009481135": [ + [ + "Snapmaker", + "PET", + "Snapmaker J1 PET" + ] + ], + "1042511226": [ + [ + "Snapmaker", + "PETG-CF", + "Snapmaker Dual PETG-CF" + ] + ], + "10425112260": [ + [ + "Snapmaker", + "PETG-CF", + "Snapmaker PETG-CF" + ] + ], + "11001": [ + [ + "Creality", + "PA", + "CR-Nylon" + ], + [ + "Creality", + "PA", + "Creality Generic PA" + ] + ], + "1172603684": [ + [ + "Snapmaker", + "PETG", + "Snapmaker J1 PETG" + ] + ], + "1181363872": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Silk" + ] + ], + "11813638720": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Silk" + ] + ], + "1192769348": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Matte" + ] + ], + "12002": [ + [ + "Creality", + "PA-CF", + "Hyper PPA-CF" + ] + ], + "12003": [ + [ + "Creality", + "PA-CF", + "Hyper PAHT-CF" + ] + ], + "12004": [ + [ + "Creality", + "PA-CF", + "Hyper PA612-CF" + ] + ], + "12005": [ + [ + "Creality", + "PA-CF", + "Hyper PA6-CF" + ] + ], + "1207881278": [ + [ + "Snapmaker", + "Breakaway Support", + "Snapmaker Dual Breakaway" + ] + ], + "1210173120": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker J1 PA-CF" + ] + ], + "1223824394": [ + [ + "Snapmaker", + "ABS", + "Snapmaker J1 ABS" + ] + ], + "1247172706": [ + [ + "Snapmaker", + "ASA", + "Snapmaker Dual ASA" + ] + ], + "12471727060": [ + [ + "Snapmaker", + "ASA", + "Snapmaker ASA" + ] + ], + "13001": [ + [ + "Creality", + "PLA-CF", + "CR-PLA Carbon" + ] + ], + "1344609062": [ + [ + "Snapmaker", + "PVA", + "Snapmaker PVA" + ] + ], + "1355502217": [ + [ + "Snapmaker", + "PETG-CF", + "Snapmaker PETG-CF" + ] + ], + "1393866034": [ + [ + "Snapmaker", + "PLA", + "PolyLite PLA" + ] + ], + "14001": [ + [ + "Creality", + "PLA", + "CR-PLA Matte" + ] + ], + "1417031127": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA" + ] + ], + "14170311270": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA" + ] + ], + "141703112701": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA SnapSpeed" + ] + ], + "1417031127011": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Lite" + ] + ], + "144877656": [ + [ + "Snapmaker", + "ASA", + "Snapmaker J1 ASA" + ] + ], + "1480063856": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU" + ] + ], + "15001": [ + [ + "Creality", + "PLA", + "CR-PLA Fluo" + ] + ], + "1528786603": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Silk" + ] + ], + "16001": [ + [ + "Creality", + "TPU", + "CR-TPU" + ] + ], + "1655727393": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Silk" + ] + ], + "168223792": [ + [ + "Snapmaker", + "ABS", + "Snapmaker Dual ABS" + ] + ], + "1682237920": [ + [ + "Snapmaker", + "ABS", + "Snapmaker ABS" + ] + ], + "1695556157": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Eco" + ] + ], + "17001": [ + [ + "Creality", + "PLA", + "CR-Wood" + ] + ], + "1702147325": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker Dual PLA-CF" + ] + ], + "17021473250": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker PLA-CF" + ] + ], + "18001": [ + [ + "Creality", + "PLA", + "HP Ultra PLA" + ] + ], + "1895495477": [ + [ + "Snapmaker", + "PETG", + "Snapmaker PETG" + ] + ], + "19001": [ + [ + "Creality", + "ASA", + "Creality Generic ASA" + ], + [ + "Creality", + "ASA", + "HP-ASA" + ] + ], + "200803790": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Eco" + ] + ], + "2008037900": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Eco" + ] + ], + "2029994346": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Metal" + ] + ], + "20299943460": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Metal" + ] + ], + "2128577941": [ + [ + "Snapmaker", + "PET", + "Snapmaker Dual PET" + ] + ], + "21285779410": [ + [ + "Snapmaker", + "PET", + "Snapmaker PET" + ] + ], + "2209001062": [ + [ + "Snapmaker", + "PETG", + "Snapmaker Dual PETG" + ] + ], + "22090010620": [ + [ + "Snapmaker", + "PETG", + "Snapmaker PETG" + ] + ], + "2549587591": [ + [ + "Snapmaker", + "PET", + "Snapmaker PET" + ] + ], + "2742961008": [ + [ + "Snapmaker", + "ASA", + "Snapmaker ASA" + ] + ], + "29001": [ + [ + "Creality", + "PLA", + "Hyper Marble" + ] + ], + "2971656290": [ + [ + "Snapmaker", + "TPU", + "Snapmaker Dual TPU" + ] + ], + "29716562900": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU" + ] + ], + "297165629001": [ + [ + "Generic", + "TPU", + "Snapmaker TPU 95A" + ] + ], + "3104636980": [ + [ + "Snapmaker", + "PVA", + "Snapmaker Dual PVA" + ] + ], + "31046369800": [ + [ + "Snapmaker", + "PVA", + "Snapmaker PVA" + ] + ], + "3177068229": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA" + ] + ], + "3383257822": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Eco" + ] + ], + "3492897526": [ + [ + "Snapmaker", + "Breakaway Support", + "Snapmaker J1 Breakaway" + ] + ], + "3493177425": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker Dual PA-CF" + ] + ], + "34931774250": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker PA-CF" + ] + ], + "3503790988": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Matte" + ] + ], + "377675245": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA" + ] + ], + "3806593857": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker J1 PLA-CF" + ] + ], + "3811508002": [ + [ + "Snapmaker", + "ABS", + "Snapmaker ABS" + ] + ], + "3864371306": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker PLA-CF" + ] + ], + "4012961186": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Metal" + ] + ], + "4092268632": [ + [ + "Snapmaker", + "TPU", + "Snapmaker J1 TPU" + ] + ], + "4227461134": [ + [ + "Snapmaker", + "PVA", + "Snapmaker J1 PVA" + ] + ], + "4235401834": [ + [ + "Snapmaker", + "PETG-CF", + "Snapmaker J1 PETG-CF" + ] + ], + "581236806": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker PA-CF" + ] + ], + "AZ01-1": [ + [ + "Aliz", + "PETG-CF", + "AliZ PETG-CF" + ] + ], + "AZ01-2": [ + [ + "Aliz", + "PETG", + "AliZ PETG-Metal" + ] + ], + "AliZ001": [ + [ + "Aliz", + "PETG", + "AliZ PETG" + ] + ], + "AliZ002": [ + [ + "Aliz", + "PLA", + "AliZ PLA" + ] + ], + "AliZ003": [ + [ + "Aliz", + "PA-CF", + "AliZ PA-CF" + ] + ], + "BSFI001": [ + [ + "Generic", + "PLA", + "Blocks Generic PLA" + ] + ], + "BSFI002": [ + [ + "Generic", + "PETG", + "Blocks Generic PETG" + ] + ], + "BSFI003": [ + [ + "Generic", + "TPU", + "Blocks Generic TPU" + ] + ], + "BSFI004": [ + [ + "Generic", + "ABS", + "Blocks Generic ABS" + ] + ], + "BSFI005": [ + [ + "Generic", + "ASA", + "Blocks Generic ASA" + ] + ], + "BSFI006": [ + [ + "Generic", + "PA", + "Blocks Generic PA" + ] + ], + "BSFI007": [ + [ + "Generic", + "PA-CF", + "Blocks Generic PA-CF" + ] + ], + "BSFI008": [ + [ + "Generic", + "PC", + "Blocks Generic PC" + ] + ], + "BSFI009": [ + [ + "Generic", + "PVA", + "Blocks Generic PVA" + ] + ], + "BSFI010": [ + [ + "Generic", + "PLA-CF", + "Blocks Generic PLA-CF" + ] + ], + "CX30DB20": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 30D" + ] + ], + "CX40DB20": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 40D" + ] + ], + "CX60AB17": [ + [ + "COEX 3D", + "TPU", + "COEX TPU 60A" + ] + ], + "CX60DB19": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 60D" + ] + ], + "CXABPB09": [ + [ + "COEX 3D", + "ABS", + "COEX ABS PRIME" + ] + ], + "CXABSB01": [ + [ + "COEX 3D", + "ABS", + "COEX ABS" + ] + ], + "CXASAB04": [ + [ + "COEX 3D", + "ASA", + "COEX ASA PRIME" + ] + ], + "CXPACB23": [ + [ + "COEX 3D", + "PA-CF", + "COEX NYLEX PA6-CF" + ] + ], + "CXPAUB21": [ + [ + "COEX 3D", + "PA", + "COEX NYLEX UNFILLED" + ] + ], + "CXPCTB15": [ + [ + "COEX 3D", + "PCTG", + "COEX PCTG PRIME" + ] + ], + "CXPETB13": [ + [ + "COEX 3D", + "PETG", + "COEX PETG" + ] + ], + "CXPLAB02": [ + [ + "COEX 3D", + "PLA", + "COEX PLA" + ] + ], + "CXPLAB08": [ + [ + "COEX 3D", + "PLA", + "COEX PLA PRIME" + ] + ], + "CXPLSB03": [ + [ + "COEX 3D", + "PLA", + "COEX PLA+Silk" + ] + ], + "DFL99": [ + [ + "Volumic", + "PLA", + "Désactivé" + ] + ], + "DREMC001": [ + [ + "DREMC", + "PLA", + "DREMC PLA+" + ] + ], + "DREMC002": [ + [ + "DREMC", + "PETG", + "DREMC PETG" + ] + ], + "DREMC003": [ + [ + "DREMC", + "ABS", + "DREMC ABS" + ] + ], + "DREMC004": [ + [ + "DREMC", + "ABS", + "DREMC ABS+" + ] + ], + "DREMC005": [ + [ + "DREMC", + "ASA", + "DREMC ASA" + ] + ], + "DREMC006": [ + [ + "DREMC", + "PA6-CF", + "DREMC PA6-CF" + ] + ], + "DREMC007": [ + [ + "DREMC", + "PA-CF", + "DREMC PA12-CF" + ] + ], + "DREMC008": [ + [ + "DREMC", + "PET-CF", + "DREMC PET-CF" + ] + ], + "DREMC009": [ + [ + "DREMC", + "ABS-GF", + "DREMC ABS-GF" + ] + ], + "DREMC010": [ + [ + "DREMC", + "PPA-CF", + "DREMC PPA-CF" + ], + [ + "DREMC", + "TPU", + "DREMC TPU 95A" + ] + ], + "DREMC011": [ + [ + "DREMC", + "PLA", + "DREMC PLA+ HS" + ] + ], + "DREMC012": [ + [ + "DREMC", + "ASA", + "DREMC ASA CF" + ] + ], + "DREMC013": [ + [ + "DREMC", + "ASA", + "DREMC ASA GF" + ] + ], + "E1001": [ + [ + "eSUN", + "PLA", + "eSUN PLA+" + ] + ], + "E1002": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Silk" + ] + ], + "E1003": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Matte" + ] + ], + "E1004": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Lite" + ] + ], + "E1005": [ + [ + "eSUN", + "PLA-CF", + "eSUN PLA-CF" + ] + ], + "E1006": [ + [ + "eSUN", + "PLA", + "eSUN PLA-HS" + ] + ], + "E2001": [ + [ + "eSUN", + "PETG", + "eSUN PETG" + ] + ], + "E2002": [ + [ + "eSUN", + "PETG", + "eSUN PETG+HS" + ] + ], + "E2003": [ + [ + "eSUN", + "PETG", + "eSUN PETG-Basic" + ] + ], + "E3001": [ + [ + "eSUN", + "ABS", + "eSUN ABS+" + ] + ], + "E4001": [ + [ + "eSUN", + "ASA", + "eSUN ASA+" + ] + ], + "E8001": [ + [ + "eSUN", + "PET", + "eSUN PET-Basic" + ] + ], + "EABSB00": [ + [ + "Elegoo", + "ABS", + "Elegoo ABS" + ] + ], + "EASAB00": [ + [ + "Elegoo", + "ASA", + "Elegoo ASA" + ] + ], + "EFL33": [ + [ + "Eryone", + "PP-CF", + "Eryone PP-CF" + ] + ], + "EFL40": [ + [ + "Eryone", + "PLA-CF", + "Eryone PLA-CF" + ] + ], + "EFL43": [ + [ + "Eryone", + "PETG-CF", + "Eryone PETG-CF" + ] + ], + "EFL71": [ + [ + "Eryone", + "PA", + "Eryone PA" + ] + ], + "EFL72": [ + [ + "Eryone", + "PA-CF", + "Eryone PA-CF" + ] + ], + "EFL73": [ + [ + "Eryone", + "PA-GF", + "Eryone PA-GF" + ] + ], + "EFL81": [ + [ + "Eryone", + "ABS-CF", + "Eryone ABS-CF" + ] + ], + "EFL82": [ + [ + "Eryone", + "ASA-CF", + "Eryone ASA-CF" + ] + ], + "EFL90": [ + [ + "Eryone", + "PLA", + "Eryone PLA" + ] + ], + "EFL91": [ + [ + "Eryone", + "ABS", + "Eryone ABS" + ] + ], + "EFL92": [ + [ + "Eryone", + "ASA", + "Eryone ASA" + ] + ], + "EFL93": [ + [ + "Eryone", + "PETG", + "Eryone PETG" + ] + ], + "EFL941": [ + [ + "Eryone", + "PLA Silk", + "Eryone Silk PLA" + ] + ], + "EFL95": [ + [ + "Eryone", + "TPU", + "Eryone TPU" + ] + ], + "EPAHTB00": [ + [ + "Elegoo", + "PA", + "Elegoo PAHT" + ] + ], + "EPCB00": [ + [ + "Elegoo", + "PC", + "Elegoo PC" + ] + ], + "EPETGB00": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG" + ] + ], + "EPLAB00": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA" + ] + ], + "ESN02": [ + [ + "eSUN", + "PLA-AERO", + "eSUN ePLA-LW" + ] + ], + "ESN03": [ + [ + "eSUN", + "PETG", + "eSUN PETG" + ] + ], + "ETPUB00": [ + [ + "Elegoo", + "TPU", + "Elegoo TPU" + ] + ], + "FDPLAST01": [ + [ + "FDplast", + "ABS", + "FDplast ABS" + ] + ], + "FDPLAST02": [ + [ + "FDplast", + "HIPS", + "FDplast HIPS" + ] + ], + "FDPLAST03": [ + [ + "FDplast", + "PETG", + "FDplast PETG" + ] + ], + "FDPLAST04": [ + [ + "FDplast", + "PLA", + "FDplast PLA" + ] + ], + "FDPLAST05": [ + [ + "FDplast", + "SBS", + "FDplast SBS" + ] + ], + "FDPLAST06": [ + [ + "FDplast", + "TPU", + "FDplast TPU" + ] + ], + "FFF01": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA" + ] + ], + "FFF02": [ + [ + "Flashforge", + "ABS", + "Flashforge ABS" + ] + ], + "FFF03": [ + [ + "Flashforge", + "PETG", + "Flashforge PETG" + ], + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "FFG01": [ + [ + "Generic", + "PLA", + "Flashforge Generic PLA" + ] + ], + "FILAR0001": [ + [ + "FilAr", + "PLA", + "FilAr PLA Bronce" + ] + ], + "FILAR0002": [ + [ + "FilAr", + "PLA", + "FilAr PLA Gris Plata" + ] + ], + "FILAR0003": [ + [ + "FilAr", + "PLA", + "FilAr PLA Cobre" + ] + ], + "FILAR0004": [ + [ + "FilAr", + "PLA", + "FilAr PLA Titanio" + ] + ], + "FILAR0005": [ + [ + "FilAr", + "PLA", + "FilAr PLA Tabaco" + ] + ], + "FILAR0006": [ + [ + "FilAr", + "PLA", + "FilAr PLA Cafe con Leche" + ] + ], + "FILAR0007": [ + [ + "FilAr", + "PLA", + "FilAr PLA Manteca" + ] + ], + "FILAR0008": [ + [ + "FilAr", + "PLA", + "FilAr PLA Marron Oxido" + ] + ], + "FILAR0009": [ + [ + "FilAr", + "PLA", + "FilAr PLA Carpincho" + ] + ], + "FILAR0010": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rosa Amaranto" + ] + ], + "FILAR0011": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rosa Flamenco" + ] + ], + "FILAR0012": [ + [ + "FilAr", + "PLA", + "FilAr PLA Piel" + ] + ], + "FILAR0013": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde FilAr" + ] + ], + "FILAR0014": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Manzana" + ] + ], + "FILAR0015": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Pixel" + ] + ], + "FILAR0016": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Oliva" + ] + ], + "FILAR0017": [ + [ + "FilAr", + "PLA", + "FilAr PLA Blanco Antartida" + ] + ], + "FILAR0018": [ + [ + "FilAr", + "PLA", + "FilAr PLA Blanco Calido" + ] + ], + "FILAR0019": [ + [ + "FilAr", + "PLA", + "FilAr PLA Negro Azabache" + ] + ], + "FILAR0020": [ + [ + "FilAr", + "PLA", + "FilAr PLA Naranja Tigre" + ] + ], + "FILAR0021": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rojo de Carreras" + ] + ], + "FILAR0022": [ + [ + "FilAr", + "PLA", + "FilAr PLA Amarillo Lirio" + ] + ], + "FILAR0023": [ + [ + "FilAr", + "PLA", + "FilAr PLA Violeta Jacaranda" + ] + ], + "FILAR0024": [ + [ + "FilAr", + "PLA", + "FilAr PLA Gris Pizarra" + ] + ], + "FILAR0025": [ + [ + "FilAr", + "PLA", + "FilAr PLA Gris Ceniza" + ] + ], + "FILAR0026": [ + [ + "FilAr", + "PLA", + "FilAr PLA Azul Francia" + ] + ], + "FILAR0027": [ + [ + "FilAr", + "PLA", + "FilAr PLA Celeste Cielo" + ] + ], + "FILAR0028": [ + [ + "FilAr", + "PLA", + "FilAr PLA Oro" + ] + ], + "FILAR0029": [ + [ + "FilAr", + "PLA", + "FilAr PLA Dorado" + ] + ], + "FILAR0030": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Amarillo" + ] + ], + "FILAR0031": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Azul" + ] + ], + "FILAR0032": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Beige" + ] + ], + "FILAR0033": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Blanco" + ] + ], + "FILAR0034": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Bordo" + ] + ], + "FILAR0035": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Celeste Cielo" + ] + ], + "FILAR0036": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Chocolate" + ] + ], + "FILAR0037": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Gris" + ] + ], + "FILAR0038": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Marron" + ] + ], + "FILAR0039": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Naranja" + ] + ], + "FILAR0040": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Negro" + ] + ], + "FILAR0041": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Piel" + ] + ], + "FILAR0042": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Rojo" + ] + ], + "FILAR0043": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Rosa" + ] + ], + "FILAR0044": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Uva" + ] + ], + "FILAR0045": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Verde" + ] + ], + "FILAR0046": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Violeta" + ] + ], + "FILAR0047": [ + [ + "FilAr", + "PETG", + "FilAr PETG Amarillo Lima" + ] + ], + "FILAR0048": [ + [ + "FilAr", + "PETG", + "FilAr PETG Amarillo Radiante" + ] + ], + "FILAR0049": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Boreal" + ] + ], + "FILAR0050": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Francia" + ] + ], + "FILAR0051": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Imperial" + ] + ], + "FILAR0052": [ + [ + "FilAr", + "PETG", + "FilAr PETG Blanco Antartida" + ] + ], + "FILAR0053": [ + [ + "FilAr", + "PETG", + "FilAr PETG Cian" + ] + ], + "FILAR0054": [ + [ + "FilAr", + "PETG", + "FilAr PETG Coral" + ] + ], + "FILAR0055": [ + [ + "FilAr", + "PETG", + "FilAr PETG Cristal" + ] + ], + "FILAR0056": [ + [ + "FilAr", + "PETG", + "FilAr PETG Gris Ceniza" + ] + ], + "FILAR0057": [ + [ + "FilAr", + "PETG", + "FilAr PETG Gris Plata" + ] + ], + "FILAR0058": [ + [ + "FilAr", + "PETG", + "FilAr PETG Magenta" + ] + ], + "FILAR0059": [ + [ + "FilAr", + "PETG", + "FilAr PETG Negro Azabache" + ] + ], + "FILAR0060": [ + [ + "FilAr", + "PETG", + "FilAr PETG Rojo Carmesi" + ] + ], + "FILARB01": [ + [ + "FilAr", + "PLA", + "FilAr PLA" + ] + ], + "FILARB02": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate" + ] + ], + "FILARB03": [ + [ + "FilAr", + "PETG", + "FilAr PETG" + ] + ], + "FILL3D001": [ + [ + "FILL3D", + "PLA", + "FILL3D PLA Turbo" + ] + ], + "FILL3D002": [ + [ + "FILL3D", + "PLA", + "FILL3D PLA Basic" + ] + ], + "FILL3D003": [ + [ + "FILL3D", + "PETG", + "FILL3D PETG" + ] + ], + "FILL3D004": [ + [ + "FILL3D", + "PP", + "FILL3D PP" + ] + ], + "FILL3D005": [ + [ + "FILL3D", + "PP", + "FILL3D PPCF" + ] + ], + "FILL3D006": [ + [ + "FILL3D", + "PA", + "FILL3D PA" + ] + ], + "FILL3D007": [ + [ + "FILL3D", + "PETG-CF", + "FILL3D PETG CF" + ] + ], + "GABSB00": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "GASAB00": [ + [ + "Generic", + "ASA", + "Generic ASA" + ] + ], + "GFA00": [ + [ + "Afinia", + "PLA", + "Afinia PLA" + ], + [ + "Afinia", + "PLA", + "Afinia Value PLA" + ], + [ + "Orca Arena", + "PLA", + "Arena PLA Basic" + ], + [ + "Tiertime", + "PLA", + "Tiertime PLA" + ], + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Basic" + ] + ], + "GFA00_01": [ + [ + "Afinia", + "PLA", + "Afinia PLA" + ], + [ + "Tiertime", + "PLA", + "Tiertime PLA" + ] + ], + "GFA01": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Matte" + ], + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Matte" + ] + ], + "GFA02": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Metal" + ], + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Metal" + ] + ], + "GFA03": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Impact" + ] + ], + "GFA05": [ + [ + "Generic", + "PLA", + "Qidi Generic PLA Silk" + ], + [ + "Orca Arena", + "PLA", + "Arena PLA Silk" + ], + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Silk" + ] + ], + "GFA07": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Marble" + ], + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Marble" + ] + ], + "GFA08": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Sparkle" + ] + ], + "GFA09": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Tough" + ] + ], + "GFA16": [ + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Wood" + ] + ], + "GFA50": [ + [ + "Orca Arena", + "PLA-CF", + "Arena PLA-CF" + ], + [ + "Tiertime", + "PLA-CF", + "Tiertime PLA-CF" + ] + ], + "GFA50_01": [ + [ + "Tiertime", + "PLA-CF", + "Tiertime PLA-CF" + ] + ], + "GFA99": [ + [ + "Anycubic", + "ASA", + "Anycubic ASA" + ], + [ + "CoLiDo", + "PLA", + "CoLiDo Generic PLA" + ], + [ + "CoLiDo", + "PLA", + "CoLiDo PLA+" + ], + [ + "Generic", + "ASA", + "Anycubic ASA" + ] + ], + "GFASA": [ + [ + "Anycubic", + "ASA", + "Anycubic ASA" + ], + [ + "Generic", + "ASA", + "Anycubic ASA" + ] + ], + "GFB00": [ + [ + "Afinia", + "ABS", + "Afinia ABS" + ], + [ + "Afinia", + "ABS", + "Afinia ABS+" + ], + [ + "Afinia", + "ABS", + "Afinia Value ABS" + ], + [ + "Orca Arena", + "ABS", + "Arena ABS" + ], + [ + "Tiertime", + "ABS", + "Tiertime ABS" + ], + [ + "WonderMaker", + "ABS", + "WonderMaker ABS" + ] + ], + "GFB00_01": [ + [ + "Afinia", + "ABS", + "Afinia ABS" + ], + [ + "Tiertime", + "ABS", + "Tiertime ABS" + ] + ], + "GFB01": [ + [ + "Tiertime", + "ASA", + "Tiertime ASA" + ], + [ + "WonderMaker", + "ASA", + "WonderMaker ASA" + ] + ], + "GFB01_01": [ + [ + "Tiertime", + "ASA", + "Tiertime ASA" + ] + ], + "GFB98": [ + [ + "Generic", + "ASA", + "Anker Generic ASA" + ], + [ + "Generic", + "ASA", + "Anycubic Generic ASA" + ], + [ + "Generic", + "ASA", + "Artillery Generic ASA" + ], + [ + "Generic", + "ASA", + "Creality Generic ASA" + ], + [ + "Generic", + "ASA", + "FLSun Generic ASA" + ], + [ + "Generic", + "ASA", + "FLSun S1 ASA" + ], + [ + "Generic", + "ASA", + "FLSun T1 ASA" + ], + [ + "Generic", + "ASA", + "OrcaArena Generic ASA" + ], + [ + "Generic", + "ASA", + "RatRig Generic ASA" + ], + [ + "Generic", + "ASA", + "SecKit Generic ASA" + ], + [ + "Generic", + "ASA", + "Tiertime Generic ASA" + ], + [ + "Generic", + "ASA", + "Vzbot Generic ASA" + ], + [ + "Generic", + "ASA", + "fdm_filament_asa" + ] + ], + "GFB98_01": [ + [ + "Generic", + "ASA", + "Tiertime Generic ASA" + ] + ], + "GFB98_2": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "GFB98_3": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "GFB98_4": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "GFB98_5": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ], + [ + "Generic", + "ASA", + "Prusa Generic ASA HF" + ] + ], + "GFB98_6": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA HF" + ] + ], + "GFB98_7": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA HF" + ] + ], + "GFB99": [ + [ + "CoLiDo", + "ABS", + "CoLiDo ABS" + ], + [ + "CoLiDo", + "ABS", + "CoLiDo Generic ABS" + ], + [ + "FlyingBear", + "ABS", + "FlyingBear Generic ABS" + ], + [ + "Generic", + "ABS", + "Anker Generic ABS" + ], + [ + "Generic", + "ABS", + "Anycubic Generic ABS" + ], + [ + "Generic", + "ABS", + "Artillery Generic ABS" + ], + [ + "Generic", + "ABS", + "Chuanying ABS" + ], + [ + "Generic", + "ABS", + "Chuanying Generic ABS" + ], + [ + "Generic", + "ABS", + "Comgrow Generic ABS" + ], + [ + "Generic", + "ABS", + "Creality Generic ABS" + ], + [ + "Generic", + "ABS", + "FLSun Generic ABS" + ], + [ + "Generic", + "ABS", + "FLSun S1 ABS" + ], + [ + "Generic", + "ABS", + "FLSun T1 ABS" + ], + [ + "Generic", + "ABS", + "Flashforge ABS" + ], + [ + "Generic", + "ABS", + "Flashforge Generic ABS" + ], + [ + "Generic", + "ABS", + "Generic ABS" + ], + [ + "Generic", + "ABS", + "Lulzbot 2.85mm ABS" + ], + [ + "Generic", + "ABS", + "OrcaArena Generic ABS" + ], + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ], + [ + "Generic", + "ABS", + "Qidi Generic ABS" + ], + [ + "Generic", + "ABS", + "RatRig Generic ABS" + ], + [ + "Generic", + "ABS", + "SecKit Generic ABS" + ], + [ + "Generic", + "ABS", + "Tiertime Generic ABS" + ], + [ + "Generic", + "ABS", + "Vzbot Generic ABS" + ], + [ + "Generic", + "TPU", + "DeltaMaker Generic TPU" + ], + [ + "InfiMech", + "ABS", + "InfiMech Generic ABS" + ], + [ + "Volumic", + "ABS", + "Volumic ABS Ultra" + ], + [ + "Volumic", + "ABS", + "Volumic ABS Ultra (Performance)" + ] + ], + "GFB99_01": [ + [ + "Generic", + "ABS", + "Tiertime Generic ABS" + ] + ], + "GFB99_2": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "GFB99_3": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "GFB99_4": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "GFB99_5": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ], + [ + "Generic", + "ABS", + "Prusa Generic ABS HF" + ] + ], + "GFB99_6": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS HF" + ] + ], + "GFB99_7": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS HF" + ] + ], + "GFC00": [ + [ + "Orca Arena", + "PC", + "Arena PC" + ], + [ + "Tiertime", + "PC", + "Tiertime PC" + ] + ], + "GFC00_01": [ + [ + "Tiertime", + "PC", + "Tiertime PC" + ] + ], + "GFC98": [ + [ + "Generic", + "PC-CF", + "fdm_filament_pccf" + ] + ], + "GFC99": [ + [ + "FlyingBear", + "PC", + "FlyingBear Generic PC" + ], + [ + "Generic", + "PC", + "Anker Generic PC" + ], + [ + "Generic", + "PC", + "Anycubic Generic PC" + ], + [ + "Generic", + "PC", + "Creality Generic PC" + ], + [ + "Generic", + "PC", + "FLSun Generic PC" + ], + [ + "Generic", + "PC", + "Generic PC" + ], + [ + "Generic", + "PC", + "OrcaArena Generic PC" + ], + [ + "Generic", + "PC", + "Qidi Generic PC" + ], + [ + "Generic", + "PC", + "RatRig Generic PC" + ], + [ + "Generic", + "PC", + "SecKit Generic PC" + ], + [ + "Generic", + "PC", + "Tiertime Generic PC" + ], + [ + "Generic", + "PC", + "Vzbot Generic PC" + ], + [ + "Generic", + "PC", + "fdm_filament_pc" + ], + [ + "InfiMech", + "PC", + "InfiMech Generic PC" + ], + [ + "Volumic", + "PC", + "Volumic PC" + ], + [ + "Volumic", + "PC", + "Volumic PC (Performance)" + ] + ], + "GFC99_01": [ + [ + "Generic", + "PC", + "Tiertime Generic PC" + ] + ], + "GFC99_1": [ + [ + "Generic", + "PC", + "Prusa Generic PC" + ] + ], + "GFC99_2": [ + [ + "Generic", + "PC", + "Prusa Generic PC" + ] + ], + "GFC99_3": [ + [ + "Generic", + "PC", + "Prusa Generic PC" + ] + ], + "GFC99_4": [ + [ + "Generic", + "PC", + "Prusa Generic PC" + ], + [ + "Generic", + "PC", + "Prusa Generic PC HF" + ] + ], + "GFC99_5": [ + [ + "Generic", + "PC", + "Prusa Generic PC HF" + ] + ], + "GFC99_6": [ + [ + "Generic", + "PC", + "Prusa Generic PC HF" + ] + ], + "GFG00": [ + [ + "Orca Arena", + "PETG", + "Arena PETG Basic" + ], + [ + "Tiertime", + "PETG", + "Tiertime PETG" + ], + [ + "WonderMaker", + "PETG", + "WonderMaker PETG Basic" + ] + ], + "GFG00_01": [ + [ + "Tiertime", + "PETG", + "Tiertime PETG" + ] + ], + "GFG01": [ + [ + "Generic", + "PETG", + "re3D Greengate rPETG" + ], + [ + "re3D", + "PETG", + "re3D Greengate rPETG" + ] + ], + "GFG02": [ + [ + "re3D", + "PP", + "re3D rPP" + ] + ], + "GFG03": [ + [ + "re3D", + "PETG", + "re3D PETG" + ] + ], + "GFG50": [ + [ + "Orca Arena", + "PETG-CF", + "Arena PETG-CF" + ] + ], + "GFG60": [ + [ + "Polymaker", + "PETG", + "PolyLite PETG" + ] + ], + "GFG97": [ + [ + "Generic", + "PCTG", + "Tiertime Generic PCTG" + ] + ], + "GFG97-01": [ + [ + "Generic", + "PCTG", + "Tiertime Generic PCTG" + ] + ], + "GFG98": [ + [ + "Generic", + "PETG-CF", + "Anker Generic PETG-CF" + ], + [ + "Generic", + "PETG-CF", + "Qidi Generic PETG-CF" + ], + [ + "Generic", + "PETG-CF", + "Tiertime Generic PETG-CF" + ], + [ + "Orca Arena", + "PETG-CF", + "OrcaArena Generic PETG-CF" + ], + [ + "Volumic", + "PETG", + "Volumic PETG Ultra carbone" + ], + [ + "Volumic", + "PETG", + "Volumic PETG Ultra carbone (Performance)" + ] + ], + "GFG98_01": [ + [ + "Generic", + "PETG-CF", + "Tiertime Generic PETG-CF" + ] + ], + "GFG99": [ + [ + "CoLiDo", + "PETG", + "CoLiDo Generic PETG" + ], + [ + "CoLiDo", + "PETG", + "CoLiDo PETG" + ], + [ + "FlyingBear", + "PETG", + "FlyingBear Generic PETG" + ], + [ + "FlyingBear", + "PETG Basic", + "FlyingBear PETG Basic" + ], + [ + "Generic", + "PEEK", + "MM Generic PEEK" + ], + [ + "Generic", + "PETG", + "Anker Generic PETG" + ], + [ + "Generic", + "PETG", + "Anycubic Generic PETG" + ], + [ + "Generic", + "PETG", + "Artillery Generic PETG" + ], + [ + "Generic", + "PETG", + "C1 Generic PETG" + ], + [ + "Generic", + "PETG", + "Chuanying Generic PETG" + ], + [ + "Generic", + "PETG", + "Chuanying PETG" + ], + [ + "Generic", + "PETG", + "Comgrow Generic PETG" + ], + [ + "Generic", + "PETG", + "Creality Generic PETG" + ], + [ + "Generic", + "PETG", + "DeltaMaker Generic PETG" + ], + [ + "Generic", + "PETG", + "FLSun Generic PETG" + ], + [ + "Generic", + "PETG", + "FLSun S1 PETG" + ], + [ + "Generic", + "PETG", + "FLSun T1 PETG" + ], + [ + "Generic", + "PETG", + "Flashforge Generic PETG" + ], + [ + "Generic", + "PETG", + "Flashforge PETG" + ], + [ + "Generic", + "PETG", + "Generic PETG" + ], + [ + "Generic", + "PETG", + "Lulzbot 2.85mm PETG" + ], + [ + "Generic", + "PETG", + "OrcaArena Generic PETG" + ], + [ + "Generic", + "PETG", + "Qidi Generic PETG" + ], + [ + "Generic", + "PETG", + "RatRig Generic PETG" + ], + [ + "Generic", + "PETG", + "SecKit Generic PETG" + ], + [ + "Generic", + "PETG", + "Tiertime Generic PETG" + ], + [ + "Generic", + "PETG", + "Vzbot Generic PETG" + ], + [ + "Generic", + "PETG", + "Yumi Generic PETG" + ], + [ + "InfiMech", + "PETG", + "InfiMech Generic PETG" + ], + [ + "Volumic", + "PETG", + "Volumic PETG Ultra" + ], + [ + "Volumic", + "PETG", + "Volumic PETG Ultra (Performance)" + ], + [ + "Yumi", + "PETG", + "YUMI PETG" + ], + [ + "re3D", + "PC", + "re3D PC" + ] + ], + "GFG99_01": [ + [ + "Generic", + "PETG", + "Tiertime Generic PETG" + ] + ], + "GFG99_2": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "GFG99_3": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "GFG99_4": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "GFG99_5": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ], + [ + "Generic", + "PETG", + "Prusa Generic PETG HF" + ] + ], + "GFG99_6": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG HF" + ] + ], + "GFG99_7": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG HF" + ] + ], + "GFL00": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA" + ] + ], + "GFL01": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA" + ] + ], + "GFL06": [ + [ + "Polymaker", + "PETG", + "Fiberon PETG-ESD" + ] + ], + "GFL100": [ + [ + "Generic", + "PLA", + "Generic PLA" + ], + [ + "Generic", + "PLA", + "TwoTrees Generic HS PLA" + ] + ], + "GFL106": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "GFL108": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "GFL200": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "GFL204": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "GFL206": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "GFL208": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "GFL300": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFL304": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFL306": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFL308": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFL400": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "GFL404": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "GFL406": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "GFL408": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "GFL500": [ + [ + "Generic", + "ABS", + "Generic ABS HT" + ] + ], + "GFL504": [ + [ + "Generic", + "ABS", + "Generic ABS HT" + ] + ], + "GFL506": [ + [ + "Generic", + "ABS", + "Generic ABS HT" + ] + ], + "GFL508": [ + [ + "Generic", + "ABS", + "Generic ABS HT" + ] + ], + "GFL56": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA12-CF10" + ] + ], + "GFL57": [ + [ + "Polymaker", + "PA6-CF", + "Fiberon PA6-CF20" + ] + ], + "GFL62": [ + [ + "Polymaker", + "PLA", + "PolyLite CosPLA" + ] + ], + "GFL63": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Galaxy" + ] + ], + "GFL64": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Glow" + ] + ], + "GFL65": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Luminous" + ] + ], + "GFL66": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Neon" + ] + ], + "GFL67": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Starlight" + ] + ], + "GFL68": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Translucent" + ] + ], + "GFL69": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA Marble" + ] + ], + "GFL70": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA+" + ] + ], + "GFL71": [ + [ + "Polymaker", + "ASA", + "Fiberon ASA-CF08" + ] + ], + "GFL72": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA612-ESD" + ] + ], + "GFL73": [ + [ + "Polymaker", + "ABS", + "Fiberon PPS-GF20" + ] + ], + "GFL74": [ + [ + "Polymaker", + "PETG", + "PolyLite PETG Translucent" + ] + ], + "GFL75": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Pro Metallic" + ] + ], + "GFL76": [ + [ + "Polymaker", + "PETG", + "Polymaker PETG" + ] + ], + "GFL77": [ + [ + "Polymaker", + "PETG", + "Polymaker PETG Galaxy" + ] + ], + "GFL78": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA" + ] + ], + "GFL79": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA Pro" + ] + ], + "GFL80": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA Pro Metallic" + ] + ], + "GFL94": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Slik" + ] + ], + "GFL95": [ + [ + "Generic", + "PLA", + "Anker Generic PLA+" + ], + [ + "Generic", + "PLA", + "Tiertime Generic PLA High Speed" + ] + ], + "GFL95_01": [ + [ + "Generic", + "PLA", + "Tiertime Generic PLA High Speed" + ] + ], + "GFL96": [ + [ + "Generic", + "PLA", + "Anker Generic PLA Silk" + ], + [ + "Generic", + "PLA", + "Tiertime Generic PLA Silk" + ] + ], + "GFL96_01": [ + [ + "Generic", + "PLA", + "Tiertime Generic PLA Silk" + ] + ], + "GFL97": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA SE" + ] + ], + "GFL98": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Glow" + ], + [ + "Generic", + "PLA-CF", + "Anker Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Anycubic Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Artillery Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Creality Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "FLSun Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "OrcaArena Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Qidi Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "RatRig Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "SecKit Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Tiertime Generic PLA-CF" + ], + [ + "Generic", + "PLA-CF", + "Vzbot Generic PLA-CF" + ] + ], + "GFL98_01": [ + [ + "Generic", + "PLA-CF", + "Tiertime Generic PLA-CF" + ] + ], + "GFL98_1": [ + [ + "Generic", + "PLA-CF", + "Prusa Generic PLA-CF" + ] + ], + "GFL98_3": [ + [ + "Generic", + "PLA-CF", + "Prusa Generic PLA-CF" + ] + ], + "GFL98_4": [ + [ + "Generic", + "PLA-CF", + "Prusa Generic PLA-CF" + ] + ], + "GFL98_5": [ + [ + "Generic", + "PLA-CF", + "Prusa Generic PLA-CF" + ] + ], + "GFL99": [ + [ + "Co Print", + "PLA", + "CoPrint Generic PLA" + ], + [ + "FlyingBear", + "PLA", + "FlyingBear Generic PLA" + ], + [ + "Generic", + "ASA", + "Flashforge ASA" + ], + [ + "Generic", + "PLA", + "Anker Generic PLA" + ], + [ + "Generic", + "PLA", + "Anycubic Generic PLA" + ], + [ + "Generic", + "PLA", + "Artillery Generic PLA" + ], + [ + "Generic", + "PLA", + "C1 Generic PLA" + ], + [ + "Generic", + "PLA", + "Chuanying Generic PLA" + ], + [ + "Generic", + "PLA", + "Comgrow Generic PLA" + ], + [ + "Generic", + "PLA", + "Comgrow T300 PLA" + ], + [ + "Generic", + "PLA", + "Creality Generic PLA" + ], + [ + "Generic", + "PLA", + "DeltaMaker Generic PLA" + ], + [ + "Generic", + "PLA", + "Dremel Generic PLA" + ], + [ + "Generic", + "PLA", + "FLSun Generic PLA" + ], + [ + "Generic", + "PLA", + "FLSun S1 PLA Generic" + ], + [ + "Generic", + "PLA", + "FLSun T1 PLA Generic" + ], + [ + "Generic", + "PLA", + "Flashforge PLA-SILK" + ], + [ + "Generic", + "PLA", + "Generic PLA" + ], + [ + "Generic", + "PLA", + "Generic PLA High Speed" + ], + [ + "Generic", + "PLA", + "Lulzbot 2.85mm PLA" + ], + [ + "Generic", + "PLA", + "OrcaArena Generic PLA" + ], + [ + "Generic", + "PLA", + "Peopoly Generic PLA" + ], + [ + "Generic", + "PLA", + "Phrozen PLA" + ], + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ], + [ + "Generic", + "PLA", + "Qidi Generic PLA" + ], + [ + "Generic", + "PLA", + "RatRig Generic PLA" + ], + [ + "Generic", + "PLA", + "SecKit Generic PLA" + ], + [ + "Generic", + "PLA", + "Sovol SV07 PLA" + ], + [ + "Generic", + "PLA", + "Tiertime Generic PLA" + ], + [ + "Generic", + "PLA", + "Vzbot Generic PLA" + ], + [ + "Generic", + "PLA", + "Yumi Generic PLA" + ], + [ + "InfiMech", + "PLA", + "InfiMech Generic PLA" + ], + [ + "Volumic", + "PLA", + "Volumic PLA Ultra" + ], + [ + "Volumic", + "PLA", + "Volumic PLA Ultra (Performance)" + ], + [ + "re3D", + "PLA", + "re3D PLA" + ] + ], + "GFL99_01": [ + [ + "Generic", + "PLA", + "Tiertime Generic PLA" + ] + ], + "GFL99_2": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "GFL99_3": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "GFL99_4": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "GFL99_5": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ], + [ + "Generic", + "PLA", + "Prusa Generic PLA HF" + ] + ], + "GFL99_6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA HF" + ] + ], + "GFL99_7": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA HF" + ] + ], + "GFLLK10PETG": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFLLK10PLA": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "GFLLK10PPETG": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFLLK10PPLA": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "GFN03": [ + [ + "Orca Arena", + "PA-CF", + "Arena PA-CF" + ] + ], + "GFN04": [ + [ + "Orca Arena", + "PA-CF", + "Arena PAHT-CF" + ] + ], + "GFN05": [ + [ + "Tiertime", + "PA6-CF", + "Tiertime PA6-CF" + ] + ], + "GFN05_01": [ + [ + "Tiertime", + "PA6-CF", + "Tiertime PA6-CF" + ] + ], + "GFN96": [ + [ + "Generic", + "PPA-GF", + "Tiertime Generic PPA-GF" + ] + ], + "GFN96_01": [ + [ + "Generic", + "PPA-GF", + "Tiertime Generic PPA-GF" + ] + ], + "GFN97": [ + [ + "Generic", + "PPA-CF", + "Tiertime Generic PPA-CF" + ] + ], + "GFN97_01": [ + [ + "Generic", + "PPA-CF", + "Tiertime Generic PPA-CF" + ] + ], + "GFN98": [ + [ + "FlyingBear", + "PA-CF", + "FlyingBear Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Anker Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Anycubic Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Creality Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "FLSun Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "OrcaArena Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Qidi Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "RatRig Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "SecKit Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Tiertime Generic PA-CF" + ], + [ + "Generic", + "PA-CF", + "Vzbot Generic PA-CF" + ], + [ + "Generic", + "PA11-CF", + "fdm_filament_pa11cf" + ], + [ + "InfiMech", + "PA-CF", + "InfiMech Generic PA-CF" + ] + ], + "GFN98_02": [ + [ + "Generic", + "PA-CF", + "Tiertime Generic PA-CF" + ] + ], + "GFN98_1": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "GFN98_2": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "GFN98_3": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "GFN98_4": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "GFN99": [ + [ + "Generic", + "PA", + "Anker Generic PA" + ], + [ + "Generic", + "PA", + "Anycubic Generic PA" + ], + [ + "Generic", + "PA", + "FLSun Generic PA" + ], + [ + "Generic", + "PA", + "OrcaArena Generic PA" + ], + [ + "Generic", + "PA", + "Prusa Generic PA" + ], + [ + "Generic", + "PA", + "Qidi Generic PA" + ], + [ + "Generic", + "PA", + "RatRig Generic PA" + ], + [ + "Generic", + "PA", + "SecKit Generic PA" + ], + [ + "Generic", + "PA", + "Tiertime Generic PA" + ], + [ + "Generic", + "PA", + "Vzbot Generic PA" + ], + [ + "Volumic", + "PA", + "Volumic NYLON Ultra" + ], + [ + "Volumic", + "PA", + "Volumic NYLON Ultra (Performance)" + ] + ], + "GFN99_01": [ + [ + "Generic", + "PA", + "Tiertime Generic PA" + ] + ], + "GFN99_1": [ + [ + "Generic", + "PA", + "Prusa Generic PA" + ] + ], + "GFN99_2": [ + [ + "Generic", + "PA", + "Prusa Generic PA" + ] + ], + "GFN99_3": [ + [ + "Generic", + "PA", + "Prusa Generic PA" + ] + ], + "GFN99_4": [ + [ + "Generic", + "PA", + "Prusa Generic PA" + ] + ], + "GFOT001": [ + [ + "Overture", + "PLA", + "Overture PLA Pro" + ] + ], + "GFOT002": [ + [ + "Overture", + "PLA", + "Overture Silk PLA" + ] + ], + "GFOT003": [ + [ + "Overture", + "PLA", + "Overture Easy PLA" + ] + ], + "GFOT004": [ + [ + "Overture", + "PLA", + "Overture Rock PLA" + ] + ], + "GFOT005": [ + [ + "Overture", + "PLA", + "Overture Super PLA+" + ] + ], + "GFOT006": [ + [ + "Overture", + "PLA", + "Overture Air PLA" + ] + ], + "GFOT008": [ + [ + "Overture", + "TPU", + "Overture TPU" + ] + ], + "GFOT009": [ + [ + "Overture", + "ASA", + "Overture ASA" + ] + ], + "GFP95": [ + [ + "Generic", + "PP-GF", + "Tiertime Generic PP-GF" + ] + ], + "GFP95_01": [ + [ + "Generic", + "PP-GF", + "Tiertime Generic PP-GF" + ] + ], + "GFP96": [ + [ + "Generic", + "PP-CF", + "Tiertime Generic PP-CF" + ] + ], + "GFP96_01": [ + [ + "Generic", + "PP-CF", + "Tiertime Generic PP-CF" + ] + ], + "GFP97": [ + [ + "Generic", + "PP", + "Tiertime Generic PP" + ] + ], + "GFP97_01": [ + [ + "Generic", + "PP", + "Tiertime Generic PP" + ] + ], + "GFP98": [ + [ + "Generic", + "PE-CF", + "Tiertime Generic PE-CF" + ] + ], + "GFP98_01": [ + [ + "Generic", + "PE-CF", + "Tiertime Generic PE-CF" + ] + ], + "GFP99": [ + [ + "Generic", + "PE", + "Tiertime Generic PE" + ] + ], + "GFP99_01": [ + [ + "Generic", + "PE", + "Tiertime Generic PE" + ] + ], + "GFPA": [ + [ + "Anycubic", + "PA", + "Anycubic PA" + ] + ], + "GFPA6-CF": [ + [ + "Anycubic", + "PA6-CF", + "Anycubic PA6-CF" + ] + ], + "GFPAHT-CF": [ + [ + "Anycubic", + "PAHT-CF", + "Anycubic PAHT-CF" + ] + ], + "GFPC": [ + [ + "Anycubic", + "PC", + "Anycubic PC" + ] + ], + "GFPC-CF": [ + [ + "Anycubic", + "PC-CF", + "Anycubic PC-CF" + ] + ], + "GFPC-GF": [ + [ + "Anycubic", + "PC-GF", + "Anycubic PC-GF" + ] + ], + "GFPEBA": [ + [ + "Anycubic", + "PEBA", + "Anycubic PEBA" + ] + ], + "GFPET-CF": [ + [ + "Anycubic", + "PET-CF", + "Anycubic PET-CF" + ] + ], + "GFPETG": [ + [ + "Anycubic", + "PETG", + "Generic PETG" + ], + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GFPETG-1": [ + [ + "Generic", + "PETG", + "Peopoly Generic PETG" + ] + ], + "GFPETG-CF": [ + [ + "Anycubic", + "PETG-CF", + "Anycubic PETG-CF" + ] + ], + "GFPLA Glow": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Glow" + ] + ], + "GFPLA Translucent": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Translucent" + ] + ], + "GFPLA-CF": [ + [ + "Anycubic", + "PLA-CF", + "Anycubic PLA-CF" + ] + ], + "GFPM001": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA" + ] + ], + "GFPM002": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Matte" + ] + ], + "GFPM003": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Marble" + ] + ], + "GFPM004": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Silk" + ] + ], + "GFPM005": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Satin" + ] + ], + "GFPM006": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Translucent" + ] + ], + "GFPM007": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Galaxy" + ] + ], + "GFPM008": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Celestial" + ] + ], + "GFPM009": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Starlight" + ] + ], + "GFPM010": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Glow" + ] + ], + "GFPM011": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Luminous" + ] + ], + "GFPM012": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Metallic" + ] + ], + "GFPM013": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Neon" + ] + ], + "GFPM014": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA UV Shift" + ] + ], + "GFPM015": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Temp Shift" + ] + ], + "GFPM016": [ + [ + "Polymaker", + "PLA", + "Panchroma CoPE" + ] + ], + "GFPM017": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA" + ] + ], + "GFPM018": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA-GF" + ] + ], + "GFPM019": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Pro" + ] + ], + "GFPVA": [ + [ + "Anycubic", + "PVA", + "Anycubic PVA" + ] + ], + "GFR98": [ + [ + "Generic", + "PHA", + "Tiertime Generic PHA" + ] + ], + "GFR98_01": [ + [ + "Generic", + "PHA", + "Tiertime Generic PHA" + ] + ], + "GFR99": [ + [ + "Generic", + "EVA", + "Tiertime Generic EVA" + ] + ], + "GFR99_01": [ + [ + "Generic", + "EVA", + "Tiertime Generic EVA" + ] + ], + "GFRH01": [ + [ + "Generic", + "ABS", + "fdm_filament_abs" + ] + ], + "GFRH02": [ + [ + "Generic", + "ASA", + "fdm_filament_asa" + ] + ], + "GFRH03": [ + [ + "Generic", + "PETG", + "fdm_filament_petg" + ] + ], + "GFRH04": [ + [ + "Generic", + "PLA", + "fdm_filament_pla" + ] + ], + "GFRH05": [ + [ + "Generic", + "TPU", + "fdm_filament_tpu" + ] + ], + "GFRH06": [ + [ + "Generic", + "PC-CF", + "fdm_filament_pccf" + ] + ], + "GFS00": [ + [ + "Orca Arena", + "PLA", + "Arena Support W" + ] + ], + "GFS01": [ + [ + "Orca Arena", + "PA", + "Arena Support G" + ] + ], + "GFS04": [ + [ + "Tiertime", + "PVA", + "Tiertime PVA" + ], + [ + "WonderMaker", + "PVA", + "WonderMaker PVA" + ] + ], + "GFS04_01": [ + [ + "Tiertime", + "PVA", + "Tiertime PVA" + ] + ], + "GFS97": [ + [ + "Generic", + "BVOH", + "Tiertime Generic BVOH" + ] + ], + "GFS97_01": [ + [ + "Generic", + "BVOH", + "Tiertime Generic BVOH" + ] + ], + "GFS98": [ + [ + "Generic", + "HIPS", + "Tiertime Generic HIPS" + ], + [ + "Generic", + "PVB", + "fdm_filament_pvb" + ] + ], + "GFS98_01": [ + [ + "Generic", + "HIPS", + "Tiertime Generic HIPS" + ] + ], + "GFS99": [ + [ + "Generic", + "PVA", + "Anker Generic PVA" + ], + [ + "Generic", + "PVA", + "Anycubic Generic PVA" + ], + [ + "Generic", + "PVA", + "FLSun Generic PVA" + ], + [ + "Generic", + "PVA", + "Generic PVA" + ], + [ + "Generic", + "PVA", + "OrcaArena Generic PVA" + ], + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ], + [ + "Generic", + "PVA", + "Qidi Generic PVA" + ], + [ + "Generic", + "PVA", + "RatRig Generic PVA" + ], + [ + "Generic", + "PVA", + "SecKit Generic PVA" + ], + [ + "Generic", + "PVA", + "Tiertime Generic PVA" + ], + [ + "Generic", + "PVA", + "Vzbot Generic PVA" + ], + [ + "Volumic", + "PVA", + "Volumic PVA" + ], + [ + "Volumic", + "PVA", + "Volumic PVA-BVOH (Performance)" + ] + ], + "GFS99_01": [ + [ + "Generic", + "PVA", + "Tiertime Generic PVA" + ] + ], + "GFS99_1": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ] + ], + "GFS99_2": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ] + ], + "GFS99_3": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ] + ], + "GFS99_4": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ], + [ + "Generic", + "PVA", + "Prusa Generic PVA HF" + ] + ], + "GFS99_5": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA HF" + ] + ], + "GFS99_6": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA HF" + ] + ], + "GFSEP001": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Premium" + ] + ], + "GFSEP002": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Matte" + ] + ], + "GFSEP003": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Silk" + ] + ], + "GFSEP004": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Neon" + ] + ], + "GFSEP005": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA High Speed" + ] + ], + "GFSEP006": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA INGEO 850" + ] + ], + "GFSEP007": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA INGEO 870" + ] + ], + "GFSEP008": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Antibacterial" + ] + ], + "GFSEP009": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Transition" + ] + ], + "GFSEP010": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG" + ] + ], + "GFSEP011": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG UV Resistant" + ] + ], + "GFSEP012": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG Transition" + ] + ], + "GFSEP013": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Flex 93A" + ] + ], + "GFSEP014": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Flex D53" + ] + ], + "GFSEP015": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU D60 UV Resistant" + ] + ], + "GFSEP016": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Transition" + ] + ], + "GFSEP017": [ + [ + "Eolas Prints", + "ABS", + "Eolas Prints ABS" + ] + ], + "GFSEP018": [ + [ + "Eolas Prints", + "ASA", + "Eolas Prints ASA" + ] + ], + "GFSL99": [ + [ + "Generic", + "ABS", + "Peopoly Generic ABS" + ] + ], + "GFSNL02": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Matte" + ] + ], + "GFSNL03": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+" + ] + ], + "GFSNL04": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+ 2.0" + ] + ], + "GFSNL05": [ + [ + "SUNLU", + "PLA", + "SUNLU Silk PLA+" + ] + ], + "GFSNL06": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Marble" + ] + ], + "GFSNL07": [ + [ + "SUNLU", + "PLA", + "SUNLU Wood PLA" + ] + ], + "GFSNL08": [ + [ + "SUNLU", + "PETG", + "SUNLU PETG" + ] + ], + "GFT01": [ + [ + "Orca Arena", + "PET-CF", + "Arena PET-CF" + ], + [ + "Tiertime", + "PET-CF", + "Tiertime PET-CF" + ], + [ + "WonderMaker", + "PET-CF", + "WonderMaker PET-CF" + ] + ], + "GFT01_01": [ + [ + "Tiertime", + "PET-CF", + "Tiertime PET-CF" + ] + ], + "GFT02": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "GFT97": [ + [ + "Generic", + "PPS", + "Tiertime Generic PPS" + ] + ], + "GFT97_01": [ + [ + "Generic", + "PPS", + "Tiertime Generic PPS" + ] + ], + "GFT98": [ + [ + "Generic", + "PPS-CF", + "Tiertime Generic PPS-CF" + ] + ], + "GFT98_01": [ + [ + "Generic", + "PPS-CF", + "Tiertime Generic PPS-CF" + ] + ], + "GFTPU 95A": [ + [ + "Anycubic", + "TPU", + "Anycubic TPU 95A" + ] + ], + "GFTPU for ACE": [ + [ + "Anycubic", + "TPU", + "Anycubic TPU for ACE" + ] + ], + "GFU01": [ + [ + "Afinia", + "TPU", + "Afinia TPU" + ], + [ + "Orca Arena", + "TPU", + "Arena TPU 95A" + ], + [ + "Tiertime", + "TPU", + "Tiertime TPU 95A" + ], + [ + "WonderMaker", + "TPU", + "WonderMaker TPU 95A" + ] + ], + "GFU01_01": [ + [ + "Afinia", + "TPU", + "Afinia TPU" + ], + [ + "Tiertime", + "TPU", + "Tiertime TPU 95A" + ] + ], + "GFU99": [ + [ + "CoLiDo", + "TPU", + "CoLiDo Generic TPU" + ], + [ + "FlyingBear", + "TPU", + "FlyingBear Generic TPU" + ], + [ + "FlyingBear", + "TPU", + "FlyingBear TPU Basic" + ], + [ + "Generic", + "FLEX", + "fdm_filament_flex" + ], + [ + "Generic", + "TPU", + "Anker Generic TPU" + ], + [ + "Generic", + "TPU", + "Anycubic Generic TPU" + ], + [ + "Generic", + "TPU", + "Artillery Generic TPU" + ], + [ + "Generic", + "TPU", + "Creality Generic TPU" + ], + [ + "Generic", + "TPU", + "FLSun Generic TPU" + ], + [ + "Generic", + "TPU", + "FLSun S1 TPU" + ], + [ + "Generic", + "TPU", + "FLSun T1 TPU" + ], + [ + "Generic", + "TPU", + "Generic TPU" + ], + [ + "Generic", + "TPU", + "OrcaArena Generic TPU" + ], + [ + "Generic", + "TPU", + "Prusa Generic TPU" + ], + [ + "Generic", + "TPU", + "Qidi Generic TPU" + ], + [ + "Generic", + "TPU", + "RatRig Generic TPU" + ], + [ + "Generic", + "TPU", + "SecKit Generic TPU" + ], + [ + "Generic", + "TPU", + "Tiertime Generic TPU" + ], + [ + "Generic", + "TPU", + "TwoTrees Generic 95A TPU" + ], + [ + "Generic", + "TPU", + "Vzbot Generic TPU" + ], + [ + "InfiMech", + "TPU", + "InfiMech Generic TPU" + ], + [ + "InfiMech", + "TPU", + "InfiMech TPU Basic" + ], + [ + "Volumic", + "TPU", + "Volumic FLEX93 Ultra" + ], + [ + "Volumic", + "TPU", + "Volumic FLEX93 Ultra (Performance)" + ], + [ + "Yumi", + "PLA", + "YUMI PLA Bowden" + ], + [ + "Yumi", + "PLA", + "YUMI PLA Direct Drive" + ] + ], + "GFU99_01": [ + [ + "Generic", + "TPU", + "Tiertime Generic TPU" + ] + ], + "GFU99_2": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "GFU99_3": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU HF" + ] + ], + "GPAB00": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], + "GPCB00": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "GPETB00": [ + [ + "Generic", + "PET", + "Generic PET" + ] + ], + "GPETGB00": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "GPLAB00": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "Generic ABS @E3NG v1.2S": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "Generic ABS @MK4S": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S 0.6": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S 0.8": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S HF0.4": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S HF0.5": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S HF0.6": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ABS @MK4S HF0.8": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Generic ASA @E3NG v1.2S": [ + [ + "Generic", + "ASA", + "Generic ASA" + ] + ], + "Generic FLEX @MK4S": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Generic FLEX @MK4S 0.6": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Generic FLEX @MK4S 0.8": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Generic PCCF @E3NG v1.2S": [ + [ + "Generic", + "PC-CF", + "Generic PCCF" + ] + ], + "Generic PETG @E3NG v1.2S": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "Generic PETG @MK4S": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S 0.6": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S 0.8": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S HF0.4": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S HF0.5": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S HF0.6": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PETG @MK4S HF0.8": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Generic PLA @E3NG v1.2S": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "Generic PLA @MK4S": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S 0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S 0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S HF0.4": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S HF0.5": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S HF0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA @MK4S HF0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Generic PLA Silk @MK4S": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Generic PLA Silk @MK4S 0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Generic PLA Silk @MK4S 0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Generic TPU @E3NG v1.2S": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], + "IQM1": [ + [ + "iQ Materials", + "PACF Pro", + "Fiberthree PACF Pro P1" + ] + ], + "IQM1011": [ + [ + "iQ Materials", + "VXL90 Xioneer", + "VXL90 TiQ2 P2" + ] + ], + "IQM2": [ + [ + "iQ Materials", + "ABS Material4Print Natur", + "Material4Print ABS Natur P1" + ] + ], + "IQM3": [ + [ + "iQ Materials", + "PETG Polymax", + "Polymaker PETG Polymax black P1" + ] + ], + "IQM7": [ + [ + "iQ Materials", + "PACF Pro", + "Fiberthree PACF Pro P2" + ] + ], + "LHF_abs": [ + [ + "LH Stinger", + "ASA", + "LHS ABS" + ] + ], + "LHF_asa": [ + [ + "LH Stinger", + "ASA", + "LHS ASA" + ] + ], + "LHF_ftpuf": [ + [ + "LH Stinger", + "TPU", + "LHS TPU Foamy 78A" + ] + ], + "LHF_pccf": [ + [ + "LH Stinger", + "PC", + "LHS PC CF" + ] + ], + "LHF_pctg": [ + [ + "LH Stinger", + "PCTG", + "LHS PCTG" + ] + ], + "LHF_petg": [ + [ + "LH Stinger", + "PETG", + "LHS PETG" + ] + ], + "LHF_pla": [ + [ + "LH Stinger", + "PLA", + "LHS PLA" + ] + ], + "LHF_ptpu_pl": [ + [ + "LH Stinger", + "TPU", + "LHS TPU" + ] + ], + "NIT01": [ + [ + "NIT", + "ABS", + "NIT ABS" + ] + ], + "NIT02": [ + [ + "NIT", + "PLA", + "NIT PLA" + ] + ], + "NIT03": [ + [ + "NIT", + "PETG", + "NIT PETG" + ] + ], + "OEABSB00": [ + [ + "Elegoo", + "ABS", + "Elegoo ABS" + ] + ], + "OEASAB00": [ + [ + "Elegoo", + "ASA", + "Elegoo ASA" + ] + ], + "OEPAHTB0": [ + [ + "Elegoo", + "PA", + "Elegoo PAHT" + ] + ], + "OEPCB00": [ + [ + "Elegoo", + "PC", + "Elegoo PC" + ] + ], + "OEPETGB0": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG" + ] + ], + "OEPLAB00": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA" + ] + ], + "OETPUB00": [ + [ + "Elegoo", + "TPU", + "Elegoo TPU" + ] + ], + "OF09vOcG": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Galaxy" + ] + ], + "OF0Ee2jQ": [ + [ + "Snapmaker", + "TPU", + "Snapmaker Dual TPU High-Flow" + ] + ], + "OF0M6QAQ": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Galaxy" + ] + ], + "OF0SyJhk": [ + [ + "FusRock", + "PA6-CF", + "Flashforge PA6-CF" + ] + ], + "OF0TODnN": [ + [ + "Generic", + "PET-CF", + "Generic PET-CF" + ] + ], + "OF0TjJ0G": [ + [ + "QIDI", + "ASA-AERO", + "Qidi ASA-Aero" + ] + ], + "OF0UbONm": [ + [ + "Generic", + "S-PAHT", + "FusRock S-PAHT" + ] + ], + "OF0VEdLB": [ + [ + "Cubicon", + "PETG", + "Cubicon PETG" + ] + ], + "OF0Y5MLd": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "OF0wk0Pk": [ + [ + "Generic", + "PLA", + "Flashforge PLA Pro" + ] + ], + "OF0z1XpN": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "OF102WKM": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG PRO" + ] + ], + "OF17cONC": [ + [ + "Polymaker", + "PLA", + "PolyTerra Dual PLA" + ] + ], + "OF1Zypyy": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "OF22AxCm": [ + [ + "Generic", + "PETG", + "Polymaker PETG" + ] + ], + "OF2HQqTC": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA+" + ] + ], + "OF2Psxdc": [ + [ + "Co Print", + "TPU", + "CoPrint Generic TPU" + ] + ], + "OF2UFmOo": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA" + ] + ], + "OF2tvNYA": [ + [ + "Generic", + "PLA", + "Sovol Zero PLA Silk" + ] + ], + "OF38Hyk4": [ + [ + "Generic", + "PETG", + "Flashforge PETG Pro" + ] + ], + "OF3GKs2i": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Matte" + ] + ], + "OF3XeEuV": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "OF3YOOOs": [ + [ + "Generic", + "PETG-CF", + "Chuanying Generic PETG-CF10" + ] + ], + "OF3arl18": [ + [ + "Elegoo", + "PETG", + "Elegoo Rapid PETG" + ] + ], + "OF41QVDH": [ + [ + "Generic", + "PLA", + "Flashforge Generic PLA-Silk" + ] + ], + "OF43idK2": [ + [ + "Generic", + "PLA", + "Creality Generic PLA Matte" + ] + ], + "OF48G7He": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough 0.8 nozzle" + ] + ], + "OF4RKeng": [ + [ + "Generic", + "ASA", + "Flashforge Generic ASA" + ] + ], + "OF4fgpse": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Marble" + ] + ], + "OF4gzzE4": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "OF4jILJA": [ + [ + "FlyingBear", + "PC", + "FlyingBear PC" + ] + ], + "OF4m9A5w": [ + [ + "Generic", + "HIPS", + "Flashforge Generic HIPS" + ] + ], + "OF50NUZI": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA Basic" + ] + ], + "OF57IbZT": [ + [ + "Artillery", + "PLA Basic", + "Artillery PLA Basic" + ] + ], + "OF5Bmdtg": [ + [ + "Generic", + "ABS", + "Sovol SV06 Plus ACE ABS" + ] + ], + "OF5J2axC": [ + [ + "Generic", + "PLA", + "Sovol Zero PLA Basic" + ] + ], + "OF5T1Y9R": [ + [ + "Generic", + "ABS", + "Flashforge ABS Basic" + ] + ], + "OF5UUaUM": [ + [ + "Generic", + "PLA", + "Qidi Generic PLA High Speed" + ] + ], + "OF5Ugv12": [ + [ + "Other", + "PLA", + "Other PLA" + ] + ], + "OF5kwfZu": [ + [ + "FusRock", + "PA-CF", + "FusRock Generic NexPA-CF25" + ] + ], + "OF60Lmeq": [ + [ + "Generic", + "PLA", + "Flashforge PLA Matte" + ] + ], + "OF6EOy1A": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG" + ] + ], + "OF6FM5F7": [ + [ + "Generic", + "PAHT", + "FusRock PAHT" + ] + ], + "OF6Mxzsg": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], + "OF6SEkeJ": [ + [ + "Generic", + "PET-CF", + "FusRock PET-CF" + ] + ], + "OF6XIeUW": [ + [ + "Generic", + "PLA-CF", + "Generic PLA-CF10" + ] + ], + "OF6XuVQE": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS" + ] + ], + "OF70DKqH": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPE" + ] + ], + "OF79FFkO": [ + [ + "Elegoo", + "PC", + "Elegoo PC-FR" + ] + ], + "OF7M9vy4": [ + [ + "Generic", + "PLA", + "RatRig BigNozzle PLA" + ] + ], + "OF7cv1Ub": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "OF7f0eUZ": [ + [ + "Volumic", + "ASA", + "Volumic ASA Ultra" + ] + ], + "OF7tgL9c": [ + [ + "Generic", + "ASA", + "Chuanying Generic ASA" + ] + ], + "OF8HQmJD": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Sparkle" + ] + ], + "OF8WvPVL": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido 0.8 nozzle" + ] + ], + "OF9RZyBz": [ + [ + "Polymaker", + "PA", + "Polymaker Generic S1" + ] + ], + "OF9qvJxV": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Translucent2" + ] + ], + "OF9sr3Vn": [ + [ + "Generic", + "PLA", + "Flashforge PLA Sparkle" + ] + ], + "OF9tjFbj": [ + [ + "Peopoly", + "PLA", + "Peopoly Lancer PLA-C" + ] + ], + "OF9vnvM8": [ + [ + "Artillery", + "PETG-CF", + "Artillery PETG-CF" + ] + ], + "OFAEqlWa": [ + [ + "Generic", + "PLA", + "Flashforge Generic PLA-SILK" + ] + ], + "OFAGqTQG": [ + [ + "Volumic", + "PP", + "Volumic PP Ultra" + ] + ], + "OFAGrVjP": [ + [ + "Generic", + "PLA", + "Flashforge PLA Silk" + ] + ], + "OFAHagT9": [ + [ + "Elegoo", + "PLA", + "Elegoo Rapid PLA+" + ] + ], + "OFAK2XjZ": [ + [ + "Other", + "ABS", + "Other ABS" + ] + ], + "OFAUDGEQ": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "OFAUX5fB": [ + [ + "Generic", + "PETG", + "C1 Generic High Flow PETG" + ] + ], + "OFAbsMuV": [ + [ + "Snapmaker", + "TPU", + "Snapmaker Dual TPE" + ] + ], + "OFAdAYYk": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "OFAdZFD1": [ + [ + "FusRock", + "PET-GF", + "FusRock Generic PET-GF" + ] + ], + "OFAiqi5v": [ + [ + "Elegoo", + "ASA", + "Elegoo ASA-CF" + ] + ], + "OFAnyzjN": [ + [ + "HATCHBOX", + "PETG", + "HATCHBOX PETG" + ] + ], + "OFAtydxE": [ + [ + "Generic", + "S-Multi", + "FusRock S-Multi" + ] + ], + "OFBGxHgT": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA" + ] + ], + "OFBRSZom": [ + [ + "Volumic", + "PPS-CF", + "PPS Carbone (Performance)" + ] + ], + "OFBvxnjM": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-GF" + ] + ], + "OFC2FSsV": [ + [ + "Overture", + "PLA", + "Overture PLA" + ] + ], + "OFC5CCeo": [ + [ + "Generic", + "PETG-CF", + "Flashforge Generic PETG-CF" + ] + ], + "OFCJaXZS": [ + [ + "Generic", + "PPS", + "Flashforge PPS" + ] + ], + "OFCKK3u9": [ + [ + "FlyingBear", + "PA-CF", + "FlyingBear PA-CF" + ] + ], + "OFCgpxn2": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS HF" + ] + ], + "OFChH9xu": [ + [ + "Snapmaker", + "TPU", + "Snapmaker J1 TPE" + ] + ], + "OFD5e0sH": [ + [ + "Elegoo", + "PLA", + "Elegoo Rapid PLA+" + ] + ], + "OFDCk0cz": [ + [ + "Generic", + "PETG-CF", + "Generic PETG-CF" + ] + ], + "OFDMWB6t": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA+" + ] + ], + "OFDNiRTx": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA+" + ] + ], + "OFDkABjZ": [ + [ + "Generic", + "TPU-90A", + "Generic TPU-90A" + ] + ], + "OFDramZ2": [ + [ + "Co Print", + "PETG", + "CoPrint Generic PETG" + ] + ], + "OFE22Uba": [ + [ + "Generic", + "TPU-90A", + "Flashforge TPU-90A" + ] + ], + "OFEYKrjb": [ + [ + "Artillery", + "PETG", + "Artillery PETG" + ] + ], + "OFEdyZqS": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Luminous" + ] + ], + "OFFIL5pD": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "OFFenwbU": [ + [ + "Generic", + "PLA", + "FLSun S1 PLA Silk" + ] + ], + "OFFmJ8aR": [ + [ + "Other", + "PLA", + "Other PLA Hyper" + ] + ], + "OFFrbsvQ": [ + [ + "Other", + "TPU", + "Other TPU" + ] + ], + "OFG8vHw8": [ + [ + "Generic", + "ASA", + "Qidi Generic ASA" + ] + ], + "OFGFZhWu": [ + [ + "Generic", + "PETG", + "Sovol SV06 ACE PETG" + ] + ], + "OFGb4hPY": [ + [ + "Anycubic", + "PEBA", + "Anycubic PEBA 95A" + ] + ], + "OFGfdP6J": [ + [ + "FusRock", + "S-Multi", + "FusRock Generic S-Multi" + ], + [ + "Generic", + "PET-CF", + "FusRock Generic S-Multi" + ] + ], + "OFHBTqyD": [ + [ + "Generic", + "PLA", + "Flashforge PLA Basic" + ] + ], + "OFHDaMut": [ + [ + "Volumic", + "PA6-CF", + "PA6 CF20 (Performance)" + ] + ], + "OFHL32M0": [ + [ + "Anycubic", + "TPU", + "Anycubic TPU" + ], + [ + "Generic", + "TPU", + "Anycubic TPU" + ] + ], + "OFHtQDC9": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Basic" + ] + ], + "OFICPchn": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Basic" + ] + ], + "OFIGHU7W": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-CF" + ] + ], + "OFIl3ar9": [ + [ + "Generic", + "PETG", + "Sovol SV08 PETG" + ] + ], + "OFIzguhB": [ + [ + "Volumic", + "UNIV", + "Volumic UNIVERSAL Ultra" + ] + ], + "OFJIImD5": [ + [ + "Elegoo", + "PETG", + "Elegoo PET-CF" + ] + ], + "OFJfx0Cl": [ + [ + "Generic", + "PE-CF", + "Generic PE-CF" + ] + ], + "OFJsqMzx": [ + [ + "Generic", + "PLA", + "Generic PLA Matte" + ] + ], + "OFK39W9u": [ + [ + "Generic", + "PETG-CF", + "Flashforge Generic PETG-CF10" + ] + ], + "OFK820gS": [ + [ + "QIDI", + "ASA", + "QIDI ASA" + ] + ], + "OFKDnrjL": [ + [ + "Artillery", + "PLA Matte", + "Artillery PLA Matte" + ] + ], + "OFKH15Hd": [ + [ + "Generic", + "ABS", + "Sovol SV08 ABS" + ] + ], + "OFKWVi10": [ + [ + "Generic", + "PLA-CF", + "Flashforge Generic PLA-CF10" + ] + ], + "OFKZH00L": [ + [ + "FusRock", + "PET-CF", + "FusRock Generic PET-CF" + ], + [ + "Generic", + "PET-CF", + "FusRock Generic PET-CF" + ] + ], + "OFKhtNBx": [ + [ + "Snapmaker", + "TPU", + "Snapmaker J1 TPU High-Flow" + ] + ], + "OFKjlAbC": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "OFKzh9lx": [ + [ + "InfiMech", + "PLA", + "InfiMech PLA" + ] + ], + "OFL4BLAC": [ + [ + "iQ Materials", + "HPP4GF25", + "Grauts HPP4GF25 P1" + ] + ], + "OFL4KniM": [ + [ + "Elegoo", + "TPU", + "Elegoo Rapid TPU 95A" + ] + ], + "OFL7U2MV": [ + [ + "RatRig", + "ABS", + "RatRig PunkFil ABS" + ] + ], + "OFL7vEML": [ + [ + "Generic", + "PC", + "FlashForge PC" + ] + ], + "OFLSBS99": [ + [ + "Generic", + "SBS", + "fdm_filament_sbs" + ] + ], + "OFLeFaUO": [ + [ + "Generic", + "PVA", + "Flashforge Generic PVA" + ] + ], + "OFLhOFQk": [ + [ + "Volumic", + "ASA", + "Volumic ASA Ultra (Performance)" + ] + ], + "OFLiTjQK": [ + [ + "Other", + "PA-CF", + "Other PA-CF" + ] + ], + "OFLriDvE": [ + [ + "Generic", + "PLA", + "Creality Generic PLA High Speed" + ] + ], + "OFLxO2Oc": [ + [ + "Generic", + "PET", + "FusRock PET" + ] + ], + "OFM3PeVe": [ + [ + "FusRock", + "ASA-CF", + "Flashforge ASA-CF" + ], + [ + "Generic", + "ASA-CF", + "Flashforge ASA-CF" + ] + ], + "OFMCMXSG": [ + [ + "Generic", + "PP", + "Generic PP-GF" + ] + ], + "OFMHTnPP": [ + [ + "FusRock", + "PA-CF", + "Flashforge PA12-CF" + ] + ], + "OFMQJToc": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-GF" + ] + ], + "OFN0X7oN": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "OFN0pBpo": [ + [ + "Generic", + "TPU", + "Qidi Generic TPU 95A" + ] + ], + "OFNQHqAV": [ + [ + "Cubicon", + "ABS", + "Cubicon ABSk" + ] + ], + "OFNRgSch": [ + [ + "Artillery", + "PC", + "Artillery PC" + ] + ], + "OFNX5uRT": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "OFNbajj9": [ + [ + "Generic", + "ASA", + "Creality Generic ASA-CF" + ] + ], + "OFNvrbnf": [ + [ + "Co Print", + "ABS", + "CoPrint Generic ABS" + ] + ], + "OFNz8rrn": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA Hyper" + ] + ], + "OFO3IOWM": [ + [ + "Volumic", + "PETG-ESD", + "PETG ESD (Performance)" + ] + ], + "OFO5R9KJ": [ + [ + "Generic", + "TPU", + "Sovol Zero TPU" + ] + ], + "OFOJUJAS": [ + [ + "Cubicon", + "PA", + "Cubicon PA-CF" + ] + ], + "OFOSzSuh": [ + [ + "Generic", + "PA-CF", + "Flashforge PA-CF" + ] + ], + "OFOW9K96": [ + [ + "QIDI", + "TPU", + "Qidi TPU 95A-HF" + ] + ], + "OFOkTA0C": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG Translucent" + ] + ], + "OFOp3Oef": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "OFOysPuE": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "OFP4poIv": [ + [ + "Generic", + "PLA", + "Sovol Zero PLA Silk HS Nozzle" + ] + ], + "OFPGelMX": [ + [ + "Volumic", + "PP", + "Volumic PP Ultra (Performance)" + ] + ], + "OFPJJxkF": [ + [ + "FusRock", + "PET-CF", + "Flashforge PET-CF" + ], + [ + "Generic", + "PET-CF", + "Flashforge PET-CF" + ] + ], + "OFPJrlC3": [ + [ + "Generic", + "PLA-CF", + "Flashforge PLA-CF" + ] + ], + "OFPeGtB1": [ + [ + "Volumic", + "UNIV", + "Volumic UNIVERSAL Ultra (Performance)" + ] + ], + "OFPokkKe": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "OFPwi9X0": [ + [ + "HATCHBOX", + "ABS", + "HATCHBOX ABS" + ] + ], + "OFQ5xAKf": [ + [ + "Generic", + "PVA", + "Chuanying Generic PVA" + ] + ], + "OFQ9dI8j": [ + [ + "Generic", + "PC", + "Prusa Generic PC HF" + ] + ], + "OFQCAYAt": [ + [ + "FusRock", + "PPA-CF", + "Flashforge PPA-CF" + ], + [ + "Generic", + "PPA-CF", + "Flashforge PPA-CF" + ] + ], + "OFQZINrX": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF10" + ] + ], + "OFQhLoxN": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Wood" + ] + ], + "OFQkWxJy": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Matte" + ] + ], + "OFR8dTVW": [ + [ + "Generic", + "PLA", + "FLSun S1 PLA High Speed" + ] + ], + "OFRNU58t": [ + [ + "Generic", + "TPU", + "Flashforge TPU 95A" + ] + ], + "OFRR8LUh": [ + [ + "Generic", + "ASA", + "Generic ASA" + ] + ], + "OFRS2Ggt": [ + [ + "Generic", + "PP-CF", + "Generic PP-CF" + ] + ], + "OFRgDMDJ": [ + [ + "Generic", + "PETG", + "Flashforge PETG Transparent" + ] + ], + "OFS1ekCg": [ + [ + "Generic", + "PETG", + "RatRig BigNozzle PCTG" + ] + ], + "OFS3HrR1": [ + [ + "Other", + "PLA", + "Other PLA" + ] + ], + "OFSCm6pJ": [ + [ + "Elegoo", + "PETG", + "Elegoo PET-CF" + ] + ], + "OFSSuKRr": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "OFSdF3B1": [ + [ + "Generic", + "PAHT-CF", + "FusRock PAHT-CF" + ] + ], + "OFSkBwxf": [ + [ + "Generic", + "ASA", + "RatRig BigNozzle ASA" + ] + ], + "OFSoZBK2": [ + [ + "Generic", + "PLA", + "Sovol SV06 Plus ACE PLA" + ] + ], + "OFSpTWdv": [ + [ + "Other", + "PA-CF", + "Other PA-CF" + ] + ], + "OFT3TqB6": [ + [ + "Elas", + "ASA", + "Elas ASA" + ] + ], + "OFTa6gPH": [ + [ + "Generic", + "PLA", + "Flashforge PLA Pro" + ] + ], + "OFTbdJyT": [ + [ + "Other", + "PC", + "Other PC" + ] + ], + "OFTbsWVg": [ + [ + "Artillery", + "TPU", + "Artillery TPU" + ] + ], + "OFToBodi": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "OFTsGps3": [ + [ + "InfiMech", + "PC", + "InfiMech PC" + ] + ], + "OFTszIHE": [ + [ + "Generic", + "PLA", + "Creality Generic PLA Silk" + ] + ], + "OFUJw3Lx": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "OFUYjPc4": [ + [ + "Generic", + "PLA", + "Dremel Generic PLA" + ] + ], + "OFUkpobY": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "OFUqBrgf": [ + [ + "Generic", + "TPU", + "Chuanying Generic TPU" + ] + ], + "OFV1szQh": [ + [ + "Peopoly", + "PETG", + "Peopoly Lancer PETG-C" + ] + ], + "OFV4hD1o": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "OFVBNoov": [ + [ + "InfiMech", + "ABS", + "InfiMech ABS" + ] + ], + "OFVJXE4n": [ + [ + "Other", + "ABS", + "Other ABS" + ] + ], + "OFVLuVmD": [ + [ + "Elegoo", + "PETG", + "Elegoo Rapid PETG" + ] + ], + "OFVhG0yM": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], + "OFW8UdlP": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], + "OFWkCAdc": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough 0.2 nozzle" + ] + ], + "OFWs8KIZ": [ + [ + "Generic", + "ABS-CF", + "Flashforge ABS-CF" + ] + ], + "OFWv6JYn": [ + [ + "Generic", + "PLA", + "Flashforge PLA Metal" + ] + ], + "OFWyCd0Y": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "OFXA8vy9": [ + [ + "Artillery", + "PLA Basic+", + "Artillery PLA Basic+" + ] + ], + "OFXNO5Of": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido 0.2 nozzle" + ] + ], + "OFXQX0tr": [ + [ + "RatRig", + "PETG-CF10", + "RatRig PunkFil PETG CF" + ] + ], + "OFXcfTEb": [ + [ + "Generic", + "PETG", + "Tinmorry PETG-ECO" + ] + ], + "OFXfgh61": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "OFXkwkn6": [ + [ + "QIDI", + "UltraPA", + "QIDI PA-Ultra" + ] + ], + "OFXmQgno": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Marble" + ] + ], + "OFXv4FUi": [ + [ + "Generic", + "PLA", + "Flashforge PLA Galaxy" + ] + ], + "OFY1U4uM": [ + [ + "Generic", + "TPU", + "Sovol SV08 TPU" + ] + ], + "OFYG2Gfy": [ + [ + "Afinia", + "ABS", + "Afinia ABS+" + ] + ], + "OFYH00jV": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" + ] + ], + "OFYICbI4": [ + [ + "FusRock", + "PAHT-CF", + "FusRock Generic PAHT-CF" + ], + [ + "Generic", + "PAHT-CF", + "FusRock Generic PAHT-CF" + ] + ], + "OFYRS7GZ": [ + [ + "Generic", + "TPU-95A", + "Generic TPU-95A" + ] + ], + "OFYZs7dN": [ + [ + "Generic", + "PLA", + "Flashforge Generic HS PLA" + ] + ], + "OFYehFGr": [ + [ + "Generic", + "TPU", + "RatRig BigNozzle TPU" + ] + ], + "OFYfZgxU": [ + [ + "FlyingBear", + "TPU", + "FlyingBear TPU" + ] + ], + "OFZAkPHG": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "OFZQFvHQ": [ + [ + "Generic", + "PETG", + "Flashforge HS PETG" + ] + ], + "OFZcrV9c": [ + [ + "FusRock", + "PPS-CF", + "Flashforge PPS-CF" + ], + [ + "Generic", + "PPS-CF", + "Flashforge PPS-CF" + ] + ], + "OFZhdVnP": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Basic" + ] + ], + "OFZjZ1k7": [ + [ + "Generic", + "PLA", + "Creality HF Generic PLA" + ] + ], + "OFa5cFqE": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "OFa6L3Of": [ + [ + "QIDI", + "PC-ABS-FR", + "Qidi PC-ABS-FR" + ] + ], + "OFaKIoH2": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Sparkle" + ] + ], + "OFaKZ6JI": [ + [ + "Generic", + "PETG", + "Generic PETG Basic" + ] + ], + "OFaxQnfz": [ + [ + "Cubicon", + "PC", + "Cubicon PC" + ] + ], + "OFb3UzMZ": [ + [ + "InfiMech", + "PA-CF", + "InfiMech PA-CF" + ] + ], + "OFbK5wve": [ + [ + "Generic", + "TPU", + "Prusa Generic TPU HF" + ] + ], + "OFbS9rjH": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "OFbYP6Wb": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Marble" + ] + ], + "OFbgt3u3": [ + [ + "Elas", + "PLA", + "Elas PLA Basic" + ] + ], + "OFc2SnEp": [ + [ + "Artillery", + "PVA", + "Artillery PVA" + ] + ], + "OFcZZWnB": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS-A100" + ] + ], + "OFceJcLf": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA" + ] + ], + "OFcqs5g7": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Translucent2" + ] + ], + "OFcsHCy4": [ + [ + "Generic", + "PLA", + "Sovol SV08 PLA" + ] + ], + "OFcy60o4": [ + [ + "Generic", + "ASA", + "Flashforge ASA Basic" + ] + ], + "OFdLGn0R": [ + [ + "Generic", + "PLA", + "Creality Generic PLA Wood" + ] + ], + "OFdNORGt": [ + [ + "Generic", + "ASA-GF", + "Flashforge ASA-GF" + ] + ], + "OFdSGkUG": [ + [ + "Anycubic", + "PETG", + "Anycubic PETG" + ], + [ + "Generic", + "PETG", + "Anycubic PETG" + ] + ], + "OFdhVJql": [ + [ + "Generic", + "PLA", + "Flashforge PLA Buint Ti" + ] + ], + "OFeFRwST": [ + [ + "Generic", + "PVA", + "Flashforge PVA" + ] + ], + "OFePPmng": [ + [ + "Snapmaker", + "ABS", + "Snapmaker J1 ABS Benchy" + ] + ], + "OFeWMAGH": [ + [ + "Generic", + "PLA", + "Flashforge HS PLA Burnt Ti" + ] + ], + "OFefhSuj": [ + [ + "InfiMech", + "PLA", + "InfiMech PLA Hyper" + ] + ], + "OFenGPBR": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG Translucent" + ] + ], + "OFeybQvK": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido 0.2 nozzle" + ] + ], + "OFf0JIqs": [ + [ + "Eryone", + "PP", + "Eryone PP" + ] + ], + "OFf2b9wu": [ + [ + "Anycubic", + "ABS", + "Anycubic ABS" + ], + [ + "Generic", + "ABS", + "Anycubic ABS" + ] + ], + "OFfB1QKi": [ + [ + "Generic", + "PETG", + "Generic PETG HF" + ] + ], + "OFfJoIgg": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "OFfdxQok": [ + [ + "Generic", + "PLA", + "Generic PLA+" + ] + ], + "OFfiN1Lw": [ + [ + "Generic", + "PLA", + "Chuanying Generic HS PLA" + ] + ], + "OFfkPhrJ": [ + [ + "Generic", + "PLA", + "Creality HF Generic Speed PLA" + ] + ], + "OFfoA8kJ": [ + [ + "CoLiDo", + "PLA", + "CoLiDo PLA" + ] + ], + "OFftQOek": [ + [ + "Generic", + "PLA", + "Flashforge PLA Matte" + ] + ], + "OFg4N6ZL": [ + [ + "FlyingBear", + "PETG", + "FlyingBear PETG" + ] + ], + "OFgJX0Fc": [ + [ + "Generic", + "PPS", + "FlashForge PPS" + ] + ], + "OFgK2Xvv": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA" + ], + [ + "Generic", + "PLA", + "Anycubic PLA" + ] + ], + "OFgMGSpF": [ + [ + "Generic", + "PETG", + "Sovol SV06 Plus ACE PETG" + ] + ], + "OFgNzLVh": [ + [ + "Generic", + "ABS", + "Sovol Zero ABS" + ] + ], + "OFgSK1hL": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA High Speed" + ], + [ + "Generic", + "PLA", + "Anycubic PLA High Speed" + ] + ], + "OFglpvEE": [ + [ + "Generic", + "TPU", + "Sovol SV06 ACE TPU" + ] + ], + "OFgrGfPy": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA+" + ], + [ + "Generic", + "PLA", + "Anycubic PLA+" + ] + ], + "OFgtZjeX": [ + [ + "Snapmaker", + "ABS", + "Snapmaker ABS Benchy" + ] + ], + "OFh5GUhZ": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Wood" + ] + ], + "OFhKNHC8": [ + [ + "Generic", + "PETG", + "Generic PETG PRO" + ] + ], + "OFhzHd2Y": [ + [ + "Generic", + "HIPS", + "Flashforge HIPS" + ] + ], + "OFi1ocNv": [ + [ + "Generic", + "PA", + "Flashforge PA" + ] + ], + "OFiJYDPC": [ + [ + "HATCHBOX", + "PLA", + "HATCHBOX PLA" + ] + ], + "OFic2uNr": [ + [ + "Generic", + "PLA", + "Sovol SV06 ACE PLA" + ] + ], + "OFicxmSa": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA HF" + ] + ], + "OFidJLn8": [ + [ + "Polymaker", + "ABS", + "PolyLite ABS" + ] + ], + "OFiyGNbI": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-CF" + ] + ], + "OFjFPhUC": [ + [ + "Generic", + "PLA", + "Prusament rPLA" + ] + ], + "OFjZw7k1": [ + [ + "Polymaker", + "PLA", + "PolyTerra J1 PLA" + ] + ], + "OFjdTQd6": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Silk" + ], + [ + "Generic", + "PLA", + "Anycubic PLA Silk" + ] + ], + "OFjepy6j": [ + [ + "FusRock", + "S-PAHT", + "FusRock Generic S-PAHT" + ], + [ + "Generic", + "PA-CF", + "FusRock Generic S-PAHT" + ] + ], + "OFjj9Yiz": [ + [ + "Generic", + "PETG", + "RatRig BigNozzle PETG" + ] + ], + "OFjohFkg": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "OFjqPjjl": [ + [ + "Generic", + "PET", + "Generic PET" + ] + ], + "OFjurQ3I": [ + [ + "Generic", + "PETG", + "Sovol Zero PETG" + ] + ], + "OFk388hR": [ + [ + "Generic", + "PA6-CF", + "Generic PA6-CF" + ] + ], + "OFk6T5YH": [ + [ + "Generic", + "PETG", + "Sovol Zero PETG HS Nozzle" + ] + ], + "OFkaDtKx": [ + [ + "FusRock", + "PA-CF", + "Flashforge PA66-CF" + ] + ], + "OFkeeluv": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA HF" + ] + ], + "OFkfK62J": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Silk" + ] + ], + "OFklg4aM": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA PRO" + ] + ], + "OFkoT6jl": [ + [ + "Generic", + "PLA", + "Prusament PLA" + ] + ], + "OFlN56xW": [ + [ + "Generic", + "PLA", + "Chuanying Generic PLA-Silk" + ] + ], + "OFlNKZLP": [ + [ + "Generic", + "PLA", + "Flashforge PLA Metal" + ] + ], + "OFlbn4FY": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Matte" + ] + ], + "OFlxnxDx": [ + [ + "Generic", + "SBS", + "Tiertime Generic SBS" + ] + ], + "OFlzQ0IS": [ + [ + "Peopoly", + "PET-CF", + "Peopoly Lancer PET-CF" + ] + ], + "OFm1VZed": [ + [ + "Generic", + "PLA-CF", + "Flashforge Generic PLA-CF" + ] + ], + "OFmF1xL9": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "OFmKNi3f": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "OFmOWC74": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG PRO" + ] + ], + "OFmcJsqt": [ + [ + "InfiMech", + "TPU", + "InfiMech TPU" + ] + ], + "OFmduKVr": [ + [ + "Generic", + "PPS-CF", + "FlashForge PPS-CF" + ] + ], + "OFmeQjRP": [ + [ + "Elegoo", + "TPU", + "Elegoo Rapid TPU 95A" + ] + ], + "OFmgesco": [ + [ + "Generic", + "TPU", + "Flashforge TPU 65D" + ] + ], + "OFnLnZQo": [ + [ + "Cubicon", + "PC", + "Cubicon PC" + ] + ], + "OFnMW5jr": [ + [ + "FlyingBear", + "ABS", + "FlyingBear ABS" + ] + ], + "OFnRTkEq": [ + [ + "RatRig", + "PETG", + "RatRig PunkFil PETG" + ] + ], + "OFnY9ovF": [ + [ + "Artillery", + "PA-CF", + "Artillery PA-CF" + ] + ], + "OFnj7bPm": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido 0.6 nozzle" + ] + ], + "OFnsWQTp": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "OFnyirh9": [ + [ + "Artillery", + "PLA Silk", + "Artillery PLA Silk" + ] + ], + "OFo4VB3w": [ + [ + "Generic", + "ABS-CF", + "Generic ABS-CF" + ] + ], + "OFo9EwvK": [ + [ + "Generic", + "PETG-CF", + "Generic PETG-CF10" + ] + ], + "OFoAaHcF": [ + [ + "FusRock", + "PAHT-GF", + "FusRock Generic PAHT-GF" + ] + ], + "OFoJUGj6": [ + [ + "Generic", + "PLA", + "Flashforge HS PLA" + ] + ], + "OFoimrpo": [ + [ + "Generic", + "PETG-CF", + "Flashforge PETG-CF" + ] + ], + "OFp8lkYD": [ + [ + "FusRock", + "PPA-GF", + "Flashforge PPA-GF" + ] + ], + "OFp90N8a": [ + [ + "Artillery", + "PA", + "Artillery PA" + ] + ], + "OFpHq9gJ": [ + [ + "Generic", + "PETG", + "Prusament PETG" + ] + ], + "OFphFSUJ": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG HF" + ] + ], + "OFpwg2Qh": [ + [ + "Elegoo", + "ASA", + "Elegoo ASA-CF" + ] + ], + "OFq6IhFg": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA" + ] + ], + "OFqPp2yL": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough 0.6 nozzle" + ] + ], + "OFqRWRU6": [ + [ + "Generic", + "ABS-GF", + "Flashforge ABS-GF" + ] + ], + "OFqSTJ3I": [ + [ + "Generic", + "PLA", + "OrcaArena Generic PLA Silk" + ] + ], + "OFqh1Ngp": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA-CF" + ] + ], + "OFqkcvDI": [ + [ + "Peopoly", + "ABS", + "Peopoly Lancer ABS-GF" + ] + ], + "OFqyIUDi": [ + [ + "QIDI", + "PLA-CF", + "Qidi PLA-CF" + ] + ], + "OFrbbq6E": [ + [ + "Other", + "PLA", + "Other PLA Hyper" + ] + ], + "OFrgQ1Ns": [ + [ + "Elas", + "PLA", + "Elas PLA Pro" + ] + ], + "OFs1CbB1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido 0.8 nozzle" + ] + ], + "OFs6lLH7": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Silk" + ] + ], + "OFsCOJv7": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], + "OFsKqcQW": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA PRO" + ] + ], + "OFsLkLw6": [ + [ + "Generic", + "PLA", + "Generic PLA Matte" + ] + ], + "OFsNZcid": [ + [ + "Polymaker", + "PLA", + "PolyLite Dual PLA" + ] + ], + "OFsgANe3": [ + [ + "Generic", + "PAHT-CF", + "Flashforge PAHT-CF" + ] + ], + "OFsmPFwh": [ + [ + "Generic", + "TPU", + "Sovol SV06 Plus ACE TPU" + ] + ], + "OFt1YdX8": [ + [ + "Generic", + "PLA", + "FLSun T1 PLA Silk" + ] + ], + "OFt5bvKK": [ + [ + "Artillery", + "PETG Basic", + "Artillery PETG Basic" + ] + ], + "OFt9AiN5": [ + [ + "Generic", + "PA", + "Polymaker CoPA" + ] + ], + "OFtEFtsz": [ + [ + "Polymaker", + "PA", + "Polymaker Generic CoPA" + ] + ], + "OFtJMczs": [ + [ + "Generic", + "TPU-64D", + "Flashforge TPU-64D" + ] + ], + "OFtL05hE": [ + [ + "Generic", + "PLA", + "Sovol Zero PLA Basic HS Nozzle" + ] + ], + "OFtXBjvb": [ + [ + "Artillery", + "PLA Tough", + "Artillery PLA Tough" + ] + ], + "OFtcTs1o": [ + [ + "Generic", + "ABS", + "RatRig BigNozzle ABS" + ] + ], + "OFtemzzw": [ + [ + "Generic", + "ABS", + "Sovol SV06 ACE ABS" + ] + ], + "OFtet8ui": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU High-Flow" + ] + ], + "OFti31HS": [ + [ + "Cubicon", + "PLA", + "Cubicon PLAi21" + ] + ], + "OFtmT4Nd": [ + [ + "Artillery", + "ASA", + "Artillery ASA" + ] + ], + "OFtwA91m": [ + [ + "Generic", + "PC", + "Sovol Zero PC" + ] + ], + "OFuPC4S8": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA-CF" + ] + ], + "OFuPN3iW": [ + [ + "Other", + "PETG", + "Other PETG" + ] + ], + "OFuTFxVP": [ + [ + "Overture", + "ABS", + "Overture ABS" + ] + ], + "OFuXkYly": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Glow" + ] + ], + "OFuYvNS3": [ + [ + "Afinia", + "ABS", + "Afinia Value ABS" + ] + ], + "OFuidAEg": [ + [ + "Bambu Lab", + "ABS", + "Bambu ABS" + ] + ], + "OFuq9tqb": [ + [ + "InfiMech", + "PLA", + "InfiMech PLA Basic" + ] + ], + "OFuswXlp": [ + [ + "Generic", + "TPU", + "Generic TPU 85A" + ] + ], + "OFutwD6f": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Glow" + ] + ], + "OFuyJhLF": [ + [ + "Generic", + "PETG", + "Flashforge PETG Basic" + ] + ], + "OFv2NHLC": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF25" + ] + ], + "OFv8SRZh": [ + [ + "Generic", + "PLA-CF", + "Prusa Generic PLA-CF" + ] + ], + "OFvGSn0l": [ + [ + "Generic", + "PETG", + "Creality Generic PETG-CF" + ] + ], + "OFvN3117": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] + ], + "OFvOhSjO": [ + [ + "Other", + "TPU", + "Other TPU" + ] + ], + "OFvYfHPB": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Matte" + ] + ], + "OFvaXhYD": [ + [ + "InfiMech", + "PETG", + "InfiMech PETG" + ] + ], + "OFviQ9lH": [ + [ + "Generic", + "TPU", + "Flashforge Generic TPU" + ] + ], + "OFvsS7Fb": [ + [ + "Generic", + "TPU-64D", + "Generic TPU-64D" + ] + ], + "OFvw0owy": [ + [ + "Afinia", + "PLA", + "Afinia Value PLA" + ] + ], + "OFvxvkAd": [ + [ + "Artillery", + "PLA-CF", + "Artillery PLA-CF" + ] + ], + "OFw05rkF": [ + [ + "Other", + "PETG", + "Other PETG" + ] + ], + "OFw0qp7w": [ + [ + "Artillery", + "PET", + "Artillery PET" + ] + ], + "OFw1S8lL": [ + [ + "Artillery", + "ABS", + "Artillery ABS" + ] + ], + "OFw4OHWE": [ + [ + "Elas", + "PETG", + "Elas PETG Basic" + ] + ], + "OFwHPTvy": [ + [ + "Generic", + "PLA", + "Qidi Generic PLA+" + ] + ], + "OFwf0oWp": [ + [ + "Generic", + "PLA", + "Flashforge PLA Luminous" + ] + ], + "OFwyqcGn": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Matte" + ] + ], + "OFxLeRyT": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA HF" + ] + ], + "OFxVzzn4": [ + [ + "Generic", + "PLA-CF", + "Chuanying Generic PLA-CF10" + ] + ], + "OFxfCy9m": [ + [ + "Volumic", + "PETG", + "Volumic PCTG Ultra (Performance)" + ] + ], + "OFxjFYxE": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG HF" + ] + ], + "OFxlch4V": [ + [ + "CoLiDo", + "PLA", + "CoLiDo PLA Silk" + ] + ], + "OFxodd2u": [ + [ + "DeltaMaker", + "PLA", + "DeltaMaker Brand PLA" + ] + ], + "OFxxa5yn": [ + [ + "Snapmaker", + "ABS", + "Snapmaker Dual ABS Benchy" + ] + ], + "OFy7oQ1g": [ + [ + "Generic", + "ASA", + "Blocks Generic ASA-CF" + ] + ], + "OFyD1Zo8": [ + [ + "Other", + "PC", + "Other PC" + ] + ], + "OFyoW5W2": [ + [ + "Generic", + "PLA", + "Flashforge PLA Color Change" + ] + ], + "OFypQeKR": [ + [ + "Generic", + "PC-CF", + "Generic PC-CF" + ] + ], + "OFyt23xJ": [ + [ + "Generic", + "PLA", + "FLSun T1 PLA High Speed" + ] + ], + "OFyxAbO4": [ + [ + "Generic", + "TPU-95A", + "Flashforge TPU-95A" + ] + ], + "OFzFbFcl": [ + [ + "Elegoo", + "PC", + "Elegoo PC-FR" + ] + ], + "OFzQQeCi": [ + [ + "Generic", + "HIPS", + "Chuanying Generic HIPS" + ] + ], + "OFzb2BLs": [ + [ + "Generic", + "PETG", + "RatRig Generic PCTG" + ] + ], + "OFziUL2X": [ + [ + "Generic", + "PLA", + "Ginger Generic PLA" + ] + ], + "OFzrWlH5": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG HF" + ] + ], + "OGFA00": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Basic" + ] + ], + "OGFA01": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Matte" + ] + ], + "OGFA02": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Metal" + ] + ], + "OGFA03": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Impact" + ] + ], + "OGFA05": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Silk" + ] + ], + "OGFA06": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Silk+" + ] + ], + "OGFA07": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Marble" + ] + ], + "OGFA08": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Sparkle" + ] + ], + "OGFA09": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Tough" + ] + ], + "OGFA11": [ + [ + "Bambu Lab", + "PLA-AERO", + "Bambu PLA Aero" + ] + ], + "OGFA12": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Glow" + ] + ], + "OGFA13": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Dynamic" + ] + ], + "OGFA15": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Galaxy" + ] + ], + "OGFA16": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Wood" + ] + ], + "OGFA50": [ + [ + "Bambu Lab", + "PLA-CF", + "Bambu PLA-CF" + ] + ], + "OGFB00": [ + [ + "Bambu Lab", + "ABS", + "Bambu ABS" + ] + ], + "OGFB01": [ + [ + "Bambu Lab", + "ASA", + "Bambu ASA" + ] + ], + "OGFB02": [ + [ + "Bambu Lab", + "ASA-AERO", + "Bambu ASA-Aero" + ] + ], + "OGFB50": [ + [ + "Bambu Lab", + "ABS-GF", + "Bambu ABS-GF" + ] + ], + "OGFB51": [ + [ + "Bambu Lab", + "ASA-CF", + "Bambu ASA-CF" + ] + ], + "OGFB60": [ + [ + "Polymaker", + "ABS", + "PolyLite ABS" + ] + ], + "OGFB61": [ + [ + "Polymaker", + "ASA", + "PolyLite ASA" + ] + ], + "OGFB98": [ + [ + "Generic", + "ASA", + "Generic ASA" + ] + ], + "OGFB99": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "OGFC00": [ + [ + "Bambu Lab", + "PC", + "Bambu PC" + ] + ], + "OGFC01": [ + [ + "Bambu Lab", + "PC", + "Bambu PC FR" + ] + ], + "OGFC99": [ + [ + "Generic", + "PC", + "Generic PC" + ], + [ + "Generic", + "PC", + "fdm_filament_pc" + ] + ], + "OGFG00": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG Basic" + ] + ], + "OGFG01": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG Translucent" + ] + ], + "OGFG02": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG HF" + ] + ], + "OGFG50": [ + [ + "Bambu Lab", + "PETG-CF", + "Bambu PETG-CF" + ] + ], + "OGFG60": [ + [ + "Polymaker", + "PETG", + "PolyLite PETG" + ] + ], + "OGFG97": [ + [ + "Generic", + "PCTG", + "fdm_filament_pctg" + ] + ], + "OGFG99": [ + [ + "Generic", + "PETG", + "Generic PETG" + ], + [ + "Generic", + "PETG", + "fdm_filament_pet" + ] + ], + "OGFGG300": [ + [ + "GreenGate3D", + "PETG", + "GreenGate3D PETG" + ] + ], + "OGFL00": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA" + ] + ], + "OGFL00-1": [ + [ + "Polymaker", + "PLA", + "PolyTerra Dual PLA" + ] + ], + "OGFL01": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA" + ] + ], + "OGFL03": [ + [ + "eSUN", + "PLA", + "eSUN PLA+" + ] + ], + "OGFL04": [ + [ + "Overture", + "PLA", + "Overture PLA" + ] + ], + "OGFL05": [ + [ + "Overture", + "PLA", + "Overture Matte PLA" + ] + ], + "OGFL06": [ + [ + "Polymaker", + "PETG", + "Fiberon PETG-ESD" + ] + ], + "OGFL50": [ + [ + "Polymaker", + "PA6-CF", + "Fiberon PA6-CF" + ] + ], + "OGFL51": [ + [ + "Polymaker", + "PA-GF", + "Fiberon PA6-GF" + ] + ], + "OGFL52": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA12-CF" + ] + ], + "OGFL53": [ + [ + "Polymaker", + "PA", + "Fiberon PA612-CF" + ] + ], + "OGFL54": [ + [ + "Polymaker", + "PET-CF", + "Fiberon PET-CF" + ] + ], + "OGFL55": [ + [ + "Polymaker", + "PETG-CF", + "Fiberon PETG-rCF" + ] + ], + "OGFL95": [ + [ + "Generic", + "PLA", + "Generic PLA High Speed" + ] + ], + "OGFL96": [ + [ + "Generic", + "PLA", + "Generic PLA Silk" + ], + [ + "Generic", + "PLA", + "fdm_filament_pla_silk" + ] + ], + "OGFL98": [ + [ + "Generic", + "PLA-CF", + "Generic PLA-CF" + ] + ], + "OGFL99": [ + [ + "Generic", + "PLA", + "fdm_filament_pla" + ] + ], + "OGFLC99": [ + [ + "Generic", + "CoPE", + "fdm_filament_cope" + ] + ], + "OGFN03": [ + [ + "Bambu Lab", + "PA-CF", + "Bambu PA-CF" + ] + ], + "OGFN04": [ + [ + "Bambu Lab", + "PA-CF", + "Bambu PAHT-CF" + ] + ], + "OGFN05": [ + [ + "Bambu Lab", + "PA6-CF", + "Bambu PA6-CF" + ] + ], + "OGFN06": [ + [ + "Bambu Lab", + "PPA-CF", + "Bambu PPA-CF" + ] + ], + "OGFN08": [ + [ + "Bambu Lab", + "PA-GF", + "Bambu PA6-GF" + ] + ], + "OGFN96": [ + [ + "Generic", + "PPA-GF", + "Generic PPA-GF" + ] + ], + "OGFN97": [ + [ + "Generic", + "PPA-CF", + "fdm_filament_ppa" + ] + ], + "OGFN98": [ + [ + "Generic", + "PA-CF", + "Generic PA-CF" + ] + ], + "OGFN99": [ + [ + "Generic", + "PA", + "Generic PA" + ], + [ + "Generic", + "PA", + "fdm_filament_pa" + ] + ], + "OGFNMK00": [ + [ + "Numakers", + "PLA", + "Numakers PLA+" + ] + ], + "OGFP97": [ + [ + "Generic", + "PP", + "fdm_filament_pp" + ] + ], + "OGFP99": [ + [ + "Generic", + "PE", + "fdm_filament_pe" + ] + ], + "OGFPM001": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA" + ] + ], + "OGFPM002": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Matte" + ] + ], + "OGFPM003": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Marble" + ] + ], + "OGFPM004": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Silk" + ] + ], + "OGFPM005": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Satin" + ] + ], + "OGFPM006": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Translucent" + ] + ], + "OGFPM007": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Galaxy" + ] + ], + "OGFPM008": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Celestial" + ] + ], + "OGFPM009": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Starlight" + ] + ], + "OGFPM010": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Glow" + ] + ], + "OGFPM011": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Luminous" + ] + ], + "OGFPM012": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Metallic" + ] + ], + "OGFPM013": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Neon" + ] + ], + "OGFPM014": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA UV Shift" + ] + ], + "OGFPM015": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Temp Shift" + ] + ], + "OGFPM016": [ + [ + "Polymaker", + "PLA", + "Panchroma CoPE" + ] + ], + "OGFPM017": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA" + ] + ], + "OGFPM018": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA-GF" + ] + ], + "OGFPM019": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Pro" + ] + ], + "OGFR00": [ + [ + "FusRock", + "ABS-GF", + "FusRock ABS-GF" + ] + ], + "OGFR98": [ + [ + "Generic", + "PHA", + "fdm_filament_pha" + ] + ], + "OGFR99": [ + [ + "Generic", + "EVA", + "fdm_filament_eva" + ] + ], + "OGFS00": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support W" + ] + ], + "OGFS01": [ + [ + "Bambu Lab", + "PA", + "Bambu Support G" + ] + ], + "OGFS02": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support For PLA" + ] + ], + "OGFS03": [ + [ + "Bambu Lab", + "PA", + "Bambu Support For PA/PET" + ] + ], + "OGFS04": [ + [ + "Bambu Lab", + "PVA", + "Bambu PVA" + ] + ], + "OGFS05": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support For PLA/PETG" + ] + ], + "OGFS06": [ + [ + "Bambu Lab", + "ABS", + "Bambu Support for ABS" + ] + ], + "OGFS97": [ + [ + "Generic", + "BVOH", + "fdm_filament_bvoh" + ] + ], + "OGFS98": [ + [ + "Generic", + "HIPS", + "fdm_filament_hips" + ] + ], + "OGFS99": [ + [ + "Generic", + "PVA", + "Generic PVA" + ] + ], + "OGFSNL02": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Matte" + ] + ], + "OGFSNL03": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+" + ] + ], + "OGFSNL04": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+ 2.0" + ] + ], + "OGFSNL05": [ + [ + "SUNLU", + "PLA", + "SUNLU Silk PLA+" + ] + ], + "OGFSNL06": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Marble" + ] + ], + "OGFSNL07": [ + [ + "SUNLU", + "PLA", + "SUNLU Wood PLA" + ] + ], + "OGFSNL08": [ + [ + "Generic", + "PETG", + "SUNLU PETG" + ], + [ + "SUNLU", + "PETG", + "SUNLU PETG" + ] + ], + "OGFT01": [ + [ + "Bambu Lab", + "PET-CF", + "Bambu PET-CF" + ] + ], + "OGFT02": [ + [ + "Bambu Lab", + "PPS-CF", + "Bambu PPS-CF" + ] + ], + "OGFU00": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 95A HF" + ] + ], + "OGFU01": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 95A" + ] + ], + "OGFU99": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], + "OVTABS08": [ + [ + "Overture", + "ABS", + "Overture ABS Basic" + ] + ], + "P1001": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Satin" + ] + ], + "P1002": [ + [ + "Polymaker", + "PLA", + "PolySonic PLA Pro" + ] + ], + "P1003": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Matte" + ] + ], + "P1004": [ + [ + "Polymaker", + "PLA", + "PolySonic PLA" + ] + ], + "P510cfa0": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA" + ] + ], + "P510cfa1": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA+" + ] + ], + "P510cfa2": [ + [ + "Cubicon", + "PLA", + "Cubicon PLAi21" + ] + ], + "P510cfb0": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS" + ] + ], + "P510cfb1": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS-A100" + ] + ], + "P510cfb2": [ + [ + "Cubicon", + "ABS", + "Cubicon ABSk" + ] + ], + "P510cfc0": [ + [ + "Cubicon", + "PETG", + "Cubicon PETG" + ] + ], + "P510cfd0": [ + [ + "Cubicon", + "PA", + "Cubicon PA-CF" + ] + ], + "P510eff9": [ + [ + "Generic", + "PETG", + "Ginger Generic PETG" + ] + ], + "Pfcf9c4c": [ + [ + "Artillery", + "PLA", + "Artillery PLA" + ] + ], + "Prusa Generic ABS @CORE One": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One 0.6": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One 0.8": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One HF 0.4": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One HF 0.5": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One HF 0.6": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ABS @CORE One HF 0.8": [ + [ + "Generic", + "ABS", + "Prusa Generic ABS" + ] + ], + "Prusa Generic ASA @CORE One": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One 0.6": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One 0.8": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One HF 0.4": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One HF 0.5": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One HF 0.6": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic ASA @CORE One HF 0.8": [ + [ + "Prusa Polymers", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusa Generic PETG @CORE One": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One 0.6": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One 0.8": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One HF 0.4": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One HF 0.5": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One HF 0.6": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PETG @CORE One HF 0.8": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" + ] + ], + "Prusa Generic PLA @CORE One": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One 0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One 0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One HF 0.4": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One HF 0.5": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One HF 0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA @CORE One HF 0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" + ] + ], + "Prusa Generic PLA Silk @CORE One": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Prusa Generic PLA Silk @CORE One 0.6": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Prusa Generic PLA Silk @CORE One 0.8": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA Silk" + ] + ], + "Prusa Generic TPU @CORE One": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Prusa Generic TPU @CORE One 0.6": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Prusa Generic TPU @CORE One 0.8": [ + [ + "Generic", + "FLEX", + "Prusa Generic TPU" + ] + ], + "Prusament ASA @CORE One": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One 0.6": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One 0.8": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One HF 0.4": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One HF 0.5": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One HF 0.6": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @CORE One HF 0.8": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" + ] + ], + "Prusament ASA @MK4S": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S 0.6": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S 0.8": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S HF0.4": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S HF0.5": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S HF0.6": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament ASA @MK4S HF0.8": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" + ] + ], + "Prusament PA-CF @CORE One": [ + [ + "Prusa Polymers", + "PA", + "Prusament PA-CF" + ] + ], + "Prusament PA-CF @CORE One 0.6": [ + [ + "Prusa Polymers", + "PA", + "Prusament PA-CF" + ] + ], + "Prusament PA-CF @CORE One 0.8": [ + [ + "Prusa Polymers", + "PA", + "Prusament PA-CF" + ] + ], + "Prusament PC Blend @CORE One": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One 0.6": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One 0.8": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One HF 0.4": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One HF 0.5": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One HF 0.6": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC Blend @CORE One HF 0.8": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC Blend" + ] + ], + "Prusament PC-CF @CORE One": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC-CF" + ] + ], + "Prusament PC-CF @CORE One 0.6": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC-CF" + ] + ], + "Prusament PC-CF @CORE One 0.8": [ + [ + "Prusa Polymers", + "PC", + "Prusament PC-CF" + ] + ], + "Prusament PETG @CORE One": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One 0.6": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One 0.8": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One HF 0.4": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One HF 0.5": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One HF 0.6": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PETG @CORE One HF 0.8": [ + [ + "Prusa Polymers", + "PETG", + "Prusament PETG" + ] + ], + "Prusament PLA @CORE One": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One 0.6": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One 0.8": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One HF 0.4": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One HF 0.5": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One HF 0.6": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PLA @CORE One HF 0.8": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "Prusament PVB @CORE One": [ + [ + "Prusa Polymers", + "PVB", + "Prusament PVB" + ] + ], + "Prusament PVB @CORE One 0.6": [ + [ + "Prusa Polymers", + "PVB", + "Prusament PVB" + ] + ], + "Prusament PVB @CORE One 0.8": [ + [ + "Prusa Polymers", + "PVB", + "Prusament PVB" + ] + ], + "Prusament rPLA @CORE One": [ + [ + "Prusa Polymers", + "PLA", + "Prusament rPLA" + ] + ], + "Prusament rPLA @CORE One 0.6": [ + [ + "Prusa Polymers", + "PLA", + "Prusament rPLA" + ] + ], + "Prusament rPLA @CORE One 0.8": [ + [ + "Prusa Polymers", + "PLA", + "Prusament rPLA" + ] + ], + "SMCFB001": [ + [ + "SeeMeCNC", + "ABS", + "SeeMeCNC ABS" + ] + ], + "SMCFG001": [ + [ + "SeeMeCNC", + "PETG", + "SeeMeCNC PETG" + ] + ], + "SMCFG002": [ + [ + "SeeMeCNC", + "PETG-CF", + "SeeMeCNC PETG-CF" + ] + ], + "SMCFL001": [ + [ + "SeeMeCNC", + "PLA", + "SeeMeCNC PLA" + ] + ], + "SMCFN001": [ + [ + "SeeMeCNC", + "PA-CF", + "SeeMeCNC PA-CF" + ] + ], + "SMCFU001": [ + [ + "SeeMeCNC", + "TPU", + "SeeMeCNC TPU" + ] + ], + "VLMNT01": [ + [ + "Valment", + "PLA", + "Valment PLA" + ] + ], + "VLMNT02": [ + [ + "Valment", + "PLA", + "Valment PLA Silk" + ] + ], + "VLMNT03": [ + [ + "Valment", + "PLA-CF", + "Valment PLA-CF" + ] + ], + "VLMNT04": [ + [ + "Valment", + "PLA", + "Valment PLA Galaxy" + ] + ] + } } diff --git a/scripts/retired_filament_ids.json b/scripts/retired_filament_ids.json deleted file mode 100644 index d71f89d9ac..0000000000 --- a/scripts/retired_filament_ids.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "retired": { - "GFABS": [ - "Anycubic/Anycubic ABS" - ], - "GFL92": [ - "Anycubic/Anycubic PLA" - ], - "GFL93": [ - "Anycubic/Anycubic PLA+" - ], - "GFPLA": [ - "Anycubic/Anycubic PLA" - ], - "GFPLA High Speed": [ - "Anycubic/Anycubic PLA High Speed" - ], - "GFPLA Matte": [ - "Anycubic/Anycubic PLA Matte" - ], - "GFPLA Silk": [ - "Anycubic/Anycubic PLA Silk" - ], - "GFPLA+": [ - "Anycubic/Anycubic PLA+" - ], - "P11851ba": [ - "Artillery/Artillery PET" - ], - "P284941e": [ - "Artillery/Artillery PETG", - "Artillery/Artillery PETG Basic" - ], - "P2fbf0c0": [ - "Artillery/Artillery TPU" - ], - "P39db358": [ - "Artillery/Artillery ABS" - ], - "P8163162": [ - "Artillery/Artillery PVA" - ], - "P87436f6": [ - "Artillery/Artillery ASA" - ] - } -} diff --git a/scripts/test_moonraker_lane_data.py b/scripts/test_moonraker_lane_data.py index 44a0a7e30e..16ed4924e0 100644 --- a/scripts/test_moonraker_lane_data.py +++ b/scripts/test_moonraker_lane_data.py @@ -5,10 +5,15 @@ Inserts/deletes/modifies random lane data in Moonraker database, then reads back and displays with colored output. """ -import requests +try: + import requests +except ImportError: + requests = None # only needed for live-printer operations, not --check-ofl-map import random import argparse import json +import os +import re import time import sys @@ -16,6 +21,11 @@ import sys DEFAULT_HOST = "192.168.88.9" DEFAULT_PORT = 7125 NAMESPACE = "lane_data" + +# Repo-relative paths for the offline generic-map check +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +MOONRAKER_AGENT_CPP = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "MoonrakerPrinterAgent.cpp") +OFL_FILAMENT_DIR = os.path.join(REPO_ROOT, "resources", "profiles", "OrcaFilamentLibrary", "filament") LANE_KEYS = [f"lane{i}" for i in range(1, 9)] # lane1-lane8 MATERIALS = ["PLA", "ABS", "PETG", "ASA", "ASA Sparkle", "TPU", ""] @@ -30,6 +40,95 @@ MATERIAL_TEMPS = { "": {"nozzle": None, "bed": None}, } +def parse_cpp_type_map(): + """Extract the normalized-type -> OFL generic family table from MoonrakerPrinterAgent.cpp. + + Reads MoonrakerPrinterAgent::map_filament_type_to_generic_id's type_to_ofl_family + initializer so the check tracks the C++ normalization without a duplicated list. + """ + with open(MOONRAKER_AGENT_CPP, encoding="utf-8") as f: + src = f.read() + m = re.search(r"type_to_ofl_family\s*=\s*\{(.*?)\n\s*\};", src, re.DOTALL) + if not m: + raise RuntimeError(f"type_to_ofl_family table not found in {MOONRAKER_AGENT_CPP}") + pairs = re.findall(r'\{\s*"([^"]+)"\s*,\s*"([^"]+)"\s*\}', m.group(1)) + if not pairs: + raise RuntimeError("type_to_ofl_family table parsed empty") + return dict(pairs) + +def load_ofl_presets(): + """Map preset name -> parsed JSON for every OrcaFilamentLibrary filament profile.""" + presets = {} + for root, _dirs, files in os.walk(OFL_FILAMENT_DIR): + for fn in files: + if not fn.endswith(".json"): + continue + try: + with open(os.path.join(root, fn), encoding="utf-8") as f: + data = json.load(f) + except (OSError, ValueError): + continue + name = data.get("name") + if isinstance(name, str) and name: + presets[name] = data + return presets + +def resolve_ofl_filament_id(presets, name): + """Follow the inherits chain (within OFL) until a filament_id is declared.""" + seen = set() + while name and name not in seen: + seen.add(name) + preset = presets.get(name) + if preset is None: + return None + fid = preset.get("filament_id") + if fid: + return fid + name = preset.get("inherits") + return None + +def check_ofl_generic_map(): + """Assert every material type the C++ normalization handles resolves to a shipped + OrcaFilamentLibrary generic preset carrying a filament_id. + + Expectations are derived from the shipped profiles, not pinned id literals, so the + check stays valid across filament_id re-mints. + """ + print("Checking C++ generic-type map against shipped OrcaFilamentLibrary presets...") + try: + type_map = parse_cpp_type_map() + except (OSError, RuntimeError) as e: + print(f" FAIL: {e}") + return False + presets = load_ofl_presets() + if not presets: + print(f" FAIL: no OFL filament profiles found under {OFL_FILAMENT_DIR}") + return False + errors = [] + for family in sorted(set(type_map.values())): + preset_name = f"Generic {family} @System" + if preset_name not in presets: + errors.append(f"{preset_name}: no such OFL preset") + continue + if str(presets[preset_name].get("instantiation", "")).lower() != "true": + errors.append(f"{preset_name}: not instantiated — the C++ runtime lookup " + f"only sees presets loaded into the PresetBundle") + continue + fid = resolve_ofl_filament_id(presets, preset_name) + if not fid: + errors.append(f"{preset_name}: no filament_id resolvable through inherits") + continue + aliases = ", ".join(sorted(t for t, fam in type_map.items() if fam == family)) + print(f" {fid:10s} {preset_name:32s} <- {aliases}") + if errors: + for e in errors: + print(f" FAIL: {e}") + print(f"OFL generic map check FAILED ({len(errors)} error(s))") + return False + print(f"OFL generic map check passed: {len(type_map)} type aliases, " + f"{len(set(type_map.values()))} OFL generic presets\n") + return True + def test_connection(host, port, api_key=None, verbose=False): """Test basic connectivity to Moonraker.""" url = f"http://{host}:{port}/server/info" @@ -404,11 +503,25 @@ def main(): help="Only read and display current lane data") parser.add_argument("--load", metavar="FILE", help="Load lane data from JSON file and overwrite printer lanes") + parser.add_argument("--check-ofl-map", action="store_true", + help="Only run the offline check that the C++ generic-type map " + "resolves against shipped OrcaFilamentLibrary presets") parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output for debugging") args = parser.parse_args() + # Offline check first: the C++ type normalization must resolve against shipped + # OFL presets (no printer needed). + if not check_ofl_generic_map(): + return 1 + if args.check_ofl_map: + return 0 + + if requests is None: + print("The 'requests' module is required for live printer operations (pip install requests).") + return 1 + print(f"\nConnecting to Moonraker at {args.host}:{args.port}...") # First test basic connectivity diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 14d7d439b7..d60377f51e 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -34,12 +34,18 @@ def load_json_file(path): # --------------------------------------------------------------------------- def preset(name, filament_id=None, inherits=None, instantiation=True, - compatible_printers=None): + compatible_printers=None, filament_vendor=None, filament_type=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 + if filament_vendor is not None: + data["filament_vendor"] = ( + [filament_vendor] if isinstance(filament_vendor, str) else filament_vendor) + if filament_type is not None: + data["filament_type"] = ( + [filament_type] if isinstance(filament_type, str) else filament_type) data["instantiation"] = "true" if instantiation else "false" if compatible_printers is not None: data["compatible_printers"] = compatible_printers @@ -102,13 +108,18 @@ class SyntheticTree: with open(idx_path, "w", encoding="utf-8") as f: json.dump(index, f, indent=4, ensure_ascii=False) + def write_ledger(self, retired=None, hints=None): + afi.write_ledger(self.retired, {"retired": retired or {}, + "hints": hints or {}}) + # -- pipeline wrappers --------------------------------------------------- - def update_snapshot(self, allow_shared_catalog=False): + def update_snapshot(self, allow_shared_catalog=False, forget_path=None): buf = io.StringIO() with contextlib.redirect_stdout(buf): rc = afi.update_snapshot(self.profiles, self.snapshot, self.retired, - allow_shared_catalog=allow_shared_catalog) + allow_shared_catalog=allow_shared_catalog, + forget_path=forget_path) return rc, buf.getvalue() def check(self): @@ -124,17 +135,37 @@ class SyntheticTree: self.retired) return changed, errors, buf.getvalue() + def remint(self, vendors): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.remint_vendors(vendors, self.profiles, self.retired) + return changed, errors, buf.getvalue() + + def drop_redundant(self, vendor): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + dropped, errors = afi.drop_redundant_ids(vendor, self.profiles) + return dropped, errors, buf.getvalue() + + def add_hint(self, pairs): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.add_hints(pairs, self.profiles, self.retired) + return rc, 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("fdm_pla", filament_id="OGFL99", instantiation=False, + filament_vendor="Generic", filament_type="PLA"), preset("Generic PLA @System", inherits="fdm_pla", compatible_printers=[]), ]) t.add_vendor("VendorA", [ - preset("APLA @base", filament_id="AX01", instantiation=False), + preset("APLA @base", filament_id="AX01", instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), preset("APLA @P1", inherits="APLA @base", compatible_printers=["P1 0.4 nozzle"]), # Correctly tuned OFL generic: keeps the OFL base name, claims a printer. @@ -163,33 +194,45 @@ class TestMint(unittest.TestCase): 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") + # Hardcoded, independently computed vectors: freeze prefix, input string + # layout ("filament_product///") and base62 tail. + self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA"), + "OF5CgdDq") + self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA", + salt=1), "OFD9mV8H") + self.assertEqual(afi.generate_filament_id("Generic", "PLA", "Generic PLA"), + "OFDSrzZ8") 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) + for triple in [("Polymaker", "PLA", "PolyLite PLA"), + ("Creality", "PLA", "CR PLA"), + ("Generic", "ABS", "Generic ABS"), + ("拓竹", "PLA", "拓竹 PLA")]: # unicode components + a = afi.generate_filament_id(*triple) + b = afi.generate_filament_id(*triple) self.assertEqual(a, b) self.assertRegex(a, r"^OF[0-9A-Za-z]{6}$") self.assertEqual(len(a), 8) + def test_every_triple_component_changes_the_id(self): + base = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") + self.assertNotEqual(base, afi.generate_filament_id("Other", "PLA", "PolyLite PLA")) + self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PETG", "PolyLite PLA")) + self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA Pro")) + def test_salt_changes_id(self): - base = afi.generate_filament_id("Qidi", "HATCHBOX PLA") - salted = afi.generate_filament_id("Qidi", "HATCHBOX PLA", salt=1) + base = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") + salted = afi.generate_filament_id("Polymaker", "PLA", "PolyLite 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)) + triple = ("Polymaker", "PLA", "PolyLite PLA") + taken = {afi.generate_filament_id(*triple, salt=s) for s in range(2)} + self.assertEqual(afi.mint_filament_id(*triple, taken), + afi.generate_filament_id(*triple, salt=2)) + self.assertEqual(afi.mint_filament_id(*triple, set()), + afi.generate_filament_id(*triple)) class TestBaseName(unittest.TestCase): @@ -278,8 +321,74 @@ class TestResolver(unittest.TestCase): self.assertEqual(fid, "PARENT") +class TestTripleResolution(unittest.TestCase): + @staticmethod + def rec(name, inherits=None, filament_vendor=None, filament_type=None): + return {"name": name, "inherits": inherits, + "filament_vendor": filament_vendor, "filament_type": filament_type} + + def field(self, name, vendor_recs, ofl_recs, field="filament_vendor"): + fmap = {r["name"]: r for r in vendor_recs} + omap = {r["name"]: r for r in ofl_recs} + return afi.resolve_filament_field(name, field, fmap, omap) + + def test_own_value_first_element_of_list(self): + got = self.field("A", [self.rec("A", filament_vendor=["Poly", "Ignored"])], []) + self.assertEqual(got, "Poly") + + def test_plain_string_value_tolerated(self): + got = self.field("A", [self.rec("A", filament_vendor="Poly")], []) + self.assertEqual(got, "Poly") + + def test_inherited_within_vendor(self): + got = self.field( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="C"), + self.rec("C", filament_vendor=["Poly"])], []) + self.assertEqual(got, "Poly") + + def test_empty_list_keeps_walking(self): + got = self.field( + "A", [self.rec("A", inherits="B", filament_vendor=[]), + self.rec("B", filament_vendor=["Poly"])], []) + self.assertEqual(got, "Poly") + + def test_ofl_fallback(self): + got = self.field( + "A", [self.rec("A", inherits="Generic PLA @System")], + [self.rec("Generic PLA @System", inherits="fdm_pla"), + self.rec("fdm_pla", filament_vendor=["Generic"])]) + self.assertEqual(got, "Generic") + + def test_ofl_stays_in_ofl(self): + got = self.field( + "A", + [self.rec("A", inherits="ofl_entry"), + self.rec("fdm_pla", filament_vendor=["WRONG"])], + [self.rec("ofl_entry", inherits="fdm_pla"), + self.rec("fdm_pla", filament_vendor=["RIGHT"])]) + self.assertEqual(got, "RIGHT") + + def test_dead_end_retries_parent_in_ofl(self): + got = self.field( + "A", [self.rec("A", inherits="shared"), self.rec("shared")], + [self.rec("shared", filament_vendor=["Poly"])]) + self.assertEqual(got, "Poly") + + def test_missing_is_empty(self): + self.assertEqual(self.field("A", [self.rec("A")], []), "") + self.assertEqual(self.field("A", [self.rec("A", inherits="nope")], []), "") + + def test_resolve_triple(self): + recs = [self.rec("MyPLA @base", filament_vendor=["MyVendor"], + filament_type=["PLA"]), + self.rec("MyPLA @P1", inherits="MyPLA @base")] + fmap = {r["name"]: r for r in recs} + self.assertEqual(afi.resolve_triple("MyPLA @P1", fmap, {}), + ("MyVendor", "PLA", "MyPLA")) + + # --------------------------------------------------------------------------- -# reserved namespaces +# reserved namespaces / islands # --------------------------------------------------------------------------- class TestReservedSpaces(unittest.TestCase): @@ -289,9 +398,16 @@ class TestReservedSpaces(unittest.TestCase): 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("OF5CgdDq"), (False, None)) self.assertEqual(afi.reserved_space_owner("P1234abcd"), (False, None)) # 8 hex chars: not the user space + def test_island_declarations(self): + self.assertTrue(afi.is_island_declaration("BBL", "GFL99")) + self.assertTrue(afi.is_island_declaration("BBL", "OF5CgdDq")) + self.assertTrue(afi.is_island_declaration("Qidi", "QD_X4_PLA")) + self.assertFalse(afi.is_island_declaration("Qidi", "OF5CgdDq")) + self.assertFalse(afi.is_island_declaration("VendorA", "GFL99")) + # --------------------------------------------------------------------------- # checks on synthetic trees @@ -302,10 +418,12 @@ class TestChecks(SyntheticTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) self.assertNotIn("[ERROR]", out) + self.assertNotIn("[WARNING]", out) def test_check1_unknown_non_of_id(self): self.t.write_preset("VendorA", preset("BPLA @base", filament_id="BOGUS_9", - instantiation=False)) + instantiation=False, + filament_vendor="BV", filament_type="PLA")) self.t.write_preset("VendorA", preset("BPLA @P1", inherits="BPLA @base", compatible_printers=["P1"])) errors, out = self.t.check() @@ -328,27 +446,57 @@ class TestChecks(SyntheticTreeCase): self.assertIn("stability", out) self.assertIn('"VendorA/APLA"', out) - def test_check3_of_id_must_match_mint(self): + def test_check2_triple_change_needs_snapshot_update(self): + self.t.write_preset("VendorA", preset("APLA @base", filament_id="AX01", + instantiation=False, + filament_vendor="AVendor", + filament_type="PETG"), + register=False) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('triple "AVendor/PETG/APLA" is not sanctioned', out) + self.assertIn('triple stability: snapshot triple "AVendor/PLA/APLA"', out) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check3_of_id_must_match_triple_mint(self): self.t.write_preset("VendorA", preset("BNEW @base", filament_id="OFZZZZZZ", - instantiation=False)) + instantiation=False, + filament_vendor="BV", filament_type="PLA")) 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) + self.assertIn("does not match the mint of its triple", out) + self.assertIn(afi.generate_filament_id("BV", "PLA", "BNEW"), out) def test_check3_salted_mint_is_accepted(self): - salted = afi.generate_filament_id("VendorA", "BNEW", salt=3) + salted = afi.generate_filament_id("BV", "PLA", "BNEW", salt=3) self.t.write_preset("VendorA", preset("BNEW @base", filament_id=salted, - instantiation=False)) + instantiation=False, + filament_vendor="BV", filament_type="PLA")) 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) + self.assertNotIn("does not match the mint", out) + + def test_check3_grandfathered_id_triple_pair(self): + # A non-conforming (id, triple) pair sanctioned by the snapshot passes. + self.t.write_preset("VendorA", preset("CNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="CV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("CNEW @P1", inherits="CNEW @base", + 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_check4_retired_id_reuse(self): - afi.write_ledger(self.t.retired, {"retired": {"AX01": ["VendorA/APLA"]}}) + self.t.write_ledger(retired={"AX01": {"claims": ["VendorA/APLA"], + "successor": None}}) errors, out = self.t.check() self.assertGreater(errors, 0) self.assertIn("retired", out) @@ -371,6 +519,37 @@ class TestChecks(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn("cannot shadow the OFL preset", out) + def test_check5_own_id_key_on_ofl_rider(self): + # A vendor root that declares its own id while inheriting an OFL family + # forks the family off the catalog id. + self.t.write_preset("VendorA", preset("GPLA @base", filament_id="AX77", + instantiation=False, + inherits="Generic PLA @System")) + self.t.write_preset("VendorA", preset("GPLA @P1", inherits="GPLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('declares its own filament_id "AX77"', out) + + def test_check5_applies_to_non_generic_ofl_families(self): + fid = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") + self.t.write_preset(OFL, preset("poly_pla_base", filament_id=fid, + instantiation=False, + filament_vendor="Polymaker", + filament_type="PLA")) + self.t.write_preset(OFL, preset("PolyLite PLA @System", + inherits="poly_pla_base", + compatible_printers=[])) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.t.write_preset("VendorA", preset("PolyX PLA @P1", + inherits="PolyLite 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("PolyX PLA @P1", out) + def test_check5_exception_is_grandfathered(self): self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="Generic PLA @System", @@ -388,7 +567,9 @@ class TestChecks(SyntheticTreeCase): with self.subTest(fid=fid): name = f"R{fid} @base" self.t.write_preset("VendorA", preset(name, filament_id=fid, - instantiation=False)) + instantiation=False, + filament_vendor="RV", + filament_type="PLA")) self.t.write_preset("VendorA", preset(f"R{fid} @P1", inherits=name, compatible_printers=["P1"])) errors, out = self.t.check() @@ -428,6 +609,184 @@ class TestChecks(SyntheticTreeCase): self.assertIn("snapshot not found", out) +class TestCheck8(SyntheticTreeCase): + def test_8a_empty_vendor_is_hard_error(self): + fid = afi.generate_filament_id("", "PLA", "NVPLA") + self.t.write_preset("VendorA", preset("NVPLA @base", filament_id=fid, + instantiation=False, + filament_type="PLA")) + self.t.write_preset("VendorA", preset("NVPLA @P1", inherits="NVPLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("resolves empty filament_vendor", out) + self.assertIn('filament_vendor "Generic"', out) + # No grandfathering: sanctioning the tree does not silence check 8a. + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("resolves empty filament_vendor", out) + + def test_8b_divergent_family_triples(self): + id1 = afi.generate_filament_id("MV", "PLA", "MPLA") + id2 = afi.generate_filament_id("MV", "PETG", "MPLA") + self.t.write_preset("VendorA", preset("MPLA @base1", filament_id=id1, + instantiation=False, + filament_vendor="MV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("MPLA @base2", filament_id=id2, + instantiation=False, + filament_vendor="MV", + filament_type="PETG")) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("divergent triples", out) + self.assertIn("MV/PLA/MPLA", out) + self.assertIn("MV/PETG/MPLA", out) + # ... until --update-snapshot grandfathers the family in triple_exceptions. + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("VendorA/MPLA", load_json_file(self.t.snapshot)["triple_exceptions"]) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_8_cross_bundle_divergence_is_warning_only(self): + fid = afi.generate_filament_id("BV", "PETG", "APLA") + self.t.add_vendor("VendorB", [ + preset("APLA @base", filament_id=fid, instantiation=False, + filament_vendor="BV", filament_type="PETG"), + preset("APLA @PB", inherits="APLA @base", + compatible_printers=["PB 0.4 nozzle"]), + ]) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + self.assertIn("[WARNING]", out) + self.assertIn("across bundles", out) + self.assertIn('"APLA"', out) + + +class TestCheck9(SyntheticTreeCase): + def test_ok_chain_null_and_live(self): + self.t.write_ledger(retired={ + "R1": {"claims": ["VendorA/Gone1"], "successor": "AX01"}, + "R2": {"claims": ["VendorA/Gone2"], "successor": "R1"}, + "R3": {"claims": ["VendorA/Gone3"], "successor": None}, + }) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_cycle_is_an_error(self): + self.t.write_ledger(retired={ + "C1": {"claims": [], "successor": "C2"}, + "C2": {"claims": [], "successor": "C1"}, + }) + errors, out = self.t.check() + self.assertEqual(errors, 2, out) + self.assertIn("cycles", out) + + def test_dead_end_is_an_error(self): + self.t.write_ledger(retired={ + "D1": {"claims": [], "successor": "OFnope99"}, + }) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("dead-ends", out) + self.assertIn("OFnope99", out) + + def test_hint_key_must_be_in_island_space(self): + self.t.write_ledger(hints={"AX01": "OGFL99"}) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("not in an island id space", out) + + def test_hint_key_may_be_absent_island_id(self): + # Released / never-shipped island-catalog ids are valid hint keys. + self.t.write_ledger(hints={"GFXX99": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_hint_key_must_not_be_retired_too(self): + self.t.write_ledger(retired={"GFXX99": {"claims": [], "successor": "AX01"}}, + hints={"GFXX99": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("never both", out) + + def test_live_hint_key_with_non_island_declarer_is_an_error(self): + self.t.write_preset("VendorA", preset( + "GPLA @base", filament_id="GFZZ01", instantiation=False, + filament_vendor="Generic", filament_type="PLA")) + self.t.write_preset("VendorA", preset( + "GPLA @P1", inherits="GPLA @base", + compatible_printers=["P1 0.4 nozzle"])) + rc, _out = self.t.update_snapshot(allow_shared_catalog=True) + self.assertEqual(rc, 0) + self.t.write_ledger(hints={"GFZZ01": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("re-mint those declarers first", out) + + def test_island_hint_ok_and_value_must_chain_live(self): + self.t.add_vendor("BBL", [ + preset("BPLA @base", filament_id="GFB01", instantiation=False), + preset("BPLA @X1C", inherits="BPLA @base", + compatible_printers=["X1C 0.4 nozzle"]), + ]) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.t.write_ledger(hints={"GFB01": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + # A hint chain ending on a null retirement is dead for the runtime. + self.t.write_ledger(retired={"R9": {"claims": [], "successor": None}}, + hints={"GFB01": "R9"}) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("chain-terminate at a live tree id", out) + + +# --------------------------------------------------------------------------- +# successor mode rule + ledger schema migration +# --------------------------------------------------------------------------- + +class TestSuccessorMode(unittest.TestCase): + def test_majority_wins(self): + claim_ids = {"V/A": {"ID1"}, "V/B": {"ID1"}, "V/C": {"ID2"}} + succ, counts = afi.successor_by_mode(["V/A", "V/B", "V/C"], claim_ids) + self.assertEqual(succ, "ID1") + self.assertEqual(counts, {"ID1": 2, "ID2": 1}) + + def test_tie_breaks_lexicographically(self): + claim_ids = {"V/A": {"IDB"}, "V/B": {"IDA"}} + succ, counts = afi.successor_by_mode(["V/A", "V/B"], claim_ids) + self.assertEqual(succ, "IDA") + self.assertEqual(counts, {"IDA": 1, "IDB": 1}) + + def test_no_surviving_family_means_null(self): + self.assertEqual(afi.successor_by_mode(["V/GONE"], {}), (None, {})) + self.assertEqual(afi.successor_by_mode([], {"V/A": {"ID1"}}), (None, {})) + + +class TestLedgerMigration(SyntheticTreeCase): + def test_backfill_successors_via_mode_rule(self): + analysis = afi.analyze_tree(self.t.profiles) + claim_ids = afi.claim_effective_ids(analysis) + old = { + "X9": ["VendorA/APLA"], # family lives on + "Y9": ["VendorA/GONE"], # family died + "Z9": {"claims": ["kept"], "successor": "AX01"}, # already migrated + } + migrated = afi.migrate_retired_entries(old, claim_ids) + self.assertEqual(migrated["X9"], + {"claims": ["VendorA/APLA"], "successor": "AX01"}) + self.assertEqual(migrated["Y9"], + {"claims": ["VendorA/GONE"], "successor": None}) + self.assertEqual(migrated["Z9"], old["Z9"]) + + # --------------------------------------------------------------------------- # --update-snapshot # --------------------------------------------------------------------------- @@ -448,30 +807,117 @@ class TestUpdateSnapshot(SyntheticTreeCase): self.assertEqual(snap["ids"]["AX01"], ["VendorA/APLA"]) self.assertEqual(snap["ids"]["OGFL99"], ["OrcaFilamentLibrary/Generic PLA", "VendorA/Generic PLA"]) + self.assertEqual(snap["triples"]["AX01"], [["AVendor", "PLA", "APLA"]]) + self.assertEqual(snap["triples"]["OGFL99"], [["Generic", "PLA", "fdm_pla"]]) + self.assertEqual(snap["triple_exceptions"], []) - def test_vanished_id_is_retired(self): + def test_vanished_island_id_released_with_hint_not_retired(self): + self.t.write_preset("VendorA", preset( + "GPLA @base", filament_id="GFZZ01", instantiation=False, + filament_vendor="Generic", filament_type="PLA")) + self.t.write_preset("VendorA", preset( + "GPLA @P1", inherits="GPLA @base", + compatible_printers=["P1 0.4 nozzle"])) + rc, _out = self.t.update_snapshot(allow_shared_catalog=True) + self.assertEqual(rc, 0) + # The family re-mints away from the island id: released, not retired. + self.t.write_preset("VendorA", preset( + "GPLA @base", filament_id="OFaaaaaa", instantiation=False, + filament_vendor="Generic", filament_type="PLA"), register=False) + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("released to the BBL island space", out) + ledger = afi.load_ledger(self.t.retired) + self.assertNotIn("GFZZ01", ledger["retired"]) + self.assertEqual(ledger["hints"].get("GFZZ01"), "OFaaaaaa") + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + # The island may legitimately (re)ship a released id later. + self.t.add_vendor("BBL", [ + preset("BPLA @base", filament_id="GFZZ01", instantiation=False), + preset("BPLA @X1C", inherits="BPLA @base", + compatible_printers=["X1C 0.4 nozzle"]), + ]) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_vanished_id_is_retired_with_null_successor(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"]}) + retired = load_json_file(self.t.retired)["retired"] + self.assertEqual(retired, + {"AX01": {"claims": ["VendorA/APLA"], "successor": None}}) snap = load_json_file(self.t.snapshot) self.assertNotIn("AX01", snap["ids"]) + self.assertNotIn("AX01", snap["triples"]) # 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) + self.assertEqual(retired, load_json_file(self.t.retired)["retired"]) # ... and a retired id may never be minted again - self.assertNotIn(afi.mint_filament_id("VendorA", "APLA", - set(retired["retired"])), retired["retired"]) + self.assertNotIn(afi.mint_filament_id("AVendor", "PLA", "APLA", + set(retired)), retired) + + def test_vanished_id_successor_follows_surviving_family(self): + # The family lives on under a new id (a re-mint): the mode rule finds it. + self.t.write_preset("VendorA", preset("APLA @base", filament_id="AXNEW", + instantiation=False, + filament_vendor="AVendor", + filament_type="PLA"), + register=False) + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + retired = load_json_file(self.t.retired)["retired"] + self.assertEqual(retired["AX01"], + {"claims": ["VendorA/APLA"], "successor": "AXNEW"}) + + def test_multi_candidate_retirement_warns_and_ties_break(self): + self.t.write_preset("VendorA", preset("SHRD @base", filament_id="SH01", + instantiation=False, + filament_vendor="SV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("CH1 @P1", inherits="SHRD @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("CH2 @P1", inherits="SHRD @base", + compatible_printers=["P1"])) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + # Split the two families onto their own roots and drop the shared id. + self.t.write_preset("VendorA", preset("CH1 @base", filament_id="SA01", + instantiation=False, + filament_vendor="SV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("CH2 @base", filament_id="SB01", + instantiation=False, + filament_vendor="SV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("CH1 @P1", inherits="CH1 @base", + compatible_printers=["P1"]), + register=False) + self.t.write_preset("VendorA", preset("CH2 @P1", inherits="CH2 @base", + compatible_printers=["P1"]), + register=False) + self.t.remove_preset("VendorA", "SHRD @base") + rc, out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.assertIn("[WARNING]", out) + self.assertIn("SB01", out) # the losing candidate is named + retired = load_json_file(self.t.retired)["retired"] + self.assertEqual(retired["SH01"]["successor"], "SA01") + self.assertEqual(retired["SH01"]["claims"], + ["VendorA/CH1", "VendorA/CH2"]) def test_refuses_new_reserved_namespace_claims(self): self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", - instantiation=False)) + instantiation=False, + filament_vendor="CV", + filament_type="PLA")) self.t.write_preset("VendorA", preset("CNEW @P1", inherits="CNEW @base", compatible_printers=["P1"])) with open(self.t.snapshot, "rb") as f: @@ -487,6 +933,122 @@ class TestUpdateSnapshot(SyntheticTreeCase): self.assertEqual(snap["ids"]["GFX99"], ["VendorA/CNEW"]) +class TestForgetNeverShipped(SyntheticTreeCase): + def forget_file(self, ids): + path = os.path.join(self.t.dir, "forget.json") + with open(path, "w", encoding="utf-8") as f: + json.dump(ids, f) + return path + + def test_refuses_when_listed_id_is_live(self): + with open(self.t.snapshot, "rb") as f: + before = f.read() + rc, out = self.t.update_snapshot(forget_path=self.forget_file(["AX01"])) + self.assertEqual(rc, 1) + self.assertIn("still in the tree", out) + with open(self.t.snapshot, "rb") as f: + self.assertEqual(f.read(), before) + + def test_forgotten_id_is_not_retired(self): + self.t.write_preset("VendorA", preset("ZN @base", filament_id="Y999", + instantiation=False, + filament_vendor="ZV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("ZN @P1", inherits="ZN @base", + compatible_printers=["P1"])) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + self.t.remove_preset("VendorA", "ZN @base") + self.t.remove_preset("VendorA", "ZN @P1") + rc, out = self.t.update_snapshot(forget_path=self.forget_file(["Y999"])) + self.assertEqual(rc, 0) + self.assertIn("forgotten (never shipped)", out) + self.assertNotIn("Y999", load_json_file(self.t.retired)["retired"]) + self.assertNotIn("Y999", load_json_file(self.t.snapshot)["ids"]) + + def test_splices_chains_through_forgotten_id(self): + self.t.write_preset("VendorA", preset("ZN @base", filament_id="Y999", + instantiation=False, + filament_vendor="ZV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("ZN @P1", inherits="ZN @base", + compatible_printers=["P1"])) + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + # A shipped id already forwards to Y999, which turns out never shipped. + self.t.write_ledger(retired={ + "OLD1": {"claims": ["VendorA/ZN"], "successor": "Y999"}}) + # The family re-mints to NEWZ and Y999 vanishes. + self.t.write_preset("VendorA", preset("ZN @base", filament_id="NEWZ", + instantiation=False, + filament_vendor="ZV", + filament_type="PLA"), + register=False) + rc, out = self.t.update_snapshot(forget_path=self.forget_file(["Y999"])) + self.assertEqual(rc, 0) + self.assertIn("spliced succession", out) + retired = load_json_file(self.t.retired)["retired"] + self.assertNotIn("Y999", retired) + self.assertEqual(retired["OLD1"], + {"claims": ["VendorA/ZN"], "successor": "NEWZ"}) + + +# --------------------------------------------------------------------------- +# --add-hint +# --------------------------------------------------------------------------- + +class TestAddHint(SyntheticTreeCase): + def add_bbl(self): + self.t.add_vendor("BBL", [ + preset("BPLA @base", filament_id="GFB01", instantiation=False), + preset("BPLA @X1C", inherits="BPLA @base", + compatible_printers=["X1C 0.4 nozzle"]), + ]) + rc, _out = self.t.update_snapshot() + assert rc == 0 + + def test_adds_island_hint(self): + self.add_bbl() + rc, out = self.t.add_hint(["GFB01=AX01"]) + self.assertEqual(rc, 0, out) + self.assertEqual(load_json_file(self.t.retired)["hints"], + {"GFB01": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_rejects_non_island_old(self): + rc, out = self.t.add_hint(["AX01=OGFL99"]) + self.assertEqual(rc, 1) + self.assertIn("not in an island id space", out) + self.assertEqual(afi.load_ledger(self.t.retired)["hints"], {}) + + def test_accepts_absent_island_old(self): + # Island catalogs own ids Orca never shipped (or has released). + rc, out = self.t.add_hint(["GFXX99=AX01"]) + self.assertEqual(rc, 0, out) + self.assertEqual(load_json_file(self.t.retired)["hints"], + {"GFXX99": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_rejects_retired_old(self): + self.t.write_ledger(retired={"ROLD": {"claims": [], "successor": None}}) + rc, out = self.t.add_hint(["ROLD=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("is retired", out) + + def test_rejects_dead_target(self): + self.add_bbl() + rc, out = self.t.add_hint(["GFB01=OFnope99"]) + self.assertEqual(rc, 1) + self.assertIn("not a live tree id", out) + + def test_rejects_malformed_pair(self): + rc, out = self.t.add_hint(["GFB01"]) + self.assertEqual(rc, 1) + self.assertIn('expects "OLD=NEW"', out) + + # --------------------------------------------------------------------------- # default run: mint + insert # --------------------------------------------------------------------------- @@ -498,21 +1060,25 @@ class TestAssign(SyntheticTreeCase): 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 @base", instantiation=False, + filament_vendor="FV", + filament_type="PLA")) 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"])) + self.t.write_preset("VendorA", preset("GNEW @P1", compatible_printers=["P1"], + filament_vendor="GV", + filament_type="PETG")) 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")) + afi.generate_filament_id("FV", "PLA", "FNEW")) member = load_json_file(self.t.preset_path("VendorA", "GNEW @P1")) self.assertEqual(member["filament_id"], - afi.generate_filament_id("VendorA", "GNEW")) + afi.generate_filament_id("GV", "PETG", "GNEW")) # variants themselves never get the key child = load_json_file(self.t.preset_path("VendorA", "FNEW @P1")) self.assertNotIn("filament_id", child) @@ -521,8 +1087,36 @@ class TestAssign(SyntheticTreeCase): self.assertEqual((changed, errors), (0, 0)) self.assertIn("nothing to do", out) + def test_refuses_family_with_incomplete_triple(self): + self.t.write_preset("VendorA", preset("ENEW @base", instantiation=False)) + self.t.write_preset("VendorA", preset("ENEW @P1", inherits="ENEW @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("resolves empty filament_vendor and filament_type", out) + self.assertIn("mint key needs both", out) + + def test_refuses_family_with_divergent_root_fields(self): + self.t.write_preset("VendorA", preset("HNEW @base1", instantiation=False, + filament_vendor="HV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("HNEW @base2", instantiation=False, + filament_vendor="HV", + filament_type="PETG")) + self.t.write_preset("VendorA", preset("HNEW @P1", inherits="HNEW @base1", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("HNEW @P2", inherits="HNEW @base2", + compatible_printers=["P2"])) + changed, errors, out = self.t.assign() + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("divergent (filament_vendor, filament_type)", 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("shared_base", instantiation=False, + filament_vendor="SV", + filament_type="PLA")) 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", @@ -533,6 +1127,10 @@ class TestAssign(SyntheticTreeCase): self.assertIn("shared with famil", out) +# --------------------------------------------------------------------------- +# byte-preserving profile edits +# --------------------------------------------------------------------------- + class TestInsertEditing(unittest.TestCase): CRLF_TEXT = ( '{\r\n' @@ -546,6 +1144,17 @@ class TestInsertEditing(unittest.TestCase): '\t]\r\n' '}\r\n' ) + CRLF_WITH_ID = ( + '{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "JNEW @base",\r\n' + '\t"filament_id": "OFold123",\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") @@ -585,6 +1194,192 @@ class TestInsertEditing(unittest.TestCase): raw.replace(b'\t"filament_id": "OFabc123",\r\n', b"", 1), self.CRLF_TEXT.encode("utf-8")) + def test_replace_value_preserves_every_other_byte(self): + text, n = afi.replace_filament_id_value(self.CRLF_WITH_ID, + "OFold123", "OFnew456") + self.assertEqual(n, 1) + self.assertEqual(json.loads(text)["filament_id"], "OFnew456") + self.assertEqual(text, self.CRLF_WITH_ID.replace('"OFold123"', '"OFnew456"')) + + def test_replace_value_requires_exact_old_value(self): + _text, n = afi.replace_filament_id_value(self.CRLF_WITH_ID, + "OFwrong1", "OFnew456") + self.assertEqual(n, 0) + + def test_rewrite_filament_id_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_WITH_ID.encode("utf-8")) + afi.rewrite_filament_id(path, "OFold123", "OFnew456") + with open(path, "rb") as f: + raw = f.read() + self.assertEqual(raw, + self.CRLF_WITH_ID.replace('"OFold123"', '"OFnew456"') + .encode("utf-8")) + with self.assertRaises(RuntimeError): + afi.rewrite_filament_id(path, "OFold123", "OFxxx999") # stale old id + + def test_delete_line_with_trailing_comma(self): + text, n = afi.delete_filament_id_line(self.CRLF_WITH_ID, "OFold123") + self.assertEqual(n, 1) + self.assertNotIn("filament_id", json.loads(text)) + self.assertEqual(text, self.CRLF_WITH_ID.replace( + '\t"filament_id": "OFold123",\r\n', "", 1)) + + def test_delete_last_property_line(self): + lf_text = ('{\n "name": "K @base",\n "instantiation": "false",\n' + ' "filament_id": "OFold123"\n}\n') + text, n = afi.delete_filament_id_line(lf_text, "OFold123") + self.assertEqual(n, 1) + data = json.loads(text) + self.assertNotIn("filament_id", data) + self.assertEqual(data["instantiation"], "false") + + +# --------------------------------------------------------------------------- +# --remint +# --------------------------------------------------------------------------- + +class TestRemint(SyntheticTreeCase): + TRIPLE = ("AVendor", "PLA", "APLA") + + def test_rewrites_mismatching_declaration(self): + want = afi.generate_filament_id(*self.TRIPLE) + changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + self.assertIn('"AX01" -> "%s"' % want, out) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], want) + # OFL was not part of the run + ofl_root = load_json_file(self.t.preset_path(OFL, "fdm_pla")) + self.assertEqual(ofl_root["filament_id"], "OGFL99") + # idempotent: a second run over the same vendor rewrites nothing + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (0, 0)) + + def test_same_triple_converges_within_run(self): + self.t.add_vendor("VendorB", [ + preset("APLA @Bbase", filament_id="BX01", instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), + preset("APLA @PB", inherits="APLA @Bbase", + compatible_printers=["PB 0.4 nozzle"]), + ]) + want = afi.generate_filament_id(*self.TRIPLE) + changed, errors, _out = self.t.remint(["VendorA", "VendorB"]) + self.assertEqual(errors, 0) + self.assertEqual(changed, 2) + a = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + b = load_json_file(self.t.preset_path("VendorB", "APLA @Bbase")) + self.assertEqual(a["filament_id"], want) + self.assertEqual(b["filament_id"], want) + + def test_same_triple_converges_with_existing_tree_id(self): + # Another bundle already carries the conforming id for the same triple: + # reuse is required, not blocked. + want = afi.generate_filament_id(*self.TRIPLE) + self.t.add_vendor("VendorB", [ + preset("APLA @Bbase", filament_id=want, instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), + ]) + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + a = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(a["filament_id"], want) + + def test_blocked_by_retired_id(self): + want0 = afi.generate_filament_id(*self.TRIPLE) + self.t.write_ledger(retired={want0: {"claims": [], "successor": None}}) + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id(*self.TRIPLE, salt=1)) + + def test_blocked_by_hint_key(self): + want0 = afi.generate_filament_id(*self.TRIPLE) + self.t.write_ledger(hints={want0: "AX01"}) + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id(*self.TRIPLE, salt=1)) + + def test_blocked_by_other_triple_occurrence(self): + want0 = afi.generate_filament_id(*self.TRIPLE) + self.t.add_vendor("VendorB", [ + preset("BPLA @base", filament_id=want0, instantiation=False, + filament_vendor="BV", filament_type="PETG"), + ]) + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id(*self.TRIPLE, salt=1)) + + def test_bbl_is_forbidden(self): + changed, errors, out = self.t.remint(["BBL"]) + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("forbidden", out) + + +# --------------------------------------------------------------------------- +# --drop-redundant-ids +# --------------------------------------------------------------------------- + +class TestDropRedundantIds(SyntheticTreeCase): + def test_drops_only_ofl_riding_same_base_name_declarations(self): + # Redundant: same base name, rides the OFL generic, re-declares its id. + self.t.write_preset("VendorA", preset("Generic PLA @P2", + inherits="Generic PLA @System", + compatible_printers=["P2"], + filament_id="OGFL99")) + # Renamed rider: not dropped (a repoint worksheet decision, not a drop). + self.t.write_preset("VendorA", preset("Tuned PLA @P3", + inherits="Generic PLA @System", + compatible_printers=["P3"], + filament_id="OGFL99")) + dropped, errors, out = self.t.drop_redundant("VendorA") + self.assertEqual(errors, 0, out) + self.assertEqual(dropped, 1) + self.assertIn('dropped filament_id "OGFL99"', out) + self.assertIn('rides OFL "Generic PLA @System"', out) + gone = load_json_file(self.t.preset_path("VendorA", "Generic PLA @P2")) + self.assertNotIn("filament_id", gone) + kept = load_json_file(self.t.preset_path("VendorA", "Tuned PLA @P3")) + self.assertEqual(kept["filament_id"], "OGFL99") + # vendor-rooted families are untouched + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], "AX01") + + def test_bbl_is_forbidden(self): + dropped, errors, out = self.t.drop_redundant("BBL") + self.assertEqual(dropped, 0) + self.assertGreater(errors, 0) + self.assertIn("forbidden", out) + + +# --------------------------------------------------------------------------- +# --mint CLI +# --------------------------------------------------------------------------- + +class TestMintCli(unittest.TestCase): + def test_prints_an_of_id(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.main(["--mint", "Polymaker/PLA/PolyLite PLA"]) + self.assertEqual(rc, 0) + self.assertRegex(buf.getvalue().strip(), r"^OF[0-9A-Za-z]{6}$") + + def test_requires_exactly_three_parts(self): + with self.assertRaises(SystemExit), \ + contextlib.redirect_stderr(io.StringIO()): + afi.main(["--mint", "Vendor/Family"]) + # --------------------------------------------------------------------------- # the real tree @@ -610,9 +1405,11 @@ class TestRealTree(unittest.TestCase): class TestReviewFixes(SyntheticTreeCase): def test_update_snapshot_refuses_retired_id_reuse(self): - fid = afi.generate_filament_id("VendorA", "LONER") + fid = afi.generate_filament_id("LV", "PLA", "LONER") self.t.write_preset("VendorA", preset("LONER @base", filament_id=fid, - instantiation=False)) + instantiation=False, + filament_vendor="LV", + filament_type="PLA")) self.t.write_preset("VendorA", preset("LONER @P1", inherits="LONER @base", compatible_printers=["P1 0.4 nozzle"])) rc, _ = self.t.update_snapshot() @@ -624,7 +1421,9 @@ class TestReviewFixes(SyntheticTreeCase): 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)) + instantiation=False, + filament_vendor="LV", + filament_type="PLA")) self.t.write_preset("VendorA", preset("LONER @P1", inherits="LONER @base", compatible_printers=["P1 0.4 nozzle"])) rc, out = self.t.update_snapshot() @@ -633,12 +1432,14 @@ class TestReviewFixes(SyntheticTreeCase): 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") + # An OFL family 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("Generic", "PLA", "Generic PLA Matte") self.t.write_preset(OFL, preset("Generic PLA Matte @base", filament_id=fid, - instantiation=False)) + instantiation=False, + filament_vendor="Generic", + filament_type="PLA")) self.t.write_preset(OFL, preset("Generic PLA Matte @System", inherits="Generic PLA Matte @base", compatible_printers=[])) @@ -648,7 +1449,7 @@ class TestReviewFixes(SyntheticTreeCase): 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.assertNotIn("does not match the mint", out) self.assertIn("not sanctioned", out) self.assertEqual(errors, 1, out) # After sanctioning the claim the tree is fully green again. @@ -659,10 +1460,12 @@ class TestReviewFixes(SyntheticTreeCase): def test_check7c_prints_expected_mint(self): self.t.write_preset("VendorA", preset("Orphan PLA @P1", - compatible_printers=["P1 0.4 nozzle"])) + compatible_printers=["P1 0.4 nozzle"], + filament_vendor="OV", + filament_type="PLA")) errors, out = self.t.check() self.assertGreater(errors, 0) - self.assertIn(afi.generate_filament_id("VendorA", "Orphan PLA"), out) + self.assertIn(afi.generate_filament_id("OV", "PLA", "Orphan PLA"), out) if __name__ == "__main__": diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index bc728f62e5..c3a44c25f1 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -555,6 +555,60 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::str return std::string(out, 16); } +std::string follow_filament_id_succession(const std::string& id, const std::map& forwards) +{ + auto it = forwards.find(id); + if (it == forwards.end()) + return std::string(); + std::set visited { id }; + std::string current = id; + while (it != forwards.end() && visited.insert(it->second).second) { + current = it->second; + it = forwards.find(current); + } + // it == end(): current is the live end of the chain; otherwise the ledger is + // cyclic and current is the last id reached before a repeat. + return current; +} + +const std::map& filament_id_succession_map() +{ + // Loaded once; C++11 magic-static initialization makes this thread-safe. + // Succession is a best-effort miss-path fallback, so a missing or corrupt + // ledger is not an error for the client - it just yields an empty map. + static const std::map forwards = []() { + std::map map; + const std::string path = Slic3r::resources_dir() + "/profiles/retired_filament_ids.json"; + boost::nowide::ifstream file(path.c_str()); + if (!file.is_open()) { + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": cannot open " << path; + return map; + } + try { + nlohmann::json ledger; + file >> ledger; + if (ledger.contains("retired") && ledger["retired"].is_object()) + for (auto& [old_id, entry] : ledger["retired"].items()) + if (entry.is_object() && entry.contains("successor") && entry["successor"].is_string()) + map[old_id] = entry["successor"].get(); + if (ledger.contains("hints") && ledger["hints"].is_object()) + for (auto& [old_id, target] : ledger["hints"].items()) + if (target.is_string()) + map[old_id] = target.get(); + } catch (...) { + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": failed to parse " << path; + map.clear(); + } + return map; + }(); + return forwards; +} + +std::string resolve_filament_id_succession(const std::string& id) +{ + return follow_filament_id_succession(id, filament_id_succession_map()); +} + std::string Preset::get_iot_type_string(Preset::Type type) { switch (type) { diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index bbbdc6c5ff..e84f56b107 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -100,6 +100,23 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::string& type, const std::string& name); +// Succession forwarding for retired/renamed filament_ids, backed by the shipped +// ledger resources/profiles/retired_filament_ids.json. Consulted on a filament_id +// resolution miss only, so live ids always resolve natively first. +// +// Pure chain walk over `forwards` (old id -> successor). Returns the final id of the +// chain, or an empty string when `id` has no entry. Cycle-guarded: on a malformed +// cyclic ledger it stops at the last id reached before any repeat (a self-loop +// returns `id` itself). +std::string follow_filament_id_succession(const std::string& id, + const std::map& forwards); +// Forwarding map loaded once (thread-safe) from the ledger, merging +// "retired" {id -> non-null successor} and "hints" {island-owned id -> live id}. +// A missing or corrupt file yields an empty map. +const std::map& filament_id_succession_map(); +// Convenience: follow_filament_id_succession(id, filament_id_succession_map()). +std::string resolve_filament_id_succession(const std::string& id); + enum ConfigFileType { CONFIG_FILE_TYPE_UNKNOWN, diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 399443a706..a0f687c26b 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -729,6 +729,12 @@ std::optional PresetBundle::get_filament_by_filament_id(const } } } + // Miss: a retired/renamed id may forward to a live successor through the shipped + // succession ledger. resolve() returns a chain-final id, so the retry below cannot + // recurse further (a malformed cyclic ledger yields a non-final id, rejected here). + const std::string successor = resolve_filament_id_succession(filament_id); + if (!successor.empty() && resolve_filament_id_succession(successor).empty()) + return get_filament_by_filament_id(successor, printer_name); return std::nullopt; } @@ -3150,6 +3156,15 @@ 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()) { + // Retired/renamed ids forward to a live successor through the shipped succession ledger. + const std::string successor = resolve_filament_id_succession(filament_id); + if (!successor.empty()) { + iter = std::find_if(filaments.begin(), filaments.end(), + [this, &successor](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == successor; }); + warn_ambiguous_filament_id_match(filaments, iter, successor); + } + } 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); @@ -3253,6 +3268,16 @@ unsigned int PresetBundle::sync_ams_list(std::vector> filament_list = filaments.get_filament_presets(); std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); - for (const Preset *preset : filament_list.find(setting_id)->second) { + auto filament_iter = filament_list.find(setting_id); + if (filament_iter == filament_list.end()) + return is_equation; + + for (const Preset *preset : filament_iter->second) { if (tag_uid == "0" || (tag_uid.size() == 16 && tag_uid.substr(12, 2) == "01")) continue; if (preset && !preset->is_user()) continue; ConfigOption * printer_opt = const_cast(preset)->config.option("compatible_printers"); diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index 8ed0305369..e568078851 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -59,7 +59,7 @@ int get_colume_idx(CaliColumnType type, MachineObject* obj) return type; } -static wxString get_preset_name_by_filament_id(std::string filament_id) +static wxString get_preset_name_by_filament_id(std::string filament_id, bool follow_succession = true) { auto preset_bundle = wxGetApp().preset_bundle; auto collection = &preset_bundle->filaments; @@ -93,6 +93,12 @@ static wxString get_preset_name_by_filament_id(std::string filament_id) } } } + if (preset_name.empty() && follow_succession) { + // Retired/renamed ids forward to a live successor through the shipped succession ledger. + const std::string successor = resolve_filament_id_succession(filament_id); + if (!successor.empty()) + preset_name = get_preset_name_by_filament_id(successor, false); + } return preset_name; } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 9d7afd13b9..963ecca4e5 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2540,14 +2540,22 @@ std::string MachineObject::setting_id_to_type(std::string setting_id, std::strin std::string type; PresetBundle* preset_bundle = GUI::wxGetApp().preset_bundle; if (preset_bundle) { - for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - - if (it->filament_id.compare(setting_id) == 0 && it->is_system) { - std::string display_filament_type; - it->config.get_filament_type(display_filament_type); - type = display_filament_type; - break; + auto lookup_system_type = [preset_bundle](const std::string &id) { + std::string display_filament_type; + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + if (it->filament_id.compare(id) == 0 && it->is_system) { + it->config.get_filament_type(display_filament_type); + break; + } } + return display_filament_type; + }; + type = lookup_system_type(setting_id); + if (type.empty()) { + // Retired/renamed ids forward to a live successor through the shipped succession ledger. + const std::string successor = resolve_filament_id_succession(setting_id); + if (!successor.empty()) + type = lookup_system_type(successor); } } @@ -5249,7 +5257,10 @@ void MachineObject::update_filament_list() for (auto it = filament_list.begin(); it != filament_list.end(); it++) { if (m_filament_list.find(it->first) != m_filament_list.end()) { - assert(it->first.size() == 8 && it->first[0] == 'P'); + // User roots may legitimately carry adopted system-shaped ids (GF*/OF*/P-hex + // system), so a non-'P' id here is expected, not an invariant violation. + if (it->first.size() != 8 || it->first[0] != 'P') + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": user-root filament_id is not user-shaped: " << it->first; if (it->second.first != m_filament_list[it->first].first) { BOOST_LOG_TRIVIAL(info) << "old min temp is not equal to new min temp and filament id: " << it->first; @@ -5311,6 +5322,17 @@ void MachineObject::update_printer_preset_name() void MachineObject::check_ams_filament_valid() { PresetBundle * preset_bundle = Slic3r::GUI::wxGetApp().preset_bundle; + // A tray id carried by ANY system filament preset is not a dangling user-preset id + // (ten shipped P-hex system ids pass the 'P' shape gates below), so the destructive + // tray-wipe / temp-rewrite handling must never fire for it. + auto is_system_filament_id = [preset_bundle](const std::string &id) { + if (!preset_bundle) + return false; + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) + if (it->is_system && it->filament_id == id) + return true; + return false; + }; auto printer_model = DevPrinterConfigUtil::get_printer_display_name(this->printer_type); std::map> need_checked_filament_id; for (auto &ams_pair : m_fila_system->GetAmsList()) { @@ -5332,6 +5354,8 @@ void MachineObject::check_ams_filament_valid() auto &checked_filament = data.checked_filament; for (const auto &[slot_id, curr_tray] : ams->GetTrays()) { + if (curr_tray->setting_id.size() == 8 && curr_tray->setting_id[0] == 'P' && is_system_filament_id(curr_tray->setting_id)) + continue; if (curr_tray->setting_id.size() == 8 && curr_tray->setting_id[0] == 'P' && filament_list.find(curr_tray->setting_id) == filament_list.end()) { if (checked_filament.find(curr_tray->setting_id) != checked_filament.end()) { need_checked_filament_id[nozzle_diameter_str].insert(curr_tray->setting_id); @@ -5392,6 +5416,8 @@ void MachineObject::check_ams_filament_valid() auto &data = m_nozzle_filament_data[nozzle_diameter_str]; auto &checked_filament = data.checked_filament; auto &filament_list = data.filament_list; + if (vt_tray.setting_id.size() == 8 && vt_tray.setting_id[0] == 'P' && is_system_filament_id(vt_tray.setting_id)) + continue; if (vt_tray.setting_id.size() == 8 && vt_tray.setting_id[0] == 'P' && filament_list.find(vt_tray.setting_id) == filament_list.end()) { if (checked_filament.find(vt_tray.setting_id) != checked_filament.end()) { need_checked_filament_id[nozzle_diameter_str].insert(vt_tray.setting_id); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 6475ae1c88..2a512497dc 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -537,6 +537,13 @@ bool PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) } auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id, this](auto &f) { return f.is_compatible && m_collection->get_preset_base(f) == &f && f.filament_id == filament_id; }); + if (iter == filaments.end()) { + // Retired/renamed ids forward to a live successor through the shipped succession ledger. + const std::string successor = resolve_filament_id_succession(filament_id); + if (!successor.empty()) + iter = std::find_if(filaments.begin(), filaments.end(), + [&successor, this](auto &f) { return f.is_compatible && m_collection->get_preset_base(f) == &f && f.filament_id == successor; }); + } if (iter == filaments.end()) { auto filament_type = tray.opt_string("filament_type", 0u); if (!filament_type.empty()) { diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index f1d892134b..ecb23c926c 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include namespace { @@ -609,51 +610,70 @@ std::string MoonrakerPrinterAgent::map_filament_type_to_generic_id(const std::st { const std::string upper = trim_and_upper(filament_type); - // Map to OrcaFilamentLibrary preset IDs (compatible with all printers) - // Source: resources/profiles/OrcaFilamentLibrary/filament/ + // Normalize reported material names (trimmed, uppercased) to an OrcaFilamentLibrary + // generic family. The family's filament_id is resolved from the loaded system presets + // below rather than hardcoded, so profile id re-mints never require touching this table. + // scripts/test_moonraker_lane_data.py parses this initializer; keep the {"A", "B"} format. + static const std::map type_to_ofl_family = { + // PLA variants + {"PLA", "PLA"}, + {"PLA-CF", "PLA-CF"}, + {"PLA SILK", "PLA Silk"}, + {"PLA-SILK", "PLA Silk"}, + {"PLA HIGH SPEED", "PLA High Speed"}, + {"PLA-HS", "PLA High Speed"}, + {"PLA HS", "PLA High Speed"}, - // PLA variants - if (upper == "PLA") return "OGFL99"; - if (upper == "PLA-CF") return "OGFL98"; - if (upper == "PLA SILK" || upper == "PLA-SILK") return "OGFL96"; - if (upper == "PLA HIGH SPEED" || upper == "PLA-HS" || upper == "PLA HS") return "OGFL95"; + // ABS/ASA variants + {"ABS", "ABS"}, + {"ASA", "ASA"}, - // ABS/ASA variants - if (upper == "ABS") return "OGFB99"; - if (upper == "ASA") return "OGFB98"; + // PETG/PET variants + {"PETG", "PETG"}, + {"PET", "PETG"}, + {"PCTG", "PCTG"}, - // PETG/PET variants - if (upper == "PETG" || upper == "PET") return "OGFG99"; - if (upper == "PCTG") return "OGFG97"; + // PA/Nylon variants + {"PA", "PA"}, + {"NYLON", "PA"}, + {"PA-CF", "PA-CF"}, + {"PPA", "PPA-CF"}, + {"PPA-CF", "PPA-CF"}, + {"PPA-GF", "PPA-GF"}, - // PA/Nylon variants - if (upper == "PA" || upper == "NYLON") return "OGFN99"; - if (upper == "PA-CF") return "OGFN98"; - if (upper == "PPA" || upper == "PPA-CF") return "OGFN97"; - if (upper == "PPA-GF") return "OGFN96"; + // PC variants + {"PC", "PC"}, - // PC variants - if (upper == "PC") return "OGFC99"; + // PP/PE variants + {"PE", "PE"}, + {"PP", "PP"}, - // PP/PE variants - if (upper == "PE") return "OGFP99"; - if (upper == "PP") return "OGFP97"; + // Support materials + {"PVA", "PVA"}, + {"HIPS", "HIPS"}, + {"BVOH", "BVOH"}, - // Support materials - if (upper == "PVA") return "OGFS99"; - if (upper == "HIPS") return "OGFS98"; - if (upper == "BVOH") return "OGFS97"; + // TPU variants + {"TPU", "TPU"}, - // TPU variants - if (upper == "TPU") return "OGFU99"; + // Other materials + {"EVA", "EVA"}, + {"PHA", "PHA"}, + {"COPE", "CoPE"}, + {"SBS", "SBS"}, + }; - // Other materials - if (upper == "EVA") return "OGFR99"; - if (upper == "PHA") return "OGFR98"; - if (upper == "COPE") return "OGFLC99"; - if (upper == "SBS") return "OFLSBS99"; + auto it = type_to_ofl_family.find(upper); + if (it == type_to_ofl_family.end()) + return UNKNOWN_FILAMENT_ID; - // Unknown material + if (auto* bundle = GUI::wxGetApp().preset_bundle) { + const Preset* preset = bundle->filaments.find_preset("Generic " + it->second + " @System"); + if (preset != nullptr && preset->is_system && !preset->filament_id.empty()) + return preset->filament_id; + } + + // Unknown material, or no loaded preset data to resolve against return UNKNOWN_FILAMENT_ID; } diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index d5e6eb958e..328ffda8da 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -14,6 +14,7 @@ add_executable(${_TEST_NAME}_tests test_config.cpp test_preset_bundle_loading.cpp test_preset_setting_id.cpp + test_filament_id_succession.cpp test_elephant_foot_compensation.cpp test_geometry.cpp test_placeholder_parser.cpp diff --git a/tests/libslic3r/test_filament_id_succession.cpp b/tests/libslic3r/test_filament_id_succession.cpp new file mode 100644 index 0000000000..36268277f8 --- /dev/null +++ b/tests/libslic3r/test_filament_id_succession.cpp @@ -0,0 +1,61 @@ +#include + +#include "libslic3r/Preset.hpp" + +using namespace Slic3r; + +// Pure-function coverage of the succession chain walk (follow_filament_id_succession). +// The ledger-file loader (filament_id_succession_map) is deliberately untested here so +// the test carries no resources-dir dependency. +TEST_CASE("filament_id succession follows forwarding chains", "[Preset][filament_id]") { + SECTION("empty map returns empty") { + const std::map empty; + CHECK(follow_filament_id_succession("OFabc123", empty).empty()); + CHECK(follow_filament_id_succession("", empty).empty()); + } + + const std::map forwards = { + {"OFold001", "OFnew001"}, + {"OFchainA", "OFchainB"}, + {"OFchainB", "OFchainC"}, + {"OFchainC", "OFlive00"}, + }; + + SECTION("absent id returns empty") { + CHECK(follow_filament_id_succession("GFL99", forwards).empty()); + } + + SECTION("single hop resolves to the successor") { + CHECK(follow_filament_id_succession("OFold001", forwards) == "OFnew001"); + } + + SECTION("multi-hop chain resolves to the live end") { + CHECK(follow_filament_id_succession("OFchainA", forwards) == "OFlive00"); + CHECK(follow_filament_id_succession("OFchainB", forwards) == "OFlive00"); + CHECK(follow_filament_id_succession("OFchainC", forwards) == "OFlive00"); + } +} + +// Cycles are a ledger-validation error (script check 9) and never ship, but the client +// walk must still terminate on corrupt data: it stops at the last id reached before any +// id would repeat. +TEST_CASE("filament_id succession terminates on malformed cycles", "[Preset][filament_id]") { + SECTION("two-node cycle returns the last id before revisiting") { + const std::map cycle = {{"A", "B"}, {"B", "A"}}; + CHECK(follow_filament_id_succession("A", cycle) == "B"); + CHECK(follow_filament_id_succession("B", cycle) == "A"); + } + + SECTION("cycle entered through a tail stops before re-entering it") { + // T -> A -> B -> C -> A: stops at C, the last id reached before repeating A. + const std::map cycle = { + {"T", "A"}, {"A", "B"}, {"B", "C"}, {"C", "A"}}; + CHECK(follow_filament_id_succession("T", cycle) == "C"); + CHECK(follow_filament_id_succession("A", cycle) == "C"); + } + + SECTION("self-loop returns the id itself") { + const std::map loop = {{"A", "A"}}; + CHECK(follow_filament_id_succession("A", loop) == "A"); + } +} From acd5dd07947f4f9f47c99ebacd877afae860a14d Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 16:41:41 +0800 Subject: [PATCH 016/208] v3.1: OrcaFilamentLibrary re-mint under the product-triple rule Phase v3.1 of filament_id_plan_v3.md: every OFL-declared filament_id re-derives from its product triple; the succession ledger absorbs the old ids. Config-equivalence verified: flattened effective configs differ ONLY in filament_id (284 consistent old->new changes tree-wide, including every vendor preset that rides an OFL family), zero config/compatible_printers/ setting_id drift. Structural pre-step (id-value-neutral, verified): OFL generic family ids move from the shared fdm_filament_* template bases onto the product-named "Generic X @System" presets, so the v3 triple's family component is the product name, not an internal file name (12 relocations; 2 dead duplicate declarations on fdm_filament_pa/pet pruned; every consumer chain itemized first - the +12 instantiated_with_id entries are this deliberate pattern, matching the 11 generics that already declared on @System). fdm_filament_pc keeps its declaration this phase: 7 Prusa presets (Prusa Generic PC, Prusament PC Blend) inherit it directly and re-home in the v3.2 Prusa worksheet; its transitional id is documented in the plan. Re-mint: 301 declarations re-derived (e.g. Generic PLA OGFL99 -> OFDSrzZ8 = mint("filament_product/Generic/PLA/Generic PLA")). Snapshot: 1477 ids (+300/-292). Ledger: - 230 shipped ids retired with mode-rule successors (OGF* library ids, OFLSBS99, DREMC/FILAR/AliZ/eSUN/... legacy strings). DREMC010 had been shared by a PPA-CF and a TPU family - a data bug this split resolves; its successor follows its only shipped claim (DREMC PPA-CF). - 25 GF-shaped ids OFL had copied from the Bambu catalog (GFOT00x Overture, GFSEP0xx) are RELEASED to the BBL island space with hints at the re-minted families - never retired, so a future legitimate BBL catalog addition is never blocked; plus an explicit GFOT001 -> OFxA1p01 hint (Overture PLA Pro, still live in BBL). - 37 never-shipped v1 branch mints dropped from lineage (--forget-never-shipped; they exist in no release, no forwarding needed). - OGFC99/OGFG99/OGFL96/OGFN99/OGFSNL08 stay live (still declared by vendor bundles); they retire in v3.2 when those declarers re-mint. Gates: 106 unit tests OK; --check exit 0; orca_extra_profile_check exit 0; validator -l 2 / -f tree-wide / -r BBL+Qidi exit 0; Moonraker OFL map check resolves all 29 aliases against the re-minted presets; flatten equivalence pre/post as above; snapshot regen idempotent. --- filament_id_plan_v3.md | 6 +- .../filament/AliZ/AliZ PA-CF @base.json | 2 +- .../filament/AliZ/AliZ PETG @base.json | 2 +- .../filament/AliZ/AliZ PETG-CF @base.json | 2 +- .../filament/AliZ/AliZ PETG-Metal @base.json | 2 +- .../filament/AliZ/AliZ PLA @base.json | 2 +- .../filament/Bambu/Bambu ABS @base.json | 2 +- .../filament/Bambu/Bambu ABS-GF @base.json | 2 +- .../filament/Bambu/Bambu ASA @base.json | 2 +- .../filament/Bambu/Bambu ASA-Aero @base.json | 2 +- .../filament/Bambu/Bambu ASA-CF @base.json | 2 +- .../filament/Bambu/Bambu PA-CF @base.json | 2 +- .../filament/Bambu/Bambu PA6-CF @base.json | 2 +- .../filament/Bambu/Bambu PA6-GF @base.json | 2 +- .../filament/Bambu/Bambu PAHT-CF @base.json | 2 +- .../filament/Bambu/Bambu PC @base.json | 2 +- .../filament/Bambu/Bambu PC FR @base.json | 2 +- .../filament/Bambu/Bambu PET-CF @base.json | 2 +- .../Bambu/Bambu PETG Basic @base.json | 2 +- .../filament/Bambu/Bambu PETG HF @base.json | 2 +- .../Bambu/Bambu PETG Translucent @base.json | 2 +- .../filament/Bambu/Bambu PETG-CF @base.json | 2 +- .../filament/Bambu/Bambu PLA Aero @base.json | 2 +- .../filament/Bambu/Bambu PLA Basic @base.json | 2 +- .../Bambu/Bambu PLA Dynamic @base.json | 2 +- .../Bambu/Bambu PLA Galaxy @base.json | 2 +- .../filament/Bambu/Bambu PLA Glow @base.json | 2 +- .../Bambu/Bambu PLA Impact @base.json | 2 +- .../Bambu/Bambu PLA Marble @base.json | 2 +- .../filament/Bambu/Bambu PLA Matte @base.json | 2 +- .../filament/Bambu/Bambu PLA Metal @base.json | 2 +- .../filament/Bambu/Bambu PLA Silk @base.json | 2 +- .../filament/Bambu/Bambu PLA Silk+ @base.json | 2 +- .../Bambu/Bambu PLA Sparkle @base.json | 2 +- .../filament/Bambu/Bambu PLA Tough @base.json | 2 +- .../filament/Bambu/Bambu PLA Wood @base.json | 2 +- .../filament/Bambu/Bambu PLA-CF @base.json | 2 +- .../filament/Bambu/Bambu PPA-CF @base.json | 2 +- .../filament/Bambu/Bambu PPS-CF @base.json | 2 +- .../filament/Bambu/Bambu PVA @base.json | 2 +- .../Bambu/Bambu Support For PA PET @base.json | 2 +- .../Bambu/Bambu Support For PLA @base.json | 2 +- .../Bambu Support For PLA-PETG @base.json | 2 +- .../filament/Bambu/Bambu Support G @base.json | 2 +- .../filament/Bambu/Bambu Support W @base.json | 2 +- .../Bambu/Bambu Support for ABS @base.json | 2 +- .../filament/Bambu/Bambu TPU 95A @base.json | 2 +- .../Bambu/Bambu TPU 95A HF @base.json | 2 +- .../filament/COEX/COEX ABS @base.json | 2 +- .../filament/COEX/COEX ABS PRIME @base.json | 2 +- .../filament/COEX/COEX ASA PRIME @base.json | 2 +- .../COEX/COEX NYLEX PA6-CF @base.json | 2 +- .../COEX/COEX NYLEX UNFILLED @base.json | 2 +- .../filament/COEX/COEX PCTG PRIME @base.json | 2 +- .../filament/COEX/COEX PETG @base.json | 2 +- .../filament/COEX/COEX PLA @base.json | 2 +- .../filament/COEX/COEX PLA PRIME @base.json | 2 +- .../filament/COEX/COEX PLA+Silk @base.json | 2 +- .../filament/COEX/COEX TPE 30D @base.json | 2 +- .../filament/COEX/COEX TPE 40D @base.json | 2 +- .../filament/COEX/COEX TPE 60D @base.json | 2 +- .../filament/COEX/COEX TPU 60A @base.json | 2 +- .../filament/DREMC/DREMC ABS @base.json | 2 +- .../filament/DREMC/DREMC ABS+ @base.json | 2 +- .../filament/DREMC/DREMC ABS-GF @base.json | 2 +- .../filament/DREMC/DREMC ASA @base.json | 2 +- .../filament/DREMC/DREMC ASA CF @base.json | 2 +- .../filament/DREMC/DREMC ASA GF @base.json | 2 +- .../filament/DREMC/DREMC PA12-CF @base.json | 2 +- .../filament/DREMC/DREMC PA6-CF @base.json | 2 +- .../filament/DREMC/DREMC PET-CF @base.json | 2 +- .../filament/DREMC/DREMC PETG @base.json | 2 +- .../filament/DREMC/DREMC PLA HS @base.json | 2 +- .../filament/DREMC/DREMC PLA+ @base.json | 2 +- .../filament/DREMC/DREMC PPA-CF @base.json | 2 +- .../filament/DREMC/DREMC TPU 95A @base.json | 2 +- .../filament/Elas/Elas ASA @base.json | 2 +- .../filament/Elas/Elas PETG Basic @base.json | 2 +- .../filament/Elas/Elas PLA Basic @base.json | 2 +- .../filament/Elas/Elas PLA Pro @base.json | 2 +- .../filament/Elegoo/Elegoo ABS @base.json | 2 +- .../filament/Elegoo/Elegoo ASA @base.json | 2 +- .../filament/Elegoo/Elegoo ASA-CF @base.json | 2 +- .../filament/Elegoo/Elegoo PAHT @base.json | 2 +- .../filament/Elegoo/Elegoo PC @base.json | 2 +- .../filament/Elegoo/Elegoo PC-FR @base.json | 2 +- .../filament/Elegoo/Elegoo PET-CF @base.json | 2 +- .../filament/Elegoo/Elegoo PETG @base.json | 2 +- .../filament/Elegoo/Elegoo PETG HF @base.json | 2 +- .../Elegoo/Elegoo PETG PRO @base.json | 2 +- .../Elegoo/Elegoo PETG Translucent @base.json | 2 +- .../filament/Elegoo/Elegoo PETG-CF @base.json | 2 +- .../filament/Elegoo/Elegoo PETG-GF @base.json | 2 +- .../filament/Elegoo/Elegoo PLA @base.json | 2 +- .../Elegoo/Elegoo PLA Basic @base.json | 2 +- .../Elegoo/Elegoo PLA Galaxy @base.json | 2 +- .../Elegoo/Elegoo PLA Glow @base.json | 2 +- .../Elegoo/Elegoo PLA Marble @base.json | 2 +- .../Elegoo/Elegoo PLA Matte @base.json | 2 +- .../filament/Elegoo/Elegoo PLA PRO @base.json | 2 +- .../Elegoo/Elegoo PLA Silk @base.json | 2 +- .../Elegoo/Elegoo PLA Sparkle @base.json | 2 +- .../Elegoo/Elegoo PLA Translucent2 @base.json | 2 +- .../Elegoo/Elegoo PLA Wood @base.json | 2 +- .../filament/Elegoo/Elegoo PLA+ @base.json | 2 +- .../filament/Elegoo/Elegoo PLA-CF @base.json | 2 +- .../Elegoo/Elegoo Rapid PETG @base.json | 2 +- .../Elegoo/Elegoo Rapid PLA+ @base.json | 2 +- .../Elegoo/Elegoo Rapid TPU 95A @base.json | 2 +- .../filament/Elegoo/Elegoo TPU @base.json | 2 +- .../Eolas Prints ABS @System.json | 2 +- .../Eolas Prints ASA @System.json | 2 +- .../Eolas Prints PETG @System.json | 2 +- .../Eolas Prints PETG Transition @System.json | 2 +- ...olas Prints PETG UV Resistant @System.json | 2 +- ...olas Prints PLA Antibacterial @System.json | 2 +- .../Eolas Prints PLA High Speed @System.json | 2 +- .../Eolas Prints PLA INGEO 850 @System.json | 2 +- .../Eolas Prints PLA INGEO 870 @System.json | 2 +- .../Eolas Prints PLA Matte @System.json | 2 +- .../Eolas Prints PLA Neon @System.json | 2 +- .../Eolas Prints PLA Premium @System.json | 2 +- .../Eolas Prints PLA Silk @System.json | 2 +- .../Eolas Prints PLA Transition @System.json | 2 +- .../Eolas Prints TPU Flex 93A @System.json | 2 +- .../Eolas Prints TPU Flex D53 @System.json | 2 +- ...nts TPU Flex D60 UV Resistant @System.json | 2 +- .../Eolas Prints TPU Transition @System.json | 2 +- .../filament/FDplast/FDplast ABS @base.json | 2 +- .../filament/FDplast/FDplast HIPS @base.json | 2 +- .../filament/FDplast/FDplast PETG @base.json | 2 +- .../filament/FDplast/FDplast PLA @base.json | 2 +- .../filament/FDplast/FDplast SBS @base.json | 2 +- .../filament/FDplast/FDplast TPU @base.json | 2 +- .../filament/FILL3D/FILL3D PA @base.json | 2 +- .../filament/FILL3D/FILL3D PETG @base.json | 2 +- .../filament/FILL3D/FILL3D PETG CF @base.json | 2 +- .../FILL3D/FILL3D PLA Basic @base.json | 2 +- .../FILL3D/FILL3D PLA Turbo @base.json | 2 +- .../filament/FILL3D/FILL3D PP @base.json | 2 +- .../filament/FILL3D/FILL3D PPCF @base.json | 2 +- .../filament/FilAr/FilAr PETG @base.json | 2 +- .../FilAr/FilAr PETG Amarillo Lima.json | 2 +- .../FilAr/FilAr PETG Amarillo Radiante.json | 2 +- .../FilAr/FilAr PETG Azul Boreal.json | 2 +- .../FilAr/FilAr PETG Azul Francia.json | 2 +- .../FilAr/FilAr PETG Azul Imperial.json | 2 +- .../FilAr/FilAr PETG Blanco Antartida.json | 2 +- .../filament/FilAr/FilAr PETG Cian.json | 2 +- .../filament/FilAr/FilAr PETG Coral.json | 2 +- .../filament/FilAr/FilAr PETG Cristal.json | 2 +- .../FilAr/FilAr PETG Gris Ceniza.json | 2 +- .../filament/FilAr/FilAr PETG Gris Plata.json | 2 +- .../filament/FilAr/FilAr PETG Magenta.json | 2 +- .../FilAr/FilAr PETG Negro Azabache.json | 2 +- .../FilAr/FilAr PETG Rojo Carmesi.json | 2 +- .../filament/FilAr/FilAr PLA @base.json | 2 +- .../FilAr/FilAr PLA Amarillo Lirio.json | 2 +- .../FilAr/FilAr PLA Azul Francia.json | 2 +- .../FilAr/FilAr PLA Blanco Antartida.json | 2 +- .../FilAr/FilAr PLA Blanco Calido.json | 2 +- .../filament/FilAr/FilAr PLA Bronce.json | 2 +- .../FilAr/FilAr PLA Cafe con Leche.json | 2 +- .../filament/FilAr/FilAr PLA Carpincho.json | 2 +- .../FilAr/FilAr PLA Celeste Cielo.json | 2 +- .../filament/FilAr/FilAr PLA Cobre.json | 2 +- .../filament/FilAr/FilAr PLA Dorado.json | 2 +- .../filament/FilAr/FilAr PLA Gris Ceniza.json | 2 +- .../FilAr/FilAr PLA Gris Pizarra.json | 2 +- .../filament/FilAr/FilAr PLA Gris Plata.json | 2 +- .../filament/FilAr/FilAr PLA Manteca.json | 2 +- .../FilAr/FilAr PLA Marron Oxido.json | 2 +- .../FilAr/FilAr PLA Naranja Tigre.json | 2 +- .../FilAr/FilAr PLA Negro Azabache.json | 2 +- .../filament/FilAr/FilAr PLA Oro.json | 2 +- .../filament/FilAr/FilAr PLA Piel.json | 2 +- .../FilAr/FilAr PLA Rojo de Carreras.json | 2 +- .../FilAr/FilAr PLA Rosa Amaranto.json | 2 +- .../FilAr/FilAr PLA Rosa Flamenco.json | 2 +- .../filament/FilAr/FilAr PLA Tabaco.json | 2 +- .../filament/FilAr/FilAr PLA Titanio.json | 2 +- .../filament/FilAr/FilAr PLA Verde FilAr.json | 2 +- .../FilAr/FilAr PLA Verde Manzana.json | 2 +- .../filament/FilAr/FilAr PLA Verde Oliva.json | 2 +- .../filament/FilAr/FilAr PLA Verde Pixel.json | 2 +- .../FilAr/FilAr PLA Violeta Jacaranda.json | 2 +- .../filament/FilAr/FilAr PLA-mate @base.json | 2 +- .../FilAr/FilAr PLA-mate Amarillo.json | 2 +- .../filament/FilAr/FilAr PLA-mate Azul.json | 2 +- .../filament/FilAr/FilAr PLA-mate Beige.json | 2 +- .../filament/FilAr/FilAr PLA-mate Blanco.json | 2 +- .../filament/FilAr/FilAr PLA-mate Bordo.json | 2 +- .../FilAr/FilAr PLA-mate Celeste Cielo.json | 2 +- .../FilAr/FilAr PLA-mate Chocolate.json | 2 +- .../filament/FilAr/FilAr PLA-mate Gris.json | 2 +- .../filament/FilAr/FilAr PLA-mate Marron.json | 2 +- .../FilAr/FilAr PLA-mate Naranja.json | 2 +- .../filament/FilAr/FilAr PLA-mate Negro.json | 2 +- .../filament/FilAr/FilAr PLA-mate Piel.json | 2 +- .../filament/FilAr/FilAr PLA-mate Rojo.json | 2 +- .../filament/FilAr/FilAr PLA-mate Rosa.json | 2 +- .../filament/FilAr/FilAr PLA-mate Uva.json | 2 +- .../filament/FilAr/FilAr PLA-mate Verde.json | 2 +- .../FilAr/FilAr PLA-mate Violeta.json | 2 +- .../FusRock/FusRock ABS-GF @base.json | 2 +- .../filament/Generic ABS @System.json | 2 +- .../filament/Generic ASA @System.json | 2 +- .../filament/Generic BVOH @System.json | 1 + .../filament/Generic CoPE @System.json | 1 + .../filament/Generic EVA @System.json | 1 + .../filament/Generic HIPS @System.json | 1 + .../filament/Generic PA @System.json | 2 +- .../filament/Generic PA-CF @System.json | 2 +- .../filament/Generic PC @System.json | 2 +- .../filament/Generic PCTG @System.json | 1 + .../filament/Generic PE @System.json | 1 + .../filament/Generic PE-CF @base.json | 2 +- .../filament/Generic PETG @System.json | 2 +- .../filament/Generic PETG HF @base.json | 2 +- .../filament/Generic PETG-CF @base.json | 2 +- .../filament/Generic PHA @System.json | 1 + .../filament/Generic PLA @System.json | 1 + .../Generic PLA High Speed @System.json | 2 +- .../filament/Generic PLA Matte @base.json | 2 +- .../filament/Generic PLA Silk @System.json | 1 + .../filament/Generic PLA-CF @System.json | 2 +- .../filament/Generic PP @System.json | 1 + .../filament/Generic PP-CF @base.json | 2 +- .../filament/Generic PP-GF @base.json | 2 +- .../filament/Generic PPA-CF @System.json | 1 + .../filament/Generic PPA-GF @System.json | 2 +- .../filament/Generic PVA @System.json | 2 +- .../filament/Generic SBS @System.json | 1 + .../filament/Generic TPU @System.json | 2 +- .../GreenGate3D/GreenGate3D PETG @base.json | 2 +- .../filament/NIT/NIT ABS @base.json | 2 +- .../filament/NIT/NIT PETG @base.json | 2 +- .../filament/NIT/NIT PLA @base.json | 2 +- .../Numakers/Numakers PLA+ @base.json | 2 +- .../Overture/Overture ABS Basic @base.json | 2 +- .../filament/Overture/Overture ASA @base.json | 2 +- .../Overture/Overture Air PLA @base.json | 2 +- .../Overture/Overture Easy PLA @base.json | 2 +- .../Overture/Overture Matte PLA @base.json | 2 +- .../filament/Overture/Overture PLA @base.json | 2 +- .../Overture/Overture PLA Pro @base.json | 2 +- .../Overture/Overture Rock PLA @base.json | 2 +- .../Overture/Overture Silk PLA @base.json | 2 +- .../Overture/Overture Super PLA+ @base.json | 2 +- .../filament/Overture/Overture TPU @base.json | 2 +- .../Polymaker/Fiberon PA12-CF @base.json | 2 +- .../Polymaker/Fiberon PA6-CF @base.json | 2 +- .../Polymaker/Fiberon PA6-GF @base.json | 2 +- .../Polymaker/Fiberon PA612-CF @base.json | 2 +- .../Polymaker/Fiberon PET-CF @base.json | 2 +- .../Polymaker/Fiberon PETG-ESD @base.json | 2 +- .../Polymaker/Fiberon PETG-rCF @base.json | 2 +- .../Polymaker/Panchroma CoPE @base.json | 2 +- .../Polymaker/Panchroma PLA @base.json | 2 +- .../Panchroma PLA Celestial @base.json | 2 +- .../Polymaker/Panchroma PLA Galaxy @base.json | 2 +- .../Polymaker/Panchroma PLA Glow @base.json | 2 +- .../Panchroma PLA Luminous @base.json | 2 +- .../Polymaker/Panchroma PLA Marble @base.json | 2 +- .../Polymaker/Panchroma PLA Matte @base.json | 2 +- .../Panchroma PLA Metallic @base.json | 2 +- .../Polymaker/Panchroma PLA Neon @base.json | 2 +- .../Polymaker/Panchroma PLA Satin @base.json | 2 +- .../Polymaker/Panchroma PLA Silk @base.json | 2 +- .../Panchroma PLA Starlight @base.json | 2 +- .../Panchroma PLA Temp Shift @base.json | 2 +- .../Panchroma PLA Translucent @base.json | 2 +- .../Panchroma PLA UV Shift @base.json | 2 +- .../Polymaker/PolyLite ABS @base.json | 2 +- .../Polymaker/PolyLite ASA @base.json | 2 +- .../Polymaker/PolyLite Dual PLA @base.json | 2 +- .../Polymaker/PolyLite PETG @base.json | 2 +- .../Polymaker/PolyLite PLA @System.json | 2 +- .../Polymaker/PolyLite PLA @base.json | 2 +- .../Polymaker/PolyLite PLA Pro @base.json | 2 +- .../Polymaker/PolyTerra Dual PLA @System.json | 2 +- .../Polymaker/PolyTerra PLA @base.json | 2 +- .../Polymaker/Polymaker HT-PLA @base.json | 2 +- .../Polymaker/Polymaker HT-PLA-GF @base.json | 2 +- .../SUNLU/SUNLU Marble PLA @base.json | 2 +- .../filament/SUNLU/SUNLU PETG @base.json | 2 +- .../filament/SUNLU/SUNLU PLA Matte @base.json | 2 +- .../filament/SUNLU/SUNLU PLA+ 2.0 @base.json | 2 +- .../filament/SUNLU/SUNLU PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Silk PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Wood PLA @base.json | 2 +- .../filament/Valment/Valment PLA @base.json | 2 +- .../Valment/Valment PLA Galaxy @base.json | 2 +- .../Valment/Valment PLA Silk @base.json | 2 +- .../Valment/Valment PLA-CF @base.json | 2 +- .../filament/base/fdm_filament_bvoh.json | 1 - .../filament/base/fdm_filament_cope.json | 1 - .../filament/base/fdm_filament_eva.json | 1 - .../filament/base/fdm_filament_hips.json | 1 - .../filament/base/fdm_filament_pa.json | 1 - .../filament/base/fdm_filament_pc.json | 2 +- .../filament/base/fdm_filament_pctg.json | 1 - .../filament/base/fdm_filament_pe.json | 1 - .../filament/base/fdm_filament_pet.json | 1 - .../filament/base/fdm_filament_pha.json | 1 - .../filament/base/fdm_filament_pla.json | 1 - .../filament/base/fdm_filament_pla_silk.json | 1 - .../filament/base/fdm_filament_pp.json | 1 - .../filament/base/fdm_filament_ppa.json | 1 - .../filament/base/fdm_filament_sbs.json | 1 - .../filament/eSUN/eSUN PETG @base.json | 2 +- .../filament/eSUN/eSUN PLA+ @base.json | 2 +- .../filament/eSUN/eSUN PLA-Basic @base.json | 2 +- .../filament/eSUN/eSUN PLA-Marble @base.json | 2 +- .../filament/eSUN/eSUN PLA-Matte @base.json | 2 +- .../filament/eSUN/eSUN ePLA-LW @System.json | 2 +- resources/profiles/retired_filament_ids.json | 1408 ++- scripts/filament_id_snapshot.json | 7716 +++++++---------- 318 files changed, 4636 insertions(+), 5098 deletions(-) diff --git a/filament_id_plan_v3.md b/filament_id_plan_v3.md index 5a4bdedb26..14b547600f 100644 --- a/filament_id_plan_v3.md +++ b/filament_id_plan_v3.md @@ -143,7 +143,11 @@ gains a succession entry pointing at its replacement; the 26 GF-shaped ids OFL d (measured at v3.0: only one of them, `GFOT001`, is also declared by BBL) are released to the BBL island space with hints at the re-minted families — two-island purity. Snapshot regenerated; full gate battery + fixture overlays (this phase touches preset-visibility -machinery only via ids, but the fixtures are cheap insurance). +machinery only via ids, but the fixtures are cheap insurance). Implementation notes +(v3.1, executed): OFL generic ids relocate from the fdm_filament_* template bases onto +the product-named "Generic X @System" presets first, so their triples carry the product +name; `fdm_filament_pc` keeps a (transitional) declaration because 7 Prusa presets +inherit it directly — the v3.2 Prusa worksheet re-homes them and deletes it. **v3.2 — vendor bundles, worksheet-per-vendor (v1 machinery).** Three sub-cases: (a) the **391 unshipped v1 `OF*` mints** re-derive under the triple key — no succession diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json index 29d9f1c39c..22fcfceefa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json @@ -3,7 +3,7 @@ "name": "AliZ PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "AliZ003", + "filament_id": "OFd4zw5l", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json index 463a0d954e..1796d82a77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "AliZ001", + "filament_id": "OFocyw69", "instantiation": "false", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json index ad96c2621f..5c5a0113d5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG-CF @base", "inherits": "AliZ PETG @base", "from": "system", - "filament_id": "AZ01-1", + "filament_id": "OFJOFnOZ", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json index f92cb73736..d6f9adc470 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG-Metal @base", "inherits": "AliZ PETG @base", "from": "system", - "filament_id": "AZ01-2", + "filament_id": "OFOABq7t", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json index 6323f62cca..8bb139bdbb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json @@ -3,7 +3,7 @@ "name": "AliZ PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "AliZ002", + "filament_id": "OFyxayW4", "instantiation": "false", "enable_pressure_advance": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json index 6628007eef..62c2f3bc84 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB00", + "filament_id": "OFhuaUQB", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json index a34c88e45d..5cdd145c56 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB50", + "filament_id": "OFknl9Iz", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json index c06136e268..432f106879 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB01", + "filament_id": "OFfBpSRI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json index 043335fe0d..8343f4f8cb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-Aero @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB02", + "filament_id": "OFXzQ4yL", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: ASA Aero Printing Guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json index 98d86450d2..66abe8195a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB51", + "filament_id": "OF0wBGNx", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json index f63213b0b1..00df3d58ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN03", + "filament_id": "OFFNYwWR", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json index 21d5b6c18b..578e30294c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN05", + "filament_id": "OFniMuTN", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json index cd54c4ac9b..c9eb830cad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN08", + "filament_id": "OFNk8bxk", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json index 9bde2b612b..a028b7f7dc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN04", + "filament_id": "OF2VFe4J", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json index 577ae892f4..5ce775f0d0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OGFC00", + "filament_id": "OFKhMPeX", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json index 40527941a2..18c02b41a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC FR @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OGFC01", + "filament_id": "OFg57Nmc", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json index 5a4e910502..a14ea627ab 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFT01", + "filament_id": "OFHa48An", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json index 9117643990..9f30826efe 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG00", + "filament_id": "OFFvzqcd", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json index 7a829f34dc..ef4a817974 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG02", + "filament_id": "OFovEIbw", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json index 69cfb1dab7..bbde9ee8a2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Translucent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG01", + "filament_id": "OFwPrlCM", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json index 8112a1d025..89fe7b3dde 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG50", + "filament_id": "OFTRZ8Y4", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json index 889822b02f..ed2b367f9c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Aero @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA11", + "filament_id": "OFBSW57R", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: Instructions for printing RC model with foaming PLA (PLA Aero).", "fan_min_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json index 379db35b99..d5614af65f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFoiVqVM", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json index abd30f6606..7b1290817d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Dynamic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA13", + "filament_id": "OFDGigEI", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json index b52fc99f23..3ecc707ddf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA15", + "filament_id": "OFQ3e56w", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json index 9ab5d3b6ff..8395082e6d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA12", + "filament_id": "OFEkPBwx", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json index 11edaa9736..1ff6cb84cc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Impact @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA03", + "filament_id": "OFTGHyNC", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json index 0f427b2047..0faa115520 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA07", + "filament_id": "OF9OlTWH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json index b1685a3aa1..ac7760f632 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA01", + "filament_id": "OFXIbw5D", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json index c24f1d8d9b..81a9c95c24 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA02", + "filament_id": "OFrKLeE3", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json index e4930ed9c3..f76daf5b77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA05", + "filament_id": "OFEGNJD4", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json index c4e44ff4ac..93e6e81148 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA06", + "filament_id": "OFUanySo", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json index 62ae9c7d6b..152b762069 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA08", + "filament_id": "OFDxfPgH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json index d257a2bc53..a5aa15e8c1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA09", + "filament_id": "OFaQMgRH", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json index 3ebad53cd8..b9686af187 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA16", + "filament_id": "OFMjtqTC", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json index e5c0a31499..7bd37d40a4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA50", + "filament_id": "OFEswT5W", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json index 43b897ca86..8519203173 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "OGFN06", + "filament_id": "OF54B0S0", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json index d27c9164d1..b48f3b9300 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "OGFT02", + "filament_id": "OF4RvVuU", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json index 8b73770499..1c6e0f2201 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json @@ -3,7 +3,7 @@ "name": "Bambu PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OGFS04", + "filament_id": "OFzyIxba", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json index 2662d49840..7adbcb812d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PA/PET @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFS03", + "filament_id": "OFMTK0UC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json index 68d2468a07..9511f5c0cd 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS02", + "filament_id": "OFAnyRUI", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json index 49fdcb1e1b..10e57855ad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA/PETG @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS05", + "filament_id": "OFIfnzxC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json index 5b7ce7f02b..35cc03e9b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFS01", + "filament_id": "OFQHiNJs", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json index 2e1f1429c1..a922afd83e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS00", + "filament_id": "OFsHSVZc", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json index 3fe47727e1..31dfbba311 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support for ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFS06", + "filament_id": "OFf6mfQO", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_max_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json index a79d6a575e..5b71c52f81 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OGFU01", + "filament_id": "OFVCkX5w", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json index 00bef8980a..95263eb4ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A HF @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OGFU00", + "filament_id": "OFvKUnLh", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json index 201d230ad3..c234e34567 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json @@ -3,7 +3,7 @@ "name": "COEX ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "CXABSB01", + "filament_id": "OF99UMPq", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json index 08c5edfc25..7e965bc256 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX ABS PRIME @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "CXABPB09", + "filament_id": "OFuWCQXN", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json index b5c2b540be..1bc1230eae 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX ASA PRIME @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "CXASAB04", + "filament_id": "OFtpXCCv", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json index 807e723f78..c023668f4a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "COEX NYLEX PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "CXPACB23", + "filament_id": "OF0NgY1y", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json index 34c323d800..15de223500 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json @@ -3,7 +3,7 @@ "name": "COEX NYLEX UNFILLED @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "CXPAUB21", + "filament_id": "OFJs1ToM", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json index acecaf1737..9fce322405 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX PCTG PRIME @base", "inherits": "fdm_filament_pctg", "from": "system", - "filament_id": "CXPCTB15", + "filament_id": "OFwu7IAG", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json index 09c882e777..9f22293450 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json @@ -3,7 +3,7 @@ "name": "COEX PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "CXPETB13", + "filament_id": "OFvTVZc3", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json index faabeaea75..a0b2f76888 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "CXPLAB02", + "filament_id": "OFhlCNqq", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json index d2423972a7..a9a5e83c0b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA PRIME @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "CXPLAB08", + "filament_id": "OFd2vX0G", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json index 40a9e1eb05..f06642c432 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA+Silk @base", "inherits": "fdm_filament_pla_silk", "from": "system", - "filament_id": "CXPLSB03", + "filament_id": "OF0pzFLc", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json index 4f1f540a5f..5c715dea33 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 30D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX30DB20", + "filament_id": "OFVptRxp", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json index 6130ef11b2..81d5d81f1c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 40D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX40DB20", + "filament_id": "OFfnXFie", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json index 0ab5886963..b2e0aab688 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 60D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX60DB19", + "filament_id": "OFfr4XNO", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json index 00834bb4a5..7ec2102478 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json @@ -3,7 +3,7 @@ "name": "COEX TPU 60A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX60AB17", + "filament_id": "OFE0NFRh", "instantiation": "false", "filament_vendor": [ "COEX 3D" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json index b4835fdeca..fbd2a32e8f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC003", + "filament_id": "OFzrUUxc", "instantiation": "false", "filament_cost": [ "24" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json index f9b2cd2c40..6817351573 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS+ @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC004", + "filament_id": "OF99vXPs", "instantiation": "false", "filament_cost": [ "24" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json index b5917c922e..046a015930 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC009", + "filament_id": "OFCidU7j", "instantiation": "false", "fan_cooling_layer_time": [ "12" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json index 324e484437..5e5e96b148 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC005", + "filament_id": "OFLNgV3C", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json index b15fa0f629..ef6c3bc7b5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC012", + "filament_id": "OFdI4zMo", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json index 11f4e56de4..b916335f2f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA GF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC013", + "filament_id": "OF2xccEe", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json index aee897f402..3482ecedf6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "DREMC007", + "filament_id": "OFEhuUNq", "instantiation": "false", "fan_cooling_layer_time": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json index 7d693fc142..fe5ef518a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "DREMC006", + "filament_id": "OFsoykbm", "instantiation": "false", "fan_cooling_layer_time": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json index cc568e5ad6..9f7d27a1a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "DREMC008", + "filament_id": "OFwJ0qu2", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json index 840e0104f3..c67e185527 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json @@ -3,7 +3,7 @@ "name": "DREMC PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "DREMC002", + "filament_id": "OFVBlUFH", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json index cb2f3e166d..1d7f1b47af 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json @@ -3,7 +3,7 @@ "name": "DREMC PLA+ HS @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "DREMC011", + "filament_id": "OFJHBEGD", "instantiation": "false", "filament_cost": [ "26" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json index 698712e1dd..b989f6d59d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json @@ -3,7 +3,7 @@ "name": "DREMC PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "DREMC001", + "filament_id": "OFSwbBWS", "instantiation": "false", "filament_cost": [ "26" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json index ec5cecd565..6a696177e7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "DREMC010", + "filament_id": "OFiWaoqD", "instantiation": "false", "filament_vendor": [ "DREMC" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json index ba17ff46a8..63d4669b47 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "DREMC TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "DREMC010", + "filament_id": "OFYd5uS3", "instantiation": "false", "filament_cost": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json index 961b8aa903..027af22dce 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json @@ -3,7 +3,7 @@ "name": "Elas ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OFT3TqB6", + "filament_id": "OFCoRobU", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "activate_air_filtration": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json index 145e0472ae..378a0ea241 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFw4OHWE", + "filament_id": "OFXTPuqV", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "complete_print_exhaust_fan_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json index 64e0f025b8..f20c4cc388 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFbgt3u3", + "filament_id": "OFMuXBmO", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json index faba40142f..ec36457c48 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFrgQ1Ns", + "filament_id": "OFaYz8iE", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json index af0dad8787..539b56876e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OEABSB00", + "filament_id": "OFxOHhZw", "instantiation": "false", "eng_plate_temp": [ "90" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json index da502cf7b6..64875346e3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OEASAB00", + "filament_id": "OFobDOW5", "instantiation": "false", "eng_plate_temp": [ "90" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json index ff15b78c5d..155d6f8290 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo ASA-CF @base", "inherits": "Elegoo ASA @base", "from": "system", - "filament_id": "OFpwg2Qh", + "filament_id": "OFryjl35", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json index dd444cd846..d85796e7b1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PAHT @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OEPAHTB0", + "filament_id": "OF0h7ERL", "instantiation": "false", "activate_air_filtration": [ "1" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json index b7a5a62eda..ca5be19aa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OEPCB00", + "filament_id": "OFUyDDNv", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json index 1f6564cbf1..91034fda41 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PC-FR @base", "inherits": "Elegoo PC @base", "from": "system", - "filament_id": "OF79FFkO", + "filament_id": "OFlsTpJG", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json index 9e669f1e14..c1b9e78897 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PET-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFJIImD5", + "filament_id": "OFV5tNw6", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json index d6cd360eba..2f695a48b2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OEPETGB0", + "filament_id": "OFLcd093", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json index 2e3e74ef22..9645c4572f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG HF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFzrWlH5", + "filament_id": "OFlP3KWq", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json index 4b63edb4ed..ec604d722c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG PRO @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OF102WKM", + "filament_id": "OFOsHDnB", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json index 10b46e8f76..2d7d0f9777 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG Translucent @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFenGPBR", + "filament_id": "OF6Ll8lK", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json index 20897108cd..60a643b2a3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFIGHU7W", + "filament_id": "OFuUuIhR", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json index 1b62b3aeaa..3ff4b96375 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG-GF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFMQJToc", + "filament_id": "OFmveLWz", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json index 6b4622c0ed..45456ab6d8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OEPLAB00", + "filament_id": "OFvgE0Zh", "instantiation": "false", "fan_cooling_layer_time": [ "80" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json index d361721096..93c52a3382 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Basic @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFICPchn", + "filament_id": "OFm06H6V", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json index a36b51384a..a25fcf8daa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Galaxy @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OF0M6QAQ", + "filament_id": "OFU1zPxE", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json index b839aca5dc..a07012d83b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Glow @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFutwD6f", + "filament_id": "OFjPXrXO", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json index 7fc24ca532..b8990a7c1b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Marble @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OF4fgpse", + "filament_id": "OFfuhviw", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json index 07c0dcf1ef..0394308e99 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Matte @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFQkWxJy", + "filament_id": "OFsB2lxm", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json index 368f6b89d9..731f5c5ca4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA PRO @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFsKqcQW", + "filament_id": "OF1hznGB", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json index a19d767778..e708794eea 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Silk @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFs6lLH7", + "filament_id": "OFXz7Mwx", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json index cdf18ad328..cc292ac240 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Sparkle @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OF8HQmJD", + "filament_id": "OFhcYzR8", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json index 00d0e20932..c0e2e23dfe 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Translucent2 @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OF9qvJxV", + "filament_id": "OFn1QaY3", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json index 934992440e..4e3362a5d3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Wood @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFQhLoxN", + "filament_id": "OFWYtgCa", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json index 23ae2c1ddb..f90355d85c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA+ @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFDNiRTx", + "filament_id": "OFBUIlZ7", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json index 3115358207..4f4979d95f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA-CF @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFqh1Ngp", + "filament_id": "OFln72PT", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json index afdb0eda7a..e328cf0a75 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid PETG @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFVLuVmD", + "filament_id": "OFLXvuMr", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json index 21c1b99c63..06fd489c41 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid PLA+ @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFD5e0sH", + "filament_id": "OFkhhUS0", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json index 299f0cee8d..58cec037c3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid TPU 95A @base", "inherits": "Elegoo TPU @base", "from": "system", - "filament_id": "OFmeQjRP", + "filament_id": "OF30Ftju", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json index 28b8c921a6..e2fe95548a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json @@ -3,7 +3,7 @@ "name": "Elegoo TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OETPUB00", + "filament_id": "OFmhJs5V", "instantiation": "false", "filament_density": [ "1.21" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json index 6d5dd368bf..09fe0e6298 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP017", + "filament_id": "OFXCBZTA", "setting_id": "R1lkPc60BdFq6i2Z", "name": "Eolas Prints ABS @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json index 8446ca6746..263752abf1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP018", + "filament_id": "OFlSNkhc", "setting_id": "JFXFsEzqXxNqxnsL", "name": "Eolas Prints ASA @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json index 104dd1e567..9f1c691c30 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP010", + "filament_id": "OFhWhL1i", "setting_id": "u9fzEmHRAACOHT6J", "name": "Eolas Prints PETG @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json index 8e1aa05628..47245f3f54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP012", + "filament_id": "OFRiFnfQ", "setting_id": "BY3z4yKW9PQZwgto", "name": "Eolas Prints PETG Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json index 8c4c299849..749b37cb54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP011", + "filament_id": "OFx8Lmsd", "setting_id": "eexjO9xiesNROPCK", "name": "Eolas Prints PETG UV Resistant @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json index 9ce7087dd2..a9cbc62ed2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP008", + "filament_id": "OFkzr35f", "setting_id": "LAihILsSxo3djWjq", "name": "Eolas Prints PLA Antibacterial @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json index 2f7d92c799..7488530282 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP005", + "filament_id": "OFvzvwCu", "setting_id": "5g69jS4PRY0PbXvI", "name": "Eolas Prints PLA High Speed @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json index 7200a7d631..c4c66400e4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP006", + "filament_id": "OFH2nN08", "setting_id": "jdjLUTsIovrt3UAF", "name": "Eolas Prints PLA INGEO 850 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json index 4df9130980..f8ae8e662c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP007", + "filament_id": "OFPc4zVY", "setting_id": "AafBj7XbFWaNhKHu", "name": "Eolas Prints PLA INGEO 870 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json index 4b14da901c..9489d9f0f7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP002", + "filament_id": "OFf5awy4", "setting_id": "7LiJHuwirgABvbUa", "name": "Eolas Prints PLA Matte @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json index b40ce2310b..4486eac1f3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP004", + "filament_id": "OFrFBEfd", "setting_id": "sKgUBhF3VvETDkwg", "name": "Eolas Prints PLA Neon @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json index b2455b02e3..03c332daa0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP001", + "filament_id": "OFtudokz", "setting_id": "O2Ur7FIG2YlVEyZp", "name": "Eolas Prints PLA Premium @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json index 843cf72fc5..d80cb44978 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP003", + "filament_id": "OFbP8zEO", "setting_id": "WN0GdqBsjhvnyDmG", "name": "Eolas Prints PLA Silk @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json index 90e0b8d2f4..22bb2af20a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP009", + "filament_id": "OFHfzQXo", "setting_id": "o3RoG3NGSBlyBkfZ", "name": "Eolas Prints PLA Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json index c7b9c26180..c2252c5df8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP013", + "filament_id": "OFhfd722", "setting_id": "bQPvp6BCMzcG8FOi", "name": "Eolas Prints TPU Flex 93A @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json index c5a9a84ac3..f6b85ebd29 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP014", + "filament_id": "OFIegjmD", "setting_id": "XIFP4KMuMtXF5bjQ", "name": "Eolas Prints TPU Flex D53 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json index 169d681f39..4fc33c0d64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP015", + "filament_id": "OFvVy7yo", "setting_id": "rJmsm0zjvsk9Dy0G", "name": "Eolas Prints TPU D60 UV Resistant @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json index f5cd2eb40c..31dd33a87d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP016", + "filament_id": "OFTOPcx0", "setting_id": "CM24KGoHLt0yLH93", "name": "Eolas Prints TPU Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json index be5c677c64..644ba0b1b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json @@ -3,7 +3,7 @@ "name": "FDplast ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "FDPLAST01", + "filament_id": "OFjorDcx", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json index 41563b6208..60e86f17eb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json @@ -3,7 +3,7 @@ "name": "FDplast HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "FDPLAST02", + "filament_id": "OFmJAd3A", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json index a1cdfe34fc..9087e8afa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json @@ -3,7 +3,7 @@ "name": "FDplast PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "FDPLAST03", + "filament_id": "OFfJSCzm", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json index c2ce9ccd38..e98c3d22fb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json @@ -3,7 +3,7 @@ "name": "FDplast PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FDPLAST04", + "filament_id": "OFtr8eZw", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json index e396fee0fb..1ae33c2990 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json @@ -3,7 +3,7 @@ "name": "FDplast SBS @base", "inherits": "fdm_filament_sbs", "from": "system", - "filament_id": "FDPLAST05", + "filament_id": "OFtRn8X8", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json index 4db983cd87..bf288f545b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json @@ -3,7 +3,7 @@ "name": "FDplast TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "FDPLAST06", + "filament_id": "OFfmZrI3", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json index 64800fce25..bb8f8905e3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PA @base", "from": "system", - "filament_id": "FILL3D006", + "filament_id": "OFJNeELv", "instantiation": "false", "inherits": "fdm_filament_pa", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json index c310be8cb2..f0a0e32f26 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PETG @base", "from": "system", - "filament_id": "FILL3D003", + "filament_id": "OFQbjX3s", "instantiation": "false", "inherits": "fdm_filament_pet", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json index 38214eec2c..0d1dc4a737 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PETG CF @base", "from": "system", - "filament_id": "FILL3D007", + "filament_id": "OFOiJfLM", "instantiation": "false", "inherits": "fdm_filament_pet", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json index 8f2ee4ddf8..13d29eaaa8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PLA Basic @base", "from": "system", - "filament_id": "FILL3D002", + "filament_id": "OFDpW3J8", "instantiation": "false", "inherits": "fdm_filament_pla", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json index f5ec5f906a..38be0d7078 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PLA Turbo @base", "from": "system", - "filament_id": "FILL3D001", + "filament_id": "OFoSknDB", "instantiation": "false", "inherits": "fdm_filament_pla", "adaptive_pressure_advance": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json index 9e74676e50..708e4c50ec 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PP @base", "from": "system", - "filament_id": "FILL3D004", + "filament_id": "OFPWPlSC", "instantiation": "false", "inherits": "fdm_filament_pp", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json index 813eb8faf2..6d6aaf9e34 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PPCF @base", "from": "system", - "filament_id": "FILL3D005", + "filament_id": "OFg8hMzT", "instantiation": "false", "inherits": "fdm_filament_pp", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json index 5195e151e3..340dc5da23 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json @@ -3,7 +3,7 @@ "name": "FilAr PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "FILARB03", + "filament_id": "OF5rnhjh", "instantiation": "false", "filament_type": [ "PETG" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json index f63b93f11f..b1284f1d3d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "QuJY74Af8ssl9uuB", - "filament_id": "FILAR0047", + "filament_id": "OFt6e0US", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json index 75b1bda3c7..00e5af59a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "aFO2PDBIQqvNlH9p", - "filament_id": "FILAR0048", + "filament_id": "OF0Vtzaw", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json index ccb0abfbfe..cbed2c3aa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "JQsOaH7Zcs0cLLPY", - "filament_id": "FILAR0049", + "filament_id": "OFNU9YIW", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json index 135bea1c45..f2d8c16a43 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "O24dTvHOzlbikvmq", - "filament_id": "FILAR0050", + "filament_id": "OF44VYzK", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json index af4921a5a8..8c917d750a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "JAUmcvfO2lnmxGj5", - "filament_id": "FILAR0051", + "filament_id": "OF2Z1nT5", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json index 19ece09a31..c2bd7f3368 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "dd4fL2ztjz4UiTaG", - "filament_id": "FILAR0052", + "filament_id": "OFsXQXbs", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json index cc9e4d7422..ac1d1be6fe 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "kQFbBS3nxU7M2yPa", - "filament_id": "FILAR0053", + "filament_id": "OFnejEt4", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json index 779c773a3e..9b3e380b57 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "fspbgXmAOWjFBQqh", - "filament_id": "FILAR0054", + "filament_id": "OFysxCep", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json index 00b2b360f5..1e7c947bea 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "MnA2FnHdIuViwo41", - "filament_id": "FILAR0055", + "filament_id": "OFJQDUk3", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json index 194848d1bb..c20eb5fcad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "oYjDczRs4U1JdteC", - "filament_id": "FILAR0056", + "filament_id": "OFybzvQN", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json index bfba887890..93335c7951 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "eCJ5aFcQ00m97U35", - "filament_id": "FILAR0057", + "filament_id": "OFgpLTMR", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json index a7bb2ee141..5a8ac777f5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "CEOhwBE63SWwuh6P", - "filament_id": "FILAR0058", + "filament_id": "OFurdQxc", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json index 6e51c8b275..5cba6c4a02 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "OPZin7y48ZEeiH8D", - "filament_id": "FILAR0059", + "filament_id": "OFq8gfS4", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json index dc573cba91..3ed33ea0f9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "ok1h38XzyQXPBIMM", - "filament_id": "FILAR0060", + "filament_id": "OFPbyOSk", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json index 04426a96ca..c5ed35c1f1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json @@ -3,7 +3,7 @@ "name": "FilAr PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FILARB01", + "filament_id": "OF4KsW72", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json index 6ba4cbfb87..1d6c41003b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "sZEY2QrlLsDkgZin", - "filament_id": "FILAR0022", + "filament_id": "OF8aFWfQ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json index ffc1c97a5a..a2f84470c4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "kOF3UfqKVqWKFwiH", - "filament_id": "FILAR0026", + "filament_id": "OFnYVFk2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json index a5bfa7d2d2..e9d68452dc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "9KxtnS1WoUAgH323", - "filament_id": "FILAR0017", + "filament_id": "OFHAccHz", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json index 2f03fc3ce8..1166928647 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "pAToQatK3PVTMHrW", - "filament_id": "FILAR0018", + "filament_id": "OFKTSiYF", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json index 58eafa2f7c..599c64038c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "bJuNDmVGIF0TXvkk", - "filament_id": "FILAR0001", + "filament_id": "OFWTRJ1K", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json index 3e98bc7ebf..b70feb22d4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "vlPu3T66cQhIr5nl", - "filament_id": "FILAR0006", + "filament_id": "OFWwF7K7", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json index 276d339eae..bdb948112a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "dNsCH2BVjuq3jrN7", - "filament_id": "FILAR0009", + "filament_id": "OFKWWgyp", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json index 9294b3e0d5..f0ca1c323c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "baAQZuzRZD0nwmqH", - "filament_id": "FILAR0027", + "filament_id": "OFaDOaNt", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json index 4fd0d180f7..44402e7b5a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "BpYgVH5d3LOdib3U", - "filament_id": "FILAR0003", + "filament_id": "OFNemJM6", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json index 77c31289ff..fd25d70050 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "KHIdy0oNw9YYDNOD", - "filament_id": "FILAR0029", + "filament_id": "OF5P4jgA", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json index acd8b8c9a0..d09d053c53 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "LBpWNtHWPyZi96wr", - "filament_id": "FILAR0025", + "filament_id": "OFIamQnD", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json index 1bf3af9593..c6809d1104 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "SeePXOShT3cge6TS", - "filament_id": "FILAR0024", + "filament_id": "OFTlRzpe", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json index 1cb23756fb..3748c83352 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "B6HABCdHSblZS7lQ", - "filament_id": "FILAR0002", + "filament_id": "OFKKajh6", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json index 00dbe089e4..81c6eb5928 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "tR4io22VQO0J8UsV", - "filament_id": "FILAR0007", + "filament_id": "OFexaZU2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json index bcd1b5ffb4..452b48010d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "r9eviTeCeTW4rLuz", - "filament_id": "FILAR0008", + "filament_id": "OFAt6ec0", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json index ca76d328c1..dd5475f0c6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "zLZxXa78e1oiYWSg", - "filament_id": "FILAR0020", + "filament_id": "OFKZ9skj", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json index 06082ff8c6..aaf06f8833 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "glc7ip75qjodcceS", - "filament_id": "FILAR0019", + "filament_id": "OFgMWJ8T", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json index 9cb39d2135..03e171b525 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "hCv43F2tNJagwzC7", - "filament_id": "FILAR0028", + "filament_id": "OF5nlfKY", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json index b18da8d2e8..4ae2924081 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "6ZwTYvV27Oj3l33v", - "filament_id": "FILAR0012", + "filament_id": "OFsDXRpS", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json index 516ceb83f9..95c3c870bc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "5dINxIgy0kMYYNDT", - "filament_id": "FILAR0021", + "filament_id": "OFaEesXQ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json index 512340cfdf..62763f36a5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "wgxgJfhOa2ZPikRH", - "filament_id": "FILAR0010", + "filament_id": "OFPqX3x2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json index afe39634fe..9fb203bb0c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "FhROwdLMSz3cyRZo", - "filament_id": "FILAR0011", + "filament_id": "OFZ4QbfK", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json index 05e71143ca..6925843d95 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "6ax7ka7LBHqhBigT", - "filament_id": "FILAR0005", + "filament_id": "OFjT9PkZ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json index fe00512045..f7b823fe5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "ZRedeSWJhUayeJLw", - "filament_id": "FILAR0004", + "filament_id": "OFQWIKbV", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json index da619c819a..e3355ffa43 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "SYWoimklLqx5O2Xh", - "filament_id": "FILAR0013", + "filament_id": "OFvPPMxL", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json index ac3fae3303..46772cf083 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "FlPRrQEcKnVKwJDM", - "filament_id": "FILAR0014", + "filament_id": "OFdb8YNz", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json index a1e594b840..6fe74aa2f3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "eWAcT15sDLZeV2uS", - "filament_id": "FILAR0016", + "filament_id": "OFkoLUtR", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json index c6932f6b22..9068b293f2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "Z7toK1R2GuzHVgfo", - "filament_id": "FILAR0015", + "filament_id": "OFkGvN4d", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json index 819187e0fe..fa12bcc077 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "4VO2Qb2cTXQ1TJv2", - "filament_id": "FILAR0023", + "filament_id": "OFP26zNb", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json index d012487eb7..729e9d7b9c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json @@ -3,7 +3,7 @@ "name": "FilAr PLA-mate @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FILARB02", + "filament_id": "OFtOoWIj", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json index e6e4811b6c..98a2349ac1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "f8DPrkYuTUPJ3cru", - "filament_id": "FILAR0030", + "filament_id": "OFj3bTjw", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json index d752c69555..7688708656 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "QMBocqysEed86R9y", - "filament_id": "FILAR0031", + "filament_id": "OF5vgi2G", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json index 3d4c2eb19a..2324dadcc5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "XoilIv3HqpDTVRwv", - "filament_id": "FILAR0032", + "filament_id": "OFGcLA5R", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json index d08673007a..92f10acf51 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "xkotTQheAIUUhPd7", - "filament_id": "FILAR0033", + "filament_id": "OFtefokm", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json index 8277b74545..4018c1d710 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "zV2dKrknk0ThDv36", - "filament_id": "FILAR0034", + "filament_id": "OFiDpM1B", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json index fadf1b26ff..ff47203106 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "UZW4F0aVz1TqstYi", - "filament_id": "FILAR0035", + "filament_id": "OFqtx549", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json index f184b6be29..b67e57db85 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "DdW1XKqqRuLM1cAd", - "filament_id": "FILAR0036", + "filament_id": "OFdzlrhi", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json index b2740bc3b4..445a44b1e4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "6OtKg1UxWuNCqsZy", - "filament_id": "FILAR0037", + "filament_id": "OFGVwfK0", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json index b3190c28d9..aa411c3d77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "lKOXMY37q8WpMdBA", - "filament_id": "FILAR0038", + "filament_id": "OF8jh0Lk", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json index b3fabc3603..2c382c085d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "MabNpNP8G9RqEruP", - "filament_id": "FILAR0039", + "filament_id": "OFmaeU4a", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json index d46222cad5..7ec4105a25 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "Jwrm1uuCo7UjvgWn", - "filament_id": "FILAR0040", + "filament_id": "OFufTAK9", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json index 49fd32c1ac..6635fe8b78 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "ifbCS3WypTUa1JHr", - "filament_id": "FILAR0041", + "filament_id": "OFfZcoKr", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json index 63a280b0c4..bed097ad9a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "ak2QX0IS74Nmtyex", - "filament_id": "FILAR0042", + "filament_id": "OFIBXa0k", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json index 78208657c8..1767674916 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "GrEXuL6TYue238MK", - "filament_id": "FILAR0043", + "filament_id": "OFausr3F", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json index 860ac8347d..0e5bb137e1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "PK1CsK7AS1p1IJaR", - "filament_id": "FILAR0044", + "filament_id": "OFEZ449N", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json index 7f49cb138e..67fe0ebfee 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "rsLi8jr62hHPgERG", - "filament_id": "FILAR0045", + "filament_id": "OFCjG251", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json index f60b17b69e..e842875905 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "z2Pk06JzY9Tr1WjQ", - "filament_id": "FILAR0046", + "filament_id": "OF2EK9F1", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json index bb09f036ff..95a8fd47ea 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "FusRock ABS-GF @base", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR00", + "filament_id": "OFmn9NZL", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).", "filament_extruder_variant": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json index fa4788b45a..e499fa3a73 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "W0LP8Ah5MHMzogvV", - "filament_id": "OGFB99", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json index a4e10439c2..f55ee5e239 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "bcsNcj4DzLb4K5zN", - "filament_id": "OGFB98", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json index 96c3dc4f34..7b34746bb2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_bvoh", "from": "system", "setting_id": "oUpbqz3uzQqND5DG", + "filament_id": "OFo2UF2C", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json index dbf10cf3f5..60c330fc39 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_cope", "from": "system", "setting_id": "KlHtaJU2GM0uaRGM", + "filament_id": "OFjt9en1", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json index 6caf96f6b1..646bef3f28 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_eva", "from": "system", "setting_id": "cFGhkhQKiFilQ9gZ", + "filament_id": "OFCD8qiU", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json index 44cedfc810..c4acb079be 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_hips", "from": "system", "setting_id": "A7gedcxip65DXKuf", + "filament_id": "OFsFon5l", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json index 2cf8b79680..4bea15a407 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "9DoeedUBMRPSCyu2", - "filament_id": "OGFN99", + "filament_id": "OFg8ndtj", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json index f7b9df437a..002959ab2d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "rchW8WI6gcXuAE0V", - "filament_id": "OGFN98", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json index fd5c80443c..f84c7fe7b6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "LNjv9LwZnbu7ZASC", - "filament_id": "OGFC99", + "filament_id": "OFLakOUI", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json index 967c5627cb..41ff08bd5c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pctg", "from": "system", "setting_id": "21dhMVBuVwR2lzIX", + "filament_id": "OFu1evlr", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json index 844ee902df..210c48b77a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "8HpfeTNwthJ7L0XE", + "filament_id": "OFPklMI1", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json index 48212f7143..53ca2e0f9d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PE-CF @base", "inherits": "fdm_filament_pe", "from": "system", - "filament_id": "OFJfx0Cl", + "filament_id": "OFd0Fv0k", "instantiation": "false", "filament_type": [ "PE-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json index 2eb975f56c..f6fb133324 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YiQZfhL6hH0giSHL", - "filament_id": "OGFG99", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json index f8de64e2a8..173f397a49 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json @@ -3,6 +3,6 @@ "name": "Generic PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFfB1QKi", + "filament_id": "OF7lOgYF", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json index 08bc8ad547..8bf644a26d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFDCk0cz", + "filament_id": "OFoYSJKi", "instantiation": "false", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json index dab5219261..c50840c55a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pha", "from": "system", "setting_id": "kks2z4JbypqY68RW", + "filament_id": "OF74KeQR", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json index c018544fa5..7bf0a0e72b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RcBNzytWgwRrwXXz", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json index 041ff59c44..d587a6d68d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "L9wOwDxavVR7vrL7", - "filament_id": "OGFL95", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json index 931ec3ea7e..7fed10e48e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json @@ -3,6 +3,6 @@ "name": "Generic PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFJsqMzx", + "filament_id": "OFmY0l6t", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json index 700b80761f..3bee7ccde6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_pla_silk", "from": "system", "setting_id": "oPkXDCBrTQB3SRm4", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json index d6a80ed8ee..972ef33800 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "l2LkEql1SVH0iRqY", - "filament_id": "OGFL98", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json index e2c16e704f..14e38bc340 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "yos4oScjK83JuXJV", + "filament_id": "OF1UNk9P", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json index f5fefcf0cb..1852185476 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PP-CF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "OFRS2Ggt", + "filament_id": "OFXkm8q1", "instantiation": "false", "filament_type": [ "PP-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json index 2544bac78a..08a8158d91 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json @@ -3,6 +3,6 @@ "name": "Generic PP-GF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "OFMCMXSG", + "filament_id": "OFNiSLfL", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json index a5fdd90f9c..99ee7acda7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "rZpVQIyltFNiQyW3", + "filament_id": "OF8tPByX", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json index 9ebf9cb656..3b5e1b7583 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "yJCAFLt5wstMgMAY", - "filament_id": "OGFN96", + "filament_id": "OF8Tlg47", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json index e1cf8643d1..c6300423ba 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1dlLnJKh1HzQCZVJ", - "filament_id": "OGFS99", + "filament_id": "OFDvXujf", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json index 082c4dd4bf..cf5aa1a8f6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "fjVWcIfxaOAZHNU1", + "filament_id": "OFhQfUQY", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json index be4543b662..c8ae9f2562 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "D6O8IcmSe8WGqOvb", - "filament_id": "OGFU99", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json index 284c63ab9c..a0ba8360d6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json @@ -3,7 +3,7 @@ "name": "GreenGate3D PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFGG300", + "filament_id": "OFhMO9Kh", "instantiation": "false", "filament_cost": [ "32" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json index 78d2166f9e..8fb4f4c187 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json @@ -3,7 +3,7 @@ "name": "NIT ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "NIT01", + "filament_id": "OFhWc5Bv", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json index 8e84b68607..2fd955a1b1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json @@ -3,7 +3,7 @@ "name": "NIT PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "NIT03", + "filament_id": "OFJu1XwK", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json index 89b6842010..ff541d0239 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json @@ -3,7 +3,7 @@ "name": "NIT PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "NIT02", + "filament_id": "OFwRJ4g0", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json index c0c2c86585..818b181355 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Numakers PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFNMK00", + "filament_id": "OFqGRZyH", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json index 3ceb467a61..5029f42e5d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json @@ -3,7 +3,7 @@ "name": "Overture ABS Basic @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OVTABS08", + "filament_id": "OFDvqJ6n", "instantiation": "false", "description": "Overture ABS settings from https://overture3d.com/.", "activate_air_filtration": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json index 415bf9e6d1..31357aadf6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json @@ -3,7 +3,7 @@ "name": "Overture ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFOT009", + "filament_id": "OFM91vZs", "instantiation": "false", "fan_cooling_layer_time": [ "45" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json index 39e351a24c..6ce9a126cc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Air PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT006", + "filament_id": "OFcfQk4h", "instantiation": "false", "filament_cost": [ "27.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json index a0c11e0a81..d4388a6c90 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Easy PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT003", + "filament_id": "OF1Pke8t", "instantiation": "false", "filament_cost": [ "17.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json index 3f4dd854a3..43d4abe1d8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Matte PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL05", + "filament_id": "OFBw6eEG", "instantiation": "false", "filament_cost": [ "24.52" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json index 486d34d0e5..45ae0ba24b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL04", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_cost": [ "24.15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json index 80525e03b2..454c36e7b0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT001", + "filament_id": "OFxA1p01", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json index 3317a8e0a9..5027f3ac01 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Rock PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT004", + "filament_id": "OFMZvH0z", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json index 0fd19a6323..ca1a187fe0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Silk PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT002", + "filament_id": "OFGkyftV", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json index 0bab3f81f0..776367ba06 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Overture Super PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT005", + "filament_id": "OF2pj5l5", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json index bdc7f4e236..20ff507393 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json @@ -3,7 +3,7 @@ "name": "Overture TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFOT008", + "filament_id": "OFcvKkrs", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json index 7b5740c1df..a5aa03bf9b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL52", + "filament_id": "OFX0ycRQ", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json index d96e531b0d..96b913c738 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL50", + "filament_id": "OFkOviHk", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json index b5e9c57851..607b1c8e00 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL51", + "filament_id": "OFwaYjL6", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json index 4fa1bd200d..3765f754f5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL53", + "filament_id": "OFS2tn6G", "instantiation": "false", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json index 1e74b59930..6946d6e0a3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL54", + "filament_id": "OFHWSM21", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json index 500fac4037..11d2f9023f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json index 12cc822453..489e03bc64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL55", + "filament_id": "OFk8t9mz", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json index d856da86cc..52f2ed96f4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json index 2c4f278387..94d7383fef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json index 10c999c3a8..123ba02747 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json index 40ae42e78c..d98e119c0b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json index c5219dea65..9a162062a3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json index 48158b336a..a6f61c9e5f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json index 11954166b9..e514df6f78 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json index 6e965f908d..87da70c021 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json index 3a7d3f93eb..820fc99703 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json index d9a68636c8..c57c976d11 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json index 4e55dcd18c..52d96d24d1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json @@ -4,7 +4,7 @@ "renamed_from": "Panchroma PLA Stain @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json index 08fabb165e..d0df636abb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json index bed7d34e53..d271daa50a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json index 5d8adcda38..9de5e084b3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json index e3c3355b43..d6da194349 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json index 97009b894d..1a2662f1bc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json index 759c29892a..540a6b846d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB60", + "filament_id": "OFOvv91M", "instantiation": "false", "filament_cost": [ "26.9" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json index 78340f6984..95b4d39c1a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB61", + "filament_id": "OFvrXuV7", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json index fc31b9bc35..814e641e1a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json @@ -3,6 +3,6 @@ "name": "PolyLite Dual PLA @base", "inherits": "PolyLite PLA @base", "from": "system", - "filament_id": "OFsNZcid", + "filament_id": "OFYGbPHX", "instantiation": "false" } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json index 448bb2c66f..7e8312f282 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json index 4fc233d3e6..00547fdbe8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @base", "from": "system", "setting_id": "MKxTIucBtfpUvIhZ", - "filament_id": "OGFL00", + "filament_id": "OF5CgdDq", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json index 65e8f261fb..55ea664946 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json index bdd34f2b03..0b21f98254 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json index 84b6fb4aea..05d3492408 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json @@ -5,7 +5,7 @@ "inherits": "PolyTerra PLA @base", "from": "system", "setting_id": "OajdcsUZSmrTA2vC", - "filament_id": "OGFL00-1", + "filament_id": "OFCccVrQ", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json index d2bec7fcd5..3b13c5b55c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json index 22b1106271..db7624e45a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json index 38a73bca9f..866ce490e9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "filament_cost": [ "32.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json index 149a1dc107..aa1a2bab42 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json index 4c564801df..e8152acbcf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json index f99430b2f7..34035846fb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index 7424503b9f..832c2a4f06 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json index f890c225be..1fffd42112 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json index ac28782615..35f599e125 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json index cd9bbec953..fc94c630a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json index 77fa861c7b..6fa2f8a04d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT01", + "filament_id": "OFDe8uyM", "instantiation": "false", "filament_cost": [ "670" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json index 9920f9a504..e181556086 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT04", + "filament_id": "OFB5SmWk", "instantiation": "false", "filament_cost": [ "850" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json index d873590f08..1deb8d1983 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT02", + "filament_id": "OFpBlrvY", "instantiation": "false", "filament_cost": [ "710" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json index 4451cffadb..f498a6f162 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT03", + "filament_id": "OFfq5YXA", "instantiation": "false", "filament_cost": [ "1400" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json index d37476f458..78a3698530 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json @@ -3,7 +3,6 @@ "name": "fdm_filament_bvoh", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFS97", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json index 80ffd173de..6f41efb419 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json @@ -3,7 +3,6 @@ "name": "fdm_filament_cope", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFLC99", "instantiation": "false", "filament_type": [ "CoPE" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json index bf1ff86af1..4edb63b575 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json @@ -3,7 +3,6 @@ "name": "fdm_filament_eva", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR99", "instantiation": "false", "filament_type": [ "EVA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json index beaebbd0e7..f8684e81cf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json @@ -3,7 +3,6 @@ "name": "fdm_filament_hips", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFS98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json index c2e4cf86df..b75ab9a8c9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN99", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json index 0f550063ad..b33b21cdab 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json @@ -3,7 +3,7 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFC99", + "filament_id": "OFtcKVgP", "instantiation": "false", "supertack_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json index 8ca7e39994..a7f543bac5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pctg", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG97", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json index beb533d07f..52bf63abab 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pe", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFP99", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json index eabb12c708..81a9bf77ab 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG99", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json index f6ef3ffc0c..9d35570511 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pha", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR98", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json index ae82d44129..43d579a2eb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFL99", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json index 3680a85602..67f18caf9e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla_silk", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL96", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_flow_ratio": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json index ec9405ef9a..9ba5c3504c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pp", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFP97", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json index 3eac71bc69..abfda9f1a8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_ppa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN97", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json index 96626d808d..f8aa9b6d99 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_sbs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OFLSBS99", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json index 576da66278..53a489aaf2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json @@ -3,7 +3,7 @@ "name": "eSUN PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "ESN03", + "filament_id": "OF3kBrdA", "instantiation": "false", "filament_vendor": [ "eSUN" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json index 26bbba31d9..4e3ab1d49f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL03", + "filament_id": "OFqINlYj", "instantiation": "false", "filament_cost": [ "22.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json index cef96aa7fc..16fc0dad97 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFZhdVnP", + "filament_id": "OFTcE0nA", "instantiation": "false", "filament_cost": [ "11.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json index 1b6302372c..13fda6764f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFXmQgno", + "filament_id": "OF7H3VJM", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json index e4c42a3a5b..ffb7bd8dcd 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OF3GKs2i", + "filament_id": "OFDETOM6", "instantiation": "false", "filament_cost": [ "14.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json index 138a388419..d80efe22cf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "pYoZnuVPPIlMbdT1", - "filament_id": "ESN02", + "filament_id": "OFRzR5mi", "instantiation": "true", "filament_type": [ "PLA-AERO" diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index 3840098c11..a23c0d8cbc 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -1,6 +1,685 @@ { - "hints": {}, + "hints": { + "GFOT001": "OFxA1p01", + "GFOT002": "OFGkyftV", + "GFOT003": "OF1Pke8t", + "GFOT004": "OFMZvH0z", + "GFOT005": "OF2pj5l5", + "GFOT006": "OFcfQk4h", + "GFOT008": "OFcvKkrs", + "GFOT009": "OFM91vZs", + "GFSEP001": "OFtudokz", + "GFSEP002": "OFf5awy4", + "GFSEP003": "OFbP8zEO", + "GFSEP004": "OFrFBEfd", + "GFSEP005": "OFvzvwCu", + "GFSEP006": "OFH2nN08", + "GFSEP007": "OFPc4zVY", + "GFSEP008": "OFkzr35f", + "GFSEP009": "OFHfzQXo", + "GFSEP010": "OFhWhL1i", + "GFSEP011": "OFx8Lmsd", + "GFSEP012": "OFRiFnfQ", + "GFSEP013": "OFhfd722", + "GFSEP014": "OFIegjmD", + "GFSEP015": "OFvVy7yo", + "GFSEP016": "OFTOPcx0", + "GFSEP017": "OFXCBZTA", + "GFSEP018": "OFlSNkhc" + }, "retired": { + "AZ01-1": { + "claims": [ + "BBL/AliZ PETG-CF", + "OrcaFilamentLibrary/AliZ PETG-CF" + ], + "successor": "OFJOFnOZ" + }, + "AZ01-2": { + "claims": [ + "BBL/AliZ PETG-Metal", + "OrcaFilamentLibrary/AliZ PETG-Metal" + ], + "successor": "OFOABq7t" + }, + "AliZ001": { + "claims": [ + "BBL/AliZ PETG", + "OrcaFilamentLibrary/AliZ PETG" + ], + "successor": "OFocyw69" + }, + "AliZ002": { + "claims": [ + "BBL/AliZ PLA", + "OrcaFilamentLibrary/AliZ PLA" + ], + "successor": "OFyxayW4" + }, + "AliZ003": { + "claims": [ + "BBL/AliZ PA-CF", + "OrcaFilamentLibrary/AliZ PA-CF" + ], + "successor": "OFd4zw5l" + }, + "CX30DB20": { + "claims": [ + "BBL/COEX TPE 30D", + "OrcaFilamentLibrary/COEX TPE 30D" + ], + "successor": "OFVptRxp" + }, + "CX40DB20": { + "claims": [ + "BBL/COEX TPE 40D", + "OrcaFilamentLibrary/COEX TPE 40D" + ], + "successor": "OFfnXFie" + }, + "CX60AB17": { + "claims": [ + "BBL/COEX TPU 60A", + "OrcaFilamentLibrary/COEX TPU 60A" + ], + "successor": "OFE0NFRh" + }, + "CX60DB19": { + "claims": [ + "BBL/COEX TPE 60D", + "OrcaFilamentLibrary/COEX TPE 60D" + ], + "successor": "OFfr4XNO" + }, + "CXABPB09": { + "claims": [ + "BBL/COEX ABS PRIME", + "OrcaFilamentLibrary/COEX ABS PRIME" + ], + "successor": "OFuWCQXN" + }, + "CXABSB01": { + "claims": [ + "BBL/COEX ABS", + "OrcaFilamentLibrary/COEX ABS" + ], + "successor": "OF99UMPq" + }, + "CXASAB04": { + "claims": [ + "BBL/COEX ASA PRIME", + "OrcaFilamentLibrary/COEX ASA PRIME" + ], + "successor": "OFtpXCCv" + }, + "CXPACB23": { + "claims": [ + "BBL/COEX NYLEX PA6-CF", + "OrcaFilamentLibrary/COEX NYLEX PA6-CF" + ], + "successor": "OF0NgY1y" + }, + "CXPAUB21": { + "claims": [ + "BBL/COEX NYLEX UNFILLED " + ], + "successor": "OFJs1ToM" + }, + "CXPCTB15": { + "claims": [ + "BBL/COEX PCTG PRIME", + "OrcaFilamentLibrary/COEX PCTG PRIME" + ], + "successor": "OFwu7IAG" + }, + "CXPETB13": { + "claims": [ + "BBL/COEX PETG", + "OrcaFilamentLibrary/COEX PETG" + ], + "successor": "OFvTVZc3" + }, + "CXPLAB02": { + "claims": [ + "BBL/COEX PLA", + "OrcaFilamentLibrary/COEX PLA" + ], + "successor": "OFhlCNqq" + }, + "CXPLAB08": { + "claims": [ + "BBL/COEX PLA PRIME", + "OrcaFilamentLibrary/COEX PLA PRIME" + ], + "successor": "OFd2vX0G" + }, + "CXPLSB03": { + "claims": [ + "BBL/COEX PLA+Silk", + "OrcaFilamentLibrary/COEX PLA+Silk" + ], + "successor": "OF0pzFLc" + }, + "DREMC001": { + "claims": [], + "successor": null + }, + "DREMC002": { + "claims": [], + "successor": null + }, + "DREMC003": { + "claims": [], + "successor": null + }, + "DREMC004": { + "claims": [], + "successor": null + }, + "DREMC005": { + "claims": [], + "successor": null + }, + "DREMC006": { + "claims": [ + "OrcaFilamentLibrary/DREMC PA6-CF" + ], + "successor": "OFsoykbm" + }, + "DREMC007": { + "claims": [], + "successor": null + }, + "DREMC008": { + "claims": [], + "successor": null + }, + "DREMC009": { + "claims": [ + "OrcaFilamentLibrary/DREMC ABS-GF" + ], + "successor": "OFCidU7j" + }, + "DREMC010": { + "claims": [ + "OrcaFilamentLibrary/DREMC PPA-CF" + ], + "successor": "OFiWaoqD" + }, + "DREMC011": { + "claims": [], + "successor": null + }, + "DREMC012": { + "claims": [], + "successor": null + }, + "DREMC013": { + "claims": [], + "successor": null + }, + "ESN02": { + "claims": [ + "OrcaFilamentLibrary/eSUN ePLA-LW" + ], + "successor": "OFRzR5mi" + }, + "ESN03": { + "claims": [ + "OrcaFilamentLibrary/eSUN PETG" + ], + "successor": "OF3kBrdA" + }, + "FDPLAST01": { + "claims": [ + "OrcaFilamentLibrary/FDplast ABS" + ], + "successor": "OFjorDcx" + }, + "FDPLAST02": { + "claims": [ + "OrcaFilamentLibrary/FDplast HIPS" + ], + "successor": "OFmJAd3A" + }, + "FDPLAST03": { + "claims": [ + "OrcaFilamentLibrary/FDplast PETG" + ], + "successor": "OFfJSCzm" + }, + "FDPLAST04": { + "claims": [ + "OrcaFilamentLibrary/FDplast PLA" + ], + "successor": "OFtr8eZw" + }, + "FDPLAST05": { + "claims": [ + "OrcaFilamentLibrary/FDplast SBS" + ], + "successor": "OFtRn8X8" + }, + "FDPLAST06": { + "claims": [ + "OrcaFilamentLibrary/FDplast TPU" + ], + "successor": "OFfmZrI3" + }, + "FILAR0001": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Bronce" + ], + "successor": "OFWTRJ1K" + }, + "FILAR0002": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Gris Plata" + ], + "successor": "OFKKajh6" + }, + "FILAR0003": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Cobre" + ], + "successor": "OFNemJM6" + }, + "FILAR0004": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Titanio" + ], + "successor": "OFQWIKbV" + }, + "FILAR0005": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Tabaco" + ], + "successor": "OFjT9PkZ" + }, + "FILAR0006": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" + ], + "successor": "OFWwF7K7" + }, + "FILAR0007": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Manteca" + ], + "successor": "OFexaZU2" + }, + "FILAR0008": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Marron Oxido" + ], + "successor": "OFAt6ec0" + }, + "FILAR0009": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Carpincho" + ], + "successor": "OFKWWgyp" + }, + "FILAR0010": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" + ], + "successor": "OFPqX3x2" + }, + "FILAR0011": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" + ], + "successor": "OFZ4QbfK" + }, + "FILAR0012": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Piel" + ], + "successor": "OFsDXRpS" + }, + "FILAR0013": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Verde FilAr" + ], + "successor": "OFvPPMxL" + }, + "FILAR0014": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Verde Manzana" + ], + "successor": "OFdb8YNz" + }, + "FILAR0015": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Verde Pixel" + ], + "successor": "OFkGvN4d" + }, + "FILAR0016": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Verde Oliva" + ], + "successor": "OFkoLUtR" + }, + "FILAR0017": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" + ], + "successor": "OFHAccHz" + }, + "FILAR0018": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Calido" + ], + "successor": "OFKTSiYF" + }, + "FILAR0019": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Negro Azabache" + ], + "successor": "OFgMWJ8T" + }, + "FILAR0020": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" + ], + "successor": "OFKZ9skj" + }, + "FILAR0021": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" + ], + "successor": "OFaEesXQ" + }, + "FILAR0022": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" + ], + "successor": "OF8aFWfQ" + }, + "FILAR0023": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" + ], + "successor": "OFP26zNb" + }, + "FILAR0024": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" + ], + "successor": "OFTlRzpe" + }, + "FILAR0025": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" + ], + "successor": "OFIamQnD" + }, + "FILAR0026": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Azul Francia" + ], + "successor": "OFnYVFk2" + }, + "FILAR0027": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" + ], + "successor": "OFaDOaNt" + }, + "FILAR0028": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Oro" + ], + "successor": "OF5nlfKY" + }, + "FILAR0029": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA Dorado" + ], + "successor": "OF5P4jgA" + }, + "FILAR0030": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" + ], + "successor": "OFj3bTjw" + }, + "FILAR0031": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Azul" + ], + "successor": "OF5vgi2G" + }, + "FILAR0032": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Beige" + ], + "successor": "OFGcLA5R" + }, + "FILAR0033": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Blanco" + ], + "successor": "OFtefokm" + }, + "FILAR0034": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Bordo" + ], + "successor": "OFiDpM1B" + }, + "FILAR0035": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" + ], + "successor": "OFqtx549" + }, + "FILAR0036": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" + ], + "successor": "OFdzlrhi" + }, + "FILAR0037": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Gris" + ], + "successor": "OFGVwfK0" + }, + "FILAR0038": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Marron" + ], + "successor": "OF8jh0Lk" + }, + "FILAR0039": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Naranja" + ], + "successor": "OFmaeU4a" + }, + "FILAR0040": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Negro" + ], + "successor": "OFufTAK9" + }, + "FILAR0041": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Piel" + ], + "successor": "OFfZcoKr" + }, + "FILAR0042": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rojo" + ], + "successor": "OFIBXa0k" + }, + "FILAR0043": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rosa" + ], + "successor": "OFausr3F" + }, + "FILAR0044": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Uva" + ], + "successor": "OFEZ449N" + }, + "FILAR0045": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Verde" + ], + "successor": "OFCjG251" + }, + "FILAR0046": { + "claims": [ + "OrcaFilamentLibrary/FilAr PLA-mate Violeta" + ], + "successor": "OF2EK9F1" + }, + "FILAR0047": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" + ], + "successor": "OFt6e0US" + }, + "FILAR0048": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" + ], + "successor": "OF0Vtzaw" + }, + "FILAR0049": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Azul Boreal" + ], + "successor": "OFNU9YIW" + }, + "FILAR0050": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Azul Francia" + ], + "successor": "OF44VYzK" + }, + "FILAR0051": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Azul Imperial" + ], + "successor": "OF2Z1nT5" + }, + "FILAR0052": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" + ], + "successor": "OFsXQXbs" + }, + "FILAR0053": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Cian" + ], + "successor": "OFnejEt4" + }, + "FILAR0054": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Coral" + ], + "successor": "OFysxCep" + }, + "FILAR0055": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Cristal" + ], + "successor": "OFJQDUk3" + }, + "FILAR0056": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" + ], + "successor": "OFybzvQN" + }, + "FILAR0057": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Gris Plata" + ], + "successor": "OFgpLTMR" + }, + "FILAR0058": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Magenta" + ], + "successor": "OFurdQxc" + }, + "FILAR0059": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Negro Azabache" + ], + "successor": "OFq8gfS4" + }, + "FILAR0060": { + "claims": [ + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" + ], + "successor": "OFPbyOSk" + }, + "FILARB01": { + "claims": [], + "successor": null + }, + "FILARB02": { + "claims": [], + "successor": null + }, + "FILARB03": { + "claims": [], + "successor": null + }, + "FILL3D001": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PLA Turbo" + ], + "successor": "OFoSknDB" + }, + "FILL3D002": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PLA Basic" + ], + "successor": "OFDpW3J8" + }, + "FILL3D003": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PETG" + ], + "successor": "OFQbjX3s" + }, + "FILL3D004": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PP" + ], + "successor": "OFPWPlSC" + }, + "FILL3D005": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PPCF" + ], + "successor": "OFg8hMzT" + }, + "FILL3D006": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PA" + ], + "successor": "OFJNeELv" + }, + "FILL3D007": { + "claims": [ + "OrcaFilamentLibrary/FILL3D PETG CF" + ], + "successor": "OFOiJfLM" + }, "GFABS": { "claims": [ "Anycubic/Anycubic ABS" @@ -49,6 +728,709 @@ ], "successor": "OFgrGfPy" }, + "NIT01": { + "claims": [ + "OrcaFilamentLibrary/NIT ABS" + ], + "successor": "OFhWc5Bv" + }, + "NIT02": { + "claims": [ + "OrcaFilamentLibrary/NIT PLA" + ], + "successor": "OFwRJ4g0" + }, + "NIT03": { + "claims": [ + "OrcaFilamentLibrary/NIT PETG" + ], + "successor": "OFJu1XwK" + }, + "OEABSB00": { + "claims": [ + "OrcaFilamentLibrary/Elegoo ABS" + ], + "successor": "OFxOHhZw" + }, + "OEASAB00": { + "claims": [ + "OrcaFilamentLibrary/Elegoo ASA" + ], + "successor": "OFobDOW5" + }, + "OEPAHTB0": { + "claims": [ + "OrcaFilamentLibrary/Elegoo PAHT-CF" + ], + "successor": "OF0h7ERL" + }, + "OEPCB00": { + "claims": [ + "OrcaFilamentLibrary/Elegoo PC" + ], + "successor": "OFUyDDNv" + }, + "OEPETGB0": { + "claims": [ + "OrcaFilamentLibrary/Elegoo PETG" + ], + "successor": "OFLcd093" + }, + "OEPLAB00": { + "claims": [ + "OrcaFilamentLibrary/Elegoo PLA" + ], + "successor": "OFvgE0Zh" + }, + "OETPUB00": { + "claims": [ + "OrcaFilamentLibrary/Elegoo TPU 95A" + ], + "successor": "OFmhJs5V" + }, + "OFLSBS99": { + "claims": [ + "OrcaFilamentLibrary/Generic SBS" + ], + "successor": "OFhQfUQY" + }, + "OGFA00": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Basic" + ], + "successor": "OFoiVqVM" + }, + "OGFA01": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Matte" + ], + "successor": "OFXIbw5D" + }, + "OGFA02": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Metal" + ], + "successor": "OFrKLeE3" + }, + "OGFA03": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Impact" + ], + "successor": "OFTGHyNC" + }, + "OGFA05": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Silk" + ], + "successor": "OFEGNJD4" + }, + "OGFA06": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Silk+" + ], + "successor": "OFUanySo" + }, + "OGFA07": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Marble" + ], + "successor": "OF9OlTWH" + }, + "OGFA08": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Sparkle" + ], + "successor": "OFDxfPgH" + }, + "OGFA09": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Tough" + ], + "successor": "OFaQMgRH" + }, + "OGFA11": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Aero" + ], + "successor": "OFBSW57R" + }, + "OGFA12": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Glow" + ], + "successor": "OFEkPBwx" + }, + "OGFA13": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Dynamic" + ], + "successor": "OFDGigEI" + }, + "OGFA15": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Galaxy" + ], + "successor": "OFQ3e56w" + }, + "OGFA16": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA Wood" + ], + "successor": "OFMjtqTC" + }, + "OGFA50": { + "claims": [ + "OrcaFilamentLibrary/Bambu PLA-CF" + ], + "successor": "OFEswT5W" + }, + "OGFB00": { + "claims": [ + "OrcaFilamentLibrary/Bambu ABS" + ], + "successor": "OFhuaUQB" + }, + "OGFB01": { + "claims": [ + "OrcaFilamentLibrary/Bambu ASA" + ], + "successor": "OFfBpSRI" + }, + "OGFB02": { + "claims": [ + "OrcaFilamentLibrary/Bambu ASA-Aero" + ], + "successor": "OFXzQ4yL" + }, + "OGFB50": { + "claims": [ + "OrcaFilamentLibrary/Bambu ABS-GF" + ], + "successor": "OFknl9Iz" + }, + "OGFB51": { + "claims": [ + "OrcaFilamentLibrary/Bambu ASA-CF" + ], + "successor": "OF0wBGNx" + }, + "OGFB60": { + "claims": [ + "OrcaFilamentLibrary/PolyLite ABS" + ], + "successor": "OFOvv91M" + }, + "OGFB61": { + "claims": [ + "OrcaFilamentLibrary/PolyLite ASA" + ], + "successor": "OFvrXuV7" + }, + "OGFB98": { + "claims": [ + "Custom/Generic ASA", + "OrcaFilamentLibrary/Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OGFB99": { + "claims": [ + "Custom/Generic ABS", + "OrcaFilamentLibrary/Generic ABS", + "Sovol/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OGFC00": { + "claims": [ + "OrcaFilamentLibrary/Bambu PC" + ], + "successor": "OFKhMPeX" + }, + "OGFC01": { + "claims": [ + "OrcaFilamentLibrary/Bambu PC FR" + ], + "successor": "OFg57Nmc" + }, + "OGFG00": { + "claims": [ + "OrcaFilamentLibrary/Bambu PETG Basic" + ], + "successor": "OFFvzqcd" + }, + "OGFG01": { + "claims": [ + "OrcaFilamentLibrary/Bambu PETG Translucent" + ], + "successor": "OFwPrlCM" + }, + "OGFG02": { + "claims": [ + "OrcaFilamentLibrary/Bambu PETG HF" + ], + "successor": "OFovEIbw" + }, + "OGFG50": { + "claims": [ + "OrcaFilamentLibrary/Bambu PETG-CF" + ], + "successor": "OFTRZ8Y4" + }, + "OGFG60": { + "claims": [ + "OrcaFilamentLibrary/PolyLite PETG" + ], + "successor": "OF0UJcb6" + }, + "OGFG97": { + "claims": [ + "OrcaFilamentLibrary/Generic PCTG" + ], + "successor": "OFu1evlr" + }, + "OGFGG300": { + "claims": [ + "OrcaFilamentLibrary/GreenGate3D PETG" + ], + "successor": "OFhMO9Kh" + }, + "OGFL00": { + "claims": [ + "OrcaFilamentLibrary/PolyLite PLA" + ], + "successor": "OF5CgdDq" + }, + "OGFL00-1": { + "claims": [ + "OrcaFilamentLibrary/PolyTerra Dual PLA" + ], + "successor": "OFCccVrQ" + }, + "OGFL01": { + "claims": [ + "OrcaFilamentLibrary/PolyTerra PLA", + "Snapmaker/PolyTerra PLA" + ], + "successor": "OFW29a9R" + }, + "OGFL03": { + "claims": [ + "OrcaFilamentLibrary/eSUN PLA+" + ], + "successor": "OFqINlYj" + }, + "OGFL04": { + "claims": [ + "OrcaFilamentLibrary/Overture PLA" + ], + "successor": "OFc3xdm9" + }, + "OGFL05": { + "claims": [ + "OrcaFilamentLibrary/Overture Matte PLA" + ], + "successor": "OFBw6eEG" + }, + "OGFL06": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PETG-ESD" + ], + "successor": "OFcytyoA" + }, + "OGFL50": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PA6-CF" + ], + "successor": "OFkOviHk" + }, + "OGFL51": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PA6-GF" + ], + "successor": "OFwaYjL6" + }, + "OGFL52": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PA12-CF" + ], + "successor": "OFX0ycRQ" + }, + "OGFL53": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PA612-CF" + ], + "successor": "OFS2tn6G" + }, + "OGFL54": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PET-CF" + ], + "successor": "OFHWSM21" + }, + "OGFL55": { + "claims": [ + "OrcaFilamentLibrary/Fiberon PETG-rCF" + ], + "successor": "OFk8t9mz" + }, + "OGFL95": { + "claims": [ + "OrcaFilamentLibrary/Generic PLA High Speed" + ], + "successor": "OFmpMwxS" + }, + "OGFL98": { + "claims": [ + "OrcaFilamentLibrary/Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OGFL99": { + "claims": [ + "Flashforge/Generic PLA", + "OrcaFilamentLibrary/Generic PLA", + "Sovol/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OGFLC99": { + "claims": [ + "OrcaFilamentLibrary/Generic CoPE" + ], + "successor": "OFjt9en1" + }, + "OGFN03": { + "claims": [ + "OrcaFilamentLibrary/Bambu PA-CF" + ], + "successor": "OFFNYwWR" + }, + "OGFN04": { + "claims": [ + "OrcaFilamentLibrary/Bambu PAHT-CF" + ], + "successor": "OF2VFe4J" + }, + "OGFN05": { + "claims": [ + "OrcaFilamentLibrary/Bambu PA6-CF" + ], + "successor": "OFniMuTN" + }, + "OGFN06": { + "claims": [ + "OrcaFilamentLibrary/Bambu PPA-CF" + ], + "successor": "OF54B0S0" + }, + "OGFN08": { + "claims": [ + "OrcaFilamentLibrary/Bambu PA6-GF" + ], + "successor": "OFNk8bxk" + }, + "OGFN96": { + "claims": [ + "OrcaFilamentLibrary/Generic PPA-GF" + ], + "successor": "OF8Tlg47" + }, + "OGFN97": { + "claims": [ + "OrcaFilamentLibrary/Generic PPA-CF" + ], + "successor": "OF8tPByX" + }, + "OGFN98": { + "claims": [ + "Custom/Generic PA-CF", + "OrcaFilamentLibrary/Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OGFNMK00": { + "claims": [ + "OrcaFilamentLibrary/Numakers PLA+" + ], + "successor": "OFqGRZyH" + }, + "OGFP97": { + "claims": [ + "OrcaFilamentLibrary/Generic PP" + ], + "successor": "OF1UNk9P" + }, + "OGFP99": { + "claims": [ + "OrcaFilamentLibrary/Generic PE" + ], + "successor": "OFPklMI1" + }, + "OGFPM001": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA" + ], + "successor": "OFsRDvTM" + }, + "OGFPM002": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Matte" + ], + "successor": "OFrOh600" + }, + "OGFPM003": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Marble" + ], + "successor": "OFKiSMWR" + }, + "OGFPM004": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Silk" + ], + "successor": "OFS8lTQt" + }, + "OGFPM005": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Satin" + ], + "successor": "OFPkCJKE" + }, + "OGFPM006": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Translucent" + ], + "successor": "OFCIUsWh" + }, + "OGFPM007": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Galaxy" + ], + "successor": "OFFkCLBl" + }, + "OGFPM008": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Celestial" + ], + "successor": "OFRiYgMK" + }, + "OGFPM009": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Starlight" + ], + "successor": "OFC78WGQ" + }, + "OGFPM010": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Glow" + ], + "successor": "OF0gGRWk" + }, + "OGFPM011": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Luminous" + ], + "successor": "OF0kCNDK" + }, + "OGFPM012": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Metallic" + ], + "successor": "OFjb0wos" + }, + "OGFPM013": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Neon" + ], + "successor": "OFO1GEq6" + }, + "OGFPM014": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA UV Shift" + ], + "successor": "OF1N1qMK" + }, + "OGFPM015": { + "claims": [ + "OrcaFilamentLibrary/Panchroma PLA Temp Shift" + ], + "successor": "OFhASRWj" + }, + "OGFPM016": { + "claims": [ + "OrcaFilamentLibrary/Panchroma CoPE" + ], + "successor": "OFqw2PQA" + }, + "OGFPM017": { + "claims": [ + "OrcaFilamentLibrary/Polymaker HT-PLA" + ], + "successor": "OFPoyiFs" + }, + "OGFPM018": { + "claims": [ + "OrcaFilamentLibrary/Polymaker HT-PLA-GF" + ], + "successor": "OFlwmqrC" + }, + "OGFPM019": { + "claims": [ + "OrcaFilamentLibrary/PolyLite PLA Pro" + ], + "successor": "OFF9OKoY" + }, + "OGFR00": { + "claims": [ + "OrcaFilamentLibrary/FusRock ABS-GF" + ], + "successor": "OFmn9NZL" + }, + "OGFR98": { + "claims": [ + "OrcaFilamentLibrary/Generic PHA" + ], + "successor": "OF74KeQR" + }, + "OGFR99": { + "claims": [ + "OrcaFilamentLibrary/Generic EVA" + ], + "successor": "OFCD8qiU" + }, + "OGFS00": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support W" + ], + "successor": "OFsHSVZc" + }, + "OGFS01": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support G" + ], + "successor": "OFQHiNJs" + }, + "OGFS02": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support For PLA" + ], + "successor": "OFAnyRUI" + }, + "OGFS03": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support For PA/PET" + ], + "successor": "OFMTK0UC" + }, + "OGFS04": { + "claims": [ + "OrcaFilamentLibrary/Bambu PVA" + ], + "successor": "OFzyIxba" + }, + "OGFS05": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support For PLA/PETG" + ], + "successor": "OFIfnzxC" + }, + "OGFS06": { + "claims": [ + "OrcaFilamentLibrary/Bambu Support for ABS" + ], + "successor": "OFf6mfQO" + }, + "OGFS97": { + "claims": [ + "Flashforge/Generic BVOH", + "OrcaFilamentLibrary/Generic BVOH" + ], + "successor": "OFo2UF2C" + }, + "OGFS98": { + "claims": [ + "OrcaFilamentLibrary/Generic HIPS" + ], + "successor": "OFsFon5l" + }, + "OGFS99": { + "claims": [ + "OrcaFilamentLibrary/Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OGFSNL02": { + "claims": [ + "OrcaFilamentLibrary/SUNLU PLA Matte" + ], + "successor": "OFpW4gdi" + }, + "OGFSNL03": { + "claims": [ + "OrcaFilamentLibrary/SUNLU PLA+" + ], + "successor": "OFMUWNkp" + }, + "OGFSNL04": { + "claims": [ + "OrcaFilamentLibrary/SUNLU PLA+ 2.0" + ], + "successor": "OFHmPYRy" + }, + "OGFSNL05": { + "claims": [ + "OrcaFilamentLibrary/SUNLU Silk PLA+" + ], + "successor": "OFpPGSKG" + }, + "OGFSNL06": { + "claims": [ + "OrcaFilamentLibrary/SUNLU PLA Marble" + ], + "successor": "OFxUwUeW" + }, + "OGFSNL07": { + "claims": [ + "OrcaFilamentLibrary/SUNLU Wood PLA" + ], + "successor": "OFLJ8S6I" + }, + "OGFT01": { + "claims": [ + "OrcaFilamentLibrary/Bambu PET-CF" + ], + "successor": "OFHa48An" + }, + "OGFT02": { + "claims": [], + "successor": null + }, + "OGFU00": { + "claims": [ + "OrcaFilamentLibrary/Bambu TPU 95A HF" + ], + "successor": "OFvKUnLh" + }, + "OGFU01": { + "claims": [ + "OrcaFilamentLibrary/Bambu TPU 95A" + ], + "successor": "OFVCkX5w" + }, + "OGFU99": { + "claims": [ + "OrcaFilamentLibrary/Generic TPU", + "Sovol/Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OVTABS08": { + "claims": [ + "OrcaFilamentLibrary/Overture ABS Basic" + ], + "successor": "OFDvqJ6n" + }, "P11851ba": { "claims": [ "Artillery/Artillery PET" @@ -85,6 +1467,30 @@ "Artillery/Artillery ASA" ], "successor": "OFtmT4Nd" + }, + "VLMNT01": { + "claims": [ + "OrcaFilamentLibrary/Valment PLA" + ], + "successor": "OFDe8uyM" + }, + "VLMNT02": { + "claims": [ + "OrcaFilamentLibrary/Valment PLA Silk" + ], + "successor": "OFpBlrvY" + }, + "VLMNT03": { + "claims": [ + "OrcaFilamentLibrary/Valment PLA-CF" + ], + "successor": "OFfq5YXA" + }, + "VLMNT04": { + "claims": [ + "OrcaFilamentLibrary/Valment PLA Galaxy" + ], + "successor": "OFB5SmWk" } } } diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index f3004c5077..69e671d74d 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1,33 +1,7 @@ { "alias_exceptions": [ - "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 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", @@ -37,560 +11,29 @@ "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 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 X 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 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 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 Translucent @Anycubic Kobra S1 Max 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/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/COEX NYLEX UNFILLED @BBL X1C", - "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 @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", - "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 PLA @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 ABS Basic @FF C5", "Flashforge/Flashforge ABS Basic @FF C5P", "Flashforge/Flashforge ABS-GF @FF C5", @@ -601,12 +44,6 @@ "Flashforge/Flashforge ASA-CF @FF C5P", "Flashforge/Flashforge ASA-GF @FF C5", "Flashforge/Flashforge ASA-GF @FF C5P", - "Flashforge/Flashforge Generic HS PLA", - "Flashforge/Flashforge Generic PETG", - "Flashforge/Flashforge Generic PETG-CF10", - "Flashforge/Flashforge Generic PLA", - "Flashforge/Flashforge Generic PLA-CF10", - "Flashforge/Flashforge Generic PLA-Silk", "Flashforge/Flashforge HIPS @FF C5", "Flashforge/Flashforge HIPS @FF C5P", "Flashforge/Flashforge HS PETG @FF C5", @@ -619,14 +56,12 @@ "Flashforge/Flashforge PAHT-CF @FF C5P", "Flashforge/Flashforge PET-CF @FF C5", "Flashforge/Flashforge PET-CF @FF C5P", - "Flashforge/Flashforge PETG", "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", "Flashforge/Flashforge PLA Matte @FF C5", "Flashforge/Flashforge PLA Matte @FF C5P", "Flashforge/Flashforge PLA Metal @FF C5", @@ -663,243 +98,25 @@ "Flashforge/FusRock S-Multi @FF C5P", "Flashforge/FusRock S-PAHT @FF C5", "Flashforge/FusRock S-PAHT @FF C5P", - "Flashforge/Generic PETG @Flashforge Artemis", "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", - "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", - "Peopoly/Peopoly Generic PLA", - "Peopoly/Peopoly Lancer PLA-C", - "Phrozen/Phrozen PLA @Phrozen Arco 0.4 nozzle", - "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 @base", - "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 PA-CF @base", - "Prusa/Prusa Generic PETG @CORE One", - "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 @base", - "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 PETG HF @base", - "Prusa/Prusa Generic PLA @CORE One", - "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 @base", - "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 HF @base", - "Prusa/Prusa Generic PLA Silk @CORE One", - "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 PLA-CF @base", - "Prusa/Prusament PA-CF @CORE One", - "Prusa/Prusament PETG @CORE One", - "Prusa/Prusament PETG @base", - "Prusa/Prusament PLA @CORE One", - "Prusa/Prusament PLA @base", - "Prusa/Prusament rPLA @CORE One", - "Prusa/Prusament rPLA @base", - "Qidi/Bambu PETG", - "Qidi/Bambu PLA", - "Qidi/HATCHBOX PETG @Qidi", - "Qidi/HATCHBOX PLA @Qidi", - "Qidi/Overture PLA @Qidi", - "Qidi/PolyLite PLA @Qidi", - "Qidi/QIDI PA-Ultra", - "Qidi/QIDI PA12-CF", - "Qidi/QIDI PAHT-CF", - "Qidi/QIDI PAHT-GF", - "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 Support For PAHT", - "Qidi/QIDI Support For PET/PA", - "Qidi/QIDI UltraPA-CF25", - "Qidi/QIDI WOOD Rapido", - "Qidi/Qidi Generic PA", - "Qidi/Qidi Generic PA-CF", "Qidi/Qidi Generic PC", - "Qidi/Qidi Generic PETG", - "Qidi/Qidi Generic PETG-CF", - "Qidi/Qidi Generic PLA", - "Qidi/Qidi Generic PLA Silk", - "Qidi/Qidi Generic PLA+", - "Qidi/Qidi Generic PLA-CF", - "Qidi/Qidi PLA-CF", - "Qidi/Tinmorry PETG-ECO", - "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 Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", - "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 PLA Silk @Sovol SV08 MAX", "Sovol/Polymaker PETG @Sovol SV08 MAX", "Sovol/SUNLU PETG @Sovol SV08 MAX", @@ -926,147 +143,21 @@ "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 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 PA @Z-Bolt Base", - "Z-Bolt/Generic PETG @Z-Bolt Base", - "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" + "re3D/re3D PC @0.8 nozzle" ], "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", @@ -1076,22 +167,7 @@ "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 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", @@ -1100,69 +176,24 @@ "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/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/Artillery ABS @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery ASA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery Generic PETG", - "Artillery/Artillery Generic PLA", - "Artillery/Artillery Generic PLA-CF", "Artillery/Artillery PA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", @@ -1192,251 +223,19 @@ "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery TPU", "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "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 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", "Co Print/CoPrint Generic ABS", "Co Print/CoPrint Generic PETG", - "Co Print/CoPrint Generic PLA", "Co Print/CoPrint Generic TPU", - "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 ASA-CF @Hi-all", - "Creality/Creality Generic PA-CF", "Creality/Creality Generic PC", - "Creality/Creality Generic PETG", "Creality/Creality Generic PETG-CF @Hi-all", - "Creality/Creality Generic PLA", "Creality/Creality Generic PLA High Speed @Ender-3V3-all", "Creality/Creality Generic PLA High Speed @Hi-all", "Creality/Creality Generic PLA High Speed @K1-all", @@ -1450,236 +249,14 @@ "Creality/Creality Generic PLA Silk @K1-all", "Creality/Creality Generic PLA Silk @K2-all", "Creality/Creality Generic PLA Wood @Hi-all", - "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 @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", @@ -1706,7 +283,6 @@ "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA @base", "Cubicon/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle", @@ -1721,25 +297,18 @@ "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", "Dremel/Dremel Generic PLA @3D20 all", "Dremel/Dremel Generic PLA @3D40 all", "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Elegoo ASA-CF @base", - "Elegoo/Elegoo PAHT @base", "Elegoo/Elegoo PC @base", "Elegoo/Elegoo PC-FR @base", "Elegoo/Elegoo PET-CF @base", - "Elegoo/Elegoo PETG @base", "Elegoo/Elegoo PETG HF @base", "Elegoo/Elegoo PETG PRO @base", "Elegoo/Elegoo PETG Translucent @base", "Elegoo/Elegoo PETG-CF @base", "Elegoo/Elegoo PETG-GF @base", - "Elegoo/Elegoo PLA @base", "Elegoo/Elegoo PLA Basic @base", "Elegoo/Elegoo PLA Galaxy @base", "Elegoo/Elegoo PLA Glow @base", @@ -1756,22 +325,13 @@ "Elegoo/Elegoo Rapid PLA+ @base", "Elegoo/Elegoo Rapid TPU 95A @base", "Elegoo/Generic ABS-CF @Elegoo Centauri", - "Elegoo/Generic PA @base", "Elegoo/Generic PA6-CF @Elegoo", "Elegoo/Generic PC @base", "Elegoo/Generic PC-CF @Elegoo", - "Elegoo/Generic PET @base", "Elegoo/Generic PET-CF @Elegoo Centauri", - "Elegoo/Generic PETG @base", "Elegoo/Generic PETG PRO @Elegoo", - "Elegoo/Generic PLA @base", "Elegoo/Generic PLA Matte @Elegoo", - "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 S1 PLA High Speed", "FLSun/FLSun S1 PLA Silk", "FLSun/FLSun T1 PLA High Speed", @@ -1847,19 +407,13 @@ "Flashforge/Flashforge Generic ASA @G3U", "Flashforge/Flashforge Generic HIPS", "Flashforge/Flashforge Generic HIPS @G3U 0.6 Nozzle", - "Flashforge/Flashforge Generic HS PLA", - "Flashforge/Flashforge Generic PETG", "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 @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge Generic PLA-Silk", "Flashforge/Flashforge Generic PVA", "Flashforge/Flashforge HIPS @FF C5", "Flashforge/Flashforge HIPS @FF C5P", @@ -1941,7 +495,6 @@ "Flashforge/Flashforge PET-CF", "Flashforge/Flashforge PET-CF @FF C5", "Flashforge/Flashforge PET-CF @FF C5P", - "Flashforge/Flashforge PETG", "Flashforge/Flashforge PETG Basic", "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PETG Pro", @@ -1994,7 +547,6 @@ "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", "Flashforge/Flashforge PETG-CF @FF G4P", "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA", "Flashforge/Flashforge PLA Matte @FF C5", "Flashforge/Flashforge PLA Matte @FF C5P", "Flashforge/Flashforge PLA Metal @FF C5", @@ -2260,7 +812,6 @@ "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", "Flashforge/Generic PET @FF G4P 0.6 nozzle", "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", - "Flashforge/Generic PETG @Flashforge Artemis", "Flashforge/Generic PETG-CF10 @Flashforge AD4", "Flashforge/Generic PLA @Flashforge AD4", "Flashforge/Generic PLA High Speed @Flashforge AD4", @@ -2284,125 +835,26 @@ "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", "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 ASA-CF @base", - "OrcaFilamentLibrary/Elegoo PAHT @base", "OrcaFilamentLibrary/Elegoo PC @base", "OrcaFilamentLibrary/Elegoo PC-FR @base", "OrcaFilamentLibrary/Elegoo PET-CF @base", - "OrcaFilamentLibrary/Elegoo PETG @base", "OrcaFilamentLibrary/Elegoo PETG HF @base", "OrcaFilamentLibrary/Elegoo PETG PRO @base", "OrcaFilamentLibrary/Elegoo PETG Translucent @base", "OrcaFilamentLibrary/Elegoo PETG-CF @base", "OrcaFilamentLibrary/Elegoo PETG-GF @base", - "OrcaFilamentLibrary/Elegoo PLA @base", "OrcaFilamentLibrary/Elegoo PLA Basic @base", "OrcaFilamentLibrary/Elegoo PLA Galaxy @base", "OrcaFilamentLibrary/Elegoo PLA Glow @base", @@ -2418,37 +870,6 @@ "OrcaFilamentLibrary/Elegoo Rapid PETG @base", "OrcaFilamentLibrary/Elegoo Rapid PLA+ @base", "OrcaFilamentLibrary/Elegoo Rapid TPU 95A @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", @@ -2463,7 +884,6 @@ "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", @@ -2493,7 +913,6 @@ "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", @@ -2511,73 +930,9 @@ "OrcaFilamentLibrary/FilAr PLA-mate Uva", "OrcaFilamentLibrary/FilAr PLA-mate Verde", "OrcaFilamentLibrary/FilAr PLA-mate Violeta", - "OrcaFilamentLibrary/Generic PA-CF @System", - "OrcaFilamentLibrary/Generic PE-CF @base", - "OrcaFilamentLibrary/Generic PETG HF @base", - "OrcaFilamentLibrary/Generic PETG-CF @base", - "OrcaFilamentLibrary/Generic PLA High Speed @System", - "OrcaFilamentLibrary/Generic PLA Matte @base", - "OrcaFilamentLibrary/Generic PLA-CF @System", - "OrcaFilamentLibrary/Generic PP-CF @base", - "OrcaFilamentLibrary/Generic PP-GF @base", - "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/Generic PC @System", "OrcaFilamentLibrary/PolyLite Dual PLA @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 0.6", "Prusa/Prusa Generic ABS @CORE One 0.8", "Prusa/Prusa Generic ABS @CORE One HF 0.4", @@ -2612,16 +967,6 @@ "Prusa/Prusa Generic ASA HF @MK3.5 0.6", "Prusa/Prusa Generic ASA HF @MK3.5 0.8", "Prusa/Prusa Generic ASA HF @base", - "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 @base", - "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 PA-CF @base", "Prusa/Prusa Generic PC @MK3.5", "Prusa/Prusa Generic PC @MK3.5 0.25", "Prusa/Prusa Generic PC @MK3.5 0.6", @@ -2630,63 +975,35 @@ "Prusa/Prusa Generic PC HF @MK3.5 0.6", "Prusa/Prusa Generic PC HF @MK3.5 0.8", "Prusa/Prusa Generic PC HF @base", - "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 @base", - "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 PETG HF @base", - "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 @base", - "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 HF @base", - "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 PLA-CF @base", "Prusa/Prusa Generic TPU @CORE One", "Prusa/Prusa Generic TPU @CORE One 0.6", "Prusa/Prusa Generic TPU @CORE One 0.8", @@ -2699,7 +1016,6 @@ "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", @@ -2712,35 +1028,23 @@ "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 PETG @base", - "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 PLA @base", "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", - "Prusa/Prusament rPLA @base", - "Qidi/Bambu PETG", - "Qidi/Bambu PLA", - "Qidi/HATCHBOX PETG @Qidi", - "Qidi/HATCHBOX PLA @Qidi", - "Qidi/Overture PLA @Qidi", - "Qidi/PolyLite PLA @Qidi", "Qidi/QIDI ABS Rapido 0.2 nozzle", "Qidi/QIDI ABS Rapido 0.6 nozzle", "Qidi/QIDI ABS Rapido 0.8 nozzle", @@ -2756,43 +1060,34 @@ "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 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 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 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 @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 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 @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 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 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", @@ -2800,47 +1095,38 @@ "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 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 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 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 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 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 @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 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 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 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", @@ -2851,19 +1137,15 @@ "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 @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", @@ -2872,137 +1154,42 @@ "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 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 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-CF", - "Qidi/Qidi Generic PLA", "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+", - "Qidi/Qidi Generic PLA-CF", "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 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 Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", - "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 ABS Benchy @U1", "Snapmaker/Snapmaker Dual ABS Benchy", - "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 Dual TPE", "Snapmaker/Snapmaker Dual TPU High-Flow", "Snapmaker/Snapmaker J1 ABS Benchy", - "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 J1 TPE", "Snapmaker/Snapmaker J1 TPU High-Flow", - "Snapmaker/Snapmaker PA-CF @U1 base", - "Snapmaker/Snapmaker PA-CF @base", "Snapmaker/Snapmaker PET @Dual", - "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 Matte @U1", - "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", "Snapmaker/Snapmaker TPE", "Snapmaker/Snapmaker TPE @U1", "Snapmaker/Snapmaker TPU High-Flow @U1", @@ -3032,100 +1219,15 @@ "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", @@ -3136,29 +1238,14 @@ "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" + "re3D/re3D PC @0.8 nozzle" ], "ids": { "00001": [ @@ -3546,26 +1633,6 @@ "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" ], @@ -3731,83 +1798,9 @@ "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+" ], @@ -3904,33 +1897,9 @@ "EPLAB00": [ "Elegoo/Elegoo PLA" ], - "ESN02": [ - "OrcaFilamentLibrary/eSUN ePLA-LW" - ], - "ESN03": [ - "OrcaFilamentLibrary/eSUN PETG" - ], "ETPUB00": [ "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" ], @@ -3944,210 +1913,6 @@ "FFG01": [ "Flashforge/Flashforge Generic PLA" ], - "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" ], @@ -4954,36 +2719,7 @@ "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" + "BBL/Overture PLA Pro" ], "GFP95": [ "BBL/Generic PP-GF", @@ -5246,60 +2982,6 @@ "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" ], @@ -5582,44 +3264,15 @@ "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" - ], - "OEPAHTB0": [ - "OrcaFilamentLibrary/Elegoo PAHT-CF" - ], - "OEPCB00": [ - "OrcaFilamentLibrary/Elegoo PC" - ], - "OEPETGB0": [ - "OrcaFilamentLibrary/Elegoo PETG" - ], - "OEPLAB00": [ - "OrcaFilamentLibrary/Elegoo PLA" - ], - "OETPUB00": [ - "OrcaFilamentLibrary/Elegoo TPU 95A" - ], "OF09vOcG": [ "Elegoo/Elegoo PLA Galaxy" ], "OF0Ee2jQ": [ "Snapmaker/Snapmaker Dual TPU High-Flow" ], - "OF0M6QAQ": [ - "OrcaFilamentLibrary/Elegoo PLA Galaxy" + "OF0NgY1y": [ + "BBL/COEX NYLEX PA6-CF", + "OrcaFilamentLibrary/COEX NYLEX PA6-CF" ], "OF0SyJhk": [ "Flashforge/Flashforge PA6-CF" @@ -5630,33 +3283,71 @@ "OF0TjJ0G": [ "Qidi/Qidi ASA-Aero" ], + "OF0UJcb6": [ + "OrcaFilamentLibrary/PolyLite PETG" + ], "OF0UbONm": [ "Flashforge/FusRock S-PAHT" ], "OF0VEdLB": [ "Cubicon/Cubicon PETG" ], + "OF0Vtzaw": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" + ], "OF0Y5MLd": [ "Qidi/QIDI PETG-GF" ], + "OF0gGRWk": [ + "OrcaFilamentLibrary/Panchroma PLA Glow" + ], + "OF0h7ERL": [ + "OrcaFilamentLibrary/Elegoo PAHT-CF" + ], + "OF0kCNDK": [ + "OrcaFilamentLibrary/Panchroma PLA Luminous" + ], + "OF0pzFLc": [ + "BBL/COEX PLA+Silk", + "OrcaFilamentLibrary/COEX PLA+Silk" + ], + "OF0wBGNx": [ + "OrcaFilamentLibrary/Bambu ASA-CF" + ], "OF0wk0Pk": [ "Flashforge/Flashforge PLA Pro" ], "OF0z1XpN": [ "Qidi/QIDI PLA Rapido Silk" ], - "OF102WKM": [ - "OrcaFilamentLibrary/Elegoo PETG PRO" - ], "OF17cONC": [ "Snapmaker/PolyTerra Dual PLA" ], + "OF1N1qMK": [ + "OrcaFilamentLibrary/Panchroma PLA UV Shift" + ], + "OF1Pke8t": [ + "BBL/Overture Easy PLA", + "OrcaFilamentLibrary/Overture Easy PLA" + ], + "OF1UNk9P": [ + "OrcaFilamentLibrary/Generic PP" + ], "OF1Zypyy": [ "Qidi/QIDI PETG Tough" ], + "OF1hznGB": [ + "OrcaFilamentLibrary/Elegoo PLA PRO" + ], "OF22AxCm": [ "Sovol/Polymaker PETG" ], + "OF2EK9F1": [ + "OrcaFilamentLibrary/FilAr PLA-mate Violeta" + ], + "OF2GCW1l": [ + "OrcaFilamentLibrary/SUNLU PETG" + ], "OF2HQqTC": [ "Cubicon/Cubicon PLA+" ], @@ -5666,15 +3357,26 @@ "OF2UFmOo": [ "Qidi/Bambu PLA" ], + "OF2VFe4J": [ + "OrcaFilamentLibrary/Bambu PAHT-CF" + ], + "OF2Z1nT5": [ + "OrcaFilamentLibrary/FilAr PETG Azul Imperial" + ], + "OF2pj5l5": [ + "BBL/Overture Super PLA+", + "OrcaFilamentLibrary/Overture Super PLA+" + ], "OF2tvNYA": [ "Sovol/Sovol Zero PLA Silk" ], + "OF2xccEe": [], + "OF30Ftju": [ + "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" + ], "OF38Hyk4": [ "Flashforge/Flashforge PETG Pro" ], - "OF3GKs2i": [ - "OrcaFilamentLibrary/eSUN PLA-Matte" - ], "OF3XeEuV": [ "Qidi/QIDI PET-GF" ], @@ -5684,21 +3386,26 @@ "OF3arl18": [ "Elegoo/Elegoo Rapid PETG" ], + "OF3kBrdA": [ + "OrcaFilamentLibrary/eSUN PETG" + ], "OF41QVDH": [ "Flashforge/Flashforge Generic PLA-Silk" ], "OF43idK2": [ "Creality/Creality Generic PLA Matte" ], + "OF44VYzK": [ + "OrcaFilamentLibrary/FilAr PETG Azul Francia" + ], "OF48G7He": [ "Qidi/QIDI PETG Tough 0.8 nozzle" ], + "OF4KsW72": [], "OF4RKeng": [ "Flashforge/Flashforge Generic ASA" ], - "OF4fgpse": [ - "OrcaFilamentLibrary/Elegoo PLA Marble" - ], + "OF4RvVuU": [], "OF4gzzE4": [ "Qidi/QIDI PET-CF" ], @@ -5711,15 +3418,24 @@ "OF50NUZI": [ "FlyingBear/FlyingBear PLA Basic" ], + "OF54B0S0": [ + "OrcaFilamentLibrary/Bambu PPA-CF" + ], "OF57IbZT": [ "Artillery/Artillery PLA Basic" ], "OF5Bmdtg": [ "Sovol/Sovol SV06 Plus ACE ABS" ], + "OF5CgdDq": [ + "OrcaFilamentLibrary/PolyLite PLA" + ], "OF5J2axC": [ "Sovol/Sovol Zero PLA Basic" ], + "OF5P4jgA": [ + "OrcaFilamentLibrary/FilAr PLA Dorado" + ], "OF5T1Y9R": [ "Flashforge/Flashforge ABS Basic" ], @@ -5732,6 +3448,13 @@ "OF5kwfZu": [ "Flashforge/FusRock Generic NexPA-CF25" ], + "OF5nlfKY": [ + "OrcaFilamentLibrary/FilAr PLA Oro" + ], + "OF5rnhjh": [], + "OF5vgi2G": [ + "OrcaFilamentLibrary/FilAr PLA-mate Azul" + ], "OF60Lmeq": [ "Flashforge/Flashforge PLA Matte" ], @@ -5741,6 +3464,9 @@ "OF6FM5F7": [ "Flashforge/FusRock PAHT" ], + "OF6Ll8lK": [ + "OrcaFilamentLibrary/Elegoo PETG Translucent" + ], "OF6Mxzsg": [ "Flashforge/Generic TPU" ], @@ -5756,8 +3482,11 @@ "OF70DKqH": [ "Snapmaker/Snapmaker TPE" ], - "OF79FFkO": [ - "OrcaFilamentLibrary/Elegoo PC-FR" + "OF74KeQR": [ + "OrcaFilamentLibrary/Generic PHA" + ], + "OF7H3VJM": [ + "OrcaFilamentLibrary/eSUN PLA-Marble" ], "OF7M9vy4": [ "Ratrig/RatRig BigNozzle PLA" @@ -5768,22 +3497,39 @@ "OF7f0eUZ": [ "Volumic/Volumic ASA Ultra" ], + "OF7lOgYF": [ + "OrcaFilamentLibrary/Generic PETG HF" + ], "OF7tgL9c": [ "Chuanying/Chuanying ASA", "Chuanying/Chuanying Generic ASA" ], - "OF8HQmJD": [ - "OrcaFilamentLibrary/Elegoo PLA Sparkle" + "OF8Tlg47": [ + "OrcaFilamentLibrary/Generic PPA-GF" ], "OF8WvPVL": [ "Qidi/QIDI ABS Rapido 0.8 nozzle" ], + "OF8aFWfQ": [ + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" + ], + "OF8jh0Lk": [ + "OrcaFilamentLibrary/FilAr PLA-mate Marron" + ], + "OF8tPByX": [ + "OrcaFilamentLibrary/Generic PPA-CF" + ], + "OF99UMPq": [ + "BBL/COEX ABS", + "OrcaFilamentLibrary/COEX ABS" + ], + "OF99vXPs": [], + "OF9OlTWH": [ + "OrcaFilamentLibrary/Bambu PLA Marble" + ], "OF9RZyBz": [ "Flashforge/Polymaker Generic S1" ], - "OF9qvJxV": [ - "OrcaFilamentLibrary/Elegoo PLA Translucent2" - ], "OF9sr3Vn": [ "Flashforge/Flashforge PLA Sparkle" ], @@ -5826,90 +3572,191 @@ "OFAiqi5v": [ "Elegoo/Elegoo ASA-CF" ], + "OFAnyRUI": [ + "OrcaFilamentLibrary/Bambu Support For PLA" + ], "OFAnyzjN": [ "Qidi/HATCHBOX PETG" ], + "OFAt6ec0": [ + "OrcaFilamentLibrary/FilAr PLA Marron Oxido" + ], "OFAtydxE": [ "Flashforge/FusRock S-Multi" ], + "OFB5SmWk": [ + "OrcaFilamentLibrary/Valment PLA Galaxy" + ], "OFBGxHgT": [ "FlyingBear/FlyingBear PLA" ], "OFBRSZom": [ "Volumic/PPS Carbone (Performance)" ], + "OFBSW57R": [ + "OrcaFilamentLibrary/Bambu PLA Aero" + ], + "OFBUIlZ7": [ + "OrcaFilamentLibrary/Elegoo PLA+" + ], "OFBvxnjM": [ "Elegoo/Elegoo PETG-GF" ], + "OFBw6eEG": [ + "OrcaFilamentLibrary/Overture Matte PLA" + ], "OFC2FSsV": [ "Qidi/Overture PLA" ], "OFC5CCeo": [ "Flashforge/Flashforge Generic PETG-CF" ], + "OFC78WGQ": [ + "OrcaFilamentLibrary/Panchroma PLA Starlight" + ], + "OFCD8qiU": [ + "OrcaFilamentLibrary/Generic EVA" + ], + "OFCIUsWh": [ + "OrcaFilamentLibrary/Panchroma PLA Translucent" + ], "OFCJaXZS": [ "Flashforge/Flashforge PPS" ], "OFCKK3u9": [ "FlyingBear/FlyingBear PA-CF" ], + "OFCccVrQ": [ + "OrcaFilamentLibrary/PolyTerra Dual PLA" + ], "OFCgpxn2": [ "Prusa/Prusa Generic ABS HF" ], "OFChH9xu": [ "Snapmaker/Snapmaker J1 TPE" ], - "OFD5e0sH": [ - "OrcaFilamentLibrary/Elegoo Rapid PLA+" + "OFCidU7j": [ + "OrcaFilamentLibrary/DREMC ABS-GF" ], - "OFDCk0cz": [ - "OrcaFilamentLibrary/Generic PETG-CF" + "OFCjG251": [ + "OrcaFilamentLibrary/FilAr PLA-mate Verde" + ], + "OFCoRobU": [ + "OrcaFilamentLibrary/Elas ASA" + ], + "OFDETOM6": [ + "OrcaFilamentLibrary/eSUN PLA-Matte" + ], + "OFDGigEI": [ + "OrcaFilamentLibrary/Bambu PLA Dynamic" ], "OFDMWB6t": [ "Elegoo/Elegoo PLA+" ], - "OFDNiRTx": [ - "OrcaFilamentLibrary/Elegoo PLA+" + "OFDSrzZ8": [ + "Flashforge/Generic PLA", + "OrcaFilamentLibrary/Generic PLA", + "Sovol/Generic PLA" + ], + "OFDe8uyM": [ + "OrcaFilamentLibrary/Valment PLA" ], "OFDkABjZ": [ "Flashforge/Generic TPU-90A" ], + "OFDpW3J8": [ + "OrcaFilamentLibrary/FILL3D PLA Basic" + ], "OFDramZ2": [ "Co Print/CoPrint Generic PETG" ], + "OFDvXujf": [ + "OrcaFilamentLibrary/Generic PVA" + ], + "OFDvqJ6n": [ + "OrcaFilamentLibrary/Overture ABS Basic" + ], + "OFDxfPgH": [ + "OrcaFilamentLibrary/Bambu PLA Sparkle" + ], + "OFE0NFRh": [ + "BBL/COEX TPU 60A", + "OrcaFilamentLibrary/COEX TPU 60A" + ], "OFE22Uba": [ "Flashforge/Flashforge TPU-90A" ], + "OFEGNJD4": [ + "OrcaFilamentLibrary/Bambu PLA Silk" + ], "OFEYKrjb": [ "Artillery/Artillery PETG" ], + "OFEZ449N": [ + "OrcaFilamentLibrary/FilAr PLA-mate Uva" + ], "OFEdyZqS": [ "Anycubic/Anycubic PLA Luminous" ], + "OFEhuUNq": [], + "OFEkPBwx": [ + "OrcaFilamentLibrary/Bambu PLA Glow" + ], + "OFEswT5W": [ + "OrcaFilamentLibrary/Bambu PLA-CF" + ], + "OFF9OKoY": [ + "OrcaFilamentLibrary/PolyLite PLA Pro" + ], "OFFIL5pD": [ "Qidi/QIDI PA12-CF" ], + "OFFNYwWR": [ + "OrcaFilamentLibrary/Bambu PA-CF" + ], "OFFenwbU": [ "FLSun/FLSun S1 PLA Silk" ], + "OFFkCLBl": [ + "OrcaFilamentLibrary/Panchroma PLA Galaxy" + ], "OFFmJ8aR": [ "FlyingBear/Other PLA Hyper" ], "OFFrbsvQ": [ "InfiMech/Other TPU" ], + "OFFvzqcd": [ + "OrcaFilamentLibrary/Bambu PETG Basic" + ], "OFG8vHw8": [ "Qidi/Qidi Generic ASA" ], "OFGFZhWu": [ "Sovol/Sovol SV06 ACE PETG" ], + "OFGVwfK0": [ + "OrcaFilamentLibrary/FilAr PLA-mate Gris" + ], "OFGb4hPY": [ "Anycubic/Anycubic PEBA 95A" ], + "OFGcLA5R": [ + "OrcaFilamentLibrary/FilAr PLA-mate Beige" + ], "OFGfdP6J": [ "Flashforge/FusRock Generic S-Multi" ], + "OFGkyftV": [ + "BBL/Overture Silk PLA", + "OrcaFilamentLibrary/Overture Silk PLA" + ], + "OFH2nN08": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" + ], + "OFHAccHz": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" + ], "OFHBTqyD": [ "Flashforge/Flashforge PLA Basic" ], @@ -5919,14 +3766,32 @@ "OFHL32M0": [ "Anycubic/Anycubic TPU" ], + "OFHWSM21": [ + "OrcaFilamentLibrary/Fiberon PET-CF" + ], + "OFHa48An": [ + "OrcaFilamentLibrary/Bambu PET-CF" + ], + "OFHfzQXo": [ + "OrcaFilamentLibrary/Eolas Prints PLA Transition" + ], + "OFHmPYRy": [ + "OrcaFilamentLibrary/SUNLU PLA+ 2.0" + ], "OFHtQDC9": [ "Elegoo/Elegoo PLA Basic" ], - "OFICPchn": [ - "OrcaFilamentLibrary/Elegoo PLA Basic" + "OFIBXa0k": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rojo" ], - "OFIGHU7W": [ - "OrcaFilamentLibrary/Elegoo PETG-CF" + "OFIamQnD": [ + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" + ], + "OFIegjmD": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" + ], + "OFIfnzxC": [ + "OrcaFilamentLibrary/Bambu Support For PLA/PETG" ], "OFIl3ar9": [ "Sovol/Sovol SV08 PETG" @@ -5934,14 +3799,22 @@ "OFIzguhB": [ "Volumic/Volumic UNIVERSAL Ultra" ], - "OFJIImD5": [ - "OrcaFilamentLibrary/Elegoo PET-CF" + "OFJHBEGD": [], + "OFJNeELv": [ + "OrcaFilamentLibrary/FILL3D PA" ], - "OFJfx0Cl": [ - "OrcaFilamentLibrary/Generic PE-CF" + "OFJOFnOZ": [ + "BBL/AliZ PETG-CF", + "OrcaFilamentLibrary/AliZ PETG-CF" ], - "OFJsqMzx": [ - "OrcaFilamentLibrary/Generic PLA Matte" + "OFJQDUk3": [ + "OrcaFilamentLibrary/FilAr PETG Cristal" + ], + "OFJs1ToM": [ + "BBL/COEX NYLEX UNFILLED " + ], + "OFJu1XwK": [ + "OrcaFilamentLibrary/NIT PETG" ], "OFK39W9u": [ "Flashforge/Flashforge Generic PETG-CF10" @@ -5955,15 +3828,33 @@ "OFKH15Hd": [ "Sovol/Sovol SV08 ABS" ], + "OFKKajh6": [ + "OrcaFilamentLibrary/FilAr PLA Gris Plata" + ], + "OFKTSiYF": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Calido" + ], "OFKWVi10": [ "Flashforge/Flashforge Generic PLA-CF10" ], + "OFKWWgyp": [ + "OrcaFilamentLibrary/FilAr PLA Carpincho" + ], + "OFKZ9skj": [ + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" + ], "OFKZH00L": [ "Flashforge/FusRock Generic PET-CF" ], + "OFKhMPeX": [ + "OrcaFilamentLibrary/Bambu PC" + ], "OFKhtNBx": [ "Snapmaker/Snapmaker J1 TPU High-Flow" ], + "OFKiSMWR": [ + "OrcaFilamentLibrary/Panchroma PLA Marble" + ], "OFKjlAbC": [ "Qidi/QIDI UltraPA-CF25" ], @@ -5982,8 +3873,23 @@ "OFL7vEML": [ "Flashforge/FlashForge PC" ], - "OFLSBS99": [ - "OrcaFilamentLibrary/Generic SBS" + "OFLJ8S6I": [ + "OrcaFilamentLibrary/SUNLU Wood PLA" + ], + "OFLNgV3C": [], + "OFLPAxz3": [ + "Custom/Generic ASA", + "OrcaFilamentLibrary/Generic ASA" + ], + "OFLXvuMr": [ + "OrcaFilamentLibrary/Elegoo Rapid PETG" + ], + "OFLakOUI": [ + "OrcaFilamentLibrary/Generic PC", + "Sovol/Generic PC" + ], + "OFLcd093": [ + "OrcaFilamentLibrary/Elegoo PETG" ], "OFLeFaUO": [ "Flashforge/Flashforge Generic PVA" @@ -6003,14 +3909,28 @@ "OFM3PeVe": [ "Flashforge/Flashforge ASA-CF" ], - "OFMCMXSG": [ - "OrcaFilamentLibrary/Generic PP-GF" + "OFM91vZs": [ + "BBL/Overture ASA", + "OrcaFilamentLibrary/Overture ASA" ], "OFMHTnPP": [ "Flashforge/Flashforge PA12-CF" ], - "OFMQJToc": [ - "OrcaFilamentLibrary/Elegoo PETG-GF" + "OFMTK0UC": [ + "OrcaFilamentLibrary/Bambu Support For PA/PET" + ], + "OFMUWNkp": [ + "OrcaFilamentLibrary/SUNLU PLA+" + ], + "OFMZvH0z": [ + "BBL/Overture Rock PLA", + "OrcaFilamentLibrary/Overture Rock PLA" + ], + "OFMjtqTC": [ + "OrcaFilamentLibrary/Bambu PLA Wood" + ], + "OFMuXBmO": [ + "OrcaFilamentLibrary/Elas PLA Basic" ], "OFN0X7oN": [ "Qidi/QIDI PLA Basic" @@ -6024,24 +3944,43 @@ "OFNRgSch": [ "Artillery/Artillery PC" ], + "OFNU9YIW": [ + "OrcaFilamentLibrary/FilAr PETG Azul Boreal" + ], "OFNX5uRT": [ "Qidi/QIDI TPU-Aero" ], "OFNbajj9": [ "Creality/Creality Generic ASA-CF" ], + "OFNemJM6": [ + "OrcaFilamentLibrary/FilAr PLA Cobre" + ], + "OFNiSLfL": [ + "OrcaFilamentLibrary/Generic PP-GF" + ], + "OFNk8bxk": [ + "OrcaFilamentLibrary/Bambu PA6-GF" + ], "OFNvrbnf": [ "Co Print/CoPrint Generic ABS" ], "OFNz8rrn": [ "FlyingBear/FlyingBear PLA Hyper" ], + "OFO1GEq6": [ + "OrcaFilamentLibrary/Panchroma PLA Neon" + ], "OFO3IOWM": [ "Volumic/PETG ESD (Performance)" ], "OFO5R9KJ": [ "Sovol/Sovol Zero TPU" ], + "OFOABq7t": [ + "BBL/AliZ PETG-Metal", + "OrcaFilamentLibrary/AliZ PETG-Metal" + ], "OFOJUJAS": [ "Cubicon/Cubicon PA-CF" ], @@ -6051,15 +3990,27 @@ "OFOW9K96": [ "Qidi/Qidi TPU 95A-HF" ], + "OFOiJfLM": [ + "OrcaFilamentLibrary/FILL3D PETG CF" + ], "OFOkTA0C": [ "Elegoo/Elegoo PETG Translucent" ], "OFOp3Oef": [ "Anycubic/Generic ABS" ], + "OFOsHDnB": [ + "OrcaFilamentLibrary/Elegoo PETG PRO" + ], + "OFOvv91M": [ + "OrcaFilamentLibrary/PolyLite ABS" + ], "OFOysPuE": [ "Qidi/QIDI TPU-GF" ], + "OFP26zNb": [ + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" + ], "OFP4poIv": [ "Sovol/Sovol Zero PLA Silk HS Nozzle" ], @@ -6072,15 +4023,39 @@ "OFPJrlC3": [ "Flashforge/Flashforge PLA-CF" ], + "OFPWPlSC": [ + "OrcaFilamentLibrary/FILL3D PP" + ], + "OFPbyOSk": [ + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" + ], + "OFPc4zVY": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" + ], "OFPeGtB1": [ "Volumic/Volumic UNIVERSAL Ultra (Performance)" ], + "OFPkCJKE": [ + "OrcaFilamentLibrary/Panchroma PLA Satin" + ], + "OFPklMI1": [ + "OrcaFilamentLibrary/Generic PE" + ], "OFPokkKe": [ "Qidi/QIDI PETG-CF" ], + "OFPoyiFs": [ + "OrcaFilamentLibrary/Polymaker HT-PLA" + ], + "OFPqX3x2": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" + ], "OFPwi9X0": [ "Qidi/HATCHBOX ABS" ], + "OFQ3e56w": [ + "OrcaFilamentLibrary/Bambu PLA Galaxy" + ], "OFQ5xAKf": [ "Chuanying/Chuanying Generic PVA" ], @@ -6090,14 +4065,21 @@ "OFQCAYAt": [ "Flashforge/Flashforge PPA-CF" ], + "OFQHiNJs": [ + "OrcaFilamentLibrary/Bambu Support G" + ], + "OFQLcbps": [ + "Custom/Generic PA-CF", + "OrcaFilamentLibrary/Generic PA-CF" + ], + "OFQWIKbV": [ + "OrcaFilamentLibrary/FilAr PLA Titanio" + ], "OFQZINrX": [ "Qidi/QIDI ABS-GF10" ], - "OFQhLoxN": [ - "OrcaFilamentLibrary/Elegoo PLA Wood" - ], - "OFQkWxJy": [ - "OrcaFilamentLibrary/Elegoo PLA Matte" + "OFQbjX3s": [ + "OrcaFilamentLibrary/FILL3D PETG" ], "OFR8dTVW": [ "FLSun/FLSun S1 PLA High Speed" @@ -6108,18 +4090,30 @@ "OFRR8LUh": [ "Flashforge/Generic ASA" ], - "OFRS2Ggt": [ - "OrcaFilamentLibrary/Generic PP-CF" - ], "OFRgDMDJ": [ "Flashforge/Flashforge PETG Transparent" ], + "OFRiFnfQ": [ + "OrcaFilamentLibrary/Eolas Prints PETG Transition" + ], + "OFRiYgMK": [ + "OrcaFilamentLibrary/Panchroma PLA Celestial" + ], + "OFRzR5mi": [ + "OrcaFilamentLibrary/eSUN ePLA-LW" + ], "OFS1ekCg": [ "Ratrig/RatRig BigNozzle PCTG" ], + "OFS2tn6G": [ + "OrcaFilamentLibrary/Fiberon PA612-CF" + ], "OFS3HrR1": [ "InfiMech/Other PLA" ], + "OFS8lTQt": [ + "OrcaFilamentLibrary/Panchroma PLA Silk" + ], "OFSCm6pJ": [ "Elegoo/Elegoo PET-CF" ], @@ -6138,8 +4132,15 @@ "OFSpTWdv": [ "InfiMech/Other PA-CF" ], - "OFT3TqB6": [ - "OrcaFilamentLibrary/Elas ASA" + "OFSwbBWS": [], + "OFTGHyNC": [ + "OrcaFilamentLibrary/Bambu PLA Impact" + ], + "OFTOPcx0": [ + "OrcaFilamentLibrary/Eolas Prints TPU Transition" + ], + "OFTRZ8Y4": [ + "OrcaFilamentLibrary/Bambu PETG-CF" ], "OFTa6gPH": [ "Flashforge/Flashforge PLA Pro" @@ -6150,6 +4151,12 @@ "OFTbsWVg": [ "Artillery/Artillery TPU" ], + "OFTcE0nA": [ + "OrcaFilamentLibrary/eSUN PLA-Basic" + ], + "OFTlRzpe": [ + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" + ], "OFToBodi": [ "Qidi/QIDI ABS Rapido Metal" ], @@ -6159,39 +4166,69 @@ "OFTszIHE": [ "Creality/Creality Generic PLA Silk" ], + "OFU1zPxE": [ + "OrcaFilamentLibrary/Elegoo PLA Galaxy" + ], "OFUJw3Lx": [ "Qidi/QIDI PEBA 95A" ], "OFUYjPc4": [ "Dremel/Dremel Generic PLA" ], + "OFUanySo": [ + "OrcaFilamentLibrary/Bambu PLA Silk+" + ], "OFUkpobY": [ "Qidi/QIDI PAHT-CF" ], "OFUqBrgf": [ "Chuanying/Chuanying Generic TPU" ], + "OFUyDDNv": [ + "OrcaFilamentLibrary/Elegoo PC" + ], "OFV1szQh": [ "Peopoly/Peopoly Lancer PETG-C" ], "OFV4hD1o": [ "Qidi/QIDI PLA Rapido Metal" ], + "OFV5tNw6": [ + "OrcaFilamentLibrary/Elegoo PET-CF" + ], "OFVBNoov": [ "InfiMech/InfiMech ABS" ], + "OFVBlUFH": [], + "OFVCkX5w": [ + "OrcaFilamentLibrary/Bambu TPU 95A" + ], "OFVJXE4n": [ "FlyingBear/Other ABS" ], - "OFVLuVmD": [ - "OrcaFilamentLibrary/Elegoo Rapid PETG" - ], "OFVhG0yM": [ "Qidi/QIDI ABS Odorless" ], + "OFVptRxp": [ + "BBL/COEX TPE 30D", + "OrcaFilamentLibrary/COEX TPE 30D" + ], + "OFW29a9R": [ + "OrcaFilamentLibrary/PolyTerra PLA", + "Snapmaker/PolyTerra PLA" + ], "OFW8UdlP": [ "Qidi/QIDI ABS Rapido" ], + "OFWTRJ1K": [ + "OrcaFilamentLibrary/FilAr PLA Bronce" + ], + "OFWYtgCa": [ + "OrcaFilamentLibrary/Elegoo PLA Wood" + ], + "OFWbdGsC": [ + "OrcaFilamentLibrary/Generic PLA-CF" + ], "OFWkCAdc": [ "Qidi/QIDI PETG Tough 0.2 nozzle" ], @@ -6201,57 +4238,94 @@ "OFWv6JYn": [ "Flashforge/Flashforge PLA Metal" ], + "OFWwF7K7": [ + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" + ], "OFWyCd0Y": [ "Qidi/QIDI Support For PET/PA" ], + "OFX0ycRQ": [ + "OrcaFilamentLibrary/Fiberon PA12-CF" + ], "OFXA8vy9": [ "Artillery/Artillery PLA Basic+" ], + "OFXCBZTA": [ + "OrcaFilamentLibrary/Eolas Prints ABS" + ], + "OFXIbw5D": [ + "OrcaFilamentLibrary/Bambu PLA Matte" + ], "OFXNO5Of": [ "Qidi/QIDI PLA Rapido 0.2 nozzle" ], "OFXQX0tr": [ "Ratrig/RatRig PunkFil PETG CF" ], + "OFXTPuqV": [ + "OrcaFilamentLibrary/Elas PETG Basic" + ], "OFXcfTEb": [ "Qidi/Tinmorry PETG-ECO" ], "OFXfgh61": [ "Prusa/Prusa Generic PA-CF" ], + "OFXkm8q1": [ + "OrcaFilamentLibrary/Generic PP-CF" + ], "OFXkwkn6": [ "Qidi/QIDI PA-Ultra" ], - "OFXmQgno": [ - "OrcaFilamentLibrary/eSUN PLA-Marble" - ], "OFXv4FUi": [ "Flashforge/Flashforge PLA Galaxy" ], + "OFXz7Mwx": [ + "OrcaFilamentLibrary/Elegoo PLA Silk" + ], + "OFXzQ4yL": [ + "OrcaFilamentLibrary/Bambu ASA-Aero" + ], "OFY1U4uM": [ "Sovol/Sovol SV08 TPU" ], + "OFY9muEs": [ + "Custom/Generic ABS", + "OrcaFilamentLibrary/Generic ABS", + "Sovol/Generic ABS" + ], "OFYG2Gfy": [ "Afinia/Afinia ABS+" ], + "OFYGbPHX": [ + "OrcaFilamentLibrary/PolyLite Dual PLA" + ], "OFYH00jV": [ "Qidi/QIDI ABS-GF" ], "OFYICbI4": [ "Flashforge/FusRock Generic PAHT-CF" ], + "OFYPdQJh": [ + "OrcaFilamentLibrary/Generic PETG", + "Sovol/Generic PETG" + ], "OFYRS7GZ": [ "Flashforge/Generic TPU-95A" ], "OFYZs7dN": [ "Flashforge/Flashforge Generic HS PLA" ], + "OFYd5uS3": [], "OFYehFGr": [ "Ratrig/RatRig BigNozzle TPU" ], "OFYfZgxU": [ "FlyingBear/FlyingBear TPU" ], + "OFZ4QbfK": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" + ], "OFZAkPHG": [ "Qidi/QIDI PPS-GF" ], @@ -6261,9 +4335,6 @@ "OFZcrV9c": [ "Flashforge/Flashforge PPS-CF" ], - "OFZhdVnP": [ - "OrcaFilamentLibrary/eSUN PLA-Basic" - ], "OFZjZ1k7": [ "Creality/Creality HF Generic PLA" ], @@ -6273,12 +4344,27 @@ "OFa6L3Of": [ "Qidi/Qidi PC-ABS-FR" ], + "OFaDOaNt": [ + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" + ], + "OFaEesXQ": [ + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" + ], "OFaKIoH2": [ "Elegoo/Elegoo PLA Sparkle" ], "OFaKZ6JI": [ "Anycubic/Generic PETG Basic" ], + "OFaQMgRH": [ + "OrcaFilamentLibrary/Bambu PLA Tough" + ], + "OFaYz8iE": [ + "OrcaFilamentLibrary/Elas PLA Pro" + ], + "OFausr3F": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rosa" + ], "OFaxQnfz": [ "Cubicon/Cubicon PC" ], @@ -6288,33 +4374,59 @@ "OFbK5wve": [ "Prusa/Prusa Generic TPU HF" ], + "OFbP8zEO": [ + "OrcaFilamentLibrary/Eolas Prints PLA Silk" + ], "OFbS9rjH": [ "Qidi/QIDI PETG Rapido" ], "OFbYP6Wb": [ "Elegoo/Elegoo PLA Marble" ], - "OFbgt3u3": [ - "OrcaFilamentLibrary/Elas PLA Basic" - ], "OFc2SnEp": [ "Artillery/Artillery PVA" ], + "OFc3xdm9": [ + "OrcaFilamentLibrary/Overture PLA" + ], "OFcZZWnB": [ "Cubicon/Cubicon ABS-A100" ], "OFceJcLf": [ "Qidi/PolyLite PLA" ], + "OFcfQk4h": [ + "BBL/Overture Air PLA", + "OrcaFilamentLibrary/Overture Air PLA" + ], "OFcqs5g7": [ "Elegoo/Elegoo PLA Translucent2" ], "OFcsHCy4": [ "Sovol/Sovol SV08 PLA" ], + "OFcvKkrs": [ + "BBL/Overture TPU", + "OrcaFilamentLibrary/Overture TPU" + ], "OFcy60o4": [ "Flashforge/Flashforge ASA Basic" ], + "OFcytyoA": [ + "OrcaFilamentLibrary/Fiberon PETG-ESD" + ], + "OFd0Fv0k": [ + "OrcaFilamentLibrary/Generic PE-CF" + ], + "OFd2vX0G": [ + "BBL/COEX PLA PRIME", + "OrcaFilamentLibrary/COEX PLA PRIME" + ], + "OFd4zw5l": [ + "BBL/AliZ PA-CF", + "OrcaFilamentLibrary/AliZ PA-CF" + ], + "OFdI4zMo": [], "OFdLGn0R": [ "Creality/Creality Generic PLA Wood" ], @@ -6324,9 +4436,15 @@ "OFdSGkUG": [ "Anycubic/Anycubic PETG" ], + "OFdb8YNz": [ + "OrcaFilamentLibrary/FilAr PLA Verde Manzana" + ], "OFdhVJql": [ "Flashforge/Flashforge PLA Buint Ti" ], + "OFdzlrhi": [ + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" + ], "OFeFRwST": [ "Flashforge/Flashforge PVA" ], @@ -6339,8 +4457,12 @@ "OFefhSuj": [ "InfiMech/InfiMech PLA Hyper" ], - "OFenGPBR": [ - "OrcaFilamentLibrary/Elegoo PETG Translucent" + "OFesA6rF": [ + "Flashforge/Generic PLA Silk", + "OrcaFilamentLibrary/Generic PLA Silk" + ], + "OFexaZU2": [ + "OrcaFilamentLibrary/FilAr PLA Manteca" ], "OFeybQvK": [ "Qidi/QIDI ABS Rapido 0.2 nozzle" @@ -6351,12 +4473,24 @@ "OFf2b9wu": [ "Anycubic/Anycubic ABS" ], - "OFfB1QKi": [ - "OrcaFilamentLibrary/Generic PETG HF" + "OFf5awy4": [ + "OrcaFilamentLibrary/Eolas Prints PLA Matte" + ], + "OFf6mfQO": [ + "OrcaFilamentLibrary/Bambu Support for ABS" + ], + "OFfBpSRI": [ + "OrcaFilamentLibrary/Bambu ASA" + ], + "OFfJSCzm": [ + "OrcaFilamentLibrary/FDplast PETG" ], "OFfJoIgg": [ "Qidi/QIDI PAHT-GF" ], + "OFfZcoKr": [ + "OrcaFilamentLibrary/FilAr PLA-mate Piel" + ], "OFfdxQok": [ "Qidi/Generic PLA+" ], @@ -6367,15 +4501,42 @@ "OFfkPhrJ": [ "Creality/Creality HF Generic Speed PLA" ], + "OFfmZrI3": [ + "OrcaFilamentLibrary/FDplast TPU" + ], + "OFfnXFie": [ + "BBL/COEX TPE 40D", + "OrcaFilamentLibrary/COEX TPE 40D" + ], "OFfoA8kJ": [ "CoLiDo/CoLiDo PLA" ], + "OFfq5YXA": [ + "OrcaFilamentLibrary/Valment PLA-CF" + ], + "OFfr4XNO": [ + "BBL/COEX TPE 60D", + "OrcaFilamentLibrary/COEX TPE 60D" + ], "OFftQOek": [ "Flashforge/Flashforge PLA Matte" ], + "OFfuhviw": [ + "OrcaFilamentLibrary/Elegoo PLA Marble" + ], "OFg4N6ZL": [ "FlyingBear/FlyingBear PETG" ], + "OFg57Nmc": [ + "OrcaFilamentLibrary/Bambu PC FR" + ], + "OFg8hMzT": [ + "OrcaFilamentLibrary/FILL3D PPCF" + ], + "OFg8ndtj": [ + "Custom/Generic PA", + "OrcaFilamentLibrary/Generic PA" + ], "OFgJX0Fc": [ "Flashforge/FlashForge PPS" ], @@ -6385,15 +4546,25 @@ "OFgMGSpF": [ "Sovol/Sovol SV06 Plus ACE PETG" ], + "OFgMWJ8T": [ + "OrcaFilamentLibrary/FilAr PLA Negro Azabache" + ], "OFgNzLVh": [ "Sovol/Sovol Zero ABS" ], "OFgSK1hL": [ "Anycubic/Anycubic PLA High Speed" ], + "OFgbpcy9": [ + "OrcaFilamentLibrary/Generic TPU", + "Sovol/Generic TPU" + ], "OFglpvEE": [ "Sovol/Sovol SV06 ACE TPU" ], + "OFgpLTMR": [ + "OrcaFilamentLibrary/FilAr PETG Gris Plata" + ], "OFgrGfPy": [ "Anycubic/Anycubic PLA+" ], @@ -6403,18 +4574,52 @@ "OFh5GUhZ": [ "Elegoo/Elegoo PLA Wood" ], + "OFhASRWj": [ + "OrcaFilamentLibrary/Panchroma PLA Temp Shift" + ], "OFhKNHC8": [ "Elegoo/Generic PETG PRO" ], + "OFhMO9Kh": [ + "OrcaFilamentLibrary/GreenGate3D PETG" + ], + "OFhQfUQY": [ + "OrcaFilamentLibrary/Generic SBS" + ], + "OFhWc5Bv": [ + "OrcaFilamentLibrary/NIT ABS" + ], + "OFhWhL1i": [ + "OrcaFilamentLibrary/Eolas Prints PETG" + ], + "OFhcYzR8": [ + "OrcaFilamentLibrary/Elegoo PLA Sparkle" + ], + "OFhfd722": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" + ], + "OFhlCNqq": [ + "BBL/COEX PLA", + "OrcaFilamentLibrary/COEX PLA" + ], + "OFhuaUQB": [ + "OrcaFilamentLibrary/Bambu ABS" + ], "OFhzHd2Y": [ "Flashforge/Flashforge HIPS" ], "OFi1ocNv": [ "Flashforge/Flashforge PA" ], + "OFiDpM1B": [ + "OrcaFilamentLibrary/FilAr PLA-mate Bordo" + ], "OFiJYDPC": [ "Qidi/HATCHBOX PLA" ], + "OFiWaoqD": [ + "OrcaFilamentLibrary/DREMC PPA-CF" + ], "OFic2uNr": [ "Sovol/Sovol SV06 ACE PLA" ], @@ -6427,12 +4632,24 @@ "OFiyGNbI": [ "Elegoo/Elegoo PETG-CF" ], + "OFj3bTjw": [ + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" + ], "OFjFPhUC": [ "Prusa/Prusament rPLA" ], + "OFjPXrXO": [ + "OrcaFilamentLibrary/Elegoo PLA Glow" + ], + "OFjT9PkZ": [ + "OrcaFilamentLibrary/FilAr PLA Tabaco" + ], "OFjZw7k1": [ "Snapmaker/PolyTerra J1 PLA" ], + "OFjb0wos": [ + "OrcaFilamentLibrary/Panchroma PLA Metallic" + ], "OFjdTQd6": [ "Anycubic/Anycubic PLA Silk" ], @@ -6445,9 +4662,15 @@ "OFjohFkg": [ "Qidi/QIDI PETG Translucent" ], + "OFjorDcx": [ + "OrcaFilamentLibrary/FDplast ABS" + ], "OFjqPjjl": [ "Flashforge/Generic PET" ], + "OFjt9en1": [ + "OrcaFilamentLibrary/Generic CoPE" + ], "OFjurQ3I": [ "Sovol/Sovol Zero PETG" ], @@ -6457,6 +4680,15 @@ "OFk6T5YH": [ "Sovol/Sovol Zero PETG HS Nozzle" ], + "OFk8t9mz": [ + "OrcaFilamentLibrary/Fiberon PETG-rCF" + ], + "OFkGvN4d": [ + "OrcaFilamentLibrary/FilAr PLA Verde Pixel" + ], + "OFkOviHk": [ + "OrcaFilamentLibrary/Fiberon PA6-CF" + ], "OFkaDtKx": [ "Flashforge/Flashforge PA66-CF" ], @@ -6466,12 +4698,24 @@ "OFkfK62J": [ "Elegoo/Elegoo PLA Silk" ], + "OFkhhUS0": [ + "OrcaFilamentLibrary/Elegoo Rapid PLA+" + ], "OFklg4aM": [ "Elegoo/Elegoo PLA PRO" ], + "OFknl9Iz": [ + "OrcaFilamentLibrary/Bambu ABS-GF" + ], + "OFkoLUtR": [ + "OrcaFilamentLibrary/FilAr PLA Verde Oliva" + ], "OFkoT6jl": [ "Prusa/Prusament PLA" ], + "OFkzr35f": [ + "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" + ], "OFlN56xW": [ "Chuanying/Chuanying Generic PLA-Silk", "Chuanying/Chuanying PLA-SILK" @@ -6479,39 +4723,78 @@ "OFlNKZLP": [ "Flashforge/Flashforge PLA Metal" ], + "OFlP3KWq": [ + "OrcaFilamentLibrary/Elegoo PETG HF" + ], + "OFlSNkhc": [ + "OrcaFilamentLibrary/Eolas Prints ASA" + ], "OFlbn4FY": [ "Snapmaker/Snapmaker PLA Matte" ], + "OFln72PT": [ + "OrcaFilamentLibrary/Elegoo PLA-CF" + ], + "OFlsTpJG": [ + "OrcaFilamentLibrary/Elegoo PC-FR" + ], + "OFlwmqrC": [ + "OrcaFilamentLibrary/Polymaker HT-PLA-GF" + ], "OFlxnxDx": [ "Tiertime/Tiertime Generic SBS" ], "OFlzQ0IS": [ "Peopoly/Peopoly Lancer PET-CF" ], + "OFm06H6V": [ + "OrcaFilamentLibrary/Elegoo PLA Basic" + ], "OFm1VZed": [ "Flashforge/Flashforge Generic PLA-CF" ], "OFmF1xL9": [ "Qidi/QIDI ASA-CF" ], + "OFmJAd3A": [ + "OrcaFilamentLibrary/FDplast HIPS" + ], "OFmKNi3f": [ "Qidi/QIDI PLA Rapido" ], "OFmOWC74": [ "Elegoo/Elegoo PETG PRO" ], + "OFmY0l6t": [ + "OrcaFilamentLibrary/Generic PLA Matte" + ], + "OFmaeU4a": [ + "OrcaFilamentLibrary/FilAr PLA-mate Naranja" + ], "OFmcJsqt": [ "InfiMech/InfiMech TPU" ], "OFmduKVr": [ "Flashforge/FlashForge PPS-CF" ], - "OFmeQjRP": [ - "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" - ], "OFmgesco": [ "Flashforge/Flashforge TPU 65D" ], + "OFmhJs5V": [ + "OrcaFilamentLibrary/Elegoo TPU 95A" + ], + "OFmn9NZL": [ + "OrcaFilamentLibrary/FusRock ABS-GF" + ], + "OFmpMwxS": [ + "OrcaFilamentLibrary/Generic PLA High Speed" + ], + "OFmveLWz": [ + "OrcaFilamentLibrary/Elegoo PETG-GF" + ], + "OFn1QaY3": [ + "OrcaFilamentLibrary/Elegoo PLA Translucent2" + ], "OFnLnZQo": [ "Cubicon/Cubicon PC" ], @@ -6524,6 +4807,15 @@ "OFnY9ovF": [ "Artillery/Artillery PA-CF" ], + "OFnYVFk2": [ + "OrcaFilamentLibrary/FilAr PLA Azul Francia" + ], + "OFnejEt4": [ + "OrcaFilamentLibrary/FilAr PETG Cian" + ], + "OFniMuTN": [ + "OrcaFilamentLibrary/Bambu PA6-CF" + ], "OFnj7bPm": [ "Qidi/QIDI ABS Rapido 0.6 nozzle" ], @@ -6533,6 +4825,10 @@ "OFnyirh9": [ "Artillery/Artillery PLA Silk" ], + "OFo2UF2C": [ + "Flashforge/Generic BVOH", + "OrcaFilamentLibrary/Generic BVOH" + ], "OFo4VB3w": [ "Elegoo/Generic ABS-CF" ], @@ -6545,27 +4841,61 @@ "OFoJUGj6": [ "Flashforge/Flashforge HS PLA" ], + "OFoSknDB": [ + "OrcaFilamentLibrary/FILL3D PLA Turbo" + ], + "OFoYSJKi": [ + "OrcaFilamentLibrary/Generic PETG-CF" + ], + "OFobDOW5": [ + "OrcaFilamentLibrary/Elegoo ASA" + ], + "OFocyw69": [ + "BBL/AliZ PETG", + "OrcaFilamentLibrary/AliZ PETG" + ], + "OFoiVqVM": [ + "OrcaFilamentLibrary/Bambu PLA Basic" + ], "OFoimrpo": [ "Flashforge/Flashforge PETG-CF" ], + "OFovEIbw": [ + "OrcaFilamentLibrary/Bambu PETG HF" + ], "OFp8lkYD": [ "Flashforge/Flashforge PPA-GF" ], "OFp90N8a": [ "Artillery/Artillery PA" ], + "OFpBlrvY": [ + "OrcaFilamentLibrary/Valment PLA Silk" + ], "OFpHq9gJ": [ "Prusa/Prusament PETG" ], + "OFpPGSKG": [ + "OrcaFilamentLibrary/SUNLU Silk PLA+" + ], + "OFpW4gdi": [ + "OrcaFilamentLibrary/SUNLU PLA Matte" + ], "OFphFSUJ": [ "Prusa/Prusa Generic PETG HF" ], - "OFpwg2Qh": [ - "OrcaFilamentLibrary/Elegoo ASA-CF" - ], "OFq6IhFg": [ "Cubicon/Cubicon PLA" ], + "OFq8gfS4": [ + "OrcaFilamentLibrary/FilAr PETG Negro Azabache" + ], + "OFqGRZyH": [ + "OrcaFilamentLibrary/Numakers PLA+" + ], + "OFqINlYj": [ + "OrcaFilamentLibrary/eSUN PLA+" + ], "OFqPp2yL": [ "Qidi/QIDI PETG Tough 0.6 nozzle" ], @@ -6575,38 +4905,59 @@ "OFqSTJ3I": [ "OrcaArena/OrcaArena Generic PLA Silk" ], - "OFqh1Ngp": [ - "OrcaFilamentLibrary/Elegoo PLA-CF" - ], "OFqkcvDI": [ "Peopoly/Peopoly Lancer ABS-GF" ], + "OFqtx549": [ + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" + ], + "OFqw2PQA": [ + "OrcaFilamentLibrary/Panchroma CoPE" + ], "OFqyIUDi": [ "Qidi/Qidi PLA-CF" ], + "OFrFBEfd": [ + "OrcaFilamentLibrary/Eolas Prints PLA Neon" + ], + "OFrKLeE3": [ + "OrcaFilamentLibrary/Bambu PLA Metal" + ], + "OFrOh600": [ + "OrcaFilamentLibrary/Panchroma PLA Matte" + ], "OFrbbq6E": [ "InfiMech/Other PLA Hyper" ], - "OFrgQ1Ns": [ - "OrcaFilamentLibrary/Elas PLA Pro" + "OFryjl35": [ + "OrcaFilamentLibrary/Elegoo ASA-CF" ], "OFs1CbB1": [ "Qidi/QIDI PLA Rapido 0.8 nozzle" ], - "OFs6lLH7": [ - "OrcaFilamentLibrary/Elegoo PLA Silk" + "OFsB2lxm": [ + "OrcaFilamentLibrary/Elegoo PLA Matte" ], "OFsCOJv7": [ "Anycubic/Generic TPU" ], - "OFsKqcQW": [ - "OrcaFilamentLibrary/Elegoo PLA PRO" + "OFsDXRpS": [ + "OrcaFilamentLibrary/FilAr PLA Piel" + ], + "OFsFon5l": [ + "OrcaFilamentLibrary/Generic HIPS" + ], + "OFsHSVZc": [ + "OrcaFilamentLibrary/Bambu Support W" ], "OFsLkLw6": [ "Elegoo/Generic PLA Matte" ], - "OFsNZcid": [ - "OrcaFilamentLibrary/PolyLite Dual PLA" + "OFsRDvTM": [ + "OrcaFilamentLibrary/Panchroma PLA" + ], + "OFsXQXbs": [ + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" ], "OFsgANe3": [ "Flashforge/Flashforge PAHT-CF" @@ -6614,12 +4965,18 @@ "OFsmPFwh": [ "Sovol/Sovol SV06 Plus ACE TPU" ], + "OFsoykbm": [ + "OrcaFilamentLibrary/DREMC PA6-CF" + ], "OFt1YdX8": [ "FLSun/FLSun T1 PLA Silk" ], "OFt5bvKK": [ "Artillery/Artillery PETG Basic" ], + "OFt6e0US": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" + ], "OFt9AiN5": [ "Flashforge/Polymaker CoPA" ], @@ -6632,12 +4989,20 @@ "OFtL05hE": [ "Sovol/Sovol Zero PLA Basic HS Nozzle" ], + "OFtOoWIj": [], + "OFtRn8X8": [ + "OrcaFilamentLibrary/FDplast SBS" + ], "OFtXBjvb": [ "Artillery/Artillery PLA Tough" ], + "OFtcKVgP": [], "OFtcTs1o": [ "Ratrig/RatRig BigNozzle ABS" ], + "OFtefokm": [ + "OrcaFilamentLibrary/FilAr PLA-mate Blanco" + ], "OFtemzzw": [ "Sovol/Sovol SV06 ACE ABS" ], @@ -6650,9 +5015,22 @@ "OFtmT4Nd": [ "Artillery/Artillery ASA" ], + "OFtpXCCv": [ + "BBL/COEX ASA PRIME", + "OrcaFilamentLibrary/COEX ASA PRIME" + ], + "OFtr8eZw": [ + "OrcaFilamentLibrary/FDplast PLA" + ], + "OFtudokz": [ + "OrcaFilamentLibrary/Eolas Prints PLA Premium" + ], "OFtwA91m": [ "Sovol/Sovol Zero PC" ], + "OFu1evlr": [ + "OrcaFilamentLibrary/Generic PCTG" + ], "OFuPC4S8": [ "Elegoo/Elegoo PLA-CF" ], @@ -6662,24 +5040,34 @@ "OFuTFxVP": [ "Qidi/Overture ABS" ], + "OFuUuIhR": [ + "OrcaFilamentLibrary/Elegoo PETG-CF" + ], + "OFuWCQXN": [ + "BBL/COEX ABS PRIME", + "OrcaFilamentLibrary/COEX ABS PRIME" + ], "OFuXkYly": [ "Elegoo/Elegoo PLA Glow" ], "OFuYvNS3": [ "Afinia/Afinia Value ABS" ], + "OFufTAK9": [ + "OrcaFilamentLibrary/FilAr PLA-mate Negro" + ], "OFuidAEg": [ "Qidi/Bambu ABS" ], "OFuq9tqb": [ "InfiMech/InfiMech PLA Basic" ], + "OFurdQxc": [ + "OrcaFilamentLibrary/FilAr PETG Magenta" + ], "OFuswXlp": [ "Flashforge/Generic TPU 85A" ], - "OFutwD6f": [ - "OrcaFilamentLibrary/Elegoo PLA Glow" - ], "OFuyJhLF": [ "Flashforge/Flashforge PETG Basic" ], @@ -6692,21 +5080,40 @@ "OFvGSn0l": [ "Creality/Creality Generic PETG-CF" ], + "OFvKUnLh": [ + "OrcaFilamentLibrary/Bambu TPU 95A HF" + ], "OFvN3117": [ "Qidi/QIDI PLA Matte Basic" ], "OFvOhSjO": [ "FlyingBear/Other TPU" ], + "OFvPPMxL": [ + "OrcaFilamentLibrary/FilAr PLA Verde FilAr" + ], + "OFvTVZc3": [ + "BBL/COEX PETG", + "OrcaFilamentLibrary/COEX PETG" + ], + "OFvVy7yo": [ + "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" + ], "OFvYfHPB": [ "Anycubic/Anycubic PLA Matte" ], "OFvaXhYD": [ "InfiMech/InfiMech PETG" ], + "OFvgE0Zh": [ + "OrcaFilamentLibrary/Elegoo PLA" + ], "OFviQ9lH": [ "Flashforge/Flashforge Generic TPU" ], + "OFvrXuV7": [ + "OrcaFilamentLibrary/PolyLite ASA" + ], "OFvsS7Fb": [ "Flashforge/Generic TPU-64D" ], @@ -6716,6 +5123,9 @@ "OFvxvkAd": [ "Artillery/Artillery PLA-CF" ], + "OFvzvwCu": [ + "OrcaFilamentLibrary/Eolas Prints PLA High Speed" + ], "OFw05rkF": [ "InfiMech/Other PETG" ], @@ -6725,21 +5135,44 @@ "OFw1S8lL": [ "Artillery/Artillery ABS" ], - "OFw4OHWE": [ - "OrcaFilamentLibrary/Elas PETG Basic" - ], "OFwHPTvy": [ "Qidi/Qidi Generic PLA+" ], + "OFwJ0qu2": [], + "OFwPrlCM": [ + "OrcaFilamentLibrary/Bambu PETG Translucent" + ], + "OFwRJ4g0": [ + "OrcaFilamentLibrary/NIT PLA" + ], + "OFwaYjL6": [ + "OrcaFilamentLibrary/Fiberon PA6-GF" + ], "OFwf0oWp": [ "Flashforge/Flashforge PLA Luminous" ], + "OFwu7IAG": [ + "BBL/COEX PCTG PRIME", + "OrcaFilamentLibrary/COEX PCTG PRIME" + ], "OFwyqcGn": [ "Elegoo/Elegoo PLA Matte" ], + "OFx8Lmsd": [ + "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" + ], + "OFxA1p01": [ + "OrcaFilamentLibrary/Overture PLA Pro" + ], "OFxLeRyT": [ "Prusa/Prusa Generic PVA HF" ], + "OFxOHhZw": [ + "OrcaFilamentLibrary/Elegoo ABS" + ], + "OFxUwUeW": [ + "OrcaFilamentLibrary/SUNLU PLA Marble" + ], "OFxVzzn4": [ "Chuanying/Chuanying Generic PLA-CF10" ], @@ -6764,18 +5197,28 @@ "OFyD1Zo8": [ "InfiMech/Other PC" ], + "OFybzvQN": [ + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" + ], "OFyoW5W2": [ "Flashforge/Flashforge PLA Color Change" ], "OFypQeKR": [ "Elegoo/Generic PC-CF" ], + "OFysxCep": [ + "OrcaFilamentLibrary/FilAr PETG Coral" + ], "OFyt23xJ": [ "FLSun/FLSun T1 PLA High Speed" ], "OFyxAbO4": [ "Flashforge/Flashforge TPU-95A" ], + "OFyxayW4": [ + "BBL/AliZ PLA", + "OrcaFilamentLibrary/AliZ PLA" + ], "OFzFbFcl": [ "Elegoo/Elegoo PC-FR" ], @@ -6788,352 +5231,20 @@ "OFziUL2X": [ "Ginger Additive/Ginger Generic PLA" ], - "OFzrWlH5": [ - "OrcaFilamentLibrary/Elegoo PETG HF" - ], - "OGFA00": [ - "OrcaFilamentLibrary/Bambu PLA Basic" - ], - "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" - ], - "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", - "OrcaFilamentLibrary/Generic ABS", - "Sovol/Generic ABS" - ], - "OGFC00": [ - "OrcaFilamentLibrary/Bambu PC" - ], - "OGFC01": [ - "OrcaFilamentLibrary/Bambu PC FR" - ], - "OGFC99": [ - "OrcaFilamentLibrary/Generic PC", - "Sovol/Generic PC" - ], - "OGFG00": [ - "OrcaFilamentLibrary/Bambu 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": [ - "OrcaFilamentLibrary/Generic PETG", - "Sovol/Generic PETG" - ], - "OGFGG300": [ - "OrcaFilamentLibrary/GreenGate3D PETG" - ], - "OGFL00": [ - "OrcaFilamentLibrary/PolyLite PLA" - ], - "OGFL00-1": [ - "OrcaFilamentLibrary/PolyTerra Dual PLA" - ], - "OGFL01": [ - "OrcaFilamentLibrary/PolyTerra PLA", - "Snapmaker/PolyTerra PLA" - ], - "OGFL03": [ - "OrcaFilamentLibrary/eSUN PLA+" - ], - "OGFL04": [ - "OrcaFilamentLibrary/Overture PLA" - ], - "OGFL05": [ - "OrcaFilamentLibrary/Overture Matte PLA" - ], - "OGFL06": [ - "OrcaFilamentLibrary/Fiberon PETG-ESD" - ], - "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/Generic PLA Silk", - "OrcaFilamentLibrary/Generic PLA Silk", - "Sovol/Generic PLA Silk" - ], - "OGFL98": [ - "OrcaFilamentLibrary/Generic PLA-CF" - ], - "OGFL99": [ - "Flashforge/Generic PLA", - "OrcaFilamentLibrary/Generic PLA", - "Sovol/Generic PLA" - ], - "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": [ - "OrcaFilamentLibrary/Generic PPA-GF" - ], - "OGFN97": [ - "OrcaFilamentLibrary/Generic PPA-CF" - ], - "OGFN98": [ - "Custom/Generic PA-CF", - "OrcaFilamentLibrary/Generic PA-CF" - ], - "OGFN99": [ - "Custom/Generic PA", - "OrcaFilamentLibrary/Generic PA" - ], - "OGFNMK00": [ - "OrcaFilamentLibrary/Numakers PLA+" - ], - "OGFP97": [ - "OrcaFilamentLibrary/Generic PP" - ], - "OGFP99": [ - "OrcaFilamentLibrary/Generic PE" - ], - "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": [ + "OFzrUUxc": [], + "OFzyIxba": [ "OrcaFilamentLibrary/Bambu PVA" ], - "OGFS05": [ - "OrcaFilamentLibrary/Bambu Support For PLA/PETG" - ], - "OGFS06": [ - "OrcaFilamentLibrary/Bambu Support for ABS" - ], - "OGFS97": [ - "Flashforge/Generic BVOH", - "OrcaFilamentLibrary/Generic BVOH" - ], - "OGFS98": [ - "OrcaFilamentLibrary/Generic HIPS" - ], - "OGFS99": [ - "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" + "OGFC99": [], + "OGFG99": [], + "OGFL96": [ + "Flashforge/Generic PLA Silk", + "Sovol/Generic PLA Silk" ], + "OGFN99": [], "OGFSNL08": [ - "OrcaFilamentLibrary/SUNLU PETG", "Sovol/SUNLU PETG" ], - "OGFT01": [ - "OrcaFilamentLibrary/Bambu PET-CF" - ], - "OGFT02": [], - "OGFU00": [ - "OrcaFilamentLibrary/Bambu TPU 95A HF" - ], - "OGFU01": [ - "OrcaFilamentLibrary/Bambu TPU 95A" - ], - "OGFU99": [ - "OrcaFilamentLibrary/Generic TPU", - "Sovol/Generic TPU" - ], - "OVTABS08": [ - "OrcaFilamentLibrary/Overture ABS Basic" - ], "P1001": [ "Creality/Panchroma PLA Satin" ], @@ -7916,18 +6027,6 @@ ], "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": [ @@ -9500,14 +7599,26 @@ "OrcaFilamentLibrary/FilAr PLA-mate Violeta", "OrcaFilamentLibrary/Generic ABS @System", "OrcaFilamentLibrary/Generic ASA @System", + "OrcaFilamentLibrary/Generic BVOH @System", + "OrcaFilamentLibrary/Generic CoPE @System", + "OrcaFilamentLibrary/Generic EVA @System", + "OrcaFilamentLibrary/Generic HIPS @System", "OrcaFilamentLibrary/Generic PA @System", "OrcaFilamentLibrary/Generic PA-CF @System", "OrcaFilamentLibrary/Generic PC @System", + "OrcaFilamentLibrary/Generic PCTG @System", + "OrcaFilamentLibrary/Generic PE @System", "OrcaFilamentLibrary/Generic PETG @System", + "OrcaFilamentLibrary/Generic PHA @System", + "OrcaFilamentLibrary/Generic PLA @System", "OrcaFilamentLibrary/Generic PLA High Speed @System", + "OrcaFilamentLibrary/Generic PLA Silk @System", "OrcaFilamentLibrary/Generic PLA-CF @System", + "OrcaFilamentLibrary/Generic PP @System", + "OrcaFilamentLibrary/Generic PPA-CF @System", "OrcaFilamentLibrary/Generic PPA-GF @System", "OrcaFilamentLibrary/Generic PVA @System", + "OrcaFilamentLibrary/Generic SBS @System", "OrcaFilamentLibrary/Generic TPU @System", "OrcaFilamentLibrary/PolyLite PLA @System", "OrcaFilamentLibrary/PolyTerra Dual PLA @System", @@ -11442,41 +9553,6 @@ "Snapmaker PA-CF" ] ], - "AZ01-1": [ - [ - "Aliz", - "PETG-CF", - "AliZ PETG-CF" - ] - ], - "AZ01-2": [ - [ - "Aliz", - "PETG", - "AliZ PETG-Metal" - ] - ], - "AliZ001": [ - [ - "Aliz", - "PETG", - "AliZ PETG" - ] - ], - "AliZ002": [ - [ - "Aliz", - "PLA", - "AliZ PLA" - ] - ], - "AliZ003": [ - [ - "Aliz", - "PA-CF", - "AliZ PA-CF" - ] - ], "BSFI001": [ [ "Generic", @@ -11547,104 +9623,6 @@ "Blocks Generic PLA-CF" ] ], - "CX30DB20": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 30D" - ] - ], - "CX40DB20": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 40D" - ] - ], - "CX60AB17": [ - [ - "COEX 3D", - "TPU", - "COEX TPU 60A" - ] - ], - "CX60DB19": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 60D" - ] - ], - "CXABPB09": [ - [ - "COEX 3D", - "ABS", - "COEX ABS PRIME" - ] - ], - "CXABSB01": [ - [ - "COEX 3D", - "ABS", - "COEX ABS" - ] - ], - "CXASAB04": [ - [ - "COEX 3D", - "ASA", - "COEX ASA PRIME" - ] - ], - "CXPACB23": [ - [ - "COEX 3D", - "PA-CF", - "COEX NYLEX PA6-CF" - ] - ], - "CXPAUB21": [ - [ - "COEX 3D", - "PA", - "COEX NYLEX UNFILLED" - ] - ], - "CXPCTB15": [ - [ - "COEX 3D", - "PCTG", - "COEX PCTG PRIME" - ] - ], - "CXPETB13": [ - [ - "COEX 3D", - "PETG", - "COEX PETG" - ] - ], - "CXPLAB02": [ - [ - "COEX 3D", - "PLA", - "COEX PLA" - ] - ], - "CXPLAB08": [ - [ - "COEX 3D", - "PLA", - "COEX PLA PRIME" - ] - ], - "CXPLSB03": [ - [ - "COEX 3D", - "PLA", - "COEX PLA+Silk" - ] - ], "DFL99": [ [ "Volumic", @@ -11652,102 +9630,6 @@ "Désactivé" ] ], - "DREMC001": [ - [ - "DREMC", - "PLA", - "DREMC PLA+" - ] - ], - "DREMC002": [ - [ - "DREMC", - "PETG", - "DREMC PETG" - ] - ], - "DREMC003": [ - [ - "DREMC", - "ABS", - "DREMC ABS" - ] - ], - "DREMC004": [ - [ - "DREMC", - "ABS", - "DREMC ABS+" - ] - ], - "DREMC005": [ - [ - "DREMC", - "ASA", - "DREMC ASA" - ] - ], - "DREMC006": [ - [ - "DREMC", - "PA6-CF", - "DREMC PA6-CF" - ] - ], - "DREMC007": [ - [ - "DREMC", - "PA-CF", - "DREMC PA12-CF" - ] - ], - "DREMC008": [ - [ - "DREMC", - "PET-CF", - "DREMC PET-CF" - ] - ], - "DREMC009": [ - [ - "DREMC", - "ABS-GF", - "DREMC ABS-GF" - ] - ], - "DREMC010": [ - [ - "DREMC", - "PPA-CF", - "DREMC PPA-CF" - ], - [ - "DREMC", - "TPU", - "DREMC TPU 95A" - ] - ], - "DREMC011": [ - [ - "DREMC", - "PLA", - "DREMC PLA+ HS" - ] - ], - "DREMC012": [ - [ - "DREMC", - "ASA", - "DREMC ASA CF" - ] - ], - "DREMC013": [ - [ - "DREMC", - "ASA", - "DREMC ASA GF" - ] - ], "E1001": [ [ "eSUN", @@ -11972,20 +9854,6 @@ "Elegoo PLA" ] ], - "ESN02": [ - [ - "eSUN", - "PLA-AERO", - "eSUN ePLA-LW" - ] - ], - "ESN03": [ - [ - "eSUN", - "PETG", - "eSUN PETG" - ] - ], "ETPUB00": [ [ "Elegoo", @@ -11993,48 +9861,6 @@ "Elegoo TPU" ] ], - "FDPLAST01": [ - [ - "FDplast", - "ABS", - "FDplast ABS" - ] - ], - "FDPLAST02": [ - [ - "FDplast", - "HIPS", - "FDplast HIPS" - ] - ], - "FDPLAST03": [ - [ - "FDplast", - "PETG", - "FDplast PETG" - ] - ], - "FDPLAST04": [ - [ - "FDplast", - "PLA", - "FDplast PLA" - ] - ], - "FDPLAST05": [ - [ - "FDplast", - "SBS", - "FDplast SBS" - ] - ], - "FDPLAST06": [ - [ - "FDplast", - "TPU", - "FDplast TPU" - ] - ], "FFF01": [ [ "Flashforge", @@ -12068,496 +9894,6 @@ "Flashforge Generic PLA" ] ], - "FILAR0001": [ - [ - "FilAr", - "PLA", - "FilAr PLA Bronce" - ] - ], - "FILAR0002": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Plata" - ] - ], - "FILAR0003": [ - [ - "FilAr", - "PLA", - "FilAr PLA Cobre" - ] - ], - "FILAR0004": [ - [ - "FilAr", - "PLA", - "FilAr PLA Titanio" - ] - ], - "FILAR0005": [ - [ - "FilAr", - "PLA", - "FilAr PLA Tabaco" - ] - ], - "FILAR0006": [ - [ - "FilAr", - "PLA", - "FilAr PLA Cafe con Leche" - ] - ], - "FILAR0007": [ - [ - "FilAr", - "PLA", - "FilAr PLA Manteca" - ] - ], - "FILAR0008": [ - [ - "FilAr", - "PLA", - "FilAr PLA Marron Oxido" - ] - ], - "FILAR0009": [ - [ - "FilAr", - "PLA", - "FilAr PLA Carpincho" - ] - ], - "FILAR0010": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rosa Amaranto" - ] - ], - "FILAR0011": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rosa Flamenco" - ] - ], - "FILAR0012": [ - [ - "FilAr", - "PLA", - "FilAr PLA Piel" - ] - ], - "FILAR0013": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde FilAr" - ] - ], - "FILAR0014": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Manzana" - ] - ], - "FILAR0015": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Pixel" - ] - ], - "FILAR0016": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Oliva" - ] - ], - "FILAR0017": [ - [ - "FilAr", - "PLA", - "FilAr PLA Blanco Antartida" - ] - ], - "FILAR0018": [ - [ - "FilAr", - "PLA", - "FilAr PLA Blanco Calido" - ] - ], - "FILAR0019": [ - [ - "FilAr", - "PLA", - "FilAr PLA Negro Azabache" - ] - ], - "FILAR0020": [ - [ - "FilAr", - "PLA", - "FilAr PLA Naranja Tigre" - ] - ], - "FILAR0021": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rojo de Carreras" - ] - ], - "FILAR0022": [ - [ - "FilAr", - "PLA", - "FilAr PLA Amarillo Lirio" - ] - ], - "FILAR0023": [ - [ - "FilAr", - "PLA", - "FilAr PLA Violeta Jacaranda" - ] - ], - "FILAR0024": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Pizarra" - ] - ], - "FILAR0025": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Ceniza" - ] - ], - "FILAR0026": [ - [ - "FilAr", - "PLA", - "FilAr PLA Azul Francia" - ] - ], - "FILAR0027": [ - [ - "FilAr", - "PLA", - "FilAr PLA Celeste Cielo" - ] - ], - "FILAR0028": [ - [ - "FilAr", - "PLA", - "FilAr PLA Oro" - ] - ], - "FILAR0029": [ - [ - "FilAr", - "PLA", - "FilAr PLA Dorado" - ] - ], - "FILAR0030": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Amarillo" - ] - ], - "FILAR0031": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Azul" - ] - ], - "FILAR0032": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Beige" - ] - ], - "FILAR0033": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Blanco" - ] - ], - "FILAR0034": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Bordo" - ] - ], - "FILAR0035": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Celeste Cielo" - ] - ], - "FILAR0036": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Chocolate" - ] - ], - "FILAR0037": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Gris" - ] - ], - "FILAR0038": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Marron" - ] - ], - "FILAR0039": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Naranja" - ] - ], - "FILAR0040": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Negro" - ] - ], - "FILAR0041": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Piel" - ] - ], - "FILAR0042": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Rojo" - ] - ], - "FILAR0043": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Rosa" - ] - ], - "FILAR0044": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Uva" - ] - ], - "FILAR0045": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Verde" - ] - ], - "FILAR0046": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Violeta" - ] - ], - "FILAR0047": [ - [ - "FilAr", - "PETG", - "FilAr PETG Amarillo Lima" - ] - ], - "FILAR0048": [ - [ - "FilAr", - "PETG", - "FilAr PETG Amarillo Radiante" - ] - ], - "FILAR0049": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Boreal" - ] - ], - "FILAR0050": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Francia" - ] - ], - "FILAR0051": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Imperial" - ] - ], - "FILAR0052": [ - [ - "FilAr", - "PETG", - "FilAr PETG Blanco Antartida" - ] - ], - "FILAR0053": [ - [ - "FilAr", - "PETG", - "FilAr PETG Cian" - ] - ], - "FILAR0054": [ - [ - "FilAr", - "PETG", - "FilAr PETG Coral" - ] - ], - "FILAR0055": [ - [ - "FilAr", - "PETG", - "FilAr PETG Cristal" - ] - ], - "FILAR0056": [ - [ - "FilAr", - "PETG", - "FilAr PETG Gris Ceniza" - ] - ], - "FILAR0057": [ - [ - "FilAr", - "PETG", - "FilAr PETG Gris Plata" - ] - ], - "FILAR0058": [ - [ - "FilAr", - "PETG", - "FilAr PETG Magenta" - ] - ], - "FILAR0059": [ - [ - "FilAr", - "PETG", - "FilAr PETG Negro Azabache" - ] - ], - "FILAR0060": [ - [ - "FilAr", - "PETG", - "FilAr PETG Rojo Carmesi" - ] - ], - "FILARB01": [ - [ - "FilAr", - "PLA", - "FilAr PLA" - ] - ], - "FILARB02": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate" - ] - ], - "FILARB03": [ - [ - "FilAr", - "PETG", - "FilAr PETG" - ] - ], - "FILL3D001": [ - [ - "FILL3D", - "PLA", - "FILL3D PLA Turbo" - ] - ], - "FILL3D002": [ - [ - "FILL3D", - "PLA", - "FILL3D PLA Basic" - ] - ], - "FILL3D003": [ - [ - "FILL3D", - "PETG", - "FILL3D PETG" - ] - ], - "FILL3D004": [ - [ - "FILL3D", - "PP", - "FILL3D PP" - ] - ], - "FILL3D005": [ - [ - "FILL3D", - "PP", - "FILL3D PPCF" - ] - ], - "FILL3D006": [ - [ - "FILL3D", - "PA", - "FILL3D PA" - ] - ], - "FILL3D007": [ - [ - "FILL3D", - "PETG-CF", - "FILL3D PETG CF" - ] - ], "GABSB00": [ [ "Generic", @@ -14599,62 +11935,6 @@ "Prusa Generic PA" ] ], - "GFOT001": [ - [ - "Overture", - "PLA", - "Overture PLA Pro" - ] - ], - "GFOT002": [ - [ - "Overture", - "PLA", - "Overture Silk PLA" - ] - ], - "GFOT003": [ - [ - "Overture", - "PLA", - "Overture Easy PLA" - ] - ], - "GFOT004": [ - [ - "Overture", - "PLA", - "Overture Rock PLA" - ] - ], - "GFOT005": [ - [ - "Overture", - "PLA", - "Overture Super PLA+" - ] - ], - "GFOT006": [ - [ - "Overture", - "PLA", - "Overture Air PLA" - ] - ], - "GFOT008": [ - [ - "Overture", - "TPU", - "Overture TPU" - ] - ], - "GFOT009": [ - [ - "Overture", - "ASA", - "Overture ASA" - ] - ], "GFP95": [ [ "Generic", @@ -15225,132 +12505,6 @@ "Prusa Generic PVA HF" ] ], - "GFSEP001": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Premium" - ] - ], - "GFSEP002": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Matte" - ] - ], - "GFSEP003": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Silk" - ] - ], - "GFSEP004": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Neon" - ] - ], - "GFSEP005": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA High Speed" - ] - ], - "GFSEP006": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA INGEO 850" - ] - ], - "GFSEP007": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA INGEO 870" - ] - ], - "GFSEP008": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Antibacterial" - ] - ], - "GFSEP009": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Transition" - ] - ], - "GFSEP010": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG" - ] - ], - "GFSEP011": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG UV Resistant" - ] - ], - "GFSEP012": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG Transition" - ] - ], - "GFSEP013": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Flex 93A" - ] - ], - "GFSEP014": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Flex D53" - ] - ], - "GFSEP015": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU D60 UV Resistant" - ] - ], - "GFSEP016": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Transition" - ] - ], - "GFSEP017": [ - [ - "Eolas Prints", - "ABS", - "Eolas Prints ABS" - ] - ], - "GFSEP018": [ - [ - "Eolas Prints", - "ASA", - "Eolas Prints ASA" - ] - ], "GFSL99": [ [ "Generic", @@ -16024,76 +13178,6 @@ "LHS TPU" ] ], - "NIT01": [ - [ - "NIT", - "ABS", - "NIT ABS" - ] - ], - "NIT02": [ - [ - "NIT", - "PLA", - "NIT PLA" - ] - ], - "NIT03": [ - [ - "NIT", - "PETG", - "NIT PETG" - ] - ], - "OEABSB00": [ - [ - "Elegoo", - "ABS", - "Elegoo ABS" - ] - ], - "OEASAB00": [ - [ - "Elegoo", - "ASA", - "Elegoo ASA" - ] - ], - "OEPAHTB0": [ - [ - "Elegoo", - "PA", - "Elegoo PAHT" - ] - ], - "OEPCB00": [ - [ - "Elegoo", - "PC", - "Elegoo PC" - ] - ], - "OEPETGB0": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG" - ] - ], - "OEPLAB00": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA" - ] - ], - "OETPUB00": [ - [ - "Elegoo", - "TPU", - "Elegoo TPU" - ] - ], "OF09vOcG": [ [ "Elegoo", @@ -16108,11 +13192,11 @@ "Snapmaker Dual TPU High-Flow" ] ], - "OF0M6QAQ": [ + "OF0NgY1y": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Galaxy" + "COEX 3D", + "PA-CF", + "COEX NYLEX PA6-CF" ] ], "OF0SyJhk": [ @@ -16136,6 +13220,13 @@ "Qidi ASA-Aero" ] ], + "OF0UJcb6": [ + [ + "Polymaker", + "PETG", + "PolyLite PETG" + ] + ], "OF0UbONm": [ [ "Generic", @@ -16150,6 +13241,13 @@ "Cubicon PETG" ] ], + "OF0Vtzaw": [ + [ + "FilAr", + "PETG", + "FilAr PETG Amarillo Radiante" + ] + ], "OF0Y5MLd": [ [ "QIDI", @@ -16157,6 +13255,41 @@ "QIDI PETG-GF" ] ], + "OF0gGRWk": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Glow" + ] + ], + "OF0h7ERL": [ + [ + "Elegoo", + "PA", + "Elegoo PAHT" + ] + ], + "OF0kCNDK": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Luminous" + ] + ], + "OF0pzFLc": [ + [ + "COEX 3D", + "PLA", + "COEX PLA+Silk" + ] + ], + "OF0wBGNx": [ + [ + "Bambu Lab", + "ASA-CF", + "Bambu ASA-CF" + ] + ], "OF0wk0Pk": [ [ "Generic", @@ -16171,13 +13304,6 @@ "QIDI PLA Rapido Silk" ] ], - "OF102WKM": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG PRO" - ] - ], "OF17cONC": [ [ "Polymaker", @@ -16185,6 +13311,27 @@ "PolyTerra Dual PLA" ] ], + "OF1N1qMK": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA UV Shift" + ] + ], + "OF1Pke8t": [ + [ + "Overture", + "PLA", + "Overture Easy PLA" + ] + ], + "OF1UNk9P": [ + [ + "Generic", + "PP", + "Generic PP" + ] + ], "OF1Zypyy": [ [ "QIDI", @@ -16192,6 +13339,13 @@ "QIDI PETG Tough" ] ], + "OF1hznGB": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA PRO" + ] + ], "OF22AxCm": [ [ "Generic", @@ -16199,6 +13353,20 @@ "Polymaker PETG" ] ], + "OF2EK9F1": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Violeta" + ] + ], + "OF2GCW1l": [ + [ + "SUNLU", + "PETG", + "SUNLU PETG" + ] + ], "OF2HQqTC": [ [ "Cubicon", @@ -16220,6 +13388,27 @@ "Bambu PLA" ] ], + "OF2VFe4J": [ + [ + "Bambu Lab", + "PA-CF", + "Bambu PAHT-CF" + ] + ], + "OF2Z1nT5": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Imperial" + ] + ], + "OF2pj5l5": [ + [ + "Overture", + "PLA", + "Overture Super PLA+" + ] + ], "OF2tvNYA": [ [ "Generic", @@ -16227,6 +13416,20 @@ "Sovol Zero PLA Silk" ] ], + "OF2xccEe": [ + [ + "DREMC", + "ASA", + "DREMC ASA GF" + ] + ], + "OF30Ftju": [ + [ + "Elegoo", + "TPU", + "Elegoo Rapid TPU 95A" + ] + ], "OF38Hyk4": [ [ "Generic", @@ -16234,13 +13437,6 @@ "Flashforge PETG Pro" ] ], - "OF3GKs2i": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Matte" - ] - ], "OF3XeEuV": [ [ "QIDI", @@ -16262,6 +13458,13 @@ "Elegoo Rapid PETG" ] ], + "OF3kBrdA": [ + [ + "eSUN", + "PETG", + "eSUN PETG" + ] + ], "OF41QVDH": [ [ "Generic", @@ -16276,6 +13479,13 @@ "Creality Generic PLA Matte" ] ], + "OF44VYzK": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Francia" + ] + ], "OF48G7He": [ [ "QIDI", @@ -16283,6 +13493,13 @@ "QIDI PETG Tough 0.8 nozzle" ] ], + "OF4KsW72": [ + [ + "FilAr", + "PLA", + "FilAr PLA" + ] + ], "OF4RKeng": [ [ "Generic", @@ -16290,11 +13507,11 @@ "Flashforge Generic ASA" ] ], - "OF4fgpse": [ + "OF4RvVuU": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Marble" + "Bambu Lab", + "PPS-CF", + "Bambu PPS-CF" ] ], "OF4gzzE4": [ @@ -16325,6 +13542,13 @@ "FlyingBear PLA Basic" ] ], + "OF54B0S0": [ + [ + "Bambu Lab", + "PPA-CF", + "Bambu PPA-CF" + ] + ], "OF57IbZT": [ [ "Artillery", @@ -16339,6 +13563,13 @@ "Sovol SV06 Plus ACE ABS" ] ], + "OF5CgdDq": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA" + ] + ], "OF5J2axC": [ [ "Generic", @@ -16346,6 +13577,13 @@ "Sovol Zero PLA Basic" ] ], + "OF5P4jgA": [ + [ + "FilAr", + "PLA", + "FilAr PLA Dorado" + ] + ], "OF5T1Y9R": [ [ "Generic", @@ -16374,6 +13612,27 @@ "FusRock Generic NexPA-CF25" ] ], + "OF5nlfKY": [ + [ + "FilAr", + "PLA", + "FilAr PLA Oro" + ] + ], + "OF5rnhjh": [ + [ + "FilAr", + "PETG", + "FilAr PETG" + ] + ], + "OF5vgi2G": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Azul" + ] + ], "OF60Lmeq": [ [ "Generic", @@ -16395,6 +13654,13 @@ "FusRock PAHT" ] ], + "OF6Ll8lK": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG Translucent" + ] + ], "OF6Mxzsg": [ [ "Generic", @@ -16430,11 +13696,18 @@ "Snapmaker TPE" ] ], - "OF79FFkO": [ + "OF74KeQR": [ [ - "Elegoo", - "PC", - "Elegoo PC-FR" + "Generic", + "PHA", + "Generic PHA" + ] + ], + "OF7H3VJM": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Marble" ] ], "OF7M9vy4": [ @@ -16458,6 +13731,13 @@ "Volumic ASA Ultra" ] ], + "OF7lOgYF": [ + [ + "Generic", + "PETG", + "Generic PETG HF" + ] + ], "OF7tgL9c": [ [ "Generic", @@ -16465,11 +13745,11 @@ "Chuanying Generic ASA" ] ], - "OF8HQmJD": [ + "OF8Tlg47": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Sparkle" + "Generic", + "PPA-GF", + "Generic PPA-GF" ] ], "OF8WvPVL": [ @@ -16479,6 +13759,48 @@ "QIDI ABS Rapido 0.8 nozzle" ] ], + "OF8aFWfQ": [ + [ + "FilAr", + "PLA", + "FilAr PLA Amarillo Lirio" + ] + ], + "OF8jh0Lk": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Marron" + ] + ], + "OF8tPByX": [ + [ + "Generic", + "PPA-CF", + "Generic PPA-CF" + ] + ], + "OF99UMPq": [ + [ + "COEX 3D", + "ABS", + "COEX ABS" + ] + ], + "OF99vXPs": [ + [ + "DREMC", + "ABS", + "DREMC ABS+" + ] + ], + "OF9OlTWH": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Marble" + ] + ], "OF9RZyBz": [ [ "Polymaker", @@ -16486,13 +13808,6 @@ "Polymaker Generic S1" ] ], - "OF9qvJxV": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Translucent2" - ] - ], "OF9sr3Vn": [ [ "Generic", @@ -16591,6 +13906,13 @@ "Elegoo ASA-CF" ] ], + "OFAnyRUI": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support For PLA" + ] + ], "OFAnyzjN": [ [ "HATCHBOX", @@ -16598,6 +13920,13 @@ "HATCHBOX PETG" ] ], + "OFAt6ec0": [ + [ + "FilAr", + "PLA", + "FilAr PLA Marron Oxido" + ] + ], "OFAtydxE": [ [ "Generic", @@ -16605,6 +13934,13 @@ "FusRock S-Multi" ] ], + "OFB5SmWk": [ + [ + "Valment", + "PLA", + "Valment PLA Galaxy" + ] + ], "OFBGxHgT": [ [ "FlyingBear", @@ -16619,6 +13955,20 @@ "PPS Carbone (Performance)" ] ], + "OFBSW57R": [ + [ + "Bambu Lab", + "PLA-AERO", + "Bambu PLA Aero" + ] + ], + "OFBUIlZ7": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA+" + ] + ], "OFBvxnjM": [ [ "Elegoo", @@ -16626,6 +13976,13 @@ "Elegoo PETG-GF" ] ], + "OFBw6eEG": [ + [ + "Overture", + "PLA", + "Overture Matte PLA" + ] + ], "OFC2FSsV": [ [ "Overture", @@ -16640,6 +13997,27 @@ "Flashforge Generic PETG-CF" ] ], + "OFC78WGQ": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Starlight" + ] + ], + "OFCD8qiU": [ + [ + "Generic", + "EVA", + "Generic EVA" + ] + ], + "OFCIUsWh": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Translucent" + ] + ], "OFCJaXZS": [ [ "Generic", @@ -16654,6 +14032,13 @@ "FlyingBear PA-CF" ] ], + "OFCccVrQ": [ + [ + "Polymaker", + "PLA", + "PolyTerra Dual PLA" + ] + ], "OFCgpxn2": [ [ "Generic", @@ -16668,18 +14053,39 @@ "Snapmaker J1 TPE" ] ], - "OFD5e0sH": [ + "OFCidU7j": [ [ - "Elegoo", - "PLA", - "Elegoo Rapid PLA+" + "DREMC", + "ABS-GF", + "DREMC ABS-GF" ] ], - "OFDCk0cz": [ + "OFCjG251": [ [ - "Generic", - "PETG-CF", - "Generic PETG-CF" + "FilAr", + "PLA", + "FilAr PLA-mate Verde" + ] + ], + "OFCoRobU": [ + [ + "Elas", + "ASA", + "Elas ASA" + ] + ], + "OFDETOM6": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Matte" + ] + ], + "OFDGigEI": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Dynamic" ] ], "OFDMWB6t": [ @@ -16689,11 +14095,18 @@ "Elegoo PLA+" ] ], - "OFDNiRTx": [ + "OFDSrzZ8": [ [ - "Elegoo", + "Generic", "PLA", - "Elegoo PLA+" + "Generic PLA" + ] + ], + "OFDe8uyM": [ + [ + "Valment", + "PLA", + "Valment PLA" ] ], "OFDkABjZ": [ @@ -16703,6 +14116,13 @@ "Generic TPU-90A" ] ], + "OFDpW3J8": [ + [ + "FILL3D", + "PLA", + "FILL3D PLA Basic" + ] + ], "OFDramZ2": [ [ "Co Print", @@ -16710,6 +14130,34 @@ "CoPrint Generic PETG" ] ], + "OFDvXujf": [ + [ + "Generic", + "PVA", + "Generic PVA" + ] + ], + "OFDvqJ6n": [ + [ + "Overture", + "ABS", + "Overture ABS Basic" + ] + ], + "OFDxfPgH": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Sparkle" + ] + ], + "OFE0NFRh": [ + [ + "COEX 3D", + "TPU", + "COEX TPU 60A" + ] + ], "OFE22Uba": [ [ "Generic", @@ -16717,6 +14165,13 @@ "Flashforge TPU-90A" ] ], + "OFEGNJD4": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Silk" + ] + ], "OFEYKrjb": [ [ "Artillery", @@ -16724,6 +14179,13 @@ "Artillery PETG" ] ], + "OFEZ449N": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Uva" + ] + ], "OFEdyZqS": [ [ "Anycubic", @@ -16731,6 +14193,34 @@ "Anycubic PLA Luminous" ] ], + "OFEhuUNq": [ + [ + "DREMC", + "PA-CF", + "DREMC PA12-CF" + ] + ], + "OFEkPBwx": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Glow" + ] + ], + "OFEswT5W": [ + [ + "Bambu Lab", + "PLA-CF", + "Bambu PLA-CF" + ] + ], + "OFF9OKoY": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Pro" + ] + ], "OFFIL5pD": [ [ "QIDI", @@ -16738,6 +14228,13 @@ "QIDI PA12-CF" ] ], + "OFFNYwWR": [ + [ + "Bambu Lab", + "PA-CF", + "Bambu PA-CF" + ] + ], "OFFenwbU": [ [ "Generic", @@ -16745,6 +14242,13 @@ "FLSun S1 PLA Silk" ] ], + "OFFkCLBl": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Galaxy" + ] + ], "OFFmJ8aR": [ [ "Other", @@ -16759,6 +14263,13 @@ "Other TPU" ] ], + "OFFvzqcd": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG Basic" + ] + ], "OFG8vHw8": [ [ "Generic", @@ -16773,6 +14284,13 @@ "Sovol SV06 ACE PETG" ] ], + "OFGVwfK0": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Gris" + ] + ], "OFGb4hPY": [ [ "Anycubic", @@ -16780,6 +14298,13 @@ "Anycubic PEBA 95A" ] ], + "OFGcLA5R": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Beige" + ] + ], "OFGfdP6J": [ [ "FusRock", @@ -16792,6 +14317,27 @@ "FusRock Generic S-Multi" ] ], + "OFGkyftV": [ + [ + "Overture", + "PLA", + "Overture Silk PLA" + ] + ], + "OFH2nN08": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA INGEO 850" + ] + ], + "OFHAccHz": [ + [ + "FilAr", + "PLA", + "FilAr PLA Blanco Antartida" + ] + ], "OFHBTqyD": [ [ "Generic", @@ -16818,6 +14364,34 @@ "Anycubic TPU" ] ], + "OFHWSM21": [ + [ + "Polymaker", + "PET-CF", + "Fiberon PET-CF" + ] + ], + "OFHa48An": [ + [ + "Bambu Lab", + "PET-CF", + "Bambu PET-CF" + ] + ], + "OFHfzQXo": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Transition" + ] + ], + "OFHmPYRy": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+ 2.0" + ] + ], "OFHtQDC9": [ [ "Elegoo", @@ -16825,18 +14399,32 @@ "Elegoo PLA Basic" ] ], - "OFICPchn": [ + "OFIBXa0k": [ [ - "Elegoo", + "FilAr", "PLA", - "Elegoo PLA Basic" + "FilAr PLA-mate Rojo" ] ], - "OFIGHU7W": [ + "OFIamQnD": [ [ - "Elegoo", - "PETG", - "Elegoo PETG-CF" + "FilAr", + "PLA", + "FilAr PLA Gris Ceniza" + ] + ], + "OFIegjmD": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Flex D53" + ] + ], + "OFIfnzxC": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support For PLA/PETG" ] ], "OFIl3ar9": [ @@ -16853,25 +14441,46 @@ "Volumic UNIVERSAL Ultra" ] ], - "OFJIImD5": [ + "OFJHBEGD": [ [ - "Elegoo", - "PETG", - "Elegoo PET-CF" - ] - ], - "OFJfx0Cl": [ - [ - "Generic", - "PE-CF", - "Generic PE-CF" - ] - ], - "OFJsqMzx": [ - [ - "Generic", + "DREMC", "PLA", - "Generic PLA Matte" + "DREMC PLA+ HS" + ] + ], + "OFJNeELv": [ + [ + "FILL3D", + "PA", + "FILL3D PA" + ] + ], + "OFJOFnOZ": [ + [ + "Aliz", + "PETG-CF", + "AliZ PETG-CF" + ] + ], + "OFJQDUk3": [ + [ + "FilAr", + "PETG", + "FilAr PETG Cristal" + ] + ], + "OFJs1ToM": [ + [ + "COEX 3D", + "PA", + "COEX NYLEX UNFILLED" + ] + ], + "OFJu1XwK": [ + [ + "NIT", + "PETG", + "NIT PETG" ] ], "OFK39W9u": [ @@ -16902,6 +14511,20 @@ "Sovol SV08 ABS" ] ], + "OFKKajh6": [ + [ + "FilAr", + "PLA", + "FilAr PLA Gris Plata" + ] + ], + "OFKTSiYF": [ + [ + "FilAr", + "PLA", + "FilAr PLA Blanco Calido" + ] + ], "OFKWVi10": [ [ "Generic", @@ -16909,6 +14532,20 @@ "Flashforge Generic PLA-CF10" ] ], + "OFKWWgyp": [ + [ + "FilAr", + "PLA", + "FilAr PLA Carpincho" + ] + ], + "OFKZ9skj": [ + [ + "FilAr", + "PLA", + "FilAr PLA Naranja Tigre" + ] + ], "OFKZH00L": [ [ "FusRock", @@ -16921,6 +14558,13 @@ "FusRock Generic PET-CF" ] ], + "OFKhMPeX": [ + [ + "Bambu Lab", + "PC", + "Bambu PC" + ] + ], "OFKhtNBx": [ [ "Snapmaker", @@ -16928,6 +14572,13 @@ "Snapmaker J1 TPU High-Flow" ] ], + "OFKiSMWR": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Marble" + ] + ], "OFKjlAbC": [ [ "QIDI", @@ -16970,11 +14621,46 @@ "FlashForge PC" ] ], - "OFLSBS99": [ + "OFLJ8S6I": [ + [ + "SUNLU", + "PLA", + "SUNLU Wood PLA" + ] + ], + "OFLNgV3C": [ + [ + "DREMC", + "ASA", + "DREMC ASA" + ] + ], + "OFLPAxz3": [ [ "Generic", - "SBS", - "fdm_filament_sbs" + "ASA", + "Generic ASA" + ] + ], + "OFLXvuMr": [ + [ + "Elegoo", + "PETG", + "Elegoo Rapid PETG" + ] + ], + "OFLakOUI": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "OFLcd093": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG" ] ], "OFLeFaUO": [ @@ -17024,11 +14710,11 @@ "Flashforge ASA-CF" ] ], - "OFMCMXSG": [ + "OFM91vZs": [ [ - "Generic", - "PP", - "Generic PP-GF" + "Overture", + "ASA", + "Overture ASA" ] ], "OFMHTnPP": [ @@ -17038,11 +14724,39 @@ "Flashforge PA12-CF" ] ], - "OFMQJToc": [ + "OFMTK0UC": [ [ - "Elegoo", - "PETG", - "Elegoo PETG-GF" + "Bambu Lab", + "PA", + "Bambu Support For PA/PET" + ] + ], + "OFMUWNkp": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA+" + ] + ], + "OFMZvH0z": [ + [ + "Overture", + "PLA", + "Overture Rock PLA" + ] + ], + "OFMjtqTC": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Wood" + ] + ], + "OFMuXBmO": [ + [ + "Elas", + "PLA", + "Elas PLA Basic" ] ], "OFN0X7oN": [ @@ -17073,6 +14787,13 @@ "Artillery PC" ] ], + "OFNU9YIW": [ + [ + "FilAr", + "PETG", + "FilAr PETG Azul Boreal" + ] + ], "OFNX5uRT": [ [ "QIDI", @@ -17087,6 +14808,27 @@ "Creality Generic ASA-CF" ] ], + "OFNemJM6": [ + [ + "FilAr", + "PLA", + "FilAr PLA Cobre" + ] + ], + "OFNiSLfL": [ + [ + "Generic", + "PP", + "Generic PP-GF" + ] + ], + "OFNk8bxk": [ + [ + "Bambu Lab", + "PA-GF", + "Bambu PA6-GF" + ] + ], "OFNvrbnf": [ [ "Co Print", @@ -17101,6 +14843,13 @@ "FlyingBear PLA Hyper" ] ], + "OFO1GEq6": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Neon" + ] + ], "OFO3IOWM": [ [ "Volumic", @@ -17115,6 +14864,13 @@ "Sovol Zero TPU" ] ], + "OFOABq7t": [ + [ + "Aliz", + "PETG", + "AliZ PETG-Metal" + ] + ], "OFOJUJAS": [ [ "Cubicon", @@ -17136,6 +14892,13 @@ "Qidi TPU 95A-HF" ] ], + "OFOiJfLM": [ + [ + "FILL3D", + "PETG-CF", + "FILL3D PETG CF" + ] + ], "OFOkTA0C": [ [ "Elegoo", @@ -17150,6 +14913,20 @@ "Generic ABS" ] ], + "OFOsHDnB": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG PRO" + ] + ], + "OFOvv91M": [ + [ + "Polymaker", + "ABS", + "PolyLite ABS" + ] + ], "OFOysPuE": [ [ "QIDI", @@ -17157,6 +14934,13 @@ "QIDI TPU-GF" ] ], + "OFP26zNb": [ + [ + "FilAr", + "PLA", + "FilAr PLA Violeta Jacaranda" + ] + ], "OFP4poIv": [ [ "Generic", @@ -17190,6 +14974,27 @@ "Flashforge PLA-CF" ] ], + "OFPWPlSC": [ + [ + "FILL3D", + "PP", + "FILL3D PP" + ] + ], + "OFPbyOSk": [ + [ + "FilAr", + "PETG", + "FilAr PETG Rojo Carmesi" + ] + ], + "OFPc4zVY": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA INGEO 870" + ] + ], "OFPeGtB1": [ [ "Volumic", @@ -17197,6 +15002,20 @@ "Volumic UNIVERSAL Ultra (Performance)" ] ], + "OFPkCJKE": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Satin" + ] + ], + "OFPklMI1": [ + [ + "Generic", + "PE", + "Generic PE" + ] + ], "OFPokkKe": [ [ "QIDI", @@ -17204,6 +15023,20 @@ "QIDI PETG-CF" ] ], + "OFPoyiFs": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA" + ] + ], + "OFPqX3x2": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rosa Amaranto" + ] + ], "OFPwi9X0": [ [ "HATCHBOX", @@ -17211,6 +15044,13 @@ "HATCHBOX ABS" ] ], + "OFQ3e56w": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Galaxy" + ] + ], "OFQ5xAKf": [ [ "Generic", @@ -17237,6 +15077,27 @@ "Flashforge PPA-CF" ] ], + "OFQHiNJs": [ + [ + "Bambu Lab", + "PA", + "Bambu Support G" + ] + ], + "OFQLcbps": [ + [ + "Generic", + "PA-CF", + "Generic PA-CF" + ] + ], + "OFQWIKbV": [ + [ + "FilAr", + "PLA", + "FilAr PLA Titanio" + ] + ], "OFQZINrX": [ [ "QIDI", @@ -17244,18 +15105,11 @@ "QIDI ABS-GF10" ] ], - "OFQhLoxN": [ + "OFQbjX3s": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Wood" - ] - ], - "OFQkWxJy": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Matte" + "FILL3D", + "PETG", + "FILL3D PETG" ] ], "OFR8dTVW": [ @@ -17279,13 +15133,6 @@ "Generic ASA" ] ], - "OFRS2Ggt": [ - [ - "Generic", - "PP-CF", - "Generic PP-CF" - ] - ], "OFRgDMDJ": [ [ "Generic", @@ -17293,6 +15140,27 @@ "Flashforge PETG Transparent" ] ], + "OFRiFnfQ": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG Transition" + ] + ], + "OFRiYgMK": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Celestial" + ] + ], + "OFRzR5mi": [ + [ + "eSUN", + "PLA-AERO", + "eSUN ePLA-LW" + ] + ], "OFS1ekCg": [ [ "Generic", @@ -17300,6 +15168,13 @@ "RatRig BigNozzle PCTG" ] ], + "OFS2tn6G": [ + [ + "Polymaker", + "PA", + "Fiberon PA612-CF" + ] + ], "OFS3HrR1": [ [ "Other", @@ -17307,6 +15182,13 @@ "Other PLA" ] ], + "OFS8lTQt": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Silk" + ] + ], "OFSCm6pJ": [ [ "Elegoo", @@ -17349,11 +15231,32 @@ "Other PA-CF" ] ], - "OFT3TqB6": [ + "OFSwbBWS": [ [ - "Elas", - "ASA", - "Elas ASA" + "DREMC", + "PLA", + "DREMC PLA+" + ] + ], + "OFTGHyNC": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Impact" + ] + ], + "OFTOPcx0": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Transition" + ] + ], + "OFTRZ8Y4": [ + [ + "Bambu Lab", + "PETG-CF", + "Bambu PETG-CF" ] ], "OFTa6gPH": [ @@ -17377,6 +15280,20 @@ "Artillery TPU" ] ], + "OFTcE0nA": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Basic" + ] + ], + "OFTlRzpe": [ + [ + "FilAr", + "PLA", + "FilAr PLA Gris Pizarra" + ] + ], "OFToBodi": [ [ "QIDI", @@ -17398,6 +15315,13 @@ "Creality Generic PLA Silk" ] ], + "OFU1zPxE": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Galaxy" + ] + ], "OFUJw3Lx": [ [ "QIDI", @@ -17412,6 +15336,13 @@ "Dremel Generic PLA" ] ], + "OFUanySo": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Silk+" + ] + ], "OFUkpobY": [ [ "QIDI", @@ -17426,6 +15357,13 @@ "Chuanying Generic TPU" ] ], + "OFUyDDNv": [ + [ + "Elegoo", + "PC", + "Elegoo PC" + ] + ], "OFV1szQh": [ [ "Peopoly", @@ -17440,6 +15378,13 @@ "QIDI PLA Rapido Metal" ] ], + "OFV5tNw6": [ + [ + "Elegoo", + "PETG", + "Elegoo PET-CF" + ] + ], "OFVBNoov": [ [ "InfiMech", @@ -17447,6 +15392,20 @@ "InfiMech ABS" ] ], + "OFVBlUFH": [ + [ + "DREMC", + "PETG", + "DREMC PETG" + ] + ], + "OFVCkX5w": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 95A" + ] + ], "OFVJXE4n": [ [ "Other", @@ -17454,13 +15413,6 @@ "Other ABS" ] ], - "OFVLuVmD": [ - [ - "Elegoo", - "PETG", - "Elegoo Rapid PETG" - ] - ], "OFVhG0yM": [ [ "QIDI", @@ -17468,6 +15420,20 @@ "QIDI ABS Odorless" ] ], + "OFVptRxp": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 30D" + ] + ], + "OFW29a9R": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA" + ] + ], "OFW8UdlP": [ [ "QIDI", @@ -17475,6 +15441,27 @@ "QIDI ABS Rapido" ] ], + "OFWTRJ1K": [ + [ + "FilAr", + "PLA", + "FilAr PLA Bronce" + ] + ], + "OFWYtgCa": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Wood" + ] + ], + "OFWbdGsC": [ + [ + "Generic", + "PLA-CF", + "Generic PLA-CF" + ] + ], "OFWkCAdc": [ [ "QIDI", @@ -17496,6 +15483,13 @@ "Flashforge PLA Metal" ] ], + "OFWwF7K7": [ + [ + "FilAr", + "PLA", + "FilAr PLA Cafe con Leche" + ] + ], "OFWyCd0Y": [ [ "QIDI", @@ -17503,6 +15497,13 @@ "QIDI Support For PET/PA" ] ], + "OFX0ycRQ": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA12-CF" + ] + ], "OFXA8vy9": [ [ "Artillery", @@ -17510,6 +15511,20 @@ "Artillery PLA Basic+" ] ], + "OFXCBZTA": [ + [ + "Eolas Prints", + "ABS", + "Eolas Prints ABS" + ] + ], + "OFXIbw5D": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Matte" + ] + ], "OFXNO5Of": [ [ "QIDI", @@ -17524,6 +15539,13 @@ "RatRig PunkFil PETG CF" ] ], + "OFXTPuqV": [ + [ + "Elas", + "PETG", + "Elas PETG Basic" + ] + ], "OFXcfTEb": [ [ "Generic", @@ -17538,6 +15560,13 @@ "Prusa Generic PA-CF" ] ], + "OFXkm8q1": [ + [ + "Generic", + "PP-CF", + "Generic PP-CF" + ] + ], "OFXkwkn6": [ [ "QIDI", @@ -17545,13 +15574,6 @@ "QIDI PA-Ultra" ] ], - "OFXmQgno": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Marble" - ] - ], "OFXv4FUi": [ [ "Generic", @@ -17559,6 +15581,20 @@ "Flashforge PLA Galaxy" ] ], + "OFXz7Mwx": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Silk" + ] + ], + "OFXzQ4yL": [ + [ + "Bambu Lab", + "ASA-AERO", + "Bambu ASA-Aero" + ] + ], "OFY1U4uM": [ [ "Generic", @@ -17566,6 +15602,13 @@ "Sovol SV08 TPU" ] ], + "OFY9muEs": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], "OFYG2Gfy": [ [ "Afinia", @@ -17573,6 +15616,13 @@ "Afinia ABS+" ] ], + "OFYGbPHX": [ + [ + "Polymaker", + "PLA", + "PolyLite Dual PLA" + ] + ], "OFYH00jV": [ [ "QIDI", @@ -17592,6 +15642,13 @@ "FusRock Generic PAHT-CF" ] ], + "OFYPdQJh": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], "OFYRS7GZ": [ [ "Generic", @@ -17606,6 +15663,13 @@ "Flashforge Generic HS PLA" ] ], + "OFYd5uS3": [ + [ + "DREMC", + "TPU", + "DREMC TPU 95A" + ] + ], "OFYehFGr": [ [ "Generic", @@ -17620,6 +15684,13 @@ "FlyingBear TPU" ] ], + "OFZ4QbfK": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rosa Flamenco" + ] + ], "OFZAkPHG": [ [ "QIDI", @@ -17646,13 +15717,6 @@ "Flashforge PPS-CF" ] ], - "OFZhdVnP": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Basic" - ] - ], "OFZjZ1k7": [ [ "Generic", @@ -17674,6 +15738,20 @@ "Qidi PC-ABS-FR" ] ], + "OFaDOaNt": [ + [ + "FilAr", + "PLA", + "FilAr PLA Celeste Cielo" + ] + ], + "OFaEesXQ": [ + [ + "FilAr", + "PLA", + "FilAr PLA Rojo de Carreras" + ] + ], "OFaKIoH2": [ [ "Elegoo", @@ -17688,6 +15766,27 @@ "Generic PETG Basic" ] ], + "OFaQMgRH": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Tough" + ] + ], + "OFaYz8iE": [ + [ + "Elas", + "PLA", + "Elas PLA Pro" + ] + ], + "OFausr3F": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Rosa" + ] + ], "OFaxQnfz": [ [ "Cubicon", @@ -17709,6 +15808,13 @@ "Prusa Generic TPU HF" ] ], + "OFbP8zEO": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Silk" + ] + ], "OFbS9rjH": [ [ "QIDI", @@ -17723,13 +15829,6 @@ "Elegoo PLA Marble" ] ], - "OFbgt3u3": [ - [ - "Elas", - "PLA", - "Elas PLA Basic" - ] - ], "OFc2SnEp": [ [ "Artillery", @@ -17737,6 +15836,13 @@ "Artillery PVA" ] ], + "OFc3xdm9": [ + [ + "Overture", + "PLA", + "Overture PLA" + ] + ], "OFcZZWnB": [ [ "Cubicon", @@ -17751,6 +15857,13 @@ "PolyLite PLA" ] ], + "OFcfQk4h": [ + [ + "Overture", + "PLA", + "Overture Air PLA" + ] + ], "OFcqs5g7": [ [ "Elegoo", @@ -17765,6 +15878,13 @@ "Sovol SV08 PLA" ] ], + "OFcvKkrs": [ + [ + "Overture", + "TPU", + "Overture TPU" + ] + ], "OFcy60o4": [ [ "Generic", @@ -17772,6 +15892,41 @@ "Flashforge ASA Basic" ] ], + "OFcytyoA": [ + [ + "Polymaker", + "PETG", + "Fiberon PETG-ESD" + ] + ], + "OFd0Fv0k": [ + [ + "Generic", + "PE-CF", + "Generic PE-CF" + ] + ], + "OFd2vX0G": [ + [ + "COEX 3D", + "PLA", + "COEX PLA PRIME" + ] + ], + "OFd4zw5l": [ + [ + "Aliz", + "PA-CF", + "AliZ PA-CF" + ] + ], + "OFdI4zMo": [ + [ + "DREMC", + "ASA", + "DREMC ASA CF" + ] + ], "OFdLGn0R": [ [ "Generic", @@ -17798,6 +15953,13 @@ "Anycubic PETG" ] ], + "OFdb8YNz": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Manzana" + ] + ], "OFdhVJql": [ [ "Generic", @@ -17805,6 +15967,13 @@ "Flashforge PLA Buint Ti" ] ], + "OFdzlrhi": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Chocolate" + ] + ], "OFeFRwST": [ [ "Generic", @@ -17833,11 +16002,18 @@ "InfiMech PLA Hyper" ] ], - "OFenGPBR": [ + "OFesA6rF": [ [ - "Elegoo", - "PETG", - "Elegoo PETG Translucent" + "Generic", + "PLA", + "Generic PLA Silk" + ] + ], + "OFexaZU2": [ + [ + "FilAr", + "PLA", + "FilAr PLA Manteca" ] ], "OFeybQvK": [ @@ -17866,11 +16042,32 @@ "Anycubic ABS" ] ], - "OFfB1QKi": [ + "OFf5awy4": [ [ - "Generic", + "Eolas Prints", + "PLA", + "Eolas Prints PLA Matte" + ] + ], + "OFf6mfQO": [ + [ + "Bambu Lab", + "ABS", + "Bambu Support for ABS" + ] + ], + "OFfBpSRI": [ + [ + "Bambu Lab", + "ASA", + "Bambu ASA" + ] + ], + "OFfJSCzm": [ + [ + "FDplast", "PETG", - "Generic PETG HF" + "FDplast PETG" ] ], "OFfJoIgg": [ @@ -17880,6 +16077,13 @@ "QIDI PAHT-GF" ] ], + "OFfZcoKr": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Piel" + ] + ], "OFfdxQok": [ [ "Generic", @@ -17901,6 +16105,20 @@ "Creality HF Generic Speed PLA" ] ], + "OFfmZrI3": [ + [ + "FDplast", + "TPU", + "FDplast TPU" + ] + ], + "OFfnXFie": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 40D" + ] + ], "OFfoA8kJ": [ [ "CoLiDo", @@ -17908,6 +16126,20 @@ "CoLiDo PLA" ] ], + "OFfq5YXA": [ + [ + "Valment", + "PLA-CF", + "Valment PLA-CF" + ] + ], + "OFfr4XNO": [ + [ + "COEX 3D", + "TPU", + "COEX TPE 60D" + ] + ], "OFftQOek": [ [ "Generic", @@ -17915,6 +16147,13 @@ "Flashforge PLA Matte" ] ], + "OFfuhviw": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Marble" + ] + ], "OFg4N6ZL": [ [ "FlyingBear", @@ -17922,6 +16161,27 @@ "FlyingBear PETG" ] ], + "OFg57Nmc": [ + [ + "Bambu Lab", + "PC", + "Bambu PC FR" + ] + ], + "OFg8hMzT": [ + [ + "FILL3D", + "PP", + "FILL3D PPCF" + ] + ], + "OFg8ndtj": [ + [ + "Generic", + "PA", + "Generic PA" + ] + ], "OFgJX0Fc": [ [ "Generic", @@ -17948,6 +16208,13 @@ "Sovol SV06 Plus ACE PETG" ] ], + "OFgMWJ8T": [ + [ + "FilAr", + "PLA", + "FilAr PLA Negro Azabache" + ] + ], "OFgNzLVh": [ [ "Generic", @@ -17967,6 +16234,13 @@ "Anycubic PLA High Speed" ] ], + "OFgbpcy9": [ + [ + "Generic", + "TPU", + "Generic TPU" + ] + ], "OFglpvEE": [ [ "Generic", @@ -17974,6 +16248,13 @@ "Sovol SV06 ACE TPU" ] ], + "OFgpLTMR": [ + [ + "FilAr", + "PETG", + "FilAr PETG Gris Plata" + ] + ], "OFgrGfPy": [ [ "Anycubic", @@ -18000,6 +16281,13 @@ "Elegoo PLA Wood" ] ], + "OFhASRWj": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Temp Shift" + ] + ], "OFhKNHC8": [ [ "Generic", @@ -18007,6 +16295,62 @@ "Generic PETG PRO" ] ], + "OFhMO9Kh": [ + [ + "GreenGate3D", + "PETG", + "GreenGate3D PETG" + ] + ], + "OFhQfUQY": [ + [ + "Generic", + "SBS", + "Generic SBS" + ] + ], + "OFhWc5Bv": [ + [ + "NIT", + "ABS", + "NIT ABS" + ] + ], + "OFhWhL1i": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG" + ] + ], + "OFhcYzR8": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Sparkle" + ] + ], + "OFhfd722": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU Flex 93A" + ] + ], + "OFhlCNqq": [ + [ + "COEX 3D", + "PLA", + "COEX PLA" + ] + ], + "OFhuaUQB": [ + [ + "Bambu Lab", + "ABS", + "Bambu ABS" + ] + ], "OFhzHd2Y": [ [ "Generic", @@ -18021,6 +16365,13 @@ "Flashforge PA" ] ], + "OFiDpM1B": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Bordo" + ] + ], "OFiJYDPC": [ [ "HATCHBOX", @@ -18028,6 +16379,13 @@ "HATCHBOX PLA" ] ], + "OFiWaoqD": [ + [ + "DREMC", + "PPA-CF", + "DREMC PPA-CF" + ] + ], "OFic2uNr": [ [ "Generic", @@ -18056,6 +16414,13 @@ "Elegoo PETG-CF" ] ], + "OFj3bTjw": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Amarillo" + ] + ], "OFjFPhUC": [ [ "Generic", @@ -18063,6 +16428,20 @@ "Prusament rPLA" ] ], + "OFjPXrXO": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Glow" + ] + ], + "OFjT9PkZ": [ + [ + "FilAr", + "PLA", + "FilAr PLA Tabaco" + ] + ], "OFjZw7k1": [ [ "Polymaker", @@ -18070,6 +16449,13 @@ "PolyTerra J1 PLA" ] ], + "OFjb0wos": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Metallic" + ] + ], "OFjdTQd6": [ [ "Anycubic", @@ -18108,6 +16494,13 @@ "QIDI PETG Translucent" ] ], + "OFjorDcx": [ + [ + "FDplast", + "ABS", + "FDplast ABS" + ] + ], "OFjqPjjl": [ [ "Generic", @@ -18115,6 +16508,13 @@ "Generic PET" ] ], + "OFjt9en1": [ + [ + "Generic", + "CoPE", + "Generic CoPE" + ] + ], "OFjurQ3I": [ [ "Generic", @@ -18136,6 +16536,27 @@ "Sovol Zero PETG HS Nozzle" ] ], + "OFk8t9mz": [ + [ + "Polymaker", + "PETG-CF", + "Fiberon PETG-rCF" + ] + ], + "OFkGvN4d": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Pixel" + ] + ], + "OFkOviHk": [ + [ + "Polymaker", + "PA6-CF", + "Fiberon PA6-CF" + ] + ], "OFkaDtKx": [ [ "FusRock", @@ -18157,6 +16578,13 @@ "Elegoo PLA Silk" ] ], + "OFkhhUS0": [ + [ + "Elegoo", + "PLA", + "Elegoo Rapid PLA+" + ] + ], "OFklg4aM": [ [ "Elegoo", @@ -18164,6 +16592,20 @@ "Elegoo PLA PRO" ] ], + "OFknl9Iz": [ + [ + "Bambu Lab", + "ABS-GF", + "Bambu ABS-GF" + ] + ], + "OFkoLUtR": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde Oliva" + ] + ], "OFkoT6jl": [ [ "Generic", @@ -18171,6 +16613,13 @@ "Prusament PLA" ] ], + "OFkzr35f": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Antibacterial" + ] + ], "OFlN56xW": [ [ "Generic", @@ -18185,6 +16634,20 @@ "Flashforge PLA Metal" ] ], + "OFlP3KWq": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG HF" + ] + ], + "OFlSNkhc": [ + [ + "Eolas Prints", + "ASA", + "Eolas Prints ASA" + ] + ], "OFlbn4FY": [ [ "Snapmaker", @@ -18192,6 +16655,27 @@ "Snapmaker PLA Matte" ] ], + "OFln72PT": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA-CF" + ] + ], + "OFlsTpJG": [ + [ + "Elegoo", + "PC", + "Elegoo PC-FR" + ] + ], + "OFlwmqrC": [ + [ + "Polymaker", + "PLA", + "Polymaker HT-PLA-GF" + ] + ], "OFlxnxDx": [ [ "Generic", @@ -18206,6 +16690,13 @@ "Peopoly Lancer PET-CF" ] ], + "OFm06H6V": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Basic" + ] + ], "OFm1VZed": [ [ "Generic", @@ -18220,6 +16711,13 @@ "QIDI ASA-CF" ] ], + "OFmJAd3A": [ + [ + "FDplast", + "HIPS", + "FDplast HIPS" + ] + ], "OFmKNi3f": [ [ "QIDI", @@ -18234,6 +16732,20 @@ "Elegoo PETG PRO" ] ], + "OFmY0l6t": [ + [ + "Generic", + "PLA", + "Generic PLA Matte" + ] + ], + "OFmaeU4a": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Naranja" + ] + ], "OFmcJsqt": [ [ "InfiMech", @@ -18248,13 +16760,6 @@ "FlashForge PPS-CF" ] ], - "OFmeQjRP": [ - [ - "Elegoo", - "TPU", - "Elegoo Rapid TPU 95A" - ] - ], "OFmgesco": [ [ "Generic", @@ -18262,6 +16767,41 @@ "Flashforge TPU 65D" ] ], + "OFmhJs5V": [ + [ + "Elegoo", + "TPU", + "Elegoo TPU" + ] + ], + "OFmn9NZL": [ + [ + "FusRock", + "ABS-GF", + "FusRock ABS-GF" + ] + ], + "OFmpMwxS": [ + [ + "Generic", + "PLA", + "Generic PLA High Speed" + ] + ], + "OFmveLWz": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-GF" + ] + ], + "OFn1QaY3": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA Translucent2" + ] + ], "OFnLnZQo": [ [ "Cubicon", @@ -18290,6 +16830,27 @@ "Artillery PA-CF" ] ], + "OFnYVFk2": [ + [ + "FilAr", + "PLA", + "FilAr PLA Azul Francia" + ] + ], + "OFnejEt4": [ + [ + "FilAr", + "PETG", + "FilAr PETG Cian" + ] + ], + "OFniMuTN": [ + [ + "Bambu Lab", + "PA6-CF", + "Bambu PA6-CF" + ] + ], "OFnj7bPm": [ [ "QIDI", @@ -18311,6 +16872,13 @@ "Artillery PLA Silk" ] ], + "OFo2UF2C": [ + [ + "Generic", + "BVOH", + "Generic BVOH" + ] + ], "OFo4VB3w": [ [ "Generic", @@ -18339,6 +16907,41 @@ "Flashforge HS PLA" ] ], + "OFoSknDB": [ + [ + "FILL3D", + "PLA", + "FILL3D PLA Turbo" + ] + ], + "OFoYSJKi": [ + [ + "Generic", + "PETG-CF", + "Generic PETG-CF" + ] + ], + "OFobDOW5": [ + [ + "Elegoo", + "ASA", + "Elegoo ASA" + ] + ], + "OFocyw69": [ + [ + "Aliz", + "PETG", + "AliZ PETG" + ] + ], + "OFoiVqVM": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Basic" + ] + ], "OFoimrpo": [ [ "Generic", @@ -18346,6 +16949,13 @@ "Flashforge PETG-CF" ] ], + "OFovEIbw": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG HF" + ] + ], "OFp8lkYD": [ [ "FusRock", @@ -18360,6 +16970,13 @@ "Artillery PA" ] ], + "OFpBlrvY": [ + [ + "Valment", + "PLA", + "Valment PLA Silk" + ] + ], "OFpHq9gJ": [ [ "Generic", @@ -18367,6 +16984,20 @@ "Prusament PETG" ] ], + "OFpPGSKG": [ + [ + "SUNLU", + "PLA", + "SUNLU Silk PLA+" + ] + ], + "OFpW4gdi": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Matte" + ] + ], "OFphFSUJ": [ [ "Generic", @@ -18374,13 +17005,6 @@ "Prusa Generic PETG HF" ] ], - "OFpwg2Qh": [ - [ - "Elegoo", - "ASA", - "Elegoo ASA-CF" - ] - ], "OFq6IhFg": [ [ "Cubicon", @@ -18388,6 +17012,27 @@ "Cubicon PLA" ] ], + "OFq8gfS4": [ + [ + "FilAr", + "PETG", + "FilAr PETG Negro Azabache" + ] + ], + "OFqGRZyH": [ + [ + "Numakers", + "PLA", + "Numakers PLA+" + ] + ], + "OFqINlYj": [ + [ + "eSUN", + "PLA", + "eSUN PLA+" + ] + ], "OFqPp2yL": [ [ "QIDI", @@ -18409,13 +17054,6 @@ "OrcaArena Generic PLA Silk" ] ], - "OFqh1Ngp": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA-CF" - ] - ], "OFqkcvDI": [ [ "Peopoly", @@ -18423,6 +17061,20 @@ "Peopoly Lancer ABS-GF" ] ], + "OFqtx549": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Celeste Cielo" + ] + ], + "OFqw2PQA": [ + [ + "Polymaker", + "PLA", + "Panchroma CoPE" + ] + ], "OFqyIUDi": [ [ "QIDI", @@ -18430,6 +17082,27 @@ "Qidi PLA-CF" ] ], + "OFrFBEfd": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Neon" + ] + ], + "OFrKLeE3": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Metal" + ] + ], + "OFrOh600": [ + [ + "Polymaker", + "PLA", + "Panchroma PLA Matte" + ] + ], "OFrbbq6E": [ [ "Other", @@ -18437,11 +17110,11 @@ "Other PLA Hyper" ] ], - "OFrgQ1Ns": [ + "OFryjl35": [ [ - "Elas", - "PLA", - "Elas PLA Pro" + "Elegoo", + "ASA", + "Elegoo ASA-CF" ] ], "OFs1CbB1": [ @@ -18451,11 +17124,11 @@ "QIDI PLA Rapido 0.8 nozzle" ] ], - "OFs6lLH7": [ + "OFsB2lxm": [ [ "Elegoo", "PLA", - "Elegoo PLA Silk" + "Elegoo PLA Matte" ] ], "OFsCOJv7": [ @@ -18465,11 +17138,25 @@ "Generic TPU" ] ], - "OFsKqcQW": [ + "OFsDXRpS": [ [ - "Elegoo", + "FilAr", "PLA", - "Elegoo PLA PRO" + "FilAr PLA Piel" + ] + ], + "OFsFon5l": [ + [ + "Generic", + "HIPS", + "Generic HIPS" + ] + ], + "OFsHSVZc": [ + [ + "Bambu Lab", + "PLA", + "Bambu Support W" ] ], "OFsLkLw6": [ @@ -18479,11 +17166,18 @@ "Generic PLA Matte" ] ], - "OFsNZcid": [ + "OFsRDvTM": [ [ "Polymaker", "PLA", - "PolyLite Dual PLA" + "Panchroma PLA" + ] + ], + "OFsXQXbs": [ + [ + "FilAr", + "PETG", + "FilAr PETG Blanco Antartida" ] ], "OFsgANe3": [ @@ -18500,6 +17194,13 @@ "Sovol SV06 Plus ACE TPU" ] ], + "OFsoykbm": [ + [ + "DREMC", + "PA6-CF", + "DREMC PA6-CF" + ] + ], "OFt1YdX8": [ [ "Generic", @@ -18514,6 +17215,13 @@ "Artillery PETG Basic" ] ], + "OFt6e0US": [ + [ + "FilAr", + "PETG", + "FilAr PETG Amarillo Lima" + ] + ], "OFt9AiN5": [ [ "Generic", @@ -18542,6 +17250,20 @@ "Sovol Zero PLA Basic HS Nozzle" ] ], + "OFtOoWIj": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate" + ] + ], + "OFtRn8X8": [ + [ + "FDplast", + "SBS", + "FDplast SBS" + ] + ], "OFtXBjvb": [ [ "Artillery", @@ -18549,6 +17271,13 @@ "Artillery PLA Tough" ] ], + "OFtcKVgP": [ + [ + "Generic", + "PC", + "fdm_filament_pc" + ] + ], "OFtcTs1o": [ [ "Generic", @@ -18556,6 +17285,13 @@ "RatRig BigNozzle ABS" ] ], + "OFtefokm": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Blanco" + ] + ], "OFtemzzw": [ [ "Generic", @@ -18584,6 +17320,27 @@ "Artillery ASA" ] ], + "OFtpXCCv": [ + [ + "COEX 3D", + "ASA", + "COEX ASA PRIME" + ] + ], + "OFtr8eZw": [ + [ + "FDplast", + "PLA", + "FDplast PLA" + ] + ], + "OFtudokz": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA Premium" + ] + ], "OFtwA91m": [ [ "Generic", @@ -18591,6 +17348,13 @@ "Sovol Zero PC" ] ], + "OFu1evlr": [ + [ + "Generic", + "PCTG", + "Generic PCTG" + ] + ], "OFuPC4S8": [ [ "Elegoo", @@ -18612,6 +17376,20 @@ "Overture ABS" ] ], + "OFuUuIhR": [ + [ + "Elegoo", + "PETG", + "Elegoo PETG-CF" + ] + ], + "OFuWCQXN": [ + [ + "COEX 3D", + "ABS", + "COEX ABS PRIME" + ] + ], "OFuXkYly": [ [ "Elegoo", @@ -18626,6 +17404,13 @@ "Afinia Value ABS" ] ], + "OFufTAK9": [ + [ + "FilAr", + "PLA", + "FilAr PLA-mate Negro" + ] + ], "OFuidAEg": [ [ "Bambu Lab", @@ -18640,6 +17425,13 @@ "InfiMech PLA Basic" ] ], + "OFurdQxc": [ + [ + "FilAr", + "PETG", + "FilAr PETG Magenta" + ] + ], "OFuswXlp": [ [ "Generic", @@ -18647,13 +17439,6 @@ "Generic TPU 85A" ] ], - "OFutwD6f": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Glow" - ] - ], "OFuyJhLF": [ [ "Generic", @@ -18682,6 +17467,13 @@ "Creality Generic PETG-CF" ] ], + "OFvKUnLh": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 95A HF" + ] + ], "OFvN3117": [ [ "QIDI", @@ -18696,6 +17488,27 @@ "Other TPU" ] ], + "OFvPPMxL": [ + [ + "FilAr", + "PLA", + "FilAr PLA Verde FilAr" + ] + ], + "OFvTVZc3": [ + [ + "COEX 3D", + "PETG", + "COEX PETG" + ] + ], + "OFvVy7yo": [ + [ + "Eolas Prints", + "TPU", + "Eolas Prints TPU D60 UV Resistant" + ] + ], "OFvYfHPB": [ [ "Anycubic", @@ -18710,6 +17523,13 @@ "InfiMech PETG" ] ], + "OFvgE0Zh": [ + [ + "Elegoo", + "PLA", + "Elegoo PLA" + ] + ], "OFviQ9lH": [ [ "Generic", @@ -18717,6 +17537,13 @@ "Flashforge Generic TPU" ] ], + "OFvrXuV7": [ + [ + "Polymaker", + "ASA", + "PolyLite ASA" + ] + ], "OFvsS7Fb": [ [ "Generic", @@ -18738,6 +17565,13 @@ "Artillery PLA-CF" ] ], + "OFvzvwCu": [ + [ + "Eolas Prints", + "PLA", + "Eolas Prints PLA High Speed" + ] + ], "OFw05rkF": [ [ "Other", @@ -18759,13 +17593,6 @@ "Artillery ABS" ] ], - "OFw4OHWE": [ - [ - "Elas", - "PETG", - "Elas PETG Basic" - ] - ], "OFwHPTvy": [ [ "Generic", @@ -18773,6 +17600,34 @@ "Qidi Generic PLA+" ] ], + "OFwJ0qu2": [ + [ + "DREMC", + "PET-CF", + "DREMC PET-CF" + ] + ], + "OFwPrlCM": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG Translucent" + ] + ], + "OFwRJ4g0": [ + [ + "NIT", + "PLA", + "NIT PLA" + ] + ], + "OFwaYjL6": [ + [ + "Polymaker", + "PA-GF", + "Fiberon PA6-GF" + ] + ], "OFwf0oWp": [ [ "Generic", @@ -18780,6 +17635,13 @@ "Flashforge PLA Luminous" ] ], + "OFwu7IAG": [ + [ + "COEX 3D", + "PCTG", + "COEX PCTG PRIME" + ] + ], "OFwyqcGn": [ [ "Elegoo", @@ -18787,6 +17649,20 @@ "Elegoo PLA Matte" ] ], + "OFx8Lmsd": [ + [ + "Eolas Prints", + "PETG", + "Eolas Prints PETG UV Resistant" + ] + ], + "OFxA1p01": [ + [ + "Overture", + "PLA", + "Overture PLA Pro" + ] + ], "OFxLeRyT": [ [ "Generic", @@ -18794,6 +17670,20 @@ "Prusa Generic PVA HF" ] ], + "OFxOHhZw": [ + [ + "Elegoo", + "ABS", + "Elegoo ABS" + ] + ], + "OFxUwUeW": [ + [ + "SUNLU", + "PLA", + "SUNLU PLA Marble" + ] + ], "OFxVzzn4": [ [ "Generic", @@ -18850,6 +17740,13 @@ "Other PC" ] ], + "OFybzvQN": [ + [ + "FilAr", + "PETG", + "FilAr PETG Gris Ceniza" + ] + ], "OFyoW5W2": [ [ "Generic", @@ -18864,6 +17761,13 @@ "Generic PC-CF" ] ], + "OFysxCep": [ + [ + "FilAr", + "PETG", + "FilAr PETG Coral" + ] + ], "OFyt23xJ": [ [ "Generic", @@ -18878,6 +17782,13 @@ "Flashforge TPU-95A" ] ], + "OFyxayW4": [ + [ + "Aliz", + "PLA", + "AliZ PLA" + ] + ], "OFzFbFcl": [ [ "Elegoo", @@ -18906,806 +17817,53 @@ "Ginger Generic PLA" ] ], - "OFzrWlH5": [ + "OFzrUUxc": [ [ - "Elegoo", - "PETG", - "Elegoo PETG HF" - ] - ], - "OGFA00": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Basic" - ] - ], - "OGFA01": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Matte" - ] - ], - "OGFA02": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Metal" - ] - ], - "OGFA03": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Impact" - ] - ], - "OGFA05": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Silk" - ] - ], - "OGFA06": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Silk+" - ] - ], - "OGFA07": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Marble" - ] - ], - "OGFA08": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Sparkle" - ] - ], - "OGFA09": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Tough" - ] - ], - "OGFA11": [ - [ - "Bambu Lab", - "PLA-AERO", - "Bambu PLA Aero" - ] - ], - "OGFA12": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Glow" - ] - ], - "OGFA13": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Dynamic" - ] - ], - "OGFA15": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Galaxy" - ] - ], - "OGFA16": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Wood" - ] - ], - "OGFA50": [ - [ - "Bambu Lab", - "PLA-CF", - "Bambu PLA-CF" - ] - ], - "OGFB00": [ - [ - "Bambu Lab", + "DREMC", "ABS", - "Bambu ABS" + "DREMC ABS" ] ], - "OGFB01": [ + "OFzyIxba": [ [ "Bambu Lab", - "ASA", - "Bambu ASA" - ] - ], - "OGFB02": [ - [ - "Bambu Lab", - "ASA-AERO", - "Bambu ASA-Aero" - ] - ], - "OGFB50": [ - [ - "Bambu Lab", - "ABS-GF", - "Bambu ABS-GF" - ] - ], - "OGFB51": [ - [ - "Bambu Lab", - "ASA-CF", - "Bambu ASA-CF" - ] - ], - "OGFB60": [ - [ - "Polymaker", - "ABS", - "PolyLite ABS" - ] - ], - "OGFB61": [ - [ - "Polymaker", - "ASA", - "PolyLite ASA" - ] - ], - "OGFB98": [ - [ - "Generic", - "ASA", - "Generic ASA" - ] - ], - "OGFB99": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "OGFC00": [ - [ - "Bambu Lab", - "PC", - "Bambu PC" - ] - ], - "OGFC01": [ - [ - "Bambu Lab", - "PC", - "Bambu PC FR" + "PVA", + "Bambu PVA" ] ], "OGFC99": [ - [ - "Generic", - "PC", - "Generic PC" - ], [ "Generic", "PC", "fdm_filament_pc" ] ], - "OGFG00": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG Basic" - ] - ], - "OGFG01": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG Translucent" - ] - ], - "OGFG02": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG HF" - ] - ], - "OGFG50": [ - [ - "Bambu Lab", - "PETG-CF", - "Bambu PETG-CF" - ] - ], - "OGFG60": [ - [ - "Polymaker", - "PETG", - "PolyLite PETG" - ] - ], - "OGFG97": [ - [ - "Generic", - "PCTG", - "fdm_filament_pctg" - ] - ], "OGFG99": [ - [ - "Generic", - "PETG", - "Generic PETG" - ], [ "Generic", "PETG", "fdm_filament_pet" ] ], - "OGFGG300": [ - [ - "GreenGate3D", - "PETG", - "GreenGate3D PETG" - ] - ], - "OGFL00": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA" - ] - ], - "OGFL00-1": [ - [ - "Polymaker", - "PLA", - "PolyTerra Dual PLA" - ] - ], - "OGFL01": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA" - ] - ], - "OGFL03": [ - [ - "eSUN", - "PLA", - "eSUN PLA+" - ] - ], - "OGFL04": [ - [ - "Overture", - "PLA", - "Overture PLA" - ] - ], - "OGFL05": [ - [ - "Overture", - "PLA", - "Overture Matte PLA" - ] - ], - "OGFL06": [ - [ - "Polymaker", - "PETG", - "Fiberon PETG-ESD" - ] - ], - "OGFL50": [ - [ - "Polymaker", - "PA6-CF", - "Fiberon PA6-CF" - ] - ], - "OGFL51": [ - [ - "Polymaker", - "PA-GF", - "Fiberon PA6-GF" - ] - ], - "OGFL52": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA12-CF" - ] - ], - "OGFL53": [ - [ - "Polymaker", - "PA", - "Fiberon PA612-CF" - ] - ], - "OGFL54": [ - [ - "Polymaker", - "PET-CF", - "Fiberon PET-CF" - ] - ], - "OGFL55": [ - [ - "Polymaker", - "PETG-CF", - "Fiberon PETG-rCF" - ] - ], - "OGFL95": [ - [ - "Generic", - "PLA", - "Generic PLA High Speed" - ] - ], "OGFL96": [ [ "Generic", "PLA", "Generic PLA Silk" - ], - [ - "Generic", - "PLA", - "fdm_filament_pla_silk" - ] - ], - "OGFL98": [ - [ - "Generic", - "PLA-CF", - "Generic PLA-CF" - ] - ], - "OGFL99": [ - [ - "Generic", - "PLA", - "fdm_filament_pla" - ] - ], - "OGFLC99": [ - [ - "Generic", - "CoPE", - "fdm_filament_cope" - ] - ], - "OGFN03": [ - [ - "Bambu Lab", - "PA-CF", - "Bambu PA-CF" - ] - ], - "OGFN04": [ - [ - "Bambu Lab", - "PA-CF", - "Bambu PAHT-CF" - ] - ], - "OGFN05": [ - [ - "Bambu Lab", - "PA6-CF", - "Bambu PA6-CF" - ] - ], - "OGFN06": [ - [ - "Bambu Lab", - "PPA-CF", - "Bambu PPA-CF" - ] - ], - "OGFN08": [ - [ - "Bambu Lab", - "PA-GF", - "Bambu PA6-GF" - ] - ], - "OGFN96": [ - [ - "Generic", - "PPA-GF", - "Generic PPA-GF" - ] - ], - "OGFN97": [ - [ - "Generic", - "PPA-CF", - "fdm_filament_ppa" - ] - ], - "OGFN98": [ - [ - "Generic", - "PA-CF", - "Generic PA-CF" ] ], "OGFN99": [ - [ - "Generic", - "PA", - "Generic PA" - ], [ "Generic", "PA", "fdm_filament_pa" ] ], - "OGFNMK00": [ - [ - "Numakers", - "PLA", - "Numakers PLA+" - ] - ], - "OGFP97": [ - [ - "Generic", - "PP", - "fdm_filament_pp" - ] - ], - "OGFP99": [ - [ - "Generic", - "PE", - "fdm_filament_pe" - ] - ], - "OGFPM001": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA" - ] - ], - "OGFPM002": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Matte" - ] - ], - "OGFPM003": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Marble" - ] - ], - "OGFPM004": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Silk" - ] - ], - "OGFPM005": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Satin" - ] - ], - "OGFPM006": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Translucent" - ] - ], - "OGFPM007": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Galaxy" - ] - ], - "OGFPM008": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Celestial" - ] - ], - "OGFPM009": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Starlight" - ] - ], - "OGFPM010": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Glow" - ] - ], - "OGFPM011": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Luminous" - ] - ], - "OGFPM012": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Metallic" - ] - ], - "OGFPM013": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Neon" - ] - ], - "OGFPM014": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA UV Shift" - ] - ], - "OGFPM015": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Temp Shift" - ] - ], - "OGFPM016": [ - [ - "Polymaker", - "PLA", - "Panchroma CoPE" - ] - ], - "OGFPM017": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA" - ] - ], - "OGFPM018": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA-GF" - ] - ], - "OGFPM019": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Pro" - ] - ], - "OGFR00": [ - [ - "FusRock", - "ABS-GF", - "FusRock ABS-GF" - ] - ], - "OGFR98": [ - [ - "Generic", - "PHA", - "fdm_filament_pha" - ] - ], - "OGFR99": [ - [ - "Generic", - "EVA", - "fdm_filament_eva" - ] - ], - "OGFS00": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support W" - ] - ], - "OGFS01": [ - [ - "Bambu Lab", - "PA", - "Bambu Support G" - ] - ], - "OGFS02": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support For PLA" - ] - ], - "OGFS03": [ - [ - "Bambu Lab", - "PA", - "Bambu Support For PA/PET" - ] - ], - "OGFS04": [ - [ - "Bambu Lab", - "PVA", - "Bambu PVA" - ] - ], - "OGFS05": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support For PLA/PETG" - ] - ], - "OGFS06": [ - [ - "Bambu Lab", - "ABS", - "Bambu Support for ABS" - ] - ], - "OGFS97": [ - [ - "Generic", - "BVOH", - "fdm_filament_bvoh" - ] - ], - "OGFS98": [ - [ - "Generic", - "HIPS", - "fdm_filament_hips" - ] - ], - "OGFS99": [ - [ - "Generic", - "PVA", - "Generic PVA" - ] - ], - "OGFSNL02": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Matte" - ] - ], - "OGFSNL03": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+" - ] - ], - "OGFSNL04": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+ 2.0" - ] - ], - "OGFSNL05": [ - [ - "SUNLU", - "PLA", - "SUNLU Silk PLA+" - ] - ], - "OGFSNL06": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Marble" - ] - ], - "OGFSNL07": [ - [ - "SUNLU", - "PLA", - "SUNLU Wood PLA" - ] - ], "OGFSNL08": [ [ "Generic", "PETG", "SUNLU PETG" - ], - [ - "SUNLU", - "PETG", - "SUNLU PETG" - ] - ], - "OGFT01": [ - [ - "Bambu Lab", - "PET-CF", - "Bambu PET-CF" - ] - ], - "OGFT02": [ - [ - "Bambu Lab", - "PPS-CF", - "Bambu PPS-CF" - ] - ], - "OGFU00": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 95A HF" - ] - ], - "OGFU01": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 95A" - ] - ], - "OGFU99": [ - [ - "Generic", - "TPU", - "Generic TPU" - ] - ], - "OVTABS08": [ - [ - "Overture", - "ABS", - "Overture ABS Basic" ] ], "P1001": [ @@ -20414,34 +18572,6 @@ "TPU", "SeeMeCNC TPU" ] - ], - "VLMNT01": [ - [ - "Valment", - "PLA", - "Valment PLA" - ] - ], - "VLMNT02": [ - [ - "Valment", - "PLA", - "Valment PLA Silk" - ] - ], - "VLMNT03": [ - [ - "Valment", - "PLA-CF", - "Valment PLA-CF" - ] - ], - "VLMNT04": [ - [ - "Valment", - "PLA", - "Valment PLA Galaxy" - ] ] } } From 3ccc58a9fc6d35483cc0796fb835d1c2496f3a0b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 19:21:19 +0800 Subject: [PATCH 017/208] fix --- .../filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json | 3 +++ .../Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ ...nycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json | 3 +++ .../Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- .../filament/Creality Generic ABS @Ender-5Max-all.json | 2 +- .../filament/Creality Generic ASA @Ender-5Max-all.json | 2 +- .../filament/Creality Generic PA @Ender-5Max-all.json | 2 +- .../filament/Creality Generic PETG @Ender-5Max-all.json | 2 +- .../filament/Creality Generic TPU @Ender-5Max-all.json | 2 +- .../profiles/Creality/filament/Generic PETG-GF @K2-all.json | 2 +- .../profiles/Prusa/filament/Prusa Generic ASA @CORE One.json | 2 +- .../Prusa/filament/Prusa Generic PC @MINIIS 0.25.json | 1 + .../Prusa/filament/Prusa Generic PC @MINIIS 0.6.json | 1 + .../Prusa/filament/Prusa Generic PC @MINIIS 0.8.json | 1 + .../profiles/Prusa/filament/Prusa Generic PC @MINIIS.json | 1 + resources/profiles/Prusa/filament/Prusa Generic PC.json | 1 + .../profiles/Prusa/filament/Prusa Generic TPU @CORE One.json | 2 +- .../profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json | 2 +- .../profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json | 2 +- .../profiles/Prusa/filament/Prusa Generic TPU @MK4S.json | 2 +- .../Prusa/filament/Prusa Generic TPU HF @MINIIS.json | 2 +- .../profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json | 2 +- resources/profiles/Prusa/filament/Prusament PETG @base.json | 5 ++++- resources/profiles/Prusa/filament/Prusament PLA @base.json | 5 ++++- resources/profiles/Prusa/filament/Prusament rPLA @base.json | 5 ++++- .../Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json | 3 +++ .../profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json | 3 +++ .../re3D/filament/re3D Greengate rPETG @0.8 nozzle.json | 3 +++ .../re3D/filament/re3D Greengate rPETG @1.75 nozzle.json | 3 +++ resources/profiles/re3D/filament/re3D Greengate rPETG.json | 2 +- 36 files changed, 71 insertions(+), 18 deletions(-) diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json index 20d5e6463c..904b9cf13e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json index 7395073bce..64ca075800 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json index 59113ee018..7829e37710 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_type": [ "ASA" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json index 52f8ed3f9c..a9340e6553 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json index 4c1cba8e20..3a9a24a8e4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json index 0e975dc8d6..cef58f9461 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json index 18a8f258ec..6709f9bbd7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json index 85f0e8a993..5570f249d9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json index 645f098e04..68f8367ed9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "1" ], diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index 0c49ed86e1..852b56e0e0 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -10,7 +10,7 @@ "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle" ], "filament_vendor": [ - "Anycubic" + "Generic" ], "filament_type": [ "PETG" diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json index 2e7d34794d..1c3034cd80 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json @@ -77,7 +77,7 @@ "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ - "Creality" + "Generic" ], "filament_wipe": "nil", "filament_wipe_distance": "nil", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json index d93db9edb5..d2e8d0d5b5 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json @@ -77,7 +77,7 @@ "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ - "Creality" + "Generic" ], "filament_wipe": "nil", "filament_wipe_distance": "nil", diff --git a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json index f72b006d9b..3b37837a4c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json @@ -77,7 +77,7 @@ "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ - "Creality" + "Generic" ], "filament_wipe": "nil", "filament_wipe_distance": "nil", diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json index 63700d9207..6dd5926993 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json @@ -77,7 +77,7 @@ "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ - "Creality" + "Generic" ], "filament_wipe": "nil", "filament_wipe_distance": "nil", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json index 20b4033ed4..437e0875bf 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json @@ -77,7 +77,7 @@ "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ - "Creality" + "Generic" ], "filament_wipe": "nil", "filament_wipe_distance": "nil", diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json index 2505b3ccc8..c2a9b7cc5c 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json @@ -60,7 +60,7 @@ "PETG-GF" ], "filament_vendor": [ - "Creality" + "Generic" ], "hot_plate_temp": [ "70" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json index 2cffdfabe5..c2c39822d7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json @@ -61,7 +61,7 @@ "ASA" ], "filament_vendor": [ - "Prusa Polymers" + "Generic" ], "hot_plate_temp": [ "110" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json index cb00cb55ac..37520ad405 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "P9dO2M6dPICX7rhQ", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json index f747f7e54f..2642930cc1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "uAzPBVsMr6eS1XXS", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json index 0a59345eef..2a3fe6485b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "MZd6zhq1pvhDj6yz", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json index 8cbe33d5b7..4a3bb29282 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "H7HoG0RfPLMTnCEo", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json index 3cb8ec5c0d..fed8a0bb7b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "51vavWbGjxnBwH7e", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json index 9cba165705..71fe4f21c5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json @@ -72,7 +72,7 @@ "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" ], "filament_type": [ - "FLEX" + "TPU" ], "filament_vendor": [ "Generic" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json index 6108984ad1..e6d596aa4e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json @@ -18,7 +18,7 @@ "50" ], "filament_type": [ - "FLEX" + "TPU" ], "nozzle_temperature_initial_layer": [ "220" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json index bc6d7ad126..c0e8ca4577 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json @@ -19,7 +19,7 @@ "50" ], "filament_type": [ - "FLEX" + "TPU" ], "nozzle_temperature_initial_layer": [ "220" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json index 3fec5776ec..a7b5d1fcf6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json @@ -41,7 +41,7 @@ "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" ], "filament_type": [ - "FLEX" + "TPU" ], "filament_wipe": "0", "filament_z_hop": "0", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json index 954e880fa6..2295816502 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json @@ -18,7 +18,7 @@ "50" ], "filament_type": [ - "FLEX" + "TPU" ], "nozzle_temperature_initial_layer": [ "220" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json index 91e97c5324..611c693da1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json @@ -19,7 +19,7 @@ "50" ], "filament_type": [ - "FLEX" + "TPU" ], "nozzle_temperature_initial_layer": [ "220" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @base.json b/resources/profiles/Prusa/filament/Prusament PETG @base.json index eee47346ca..9077aad91c 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @base.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pet", "from": "system", "filament_id": "OFpHq9gJ", - "instantiation": "false" + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] } diff --git a/resources/profiles/Prusa/filament/Prusament PLA @base.json b/resources/profiles/Prusa/filament/Prusament PLA @base.json index 707640da25..acba999339 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @base.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pla", "from": "system", "filament_id": "OFkoT6jl", - "instantiation": "false" + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] } diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @base.json b/resources/profiles/Prusa/filament/Prusament rPLA @base.json index bdacf0cc19..c9b731d04c 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @base.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @base.json @@ -4,5 +4,8 @@ "inherits": "fdm_filament_pla", "from": "system", "filament_id": "OFjFPhUC", - "instantiation": "false" + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] } diff --git a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json index 2d9196c316..5926d0155d 100644 --- a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json @@ -6,6 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "Generic PETG @System", + "filament_vendor": [ + "Polymaker" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json index 9df001b6c9..384be40590 100644 --- a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json @@ -6,6 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "Generic PETG @System", + "filament_vendor": [ + "SUNLU" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json index 028bf042bb..42abbeb819 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json @@ -6,6 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", + "filament_vendor": [ + "GreenGate3D" + ], "nozzle_temperature_initial_layer": [ "0" ], diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json index 5ae3d832ff..43de0b8685 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json @@ -6,6 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", + "filament_vendor": [ + "GreenGate3D" + ], "nozzle_temperature_initial_layer": [ "0" ], diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG.json b/resources/profiles/re3D/filament/re3D Greengate rPETG.json index 5111e5b951..fe0ff8f81b 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG.json @@ -15,6 +15,6 @@ "re3D TerabotX 2" ], "filament_vendor": [ - "re3D" + "GreenGate3D" ] } \ No newline at end of file From e3ac835cc3bce79b7471fffbe5a74534e239983a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 20:19:49 +0800 Subject: [PATCH 018/208] v3.2 data fixes: per-vendor (filament_vendor, filament_type) reconciliation Reconcile every same-family triple divergence ahead of the v3.2 re-mint, per the pinned decision rule (spool brand; "Generic"-named -> Generic; brand-named -> that brand in every bundle; first-party lines -> printer brand; web evidence beats names). All 32 grandfathered triple_exceptions resolved plus swept same-class finds; every bundle re-verified split-free by loader-faithful re-resolution and adversarially reviewed. - Flashforge: 10 exceptions + swept Flashforge PLA; FusRock S-Multi/S-PAHT illegal types decided with product evidence (PA / PAHT); FusRock Generic roots -> Generic; 57 explicit Generic pins keep 14 uninvolved 0.25-nozzle families triple-identical. - Prusa: Prusament vendor -> "Prusa Polymers"; Generic ASA -> Generic; Generic TPU/TPU HF type FLEX -> TPU; fdm_filament_pc re-home (sanctioned): Prusa Generic PC family = OF97ru74, Prusament PC Blend = OFvDbkFq on the @XL pair; transitional ids deleted from OFL and Prusa fdm_filament_pc. - Anycubic: 8 first-party families -> Anycubic on fdm_filament_common leakers; Generic PETG outlier -> Generic. - Creality: 5 Ender-5Max/K2 generics + swept Creality Generic PA -> Generic. - Snapmaker: PolyLite PLA -> Polymaker; PLA Lite child aligned to root per Snapmaker/Orca_Presets evidence. - Sovol/re3D: Polymaker PETG / SUNLU PETG -> brand; Greengate rPETG -> GreenGate3D per manufacturer evidence. Snapshot/ledger intentionally untouched here: the central mechanical commit regenerates them; --check is expected red between the two. --- .../filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json | 3 +++ .../filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json | 3 +++ .../Flashforge/filament/Flashforge ASA-CF @FF C5.json | 3 +++ .../Flashforge/filament/Flashforge ASA-CF @FF C5P.json | 3 +++ .../Flashforge/filament/Flashforge ASA-CF @FF G4.json | 3 +++ .../Flashforge/filament/Flashforge ASA-CF @FF G4P.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge ASA-CF.json | 3 +++ .../filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PETG @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PLA @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json | 3 +++ .../profiles/Flashforge/filament/Flashforge PA12-CF.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge PA6-CF.json | 3 +++ .../profiles/Flashforge/filament/Flashforge PA66-CF.json | 3 +++ .../Flashforge/filament/Flashforge PET-CF @FF C5.json | 3 +++ .../Flashforge/filament/Flashforge PET-CF @FF C5P.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge PET-CF.json | 3 +++ .../filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json | 3 +++ .../filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json | 3 +++ .../Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json | 3 +++ .../Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json | 3 +++ .../Flashforge PETG Transparent @FF G4 0.25 nozzle.json | 3 +++ .../Flashforge PETG Transparent @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json | 3 +++ .../filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json | 3 +++ .../Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json | 3 +++ .../Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json | 3 +++ .../Flashforge PLA Color Change @FF G4 0.25 nozzle.json | 3 +++ .../Flashforge PLA Color Change @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json | 3 +++ .../Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json | 3 +++ .../Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json | 3 +++ .../filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json | 3 +++ .../Flashforge/filament/Flashforge PPA-CF @FF C5.json | 3 +++ .../Flashforge/filament/Flashforge PPA-CF @FF C5P.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge PPA-CF.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge PPA-GF.json | 3 +++ .../Flashforge/filament/Flashforge PPS-CF @FF C5.json | 3 +++ .../Flashforge/filament/Flashforge PPS-CF @FF C5P.json | 3 +++ .../Flashforge/filament/Flashforge PPS-CF @FF G4.json | 3 +++ .../Flashforge/filament/Flashforge PPS-CF @FF G4P.json | 3 +++ resources/profiles/Flashforge/filament/Flashforge PPS-CF.json | 3 +++ .../Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json | 2 +- .../Flashforge/filament/FusRock/FusRock Generic PET-CF.json | 2 +- .../FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json | 2 +- .../Flashforge/filament/FusRock/FusRock Generic S-Multi.json | 4 ++-- .../FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json | 2 +- .../Flashforge/filament/FusRock/FusRock Generic S-PAHT.json | 4 ++-- .../OrcaFilamentLibrary/filament/base/fdm_filament_pc.json | 1 - .../profiles/Prusa/filament/Prusament PC Blend @XL 5T.json | 4 ++++ resources/profiles/Prusa/filament/Prusament PC Blend @XL.json | 4 ++++ resources/profiles/Prusa/filament/fdm_filament_pc.json | 1 - .../Snapmaker/filament/Polymaker/PolyLite PLA @base.json | 3 +++ .../profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json | 2 +- 92 files changed, 260 insertions(+), 11 deletions(-) diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json index 97970235e4..6f8cf9429f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -5,6 +5,9 @@ "from": "system", "filament_id": "GFB99", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json index 97f3d5f8fd..1abb4f5e51 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "SuEfcE6AYK8N1FI4", "filament_id": "OF5T1Y9R", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge ABS Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json index e37450d400..523d9d05dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "gmkc6fRLMI73Iut8", "filament_id": "OF5T1Y9R", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "cool_plate_temp": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json index 09a01dd503..825a80c96d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "CuckX5MsN69806ow", "filament_id": "OF5T1Y9R", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json index 0d556da17d..3488e5bec6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "MBo02hFXn0ebDRdb", "filament_id": "OF5T1Y9R", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json index a852169f49..0ce215f69a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "XWta5jJFsCxBdEPd", "filament_id": "OFcy60o4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json index 9d39413ec7..cd5b00cfe6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "quOwRRLcNfOy0sYf", "filament_id": "OFcy60o4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json index 575f408c5f..e465ad0da8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json @@ -6,6 +6,9 @@ "setting_id": "TqU1elqwuVr9EhTA", "filament_id": "OFM3PeVe", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json index fbad5b186b..ec34e23dcb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json @@ -6,6 +6,9 @@ "setting_id": "nMczAtoc5W0J2WkS", "filament_id": "OFM3PeVe", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index 62f2f92006..2a33b88234 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -6,6 +6,9 @@ "setting_id": "ap7X4nWKfFR53NT0", "filament_id": "OFM3PeVe", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index 8d88edb2ad..f07085eb07 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -6,6 +6,9 @@ "setting_id": "kZXg6odPm5iW79Qn", "filament_id": "OFM3PeVe", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index b400c7d253..b124ce423d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -6,6 +6,9 @@ "setting_id": "CI5dvVrCNk2XTU82", "filament_id": "OFM3PeVe", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json index b48169a92a..8a267c6548 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "1NFhtEvvvgZiHcto", "filament_id": "OFZQFvHQ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge HS PETG @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json index 62f46f554c..4ae4f02769 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "eNOkWn5PT8rDpA0g", "filament_id": "OFZQFvHQ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "cool_plate_temp": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json index f98635dba8..2764a938da 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "uXGuyvVxfdQW22vu", "filament_id": "OFZQFvHQ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json index 5df6b09e97..b0ddaf5825 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "bFVYSPkynBBapFjq", "filament_id": "OFZQFvHQ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json index aaac58ce66..56f8ff9792 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "bfPaqPGaR5zpTsLk", "filament_id": "OFoJUGj6", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json index 89eed340d5..25eab9bb09 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "JCQtuv8Abfz4jVRV", "filament_id": "OFoJUGj6", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json index e204e3e522..54be3be396 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "jFUS6233aq4XPgrn", "filament_id": "OFoJUGj6", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json index 78961a532c..3733afd3b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json @@ -6,6 +6,9 @@ "setting_id": "1CevPV960sQWT3NF", "filament_id": "OFMHTnPP", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json index 9b3764431d..bf2d34204a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json @@ -6,6 +6,9 @@ "setting_id": "NGbZ8pQVTRKw28kp", "filament_id": "OF0SyJhk", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json index 7c2384dad6..988e26f75f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json @@ -6,6 +6,9 @@ "setting_id": "5pVoGBvbiUlrJSwR", "filament_id": "OFkaDtKx", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json index a993eeeae0..2077dc5243 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json @@ -6,6 +6,9 @@ "setting_id": "3bguiaEtUsS8ULHW", "filament_id": "OFPJJxkF", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json index af92eaae0a..48c08e910b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json @@ -6,6 +6,9 @@ "setting_id": "W6i9E22BVo11TeCm", "filament_id": "OFPJJxkF", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json index e5e005fd48..d74582ed08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json @@ -6,6 +6,9 @@ "setting_id": "vflpXTS9GwnODQDH", "filament_id": "OFPJJxkF", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json index 568a8f3adb..2df9381429 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -5,6 +5,9 @@ "from": "system", "filament_id": "GFG99", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json index 339ae66b90..ee093e88fe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "xOZQvdZa1YCcnjor", "filament_id": "OFuyJhLF", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PETG Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json index 97e6a20e7c..d66f57eb00 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "8EUg1hTLfsyDPbnG", "filament_id": "OF38Hyk4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PETG Pro @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json index 2d32a805ff..56b1f382f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "UKhV8A2DBc1xyNWc", "filament_id": "OF38Hyk4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json index 182617e5aa..105b1cee65 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "XFSgx95whLw5FD08", "filament_id": "OF38Hyk4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json index 80971691dd..8b3169ba94 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "8Jc4eedkknqNB87s", "filament_id": "OF38Hyk4", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json index 656e6cfa51..c6cca24dde 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "W59yTyPnVv4LYiah", "filament_id": "OFRgDMDJ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PETG Transparent @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json index 996ed62e1d..e29546069a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "NRY4fsPNtnqs0kyH", "filament_id": "OFRgDMDJ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json index 452cabe424..90e1a598de 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "p5c6XJ1VD8cn2Meh", "filament_id": "OFRgDMDJ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json index a25a050f9f..4a05c795b2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "C0VV5Uzsl4icRgKa", "filament_id": "OFRgDMDJ", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json index f799be321a..5fe939a7b7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json @@ -4,6 +4,9 @@ "inherits": "Flashforge Generic PLA", "from": "system", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json index 8043805bec..155f7ddcb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "3fuVuyVcn8U0bRJQ", "filament_id": "OFHBTqyD", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json index 53165d7174..86153a46df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "FrRRUl5OT773uCju", "filament_id": "OFHBTqyD", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json index cb49ae9309..fd7393e08c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "QXJgY8OPyaoYUI1D", "filament_id": "OFHBTqyD", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json index 7d438c66c4..3199072e84 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "GrwiA2dArUGV9x2g", "filament_id": "OFHBTqyD", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json index 1b0b0ba477..cfb8df6c5c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "KXy0WyQp06VC2ICh", "filament_id": "OFyoW5W2", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Color Change @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json index 26c2f00a33..0ef7325644 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "9cGw7tXD8YJHEi1H", "filament_id": "OFyoW5W2", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json index 974b8eef26..653af0cdfa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "k1OiugasUs7baG1f", "filament_id": "OFyoW5W2", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json index f9e5526878..33a309150b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "HXVX4mDeUSfW2RgL", "filament_id": "OFyoW5W2", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json index c052d94ea4..70eb17ba53 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "a1jTbQsflD7SDFih", "filament_id": "OFXv4FUi", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json index c0d94ddeeb..6f3447e0b0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "zyCRsy0mHRgyuQqt", "filament_id": "OFXv4FUi", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json index abf30fd1f3..de910c8202 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "DL7lxDI35YErCTWX", "filament_id": "OFXv4FUi", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json index 7e1caa26a0..58cd97fed5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "ZQYrljZtu3es26hB", "filament_id": "OFXv4FUi", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json index 3b29dee372..1f58b7ce9d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "k8iibCO2EnlTSRyi", "filament_id": "OFwf0oWp", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Luminous @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json index ac148b7b66..316f797d5b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "pACct3L7duMh3hfx", "filament_id": "OFwf0oWp", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json index 3b6dbd321e..99d6e50b42 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "qZ6kKjRCMfe4Ql3F", "filament_id": "OFwf0oWp", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json index bb909dbaaf..f7a674246f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "zJFUJKDJRYi1pRL7", "filament_id": "OFwf0oWp", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json index 8c31d9b88c..21fb7bfe80 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "DcbISTLvKNMZRzKx", "filament_id": "OF60Lmeq", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Matte @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json index 72fa362c28..b6fc07dc4b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "4fwlIrzy6O2EsyBZ", "filament_id": "OF60Lmeq", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json index 921d2dea18..8050f544ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "cnPwhLyBq6JL8gEA", "filament_id": "OF60Lmeq", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json index 03bcc21993..a32fbb2952 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "g1gnICJ3u6hpGazQ", "filament_id": "OF60Lmeq", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json index 7aff3d8593..439527a780 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "vwwb5nfO63U1ErCn", "filament_id": "OFWv6JYn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Metal @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json index 4a0cc3727c..3d67e7a928 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "ekq4MRPyzlYxRhbX", "filament_id": "OFWv6JYn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json index c1ecd24405..184a2ed052 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "VvMaIJwFk4Q6KX4p", "filament_id": "OFWv6JYn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json index b488812551..ec32a91e56 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "vVKalJViJuBvlHkK", "filament_id": "OFWv6JYn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json index 0c9008df95..5cb8fcea1a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "DIMoIGOGedN17WbO", "filament_id": "OFTa6gPH", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Pro @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json index 81bb6aa26f..1e838feabd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "SC5LJcecBaEG5by3", "filament_id": "OFTa6gPH", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json index 15ff802ebb..c29e57868b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "ZENqqRqvEOeloAgs", "filament_id": "OFTa6gPH", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json index 86ac22cb22..d839e8b67f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "wV01bqvZ6MRaEibZ", "filament_id": "OFTa6gPH", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index e3d9c57369..7ef705723e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "mx6NWRkqyo2U12XQ", "filament_id": "OFAGrVjP", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json index ceef2f32d5..50440528c4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "x5m17Z5UpqpTtwgF", "filament_id": "OFAGrVjP", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json index 1521adad6b..dbd9678eb4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "hnWRLUwnfXiwnqBM", "filament_id": "OFAGrVjP", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json index d4227c010a..3202d660c4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "ojYsAanAPqYhgFoe", "filament_id": "OF9sr3Vn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_settings_id": [ "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json index 027aad1ae3..5156491cfe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "xVYaNvQwM2chTkPe", "filament_id": "OF9sr3Vn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json index 8b79997f28..f722c56cbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "jmVmKMUCcowszvVp", "filament_id": "OF9sr3Vn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json index 7a88f501a1..6817de3a60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json @@ -6,6 +6,9 @@ "setting_id": "4L3Zm1YIxs8J8dp9", "filament_id": "OF9sr3Vn", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json index 4cbd30ea72..6bdea5bcd0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json @@ -6,6 +6,9 @@ "setting_id": "DhC7iFgNKCAq4Zkt", "filament_id": "OFQCAYAt", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json index de09f3ee20..daa6fb18ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json @@ -6,6 +6,9 @@ "setting_id": "Jws2AaLWaNyZhqX4", "filament_id": "OFQCAYAt", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json index 0b5e6a712c..883ee5c3ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json @@ -6,6 +6,9 @@ "setting_id": "MFItX51zZO0KYjdk", "filament_id": "OFQCAYAt", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json index 54cfd76a33..e4a3581fe4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json @@ -6,6 +6,9 @@ "setting_id": "KITjZXcyM4N8cVyu", "filament_id": "OFp8lkYD", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "fan_max_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json index 5080890de1..54faf072f3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json @@ -6,6 +6,9 @@ "setting_id": "ihXPnFERMjbBgrP5", "filament_id": "OFZcrV9c", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json index d28c9de034..7cb88b5960 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json @@ -6,6 +6,9 @@ "setting_id": "UWFjBmSpUkZLBvoO", "filament_id": "OFZcrV9c", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json index 67150ba1b4..309fb174e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json @@ -6,6 +6,9 @@ "setting_id": "oSGlx5mtGh07BnOz", "filament_id": "OFZcrV9c", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json index c9b3f231e5..67c51aa68e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json @@ -6,6 +6,9 @@ "setting_id": "i5DllSvYjVPO04Su", "filament_id": "OFZcrV9c", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json index db7b6c956b..97ff645bb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json @@ -6,6 +6,9 @@ "setting_id": "l3dYtVM52X0UMRix", "filament_id": "OFZcrV9c", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json index 16ce25c253..37b5e26001 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json @@ -180,7 +180,7 @@ "40" ], "filament_vendor": [ - "FusRock" + "Generic" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json index 3deed3be44..b87e15f2df 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json @@ -180,7 +180,7 @@ "40" ], "filament_vendor": [ - "FusRock" + "Generic" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json index d259f1a1ef..24c8414b2e 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json @@ -37,7 +37,7 @@ "; filament start gcode" ], "filament_type": [ - "PET-CF" + "PA" ], "filament_unloading_speed": [ "35" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json index d12baa2e6b..66b94a8bc0 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json @@ -167,7 +167,7 @@ "0" ], "filament_type": [ - "S-Multi" + "PA" ], "filament_unload_time": [ "0" @@ -179,7 +179,7 @@ "40" ], "filament_vendor": [ - "FusRock" + "Generic" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json index 6b2ec8baa0..5fa539c9d8 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json @@ -37,7 +37,7 @@ "; filament start gcode" ], "filament_type": [ - "PA-CF" + "PAHT" ], "filament_unloading_speed": [ "35" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json index ca207c1219..6c09203af8 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json @@ -167,7 +167,7 @@ "0" ], "filament_type": [ - "S-PAHT" + "PAHT" ], "filament_unload_time": [ "0" @@ -179,7 +179,7 @@ "40" ], "filament_vendor": [ - "FusRock" + "Generic" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json index b33b21cdab..120689c074 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OFtcKVgP", "instantiation": "false", "supertack_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json index 9e715f9e52..922492ce7c 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "FOgpd4BtawBtmjPB", + "filament_id": "OFvDbkFq", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "275", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json index 8494169720..2ea273902c 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "DLTlxt04GREtOiec", + "filament_id": "OFvDbkFq", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "275", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/fdm_filament_pc.json b/resources/profiles/Prusa/filament/fdm_filament_pc.json index 01a376d817..bc1b6a3a3a 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pc.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFC99", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json index 4173572637..fcdcf7b003 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json @@ -5,6 +5,9 @@ "name": "PolyLite PLA @base", "filament_id": "1393866034", "inherits": "fdm_filament_pla", + "filament_vendor": [ + "Polymaker" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json index fab081d5d7..d2c9dddefb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json @@ -198,7 +198,7 @@ "100" ], "filament_vendor": [ - "Polymaker" + "Snapmaker" ], "filament_wipe": [ "nil" From f7c1b290fd07c50f77443400552452d2e975e7e5 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 4 Jul 2026 21:09:29 +0800 Subject: [PATCH 019/208] v3.2: vendor-bundle re-mint under the product-triple rule Every remaining legacy filament_id outside the BBL/QD_* islands re-derives from its product triple (filament_vendor / filament_type / family name), completing the content-addressed id model of filament_id_plan_v3.md: - Relocation pre-step: 14 fdm_filament_* template forks (Cubicon x3, Prusa x6, RH3D x6 minus the pc fork already re-homed) stop declaring ids; the 16 presets that rode Prusa's forks now declare the id they already resolved (verified zero effective-id drift over all 5892 instantiated presets). - --drop-redundant-ids: 6 Custom/MyToolChanger generics drop copied GF ids and ride their OFL families. - --remint over all 62 non-island vendors: 2647 declarations re-derived; identical products converge cross-bundle (showcase: PolyLite PLA is now OF5CgdDq in OrcaFilamentLibrary, Qidi, OrcaArena and Snapmaker). - Prusament @XL completions surfaced by the relocation: filament_vendor ["Prusa Polymers"] on the 8 @XL declarers; Prusament PA-CF typed PA11-CF (the product is Prusament PA11CF) and PC-CF typed PC-CF (-CF family typed as base polymer); each family converges on one id. - Succession: 331 ids retired with mode-rule successors, 355 never-shipped v1 mints forgotten with chain splicing, 151 GF-shaped ids released to the island space with hints, 27 curated BBL-generic -> OFL-generic hints (GFL99 -> OFDSrzZ8 class). New --retire "OLD=NEW" maintenance mode records lineage for OGFC99/OGFG99/OGFN99 (the shipped ids of OFL's Generic PC/PETG/PA in released versions, whose claims migrated in v3.1 while Cubicon's inert fork declarations kept them alive). - Retiring the P-hex system ids removes the last system ids from check_ams_filament_valid's destructive P-gate. - AMS-ambiguity fixes surfaced by convergence (validator -f): 4 presets riding another family's id through inherits now declare their true family id (Elegoo Generic ASA-CF/PETG-CF, Snapmaker PolyLite Dual PLA / PolyLite J1 PLA); 9 Cubicon @base presets and Dremel Generic PLA, which duplicate their per-printer variants on the same printers, split onto the salt-1 iteration of their triple (sanctioned by the mint-conformance check; --remint now leaves salt-conformant declarations alone). Gates: assign_filament_ids --check 0; orca_extra_profile_check 0; 116 python unit tests; config-equivalence over all 5892 instantiated presets (byte-identical configs except the 14 sanctioned Prusament vendor/type corrections; setting_id and compatible_printers unchanged; per-family convergence and ledger conservation verified); profile validator base/-f/-r(BBL)/-r(Qidi) all green; libslic3r_tests 48610 assertions; Moonraker OFL generic map check; custom-preset fixture archives v1.9.0-v2.4.1. --- doc/developer-reference/filament_id.md | 14 +- .../profiles/Afinia/filament/Afinia ABS+.json | 2 +- .../Afinia/filament/Afinia ABS+@HS.json | 2 +- .../profiles/Afinia/filament/Afinia ABS.json | 2 +- .../Afinia/filament/Afinia ABS@HS.json | 2 +- .../profiles/Afinia/filament/Afinia PLA.json | 2 +- .../Afinia/filament/Afinia PLA@HS.json | 2 +- .../profiles/Afinia/filament/Afinia TPU.json | 2 +- .../Afinia/filament/Afinia TPU@HS.json | 2 +- .../Afinia/filament/Afinia Value ABS.json | 2 +- .../Afinia/filament/Afinia Value ABS@HS.json | 2 +- .../Afinia/filament/Afinia Value PLA.json | 2 +- .../Afinia/filament/Afinia Value PLA@HS.json | 2 +- .../filament/Anker Generic ABS @base.json | 2 +- .../filament/Anker Generic ASA @base.json | 2 +- .../filament/Anker Generic PA @base.json | 2 +- .../filament/Anker Generic PA-CF @base.json | 2 +- .../filament/Anker Generic PC @base.json | 2 +- .../filament/Anker Generic PETG @base.json | 2 +- .../filament/Anker Generic PETG-CF @base.json | 2 +- .../filament/Anker Generic PLA @base.json | 2 +- .../Anker Generic PLA Silk @base.json | 2 +- .../filament/Anker Generic PLA+ @base.json | 2 +- .../filament/Anker Generic PLA-CF @base.json | 2 +- .../filament/Anker Generic PVA @base.json | 2 +- .../filament/Anker Generic TPU @base.json | 2 +- ... ABS @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... ABS @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... ABS @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...bic ABS @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...BS @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ABS @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic ABS @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...ubic ASA @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ... ASA @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... ASA @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...bic ASA @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...SA @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...ASA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ASA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ASA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic ASA @Anycubic Kobra X 0.4 nozzle.json | 2 +- .../filament/Anycubic Generic ABS.json | 2 +- .../filament/Anycubic Generic ASA.json | 2 +- .../filament/Anycubic Generic PA-CF.json | 2 +- .../filament/Anycubic Generic PA.json | 2 +- .../filament/Anycubic Generic PC.json | 2 +- .../filament/Anycubic Generic PETG.json | 2 +- .../filament/Anycubic Generic PLA-CF.json | 2 +- .../filament/Anycubic Generic PLA.json | 2 +- .../filament/Anycubic Generic PVA.json | 2 +- .../filament/Anycubic Generic TPU.json | 2 +- ... PA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ... PA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ... PA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ... PC @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ... PC @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ... PC @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...-GF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-GF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-GF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ... 95A @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...EBA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...EBA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...EBA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...bic PETG @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ...PETG @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...ic PETG @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...TG @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...bic PETG @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Max 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json | 2 +- ...PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.2 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.6 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.8 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... PLA @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...ic PLA @Anycubic Kobra Neo 0.4 nozzle.json | 2 +- ...bic PLA @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...LA @Anycubic Kobra S1 Max 0.25 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...PLA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...PLA Glow @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...low @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...low @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...low @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...PLA Glow @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...gh Speed @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...peed @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...h Speed @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...eed @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...gh Speed @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...nous @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...LA Matte @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...atte @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...tte @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...LA Matte @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...c PLA SE @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...Silk @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...LA Silk @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ilk @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...PLA Silk @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...PLA Slik @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ent @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...bic PLA+ @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...ic PLA+ @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...LA+ @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...bic PLA+ @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...PVA @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...PVA @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...PVA @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ...ubic PVA @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...95A @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...95A @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...95A @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ... TPU 95A @Anycubic Kobra X 0.4 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.6 nozzle.json | 2 +- ... TPU @Anycubic Kobra 3 Max 0.8 nozzle.json | 2 +- ...bic TPU @Anycubic Kobra S1 0.4 nozzle.json | 2 +- ...ACE @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ACE @Anycubic Kobra S1 Max 0.6 nozzle.json | 2 +- ...ACE @Anycubic Kobra S1 Max 0.8 nozzle.json | 2 +- ... for ACE @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...eric ABS @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 2 +- ...ric PETG @Anycubic Kobra X 0.4 nozzle.json | 2 +- ...asic @Anycubic Kobra 3 Max 0.4 nozzle.json | 2 +- ...eric TPU @Anycubic Kobra 3 0.4 nozzle.json | 2 +- .../Fiberon PA6-CF20 @Anycubic Kobra S1.json | 2 +- .../Panchroma PLA @Anycubic Kobra S1.json | 2 +- .../Polymaker PLA Pro @Anycubic Kobra S1.json | 2 +- ...r PLA Pro Metallic @Anycubic Kobra S1.json | 2 +- ...lery ABS @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery ABS @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../Artillery/filament/Artillery ABS.json | 2 +- ...lery ASA @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery ASA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery ASA @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery ASA @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../filament/Artillery Generic ABS.json | 2 +- .../filament/Artillery Generic ASA.json | 2 +- .../filament/Artillery Generic PETG.json | 2 +- .../filament/Artillery Generic PLA-CF.json | 2 +- .../filament/Artillery Generic PLA.json | 2 +- .../filament/Artillery Generic TPU.json | 2 +- ...llery PA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...ry PA-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...llery PC @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.8 nozzle.json | 2 +- ... PETG-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../Artillery/filament/Artillery PETG.json | 2 +- ...lery PLA @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery PLA @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery PLA @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...LA Basic @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...LA Basic @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...LA Basic @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...LA Basic @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...A Basic+ @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../filament/Artillery PLA Basic.json | 2 +- ...LA Matte @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...LA Matte @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...LA Matte @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...LA Matte @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../filament/Artillery PLA Matte.json | 2 +- ...PLA Silk @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...PLA Silk @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...PLA Silk @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...PLA Silk @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../filament/Artillery PLA Silk.json | 2 +- .../filament/Artillery PLA Tough.json | 2 +- ...y PLA-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.2 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.8 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.6 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.8 nozzle.json | 2 +- .../Artillery/filament/Artillery TPU.json | 2 +- .../Blocks/filament/Blocks Generic ABS.json | 2 +- .../filament/Blocks Generic ASA-CF.json | 2 +- .../Blocks/filament/Blocks Generic ASA.json | 2 +- .../Blocks/filament/Blocks Generic PA-CF.json | 2 +- .../Blocks/filament/Blocks Generic PA.json | 2 +- .../Blocks/filament/Blocks Generic PC.json | 2 +- .../Blocks/filament/Blocks Generic PETG.json | 2 +- .../filament/Blocks Generic PLA-CF.json | 2 +- .../Blocks/filament/Blocks Generic PLA.json | 2 +- .../Blocks/filament/Blocks Generic PVA.json | 2 +- .../Blocks/filament/Blocks Generic TPU.json | 2 +- .../filament/C1 Generic High Flow PETG.json | 2 +- .../CONSTRUCT3D/filament/C1 Generic PETG.json | 2 +- .../CONSTRUCT3D/filament/C1 Generic PLA.json | 2 +- ...uanying ABS @Chuanying X1 0.25 Nozzle.json | 2 +- .../filament/Chuanying Generic ABS.json | 2 +- .../filament/Chuanying Generic ASA.json | 2 +- .../filament/Chuanying Generic HIPS.json | 2 +- .../filament/Chuanying Generic HS PLA.json | 2 +- .../filament/Chuanying Generic PETG-CF10.json | 2 +- .../filament/Chuanying Generic PETG.json | 2 +- .../filament/Chuanying Generic PLA-CF10.json | 2 +- .../filament/Chuanying Generic PLA-Silk.json | 2 +- .../filament/Chuanying Generic PLA.json | 2 +- .../filament/Chuanying Generic PVA.json | 2 +- .../filament/Chuanying Generic TPU.json | 2 +- ...anying PETG @Chuanying X1 0.25 Nozzle.json | 2 +- .../filament/CoPrint Generic ABS.json | 2 +- .../filament/CoPrint Generic PETG.json | 2 +- .../filament/CoPrint Generic PLA.json | 2 +- .../filament/CoPrint Generic TPU.json | 2 +- .../filament/CoLiDo ABS @CoLiDo SR1.json | 2 +- .../CoLiDo Generic ABS @CoLiDo DIY 4.0.json | 2 +- .../CoLiDo Generic ABS @CoLiDo X16.json | 2 +- .../CoLiDo Generic PETG @CoLiDo DIY 4.0.json | 2 +- .../CoLiDo Generic PETG @CoLiDo X16.json | 2 +- .../CoLiDo Generic PLA @CoLiDo DIY 4.0.json | 2 +- .../CoLiDo Generic PLA @CoLiDo X16.json | 2 +- .../CoLiDo Generic TPU @CoLiDo DIY 4.0.json | 2 +- .../CoLiDo Generic TPU @CoLiDo X16.json | 2 +- .../filament/CoLiDo PETG @CoLiDo SR1.json | 2 +- .../filament/CoLiDo PLA @CoLiDo SR1.json | 2 +- .../filament/CoLiDo PLA Silk @CoLiDo SR1.json | 2 +- .../CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json | 2 +- .../Comgrow/filament/Comgrow Generic ABS.json | 2 +- .../filament/Comgrow Generic PETG.json | 2 +- .../Comgrow/filament/Comgrow Generic PLA.json | 2 +- .../Comgrow/filament/Comgrow T300 PLA.json | 2 +- .../filament/CR-ABS @Ender-3 V4-all.json | 2 +- .../Creality/filament/CR-ABS @Hi-all.json | 2 +- .../filament/CR-ABS @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-ABS @K1 SE-all.json | 2 +- .../filament/CR-ABS @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/CR-ABS @K1C-all.json | 2 +- .../filament/CR-ABS @K1C_CFS-C-all.json | 2 +- .../filament/CR-ABS @K1_CFS-C-all.json | 2 +- .../filament/CR-ABS @K2 Plus-all.json | 2 +- .../Creality/filament/CR-ABS @K2 Pro-all.json | 2 +- .../Creality/filament/CR-ABS @K2 SE-all.json | 2 +- .../Creality/filament/CR-ABS @K2-all.json | 2 +- .../filament/CR-Nylon @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-Nylon @K1C-all.json | 2 +- .../filament/CR-Nylon @K1C_CFS-C-all.json | 2 +- .../filament/CR-Nylon @K1_CFS-C-all.json | 2 +- .../filament/CR-Nylon @K2 Plus-all.json | 2 +- .../filament/CR-PETG @Ender-3 V4-all.json | 2 +- .../Creality/filament/CR-PETG @Hi-all.json | 2 +- .../filament/CR-PETG @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-PETG @K1 SE-all.json | 2 +- .../filament/CR-PETG @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/CR-PETG @K1C-all.json | 2 +- .../filament/CR-PETG @K1C_CFS-C-all.json | 2 +- .../filament/CR-PETG @K1_CFS-C-all.json | 2 +- .../filament/CR-PETG @K2 Plus-all.json | 2 +- .../filament/CR-PETG @K2 Pro-all.json | 2 +- .../Creality/filament/CR-PETG @K2 SE-all.json | 2 +- .../Creality/filament/CR-PETG @K2-all.json | 2 +- .../filament/CR-PETG @SPARKX i7-all.json | 2 +- .../filament/CR-PLA @Ender-3 V4-all.json | 2 +- .../Creality/filament/CR-PLA @Hi-all.json | 2 +- .../filament/CR-PLA @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-PLA @K1 SE-all.json | 2 +- .../filament/CR-PLA @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/CR-PLA @K1C-all.json | 2 +- .../filament/CR-PLA @K1C_CFS-C-all.json | 2 +- .../filament/CR-PLA @K1_CFS-C-all.json | 2 +- .../filament/CR-PLA @K2 Plus-all.json | 2 +- .../Creality/filament/CR-PLA @K2 Pro-all.json | 2 +- .../Creality/filament/CR-PLA @K2 SE-all.json | 2 +- .../Creality/filament/CR-PLA @K2-all.json | 2 +- .../filament/CR-PLA @SPARKX i7-all.json | 2 +- .../CR-PLA Carbon @K1 Max_CFS-C-all.json | 2 +- .../filament/CR-PLA Carbon @K1C-all.json | 2 +- .../CR-PLA Carbon @K1C_CFS-C-all.json | 2 +- .../filament/CR-PLA Carbon @K1_CFS-C-all.json | 2 +- .../filament/CR-PLA Carbon @K2 Plus-all.json | 2 +- .../CR-PLA Fluo @K1 Max_CFS-C-all.json | 2 +- .../filament/CR-PLA Fluo @K1C-all.json | 2 +- .../filament/CR-PLA Fluo @K1C_CFS-C-all.json | 2 +- .../filament/CR-PLA Fluo @K1_CFS-C-all.json | 2 +- .../filament/CR-PLA Fluo @K2 Plus-all.json | 2 +- .../filament/CR-PLA Fluo @K2 Pro-all.json | 2 +- .../filament/CR-PLA Fluo @K2-all.json | 2 +- .../filament/CR-PLA Fluo @SPARKX i7-all.json | 2 +- .../CR-PLA Matte @Ender-3 V4-all.json | 2 +- .../CR-PLA Matte @K1 Max_CFS-C-all.json | 2 +- .../filament/CR-PLA Matte @K1C-all.json | 2 +- .../filament/CR-PLA Matte @K1C_CFS-C-all.json | 2 +- .../filament/CR-PLA Matte @K1_CFS-C-all.json | 2 +- .../filament/CR-PLA Matte @K2 Plus-all.json | 2 +- .../filament/CR-PLA Matte @K2 Pro-all.json | 2 +- .../filament/CR-PLA Matte @K2-all.json | 2 +- .../filament/CR-PLA Matte @SPARKX i7-all.json | 2 +- .../filament/CR-Silk @Ender-3 V4-all.json | 2 +- .../Creality/filament/CR-Silk @Hi-all.json | 2 +- .../filament/CR-Silk @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-Silk @K1 SE-all.json | 2 +- .../filament/CR-Silk @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/CR-Silk @K1C-all.json | 2 +- .../filament/CR-Silk @K1C_CFS-C-all.json | 2 +- .../filament/CR-Silk @K1_CFS-C-all.json | 2 +- .../filament/CR-Silk @K2 Plus-all.json | 2 +- .../filament/CR-Silk @K2 Pro-all.json | 2 +- .../Creality/filament/CR-Silk @K2 SE-all.json | 2 +- .../Creality/filament/CR-Silk @K2-all.json | 2 +- .../filament/CR-Silk @SPARKX i7-all.json | 2 +- .../filament/CR-TPU @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-TPU @K1C-all.json | 2 +- .../filament/CR-TPU @K1C_CFS-C-all.json | 2 +- .../filament/CR-TPU @K1_CFS-C-all.json | 2 +- .../filament/CR-TPU @K2 Plus-all.json | 2 +- .../Creality/filament/CR-TPU @K2 Pro-all.json | 2 +- .../Creality/filament/CR-TPU @K2-all.json | 2 +- .../filament/CR-TPU @SPARKX i7-all.json | 2 +- .../filament/CR-Wood @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/CR-Wood @K1C-all.json | 2 +- .../filament/CR-Wood @K1C_CFS-C-all.json | 2 +- .../filament/CR-Wood @K1_CFS-C-all.json | 2 +- .../filament/CR-Wood @K2 Plus-all.json | 2 +- .../Creality Generic ABS @Ender-5Max-all.json | 2 +- .../filament/Creality Generic ABS.json | 2 +- .../Creality Generic ASA @Ender-5Max-all.json | 2 +- .../Creality Generic ASA-CF @Hi-all.json | 2 +- .../filament/Creality Generic ASA.json | 2 +- .../Creality Generic PA @Ender-5Max-all.json | 2 +- .../filament/Creality Generic PA-CF.json | 2 +- .../filament/Creality Generic PC.json | 2 +- ...Creality Generic PETG @Ender-5Max-all.json | 2 +- .../Creality Generic PETG-CF @Hi-all.json | 2 +- .../filament/Creality Generic PETG.json | 2 +- .../Creality Generic PLA @Ender-5Max-all.json | 2 +- ...Generic PLA High Speed @Ender-3V3-all.json | 2 +- ...eality Generic PLA High Speed @Hi-all.json | 2 +- ...eality Generic PLA High Speed @K1-all.json | 2 +- ...eality Generic PLA High Speed @K2-all.json | 2 +- ...lity Generic PLA Matte @Ender-3V3-all.json | 2 +- .../Creality Generic PLA Matte @Hi-all.json | 2 +- .../Creality Generic PLA Matte @K1-all.json | 2 +- .../Creality Generic PLA Matte @K2-all.json | 2 +- ...ality Generic PLA Silk @Ender-3V3-all.json | 2 +- .../Creality Generic PLA Silk @Hi-all.json | 2 +- .../Creality Generic PLA Silk @K1-all.json | 2 +- .../Creality Generic PLA Silk @K2-all.json | 2 +- .../Creality Generic PLA Wood @Hi-all.json | 2 +- .../filament/Creality Generic PLA-CF.json | 2 +- .../filament/Creality Generic PLA.json | 2 +- .../Creality Generic TPU @Ender-5Max-all.json | 2 +- .../filament/Creality Generic TPU.json | 2 +- .../filament/Creality HF Generic PLA.json | 2 +- .../Creality HF Generic Speed PLA.json | 2 +- .../Creality Hyper ABS @Ender-5Max-all.json | 2 +- .../Creality Hyper PLA @Ender-5Max-all.json | 2 +- ...Creality Hyper PLA-CF @Ender-5Max-all.json | 2 +- .../Creality Silk PLA @Ender-5Max-all.json | 2 +- .../filament/EN-PLA+ @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/EN-PLA+ @K1C-all.json | 2 +- .../filament/EN-PLA+ @K1C_CFS-C-all.json | 2 +- .../filament/EN-PLA+ @K1_CFS-C-all.json | 2 +- .../filament/EN-PLA+ @K2 Plus-all.json | 2 +- .../filament/EN-PLA+ @K2 Pro-all.json | 2 +- .../Creality/filament/EN-PLA+ @K2-all.json | 2 +- .../filament/EN-PLA+ @SPARKX i7-all.json | 2 +- .../filament/ENDER FAST PLA @Hi-all.json | 2 +- .../filament/ENDER FAST PLA @K2 Plus-all.json | 2 +- .../filament/ENDER FAST PLA @K2 Pro-all.json | 2 +- .../filament/ENDER FAST PLA @K2-all.json | 2 +- .../ENDER FAST PLA @SPARKX i7-all.json | 2 +- .../filament/Ender-PLA @Ender-3 V4-all.json | 2 +- .../Creality/filament/Ender-PLA @Hi-all.json | 2 +- .../filament/Ender-PLA @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/Ender-PLA @K1C-all.json | 2 +- .../filament/Ender-PLA @K1C_CFS-C-all.json | 2 +- .../filament/Ender-PLA @K1_CFS-C-all.json | 2 +- .../filament/Ender-PLA @K2 Plus-all.json | 2 +- .../filament/Ender-PLA @K2 Pro-all.json | 2 +- .../Creality/filament/Ender-PLA @K2-all.json | 2 +- .../filament/Ender-PLA @SPARKX i7-all.json | 2 +- .../filament/Generic ABS @Ender-3 V4-all.json | 2 +- .../filament/Generic ABS @Hi-all.json | 2 +- .../Generic ABS @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic ABS @K1 SE-all.json | 2 +- .../Generic ABS @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic ABS @K1C-all.json | 2 +- .../filament/Generic ABS @K1C_CFS-C-all.json | 2 +- .../filament/Generic ABS @K1_CFS-C-all.json | 2 +- .../filament/Generic ABS @K2 Plus-all.json | 2 +- .../filament/Generic ABS @K2 Pro-all.json | 2 +- .../filament/Generic ABS @K2 SE-all.json | 2 +- .../filament/Generic ABS @K2-all.json | 2 +- .../Generic ASA @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic ASA @K1 SE-all.json | 2 +- .../Generic ASA @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic ASA @K1C-all.json | 2 +- .../filament/Generic ASA @K1C_CFS-C-all.json | 2 +- .../filament/Generic ASA @K1_CFS-C-all.json | 2 +- .../filament/Generic ASA @K2 Plus-all.json | 2 +- .../filament/Generic ASA @K2 Pro-all.json | 2 +- .../filament/Generic ASA @K2 SE-all.json | 2 +- .../filament/Generic ASA @K2-all.json | 2 +- .../filament/Generic ASA-CF @K2 Plus-all.json | 2 +- .../filament/Generic BVOH @Hi-all.json | 2 +- .../Generic BVOH @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic BVOH @K1C-all.json | 2 +- .../filament/Generic BVOH @K1C_CFS-C-all.json | 2 +- .../filament/Generic BVOH @K1_CFS-C-all.json | 2 +- .../filament/Generic BVOH @K2 Plus-all.json | 2 +- .../filament/Generic BVOH @K2 Pro-all.json | 2 +- .../filament/Generic BVOH @K2-all.json | 2 +- .../Generic HIPS @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic HIPS @K1C-all.json | 2 +- .../filament/Generic HIPS @K1C_CFS-C-all.json | 2 +- .../filament/Generic HIPS @K1_CFS-C-all.json | 2 +- .../filament/Generic HIPS @K2 Plus-all.json | 2 +- .../Generic PA @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PA @K1C-all.json | 2 +- .../filament/Generic PA @K1C_CFS-C-all.json | 2 +- .../filament/Generic PA @K1_CFS-C-all.json | 2 +- .../filament/Generic PA @K2 Plus-all.json | 2 +- .../filament/Generic PA @K2 Pro-all.json | 2 +- .../Creality/filament/Generic PA @K2-all.json | 2 +- .../Generic PA-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PA-CF @K1C-all.json | 2 +- .../Generic PA-CF @K1C_CFS-C-all.json | 2 +- .../filament/Generic PA-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PA-CF @K2 Plus-all.json | 2 +- .../Generic PA12-CF @K2 Plus-all.json | 2 +- .../Generic PA6-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PA6-CF @K1C-all.json | 2 +- .../Generic PA6-CF @K1C_CFS-C-all.json | 2 +- .../Generic PA6-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PA6-CF @K2 Plus-all.json | 2 +- .../filament/Generic PA6-CF @K2 Pro-all.json | 2 +- .../filament/Generic PA6-GF @K2 Plus-all.json | 2 +- .../Generic PA612-CF @K2 Plus-all.json | 2 +- .../Generic PA612-CF @K2 Pro-all.json | 2 +- .../Generic PAHT-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PAHT-CF @K1C-all.json | 2 +- .../Generic PAHT-CF @K1C_CFS-C-all.json | 2 +- .../Generic PAHT-CF @K1_CFS-C-all.json | 2 +- .../Generic PAHT-CF @K2 Plus-all.json | 2 +- .../filament/Generic PAHT-CF @K2 Pro-all.json | 2 +- .../filament/Generic PAHT-CF @K2-all.json | 2 +- .../Generic PC @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PC @K1C-all.json | 2 +- .../filament/Generic PC @K1C_CFS-C-all.json | 2 +- .../filament/Generic PC @K1_CFS-C-all.json | 2 +- .../filament/Generic PC @K2 Plus-all.json | 2 +- .../filament/Generic PC @K2 Pro-all.json | 2 +- .../filament/Generic PCTG @K2 Plus-all.json | 2 +- .../Generic PET @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PET @K1C-all.json | 2 +- .../filament/Generic PET @K1C_CFS-C-all.json | 2 +- .../filament/Generic PET @K1_CFS-C-all.json | 2 +- .../filament/Generic PET @K2 Plus-all.json | 2 +- .../filament/Generic PET @K2 Pro-all.json | 2 +- .../filament/Generic PET @K2-all.json | 2 +- .../Generic PET-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PET-CF @K1C-all.json | 2 +- .../Generic PET-CF @K1C_CFS-C-all.json | 2 +- .../Generic PET-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PET-CF @K2 Plus-all.json | 2 +- .../filament/Generic PET-CF @K2 Pro-all.json | 2 +- .../Generic PETG @Ender-3 V4-all.json | 2 +- .../filament/Generic PETG @Hi-all.json | 2 +- .../Generic PETG @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PETG @K1 SE-all.json | 2 +- .../Generic PETG @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic PETG @K1C-all.json | 2 +- .../filament/Generic PETG @K1C_CFS-C-all.json | 2 +- .../filament/Generic PETG @K1_CFS-C-all.json | 2 +- .../filament/Generic PETG @K2 Plus-all.json | 2 +- .../filament/Generic PETG @K2 Pro-all.json | 2 +- .../filament/Generic PETG @K2 SE-all.json | 2 +- .../filament/Generic PETG @K2-all.json | 2 +- .../filament/Generic PETG @SPARKX i7-all.json | 2 +- .../Generic PETG-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PETG-CF @K1C-all.json | 2 +- .../Generic PETG-CF @K1C_CFS-C-all.json | 2 +- .../Generic PETG-CF @K1_CFS-C-all.json | 2 +- .../Generic PETG-CF @K2 Plus-all.json | 2 +- .../filament/Generic PETG-CF @K2 Pro-all.json | 2 +- .../filament/Generic PETG-CF @K2-all.json | 2 +- .../Generic PETG-CF @SPARKX i7-all.json | 2 +- .../Generic PETG-GF @K2 Plus-all.json | 2 +- .../filament/Generic PETG-GF @K2 Pro-all.json | 2 +- .../filament/Generic PETG-GF @K2-all.json | 2 +- .../filament/Generic PLA @Ender-3 V4-all.json | 2 +- .../filament/Generic PLA @Hi-all.json | 2 +- .../Generic PLA @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PLA @K1 SE-all.json | 2 +- .../Generic PLA @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic PLA @K1C-all.json | 2 +- .../filament/Generic PLA @K1C_CFS-C-all.json | 2 +- .../filament/Generic PLA @K1_CFS-C-all.json | 2 +- .../filament/Generic PLA @K2 Plus-all.json | 2 +- .../filament/Generic PLA @K2 Pro-all.json | 2 +- .../filament/Generic PLA @K2 SE-all.json | 2 +- .../filament/Generic PLA @K2-all.json | 2 +- .../filament/Generic PLA @SPARKX i7-all.json | 2 +- .../Generic PLA-CF @Ender-3 V4-all.json | 2 +- .../Generic PLA-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PLA-CF @K1 SE-all.json | 2 +- .../Generic PLA-CF @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic PLA-CF @K1C-all.json | 2 +- .../Generic PLA-CF @K1C_CFS-C-all.json | 2 +- .../Generic PLA-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PLA-CF @K2 Plus-all.json | 2 +- .../filament/Generic PLA-CF @K2 Pro-all.json | 2 +- .../filament/Generic PLA-CF @K2 SE-all.json | 2 +- .../filament/Generic PLA-CF @K2-all.json | 2 +- .../Generic PLA-CF @SPARKX i7-all.json | 2 +- .../Generic PLA-Silk @Ender-3 V4-all.json | 2 +- .../filament/Generic PLA-Silk @Hi-all.json | 2 +- .../Generic PLA-Silk @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PLA-Silk @K1 SE-all.json | 2 +- .../Generic PLA-Silk @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic PLA-Silk @K1C-all.json | 2 +- .../Generic PLA-Silk @K1C_CFS-C-all.json | 2 +- .../Generic PLA-Silk @K1_CFS-C-all.json | 2 +- .../Generic PLA-Silk @K2 Plus-all.json | 2 +- .../Generic PLA-Silk @K2 Pro-all.json | 2 +- .../filament/Generic PLA-Silk @K2 SE-all.json | 2 +- .../filament/Generic PLA-Silk @K2-all.json | 2 +- .../Generic PLA-Silk @SPARKX i7-all.json | 2 +- .../Generic PP @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PP @K1C-all.json | 2 +- .../filament/Generic PP @K1C_CFS-C-all.json | 2 +- .../filament/Generic PP @K1_CFS-C-all.json | 2 +- .../filament/Generic PP @K2 Plus-all.json | 2 +- .../filament/Generic PP @K2 Pro-all.json | 2 +- .../Creality/filament/Generic PP @K2-all.json | 2 +- .../filament/Generic PP-CF @K2 Plus-all.json | 2 +- .../Generic PPS @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PPS @K1C-all.json | 2 +- .../filament/Generic PPS @K1C_CFS-C-all.json | 2 +- .../filament/Generic PPS @K1_CFS-C-all.json | 2 +- .../filament/Generic PPS @K2 Plus-all.json | 2 +- .../Generic PPS-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PPS-CF @K1C-all.json | 2 +- .../Generic PPS-CF @K1C_CFS-C-all.json | 2 +- .../Generic PPS-CF @K1_CFS-C-all.json | 2 +- .../filament/Generic PPS-CF @K2 Plus-all.json | 2 +- .../filament/Generic PVA @Hi-all.json | 2 +- .../Generic PVA @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic PVA @K1C-all.json | 2 +- .../filament/Generic PVA @K1C_CFS-C-all.json | 2 +- .../filament/Generic PVA @K1_CFS-C-all.json | 2 +- .../filament/Generic PVA @K2 Plus-all.json | 2 +- .../filament/Generic PVA @K2 Pro-all.json | 2 +- .../filament/Generic PVA @K2-all.json | 2 +- .../Generic Support for PA @K2 Plus-all.json | 2 +- .../Generic Support for PLA @K2 Plus-all.json | 2 +- .../Generic TPU 64D @K2 Plus-all.json | 2 +- .../Generic TPU 64D @SPARKX i7-all.json | 2 +- .../filament/Generic TPU @Ender-3 V4-all.json | 2 +- .../Generic TPU @K1 Max_CFS-C-all.json | 2 +- .../filament/Generic TPU @K1 SE-all.json | 2 +- .../Generic TPU @K1 SE_CFS-C-all.json | 2 +- .../filament/Generic TPU @K1C-all.json | 2 +- .../filament/Generic TPU @K1C_CFS-C-all.json | 2 +- .../filament/Generic TPU @K1_CFS-C-all.json | 2 +- .../filament/Generic TPU @K2 Plus-all.json | 2 +- .../filament/Generic TPU @K2 Pro-all.json | 2 +- .../filament/Generic TPU @K2 SE-all.json | 2 +- .../filament/Generic TPU @K2-all.json | 2 +- .../filament/Generic TPU @SPARKX i7-all.json | 2 +- .../HP Ultra PLA @K1 Max_CFS-C-all.json | 2 +- .../filament/HP Ultra PLA @K1C-all.json | 2 +- .../filament/HP Ultra PLA @K1C_CFS-C-all.json | 2 +- .../filament/HP Ultra PLA @K1_CFS-C-all.json | 2 +- .../filament/HP Ultra PLA @K2 Plus-all.json | 2 +- .../filament/HP-ASA @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/HP-ASA @K1C-all.json | 2 +- .../filament/HP-ASA @K1C_CFS-C-all.json | 2 +- .../filament/HP-ASA @K1_CFS-C-all.json | 2 +- .../filament/HP-ASA @K2 Plus-all.json | 2 +- .../Creality/filament/HP-ASA @K2 Pro-all.json | 2 +- .../Creality/filament/HP-ASA @K2 SE-all.json | 2 +- .../Creality/filament/HP-ASA @K2-all.json | 2 +- .../filament/HP-TPU @Ender-3 V4-all.json | 2 +- .../Creality/filament/HP-TPU @Hi-all.json | 2 +- .../filament/HP-TPU @K1 Max_CFS-C-all.json | 2 +- .../Creality/filament/HP-TPU @K1 SE-all.json | 2 +- .../filament/HP-TPU @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/HP-TPU @K1C-all.json | 2 +- .../filament/HP-TPU @K1C_CFS-C-all.json | 2 +- .../filament/HP-TPU @K1_CFS-C-all.json | 2 +- .../filament/HP-TPU @K2 Plus-all.json | 2 +- .../Creality/filament/HP-TPU @K2 Pro-all.json | 2 +- .../Creality/filament/HP-TPU @K2 SE-all.json | 2 +- .../Creality/filament/HP-TPU @K2-all.json | 2 +- .../filament/HP-TPU @SPARKX i7-all.json | 2 +- .../filament/Hyper ABS @Ender-3 V4-all.json | 2 +- .../Creality/filament/Hyper ABS @Hi-all.json | 2 +- .../filament/Hyper ABS @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper ABS @K1 SE-all.json | 2 +- .../filament/Hyper ABS @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/Hyper ABS @K1C-all.json | 2 +- .../filament/Hyper ABS @K1C_CFS-C-all.json | 2 +- .../filament/Hyper ABS @K1_CFS-C-all.json | 2 +- .../filament/Hyper ABS @K2 Plus-all.json | 2 +- .../filament/Hyper ABS @K2 Pro-all.json | 2 +- .../filament/Hyper ABS @K2 SE-all.json | 2 +- .../Creality/filament/Hyper ABS @K2-all.json | 2 +- .../filament/Hyper L-W PLA @Hi-all.json | 2 +- .../Hyper L-W PLA @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper L-W PLA @K1 SE-all.json | 2 +- .../Hyper L-W PLA @K1 SE_CFS-C-all.json | 2 +- .../filament/Hyper L-W PLA @K1C-all.json | 2 +- .../Hyper L-W PLA @K1C_CFS-C-all.json | 2 +- .../filament/Hyper L-W PLA @K1_CFS-C-all.json | 2 +- .../filament/Hyper L-W PLA @K2 Plus-all.json | 2 +- .../filament/Hyper L-W PLA @K2 Pro-all.json | 2 +- .../filament/Hyper L-W PLA @K2-all.json | 2 +- .../filament/Hyper Luminous @Hi-all.json | 2 +- .../filament/Hyper Luminous @K1C-all.json | 2 +- .../filament/Hyper Luminous @K2 Plus-all.json | 2 +- .../filament/Hyper Luminous @K2 Pro-all.json | 2 +- .../filament/Hyper Luminous @K2-all.json | 2 +- .../Hyper Luminous @SPARKX i7-all.json | 2 +- .../filament/Hyper Marble @Hi-all.json | 2 +- .../Hyper Marble @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper Marble @K1C-all.json | 2 +- .../filament/Hyper Marble @K1C_CFS-C-all.json | 2 +- .../filament/Hyper Marble @K1_CFS-C-all.json | 2 +- .../filament/Hyper Marble @K2 Plus-all.json | 2 +- .../filament/Hyper Marble @K2 Pro-all.json | 2 +- .../filament/Hyper Marble @K2 SE-all.json | 2 +- .../filament/Hyper Marble @K2-all.json | 2 +- .../filament/Hyper Marble @SPARKX i7-all.json | 2 +- .../filament/Hyper PA6-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PA6-CF @K2 Pro-all.json | 2 +- .../filament/Hyper PA612-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PA612-CF @K2 Pro-all.json | 2 +- .../Hyper PAHT-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper PAHT-CF @K1C-all.json | 2 +- .../Hyper PAHT-CF @K1C_CFS-C-all.json | 2 +- .../filament/Hyper PAHT-CF @K1_CFS-C-all.json | 2 +- .../filament/Hyper PAHT-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PAHT-CF @K2 Pro-all.json | 2 +- .../filament/Hyper PAHT-CF @K2-all.json | 2 +- .../filament/Hyper PC @K2 Plus-all.json | 2 +- .../filament/Hyper PC @K2 Pro-all.json | 2 +- .../filament/Hyper PETG @Ender-3 V4-all.json | 2 +- .../Creality/filament/Hyper PETG @Hi-all.json | 2 +- .../Hyper PETG @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper PETG @K1 SE-all.json | 2 +- .../filament/Hyper PETG @K1 SE_CFS-C-all.json | 2 +- .../filament/Hyper PETG @K1C-all.json | 2 +- .../filament/Hyper PETG @K1C_CFS-C-all.json | 2 +- .../filament/Hyper PETG @K1_CFS-C-all.json | 2 +- .../filament/Hyper PETG @K2 Plus-all.json | 2 +- .../filament/Hyper PETG @K2 Pro-all.json | 2 +- .../filament/Hyper PETG @K2 SE-all.json | 2 +- .../Creality/filament/Hyper PETG @K2-all.json | 2 +- .../filament/Hyper PETG @SPARKX i7-all.json | 2 +- .../Hyper PETG-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper PETG-CF @K1C-all.json | 2 +- .../Hyper PETG-CF @K1C_CFS-C-all.json | 2 +- .../filament/Hyper PETG-CF @K1_CFS-C-all.json | 2 +- .../filament/Hyper PETG-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PETG-CF @K2 Pro-all.json | 2 +- .../filament/Hyper PETG-CF @K2-all.json | 2 +- .../Hyper PETG-CF @SPARKX i7-all.json | 2 +- .../filament/Hyper PETG-GF @K1C-all.json | 2 +- .../filament/Hyper PETG-GF @K2 Plus-all.json | 2 +- .../filament/Hyper PETG-GF @K2 Pro-all.json | 2 +- .../filament/Hyper PETG-GF @K2-all.json | 2 +- .../filament/Hyper PLA @Ender-3 V4-all.json | 2 +- .../Creality/filament/Hyper PLA @Hi-all.json | 2 +- .../filament/Hyper PLA @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper PLA @K1 SE-all.json | 2 +- .../filament/Hyper PLA @K1 SE_CFS-C-all.json | 2 +- .../Creality/filament/Hyper PLA @K1C-all.json | 2 +- .../filament/Hyper PLA @K1C_CFS-C-all.json | 2 +- .../filament/Hyper PLA @K1_CFS-C-all.json | 2 +- .../filament/Hyper PLA @K2 Plus-all.json | 2 +- .../filament/Hyper PLA @K2 Pro-all.json | 2 +- .../filament/Hyper PLA @K2 SE-all.json | 2 +- .../Creality/filament/Hyper PLA @K2-all.json | 2 +- .../filament/Hyper PLA @SPARKX i7-all.json | 2 +- .../Hyper PLA-CF @Ender-3 V4-all.json | 2 +- .../filament/Hyper PLA-CF @Hi-all.json | 2 +- .../Hyper PLA-CF @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper PLA-CF @K1 SE-all.json | 2 +- .../Hyper PLA-CF @K1 SE_CFS-C-all.json | 2 +- .../filament/Hyper PLA-CF @K1C-all.json | 2 +- .../filament/Hyper PLA-CF @K1C_CFS-C-all.json | 2 +- .../filament/Hyper PLA-CF @K1_CFS-C-all.json | 2 +- .../filament/Hyper PLA-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PLA-CF @K2 Pro-all.json | 2 +- .../filament/Hyper PLA-CF @K2 SE-all.json | 2 +- .../filament/Hyper PLA-CF @K2-all.json | 2 +- .../filament/Hyper PLA-CF @SPARKX i7-all.json | 2 +- .../filament/Hyper PPA-CF @K2 Plus-all.json | 2 +- .../filament/Hyper PPA-CF @K2 Pro-all.json | 2 +- .../filament/Hyper Stardust @Hi-all.json | 2 +- .../Hyper Stardust @K1 Max_CFS-C-all.json | 2 +- .../filament/Hyper Stardust @K1C-all.json | 2 +- .../Hyper Stardust @K1C_CFS-C-all.json | 2 +- .../Hyper Stardust @K1_CFS-C-all.json | 2 +- .../filament/Hyper Stardust @K2 Plus-all.json | 2 +- .../filament/Hyper Stardust @K2 Pro-all.json | 2 +- .../filament/Hyper Stardust @K2 SE-all.json | 2 +- .../filament/Hyper Stardust @K2-all.json | 2 +- .../Hyper Stardust @SPARKX i7-all.json | 2 +- .../Panchroma PLA Matte @K2 Plus-all.json | 2 +- .../Panchroma PLA Satin @K2 Plus-all.json | 2 +- .../filament/PolySonic PLA @K2 Plus-all.json | 2 +- .../PolySonic PLA Pro @K2 Plus-all.json | 2 +- .../filament/Soleyin Basic PETG @Hi-all.json | 2 +- .../filament/Soleyin Basic PETG @K1C-all.json | 2 +- .../Soleyin Basic PETG @K2 Plus-all.json | 2 +- .../Soleyin Basic PETG @K2 Pro-all.json | 2 +- .../filament/Soleyin Basic PETG @K2-all.json | 2 +- .../Soleyin Basic PETG @SPARKX i7-all.json | 2 +- .../Soleyin Ultra PLA @Ender-3 V4-all.json | 2 +- .../filament/Soleyin Ultra PLA @Hi-all.json | 2 +- .../Soleyin Ultra PLA @K1 Max_CFS-C-all.json | 2 +- .../filament/Soleyin Ultra PLA @K1C-all.json | 2 +- .../Soleyin Ultra PLA @K1C_CFS-C-all.json | 2 +- .../Soleyin Ultra PLA @K1_CFS-C-all.json | 2 +- .../Soleyin Ultra PLA @K2 Plus-all.json | 2 +- .../Soleyin Ultra PLA @K2 Pro-all.json | 2 +- .../Soleyin Ultra PLA @K2 SE-all.json | 2 +- .../filament/Soleyin Ultra PLA @K2-all.json | 2 +- .../Soleyin Ultra PLA @SPARKX i7-all.json | 2 +- .../filament/eSUN ABS+ @K2 Plus-all.json | 2 +- .../filament/eSUN ASA+ @K2 Plus-all.json | 2 +- .../filament/eSUN PET-Basic @K2 Plus-all.json | 2 +- .../filament/eSUN PETG @K2 Plus-all.json | 2 +- .../filament/eSUN PETG+HS @K2 Plus-all.json | 2 +- .../eSUN PETG-Basic @K2 Plus-all.json | 2 +- .../filament/eSUN PLA+ @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-CF @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-HS @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-LW @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-Lite @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-Matte @K2 Plus-all.json | 2 +- .../filament/eSUN PLA-Silk @K2 Plus-all.json | 2 +- ...icon ABS @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...n ABS @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...n ABS @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon ABS @base.json | 2 +- ...ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...-A100 @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...-A100 @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../filament/Cubicon ABS-A100 @base.json | 2 +- ...con ABSk @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ... ABSk @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ... ABSk @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon ABSk @base.json | 2 +- ...on PA-CF @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon PA-CF @base.json | 2 +- ...bicon PC @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...on PC @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...on PC @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon PC @base.json | 2 +- ...con PETG @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ... PETG @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ... PETG @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon PETG @base.json | 2 +- ...icon PLA @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...n PLA @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...n PLA @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon PLA @base.json | 2 +- ...con PLA+ @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ... PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ... PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/filament/Cubicon PLA+ @base.json | 2 +- ...n PLAi21 @Cubicon xCeler-I 0.4 nozzle.json | 2 +- ...LAi21 @Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- ...LAi21 @Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../filament/Cubicon PLAi21 @base.json | 2 +- .../Cubicon/filament/fdm_filament_pa.json | 1 - .../Cubicon/filament/fdm_filament_pc.json | 1 - .../Cubicon/filament/fdm_filament_pet.json | 1 - .../filament/Generic PC @MyToolChanger.json | 1 - .../filament/Generic PETG @MyToolChanger.json | 1 - .../filament/Generic PLA @MyToolChanger.json | 1 - .../Generic PLA-CF @MyToolChanger.json | 1 - .../filament/Generic PVA @MyToolChanger.json | 1 - .../filament/Generic TPU @MyToolChanger.json | 1 - .../filament/DeltaMaker Brand PLA.json | 2 +- .../filament/DeltaMaker Generic PETG.json | 2 +- .../filament/DeltaMaker Generic PLA.json | 2 +- .../filament/DeltaMaker Generic TPU.json | 2 +- .../Dremel Generic PLA @3D20 all.json | 2 +- .../Dremel Generic PLA @3D40 all.json | 2 +- .../Dremel Generic PLA @3D45 all.json | 2 +- .../Dremel/filament/Dremel Generic PLA.json | 2 +- .../filament/BASE/Elegoo ABS @base.json | 2 +- .../filament/BASE/Elegoo ASA @base.json | 2 +- .../filament/BASE/Elegoo ASA-CF @base.json | 2 +- .../filament/BASE/Elegoo PAHT @base.json | 2 +- .../Elegoo/filament/BASE/Elegoo PC @base.json | 2 +- .../filament/BASE/Elegoo PC-FR @base.json | 2 +- .../filament/BASE/Elegoo PET-CF @base.json | 2 +- .../filament/BASE/Elegoo PETG @base.json | 2 +- .../filament/BASE/Elegoo PETG HF @base.json | 2 +- .../filament/BASE/Elegoo PETG PRO @base.json | 2 +- .../BASE/Elegoo PETG Translucent @base.json | 2 +- .../filament/BASE/Elegoo PETG-CF @base.json | 2 +- .../filament/BASE/Elegoo PETG-GF @base.json | 2 +- .../filament/BASE/Elegoo PLA @base.json | 2 +- .../filament/BASE/Elegoo PLA Basic @base.json | 2 +- .../BASE/Elegoo PLA Galaxy @base.json | 2 +- .../filament/BASE/Elegoo PLA Glow @base.json | 2 +- .../BASE/Elegoo PLA Marble @base.json | 2 +- .../filament/BASE/Elegoo PLA Matte @base.json | 2 +- .../filament/BASE/Elegoo PLA PRO @base.json | 2 +- .../filament/BASE/Elegoo PLA Silk @base.json | 2 +- .../BASE/Elegoo PLA Sparkle @base.json | 2 +- .../BASE/Elegoo PLA Translucent2 @base.json | 2 +- .../filament/BASE/Elegoo PLA Wood @base.json | 2 +- .../filament/BASE/Elegoo PLA+ @base.json | 2 +- .../filament/BASE/Elegoo PLA-CF @base.json | 2 +- .../BASE/Elegoo Rapid PETG @base.json | 2 +- .../BASE/Elegoo Rapid PLA+ @base.json | 2 +- .../BASE/Elegoo Rapid TPU 95A @base.json | 2 +- .../filament/BASE/Elegoo TPU @base.json | 2 +- .../filament/BASE/Generic ABS @base.json | 2 +- .../filament/BASE/Generic ASA @base.json | 2 +- .../filament/BASE/Generic PA @base.json | 2 +- .../filament/BASE/Generic PC @base.json | 2 +- .../filament/BASE/Generic PET @base.json | 2 +- .../filament/BASE/Generic PETG @base.json | 2 +- .../filament/BASE/Generic PLA @base.json | 2 +- .../Generic ABS-CF @Elegoo Centauri.json | 2 +- .../Generic ASA-CF @Elegoo Centauri.json | 1 + .../Generic/Generic PA6-CF @Elegoo.json | 2 +- .../Generic/Generic PC-CF @Elegoo.json | 2 +- .../Generic PET-CF @Elegoo Centauri.json | 2 +- .../Generic/Generic PETG PRO @Elegoo.json | 2 +- .../Generic PETG-CF @Elegoo Centauri.json | 1 + .../Generic/Generic PLA Matte @Elegoo.json | 2 +- .../Eryone/filament/Eryone ABS-CF.json | 2 +- .../profiles/Eryone/filament/Eryone ABS.json | 2 +- .../Eryone/filament/Eryone ASA-CF.json | 2 +- .../profiles/Eryone/filament/Eryone ASA.json | 2 +- .../Eryone/filament/Eryone PA-CF.json | 2 +- .../Eryone/filament/Eryone PA-GF.json | 2 +- .../profiles/Eryone/filament/Eryone PA.json | 2 +- .../Eryone/filament/Eryone PETG-CF.json | 2 +- .../profiles/Eryone/filament/Eryone PETG.json | 2 +- .../Eryone/filament/Eryone PLA-CF.json | 2 +- .../profiles/Eryone/filament/Eryone PLA.json | 2 +- .../Eryone/filament/Eryone PP-CF.json | 2 +- .../profiles/Eryone/filament/Eryone PP.json | 2 +- .../Eryone/filament/Eryone Silk PLA.json | 2 +- .../profiles/Eryone/filament/Eryone TPU.json | 2 +- .../FLSun/filament/FLSun Generic ABS.json | 2 +- .../FLSun/filament/FLSun Generic ASA.json | 2 +- .../FLSun/filament/FLSun Generic PA-CF.json | 2 +- .../FLSun/filament/FLSun Generic PA.json | 2 +- .../FLSun/filament/FLSun Generic PC.json | 2 +- .../FLSun/filament/FLSun Generic PETG.json | 2 +- .../FLSun/filament/FLSun Generic PLA-CF.json | 2 +- .../FLSun/filament/FLSun Generic PLA.json | 2 +- .../FLSun/filament/FLSun Generic PVA.json | 2 +- .../FLSun/filament/FLSun Generic TPU.json | 2 +- .../profiles/FLSun/filament/FLSun S1 ABS.json | 2 +- .../profiles/FLSun/filament/FLSun S1 ASA.json | 2 +- .../FLSun/filament/FLSun S1 PETG.json | 2 +- .../FLSun/filament/FLSun S1 PLA Generic.json | 2 +- .../filament/FLSun S1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun S1 PLA Silk.json | 2 +- .../profiles/FLSun/filament/FLSun S1 TPU.json | 2 +- .../profiles/FLSun/filament/FLSun T1 ABS.json | 2 +- .../profiles/FLSun/filament/FLSun T1 ASA.json | 2 +- .../FLSun/filament/FLSun T1 PETG.json | 2 +- .../FLSun/filament/FLSun T1 PLA Generic.json | 2 +- .../filament/FLSun T1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun T1 PLA Silk.json | 2 +- .../profiles/FLSun/filament/FLSun T1 TPU.json | 2 +- .../FlashForge PC @FF G4 0.6 HF nozzle.json | 2 +- .../FlashForge PC @FF G4 0.6 nozzle.json | 2 +- .../FlashForge PC @FF G4 0.8 HF nozzle.json | 2 +- .../FlashForge PC @FF G4P 0.6 HF nozzle.json | 2 +- .../FlashForge PC @FF G4P 0.6 nozzle.json | 2 +- .../FlashForge PC @FF G4P 0.8 HF nozzle.json | 2 +- .../FlashForge PPS @FF G4 0.6 HF nozzle.json | 2 +- .../FlashForge PPS @FF G4 0.6 nozzle.json | 2 +- .../FlashForge PPS @FF G4 0.8 HF nozzle.json | 2 +- .../FlashForge PPS @FF G4P 0.6 HF nozzle.json | 2 +- .../FlashForge PPS @FF G4P 0.6 nozzle.json | 2 +- .../FlashForge PPS @FF G4P 0.8 HF nozzle.json | 2 +- .../FlashForge PPS-CF @FF G4 0.6 nozzle.json | 2 +- .../FlashForge PPS-CF @FF G4P 0.6 nozzle.json | 2 +- .../Flashforge ABS @FF AD5M 0.25 Nozzle.json | 2 +- ...hforge ABS Basic @FF AD5M 0.25 nozzle.json | 2 +- ...hforge ABS Basic @FF AD5X 0.25 nozzle.json | 2 +- ...shforge ABS Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge ABS Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge ABS Basic @FF AD5X.json | 2 +- .../filament/Flashforge ABS Basic @FF C5.json | 2 +- .../Flashforge ABS Basic @FF C5P.json | 2 +- ...ashforge ABS Basic @FF G4 0.25 nozzle.json | 2 +- ...hforge ABS Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge ABS Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge ABS Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge ABS Basic @FF G4 HF.json | 2 +- .../filament/Flashforge ABS Basic @FF G4.json | 2 +- ...shforge ABS Basic @FF G4P 0.25 nozzle.json | 2 +- ...forge ABS Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge ABS Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge ABS Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge ABS Basic @FF G4P HF.json | 2 +- .../Flashforge ABS Basic @FF G4P.json | 2 +- .../filament/Flashforge ABS Basic.json | 2 +- .../Flashforge ABS-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge ABS-CF @FF G4.json | 2 +- .../Flashforge ABS-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge ABS-CF @FF G4P.json | 2 +- .../filament/Flashforge ABS-GF @FF C5.json | 2 +- .../filament/Flashforge ABS-GF @FF C5P.json | 2 +- .../Flashforge ASA @FF AD5M 0.25 Nozzle.json | 2 +- ...hforge ASA Basic @FF AD5M 0.25 nozzle.json | 2 +- ...hforge ASA Basic @FF AD5X 0.25 nozzle.json | 2 +- ...shforge ASA Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge ASA Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge ASA Basic @FF AD5X.json | 2 +- .../filament/Flashforge ASA Basic @FF C5.json | 2 +- .../Flashforge ASA Basic @FF C5P.json | 2 +- ...ashforge ASA Basic @FF G4 0.25 nozzle.json | 2 +- ...hforge ASA Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge ASA Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge ASA Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge ASA Basic @FF G4 HF.json | 2 +- .../filament/Flashforge ASA Basic @FF G4.json | 2 +- ...shforge ASA Basic @FF G4P 0.25 nozzle.json | 2 +- ...forge ASA Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge ASA Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge ASA Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge ASA Basic @FF G4P HF.json | 2 +- .../Flashforge ASA Basic @FF G4P.json | 2 +- .../filament/Flashforge ASA Basic.json | 2 +- .../filament/Flashforge ASA-CF @FF C5.json | 2 +- .../filament/Flashforge ASA-CF @FF C5P.json | 2 +- .../filament/Flashforge ASA-CF @FF G4.json | 2 +- .../filament/Flashforge ASA-CF @FF G4P.json | 2 +- .../filament/Flashforge ASA-CF.json | 2 +- .../filament/Flashforge ASA-GF @FF C5.json | 2 +- .../filament/Flashforge ASA-GF @FF C5P.json | 2 +- ...orge Generic ABS @FF AD5M 0.25 Nozzle.json | 2 +- ...lashforge Generic ABS @G3U 0.6 Nozzle.json | 2 +- .../filament/Flashforge Generic ABS @G3U.json | 2 +- .../filament/Flashforge Generic ABS.json | 2 +- ...orge Generic ASA @FF AD5M 0.25 Nozzle.json | 2 +- ...lashforge Generic ASA @G3U 0.6 Nozzle.json | 2 +- .../filament/Flashforge Generic ASA @G3U.json | 2 +- .../filament/Flashforge Generic ASA.json | 2 +- ...ashforge Generic HIPS @G3U 0.6 Nozzle.json | 2 +- .../filament/Flashforge Generic HIPS.json | 2 +- ...e Generic HS PLA @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge Generic HS PLA.json | 2 +- ...rge Generic PETG @FF AD5M 0.25 Nozzle.json | 2 +- ...orge Generic PETG @Flashforge Artemis.json | 2 +- ...ashforge Generic PETG @G3U 0.6 Nozzle.json | 2 +- ...ashforge Generic PETG @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PETG @G3U.json | 2 +- ...forge Generic PETG-CF @G3U 0.6 Nozzle.json | 2 +- ...forge Generic PETG-CF @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PETG-CF @G3U.json | 2 +- .../Flashforge Generic PETG-CF10.json | 2 +- .../filament/Flashforge Generic PETG.json | 2 +- .../filament/Flashforge Generic PLA @G3U.json | 2 +- ...hforge Generic PLA-CF @G3U 0.6 Nozzle.json | 2 +- ...hforge Generic PLA-CF @G3U 0.8 Nozzle.json | 2 +- .../Flashforge Generic PLA-CF @G3U.json | 2 +- .../filament/Flashforge Generic PLA-CF10.json | 2 +- ...Generic PLA-SILK @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge Generic PLA-Silk.json | 2 +- .../filament/Flashforge Generic PLA.json | 2 +- .../filament/Flashforge Generic PVA.json | 2 +- .../filament/Flashforge Generic TPU.json | 2 +- .../filament/Flashforge HIPS @FF C5.json | 2 +- .../filament/Flashforge HIPS @FF C5P.json | 2 +- .../Flashforge HIPS @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HIPS @FF G4 0.6 nozzle.json | 2 +- .../Flashforge HIPS @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HIPS @FF G4 HF.json | 2 +- .../filament/Flashforge HIPS @FF G4.json | 2 +- ...Flashforge HIPS @FF G4P 0.6 HF nozzle.json | 2 +- .../Flashforge HIPS @FF G4P 0.6 nozzle.json | 2 +- ...Flashforge HIPS @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HIPS @FF G4P HF.json | 2 +- .../filament/Flashforge HIPS @FF G4P.json | 2 +- ...ashforge HS PETG @FF AD5M 0.25 nozzle.json | 2 +- ...ashforge HS PETG @FF AD5X 0.25 nozzle.json | 2 +- ...lashforge HS PETG @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge HS PETG @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge HS PETG @FF AD5X.json | 2 +- .../filament/Flashforge HS PETG @FF C5.json | 2 +- .../filament/Flashforge HS PETG @FF C5P.json | 2 +- ...Flashforge HS PETG @FF G4 0.25 nozzle.json | 2 +- ...ashforge HS PETG @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4 0.6 nozzle.json | 2 +- ...ashforge HS PETG @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4 HF.json | 2 +- .../filament/Flashforge HS PETG @FF G4.json | 2 +- ...lashforge HS PETG @FF G4P 0.25 nozzle.json | 2 +- ...shforge HS PETG @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge HS PETG @FF G4P 0.6 nozzle.json | 2 +- ...shforge HS PETG @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4P HF.json | 2 +- .../filament/Flashforge HS PETG @FF G4P.json | 2 +- .../filament/Flashforge HS PETG.json | 2 +- ...lashforge HS PLA @FF AD5M 0.25 Nozzle.json | 2 +- ...lashforge HS PLA @FF AD5X 0.25 nozzle.json | 2 +- ...Flashforge HS PLA @FF AD5X 0.6 nozzle.json | 2 +- ...Flashforge HS PLA @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge HS PLA @FF AD5X.json | 2 +- .../filament/Flashforge HS PLA @FF C5.json | 2 +- .../filament/Flashforge HS PLA @FF C5P.json | 2 +- .../Flashforge HS PLA @FF G4 0.25 nozzle.json | 2 +- ...lashforge HS PLA @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4 0.6 nozzle.json | 2 +- ...lashforge HS PLA @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HS PLA @FF G4 HF.json | 2 +- .../filament/Flashforge HS PLA @FF G4.json | 2 +- ...Flashforge HS PLA @FF G4P 0.25 nozzle.json | 2 +- ...ashforge HS PLA @FF G4P 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4P 0.6 nozzle.json | 2 +- ...ashforge HS PLA @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4P HF.json | 2 +- .../filament/Flashforge HS PLA @FF G4P.json | 2 +- ... HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA Burnt Ti @FF G4 HF.json | 2 +- ...HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge HS PLA Burnt Ti @FF G4P HF.json | 2 +- ...orge HS PLA Burnt Ti@FF G4 0.6 nozzle.json | 2 +- ...e HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json | 2 +- ...rge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json | 2 +- ... HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HS PLA.json | 2 +- .../Flashforge PA @FF G4 0.6 HF nozzle.json | 2 +- .../filament/Flashforge PA @FF G4 HF.json | 2 +- .../filament/Flashforge PA @FF G4.json | 2 +- .../Flashforge PA @FF G4P 0.6 HF nozzle.json | 2 +- .../filament/Flashforge PA @FF G4P HF.json | 2 +- .../filament/Flashforge PA @FF G4P.json | 2 +- .../filament/Flashforge PA-CF @FF C5.json | 2 +- .../filament/Flashforge PA-CF @FF C5P.json | 2 +- .../filament/Flashforge PA-CF @FF G4.json | 2 +- .../filament/Flashforge PA-CF @FF G4P.json | 2 +- .../filament/Flashforge PA12-CF.json | 2 +- .../filament/Flashforge PA6-CF.json | 2 +- .../filament/Flashforge PA66-CF.json | 2 +- .../filament/Flashforge PAHT-CF @FF C5.json | 2 +- .../filament/Flashforge PAHT-CF @FF C5P.json | 2 +- .../filament/Flashforge PAHT-CF @FF G4.json | 2 +- .../filament/Flashforge PAHT-CF @FF G4P.json | 2 +- .../filament/Flashforge PET-CF @FF C5.json | 2 +- .../filament/Flashforge PET-CF @FF C5P.json | 2 +- .../filament/Flashforge PET-CF.json | 2 +- .../Flashforge PETG @FF AD5M 0.25 Nozzle.json | 2 +- ...forge PETG Basic @FF AD5M 0.25 nozzle.json | 2 +- .../filament/Flashforge PETG Basic.json | 2 +- ...shforge PETG Pro @FF AD5M 0.25 nozzle.json | 2 +- ...shforge PETG Pro @FF AD5X 0.25 nozzle.json | 2 +- ...ashforge PETG Pro @FF AD5X 0.6 nozzle.json | 2 +- ...ashforge PETG Pro @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PETG Pro @FF AD5X.json | 2 +- .../filament/Flashforge PETG Pro @FF C5.json | 2 +- .../filament/Flashforge PETG Pro @FF C5P.json | 2 +- ...lashforge PETG Pro @FF G4 0.25 nozzle.json | 2 +- ...shforge PETG Pro @FF G4 0.6 HF nozzle.json | 2 +- ...Flashforge PETG Pro @FF G4 0.6 nozzle.json | 2 +- ...shforge PETG Pro @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PETG Pro @FF G4 HF.json | 2 +- .../filament/Flashforge PETG Pro @FF G4.json | 2 +- ...ashforge PETG Pro @FF G4P 0.25 nozzle.json | 2 +- ...hforge PETG Pro @FF G4P 0.6 HF nozzle.json | 2 +- ...lashforge PETG Pro @FF G4P 0.6 nozzle.json | 2 +- ...hforge PETG Pro @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PETG Pro @FF G4P HF.json | 2 +- .../filament/Flashforge PETG Pro @FF G4P.json | 2 +- .../filament/Flashforge PETG Pro.json | 2 +- ...PETG Transparent @FF AD5M 0.25 nozzle.json | 2 +- ...PETG Transparent @FF AD5X 0.25 nozzle.json | 2 +- ... PETG Transparent @FF AD5X 0.6 nozzle.json | 2 +- ... PETG Transparent @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PETG Transparent @FF AD5X.json | 2 +- .../Flashforge PETG Transparent @FF C5.json | 2 +- .../Flashforge PETG Transparent @FF C5P.json | 2 +- ...e PETG Transparent @FF G4 0.25 nozzle.json | 2 +- ...PETG Transparent @FF G4 0.6 HF nozzle.json | 2 +- ...ge PETG Transparent @FF G4 0.6 nozzle.json | 2 +- ...PETG Transparent @FF G4 0.8 HF nozzle.json | 2 +- ...Flashforge PETG Transparent @FF G4 HF.json | 2 +- .../Flashforge PETG Transparent @FF G4.json | 2 +- ... PETG Transparent @FF G4P 0.25 nozzle.json | 2 +- ...ETG Transparent @FF G4P 0.6 HF nozzle.json | 2 +- ...e PETG Transparent @FF G4P 0.6 nozzle.json | 2 +- ...ETG Transparent @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge PETG Transparent @FF G4P HF.json | 2 +- .../Flashforge PETG Transparent @FF G4P.json | 2 +- .../filament/Flashforge PETG Transparent.json | 2 +- ...lashforge PETG-CF @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge PETG-CF @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF AD5X.json | 2 +- .../filament/Flashforge PETG-CF @FF C5.json | 2 +- .../filament/Flashforge PETG-CF @FF C5P.json | 2 +- .../Flashforge PETG-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF G4.json | 2 +- ...Flashforge PETG-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF G4P.json | 2 +- .../filament/Flashforge PETG-CF.json | 2 +- .../Flashforge PLA Matte @FF C5.json | 2 +- .../Flashforge PLA Matte @FF C5P.json | 2 +- .../Flashforge PLA Metal @FF C5.json | 2 +- .../Flashforge PLA Metal @FF C5P.json | 2 +- .../filament/Flashforge PLA Pro @FF C5.json | 2 +- .../filament/Flashforge PLA Pro @FF C5P.json | 2 +- ...hforge PLA Basic @FF AD5M 0.25 nozzle.json | 2 +- ...hforge PLA Basic @FF AD5X 0.25 nozzle.json | 2 +- ...shforge PLA Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Basic @FF AD5X.json | 2 +- .../filament/Flashforge PLA Basic @FF C5.json | 2 +- .../Flashforge PLA Basic @FF C5P.json | 2 +- ...ashforge PLA Basic @FF G4 0.25 nozzle.json | 2 +- ...hforge PLA Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Basic @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Basic @FF G4.json | 2 +- ...shforge PLA Basic @FF G4P 0.25 nozzle.json | 2 +- ...forge PLA Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Basic @FF G4P HF.json | 2 +- .../Flashforge PLA Basic @FF G4P.json | 2 +- .../filament/Flashforge PLA Basic.json | 2 +- ...hforge PLA Buint Ti @FF G4 0.8 nozzle.json | 2 +- ...forge PLA Buint Ti @FF G4P 0.8 nozzle.json | 2 +- ...PLA Color Change @FF AD5M 0.25 nozzle.json | 2 +- ...PLA Color Change @FF AD5X 0.25 nozzle.json | 2 +- ... PLA Color Change @FF AD5X 0.6 nozzle.json | 2 +- ... PLA Color Change @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Color Change @FF AD5X.json | 2 +- .../Flashforge PLA Color Change @FF C5.json | 2 +- .../Flashforge PLA Color Change @FF C5P.json | 2 +- ...e PLA Color Change @FF G4 0.25 nozzle.json | 2 +- ...PLA Color Change @FF G4 0.6 HF nozzle.json | 2 +- ...ge PLA Color Change @FF G4 0.6 nozzle.json | 2 +- ...PLA Color Change @FF G4 0.8 HF nozzle.json | 2 +- ...Flashforge PLA Color Change @FF G4 HF.json | 2 +- .../Flashforge PLA Color Change @FF G4.json | 2 +- ... PLA Color Change @FF G4P 0.25 nozzle.json | 2 +- ...LA Color Change @FF G4P 0.6 HF nozzle.json | 2 +- ...e PLA Color Change @FF G4P 0.6 nozzle.json | 2 +- ...LA Color Change @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge PLA Color Change @FF G4P HF.json | 2 +- .../Flashforge PLA Color Change @FF G4P.json | 2 +- .../filament/Flashforge PLA Color Change.json | 2 +- ...forge PLA Galaxy @FF AD5M 0.25 nozzle.json | 2 +- ...forge PLA Galaxy @FF AD5X 0.25 nozzle.json | 2 +- ...hforge PLA Galaxy @FF AD5X 0.6 nozzle.json | 2 +- ...hforge PLA Galaxy @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF AD5X.json | 2 +- .../Flashforge PLA Galaxy @FF C5.json | 2 +- .../Flashforge PLA Galaxy @FF C5P.json | 2 +- ...shforge PLA Galaxy @FF G4 0.25 nozzle.json | 2 +- ...forge PLA Galaxy @FF G4 0.6 HF nozzle.json | 2 +- ...ashforge PLA Galaxy @FF G4 0.6 nozzle.json | 2 +- ...forge PLA Galaxy @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF G4 HF.json | 2 +- .../Flashforge PLA Galaxy @FF G4.json | 2 +- ...hforge PLA Galaxy @FF G4P 0.25 nozzle.json | 2 +- ...orge PLA Galaxy @FF G4P 0.6 HF nozzle.json | 2 +- ...shforge PLA Galaxy @FF G4P 0.6 nozzle.json | 2 +- ...orge PLA Galaxy @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF G4P HF.json | 2 +- .../Flashforge PLA Galaxy @FF G4P.json | 2 +- .../filament/Flashforge PLA Galaxy.json | 2 +- ...rge PLA Luminous @FF AD5M 0.25 nozzle.json | 2 +- ...rge PLA Luminous @FF AD5X 0.25 nozzle.json | 2 +- ...orge PLA Luminous @FF AD5X 0.6 nozzle.json | 2 +- ...orge PLA Luminous @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Luminous @FF AD5X.json | 2 +- .../Flashforge PLA Luminous @FF C5.json | 2 +- .../Flashforge PLA Luminous @FF C5P.json | 2 +- ...forge PLA Luminous @FF G4 0.25 nozzle.json | 2 +- ...rge PLA Luminous @FF G4 0.6 HF nozzle.json | 2 +- ...rge PLA Luminous @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Luminous @FF G4 HF.json | 2 +- .../Flashforge PLA Luminous @FF G4.json | 2 +- ...orge PLA Luminous @FF G4P 0.25 nozzle.json | 2 +- ...ge PLA Luminous @FF G4P 0.6 HF nozzle.json | 2 +- ...ge PLA Luminous @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Luminous @FF G4P HF.json | 2 +- .../Flashforge PLA Luminous @FF G4P.json | 2 +- .../filament/Flashforge PLA Luminous.json | 2 +- ...hforge PLA Matte @FF AD5M 0.25 nozzle.json | 2 +- ...hforge PLA Matte @FF AD5X 0.25 nozzle.json | 2 +- ...shforge PLA Matte @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Matte @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Matte @FF AD5X.json | 2 +- ...ashforge PLA Matte @FF G4 0.25 nozzle.json | 2 +- ...hforge PLA Matte @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Matte @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Matte @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Matte @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Matte @FF G4.json | 2 +- ...shforge PLA Matte @FF G4P 0.25 nozzle.json | 2 +- ...forge PLA Matte @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Matte @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Matte @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Matte @FF G4P HF.json | 2 +- .../Flashforge PLA Matte @FF G4P.json | 2 +- .../filament/Flashforge PLA Matte.json | 2 +- ...hforge PLA Metal @FF AD5M 0.25 nozzle.json | 2 +- ...hforge PLA Metal @FF AD5X 0.25 nozzle.json | 2 +- ...shforge PLA Metal @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Metal @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Metal @FF AD5X.json | 2 +- ...ashforge PLA Metal @FF G4 0.25 nozzle.json | 2 +- ...hforge PLA Metal @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Metal @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Metal @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Metal @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Metal @FF G4.json | 2 +- ...shforge PLA Metal @FF G4P 0.25 nozzle.json | 2 +- ...forge PLA Metal @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Metal @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Metal @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Metal @FF G4P HF.json | 2 +- .../Flashforge PLA Metal @FF G4P.json | 2 +- .../filament/Flashforge PLA Metal.json | 2 +- ...ashforge PLA Pro @FF AD5M 0.25 nozzle.json | 2 +- ...ashforge PLA Pro @FF AD5X 0.25 nozzle.json | 2 +- ...lashforge PLA Pro @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge PLA Pro @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PLA Pro @FF AD5X.json | 2 +- ...Flashforge PLA Pro @FF G4 0.25 nozzle.json | 2 +- ...ashforge PLA Pro @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4 0.6 nozzle.json | 2 +- ...ashforge PLA Pro @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Pro @FF G4.json | 2 +- ...lashforge PLA Pro @FF G4P 0.25 nozzle.json | 2 +- ...shforge PLA Pro @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge PLA Pro @FF G4P 0.6 nozzle.json | 2 +- ...shforge PLA Pro @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4P HF.json | 2 +- .../filament/Flashforge PLA Pro @FF G4P.json | 2 +- .../filament/Flashforge PLA Pro.json | 2 +- ...shforge PLA Silk @FF AD5M 0.25 nozzle.json | 2 +- ...shforge PLA Silk @FF AD5X 0.25 nozzle.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.6 nozzle.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Silk @FF AD5X.json | 2 +- .../filament/Flashforge PLA Silk @FF C5.json | 2 +- .../filament/Flashforge PLA Silk @FF C5P.json | 2 +- ...lashforge PLA Silk @FF G4 0.25 nozzle.json | 2 +- ...shforge PLA Silk @FF G4 0.6 HF nozzle.json | 2 +- ...Flashforge PLA Silk @FF G4 0.6 nozzle.json | 2 +- ...shforge PLA Silk @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Silk @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Silk @FF G4.json | 2 +- ...ashforge PLA Silk @FF G4P 0.25 nozzle.json | 2 +- ...hforge PLA Silk @FF G4P 0.6 HF nozzle.json | 2 +- ...lashforge PLA Silk @FF G4P 0.6 nozzle.json | 2 +- ...hforge PLA Silk @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Silk @FF G4P HF.json | 2 +- .../filament/Flashforge PLA Silk @FF G4P.json | 2 +- .../filament/Flashforge PLA Silk.json | 2 +- ...orge PLA Sparkle @FF AD5M 0.25 nozzle.json | 2 +- ...orge PLA Sparkle @FF AD5X 0.25 nozzle.json | 2 +- ...forge PLA Sparkle @FF AD5X 0.6 nozzle.json | 2 +- ...forge PLA Sparkle @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF AD5X.json | 2 +- ...hforge PLA Sparkle @FF G4 0.25 nozzle.json | 2 +- ...orge PLA Sparkle @FF G4 0.6 HF nozzle.json | 2 +- ...shforge PLA Sparkle @FF G4 0.6 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF G4 HF.json | 2 +- .../Flashforge PLA Sparkle @FF G4.json | 2 +- ...forge PLA Sparkle @FF G4P 0.25 nozzle.json | 2 +- ...rge PLA Sparkle @FF G4P 0.6 HF nozzle.json | 2 +- ...hforge PLA Sparkle @FF G4P 0.6 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF G4P HF.json | 2 +- .../Flashforge PLA Sparkle @FF G4P.json | 2 +- .../filament/Flashforge PLA Sparkle.json | 2 +- ...Flashforge PLA-CF @FF AD5X 0.6 nozzle.json | 2 +- ...Flashforge PLA-CF @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF AD5X.json | 2 +- .../filament/Flashforge PLA-CF @FF C5.json | 2 +- .../filament/Flashforge PLA-CF @FF C5P.json | 2 +- .../Flashforge PLA-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF G4.json | 2 +- .../Flashforge PLA-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF G4P.json | 2 +- .../filament/Flashforge PLA-CF.json | 2 +- ...shforge PLA-SILK @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge PPA-CF @FF C5.json | 2 +- .../filament/Flashforge PPA-CF @FF C5P.json | 2 +- .../filament/Flashforge PPA-CF.json | 2 +- .../filament/Flashforge PPA-GF.json | 2 +- .../filament/Flashforge PPS @FF G4.json | 2 +- .../filament/Flashforge PPS @FF G4P.json | 2 +- .../filament/Flashforge PPS-CF @FF C5.json | 2 +- .../filament/Flashforge PPS-CF @FF C5P.json | 2 +- .../filament/Flashforge PPS-CF @FF G4.json | 2 +- .../filament/Flashforge PPS-CF @FF G4P.json | 2 +- .../filament/Flashforge PPS-CF.json | 2 +- .../filament/Flashforge PVA @FF C5.json | 2 +- .../filament/Flashforge PVA @FF C5P.json | 2 +- ...ashforge TPU 65D @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge TPU 65D @FF G4 0.6 nozzle.json | 2 +- ...ashforge TPU 65D @FF G4 0.8 HF nozzle.json | 2 +- ...shforge TPU 65D @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge TPU 65D @FF G4P 0.6 nozzle.json | 2 +- ...shforge TPU 65D @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge TPU 95A @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge TPU 95A @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF AD5X.json | 2 +- ...ashforge TPU 95A @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge TPU 95A @FF G4 0.6 nozzle.json | 2 +- ...ashforge TPU 95A @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF G4.json | 2 +- ...shforge TPU 95A @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge TPU 95A @FF G4P 0.6 nozzle.json | 2 +- ...shforge TPU 95A @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF G4P.json | 2 +- .../filament/Flashforge TPU 95A.json | 2 +- .../filament/Flashforge TPU-64D @FF C5.json | 2 +- .../filament/Flashforge TPU-64D @FF C5P.json | 2 +- .../filament/Flashforge TPU-90A @FF C5.json | 2 +- .../filament/Flashforge TPU-90A @FF C5P.json | 2 +- .../filament/Flashforge TPU-95A @FF C5.json | 2 +- .../filament/Flashforge TPU-95A @FF C5P.json | 2 +- .../Flashforge/Flashforge ABS @FF AD3.json | 2 +- .../Flashforge/Flashforge PETG @FF AD3.json | 2 +- .../Flashforge/Flashforge PLA @FF AD3.json | 2 +- .../FusRock PAHT @FF G4 0.6 HF nozzle.json | 2 +- .../FusRock PAHT @FF G4 0.6 nozzle.json | 2 +- .../FusRock PAHT @FF G4 0.8 HF nozzle.json | 2 +- .../FusRock PAHT @FF G4P 0.6 HF nozzle.json | 2 +- .../FusRock PAHT @FF G4P 0.6 nozzle.json | 2 +- .../FusRock PAHT @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/FusRock PAHT-CF @FF C5.json | 2 +- .../filament/FusRock PAHT-CF @FF C5P.json | 2 +- .../FusRock PAHT-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/FusRock PAHT-CF @FF G4.json | 2 +- .../FusRock PAHT-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/FusRock PAHT-CF @FF G4P.json | 2 +- .../FusRock PET @FF G4P 0.8 HF nozzle.json | 2 +- .../FusRock PET-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/FusRock PET-CF @FF G4.json | 2 +- .../FusRock PET-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/FusRock PET-CF @FF G4P.json | 2 +- .../filament/FusRock S-Multi @FF C5.json | 2 +- .../filament/FusRock S-Multi @FF C5P.json | 2 +- .../filament/FusRock S-PAHT @FF C5.json | 2 +- .../filament/FusRock S-PAHT @FF C5P.json | 2 +- .../FusRock/FusRock Generic NexPA-CF25.json | 2 +- ...sRock Generic PAHT-CF @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic PAHT-CF.json | 2 +- .../FusRock/FusRock Generic PAHT-GF.json | 2 +- ...usRock Generic PET-CF @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic PET-CF.json | 2 +- .../FusRock/FusRock Generic PET-GF.json | 2 +- ...sRock Generic S-Multi @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic S-Multi.json | 2 +- ...usRock Generic S-PAHT @G3U 0.6 Nozzle.json | 2 +- .../FusRock/FusRock Generic S-PAHT.json | 2 +- .../filament/Generic ABS @Flashforge AD4.json | 2 +- .../filament/Generic ASA @Flashforge AD4.json | 2 +- .../Generic PET @FF G4 0.6 HF nozzle.json | 2 +- .../Generic PET @FF G4 0.6 nozzle.json | 2 +- .../Generic PET @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Generic PET @FF G4.json | 2 +- .../Generic PET @FF G4P 0.6 HF nozzle.json | 2 +- .../Generic PET @FF G4P 0.6 nozzle.json | 2 +- .../Generic PET @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Generic PET @FF G4P.json | 2 +- .../Generic PETG @Flashforge AD4.json | 2 +- .../Generic PETG-CF10 @Flashforge AD4.json | 2 +- .../filament/Generic PLA @Flashforge AD4.json | 2 +- ...eneric PLA High Speed @Flashforge AD4.json | 2 +- .../Generic PLA Silk @Flashforge AD4.json | 2 +- .../Generic PLA-CF10 @Flashforge AD4.json | 2 +- .../Generic TPU 85A @FF AD5X 0.6 nozzle.json | 2 +- .../Generic TPU 85A @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Generic TPU 85A @FF AD5X.json | 2 +- .../filament/Generic TPU @Flashforge AD4.json | 2 +- .../filament/Generic TPU-64D @FF C5.json | 2 +- .../filament/Generic TPU-64D @FF C5P.json | 2 +- .../filament/Generic TPU-90A @FF C5.json | 2 +- .../filament/Generic TPU-90A @FF C5P.json | 2 +- .../filament/Generic TPU-95A @FF C5.json | 2 +- .../filament/Generic TPU-95A @FF C5P.json | 2 +- .../Polymaker CoPA @FF G4 0.6 HF nozzle.json | 2 +- .../Polymaker CoPA @FF G4 0.6 nozzle.json | 2 +- .../Polymaker CoPA @FF G4 0.8 HF nozzle.json | 2 +- .../Polymaker CoPA @FF G4P 0.6 HF nozzle.json | 2 +- .../Polymaker CoPA @FF G4P 0.6 nozzle.json | 2 +- .../Polymaker CoPA @FF G4P 0.8 HF nozzle.json | 2 +- .../Polymaker/Polymaker Generic CoPA.json | 2 +- .../Polymaker/Polymaker Generic S1.json | 2 +- .../filament/SUNLU/SUNLU PETG @base.json | 2 +- .../SUNLU/SUNLU PLA Marble @base.json | 2 +- .../filament/SUNLU/SUNLU PLA Matte @base.json | 2 +- .../filament/SUNLU/SUNLU PLA+ 2.0 @base.json | 2 +- .../filament/SUNLU/SUNLU PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Silk PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Wood PLA @base.json | 2 +- .../filament/FlyingBear Generic ABS.json | 2 +- .../filament/FlyingBear Generic PA-CF.json | 2 +- .../filament/FlyingBear Generic PC.json | 2 +- .../filament/FlyingBear Generic PETG.json | 2 +- .../filament/FlyingBear Generic PLA.json | 2 +- .../filament/FlyingBear Generic TPU.json | 2 +- .../filament/FlyingBear PLA Hyper.json | 2 +- .../Ghost7/FlyingBear ABS @Ghost7.json | 2 +- .../Ghost7/FlyingBear PA-CF @Ghost7.json | 2 +- .../Ghost7/FlyingBear PC @Ghost7.json | 2 +- .../Ghost7/FlyingBear PETG Basic @Ghost7.json | 2 +- .../Ghost7/FlyingBear PLA Basic @Ghost7.json | 2 +- .../Ghost7/FlyingBear PLA Hyper @Ghost7.json | 2 +- .../Ghost7/FlyingBear TPU Basic @Ghost7.json | 2 +- .../filament/S1/FlyingBear ABS @S1.json | 2 +- .../filament/S1/FlyingBear PA-CF @S1.json | 2 +- .../filament/S1/FlyingBear PC @S1.json | 2 +- .../filament/S1/FlyingBear PETG @S1.json | 2 +- .../filament/S1/FlyingBear PLA @S1.json | 2 +- .../filament/S1/FlyingBear PLA Hyper @S1.json | 2 +- .../filament/S1/FlyingBear TPU @S1.json | 2 +- .../FlyingBear/filament/S1/Other ABS @S1.json | 2 +- .../filament/S1/Other PA-CF @S1.json | 2 +- .../FlyingBear/filament/S1/Other PC @S1.json | 2 +- .../filament/S1/Other PETG @S1.json | 2 +- .../FlyingBear/filament/S1/Other PLA @S1.json | 2 +- .../filament/S1/Other PLA Hyper @S1.json | 2 +- .../FlyingBear/filament/S1/Other TPU @S1.json | 2 +- .../filament/Ginger Generic PETG.json | 2 +- .../filament/Ginger Generic PLA.json | 2 +- .../filament/EX+APS/InfiMech ABS @EX+APS.json | 2 +- .../EX+APS/InfiMech PA-CF @EX+APS.json | 2 +- .../filament/EX+APS/InfiMech PC @EX+APS.json | 2 +- .../EX+APS/InfiMech PETG @EX+APS.json | 2 +- .../EX+APS/InfiMech PLA Basic @EX+APS.json | 2 +- .../EX+APS/InfiMech PLA Hyper @EX+APS.json | 2 +- .../EX+APS/InfiMech TPU Basic @EX+APS.json | 2 +- .../filament/EX/InfiMech ABS @EX.json | 2 +- .../filament/EX/InfiMech PA-CF @EX.json | 2 +- .../InfiMech/filament/EX/InfiMech PC @EX.json | 2 +- .../filament/EX/InfiMech PETG @EX.json | 2 +- .../filament/EX/InfiMech PLA Basic @EX.json | 2 +- .../filament/EX/InfiMech PLA Hyper @EX.json | 2 +- .../filament/EX/InfiMech TPU Basic @EX.json | 2 +- .../filament/HSN/InfiMech ABS @HSN.json | 2 +- .../filament/HSN/InfiMech PA-CF @HSN.json | 2 +- .../filament/HSN/InfiMech PC @HSN.json | 2 +- .../filament/HSN/InfiMech PETG @HSN.json | 2 +- .../filament/HSN/InfiMech PLA @HSN.json | 2 +- .../filament/HSN/InfiMech PLA Hyper @HSN.json | 2 +- .../filament/HSN/InfiMech TPU @HSN.json | 2 +- .../InfiMech/filament/HSN/Other ABS @HSN.json | 2 +- .../filament/HSN/Other PA-CF @HSN.json | 2 +- .../InfiMech/filament/HSN/Other PC @HSN.json | 2 +- .../filament/HSN/Other PETG @HSN.json | 2 +- .../InfiMech/filament/HSN/Other PLA @HSN.json | 2 +- .../filament/HSN/Other PLA Hyper @HSN.json | 2 +- .../InfiMech/filament/HSN/Other TPU @HSN.json | 2 +- .../filament/InfiMech Generic ABS.json | 2 +- .../filament/InfiMech Generic PA-CF.json | 2 +- .../filament/InfiMech Generic PC.json | 2 +- .../filament/InfiMech Generic PETG.json | 2 +- .../filament/InfiMech Generic PLA.json | 2 +- .../filament/InfiMech Generic TPU.json | 2 +- .../InfiMech/filament/InfiMech PLA Hyper.json | 2 +- .../profiles/InfiMech/filament/Other ABS.json | 2 +- .../InfiMech/filament/Other PA-CF.json | 2 +- .../profiles/InfiMech/filament/Other PC.json | 2 +- .../InfiMech/filament/Other PETG.json | 2 +- .../InfiMech/filament/Other PLA Hyper.json | 2 +- .../profiles/InfiMech/filament/Other PLA.json | 2 +- .../profiles/InfiMech/filament/Other TPU.json | 2 +- resources/profiles/LH/filament/LHS ABS.json | 2 +- resources/profiles/LH/filament/LHS ASA.json | 2 +- resources/profiles/LH/filament/LHS PC CF.json | 2 +- resources/profiles/LH/filament/LHS PCTG.json | 2 +- resources/profiles/LH/filament/LHS PETG.json | 2 +- resources/profiles/LH/filament/LHS PLA.json | 2 +- .../LH/filament/LHS TPU Foamy 78A.json | 2 +- resources/profiles/LH/filament/LHS TPU.json | 2 +- .../Generic PETG @LONGER LK10 Plus.json | 2 +- .../filament/Generic PETG @LONGER LK10.json | 2 +- .../Generic PLA @LONGER LK10 Plus.json | 2 +- .../filament/Generic PLA @LONGER LK10.json | 2 +- .../Lulzbot/filament/Lulzbot 2.85mm ABS.json | 2 +- .../Lulzbot/filament/Lulzbot 2.85mm PETG.json | 2 +- .../Lulzbot/filament/Lulzbot 2.85mm PLA.json | 2 +- .../MagicMaker/filament/MM Generic PEEK.json | 2 +- .../OrcaArena/filament/Arena ABS @base.json | 2 +- .../OrcaArena/filament/Arena PA-CF @base.json | 2 +- .../filament/Arena PAHT-CF @base.json | 2 +- .../OrcaArena/filament/Arena PC @base.json | 2 +- .../filament/Arena PET-CF @base.json | 2 +- .../filament/Arena PETG Basic @base.json | 2 +- .../filament/Arena PETG-CF @base.json | 2 +- .../filament/Arena PLA Basic @base.json | 2 +- .../filament/Arena PLA Impact @base.json | 2 +- .../filament/Arena PLA Marble @base.json | 2 +- .../filament/Arena PLA Matte @base.json | 2 +- .../filament/Arena PLA Metal @base.json | 2 +- .../filament/Arena PLA Silk @base.json | 2 +- .../filament/Arena PLA Sparkle @base.json | 2 +- .../filament/Arena PLA Tough @base.json | 2 +- .../filament/Arena PLA-CF @base.json | 2 +- .../filament/Arena Support G @base.json | 2 +- .../filament/Arena Support W @base.json | 2 +- .../filament/Arena TPU 95A @base.json | 2 +- .../filament/OrcaArena Generic ABS @base.json | 2 +- .../filament/OrcaArena Generic ASA @base.json | 2 +- .../filament/OrcaArena Generic PA-CF.json | 2 +- .../filament/OrcaArena Generic PA.json | 2 +- .../filament/OrcaArena Generic PC @base.json | 2 +- .../OrcaArena Generic PETG @base.json | 2 +- .../OrcaArena Generic PETG-CF @base.json | 2 +- .../filament/OrcaArena Generic PLA @base.json | 2 +- .../OrcaArena Generic PLA Silk @base.json | 2 +- .../OrcaArena Generic PLA-CF @base.json | 2 +- .../filament/OrcaArena Generic PVA @base.json | 2 +- .../filament/OrcaArena Generic TPU.json | 2 +- .../filament/PolyLite PLA @base.json | 2 +- .../filament/PolyTerra PLA @base.json | 2 +- .../Peopoly/filament/Peopoly Generic ABS.json | 2 +- .../filament/Peopoly Generic PETG.json | 2 +- .../Peopoly/filament/Peopoly Generic PLA.json | 2 +- .../filament/Peopoly Lancer ABS-GF.json | 2 +- .../filament/Peopoly Lancer PET-CF.json | 2 +- .../filament/Peopoly Lancer PETG-C.json | 2 +- .../filament/Peopoly Lancer PLA-C.json | 2 +- .../Phrozen PLA @Phrozen Arco 0.4 nozzle.json | 2 +- .../Prusa Generic ABS @CORE One 0.6.json | 2 +- .../Prusa Generic ABS @CORE One 0.8.json | 2 +- .../Prusa Generic ABS @CORE One HF 0.4.json | 2 +- .../Prusa Generic ABS @CORE One HF 0.5.json | 2 +- .../Prusa Generic ABS @CORE One HF 0.6.json | 2 +- .../Prusa Generic ABS @CORE One HF 0.8.json | 2 +- .../filament/Prusa Generic ABS @CORE One.json | 2 +- .../Prusa Generic ABS @MK3.5 0.25.json | 2 +- .../Prusa Generic ABS @MK3.5 0.6.json | 2 +- .../Prusa Generic ABS @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic ABS @MK3.5.json | 2 +- .../filament/Prusa Generic ABS @MK4S 0.6.json | 2 +- .../filament/Prusa Generic ABS @MK4S 0.8.json | 2 +- .../Prusa Generic ABS @MK4S HF0.4.json | 2 +- .../Prusa Generic ABS @MK4S HF0.5.json | 2 +- .../Prusa Generic ABS @MK4S HF0.6.json | 2 +- .../Prusa Generic ABS @MK4S HF0.8.json | 2 +- .../filament/Prusa Generic ABS @MK4S.json | 2 +- .../filament/Prusa Generic ABS @base.json | 2 +- .../Prusa Generic ABS HF @MK3.5 0.6.json | 2 +- .../Prusa Generic ABS HF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic ABS HF @MK3.5.json | 2 +- .../filament/Prusa Generic ABS HF @base.json | 2 +- .../Prusa Generic ASA @CORE One 0.6.json | 2 +- .../Prusa Generic ASA @CORE One 0.8.json | 2 +- .../Prusa Generic ASA @CORE One HF 0.4.json | 2 +- .../Prusa Generic ASA @CORE One HF 0.5.json | 2 +- .../Prusa Generic ASA @CORE One HF 0.6.json | 2 +- .../Prusa Generic ASA @CORE One HF 0.8.json | 2 +- .../filament/Prusa Generic ASA @CORE One.json | 2 +- .../Prusa Generic ASA @MINIIS 0.25.json | 1 + .../Prusa Generic ASA @MINIIS 0.6.json | 1 + .../Prusa Generic ASA @MINIIS 0.8.json | 1 + .../filament/Prusa Generic ASA @MINIIS.json | 1 + .../Prusa Generic ASA @MK3.5 0.25.json | 2 +- .../Prusa Generic ASA @MK3.5 0.6.json | 2 +- .../Prusa Generic ASA @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic ASA @MK3.5.json | 2 +- .../filament/Prusa Generic ASA @MK4.json | 1 + .../filament/Prusa Generic ASA @MK4S 0.6.json | 2 +- .../filament/Prusa Generic ASA @MK4S 0.8.json | 2 +- .../Prusa Generic ASA @MK4S HF0.4.json | 2 +- .../Prusa Generic ASA @MK4S HF0.5.json | 2 +- .../Prusa Generic ASA @MK4S HF0.6.json | 2 +- .../Prusa Generic ASA @MK4S HF0.8.json | 2 +- .../filament/Prusa Generic ASA @MK4S.json | 2 +- .../Prusa Generic ASA HF @MK3.5 0.6.json | 2 +- .../Prusa Generic ASA HF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic ASA HF @MK3.5.json | 2 +- .../filament/Prusa Generic ASA HF @base.json | 2 +- .../Prusa/filament/Prusa Generic ASA.json | 1 + .../filament/Prusa Generic FLEX @XL 5T.json | 1 + .../filament/Prusa Generic FLEX @XL.json | 1 + .../Prusa Generic PA @MK3.5 0.25.json | 2 +- .../filament/Prusa Generic PA @MK3.5 0.6.json | 2 +- .../filament/Prusa Generic PA @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PA @MK3.5.json | 2 +- .../filament/Prusa Generic PA @base.json | 2 +- .../Prusa Generic PA-CF @MK3.5 0.25.json | 2 +- .../Prusa Generic PA-CF @MK3.5 0.6.json | 2 +- .../Prusa Generic PA-CF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PA-CF @MK3.5.json | 2 +- .../filament/Prusa Generic PA-CF @base.json | 2 +- .../Prusa Generic PC @MK3.5 0.25.json | 2 +- .../filament/Prusa Generic PC @MK3.5 0.6.json | 2 +- .../filament/Prusa Generic PC @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PC @MK3.5.json | 2 +- .../Prusa Generic PC HF @MK3.5 0.6.json | 2 +- .../Prusa Generic PC HF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PC HF @MK3.5.json | 2 +- .../filament/Prusa Generic PC HF @base.json | 2 +- .../Prusa Generic PETG @CORE One 0.6.json | 2 +- .../Prusa Generic PETG @CORE One 0.8.json | 2 +- .../Prusa Generic PETG @CORE One HF 0.4.json | 2 +- .../Prusa Generic PETG @CORE One HF 0.5.json | 2 +- .../Prusa Generic PETG @CORE One HF 0.6.json | 2 +- .../Prusa Generic PETG @CORE One HF 0.8.json | 2 +- .../Prusa Generic PETG @CORE One.json | 2 +- .../Prusa Generic PETG @MK3.5 0.25.json | 2 +- .../Prusa Generic PETG @MK3.5 0.6.json | 2 +- .../Prusa Generic PETG @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PETG @MK3.5.json | 2 +- .../Prusa Generic PETG @MK4S 0.6.json | 2 +- .../Prusa Generic PETG @MK4S 0.8.json | 2 +- .../Prusa Generic PETG @MK4S HF0.4.json | 2 +- .../Prusa Generic PETG @MK4S HF0.5.json | 2 +- .../Prusa Generic PETG @MK4S HF0.6.json | 2 +- .../Prusa Generic PETG @MK4S HF0.8.json | 2 +- .../filament/Prusa Generic PETG @MK4S.json | 2 +- .../filament/Prusa Generic PETG @base.json | 2 +- .../Prusa Generic PETG HF @MK3.5 0.6.json | 2 +- .../Prusa Generic PETG HF @MK3.5 0.8.json | 2 +- .../Prusa Generic PETG HF @MK3.5.json | 2 +- .../filament/Prusa Generic PETG HF @base.json | 2 +- .../Prusa Generic PLA @CORE One 0.6.json | 2 +- .../Prusa Generic PLA @CORE One 0.8.json | 2 +- .../Prusa Generic PLA @CORE One HF 0.4.json | 2 +- .../Prusa Generic PLA @CORE One HF 0.5.json | 2 +- .../Prusa Generic PLA @CORE One HF 0.6.json | 2 +- .../Prusa Generic PLA @CORE One HF 0.8.json | 2 +- .../filament/Prusa Generic PLA @CORE One.json | 2 +- .../Prusa Generic PLA @MK3.5 0.25.json | 2 +- .../Prusa Generic PLA @MK3.5 0.6.json | 2 +- .../Prusa Generic PLA @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PLA @MK3.5.json | 2 +- .../filament/Prusa Generic PLA @MK4S 0.6.json | 2 +- .../filament/Prusa Generic PLA @MK4S 0.8.json | 2 +- .../Prusa Generic PLA @MK4S HF0.4.json | 2 +- .../Prusa Generic PLA @MK4S HF0.5.json | 2 +- .../Prusa Generic PLA @MK4S HF0.6.json | 2 +- .../Prusa Generic PLA @MK4S HF0.8.json | 2 +- .../filament/Prusa Generic PLA @MK4S.json | 2 +- .../filament/Prusa Generic PLA @base.json | 2 +- .../Prusa Generic PLA HF @MK3.5 0.6.json | 2 +- .../Prusa Generic PLA HF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PLA HF @MK3.5.json | 2 +- .../filament/Prusa Generic PLA HF @base.json | 2 +- .../Prusa Generic PLA Silk @CORE One 0.6.json | 2 +- .../Prusa Generic PLA Silk @CORE One 0.8.json | 2 +- .../Prusa Generic PLA Silk @CORE One.json | 2 +- .../Prusa Generic PLA Silk @MK4S 0.6.json | 2 +- .../Prusa Generic PLA Silk @MK4S 0.8.json | 2 +- .../Prusa Generic PLA Silk @MK4S.json | 2 +- .../Prusa Generic PLA-CF @MK3.5 0.25.json | 2 +- .../Prusa Generic PLA-CF @MK3.5 0.6.json | 2 +- .../Prusa Generic PLA-CF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PLA-CF @MK3.5.json | 2 +- .../filament/Prusa Generic PLA-CF @base.json | 2 +- .../Prusa Generic PVA @MK3.5 0.25.json | 2 +- .../Prusa Generic PVA @MK3.5 0.6.json | 2 +- .../Prusa Generic PVA @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PVA @MK3.5.json | 2 +- .../filament/Prusa Generic PVA @base.json | 2 +- .../Prusa Generic PVA HF @MK3.5 0.6.json | 2 +- .../Prusa Generic PVA HF @MK3.5 0.8.json | 2 +- .../filament/Prusa Generic PVA HF @MK3.5.json | 2 +- .../filament/Prusa Generic PVA HF @base.json | 2 +- .../Prusa Generic TPU @CORE One 0.6.json | 2 +- .../Prusa Generic TPU @CORE One 0.8.json | 2 +- .../filament/Prusa Generic TPU @CORE One.json | 2 +- .../filament/Prusa Generic TPU @MK3.5.json | 2 +- .../filament/Prusa Generic TPU @MK4S 0.6.json | 2 +- .../filament/Prusa Generic TPU @MK4S 0.8.json | 2 +- .../filament/Prusa Generic TPU @MK4S.json | 2 +- .../filament/Prusa Generic TPU @base.json | 2 +- .../filament/Prusa Generic TPU HF @MK3.5.json | 2 +- .../filament/Prusa Generic TPU HF @base.json | 2 +- .../filament/Prusament ASA @CORE One 0.6.json | 2 +- .../filament/Prusament ASA @CORE One 0.8.json | 2 +- .../Prusament ASA @CORE One HF 0.4.json | 2 +- .../Prusament ASA @CORE One HF 0.5.json | 2 +- .../Prusament ASA @CORE One HF 0.6.json | 2 +- .../Prusament ASA @CORE One HF 0.8.json | 2 +- .../filament/Prusament ASA @CORE One.json | 2 +- .../Prusa/filament/Prusament ASA @XL 5T.json | 2 + .../Prusa/filament/Prusament ASA @XL.json | 2 + .../Prusament PA-CF @CORE One 0.6.json | 2 +- .../Prusament PA-CF @CORE One 0.8.json | 2 +- .../filament/Prusament PA-CF @CORE One.json | 4 +- .../filament/Prusament PA-CF @XL 5T.json | 2 + .../Prusa/filament/Prusament PA-CF @XL.json | 2 + .../Prusament PC Blend @CORE One 0.6.json | 2 +- .../Prusament PC Blend @CORE One 0.8.json | 2 +- .../Prusament PC Blend @CORE One HF 0.4.json | 2 +- .../Prusament PC Blend @CORE One HF 0.5.json | 2 +- .../Prusament PC Blend @CORE One HF 0.6.json | 2 +- .../Prusament PC Blend @CORE One HF 0.8.json | 2 +- .../Prusament PC Blend @CORE One.json | 2 +- .../Prusament PC-CF @CORE One 0.6.json | 2 +- .../Prusament PC-CF @CORE One 0.8.json | 2 +- .../filament/Prusament PC-CF @CORE One.json | 4 +- .../filament/Prusament PC-CF @XL 5T.json | 2 + .../Prusa/filament/Prusament PC-CF @XL.json | 2 + .../Prusament PETG @CORE One 0.6.json | 2 +- .../Prusament PETG @CORE One 0.8.json | 2 +- .../Prusament PETG @CORE One HF 0.4.json | 2 +- .../Prusament PETG @CORE One HF 0.5.json | 2 +- .../Prusament PETG @CORE One HF 0.6.json | 2 +- .../Prusament PETG @CORE One HF 0.8.json | 2 +- .../filament/Prusament PETG @CORE One.json | 2 +- .../Prusa/filament/Prusament PETG @base.json | 2 +- .../filament/Prusament PLA @CORE One 0.6.json | 2 +- .../filament/Prusament PLA @CORE One 0.8.json | 2 +- .../Prusament PLA @CORE One HF 0.4.json | 2 +- .../Prusament PLA @CORE One HF 0.5.json | 2 +- .../Prusament PLA @CORE One HF 0.6.json | 2 +- .../Prusament PLA @CORE One HF 0.8.json | 2 +- .../filament/Prusament PLA @CORE One.json | 2 +- .../Prusa/filament/Prusament PLA @base.json | 2 +- .../filament/Prusament PVB @CORE One 0.6.json | 2 +- .../filament/Prusament PVB @CORE One 0.8.json | 2 +- .../filament/Prusament PVB @CORE One.json | 2 +- .../Prusa/filament/Prusament PVB @XL 5T.json | 2 + .../Prusa/filament/Prusament PVB @XL.json | 2 + .../Prusament rPLA @CORE One 0.6.json | 2 +- .../Prusament rPLA @CORE One 0.8.json | 2 +- .../filament/Prusament rPLA @CORE One.json | 2 +- .../Prusa/filament/Prusament rPLA @base.json | 2 +- .../Prusa/filament/fdm_filament_asa.json | 1 - .../Prusa/filament/fdm_filament_flex.json | 1 - .../Prusa/filament/fdm_filament_pa11cf.json | 1 - .../Prusa/filament/fdm_filament_pccf.json | 1 - .../Prusa/filament/fdm_filament_pvb.json | 1 - .../Qidi/filament/Bambu ABS @0.2 nozzle.json | 2 +- .../Qidi/filament/Bambu ABS @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu ABS @0.8 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu ABS.json | 2 +- .../Qidi/filament/Bambu PETG @0.2 nozzle.json | 2 +- .../Qidi/filament/Bambu PETG @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu PETG @0.8 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu PETG.json | 2 +- .../Qidi/filament/Bambu PLA @0.2 nozzle.json | 2 +- .../Qidi/filament/Bambu PLA @0.6 nozzle.json | 2 +- .../Qidi/filament/Bambu PLA @0.8 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/Bambu PLA.json | 2 +- .../HATCHBOX ABS @Qidi 0.2 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi 0.8 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...ATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX ABS @Qidi.json | 2 +- .../HATCHBOX PETG @Qidi 0.2 nozzle.json | 2 +- .../HATCHBOX PETG @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX PETG @Qidi 0.8 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...TCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX PETG @Qidi.json | 2 +- .../HATCHBOX PLA @Qidi 0.2 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi 0.6 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi 0.8 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...ATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/HATCHBOX PLA @Qidi.json | 2 +- .../Overture ABS @Qidi 0.2 nozzle.json | 2 +- .../Overture ABS @Qidi 0.6 nozzle.json | 2 +- .../Overture ABS @Qidi 0.8 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Overture ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...verture ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Overture ABS @Qidi.json | 2 +- .../Overture PLA @Qidi 0.2 nozzle.json | 2 +- .../Overture PLA @Qidi 0.6 nozzle.json | 2 +- .../Overture PLA @Qidi 0.8 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Overture PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...verture PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Overture PLA @Qidi.json | 2 +- .../PolyLite ABS @Qidi 0.2 nozzle.json | 2 +- .../PolyLite ABS @Qidi 0.6 nozzle.json | 2 +- .../PolyLite ABS @Qidi 0.8 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...olyLite ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/PolyLite ABS @Qidi.json | 2 +- .../PolyLite PLA @Qidi 0.2 nozzle.json | 2 +- .../PolyLite PLA @Qidi 0.6 nozzle.json | 2 +- .../PolyLite PLA @Qidi 0.8 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...olyLite PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/PolyLite PLA @Qidi.json | 2 +- .../Qidi/filament/Q2/Bambu ABS @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/Bambu PETG @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu PETG @Q2C.json | 2 +- .../Qidi/filament/Q2/Bambu PLA @Q2.json | 2 +- .../Qidi/filament/Q2/Bambu PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic PLA+ @Q2.json | 2 +- .../Qidi/filament/Q2/Generic PLA+ @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX ABS @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PETG @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PETG @Q2C.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PLA @Q2.json | 2 +- .../Qidi/filament/Q2/HATCHBOX PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/Overture ABS @Q2.json | 2 +- .../Qidi/filament/Q2/Overture ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/Overture PLA @Q2.json | 2 +- .../Qidi/filament/Q2/Overture PLA @Q2C.json | 2 +- .../Qidi/filament/Q2/PolyLite ABS @Q2.json | 2 +- .../Qidi/filament/Q2/PolyLite ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/PolyLite PLA @Q2.json | 2 +- .../Qidi/filament/Q2/PolyLite PLA @Q2C.json | 2 +- .../QIDI ABS Odorless @0.2 nozzle.json | 2 +- .../QIDI ABS Odorless @0.6 nozzle.json | 2 +- .../QIDI ABS Odorless @0.8 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...BS Odorless @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI ABS Odorless.json | 2 +- .../filament/QIDI ABS Rapido 0.2 nozzle.json | 2 +- .../filament/QIDI ABS Rapido 0.6 nozzle.json | 2 +- .../filament/QIDI ABS Rapido 0.8 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.2 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.6 nozzle.json | 2 +- .../QIDI ABS Rapido Metal @0.8 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI ABS Rapido Metal.json | 2 +- .../Qidi/filament/QIDI ABS Rapido.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...DI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF10.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...DI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ABS-GF25.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Max 3 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json | 2 +- .../QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json | 2 +- ...QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json | 2 +- ...IDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI ASA.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PA-Ultra.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PA12-CF.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PAHT-CF.json | 2 +- .../filament/QIDI PAHT-GF @0.6 nozzle.json | 2 +- .../filament/QIDI PAHT-GF @0.8 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PAHT-GF.json | 2 +- ...QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PET-CF.json | 2 +- .../filament/QIDI PET-GF @0.6 nozzle.json | 2 +- .../filament/QIDI PET-GF @0.8 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PET-GF.json | 2 +- .../filament/QIDI PETG Basic @0.2 nozzle.json | 2 +- .../filament/QIDI PETG Basic @0.6 nozzle.json | 2 +- .../filament/QIDI PETG Basic @0.8 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Basic.json | 2 +- .../QIDI PETG Rapido @0.2 nozzle.json | 2 +- .../QIDI PETG Rapido @0.6 nozzle.json | 2 +- .../QIDI PETG Rapido @0.8 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...I PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Rapido.json | 2 +- .../filament/QIDI PETG Tough 0.2 nozzle.json | 2 +- .../filament/QIDI PETG Tough 0.6 nozzle.json | 2 +- .../filament/QIDI PETG Tough 0.8 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Tough.json | 2 +- .../QIDI PETG Translucent @0.2 nozzle.json | 2 +- .../QIDI PETG Translucent @0.6 nozzle.json | 2 +- .../QIDI PETG Translucent @0.8 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...G Translucent @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PETG Translucent.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PETG-CF.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PETG-GF.json | 2 +- .../filament/QIDI PLA Basic @0.2 nozzle.json | 2 +- .../filament/QIDI PLA Basic @0.6 nozzle.json | 2 +- .../filament/QIDI PLA Basic @0.8 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...IDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Basic.json | 2 +- .../QIDI PLA Matte Basic @0.2 nozzle.json | 2 +- .../QIDI PLA Matte Basic @0.6 nozzle.json | 2 +- .../QIDI PLA Matte Basic @0.8 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...A Matte Basic @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Matte Basic.json | 2 +- .../filament/QIDI PLA Rapido 0.2 nozzle.json | 2 +- .../filament/QIDI PLA Rapido 0.8 nozzle.json | 2 +- .../filament/QIDI PLA Rapido @0.6 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...DI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.2 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.6 nozzle.json | 2 +- .../QIDI PLA Rapido Matte @0.8 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Matte.json | 2 +- .../QIDI PLA Rapido Metal @0.2 nozzle.json | 2 +- .../QIDI PLA Rapido Metal @0.6 nozzle.json | 2 +- .../QIDI PLA Rapido Metal @0.8 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Metal.json | 2 +- .../QIDI PLA Rapido Silk @0.6 nozzle.json | 2 +- ...A Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...A Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Qidi/filament/QIDI PLA Rapido Silk.json | 2 +- .../Qidi/filament/QIDI PLA Rapido.json | 2 +- .../filament/QIDI PLA-CF @0.6 nozzle.json | 2 +- .../filament/QIDI PLA-CF @0.8 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../filament/QIDI PPS-CF @0.6 nozzle.json | 2 +- .../filament/QIDI PPS-CF @0.8 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PPS-CF.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI Support For PAHT.json | 2 +- .../filament/QIDI Support For PET-PA.json | 2 +- ...QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI TPU-Aero.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI UltraPA-CF25.json | 2 +- .../QIDI WOOD Rapido @0.6 nozzle.json | 2 +- .../QIDI WOOD Rapido @0.8 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...I WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/QIDI WOOD Rapido.json | 2 +- ...Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...di ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../profiles/Qidi/filament/Qidi ASA-Aero.json | 2 +- ...i Generic ABS @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...i Generic ABS @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...i Generic ABS @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...i Generic ABS @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... Generic ABS @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...Generic ABS @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...Generic ABS @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Generic ABS @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Generic ABS @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Generic ABS @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...eneric ABS @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic ABS.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...i Generic ASA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... Generic ASA @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Generic ASA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...eneric ASA @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic ASA.json | 2 +- .../Qidi/filament/Qidi Generic PA-CF.json | 2 +- .../Qidi/filament/Qidi Generic PA.json | 2 +- .../filament/Qidi Generic PC @0.2 nozzle.json | 2 +- .../filament/Qidi Generic PC @0.8 nozzle.json | 2 +- ...di Generic PC @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...di Generic PC @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...di Generic PC @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...di Generic PC @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... Generic PC @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... Generic PC @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... Generic PC @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... Generic PC @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic PC.json | 2 +- ... Generic PETG @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Generic PETG @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Generic PETG @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Generic PETG @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...Generic PETG @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...eneric PETG @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...neric PETG @Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic PETG-CF.json | 2 +- .../Qidi/filament/Qidi Generic PETG.json | 2 +- ...i Generic PLA @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ...i Generic PLA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...i Generic PLA @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...i Generic PLA @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ... Generic PLA @Qidi X-Max 3 0.2 nozzle.json | 2 +- ... Generic PLA @Qidi X-Max 3 0.6 nozzle.json | 2 +- ... Generic PLA @Qidi X-Max 3 0.8 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 3 0.6 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 3 0.8 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Generic PLA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...eneric PLA @Qidi X-Smart 3 0.2 nozzle.json | 2 +- ...eneric PLA @Qidi X-Smart 3 0.6 nozzle.json | 2 +- ...eneric PLA @Qidi X-Smart 3 0.8 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... High Speed @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...eric PLA Silk @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...ic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic PLA Silk.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ... Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json | 2 +- ...Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.2 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.6 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 3 0.8 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...eneric PLA+ @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.2 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.6 nozzle.json | 2 +- ...neric PLA+ @Qidi X-Smart 3 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic PLA+.json | 2 +- .../Qidi/filament/Qidi Generic PLA-CF.json | 2 +- .../Qidi/filament/Qidi Generic PLA.json | 2 +- .../Qidi/filament/Qidi Generic PVA.json | 2 +- ...neric TPU 95A @Qidi Q1 Pro 0.8 nozzle.json | 2 +- ...ric TPU 95A @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic TPU 95A.json | 2 +- ...i Generic TPU @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...Generic TPU @Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../Qidi/filament/Qidi Generic TPU.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json | 2 +- ...idi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi PC-ABS-FR.json | 2 +- .../profiles/Qidi/filament/Qidi PLA-CF.json | 2 +- ...di TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json | 2 +- ...di TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../Qidi/filament/Qidi TPU 95A-HF.json | 2 +- .../Qidi/filament/Tinmorry PETG-ECO.json | 2 +- .../Qidi/filament/X4/Bambu ABS @X-Max 4.json | 2 +- .../Qidi/filament/X4/Bambu PETG @X-Max 4.json | 2 +- .../Qidi/filament/X4/Bambu PLA @X-Max 4.json | 2 +- .../filament/X4/Generic PLA+ @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX ABS @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX PETG @X-Max 4.json | 2 +- .../filament/X4/HATCHBOX PLA @X-Max 4.json | 2 +- .../filament/X4/Overture ABS @X-Max 4.json | 2 +- .../filament/X4/Overture PLA @X-Max 4.json | 2 +- .../filament/X4/PolyLite ABS @X-Max 4.json | 2 +- .../filament/X4/PolyLite PLA @X-Max 4.json | 2 +- .../filament/Generic ABS @E3NG v1.2S.json | 2 +- .../filament/Generic ASA @E3NG v1.2S.json | 2 +- .../filament/Generic PCCF @E3NG v1.2S.json | 2 +- .../filament/Generic PETG @E3NG v1.2S.json | 2 +- .../filament/Generic PLA @E3NG v1.2S.json | 2 +- .../filament/Generic TPU @E3NG v1.2S.json | 2 +- .../RH3D/filament/fdm_filament_abs.json | 1 - .../RH3D/filament/fdm_filament_asa.json | 1 - .../RH3D/filament/fdm_filament_pccf.json | 1 - .../RH3D/filament/fdm_filament_petg.json | 1 - .../RH3D/filament/fdm_filament_pla.json | 1 - .../RH3D/filament/fdm_filament_tpu.json | 1 - .../Ratrig/filament/RatRig BigNozzle ABS.json | 2 +- .../Ratrig/filament/RatRig BigNozzle ASA.json | 2 +- .../filament/RatRig BigNozzle PCTG.json | 2 +- .../filament/RatRig BigNozzle PETG.json | 2 +- .../Ratrig/filament/RatRig BigNozzle PLA.json | 2 +- .../Ratrig/filament/RatRig BigNozzle TPU.json | 2 +- .../Ratrig/filament/RatRig Generic ABS.json | 2 +- .../Ratrig/filament/RatRig Generic ASA.json | 2 +- .../Ratrig/filament/RatRig Generic PA-CF.json | 2 +- .../Ratrig/filament/RatRig Generic PA.json | 2 +- .../Ratrig/filament/RatRig Generic PC.json | 2 +- .../Ratrig/filament/RatRig Generic PCTG.json | 2 +- .../Ratrig/filament/RatRig Generic PETG.json | 2 +- .../filament/RatRig Generic PLA-CF.json | 2 +- .../Ratrig/filament/RatRig Generic PLA.json | 2 +- .../Ratrig/filament/RatRig Generic PVA.json | 2 +- .../Ratrig/filament/RatRig Generic TPU.json | 2 +- .../Ratrig/filament/RatRig PunkFil ABS.json | 2 +- .../filament/RatRig PunkFil PETG CF.json | 2 +- .../Ratrig/filament/RatRig PunkFil PETG.json | 2 +- .../SecKit/filament/SecKit Generic ABS.json | 2 +- .../SecKit/filament/SecKit Generic ASA.json | 2 +- .../SecKit/filament/SecKit Generic PA-CF.json | 2 +- .../SecKit/filament/SecKit Generic PA.json | 2 +- .../SecKit/filament/SecKit Generic PC.json | 2 +- .../SecKit/filament/SecKit Generic PETG.json | 2 +- .../filament/SecKit Generic PLA-CF.json | 2 +- .../SecKit/filament/SecKit Generic PLA.json | 2 +- .../SecKit/filament/SecKit Generic PVA.json | 2 +- .../SecKit/filament/SecKit Generic TPU.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_ABS.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_PA-CF.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_PETG-CF.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_PETG.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_PLA.json | 2 +- .../SeeMeCNC/filament/SeeMeCNC_TPU.json | 2 +- .../Fiberon ASA-CF08 @Snapmaker U1 base.json | 2 +- .../Fiberon PA12-CF10 @Snapmaker U1 base.json | 2 +- .../Fiberon PA6-CF20 @Snapmaker U1 base.json | 2 +- .../Fiberon PA612-ESD @Snapmaker U1 base.json | 2 +- .../Fiberon PETG-ESD @Snapmaker U1 base.json | 2 +- .../Fiberon PPS-GF20 @Snapmaker U1 base.json | 2 +- .../Panchroma CoPE @Snapmaker U1 base.json | 2 +- .../Panchroma PLA @Snapmaker U1 base.json | 2 +- ...roma PLA Celestial @Snapmaker U1 base.json | 2 +- ...nchroma PLA Galaxy @Snapmaker U1 base.json | 2 +- ...Panchroma PLA Glow @Snapmaker U1 base.json | 2 +- ...hroma PLA Luminous @Snapmaker U1 base.json | 2 +- ...nchroma PLA Marble @Snapmaker U1 base.json | 2 +- ...anchroma PLA Matte @Snapmaker U1 base.json | 2 +- ...hroma PLA Metallic @Snapmaker U1 base.json | 2 +- ...Panchroma PLA Neon @Snapmaker U1 base.json | 2 +- ...anchroma PLA Satin @Snapmaker U1 base.json | 2 +- ...Panchroma PLA Silk @Snapmaker U1 base.json | 2 +- ...roma PLA Starlight @Snapmaker U1 base.json | 2 +- ...oma PLA Temp Shift @Snapmaker U1 base.json | 2 +- ...ma PLA Translucent @Snapmaker U1 base.json | 2 +- ...hroma PLA UV Shift @Snapmaker U1 base.json | 2 +- .../PolyLite CosPLA @Snapmaker U1 base.json | 2 +- .../PolyLite Dual PLA @0.2 nozzle.json | 1 + .../PolyLite J1 PLA @0.2 nozzle.json | 1 + .../filament/Polymaker/PolyLite J1 PLA.json | 1 + .../PolyLite PETG @Snapmaker U1 base.json | 2 +- ...e PETG Translucent @Snapmaker U1 base.json | 2 +- .../PolyLite PLA @Snapmaker U1 base.json | 2 +- .../Polymaker/PolyLite PLA @base.json | 2 +- ...olyLite PLA Galaxy @Snapmaker U1 base.json | 2 +- .../PolyLite PLA Glow @Snapmaker U1 base.json | 2 +- ...yLite PLA Luminous @Snapmaker U1 base.json | 2 +- .../PolyLite PLA Neon @Snapmaker U1 base.json | 2 +- .../PolyLite PLA Pro @Snapmaker U1 base.json | 2 +- ...e PLA Pro Metallic @Snapmaker U1 base.json | 2 +- ...Lite PLA Starlight @Snapmaker U1 base.json | 2 +- ...te PLA Translucent @Snapmaker U1 base.json | 2 +- .../PolyTerra Dual PLA @0.2 nozzle.json | 2 +- .../PolyTerra J1 PLA @0.2 nozzle.json | 2 +- .../filament/Polymaker/PolyTerra J1 PLA.json | 2 +- .../PolyTerra PLA @Snapmaker U1 base.json | 2 +- ...lyTerra PLA Marble @Snapmaker U1 base.json | 2 +- .../PolyTerra PLA+ @Snapmaker U1 base.json | 2 +- .../Polymaker HT-PLA @Snapmaker U1 base.json | 2 +- ...olymaker HT-PLA-GF @Snapmaker U1 base.json | 2 +- .../Polymaker PETG @Snapmaker U1 base.json | 2 +- ...ymaker PETG Galaxy @Snapmaker U1 base.json | 2 +- .../Polymaker PLA @Snapmaker U1 base.json | 2 +- .../Polymaker PLA Pro @Snapmaker U1 base.json | 2 +- ...r PLA Pro Metallic @Snapmaker U1 base.json | 2 +- .../filament/Snapmaker ABS @U1 base.json | 2 +- .../filament/Snapmaker ABS @base.json | 2 +- .../filament/Snapmaker ABS Benchy @U1.json | 2 +- .../filament/Snapmaker ASA @U1 base.json | 2 +- .../filament/Snapmaker ASA @base.json | 2 +- .../filament/Snapmaker Dual ABS @base.json | 2 +- .../filament/Snapmaker Dual ABS Benchy.json | 2 +- .../filament/Snapmaker Dual ASA @base.json | 2 +- .../Snapmaker Dual Breakaway @base.json | 2 +- .../filament/Snapmaker Dual PA-CF @base.json | 2 +- .../filament/Snapmaker Dual PET @base.json | 2 +- .../filament/Snapmaker Dual PETG @base.json | 2 +- .../Snapmaker Dual PETG-CF @base.json | 2 +- .../filament/Snapmaker Dual PLA @base.json | 2 +- .../Snapmaker Dual PLA Eco @base.json | 2 +- .../Snapmaker Dual PLA Matte @base.json | 2 +- .../Snapmaker Dual PLA Metal @base.json | 2 +- .../Snapmaker Dual PLA Silk @base.json | 2 +- .../filament/Snapmaker Dual PLA-CF @base.json | 2 +- .../filament/Snapmaker Dual PVA @base.json | 2 +- .../filament/Snapmaker Dual TPE.json | 2 +- .../filament/Snapmaker Dual TPU @base.json | 2 +- .../Snapmaker Dual TPU High-Flow.json | 2 +- .../filament/Snapmaker J1 ABS @base.json | 2 +- .../filament/Snapmaker J1 ABS Benchy.json | 2 +- .../filament/Snapmaker J1 ASA @base.json | 2 +- .../Snapmaker J1 Breakaway @base.json | 2 +- .../filament/Snapmaker J1 PA-CF @base.json | 2 +- .../filament/Snapmaker J1 PET @base.json | 2 +- .../filament/Snapmaker J1 PETG @base.json | 2 +- .../filament/Snapmaker J1 PETG-CF @base.json | 2 +- .../filament/Snapmaker J1 PLA @base.json | 2 +- .../filament/Snapmaker J1 PLA Eco @base.json | 2 +- .../Snapmaker J1 PLA Matte @base.json | 2 +- .../Snapmaker J1 PLA Metal @base.json | 2 +- .../filament/Snapmaker J1 PLA Silk @base.json | 2 +- .../filament/Snapmaker J1 PLA-CF @base.json | 2 +- .../filament/Snapmaker J1 PVA @base.json | 2 +- .../Snapmaker/filament/Snapmaker J1 TPE.json | 2 +- .../filament/Snapmaker J1 TPU @base.json | 2 +- .../filament/Snapmaker J1 TPU High-Flow.json | 2 +- .../filament/Snapmaker PA-CF @U1 base.json | 2 +- .../filament/Snapmaker PA-CF @base.json | 2 +- .../filament/Snapmaker PET @Dual.json | 2 +- .../filament/Snapmaker PET @U1 base.json | 2 +- .../filament/Snapmaker PET @base.json | 2 +- .../filament/Snapmaker PETG @U1 base.json | 2 +- .../filament/Snapmaker PETG @base.json | 2 +- .../filament/Snapmaker PETG-CF @U1 base.json | 2 +- .../filament/Snapmaker PETG-CF @base.json | 2 +- .../filament/Snapmaker PLA @U1 base.json | 2 +- .../filament/Snapmaker PLA @base.json | 2 +- .../filament/Snapmaker PLA Eco @U1 base.json | 2 +- .../filament/Snapmaker PLA Eco @base.json | 2 +- .../filament/Snapmaker PLA Lite @U1 base.json | 2 +- .../Snapmaker PLA Matte @U1 base.json | 2 +- .../filament/Snapmaker PLA Matte @U1.json | 2 +- .../Snapmaker PLA Metal @U1 base.json | 2 +- .../filament/Snapmaker PLA Silk @U1 base.json | 2 +- .../filament/Snapmaker PLA Silk @base.json | 2 +- .../Snapmaker PLA SnapSpeed @U1 base.json | 2 +- .../filament/Snapmaker PLA-CF @U1 base.json | 2 +- .../filament/Snapmaker PLA-CF @base.json | 2 +- .../filament/Snapmaker PVA @U1 base.json | 2 +- .../filament/Snapmaker PVA @base.json | 2 +- .../Snapmaker/filament/Snapmaker TPE @U1.json | 2 +- .../Snapmaker/filament/Snapmaker TPE.json | 2 +- .../filament/Snapmaker TPU 95A @U1 base.json | 2 +- .../filament/Snapmaker TPU @U1 base.json | 2 +- .../filament/Snapmaker TPU @base.json | 2 +- .../filament/Snapmaker TPU High-Flow @U1.json | 2 +- .../Generic PLA Silk @Sovol SV08 MAX.json | 2 +- .../Polymaker PETG @Sovol SV08 MAX.json | 2 +- .../filament/SUNLU PETG @Sovol SV08 MAX.json | 2 +- .../Sovol/filament/Sovol SV06 ACE ABS.json | 2 +- .../Sovol/filament/Sovol SV06 ACE PETG.json | 2 +- .../Sovol/filament/Sovol SV06 ACE PLA.json | 2 +- .../Sovol/filament/Sovol SV06 ACE TPU.json | 2 +- .../filament/Sovol SV06 Plus ACE ABS.json | 2 +- .../filament/Sovol SV06 Plus ACE PETG.json | 2 +- .../filament/Sovol SV06 Plus ACE PLA.json | 2 +- .../filament/Sovol SV06 Plus ACE TPU.json | 2 +- .../Sovol/filament/Sovol SV07 PLA.json | 2 +- .../Sovol/filament/Sovol SV08 ABS.json | 2 +- .../Sovol/filament/Sovol SV08 PETG.json | 2 +- .../Sovol SV08 PLA @SV08 0.2 nozzle.json | 2 +- .../Sovol/filament/Sovol SV08 PLA.json | 2 +- .../Sovol/filament/Sovol SV08 TPU.json | 2 +- .../Sovol/filament/Sovol Zero ABS.json | 2 +- .../Sovol/filament/Sovol Zero PC.json | 2 +- .../filament/Sovol Zero PETG HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PETG.json | 2 +- .../Sovol Zero PLA Basic HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PLA Basic.json | 2 +- .../Sovol Zero PLA Silk HS Nozzle.json | 2 +- .../Sovol/filament/Sovol Zero PLA Silk.json | 2 +- .../Sovol/filament/Sovol Zero TPU.json | 2 +- .../Tiertime/filament/Tiertime ABS.json | 2 +- .../Tiertime/filament/Tiertime ABS@300HS.json | 2 +- .../Tiertime/filament/Tiertime ASA.json | 2 +- .../Tiertime/filament/Tiertime ASA@300HS.json | 2 +- .../filament/Tiertime Generic ABS.json | 2 +- .../filament/Tiertime Generic ABS@300HS.json | 2 +- .../filament/Tiertime Generic ASA.json | 2 +- .../filament/Tiertime Generic ASA@300HS.json | 2 +- .../filament/Tiertime Generic BVOH.json | 2 +- .../filament/Tiertime Generic BVOH@300HS.json | 2 +- .../filament/Tiertime Generic EVA.json | 2 +- .../filament/Tiertime Generic EVA@300HS.json | 2 +- .../filament/Tiertime Generic HIPS.json | 2 +- .../filament/Tiertime Generic HIPS@300HS.json | 2 +- .../filament/Tiertime Generic PA-CF.json | 2 +- .../Tiertime Generic PA-CF@300HS.json | 2 +- .../filament/Tiertime Generic PA.json | 2 +- .../filament/Tiertime Generic PA@300HS.json | 2 +- .../filament/Tiertime Generic PC.json | 2 +- .../filament/Tiertime Generic PC@300HS.json | 2 +- .../filament/Tiertime Generic PCTG.json | 2 +- .../filament/Tiertime Generic PCTG@300HS.json | 2 +- .../filament/Tiertime Generic PE-CF.json | 2 +- .../Tiertime Generic PE-CF@300HS.json | 2 +- .../filament/Tiertime Generic PE.json | 2 +- .../filament/Tiertime Generic PE@300HS.json | 2 +- .../filament/Tiertime Generic PETG-CF.json | 2 +- .../Tiertime Generic PETG-CF@300HS.json | 2 +- .../filament/Tiertime Generic PETG.json | 2 +- .../filament/Tiertime Generic PETG@300HS.json | 2 +- .../filament/Tiertime Generic PHA.json | 2 +- .../filament/Tiertime Generic PHA@300HS.json | 2 +- .../Tiertime Generic PLA High Speed.json | 2 +- ...Tiertime Generic PLA High Speed@300HS.json | 2 +- .../filament/Tiertime Generic PLA Silk.json | 2 +- .../Tiertime Generic PLA Silk@300HS.json | 2 +- .../filament/Tiertime Generic PLA-CF.json | 2 +- .../Tiertime Generic PLA-CF@300HS.json | 2 +- .../filament/Tiertime Generic PLA.json | 2 +- .../filament/Tiertime Generic PLA@300HS.json | 2 +- .../filament/Tiertime Generic PP-CF.json | 2 +- .../Tiertime Generic PP-CF@300HS.json | 2 +- .../filament/Tiertime Generic PP-GF.json | 2 +- .../Tiertime Generic PP-GF@300HS.json | 2 +- .../filament/Tiertime Generic PP.json | 2 +- .../filament/Tiertime Generic PP@300HS.json | 2 +- .../filament/Tiertime Generic PPA-CF.json | 2 +- .../Tiertime Generic PPA-CF@300HS.json | 2 +- .../filament/Tiertime Generic PPA-GF.json | 2 +- .../Tiertime Generic PPA-GF@300HS.json | 2 +- .../filament/Tiertime Generic PPS-CF.json | 2 +- .../Tiertime Generic PPS-CF@300HS.json | 2 +- .../filament/Tiertime Generic PPS.json | 2 +- .../filament/Tiertime Generic PPS@300HS.json | 2 +- .../filament/Tiertime Generic PVA.json | 2 +- .../filament/Tiertime Generic PVA@300HS.json | 2 +- .../filament/Tiertime Generic SBS.json | 2 +- .../filament/Tiertime Generic SBS@300HS.json | 2 +- .../filament/Tiertime Generic TPU.json | 2 +- .../filament/Tiertime Generic TPU@300HS.json | 2 +- .../Tiertime/filament/Tiertime PA6-CF.json | 2 +- .../filament/Tiertime PA6-CF@300HS.json | 2 +- .../Tiertime/filament/Tiertime PC.json | 2 +- .../Tiertime/filament/Tiertime PC@300HS.json | 2 +- .../Tiertime/filament/Tiertime PET-CF.json | 2 +- .../filament/Tiertime PET-CF@300HS.json | 2 +- .../Tiertime/filament/Tiertime PETG.json | 2 +- .../filament/Tiertime PETG@300HS.json | 2 +- .../Tiertime/filament/Tiertime PLA-CF.json | 2 +- .../filament/Tiertime PLA-CF@300HS.json | 2 +- .../Tiertime/filament/Tiertime PLA.json | 2 +- .../Tiertime/filament/Tiertime PLA@300HS.json | 2 +- .../Tiertime/filament/Tiertime PVA.json | 2 +- .../Tiertime/filament/Tiertime PVA@300HS.json | 2 +- .../Tiertime/filament/Tiertime TPU 95A.json | 2 +- .../filament/Tiertime TPU 95A@300HS.json | 2 +- .../TwoTrees Generic 95A TPU @SK1.json | 2 +- .../TwoTrees Generic HS PLA @SK1.json | 2 +- .../filament/PA6 CF20 (Performance).json | 2 +- .../filament/PETG ESD (Performance).json | 2 +- .../filament/PPS Carbone (Performance).json | 2 +- .../Volumic ABS Ultra Performance.json | 2 +- .../Volumic/filament/Volumic ABS Ultra.json | 2 +- .../Volumic ASA Ultra Performance.json | 2 +- .../Volumic/filament/Volumic ASA Ultra.json | 2 +- .../Volumic FLEX93 Ultra Performance.json | 2 +- .../filament/Volumic FLEX93 Ultra.json | 2 +- .../Volumic NYLON Ultra Performance.json | 2 +- .../Volumic/filament/Volumic NYLON Ultra.json | 2 +- .../filament/Volumic PC Performance.json | 2 +- .../profiles/Volumic/filament/Volumic PC.json | 2 +- .../Volumic PCTG Ultra (Performance).json | 2 +- .../Volumic PETG Ultra Performance.json | 2 +- ...olumic PETG Ultra carbone Performance.json | 2 +- .../filament/Volumic PETG Ultra carbone.json | 2 +- .../Volumic/filament/Volumic PETG Ultra.json | 2 +- .../Volumic PLA Ultra Performance.json | 2 +- .../Volumic/filament/Volumic PLA Ultra.json | 2 +- .../Volumic PP Ultra Performance.json | 2 +- .../Volumic/filament/Volumic PP Ultra.json | 2 +- .../filament/Volumic PVA Performance.json | 2 +- .../Volumic/filament/Volumic PVA.json | 2 +- .../Volumic UNIVERSAL Ultra Performance.json | 2 +- .../filament/Volumic UNIVERSAL Ultra.json | 2 +- .../profiles/Volumic/filament/desactive.json | 2 +- .../Vzbot/filament/Vzbot Generic ABS.json | 2 +- .../Vzbot/filament/Vzbot Generic ASA.json | 2 +- .../Vzbot/filament/Vzbot Generic PA-CF.json | 2 +- .../Vzbot/filament/Vzbot Generic PA.json | 2 +- .../Vzbot/filament/Vzbot Generic PC.json | 2 +- .../Vzbot/filament/Vzbot Generic PETG.json | 2 +- .../Vzbot/filament/Vzbot Generic PLA-CF.json | 2 +- .../Vzbot/filament/Vzbot Generic PLA.json | 2 +- .../Vzbot/filament/Vzbot Generic PVA.json | 2 +- .../Vzbot/filament/Vzbot Generic TPU.json | 2 +- .../Wanhao France/filament/YUMI PETG.json | 2 +- .../filament/YUMI PLA Bowden.json | 2 +- .../filament/YUMI PLA Direct Drive.json | 2 +- .../filament/Yumi Generic PETG.json | 2 +- .../filament/Yumi Generic PLA.json | 2 +- .../WonderMaker/filament/WonderMaker ABS.json | 2 +- .../WonderMaker/filament/WonderMaker ASA.json | 2 +- .../filament/WonderMaker PET-CF.json | 2 +- .../filament/WonderMaker PETG Basic.json | 2 +- .../filament/WonderMaker PLA Basic.json | 2 +- .../filament/WonderMaker PLA Marble.json | 2 +- .../filament/WonderMaker PLA Matte.json | 2 +- .../filament/WonderMaker PLA Metal.json | 2 +- .../filament/WonderMaker PLA Silk.json | 2 +- .../filament/WonderMaker PLA Wood.json | 2 +- .../WonderMaker/filament/WonderMaker PVA.json | 2 +- .../filament/WonderMaker TPU 95A.json | 2 +- .../Generic ABS @Z-Bolt 0.4 nozzle.json | 2 +- .../Generic ABS @Z-Bolt 0.6 nozzle.json | 2 +- .../Generic ABS @Z-Bolt 0.8 nozzle.json | 2 +- .../filament/Generic ABS @Z-Bolt Base.json | 2 +- .../Generic ABS HT @Z-Bolt 0.4 nozzle.json | 2 +- .../Generic ABS HT @Z-Bolt 0.6 nozzle.json | 2 +- .../Generic ABS HT @Z-Bolt 0.8 nozzle.json | 2 +- .../filament/Generic ABS HT @Z-Bolt Base.json | 2 +- .../Generic PA @Z-Bolt 0.4 nozzle.json | 2 +- .../Generic PA @Z-Bolt 0.6 nozzle.json | 2 +- .../Generic PA @Z-Bolt 0.8 nozzle.json | 2 +- .../filament/Generic PA @Z-Bolt Base.json | 2 +- .../Generic PETG @Z-Bolt 0.4 nozzle.json | 2 +- .../Generic PETG @Z-Bolt 0.6 nozzle.json | 2 +- .../Generic PETG @Z-Bolt 0.8 nozzle.json | 2 +- .../filament/Generic PETG @Z-Bolt Base.json | 2 +- .../Generic PLA @Z-Bolt 0.4 nozzle.json | 2 +- .../Generic PLA @Z-Bolt 0.6 nozzle.json | 2 +- .../Generic PLA @Z-Bolt 0.8 nozzle.json | 2 +- .../filament/Generic PLA @Z-Bolt Base.json | 2 +- ...three PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json | 2 +- ...three PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json | 2 +- ...rauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json | 2 +- ...rint ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json | 2 +- ... Polymax black P1 @iQ TiQ2 0.4 Nozzle.json | 2 +- .../VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json | 2 +- .../re3D Greengate rPETG @0.8 nozzle.json | 2 +- .../re3D Greengate rPETG @1.75 nozzle.json | 2 +- .../re3D/filament/re3D Greengate rPETG.json | 2 +- .../re3D/filament/re3D PC @0.4 nozzle.json | 2 +- .../re3D/filament/re3D PC @0.8 nozzle.json | 2 +- resources/profiles/re3D/filament/re3D PC.json | 2 +- .../re3D/filament/re3D PETG @0.4 nozzle.json | 2 +- .../re3D/filament/re3D PETG @0.8 nozzle.json | 2 +- .../profiles/re3D/filament/re3D PETG.json | 2 +- .../re3D/filament/re3D PLA @0.4 nozzle.json | 2 +- .../re3D/filament/re3D PLA @0.8 nozzle.json | 2 +- .../profiles/re3D/filament/re3D PLA.json | 2 +- .../re3D/filament/re3D rPP @0.8 nozzle.json | 2 +- .../re3D/filament/re3D rPP @1.75 nozzle.json | 2 +- .../profiles/re3D/filament/re3D rPP.json | 2 +- resources/profiles/retired_filament_ids.json | 2195 +- scripts/assign_filament_ids.py | 90 +- scripts/filament_id_snapshot.json | 16851 +++++++--------- scripts/tests/test_filament_id.py | 80 + 2663 files changed, 12019 insertions(+), 12498 deletions(-) diff --git a/doc/developer-reference/filament_id.md b/doc/developer-reference/filament_id.md index 377c390422..c17e4e44e4 100644 --- a/doc/developer-reference/filament_id.md +++ b/doc/developer-reference/filament_id.md @@ -112,9 +112,14 @@ python scripts/assign_filament_ids.py --check # 4. verify — the sam `--mint "filament_vendor/filament_type/family_name"` prints the id a triple would mint without touching anything. The default run is idempotent and never rewrites a valid existing id. Maintenance modes (normally only used by id migrations): `--remint VENDOR` re-derives a -vendor's declared ids from their triples, `--drop-redundant-ids VENDOR` deletes declarations -that merely re-declare an inherited OFL id, and `--add-hint "OLD=NEW"` records a cross-island -succession hint. +vendor's declared ids from their triples (a declaration already equal to a salt iteration +of its own triple is conformant and left alone — deliberate salt splits keeping two +presets of one product apart for per-printer AMS matching survive), +`--drop-redundant-ids VENDOR` deletes declarations +that merely re-declare an inherited OFL id, `--add-hint "OLD=NEW"` records a cross-island +succession hint, and `--retire "OLD=NEW"` records succession for a shipped non-island id +that vanished while another declarer kept it alive (lineage the automatic claim vote can no +longer see). 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 @@ -141,7 +146,8 @@ calibration history, filament-id preset lookup): a live preset always wins first installs resolve `GF*` natively and behavior is unchanged wherever the raw id still exists. This is what makes identity-driven re-mints (structure rule 5) safe: the old id keeps resolving to the family's current preset instead of degrading to a `Generic ` fallback. -The file is append-only and maintained exclusively by `--update-snapshot` / `--add-hint`. +The file is append-only and maintained exclusively by `--update-snapshot` / `--add-hint` / +`--retire`. ## How CI enforces this diff --git a/resources/profiles/Afinia/filament/Afinia ABS+.json b/resources/profiles/Afinia/filament/Afinia ABS+.json index 74308bad42..ab908a0583 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS+.json +++ b/resources/profiles/Afinia/filament/Afinia ABS+.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00", + "filament_id": "OFLfywkp", "setting_id": "i5tf9foHnTVNmA2r", "name": "Afinia ABS+", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json index d480c574c0..77fc0deee9 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFYG2Gfy", + "filament_id": "OFLfywkp", "setting_id": "wAJTMxtCY7EoavRi", "name": "Afinia ABS+@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia ABS.json b/resources/profiles/Afinia/filament/Afinia ABS.json index d51254c1b9..31ad94602c 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00", + "filament_id": "OFV5wEMe", "setting_id": "LhDHvMepbh8ecfQT", "name": "Afinia ABS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia ABS@HS.json b/resources/profiles/Afinia/filament/Afinia ABS@HS.json index 90c4f9610a..e905e002bd 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS@HS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFV5wEMe", "setting_id": "qCDnb2iBaz4hd4vX", "name": "Afinia ABS@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia PLA.json b/resources/profiles/Afinia/filament/Afinia PLA.json index c04d368e42..bca3dd518f 100644 --- a/resources/profiles/Afinia/filament/Afinia PLA.json +++ b/resources/profiles/Afinia/filament/Afinia PLA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00", + "filament_id": "OF9HCdyQ", "setting_id": "1qEFsay7kjYIUkpG", "name": "Afinia PLA", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia PLA@HS.json b/resources/profiles/Afinia/filament/Afinia PLA@HS.json index 6f37a09ac3..cfd15a574b 100644 --- a/resources/profiles/Afinia/filament/Afinia PLA@HS.json +++ b/resources/profiles/Afinia/filament/Afinia PLA@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OF9HCdyQ", "setting_id": "N3sCgjdjvp6FTtw9", "name": "Afinia PLA@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia TPU.json b/resources/profiles/Afinia/filament/Afinia TPU.json index d4310612b3..f407976459 100644 --- a/resources/profiles/Afinia/filament/Afinia TPU.json +++ b/resources/profiles/Afinia/filament/Afinia TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "E7WBTARZ971LaDMj", - "filament_id": "GFU01", + "filament_id": "OFDJU6R3", "instantiation": "true", "filament_vendor": [ "Afinia" diff --git a/resources/profiles/Afinia/filament/Afinia TPU@HS.json b/resources/profiles/Afinia/filament/Afinia TPU@HS.json index c2590ff9ef..56992bf983 100644 --- a/resources/profiles/Afinia/filament/Afinia TPU@HS.json +++ b/resources/profiles/Afinia/filament/Afinia TPU@HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zUqTgAEbqTN1EdRl", - "filament_id": "GFU01_01", + "filament_id": "OFDJU6R3", "instantiation": "true", "filament_vendor": [ "Afinia" diff --git a/resources/profiles/Afinia/filament/Afinia Value ABS.json b/resources/profiles/Afinia/filament/Afinia Value ABS.json index 0036bea580..8a4f2bec1b 100644 --- a/resources/profiles/Afinia/filament/Afinia Value ABS.json +++ b/resources/profiles/Afinia/filament/Afinia Value ABS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00", + "filament_id": "OFXi59OX", "setting_id": "jEYVpOPBjFtQ0DXn", "name": "Afinia Value ABS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json index 37daf620a9..f98da8225d 100644 --- a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFuYvNS3", + "filament_id": "OFXi59OX", "setting_id": "OxIiEYjbhEvSykaQ", "name": "Afinia Value ABS@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value PLA.json b/resources/profiles/Afinia/filament/Afinia Value PLA.json index 52d27a1f8c..1df7bd969f 100644 --- a/resources/profiles/Afinia/filament/Afinia Value PLA.json +++ b/resources/profiles/Afinia/filament/Afinia Value PLA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00", + "filament_id": "OFgHh8ly", "setting_id": "oNBk0IxmW7C99WI3", "name": "Afinia Value PLA", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json index da0a1ecb8c..1d9f669bd0 100644 --- a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFvw0owy", + "filament_id": "OFgHh8ly", "setting_id": "BASsUdyvElEVJ9AA", "name": "Afinia Value PLA@HS", "from": "system", diff --git a/resources/profiles/Anker/filament/Anker Generic ABS @base.json b/resources/profiles/Anker/filament/Anker Generic ABS @base.json index 1f6ad45f63..c4982fcfb4 100644 --- a/resources/profiles/Anker/filament/Anker Generic ABS @base.json +++ b/resources/profiles/Anker/filament/Anker Generic ABS @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB99", + "filament_id": "OF3P0BQA", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic ASA @base.json b/resources/profiles/Anker/filament/Anker Generic ASA @base.json index fb0ef78ee7..585c1d0079 100644 --- a/resources/profiles/Anker/filament/Anker Generic ASA @base.json +++ b/resources/profiles/Anker/filament/Anker Generic ASA @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB98", + "filament_id": "OFRiyes1", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PA @base.json b/resources/profiles/Anker/filament/Anker Generic PA @base.json index 9215733825..f95b038b25 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PA @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99", + "filament_id": "OFMgJQCZ", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json index 7f23645d43..ef1343cd5a 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN98", + "filament_id": "OF7uE5KB", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Anker/filament/Anker Generic PC @base.json b/resources/profiles/Anker/filament/Anker Generic PC @base.json index 1947ecdd35..85eb21469c 100644 --- a/resources/profiles/Anker/filament/Anker Generic PC @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PC @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC99", + "filament_id": "OFGPJxnt", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PETG @base.json b/resources/profiles/Anker/filament/Anker Generic PETG @base.json index c7b85e701a..8bd93439b8 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFgvOmM2", "instantiation": "false", "filament_type": [ "PETG" diff --git a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json index 4a36c58a86..c39b36f841 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG98", + "filament_id": "OF1daEUW", "instantiation": "false", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Anker/filament/Anker Generic PLA @base.json b/resources/profiles/Anker/filament/Anker Generic PLA @base.json index 4dbfca4e28..bfe79d7ec5 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PLA @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFndmfJ1", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json index aac1e8e86b..aa3c69e034 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL96", + "filament_id": "OFXyyfX6", "instantiation": "false", "filament_cost": [ "20" diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json b/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json index 39b4ecdfee..23906759c9 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL95", + "filament_id": "OFIYTy8S", "instantiation": "false", "filament_cost": [ "25" diff --git a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json index d8eb0f56d9..cd7b72c3af 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL98", + "filament_id": "OFB0a3hT", "instantiation": "false", "filament_type": [ "PLA-CF" diff --git a/resources/profiles/Anker/filament/Anker Generic PVA @base.json b/resources/profiles/Anker/filament/Anker Generic PVA @base.json index 5c7775c2d2..68c9fce25b 100644 --- a/resources/profiles/Anker/filament/Anker Generic PVA @base.json +++ b/resources/profiles/Anker/filament/Anker Generic PVA @base.json @@ -3,6 +3,6 @@ "name": "Anker Generic PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS99", + "filament_id": "OFsCbVbN", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic TPU @base.json b/resources/profiles/Anker/filament/Anker Generic TPU @base.json index 3ca7c49029..1399cfa459 100644 --- a/resources/profiles/Anker/filament/Anker Generic TPU @base.json +++ b/resources/profiles/Anker/filament/Anker Generic TPU @base.json @@ -3,7 +3,7 @@ "name": "Anker Generic TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99", + "filament_id": "OF6tKa1Z", "instantiation": "false", "filament_retraction_speed": "90", "filament_deretraction_speed": "50", diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json index 35ea99a5fa..99d8da0f4b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "RDI26qeSRSTe0PDg", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json index 6cbc0b1dca..95d5884132 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Moc1cylP6mmSQjlb", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json index bc96d4e812..3a6e2c9073 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "2xgfnUKyOUQwYWPa", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json index 904b9cf13e..f49664c14b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "NOiAgxA0BbvLhR1v", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json index eb92f6134e..10b81c21b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "MDWaiSjl89E6Edsn", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json index 2176e2e94b..ea9295b1e5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "wZjVYc7dBDSKRusJ", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json index f6cbd13546..db2517faac 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AbB6JtoPRsNgmxyy", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json index 85f03c921e..841d07300a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "exX565xnrLPkYkvu", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json index 0d16ce5f5d..c37ebcb971 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "KeEk3yQZrKmJY9Q0", - "filament_id": "OFf2b9wu", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json index 56f4d8957a..c726bbcca0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic ASA", "from": "system", "setting_id": "U66DGcpZeZ24VfPe", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json index af221cecff..05d943ece7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "06j8OTuYw3Sh9BxL", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json index 0c2d38c349..2a43e7b355 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "s2XJm0JghCSUDzhh", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json index 64ca075800..1b038f7ba0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "rf792xZNR7tRGKNg", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json index 7829e37710..fff937f65e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "wqK6AVf1mNkIOmnt", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json index 6ee5e7d750..b682258829 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "aMgpooFosBBvlKKR", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json index 8dc0f96a2c..af3076163a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Isk7NkdH7GxsEZkS", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json index 3ca00083f5..f2c2c816d8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Ew0Lg6u3e5Xj19Bz", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json index cf04fda679..36c2d4a7da 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "PEg6aLXcyUc70p9F", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json b/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json index c2863fd513..d4495f172c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "az6wmXeWSCKcUEsK", - "filament_id": "GFB99", + "filament_id": "OF5Zk4e1", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json b/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json index 6bddb8f194..d352fde30a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "qKcef8t7nj8nBjPu", - "filament_id": "GFB98", + "filament_id": "OFI80Hct", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json b/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json index ed1cf5e236..44984af3bf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "j2PXsJyI9YyoE8lc", - "filament_id": "GFN98", + "filament_id": "OFPdhDlK", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PA.json index 5c93bd4a56..761cfb146b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "xzI6EgoKa3DFYyoZ", - "filament_id": "GFN99", + "filament_id": "OFB1Tv1E", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json b/resources/profiles/Anycubic/filament/Anycubic Generic PC.json index 20d83e1d1f..766455b1ad 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "3zgBtEkj1fQpDkxO", - "filament_id": "GFC99", + "filament_id": "OFWY6vBh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json b/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json index cfda82354d..1ca3b27d9c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "CEd987NP90bPdkW7", - "filament_id": "GFG99", + "filament_id": "OFWzr7m0", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json b/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json index 8246ddafb0..ff449f9c86 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "9gFgyEJelaCIVwAH", - "filament_id": "GFL98", + "filament_id": "OFNcdCrm", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json index 3fb18f36a3..76852ec8aa 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "2MiX54GMiZjFzwBI", - "filament_id": "GFL99", + "filament_id": "OFKyCgaK", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json index 5cc9abce40..f583d7776a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "I1GMbOsMYktU7EbM", - "filament_id": "GFS99", + "filament_id": "OFSGbf2I", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json b/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json index 25d961c5e8..0cd40e9b50 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json +++ b/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "xrbLc7y1AInpumtv", - "filament_id": "GFU99", + "filament_id": "OFGKLoUm", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json index 66428b6c93..ad40090b9e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "hcL5OHthGzApICTk", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json index be313bf621..27b3bba016 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "OJbFCKoG5DtVGT9J", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json index 077e222d49..55756b72f7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "6mMIVw8iheDn1OuV", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index a67c82ac59..1484c7b6f9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "epl6B2WNjV1dxG5Z", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 6a58147c35..c6a01fd874 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "eMUXd3PFKHl41TIq", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 553f17901d..9fab6c40b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "y9XYrUJrUYKcBhCI", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index bdc62ab11a..24ac67340d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "nO6m8EaBKREWUi3f", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 04cd241a06..fcc33a27cf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ebKput7Vyn4IQez1", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 429647426e..a292502096 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "jzrflGdwy9U8kl1c", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json index cfe5743cb9..1fadd8ce20 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "7F0I28djSlDopbIp", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json index c8ed72562f..05523149be 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "wF10XxL2tNXh8C1p", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json index 76e21e1ed2..e1cdbd5d6d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "t3VfcIKMk0ELiPP7", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 3321afd452..133f388fa1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "dOOXRvGwMe3NeUj0", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 73378f1ffd..fb7b6e3e98 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "H0IECyfsMaCMdefe", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 11ac6e7bec..96792e69de 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "7nu7lbiAHMeFBIJc", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json index 53e4aba120..9f60de8562 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "puSuSfNyKlYlmLjL", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json index 183655a8a9..9a168b8331 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "1Qdmjm0MNJKU7aCD", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json index 61de49c647..033135697d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "Z0qp7SdwN9luxLFO", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json index b7f6e07d05..2d5c70f60b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "gmni9H2Du5nxBqQu", - "filament_id": "OFGb4hPY", + "filament_id": "OFUaHEO9", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json index 93b2dd3423..ae51a2b31f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zCqTTjac3ydSAw3q", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json index 1abbe033ae..171c1f085c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "1bCJcP2RcDlvIqEo", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json index 5f2fbc693c..65d1e762b4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "5v6coSKjAl220Cnq", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 852d9be237..b4ab737c8e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "saRQ24o8KHgc1YnM", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 688d699495..b8bdfac90f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "hYFR2CtiXab9KZUp", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 95fd9fd80e..1f21b4144f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "RCaf3c84JsWkuJzd", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index 64ec79a2f4..d44a266643 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PETG", "from": "system", "setting_id": "qe2wYLf7CEMjmfxj", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json index 68e4c4279c..fbab6ab82c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uNktFymJ3RbGa7k0", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json index 89ae50f686..5966ceb3dd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "EaW663aw4torYXG8", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json index 11fc401b24..13c1aae54f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "lgVEMmBHMen0sWsI", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json index a9340e6553..85edb1eca9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uLRMTzyJIara4Hr2", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json index 6a2292c913..7fb1d1f66c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "FAyFkKpV5w6G5dU2", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index e7cd08bc7e..64ec8774b0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "duduwoswLHk9I9sY", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json index e8bd6e56ce..ea95c2b1c5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "b3GU7ytZPEYNNyne", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json index a48eb618db..a2cd9ecc5e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrHKJh6prBzMz4Se", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json index 5b5b0bbebe..b0c543cebf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "HyTi93UGno6uAJEO", - "filament_id": "OFdSGkUG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 6263a4c033..bbe7575b49 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ajFzrQq9AvGtZCui", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index d374e345e0..d78fcc1d27 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "VOV59iBwqwMtmi48", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 1e4342272a..cc3e8a15fc 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "L6GIF36jbXf5NVOw", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json index 70cdae2da4..30589ac8d1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "XIq1GeZdHqOl9Gtr", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json index c078bb2d87..5b11a287e2 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "EaVdXQHAyocYUCez", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json index e26d8674f6..8dd7f867ec 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "UpC1Qut0kjYRD9po", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json index 04d4dc5e79..de37d66f03 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "ELCOJflyY3DfpPAH", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json index ba87ad3145..6110cf1fe4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "enkHPcq0yYHsRk7g", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json index 95ddd20b35..81f8dbb4dd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "qw4uL96miCLTNE7b", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json index e61cdcd625..f03141136c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "KrlWgkC2kVdSRNUx", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json index c81db823c4..02b0a7f46b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "gK0NhTnxz1VBNHbu", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json index 7159efba5c..504a4b382c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4nCPU0WS74OXowyr", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json index 6473007901..df464f2fa9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "0Ae57Dt0KXnpQUJu", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json index edd899396c..4e60bf4527 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "otxG4N1WrXHUw8Z9", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json index 236dbc4cef..f63d778029 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "GblA3LvgCL63V7Qx", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json index 3a9a24a8e4..43ec857824 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zYYM5Fznkiz0UgHN", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json index d1a975fb37..0f53f104b5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Z0T8Mul8Ta7zqRjS", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json index 5138470e26..cddede3f5a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "61KPHMw1fRcuaGHk", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json index 0c923b2fe0..398befabb4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RQJLrGtzvbP2PksP", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json index 79439814b4..fd949e041a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "50Ailboxk7bEclVp", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json index 286464d8c3..f4e9e91f6f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "1hyHPSJZgUpLcW7u", - "filament_id": "OFgK2Xvv", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json index 3df60b8a89..ca56418084 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "m7o0ek6sbOavVUpG", - "filament_id": "GFL98", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json index 5bb37daa1f..d4805c6bde 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "NVrxrFGYkHRyzrFq", - "filament_id": "GFPLA Glow", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json index 284a1f93fd..16034c2b27 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "swLSkqq7X3PhbRiQ", - "filament_id": "GFPLA Glow", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json index 26d53a4f72..64832c85ab 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "rsOyKXt6G37Ze51l", - "filament_id": "GFPLA Glow", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json index 0050079b0d..97c2eff0d6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "7GISZDRG9YilzBXM", - "filament_id": "GFPLA Glow", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json index cfb1f50c1d..725a9d3f90 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "Sio4qE22N2krNjx1", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json index 6e5c967420..eb59d710e0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4FQaTeouNl9pL4Vl", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json index cef58f9461..9b37a8911c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AEKT5WgqOTAVYijs", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json index 0e949bd4a6..1c5babfe87 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "xTuh6dk8MdeAovdB", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json index 219a05057c..4db8e137e9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BpBYwZqt4ik1XIFp", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json index fe6757653c..0deb583eaa 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "2Rk0UA3rtW53ECqo", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json index b2bc996730..75fb882984 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "hQ90rvCLS2rVEPVJ", - "filament_id": "OFgSK1hL", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json index 046b4c87a3..03ea837c0c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wi26Yq5bX8oGt4CA", - "filament_id": "OFEdyZqS", + "filament_id": "OFIgbDHq", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json index 02945fa977..2c25648b80 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "kVOaVF3YyfGrXTdW", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json index b30450f8ac..7dad057149 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qSpZJ4cRcg3xb2b2", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json index a70d0629b5..6797adcb5d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "WvmwXnXSDPPtXS8S", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json index 41f1c5f6a8..9580807a70 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jFKsrMeqeUAcMAyf", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json index 2f2719cb19..3d87a20b63 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ueznw2fLdjN2EbIC", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json index 4f7d332aaa..ef72f06ca1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JxYmWTeCtw0VvUcC", - "filament_id": "OFvYfHPB", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json index f7a73c748c..99b2c3672d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "1EID0A7FceyLzja5", - "filament_id": "GFL97", + "filament_id": "OFCp3Bgo", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json index 60f18577e5..9aebb3860e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Fszb00FtQHFOcDmz", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json index 6709f9bbd7..166e46e620 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wnt68LydXcNxhGhN", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json index 075d1e2afd..2998b7d2eb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AzEerDakdHs9Rj3I", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json index 70e61016a5..2b685352b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "pUB5V3n7yAbPxFQC", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json index 11ad26dcbf..a1ec3be6e4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N96XNT6EoNVVFYz0", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json index e80cdc8383..79a96e1143 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Yc1P4D9Z42Abjfut", - "filament_id": "OFjdTQd6", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json index f29c6e2674..8365eee514 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "zAUNjIY9cGOO3Np5", - "filament_id": "GFL94", + "filament_id": "OFrGJ4tR", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json index 74b39048ee..ea42c44729 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "DkuffHU9VM48p50f", - "filament_id": "GFPLA Translucent", + "filament_id": "OF7c9fln", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json index 56c46b1ca2..1733e1c10a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA", "from": "system", "setting_id": "1va1bLu3J0b5GQt3", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_vendor": [ "Anycubic" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json index 33aa19252c..a80ab1d88f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XN8zwImhwbZCkl6m", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json index 5570f249d9..d31d75f532 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Vs1ZyZJWHFue8Vc8", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json index 061215d818..ad437f2cab 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CjXfeHJpdOaSEzN0", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json index 7f8105621a..7b8dd55359 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ol5UhwlAQy7yrXYU", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json index 2c8e3db0b7..3256b90dd3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "u9nOmt30hBeZoN2w", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json index dd1ac32507..e5db637d98 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lehlBFE2WVyi24s0", - "filament_id": "OFgrGfPy", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index ee6ea50ef1..149b3da021 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA-CF", "from": "system", "setting_id": "Y9mFng36B2vAnP19", - "filament_id": "GFPLA-CF", + "filament_id": "OFZ0mR5b", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 91927df4a8..26753fc994 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA-CF", "from": "system", "setting_id": "9XGVjrGzNa4Br8kB", - "filament_id": "GFPLA-CF", + "filament_id": "OFZ0mR5b", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 7619db9764..ee21e1359e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic PLA-CF", "from": "system", "setting_id": "vPSse40nqlQ0xBnp", - "filament_id": "GFPLA-CF", + "filament_id": "OFZ0mR5b", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json index 30c1a36997..52a7741b59 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "RXGVKThses3TsFql", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json index 388a395309..e24dff10cb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1QcMzxPPVVj8k9Zy", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json index 9ffe3a4047..df978e5c9c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "70hdDTET074FJB0W", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json index f166aa4a6f..7013b6e7d7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "uZIHFQ0GxFemfZUN", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json index 9579f701eb..d20d995486 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "V130y2Wie3uJtzho", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json index 6b5699d6eb..77a2e2fbcc 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "BAYwaV7mcaLAo1uD", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json index 70fc1e02d7..26f7745b9e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "FvdMeI7MlR1OEt0y", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json index a7067cc8a7..c20722ad8e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "9zwUSJcKXHTuDM1i", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json index 738fcbdc89..5141d90404 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "CdtZIoH8bvFOFU6l", - "filament_id": "OFHL32M0", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json index a30e14503f..d6b5217879 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "F3l2tNcFwp9qG7W6", - "filament_id": "OFHL32M0", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json index 55f7df2a50..a5f6e735b0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "WkMd8rjotz7XNLDM", - "filament_id": "OFHL32M0", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json index 68f8367ed9..d17fd1217a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "ias4IbNNwygyeow9", - "filament_id": "OFHL32M0", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json index 7d4b5e30c3..a9d3339d48 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "9UgHz7Bgv8GpydSE", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json index 7b820c0957..da5f869cdd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "IcPG0rhSw4AuIcPl", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json index d3b82264a5..64e303eda7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "fVVxpwKdzpOMntDc", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json index 7ac3014639..65c41524b7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "Z6f3hM30bVcmttUo", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json index 7904e7cc18..dcc4102b46 100644 --- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic ABS", "from": "system", "setting_id": "W3GiC5YLzxbbjXLY", - "filament_id": "OFOp3Oef", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index 852b56e0e0..e025d0587c 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "aFlpGq8eSJQEO1Ie", - "filament_id": "GFPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_settings_id": [ "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json index 36d7edc211..78925acad9 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "9hdOsLCrVX3dkem2", - "filament_id": "GFPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_settings_id": [ "Generic PETG @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json index f533e62694..a81795f7c0 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "tUSAvzLu6pVk37kn", - "filament_id": "OFaKZ6JI", + "filament_id": "OF112FvY", "instantiation": "true", "filament_settings_id": [ "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index 3edff90e15..d701c6243d 100644 --- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Anycubic Generic TPU", "from": "system", "setting_id": "kHB2rrxkyz4Clu3N", - "filament_id": "OFsCOJv7", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json index 0400c26a1d..b359d010b2 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "DmRzQzlSf2KdWwKu", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json index 21be878b04..b6c5123b8f 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gsXcm0Q6TdKW0GBx", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json index a594a3fe92..679c45f1c7 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "R7XUcQ4LSZA2i4PG", - "filament_id": "GFL79", + "filament_id": "OF5oXk4M", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json index 008247a00a..430ea6c816 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "iFJbVP8Ui0h5sv5X", - "filament_id": "GFL80", + "filament_id": "OFHknN4v", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json index 4b091e502a..115f53a962 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "m023Z8IkkHMHxuag", - "filament_id": "OFw1S8lL", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json index f4a5d3f332..1a3a7e4834 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "QGbNWGw8rqvq025W", - "filament_id": "OFw1S8lL", + "filament_id": "OFgXgt98", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json index 1edbbfc7f5..4443359064 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PxGFsoMcfFrTDqzL", - "filament_id": "OFw1S8lL", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json index 73a7118801..d3bdb2afe2 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "o4JZKQmCdnO0hCXZ", - "filament_id": "OFw1S8lL", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS.json b/resources/profiles/Artillery/filament/Artillery ABS.json index b7d3189738..8ad00f3bde 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS.json +++ b/resources/profiles/Artillery/filament/Artillery ABS.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "fsbfMiamVemzRxkG", - "filament_id": "OFw1S8lL", + "filament_id": "OFgXgt98", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json index ebfb82fdf0..089e3d118a 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "AE7wKVIZXHXSXzL5", - "filament_id": "OFtmT4Nd", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json index ab290c02b6..634a2f46c8 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "eSwM3ZfSBWqR8Gcf", - "filament_id": "OFtmT4Nd", + "filament_id": "OF5YVJXH", "instantiation": "true", "chamber_temperature": [ "55" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json index 7a0228d38e..40db5fa796 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.6 nozzle", "from": "User", "setting_id": "znMfTFfxvJC7a732", - "filament_id": "OFtmT4Nd", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json index a90093dbc5..9769f1d363 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "y2DU36j0slaHzg04", - "filament_id": "OFtmT4Nd", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery Generic ABS.json b/resources/profiles/Artillery/filament/Artillery Generic ABS.json index df06b7f844..6db4ca98bc 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic ABS.json +++ b/resources/profiles/Artillery/filament/Artillery Generic ABS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFwMFLAm", "setting_id": "C4oiu2SBLwfTEcXu", "name": "Artillery Generic ABS", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery Generic ASA.json b/resources/profiles/Artillery/filament/Artillery Generic ASA.json index e3b8cc1f93..5acf3d49f2 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic ASA.json +++ b/resources/profiles/Artillery/filament/Artillery Generic ASA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB98", + "filament_id": "OF6vKLaU", "setting_id": "1gls4zCclgN68Hlc", "name": "Artillery Generic ASA", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery Generic PETG.json b/resources/profiles/Artillery/filament/Artillery Generic PETG.json index cc2f29e875..d1bafe2688 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PETG.json +++ b/resources/profiles/Artillery/filament/Artillery Generic PETG.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFyK5Lt9", "setting_id": "Ou4NR5DVvalg5kCe", "name": "Artillery Generic PETG", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json b/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json index 7c1a231dbc..2324bd6ae2 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json +++ b/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL98", + "filament_id": "OFUtGagr", "setting_id": "h23GL00BFCliLh9N", "name": "Artillery Generic PLA-CF", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA.json b/resources/profiles/Artillery/filament/Artillery Generic PLA.json index 1211c22b3c..4133075578 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA.json +++ b/resources/profiles/Artillery/filament/Artillery Generic PLA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFnfBvn5", "setting_id": "Bpy4tAvspysDWosL", "name": "Artillery Generic PLA", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery Generic TPU.json b/resources/profiles/Artillery/filament/Artillery Generic TPU.json index ff724d1925..522cc0fbfb 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic TPU.json +++ b/resources/profiles/Artillery/filament/Artillery Generic TPU.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU99", + "filament_id": "OFEE1Dld", "setting_id": "u8YE6r4sGJ0jvqBn", "name": "Artillery Generic TPU", "from": "system", diff --git a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json index 662524238b..2910031a1d 100644 --- a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "lOsH1teHe8Pgzx2g", - "filament_id": "OFp90N8a", + "filament_id": "OFMSvS8z", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json index 3c2efc54ed..d12faf0b94 100644 --- a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "b4BKJMUxArvLuEOh", - "filament_id": "OFnY9ovF", + "filament_id": "OFtGC1ye", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json index d734ab4c40..8c726cb639 100644 --- a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "WawbnfhWn4MT6Hz7", - "filament_id": "OFNRgSch", + "filament_id": "OFfb10SK", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json index e4f3c78276..8e40f27f5b 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "a5jwQ6nyffW1Vqv1", - "filament_id": "OFw0qp7w", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json index 9af913f87a..1c56ccb925 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "QeiSAakfMW7HyhJ7", - "filament_id": "OFw0qp7w", + "filament_id": "OFb5EEM3", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json index c9294a933d..426ec21706 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "VGu7C3uk8d6ibIg4", - "filament_id": "OFw0qp7w", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json index b204a0b6a6..2a103c381a 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "Oj11BhU0QajmDrh3", - "filament_id": "OFw0qp7w", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json index d29a639777..1ffe8a243e 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "kAlZ7nCYo53UVVx3", - "filament_id": "OFEYKrjb", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json index 4620665cc8..cb62e565ee 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "g7UIfJTOPzMQzfrH", - "filament_id": "OFEYKrjb", + "filament_id": "OFilnglt", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json index 4ffe6eaa01..952e738ff8 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "uuPf0MfNTZ2lihtG", - "filament_id": "OFEYKrjb", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json index 2ae4e8e114..b1f14d1aac 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dQBp2T4ap90uAOYs", - "filament_id": "OFEYKrjb", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json index b90df9567f..9af4f2eeef 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "GrdWgUGdXt23jnBu", - "filament_id": "OFt5bvKK", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json index 5d14168c7b..470b5e89f1 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "RTQvSwJBWnut5aBo", - "filament_id": "OFt5bvKK", + "filament_id": "OF8wE5l7", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json index 7c7046e7b9..bcfb9cefb9 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "Wkt1IClO4nwH3Xa7", - "filament_id": "OFt5bvKK", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json index 5152d65dd6..4231ec86d4 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "Zlvodz3cris0hmof", - "filament_id": "OFt5bvKK", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json index 66416e969a..a917f9551b 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "JvmeW29kHCp7HiA6", - "filament_id": "OF9vnvM8", + "filament_id": "OFOnSNt3", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG.json b/resources/profiles/Artillery/filament/Artillery PETG.json index a4922a1f32..11bc5b0831 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG.json +++ b/resources/profiles/Artillery/filament/Artillery PETG.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "1MyhYGMxJCmZnJRP", - "filament_id": "OFEYKrjb", + "filament_id": "OFilnglt", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json index 258f94de1a..625dbdf8e6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "sqlU8YRYqavJBap3", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json index 573a888662..a5270921bd 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "7V8Vj5ykHmTYtxcC", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json index 340947ce24..fddc6cd71b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "J8rOxOcsB6HN00HI", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json index 4efb9507a5..936afae087 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "N3iYnDshA5ruihVE", - "filament_id": "OF57IbZT", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json index 08e2927b0e..18c8c42d76 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "zBUD1JyuZF9MOncA", - "filament_id": "OF57IbZT", + "filament_id": "OFXk1emJ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json index 4c009a344b..07ce00f7d6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "NKkZjEtDjxOMLjoo", - "filament_id": "OF57IbZT", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json index 7c08a8ffba..d7d64ef75b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "c9BAMzt2w30nB2rC", - "filament_id": "OF57IbZT", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json index b636c0f7d6..cb20dc9405 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "2VIrSoq3kufjHMXj", - "filament_id": "OFXA8vy9", + "filament_id": "OF4Nhggz", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "100" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic.json b/resources/profiles/Artillery/filament/Artillery PLA Basic.json index 5455de4a86..5e777a701b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "DcGBMRjdcgLx6pWG", - "filament_id": "OF57IbZT", + "filament_id": "OFXk1emJ", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json index 5156b5e69f..398d8d6477 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "tgmFMdyhSX05kuxw", - "filament_id": "OFKDnrjL", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json index 6c2a47f771..77fbb84757 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "9zqAIfywiv9zm77X", - "filament_id": "OFKDnrjL", + "filament_id": "OFAC7Wyu", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json index 58702d5a69..97e72d2b39 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "W6ipHAoCgHIUIT3g", - "filament_id": "OFKDnrjL", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json index 3548bc52a6..8d5aa70714 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "HggSuUWe1zWOlQIK", - "filament_id": "OFKDnrjL", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte.json b/resources/profiles/Artillery/filament/Artillery PLA Matte.json index 04a2402b6f..4ef84538fb 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "kt8uKXpMqxrFrHaG", - "filament_id": "OFKDnrjL", + "filament_id": "OFAC7Wyu", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json index d86ce77a43..ac3b82dc53 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "TDwRIGXkpJIW38jG", - "filament_id": "OFnyirh9", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json index f5c6f05245..ed36227a9e 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "BWMjPUWXwumQoY5H", - "filament_id": "OFnyirh9", + "filament_id": "OFLbXwoL", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json index 8743dd44bd..3ab80c6fe4 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PpuiGWbDlVZwBIxb", - "filament_id": "OFnyirh9", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json index 8df6dd1d13..00227f72e8 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dr2wlzDc1AC3tciI", - "filament_id": "OFnyirh9", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk.json b/resources/profiles/Artillery/filament/Artillery PLA Silk.json index 9eb9ea142a..897e98f45c 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "rd0U4uP6mM8S8lDg", - "filament_id": "OFnyirh9", + "filament_id": "OFLbXwoL", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Tough.json b/resources/profiles/Artillery/filament/Artillery PLA Tough.json index bca655122d..cce5b7fc0a 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Tough.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Tough.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "hLFvQXsyyUrguGEp", - "filament_id": "OFtXBjvb", + "filament_id": "OF0R5Wc7", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json index 51433f69be..33aea1f4fc 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "oT12s9CEV1CTD6eB", - "filament_id": "OFvxvkAd", + "filament_id": "OFAZllAN", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json index ec64d0b506..7dec8693bf 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "FIcb3cOIanxmvHe2", - "filament_id": "OFc2SnEp", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json index c3f230b487..00b7642e7c 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "r2q4QIlfTUCIz43f", - "filament_id": "OFc2SnEp", + "filament_id": "OFkx5MEe", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json index 1759d32ad5..9f3dcbb2b8 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "h5xquKMT9l0rwcTU", - "filament_id": "OFc2SnEp", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json index 412d60e440..753f9c9dd9 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "cElJlbCAgAqSQiPZ", - "filament_id": "OFc2SnEp", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json index 3925e8963d..09c0c766ad 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "p6vnCneuwtM0PzL7", - "filament_id": "OFTbsWVg", + "filament_id": "OFcJDtTx", "instantiation": "true", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json index 0b0e495f7d..16b2485862 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "QIgpIamYbSdI4DPW", - "filament_id": "OFTbsWVg", + "filament_id": "OFcJDtTx", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json index 83a7dbd0f6..f0b83d6e6f 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "W22GbPPOgtH4NAAH", - "filament_id": "OFTbsWVg", + "filament_id": "OFcJDtTx", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU.json b/resources/profiles/Artillery/filament/Artillery TPU.json index f4ec63c166..5d71a93448 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU.json +++ b/resources/profiles/Artillery/filament/Artillery TPU.json @@ -4,7 +4,7 @@ "inherits": "Artillery Generic PLA", "from": "system", "setting_id": "IcV1jLJaS5rmdNOY", - "filament_id": "OFTbsWVg", + "filament_id": "OFcJDtTx", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Blocks/filament/Blocks Generic ABS.json b/resources/profiles/Blocks/filament/Blocks Generic ABS.json index abb5c988dc..d23b6ebb31 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ABS.json +++ b/resources/profiles/Blocks/filament/Blocks Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "QhLaLEkxhvIMa3Ik", - "filament_id": "BSFI004", + "filament_id": "OFma52eS", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json index 5373b92b4c..5721335e8a 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json +++ b/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "FF6D7i492XTrb8AO", - "filament_id": "OFy7oQ1g", + "filament_id": "OFctbSkL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA.json b/resources/profiles/Blocks/filament/Blocks Generic ASA.json index a3fa2a86e8..1fc34c909b 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA.json +++ b/resources/profiles/Blocks/filament/Blocks Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "DcgqA071S6MRVbKI", - "filament_id": "BSFI005", + "filament_id": "OFB9dx27", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json index 47732a6c9d..009afa1b6b 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "B254XDRQzysz7YUd", - "filament_id": "BSFI007", + "filament_id": "OF8bLDu7", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA.json b/resources/profiles/Blocks/filament/Blocks Generic PA.json index edaee826f4..b875eb13a4 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PA.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "3L5IYVTlkt8V0EiW", - "filament_id": "BSFI006", + "filament_id": "OFiUSDih", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PC.json b/resources/profiles/Blocks/filament/Blocks Generic PC.json index a6519b1c0d..295372a6d3 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PC.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "VUPeelf61TmTQrun", - "filament_id": "BSFI008", + "filament_id": "OFahE7HP", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PETG.json b/resources/profiles/Blocks/filament/Blocks Generic PETG.json index 0c38a3155d..d34b3ca904 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PETG.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "FKkbjL1V4ZEjXB0H", - "filament_id": "BSFI002", + "filament_id": "OFrgGex8", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json index 7568cdf5af..efa68921b7 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RHKPeXZiv4E2p4lP", - "filament_id": "BSFI010", + "filament_id": "OFupq0tY", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA.json b/resources/profiles/Blocks/filament/Blocks Generic PLA.json index 3f3838e22f..dd22e2c7a2 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N3wDUqmBETfelOoG", - "filament_id": "BSFI001", + "filament_id": "OFNYewRS", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PVA.json b/resources/profiles/Blocks/filament/Blocks Generic PVA.json index 2719cfe661..53de20761e 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PVA.json +++ b/resources/profiles/Blocks/filament/Blocks Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "J74KgdSzf503Tk9p", - "filament_id": "BSFI009", + "filament_id": "OFiorRtJ", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Blocks/filament/Blocks Generic TPU.json b/resources/profiles/Blocks/filament/Blocks Generic TPU.json index 5c04853ee8..271d4ec00f 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic TPU.json +++ b/resources/profiles/Blocks/filament/Blocks Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "xFRwN8ZEwEGlLFwo", - "filament_id": "BSFI003", + "filament_id": "OFMEbuBE", "instantiation": "true", "filament_max_volumetric_speed": [ "4" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json index 9e0a23abf9..1a1f01b3d9 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json +++ b/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "3IxBZSWFfFGmKAQ7", - "filament_id": "OFAUX5fB", + "filament_id": "OFZ4fTO8", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json index 7579260e16..fc011cc9bc 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json +++ b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "jZBfhlf6VX5r3KHb", - "filament_id": "GFG99", + "filament_id": "OFz3q5Xz", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json index dd50bdd607..4b2cd9bbea 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json +++ b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Uv3kcMO5qNwkrMPV", - "filament_id": "GFL99", + "filament_id": "OF51XQar", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json index e8067f4945..f6df5c7924 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic ABS", "from": "system", "setting_id": "VkCgo0e4KR24DX28", - "filament_id": "GFB99", + "filament_id": "OFs1sNLz", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json b/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json index 201155e883..c98af61d3d 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "XslWGeEo1Okicu28", - "filament_id": "GFB99", + "filament_id": "OFZPlCck", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json b/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json index d48f96d7cc..6c3dd293d6 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "wBBQiy8JV2LrnIav", - "filament_id": "OF7tgL9c", + "filament_id": "OFBIadjM", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json b/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json index c919e8f921..f0dcbdaf77 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic ABS", "from": "system", "setting_id": "bBNozld07rP6mV3d", - "filament_id": "OFzQQeCi", + "filament_id": "OFDeTsJw", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json b/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json index d12453cdb1..a5d4cab7eb 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "YZT1Uv73b8ArVoX3", - "filament_id": "OFfiN1Lw", + "filament_id": "OFdXgp2K", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json index 99304dfd88..42865bb8af 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "S2vCGI7sqN8FwodT", - "filament_id": "OF3YOOOs", + "filament_id": "OFXXUHSG", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json b/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json index a3532b9e5b..c4dad7d095 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "judDupafROrSnVv8", - "filament_id": "GFG99", + "filament_id": "OFfxFQf9", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json index 58b3a1d750..cf2993ee62 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "EZA59VPwew1cpyUJ", - "filament_id": "OFxVzzn4", + "filament_id": "OFFxZ7hZ", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json index 861b4d9721..90409c864e 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "M9wzNVOPRQlayQH1", - "filament_id": "OFlN56xW", + "filament_id": "OFeK2vkS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json index 831c14dafe..bf0db17fb4 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "nnyBm7dlrz3OsVQz", - "filament_id": "GFL99", + "filament_id": "OF5vzBhb", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json b/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json index d8650e8a97..3e89ad7c6b 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic PLA", "from": "system", "setting_id": "ePZFnkgBiyFuKvji", - "filament_id": "OFQ5xAKf", + "filament_id": "OFRusgEn", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json b/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json index a743d646e4..a1ff21f85d 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json +++ b/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "HYciEf4160uMYGnH", - "filament_id": "OFUqBrgf", + "filament_id": "OFYlZMmy", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json index f162434556..a1ca25e1a7 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Chuanying Generic PETG", "from": "system", "setting_id": "9xxP8YWj4hnWQoVZ", - "filament_id": "GFG99", + "filament_id": "OFlXJxX1", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json b/resources/profiles/Co Print/filament/CoPrint Generic ABS.json index 6ec666e6f0..9b8e5c7995 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "xW2rHuxT9o7MG8qB", - "filament_id": "OFNvrbnf", + "filament_id": "OFU6fjbi", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json b/resources/profiles/Co Print/filament/CoPrint Generic PETG.json index b2661a6c91..51dcfb2fff 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "k4m484S1samBGEVb", - "filament_id": "OFDramZ2", + "filament_id": "OFXuwtnq", "instantiation": "true", "fan_max_speed": [ "90" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json b/resources/profiles/Co Print/filament/CoPrint Generic PLA.json index c6db574a42..265f8ba442 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Hv40GsmNozxOJ38T", - "filament_id": "GFL99", + "filament_id": "OF6KELDx", "instantiation": "true", "filament_load_time": [ "9.75" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json b/resources/profiles/Co Print/filament/CoPrint Generic TPU.json index 506acb77ff..fc2fc69008 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json +++ b/resources/profiles/Co Print/filament/CoPrint Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "CoPrint Generic PLA", "from": "system", "setting_id": "2mWqeih012I5D2CK", - "filament_id": "OF2Psxdc", + "filament_id": "OF7g2vYQ", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json index 55259a5459..25b69d8c2d 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ZztaHKdQ4dmOgAXr", - "filament_id": "GFB99", + "filament_id": "OFneOFWe", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json index 94c529c9fe..84469a0d15 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "acWqrAFyi2SIkNwa", - "filament_id": "GFB99", + "filament_id": "OFWIr7ZE", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json index 5dc279ffe6..3ee0390bfd 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "l44ioMidpUECbGYF", - "filament_id": "GFB99", + "filament_id": "OFWIr7ZE", "instantiation": "true", "fan_max_speed": [ "20" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json index 1c0751457e..1a3839374a 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "IBtIS8bwcIWhiCow", - "filament_id": "GFG99", + "filament_id": "OF3wxlw9", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json index e09df95679..7b532e7dfa 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "AovAvrEzGiZqFRpc", - "filament_id": "GFG99", + "filament_id": "OF3wxlw9", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json index 1848216904..bb5c3d8dc7 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "foEeUk6PK78QXleQ", - "filament_id": "GFA99", + "filament_id": "OFeDfaCh", "instantiation": "true", "fan_cooling_layer_time": [ "80" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json index 8d9877cfa3..d0e36e8146 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "HY8RFWOKRptC2YVt", - "filament_id": "GFA99", + "filament_id": "OFeDfaCh", "instantiation": "true", "fan_cooling_layer_time": [ "80" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json index 96912962de..e4fd40ea60 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "ZgbaHhRSK8AW38MB", - "filament_id": "GFU99", + "filament_id": "OFdlGycb", "instantiation": "true", "filament_density": [ "1.22" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json index 3bbea681d1..9fb7c570e9 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "f6yTiUiYYLckJBTQ", - "filament_id": "GFU99", + "filament_id": "OFdlGycb", "instantiation": "true", "filament_density": [ "1.22" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json index 5b93fc1460..0fd7c49f94 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "z1ffOb3jPP1GVXnD", - "filament_id": "GFG99", + "filament_id": "OF7lwj52", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json index 013aa09259..374321236c 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Gj0o6Rmn4qWXDLov", - "filament_id": "OFfoA8kJ", + "filament_id": "OFm70lLt", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json index 677ec930e3..6d3067d72a 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "mLgBNw0OzvJSS8IG", - "filament_id": "OFxlch4V", + "filament_id": "OFnSeLHk", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json index de34110826..c02f7be129 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "IDGh5vNSqKSOVn3z", - "filament_id": "GFA99", + "filament_id": "OFctg8r1", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json b/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json index 0dbfbdf5af..6a1ff9248e 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json +++ b/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "7xmGiJHgiD5KKTXt", - "filament_id": "GFB99", + "filament_id": "OFsoQ12i", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json b/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json index 18f1ea232a..44dad83ceb 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json +++ b/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "FJjkU2RhAZD10Cw8", - "filament_id": "GFG99", + "filament_id": "OF6Fpw1E", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json b/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json index d3aed1e46d..4674b2b60a 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json +++ b/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "sGAn6RP69saYSqcY", - "filament_id": "GFL99", + "filament_id": "OFVKADz5", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json b/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json index e0785fd57f..a88573aa26 100644 --- a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json +++ b/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json @@ -4,7 +4,7 @@ "inherits": "Comgrow Generic PLA", "from": "system", "setting_id": "TnHaf2TSHVfuwbVg", - "filament_id": "GFL99", + "filament_id": "OFNWcJsM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json index 33b6514886..faa9404b3b 100644 --- a/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json @@ -173,5 +173,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @Hi-all.json b/resources/profiles/Creality/filament/CR-ABS @Hi-all.json index e4620945d8..10c1cce09d 100644 --- a/resources/profiles/Creality/filament/CR-ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @Hi-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json index 070110cef4..12afdde3cd 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json index 1d7cd3dade..00340895f4 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json index f6ea93b388..d80c98423f 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1C-all.json index d592d9d18f..f41b1bb940 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json index a0451ea1ba..f91677ab31 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json index 6f3bbe777e..b83d103747 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json index 55a2fe9a80..d807936bfc 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json @@ -157,5 +157,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json index cea39dba0e..b6334a93b6 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json @@ -161,5 +161,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json index 8edabb85be..f49bf5dd93 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json @@ -175,5 +175,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @K2-all.json b/resources/profiles/Creality/filament/CR-ABS @K2-all.json index ec6591b352..d0f92634b1 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2-all.json @@ -159,5 +159,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "07001" + "filament_id": "OFGwZmgS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json index cc25eecbca..bc9719ad07 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json @@ -187,5 +187,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "11001" + "filament_id": "OFvLppPU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json index 9782134aaf..bf9ce0c9e1 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json @@ -188,5 +188,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "11001" + "filament_id": "OFvLppPU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json index 8c1c7a27c6..e2a7ef32fa 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json @@ -188,5 +188,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "11001" + "filament_id": "OFvLppPU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json index 7be6522dd1..48747723f0 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json @@ -188,5 +188,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "11001" + "filament_id": "OFvLppPU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json index 7466949b1a..d665bb8d16 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json @@ -194,5 +194,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "11001" + "filament_id": "OFvLppPU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json index ded5f2b093..bfa6bd0bc7 100644 --- a/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @Hi-all.json b/resources/profiles/Creality/filament/CR-PETG @Hi-all.json index 6e8dde0750..4b3ab33892 100644 --- a/resources/profiles/Creality/filament/CR-PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @Hi-all.json @@ -148,5 +148,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json index 65165f30ea..bc597f92b3 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json index fa3c9922d0..1c92de9916 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json index a388228d10..be3983b772 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1C-all.json index 57482693fa..2829598e5a 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1C-all.json @@ -157,5 +157,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json index 222a850feb..a6ee2af473 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json index 38be118853..d05baf33af 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json index 0c9fcef567..ead310f41c 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json @@ -142,5 +142,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json index ec8cb70475..b73011595f 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json @@ -154,5 +154,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json index e03a34d210..2137f18ef6 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @K2-all.json b/resources/profiles/Creality/filament/CR-PETG @K2-all.json index 3c328bf7ef..16bd7c7053 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2-all.json @@ -154,5 +154,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json index 6bbbc65e9f..befe270b95 100644 --- a/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json @@ -135,5 +135,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "06001" + "filament_id": "OF3WQaKK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json index 175f304ef7..83548daafd 100644 --- a/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @Hi-all.json b/resources/profiles/Creality/filament/CR-PLA @Hi-all.json index dd543fda9a..0dc26b51ba 100644 --- a/resources/profiles/Creality/filament/CR-PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @Hi-all.json @@ -137,5 +137,5 @@ "Creality Hi 0.2 nozzle", "Creality Hi 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json index 6fd4e736e7..84fb331f5b 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json index 0b31dd3075..1f5d2b746a 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json index 3abde8df57..f8517e48b5 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1C-all.json index d98582cf9c..092a18533d 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json index e8a7ab0ad6..e564114150 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json index 722c4978c2..2796306e7f 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json index 172d39a11b..a175fcdb46 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json @@ -154,5 +154,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json index fff8741bec..b30c6e90fe 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json index cbb2931fbd..4de70e5062 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @K2-all.json b/resources/profiles/Creality/filament/CR-PLA @K2-all.json index 75c085137d..26a62766b0 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json index 4727ca270a..ad5aad1c66 100644 --- a/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "04001" + "filament_id": "OFp4ETDP" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json index 18f928308c..cfc58c9cf8 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "13001" + "filament_id": "OFrM4hdm" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json index 071cdb3945..e6eaf070f8 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "13001" + "filament_id": "OFrM4hdm" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json index 85bdd7bb41..2e369e8a3c 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "13001" + "filament_id": "OFrM4hdm" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json index 5118f3b015..47bfd16093 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "13001" + "filament_id": "OFrM4hdm" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json index f3efa4d2ac..b7fb77695e 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "13001" + "filament_id": "OFrM4hdm" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json index b84b651e68..ee3510a9cc 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json index 12834e2b63..22d113814a 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json index 4944e61627..59bf2e48e6 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json index 3c288db1e6..4a3a27bfb5 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json index cb2e84fa5b..5b3aaccd1f 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json @@ -154,5 +154,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json index c320654960..c2dbe07744 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json index f0d35f90da..98a41262c4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json index b2cf047a8a..759d5cbd88 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "15001" + "filament_id": "OFgpQwkk" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json index f341ed0ee4..1ed05bed21 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json index 5f94d3a21b..80373199ad 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json index 68c02594da..ac4a9fc0ff 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json index c19a940780..cd8ea92f5a 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json index 20477243e6..1779ce9a54 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json index e62afb4ad3..ebfe70bac1 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json @@ -157,5 +157,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json index 62ab04db20..90436b9e4b 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json index 0b5efb1f62..b2bc9f1bc4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json index 23fd3380c4..5cf37492a4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json @@ -166,5 +166,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "14001" + "filament_id": "OFM0xjBG" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json index 0b6c2422b3..494d7245c9 100644 --- a/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @Hi-all.json b/resources/profiles/Creality/filament/CR-Silk @Hi-all.json index 838ffa205c..497ddcd169 100644 --- a/resources/profiles/Creality/filament/CR-Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @Hi-all.json @@ -141,5 +141,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json index ef4503c7f0..bffe643c8c 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json index 6261b0607b..39ba90b647 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json @@ -143,5 +143,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json index a5e4bf6b40..33b0ddc999 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json @@ -143,5 +143,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1C-all.json index ce4e3be3ee..7ba2624bae 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1C-all.json @@ -158,5 +158,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json index c44216537a..ddbf57b5f2 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json index 164cadd6cd..3e0e45cd87 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json index 83927ba13b..a2320f3f4e 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json @@ -163,5 +163,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json index 401753cdbd..4c1f433c61 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json index 2151efcec7..9c1415001b 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @K2-all.json b/resources/profiles/Creality/filament/CR-Silk @K2-all.json index dc5301be79..97e5d7da31 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json index 3e62f7680c..11a92b0357 100644 --- a/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json @@ -170,5 +170,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "05001" + "filament_id": "OF3OMgrI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json index d27ed62681..8ad140c757 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K1C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1C-all.json index 490e293ab9..001f3c5e5c 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json index 8186e5a558..9d10ae7b5c 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json index 34343ecff5..5be19a6852 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json index bcc65299d1..b79e38758b 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json @@ -166,5 +166,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json index abd8207f32..e3ea591f17 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json @@ -171,5 +171,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @K2-all.json b/resources/profiles/Creality/filament/CR-TPU @K2-all.json index 9f0e96c015..a336ca1e66 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2-all.json @@ -171,5 +171,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json index 7181fce5e0..3b6e8923eb 100644 --- a/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json @@ -175,5 +175,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "16001" + "filament_id": "OFG2RkhN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json index 54c9f99ea0..2d59b01143 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "17001" + "filament_id": "OFGxC8gB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Wood @K1C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1C-all.json index 7def3b58f7..20477f04a9 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "17001" + "filament_id": "OFGxC8gB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json index 59364bfce5..95dc4f4c95 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "17001" + "filament_id": "OFGxC8gB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json index ce6631705f..e029b37f79 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "17001" + "filament_id": "OFGxC8gB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json index 9d5910633b..aa7a1f5eee 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "17001" + "filament_id": "OFGxC8gB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json index 1c3034cd80..fb07f6a231 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "mriWPwWZUKmr7ws0", - "filament_id": "07001", + "filament_id": "OFYPdJ7t", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic ABS.json b/resources/profiles/Creality/filament/Creality Generic ABS.json index 5fc04c19ac..00bcd95e19 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "fv5g33ofjgyjVexC", - "filament_id": "GFB99", + "filament_id": "OFYPdJ7t", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json index d2e8d0d5b5..fa85c2a3ec 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "4muzPKAzy8FJKM5D", - "filament_id": "19001", + "filament_id": "OFpAaY6w", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json index e46869feb9..ff2a1eb68c 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic ASA @Hi-all", "from": "system", "setting_id": "C7IB6HSJxW598zFA", - "filament_id": "OFNbajj9", + "filament_id": "OFLuczRG", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA.json b/resources/profiles/Creality/filament/Creality Generic ASA.json index ddf812b5ce..53ca8f06df 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "jHgcISP1UXOPsGH0", - "filament_id": "GFB98", + "filament_id": "OFpAaY6w", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json index 3b37837a4c..53b1a95c72 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "8caHexyoeQW9p1NF", - "filament_id": "11001", + "filament_id": "OFMqYusc", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF.json b/resources/profiles/Creality/filament/Creality Generic PA-CF.json index 92a2c25893..c9aee7e056 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF.json +++ b/resources/profiles/Creality/filament/Creality Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "hBNsuwMzm7ZZn15D", - "filament_id": "GFN98", + "filament_id": "OFUWRqwb", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Creality/filament/Creality Generic PC.json b/resources/profiles/Creality/filament/Creality Generic PC.json index 305de9f580..9297344a75 100644 --- a/resources/profiles/Creality/filament/Creality Generic PC.json +++ b/resources/profiles/Creality/filament/Creality Generic PC.json @@ -3,7 +3,7 @@ "name": "Creality Generic PC", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC99", + "filament_id": "OFe8UJXH", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json index 6dd5926993..6aeba98a01 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "vRVsTatkrE46rzRB", - "filament_id": "06001", + "filament_id": "OF4Mf5Gz", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json index c1888475bb..d914f2eb4b 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PETG @Hi-all", "from": "system", "setting_id": "G4ZIJDNOpQvutOfs", - "filament_id": "OFvGSn0l", + "filament_id": "OFqKmLJe", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG.json b/resources/profiles/Creality/filament/Creality Generic PETG.json index 28c70a1f6a..e09d44758c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ixhOwyMvBCpI8nQs", - "filament_id": "GFG99", + "filament_id": "OF4Mf5Gz", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json index 23b15169e9..8198b078e4 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "zQiwnlxGlX4pFOHR", - "filament_id": "04001", + "filament_id": "OFACSw9O", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json index c2f037e2b0..513d2bd088 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "4F3dZWvsniH9QHtr", - "filament_id": "OFLriDvE", + "filament_id": "OFrO2zyn", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json index 92e419b26a..50305f2dd2 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "KzaopZGQPw5OJFFD", - "filament_id": "OFLriDvE", + "filament_id": "OFrO2zyn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json index a30c1ec949..f5f509897a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "ptxV78rC6wevH916", - "filament_id": "OFLriDvE", + "filament_id": "OFrO2zyn", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json index 3f6d5e5633..8a0f79495f 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "ozHstwkc3N5LGWLV", - "filament_id": "OFLriDvE", + "filament_id": "OFrO2zyn", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json index 88b5c57c1a..3aa8f60c48 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "xF1B593frol5PWVw", - "filament_id": "OF43idK2", + "filament_id": "OFpSYJLI", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json index d5247b1d32..05b1d2afc7 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "R7Jo7NhjsR1iU2Fd", - "filament_id": "OF43idK2", + "filament_id": "OFpSYJLI", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json index f1b58bb091..3d3c0276dc 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "3hreTG3DjcgmwZC2", - "filament_id": "OF43idK2", + "filament_id": "OFpSYJLI", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json index a13e886b89..d1723b25ba 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "fxZf5E6IHWWq3dsu", - "filament_id": "OF43idK2", + "filament_id": "OFpSYJLI", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json index f3686b9edd..1942508586 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Ender-3V3-all", "from": "system", "setting_id": "uPFnSMh7WoXmMAoy", - "filament_id": "OFTszIHE", + "filament_id": "OFp8gtPH", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json index 2762cdee53..c79ddb8933 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "RPDVqZcn8EZizd1U", - "filament_id": "OFTszIHE", + "filament_id": "OFp8gtPH", "instantiation": "true", "filament_flow_ratio": [ "0.97" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json index ff94adbabf..b9be0b8f93 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K1-all", "from": "system", "setting_id": "pxvc0ICvqc0M3wYV", - "filament_id": "OFTszIHE", + "filament_id": "OFp8gtPH", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json index 5eba612ef7..ed5b560d12 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @K2-all", "from": "system", "setting_id": "qS0Mlt24iz1k4P7n", - "filament_id": "OFTszIHE", + "filament_id": "OFp8gtPH", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json index 3ac6f207f4..8381e376bb 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json @@ -4,7 +4,7 @@ "inherits": "Creality Generic PLA @Hi-all", "from": "system", "setting_id": "OEc7Bc7WG99tuO5D", - "filament_id": "OFdLGn0R", + "filament_id": "OFNW4ZTC", "instantiation": "true", "filament_flow_ratio": [ "0.88" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF.json index 83fa21d7d6..7c09aa8e4e 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "DCCWPQGMsvDOucwx", - "filament_id": "GFL98", + "filament_id": "OFSDFYs4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA.json b/resources/profiles/Creality/filament/Creality Generic PLA.json index 6791ec64c4..fe82530a7c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "rUYYpB3GkiNCVyfY", - "filament_id": "GFL99", + "filament_id": "OFACSw9O", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json index 437e0875bf..2787b4e7ea 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "aaiFHjbveXabDAMr", - "filament_id": "10001", + "filament_id": "OFhcrFw9", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU.json b/resources/profiles/Creality/filament/Creality Generic TPU.json index 904768bb5e..13fc25d3a7 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "mKCynAMC7cjY03c0", - "filament_id": "GFU99", + "filament_id": "OFhcrFw9", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Creality/filament/Creality HF Generic PLA.json b/resources/profiles/Creality/filament/Creality HF Generic PLA.json index 2cad2fa504..7b2558d207 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic PLA.json +++ b/resources/profiles/Creality/filament/Creality HF Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "p07b7w0HDxavGLdd", - "filament_id": "OFZjZ1k7", + "filament_id": "OFmhWhEf", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json b/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json index 64319441a4..9090224d19 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json +++ b/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Jp93uqYennsWVAKe", - "filament_id": "OFfkPhrJ", + "filament_id": "OFMIurFh", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json index 8dc6b98afb..cb50c6f7fb 100644 --- a/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "9Ek7KtQF2kgJbeXg", - "filament_id": "03001", + "filament_id": "OFFP4ORR", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json index 7880478750..6a71e56fff 100644 --- a/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "YUtnpJsC9o1D3NUR", - "filament_id": "01001", + "filament_id": "OFAIrQXu", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json index 9c5a06621b..d44e4d96bf 100644 --- a/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "fZvWZ9kfPN8MU6cX", - "filament_id": "02001", + "filament_id": "OFGwT5Av", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json index 8211036350..d8a060f9b5 100644 --- a/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "S4nzxbjE4DmkoS7p", - "filament_id": "05001", + "filament_id": "OFfuih8e", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json index bd67446620..a7c696718f 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json index 20e1c80d6c..c680265601 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json index 36b97a2268..50816aed69 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json index eab3e35431..43728032ef 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json index 10971264e8..25642697d9 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json @@ -151,5 +151,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json index 1b6b372fd5..16a318a1e0 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json index e70da1c59e..e9693dabcc 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json b/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json index 415263d110..e19e06f40e 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json @@ -166,5 +166,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "09001" + "filament_id": "OFks6esg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json index 8b2802939b..3fd9b4ef24 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "09002" + "filament_id": "OFfSqS4R" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json index 0d353b5b00..a27a828dfb 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json @@ -164,5 +164,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "09002" + "filament_id": "OFfSqS4R" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json index ce9f2f0186..4f831d47ab 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "09002" + "filament_id": "OFfSqS4R" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json index b3178db08d..9c2fd90d30 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "09002" + "filament_id": "OFfSqS4R" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json index 33d7a84e98..c96ff98d72 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "09002" + "filament_id": "OFfSqS4R" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json index 0c911f30cb..711b1b22a7 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json @@ -143,5 +143,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json b/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json index a7ff4e7247..27ea82bdd3 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json index 7a70d00077..ed995443e3 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json @@ -151,5 +151,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json index a9bd4373e6..c220fa54ac 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json @@ -151,5 +151,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json index 258c51c0d0..2471ec31bb 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json @@ -151,5 +151,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json index 98e13e5899..f10bf01177 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json @@ -151,5 +151,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json index 625795d82b..51b85450b3 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json @@ -148,5 +148,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json index 096baea484..8e04e8fee9 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2-all.json index e7f978e6cb..b26145bea9 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json index a4f9b7c7ce..11a85cc128 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "08001" + "filament_id": "OFWao3Ic" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json index 6690a03676..d1f8662025 100644 --- a/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Generic ABS @Hi-all.json index e64f47d466..9f43259110 100644 --- a/resources/profiles/Creality/filament/Generic ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Hi-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json index 4c78f3881a..4d1de77b9e 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json index 0841cb593a..974ca3a49a 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json index 8c297b397d..8fa83c2dbf 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1C-all.json index 2f21834dc7..0d8c23a2e7 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json index 4135ea39ac..888b283059 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json index eb71fa7e64..58d749dea3 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json index d6f73b5e64..425411f466 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json @@ -154,5 +154,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json index e3c1674f0b..a03c0fbfcb 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json index e895bc8ab8..846dc3b748 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json @@ -175,5 +175,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @K2-all.json b/resources/profiles/Creality/filament/Generic ABS @K2-all.json index f9949a0dc5..0eefa273a9 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2-all.json @@ -159,5 +159,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00004" + "filament_id": "OFY9muEs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json index 1b8af0ce94..6f9ee6971e 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json index 9ffdccc2f3..d5850749d2 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json index 7e83bc3c50..8894ee7af1 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1C-all.json index eaf1f69185..2669b08f43 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json index 338fc4981a..0a5dc5d18a 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json index e2db7afa6e..33cf5b2860 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json index f9aa956e15..f1bdbc1310 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json index 2723557aa6..346f7bfec6 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json index 79cd23a4f4..758d45606e 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K2-all.json b/resources/profiles/Creality/filament/Generic ASA @K2-all.json index cb18ef79a4..68b9b71b9e 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00007" + "filament_id": "OFLPAxz3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json index 6736c660a2..f98421ad49 100644 --- a/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json @@ -144,5 +144,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00033" + "filament_id": "OF53eLVD" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json b/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json index decbb3e4a1..33ac63d296 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json @@ -127,5 +127,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json index 81dc3b2ac4..e0cfdb7090 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json @@ -158,5 +158,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json index ac52221e0e..9f2cbf4200 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json @@ -159,5 +159,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json index 35d6581e85..e79e575992 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json @@ -159,5 +159,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json index db50bb2d68..9bd399cbf0 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json @@ -159,5 +159,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json index 2dde38b996..c525c695d7 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json index c9e4552fed..4d3492a70f 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2-all.json index 6bb308253a..1f8bea7aef 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00010" + "filament_id": "OFo2UF2C" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json index b4b0fc15c4..9549195611 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json @@ -169,5 +169,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00012" + "filament_id": "OFsFon5l" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json index 78fde3f1ab..5016c1e5a5 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00012" + "filament_id": "OFsFon5l" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json index f63576c7cf..33950552d8 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00012" + "filament_id": "OFsFon5l" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json index 23a86958eb..7b1ab3190b 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00012" + "filament_id": "OFsFon5l" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json index d004f30737..255e9e8b6e 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00012" + "filament_id": "OFsFon5l" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json index 9fd3eb7324..12c3698ca6 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K1C-all.json b/resources/profiles/Creality/filament/Generic PA @K1C-all.json index ef8e035867..310dfb7abd 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json index 91bdcf21c7..0d134ae474 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json index 7f077d59a8..1396769307 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json index 59e941c60f..950b84e7f0 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json @@ -179,5 +179,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json index c9df3bc667..c8ddd05024 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json @@ -192,5 +192,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA @K2-all.json b/resources/profiles/Creality/filament/Generic PA @K2-all.json index 8579386858..b98aac22a0 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2-all.json @@ -192,5 +192,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00008" + "filament_id": "OFg8ndtj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json index b457a527a5..c047fb7774 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json @@ -148,5 +148,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00009" + "filament_id": "OFQLcbps" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json index 2d4f9cb2bf..360ecbf35b 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00009" + "filament_id": "OFQLcbps" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json index 8263c9d426..022474e6f1 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00009" + "filament_id": "OFQLcbps" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json index 49173fecd4..40586091b0 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00009" + "filament_id": "OFQLcbps" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json index 56c2aeed8a..0b0042c6c8 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json @@ -178,5 +178,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "00009" + "filament_id": "OFQLcbps" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json index 3fc6fa4644..fb65088525 100644 --- a/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json @@ -178,5 +178,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00025" + "filament_id": "OFM4iJlv" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json index 82cd2c4faa..04260f4d8e 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json @@ -184,5 +184,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json index 12f1662b2d..b141bc04ec 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json index 9e3a508a5d..6dd6902397 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json index ee75cdd734..9c70b899f0 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json index 71c4ef7a31..75cd58773a 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json @@ -187,5 +187,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json index 5c71b8ea97..6388151090 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00015" + "filament_id": "OFhTPf6L" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json index d113edd116..5919945b58 100644 --- a/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00034" + "filament_id": "OFh9u9c0" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json index 25956f1c1c..d1decb74cc 100644 --- a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json @@ -178,5 +178,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00022" + "filament_id": "OF8eaY7j" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json index 5a29d469ef..5ccb21724d 100644 --- a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json @@ -180,5 +180,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00022" + "filament_id": "OF8eaY7j" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json index 3fee83483f..3e007d79c6 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json @@ -193,5 +193,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json index 100798cac6..dcc9738515 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json @@ -194,5 +194,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json index 71dff576e2..2f5ae88e9d 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json @@ -194,5 +194,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json index 956496c6a1..e7ffe11efa 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json @@ -194,5 +194,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json index 2b21d3680c..8d4157e8cd 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json @@ -193,5 +193,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json index cd4b5491a9..a013abb416 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json @@ -180,5 +180,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json index 0c507bc83d..e8032a6b4c 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json @@ -180,5 +180,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00016" + "filament_id": "OFH7b12v" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json index b2e4a4cc1a..67c0d17aa6 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K1C-all.json b/resources/profiles/Creality/filament/Generic PC @K1C-all.json index c23127714d..30bb957e88 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json index 5a775566d2..450b46b2af 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json index 11d4aa54b0..353610592a 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json index a4fd7b8e17..e4a1d358f7 100644 --- a/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json index 17b8f5ba3c..99c3232a10 100644 --- a/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00021" + "filament_id": "OFLakOUI" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json index 5e82819e32..c84c58a220 100644 --- a/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00032" + "filament_id": "OFu1evlr" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json index f2bd3dde2b..047bacd756 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json @@ -184,5 +184,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K1C-all.json b/resources/profiles/Creality/filament/Generic PET @K1C-all.json index b855b18446..ae435635dd 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json index fef797ee4b..93e9cd11f0 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json index 6de2eb826d..4e860053d9 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json index d23ec6c681..cf56f3c9af 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json @@ -188,5 +188,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json index ff35401f39..4da77efe33 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET @K2-all.json b/resources/profiles/Creality/filament/Generic PET @K2-all.json index 52aaa6e18c..ef761807b0 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00020" + "filament_id": "OF6MOPWx" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json index c42769fe11..4c9fadfbc6 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json index a293723722..e98f8773a6 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json @@ -173,5 +173,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json index 5e49cbdb77..36c9dc92a6 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json @@ -173,5 +173,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json index 72bec3d1ba..c1955e0667 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json @@ -173,5 +173,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json index 627620e2e0..44eb974cdf 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json @@ -191,5 +191,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json index ab8839dd7e..ddfb603d30 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00013" + "filament_id": "OFQdaVZS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json index 74e49dfb40..cbdc915a23 100644 --- a/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Generic PETG @Hi-all.json index f855fb8217..32b171416b 100644 --- a/resources/profiles/Creality/filament/Generic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Hi-all.json @@ -147,5 +147,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json index 2cba8d0911..40fecf5d33 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json index 2626c596da..e82036ef1c 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json index af8cb7d371..649d2057b3 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1C-all.json index 1122d81c46..5d05e2a977 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json index 48b6087734..7f7459382a 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json index 5d518fde42..568b5a1cf5 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json index 1bb9217b84..6b10eac4c6 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json @@ -138,5 +138,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json index e50a03cb28..5d007dfff3 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json index 1b56e51679..69af8255c5 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json @@ -148,5 +148,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @K2-all.json b/resources/profiles/Creality/filament/Generic PETG @K2-all.json index 9df2e83d3d..a8e2308613 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json index 2fee02a703..301fc96ef9 100644 --- a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json @@ -159,5 +159,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "00003" + "filament_id": "OFYPdQJh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json index e4ab498063..5f03c5b211 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json index 8bbacdd073..4044297ea9 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json index d5a0981341..5c22d3e902 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json index 1414ef10c2..00f8180634 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json index 7114550576..5ed6aa15ea 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json @@ -145,5 +145,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json index d4f5068e4d..a801d09c9b 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json index d9c52ea4d4..a2b844f80f 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json @@ -136,5 +136,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json index 349f5d2418..954782024a 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "00014" + "filament_id": "OFoYSJKi" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json index 09c26dc704..63dead723c 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json @@ -148,5 +148,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00027" + "filament_id": "OFyLWVF3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json index dda8a48f06..5405f7dbcd 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00027" + "filament_id": "OFyLWVF3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json index c2a9b7cc5c..7d52685214 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00027" + "filament_id": "OFyLWVF3" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json index 6bb5cef8b2..ce8231d11a 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json index 831a63dc03..b79aa1d05f 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json @@ -140,5 +140,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json index a2757b6400..315347fc4f 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json index fe66c9659f..11bd5fd68a 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json index c4b6a70d4e..167ef73d00 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json @@ -137,5 +137,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1C-all.json index 87b5d0554c..7cad23ed0e 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json index a8e2ea3433..50db3c5fb5 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json index 9ad9f4d172..ddbc57ab8d 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json index 9b4f832744..6514b99d50 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json @@ -162,5 +162,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json index 97bfa85e57..96eafd022b 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json index 8c2f352b62..f8e0beaefe 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json @@ -136,5 +136,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @K2-all.json b/resources/profiles/Creality/filament/Generic PLA @K2-all.json index 5773b09d4a..ee71e52517 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2-all.json @@ -158,5 +158,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json index c0d5e84f04..07d9aa02e0 100644 --- a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json @@ -162,5 +162,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "00001" + "filament_id": "OFDSrzZ8" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json index c651861af8..3fd2827231 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json index 8721ebfd57..698bdc2927 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json index 9b686f0f9a..57228d8b7f 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json index a606564c5d..647819f8ea 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json index f0bd1b2659..ae3aa14a7a 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json index 9e1ed31ae4..7c1b681b1e 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json index aa6a91936f..ab73ebe1ba 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json index be755fcebb..381f25f899 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json index 2e54d39334..f1ce0ce42d 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json index 64c621680e..4dab8f0c8a 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json index c754999f33..111ac7470a 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json index 60fa4e2bee..4184a05737 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json @@ -179,5 +179,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "00006" + "filament_id": "OFWbdGsC" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json index 1cf6f9ecd9..da5c1ba172 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json @@ -143,5 +143,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json index d2dab74d67..a3dfac28d1 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json index 53f97c21f1..c7ce2639ae 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json index 92dc9c7f22..418248ed71 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json index 683eb16c4d..1ba33bf6dc 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json index 7210792495..f37ef16d31 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json @@ -159,5 +159,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json index 70e41a8078..1b4298f035 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json index 71b992c1fc..f81638a23f 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json index ba03b66ddd..50f7dac4eb 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json index 9e03746797..2c18b858e8 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json index 074fde8bfe..8b7030ff73 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json @@ -133,5 +133,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json index 953edaba8b..5826a18ba9 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json @@ -158,5 +158,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json index 30e6a20ebd..e67d570ad4 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "00002" + "filament_id": "OFi6PfUM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json index 59f53cbb9d..7aec44400e 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K1C-all.json b/resources/profiles/Creality/filament/Generic PP @K1C-all.json index 4c8ac4d0d0..ad01f49d51 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json index 1668dd04fa..fb56912bf1 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json index f82a464fe5..88acdf3d32 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json index 9a5f2f3e53..e34d70a902 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json index 38ba4abe64..e3167109d8 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json @@ -138,5 +138,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP @K2-all.json b/resources/profiles/Creality/filament/Generic PP @K2-all.json index 8f97f08d6b..8f0075422c 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2-all.json @@ -138,5 +138,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00019" + "filament_id": "OF1UNk9P" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json index 3f35f96343..e557ac36e4 100644 --- a/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00031" + "filament_id": "OFXkm8q1" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json index 37176e53e1..01f7c52bc9 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json @@ -169,5 +169,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00017" + "filament_id": "OFq9svOz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS @K1C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1C-all.json index d15aeef469..39a3449351 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00017" + "filament_id": "OFq9svOz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json index d2af02918e..af12995572 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00017" + "filament_id": "OFq9svOz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json index 69f7f95046..dd22fcf107 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00017" + "filament_id": "OFq9svOz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json index 964d010a97..deff12cad5 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json @@ -147,5 +147,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00017" + "filament_id": "OFq9svOz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json index 47c8c9dc0e..f07eed6f9a 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json @@ -169,5 +169,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00018" + "filament_id": "OF6rdQ6M" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json index c8e56eb45b..78f5a33e87 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00018" + "filament_id": "OF6rdQ6M" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json index 5a937397ac..8975f9792c 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00018" + "filament_id": "OF6rdQ6M" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json index ae80e3823a..11b1b3a155 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00018" + "filament_id": "OF6rdQ6M" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json index a538bfb7a1..3bbcf8f992 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json @@ -140,5 +140,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00018" + "filament_id": "OF6rdQ6M" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @Hi-all.json b/resources/profiles/Creality/filament/Generic PVA @Hi-all.json index a327524d0b..6fdad0ad0b 100644 --- a/resources/profiles/Creality/filament/Generic PVA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @Hi-all.json @@ -132,5 +132,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json index 468d910190..ba02942df2 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json @@ -124,5 +124,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K1C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1C-all.json index 208b12d48e..34d0a7231d 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1C-all.json @@ -125,5 +125,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json index 5f2d2d535a..607cf3b0dd 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json @@ -125,5 +125,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json index e527dfaddf..e5eff7fb64 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json @@ -125,5 +125,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json index 4e76a603d2..a4499aa85d 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json index 3902a813d5..9cf5bfd6bc 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PVA @K2-all.json b/resources/profiles/Creality/filament/Generic PVA @K2-all.json index 9d6376abe7..d69eab7457 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00011" + "filament_id": "OFDvXujf" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json index 65431307ec..a59be37173 100644 --- a/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json @@ -175,5 +175,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00023" + "filament_id": "OFDtop41" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json index 130d40baff..5135c5ee68 100644 --- a/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json @@ -158,5 +158,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00024" + "filament_id": "OFin64Qg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json index 2d59a7a434..da1860ce3c 100644 --- a/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00026" + "filament_id": "OFF3cuzT" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json index 5b50b540bf..54d1fd6680 100644 --- a/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json @@ -181,5 +181,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "00026" + "filament_id": "OFF3cuzT" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json index d5582bb484..18e8caacda 100644 --- a/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json index cb08115e87..0e093087d3 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json index 46e2de4629..12f548e797 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json index 45926b0b66..c7aa82e060 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1C-all.json index bcfcbd4836..4d77ed28a7 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1C-all.json @@ -147,5 +147,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json index 7d929554a8..4c29062659 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json @@ -147,5 +147,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json index 56491b9100..88523dd930 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json @@ -147,5 +147,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json index 46aee6149c..a06cdec298 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json index 62451e782a..07e97acb84 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json index 04348049b8..8793fc167e 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K2-all.json b/resources/profiles/Creality/filament/Generic TPU @K2-all.json index 4967c237e0..03d44388f5 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json index cd8b519c2e..c1d0268024 100644 --- a/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json @@ -168,5 +168,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "00005" + "filament_id": "OFgbpcy9" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json index c7ae970179..e300daac38 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "18001" + "filament_id": "OFCJpR7a" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json index e02b477267..d437c91d60 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "18001" + "filament_id": "OFCJpR7a" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json index c6bb9bd547..2c354d95bc 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "18001" + "filament_id": "OFCJpR7a" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json index 1eb74d0999..db920a7f56 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json @@ -156,5 +156,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "18001" + "filament_id": "OFCJpR7a" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json index 399c357b29..8f912cf729 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "18001" + "filament_id": "OFCJpR7a" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json index 3118bd2d96..16810d1886 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K1C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1C-all.json index 95e31de6b3..c720b4d1b0 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json index 6ea06b5eb7..01a49e2392 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json index 30411e4028..d3a45386ad 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json @@ -167,5 +167,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json index 3babd544ef..1b97d61b93 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json @@ -175,5 +175,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json index a508566f74..33a4406fdd 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json index 68cbfb27d7..f29ffdd702 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K2-all.json b/resources/profiles/Creality/filament/HP-ASA @K2-all.json index b7d3829cda..2d38575630 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "19001" + "filament_id": "OFPHLnoe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json b/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json index e627f5c5e8..9d7767c4d8 100644 --- a/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @Hi-all.json b/resources/profiles/Creality/filament/HP-TPU @Hi-all.json index 244f173f41..c9b6766149 100644 --- a/resources/profiles/Creality/filament/HP-TPU @Hi-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @Hi-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json index 8ed2212fa9..079dfebfe2 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json index 5c83cda993..7e5935cdf7 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json index f251c2e7db..62184e78e3 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1C-all.json index 6559456723..6762f0d2d4 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1C-all.json @@ -164,5 +164,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json index 825d30d323..e7534ade92 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json index 9a950cce1d..077936057a 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json index 19195696be..5b979963f0 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json @@ -168,5 +168,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json index 07423945cb..90201f7dcf 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json @@ -170,5 +170,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json index df44f03a65..b3779225c2 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @K2-all.json b/resources/profiles/Creality/filament/HP-TPU @K2-all.json index 4d1285f815..3768b17547 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2-all.json @@ -165,5 +165,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json index 796ce1e78f..1d225ec253 100644 --- a/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json @@ -179,5 +179,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "10001" + "filament_id": "OFGcMkEB" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json index 3f038190b1..e4a50b5fec 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json b/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json index 5e3b9d7de7..bb93a96d02 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json index f2a095c235..9749f95e35 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json index 35871f8ac5..a303e41640 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json index f160827598..b4780cb82d 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json index 0d57ad0380..1ae0bc6ddf 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json @@ -166,5 +166,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json index 78b1d7d719..03f8fbc354 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json index e6ef2cfb6c..d6c76e777f 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json index bbef4b2148..7ecce97627 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json @@ -163,5 +163,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json index edd4f7a352..de032398b5 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json index 4710c1f7b1..c3132a18b5 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2-all.json index 6aa0b2f736..63bf93483d 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "03001" + "filament_id": "OF8GnyFU" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json index efafa60017..d4deb0be89 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json @@ -145,5 +145,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json index 4b8ed94936..182364977c 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json @@ -166,5 +166,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json index c07d9981db..2bc12a6918 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json @@ -144,5 +144,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json index 3d69f8e7ae..065b9ac77e 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json @@ -144,5 +144,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json index 7193bf835b..872eeca4dc 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json index 0757ec1fc8..3685dbd854 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json index 387a549dbc..718112bd7b 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json index 2f3c64a6e1..df0df361ad 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json index 902e373f86..cf2c873e77 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json index a0f31de0c4..9b06765831 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "01002" + "filament_id": "OF70zbGS" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json b/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json index a6873b4dc2..4c39c1ac1a 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json @@ -136,5 +136,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json index df72136acc..53ab1e078e 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json @@ -163,5 +163,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json index 13670be4d9..9e267d07cf 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json @@ -160,5 +160,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json index eb7d7f3f03..67c567791c 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json @@ -160,5 +160,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json index 86a72078c6..b5182102e4 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json @@ -160,5 +160,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json index b4991bc3ff..9817bd9701 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json @@ -179,5 +179,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "01003" + "filament_id": "OFC1PzXz" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json b/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json index 7576185076..614c8a9ac8 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json index 3475d6f5aa..1fdeb7e4d3 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json index fb9bc8c08c..3430271e86 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json index 63ab61c68e..f92a629e09 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json index 0e3f217669..0443b606a1 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json index bce1cbb5f0..87c217d5db 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json index 4c77e3e4ab..90047e7778 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json index 706230c0b9..a0bc0bbfbc 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2-all.json index 527ec67332..09eb2487d3 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json index 0746b42880..746332ab6a 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "29001" + "filament_id": "OFLzx3J4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json index 01aeb86cdf..d5d494f3f4 100644 --- a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json @@ -195,5 +195,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "12005" + "filament_id": "OFn2GlhY" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json index 40139cf279..97f41d5746 100644 --- a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json @@ -195,5 +195,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "12005" + "filament_id": "OFn2GlhY" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json index 2f8bcbbacb..658908446c 100644 --- a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "12004" + "filament_id": "OFhkN0a7" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json index 3f4be12bf3..40870d5cd3 100644 --- a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json @@ -189,5 +189,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "12004" + "filament_id": "OFhkN0a7" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json index 3311a96082..915b8b67d9 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json @@ -192,5 +192,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json index b06066ce46..3529603ba6 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json @@ -193,5 +193,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json index 1e89fbaa08..a2c841f463 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json @@ -193,5 +193,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json index bf05bb6310..c597cd9c95 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json @@ -193,5 +193,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json index df43ebb973..67d0b403cc 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json @@ -190,5 +190,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json index 60e6f6e84e..f7e37afe69 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json @@ -180,5 +180,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json index 39fc5e217b..1f97108309 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json @@ -180,5 +180,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "12003" + "filament_id": "OF4APyxe" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json index 43f1d53cdc..85d5d66252 100644 --- a/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json @@ -167,5 +167,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "07002" + "filament_id": "OFUF7oA4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json index 3668981c2b..7592b6dbcf 100644 --- a/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json @@ -169,5 +169,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "07002" + "filament_id": "OFUF7oA4" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json index aa4a1da8b8..a333d63f3d 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json b/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json index fdc782abad..5998e1e8bd 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json @@ -145,5 +145,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json index 89090724f4..6bd1f3afea 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json index 85d9b0fc2d..058dfe5bd6 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json index afd34c32d2..f1ceb825e9 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json index b4f548e7d8..175aa8099c 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json @@ -151,5 +151,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json index a132ab6ba7..be8e2c58f5 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json index 1d4207f047..9bf2512abe 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json index 2b65adafad..983556224b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json @@ -145,5 +145,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json index 25acc10afb..32a8fae98b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json index f00003218e..cc058c4511 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json @@ -154,5 +154,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2-all.json index f0f86795ec..9bbf24c47f 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2-all.json @@ -144,5 +144,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json index 26b6def656..d8db7fd923 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json @@ -160,5 +160,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "06002" + "filament_id": "OFujZSdh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json index 459f8fcd55..69662a0296 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json @@ -136,5 +136,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json index 05fe909fb4..1005d22d7f 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json @@ -135,5 +135,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json index 9fa1a032be..e9008aede1 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json @@ -135,5 +135,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json index 3f99330c5b..2358ec054e 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json @@ -136,5 +136,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json index 544ae5fb6f..252b6dad9c 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json @@ -138,5 +138,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json index ec260e76f3..1962c54912 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json index e178e47042..68ae2439d7 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json index f88b59d4d7..a3ab600254 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json @@ -163,5 +163,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "06003" + "filament_id": "OFusbWjj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json index 0c1d8e5c2a..9fdfe1559b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json @@ -145,5 +145,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "06004" + "filament_id": "OFLgwqp2" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json index 4b719767d0..820b021b9e 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "06004" + "filament_id": "OFLgwqp2" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json index 346247a4aa..3129330404 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "06004" + "filament_id": "OFLgwqp2" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json index 9f28d154fb..eafa06d339 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "06004" + "filament_id": "OFLgwqp2" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json index aa981c3a30..8fbc885c07 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json b/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json index 9b1ec357b7..c5297f78ed 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json @@ -142,5 +142,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json index c3e7bed7f8..be08cd5bb4 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json index 717c0835dc..2d764065a5 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json @@ -136,5 +136,5 @@ "Creality K1 SE 0.6 nozzle", "Creality K1 SE 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json index 3679080841..0c80515aaa 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json @@ -134,5 +134,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json index fa5a7a6ac2..4b3f6b5a60 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json @@ -157,5 +157,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json index 7626dae835..f0513b112b 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json index f95f80a5a4..c4175d3ead 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json index 2d4608e32f..193bf2dee6 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json @@ -155,5 +155,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json index 973044ff35..3d8a1cbdd6 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json @@ -157,5 +157,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json index 6480fb0dad..34f98b70ae 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json @@ -136,5 +136,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2-all.json index 910f9888fe..f47ea8a5d8 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2-all.json @@ -155,5 +155,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json index 8e9b21749f..00afa33b11 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json @@ -164,5 +164,5 @@ "Creality SPARKX i7 0.6 nozzle", "Creality SPARKX i7 0.8 nozzle" ], - "filament_id": "01001" + "filament_id": "OFCZsqXg" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json index f55de5ef56..fb92e57672 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json index ac7a413888..e63ee3717d 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json index f15929e486..d1a9cb3a38 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json index af9c28e809..368b104901 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 SE 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json index b44b0ceb3d..215a01e8a7 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K1 SE_CFS-C 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json index f4f4b2e536..d6d269db66 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json index 952822e040..5ed8fbe15f 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json index f65f1b5ec5..fe506e1147 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json @@ -153,5 +153,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json index ebb185aabc..f9267d07e8 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json @@ -162,5 +162,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json index b32297ee79..9c465b0d30 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json index 758086354d..94ac06f8bb 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json @@ -145,5 +145,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json index b280582803..d0344132b6 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json index ccb1e5a690..53b640d939 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json @@ -172,5 +172,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "02001" + "filament_id": "OFTnWzBs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json index e13b1c8420..c817224955 100644 --- a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json @@ -181,5 +181,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "12002" + "filament_id": "OFNvBIL0" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json index 314b8641aa..4f7d4ddf2f 100644 --- a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json @@ -177,5 +177,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "12002" + "filament_id": "OFNvBIL0" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json b/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json index fd0c47db8e..02756e4af3 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json @@ -152,5 +152,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json index e822a0fa7a..0af9505f19 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json index 8e9d53c893..7afa71cd4c 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json index 416ee437c0..058d4439ea 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json index d8dcb3862b..f90af90902 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json index b74711cd62..7580e9f4e9 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json index a0fdc30bab..1e307464b1 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json index 84a8a22de5..9134285053 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json @@ -139,5 +139,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json index 95f30eb149..154376069e 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json @@ -157,5 +157,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json index bc3de91594..43ccb7898c 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json @@ -175,5 +175,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "01004" + "filament_id": "OFXnToSX" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json index 05b64e3648..62f308a71b 100644 --- a/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "P1003" + "filament_id": "OFrOh600" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json b/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json index c290ac0748..5d7f4818bd 100644 --- a/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "P1001" + "filament_id": "OFPkCJKE" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json index bee02a0f14..20bd0700ab 100644 --- a/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json @@ -168,5 +168,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "P1004" + "filament_id": "OF66KUAN" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json b/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json index 47e17257bd..acd8558abe 100644 --- a/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "P1002" + "filament_id": "OFKbdiiJ" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json index 66fb01a064..1e77a28ccf 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json @@ -123,5 +123,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json index 208583adff..626d34362d 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json @@ -126,5 +126,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json index f9d68e033a..8d1dc8a1c0 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json @@ -128,5 +128,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json index d88e732e2f..fca00e01ab 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json @@ -128,5 +128,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json index 5c62188c93..da86d9e27e 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json @@ -128,5 +128,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json index 5b73363f5d..79b83b8e69 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json @@ -118,5 +118,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json index 0abc37c050..b159f9141b 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json @@ -149,5 +149,5 @@ "compatible_printers": [ "Creality Ender-3 V4 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json index 8340313872..163ed96d8a 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json @@ -142,5 +142,5 @@ "compatible_printers": [ "Creality Hi 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json index b32740a47c..5612fad4d2 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1 Max_CFS-C 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json index 2b0d1058cc..f975e2b6c4 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1C 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json index 9cfa3eb9e9..9f4c2d9029 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1C_CFS-C 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json index 4cb9bfa4ff..0c7bd485be 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K1_CFS-C 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json index b4e93a4aea..06b1fc8729 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json @@ -161,5 +161,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json index 63b6a48fa2..37702f76c0 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K2 Pro 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json index 590e345f39..7ff723f655 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json @@ -146,5 +146,5 @@ "compatible_printers": [ "Creality K2 SE 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json index 3e8753160b..2d68106751 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json @@ -164,5 +164,5 @@ "compatible_printers": [ "Creality K2 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json index 3c15bcb7d0..9bad5351c2 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json @@ -170,5 +170,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "01601" + "filament_id": "OF02UAVh" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json index 449aed7663..77f2c6a6bf 100644 --- a/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E3001" + "filament_id": "OFTXduCM" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json index d9e439ef2b..1afd5f1511 100644 --- a/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json @@ -155,5 +155,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E4001" + "filament_id": "OFUmS5z5" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json index 0befedf49f..08ab12e2c9 100644 --- a/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json @@ -185,5 +185,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E8001" + "filament_id": "OFHaYaB1" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json index abbc6f48cc..745ca87011 100644 --- a/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json @@ -83,5 +83,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2001" + "filament_id": "OF3kBrdA" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json index 2ac796d298..db95688083 100644 --- a/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json @@ -80,5 +80,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2002" + "filament_id": "OFrdZ0cK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json index 5803a71cef..4885eb89a0 100644 --- a/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json @@ -83,5 +83,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2003" + "filament_id": "OFFbQscs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json index a5bdfb25cd..d4f35de9be 100644 --- a/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json @@ -159,5 +159,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1001" + "filament_id": "OFqINlYj" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json index 3712719e47..e76dc3d1fa 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json @@ -74,5 +74,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1005" + "filament_id": "OFnHc3D6" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json index a5a1e52d46..0c540de90b 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json @@ -65,5 +65,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1006" + "filament_id": "OFOHOf2F" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json index 99550707a2..2e4b7703a0 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "00035" + "filament_id": "OFi5RSve" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json index 07fdbcd5b2..d5f4324da1 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json @@ -165,5 +165,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1004" + "filament_id": "OFhbolij" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json index 5a1f80d5de..bca728ae00 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1003" + "filament_id": "OFDETOM6" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json index d09abc2625..fa57453069 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json @@ -162,5 +162,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1002" + "filament_id": "OFIRUqWi" } \ No newline at end of file diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json index 8446df4752..52deadf521 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS @base", "setting_id": "VJEyK87ZYvHmamB9", - "filament_id": "OF6XuVQE", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json index c7b34c9694..ea320b01e4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon ABS @base", "from": "system", "setting_id": "Kz41mb2M9xLbEJ97", - "filament_id": "OF6XuVQE", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json index 3865f034fa..1f4da6c3f8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS @base", "setting_id": "A5FQdwh0Xo7aTRpq", - "filament_id": "OF6XuVQE", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index 55fbd40ee4..998588dbac 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS @base", "inherits": "fdm_filament_abs", "setting_id": "aZRVIlDze62Bbw81", - "filament_id": "P510cfb0", + "filament_id": "OFafocjw", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json index 40cec441cc..cc34341ceb 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", "setting_id": "OfiOryklf7FDVCz8", - "filament_id": "OFcZZWnB", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json index 77205f02c2..5c85efa062 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon ABS-A100 @base", "from": "system", "setting_id": "pIyU9uXQ5V3hsg5F", - "filament_id": "OFcZZWnB", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json index c78d3720df..765f1ce75c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", "setting_id": "xhYh9x1vescinfbF", - "filament_id": "OFcZZWnB", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index dddc147ff2..a943b60a8b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -3,7 +3,7 @@ "name": "Cubicon ABS-A100 @base", "inherits": "Cubicon ABS @base", "setting_id": "vGIT4KZvqojIh2up", - "filament_id": "P510cfb1", + "filament_id": "OFN9fefN", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json index 296268a3f0..0deea7e69f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABSk @base", "setting_id": "TXcodZkab4fofnEn", - "filament_id": "OFNQHqAV", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json index afd798384f..1a2e21517c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon ABSk @base", "from": "system", "setting_id": "CsthNnKn8WlBbkP4", - "filament_id": "OFNQHqAV", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json index 6f60bb4c13..1295c2189e 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABSk @base", "setting_id": "UVitMFMxvdf34qZw", - "filament_id": "OFNQHqAV", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index e1546d3bae..a042ecbea3 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -3,7 +3,7 @@ "name": "Cubicon ABSk @base", "inherits": "Cubicon ABS @base", "setting_id": "UbOUO0K3Y2iRPBtf", - "filament_id": "P510cfb2", + "filament_id": "OFgVQkqW", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json index 8edf5f65e5..c8e56eaa13 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PA-CF @base", "setting_id": "nupuIJggdc1EKDqG", - "filament_id": "OFOJUJAS", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json index eda94acc49..7cb486c4e8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PA-CF @base", "from": "system", "setting_id": "NPjuy4deP6Ly7u9s", - "filament_id": "OFOJUJAS", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json index f67e32c8ac..4279540ac4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PA-CF @base", "setting_id": "ygB1Uf9Vbw9LJZc8", - "filament_id": "OFOJUJAS", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json index 51c89949f6..daf2b62754 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Cubicon PA-CF @base", "inherits": "fdm_filament_pa", "setting_id": "55cJDyCoEudfOePY", - "filament_id": "P510cfd0", + "filament_id": "OFD21ije", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json index aa761b7454..d115a6da70 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PC @base", "setting_id": "c0sUPS0SRYUNjEpB", - "filament_id": "OFaxQnfz", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json index e5c07509a4..9890ed585f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PC @base", "from": "system", "setting_id": "XGXjHwuHUjtAJGl1", - "filament_id": "OFaxQnfz", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json index f565564c82..63be065b85 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PC @base", "setting_id": "jbYKOK1A0Oxm9t0f", - "filament_id": "OFaxQnfz", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index 5ecc4082c8..83e3afb15b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -3,7 +3,7 @@ "name": "Cubicon PC @base", "inherits": "fdm_filament_pc", "setting_id": "Mzg6jfwb2nqfGkdV", - "filament_id": "OFnLnZQo", + "filament_id": "OF79Fbo6", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json index c9db611832..001b4ecf54 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PETG @base", "setting_id": "dsX01tCkd2Usk104", - "filament_id": "OF0VEdLB", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json index 653ca65758..b87bc4b3e5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PETG @base", "from": "system", "setting_id": "2hYoCR5qUXCWIAxZ", - "filament_id": "OF0VEdLB", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json index 919a262523..1b46fe6d64 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PETG @base", "setting_id": "5pfiRdyNz9dvT4Q6", - "filament_id": "OF0VEdLB", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index 2242ba36ca..cf4ac7a4af 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -3,7 +3,7 @@ "name": "Cubicon PETG @base", "inherits": "fdm_filament_pet", "setting_id": "bGfz4phwIdqSz0Hx", - "filament_id": "P510cfc0", + "filament_id": "OF8Hx3Pi", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json index fc5d62bdc5..5110547028 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "xXJgHAeNf1JdCitr", - "filament_id": "OFq6IhFg", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json index 39d9a7835e..940152ae16 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "o2BQL6OKtxDmBkWV", - "filament_id": "OFq6IhFg", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json index d94d38529c..ee5a5a1d3d 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "WkZrzDlGvb25OtrF", - "filament_id": "OFq6IhFg", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 665ba58d59..7dd06c3498 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ypwdJAu0NlEsWpf4", - "filament_id": "P510cfa0", + "filament_id": "OFjcwUEm", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json index c068eba680..3acad023d0 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "fNR2Bw3e4TGcWhq0", - "filament_id": "OF2HQqTC", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json index f8c8331b31..32a6607377 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "wukhnaCJaOLUUdiU", - "filament_id": "OF2HQqTC", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json index 0da1b35a44..823e0e51ca 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "JVShu8DKQ3euGHec", - "filament_id": "OF2HQqTC", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index cb916a9410..5b98d6fcf8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Cubicon PLA+ @base", "inherits": "Cubicon PLA @base", "setting_id": "ETnuhiOZRh1jxrVk", - "filament_id": "P510cfa1", + "filament_id": "OFRmGKVX", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json index b0a23bdd31..865d1af0c3 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "vcLVF3cglagBfVAF", - "filament_id": "OFti31HS", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json index 43f571041e..999da52ede 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "3TbOucKB5TGk8sXG", - "filament_id": "OFti31HS", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json index e797ea0312..637cdb87f2 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "Vm1oDASHoFUfDrzQ", - "filament_id": "OFti31HS", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json index 831450deef..7c851e2a34 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json @@ -3,7 +3,7 @@ "name": "Cubicon PLAi21 @base", "inherits": "Cubicon PLA @base", "setting_id": "mnwC7ijXXV72lBOt", - "filament_id": "P510cfa2", + "filament_id": "OFdkWDiy", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pa.json b/resources/profiles/Cubicon/filament/fdm_filament_pa.json index c2e4cf86df..b75ab9a8c9 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pa.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN99", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pc.json b/resources/profiles/Cubicon/filament/fdm_filament_pc.json index 0f550063ad..120689c074 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pc.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFC99", "instantiation": "false", "supertack_plate_temp": [ "0" diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pet.json b/resources/profiles/Cubicon/filament/fdm_filament_pet.json index 250915a07b..63996fb69a 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pet.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG99", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json index d80b197394..a22562e2b4 100644 --- a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PC @System", "from": "system", "setting_id": "HMOa2jbj19Xjipt5", - "filament_id": "GFC99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" diff --git a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index 693551c428..d53c8ac746 100644 --- a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "4qShNrl9EWAVBfeG", - "filament_id": "GFG99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" diff --git a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index cf1db6e225..a2a12da874 100644 --- a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "WbAYFZdqFwEZnNAX", - "filament_id": "GFL99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" diff --git a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 6ae729d622..eca53185a9 100644 --- a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "53UFt3Q63NB0ztlP", - "filament_id": "GFL98", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" diff --git a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index ccb6d16c73..2356b4a053 100644 --- a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "dyOUyXNOKP1VmSal", - "filament_id": "GFS99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" diff --git a/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json index c88ee2da7d..2527ff824e 100644 --- a/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "H45dfn4BGdLAx9nN", - "filament_id": "GFU99", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json index e32baac8f9..713eac979d 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "bvZOHe5ejWqBALPQ", - "filament_id": "OFxodd2u", + "filament_id": "OFRpAZ1P", "instantiation": "true", "filament_flow_ratio": [ "0.987" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json index 32980cb53e..94a2707c85 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "qlQo6a93esZv2l9a", - "filament_id": "GFG99", + "filament_id": "OF4oCRKe", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json index d4b8ab071c..5a130f9040 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gfxr3MiE4uI2Xxy7", - "filament_id": "GFL99", + "filament_id": "OFifxPW1", "instantiation": "true", "filament_flow_ratio": [ "0.987" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json index e971b6884c..3d02e90708 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "2L1U33wC0LofrMWs", - "filament_id": "GFB99", + "filament_id": "OFbt04e0", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json index 273eb70ec5..90d7a3e8af 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json @@ -4,7 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "weKWPiNIe3TmOXRn", - "filament_id": "OFUYjPc4", + "filament_id": "OFD2JNS1", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json index 822f95fe2c..3fbcaefaa1 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json @@ -4,7 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "kZAEjhLS29WQeyf1", - "filament_id": "OFUYjPc4", + "filament_id": "OFD2JNS1", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json index 62373995e2..0b0f6b155f 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json @@ -4,7 +4,7 @@ "inherits": "Dremel Generic PLA", "from": "system", "setting_id": "pIlkZjNrXnHJDszp", - "filament_id": "OFUYjPc4", + "filament_id": "OFD2JNS1", "instantiation": "true", "slow_down_min_speed": "10", "close_fan_the_first_x_layers": "3", diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA.json b/resources/profiles/Dremel/filament/Dremel Generic PLA.json index b5263d20f3..d46a8cebfa 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA.json +++ b/resources/profiles/Dremel/filament/Dremel Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "blJERdJqaaRmRdD4", - "filament_id": "GFL99", + "filament_id": "OFaU2JxD", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json index 86b533bba1..43c786705e 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "EABSB00", + "filament_id": "OFxOHhZw", "instantiation": "false", "filament_vendor": [ "Elegoo" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json index c48b5e5671..ea910dec86 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "EASAB00", + "filament_id": "OFobDOW5", "instantiation": "false", "filament_vendor": [ "Elegoo" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json index bc100dfe2f..155d6f8290 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo ASA-CF @base", "inherits": "Elegoo ASA @base", "from": "system", - "filament_id": "OFAiqi5v", + "filament_id": "OFryjl35", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json index 87907a36f8..a05ee2347c 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PAHT @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "EPAHTB00", + "filament_id": "OF0h7ERL", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json index d60048b30a..ecaac93aaf 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "EPCB00", + "filament_id": "OFUyDDNv", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json index 9aeb40e0a8..91034fda41 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PC-FR @base", "inherits": "Elegoo PC @base", "from": "system", - "filament_id": "OFzFbFcl", + "filament_id": "OFlsTpJG", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json index 6290eba7f9..c1b9e78897 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PET-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFSCm6pJ", + "filament_id": "OFV5tNw6", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json index 29d83df77a..ec92793955 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "EPETGB00", + "filament_id": "OFLcd093", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json index ba3e4715a3..9645c4572f 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG HF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFxjFYxE", + "filament_id": "OFlP3KWq", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json index 4df7589911..ec604d722c 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG PRO @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFmOWC74", + "filament_id": "OFOsHDnB", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json index b75929e76a..2d7d0f9777 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG Translucent @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFOkTA0C", + "filament_id": "OF6Ll8lK", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json index 3a3b837513..60a643b2a3 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFiyGNbI", + "filament_id": "OFuUuIhR", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json index e7020a00bf..3ff4b96375 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PETG-GF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFBvxnjM", + "filament_id": "OFmveLWz", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json index 40e594ee62..8965bae8e1 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "EPLAB00", + "filament_id": "OFvgE0Zh", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json index 42f77b0b2b..93c52a3382 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Basic @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFHtQDC9", + "filament_id": "OFm06H6V", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json index ef7c46673d..a25fcf8daa 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Galaxy @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OF09vOcG", + "filament_id": "OFU1zPxE", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json index cffd7b0185..a07012d83b 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Glow @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFuXkYly", + "filament_id": "OFjPXrXO", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json index bda871cae8..b8990a7c1b 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Marble @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFbYP6Wb", + "filament_id": "OFfuhviw", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json index a216c20e7c..0394308e99 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Matte @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFwyqcGn", + "filament_id": "OFsB2lxm", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json index d6d1e30e6c..731f5c5ca4 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA PRO @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFklg4aM", + "filament_id": "OF1hznGB", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json index b0ba1af2d6..e708794eea 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Silk @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFkfK62J", + "filament_id": "OFXz7Mwx", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json index 1120084d6a..cc292ac240 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Sparkle @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFaKIoH2", + "filament_id": "OFhcYzR8", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json index d06d60e5cc..c0e2e23dfe 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Translucent2 @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFcqs5g7", + "filament_id": "OFn1QaY3", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json index ab43fb2bf2..4e3362a5d3 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA Wood @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFh5GUhZ", + "filament_id": "OFWYtgCa", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json index 028fd42383..f90355d85c 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA+ @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFDMWB6t", + "filament_id": "OFBUIlZ7", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json index 706b60f0c9..4f4979d95f 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json @@ -3,6 +3,6 @@ "name": "Elegoo PLA-CF @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFuPC4S8", + "filament_id": "OFln72PT", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json index 5eeb29bad3..e328cf0a75 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid PETG @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OF3arl18", + "filament_id": "OFLXvuMr", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json index b83fe4b688..06fd489c41 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid PLA+ @base", "inherits": "Elegoo PLA @base", "from": "system", - "filament_id": "OFAHagT9", + "filament_id": "OFkhhUS0", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json index fe1bae90a0..58cec037c3 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json @@ -3,6 +3,6 @@ "name": "Elegoo Rapid TPU 95A @base", "inherits": "Elegoo TPU @base", "from": "system", - "filament_id": "OFL4KniM", + "filament_id": "OF30Ftju", "instantiation": "false" } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json index 99ed8dc8e9..08bd3d93af 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json @@ -3,7 +3,7 @@ "name": "Elegoo TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "ETPUB00", + "filament_id": "OFmhJs5V", "instantiation": "false", "filament_max_volumetric_speed": [ "3.6" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json b/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json index 5607709da7..1c6c0dffaf 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json @@ -3,7 +3,7 @@ "name": "Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GABSB00", + "filament_id": "OFY9muEs", "instantiation": "false", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json index d2f0c4672b..5c1ac04bd9 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json @@ -3,7 +3,7 @@ "name": "Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GASAB00", + "filament_id": "OFLPAxz3", "instantiation": "false", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json index e130cbf2e2..c9cae649dc 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json @@ -3,7 +3,7 @@ "name": "Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GPAB00", + "filament_id": "OFg8ndtj", "instantiation": "false", "chamber_temperatures": [ "60" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json index 71850f98a9..b07248a643 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json @@ -3,7 +3,7 @@ "name": "Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GPCB00", + "filament_id": "OFLakOUI", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json index 61a6f03b96..e3af7115ae 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json @@ -3,7 +3,7 @@ "name": "Generic PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GPETB00", + "filament_id": "OF6MOPWx", "instantiation": "false", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json index 046d0dab90..e22cd697f8 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GPETGB00", + "filament_id": "OFYPdQJh", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json index b9b1b0299c..0116649a9b 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GPLAB00", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json index 7931a6604e..4f1fd0d973 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @base", "from": "system", "setting_id": "fRiriEvlcxDDO5tc", - "filament_id": "OFo4VB3w", + "filament_id": "OFAIBCLJ", "instantiation": "true", "nozzle_temperature": [ "260" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json index 1fe2791869..b51663338a 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic ASA @base", "from": "system", "setting_id": "S5kHIMcORjlPRnVs", + "filament_id": "OF53eLVD", "instantiation": "true", "filament_type": [ "ASA-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json index 5fa54d9eb4..a0a9f7705f 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "TPgpyakWZ7NjVnj5", - "filament_id": "OFk388hR", + "filament_id": "OFhTPf6L", "instantiation": "true", "fan_min_speed": [ "10" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json index 479ae9f275..a06d9fec40 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json @@ -4,7 +4,7 @@ "inherits": "Generic PC @base", "from": "system", "setting_id": "KMhdBJbiUeXxKgPS", - "filament_id": "OFypQeKR", + "filament_id": "OFafO6VM", "instantiation": "true", "filament_type": [ "PC-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json index b7542f46f7..a3b8082643 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json @@ -4,7 +4,7 @@ "inherits": "Generic PET @base", "from": "system", "setting_id": "Q6wiKjigmzkcMxFz", - "filament_id": "OF0TODnN", + "filament_id": "OFQdaVZS", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json index fc750fdcc6..f122066617 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json @@ -4,7 +4,7 @@ "name": "Generic PETG PRO @Elegoo", "renamed_from": "Elegoo Generic PETG PRO", "from": "system", - "filament_id": "OFhKNHC8", + "filament_id": "OFllmFhT", "instantiation": "true", "inherits": "Generic PETG @base", "cool_plate_temp": [ diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json index 5e5e84e3dd..a57b29cbb6 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "bWUrg1tIttzhMYlr", + "filament_id": "OFoYSJKi", "instantiation": "true", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json index aee418bd18..33561c23bc 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json @@ -3,7 +3,7 @@ "setting_id": "dH2Yf92iqsOj5XYo", "name": "Generic PLA Matte @Elegoo", "from": "system", - "filament_id": "OFsLkLw6", + "filament_id": "OFmY0l6t", "instantiation": "true", "inherits": "Generic PLA @base", "cool_plate_temp": [ diff --git a/resources/profiles/Eryone/filament/Eryone ABS-CF.json b/resources/profiles/Eryone/filament/Eryone ABS-CF.json index bb976dcd88..a6cc92c15d 100644 --- a/resources/profiles/Eryone/filament/Eryone ABS-CF.json +++ b/resources/profiles/Eryone/filament/Eryone ABS-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "f4VPJtNcZOIIKyDz", - "filament_id": "EFL81", + "filament_id": "OFQ1zgm3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ABS.json b/resources/profiles/Eryone/filament/Eryone ABS.json index c09a35d34e..1d42db775b 100644 --- a/resources/profiles/Eryone/filament/Eryone ABS.json +++ b/resources/profiles/Eryone/filament/Eryone ABS.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "JfQiR5qK9Ue3JDt5", - "filament_id": "EFL91", + "filament_id": "OFOzwywz", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ASA-CF.json b/resources/profiles/Eryone/filament/Eryone ASA-CF.json index afe2d3b33e..c95302c16a 100644 --- a/resources/profiles/Eryone/filament/Eryone ASA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone ASA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "wSiMHM1kTIgJ2gCt", - "filament_id": "EFL82", + "filament_id": "OFwyt1xt", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ASA.json b/resources/profiles/Eryone/filament/Eryone ASA.json index 88afccbe26..7c2b9d9c91 100644 --- a/resources/profiles/Eryone/filament/Eryone ASA.json +++ b/resources/profiles/Eryone/filament/Eryone ASA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "hu9uQy9zFgemTBjQ", - "filament_id": "EFL92", + "filament_id": "OFVtIasg", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA-CF.json b/resources/profiles/Eryone/filament/Eryone PA-CF.json index abaf44eb7d..d91ea8a490 100644 --- a/resources/profiles/Eryone/filament/Eryone PA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "LIXTvjHAxtaHIO8s", - "filament_id": "EFL72", + "filament_id": "OFp9wdmf", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA-GF.json b/resources/profiles/Eryone/filament/Eryone PA-GF.json index 15ae055010..657d86b291 100644 --- a/resources/profiles/Eryone/filament/Eryone PA-GF.json +++ b/resources/profiles/Eryone/filament/Eryone PA-GF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "4srMOoPcAlQygIY8", - "filament_id": "EFL73", + "filament_id": "OFkq7rPy", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA.json b/resources/profiles/Eryone/filament/Eryone PA.json index efcbc94393..b03dccd32f 100644 --- a/resources/profiles/Eryone/filament/Eryone PA.json +++ b/resources/profiles/Eryone/filament/Eryone PA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "oqzAdvvf6jdQTb4M", - "filament_id": "EFL71", + "filament_id": "OFS4jbj3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PETG-CF.json b/resources/profiles/Eryone/filament/Eryone PETG-CF.json index 76eca543b5..3dc02ddf00 100644 --- a/resources/profiles/Eryone/filament/Eryone PETG-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "Xp95jFFK5QSP3OoR", - "filament_id": "EFL43", + "filament_id": "OFNstOna", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PETG.json b/resources/profiles/Eryone/filament/Eryone PETG.json index 3f0644565a..ee6b20423a 100644 --- a/resources/profiles/Eryone/filament/Eryone PETG.json +++ b/resources/profiles/Eryone/filament/Eryone PETG.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "rJCPgQiIXRsfQwWY", - "filament_id": "EFL93", + "filament_id": "OF8kJys9", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PLA-CF.json b/resources/profiles/Eryone/filament/Eryone PLA-CF.json index 3e7e8fa3d7..a3186cee9f 100644 --- a/resources/profiles/Eryone/filament/Eryone PLA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "t726eLsJ87OjqUYk", - "filament_id": "EFL40", + "filament_id": "OFilAA3b", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PLA.json b/resources/profiles/Eryone/filament/Eryone PLA.json index 6da685ff2f..8e23c19ade 100644 --- a/resources/profiles/Eryone/filament/Eryone PLA.json +++ b/resources/profiles/Eryone/filament/Eryone PLA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "nTSleDxF7HWxBeK9", - "filament_id": "EFL90", + "filament_id": "OFmKU2Ha", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PP-CF.json b/resources/profiles/Eryone/filament/Eryone PP-CF.json index e2a9c492cf..1f5e155b55 100644 --- a/resources/profiles/Eryone/filament/Eryone PP-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PP-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "GuuXzP9ILCWG5cxt", - "filament_id": "EFL33", + "filament_id": "OFbh7HcA", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PP.json b/resources/profiles/Eryone/filament/Eryone PP.json index ffca123024..abd35e11e3 100644 --- a/resources/profiles/Eryone/filament/Eryone PP.json +++ b/resources/profiles/Eryone/filament/Eryone PP.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "sZF6qOPqqu88Yu5e", - "filament_id": "OFf0JIqs", + "filament_id": "OF5oNRED", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone Silk PLA.json b/resources/profiles/Eryone/filament/Eryone Silk PLA.json index 2edfd832c1..40a6bd252b 100644 --- a/resources/profiles/Eryone/filament/Eryone Silk PLA.json +++ b/resources/profiles/Eryone/filament/Eryone Silk PLA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "S3s3NQAoScvfyHh3", - "filament_id": "EFL941", + "filament_id": "OF7nBAd3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone TPU.json b/resources/profiles/Eryone/filament/Eryone TPU.json index 6bfd555337..c44d357c84 100644 --- a/resources/profiles/Eryone/filament/Eryone TPU.json +++ b/resources/profiles/Eryone/filament/Eryone TPU.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "ci6MWQPZNf09qrOJ", - "filament_id": "EFL95", + "filament_id": "OFhUjPA5", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/FLSun/filament/FLSun Generic ABS.json b/resources/profiles/FLSun/filament/FLSun Generic ABS.json index 82d91d891c..848034b3e1 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ABS.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "2f9nYaR0PUMkGvDD", - "filament_id": "GFB99", + "filament_id": "OFWof1Ap", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/FLSun/filament/FLSun Generic ASA.json b/resources/profiles/FLSun/filament/FLSun Generic ASA.json index 650953c7b0..bbea739d1d 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ASA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "9GPCRihSQTBRxkm3", - "filament_id": "GFB98", + "filament_id": "OFCcsYtf", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json index 0b3441d866..65f3c06b99 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "2JOA0YeYZHj0lFmA", - "filament_id": "GFN98", + "filament_id": "OFHQUAoZ", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA.json b/resources/profiles/FLSun/filament/FLSun Generic PA.json index e24fbbd966..8f9908acbc 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ek14AgskfJXeZ84u", - "filament_id": "GFN99", + "filament_id": "OFeJjoKF", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PC.json b/resources/profiles/FLSun/filament/FLSun Generic PC.json index 2d03d67063..4a111e609f 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PC.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "wluYSRtaCqajFCYT", - "filament_id": "GFC99", + "filament_id": "OFVqZ2H0", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PETG.json b/resources/profiles/FLSun/filament/FLSun Generic PETG.json index 6b81b49092..f0cf97956e 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PETG.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "FCjlzoLFYn3IVxxD", - "filament_id": "GFG99", + "filament_id": "OFJJpaLS", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json index 690c4427f9..3aefb8ea4a 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "FEdplifUKOSUA4XX", - "filament_id": "GFL98", + "filament_id": "OFsF96Gt", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA.json b/resources/profiles/FLSun/filament/FLSun Generic PLA.json index 85233e1285..abc2303137 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ltWBfkc84nszWS19", - "filament_id": "GFL99", + "filament_id": "OFJSksUs", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PVA.json b/resources/profiles/FLSun/filament/FLSun Generic PVA.json index 106aa001e0..30defb2258 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PVA.json +++ b/resources/profiles/FLSun/filament/FLSun Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "IohayLPyRIsZJ0GY", - "filament_id": "GFS99", + "filament_id": "OFtP1rqJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FLSun/filament/FLSun Generic TPU.json b/resources/profiles/FLSun/filament/FLSun Generic TPU.json index 60b05b8134..63e0826eef 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic TPU.json +++ b/resources/profiles/FLSun/filament/FLSun Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "hewisceC8FmSwzF4", - "filament_id": "GFU99", + "filament_id": "OFMoLF46", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/FLSun/filament/FLSun S1 ABS.json b/resources/profiles/FLSun/filament/FLSun S1 ABS.json index d9a3922199..f796202c3e 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ABS.json +++ b/resources/profiles/FLSun/filament/FLSun S1 ABS.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic ABS", "from": "system", "setting_id": "tvpZ28Oe4Al7hlgj", - "filament_id": "GFB99", + "filament_id": "OFzzmK2Q", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun S1 ASA.json b/resources/profiles/FLSun/filament/FLSun S1 ASA.json index a82c9179a4..fed430ca63 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ASA.json +++ b/resources/profiles/FLSun/filament/FLSun S1 ASA.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic ASA", "from": "system", "setting_id": "C5oyaWw3YVEz0CgE", - "filament_id": "GFB98", + "filament_id": "OFIK0xFa", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PETG.json b/resources/profiles/FLSun/filament/FLSun S1 PETG.json index 3b477c6335..cf6a506da0 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PETG.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PETG.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PETG", "from": "system", "setting_id": "Ac6q0FtMFMLesFdU", - "filament_id": "GFG99", + "filament_id": "OF9z5LZ9", "instantiation": "true", "fan_max_speed": [ "60" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json index f6324b0bc3..8115a9cec6 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "z0Y9rQVZairHqwbi", - "filament_id": "GFL99", + "filament_id": "OFoDgVnY", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json index 91e22b993c..8d9d662dda 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "v2clpNXXo8m6dV33", - "filament_id": "OFR8dTVW", + "filament_id": "OFoqrHTw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json index 9536db0750..70946da40c 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "164Bn4YchxJAaLsa", - "filament_id": "OFFenwbU", + "filament_id": "OFSStjay", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun S1 TPU.json b/resources/profiles/FLSun/filament/FLSun S1 TPU.json index 7a02ed84cf..0b3e6a00ee 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 TPU.json +++ b/resources/profiles/FLSun/filament/FLSun S1 TPU.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic TPU", "from": "system", "setting_id": "yzPvNqIo7mfWAwNS", - "filament_id": "GFU99", + "filament_id": "OF6ooviO", "instantiation": "true", "fan_max_speed": [ "100" diff --git a/resources/profiles/FLSun/filament/FLSun T1 ABS.json b/resources/profiles/FLSun/filament/FLSun T1 ABS.json index e7d8bea77a..fe7c8c15c8 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ABS.json +++ b/resources/profiles/FLSun/filament/FLSun T1 ABS.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic ABS", "from": "system", "setting_id": "GP8VqRfidKOdj0ZJ", - "filament_id": "GFB99", + "filament_id": "OFV0KrAG", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun T1 ASA.json b/resources/profiles/FLSun/filament/FLSun T1 ASA.json index c34c34a213..4633c41271 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ASA.json +++ b/resources/profiles/FLSun/filament/FLSun T1 ASA.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic ASA", "from": "system", "setting_id": "YmJbWfCQpNk9nxB7", - "filament_id": "GFB98", + "filament_id": "OFbjtPQy", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PETG.json b/resources/profiles/FLSun/filament/FLSun T1 PETG.json index 9b753af05b..869df6e538 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PETG.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PETG.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PETG", "from": "system", "setting_id": "A2aA7xcmqgz8ERyY", - "filament_id": "GFG99", + "filament_id": "OFJ80y1e", "instantiation": "true", "fan_max_speed": [ "60" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json index e266687037..16e048d536 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "aUMHmlsPMYDicnPp", - "filament_id": "GFL99", + "filament_id": "OFU0n0zW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json index a1316569c2..2d612ce865 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "E4lpSLLlAxUW04ik", - "filament_id": "OFyt23xJ", + "filament_id": "OFQ9qnkd", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json index b76f537a45..e2a7bbeca2 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic PLA", "from": "system", "setting_id": "gElUb4GnCoEfVlEd", - "filament_id": "OFt1YdX8", + "filament_id": "OFuUJyRx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 TPU.json b/resources/profiles/FLSun/filament/FLSun T1 TPU.json index feb8326a22..63813ae149 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 TPU.json +++ b/resources/profiles/FLSun/filament/FLSun T1 TPU.json @@ -4,7 +4,7 @@ "inherits": "FLSun Generic TPU", "from": "system", "setting_id": "34Ux18VB4d6R6G40", - "filament_id": "GFU99", + "filament_id": "OFENzGSm", "instantiation": "true", "fan_max_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json index 3971dfdbe0..76629e1a35 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "M9HM8tihJzV4crs8", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json index ada99c3b7a..e9a09ff347 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "08VjBSha6gjhJYgk", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json index 224f0bcecf..1572171a0b 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "JqgkmxnjlnQ3uw1u", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json index e712311eb7..5613453b3a 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "vvLLPvSeb5PYbT1R", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json index 2e574b8dec..13e5f089fd 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "mPJMPfFCyfWdKzMO", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json index f3e61a04b2..35dc675173 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HTgqTUTznOlfCRAd", - "filament_id": "OFL7vEML", + "filament_id": "OFe6sfXS", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json index cc05448a52..2dfa04cea8 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "3w8fnDjkoFaJ6Nhw", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json index 0ba30d9ee6..2fbb2e4ceb 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "owHbDqY55rFtSegz", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json index 29ffe9c98e..50e2e88ee4 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "eFK1zzT1JY9ZnEl9", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json index ae67869d15..667e3e9b01 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "E8CcstoHzax78ZJY", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json index 44ca312535..673304a79c 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "xa22FD8bRVGsLiPJ", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json index d6fe454c37..dd2d7b107b 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "bZ9dbA8dIu9mjWyN", - "filament_id": "OFgJX0Fc", + "filament_id": "OFUCpLaL", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json index 0e1dfd9b33..34d7bfb528 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "4w0oK3F50O1DUqsu", - "filament_id": "OFmduKVr", + "filament_id": "OFogbnCb", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json index 6133699c0b..14a76bbdae 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "94vPnztRcpnbfAKx", - "filament_id": "OFmduKVr", + "filament_id": "OFogbnCb", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json index 6f8cf9429f..cd32fec949 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,7 @@ "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", "inherits": "Flashforge Generic ABS", "from": "system", - "filament_id": "GFB99", + "filament_id": "OF5SJ3jz", "instantiation": "false", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json index 1abb4f5e51..836cd00898 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SuEfcE6AYK8N1FI4", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json index 523d9d05dd..39cbd2de77 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gmkc6fRLMI73Iut8", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json index bb30b1725b..dcf7ef2ea3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "fgEYZ1Mgyp1AvtwU", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json index a426566340..c77a70a68c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "cIxbQMVdG5K85rJr", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json index bbfa73ccd4..421b590ffd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "9GXBeuCUrScJfmJB", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json index b9251a5672..0e39fc998e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ds0GgE1jssl4IbF3", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json index 0ab31a8276..4394ed643a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UTWbwTYuXYbBx3uw", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json index 825a80c96d..ec7afd1806 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "CuckX5MsN69806ow", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json index f9a0433cae..9cb888633d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "NttDJCrfB01uwMDl", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json index 171484abbb..37946c87cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "hJd6dG6OdEffEFC7", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json index 7143e0b03a..853695c79f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "8yFCuCnEuI3dUvQy", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json index 2734feeb55..40d28d88ed 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "np4fP5kghRlczOTT", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json index a669c267b9..bfc919b8a4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "8o2maTFOXq0XR6Dm", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json index 3488e5bec6..dea33f9ccb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "MBo02hFXn0ebDRdb", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json index bbf04ce6bd..108219a5e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "vCsjC0UnKenzIR0O", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json index 29fb16653b..b477796207 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "xhxVdlmh5r7meoHo", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json index 1ef697a83b..85bd777649 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "6dlQN4Xhd6kGZ0Qn", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json index 12d1a7c767..ae87f2228c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "r8WVFPozL8f5oLVJ", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json index 798bc592bb..4486a2e487 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "xw0pZNmhw1K4tPQ1", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json index 868e133f3e..d14e7a563f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "m6QLC2UaS3fW298i", - "filament_id": "OF5T1Y9R", + "filament_id": "OFShw1X8", "instantiation": "true", "filament_settings_id": [ "Flashforge ABS Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json index 4ea4ae4577..e5c075681b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Nx3Px0Zu356IKShT", - "filament_id": "OFWs8KIZ", + "filament_id": "OFi7Bf0F", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index f1917abb9a..9fd47a1c35 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "d4EGsmMeEDCOUBF2", - "filament_id": "OFWs8KIZ", + "filament_id": "OFi7Bf0F", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json index b925f68e88..802dfebe5e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "9ziPFKsjESbw1pXL", - "filament_id": "OFWs8KIZ", + "filament_id": "OFi7Bf0F", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index 03194dd913..37f8d3d731 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "NzJJs6yrSik5xuyX", - "filament_id": "OFWs8KIZ", + "filament_id": "OFi7Bf0F", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json index 1074c58061..dd285b07f6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UinlbuXNbad2kN0s", - "filament_id": "OFqRWRU6", + "filament_id": "OFH5UH6P", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json index e4f1909d8a..0244b1fa25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ycgiXY41kqNgslE3", - "filament_id": "OFqRWRU6", + "filament_id": "OFH5UH6P", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json index 0f80d06af9..dd3efcaef3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,7 @@ "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", "inherits": "Flashforge Generic ASA", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFtTYl9Q", "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json index 6a0253be4a..665b49d497 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "kjS4k8nrIdNNNoWw", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json index 618cfdea27..42c9955886 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "Y647IFVkk5JIXzte", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index eb123cc3ad..19b021358e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "vaOyXUcrJ97KE7ZW", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index 2e7ff56b63..1f0bc87211 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "iLWq5pJ3ox9EAM1Z", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index a63e1c7dfe..37be38511c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "i7PUPYxy0Z9weyyA", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json index 3aef25a533..48e7c83322 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UUSDyOetXSOuBIUd", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json index bcbd9d4721..886c3cf0c1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "2r0kwhklE24Hp94O", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json index 0ce215f69a..52420cb125 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XWta5jJFsCxBdEPd", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json index 3bff670e7c..34a50c950e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "w8O6oenp0NymzCqf", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json index 8fcf3f85f7..1abb8bb623 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "thhmWRzNYLYJOeR2", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json index 664728993c..c75ee648aa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "g5jiz6Q6or23BIo7", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json index fb7e77b65a..fd012e0f33 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "7xmWlHHNMvXBKdYS", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json index 35e761b241..d6f71b0a72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "r0B8KfZ1mNWMvGqE", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json index cd5b00cfe6..7a8035000c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "quOwRRLcNfOy0sYf", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json index 616e70bf34..82cbd340b7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "CBLZqLhkwf5XKO12", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json index 75777b3205..ec26d6d236 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Df3anJxiRXLVO9hw", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json index 401ffeabaa..016a57fd14 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "Nu4WvBWuEhazZfh5", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json index 9e6b37e48c..d24743172c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "hF0h4ye3hMDtEba1", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json index 761dd56a4c..a523291c0e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "3isZCWr4CBjFtGDX", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json index b56e5b0453..5fb5d976eb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "SU6r879TbQMUFCij", - "filament_id": "OFcy60o4", + "filament_id": "OFaBwRvT", "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json index e465ad0da8..5cd421f15c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "TqU1elqwuVr9EhTA", - "filament_id": "OFM3PeVe", + "filament_id": "OFq0TY7C", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json index ec34e23dcb..c61eb8159b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "nMczAtoc5W0J2WkS", - "filament_id": "OFM3PeVe", + "filament_id": "OFq0TY7C", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index 2a33b88234..3645546f16 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "ap7X4nWKfFR53NT0", - "filament_id": "OFM3PeVe", + "filament_id": "OFq0TY7C", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index f07085eb07..f001e6d54c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "kZXg6odPm5iW79Qn", - "filament_id": "OFM3PeVe", + "filament_id": "OFq0TY7C", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index b124ce423d..af262a6497 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "CI5dvVrCNk2XTU82", - "filament_id": "OFM3PeVe", + "filament_id": "OFq0TY7C", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json index b3c448494f..e1bb924d28 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "941E5MaAyFY3iv4V", - "filament_id": "OFdNORGt", + "filament_id": "OFWnSvGu", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json index e970fdff0a..0f1d63ca96 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "RdmsxyUGUX8Ot4oj", - "filament_id": "OFdNORGt", + "filament_id": "OFWnSvGu", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json index 0504844ed6..b290e46444 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "NWEY6ZxkUS8jqNU2", - "filament_id": "GFB99", + "filament_id": "OFLDSqqi", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json index ada3f13582..c49638eda5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "OaXiy7DI5bOAiaYb", - "filament_id": "GFB99", + "filament_id": "OFLDSqqi", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json index 5de9f959cc..7e53c24675 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "Cfd7Q1nGwqxI5Ngh", - "filament_id": "GFB99", + "filament_id": "OFLDSqqi", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json index 38d58ba346..e93a8a294d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "uygAzLWRQiCIJ8jh", - "filament_id": "GFB99", + "filament_id": "OFLDSqqi", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json index 510ad8c55d..a661419618 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "spSRbidSN2yeZLhD", - "filament_id": "OF4RKeng", + "filament_id": "OFRPEs5o", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json index ccae1871bc..dab6446048 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "gVLGkoCoyrWL4DQr", - "filament_id": "OF4RKeng", + "filament_id": "OFRPEs5o", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json index 1c7532543e..e1f8b58fcf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "c6IMgUyqOeS2HFWw", - "filament_id": "OF4RKeng", + "filament_id": "OFRPEs5o", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json index 9f6e882f68..0466c5af9a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "jMCunppmYOH5QIra", - "filament_id": "OF4RKeng", + "filament_id": "OFRPEs5o", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json index e6d8e037e3..c5097dca7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "b3CFhGGnZLzpyAWa", - "filament_id": "OF4m9A5w", + "filament_id": "OFYl0c8v", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json index 56ac8dc465..31dbe0e60f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "n68nw5tzKZ0rq43O", - "filament_id": "OF4m9A5w", + "filament_id": "OFYl0c8v", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json index e95a14c2e5..4b4a6224bd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "1cvcaoBFNbg2GucE", - "filament_id": "OFYZs7dN", + "filament_id": "OFLrdHse", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json index 2989f84021..48b701953d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "foG37d7HZKgt6l43", - "filament_id": "OFYZs7dN", + "filament_id": "OFLrdHse", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json index 4d02d458d0..9d4acd8d24 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "KerUxwPsSEKDO6jL", - "filament_id": "GFG99", + "filament_id": "OFZHgTVI", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json index 20a08fe28e..4c4f2b43cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YflkaS7NfBE5XiSH", - "filament_id": "FFF03", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json index d9327f20f5..8b452d3759 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "W7pWKQ2EWAB5viV1", - "filament_id": "GFG99", + "filament_id": "OFZHgTVI", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json index 227d881f06..288f028eac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "eDQb2WfDsUTvj2Nf", - "filament_id": "GFG99", + "filament_id": "OFZHgTVI", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json index ecf04bdd2b..85e54ec1a6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "yo4uc7TxQbqnlRUY", - "filament_id": "GFG99", + "filament_id": "OFZHgTVI", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json index 75a1d34349..5e5c8ebf79 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "u2OzNKIQIKUrOT9k", - "filament_id": "OFC5CCeo", + "filament_id": "OFQC8Vna", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json index d87f65a404..2a52b92e70 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "7Qq8eY1kcFHTgzW3", - "filament_id": "OFC5CCeo", + "filament_id": "OFQC8Vna", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json index b1013b2c99..3a6f44f5ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "gLrecba33jDI9PeI", - "filament_id": "OFC5CCeo", + "filament_id": "OFQC8Vna", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json index 7c5de370cb..c94cdfff56 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "PlC4Ek7d09ytYZqJ", - "filament_id": "OFK39W9u", + "filament_id": "OFlNWVr5", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json index 28ed60ccf7..916c392f08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YqiSgA018CdflfT9", - "filament_id": "GFG99", + "filament_id": "OFZHgTVI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json index 4154eed45e..9f2a18971a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "gjIdhPTLOr17mz5B", - "filament_id": "FFG01", + "filament_id": "OFtTHNTj", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json index 34351c7dac..ad76d07bac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "KR0LUSD7wd55oNI6", - "filament_id": "OFm1VZed", + "filament_id": "OFYlthXI", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json index 9b5972f97d..d0f628a2bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "rQSFNxuuqUVzsSV2", - "filament_id": "OFm1VZed", + "filament_id": "OFYlthXI", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json index b6507fda5a..9ef92ee7ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "S1UTm2oMRoQ4yM4R", - "filament_id": "OFm1VZed", + "filament_id": "OFYlthXI", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json index 6ef0248721..9fe47dcd87 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qH3l3p0yvZHqHnwG", - "filament_id": "OFKWVi10", + "filament_id": "OFdEIwxy", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json index 61fcd364c3..a0317d1b97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "WOl0JsKxAQFo2WnW", - "filament_id": "OFAEqlWa", + "filament_id": "OFrrMLDw", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json index f3b4f693c1..e9ac388665 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NryK9oIg8wMDKVHW", - "filament_id": "OF41QVDH", + "filament_id": "OFYvSO1W", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json index 61b5276051..8e2d4c90c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "DwAgYHepesazDUjN", - "filament_id": "FFG01", + "filament_id": "OFtTHNTj", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json index d94e75d3df..52bc8adcb9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NA0PhaTNDvEH38lF", - "filament_id": "OFLeFaUO", + "filament_id": "OF1OZujR", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json index 57d88732de..4ffd4a3aee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zQEeIIKWSgsDqlpI", - "filament_id": "OFviQ9lH", + "filament_id": "OFC20UMj", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json index dbcf163dda..798fbc6583 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "ckwc7U0Q2eKHmCxY", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json index 38411b21ea..4abf262f2f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "AEQYrT7e4Q5J2G6C", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index 9622514949..0370e2b2ce 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "jUNUZhE0BJyB64fC", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index 1f6bec0997..44753a6a08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "0qMEqo9YMDLSVafs", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 684f303f65..2a0a4d7898 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "ek749gIdUAPq6WxT", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json index 768677d41f..30704efe75 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "tEohTtyHofD6l6o3", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json index f2de81ad74..cd95f618c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "oLeLrIjFJzoZha3E", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index 2468478e6a..a495959b82 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "HXGUlYY4X5IHhL3R", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 7b28d67e08..6e87c12697 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "g22Cv3zy3h5BhJYK", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index 4356a46961..8c4e3c633a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", "from": "system", "setting_id": "aDzBXuvN7IuSP5sa", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json index a3cc583ed8..3349b2ec63 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "CIj24REX7BA8zPHQ", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json index 440cfd4f97..8afa83e8f4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "yAGyGjF6uDrjfjLn", - "filament_id": "OFhzHd2Y", + "filament_id": "OFaz8VoR", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json index 8a267c6548..5f34ca9901 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "1NFhtEvvvgZiHcto", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json index 4ae4f02769..a6229f92d8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "eNOkWn5PT8rDpA0g", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json index 72f4577557..52d7d0ee40 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "vOqAGzaYLz0XdRvC", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json index 682416a4eb..84d7492956 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "KSuxZ3fpQz0khDSz", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json index 7e32268d01..fc78000e54 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "o4B1kAToVny7jw0M", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json index 87b5639be7..3e26d15964 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "kpRved5M3NktqIYn", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json index 1e6c9b04dd..4cab6d97ae 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "ypxgjHl9uIMyZIce", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json index 2764a938da..21e54e38b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "uXGuyvVxfdQW22vu", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json index 883143b259..2bd44a8bb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "q9UbakUmZPzG3xU0", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json index f781edfdca..9bb1244b29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "IL18Lu0qHx1RVqKD", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json index 3e1a003ac6..a1ca0f6985 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "2FQib7fZjcwfCnm2", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index b800e1566d..f21520aa0b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "CtwOm90WWD4S7U6j", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json index c3d6594e7c..a76d35fb6d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "kvULpm0WhKiSPj8V", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json index b0ddaf5825..b161612d91 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bFVYSPkynBBapFjq", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json index ab726c53a1..4bb3402cb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "CUU7knzm4cbe1giE", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json index b5dc6efb69..a847ff25f3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "gcYvL572cumWZdnl", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json index 24fbd0279f..84c3e94acc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "cx99AH0C575XxAj9", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index fdade2f06c..23a73b4ad5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "RrrKoR7MVD8IFQlq", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json index 07c144a574..c331466dab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "7VEPGuR16wNukAX2", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json index 7ade77bb7c..5558ea98f9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "H9uwlPw6m6Nf7qH5", - "filament_id": "OFZQFvHQ", + "filament_id": "OF5w29Kq", "instantiation": "true", "filament_settings_id": [ "Flashforge HS PETG" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json index e209b455e4..dba18c4bed 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "OmDped3weZ4uHAtY", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json index 56f8ff9792..12e9fe913f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bfPaqPGaR5zpTsLk", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json index 7be6dbc727..d10ef1e3e9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "oD592bif4ra0ADco", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json index c8f5744361..f83591bf3c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "ldhMY6F7v6nK8wwf", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json index 01b6e9deb1..619b9e8767 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "5vzOmbjHbkJXrgYM", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json index b9e2ebeb4e..0d5e671f95 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xSJk7LFpYKmckPQh", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json index 681d576ed0..9aa4efc2e4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xdFZUsj1cNLXdvT6", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json index 25eab9bb09..43f1bbf068 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "JCQtuv8Abfz4jVRV", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json index a9e238131c..e8200e41e2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "hzxRPyH1fqarsMuN", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json index b25007568d..0b46b5fa31 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "oJsLlIIpxwGSoJTv", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json index 06a4d1a82a..5940d7d272 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "hJbNZ381ERkZ0KUB", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json index 6dcedacb73..dddf486229 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "BqavrNpwhXDXcZ3r", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json index bf84dbab17..598d3c6cab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "cgf4Qk4iHZh7zHN5", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json index 54be3be396..8e228a364e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jFUS6233aq4XPgrn", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json index eab85e45a4..2282b67e93 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "p31K69Srld6o4sQ2", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json index e434c6b72c..137f78fcd6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "MwbYvnRIzlNmH81h", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json index 0d1632b731..4506cf1d91 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "rKhHmkqXYD2xN4K9", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json index d67d10a948..45e42ed61c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "Dshsi3O7NvYYjXJt", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json index a3d4f51084..1ee62a8bd4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "mfnL6QEevCmTmOL0", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json index 0b2c003337..1731aafb85 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "AGLHrHKWye0YTtNK", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json index 00f8b13d72..986f32690e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "px8qzmB2yFLoNl83", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json index 8c10583b55..fc20600185 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "mwuIEsBz5bXEV68w", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json index c32c16112f..17b706989a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "TielygFT88owWg4J", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json index 154d526928..d4832e08ae 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "It2NI6OFhNEUvulz", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index 710cae4899..bc73b031b3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Qt3huWxoYpMEqEN6", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json index 3d753e4106..5737b18c7d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Y3XuavnnOMoHLGHA", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index aae20613af..5316d2b8b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "2HUxAWeolJIlxPs1", - "filament_id": "OFeWMAGH", + "filament_id": "OFmQkb3c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json index c7e39f8682..fcba520ff6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "vdaZBnDsmUC1fhDp", - "filament_id": "OFoJUGj6", + "filament_id": "OFnMv3W5", "instantiation": "true", "filament_settings_id": [ "Flashforge HS PLA" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json index fdeac081b6..b108289976 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "u7rolQaTQz9U6veH", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json index cac1c966a2..44783f007a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "qTGTwiliWj3dSo9y", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json index 5b052ff3ef..dba15949a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "wAkuJRTLWxGyBU0b", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json index a469e9cae6..d2d2a93575 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "dbs29hQSQl9zuWis", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json index 79da7aa9a1..ac63380352 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "XGNPvS2ps7Xn2fpx", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json index 1339bfd17a..e88fbf5126 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "h33iEGZ7wPeBYKYQ", - "filament_id": "OFi1ocNv", + "filament_id": "OFgf4gZa", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json index 9ca2ac4d29..687017cdba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "e58C9MdOWikIbbVR", - "filament_id": "OFOSzSuh", + "filament_id": "OFuGRMNV", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json index 4c6085c781..4159a24737 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "RX2Tg8KpwQpCbkLI", - "filament_id": "OFOSzSuh", + "filament_id": "OFuGRMNV", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json index 370f016030..b4a40e769a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "C4DfYuQgDXIgK7mk", - "filament_id": "OFOSzSuh", + "filament_id": "OFuGRMNV", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json index 106dbf9dec..e2ab91aa24 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "Yu7hL4izNsgDVqMT", - "filament_id": "OFOSzSuh", + "filament_id": "OFuGRMNV", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json index 3733afd3b6..8f1f04ffdc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "1CevPV960sQWT3NF", - "filament_id": "OFMHTnPP", + "filament_id": "OFgeM7nD", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json index bf2d34204a..129ad8d648 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "NGbZ8pQVTRKw28kp", - "filament_id": "OF0SyJhk", + "filament_id": "OFZtOQtl", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json index 988e26f75f..6654b78212 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "5pVoGBvbiUlrJSwR", - "filament_id": "OFkaDtKx", + "filament_id": "OFuV79ru", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json index f4b7cac893..0491362ddf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "8ZR8o3MKYxXLd70k", - "filament_id": "OFsgANe3", + "filament_id": "OFuFqYyG", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json index 22ae3064bf..1c142f11b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "FSfGFl7FCutxXN2l", - "filament_id": "OFsgANe3", + "filament_id": "OFuFqYyG", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json index 62f9c06854..addb373157 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "ZlpBAM9uaS01sWAJ", - "filament_id": "OFsgANe3", + "filament_id": "OFuFqYyG", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json index b7f3bc5386..764d274e76 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "9DaSYBA2OI7Jj5zS", - "filament_id": "OFsgANe3", + "filament_id": "OFuFqYyG", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json index 2077dc5243..7157336d3f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "3bguiaEtUsS8ULHW", - "filament_id": "OFPJJxkF", + "filament_id": "OFrjacXf", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json index 48c08e910b..b550ae743f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "W6i9E22BVo11TeCm", - "filament_id": "OFPJJxkF", + "filament_id": "OFrjacXf", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json index d74582ed08..f6899ad2e2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "vflpXTS9GwnODQDH", - "filament_id": "OFPJJxkF", + "filament_id": "OFrjacXf", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json index 2df9381429..6c5928993d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,7 @@ "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", "inherits": "Flashforge Generic PETG", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFMpxamb", "instantiation": "false", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json index ee093e88fe..6ea60b3214 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xOZQvdZa1YCcnjor", - "filament_id": "OFuyJhLF", + "filament_id": "OFEMfQsX", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json index 3517994360..f3fed78ca0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "YLLJ4xZI704GReej", - "filament_id": "OFuyJhLF", + "filament_id": "OFEMfQsX", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json index d66f57eb00..a351fd284a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8EUg1hTLfsyDPbnG", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json index 56b1f382f0..153daf20e9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "UKhV8A2DBc1xyNWc", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json index 13c8b20ac5..7009c5a076 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "dFZ1MmHjj1AAIaMm", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json index 5484136b0c..d092644658 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ro3rt7IAJrA5aZD6", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json index c25162b722..17626d81ba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "cTxrnqzr2wVt4Nj7", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json index fa691e2aee..bbf62043f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "QA1KD03F0zj2zsVi", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json index bd9d2e2c35..fae56d5e11 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "EU8Q0XLjED23MNer", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json index 105b1cee65..a22994d00b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XFSgx95whLw5FD08", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json index 661e69ffc5..9919a54140 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "8x6yU2U8d5f67N73", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json index 9243316595..30bbb96fab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "4W0nfaSSZdg2HQkh", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json index 451eb9ca86..f66c490c96 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "AJcugKx4qHPJ3JAT", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index 3816155365..cbebb6da3e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "R0nZuLXEo5qA6Mt8", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json index 5ea3f9aef1..1a3ee02fed 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ql2BBBymzqEG7GKk", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json index 8b3169ba94..295b0a313e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8Jc4eedkknqNB87s", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json index 6761b073c8..7d48ccda00 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "KU5tDHAKja1sCoHm", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json index 4f893a3514..a83ba63b92 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "sb6jD3UZmb0DNIsC", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json index 9dc63bc699..ab7bd22340 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "4BB1wJLtsXus5eyY", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index 88104a14ab..ac25f05323 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "m7oJx47UMlFctMkX", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json index f254e10c43..adc38f6d91 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "ozD2wU5UiORTtJsa", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json index 13537ce8a5..5940c47fe1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "IQfUoy7gTmVmBDL5", - "filament_id": "OF38Hyk4", + "filament_id": "OFPQfNAf", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json index c6cca24dde..b43b82c176 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "W59yTyPnVv4LYiah", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json index e29546069a..54596db508 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "NRY4fsPNtnqs0kyH", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json index 2182a95ed7..03bb077a25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "Ht7wzk8l0b1kv5tZ", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json index ae05326e13..d799a1dc69 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "NJFHpa5HFHIyHSWu", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json index df5fbfb1ec..1a64752952 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "UaObrRNSTwitC6jr", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json index 9071f16ddf..08e0076cb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "TtXy042wtT6nF3WB", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json index f39398a73f..4d40f2fbcb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "66OWHhGyuaFISu6v", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json index 90e1a598de..60bc613ad6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "p5c6XJ1VD8cn2Meh", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json index b9f665f3d0..df04fca6df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "K8WkJmFy2V1zhYQO", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json index ac3c87f8b1..31169455a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "LLK1hwKZhDU8SaGJ", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json index 32a964d155..776d9d1df4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "LaUF2HJtBnpZF7Cd", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 2336789ee8..1eda391a72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "OUToXk8ddS1RPPUK", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json index c0a189a297..df79bc8fdf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "ywff8rI39XKjcocY", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json index 4a05c795b2..347a845f06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "C0VV5Uzsl4icRgKa", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json index 76504bd857..6dc5df0088 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "kuCvwo6Phr6Ywhm4", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json index 1b447ef7df..2ed7597e91 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "Z2E69w9AevYg15tl", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json index 98ca9782f1..22c2061b81 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "RkQaxwTjhJK0A3zr", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index f6e5ac3dc7..22b4912e99 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "YBQTMes2S9iJjKDf", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json index adc9b3ef23..315afb5acc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "lCngVWG3q0FWsnrG", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json index 62e796f2cd..ac03de5fb2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "3Gv6MJ3RRja5pbOM", - "filament_id": "OFRgDMDJ", + "filament_id": "OFMyLYV8", "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json index c59d59c97a..758901ff5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "bcqYod61blJRzhK2", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json index e3dae3bbd7..6eb1aba29f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "CnFKOi7fFyS8QlKK", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json index 46641e0704..4143582646 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "eKWJW36I5fVHwjWD", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json index 452f3a0c9a..16c5cce80d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "RXRERfs2oQKewpPS", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json index 36fefc9926..2be54257d3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "8Ns75F5n2fdQ8sDk", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json index e4dc5d17df..3d85ed39ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "4EgMPzlVo1rTeQ1e", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json index d11d07fe15..f88e49c07a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "K9ME1F4oJkPi8jRu", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json index fdf37f0ebe..cb8e888fb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "9jCp0gTjB3Mt95Mj", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json index c109735df5..3341e1dd03 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "d5OleuNNZBJK9vxH", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json index b9af31fcab..f8c30e4f18 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "MpG61mwVUtJ7t602", - "filament_id": "OFoimrpo", + "filament_id": "OFBK6zAi", "instantiation": "true", "filament_settings_id": [ "Flashforge PETG-CF" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json index 48798f6b98..15b12ed8f9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "UQF0kAaXnZgJGK4o", - "filament_id": "OFftQOek", + "filament_id": "OFH6Pjxe", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json index 45c5379b97..657898f301 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FpLoe6QrPXnrH019", - "filament_id": "OFftQOek", + "filament_id": "OFH6Pjxe", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json index 839a09c93b..e41c16e0cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "YFbZ472BRNga6OpQ", - "filament_id": "OFlNKZLP", + "filament_id": "OFrnkURQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json index c0081e14d4..fb5ba4bbf6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "AtVxriSKOrFZzUun", - "filament_id": "OFlNKZLP", + "filament_id": "OFrnkURQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json index 535d2b6b31..5aa386d441 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "47Q7YXoJ7rD7Vu21", - "filament_id": "OF0wk0Pk", + "filament_id": "OF6ueBwd", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json index c786b1643e..025ddbf305 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "v7vYsiPVka4c1CUW", - "filament_id": "OF0wk0Pk", + "filament_id": "OF6ueBwd", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json index 155f7ddcb1..65741b1860 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "3fuVuyVcn8U0bRJQ", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json index 86153a46df..64d564cfca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "FrRRUl5OT773uCju", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json index 004d9992a1..e280847ff0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "gMmhMDqjmJfAYcbV", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json index b738bc9afb..a61f208b0f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "0OsrtqfIxrEJMwac", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json index 9d5819953e..949a7ab6a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "fuzWVrfZqekMETLK", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json index 0228ff0de8..8963823c97 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FmUnckQofjunAtwr", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json index 3fb9fc2585..6fc821a49a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "Q0RsVOPLuMByur9c", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json index fd7393e08c..6969ef6263 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "QXJgY8OPyaoYUI1D", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json index 05913a7f19..f7b96331ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "R54l7TcwsjdPHvNB", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json index 16a51fa761..b748b785aa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "MELEwYupDkT2DPxL", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json index 84dcbd7a1f..0e01a20dcf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "uGLvOoPAfksLO43M", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json index 63f3c30349..58b72386e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "gGpKvk3rnLuTjOwo", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json index 27cc6bac6a..f4c16daaf0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Yopqnj4b5ZVwigGx", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json index 3199072e84..dcbfee57e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "GrwiA2dArUGV9x2g", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json index b9804e95e8..1af3c298cf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "QEfQrqMwApuSMqih", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json index 9552e043db..c42a17fc29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "BAPIn3eJAPGpscRJ", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json index 45d44e3491..7a7344c225 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "44BmRNRb6vlPq8qe", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json index 54b997bfc0..36a89b5dba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "ltJbhoAeAec9gxrS", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json index 3715130d41..3d13adcc0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "GxdZiXdqns72ibQl", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json index 85db7c8198..7640ec0834 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "5XKGaHUjxHECbnHO", - "filament_id": "OFHBTqyD", + "filament_id": "OFIxitiU", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json index 815c949ca6..b58b98fdd8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "H8IStdO8zEfSLYVE", - "filament_id": "OFdhVJql", + "filament_id": "OFQZeyZv", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json index 8dca7c3195..29dedf8f7a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "4wlkoKnU2bA7xhYO", - "filament_id": "OFdhVJql", + "filament_id": "OFQZeyZv", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json index cfb8df6c5c..6cf9156ada 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "KXy0WyQp06VC2ICh", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json index 0ef7325644..d5e1624903 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "9cGw7tXD8YJHEi1H", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json index 7109d34b4e..d0df8cd605 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "TF6BeOl0patjpPaa", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json index f0d7531966..105291c048 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "nkYeEBo8NdkJulAP", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json index ee9c9258e1..c8650a1a1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "yEDfsOsogfZbNBVX", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json index 15c7b4c7a2..2fc09d1cc1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xZmQdh487UMtvBRu", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json index b3f5fdc1a3..707eb4e042 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "rc00SOyIg30uE3Da", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json index 653af0cdfa..5a35f8d82f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k1OiugasUs7baG1f", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json index b5fadd484a..99a720a226 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "G2Et7kPHptMESzQ0", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json index 41ee33d3f9..0fb2690255 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsOdmFGBSF9UySMN", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json index 4dd0097616..bceeaba05a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "oxRMuvBMu9qdQWUQ", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json index 2aeddbf43c..3887ded589 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "5hwNJvvLtb75XBBg", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json index a621f4ecde..d0fba1bec2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "mGj8VEyOnnogpkmF", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json index 33a309150b..2542e59765 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "HXVX4mDeUSfW2RgL", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json index 53d86e2bd0..29ada76335 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "JDcRA6apekWLXPvH", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json index f8a2b45aa3..dc01f07d81 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "b5GJpvKYktP4vZpj", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json index 68e5a905ba..6dbe02b473 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "RjUpQV6iQxTircwj", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json index bacca455e7..0e2690d93c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "9DEZ6SmFdgfluhsR", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json index 593d88f497..a3696383cf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "girTMkusNTfY04rz", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json index b52b8e6cb3..030d4d1ff4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "pCQ2qmeXUyJzP7kS", - "filament_id": "OFyoW5W2", + "filament_id": "OFkwIWwc", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Color Change" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json index 70eb17ba53..aa9433b6a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "a1jTbQsflD7SDFih", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json index 6f3447e0b0..979f2a51fd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zyCRsy0mHRgyuQqt", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json index 36e4789905..4928bc3891 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "y8TNaRebTrmFem10", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json index c543dcfb58..2a7e7616ba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "qju0AMvvq0B5Glny", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json index 1829618f06..97cd5bb9be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "o8gGBOEcNvlbZxGW", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json index c6767072c2..929002ffac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "0RkkIcIUFgwOFTBY", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json index 8cd892194d..487f05b211 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "9qVabnSl8xfKSIYX", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json index de910c8202..0d81c49ca3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DL7lxDI35YErCTWX", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json index 4753dd7e12..d3cc825ed6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "koEC7DteUoXHUd2z", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json index 1115d57393..f684c8b47b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "D69fWcXioFcpoUjC", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json index 6cffd37021..5cb479f1a4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "rfiQUncdSExEaK0U", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json index eac289b203..6018aad13d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "WX8lK8efXIVcpjFf", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json index 8ad84a60f2..8588d194f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Tzvo3oILQJc4SQko", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json index 58cd97fed5..7491d8dc7c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZQYrljZtu3es26hB", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json index cf4e376d6e..c4785481f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Y5gm20O4yCCDIoC0", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json index 8c3d23f226..b2a142d9bd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "80vSQxnHfd5ZUy5h", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json index 0bc3cee930..0137ac7348 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "UZi7T5VoasmXWyH5", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json index a55bbd16c0..96aa6babdf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "6UlSb4fqHIMdMxkO", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json index aee57b55ae..bb1e1d9513 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "H2Cr4B5VUaxyYsN0", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json index 0ac191a749..99727f9217 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NJrc0UZ54Fq8MaqF", - "filament_id": "OFXv4FUi", + "filament_id": "OF5NQFKI", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Galaxy" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json index 1f58b7ce9d..ec022f475c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k8iibCO2EnlTSRyi", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json index 316f797d5b..a6bc399396 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "pACct3L7duMh3hfx", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json index 266461a8a5..58ef1320d5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "GdvXL8SrKrYHxSgZ", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json index 964b280d46..a58b30c6fe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "SLYD2YcQTQgbSjIF", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json index e84eaca5e8..9f8bbf2127 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "kOobFSlqEG9Qe0d1", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json index f04ba6e742..bb19b242a7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "4sE1LTVVuRglRbpD", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json index efc9decd4f..f370433f16 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "jEUZyaEIBf2eXXeh", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json index 99d6e50b42..9e865d710f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "qZ6kKjRCMfe4Ql3F", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json index 4efdea0ca0..6be800cba6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "xPPSRmadqfqCtRF2", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json index d710da228d..7b49141fd8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "aWVXIk1xVa9URR1D", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json index bf4a43d0b6..1063943964 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "KhBF7hHHVPzqiAca", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json index a3c7dfd439..34929db7ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "sTplnj3gMAzwtLWE", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json index f7a674246f..3f409afcef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zJFUJKDJRYi1pRL7", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json index 972b575cad..2944c6ba8e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "vXPXOKD8vNJlujM1", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json index 582d6e32c9..883241624e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "purqxjmWiflDrnik", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json index 17e7fe9b09..1daf6897b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "qraQ97uusigB63hv", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json index bd4e81dbc6..d8735d275c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "Z1NCX8XMyIVlOlWn", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json index 59b52fad8c..f1ab00b390 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "s620OFLTgFT4Ds2A", - "filament_id": "OFwf0oWp", + "filament_id": "OFMIma8C", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Luminous" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json index 21fb7bfe80..d9c3ffe33a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DcbISTLvKNMZRzKx", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json index b6fc07dc4b..790c30cef0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4fwlIrzy6O2EsyBZ", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json index 7037b54f2d..1f7bd2b1da 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "BVmVfNCuy8HDhcEI", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json index b6772f5d1d..8b85ad1f7e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "WRMePGzDGdEGiqNv", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json index bff289cda9..4f7b782d7f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "thnbuaLDDlGrkrdY", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json index 8050f544ff..548d627fa2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "cnPwhLyBq6JL8gEA", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json index 95f712248b..0a5772910a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "8b9q1FfVljPmKoEt", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json index cf8c573962..7ac6952363 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "o9dOrLgL6efF19O1", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json index 0c247e1b06..3154dfabc1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "QoRmDvhoeGi6Z2xv", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json index 9c13d8bf85..ec55501821 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "dHyuoORAUGLtlGkJ", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json index 4e945b96df..892a8d513c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "OgqVyIHfy3U8Dc6d", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json index a32fbb2952..2716d0f9fa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "g1gnICJ3u6hpGazQ", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json index b955699bcf..c5338f91fa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "feXpVbDM5ON5mwg0", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json index 4816841106..589fc96f12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "XMnZQ1AxXPJqpqRX", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json index 787af100e8..8a2cc0815b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Ke0bRKPNKSsVMO1Y", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json index 84d8d2f4d3..14ee3d9ad6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "IRC2n4GaofxvvyTt", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json index c753c54bb3..c19e58a5df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "RN4wdTL0qccM4huZ", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json index 03a028841a..989bed63b3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "ipMevDMORKqZYdvD", - "filament_id": "OF60Lmeq", + "filament_id": "OF1bQyX2", "instantiation": "true", "filament_max_volumetric_speed": [ "22" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json index 439527a780..a788ef51f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vwwb5nfO63U1ErCn", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json index 3d67e7a928..b6a2c35983 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ekq4MRPyzlYxRhbX", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json index 4d538c35a2..45b9d0d7d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "uusF7Vz94HOwoQF0", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json index 15a224163f..3f595ba93f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "sHZWzrZO8PP0QYZR", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json index 928b220017..4dc8a9d226 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "bxwjEFI8HmNY8JI6", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json index 184a2ed052..5f0dc7ac33 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "VvMaIJwFk4Q6KX4p", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json index 0c772343b9..1c40ec5691 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "5xqdqoj2l50FegPF", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json index ab8e2a6e13..035d431419 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "R79SbWA9i2OAu2ee", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json index 8d1a7360f9..df92bc3004 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "zjIN4KzIOwI1VwOc", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json index a0bdd7313a..7828b38822 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "UxMNNil2KnWvAJ4q", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json index 878fb7e83e..d9e6e0ec27 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "57i6iKrVYUS5UiBT", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json index ec32a91e56..712410e542 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vVKalJViJuBvlHkK", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json index cd872ad134..6b8014dff1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "IYPw8a9tkpuf95uH", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json index 1652f423b9..84429816a4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "I0bULoVAbtVfQoCy", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json index 31fc158a78..057c05a51f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "DbPo3ay2e4a002AB", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json index 8c970ff1b5..d9f64c3634 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "uztv4hhm2O3T93zZ", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json index 6edb1d2d36..9323d094ef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "UFWWrhfgS7N36Y8W", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json index c9a3884236..3a28540dbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "UD5i0ijsirfieUvb", - "filament_id": "OFWv6JYn", + "filament_id": "OFvVxvzZ", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Metal" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json index 5cb8fcea1a..15a01f350a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DIMoIGOGedN17WbO", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json index 1e838feabd..9d4fb9f9a8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SC5LJcecBaEG5by3", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json index f51c80d063..6a24a22501 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "t9lPSFnwLDk0ARIp", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json index 76fff17909..14fcccf62b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "SBSlOEwZSvZHeX4r", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json index 9dbd0c5df8..d26813d36c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "DbWTm2H71izMWmpx", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json index c29e57868b..174584294f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZENqqRqvEOeloAgs", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json index 7a776d89e3..c7913ee0a9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "YcXuvz3qYHtVoWxv", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json index 32a582ed53..8747bf9e8f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "prItyXNphhuPCAce", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json index 2aa08cf968..63b0c9a162 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "83zDmjaAgxxIt7KU", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json index 88ee859e78..1b1a3c059c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "px3O28Olb9LExqfT", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json index bb5eb9a2dd..2d5f18b2c4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "QYgsCCHP3Khqrzh3", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json index d839e8b67f..6f675b36db 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "wV01bqvZ6MRaEibZ", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json index c3a2de4dfc..730a9ee7d9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "1ro9wHPYhuMHNiYe", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json index d0a52dc129..24afad6fd5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "4W4a7c9ugUVwvvmn", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json index f6a0c4911f..c8dc7de4cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "CloRo3qxvzxHZuIP", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json index 924ed22202..e677dfe51b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "QgUbP07tIXmFysEb", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json index d1383d50c1..3edd253b70 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "6mvGOtkPZT6ROboo", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json index 302bb89cea..880e0e1ff1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "vI875WYbMyQeMwlh", - "filament_id": "OFTa6gPH", + "filament_id": "OFK74HJD", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Pro" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json index 04b217d0c7..13d04ff82c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gxl3i7jTwkzrKxF4", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index 7ef705723e..c3ece049cf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "mx6NWRkqyo2U12XQ", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index 058dce03c0..a5bdb3ae12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "YH9IHXOFMKwcTLyA", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index c2f9796beb..6541cbefb5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "IfAieG0OAG807xlu", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index 6ebc636b10..a98c508f95 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "N6J7QqQ7TIgM3MyW", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "cool_plate_temp": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json index 7aa85e29bf..3e65220aa5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "OIsfpi49wEoF0ekO", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json index 67ca938c59..5943d800f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "xxeZ6VPjRFevxDnK", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json index 50440528c4..1db32c1b42 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "x5m17Z5UpqpTtwgF", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json index 933275ecf4..4e99c711c1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "2GZp8yjrY1OioFDi", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json index 03c51a026b..1e92e0d029 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "U0XtCVUhIMnidhbR", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json index 127a7d57bf..cb7dc03904 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "8j9kaYy3ghkF81Cu", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json index 7a4b09647c..6eff5673c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "E0LeJwSxaniDkB0b", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json index 573bf70bf2..3f6a7428ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "8rggqgJ9kg9yLE28", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json index dbd9678eb4..f8dbc1a5db 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "hnWRLUwnfXiwnqBM", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json index 9703b974e9..2cc8db6387 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "uY4OWhIytHMz4rWq", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json index 88c07e6495..d77fc03f37 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "YSkkXd9EhhEHvGpf", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json index 2d45c140ca..9f890d3ae4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "XlxXZj9Wi1D6IwCE", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json index 5e3cdced52..030ea7370f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "IPyXBSnMCAikjI9V", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json index efb07ffb7b..16f980a35a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "f3gJsovSmDKoA7BP", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json index ab60566b84..7be8b80605 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "vZb7BvbyVWkZv3rR", - "filament_id": "OFAGrVjP", + "filament_id": "OFLYDIb8", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json index 3202d660c4..b9621303fe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ojYsAanAPqYhgFoe", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json index 5156491cfe..e1df09f3fb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xVYaNvQwM2chTkPe", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json index a8af698f32..4c0cf846e9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "o8lsEnMIiHHorJhb", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json index 653b2f3e03..173557e7cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "oXlxQJY0K6Dnri7e", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json index 11cfe05454..0bed0a94ad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "XKpFulrvvrfE56va", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json index f722c56cbf..b0d52bf934 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jmVmKMUCcowszvVp", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json index 641ab1da9a..94ef846a7e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "yeh5cd0tAHtHzdoQ", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json index e2402d34ed..1ce68966df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "q2Zi0YluaYpG3Ktf", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json index e03a5b575e..6d95754110 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "1qXV6AJqPpAwX1YK", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json index b2e0f1590b..70c9c99c7a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "YsyGGOGqUVkEqkIr", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json index 6817de3a60..b333c92f94 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4L3Zm1YIxs8J8dp9", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json index 0ecfc51591..685625a28b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "UVvd018dTbygqTgy", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json index dec7c8275f..e9714994cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "F0k8kkgWM5FkLAzo", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json index c11104155a..964a187d38 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS @G3U", "from": "system", "setting_id": "Oapl8InwbkwNSIDl", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json index 3513820454..34a5114484 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "NiB6Yb4b0auyn9KQ", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json index 0ad4ae9863..659909085f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "LYtdPgec1hBLhoQA", - "filament_id": "OF9sr3Vn", + "filament_id": "OFec7Qiw", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Sparkle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json index c61e191e80..8367f7e01b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "QRyISvTy06kCwxKo", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json index 17a29fd4ad..60f17b2196 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "rmnF24E3SuwzRscH", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json index 4fcd8bf26d..f719c895cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "BXPI5Pkp7a6pLrCh", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json index 4e5ab53a0a..b2b8bcf477 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "rBm25DRY1PAkEJ4r", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json index a3c206104c..f5e734c62b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "xReo12oteZ4ECNJN", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json index 65b19268dd..3d493c1bf7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "9PgjgxU7pLl2Dfpe", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json index 6f13da05c7..011065f34f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "RuNKzuIsw7F1ogmG", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json index d2facc5b67..ee56dde5d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "YPuMCHNGDWh0FpIB", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json index 8a051eae74..3baeeccc60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "3uC056Y171ZjnQE6", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json index f0515b17da..85527a625a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "JxNlb64lTODaaQhU", - "filament_id": "OFPJrlC3", + "filament_id": "OF2bZtyg", "instantiation": "true", "filament_settings_id": [ "Flashforge PLA-CF" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json index 48ba8894c7..67c45b439d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,7 @@ "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "inherits": "Flashforge Generic PLA-Silk", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFGc282l", "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json index 6bdea5bcd0..e559b22a88 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "DhC7iFgNKCAq4Zkt", - "filament_id": "OFQCAYAt", + "filament_id": "OFLC1oRH", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json index daa6fb18ea..96fa32ad12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "Jws2AaLWaNyZhqX4", - "filament_id": "OFQCAYAt", + "filament_id": "OFLC1oRH", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json index 883ee5c3ac..f05cbff817 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "MFItX51zZO0KYjdk", - "filament_id": "OFQCAYAt", + "filament_id": "OFLC1oRH", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json index e4a3581fe4..140f6c5dea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "KITjZXcyM4N8cVyu", - "filament_id": "OFp8lkYD", + "filament_id": "OF5BN24W", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json index bd330537e5..b543ea7215 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "6NjEQ6RJKUAOrSLw", - "filament_id": "OFCJaXZS", + "filament_id": "OFxMGIPt", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json index 85977c3bb7..10ebf9f302 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "vFMKqNjQjlNxwvDI", - "filament_id": "OFCJaXZS", + "filament_id": "OFxMGIPt", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json index 54faf072f3..58b2d242a8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "ihXPnFERMjbBgrP5", - "filament_id": "OFZcrV9c", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json index 7cb88b5960..5f261953b3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "UWFjBmSpUkZLBvoO", - "filament_id": "OFZcrV9c", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json index 309fb174e7..0b1139bf47 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "oSGlx5mtGh07BnOz", - "filament_id": "OFZcrV9c", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json index 67c51aa68e..e7fac74763 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "i5DllSvYjVPO04Su", - "filament_id": "OFZcrV9c", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json index 97ff645bb1..19630dac6a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "l3dYtVM52X0UMRix", - "filament_id": "OFZcrV9c", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json index f92402ffaa..4f3cc891e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "rSYGG2ni41NDVw6l", - "filament_id": "OFeFRwST", + "filament_id": "OFQiq4fb", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json index f9a335f2e7..206933a8fe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "nwgbMjLRJLtJ04ri", - "filament_id": "OFeFRwST", + "filament_id": "OFQiq4fb", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json index 624f2b05e8..4e2a345147 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "f75oElm4zB0hukIj", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json index 456dea73d2..a90c599c43 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "o4KYTpJF6KksX2mg", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json index f4d18ac97c..8c9d19de43 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "HUSkDZL6rCpz0lRk", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json index da615cf496..43d235a9ba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "8xgu0AnMuKbPWyVd", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json index f2d17b5a69..23e2cd0e23 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "Rgqt3MjxOye5EaFt", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json index 3f0aea0926..6d8d7ce10d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "PBFsW5qhVbQteYh5", - "filament_id": "OFmgesco", + "filament_id": "OFKpQTJI", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json index f91c527cac..952b10fa12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "TPbHmcFyPyjvoERv", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json index 6b331b1a97..626c5891bc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "zLMgsyDmdoXHhqFv", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json index 6f674a27e8..d084aa4b46 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "ThakVhjfpgnAlEVH", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json index 5a6b095651..262c9c9e47 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "M0ozqaD3jSKoD6fm", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json index 4d3d501620..649ef446ef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "ob8IkvzNt9CWCzbk", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json index c31e020d4d..8eb722c51f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "NzxX1lyRJ7wLUihV", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json index 306930aabc..08a4033ee3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "4FIGiheSGvSJPw3s", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json index a3ee98d0b8..9dc4916ba9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", "from": "system", "setting_id": "1GNqSBaQitzhYSx7", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json index eebe8e5b85..8a0c8edacd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "eOhMygyxaccdov7o", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json index e9823b8a1c..1e35a008af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", "from": "system", "setting_id": "LxooKiOkRncktNLf", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json index b3aa3cfc55..bca2a33ba0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "HdoJfbQr0uwQ6Vwb", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json index abe58bc211..6352a73829 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "J4EaFhnpkLDcl5wH", - "filament_id": "OFRNU58t", + "filament_id": "OFAf9pJF", "instantiation": "true", "filament_settings_id": [ "Flashforge TPU 95A" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json index c5c992698e..1daa3b0189 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "fd5bACFa33J7aTdp", - "filament_id": "OFtJMczs", + "filament_id": "OF995YXg", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json index 94aa1ead1c..3145267db2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "hrcELA2qEMkZ6Wvj", - "filament_id": "OFtJMczs", + "filament_id": "OF995YXg", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json index a4a27dceef..96c3798a71 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "Lis7BZ3lMkoX5KQt", - "filament_id": "OFE22Uba", + "filament_id": "OF41jaTh", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json index bd69da6ff2..18e401489e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "xY03Hiidu5YNSUyZ", - "filament_id": "OFE22Uba", + "filament_id": "OF41jaTh", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json index 6066fbe98b..3fee2a98b2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "AHu6wNV3zcPBusOF", - "filament_id": "OFyxAbO4", + "filament_id": "OFNWnx2c", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json index 5fe7151b78..d7625a7d8d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "8MBRqfLIRdhxk1dF", - "filament_id": "OFyxAbO4", + "filament_id": "OFNWnx2c", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json index c4ebf2a360..0ac23a453d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "9pxqGyfi52tuVmZ1", - "filament_id": "FFF02", + "filament_id": "OF5SJ3jz", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json index ca504e0e95..7576c467af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "tYidxo83oreZoecT", - "filament_id": "FFF03", + "filament_id": "OFMpxamb", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json index 8234e6f07a..8f3483dce2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qnKvMRUvJ7tRJ4dX", - "filament_id": "FFF01", + "filament_id": "OFDKgoqx", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json index 646f8971b2..a9a3418254 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "2JQjReK012FHpHIt", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json index 7bb5e8906a..18df8ac124 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "3SCkpXXK8VcQBMQn", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json index b0cb4812c8..0f1754ae6c 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "dgpcOrf7282LTh1d", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json index dbccec4551..d6a0d3bd5d 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "e85SCr6SV9kQD2hm", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json index a780bd8dd8..c6970afe6a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "eGXsHN5B9BZViVNe", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json index 07e8702da2..70d29c3c5d 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "8JSb4JqZ7zLi8uPI", - "filament_id": "OF6FM5F7", + "filament_id": "OF42ZDpN", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json index c88d025a64..e7647aff3f 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "gZqAGVOlWR79n7hN", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json index b1f762dd7a..a8dc9a771b 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "nJF1lCOavNNh4yHs", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json index dc949095de..4bb5bfff69 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "TZ0nKqxoIYk2mPh8", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index 2e264e4b2f..4ae7d696a8 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "nH6pwFYsPyBzL1EB", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json index d5cb85c1bc..d359420582 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "yok12IOGZzGot5Ll", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 0aaa19dd68..8ef405d524 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "wmWMf3MfmbfZx2o8", - "filament_id": "OFSdF3B1", + "filament_id": "OFYtS9zg", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json index 2892bfac6a..4befc54c32 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Xqb0GQluin2jUQyL", - "filament_id": "OFLxO2Oc", + "filament_id": "OFBC32Wb", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json index 5f464b11cf..0d57937da9 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "A8PDgw1jZE2m3bem", - "filament_id": "OF6SEkeJ", + "filament_id": "OFB8wSps", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json index e2584bb9ed..c9eb3cafd7 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "Iy5lHY4ihEKPgJ5x", - "filament_id": "OF6SEkeJ", + "filament_id": "OFB8wSps", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json index a6fb057638..7f07f612f6 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Kdeg55RzLMYhqYMC", - "filament_id": "OF6SEkeJ", + "filament_id": "OFB8wSps", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json index a94efd16a0..a3c7a4372e 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "JXf7KCy4KY65xuzO", - "filament_id": "OF6SEkeJ", + "filament_id": "OFB8wSps", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json index e3652a2989..dfdd46fb57 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "O3tz36NNMoagELL0", - "filament_id": "OFAtydxE", + "filament_id": "OFUScM0D", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json index b05cdc7517..d84fd5aeb0 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "Gg9H6I32fOqoLSqE", - "filament_id": "OFAtydxE", + "filament_id": "OFUScM0D", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json index 700ebeea67..248fbb5ce1 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "pV5QERvRuROIZTOa", - "filament_id": "OF0UbONm", + "filament_id": "OF6WddJ1", "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json index e49b64860a..538d1e5c0f 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "0i7VkquM4n0uFaXH", - "filament_id": "OF0UbONm", + "filament_id": "OF6WddJ1", "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json index 54bedf7278..088e4ac1b7 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "TZDKsooodaGVkM4m", - "filament_id": "OF5kwfZu", + "filament_id": "OFZ1hANN", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json index 9201c77b22..ebd0a01ed4 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "NdNRNhmsHgHRnz1Z", - "filament_id": "OFYICbI4", + "filament_id": "OFPjOUtz", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json index 37b5e26001..5b959efeae 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "fR7maJwWmteJ7bWY", - "filament_id": "OFYICbI4", + "filament_id": "OFPjOUtz", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json index 1af16ac51a..c35726f024 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PAHT-CF", "from": "system", "setting_id": "gLG1R5gtdliSlnZJ", - "filament_id": "OFoAaHcF", + "filament_id": "OF2RjrWH", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json index b68ea0efb9..acb65a33dc 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "AaGdNgYaIIZyZBiW", - "filament_id": "OFKZH00L", + "filament_id": "OFRujL0v", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json index b87e15f2df..a526ad1e0c 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "jJVDAlGTt1QJlbn8", - "filament_id": "OFKZH00L", + "filament_id": "OFRujL0v", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json index 06760b4e08..e80c963649 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF", "from": "system", "setting_id": "IEpmsltdjoCu2txJ", - "filament_id": "OFAdZFD1", + "filament_id": "OF4zzGwp", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json index 24c8414b2e..963d3ab54d 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "foH2sa61cDy12TzH", - "filament_id": "OFGfdP6J", + "filament_id": "OF6rMr3U", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json index 66b94a8bc0..9ebf2fcdad 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "gQLoSJ7xGEdOd8kr", - "filament_id": "OFGfdP6J", + "filament_id": "OF6rMr3U", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json index 5fa539c9d8..b3b537bfb3 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "6Z5vce5YKlCGox8v", - "filament_id": "OFjepy6j", + "filament_id": "OFCaJHAA", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json index 6c09203af8..66c208d2d3 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "kMYDFSwivzTjFo2L", - "filament_id": "OFjepy6j", + "filament_id": "OFCaJHAA", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json index a526cc23ff..d4947b14fb 100644 --- a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic ABS", "from": "system", "setting_id": "lS237JRDRMQgJFzd", - "filament_id": "GFB99", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1.093" diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json index fc6281092e..f823512bcf 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic ASA", "from": "system", "setting_id": "tq7YmJohYaNiPplE", - "filament_id": "OFRR8LUh", + "filament_id": "OFLPAxz3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json index e43dda4e39..906b5af508 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "cvJIaPzb0uJLipX1", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json index 3575a60b49..83744365bd 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "wguPruY9M7GcMt6q", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json index 2fc765ea4a..0e279cd8cb 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "EhobwmFIEg5Cs5Ki", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json index 2e17832b77..77114b937f 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "JvdxJyy7xCm3F0xH", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json index ca87808d1f..68d26b5ff5 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "FtwGLcPMQqKw5uKW", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json index 22ed7da7df..9a6a079a2e 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "lrnsjoh8DtnTcT7g", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json index 3f30b9a2a5..222c3f3085 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Th8rzyWoINHBwgcw", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json index 6c797966fe..346c467bd6 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "1Lyq9gOfcZ5hPIdW", - "filament_id": "OFjqPjjl", + "filament_id": "OF6MOPWx", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json index 8122a7e3b5..d18f7bc5c4 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG", "from": "system", "setting_id": "6vtyYCWYY10OPMbz", - "filament_id": "GFG99", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1.09" diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json index 70b143a5e1..a405594914 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PETG-CF10", "from": "system", "setting_id": "fWM9WLGV9mUQOtHh", - "filament_id": "OFo9EwvK", + "filament_id": "OFO5djrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json index 39afe0a2c2..e8d34603f3 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "48NJ34G6Uo7VgzD4", - "filament_id": "GFL99", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1.07" diff --git a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json index 77e0ed35fd..73ed3cbbaa 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic HS PLA", "from": "system", "setting_id": "B4EWBUa9G36lZUd7", - "filament_id": "GFL99", + "filament_id": "OFmpMwxS", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json index fc4a67290a..d10e6d527c 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json @@ -5,7 +5,7 @@ "inherits": "Flashforge Generic PLA-Silk", "from": "system", "setting_id": "9FrKIXABj3yedXri", - "filament_id": "OGFL96", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_flow_ratio": [ "1.07" diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json index fe64023c22..1867ff0281 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA-CF10", "from": "system", "setting_id": "F8r0b3G228QEK53U", - "filament_id": "OF6XIeUW", + "filament_id": "OFX2zcrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json index 74bee8eab1..b46926fe5e 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "WQyJHZpkl9Dz6Yo3", - "filament_id": "OFuswXlp", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json index fa2c3bb233..01b1fbe328 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "qRqhbOYn5TMfccem", - "filament_id": "OFuswXlp", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json index 591a5b2f40..f1d682cfca 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "LTZCFxkzkGCnUMAR", - "filament_id": "OFuswXlp", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json index a21b8c2c74..685e0dce0f 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic TPU", "from": "system", "setting_id": "DW9Ck6xMK00Ry2iE", - "filament_id": "OF6Mxzsg", + "filament_id": "OFgbpcy9", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json index 2c196808cc..d34dc09ee4 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "i59KgPtnplOJ8ZBh", - "filament_id": "OFvsS7Fb", + "filament_id": "OF5c6nq3", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json index bee067f8c4..7b90c39711 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ERMhwufaef91KJ1d", - "filament_id": "OFvsS7Fb", + "filament_id": "OF5c6nq3", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json index c4d1a43829..de84158ff1 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ZGmi7NF6Rn4idKjT", - "filament_id": "OFDkABjZ", + "filament_id": "OFJYpVAQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json index fb963cb267..dae60389c1 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "3SRFjKR5ezAukLYW", - "filament_id": "OFDkABjZ", + "filament_id": "OFJYpVAQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json index 3f08572fcf..66f0535b0b 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ULqB7JfqebS8d00l", - "filament_id": "OFYRS7GZ", + "filament_id": "OFy48TOp", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json index 2092ddb4f8..f44c131661 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "EQzyVOtOJjpKyRMM", - "filament_id": "OFYRS7GZ", + "filament_id": "OFy48TOp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json index 7a7abe02eb..5b9131d949 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "lALS0WwvUo5AYOq3", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json index 171353a08d..e6267540fb 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "tgRrYwnp5nr1yr9w", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json index ff217ef2e3..9f844651fa 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "yom6iIUUwU1MsZwF", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json index c687db6030..5117416c0a 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "ysj5nD1op08U8rUT", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json index 4fc3dfba55..1d6ac1b4c2 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HBtkC3BfEpBGEWc5", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json index ed34f84c3f..f284af6a29 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,7 @@ "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsW4MCpeL5qfzNfg", - "filament_id": "OFt9AiN5", + "filament_id": "OFIieIka", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json index 4e1efc3f9e..352f419c5e 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "t6CWYU3ZSddIjwhS", - "filament_id": "OFtEFtsz", + "filament_id": "OFwxpmHM", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json index fd1ff2433e..d55ea01f1d 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json @@ -4,7 +4,7 @@ "inherits": "Flashforge Generic PLA", "from": "system", "setting_id": "NXQtHvtO4tyQ1ueu", - "filament_id": "OF9RZyBz", + "filament_id": "OFfegVpA", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json index a29d5448ae..7e75980d63 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json index 84d20b77c5..994468c54d 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json @@ -4,7 +4,7 @@ "renamed_from": "SUNLU Marble PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json index 542dda9c1f..4445f8007a 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index c631debf6c..f343841042 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json index f9eb2fe68d..98a628daeb 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json index d4d6e8d0cb..60fa90f91a 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json index f81d0dfdfb..5617754e9e 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json index 7a296fea35..1bccf6a208 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "TDBNmmGSexhJjBVm", - "filament_id": "GFB99", + "filament_id": "OFBtlI8M", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json index 4fe521fcce..4ed339e5cc 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "lpa58hsu9IB697v8", - "filament_id": "GFN98", + "filament_id": "OFjoIVZ6", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json index 92227f4254..6dd3af11ba 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "MkIN95sonzI0vNXT", - "filament_id": "GFC99", + "filament_id": "OFxTMg1d", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json index 2bd49d16a1..b8a96a8154 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "id0y4kfJciWjOwh6", - "filament_id": "GFG99", + "filament_id": "OFzXURfo", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json index d41a0cdaa6..87c72dc870 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yCGisctQQwASw8kc", - "filament_id": "GFL99", + "filament_id": "OFFZ0BBL", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json index 1ae309f9e9..5c97c06efb 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "84YwyW2C94NdN1zl", - "filament_id": "GFU99", + "filament_id": "OFRzsaDK", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json index eca01c7a14..a125ff3ad2 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "72RZHGo7eACm2tN5", - "filament_id": "OFNz8rrn", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json index 5147461208..bfb316494f 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @Ghost7", "from": "system", "setting_id": "UyTzid0zVMCxSrgx", - "filament_id": "OFnMW5jr", + "filament_id": "OFm4ysMO", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json index 5f2f9522fb..f8c0bcde19 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @Ghost7", "from": "system", "setting_id": "NZwDOWmMdBYEejNQ", - "filament_id": "OFCKK3u9", + "filament_id": "OFQEGL7z", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json index 96f7e5a026..6dd9a695bf 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @Ghost7", "from": "system", "setting_id": "QYOEUrnmNMUcVOVF", - "filament_id": "OF4jILJA", + "filament_id": "OFFX1DRD", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json index 6c727db151..c03f7a09ee 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @Ghost7", "from": "system", "setting_id": "k2os2FPNl8K7vTZN", - "filament_id": "GFG99", + "filament_id": "OFf6ynfH", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json index c970880f0c..85a926f7e9 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json @@ -5,7 +5,7 @@ "renamed_from": "FlyingBear PLA @Ghost7", "from": "system", "setting_id": "3JBTG6IDrBCnvIhf", - "filament_id": "OF50NUZI", + "filament_id": "OF3fwO8b", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json index 6e44f41595..eb744fd971 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @Ghost7", "from": "system", "setting_id": "qQZUolZHgJxgLo17", - "filament_id": "OFNz8rrn", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json index 8b66f6d1ca..6c7ebbab2e 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @Ghost7", "from": "system", "setting_id": "wQQncT0OCAktGyHr", - "filament_id": "GFU99", + "filament_id": "OFHf2lKK", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json index af609d3348..7c2a4dc745 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @S1", "from": "system", "setting_id": "7dtepGnoDDAdPtUh", - "filament_id": "OFnMW5jr", + "filament_id": "OFm4ysMO", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json index c94440b570..852af29fdd 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @S1", "from": "system", "setting_id": "CLggyaDcebZSbqIH", - "filament_id": "OFCKK3u9", + "filament_id": "OFQEGL7z", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json index 41c4c28166..a546a5ed5b 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @S1", "from": "system", "setting_id": "bPeSARy9AGqM8Y32", - "filament_id": "OF4jILJA", + "filament_id": "OFFX1DRD", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json index 3145034b51..206929433a 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @S1", "from": "system", "setting_id": "yKU5mMW0nKvNH98B", - "filament_id": "OFg4N6ZL", + "filament_id": "OFDgQaca", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json index 7ded765608..4f8637c29d 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @S1", "from": "system", "setting_id": "k58jL17n8cOla3Gd", - "filament_id": "OFBGxHgT", + "filament_id": "OFilD4bP", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json index f422d04c4e..82978a61be 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @S1", "from": "system", "setting_id": "h8XGgMBjEwxNkldf", - "filament_id": "OFNz8rrn", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json index 57c0c169d3..27bc1a6ba5 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @S1", "from": "system", "setting_id": "IVFpAlGo8KButueJ", - "filament_id": "OFYfZgxU", + "filament_id": "OFYezc6s", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json index 9b28644704..7dedb1f5cf 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @S1", "from": "system", "setting_id": "Nadd5NX7eDvEnlKO", - "filament_id": "OFVJXE4n", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json index 074988bb61..0e4cace2f1 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @S1", "from": "system", "setting_id": "sSKkzXv1cn33fF7p", - "filament_id": "OFLiTjQK", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json index 47bc577217..a2dfa6158b 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @S1", "from": "system", "setting_id": "mHuxaHppNFZbldHD", - "filament_id": "OFTbdJyT", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json index bc460077c8..f2e5665dc4 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @S1", "from": "system", "setting_id": "Ko5q6BgADth36RJC", - "filament_id": "OFuPN3iW", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json index 79007e6e83..7b767cf298 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @S1", "from": "system", "setting_id": "sayo3sMQKH4ZdhEk", - "filament_id": "OF5Ugv12", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json index 58243ad2bc..1104767ce9 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @S1", "from": "system", "setting_id": "2QHCKH0yDmBzpQnY", - "filament_id": "OFFmJ8aR", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json index 2c3632740e..4202a54091 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @S1", "from": "system", "setting_id": "wh8PHrEbFYKsQxo0", - "filament_id": "OFvOhSjO", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json index 3437d6f571..e72d770f16 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json +++ b/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "ue95N2e65rdp5K6c", - "filament_id": "P510eff9", + "filament_id": "OFsGqI4y", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json index 4575f32060..3d8e746316 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json +++ b/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "Z1scjKDBFoDaTa2C", - "filament_id": "OFziUL2X", + "filament_id": "OFlLmUeV", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json index d0a6f7dc61..715649fabd 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX+APS", "from": "system", "setting_id": "3EdHfL9KE4oRVHB7", - "filament_id": "OFVBNoov", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json index c2b0d8543f..677e39587e 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX+APS", "from": "system", "setting_id": "6YMXdKicP2hGUUJn", - "filament_id": "OFb3UzMZ", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json index df76f5ffe8..3ce073a006 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX+APS", "from": "system", "setting_id": "GsYpyooWb6ymAb36", - "filament_id": "OFTsGps3", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json index d04816c3f0..993574d86c 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX+APS", "from": "system", "setting_id": "sNsRp3vHhcWAxp7d", - "filament_id": "OFvaXhYD", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json index e1a7aaa359..12b79b7722 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX+APS", "from": "system", "setting_id": "UTrjyqqetOSYNZxJ", - "filament_id": "OFuq9tqb", + "filament_id": "OFObG16Q", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json index aecb50b1a4..b857cabc2b 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX+APS", "from": "system", "setting_id": "p08bW50lbzMjwL5B", - "filament_id": "OFefhSuj", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json index 9632d002fb..1396c07546 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @EX+APS", "from": "system", "setting_id": "fy9sPlaVkaXHBxbH", - "filament_id": "GFU99", + "filament_id": "OFbSZBOi", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json index 080a6dfede..4aa2e82fd8 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX", "from": "system", "setting_id": "e6st01mMFr98LVEH", - "filament_id": "OFVBNoov", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json index 3beb4794b3..e328da4f73 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX", "from": "system", "setting_id": "qPCd5oTrCmZi63Ng", - "filament_id": "OFb3UzMZ", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json index 2e0ecd34bd..438743bac4 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX", "from": "system", "setting_id": "Uc2o223YSyShp7EI", - "filament_id": "OFTsGps3", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json index 9f7230ea11..30c38c5a07 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX", "from": "system", "setting_id": "5vqLJrKLKv40sT7y", - "filament_id": "OFvaXhYD", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json index cb78703d14..f0ab2e094d 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX", "from": "system", "setting_id": "bGOpriWvEFZOmqR4", - "filament_id": "OFuq9tqb", + "filament_id": "OFObG16Q", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json index 57ec47283d..3c88c1af03 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX", "from": "system", "setting_id": "y8A92Dw8EMplnZAM", - "filament_id": "OFefhSuj", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json index b72767fc58..fc78851c8b 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @EX", "from": "system", "setting_id": "vAMeXNwHNVMKYWz3", - "filament_id": "GFU99", + "filament_id": "OFbSZBOi", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json index 2c6f0a1f18..fd57e1f375 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @HSN", "from": "system", "setting_id": "QnEhnvxibr6g1nou", - "filament_id": "OFVBNoov", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json index 0aa59d2664..d798d7803c 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @HSN", "from": "system", "setting_id": "L1j3mDKXjE2RKO1B", - "filament_id": "OFb3UzMZ", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json index a8a0810980..41bf6e142f 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @HSN", "from": "system", "setting_id": "HBNOABPFLninXsW6", - "filament_id": "OFTsGps3", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json index c4873f921e..7102e440cd 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @HSN", "from": "system", "setting_id": "DJyFBjQ5n9n1UHv0", - "filament_id": "OFvaXhYD", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json index 8a5765eac9..d2803e44b4 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @HSN", "from": "system", "setting_id": "NWKMG5q4ITfHcYOD", - "filament_id": "OFKzh9lx", + "filament_id": "OFUYCqtB", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json index 52cbdd6732..6f91f0f360 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @HSN", "from": "system", "setting_id": "fAw5pB53L8ZT1Fkm", - "filament_id": "OFefhSuj", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json index 4716c5ac9b..7ba202db61 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @HSN", "from": "system", "setting_id": "CvTHZpKuTaGS186F", - "filament_id": "OFmcJsqt", + "filament_id": "OFIVWJPm", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json index 5bcb620e15..7ba69d8119 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @HSN", "from": "system", "setting_id": "IuZcFrVQ2rJoMDLP", - "filament_id": "OFAK2XjZ", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json index 354cd3d8e3..091152a3e2 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @HSN", "from": "system", "setting_id": "4I0FW5meyC53Xf8n", - "filament_id": "OFSpTWdv", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json index daeed5e540..d0319e1a8d 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @HSN", "from": "system", "setting_id": "vUuSuioOUXsg2P3p", - "filament_id": "OFyD1Zo8", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json index 8aef779240..f9adba5c1e 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @HSN", "from": "system", "setting_id": "lWYq9XssEyY3uWEe", - "filament_id": "OFw05rkF", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json index 2788d2639f..1bc6c1a439 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @HSN", "from": "system", "setting_id": "wOExDniXvR7CcF1w", - "filament_id": "OFS3HrR1", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json index 26fe3ad6ff..53fa4de6e6 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @HSN", "from": "system", "setting_id": "154azDg7YNNWCkNK", - "filament_id": "OFrbbq6E", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json index 83fb180e74..71c277b924 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @HSN", "from": "system", "setting_id": "0bU2fl92vCQobYnt", - "filament_id": "OFFrbsvQ", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json b/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json index 688f43673d..2b2223aec5 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "gtJ2ZoV8fxqqOXuv", - "filament_id": "GFB99", + "filament_id": "OFWbbuRY", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json b/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json index 74be583957..cfd3b187ce 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "k2NSIB3vVUoXGW9F", - "filament_id": "GFN98", + "filament_id": "OF6K467o", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json b/resources/profiles/InfiMech/filament/InfiMech Generic PC.json index 2d2223271c..11d0153e01 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "emj9YLXtmKmeoYJa", - "filament_id": "GFC99", + "filament_id": "OF6xLvYg", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json b/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json index 4837c0eb9e..7b5f094764 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "rhXq50q3u2YxNRcE", - "filament_id": "GFG99", + "filament_id": "OFs2ReMr", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json b/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json index 0fa96a3fca..cdb8dc6563 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BHNIPk7Nbl7hXZY1", - "filament_id": "GFL99", + "filament_id": "OFrQqCwL", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json b/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json index f942042dfd..be76c39b21 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json +++ b/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "pHS9IcwvsPCnkpaO", - "filament_id": "GFU99", + "filament_id": "OFc0xiCz", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json index f7cc33ef70..d90023a4bf 100644 --- a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "j86QMTif4fGujRbg", - "filament_id": "OFefhSuj", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other ABS.json b/resources/profiles/InfiMech/filament/Other ABS.json index d2d4fc2a21..897962d0a1 100644 --- a/resources/profiles/InfiMech/filament/Other ABS.json +++ b/resources/profiles/InfiMech/filament/Other ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other", "from": "system", "setting_id": "nDLB3RZq23limiBn", - "filament_id": "OFAK2XjZ", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PA-CF.json b/resources/profiles/InfiMech/filament/Other PA-CF.json index 37a58115f9..43be7b9024 100644 --- a/resources/profiles/InfiMech/filament/Other PA-CF.json +++ b/resources/profiles/InfiMech/filament/Other PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other", "from": "system", "setting_id": "rgz4LjU9KyvbLhRQ", - "filament_id": "OFSpTWdv", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/Other PC.json b/resources/profiles/InfiMech/filament/Other PC.json index 212ed3117e..be8f684ebf 100644 --- a/resources/profiles/InfiMech/filament/Other PC.json +++ b/resources/profiles/InfiMech/filament/Other PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other", "from": "system", "setting_id": "VXkW5oukQdBX6B6T", - "filament_id": "OFyD1Zo8", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/Other PETG.json b/resources/profiles/InfiMech/filament/Other PETG.json index 4d5ecee6c4..216c4a964c 100644 --- a/resources/profiles/InfiMech/filament/Other PETG.json +++ b/resources/profiles/InfiMech/filament/Other PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other", "from": "system", "setting_id": "onLEWi8GYK0avard", - "filament_id": "OFw05rkF", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/Other PLA Hyper.json b/resources/profiles/InfiMech/filament/Other PLA Hyper.json index 44ec23e383..9ddd68581a 100644 --- a/resources/profiles/InfiMech/filament/Other PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/Other PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other", "from": "system", "setting_id": "Iop52BLp5ou8u4QG", - "filament_id": "OFrbbq6E", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PLA.json b/resources/profiles/InfiMech/filament/Other PLA.json index 5e4a3eddd6..62c32ee9ef 100644 --- a/resources/profiles/InfiMech/filament/Other PLA.json +++ b/resources/profiles/InfiMech/filament/Other PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other", "from": "system", "setting_id": "2Bl4sfgGJBjNMk37", - "filament_id": "OFS3HrR1", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other TPU.json b/resources/profiles/InfiMech/filament/Other TPU.json index 656c5a9e81..1af02b2659 100644 --- a/resources/profiles/InfiMech/filament/Other TPU.json +++ b/resources/profiles/InfiMech/filament/Other TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other", "from": "system", "setting_id": "nqDc2q94Q2hwMi7B", - "filament_id": "OFFrbsvQ", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/LH/filament/LHS ABS.json b/resources/profiles/LH/filament/LHS ABS.json index 28fe82243d..2e7ee48e32 100644 --- a/resources/profiles/LH/filament/LHS ABS.json +++ b/resources/profiles/LH/filament/LHS ABS.json @@ -1,7 +1,7 @@ { "name": "LHS ABS", "type": "filament", - "filament_id": "LHF_abs", + "filament_id": "OFztQ7rO", "setting_id": "EQxNYC7BdGEA2iiD", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS ASA.json b/resources/profiles/LH/filament/LHS ASA.json index 8d8de19dfa..4cc096cb90 100644 --- a/resources/profiles/LH/filament/LHS ASA.json +++ b/resources/profiles/LH/filament/LHS ASA.json @@ -1,6 +1,6 @@ { "name": "LHS ASA", - "filament_id": "LHF_asa", + "filament_id": "OFaP2SsH", "setting_id": "hoq5bKHUb9DE1ezj", "type": "filament", "from": "system", diff --git a/resources/profiles/LH/filament/LHS PC CF.json b/resources/profiles/LH/filament/LHS PC CF.json index e565b5a9ab..54db9bf7fa 100644 --- a/resources/profiles/LH/filament/LHS PC CF.json +++ b/resources/profiles/LH/filament/LHS PC CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "FOQLD0UX6hUhJBQ0", - "filament_id": "LHF_pccf", + "filament_id": "OFu0fjPJ", "instantiation": "true", "compatible_printers": [ "LH Stinger 0.4 nozzle", diff --git a/resources/profiles/LH/filament/LHS PCTG.json b/resources/profiles/LH/filament/LHS PCTG.json index a2593c22b7..2f2a7d2fd6 100644 --- a/resources/profiles/LH/filament/LHS PCTG.json +++ b/resources/profiles/LH/filament/LHS PCTG.json @@ -1,7 +1,7 @@ { "name": "LHS PCTG", "type": "filament", - "filament_id": "LHF_pctg", + "filament_id": "OFBJAdLw", "setting_id": "dKWttiAQNwymKsIC", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS PETG.json b/resources/profiles/LH/filament/LHS PETG.json index 2c960c477c..2956267dab 100644 --- a/resources/profiles/LH/filament/LHS PETG.json +++ b/resources/profiles/LH/filament/LHS PETG.json @@ -1,7 +1,7 @@ { "name": "LHS PETG", "type": "filament", - "filament_id": "LHF_petg", + "filament_id": "OFRJ325z", "setting_id": "aZdY1M44ui7Rtj8r", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS PLA.json b/resources/profiles/LH/filament/LHS PLA.json index 285fd76c13..87ef788b7d 100644 --- a/resources/profiles/LH/filament/LHS PLA.json +++ b/resources/profiles/LH/filament/LHS PLA.json @@ -1,7 +1,7 @@ { "name": "LHS PLA", "type": "filament", - "filament_id": "LHF_pla", + "filament_id": "OFyoBZdm", "setting_id": "M8WSwqD1iQkQntpy", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS TPU Foamy 78A.json b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json index 47e4c606c6..3be659400a 100644 --- a/resources/profiles/LH/filament/LHS TPU Foamy 78A.json +++ b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json @@ -1,7 +1,7 @@ { "name": "LHS TPU Foamy 78A", "type": "filament", - "filament_id": "LHF_ftpuf", + "filament_id": "OFngcE81", "setting_id": "FWyg21qHmAKeihMn", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS TPU.json b/resources/profiles/LH/filament/LHS TPU.json index fc877eb084..f503425bd4 100644 --- a/resources/profiles/LH/filament/LHS TPU.json +++ b/resources/profiles/LH/filament/LHS TPU.json @@ -1,7 +1,7 @@ { "name": "LHS TPU", "type": "filament", - "filament_id": "LHF_ptpu_pl", + "filament_id": "OFIZMQwM", "setting_id": "ILgpZYIqYGH6mqdI", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json index c27280bf49..af61062d28 100644 --- a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json +++ b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "F6pgS8fPQFnN4R0n", - "filament_id": "GFLLK10PPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json index 48343c508d..114c1aa3f8 100644 --- a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json +++ b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "hWuf5kvAA5dXSd8f", - "filament_id": "GFLLK10PETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json index 7eccd144bd..01f5024a14 100644 --- a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json +++ b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N4pabxIYPI8KHgVp", - "filament_id": "GFLLK10PPLA", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json index fe91a5388b..9827cce1db 100644 --- a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json +++ b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BLf7EiZ9yayoKwJy", - "filament_id": "GFLLK10PLA", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json index c91c38c8e9..002c664cc2 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json +++ b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "XwsWBVH2xIwyRMm4", - "filament_id": "GFB99", + "filament_id": "OF6O67Xk", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json index 748d8de25b..343900a1ce 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json +++ b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "7aS9fdn94lEOU1gJ", - "filament_id": "GFG99", + "filament_id": "OF8eQjjt", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json index 23547bfafc..89e0681b45 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json +++ b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "1pyzsOWeVPCxWlqQ", - "filament_id": "GFL99", + "filament_id": "OFPryWt5", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json b/resources/profiles/MagicMaker/filament/MM Generic PEEK.json index 75b905476e..cfa53426f6 100644 --- a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json +++ b/resources/profiles/MagicMaker/filament/MM Generic PEEK.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_peek", "from": "system", "setting_id": "iznBAOK0m6dO7SCh", - "filament_id": "GFG99", + "filament_id": "OFgSPtDn", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/OrcaArena/filament/Arena ABS @base.json b/resources/profiles/OrcaArena/filament/Arena ABS @base.json index 6b8bffc802..e2ae90f59d 100644 --- a/resources/profiles/OrcaArena/filament/Arena ABS @base.json +++ b/resources/profiles/OrcaArena/filament/Arena ABS @base.json @@ -3,7 +3,7 @@ "name": "Arena ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB00", + "filament_id": "OFJ3HRsR", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json index 3cca273276..dfd447f93d 100644 --- a/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN03", + "filament_id": "OFA026vt", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json index bd91f8f92b..e792d76bdc 100644 --- a/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN04", + "filament_id": "OFtOPlK6", "instantiation": "false", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/OrcaArena/filament/Arena PC @base.json b/resources/profiles/OrcaArena/filament/Arena PC @base.json index 912971768d..5af0a9af69 100644 --- a/resources/profiles/OrcaArena/filament/Arena PC @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PC @base.json @@ -3,7 +3,7 @@ "name": "Arena PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC00", + "filament_id": "OFrr67nG", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json index ec29afee99..a17488fff1 100644 --- a/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFT01", + "filament_id": "OFc87pL3", "instantiation": "false", "temperature_vitrification": [ "185" diff --git a/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json b/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json index ca09ce05bd..ed01353b35 100644 --- a/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Arena PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG00", + "filament_id": "OFNBlAPT", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json index 06a32d1956..b3b69c736f 100644 --- a/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG50", + "filament_id": "OFuO0cAP", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json index 15fee6343b..c42ca761e0 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA00", + "filament_id": "OFSbGfsz", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json index d049672842..04c28f1ec2 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Impact @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA03", + "filament_id": "OFjXrKFO", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json index 95a18a2e21..58a7efc0e7 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA07", + "filament_id": "OFuehn62", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json index d90b362299..b2293d70c8 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA01", + "filament_id": "OFgptDSf", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json index 3071459e05..5e71a14838 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA02", + "filament_id": "OFOAdMCB", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json index d3929f3c24..93554f77df 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA05", + "filament_id": "OFmfizbq", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json index db96b66e28..dc823a97f5 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA08", + "filament_id": "OFyHgT60", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json index 6f2d30c051..38ae042314 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA09", + "filament_id": "OFtKeKa9", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json index c0783f0a03..c3acf67b7c 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA50", + "filament_id": "OF2hfMcG", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena Support G @base.json b/resources/profiles/OrcaArena/filament/Arena Support G @base.json index 72a18d0edd..2ab8eb1932 100644 --- a/resources/profiles/OrcaArena/filament/Arena Support G @base.json +++ b/resources/profiles/OrcaArena/filament/Arena Support G @base.json @@ -3,7 +3,7 @@ "name": "Arena Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS01", + "filament_id": "OFIPjqHt", "instantiation": "false", "required_nozzle_HRC": [ "3" diff --git a/resources/profiles/OrcaArena/filament/Arena Support W @base.json b/resources/profiles/OrcaArena/filament/Arena Support W @base.json index d51ee9c170..fa3733d2bc 100644 --- a/resources/profiles/OrcaArena/filament/Arena Support W @base.json +++ b/resources/profiles/OrcaArena/filament/Arena Support W @base.json @@ -3,7 +3,7 @@ "name": "Arena Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS00", + "filament_id": "OFI6WZpn", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json b/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json index 0e6dec526f..b4069147be 100644 --- a/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json +++ b/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Arena TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU01", + "filament_id": "OFQGvU2G", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json index ea3357846a..8a635421ee 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFetENFF", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json index cd0856f13f..26032a7d85 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB98", + "filament_id": "OFmzftED", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json index caf87f47e9..2621b3cf05 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "XHOpI9EFQmYoJ3Sy", - "filament_id": "GFN98", + "filament_id": "OF4xhTuK", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json index 2f4438a82b..a95e022740 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "IintLqJOecQcKmA8", - "filament_id": "GFN99", + "filament_id": "OFmnJNqY", "instantiation": "true", "required_nozzle_HRC": [ "3" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json index d3b97beca6..97bdbe2df1 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC99", + "filament_id": "OFXhZ3uY", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json index 253c710014..a68c25c24a 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFgSEwOZ", "instantiation": "false", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json index b71f5d4536..ba3364a5c4 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG98", + "filament_id": "OFwpkvqf", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json index d7618a6f97..ade5634118 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFD6kN7F", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json index 88fca4407a..9a0dc73322 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFqSTJ3I", + "filament_id": "OFbeeFkl", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json index e3e0efe224..c73b9fc480 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL98", + "filament_id": "OFx0ZzFV", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json index 42d91f10bc..53da039f09 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json @@ -3,7 +3,7 @@ "name": "OrcaArena Generic PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS99", + "filament_id": "OFdLdGgJ", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json index a1451c04fd..8593c5c779 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json +++ b/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "uPHnZUr5Sb16uKZm", - "filament_id": "GFU99", + "filament_id": "OFU5N9jI", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json b/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json index 692492d21a..276bef31c5 100644 --- a/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json +++ b/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_vendor": [ "Polymaker" diff --git a/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json b/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json index c572a15b91..6e167c7248 100644 --- a/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json +++ b/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_vendor": [ "Polymaker" diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json b/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json index 7f38c6044a..ce0711b7e9 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ICnZH4LkPD7c6Lmm", - "filament_id": "GFSL99", + "filament_id": "OFqOk9Ww", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json b/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json index add7c8e295..2d0b34240a 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "7LVGx2lNqhBDdYiJ", - "filament_id": "GFPETG-1", + "filament_id": "OFIeCuXj", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json b/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json index 100057e25b..3a24fb3bc7 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json +++ b/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "KNsVV4dvEWAAkzDE", - "filament_id": "GFL99", + "filament_id": "OFRDLNM9", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json index b6da7244c7..fe53fb4651 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ufcIVt3x0FqV69h4", - "filament_id": "OFqkcvDI", + "filament_id": "OFj64R5U", "instantiation": "true", "filament_flow_ratio": [ "0.91" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json index 1877ed8e3d..1629995edb 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "xSaZKOpjStJuKiM7", - "filament_id": "OFlzQ0IS", + "filament_id": "OFPYDWgC", "instantiation": "true", "filament_flow_ratio": [ "0.90" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json index 34e8f586a4..483e7163ca 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "aUX6OHQrKPghlPBb", - "filament_id": "OFV1szQh", + "filament_id": "OFpPJSHE", "instantiation": "true", "fan_cooling_layer_time": [ "20" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json index d9d1acd1d5..a4bd236a62 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "EFHW4uKJCsBCjAEU", - "filament_id": "OF9tjFbj", + "filament_id": "OFEnbt6D", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json index 6453756f9e..8ca51614b6 100644 --- a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Cc3ULDFzvoHwh8bV", - "filament_id": "GFL99", + "filament_id": "OF6VgL2U", "instantiation": "true", "filament_settings_id": [ "Phrozen PLA @Phrozen Arco 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json index 0f666ab11b..ade8efad81 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "AADElwBWs9fzeAKC", - "filament_id": "Prusa Generic ABS @CORE One 0.6", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json index 6c046f232f..c6c30a2c6b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "QLaQiU2tF5ZFTVjP", - "filament_id": "Prusa Generic ABS @CORE One 0.8", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json index f3c61471ed..84d2ed8ea6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "Sp0sbcvt0EqZ59NT", - "filament_id": "Prusa Generic ABS @CORE One HF 0.4", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json index b6892f7630..568f8468e5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "U1ih5tnkViqI3vya", - "filament_id": "Prusa Generic ABS @CORE One HF 0.5", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json index 1354767857..debed7aed6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "MuqHvIoTlM1Pbs8j", - "filament_id": "Prusa Generic ABS @CORE One HF 0.6", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json index 513171ea52..66655ce8e8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @CORE One", "from": "system", "setting_id": "Wbpc2Ddzc3zPnQVr", - "filament_id": "Prusa Generic ABS @CORE One HF 0.8", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json index a5a1f6cce1..784eb0ef4d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "NajoyXhNAiyJyaRq", - "filament_id": "Prusa Generic ABS @CORE One", + "filament_id": "OFvGc67v", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json index e141e4925d..aacddbfd2d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "bQgom9OdLzHf862f", - "filament_id": "GFB99_5", + "filament_id": "OFvGc67v", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json index 9108be7bd0..1b45ec65e7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "juio4SnE9x7bcYdO", - "filament_id": "GFB99_3", + "filament_id": "OFvGc67v", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json index 67c49bfe9a..dfc5fbc984 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "dRt2nKkJ0saWba5s", - "filament_id": "GFB99_4", + "filament_id": "OFvGc67v", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json index c966113193..d0cc74cc63 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "etTLu2Uk95XriBxT", - "filament_id": "GFB99_2", + "filament_id": "OFvGc67v", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json index fb9f1a07e7..dd33eedfa7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S", "from": "system", "setting_id": "VVzzIN41B5ADTIeQ", - "filament_id": "Generic ABS @MK4S 0.6", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json index 856f2cfe6b..66b27bd6c3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S", "from": "system", "setting_id": "4705fRqWWP2GZOK8", - "filament_id": "Generic ABS @MK4S 0.8", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json index 8faf91c1df..ecd8ec0872 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S", "from": "system", "setting_id": "8iqhyZkLiVCvZYLa", - "filament_id": "Generic ABS @MK4S HF0.4", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json index 27f7e69c16..74f774bd11 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S HF0.4", "from": "system", "setting_id": "bf8ANklVcC0xW1rT", - "filament_id": "Generic ABS @MK4S HF0.5", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json index dd6439a0e4..3c461880c7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S HF0.4", "from": "system", "setting_id": "ZB9vO7AnRqMDCrOy", - "filament_id": "Generic ABS @MK4S HF0.6", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json index 3b359aa2fd..4d2d4631d5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ABS @MK4S HF0.4", "from": "system", "setting_id": "7cx9gZh2vUCR0ELG", - "filament_id": "Generic ABS @MK4S HF0.8", + "filament_id": "OFvGc67v", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json index 6880c7850d..37762490e5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "mDDX6Hdt6Ee00Iqb", - "filament_id": "Generic ABS @MK4S", + "filament_id": "OFvGc67v", "instantiation": "true", "close_fan_the_first_x_layers": "4", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json index ffa4525a5a..c64feecc6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFvGc67v", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json index 1622abdbf8..10b456d822 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "IF0vGesJrPxKZhhP", - "filament_id": "GFB99_6", + "filament_id": "OFyeSq8A", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json index bb6fc8b41e..abd3a2fc9e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Bl3iXBs56hdXM9SE", - "filament_id": "GFB99_7", + "filament_id": "OFyeSq8A", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json index b6a08a7c20..02c86e018b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0luFxwjErjX80SXh", - "filament_id": "GFB99_5", + "filament_id": "OFyeSq8A", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json index 228807da84..a1745176f2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic ABS HF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OFCgpxn2", + "filament_id": "OFyeSq8A", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json index 5e47c117c6..ce22974fd1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "GB4mI21wSfo3jfnQ", - "filament_id": "Prusa Generic ASA @CORE One 0.6", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json index 74cf13fd6a..c112241e63 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "jwPZBZ4B116kCVu9", - "filament_id": "Prusa Generic ASA @CORE One 0.8", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json index 8fdca4347e..04bf35f2e7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "3SHxmODIq9SCK4Kd", - "filament_id": "Prusa Generic ASA @CORE One HF 0.4", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json index 5f8eaeca43..dfe8fec3fe 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "RBSMuMnrcTyregVJ", - "filament_id": "Prusa Generic ASA @CORE One HF 0.5", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json index 39b37c3ed8..f74efb4310 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "5ezNirZa3m7Oi1Ts", - "filament_id": "Prusa Generic ASA @CORE One HF 0.6", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json index 782ea4ce94..8d6bb1a685 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @CORE One", "from": "system", "setting_id": "EtHBkeDF0LvudfBi", - "filament_id": "Prusa Generic ASA @CORE One HF 0.8", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json index c2c39822d7..e00a4d7ca8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Pg9KDqFB63PFJo3Q", - "filament_id": "Prusa Generic ASA @CORE One", + "filament_id": "OFoJcr46", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json index 213f887ea8..088221b03a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "oLhpDGV7BIMFqZZq", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json index f94c769d78..d11f2f2dd6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "CN91PnsqqI5CTRhd", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json index 0ba51d264d..2eae500425 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Mg0Sh8QULakXYt0m", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json index 10aaaf1503..2d969f15be 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "StIz1ZclM5WV6MCC", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json index ca315a91c4..5888bf67d4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "EVFkOOWqYWkUZRQG", - "filament_id": "GFB98_5", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json index f578c5e72a..b467748041 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "LW2yi7y86rJ59LMi", - "filament_id": "GFB98_3", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json index 20625fbc8d..7330692d37 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "5iwLdW6pq5Y4Aziw", - "filament_id": "GFB98_4", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json index b7825b00e3..4f1717860a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "UaLDui75hljyKAkI", - "filament_id": "GFB98_2", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json index 10905e3a24..f3d8a91378 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "ubNQKQ8Ex6khEWaI", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json index 430313b6e5..cb1eb8f267 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S", "from": "system", "setting_id": "j5YvdepMw4z29kzr", - "filament_id": "Prusament ASA @MK4S 0.6", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json index 5853f7bc3f..cbacb6e747 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S", "from": "system", "setting_id": "FtVjP8q0MzM0vr2J", - "filament_id": "Prusament ASA @MK4S 0.8", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json index 8055c5926b..a9a784f496 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S", "from": "system", "setting_id": "na3FnleO5uhDF7Yr", - "filament_id": "Prusament ASA @MK4S HF0.4", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json index 6bf46c7fdc..47055f18aa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S HF0.4", "from": "system", "setting_id": "meEXtenGq7N4dWf3", - "filament_id": "Prusament ASA @MK4S HF0.5", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json index bd0250e1e9..414315ad65 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S HF0.4", "from": "system", "setting_id": "o0UhIK80Y28KX3AK", - "filament_id": "Prusament ASA @MK4S HF0.6", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json index 3c06463b06..f0b377c8d1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic ASA @MK4S HF0.4", "from": "system", "setting_id": "VDDgOXq5iphlyQ5U", - "filament_id": "Prusament ASA @MK4S HF0.8", + "filament_id": "OFoJcr46", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json index dfc2270174..75c3dcc399 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "5BZ0OsiwFPYGCcBg", - "filament_id": "Prusament ASA @MK4S", + "filament_id": "OFoJcr46", "instantiation": "true", "close_fan_the_first_x_layers": "4", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json index a2288b5602..3a6e047baa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "TwgQePxtpUic69Yw", - "filament_id": "GFB98_6", + "filament_id": "OFK4LdYI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json index 719e8c0d7a..9d2bce435d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "TC1QAhU8v7mruXHK", - "filament_id": "GFB98_7", + "filament_id": "OFK4LdYI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json index c514c44cef..f0d0395d78 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "1s3xgWuvTP6UvMG7", - "filament_id": "GFB98_5", + "filament_id": "OFK4LdYI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json index 000196a2a1..6dc6096675 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic ASA HF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OFkeeluv", + "filament_id": "OFK4LdYI", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA.json b/resources/profiles/Prusa/filament/Prusa Generic ASA.json index 85f1d08da6..3bc0c0fd69 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "i5Zm7qbFAtsgG4mF", + "filament_id": "OFoJcr46", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json index 467a0e7aad..dcf3793661 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_flex", "from": "system", "setting_id": "PaXKTb31IFVovWiK", + "filament_id": "OFl2SXmv", "instantiation": "true", "filament_loading_speed_start": "3", "filament_loading_speed": "28", diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json index c6fd096196..7231531ee2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json +++ b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_flex", "from": "system", "setting_id": "b5AA45MlL14moY71", + "filament_id": "OFl2SXmv", "instantiation": "true", "filament_loading_speed_start": "3", "filament_loading_speed": "28", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json index a7f7c13c96..1a2065a58d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "4LeqziiUcsZFvsqn", - "filament_id": "GFN99_4", + "filament_id": "OFIy3kLw", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json index 4a0860931c..8e67d973c4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "FoUTZTxQNZRSUZqi", - "filament_id": "GFN99_2", + "filament_id": "OFIy3kLw", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json index ef6a9174fb..8a026c1c90 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "7Qe2dHRqSOhsuoPn", - "filament_id": "GFN99_3", + "filament_id": "OFIy3kLw", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json index db9b97feff..cdea8133e3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "HIOtwj2ImWrlXkld", - "filament_id": "GFN99_1", + "filament_id": "OFIy3kLw", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PA @base.json index 42e8d47bbd..08528488af 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99", + "filament_id": "OFIy3kLw", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json index db39929ab4..16fd70bc82 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "BjLde5wICEYFSlu1", - "filament_id": "GFN98_4", + "filament_id": "OFfznI0Q", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json index 0607f4afe2..193dcfe35c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "XgIsgzltjlTU8ixC", - "filament_id": "GFN98_2", + "filament_id": "OFfznI0Q", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json index 3d04097b7d..9cbde53ee4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "b2fjpGuYwbeo7O9K", - "filament_id": "GFN98_3", + "filament_id": "OFfznI0Q", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json index bf54572e72..b13ab2ddb0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ko8pHTrnZTzz6LyX", - "filament_id": "GFN98_1", + "filament_id": "OFfznI0Q", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json index 350ab54889..28733da65c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Prusa Generic PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OFXfgh61", + "filament_id": "OFfznI0Q", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json index cf1046b78b..8dfcd4ac73 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "365PSnHIwQoBabi7", - "filament_id": "GFC99_4", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json index 5641ffefea..b9ac2b8114 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "zullllDHKByF2PMu", - "filament_id": "GFC99_2", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json index 2118c4dc43..7edc6d5a05 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "TTIxalWBM5b6YTJ0", - "filament_id": "GFC99_3", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json index 06d150cddc..d63eaee60b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "2h9EbPiUgE3BIHVb", - "filament_id": "GFC99_1", + "filament_id": "OF97ru74", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json index abcfde31e4..4b5d973cdd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "MAtF0WCx6uLte1Bq", - "filament_id": "GFC99_5", + "filament_id": "OFq5QANf", "instantiation": "true", "filament_max_volumetric_speed": [ "30" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json index d10c44bebe..b7729e451f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "Om8P3dn8wY6CbdQg", - "filament_id": "GFC99_6", + "filament_id": "OFq5QANf", "instantiation": "true", "filament_max_volumetric_speed": [ "36" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json index 6e6c9f3747..7fdec94c49 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "uGi7QoODY99zHuCt", - "filament_id": "GFC99_4", + "filament_id": "OFq5QANf", "instantiation": "true", "filament_max_volumetric_speed": [ "24" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json index ece79b1919..ffce8990b7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PC HF @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OFQ9dI8j", + "filament_id": "OFq5QANf", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json index 6e1ac6e621..e776e17543 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "plb6gY1isTp10Unr", - "filament_id": "Prusa Generic PETG @CORE One 0.6", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json index 7d19ded509..a0b3bc4299 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "WISyN9WbqoZW5bBy", - "filament_id": "Prusa Generic PETG @CORE One 0.8", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json index cb0eb3fb5b..d3354152df 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "hMxEpxx9ERuIq28Z", - "filament_id": "Prusa Generic PETG @CORE One HF 0.4", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json index 53e681186f..69c4158297 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "HtW04UsVx5VpeLc9", - "filament_id": "Prusa Generic PETG @CORE One HF 0.5", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json index a6a2b9fc55..c50d2b1cd0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "29TFTfss7xVear5j", - "filament_id": "Prusa Generic PETG @CORE One HF 0.6", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json index 05b926349b..91d6a29a9a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @CORE One", "from": "system", "setting_id": "N91ct2U3Y3jOat0g", - "filament_id": "Prusa Generic PETG @CORE One HF 0.8", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json index 3e914c0ab9..fa5a8d2cd8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "VbFWb2QCAMxcrTAW", - "filament_id": "Prusa Generic PETG @CORE One", + "filament_id": "OF1Id239", "instantiation": "true", "chamber_temperature": [ "35" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json index eccfa418a9..940f308232 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "g5YTLp0ZhzbpCD2h", - "filament_id": "GFG99_5", + "filament_id": "OF1Id239", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json index beacc12d5f..f049544d2f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "6FATkctkE3RaWnWQ", - "filament_id": "GFG99_3", + "filament_id": "OF1Id239", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json index b543c2ffcf..ba45f70c00 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ITT0YpAms3lzeSBk", - "filament_id": "GFG99_4", + "filament_id": "OF1Id239", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json index e52a1b8628..e456955aae 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "71gokqKp7e6fhhf4", - "filament_id": "GFG99_2", + "filament_id": "OF1Id239", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json index 88d4bb1a2f..9b59b93ccf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S", "from": "system", "setting_id": "Pci5FyYkl7E87APR", - "filament_id": "Generic PETG @MK4S 0.6", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json index 358eac5276..8024185152 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S", "from": "system", "setting_id": "gBfDSTXrnY1HRyw7", - "filament_id": "Generic PETG @MK4S 0.8", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json index efbf8db0c7..4267889359 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S", "from": "system", "setting_id": "4pbIJVV1D2h5O3WZ", - "filament_id": "Generic PETG @MK4S HF0.4", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json index 3225bdfb2c..6129d321b2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S HF0.4", "from": "system", "setting_id": "vO26JgugJEsX5z6a", - "filament_id": "Generic PETG @MK4S HF0.5", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json index 56e0d1b40d..83a96f3a40 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S HF0.4", "from": "system", "setting_id": "tv7OUJ7pSPHTkE89", - "filament_id": "Generic PETG @MK4S HF0.6", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json index 21b47aca86..85c388ab7d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PETG @MK4S HF0.4", "from": "system", "setting_id": "wHfH0a2TgTYr9rWF", - "filament_id": "Generic PETG @MK4S HF0.8", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json index b807315eff..ff70f3d63e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "IGfvc0jGdG6evRj8", - "filament_id": "Generic PETG @MK4S", + "filament_id": "OF1Id239", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json index 7cc123d8fd..5ed73792e2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFT02", + "filament_id": "OF1Id239", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json index 7459bccd56..63f9742402 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "Hw54qxSSdBrcOr4r", - "filament_id": "GFG99_6", + "filament_id": "OFOKYhi6", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json index 36582d0481..e3401a666b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "txhzOPQmzVqkcdnP", - "filament_id": "GFG99_7", + "filament_id": "OFOKYhi6", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json index 6cd401b6c6..1f63b82d0b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "OjIQqC3uJdpcLqlG", - "filament_id": "GFG99_5", + "filament_id": "OFOKYhi6", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json index b9c02872b2..002c80fe6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFphFSUJ", + "filament_id": "OFOKYhi6", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json index dbf1862382..a205ac7e71 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "8kSIJx0dpaelcAos", - "filament_id": "Prusa Generic PLA @CORE One 0.6", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json index a10f1da37a..c710474420 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "qlG6J2sXs80HpkCl", - "filament_id": "Prusa Generic PLA @CORE One 0.8", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json index 19b8d0c4df..5a38ba93f3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "KzpBU6cAAqm7z0Sg", - "filament_id": "Prusa Generic PLA @CORE One HF 0.4", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json index 786bf2adab..1935f27062 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "2G99enCGyOVjrOlt", - "filament_id": "Prusa Generic PLA @CORE One HF 0.5", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json index e325a17ac0..b47613e7d1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "iNQhrPrIj4GphWxI", - "filament_id": "Prusa Generic PLA @CORE One HF 0.6", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json index cb895cd542..a3b5df42d8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @CORE One", "from": "system", "setting_id": "YIm5w8btcXZqnNFB", - "filament_id": "Prusa Generic PLA @CORE One HF 0.8", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json index faaa585e91..1f65998039 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NDBqFGNNvKxlmo3V", - "filament_id": "Prusa Generic PLA @CORE One", + "filament_id": "OFiCHnso", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json index ade1148e1d..ab3b9413ae 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "mQtIWbOJ2a4TMYxU", - "filament_id": "GFL99_5", + "filament_id": "OFiCHnso", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json index 6b4a104bd0..9d239a47fd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lSbYoT83cp2tQjk3", - "filament_id": "GFL99_3", + "filament_id": "OFiCHnso", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json index 13853813fb..e77aa1edf0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "kZuzkEvYEluqlAfM", - "filament_id": "GFL99_4", + "filament_id": "OFiCHnso", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json index c1d96ae9ed..d211b1fed2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ojwcK3bKU2Jyosws", - "filament_id": "GFL99_2", + "filament_id": "OFiCHnso", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json index b8cffb4b74..d6915f476d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S", "from": "system", "setting_id": "6pZohvVY1eUGi2k8", - "filament_id": "Generic PLA @MK4S 0.6", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json index d7bf8889ea..07b15552df 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S", "from": "system", "setting_id": "8z66T4ABcY8PLJMB", - "filament_id": "Generic PLA @MK4S 0.8", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json index d9485b0a57..39f7d1b020 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S", "from": "system", "setting_id": "LV8qQ1t2CmhHaRSA", - "filament_id": "Generic PLA @MK4S HF0.4", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json index 7cc2615b2b..97235be213 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S HF0.4", "from": "system", "setting_id": "WH3bJGQGSliMx6ta", - "filament_id": "Generic PLA @MK4S HF0.5", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json index a5f5e8b490..a90a033338 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S HF0.4", "from": "system", "setting_id": "du6Gy8TCxk5z7hPx", - "filament_id": "Generic PLA @MK4S HF0.6", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json index f145d7c0d2..4d381eab0a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S HF0.4", "from": "system", "setting_id": "aLcAkl8Zt2D5lOTp", - "filament_id": "Generic PLA @MK4S HF0.8", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json index e0c8ceedd4..9d35c362fa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CqlMmArE8Llbji7t", - "filament_id": "Generic PLA @MK4S", + "filament_id": "OFiCHnso", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json index be5218517e..4aaa66dd9e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFiCHnso", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json index fe7364310d..a75d98c47f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "IHOsyOhMvOcpHGtG", - "filament_id": "GFL99_6", + "filament_id": "OFl4ItvQ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json index 26f2f013e7..c7f2c480be 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "GYne0LPI8ooQJe08", - "filament_id": "GFL99_7", + "filament_id": "OFl4ItvQ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json index 6d89453bd8..c1366194ec 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Bq51JVrGGEktAqIh", - "filament_id": "GFL99_5", + "filament_id": "OFl4ItvQ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json index 4cff82d6a5..fffecfd0e1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PLA HF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFicxmSa", + "filament_id": "OFl4ItvQ", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json index 7ec1605d58..b974aa2fec 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA Silk @CORE One", "from": "system", "setting_id": "QUaunbCOoBxA8fyJ", - "filament_id": "Prusa Generic PLA Silk @CORE One 0.6", + "filament_id": "OFHFZ1Te", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json index fdce38720a..e877f0f0b4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA Silk @CORE One", "from": "system", "setting_id": "y2IZMYPduRS1mEFL", - "filament_id": "Prusa Generic PLA Silk @CORE One 0.8", + "filament_id": "OFHFZ1Te", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json index 3cdf40ad50..1d39e71aaa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CYztrVFVOPD3RHJx", - "filament_id": "Prusa Generic PLA Silk @CORE One", + "filament_id": "OFHFZ1Te", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json index a6597f5edf..506f82f3ea 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA Silk @MK4S", "from": "system", "setting_id": "e1pUu3Y5pDr7LzNu", - "filament_id": "Generic PLA Silk @MK4S 0.6", + "filament_id": "OFHFZ1Te", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json index f9e7154bdf..6c57e0486e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA Silk @MK4S", "from": "system", "setting_id": "Yw5uZEeqmR9elIn6", - "filament_id": "Generic PLA Silk @MK4S 0.8", + "filament_id": "OFHFZ1Te", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json index 248fec014e..d5217d07f3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic PLA @MK4S", "from": "system", "setting_id": "ngtF8hwv8cSubcR1", - "filament_id": "Generic PLA Silk @MK4S", + "filament_id": "OFHFZ1Te", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json index 632de6b430..5a660705a7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Pi3x8Wj5sdB7TDDK", - "filament_id": "GFL98_5", + "filament_id": "OFQ7I5vC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json index ec4bb6ee6a..1b9b06f8f9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "vtxoJOj2lc1qxV3H", - "filament_id": "GFL98_3", + "filament_id": "OFQ7I5vC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json index eb7f730ef5..5f0619c66c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "9gYj4jTP6y4UmR9s", - "filament_id": "GFL98_4", + "filament_id": "OFQ7I5vC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json index df82e01d98..9f8546a1ae 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yQASt4Ej55vgeZAN", - "filament_id": "GFL98_1", + "filament_id": "OFQ7I5vC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json index c899728e68..98cb90bcac 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Prusa Generic PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFv8SRZh", + "filament_id": "OFQ7I5vC", "instantiation": "false", "filament_type": [ "PLA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json index 440310acd7..b0febd6c30 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "ciRHVEjYNqjT5EsD", - "filament_id": "GFS99_4", + "filament_id": "OFcCzEkS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json index 7f54ae1a7a..e6956d6b8f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "G8TFM51vPvMbGSbX", - "filament_id": "GFS99_2", + "filament_id": "OFcCzEkS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json index 1b6798fd1a..af962c0fec 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "hueUgJutZ71scT6F", - "filament_id": "GFS99_3", + "filament_id": "OFcCzEkS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json index 9ac04757e7..aee4bf78bc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "yaPlNuxryIpkxiOe", - "filament_id": "GFS99_1", + "filament_id": "OFcCzEkS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json index dc77145268..3da3125629 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS99", + "filament_id": "OFcCzEkS", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json index bcd14e6b66..6c1843c3ba 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "NfhvtCbeYlQ3el2O", - "filament_id": "GFS99_5", + "filament_id": "OFoT8F7Y", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json index 8495914c13..9271b3051d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "J5PBEm3LvfpztfXU", - "filament_id": "GFS99_6", + "filament_id": "OFoT8F7Y", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json index 97b2d1ff89..36d34b4946 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "X2k0n055aaG1zc0u", - "filament_id": "GFS99_4", + "filament_id": "OFoT8F7Y", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json index 8d05e93111..8a768f844a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic PVA HF @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OFxLeRyT", + "filament_id": "OFoT8F7Y", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json index fff78aec9f..896518c23c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic TPU @CORE One", "from": "system", "setting_id": "OulnL3bWrEpRJbgJ", - "filament_id": "Prusa Generic TPU @CORE One 0.6", + "filament_id": "OFbenYUK", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json index 4ba3f08222..8b270846d0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic TPU @CORE One", "from": "system", "setting_id": "9fAhdX2hOAnUDn1I", - "filament_id": "Prusa Generic TPU @CORE One 0.8", + "filament_id": "OFbenYUK", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json index 71fe4f21c5..9b212dd17a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_flex", "from": "system", "setting_id": "VR2WfERGWPIWTRha", - "filament_id": "Prusa Generic TPU @CORE One", + "filament_id": "OFbenYUK", "instantiation": "true", "chamber_temperature": [ "30" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json index c0e8ca4577..b3b017de67 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "wfxLtrIAOgG7TKib", - "filament_id": "GFU99_2", + "filament_id": "OFbenYUK", "instantiation": "true", "filament_max_volumetric_speed": [ "1.8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json index 89b8a94856..2c0e48d6a5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic TPU @MK4S", "from": "system", "setting_id": "3zJSkjnxFgeAbkhY", - "filament_id": "Generic FLEX @MK4S 0.6", + "filament_id": "OFbenYUK", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json index 0230b22bea..e78a2768d0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusa Generic TPU @MK4S", "from": "system", "setting_id": "tRRHfIUwFo1C8Q3B", - "filament_id": "Generic FLEX @MK4S 0.8", + "filament_id": "OFbenYUK", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json index a7b5d1fcf6..7f0ac852ee 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "JxNaZsG7Y2rQKATV", - "filament_id": "Generic FLEX @MK4S", + "filament_id": "OFbenYUK", "instantiation": "true", "close_fan_the_first_x_layers": "3", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json index a86c7a2b91..c0c1bccbb3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99", + "filament_id": "OFbenYUK", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json index 611c693da1..b2ac07402c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "Gfuy9ZSCpJw3Usa6", - "filament_id": "GFU99_3", + "filament_id": "OFU3zwPc", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json index 0a41e94893..e08a83c0e6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json @@ -3,6 +3,6 @@ "name": "Prusa Generic TPU HF @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OFbK5wve", + "filament_id": "OFU3zwPc", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json index b3fe97133a..40bb6ee291 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "XlSISsmFlPbj3BOn", - "filament_id": "Prusament ASA @CORE One 0.6", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json index 330f3a7643..71c47268ba 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "89B204vxbuUqB3Os", - "filament_id": "Prusament ASA @CORE One 0.8", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json index ace3c0cb55..e7977e0c94 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "tXktQXr79am1s5UL", - "filament_id": "Prusament ASA @CORE One HF 0.4", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json index 365a4f56a7..26e053cd79 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "YbyojtjXvEtI4Tt3", - "filament_id": "Prusament ASA @CORE One HF 0.5", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json index 9f79b6842a..5bde9d8869 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "35H9TLr1p2Jy767g", - "filament_id": "Prusament ASA @CORE One HF 0.6", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json index b006ea74c1..ba5273d125 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "efgN1KmROfVKa86P", - "filament_id": "Prusament ASA @CORE One HF 0.8", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json index 1ca5222859..b1f2dace26 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "UUTjJ4Y8St3c87jD", - "filament_id": "Prusament ASA @CORE One", + "filament_id": "OFmFwUWM", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json index 87d14f9e8f..fdb63e2e68 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "IQu91UAWOJOQcUq9", + "filament_id": "OFmFwUWM", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL.json b/resources/profiles/Prusa/filament/Prusament ASA @XL.json index 9f3df999d4..c07021a9c3 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "RaEoFoZdXkkOz9yh", + "filament_id": "OFmFwUWM", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json index 8698746393..cbbd006468 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PA-CF @CORE One", "from": "system", "setting_id": "sEDEmqR4k65IhJ4D", - "filament_id": "Prusament PA-CF @CORE One 0.6", + "filament_id": "OF54SvEe", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json index c22f07ddb4..434c534282 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PA-CF @CORE One", "from": "system", "setting_id": "gwFsNIMKGU1f2vPS", - "filament_id": "Prusament PA-CF @CORE One 0.8", + "filament_id": "OF54SvEe", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json index c1c87b7041..33382b1974 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "08PdV2lMsSv1JeOt", - "filament_id": "Prusament PA-CF @CORE One", + "filament_id": "OF54SvEe", "instantiation": "true", "chamber_temperature": [ "40" @@ -60,7 +60,7 @@ "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" ], "filament_type": [ - "PA" + "PA11-CF" ], "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json index d287e59aa4..af306fd2a7 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pa11cf", "from": "system", "setting_id": "FYerOcjToJ3ABpu1", + "filament_id": "OF54SvEe", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json index 6735c31b8a..f843be92a0 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pa11cf", "from": "system", "setting_id": "IrL4iU2kkMBHIw3e", + "filament_id": "OF54SvEe", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json index c31c409a16..5aafb38b43 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "0ytT0Ro3sAjvUPN2", - "filament_id": "Prusament PC Blend @CORE One 0.6", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json index b27cac24c3..a3826bf7cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "WrAImqAV7odcGf8Y", - "filament_id": "Prusament PC Blend @CORE One 0.8", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json index e9431a4a94..4e5b5643bd 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "pEsP537TBR5kozQB", - "filament_id": "Prusament PC Blend @CORE One HF 0.4", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json index 824d9468ea..ab9a127df8 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "3IfLi1ZVCKKbEBUW", - "filament_id": "Prusament PC Blend @CORE One HF 0.5", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json index 707aff7532..642f421819 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "Q8qWw2G7l2UvxGut", - "filament_id": "Prusament PC Blend @CORE One HF 0.6", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json index f75f439c4a..f66f2521c5 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "LDvckXo1zpccnT4g", - "filament_id": "Prusament PC Blend @CORE One HF 0.8", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json index 0fe031c276..34ecd1d759 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "x1SkWhSSkVVIPwCF", - "filament_id": "Prusament PC Blend @CORE One", + "filament_id": "OFvDbkFq", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json index e12bc8db2b..f4722bb89a 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC-CF @CORE One", "from": "system", "setting_id": "DYPBEKeKBdTenG3S", - "filament_id": "Prusament PC-CF @CORE One 0.6", + "filament_id": "OFjz0a3m", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json index 90bbaf4217..2abf3ab8d7 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC-CF @CORE One", "from": "system", "setting_id": "0J8ZuIRTB6EgSke8", - "filament_id": "Prusament PC-CF @CORE One 0.8", + "filament_id": "OFjz0a3m", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json index 2d860fe307..0d5622b7ab 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "IK6Z7DVevvmR96Or", - "filament_id": "Prusament PC-CF @CORE One", + "filament_id": "OFjz0a3m", "instantiation": "true", "chamber_temperature": [ "40" @@ -60,7 +60,7 @@ "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" ], "filament_type": [ - "PC" + "PC-CF" ], "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json index 482a0403df..0c6d1a3cdb 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "m1YND6uz3GWeVIBG", + "filament_id": "OFjz0a3m", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json index 7081cd9523..572b970d02 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "Eq5x2CcEUUAZ5aof", + "filament_id": "OFjz0a3m", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json index 83ef41e09e..974cf5b0cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "JVKHdd0UyFqnVj9g", - "filament_id": "Prusament PETG @CORE One 0.6", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json index eb6cb9a8fa..c1f2e23890 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "0OCfuaF4u8wo5D20", - "filament_id": "Prusament PETG @CORE One 0.8", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json index f2f309b90c..f34dcd29a7 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "lwT1VxW5OkY36kUX", - "filament_id": "Prusament PETG @CORE One HF 0.4", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json index 08ed962fe6..71001294fa 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "XAgW7fElXxhaKaBT", - "filament_id": "Prusament PETG @CORE One HF 0.5", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json index cc1fe65500..cea5ef7809 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "6aTGEZj2EmpTR1mu", - "filament_id": "Prusament PETG @CORE One HF 0.6", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json index 0f2078b5b4..ec16eb9ef2 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "EmrFLgk6ZkTHAvN8", - "filament_id": "Prusament PETG @CORE One HF 0.8", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json index 1a03663b6d..00f78be204 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "LSvba9ds3XTwDMCG", - "filament_id": "Prusament PETG @CORE One", + "filament_id": "OFkR8E2c", "instantiation": "true", "chamber_temperature": [ "35" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @base.json b/resources/profiles/Prusa/filament/Prusament PETG @base.json index 9077aad91c..a2d5de2e53 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @base.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @base.json @@ -3,7 +3,7 @@ "name": "Prusament PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFpHq9gJ", + "filament_id": "OFkR8E2c", "instantiation": "false", "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json index 647940d644..b699ba216f 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "jGHl1i9Y1oJsLQY8", - "filament_id": "Prusament PLA @CORE One 0.6", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json index 3af2846aa0..b1a3109180 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "ijkbGowmIm8uUYsf", - "filament_id": "Prusament PLA @CORE One 0.8", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json index a44a2fd1c4..8c1d806d98 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "mf4Muog4IcsgkYoA", - "filament_id": "Prusament PLA @CORE One HF 0.4", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json index ab7f5b3a37..b91fd4aae0 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "zJf1Y6eP81j3v8VV", - "filament_id": "Prusament PLA @CORE One HF 0.5", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json index 7c94b57456..200666edcf 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "UAvqLPGHYOT1B2lC", - "filament_id": "Prusament PLA @CORE One HF 0.6", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json index 3ba0a21670..84d55886d6 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "0N17rx4NFmuHYLQl", - "filament_id": "Prusament PLA @CORE One HF 0.8", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json index 78b1f80425..ddf62b89ac 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "PuujUMjNKLZvZNAH", - "filament_id": "Prusament PLA @CORE One", + "filament_id": "OFnO4wnf", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @base.json b/resources/profiles/Prusa/filament/Prusament PLA @base.json index acba999339..fad8c00435 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @base.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @base.json @@ -3,7 +3,7 @@ "name": "Prusament PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFkoT6jl", + "filament_id": "OFnO4wnf", "instantiation": "false", "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json index 8c979342b3..6516085280 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PVB @CORE One", "from": "system", "setting_id": "GnslGWS97HuaWX76", - "filament_id": "Prusament PVB @CORE One 0.6", + "filament_id": "OFh7mvPO", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json index 2496ec966d..a001c24fe7 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PVB @CORE One", "from": "system", "setting_id": "Nn7eVPawILDH4BRW", - "filament_id": "Prusament PVB @CORE One 0.8", + "filament_id": "OFh7mvPO", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json index c3c5cf16c8..4504aa77bf 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "085dGkrnPhatF07x", - "filament_id": "Prusament PVB @CORE One", + "filament_id": "OFh7mvPO", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json index 280a722bb3..366c6043cd 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "DIrPylH6rmu6YA43", + "filament_id": "OFh7mvPO", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL.json b/resources/profiles/Prusa/filament/Prusament PVB @XL.json index 1ac285be6e..4a9a858c06 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL.json @@ -4,7 +4,9 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "RF55nfxQwqUqe00Q", + "filament_id": "OFh7mvPO", "instantiation": "true", + "filament_vendor": ["Prusa Polymers"], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json index 19f2eb0962..adbf76e56d 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament rPLA @CORE One", "from": "system", "setting_id": "BY8gwU1VY0hFBPSc", - "filament_id": "Prusament rPLA @CORE One 0.6", + "filament_id": "OFWRITFw", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json index 23f10a2927..3c71431160 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament rPLA @CORE One", "from": "system", "setting_id": "dNK9a3tZOFeUZm60", - "filament_id": "Prusament rPLA @CORE One 0.8", + "filament_id": "OFWRITFw", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json index c32d3baf7f..b520bf4a22 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Bw6H4vFnq7YExyLd", - "filament_id": "Prusament rPLA @CORE One", + "filament_id": "OFWRITFw", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @base.json b/resources/profiles/Prusa/filament/Prusament rPLA @base.json index c9b731d04c..32df471fc6 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @base.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @base.json @@ -3,7 +3,7 @@ "name": "Prusament rPLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFjFPhUC", + "filament_id": "OFWRITFw", "instantiation": "false", "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/fdm_filament_asa.json b/resources/profiles/Prusa/filament/fdm_filament_asa.json index 865b195578..1236ab3286 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_asa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_asa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_asa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFB98", "instantiation": "false", "cool_plate_temp": [ "105" diff --git a/resources/profiles/Prusa/filament/fdm_filament_flex.json b/resources/profiles/Prusa/filament/fdm_filament_flex.json index 4e0e96e59b..139c475174 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_flex.json +++ b/resources/profiles/Prusa/filament/fdm_filament_flex.json @@ -3,7 +3,6 @@ "name": "fdm_filament_flex", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFU99", "instantiation": "false", "hot_plate_temp_initial_layer": [ "50" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json index 4a3d06afeb..8367e9dce3 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa11cf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFN98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pccf.json b/resources/profiles/Prusa/filament/fdm_filament_pccf.json index 50b33b2380..7903295158 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pccf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pccf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pccf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFC98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pvb.json b/resources/profiles/Prusa/filament/fdm_filament_pvb.json index a7365e16bd..ef5a5cdcd4 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pvb.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pvb.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pvb", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFS98", "instantiation": "false", "cool_plate_temp": [ "35" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json index 0571a6c393..da2184d76f 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "UWRDko6WCvXczl33", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json index ff958e904c..933dddacde 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "LUEO7LVrgko3oXzg", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json index afba292989..42c415e15b 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "NKhfqNQIcfKQBYAK", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json index e082ba832a..31d428337d 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "sZn12as9SQDNFDO3", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json index 4eae1e7274..3fb7ac7709 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "coopc46hemdV9QIv", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json index c918896762..09d445c402 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "qvYl7pfvtgF2y25O", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json index 8679f08572..b5d438e789 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "AzHGQIE0dGXjOhqG", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json index e22ad74af9..eb82b82579 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "CoYm8sbAVmpmJNIV", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json index 6c26b42f6e..748e5e2919 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "FnQb4cNqORpQ3Wkq", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json index 0fe76e86e7..8b0a54e060 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "94qvrRFOKOACTK2g", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json index 3383f16f49..077da196cf 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "ehJ163zLubzIrWzf", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS.json b/resources/profiles/Qidi/filament/Bambu ABS.json index 8a3f3c544c..ee4586555a 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS.json +++ b/resources/profiles/Qidi/filament/Bambu ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "aZylcH8GeCJOqtTy", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json index 72ca8b3942..ba65e6a896 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "cZhyWv8zbkM3fgAS", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json index 2baf999d10..984bf0ca94 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PfIdpsKf0Xw5admE", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json index bdb1fc0cf5..a5e6576981 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "czi4981YiirKP6Yy", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json index 457e514214..8745f9b7f4 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "1BV8aedNHRa3h7rp", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json index 8c175a472d..ea82a7a259 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "eNHYNrSKn90P4GdZ", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json index 51609fb0a1..274d012a16 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "VU3PW2x6pfQ9Ayqo", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json index 975dc9f5e7..497cdc3212 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2ezevTOIexxkTBJ2", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json index 8353f29d0d..855bdcc901 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2vTNJwgFvUFq7oS9", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json index f777567d23..5dce4c4998 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "Q5ToVl9Yb4GGoNXC", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json index abb934e808..77e61eb8b4 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "XpLJtB1WhRyb1C75", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json index 517ea571a2..ef8ff48a3c 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PiYLOckPVRFKFTS6", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG.json b/resources/profiles/Qidi/filament/Bambu PETG.json index f3c852e3da..8f69df52f3 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG.json +++ b/resources/profiles/Qidi/filament/Bambu PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5ZkReXpCOi19xuJg", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json index 1aa1a5791f..39c01a3e51 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "xY62JrDaYjjSb3lh", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json index 4ed7e3fde8..6a5dc5dc2f 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "HjjvZoWwpjZ2gwDO", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json index 20a1f209d5..a6c420c613 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5dZqeodmshu33k4e", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json index 9eb008e6e3..2c700d3b7b 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "6kHEv9BjLlJi4E9T", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json index 670a0dd494..83e71e07f2 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "G28Bah0iOaahWlPE", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json index c480153803..afa945e307 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "ioH4lDHLbCw65TIg", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json index a3364d6f1e..bdfdf0e47a 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "oAUHAhSZkmCjhJEP", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json index 1a5492b842..cb39244927 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "mT6I8HUJsMgYCjb4", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json index 38bee01574..26a45e77d9 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5sr5ABQQzrYFUxtk", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json index 46f76ed5ee..6d77933fc8 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "CNzhUsHWT2FOW2Qe", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json index 97c9d86fa6..df8c6b8a5e 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "8Mosuf8MExl0g3Tz", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA.json b/resources/profiles/Qidi/filament/Bambu PLA.json index f4df7bb875..4061aca197 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA.json +++ b/resources/profiles/Qidi/filament/Bambu PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lweaPojzNVU2FJnO", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json index a91921bf7d..29a1578964 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "QASmOwd2vpLRwI9I", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json index d222581868..42e761ca25 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "FETCvNKTRyxJujEs", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json index 25a52df29a..1186b13dad 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "ywzSdHmCxIwmIFVS", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json index 3d1b1b018d..603023a014 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "EwhasEiqLRcN5gBN", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json index 0548ad7b80..6527685bab 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "0NVX3dTScYTIebm3", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json index efbc5367cf..69ac1b6b11 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "HCU0TmDPYF39Gc3X", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json index 07e2b9020a..008671a374 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "Pf6oZn5QrYSbJhdm", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json index be04669935..b777c29a9b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "6LSdExBaTT0Mc3rY", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json index 338327a6f4..fbea89c0fb 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "vc2R90RYyDuY8vQn", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json index 0e0929a26e..6b612e4461 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "1HVRVgHeXWVj3T0v", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json index 9a77e829eb..50b05d928d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "aJxjGxHK8UJOqYPV", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json index a10c29a679..7a3ee8c8ce 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0fchNQsqRqwI6whN", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json index 0fd49f7b99..5b63882b5b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "Cw3CaLrsjVfJKoWI", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json index d907869893..88a9ffa985 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "eLmXN4kJvaoq5Ude", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json index 30c74b3628..8c4767360d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "mndT3gxOniftGEEZ", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json index dc93652d10..9737c4de7a 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "L8aHH2WqnlOYuyfd", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json index 6d403ed166..66da1ce3b3 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "LMva5CR9m19UAhcI", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json index 1e60285f5c..d5e9d135bf 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "5EfWTFx0dXRTREkj", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json index 9463655aed..055b64956f 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "xeu1S6h53DRVM9Pw", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json index 90fdab75cf..d002a5db8c 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "UrZzA62PJDuvo9EC", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json index c9f19b8bbe..62642bab11 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "jAykaomjQ4BS9Cg0", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json index 74c9c5645e..72f0ca2ae8 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "2QrBYfeT0mp048aY", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json index a404adcc52..5f0d6a3e6b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "9otX3aWO4xQA72DT", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json index 2d9a104b6a..02b6929088 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "dqHKVy4ahTjpQFOJ", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json index 94399a5e99..4e21fb79ff 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "GrYmKcX6ghgUO8z0", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json index a3f934d4a3..d2b9e1f6b9 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "Fwd0BaBVmg2w9oBo", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json index c7c48eafaf..f09ce840a7 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "OjSAPfXD7c9LpDZI", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json index 3e4260f01e..37e1982068 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "tNk1yBoRzuKtWamt", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json index 2ba5095a7f..f03e9c8053 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "oULA9qVGUD5izX9o", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json index baacdde075..8331e6dc6c 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "RK1LyCal04XMqidp", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json index 444d1e7ec5..8eeaf11774 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "6ehhHeFIMe3KxHA1", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json index 781709ec0e..5066c19ab1 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "i3bQYXjlGipOAop7", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json index 0b7c393c5e..1dce884cfd 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "vknSksUeSeKFl8vB", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json index bbfc813ac4..7d5db3e2de 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "I5NFFjIYcoo3SkmC", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json index 0a698394bc..16a1a42344 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "gzDFMFaDnAVuDy3B", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json index 54077f69b3..2e6ed1140b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jWtANauqr4Azj7fo", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json index 616249f7fb..6ca66cc671 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "PVJaNrzYRoafHb3k", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json index c442a6b9b4..4815755a54 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "6dP4f482dvR9Ihhu", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json index 438527e84e..d3ef4ea036 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ol1pj7wlmGJlZHbA", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json index dcc67c9e49..7c9832acf5 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "d9bOxYmwJJ928QUm", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json index aa27b3bf99..56846eb0c1 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "3vOLIQxScIoHCUDQ", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json index 693927e275..905d2cef0b 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ninsIRmjQReutXjA", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json index 2c50318e80..8692479cc1 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "m4sql22MWPed4UK9", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json index e2e657e67d..9dca464248 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "SbIhXnMLo7UWLdmF", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json index 310f56f725..edba90fe27 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Hh22vTpUyqF09bma", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json index 0b41ec4fcf..3663179029 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "10PSPCpiTcS92auy", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json index ac1a6dd3f6..fdea3d5aeb 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Xevn2nrx7W5VQX6z", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json index 9f8543d169..a422baae82 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "rRuO94f0PYlPR3yu", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json index 801448598f..924362c286 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "YnRI4rYCHDIi7Q0w", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json index 4875cb845d..fbf2b78629 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "Jizherw9T9l0X76l", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json index 4a75b36230..f265222c29 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "dHlHvcm2BjzlfUSk", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json index 04bc00470b..cd3c18c309 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "3jqdiWNWro7yFptW", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json index 0921c9b6e8..4d9a6ad8c9 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "tARHr87BkRknTQJI", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json index c888887711..99a239670e 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "EEIdQ4XTkpQyRz3h", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json index 53a2a25920..5836edcfd7 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "NBbNF6S5sQYIiS9T", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json index 9dbd2f38a6..8414abfcca 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "gk2D7WKoLK1xPqLC", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json index a83fb80140..8ee92ded5a 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "wtl6yNqJQUVhiBnB", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json index 829d5e6e29..c60980ba47 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "1fl42MjkwXbpjJ3r", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json index 68736ba4c9..eff7da8211 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "vxGQSWw07PXnllwO", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json index 5a67c65ecc..b3ce80842d 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XXJ4dSi48JuA54Iv", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json index 7072ae9048..250eaa3223 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "5rbxArwT1VV5BOSq", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json index 12b6451671..082f09ffea 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "EqpfLGTZXcdjm5BM", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json index 631237f251..087808ff18 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ao01rvVFfkWlwpER", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json index 2002832792..4325782ea0 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "dfni3lzB8GJldfQD", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json index e589839cac..48a586618e 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "iWq2EddKO6QAUJuG", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json index 0add34cd62..bf25f2c6da 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "0EswisPwFjFmk1GT", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json index 2a22e88081..98ed0be9af 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "t3DcJuJsNgXKW0dP", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json index b1fcc53a1a..d669116cc3 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ino4r7XLgTCFh4YR", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json index 5d02632d1f..c586125db1 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "7NXI13ejzocjD7TO", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json index 62f530081c..2dccc6f635 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "QEJ9knURmXAGsFib", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json index 2874e9ed51..96ed3908e3 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "GzEXQzyKqqnCVUBh", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json index 749d87e959..ca0e5862fc 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Q9QYOF2UmsrK7Wof", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json index d1fe71dbea..32839eb63d 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "uXrENPoTa7HWapCV", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json index 0de4f9ec71..5c81627600 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "XnU3X7A7kdRrfoTX", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json index 12f56a5826..874ae102f9 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "Q6H3JzOum8GYVRF9", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json index 563fdaf639..4f2a9d85a0 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "tSR6NKHk3ietpsga", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json index 5cab6e5d2d..d4b17517bb 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "ZF5is6IpP0gGcqRE", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json index 6f293d396b..fe5165436d 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "bAqfoS751xDFHubU", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json index 19d9c490cd..d277bafea9 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "2rWOMrYc40ZRNLQi", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json index 16e34885c6..a1a970be54 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "4x8HlY906khbFsG0", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json index 95b33c700a..3ee5d4697f 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "87QXnh5kCuQoPwjr", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json index 43d6ebbe3b..4cfd0f3202 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "WsMzyALZrDylCkZ6", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json index 01f23b61ee..025770dea7 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "sHVHjhH9FzhRjeHT", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json index a7c49a98f8..d277778204 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Kg6WHLbWxKAE8cCr", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json index 6d1f651941..ba454d0083 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json index a66e95159e..6ef3859314 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json index 56c8f26888..a677387d1b 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json index 61537e05c5..ac1ed2e4bc 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json index fbbbe3bcf0..1eee11b706 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json index 6e72108961..398a45ac25 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json index f3e45975a9..c3f6f6ede7 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFfdxQok", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json index 48422dbf2c..fd06d75bd0 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFfdxQok", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json index 99b96f7788..429f7bc58d 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json index df0c4c9006..a06b63de6d 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json index 73d7e901ab..14cc4b1463 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json index 013e38199f..3922b8fbbb 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json index aeba01311c..0de43e0804 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json index 40ac36e3dd..94fb13c4a3 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json index ff0b89b0ec..cb96443ce7 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json index b271d4f87f..2caa6342ff 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json index 8435661492..2bb82adf5f 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json index cc358bbb31..e3db0ea728 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json index fe2cf1e7f0..98ea19925c 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json index 69747075c6..ed269d96be 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json index b342506185..8639ef5ff7 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json index c8cc9c7f1d..366be7a6ba 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json index f01f3e4d80..ac901e85ad 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Z0J9YPS8382vLms4", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json index b6f87914d3..0c5834be33 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "SA5qLMqlZg0lBV9u", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json index 397e9d9c2d..9f276e1282 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "MzM45pddZsnN8jk4", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json index 00ffd121ef..4f5a081162 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tq1aLmF5jT1fx5mZ", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json index d03e15c72b..0cb80c93c1 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "1hhkoG2E1z6ya5hY", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json index 0661266966..98f2689236 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Vr1wXzAo5OR2PASA", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json index 36ddd1819a..c8965e1ade 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "OCg8c9SWQrZP0SrH", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json index dffcec3561..2d6cfd79a6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "3fkdGYKFpaJ8yjwg", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json index eac761c62b..228a2b7441 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tkh7jC3ZhD7qchMF", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json index 6b0c61276a..e9139c0464 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "wOJOXhIjWFMUvDsB", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json index dec090494e..c0934114e4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "WqbBySroQTCBWMoz", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json index 7803db110f..d53b7c2bee 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "5GyjZE2Ukzo3BDdg", - "filament_id": "OFVhG0yM", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json index f04485915c..1f30fa81e6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "CeOohxHZCLelVMCk", - "filament_id": "OFeybQvK", + "filament_id": "OFOuEEvv", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json index fd6e7b8c76..2ebe9f8df4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "VzAotqGZviabVuS4", - "filament_id": "OFnj7bPm", + "filament_id": "OF0wz84w", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json index 2ec48424c2..aaa210c950 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "1hpYHzEDBeO8jwDr", - "filament_id": "OF8WvPVL", + "filament_id": "OF0w7OpJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json index 8beeba8c54..0824c6eae0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "2ZB4CZPo7OnsVeFj", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json index e09f33c2ec..f35f44ff48 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ANlmZnKFevlds1x9", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json index 404c73f209..2b516260c4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "qGAb3jPiiSZqPc0W", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json index 93b6a852f7..b1ea6553b0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "zPlNGjze5nz0Sqtn", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json index e28f719297..3ed4c50855 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "L6hmbX1bqdrGd9g2", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json index db9b53d8b5..b4cd47f8e0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ZKLPQIUecFL5GG2P", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json index 4b76aea4a6..5316755879 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "OlI3NRTSS4Vb9ABn", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json index 2224bcf267..8039f0046b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "7AXe36Wqh6uupouS", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json index da948783fc..c3dc666461 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "CQa9Ke6ku0jK7juR", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json index 496f544403..7f5946f4d8 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "KBXExHIJGyOE02sr", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json index a22da32e00..d114ce7ed2 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "QjDN8l4fq8nrEtZS", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index 6206964150..fc4a9099c9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "83M8HRLtzoEyAgdd", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index 3d47382873..fdf74d3fc5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "JWNlbq8qmrVoCjJZ", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 31ebb14e56..2d0850b58f 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "igcuTXhdFT9QEkki", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index fdfe9154a8..bc81c0f940 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "Rci7D9y258kLZl3F", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json index 3106c593b8..1f1d71d6da 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "LClDGDpaf5l4XinA", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json index 5a187f9ed2..c8e0675c3e 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "TbTSNtElyeqwuhI2", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json index df8ac29f1a..f7b91d1384 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "lRSAQSUdgEOvrWOZ", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json index af46a4fc45..6aad4985d6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "sV1XN1EnDMTMC6eZ", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json index 3cee143732..9c133650ab 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "EcvWsnEhikUy64mA", - "filament_id": "OFToBodi", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json index 08a58dc6dc..b29a065b5a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "sru9yX08jyTVNmOz", - "filament_id": "OFW8UdlP", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json index 17ef67f639..38bd8a9438 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "BG8J7FyU5Sn6pmGk", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json index 491e1f4660..59c267751c 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "87bAUrovoG3W1WZK", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json index e5e82a99df..ca9e5f25a4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "v0K7uK7rq54uGbrE", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json index 174bccce8e..92db726d5d 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "OD1YZ5gmmk39jI21", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json index b22eb5c8b5..aaf74e228f 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "QzCAZozPOpv3IOzz", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json index 32e6766cda..93b5abffd9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "fvB8ilSXksTr2ahl", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF.json b/resources/profiles/Qidi/filament/QIDI ABS-GF.json index d7f24f36c2..f07b650913 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "FW543AnWfRtseB8W", - "filament_id": "OFYH00jV", + "filament_id": "OFt3HtlG", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json index a99a9522de..f52455998b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "uskWZUmvzYkVgG0l", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json index cfe8ea1bf0..a9e4dc2f3a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "9laiuOlfZEWIjQ3u", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json index eb4bbfa171..7aba539d32 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "Jh3kEQrLdoGw4WLW", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json index ae910ae9d5..13a7f6576c 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "3tblNpw8VgOlt8VU", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json index 3009f9db4d..2dd3e667ff 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "tssoWES4nOoMEh90", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json index b5aad08653..6f090ca606 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "cgzmqzFT32UhNW5Q", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json index ffac088449..39ac4a7119 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "hxsu8XybSxfesTJf", - "filament_id": "OFQZINrX", + "filament_id": "OFQMsFfF", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json index 8287d0aa7b..15314bf743 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "Do5JLiLyzue036L8", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json index ffb51be952..c0f30133ce 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "hTEx7UgX2wWanON5", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json index 6fb67b1002..ee93a959e9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "shInwFwd1Yh5wUJB", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json index e4980df547..5c51beb27a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "LQoXGFsJRpjCTBKm", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json index aab8dc01c3..0cf39c8240 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "5ONV5cuwTbSMWPMf", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json index 3b809bdd69..e204c4e0c9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "nvfnoGOwhELWArss", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json index 097f336bb3..dbac9e9e47 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "mFWkL9nlS289XAWu", - "filament_id": "OFv2NHLC", + "filament_id": "OFZLtWYs", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json index 3bdd268e3c..078e81b02b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPrwCFLO4P82f5lz", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json index 074ac486c0..e199e58998 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "zku756j16aST1ugn", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json index ee4d8c3eac..8a5be0dcd5 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "EcewU7mP5y2vDwRn", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json index 7388eaf99b..03b5748208 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPCSXfcIngQGTuOz", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json index 1939e7b3e3..64e213bd94 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "hhkWOEdIbQrB4IR0", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json index 98cbe34d45..4578f2d1dc 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "QiV5OREyiy9cb2yA", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json index 7815a1ae6e..7723cdca74 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "yOWilrQPhpvcpWM4", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json index eeceeb147e..39b0b7be70 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "tohpo42HW9BLvVcH", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json index fcf20cb643..0e0f51245b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "iDF5lahr0TRvLF8F", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json index 0aa3d22f7e..71682bf82d 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "p371tUSbBj3WOi5M", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json index 78599691d3..f0dd09ede0 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "4NUwEIv3156HKgev", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json index 0a7af77d4e..525810872c 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "UZg7s2SVhCGDcdkA", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json index 5b956ce37b..dccb6eb9fa 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "x8avbSHn73PayVfR", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json index 15bc124407..059390e58b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "FagCR4bLL1ctSXax", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json index 65d8322f3a..84035c06d3 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "T6U1oaEsA0T3ogMM", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json index cce1651f85..7532ce7249 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "8Xm0AjRaktaNfo4o", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json index 68c1c975f1..29a88f5e45 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "4p12RphItNlfwqwT", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json index be3b32c6ac..8e73a8d4f2 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "346HiaeZvs3BoFUb", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json index 7ddeb6a70f..203856fde8 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "LROz60JZsh6GN7CK", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json index ef9e6a0fe1..9bcccb476a 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "5OR8LnFPipv3h4h8", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json index 57b4dce412..fd6963ecb4 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "wyns97Rn3EVTl0v5", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json index 4f55fa7c84..de52d4fea8 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "zituWsHG83yRR1lM", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json index b18a387305..0c18c54f8e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "2CgI1u8NrWGqxN1C", - "filament_id": "OFmF1xL9", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA.json b/resources/profiles/Qidi/filament/QIDI ASA.json index c69ce99c06..5e0f08db8e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA.json +++ b/resources/profiles/Qidi/filament/QIDI ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "v2LrEujF68PPbrux", - "filament_id": "OFK820gS", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json index 66de4a49b6..e377cff6f9 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "rDi5X7jq3PrXGeSo", - "filament_id": "OFXkwkn6", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json index 4298dd4ea5..6921a3ac20 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "tF0ym95Eo2WVjYrv", - "filament_id": "OFXkwkn6", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json index ebe1f68c1f..6482c628bc 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "bWc3l0t1llvWvFei", - "filament_id": "OFXkwkn6", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json index 7cfd1faafa..3a7512ae98 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Rp1vbScHgwAZAwNT", - "filament_id": "OFXkwkn6", + "filament_id": "OFlN6DL1", "instantiation": "true", "filament_type": [ "UltraPA" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json index 087691ba31..8aae289040 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "Q3votaRX4HuxZl1j", - "filament_id": "OFFIL5pD", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json index 382b51b6f3..6fb1462acb 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "aaAKfscwITCW1cIY", - "filament_id": "OFFIL5pD", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json index ea996d2a71..df40927a88 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "nsFoTEFnTCbVM5VS", - "filament_id": "OFFIL5pD", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF.json b/resources/profiles/Qidi/filament/QIDI PA12-CF.json index f559526129..1c9670ae87 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "tDdg0DlqE4Nle5Xo", - "filament_id": "OFFIL5pD", + "filament_id": "OFn6WpN7", "instantiation": "true", "filament_type": [ "PA12-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json index e54c5f53e9..b4373b79b4 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "wBwy10qTZT9LPkX7", - "filament_id": "OFUkpobY", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json index 8e9dfc5b7d..bb3e66d408 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "a7pcw1dTC3bXjkqQ", - "filament_id": "OFUkpobY", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json index c74c3b9054..c2a557e26f 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "pRBh7YZdJFYv4rED", - "filament_id": "OFUkpobY", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json index bb1296382a..f366e23fc5 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Hws8EIuQkAfaCJGk", - "filament_id": "OFUkpobY", + "filament_id": "OFKgmsqE", "instantiation": "true", "filament_type": [ "PAHT-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json index 3c457fe294..f365f39f31 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "jRV6kS5c49Jf0IBJ", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json index bf0a862d3c..134232f846 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "ic09uwyOjmjgZhCY", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "pressure_advance": [ "0.023" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json index 6f1402814b..3d5b6136ba 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "BGwcBuMu2dcF1nGB", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json index 08081a83b8..4139a0bb49 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "R8msB42rgbyfT0sG", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json index ed19eb439b..3d10846072 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "D1nnJWlyUV0wvZnz", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json index 676d2575b1..2093825bbd 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "A6BaDz936RbO2EW1", - "filament_id": "OFfJoIgg", + "filament_id": "OFo15hcT", "instantiation": "true", "filament_type": [ "PAHT-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json index 60d2eaf677..ffb254d8db 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "VNbCsg7HAvK02shi", - "filament_id": "OFUJw3Lx", + "filament_id": "OFhiJE7Y", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json index e25178269b..41d449361d 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "SBJaM8xcxmruL8Sx", - "filament_id": "OFUJw3Lx", + "filament_id": "OFhiJE7Y", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json index 2dc2cc8a50..ecab417416 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "sPox9vMaLAuoZoP2", - "filament_id": "OF4gzzE4", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json index 55e899aafb..8263cd2cf9 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "6BLOwVDtDPvTqanQ", - "filament_id": "OF4gzzE4", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json index 3c9732f139..a1f15b927a 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "znZt3ns7eHGTA3sX", - "filament_id": "OF4gzzE4", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF.json b/resources/profiles/Qidi/filament/QIDI PET-CF.json index b5a58b236b..e187e4550d 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "X4zXjt7t9eLbESzJ", - "filament_id": "OF4gzzE4", + "filament_id": "OFKfJTwL", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json index a69ba467d9..e8bc3fc708 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "N9zX7M4yR8u5Jqjd", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json index 626098b09e..9a13f2e1c5 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "ATyJ8qPoYVqi7J3I", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json index b212549902..bff7391a88 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "I48bgbR8Rq9DDxmR", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json index 87e6b3b785..56f49905f9 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "hGLyYZ2WBTIFnWnc", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json index 5b372cda6a..39399a1915 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "XC3F1NLZxw1v5Bh3", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF.json b/resources/profiles/Qidi/filament/QIDI PET-GF.json index 78a901cbe1..cef1774ed3 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "nXZR8ykt6JdxvTCd", - "filament_id": "OF3XeEuV", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_type": [ "PET-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json index d66f38f8fd..e1351c1452 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "U8Tz8l63gQMoW1TR", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json index 56206c0269..e2f7f3eae4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "i5DnDzOFFFsd4ear", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json index 101e2d8d16..1c38fa0a64 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "eqwWKpJur2oPzaig", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json index c6c692eb41..6427dfebe7 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "ZwdzHcsJbYBI04Yn", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json index 99f2f1c94e..bd55a96d95 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "wYE4aUeszHw1HJrZ", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json index 21a359c65a..81c9040a53 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "SbHnONYlR2WneAjS", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json index b80993fba6..03e5e299a9 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "EQrNIdbODkHki7pY", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic.json b/resources/profiles/Qidi/filament/QIDI PETG Basic.json index a855dd785d..61f3784f74 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "7uiFWB9SSJvhXKt0", - "filament_id": "OFSSuKRr", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json index b44faa2e7f..262479a3d5 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "17nQzSvxOhC8RqMv", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json index 75adc4d4d3..0668e88303 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "TJja29CvUqlXnhWM", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json index 9e965e2753..d4f9e92e17 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "6rVVNiYVHxsxqk0M", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json index 503cf229aa..5ede468e69 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "MoKlaB96ptTjnoa8", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json index ae7376700e..ceff06761e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "S2CUnrPuZuvBo19K", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json index d4b7e161e1..5ce3194c0c 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "kEUCaWmAo3xZC09A", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json index 066270e96a..a64c3fba4a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "4Tse2Ycxud3qX0aQ", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json index 7097f784d3..991ee37f5a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YK77S7a06UMEQzum", - "filament_id": "OFbS9rjH", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json index 856a8f8b32..cf42e76d85 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wl53hiPD7EGYabrt", - "filament_id": "OFWkCAdc", + "filament_id": "OFVHMFJX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json index ebd4cb47e9..6c1de3e610 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "QUkztHAxlI1gg1xe", - "filament_id": "OFqPp2yL", + "filament_id": "OFe8yBMG", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json index ebfeb1a3a6..e25eac8748 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "vtQb2QBD5ongR7vC", - "filament_id": "OF48G7He", + "filament_id": "OFfr6JDF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json index 31e4a0a837..89415a8dc8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "KHeb2TVAxtw6fbRm", - "filament_id": "OF1Zypyy", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json index 54ad4f4fe1..ad32ffa5d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "22HUqZbuYgOGNRfN", - "filament_id": "OF1Zypyy", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json index 1563a33564..76e0071f42 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "U35fhYtgLMsDXEws", - "filament_id": "OF1Zypyy", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json index fdf754efcc..9229387ad6 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wqzUWt3IiEURFRYL", - "filament_id": "OF1Zypyy", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough.json b/resources/profiles/Qidi/filament/QIDI PETG Tough.json index 81eeb5a641..6a32ec5569 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrZXxBXWXda9boGv", - "filament_id": "OF1Zypyy", + "filament_id": "OFQ40XeN", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json index 4b0c2a6818..719f4cb648 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "I8DmnTJey0BaBBAN", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json index cee560227e..6b5acc46d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "0SbgoW822S43QDoX", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json index 591ef0fedf..92cbd91012 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "rOakaeWOHKz9immU", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json index 5a4d4bd206..581e9b9107 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "RBy7wrl1ZQOdKe8i", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json index 6b32f51dfa..69f9916106 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "Y0jCXY0Ihd6eRlm4", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json index 6dccf959e3..3fca9fa3f8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "9yzSrCFgR00Lx8Ab", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json index 86548c4867..99edc43ac8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "uMHHs1N1fLMq56FF", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json index 60a750367f..1b00da208d 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5k6FnlL39pSbrei2", - "filament_id": "OFjohFkg", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json index dd8dee64fe..1de1163020 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "6EOvD75tBRyvffZF", - "filament_id": "OFPokkKe", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json index 83f504fff5..01483c22f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "ByHCLDgv1HFiA1Bb", - "filament_id": "OFPokkKe", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json index bf3b1e5515..1ff8be3c19 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "NBrZJME5Jt7jwU4W", - "filament_id": "OFPokkKe", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF.json b/resources/profiles/Qidi/filament/QIDI PETG-CF.json index 23bafc4875..e2b5316a51 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "vg3YJMhVaXTMTVLJ", - "filament_id": "OFPokkKe", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json index 802656c1e1..4528379034 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "4kBE3NMTit44g7S1", - "filament_id": "OF0Y5MLd", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json index 582fe9675b..acb59a4b53 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "SzH90qDpFuNpG7Ud", - "filament_id": "OF0Y5MLd", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json index 4ba14fed71..cdb3ab339f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "9XoDC8DHvxvgrRor", - "filament_id": "OF0Y5MLd", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF.json b/resources/profiles/Qidi/filament/QIDI PETG-GF.json index 1b8ada25c9..e9f7252039 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bex5zSdkQThZQi0s", - "filament_id": "OF0Y5MLd", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_type": [ "PETG-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json index 31134c4e2c..8fffe5d1a9 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "hWJXKDKNjeBqYYFk", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json index d7bd4eaf46..9f5cfa548b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "LMfV673NzArmzY44", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json index 9b578ef512..444c03e6ea 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "CyXcxvEKE6gnCRm9", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json index 560db51ea0..3dc9c3c692 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "g7OVjk2xNWWNQo9D", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json index 0d21566770..8e446f1f83 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "EdgtTQVIiPatR9Rt", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json index 2e05ec1a09..198c392cd1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "UTbL94nFN0Cx30p6", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json index f8f7dc88d9..ff845fb81c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "INxFTcta59v2Ukpy", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Basic.json index 2c15693ba5..5456c83805 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "UlF92qvJnOYzq0mw", - "filament_id": "OFN0X7oN", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json index 763557b382..4cce2a6f5c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "vzT3dsogzkZSegM0", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json index d283df5e97..8fc9a37ed1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "rdGuWICdcIZ3fXJb", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json index 56d1503e8a..3acc12ff0a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "9z0BoiNtKlwPoCI4", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json index 9de765cf78..061f7526f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "Txg82qpCGVco78Ih", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json index 774922475b..1d921fecff 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "smHGcdmpWzQy1vW3", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json index 54753b4f40..8eb3335beb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "hGKQJNUIQR0srofE", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json index dd25635276..b5f8c2a48c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "kARyA9JRV7f6Wu3E", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json index c75d42b5a4..d9d99e5029 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "53yYF0gK91AQcKAy", - "filament_id": "OFvN3117", + "filament_id": "OFughwKn", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json index d02d87ea5d..a913878021 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "jpTA43XolFvODs9f", - "filament_id": "OFXNO5Of", + "filament_id": "OFhwiZ50", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json index 45906c1b51..92819732f0 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "MGW0kfdHATaAzL1P", - "filament_id": "OFs1CbB1", + "filament_id": "OFglhKLM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json index c2216596e8..17ecf6e992 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "eQOfNVt6OqCFj0bV", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json index 3bdb9bec64..adc3655403 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "tdL1kK6jLbREgYna", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json index ac6a619cb8..0af8afe9a4 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "zfL5B7iAlx3PbJ1j", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json index 48f74dc047..5b8b3bd442 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "oZZn5VxcrwDJX9fE", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json index 198ef80000..dadceacf8f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "o1lfFStVDZMsdFtr", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json index c143b656d7..fb1959a33d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "HK2fT6TYIIS94MZD", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json index a1b519af08..be4fc7fc47 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "syivJeR1eO6H8wsK", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json index ea13d3583e..e002a51409 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "WC8KpzKwpQcHOStJ", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json index c546a5d00a..a31fa6c9a5 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "RccxOqWrkZljiU5Y", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json index 77dd1451c2..4448e4e24d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "8KV7AfivVZHM6ReD", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json index c2cb8532be..7b9a1d8dc5 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "c5lFoguRq8sBwQ1K", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json index 8b96e4a264..d90e8dbcdb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "95NdLwU31HQJthJE", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json index cdd0173131..d19017a05c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gwmsxvv6cpmVlBDa", - "filament_id": "OFAUDGEQ", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json index 2022fa0518..9a56d85ace 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "oZC1FZ93158dUC0j", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json index 2525fd7186..6f37ee7eeb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Ix7a15ABLu7ykbMb", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json index f03a2919dc..de4e1c62fe 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "NdUtpGmW1Rl2h1Xc", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index 0a90a98c7e..60bf1985b3 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "6obXUws35j7OkE2v", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index f9c18e02f4..c2dd7afbd9 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Z0YSeNJQ3rKDwzsp", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 83daae2d51..5fa9b63ea7 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "BoVtyU2REc0Ayzc4", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index 6b18f61607..ff220ecd05 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "EKWOHWk37Yn1jS5V", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json index af8af08270..03c9200bd0 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yrS51y3N1ooM5ULv", - "filament_id": "OFV4hD1o", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json index 7704c2b53c..5ca5b12e28 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "AaBBTIJSMkxxTPDt", - "filament_id": "OF0z1XpN", + "filament_id": "OFW5FqkL", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json index fea97d7530..d0382ee04f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "hnWx5ZM2ecclYvKA", - "filament_id": "OF0z1XpN", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json index 7191180725..5ea0e37bb8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "bQTjglDv2qjgrUNl", - "filament_id": "OF0z1XpN", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json index 47a2c6edb1..7c90a10971 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zifqr9yiIZKivCNu", - "filament_id": "OF0z1XpN", + "filament_id": "OFW5FqkL", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json index d5bb8ebb62..f1ecaf7790 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JdGWg2Kn3T2L2Ai2", - "filament_id": "OFmKNi3f", + "filament_id": "OFKIQO2W", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json index a65d1591a8..44ad31c806 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "BTqlIKpYFQCC8gJt", - "filament_id": "OF7cv1Ub", + "filament_id": "OFhWrAuP", "instantiation": "true", "pressure_advance": [ "0.01" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json index 768b6ebd1d..f3aa8a98ac 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "0Wr2y2a7rHYbk5fS", - "filament_id": "OF7cv1Ub", + "filament_id": "OFhWrAuP", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json index 32e8cc97be..a3256ff5c8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "xGqY059EYGUevj9G", - "filament_id": "OF7cv1Ub", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json index 1869f432df..146170c42a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "Fh7yuJKSeYs8doRG", - "filament_id": "OF7cv1Ub", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json index fae018e7bc..fa27094b4b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "vs5bFF3r8Kid59u9", - "filament_id": "OF7cv1Ub", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json index f02bce47ae..c56717e27a 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "E30t78jBGCkTztFC", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json index 1eb21b213d..f5ec65de8b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "pYmENqkzOsA9LRLW", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json index 91d99f8f42..82f8ba4ac4 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "7ozi6TNb3ObLpD2v", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json index 8714923f7d..fddc4c3fe2 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "iNx7JrGG0r5s24dV", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json index caaf8696e5..510f62273a 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "tQnGlZa0FL2FpHho", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF.json b/resources/profiles/Qidi/filament/QIDI PPS-CF.json index 9e56326ec1..b6465a1de8 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ODM3oXV1OSv3qTbZ", - "filament_id": "OFAdAYYk", + "filament_id": "OFZOuWrO", "instantiation": "true", "filament_type": [ "PPS-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json index 64884f4a2c..be4cc6b611 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "VgQiY3csDj6bBWSk", - "filament_id": "OFZAkPHG", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json index b0064ded5a..cc450abf5f 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "8hFaMBYD7pnmsZWd", - "filament_id": "OFZAkPHG", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json index c41c4fbaae..9245da8045 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "BcrvpHAPx0FBvOi3", - "filament_id": "OFZAkPHG", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json index 2ab04ac70e..465d3239fd 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "7cd7R9xbuNtLfCHa", - "filament_id": "OFa5cFqE", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_type": [ "PAHT-S" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json index e93e7f7945..d0c8a33368 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Am158VMH3y6FDxON", - "filament_id": "OFWyCd0Y", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_type": [ "PA-S" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json index 210dde4248..21cc9d864e 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "O7oxTgsH9q8jlqzd", - "filament_id": "OFNX5uRT", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json index cdfe19f343..8fd94ae68b 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "FR1LQ5DM0upGQQfs", - "filament_id": "OFNX5uRT", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json index fb7f6a16fe..9c8171b3b1 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "BARooxJKaDXbGd9B", - "filament_id": "OFNX5uRT", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_type": [ "TPU-AERO" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json index fcbec8eaa5..323efc4494 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "GufOfCCphUDzeSo1", - "filament_id": "OFOysPuE", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json index f295b881de..70c0b04f41 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "nY6q9vd6lpaXiQpc", - "filament_id": "OFOysPuE", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json index 0a6c26ed10..4b2637fbcf 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "67agKUajM0pFFhia", - "filament_id": "OFOysPuE", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json index 7eccf9202f..7c3f2912e3 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "RgmbbSJpyUyTXPO9", - "filament_id": "OFKjlAbC", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json index da545ecdb9..22da9225ea 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "aiGnr6fBoUCuwPS5", - "filament_id": "OFKjlAbC", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json index ee25c8c7df..5c89625458 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "G0qM351aUv23WFmP", - "filament_id": "OFKjlAbC", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json index 73f3ad14d1..3c84e2c8e5 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "2AOnWEOsaS2w9Nmr", - "filament_id": "OFKjlAbC", + "filament_id": "OF9PELEb", "instantiation": "true", "filament_type": [ "UltraPA-CF25" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json index c0a87567b7..86ef520191 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "y4aq26TNkKEafwbN", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json index 4c87714064..96650a289e 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "1y0tvUmMkDHYmvWC", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json index 6cbeef948f..900ffdb085 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "n4ywS2KDL59hb8nA", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json index df4bc13bfc..be06885f90 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "AZB82l14yp3vT5sz", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json index f64fa54a11..37805be62a 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "0ZZ9ygXQqnKrrWlL", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json index 9ca1b0488f..22492ba0a8 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NANyXYa8NOQ45Gy2", - "filament_id": "OFnsWQTp", + "filament_id": "OFvdZ2bx", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json index 508cf24436..1ea1175292 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "OVQGLLS3QOoDEPNp", - "filament_id": "OF0TjJ0G", + "filament_id": "OFG4do34", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json index 3b68bf48c5..56af153f3d 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "FKWhpunDSV0iusbz", - "filament_id": "OF0TjJ0G", + "filament_id": "OFG4do34", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json index 216db80864..3095c0a964 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "xTg8UPJXoXdyGccz", - "filament_id": "OF0TjJ0G", + "filament_id": "OFG4do34", "instantiation": "true", "filament_type": [ "ASA-AERO" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json index 2e6b6d9089..b14283c761 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "BNOS859dmAw7GIZp", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json index 11fb8e0fad..7dd600cc44 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "XfuwzYZzTauK0ADk", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json index 05b680a74a..0411a7a366 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "ziWmRGMYOpjc7Hpo", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json index b9e1f23232..39cca2e3bb 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "lLXYczQE4YfPiyDO", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json index 576f73e044..e24fd6df8f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "o62pcRmFnj2mIXhf", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json index 10d886d12e..6b67afc3a6 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "UBWjZCCGQrpgmlpa", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json index 7bb68abc19..f04c392d36 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "qB4eDc7UuoKv5m2U", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json index 6da9142823..0ba51d1d97 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "N3Ca9PN8nDnvhmak", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json index d499ccf490..c614b1b214 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "UkNcVB3bJZqLN3fu", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json index 0c76ed7e66..1a25e73239 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "uK0zY0a6MpcFTZWr", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json index 06b75195a8..fdfdb04794 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ABS", "from": "system", "setting_id": "veNBpzcNYa6TAMry", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Qidi Generic ABS.json index f0ced9aabb..fd469656b7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "wcv9ZpNwvZ0ZcWKw", - "filament_id": "GFB99", + "filament_id": "OFv4VZCd", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json index a2d9584778..b1dc3929af 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "OLkg128vxsk27w03", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json index 961629bae2..c76c3b7bf4 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "pGOT3C5eREsHRylS", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json index 2e5cf7b682..b2e93f6042 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "QRlzPtO4mqLKcdws", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json index e62e501e59..e31053553a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "vLLCDxhI2GR76M1p", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json index 2369d6b6c6..67919c260e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "6pY4I5kAFdSYPOte", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json index 7106465ea0..8205a3e728 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "A85OmyjS63OgZa0V", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json index 03f2d457fa..f7d7fadfa0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "1CBWjstSdMJLJWuv", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json index fbeaa4c1c1..0a0da5a68f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "UIsup1TGWKg0Fq72", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json index c4ae902f99..bf2fbce6c2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "HQupWXd5yKceVrm4", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json index 9cd5b1a694..70f2dca93b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "R6FcpVRhnSp0i8bK", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json index 926830393f..8fa1b77e26 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic ASA", "from": "system", "setting_id": "sE2DGjOmcjRuuh0z", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json index d6aee78840..5c955f6322 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "WTOEo36YTIFcXDaI", - "filament_id": "OFG8vHw8", + "filament_id": "OFsxlLdo", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json index 880a914309..ee5c5b3206 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "aOVEazsct9L3eD2u", - "filament_id": "GFN98", + "filament_id": "OFPy0Ogq", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA.json b/resources/profiles/Qidi/filament/Qidi Generic PA.json index 4e1f0d20ba..640faa445f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "S6S5nM9zZbNCyhya", - "filament_id": "GFN99", + "filament_id": "OFQbqeN7", "instantiation": "true", "filament_type": [ "PA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json index 5b7bbeb84a..80e7acafbe 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "i4Nt0riiDwptxOIe", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json index d7a15d0bc0..774e1deed8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "8mJysYABmQTBlWLw", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json index 1e6313bc34..b869e3db14 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "be2KpgVjm4APQtrt", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json index 0aee03bd65..edcb7070ad 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "9aGpKzNCjXDcfmqr", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json index 5b348523ab..4e018cf7e0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "1BjBpSDoLs6nTHeo", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json index a551323664..33ef6fa1b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "8ptIGtXeMSwVqkVB", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json index 8dcb9f5e4e..bb41002e5a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "IQCYG5yZFPsvTuHY", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json index 297315300a..1eb5bf3ae6 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "TPbG7zlsPowdKEVw", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json index 32c4f84112..ef7aadea0b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "mzsetSq0CzwqbGnP", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json index e3b4be943f..4cc95f36fe 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PC", "from": "system", "setting_id": "wlnm88gEKcNzvx7W", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC.json b/resources/profiles/Qidi/filament/Qidi Generic PC.json index a0a745246e..8d17246464 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "wd4PrqXE2um46ueW", - "filament_id": "GFC99", + "filament_id": "OFK01afJ", "instantiation": "true", "filament_type": [ "PC" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json index f40180cc1f..4dc4f79a35 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "GfDMSO3DjLxfMnUc", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json index b516c65225..8cc579f330 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "SzQLWO8poDxEU0ez", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json index 70b8be014e..f3006cef44 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "yyfoSMlQsvkmUGR5", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json index 69c74caccb..6ba08141b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "ogHITGUcn1r2bHXc", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json index 1a55f38280..6ca659d410 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "CVyv3PHeZaSGmD6E", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json index e820fe24b2..f3a451fa22 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "tNl6q6MadSoFZ3EH", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json index 289b97e7e8..c30b0b9c48 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "1xGw8fYiSf6YzBnk", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json index 2bce0a96b0..19eee209c1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "MMSCic1l0b3e5qe3", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json index 403177c5d7..320522f3b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "KD0ABMKuQunww07p", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json index adaf03f5de..df1d833154 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "ZFkH9oLkRWDVovLu", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json index 2afbdbde97..7a659abfe5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PETG", "from": "system", "setting_id": "ixR5wIrehSmn8Inz", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json index 3a668823ca..41a8a19505 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "kjmXKWCMonhYhy8U", - "filament_id": "GFG98", + "filament_id": "OFfZ0lTS", "instantiation": "true", "temperature_vitrification": [ "75" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG.json b/resources/profiles/Qidi/filament/Qidi Generic PETG.json index 993b9764ba..a46451b4b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "Yk3w834THlnAS3jr", - "filament_id": "GFG99", + "filament_id": "OFKNAhls", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json index 2492a8ea78..c4ee570822 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "6e0DHBzRkQvU0419", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json index 63611956e2..b8dc934bf9 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "eCR3lbTRdkYcMZgl", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_max_volumetric_speed": [ "14" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json index 7aa69c184d..9cb96bf501 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "JSQupeTNYtzE8l6q", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json index 017b42a781..88954db351 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "n4rp1Pooux07hwx1", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json index 46523499ee..8784aa33ac 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "P57Nm7E7KTnHMov0", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json index b10017757b..c66a485d3b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "DWfVtYimjZxqyDzM", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json index e8d6372721..004bd0cda5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "ausfQ4SuKLMuruFb", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json index b1b1b2e9e9..ca0eeb74ba 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "JJmzlY5XOz9eGO8n", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json index 6cd43b3246..ea5c6e5f2a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "EpYu1ME5tSsFYirK", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json index ce7016ad71..9b99d1a90f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "wZ8U1Ga1bQXbd2nN", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json index b9c1fc36d1..d59bd63cc0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "M0JCDyI7icGyqs43", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json index 8b257619c3..a940104863 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "tRztgu06hBi9IxSE", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_max_volumetric_speed": [ "14" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json index 7c9a86cdde..1581dfb47e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "8XzQCGoYi01mIjNY", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json index 4bb1e59e0b..d39b789104 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "hkeictJYR1KDX7kB", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json index f6131e0ca7..eeb8a443ef 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "4YnRWwYLWMODUHXq", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json index 2289deef1e..683f582678 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "bKi57zeQX7mAw7kl", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json index 15336f706a..d4836a5f3d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA", "from": "system", "setting_id": "lscOLQTFf4Y3Ax1f", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json index a8040f89fd..2c20544437 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", "from": "system", "setting_id": "HaE0HFgjT8wysrVT", - "filament_id": "OF5UUaUM", + "filament_id": "OFS8JF3S", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json index 13e4cbccbe..e4c16f3697 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", "from": "system", "setting_id": "vxXEJP3C4k5Zjvsx", - "filament_id": "OF5UUaUM", + "filament_id": "OFS8JF3S", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json index 3e9f248a9d..73b241ea48 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", "from": "system", "setting_id": "VqVyXnU77CZCKsNy", - "filament_id": "OF5UUaUM", + "filament_id": "OFS8JF3S", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json index 2866afeee3..47fe217eb7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", "from": "system", "setting_id": "0504CZkoYLx6NMI0", - "filament_id": "OF5UUaUM", + "filament_id": "OFS8JF3S", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json index 08b2fd475b..9088564556 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA Silk", "from": "system", "setting_id": "lRRlOS4Xd1pGLIEq", - "filament_id": "GFA05", + "filament_id": "OFy4ajVZ", "instantiation": "true", "enable_pressure_advance": "1", "pressure_advance": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json index 0c9b1b3d15..19d91f0f9c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA Silk", "from": "system", "setting_id": "DaBZGfcdheWjNdgr", - "filament_id": "GFA05", + "filament_id": "OFy4ajVZ", "instantiation": "true", "enable_pressure_advance": "1", "pressure_advance": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json index 128da01c7e..8f195626d2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "OATeG6kIIRyViXbn", - "filament_id": "GFA05", + "filament_id": "OFy4ajVZ", "instantiation": "true", "enable_pressure_advance": "1", "filament_type": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json index 689b9db770..5639be330a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "dmKDk6Yb4zQFCWIe", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json index 649a08ca6f..d78cdb3490 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "vwFHzxD2MrRieUIw", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_settings_id": [ "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json index 8b663fde80..cef91d9faa 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "wlXNWvECV8ylNVFF", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json index ad0dd1e2b3..9d0b6428cc 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "gR4NZ8mgTNVxxjhh", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json index 6860035d96..c21f2a31df 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "wCdBhg6B4tQZw7dp", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json index c34e9563a0..29c72ccfe5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "7Bxn8OUT1MJbNvxC", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json index a29f72ac49..b034072cbb 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "miQxMqjI3odS4V1O", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json index 63b6dcfd94..aed12c1545 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "WwUGv09h9thWkzMf", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json index fe0c370b40..4e3df63a29 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "oAIJyTMV5EnXTJDF", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json index 834b6b82cc..4d1ec90cb1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "Ya2viE6yXmdshs75", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json index 17212d9d74..4e5928cf60 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "XUhGdonOGCUI34EH", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json index 39a7b80db0..53d4d543ae 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "yvokLiCctDUmcDCR", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.034" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json index 4d5746ee75..72afba15b9 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "gZxafcPwX1hqI7Dm", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json index eb93efa8f0..4eced792ff 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "j6fJ7L02mVcZ01fO", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json index 38a2600264..a2359aff5e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "KTkq14RsduGBSdMZ", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json index 7593f9724c..e2d3c6b536 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "xiomvJqo2HAwsxT0", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json index dc501ef7e5..f438b1f7c0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic PLA+", "from": "system", "setting_id": "3SemJWSvKeN7OXVy", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+.json index 7302486ec4..9ed1642e89 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA+.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "LNjBixpjLg5i8P1d", - "filament_id": "OFwHPTvy", + "filament_id": "OFsXOMoX", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json index ced518b3a6..b3e70b1a47 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "bJKgxsU0tR1NDtoN", - "filament_id": "GFL98", + "filament_id": "OFQTrLXB", "instantiation": "true", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA.json b/resources/profiles/Qidi/filament/Qidi Generic PLA.json index 2dc3b25203..dd060727ed 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "tmrmjsN8vDKGlNpX", - "filament_id": "GFL99", + "filament_id": "OFu79SUH", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PVA.json b/resources/profiles/Qidi/filament/Qidi Generic PVA.json index 3479b4eb41..23d6c89d40 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PVA.json +++ b/resources/profiles/Qidi/filament/Qidi Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "8450opPMJm6GG5Cq", - "filament_id": "GFS99", + "filament_id": "OFNZYgLA", "instantiation": "true", "filament_type": [ "PVA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json index dff4ce7559..19b01dbf26 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU 95A", "from": "system", "setting_id": "0gGSrFIulk4gPLSp", - "filament_id": "OFN0pBpo", + "filament_id": "OFWukXja", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json index f1add02a4f..ee19db18a9 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU 95A", "from": "system", "setting_id": "5fkE2aGkghsMdZ1W", - "filament_id": "OFN0pBpo", + "filament_id": "OFWukXja", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json index 2c4e76ead5..04e75b3633 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "JWZrlYnOOlGpTEg6", - "filament_id": "OFN0pBpo", + "filament_id": "OFWukXja", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json index 963e845d67..f54208a542 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU", "from": "system", "setting_id": "s0MMbJlTt9Cbh8FQ", - "filament_id": "GFU99", + "filament_id": "OFZsChIG", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json index 9e4acc8225..67d47da272 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi Generic TPU", "from": "system", "setting_id": "KqdGTkLW1x7oZpvj", - "filament_id": "GFU99", + "filament_id": "OFZsChIG", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU.json b/resources/profiles/Qidi/filament/Qidi Generic TPU.json index 8c57a5d28a..bf4d662d62 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU.json +++ b/resources/profiles/Qidi/filament/Qidi Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "qvJXA6V5mxiOguUj", - "filament_id": "GFU99", + "filament_id": "OFZsChIG", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json index f5db4b48f9..4036bc407c 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "0J1PKDesfiwmiXT3", - "filament_id": "OFa6L3Of", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json index 0870f4d962..70aff6d258 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "CYzutFjZzD3tLXwM", - "filament_id": "OFa6L3Of", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json index c036fb4fba..c0aaea29c7 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "YJvwrEo0BwfXMOqo", - "filament_id": "OFa6L3Of", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json index 69b6bcd945..aac6e6f127 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0pBt0usHW6MGQZXl", - "filament_id": "OFa6L3Of", + "filament_id": "OFjD3YTW", "instantiation": "true", "filament_type": [ "PC-ABS-FR" diff --git a/resources/profiles/Qidi/filament/Qidi PLA-CF.json b/resources/profiles/Qidi/filament/Qidi PLA-CF.json index 6db1fa32e2..ce37e1b42c 100644 --- a/resources/profiles/Qidi/filament/Qidi PLA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "oqzsRA4OuCqTWPGM", - "filament_id": "OFqyIUDi", + "filament_id": "OFjoAe0R", "instantiation": "true", "filament_flow_ratio": [ "0.96" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json index 172ba9b6f0..1121d1a200 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "zqfVVsyY5ZMsfqjK", - "filament_id": "OFOW9K96", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json index 89c1974bb1..747a31d4bd 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "fZISb4jbF8jv60dL", - "filament_id": "OFOW9K96", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json index 433f754f7a..ffbdbc9e5f 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "QCS6zw9BRMWWvrCo", - "filament_id": "OFOW9K96", + "filament_id": "OFzAWsca", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json index a8864cd29b..83ec8a1025 100644 --- a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json +++ b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uVa250OrqClMz41k", - "filament_id": "OFXcfTEb", + "filament_id": "OFpBV2Ma", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json index 96478af664..e59aa7077f 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFuidAEg", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json index 8101a994d5..77ba79c419 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OF6EOy1A", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json index 08d299380c..cb14577cc5 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OF2UFmOo", + "filament_id": "OF1dpPrW", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json index 07f0f3291d..281538953a 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFfdxQok", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json index 7e70c198c2..09f7e6a9a5 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFPwi9X0", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json index a7cf5ed949..89c266e681 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFAnyzjN", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json index 3dcf2e340d..844a9f0942 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFiJYDPC", + "filament_id": "OFeelsSM", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json index 49b3c2fe6b..acc9a9f96d 100644 --- a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFuTFxVP", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json index a217128c3d..91cf8d1e35 100644 --- a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFC2FSsV", + "filament_id": "OFc3xdm9", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json index 849aebe38d..603dc9da52 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFidJLn8", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json index 4d6101084d..01d5e352ef 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "OFceJcLf", + "filament_id": "OF5CgdDq", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json index 1c9cf63e43..045e04b689 100644 --- a/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "VNx6rdTN7OIIXVpC", - "filament_id": "Generic ABS @E3NG v1.2S", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json index 329de9f04d..fd22b91c19 100644 --- a/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "LK5M8q58HY86k9aX", - "filament_id": "Generic ASA @E3NG v1.2S", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json index 49cff221dd..d3a2002f8f 100644 --- a/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "fnnja8VlKHWpuOjG", - "filament_id": "Generic PCCF @E3NG v1.2S", + "filament_id": "OFC5f4Ay", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.5 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json index 6bd5e940fe..1fd8ab22ed 100644 --- a/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "IS3z7f5wnjsvv8vC", - "filament_id": "Generic PETG @E3NG v1.2S", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json index 86e514521c..bbf58fe55a 100644 --- a/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "b1tuMVA0Hh27wYQH", - "filament_id": "Generic PLA @E3NG v1.2S", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json index 7c308efd71..f6c8a7ca6e 100644 --- a/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "kaTatels2H01rgeJ", - "filament_id": "Generic TPU @E3NG v1.2S", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.4 nozzle", diff --git a/resources/profiles/RH3D/filament/fdm_filament_abs.json b/resources/profiles/RH3D/filament/fdm_filament_abs.json index f68da37f19..f4ab005733 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_abs.json +++ b/resources/profiles/RH3D/filament/fdm_filament_abs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_abs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH01", "instantiation": "false", "cool_plate_temp": [ "100" diff --git a/resources/profiles/RH3D/filament/fdm_filament_asa.json b/resources/profiles/RH3D/filament/fdm_filament_asa.json index bc71167111..ac03beef13 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_asa.json +++ b/resources/profiles/RH3D/filament/fdm_filament_asa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_asa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH02", "instantiation": "false", "cool_plate_temp": [ "100" diff --git a/resources/profiles/RH3D/filament/fdm_filament_pccf.json b/resources/profiles/RH3D/filament/fdm_filament_pccf.json index b24ccd667e..4296da76c5 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pccf.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pccf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pccf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH06", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/RH3D/filament/fdm_filament_petg.json b/resources/profiles/RH3D/filament/fdm_filament_petg.json index 646a682703..aaa0f62357 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_petg.json +++ b/resources/profiles/RH3D/filament/fdm_filament_petg.json @@ -3,7 +3,6 @@ "name": "fdm_filament_petg", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH03", "instantiation": "false", "cool_plate_temp": [ "70" diff --git a/resources/profiles/RH3D/filament/fdm_filament_pla.json b/resources/profiles/RH3D/filament/fdm_filament_pla.json index ad4f375e9d..873a78461b 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pla.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH04", "instantiation": "false", "cool_plate_temp": [ "40" diff --git a/resources/profiles/RH3D/filament/fdm_filament_tpu.json b/resources/profiles/RH3D/filament/fdm_filament_tpu.json index e55e214275..dcf6f2c68d 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_tpu.json +++ b/resources/profiles/RH3D/filament/fdm_filament_tpu.json @@ -3,7 +3,6 @@ "name": "fdm_filament_tpu", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH05", "instantiation": "false", "cool_plate_temp": [ "30" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json index cd5e2573fa..698d14aba2 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "oE39mwr3PCpeBxZN", - "filament_id": "OFtcTs1o", + "filament_id": "OFtplX8o", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json index 55855d2045..c16d3c7869 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "GGkbwdd79jAXnwuf", - "filament_id": "OFSkBwxf", + "filament_id": "OFgcryz4", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json index ee05b628c1..ce0edbd3b0 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uCKZhFAPvEa2wKnA", - "filament_id": "OFS1ekCg", + "filament_id": "OFFC0VqZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json index ba7316afc7..1595d776b2 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bf3YMNVRSE1i1E8N", - "filament_id": "OFjj9Yiz", + "filament_id": "OFmexHIS", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json index fd155fac44..75be42804b 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "dyG3zLuhX2qe8XJP", - "filament_id": "OF7M9vy4", + "filament_id": "OFiuJSmy", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json index 1dc5ca8791..c220b6dc58 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json +++ b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "wLJ3X05Jnz1EqeOI", - "filament_id": "OFYehFGr", + "filament_id": "OFsNJjpc", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json b/resources/profiles/Ratrig/filament/RatRig Generic ABS.json index b55a944e54..ed76ab9524 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ovLAzbygn6JHqGk0", - "filament_id": "GFB99", + "filament_id": "OFyFRojy", "instantiation": "true", "filament_flow_ratio": [ "0.980" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json b/resources/profiles/Ratrig/filament/RatRig Generic ASA.json index 5cee3f262c..6cc52605f5 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "pmxazFQdx5Oa7Pke", - "filament_id": "GFB98", + "filament_id": "OF48L671", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json index 31c95abede..4fa73713e1 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ZRrsXKPk8pY4yrwd", - "filament_id": "GFN98", + "filament_id": "OFNOxcYl", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA.json b/resources/profiles/Ratrig/filament/RatRig Generic PA.json index 52bfb6ea3c..17a29f6fe5 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "fVGEV9t4w06LODgD", - "filament_id": "GFN99", + "filament_id": "OFEZNNw1", "instantiation": "true", "nozzle_temperature_initial_layer": [ "270" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PC.json b/resources/profiles/Ratrig/filament/RatRig Generic PC.json index 9f9cab8e38..3eab266588 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PC.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "XQ5VEJXu5X0L3Lbn", - "filament_id": "GFC99", + "filament_id": "OFdOWhCa", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json index 754c1e5667..1bc6658211 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SG4Gt87iS1ql3s8S", - "filament_id": "OFzb2BLs", + "filament_id": "OFUrStd6", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json b/resources/profiles/Ratrig/filament/RatRig Generic PETG.json index e64dfbe2f4..ab649e81b3 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "u6diBMbHW2nnKKTm", - "filament_id": "GFG99", + "filament_id": "OFxg7n2G", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json index 2ce8c792e9..e8278cb1ab 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Vwn22LQBChxWysmU", - "filament_id": "GFL98", + "filament_id": "OFlx52rn", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA.json index 91bc503ed8..1e99ec6398 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "IY6qXVoQqhsKuMzP", - "filament_id": "GFL99", + "filament_id": "OFd10YeG", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json b/resources/profiles/Ratrig/filament/RatRig Generic PVA.json index 69fa53a0f5..5035285a77 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "9uJ3Rr6kn9jZZxPO", - "filament_id": "GFS99", + "filament_id": "OFsxRSwr", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json b/resources/profiles/Ratrig/filament/RatRig Generic TPU.json index 3e1594501d..8e69cce08f 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json +++ b/resources/profiles/Ratrig/filament/RatRig Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zWOn983v5s2ujssj", - "filament_id": "GFU99", + "filament_id": "OFB09fpe", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json index 3e5428690b..9308082af6 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AzjpmeEXD6enWOG6", - "filament_id": "OFL7U2MV", + "filament_id": "OFhO5aEJ", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json index 8765e295fc..5f047c9b94 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "o2dP6EwooarikQ8R", - "filament_id": "OFXQX0tr", + "filament_id": "OFe61n6v", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json index 14bc8db764..3863ddcd07 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "e1QXBJqpkhHxXor1", - "filament_id": "OFnRTkEq", + "filament_id": "OF9emAI9", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/SecKit/filament/SecKit Generic ABS.json b/resources/profiles/SecKit/filament/SecKit Generic ABS.json index bac9887f55..ed9be1c69a 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic ABS.json +++ b/resources/profiles/SecKit/filament/SecKit Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "gUrHIkj9GExYWVjh", - "filament_id": "GFB99", + "filament_id": "OFnh79eM", "instantiation": "true", "filament_flow_ratio": [ "0.980" diff --git a/resources/profiles/SecKit/filament/SecKit Generic ASA.json b/resources/profiles/SecKit/filament/SecKit Generic ASA.json index c9fdf2bcfd..6688efd51f 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic ASA.json +++ b/resources/profiles/SecKit/filament/SecKit Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "UwVF6VlxRg0IW9hB", - "filament_id": "GFB98", + "filament_id": "OFrh4bBH", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json b/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json index 569b174f1b..46ad248815 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "0K4eQ2fbaasNdvsP", - "filament_id": "GFN98", + "filament_id": "OFtsVp4v", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA.json b/resources/profiles/SecKit/filament/SecKit Generic PA.json index bf70f90120..38a275a6f2 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PA.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "GlgeZsK719DDjaPo", - "filament_id": "GFN99", + "filament_id": "OF8CXrvm", "instantiation": "true", "nozzle_temperature_initial_layer": [ "270" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PC.json b/resources/profiles/SecKit/filament/SecKit Generic PC.json index c76b39ec41..2244729859 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PC.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "8DHToBaqE7g5VNvN", - "filament_id": "GFC99", + "filament_id": "OF5E5KNA", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PETG.json b/resources/profiles/SecKit/filament/SecKit Generic PETG.json index af3bd585ab..07af417aae 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PETG.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "mx45AbmzGkqYMSsW", - "filament_id": "GFG99", + "filament_id": "OFqS8fzK", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json b/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json index 6767fdc897..5ac681d9d7 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "dPLE2CXMpmdtyiZK", - "filament_id": "GFL98", + "filament_id": "OFF73Bvp", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA.json b/resources/profiles/SecKit/filament/SecKit Generic PLA.json index 62e073f2f2..2c85460be0 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "7cpNIx6GWUp95tLN", - "filament_id": "GFL99", + "filament_id": "OFETFWx7", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PVA.json b/resources/profiles/SecKit/filament/SecKit Generic PVA.json index 6060d85690..67312ed658 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PVA.json +++ b/resources/profiles/SecKit/filament/SecKit Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "jiHEC4uCmPQLINlO", - "filament_id": "GFS99", + "filament_id": "OFyySVby", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/SecKit/filament/SecKit Generic TPU.json b/resources/profiles/SecKit/filament/SecKit Generic TPU.json index 25befa8256..dab7cf4bf5 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic TPU.json +++ b/resources/profiles/SecKit/filament/SecKit Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "b5GGHwZlR5oOx4eH", - "filament_id": "GFU99", + "filament_id": "OFoVZg32", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json index f00df71cfd..bad8b3a774 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "jvmDQqgLy8vboFHw", - "filament_id": "SMCFB001", + "filament_id": "OFR0gODA", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC ABS" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json index 25b2f84b7a..690a870c69 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "xaySfHS4rdZcWsqA", - "filament_id": "SMCFN001", + "filament_id": "OF0b7M1z", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PA-CF" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json index f9cc79bcfd..9792260d36 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "UDoa6miFYGnCLiHc", - "filament_id": "SMCFG002", + "filament_id": "OFaRjiIm", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PETG-CF" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json index a186501902..c58047fa8a 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "wf9uGLhJeqRDZVR7", - "filament_id": "SMCFG001", + "filament_id": "OFxDHUX8", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PETG" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json index 8e9cc3c8d3..9747b4caba 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json @@ -3,7 +3,7 @@ "name": "SeeMeCNC PLA", "from": "System", "setting_id": "hdn5fZars58kvjwQ", - "filament_id": "SMCFL001", + "filament_id": "OFbSChKb", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PLA" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json index 791da98e23..602470e962 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "vsEH0aZOKiLat0hH", - "filament_id": "SMCFU001", + "filament_id": "OFyFyLIp", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC TPU" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json index dfbff7e8fb..693553bdcb 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon ASA-CF08 @Snapmaker U1 base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFL71", + "filament_id": "OF0omtEb", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json index b292f8dd62..1496095361 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF10 @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL56", + "filament_id": "OFvxIS9g", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json index 88aab14bbf..d548075235 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF20 @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json index f14d1abc1f..8aba062d0f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-ESD @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL72", + "filament_id": "OFFZ458u", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json index 75e03cc52a..9245ada222 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json index 271ee8bb5d..5e1cfa7c61 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PPS-GF20 @Snapmaker U1 base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFL73", + "filament_id": "OFeVzkSU", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json index 85f728d3f3..ab0658f139 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json index 2695cbee54..7c23e24034 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json index 5b4b8725c2..2becd66703 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json index 6b14e2b663..932dcd38c6 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json index 9e9936c4a4..c45de639c7 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json index 0e996eb298..80a1604ed2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json index 83ae20eb10..c052908999 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json index 6d178bca81..a4ae1b1114 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json index 28b2984832..d1b0a54bcd 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json index eedf3117a8..57a0598ca8 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json index df011d8dd3..5a6f2849ae 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Satin @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json index daa8a6ffca..53d1ba2886 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json index c2841b4572..396f287684 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json index f0ccd46a65..6a16bf9994 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json index 81d275cfaf..ff8c158df4 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json index 7ac70319b2..3240927af2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json index 228df29a92..046a702928 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite CosPLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL62", + "filament_id": "OFJgijky", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json index 707d5ae54b..6c3fca2635 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OFYGbPHX", "instantiation": "true", "name": "PolyLite Dual PLA @0.2 nozzle", "setting_id": "jhmy4YHi9MuL0DWu", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json index 1a4422472c..b1f4803c1f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OF7SliVn", "instantiation": "true", "name": "PolyLite J1 PLA @0.2 nozzle", "setting_id": "jFlRSxx0KvN3BOUu", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json index 6c5017d0a8..3dc56cc918 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json @@ -1,6 +1,7 @@ { "type": "filament", "from": "system", + "filament_id": "OF7SliVn", "instantiation": "true", "name": "PolyLite J1 PLA", "setting_id": "wcpOTTMyZNPFKyXr", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json index e8fdd834fe..834f7df457 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json index 607649e569..a388fc42b5 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG Translucent @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL74", + "filament_id": "OF0VpkBM", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json index 8f3b508aec..fccff88c67 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json index fcdcf7b003..d531cbeb35 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "from": "system", "instantiation": "false", "name": "PolyLite PLA @base", - "filament_id": "1393866034", + "filament_id": "OF5CgdDq", "inherits": "fdm_filament_pla", "filament_vendor": [ "Polymaker" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json index fc925c8faa..40cb531494 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL63", + "filament_id": "OFvyB0Bz", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json index cc74173c06..f3e2e4ead4 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Glow @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL64", + "filament_id": "OF5umxxT", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json index a472e0bec0..20cb3f7ec5 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Luminous @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL65", + "filament_id": "OFBoSWxb", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json index 5638bec3ff..2b062379bb 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Neon @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL66", + "filament_id": "OFitS8al", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json index c32655ff83..18a295de81 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json index 898460830f..20057a31e0 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL75", + "filament_id": "OFnXwW8l", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json index 17e4d2816a..393a597ea8 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Starlight @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL67", + "filament_id": "OFIxOuOu", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json index 29341f1c59..5931ddef7d 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Translucent @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL68", + "filament_id": "OFy02QHU", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json index bdadb828e9..2c95f4b8ed 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "from": "system", - "filament_id": "OF17cONC", + "filament_id": "OFCccVrQ", "instantiation": "true", "name": "PolyTerra Dual PLA @0.2 nozzle", "setting_id": "UQYgjH1uVxf3d2Nv", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json index 6062914ff0..589d0cd93f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "from": "system", - "filament_id": "OFjZw7k1", + "filament_id": "OF43Raws", "instantiation": "true", "name": "PolyTerra J1 PLA @0.2 nozzle", "setting_id": "mxKHxGmBZzPLS82O", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json index 1c23dc5fb4..3b4ae0320a 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json @@ -1,7 +1,7 @@ { "type": "filament", "from": "system", - "filament_id": "OFjZw7k1", + "filament_id": "OF43Raws", "instantiation": "true", "name": "PolyTerra J1 PLA", "setting_id": "4MZWZX7QPBzxdEGj", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json index 533e781485..82b4b9b839 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json index 141740a499..12242cc1e9 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA Marble @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL69", + "filament_id": "OFxe4rXr", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json index 19bec7d25b..a2f5602139 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA+ @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL70", + "filament_id": "OFEjbwqG", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json index b447be1455..eab6df9c97 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json index a98cb9b670..8b59bc45e9 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json index 2209516118..6feec9c407 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PETG @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL76", + "filament_id": "OF6H51Xx", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json index 5e32b79620..ac2509715a 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PETG Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL77", + "filament_id": "OFtFtiS0", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json index ebd4e5b11a..f072f2eb6f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL78", + "filament_id": "OFelDBgv", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json index a15908f18e..5e0f051c25 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA Pro @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL79", + "filament_id": "OF5oXk4M", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json index 9e2fc3f4e5..bfd8a59e3f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA Pro Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL80", + "filament_id": "OFHknN4v", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json index f2144b7dc4..67754ade09 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker ABS @U1 base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "1682237920", + "filament_id": "OF72YYTd", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json index 6de41e6bcb..1051af1626 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "3811508002", + "filament_id": "OF72YYTd", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json index a0e8b152b7..1ba6c22c9a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker ABS @U1 base", "from": "system", "setting_id": "xszx4XRGrp88OdP8", - "filament_id": "OFgtZjeX", + "filament_id": "OFJrvXth", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json index 012b5c4530..413c14cebb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker ASA @U1 base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "12471727060", + "filament_id": "OF1d7c3A", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json index 667836fe3d..4cc6b0db02 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "2742961008", + "filament_id": "OF1d7c3A", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json index 3f61d2b12e..2629e15051 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "168223792", + "filament_id": "OFJhT2fd", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json index dd1863eac8..6554a924f6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker Dual ABS @base", "from": "system", "setting_id": "YMUFsOzEISsMqCLe", - "filament_id": "OFxxa5yn", + "filament_id": "OFeAxvEt", "instantiation": "true", "compatible_printers": [ "Snapmaker Artisan (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json index ba18223e4a..7f54df76bb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "1247172706", + "filament_id": "OFKUEXPA", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json index ef59734df1..bdb539a065 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual Breakaway @base", "inherits": "fdm_filament_breakaway", "from": "system", - "filament_id": "1207881278", + "filament_id": "OFfmHUkQ", "instantiation": "false", "filament_loading_speed_start": [ "35" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json index eedf48c86d..5390ffe222 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "3493177425", + "filament_id": "OFRooa0F", "instantiation": "false", "hot_plate_temp": [ "100" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json index f222b257bb..84cd37dfe7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "2128577941", + "filament_id": "OFUIfGoh", "instantiation": "false", "overhang_fan_speed": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json index 55a188dfb7..ea5c61eb3b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "2209001062", + "filament_id": "OFBlFMVp", "instantiation": "false", "overhang_fan_speed": [ "25" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json index 37c2b65a6e..5e8a40a8af 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1042511226", + "filament_id": "OF3msXEa", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json index 20b215ab7c..1d8a6fe9ba 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1417031127", + "filament_id": "OFZivHGL", "instantiation": "false", "filament_retraction_length": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json index 68fa882ada..0f880ac980 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "200803790", + "filament_id": "OFyPG8v2", "instantiation": "false", "filament_density": [ "1.26" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json index 1010df744a..6838983e1b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3503790988", + "filament_id": "OFlIsW6f", "instantiation": "false", "filament_density": [ "1.32" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json index d90435974a..7080dddad1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "2029994346", + "filament_id": "OFg3cWVt", "instantiation": "false", "filament_cost": [ "90" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json index ded13a34e3..f2024f8ddf 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1181363872", + "filament_id": "OFyj3m13", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json index 8d6ca390a9..d9b45b5f79 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1702147325", + "filament_id": "OF6ATsCF", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json index eda6fbf638..d9bc0f80ed 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "3104636980", + "filament_id": "OFDKIKyw", "instantiation": "false", "filament_loading_speed_start": [ "35" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json index 98b7787775..a8d87836b0 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "KoZqZ4l1tYZ99JYz", - "filament_id": "OFAbsMuV", + "filament_id": "OFTs8peJ", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json index 3c106e21aa..903ea5c744 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "2971656290", + "filament_id": "OFjkdnyN", "instantiation": "false", "filament_loading_speed_start": [ "35" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json index 2696168f9d..04490520d3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "D1vA7cdI5kghtrxf", - "filament_id": "OF0Ee2jQ", + "filament_id": "OFcBJQcC", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json index 91afed2dab..bf1229454c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "1223824394", + "filament_id": "OFy14TRA", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json index c85da00ba2..3d3e47b701 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker J1 ABS @base", "from": "system", "setting_id": "b1Z94AhG8viXuDsq", - "filament_id": "OFePPmng", + "filament_id": "OF8dCquh", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json index 0ac62b83b6..b72c5795f8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "144877656", + "filament_id": "OFt7SngH", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json index d0b9afe2ce..5acb7bd524 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker J1 Breakaway @base", "inherits": "fdm_filament_breakaway", "from": "system", - "filament_id": "3492897526", + "filament_id": "OFeTATC7", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json index 714a0f1190..4e923b2f76 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "1210173120", + "filament_id": "OFYEtXuk", "instantiation": "false", "overhang_fan_speed": [ "55" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json index 7b2787695b..d3688cbdf7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "1009481135", + "filament_id": "OF8Jl6NT", "instantiation": "false", "overhang_fan_speed": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json index 560a29961d..327ac4d103 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1172603684", + "filament_id": "OFQMTRc8", "instantiation": "false", "overhang_fan_speed": [ "35" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json index cc323fa5b9..b3161b9c9d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "4235401834", + "filament_id": "OFxYB4Sw", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json index 00ffe9de38..f845a62a77 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "377675245", + "filament_id": "OFSa39yP", "instantiation": "false", "filament_retraction_length": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json index 61bafb8477..84e330f35d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "3383257822", + "filament_id": "OFLbdkrE", "instantiation": "false", "filament_density": [ "1.26" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json index 8cefd42ce1..7fcb2d8633 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1192769348", + "filament_id": "OFY3AB7j", "instantiation": "false", "filament_density": [ "1.32" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json index 49d3a3a416..3fe36e7155 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "4012961186", + "filament_id": "OFt0JbR7", "instantiation": "false", "filament_cost": [ "90" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json index 174982b184..331030d8dd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1528786603", + "filament_id": "OFQ1KzO8", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json index 2dd3de3d58..07158641d8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3806593857", + "filament_id": "OFdD5Wbu", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json index a02dac10a5..05f057f0ca 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "4227461134", + "filament_id": "OF6TuVAg", "instantiation": "false", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json index 80c1ff3650..327ba6e6da 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "6N7VB3mKAShGVYL3", - "filament_id": "OFChH9xu", + "filament_id": "OFV5Q7j2", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json index 315a18e3b4..aec03dd322 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "4092268632", + "filament_id": "OFyrnlUn", "instantiation": "false", "nozzle_temperature_initial_layer": [ "240" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json index 81cc01669e..66e5c331ae 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "wdN8j0Zv2bJ29XHA", - "filament_id": "OFKhtNBx", + "filament_id": "OFlBoEfL", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json index 66874b0b2d..62b54feb70 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PA-CF @U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "34931774250", + "filament_id": "OFEmsric", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json index c4c8117679..6918bcb746 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "581236806", + "filament_id": "OFEmsric", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json index 4eb1143082..364cb2a9aa 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker Dual PET @base", "from": "system", "setting_id": "3xJOWlbt2feyRKTV", - "filament_id": "2549587591", + "filament_id": "OFQYaiGg", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json index 6edd0ee2fa..2dae11ec36 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PET @U1 base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "21285779410", + "filament_id": "OFQYaiGg", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json index 9038a8cb4c..f6a9db6835 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "2549587591", + "filament_id": "OFQYaiGg", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json index 5f048f2574..ce0e7c8122 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "22090010620", + "filament_id": "OF4WB37S", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json index 896b4dc154..02a40601f2 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1895495477", + "filament_id": "OF4WB37S", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json index 2d74db595b..47869c9779 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG-CF @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "10425112260", + "filament_id": "OFOwQuZM", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json index afd7cf79ee..1b0f300341 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1355502217", + "filament_id": "OFOwQuZM", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json index 3100986363..5611cb34f3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "14170311270", + "filament_id": "OFlufQpZ", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json index 9d010aa49d..48e1f70d80 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3177068229", + "filament_id": "OFlufQpZ", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json index 43a0726b2c..c305704269 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Eco @U1 base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "2008037900", + "filament_id": "OFpu74Qe", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json index 4b41b7b9e1..e4ce7fc8c3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "1695556157", + "filament_id": "OFpu74Qe", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json index 351390aace..21384a0567 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA Lite @U1 base", "from": "system", - "filament_id": "1417031127011", + "filament_id": "OFEOnBj6", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json index 816b04dcd5..d8b3ebef60 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA Matte @U1 base", "from": "system", - "filament_id": "OFlbn4FY", + "filament_id": "OFF9cgY5", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json index 67c1ebd2e3..9e287f3203 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA @U1 base", "from": "system", "setting_id": "uAhykL5ap1DAKacf", - "filament_id": "OFlbn4FY", + "filament_id": "OFF9cgY5", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json index a530b9208e..9efd7ee33c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Metal @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "20299943460", + "filament_id": "OFtybfNX", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json index 12d65834ea..fb20245193 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Silk @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json index 8c821fdaaa..b35519fdd9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1655727393", + "filament_id": "OFWgFOjn", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json index 12caa4b25c..b87c48cbe5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA SnapSpeed @U1 base", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFwhLMs4", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json index 617a8c23ea..c108468f27 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA-CF @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "17021473250", + "filament_id": "OFhQf8ou", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json index 040e559f38..910a8a7617 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3864371306", + "filament_id": "OFhQf8ou", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json index 91ff319c8e..206f024091 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PVA @U1 base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "31046369800", + "filament_id": "OFyhjiNs", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json index c49e948c02..1edf0516c4 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "1344609062", + "filament_id": "OFyhjiNs", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json index 59f4b2af8e..a4214b6cd0 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "aqE9IR6dFd2MQLXR", - "filament_id": "OF70DKqH", + "filament_id": "OFWTAEjH", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json index 78b8f2484f..c5c42d6126 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker TPU @base", "from": "system", "setting_id": "pFGj8sxkPmk10bP4", - "filament_id": "OF70DKqH", + "filament_id": "OFWTAEjH", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json index a6d8c41b5d..ca61b9fc3a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker TPU 95A @U1 base", "from": "system", - "filament_id": "297165629001", + "filament_id": "OFKo87c6", "instantiation": "false", "overhang_fan_threshold": [ "95%" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json index 6e9efb2034..6ad1de856e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker TPU @U1 base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "29716562900", + "filament_id": "OF65InrS", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json index 8208dc980c..85a66a5008 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "1480063856", + "filament_id": "OF65InrS", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json index 96252c2de1..0aca011924 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "5AXIg8WCdcd74S5v", - "filament_id": "OFtet8ui", + "filament_id": "OFgyPlwU", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)", diff --git a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json index 9fe50fc1b6..ac456a82ee 100644 --- a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OGFL96", + "filament_id": "OFesA6rF", "setting_id": "WAHQZmwHoS4WjoTx", "name": "Generic PLA Silk @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json index 5926d0155d..f56ca13525 100644 --- a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OF22AxCm", + "filament_id": "OF6H51Xx", "setting_id": "JBFKMaFtd7kO8Ksq", "name": "Polymaker PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json index 384be40590..1ff8f57fac 100644 --- a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OGFSNL08", + "filament_id": "OF2GCW1l", "setting_id": "x68SPQCqVacBSGd5", "name": "SUNLU PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json index b904edd7d4..025dee3fe5 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "okqqqm0P8ehlQuDY", - "filament_id": "OFtemzzw", + "filament_id": "OF67EdL5", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json index 82969be3fb..41066fb061 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "5mtng0PM8CMglpD7", - "filament_id": "OFGFZhWu", + "filament_id": "OFe7Sx5B", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json index 317c30a966..b3780567d1 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "kgtcANsbfwSbdgOh", - "filament_id": "OFic2uNr", + "filament_id": "OFTvvox9", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json index c4c0397846..861b80c567 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ERN0ozxmPhIMze0i", - "filament_id": "OFglpvEE", + "filament_id": "OFJfv07m", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json index 9a2b1e5cae..e38812d1a4 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "Me1iSJmocW35ClmN", - "filament_id": "OF5Bmdtg", + "filament_id": "OFCEA7Nt", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json index 87f012c539..4b1ab35b1c 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "ZrAm6Nm4FI7p4PgC", - "filament_id": "OFgMGSpF", + "filament_id": "OFl7nOAf", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json index 806b3a35fd..a0a3190eaf 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "YEEOGJYm4Z8W4vGV", - "filament_id": "OFSoZBK2", + "filament_id": "OFNZjrLo", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json index f19fb592b9..fbacdaf2da 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "oNucKLcIdxwBPpUN", - "filament_id": "OFsmPFwh", + "filament_id": "OFkWaWRo", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json b/resources/profiles/Sovol/filament/Sovol SV07 PLA.json index 47fe781fcc..b1b13b7e79 100644 --- a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV07 PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "IHicmU5gzVf6G4F1", - "filament_id": "GFL99", + "filament_id": "OFaFNP2U", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json index f35a2372a1..f29c3f274d 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "nq4vvrWqKjWKELEz", - "filament_id": "OFKH15Hd", + "filament_id": "OF016CJw", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json index 81e3e2db41..54718800a9 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "CWd7KULbXvJeTTEy", - "filament_id": "OFIl3ar9", + "filament_id": "OFRi7v0b", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json index b013826043..dda11511e0 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "qmnuve3FgzrXgjPA", - "filament_id": "OFcsHCy4", + "filament_id": "OFcJ7AKd", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json index cb32bceb71..9e76203099 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "nnU0222BS0F1c5ki", - "filament_id": "OFcsHCy4", + "filament_id": "OFcJ7AKd", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json index f93c734acc..404675d8f4 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json +++ b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "tpBbCQhcSJsBesnG", - "filament_id": "OFY1U4uM", + "filament_id": "OFyCToOV", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero ABS.json b/resources/profiles/Sovol/filament/Sovol Zero ABS.json index 16fabab6e8..8ae60c192f 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero ABS.json +++ b/resources/profiles/Sovol/filament/Sovol Zero ABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "9pI7op6U4azpfNfb", - "filament_id": "OFgNzLVh", + "filament_id": "OFNX8GI1", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PC.json b/resources/profiles/Sovol/filament/Sovol Zero PC.json index 9c82b6a60b..87d4b2c924 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PC.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PC.json @@ -4,7 +4,7 @@ "inherits": "Generic PC @System", "from": "system", "setting_id": "vuuZXnlrMgUKtSI0", - "filament_id": "OFtwA91m", + "filament_id": "OFcdqaWI", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json index 569c670407..ce68719ba9 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "AfxHmpdOkMDJa2fk", - "filament_id": "OFk6T5YH", + "filament_id": "OFymnal9", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG.json b/resources/profiles/Sovol/filament/Sovol Zero PETG.json index db83f4d2e4..37f603579b 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PETG.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "75OJvkXlmbcaHQfW", - "filament_id": "OFjurQ3I", + "filament_id": "OFHTVfaU", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json index b3d235da7d..6dfb630e0a 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "i9wDnSEIrOBPbOZl", - "filament_id": "OFtL05hE", + "filament_id": "OFzB4uOs", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json index 93c2382024..990a2b3edb 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "ZVvOaMwZ7noevsYf", - "filament_id": "OF5J2axC", + "filament_id": "OF7VJMYM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json index 2db612ff8f..97e4050b8c 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "XxEJBNFLRltR2Xwn", - "filament_id": "OFP4poIv", + "filament_id": "OFAO9A7J", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json index d86d68212d..24fab028e8 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "QowhGzqSwGQoAp1a", - "filament_id": "OF2tvNYA", + "filament_id": "OFJVFpJz", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero TPU.json b/resources/profiles/Sovol/filament/Sovol Zero TPU.json index d2f9247ada..bd4596b303 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero TPU.json +++ b/resources/profiles/Sovol/filament/Sovol Zero TPU.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "iZHXx0RyRO096L0z", - "filament_id": "OFO5R9KJ", + "filament_id": "OF6zAVFj", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime ABS.json b/resources/profiles/Tiertime/filament/Tiertime ABS.json index 58b1849335..4ff6b5c8fd 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ABS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ABS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00", + "filament_id": "OFNQKF0M", "setting_id": "uAtyf2jCQEcv7D2r", "name": "Tiertime ABS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json index 1d716a957d..7014efe177 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFNQKF0M", "setting_id": "x1XBGyOHIgrD7PVs", "name": "Tiertime ABS@300HS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime ASA.json b/resources/profiles/Tiertime/filament/Tiertime ASA.json index 397f8084a9..2550aa53ae 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ASA.json +++ b/resources/profiles/Tiertime/filament/Tiertime ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "6rwe3zrsvad1oq4C", - "filament_id": "GFB01", + "filament_id": "OFdrYBmI", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json index 165590114d..1f465c4dda 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "FreBeBZ1r1VF4ouQ", - "filament_id": "GFB01_01", + "filament_id": "OFdrYBmI", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json index 4319a9cd58..32cd14a523 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ImJ3Urgk3VVtwceI", - "filament_id": "GFB99", + "filament_id": "OFNLXV8X", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json index 6e3d41f5fc..efd49d6b20 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "tCw1f7MxFjxPr7Ci", - "filament_id": "GFB99_01", + "filament_id": "OFNLXV8X", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json b/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json index 4280c28c4d..614b3b3c19 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "T1AzUXSewNk5Bj3x", - "filament_id": "GFB98", + "filament_id": "OFUaVAdj", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json index 062cf8e345..4962cc3046 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "7C5PjCg1vmTQFXWO", - "filament_id": "GFB98_01", + "filament_id": "OFUaVAdj", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json index a02176c07d..76918d2c91 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_bvoh", "from": "system", "setting_id": "dhrpnirMnet0hJZl", - "filament_id": "GFS97", + "filament_id": "OFGDaEHO", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json index abe8d42643..124749396e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_bvoh", "from": "system", "setting_id": "xfFXVyGfmXiu508N", - "filament_id": "GFS97_01", + "filament_id": "OFGDaEHO", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json b/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json index e0683c378d..6d9851fb73 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_eva", "from": "system", "setting_id": "ev5w69eBuTCYXB2d", - "filament_id": "GFR99", + "filament_id": "OFrnJJEa", "instantiation": "true", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json index 14ea1b88d1..ff107a65fb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_eva", "from": "system", "setting_id": "pXuh92Zf1zPiaDXg", - "filament_id": "GFR99_01", + "filament_id": "OFrnJJEa", "instantiation": "true", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json index 213181630b..54e9d60fbd 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_hips", "from": "system", "setting_id": "sFY2AyXFzAFuj6sv", - "filament_id": "GFS98", + "filament_id": "OFW9uIkE", "instantiation": "true", "filament_is_support": [ "1" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json index 234412a67d..932b1e3239 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_hips", "from": "system", "setting_id": "9epHDviPNHRB5bPD", - "filament_id": "GFS98_01", + "filament_id": "OFW9uIkE", "instantiation": "true", "filament_is_support": [ "1" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json index 4e04b050cf..22b8edb633 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic PA-CF", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN98", + "filament_id": "OFHa3RZT", "setting_id": "DOWYicvaXaTMfzBU", "instantiation": "true", "fan_cooling_layer_time": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json index bd618a1f83..b49c63ab92 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic PA-CF@300HS", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN98_02", + "filament_id": "OFHa3RZT", "setting_id": "nRxvUKo1YXE8daoX", "instantiation": "true", "fan_cooling_layer_time": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA.json index b5fbdf1bcc..4f9e45d05e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PA.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic PA", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99", + "filament_id": "OFQswlnF", "setting_id": "DmP33sDwKcBDRmDK", "instantiation": "true", "chamber_temperatures": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json index 131ea71f3c..7ef4871120 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic PA@300HS", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99_01", + "filament_id": "OFQswlnF", "setting_id": "ERn1WYMiSjs6a82N", "instantiation": "true", "chamber_temperatures": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json b/resources/profiles/Tiertime/filament/Tiertime Generic PC.json index 4044d45fe3..264fe0fc03 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "5wzlA0sFj2xElixU", - "filament_id": "GFC99", + "filament_id": "OFN7aNHe", "instantiation": "true", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json index 6b919af688..86c506902c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "i2ShskYbiq61UJ1B", - "filament_id": "GFC99_01", + "filament_id": "OFN7aNHe", "instantiation": "true", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json index 2e4dc2d036..49c71cc115 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pctg", "from": "system", "setting_id": "UDqS8gFlHvPIysFk", - "filament_id": "GFG97", + "filament_id": "OFTKFAZ4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json index 10b87ef227..86d034aa24 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pctg", "from": "system", "setting_id": "2Qbbi90zWBoo9dBl", - "filament_id": "GFG97-01", + "filament_id": "OFTKFAZ4", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json index 1cd9a569e6..dc20a657b0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "jzT1pay155tbaY9M", - "filament_id": "GFP98", + "filament_id": "OFkUaDnU", "instantiation": "true", "filament_cost": [ "65.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json index 81b096e4b2..94686b9139 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "5ChSjqNjRn8QArJP", - "filament_id": "GFP98_01", + "filament_id": "OFkUaDnU", "instantiation": "true", "filament_cost": [ "65.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE.json index 16b9244f12..0c9504212c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PE.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "bYC8MPsm3VIgwaSt", - "filament_id": "GFP99", + "filament_id": "OFKuTr12", "instantiation": "true", "filament_cost": [ "40.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json index 7ebf4377fe..4e6aab9e87 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "ZbU3Ov0P5wtbudQ0", - "filament_id": "GFP99_01", + "filament_id": "OFKuTr12", "instantiation": "true", "filament_cost": [ "40.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json index c3907360a9..32ab191cc2 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "zA6nHgNkxBxGKw0w", - "filament_id": "GFG98", + "filament_id": "OFWadebJ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json index 04f803a53e..ed4c4d9347 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "jBUy8xUDg53e51kz", - "filament_id": "GFG98_01", + "filament_id": "OFWadebJ", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json index e261373c3d..6d15c90d59 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "UevLlG43knAdcET2", - "filament_id": "GFG99", + "filament_id": "OF1uR1t2", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json index cfec6ee335..56157be9e7 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ZZmmVicb1p0wb5r1", - "filament_id": "GFG99_01", + "filament_id": "OF1uR1t2", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json index f2be140f37..d924c5d28b 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pha", "from": "system", "setting_id": "tFuE7IEbeGEhCNnz", - "filament_id": "GFR98", + "filament_id": "OFxvKuYW", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json index e6e0475805..7c2deb0b12 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pha", "from": "system", "setting_id": "de5eveMr3bI3OCtF", - "filament_id": "GFR98_01", + "filament_id": "OFxvKuYW", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json index a77cb529ea..bda1527d04 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Ms3c6DePE0cjBeQ4", - "filament_id": "GFL95", + "filament_id": "OFodPDxO", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json index d36f12715b..5814210aee 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "e0vVCCT6Tw4061is", - "filament_id": "GFL95_01", + "filament_id": "OFodPDxO", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json index f2ba37e0eb..88b0e6a700 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RgKM4PxtAasidTe5", - "filament_id": "GFL96", + "filament_id": "OF0GIkJm", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json index b1911a7e9f..b4fafb3019 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yV358AeiALOn6xVr", - "filament_id": "GFL96_01", + "filament_id": "OF0GIkJm", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json index a78f6e0438..ff1c8b14ee 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "maM4lXic0F10faAb", - "filament_id": "GFL98", + "filament_id": "OFgVJhVt", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json index 3cc2f855f1..4cb7802847 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "3QSGv6pAz9ihFVuD", - "filament_id": "GFL98_01", + "filament_id": "OFgVJhVt", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json index 768f0e293a..ea77ef41e3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "q9W1goEbw6UUrNY3", - "filament_id": "GFL99", + "filament_id": "OFuSwKgm", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json index 6ba33d8004..3fe56ea2e0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jTSVVOuHuQqETOpe", - "filament_id": "GFL99_01", + "filament_id": "OFuSwKgm", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json index 0c1ae8cae1..22cd19292d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "O5VvyfY5CV6IfMPQ", - "filament_id": "GFP96", + "filament_id": "OFMTBcnz", "instantiation": "true", "filament_cost": [ "77.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json index 5874361c2a..15c4591f98 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "3TZu7e58qrjP4F4u", - "filament_id": "GFP96_01", + "filament_id": "OFMTBcnz", "instantiation": "true", "filament_cost": [ "77.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json index bde8189b36..44557aed47 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "ZQnzXtnTMVMVMNaS", - "filament_id": "GFP95", + "filament_id": "OFkYkQGO", "instantiation": "true", "filament_cost": [ "59.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json index b8a677999a..bac285fef0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "WKwUmsEhhYFyGAP5", - "filament_id": "GFP95_01", + "filament_id": "OFkYkQGO", "instantiation": "true", "filament_cost": [ "59.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP.json index 895dd36cee..bef2a0ee16 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "3ZYx92CbNBiocyXx", - "filament_id": "GFP97", + "filament_id": "OF3s929u", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json index 473e1b6643..b908fe1011 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "lx9zoOh3ALDlLasf", - "filament_id": "GFP97_01", + "filament_id": "OF3s929u", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json index 9dba1d2e8a..924f324eb4 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "2zYiuKYR7bESaCnd", - "filament_id": "GFN97", + "filament_id": "OFSPdsuW", "instantiation": "true", "filament_type": [ "PPA-CF" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json index 866d9981bb..918b4cf1a8 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "wLH8aGr4ZNiHazwA", - "filament_id": "GFN97_01", + "filament_id": "OFSPdsuW", "instantiation": "true", "filament_type": [ "PPA-CF" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json index 88d413d976..e84a1c4bb9 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "hYkZEmk1B8X9EcF8", - "filament_id": "GFN96", + "filament_id": "OFptvi3F", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json index 120bbce3c1..dbc3c9ebf3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "1zAhSxsuv3wxgBtQ", - "filament_id": "GFN96_01", + "filament_id": "OFptvi3F", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json index d55bfb7557..8a8485843c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pps", "from": "system", "setting_id": "E0gbADj0OHkGSOxt", - "filament_id": "GFT98", + "filament_id": "OFGzUNbm", "instantiation": "true", "fan_max_speed": [ "30" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json index b4feee2599..cd3e802975 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pps", "from": "system", "setting_id": "6UHEejfZvhQGA4vB", - "filament_id": "GFT98_01", + "filament_id": "OFGzUNbm", "instantiation": "true", "fan_max_speed": [ "30" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json index 8fcf9ee41a..77fe993cdb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pps", "from": "system", "setting_id": "2L1eOtxSeCJxW3RV", - "filament_id": "GFT97", + "filament_id": "OFvPomQf", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json index 853646bf08..047117502e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pps", "from": "system", "setting_id": "5TZhbLxtLq6kSJJY", - "filament_id": "GFT97_01", + "filament_id": "OFvPomQf", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json index a77791002e..db73f4b947 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "bTkxwDd1TU8TUqVC", - "filament_id": "GFS99", + "filament_id": "OFMZAoqa", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json index f075f81a59..d1a5b62d7d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "BQ6G75c9eLQQ7ULg", - "filament_id": "GFS99_01", + "filament_id": "OFMZAoqa", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json index 359885ab4a..ab91c462d0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "tHfCQJdD7qiIF4uT", - "filament_id": "OFlxnxDx", + "filament_id": "OFM87w9T", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json index 9fed905ccd..df8a4d7cbe 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "neqjohDEPRiOa6ut", - "filament_id": "OFlxnxDx", + "filament_id": "OFM87w9T", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json b/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json index 8a9e07a22f..0ecd0d9636 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic TPU", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99", + "filament_id": "OFCVUEaV", "setting_id": "Viy3kUE0cTV2rMiC", "instantiation": "true", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json index 456acc8a4e..d1c8e5ba35 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json @@ -3,7 +3,7 @@ "name": "Tiertime Generic TPU@300HS", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99_01", + "filament_id": "OFCVUEaV", "setting_id": "wgOtq6REuUQmNe5R", "instantiation": "true", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json b/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json index 8c165a210d..310c4294fb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "HuOPyruYQNhxsjYW", - "filament_id": "GFN05", + "filament_id": "OFe8tuNb", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json index 9d84f62383..bdd8281c05 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "XniESd6DwW58wgYU", - "filament_id": "GFN05_01", + "filament_id": "OFe8tuNb", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime PC.json b/resources/profiles/Tiertime/filament/Tiertime PC.json index 4d0ce8c9fa..9b83a065b1 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PC.json +++ b/resources/profiles/Tiertime/filament/Tiertime PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "ImTbFOOUrv2pQbCu", - "filament_id": "GFC00", + "filament_id": "OFdXVjGZ", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json index fb3f03b63d..afefd7e394 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "nktjGLDy0Gjl0dO8", - "filament_id": "GFC00_01", + "filament_id": "OFdXVjGZ", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime PET-CF.json b/resources/profiles/Tiertime/filament/Tiertime PET-CF.json index 60a91bd937..c55a9a60c0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PET-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "WjpnXYqwyoeHdaC9", - "filament_id": "GFT01", + "filament_id": "OFCnywiC", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json index d844b97bf4..bbe3ec170d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "kHWlt3zl53mXcEGp", - "filament_id": "GFT01_01", + "filament_id": "OFCnywiC", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PETG.json b/resources/profiles/Tiertime/filament/Tiertime PETG.json index e4b5313393..9ec377f8f8 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PETG.json +++ b/resources/profiles/Tiertime/filament/Tiertime PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "lw6WCNgazXfTwS4z", - "filament_id": "GFG00", + "filament_id": "OFObyktP", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json index 822d39d12d..b44cc3ce30 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bSujcskPkCuGi3At", - "filament_id": "GFG00_01", + "filament_id": "OFObyktP", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json b/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json index 86a1895caa..b60dab442f 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AN8Ptxqrd3fAfsAk", - "filament_id": "GFA50", + "filament_id": "OF7OqDp3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json index 9a2dccc6cb..40558619cb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "S7OJaqjGSnkaPyDQ", - "filament_id": "GFA50_01", + "filament_id": "OF7OqDp3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA.json b/resources/profiles/Tiertime/filament/Tiertime PLA.json index 22729a9776..d0a030184a 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00", + "filament_id": "OFNGTH3w", "setting_id": "dlXQZNrJfvkJ3kWs", "name": "Tiertime PLA", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json index b12f813f3e..48073d5c76 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OFNGTH3w", "setting_id": "bqWrzfz6CXHohbpL", "name": "Tiertime PLA@300HS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime PVA.json b/resources/profiles/Tiertime/filament/Tiertime PVA.json index 7adba03ec3..689f015f5a 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PVA.json +++ b/resources/profiles/Tiertime/filament/Tiertime PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "9Z1HdjB3dx1Rlyng", - "filament_id": "GFS04", + "filament_id": "OFyreocX", "instantiation": "true", "filament_cost": [ "79.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json index 722e3efd60..988cb744db 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1CwFwvd5cNbZwY95", - "filament_id": "GFS04_01", + "filament_id": "OFyreocX", "instantiation": "true", "filament_cost": [ "79.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json b/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json index 6feff32639..c328ac64f3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json +++ b/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "aeeRALQ6vydj2vbR", - "filament_id": "GFU01", + "filament_id": "OFLOf6Sc", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json b/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json index f4340bfed3..d95903d89d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "6ee2z5F26fqKny4n", - "filament_id": "GFU01_01", + "filament_id": "OFLOf6Sc", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json b/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json index b430674cd7..72564df29b 100644 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json +++ b/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "YqQSUrG195dCz67L", - "filament_id": "GFU99", + "filament_id": "OFdHsxB4", "instantiation": "true", "compatible_printers": [ "TwoTrees SK1 0.4 nozzle" diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json b/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json index b713bc31f4..1a7cef302e 100644 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json +++ b/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "k7bLC5us9mGJzznW", - "filament_id": "GFL100", + "filament_id": "OFBpcB0a", "instantiation": "true", "compatible_printers": [ "TwoTrees SK1 0.4 nozzle" diff --git a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json index f780cd48c2..6b67c28f15 100644 --- a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json +++ b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFHDaMut", + "filament_id": "OFcKtw8W", "setting_id": "wuZ0EvlbcJ8GxajY", "name": "PA6 CF20 (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PETG ESD (Performance).json b/resources/profiles/Volumic/filament/PETG ESD (Performance).json index c50871b2a5..06814b64ad 100644 --- a/resources/profiles/Volumic/filament/PETG ESD (Performance).json +++ b/resources/profiles/Volumic/filament/PETG ESD (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFO3IOWM", + "filament_id": "OFiwEbze", "setting_id": "May8rNEMOOs1qtae", "name": "PETG ESD (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json index 19d79c2174..4708f912c4 100644 --- a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json +++ b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFBRSZom", + "filament_id": "OFEZpel7", "setting_id": "HE0yILdkhbiXbH1j", "name": "PPS Carbone (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json index 8b48f0995c..865f03155e 100644 --- a/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFyQwdaM", "setting_id": "466ggy6ydgaZOrSx", "name": "Volumic ABS Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ABS Ultra.json b/resources/profiles/Volumic/filament/Volumic ABS Ultra.json index cab927e925..f538936b5a 100644 --- a/resources/profiles/Volumic/filament/Volumic ABS Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic ABS Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFyUJI3q", "setting_id": "omHiTINFPThooUqk", "name": "Volumic ABS Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json index 212d36d0d7..519387adf5 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFLhOFQk", + "filament_id": "OFU7CKZt", "setting_id": "uE5jxeOBISvO5o7L", "name": "Volumic ASA Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json index 638b2ce47c..2225125c3c 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OF7f0eUZ", + "filament_id": "OF2EB9Iz", "setting_id": "LOAp2zgQWqg1lQQ4", "name": "Volumic ASA Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json index 54049ab145..54d0f89bb3 100644 --- a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU99", + "filament_id": "OFUH1aee", "setting_id": "k5V3bjZrtr7t8zl0", "name": "Volumic FLEX93 Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json index 16f143b405..84ccdc6d19 100644 --- a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU99", + "filament_id": "OFuxH0Uz", "setting_id": "DXZ4Gp5XP5VCJTXY", "name": "Volumic FLEX93 Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json index 44ab540de1..8a4b44f59b 100644 --- a/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFi90KlM", "setting_id": "RC5gFyIejXWDJuHH", "name": "Volumic NYLON Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json b/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json index 9b7cbd0602..95c5f81a6a 100644 --- a/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFWa0NiB", "setting_id": "AL4xDgN8EIYb3UrL", "name": "Volumic NYLON Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PC Performance.json b/resources/profiles/Volumic/filament/Volumic PC Performance.json index d239419ccf..d454de5688 100644 --- a/resources/profiles/Volumic/filament/Volumic PC Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PC Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFC99", + "filament_id": "OFgSbX7E", "setting_id": "ht6Ar3ilCkPT7geN", "name": "Volumic PC (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PC.json b/resources/profiles/Volumic/filament/Volumic PC.json index 5ffe6cd415..12ea420585 100644 --- a/resources/profiles/Volumic/filament/Volumic PC.json +++ b/resources/profiles/Volumic/filament/Volumic PC.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFC99", + "filament_id": "OFaHjk1V", "setting_id": "3pUnwXise3J77Qmc", "name": "Volumic PC", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json index d45447dbe7..5e20cb2922 100644 --- a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json +++ b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFxfCy9m", + "filament_id": "OFTdauIq", "setting_id": "NdegYSDVrQ4Rawtp", "name": "Volumic PCTG Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json index 3a3d240a4e..6b98fc49d2 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFsD974q", "setting_id": "bNcC5kGe9jOm7Ltu", "name": "Volumic PETG Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json index adf3a8fc45..91827ebe80 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG98", + "filament_id": "OFY0F5qA", "setting_id": "IIFtCkVvHoLtxPxj", "name": "Volumic PETG Ultra carbone (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json index 4ee0a68464..137bad9d53 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG98", + "filament_id": "OFu08yGN", "setting_id": "nOKT0adoQi3O7Tge", "name": "Volumic PETG Ultra carbone", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra.json index 25162f2d94..8db07d0bab 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFG0kOKX", "setting_id": "CuBXW7SqUeJOcxPP", "name": "Volumic PETG Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json index 741d2eab82..2a02fe7c88 100644 --- a/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF3dJf4E", "setting_id": "8J2ZIz8ByFNEB9PC", "name": "Volumic PLA Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PLA Ultra.json b/resources/profiles/Volumic/filament/Volumic PLA Ultra.json index 67d33d3b52..2e5f762d39 100644 --- a/resources/profiles/Volumic/filament/Volumic PLA Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PLA Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFXuGxvQ", "setting_id": "3BeQ60i4cOs3BfZn", "name": "Volumic PLA Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json index 401033bc96..3fafb8aac0 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFPGelMX", + "filament_id": "OFNSYu5h", "setting_id": "nsiOJ8ExySR1RksQ", "name": "Volumic PP Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra.json b/resources/profiles/Volumic/filament/Volumic PP Ultra.json index a79589876f..eba78219bc 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFAGqTQG", + "filament_id": "OFsFo7ms", "setting_id": "UA91pv54dzbBRkFe", "name": "Volumic PP Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PVA Performance.json b/resources/profiles/Volumic/filament/Volumic PVA Performance.json index 92a94ac5c1..199d33ed62 100644 --- a/resources/profiles/Volumic/filament/Volumic PVA Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PVA Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFS99", + "filament_id": "OFRkjhxK", "setting_id": "L9ZTGhwNpVWT6E5j", "name": "Volumic PVA-BVOH (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PVA.json b/resources/profiles/Volumic/filament/Volumic PVA.json index 5d9892417c..24c28a89a5 100644 --- a/resources/profiles/Volumic/filament/Volumic PVA.json +++ b/resources/profiles/Volumic/filament/Volumic PVA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFS99", + "filament_id": "OFGdP6Na", "setting_id": "rw4bB5gYM6YF8v9e", "name": "Volumic PVA", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json index 025e1ada57..90562ebba2 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFPeGtB1", + "filament_id": "OFkGp50Y", "setting_id": "rxVkBvMZYgHOoFW6", "name": "Volumic UNIVERSAL Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json index b061d498c2..ee50a25ffd 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "OFIzguhB", + "filament_id": "OFpumhCM", "setting_id": "6iOFERN4x6xBbtuT", "name": "Volumic UNIVERSAL Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/desactive.json b/resources/profiles/Volumic/filament/desactive.json index 6485f044f0..1c490c957e 100644 --- a/resources/profiles/Volumic/filament/desactive.json +++ b/resources/profiles/Volumic/filament/desactive.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "DFL99", + "filament_id": "OFCuaCer", "setting_id": "Sphn4hoDMpH2uy86", "name": "Désactivé", "from": "system", diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json b/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json index 831670240c..0ab07b4387 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "nRFPlbSKRMb0UpSI", - "filament_id": "GFB99", + "filament_id": "OFLBUkwC", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json b/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json index 0996b8cd18..69ba1b7b5b 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "rP4Qul9OY7lUhPgO", - "filament_id": "GFB98", + "filament_id": "OF4XAUnp", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json b/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json index f51cda8ed9..75ca6d6b52 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "AKO1twNgFO67N5GK", - "filament_id": "GFN98", + "filament_id": "OFNn21yM", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PA.json index 815969c712..46184d8018 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "4CBO5MnUk8Smhs3q", - "filament_id": "GFN99", + "filament_id": "OF0zx94L", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json b/resources/profiles/Vzbot/filament/Vzbot Generic PC.json index ebb44e627a..9731fbbe07 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "wUe99Mr4HqzSNxgO", - "filament_id": "GFC99", + "filament_id": "OF9fOPpd", "instantiation": "true", "filament_max_volumetric_speed": [ "50" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json b/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json index cc48d69299..0f585fbb8c 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "C8LMRvN350POVqC2", - "filament_id": "GFG99", + "filament_id": "OFHUnLY2", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json b/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json index 33ab4f69a3..2b73cddba8 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "nt1egZD1dQEVXp0v", - "filament_id": "GFL98", + "filament_id": "OFYHzKyS", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json index 48a8aefecc..b0e447e66c 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4JMiuJbl1gNrBipT", - "filament_id": "GFL99", + "filament_id": "OF2mgDsI", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json index 0d0bd62a3e..23a748046e 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "DX4eZb2tlNVqeUrn", - "filament_id": "GFS99", + "filament_id": "OFIda816", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json b/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json index f5ca392779..60901cb86e 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json +++ b/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "YlhTF1F3OA2qj6o2", - "filament_id": "GFU99", + "filament_id": "OFGGyAgJ", "instantiation": "true", "filament_max_volumetric_speed": [ "50" diff --git a/resources/profiles/Wanhao France/filament/YUMI PETG.json b/resources/profiles/Wanhao France/filament/YUMI PETG.json index b8046df21f..97082ee19a 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PETG.json +++ b/resources/profiles/Wanhao France/filament/YUMI PETG.json @@ -4,7 +4,7 @@ "inherits": "Yumi Generic PETG", "from": "system", "setting_id": "PFFm20QNgwqyuglH", - "filament_id": "GFG99", + "filament_id": "OF5NqBfC", "instantiation": "true", "filament_vendor": [ "Yumi" diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json index f7bac7a60c..5655743ca6 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json @@ -4,7 +4,7 @@ "inherits": "Yumi Generic PLA", "from": "system", "setting_id": "zQSSA2QZi27ESyQK", - "filament_id": "GFU99", + "filament_id": "OFZ2LuAi", "instantiation": "true", "filament_vendor": [ "Yumi" diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json index be13517ab5..52360e2d5b 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json @@ -4,7 +4,7 @@ "inherits": "Yumi Generic PLA", "from": "system", "setting_id": "v2p0ooSxHnvVkn57", - "filament_id": "GFU99", + "filament_id": "OFJxSqO4", "instantiation": "true", "filament_vendor": [ "Yumi" diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json b/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json index 83d505ac6f..af50f6f8b0 100644 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json +++ b/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json @@ -3,7 +3,7 @@ "name": "Yumi Generic PETG", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFCu3jES", "instantiation": "false", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json b/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json index bbace09129..0ef9bfdad2 100644 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json +++ b/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json @@ -3,7 +3,7 @@ "name": "Yumi Generic PLA", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFGLeiNL", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker ABS.json b/resources/profiles/WonderMaker/filament/WonderMaker ABS.json index ab6833cb04..a15b27e098 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker ABS.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "cyLAXg9zBIDNkYNx", - "filament_id": "GFB00", + "filament_id": "OFjHrAX0", "instantiation": "true", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker ASA.json b/resources/profiles/WonderMaker/filament/WonderMaker ASA.json index b73a974ea9..186045f104 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker ASA.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Wu70ukKHBqIa4TDv", - "filament_id": "GFB01", + "filament_id": "OFy3sW6j", "instantiation": "true", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json b/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json index 79d0a85a77..b86695c98d 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "Rnm03E1ifi5A2vrQ", - "filament_id": "GFT01", + "filament_id": "OF4f8vVp", "instantiation": "true", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json b/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json index 434c0f9fca..0da03e7d8d 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ZtPZlMNIqq3Gaavc", - "filament_id": "GFG00", + "filament_id": "OF5lGPup", "instantiation": "true", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json index 7440eae0ee..2723ffd1bb 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "HRFI81hKAaT1LwjF", - "filament_id": "GFA00", + "filament_id": "OFMK5gVo", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json index 7c641e69b0..9ebd12b035 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "eudiDwK2EVLlGnha", - "filament_id": "GFA07", + "filament_id": "OFEbIx49", "instantiation": "true", "filament_cost": [ "29.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json index a935c96157..53fc60c709 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "YufHNkKBRBBxucHO", - "filament_id": "GFA01", + "filament_id": "OFepU7Tl", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json index 222fcbce1a..09454f9a80 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4B7gD5YwPbUCvLAh", - "filament_id": "GFA02", + "filament_id": "OFcogyWl", "instantiation": "true", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json index 6738e2802e..7e2b3be650 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "8kSWEkCpitdwX11c", - "filament_id": "GFA05", + "filament_id": "OFncpm7O", "instantiation": "true", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json index d4b51f4b0d..a2b96925a6 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "KxnOjANQuyO10zzH", - "filament_id": "GFA16", + "filament_id": "OFBBgw7B", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PVA.json b/resources/profiles/WonderMaker/filament/WonderMaker PVA.json index 65f504da95..1ec283f106 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PVA.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "PRdEoagTzltjzJCQ", - "filament_id": "GFS04", + "filament_id": "OF4ulo9Y", "instantiation": "true", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json b/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json index 3b617e15ab..a8d7620cec 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "eUyRprcb22IdYNv3", - "filament_id": "GFU01", + "filament_id": "OFLAXKqP", "instantiation": "true", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json index 5f505d80da..10b5421797 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS;Generic ABS @Z-Bolt;Z-Bolt ABS @0.4 nozzle", "from": "system", "setting_id": "p97bQCnVyGgwMn2y", - "filament_id": "GFL204", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json index 641fff9a6b..ea89fac80f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS @0.6 nozzle", "from": "system", "setting_id": "BQdgCL8lvVW7I8Dw", - "filament_id": "GFL206", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json index 1b55d4460b..48c8a20136 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS @0.8 nozzle", "from": "system", "setting_id": "Xn2L7IBp26Bb6G2K", - "filament_id": "GFL208", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json index bdef07fbb7..609e9f6106 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "renamed_from": "Z-Bolt ABS;Generic ABS @Z-Bolt", "from": "system", - "filament_id": "GFL200", + "filament_id": "OFY9muEs", "instantiation": "false", "filament_max_volumetric_speed": [ "20" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json index a933deaf74..7ee03a1904 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT;Generic ABS HT @Z-Bolt;Z-Bolt ABS HT @0.4 nozzle", "from": "system", "setting_id": "TDGj84iuRAL9R1d4", - "filament_id": "GFL504", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json index 701a2e6b7f..626fbe9977 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT @0.6 nozzle", "from": "system", "setting_id": "2AKxm2VhVlL2vMM1", - "filament_id": "GFL506", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json index 6c73a3d99f..feb932dcdb 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT @0.8 nozzle", "from": "system", "setting_id": "ztusMudd96Ns3Ip0", - "filament_id": "GFL508", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json index 431d4dc7c2..0448f04bed 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @Z-Bolt Base", "renamed_from": "Z-Bolt ABS HT;Generic ABS HT @Z-Bolt", "from": "system", - "filament_id": "GFL500", + "filament_id": "OFsP8PKH", "instantiation": "false", "description": "Use this filament profile to print big ABS models with chamber heating", "chamber_temperatures": [ diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json index e9b01c547c..c09de55efa 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA;Generic PA @Z-Bolt;Z-Bolt PA @0.4 nozzle", "from": "system", "setting_id": "zuvJBWxHOiPMyExQ", - "filament_id": "GFL404", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json index d74fcf8470..d6886e6b1e 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA @0.6 nozzle", "from": "system", "setting_id": "MB0n4BeDFEI25yTe", - "filament_id": "GFL406", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json index 42d675d826..12a005431f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA @0.8 nozzle", "from": "system", "setting_id": "WZc4C1f6cPG8HZR3", - "filament_id": "GFL408", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json index 73459bf326..f593385ea7 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "renamed_from": "Z-Bolt PA;Generic PA @Z-Bolt", "from": "system", - "filament_id": "GFL400", + "filament_id": "OFg8ndtj", "instantiation": "false", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json index 476ece5d3b..a28c4bc1c3 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG;Generic PETG @Z-Bolt;Z-Bolt PETG @0.4 nozzle", "from": "system", "setting_id": "LWwbNXs8bf1iGELi", - "filament_id": "GFL304", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json index 8bd7ff1efa..15aab3fe46 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG @0.6 nozzle", "from": "system", "setting_id": "w4HVBbunzssG9j3s", - "filament_id": "GFL306", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json index 3bce1def13..4fe8b41490 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG @0.8 nozzle", "from": "system", "setting_id": "TnLZ0vOVjIjng3u0", - "filament_id": "GFL308", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json index 8e64cc6200..4c8d8dc6a7 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "renamed_from": "Z-Bolt PETG;Generic PETG @Z-Bolt", "from": "system", - "filament_id": "GFL300", + "filament_id": "OFYPdQJh", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json index 943d57d6c1..527888a93f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA;Generic PLA @Z-Bolt;Z-Bolt PLA @0.4 nozzle", "from": "system", "setting_id": "0MfamDPH1L6sMRff", - "filament_id": "GFL100", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json index a87f145129..af58bff7c5 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA @0.6 nozzle", "from": "system", "setting_id": "tdq9Ye9GLpZXlak6", - "filament_id": "GFL106", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json index 283951b1a2..dbe507507b 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA @0.8 nozzle", "from": "system", "setting_id": "GKtc9mJusUZJD6kx", - "filament_id": "GFL108", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json index 4b946c44cd..df2c3259e1 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "renamed_from": "Z-Bolt PLA;Generic PLA @Z-Bolt", "from": "system", - "filament_id": "GFL100", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_max_volumetric_speed": [ "20" diff --git a/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json index 79be89b387..5710a6c96e 100644 --- a/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "7YUqT6co3NfvJ8L9", - "filament_id": "IQM1", + "filament_id": "OFjUGUIK", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json index 8b07c6af0f..f3dfafcd74 100644 --- a/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "B5VrAYqX9Dzj5qfV", - "filament_id": "IQM7", + "filament_id": "OF6kj4jI", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle)" diff --git a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json index 986de30106..3ead9c48e3 100644 --- a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "5M829nxsQdq2Sde5", - "filament_id": "OFL4BLAC", + "filament_id": "OFXJ9iom", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)" diff --git a/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json b/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json index e0faf6eb71..3409911a32 100644 --- a/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "2gaJup2jw52l27sv", - "filament_id": "IQM2", + "filament_id": "OFJWKoYG", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json index 5226e1e755..2bcd99b952 100644 --- a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "QefI7iu8bAQ9jzDK", - "filament_id": "IQM3", + "filament_id": "OFaeIx7W", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json index 2855f13552..aacf080a4b 100644 --- a/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "rVzUhxKEDUfGMnQi", - "filament_id": "IQM1011", + "filament_id": "OFOJPAAS", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle)" diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json index 42abbeb819..037ec7f86c 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFSTCno1", "setting_id": "fRX555Prkdu5ESIp", "name": "re3D Greengate rPETG @0.8 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json index 43de0b8685..3602474096 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFSTCno1", "setting_id": "6aPU6CYS2cmODkok", "name": "re3D Greengate rPETG @1.75 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG.json b/resources/profiles/re3D/filament/re3D Greengate rPETG.json index fe0ff8f81b..349d40fff9 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG.json +++ b/resources/profiles/re3D/filament/re3D Greengate rPETG.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG01", + "filament_id": "OFSTCno1", "setting_id": "SdugLw5oy9GB7NID", "filament_settings_id": [ "re3D Greengate rPETG" diff --git a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json index 47a3a44f34..bb81730159 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "GFG99", + "filament_id": "OFU3QXL7", "setting_id": "6yqRE2eSyER7X82N", "filament_settings_id": [ "re3D PC @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json index c1f329f295..698cc5f4bd 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "GFG99", + "filament_id": "OFU3QXL7", "setting_id": "YVPbVSiVCzjp5ynf", "filament_settings_id": [ "re3D PC @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PC.json b/resources/profiles/re3D/filament/re3D PC.json index 36e475e4e9..26e6ac4a92 100644 --- a/resources/profiles/re3D/filament/re3D PC.json +++ b/resources/profiles/re3D/filament/re3D PC.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "GFG99", + "filament_id": "OFU3QXL7", "setting_id": "eSR00TZTotTvJs8l", "filament_settings_id": [ "re3D PC" diff --git a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json index c275a7517f..3e2ad13f10 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG03", + "filament_id": "OF3F63OE", "setting_id": "epcrSCwjgRXMycBx", "filament_settings_id": [ "re3D PETG @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json index 148f6540fe..5faa19b476 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG03", + "filament_id": "OF3F63OE", "setting_id": "MoQie1JMlUeH0BwR", "filament_settings_id": [ "re3D PETG @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PETG.json b/resources/profiles/re3D/filament/re3D PETG.json index fb4cf4278c..426849c4a1 100644 --- a/resources/profiles/re3D/filament/re3D PETG.json +++ b/resources/profiles/re3D/filament/re3D PETG.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG03", + "filament_id": "OF3F63OE", "setting_id": "msXDK31R8KOvqNqK", "filament_settings_id": [ "re3D PETG" diff --git a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json index 1719807f7f..06a6d9942b 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "GFL99", + "filament_id": "OFRyOsZj", "setting_id": "M8OOntNjjDBR4W32", "filament_settings_id": [ "re3D PLA @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json index 01e7abbc9a..41227d9da5 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "GFL99", + "filament_id": "OFRyOsZj", "setting_id": "SpF19Y2sSYbPHyxz", "filament_settings_id": [ "re3D PLA @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PLA.json b/resources/profiles/re3D/filament/re3D PLA.json index c3eb730024..3f26dd5834 100644 --- a/resources/profiles/re3D/filament/re3D PLA.json +++ b/resources/profiles/re3D/filament/re3D PLA.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "GFL99", + "filament_id": "OFRyOsZj", "setting_id": "nPpDwvFg7WQr7K3t", "filament_settings_id": [ "re3D PLA" diff --git a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json index a49f19e128..56a0875c80 100644 --- a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG02", + "filament_id": "OFfHGM1D", "setting_id": "i9ii0b7qFYWnkGSq", "name": "re3D rPP @0.8 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json index 0bde56c596..91d8aa1a3b 100644 --- a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG02", + "filament_id": "OFfHGM1D", "setting_id": "356nOwsfGLI3CNqU", "name": "re3D rPP @1.75 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json index d226697240..2c66bc7b97 100644 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ b/resources/profiles/re3D/filament/re3D rPP.json @@ -7,7 +7,7 @@ "filament_type": [ "PP" ], - "filament_id": "GFG02", + "filament_id": "OFfHGM1D", "setting_id": "8PB62qm5Cd3SHLf4", "filament_settings_id": [ "re3D rPP" diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index a23c0d8cbc..fd99602923 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -1,5 +1,120 @@ { "hints": { + "GFA00_01": "OF9HCdyQ", + "GFA03": "OFjXrKFO", + "GFA50_01": "OF7OqDp3", + "GFA99": "OF0yFLkY", + "GFASA": "OF0yFLkY", + "GFB00_01": "OFNQKF0M", + "GFB01_01": "OFdrYBmI", + "GFB98": "OFLPAxz3", + "GFB98_01": "OFUaVAdj", + "GFB98_2": "OFoJcr46", + "GFB98_3": "OFoJcr46", + "GFB98_4": "OFoJcr46", + "GFB98_5": "OFK4LdYI", + "GFB98_6": "OFK4LdYI", + "GFB98_7": "OFK4LdYI", + "GFB99": "OFY9muEs", + "GFB99_01": "OFNLXV8X", + "GFB99_2": "OFvGc67v", + "GFB99_3": "OFvGc67v", + "GFB99_4": "OFvGc67v", + "GFB99_5": "OFvGc67v", + "GFB99_6": "OFyeSq8A", + "GFB99_7": "OFyeSq8A", + "GFC00_01": "OFdXVjGZ", + "GFC98": "OFjz0a3m", + "GFC99": "OFLakOUI", + "GFC99_01": "OFN7aNHe", + "GFC99_1": "OF97ru74", + "GFC99_2": "OF97ru74", + "GFC99_3": "OF97ru74", + "GFC99_4": "OF97ru74", + "GFC99_5": "OFq5QANf", + "GFC99_6": "OFq5QANf", + "GFG00_01": "OFObyktP", + "GFG03": "OF3F63OE", + "GFG96": "OF7lOgYF", + "GFG97": "OFu1evlr", + "GFG97-01": "OFTKFAZ4", + "GFG98": "OFoYSJKi", + "GFG98_01": "OFWadebJ", + "GFG99": "OFYPdQJh", + "GFG99_01": "OF1uR1t2", + "GFG99_2": "OF1Id239", + "GFG99_3": "OF1Id239", + "GFG99_4": "OF1Id239", + "GFG99_5": "OF1Id239", + "GFG99_6": "OFOKYhi6", + "GFG99_7": "OFOKYhi6", + "GFL100": "OFBpcB0a", + "GFL106": "OFDSrzZ8", + "GFL108": "OFDSrzZ8", + "GFL204": "OFY9muEs", + "GFL206": "OFY9muEs", + "GFL208": "OFY9muEs", + "GFL304": "OFYPdQJh", + "GFL306": "OFYPdQJh", + "GFL308": "OFYPdQJh", + "GFL404": "OFg8ndtj", + "GFL406": "OFg8ndtj", + "GFL408": "OFg8ndtj", + "GFL504": "OFsP8PKH", + "GFL506": "OFsP8PKH", + "GFL508": "OFsP8PKH", + "GFL71": "OF0omtEb", + "GFL72": "OFFZ458u", + "GFL73": "OFeVzkSU", + "GFL74": "OF0VpkBM", + "GFL75": "OFnXwW8l", + "GFL76": "OF6H51Xx", + "GFL77": "OFtFtiS0", + "GFL78": "OFelDBgv", + "GFL79": "OF5oXk4M", + "GFL80": "OFHknN4v", + "GFL94": "OFrGJ4tR", + "GFL95": "OFmpMwxS", + "GFL95_01": "OFodPDxO", + "GFL96": "OFesA6rF", + "GFL96_01": "OF0GIkJm", + "GFL97": "OFCp3Bgo", + "GFL98": "OFWbdGsC", + "GFL98_01": "OFgVJhVt", + "GFL98_1": "OFQ7I5vC", + "GFL98_3": "OFQ7I5vC", + "GFL98_4": "OFQ7I5vC", + "GFL98_5": "OFQ7I5vC", + "GFL99": "OFDSrzZ8", + "GFL99_01": "OFuSwKgm", + "GFL99_2": "OFiCHnso", + "GFL99_3": "OFiCHnso", + "GFL99_4": "OFiCHnso", + "GFL99_5": "OFiCHnso", + "GFL99_6": "OFl4ItvQ", + "GFL99_7": "OFl4ItvQ", + "GFLLK10PETG": "OFYPdQJh", + "GFLLK10PLA": "OFDSrzZ8", + "GFLLK10PPETG": "OFYPdQJh", + "GFLLK10PPLA": "OFDSrzZ8", + "GFLSBS99": "OFhQfUQY", + "GFN05_01": "OFe8tuNb", + "GFN96": "OF8Tlg47", + "GFN96_01": "OFptvi3F", + "GFN97": "OF8tPByX", + "GFN97_01": "OFSPdsuW", + "GFN98": "OFQLcbps", + "GFN98_02": "OFHa3RZT", + "GFN98_1": "OFfznI0Q", + "GFN98_2": "OFfznI0Q", + "GFN98_3": "OFfznI0Q", + "GFN98_4": "OFfznI0Q", + "GFN99": "OFg8ndtj", + "GFN99_01": "OFQswlnF", + "GFN99_1": "OFIy3kLw", + "GFN99_2": "OFIy3kLw", + "GFN99_3": "OFIy3kLw", + "GFN99_4": "OFIy3kLw", "GFOT001": "OFxA1p01", "GFOT002": "OFGkyftV", "GFOT003": "OF1Pke8t", @@ -8,6 +123,48 @@ "GFOT006": "OFcfQk4h", "GFOT008": "OFcvKkrs", "GFOT009": "OFM91vZs", + "GFP95": "OFNiSLfL", + "GFP95_01": "OFkYkQGO", + "GFP96": "OFXkm8q1", + "GFP96_01": "OFMTBcnz", + "GFP97": "OF1UNk9P", + "GFP97_01": "OF3s929u", + "GFP98": "OFd0Fv0k", + "GFP98_01": "OFkUaDnU", + "GFP99": "OFPklMI1", + "GFP99_01": "OFKuTr12", + "GFPA": "OFzS7zt4", + "GFPA6-CF": "OFQe7sAx", + "GFPAHT-CF": "OFaEuvNF", + "GFPC": "OFZtkHRq", + "GFPC-CF": "OFeIyhUx", + "GFPC-GF": "OFxJRuVF", + "GFPEBA": "OFjLAYgO", + "GFPET-CF": "OFRhCTUg", + "GFPETG": "OFYPdQJh", + "GFPETG-1": "OFIeCuXj", + "GFPETG-CF": "OF9UJOGF", + "GFPLA Glow": "OF5PtjTp", + "GFPLA Translucent": "OF7c9fln", + "GFPLA-CF": "OFZ0mR5b", + "GFPVA": "OFTkj6DR", + "GFR98": "OF74KeQR", + "GFR98_01": "OFxvKuYW", + "GFR99": "OFCD8qiU", + "GFR99_01": "OFrnJJEa", + "GFS04_01": "OFyreocX", + "GFS97": "OFo2UF2C", + "GFS97_01": "OFGDaEHO", + "GFS98": "OFsFon5l", + "GFS98_01": "OFW9uIkE", + "GFS99": "OFDvXujf", + "GFS99_01": "OFMZAoqa", + "GFS99_1": "OFcCzEkS", + "GFS99_2": "OFcCzEkS", + "GFS99_3": "OFcCzEkS", + "GFS99_4": "OFcCzEkS", + "GFS99_5": "OFoT8F7Y", + "GFS99_6": "OFoT8F7Y", "GFSEP001": "OFtudokz", "GFSEP002": "OFf5awy4", "GFSEP003": "OFbP8zEO", @@ -25,9 +182,777 @@ "GFSEP015": "OFvVy7yo", "GFSEP016": "OFTOPcx0", "GFSEP017": "OFXCBZTA", - "GFSEP018": "OFlSNkhc" + "GFSEP018": "OFlSNkhc", + "GFSL99": "OFqOk9Ww", + "GFT01_01": "OFCnywiC", + "GFT97_01": "OFvPomQf", + "GFT98_01": "OFGzUNbm", + "GFTPU 95A": "OFML2aVd", + "GFTPU for ACE": "OF0FfcAG", + "GFU01_01": "OFDJU6R3", + "GFU99": "OFgbpcy9", + "GFU99_01": "OFCVUEaV", + "GFU99_2": "OFbenYUK", + "GFU99_3": "OFU3zwPc" }, "retired": { + "00001": { + "claims": [ + "Creality/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "00002": { + "claims": [ + "Creality/Generic PLA-Silk" + ], + "successor": "OFi6PfUM" + }, + "00003": { + "claims": [ + "Creality/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "00004": { + "claims": [ + "Creality/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "00005": { + "claims": [ + "Creality/Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "00006": { + "claims": [ + "Creality/Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "00007": { + "claims": [ + "Creality/Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "00008": { + "claims": [ + "Creality/Generic PA" + ], + "successor": "OFg8ndtj" + }, + "00009": { + "claims": [ + "Creality/Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "00010": { + "claims": [ + "Creality/Generic BVOH" + ], + "successor": "OFo2UF2C" + }, + "00011": { + "claims": [ + "Creality/Generic PVA" + ], + "successor": "OFDvXujf" + }, + "00012": { + "claims": [ + "Creality/Generic HIPS" + ], + "successor": "OFsFon5l" + }, + "00013": { + "claims": [ + "Creality/Generic PET-CF" + ], + "successor": "OFQdaVZS" + }, + "00014": { + "claims": [ + "Creality/Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "00015": { + "claims": [ + "Creality/Generic PA6-CF" + ], + "successor": "OFhTPf6L" + }, + "00016": { + "claims": [ + "Creality/Generic PAHT-CF" + ], + "successor": "OFH7b12v" + }, + "00017": { + "claims": [ + "Creality/Generic PPS" + ], + "successor": "OFq9svOz" + }, + "00018": { + "claims": [ + "Creality/Generic PPS-CF" + ], + "successor": "OF6rdQ6M" + }, + "00019": { + "claims": [ + "Creality/Generic PP" + ], + "successor": "OF1UNk9P" + }, + "00020": { + "claims": [ + "Creality/Generic PET" + ], + "successor": "OF6MOPWx" + }, + "00021": { + "claims": [ + "Creality/Generic PC" + ], + "successor": "OFLakOUI" + }, + "00022": { + "claims": [ + "Creality/Generic PA612-CF" + ], + "successor": "OF8eaY7j" + }, + "00023": { + "claims": [ + "Creality/Generic Support for PA" + ], + "successor": "OFDtop41" + }, + "00024": { + "claims": [ + "Creality/Generic Support for PLA" + ], + "successor": "OFin64Qg" + }, + "00025": { + "claims": [ + "Creality/Generic PA12-CF" + ], + "successor": "OFM4iJlv" + }, + "00026": { + "claims": [ + "Creality/Generic TPU 64D" + ], + "successor": "OFF3cuzT" + }, + "00027": { + "claims": [ + "Creality/Generic PETG-GF" + ], + "successor": "OFyLWVF3" + }, + "00031": { + "claims": [ + "Creality/Generic PP-CF" + ], + "successor": "OFXkm8q1" + }, + "00032": { + "claims": [ + "Creality/Generic PCTG" + ], + "successor": "OFu1evlr" + }, + "00033": { + "claims": [ + "Creality/Generic ASA-CF" + ], + "successor": "OF53eLVD" + }, + "00034": { + "claims": [ + "Creality/Generic PA6-GF" + ], + "successor": "OFh9u9c0" + }, + "00035": { + "claims": [ + "Creality/eSUN PLA-LW" + ], + "successor": "OFi5RSve" + }, + "01001": { + "claims": [ + "Creality/Creality Hyper PLA", + "Creality/Hyper PLA" + ], + "successor": "OFAIrQXu" + }, + "01002": { + "claims": [ + "Creality/Hyper L-W PLA" + ], + "successor": "OF70zbGS" + }, + "01003": { + "claims": [ + "Creality/Hyper Luminous" + ], + "successor": "OFC1PzXz" + }, + "01004": { + "claims": [ + "Creality/Hyper Stardust" + ], + "successor": "OFXnToSX" + }, + "01601": { + "claims": [ + "Creality/Soleyin Ultra PLA" + ], + "successor": "OF02UAVh" + }, + "02001": { + "claims": [ + "Creality/Creality Hyper PLA-CF", + "Creality/Hyper PLA-CF" + ], + "successor": "OFGwT5Av" + }, + "03001": { + "claims": [ + "Creality/Creality Hyper ABS", + "Creality/Hyper ABS" + ], + "successor": "OF8GnyFU" + }, + "04001": { + "claims": [ + "Creality/CR-PLA", + "Creality/Creality Generic PLA" + ], + "successor": "OFACSw9O" + }, + "05001": { + "claims": [ + "Creality/CR-Silk", + "Creality/Creality Silk PLA" + ], + "successor": "OF3OMgrI" + }, + "06001": { + "claims": [ + "Creality/CR-PETG", + "Creality/Creality Generic PETG" + ], + "successor": "OF3WQaKK" + }, + "06002": { + "claims": [ + "Creality/Hyper PETG" + ], + "successor": "OFujZSdh" + }, + "06003": { + "claims": [ + "Creality/Hyper PETG-CF" + ], + "successor": "OFusbWjj" + }, + "06004": { + "claims": [ + "Creality/Hyper PETG-GF" + ], + "successor": "OFLgwqp2" + }, + "06005": { + "claims": [ + "Creality/Soleyin Basic PETG" + ], + "successor": "OFBLktDy" + }, + "07001": { + "claims": [ + "Creality/CR-ABS", + "Creality/Creality Generic ABS" + ], + "successor": "OFGwZmgS" + }, + "07002": { + "claims": [ + "Creality/Hyper PC" + ], + "successor": "OFUF7oA4" + }, + "08001": { + "claims": [ + "Creality/Ender-PLA" + ], + "successor": "OFWao3Ic" + }, + "09001": { + "claims": [ + "Creality/EN-PLA+" + ], + "successor": "OFks6esg" + }, + "09002": { + "claims": [ + "Creality/ENDER FAST PLA" + ], + "successor": "OFfSqS4R" + }, + "10001": { + "claims": [ + "Creality/Creality Generic TPU", + "Creality/HP-TPU" + ], + "successor": "OFGcMkEB" + }, + "1009481135": { + "claims": [ + "Snapmaker/Snapmaker J1 PET" + ], + "successor": "OF8Jl6NT" + }, + "1042511226": { + "claims": [ + "Snapmaker/Snapmaker Dual PETG-CF" + ], + "successor": "OF3msXEa" + }, + "10425112260": { + "claims": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "successor": "OFOwQuZM" + }, + "11001": { + "claims": [ + "Creality/CR-Nylon", + "Creality/Creality Generic PA" + ], + "successor": "OFMqYusc" + }, + "1172603684": { + "claims": [ + "Snapmaker/Snapmaker J1 PETG" + ], + "successor": "OFQMTRc8" + }, + "1181363872": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA Silk" + ], + "successor": "OFyj3m13" + }, + "11813638720": { + "claims": [ + "Snapmaker/Snapmaker PLA Silk" + ], + "successor": "OFWgFOjn" + }, + "1192769348": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA Matte" + ], + "successor": "OFY3AB7j" + }, + "12002": { + "claims": [ + "Creality/Hyper PPA-CF" + ], + "successor": "OFNvBIL0" + }, + "12003": { + "claims": [ + "Creality/Hyper PAHT-CF" + ], + "successor": "OF4APyxe" + }, + "12004": { + "claims": [ + "Creality/Hyper PA612-CF" + ], + "successor": "OFhkN0a7" + }, + "12005": { + "claims": [ + "Creality/Hyper PA6-CF" + ], + "successor": "OFn2GlhY" + }, + "1207881278": { + "claims": [ + "Snapmaker/Snapmaker Dual Breakaway" + ], + "successor": "OFfmHUkQ" + }, + "1210173120": { + "claims": [ + "Snapmaker/Snapmaker J1 PA-CF" + ], + "successor": "OFYEtXuk" + }, + "1223824394": { + "claims": [ + "Snapmaker/Snapmaker J1 ABS" + ], + "successor": "OFy14TRA" + }, + "1247172706": { + "claims": [ + "Snapmaker/Snapmaker Dual ASA" + ], + "successor": "OFKUEXPA" + }, + "12471727060": { + "claims": [ + "Snapmaker/Snapmaker ASA" + ], + "successor": "OF1d7c3A" + }, + "13001": { + "claims": [ + "Creality/CR-PLA Carbon" + ], + "successor": "OFrM4hdm" + }, + "1344609062": { + "claims": [ + "Snapmaker/Snapmaker PVA" + ], + "successor": "OFyhjiNs" + }, + "1355502217": { + "claims": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "successor": "OFOwQuZM" + }, + "1393866034": { + "claims": [ + "Snapmaker/PolyLite Dual PLA", + "Snapmaker/PolyLite J1 PLA", + "Snapmaker/PolyLite PLA" + ], + "successor": "OF5CgdDq" + }, + "14001": { + "claims": [ + "Creality/CR-PLA Matte" + ], + "successor": "OFM0xjBG" + }, + "1417031127": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA" + ], + "successor": "OFZivHGL" + }, + "14170311270": { + "claims": [ + "Snapmaker/Snapmaker PLA" + ], + "successor": "OFlufQpZ" + }, + "141703112701": { + "claims": [ + "Snapmaker/Snapmaker PLA SnapSpeed" + ], + "successor": "OFwhLMs4" + }, + "1417031127011": { + "claims": [ + "Snapmaker/Snapmaker PLA Lite" + ], + "successor": "OFEOnBj6" + }, + "144877656": { + "claims": [ + "Snapmaker/Snapmaker J1 ASA" + ], + "successor": "OFt7SngH" + }, + "1480063856": { + "claims": [ + "Snapmaker/Snapmaker TPU" + ], + "successor": "OF65InrS" + }, + "15001": { + "claims": [ + "Creality/CR-PLA Fluo" + ], + "successor": "OFgpQwkk" + }, + "1528786603": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA Silk" + ], + "successor": "OFQ1KzO8" + }, + "16001": { + "claims": [ + "Creality/CR-TPU" + ], + "successor": "OFG2RkhN" + }, + "1655727393": { + "claims": [ + "Snapmaker/Snapmaker PLA Silk" + ], + "successor": "OFWgFOjn" + }, + "168223792": { + "claims": [ + "Snapmaker/Snapmaker Dual ABS" + ], + "successor": "OFJhT2fd" + }, + "1682237920": { + "claims": [ + "Snapmaker/Snapmaker ABS" + ], + "successor": "OF72YYTd" + }, + "1695556157": { + "claims": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "successor": "OFpu74Qe" + }, + "17001": { + "claims": [ + "Creality/CR-Wood" + ], + "successor": "OFGxC8gB" + }, + "1702147325": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA-CF" + ], + "successor": "OF6ATsCF" + }, + "17021473250": { + "claims": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "successor": "OFhQf8ou" + }, + "18001": { + "claims": [ + "Creality/HP Ultra PLA" + ], + "successor": "OFCJpR7a" + }, + "1895495477": { + "claims": [ + "Snapmaker/Snapmaker PETG" + ], + "successor": "OF4WB37S" + }, + "19001": { + "claims": [ + "Creality/Creality Generic ASA", + "Creality/HP-ASA" + ], + "successor": "OFPHLnoe" + }, + "200803790": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA Eco" + ], + "successor": "OFyPG8v2" + }, + "2008037900": { + "claims": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "successor": "OFpu74Qe" + }, + "2029994346": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA Metal" + ], + "successor": "OFg3cWVt" + }, + "20299943460": { + "claims": [ + "Snapmaker/Snapmaker PLA Metal" + ], + "successor": "OFtybfNX" + }, + "2128577941": { + "claims": [ + "Snapmaker/Snapmaker Dual PET" + ], + "successor": "OFUIfGoh" + }, + "21285779410": { + "claims": [ + "Snapmaker/Snapmaker PET" + ], + "successor": "OFQYaiGg" + }, + "2209001062": { + "claims": [ + "Snapmaker/Snapmaker Dual PETG" + ], + "successor": "OFBlFMVp" + }, + "22090010620": { + "claims": [ + "Snapmaker/Snapmaker PETG" + ], + "successor": "OF4WB37S" + }, + "2549587591": { + "claims": [ + "Snapmaker/Snapmaker PET" + ], + "successor": "OFQYaiGg" + }, + "2742961008": { + "claims": [ + "Snapmaker/Snapmaker ASA" + ], + "successor": "OF1d7c3A" + }, + "29001": { + "claims": [ + "Creality/Hyper Marble" + ], + "successor": "OFLzx3J4" + }, + "2971656290": { + "claims": [ + "Snapmaker/Snapmaker Dual TPU" + ], + "successor": "OFjkdnyN" + }, + "29716562900": { + "claims": [ + "Snapmaker/Snapmaker TPU" + ], + "successor": "OF65InrS" + }, + "297165629001": { + "claims": [ + "Snapmaker/Snapmaker TPU 95A" + ], + "successor": "OFKo87c6" + }, + "3104636980": { + "claims": [ + "Snapmaker/Snapmaker Dual PVA" + ], + "successor": "OFDKIKyw" + }, + "31046369800": { + "claims": [ + "Snapmaker/Snapmaker PVA" + ], + "successor": "OFyhjiNs" + }, + "3177068229": { + "claims": [ + "Snapmaker/Snapmaker PLA" + ], + "successor": "OFlufQpZ" + }, + "3383257822": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA Eco" + ], + "successor": "OFLbdkrE" + }, + "3492897526": { + "claims": [ + "Snapmaker/Snapmaker J1 Breakaway" + ], + "successor": "OFeTATC7" + }, + "3493177425": { + "claims": [ + "Snapmaker/Snapmaker Dual PA-CF" + ], + "successor": "OFRooa0F" + }, + "34931774250": { + "claims": [ + "Snapmaker/Snapmaker PA-CF" + ], + "successor": "OFEmsric" + }, + "3503790988": { + "claims": [ + "Snapmaker/Snapmaker Dual PLA Matte" + ], + "successor": "OFlIsW6f" + }, + "377675245": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA" + ], + "successor": "OFSa39yP" + }, + "3806593857": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA-CF" + ], + "successor": "OFdD5Wbu" + }, + "3811508002": { + "claims": [ + "Snapmaker/Snapmaker ABS" + ], + "successor": "OF72YYTd" + }, + "3864371306": { + "claims": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "successor": "OFhQf8ou" + }, + "4012961186": { + "claims": [ + "Snapmaker/Snapmaker J1 PLA Metal" + ], + "successor": "OFt0JbR7" + }, + "4092268632": { + "claims": [ + "Snapmaker/Snapmaker J1 TPU" + ], + "successor": "OFyrnlUn" + }, + "4227461134": { + "claims": [ + "Snapmaker/Snapmaker Breakaway Support For PLA", + "Snapmaker/Snapmaker J1 PVA" + ], + "successor": "OF6TuVAg" + }, + "4235401834": { + "claims": [ + "Snapmaker/Snapmaker J1 PETG-CF" + ], + "successor": "OFxYB4Sw" + }, + "581236806": { + "claims": [ + "Snapmaker/Snapmaker PA-CF" + ], + "successor": "OFEmsric" + }, "AZ01-1": { "claims": [ "BBL/AliZ PETG-CF", @@ -63,6 +988,66 @@ ], "successor": "OFd4zw5l" }, + "BSFI001": { + "claims": [ + "Blocks/Blocks Generic PLA" + ], + "successor": "OFNYewRS" + }, + "BSFI002": { + "claims": [ + "Blocks/Blocks Generic PETG" + ], + "successor": "OFrgGex8" + }, + "BSFI003": { + "claims": [ + "Blocks/Blocks Generic TPU" + ], + "successor": "OFMEbuBE" + }, + "BSFI004": { + "claims": [ + "Blocks/Blocks Generic ABS" + ], + "successor": "OFma52eS" + }, + "BSFI005": { + "claims": [ + "Blocks/Blocks Generic ASA" + ], + "successor": "OFB9dx27" + }, + "BSFI006": { + "claims": [ + "Blocks/Blocks Generic PA" + ], + "successor": "OFiUSDih" + }, + "BSFI007": { + "claims": [ + "Blocks/Blocks Generic PA-CF" + ], + "successor": "OF8bLDu7" + }, + "BSFI008": { + "claims": [ + "Blocks/Blocks Generic PC" + ], + "successor": "OFahE7HP" + }, + "BSFI009": { + "claims": [ + "Blocks/Blocks Generic PVA" + ], + "successor": "OFiorRtJ" + }, + "BSFI010": { + "claims": [ + "Blocks/Blocks Generic PLA-CF" + ], + "successor": "OFupq0tY" + }, "CX30DB20": { "claims": [ "BBL/COEX TPE 30D", @@ -160,6 +1145,12 @@ ], "successor": "OF0pzFLc" }, + "DFL99": { + "claims": [ + "Volumic/Désactivé" + ], + "successor": "OFCuaCer" + }, "DREMC001": { "claims": [], "successor": null @@ -218,6 +1209,198 @@ "claims": [], "successor": null }, + "E1001": { + "claims": [ + "Creality/eSUN PLA+" + ], + "successor": "OFqINlYj" + }, + "E1002": { + "claims": [ + "Creality/eSUN PLA-Silk" + ], + "successor": "OFIRUqWi" + }, + "E1003": { + "claims": [ + "Creality/eSUN PLA-Matte" + ], + "successor": "OFDETOM6" + }, + "E1004": { + "claims": [ + "Creality/eSUN PLA-Lite" + ], + "successor": "OFhbolij" + }, + "E1005": { + "claims": [ + "Creality/eSUN PLA-CF" + ], + "successor": "OFnHc3D6" + }, + "E1006": { + "claims": [ + "Creality/eSUN PLA-HS" + ], + "successor": "OFOHOf2F" + }, + "E2001": { + "claims": [ + "Creality/eSUN PETG" + ], + "successor": "OF3kBrdA" + }, + "E2002": { + "claims": [ + "Creality/eSUN PETG+HS" + ], + "successor": "OFrdZ0cK" + }, + "E2003": { + "claims": [ + "Creality/eSUN PETG-Basic" + ], + "successor": "OFFbQscs" + }, + "E3001": { + "claims": [ + "Creality/eSUN ABS+" + ], + "successor": "OFTXduCM" + }, + "E4001": { + "claims": [ + "Creality/eSUN ASA+" + ], + "successor": "OFUmS5z5" + }, + "E8001": { + "claims": [ + "Creality/eSUN PET-Basic" + ], + "successor": "OFHaYaB1" + }, + "EABSB00": { + "claims": [ + "Elegoo/Elegoo ABS" + ], + "successor": "OFxOHhZw" + }, + "EASAB00": { + "claims": [ + "Elegoo/Elegoo ASA" + ], + "successor": "OFobDOW5" + }, + "EFL33": { + "claims": [ + "Eryone/Eryone PP-CF" + ], + "successor": "OFbh7HcA" + }, + "EFL40": { + "claims": [ + "Eryone/Eryone PLA-CF" + ], + "successor": "OFilAA3b" + }, + "EFL43": { + "claims": [ + "Eryone/Eryone PETG-CF" + ], + "successor": "OFNstOna" + }, + "EFL71": { + "claims": [ + "Eryone/Eryone PA" + ], + "successor": "OFS4jbj3" + }, + "EFL72": { + "claims": [ + "Eryone/Eryone PA-CF" + ], + "successor": "OFp9wdmf" + }, + "EFL73": { + "claims": [ + "Eryone/Eryone PA-GF" + ], + "successor": "OFkq7rPy" + }, + "EFL81": { + "claims": [ + "Eryone/Eryone ABS-CF" + ], + "successor": "OFQ1zgm3" + }, + "EFL82": { + "claims": [ + "Eryone/Eryone ASA-CF" + ], + "successor": "OFwyt1xt" + }, + "EFL90": { + "claims": [ + "Eryone/Eryone PLA" + ], + "successor": "OFmKU2Ha" + }, + "EFL91": { + "claims": [ + "Eryone/Eryone ABS" + ], + "successor": "OFOzwywz" + }, + "EFL92": { + "claims": [ + "Eryone/Eryone ASA" + ], + "successor": "OFVtIasg" + }, + "EFL93": { + "claims": [ + "Eryone/Eryone PETG" + ], + "successor": "OF8kJys9" + }, + "EFL941": { + "claims": [ + "Eryone/Eryone Silk PLA" + ], + "successor": "OF7nBAd3" + }, + "EFL95": { + "claims": [ + "Eryone/Eryone TPU" + ], + "successor": "OFhUjPA5" + }, + "EPAHTB00": { + "claims": [ + "Elegoo/Elegoo PAHT-CF" + ], + "successor": "OF0h7ERL" + }, + "EPCB00": { + "claims": [ + "Elegoo/Elegoo PC" + ], + "successor": "OFUyDDNv" + }, + "EPETGB00": { + "claims": [ + "Elegoo/Elegoo PETG" + ], + "successor": "OFLcd093" + }, + "EPLAB00": { + "claims": [ + "Elegoo/Elegoo PLA" + ], + "successor": "OFvgE0Zh" + }, "ESN02": { "claims": [ "OrcaFilamentLibrary/eSUN ePLA-LW" @@ -230,6 +1413,12 @@ ], "successor": "OF3kBrdA" }, + "ETPUB00": { + "claims": [ + "Elegoo/Elegoo TPU 95A" + ], + "successor": "OFmhJs5V" + }, "FDPLAST01": { "claims": [ "OrcaFilamentLibrary/FDplast ABS" @@ -266,6 +1455,31 @@ ], "successor": "OFfmZrI3" }, + "FFF01": { + "claims": [ + "Flashforge/Flashforge PLA" + ], + "successor": "OFDKgoqx" + }, + "FFF02": { + "claims": [ + "Flashforge/Flashforge ABS" + ], + "successor": "OF5SJ3jz" + }, + "FFF03": { + "claims": [ + "Flashforge/Flashforge PETG", + "Flashforge/Generic PETG" + ], + "successor": "OFMpxamb" + }, + "FFG01": { + "claims": [ + "Flashforge/Flashforge Generic PLA" + ], + "successor": "OFtTHNTj" + }, "FILAR0001": { "claims": [ "OrcaFilamentLibrary/FilAr PLA Bronce" @@ -680,53 +1894,373 @@ ], "successor": "OFOiJfLM" }, + "GABSB00": { + "claims": [ + "Elegoo/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "GASAB00": { + "claims": [ + "Elegoo/Generic ASA", + "Elegoo/Generic ASA-CF" + ], + "successor": "OFLPAxz3" + }, "GFABS": { "claims": [ "Anycubic/Anycubic ABS" ], - "successor": "OFf2b9wu" + "successor": "OF223rZv" }, "GFL92": { "claims": [ "Anycubic/Anycubic PLA" ], - "successor": "OFgK2Xvv" + "successor": "OFmjN2bc" }, "GFL93": { "claims": [ "Anycubic/Anycubic PLA+" ], - "successor": "OFgrGfPy" + "successor": "OFnmp6rt" }, "GFPLA": { "claims": [ "Anycubic/Anycubic PLA" ], - "successor": "OFgK2Xvv" + "successor": "OFmjN2bc" }, "GFPLA High Speed": { "claims": [ "Anycubic/Anycubic PLA High Speed" ], - "successor": "OFgSK1hL" + "successor": "OFjVOWfJ" }, "GFPLA Matte": { "claims": [ "Anycubic/Anycubic PLA Matte" ], - "successor": "OFvYfHPB" + "successor": "OFIE3vOf" }, "GFPLA Silk": { "claims": [ "Anycubic/Anycubic PLA Silk" ], - "successor": "OFjdTQd6" + "successor": "OFFwJWea" }, "GFPLA+": { "claims": [ "Anycubic/Anycubic PLA+" ], - "successor": "OFgrGfPy" + "successor": "OFnmp6rt" + }, + "GPAB00": { + "claims": [ + "Elegoo/Generic PA" + ], + "successor": "OFg8ndtj" + }, + "GPCB00": { + "claims": [ + "Elegoo/Generic PC" + ], + "successor": "OFLakOUI" + }, + "GPETB00": { + "claims": [ + "Elegoo/Generic PET" + ], + "successor": "OF6MOPWx" + }, + "GPETGB00": { + "claims": [ + "Elegoo/Generic PETG", + "Elegoo/Generic PETG-CF" + ], + "successor": "OFYPdQJh" + }, + "GPLAB00": { + "claims": [ + "Elegoo/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "Generic ABS @E3NG v1.2S": { + "claims": [ + "RH3D/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "Generic ABS @MK4S": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S HF0.4": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S HF0.5": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S HF0.6": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ABS @MK4S HF0.8": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Generic ASA @E3NG v1.2S": { + "claims": [ + "RH3D/Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "Generic FLEX @MK4S": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Generic FLEX @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Generic FLEX @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Generic PCCF @E3NG v1.2S": { + "claims": [ + "RH3D/Generic PCCF" + ], + "successor": "OFC5f4Ay" + }, + "Generic PETG @E3NG v1.2S": { + "claims": [ + "RH3D/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "Generic PETG @MK4S": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S HF0.4": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S HF0.5": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S HF0.6": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PETG @MK4S HF0.8": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Generic PLA @E3NG v1.2S": { + "claims": [ + "RH3D/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "Generic PLA @MK4S": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S HF0.4": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S HF0.5": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S HF0.6": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA @MK4S HF0.8": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Generic PLA Silk @MK4S": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Generic PLA Silk @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Generic PLA Silk @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Generic TPU @E3NG v1.2S": { + "claims": [ + "RH3D/Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "IQM1": { + "claims": [ + "iQ/Fiberthree PACF Pro P1" + ], + "successor": "OFjUGUIK" + }, + "IQM1011": { + "claims": [ + "iQ/VXL90 TiQ2 P2" + ], + "successor": "OFOJPAAS" + }, + "IQM2": { + "claims": [ + "iQ/Material4Print ABS Natur P1" + ], + "successor": "OFJWKoYG" + }, + "IQM3": { + "claims": [ + "iQ/Polymaker PETG Polymax black P1" + ], + "successor": "OFaeIx7W" + }, + "IQM7": { + "claims": [ + "iQ/Fiberthree PACF Pro P2" + ], + "successor": "OF6kj4jI" + }, + "LHF_abs": { + "claims": [ + "LH/LHS ABS" + ], + "successor": "OFztQ7rO" + }, + "LHF_asa": { + "claims": [ + "LH/LHS ASA" + ], + "successor": "OFaP2SsH" + }, + "LHF_ftpuf": { + "claims": [ + "LH/LHS TPU Foamy 78A" + ], + "successor": "OFngcE81" + }, + "LHF_pccf": { + "claims": [ + "LH/LHS PC CF" + ], + "successor": "OFu0fjPJ" + }, + "LHF_pctg": { + "claims": [ + "LH/LHS PCTG" + ], + "successor": "OFBJAdLw" + }, + "LHF_petg": { + "claims": [ + "LH/LHS PETG" + ], + "successor": "OFRJ325z" + }, + "LHF_pla": { + "claims": [ + "LH/LHS PLA" + ], + "successor": "OFyoBZdm" + }, + "LHF_ptpu_pl": { + "claims": [ + "LH/LHS TPU" + ], + "successor": "OFIZMQwM" }, "NIT01": { "claims": [ @@ -953,6 +2487,10 @@ ], "successor": "OFg57Nmc" }, + "OGFC99": { + "claims": [], + "successor": "OFLakOUI" + }, "OGFG00": { "claims": [ "OrcaFilamentLibrary/Bambu PETG Basic" @@ -989,6 +2527,10 @@ ], "successor": "OFu1evlr" }, + "OGFG99": { + "claims": [], + "successor": "OFYPdQJh" + }, "OGFGG300": { "claims": [ "OrcaFilamentLibrary/GreenGate3D PETG" @@ -1080,6 +2622,13 @@ ], "successor": "OFmpMwxS" }, + "OGFL96": { + "claims": [ + "Flashforge/Generic PLA Silk", + "Sovol/Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, "OGFL98": { "claims": [ "OrcaFilamentLibrary/Generic PLA-CF" @@ -1149,6 +2698,10 @@ ], "successor": "OFQLcbps" }, + "OGFN99": { + "claims": [], + "successor": "OFg8ndtj" + }, "OGFNMK00": { "claims": [ "OrcaFilamentLibrary/Numakers PLA+" @@ -1396,6 +2949,12 @@ ], "successor": "OFLJ8S6I" }, + "OGFSNL08": { + "claims": [ + "Sovol/SUNLU PETG" + ], + "successor": "OF2GCW1l" + }, "OGFT01": { "claims": [ "OrcaFilamentLibrary/Bambu PET-CF" @@ -1431,42 +2990,648 @@ ], "successor": "OFDvqJ6n" }, + "P1001": { + "claims": [ + "Creality/Panchroma PLA Satin" + ], + "successor": "OFPkCJKE" + }, + "P1002": { + "claims": [ + "Creality/PolySonic PLA Pro" + ], + "successor": "OFKbdiiJ" + }, + "P1003": { + "claims": [ + "Creality/Panchroma PLA Matte" + ], + "successor": "OFrOh600" + }, + "P1004": { + "claims": [ + "Creality/PolySonic PLA" + ], + "successor": "OF66KUAN" + }, "P11851ba": { "claims": [ "Artillery/Artillery PET" ], - "successor": "OFw0qp7w" + "successor": "OFb5EEM3" }, "P284941e": { "claims": [ "Artillery/Artillery PETG", "Artillery/Artillery PETG Basic" ], - "successor": "OFEYKrjb" + "successor": "OFilnglt" }, "P2fbf0c0": { "claims": [ "Artillery/Artillery TPU" ], - "successor": "OFTbsWVg" + "successor": "OFcJDtTx" }, "P39db358": { "claims": [ "Artillery/Artillery ABS" ], - "successor": "OFw1S8lL" + "successor": "OFgXgt98" + }, + "P510cfa0": { + "claims": [ + "Cubicon/Cubicon PLA" + ], + "successor": "OFEwRwmL" + }, + "P510cfa1": { + "claims": [ + "Cubicon/Cubicon PLA+" + ], + "successor": "OF7tt7DO" + }, + "P510cfa2": { + "claims": [ + "Cubicon/Cubicon PLAi21" + ], + "successor": "OFRhBryT" + }, + "P510cfb0": { + "claims": [ + "Cubicon/Cubicon ABS" + ], + "successor": "OFpDo5Ix" + }, + "P510cfb1": { + "claims": [ + "Cubicon/Cubicon ABS-A100" + ], + "successor": "OFy8tYJE" + }, + "P510cfb2": { + "claims": [ + "Cubicon/Cubicon ABSk" + ], + "successor": "OForhBi4" + }, + "P510cfc0": { + "claims": [ + "Cubicon/Cubicon PETG" + ], + "successor": "OFoBTKmn" + }, + "P510cfd0": { + "claims": [ + "Cubicon/Cubicon PA-CF" + ], + "successor": "OFiEz2XI" + }, + "P510eff9": { + "claims": [ + "Ginger Additive/Ginger Generic PETG" + ], + "successor": "OFsGqI4y" }, "P8163162": { "claims": [ "Artillery/Artillery PVA" ], - "successor": "OFc2SnEp" + "successor": "OFkx5MEe" }, "P87436f6": { "claims": [ "Artillery/Artillery ASA" ], - "successor": "OFtmT4Nd" + "successor": "OF5YVJXH" + }, + "Pfcf9c4c": { + "claims": [ + "Artillery/Artillery PLA" + ], + "successor": "OFzY7N3Z" + }, + "Prusa Generic ABS @CORE One": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ABS @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFvGc67v" + }, + "Prusa Generic ASA @CORE One": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic ASA @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusa Generic PETG @CORE One": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PETG @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OF1Id239" + }, + "Prusa Generic PLA @CORE One": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFiCHnso" + }, + "Prusa Generic PLA Silk @CORE One": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Prusa Generic PLA Silk @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Prusa Generic PLA Silk @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFHFZ1Te" + }, + "Prusa Generic TPU @CORE One": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Prusa Generic TPU @CORE One 0.6": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Prusa Generic TPU @CORE One 0.8": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFbenYUK" + }, + "Prusament ASA @CORE One": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One 0.6": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One 0.8": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusament ASA" + ], + "successor": "OFmFwUWM" + }, + "Prusament ASA @MK4S": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S 0.6": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S 0.8": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S HF0.4": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S HF0.5": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S HF0.6": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament ASA @MK4S HF0.8": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFoJcr46" + }, + "Prusament PA-CF @CORE One": { + "claims": [ + "Prusa/Prusament PA-CF" + ], + "successor": "OF54SvEe" + }, + "Prusament PA-CF @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PA-CF" + ], + "successor": "OF54SvEe" + }, + "Prusament PA-CF @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PA-CF" + ], + "successor": "OF54SvEe" + }, + "Prusament PC Blend @CORE One": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC Blend @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusament PC Blend" + ], + "successor": "OFvDbkFq" + }, + "Prusament PC-CF @CORE One": { + "claims": [ + "Prusa/Prusament PC-CF" + ], + "successor": "OFjz0a3m" + }, + "Prusament PC-CF @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PC-CF" + ], + "successor": "OFjz0a3m" + }, + "Prusament PC-CF @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PC-CF" + ], + "successor": "OFjz0a3m" + }, + "Prusament PETG @CORE One": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PETG @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusament PETG" + ], + "successor": "OFkR8E2c" + }, + "Prusament PLA @CORE One": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One HF 0.4": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One HF 0.5": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One HF 0.6": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PLA @CORE One HF 0.8": { + "claims": [ + "Prusa/Prusament PLA" + ], + "successor": "OFnO4wnf" + }, + "Prusament PVB @CORE One": { + "claims": [ + "Prusa/Prusament PVB" + ], + "successor": "OFh7mvPO" + }, + "Prusament PVB @CORE One 0.6": { + "claims": [ + "Prusa/Prusament PVB" + ], + "successor": "OFh7mvPO" + }, + "Prusament PVB @CORE One 0.8": { + "claims": [ + "Prusa/Prusament PVB" + ], + "successor": "OFh7mvPO" + }, + "Prusament rPLA @CORE One": { + "claims": [ + "Prusa/Prusament rPLA" + ], + "successor": "OFWRITFw" + }, + "Prusament rPLA @CORE One 0.6": { + "claims": [ + "Prusa/Prusament rPLA" + ], + "successor": "OFWRITFw" + }, + "Prusament rPLA @CORE One 0.8": { + "claims": [ + "Prusa/Prusament rPLA" + ], + "successor": "OFWRITFw" + }, + "SMCFB001": { + "claims": [ + "SeeMeCNC/SeeMeCNC ABS" + ], + "successor": "OFR0gODA" + }, + "SMCFG001": { + "claims": [ + "SeeMeCNC/SeeMeCNC PETG" + ], + "successor": "OFxDHUX8" + }, + "SMCFG002": { + "claims": [ + "SeeMeCNC/SeeMeCNC PETG-CF" + ], + "successor": "OFaRjiIm" + }, + "SMCFL001": { + "claims": [ + "SeeMeCNC/SeeMeCNC PLA" + ], + "successor": "OFbSChKb" + }, + "SMCFN001": { + "claims": [ + "SeeMeCNC/SeeMeCNC PA-CF" + ], + "successor": "OF0b7M1z" + }, + "SMCFU001": { + "claims": [ + "SeeMeCNC/SeeMeCNC TPU" + ], + "successor": "OFyFyLIp" }, "VLMNT01": { "claims": [ diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 3945c2ec8d..6f12554f14 100644 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -60,6 +60,11 @@ Run from anywhere: python3 scripts/assign_filament_ids.py drops listed never-shipped ids from lineage instead) --add-hint "OLD=NEW" record a cross-island succession hint (standalone) + --retire "OLD=NEW" + retire a vanished non-island shipped id with an explicit + successor (standalone; for lineage the claim vote can no + longer see because the claims migrated while another + declarer kept the id alive) --remint VENDOR re-derive VENDOR's declared ids from their triples and rewrite mismatches in place (repeatable) --drop-redundant-ids VENDOR @@ -1121,6 +1126,69 @@ def add_hints(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): return 0 +def retire_ids(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): + """--retire "OLD=NEW": retire a vanished non-island id with an explicit successor. + + For shipped ids whose lineage the claim vote can no longer see: the id + vanished from the tree in an earlier phase's shadow — another declarer kept + it alive while its claims migrated — so no --update-snapshot run ever saw + the id vanish while its claims could still vote. OLD must be absent from + the tree (declared or effective) and outside every reserved id space + (island ids forward via --add-hint; user-custom ids are never system ids), + and must not already be retired or hinted. NEW must be a live tree id. + Appends {"claims": [], "successor": NEW}. All pairs validate before + anything is written. Returns 0 on success. + """ + _utf8_console() + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + ledger = load_ledger(retired_path) + live = set(analysis["ids"]) + declared_anywhere = set() + for vids in analysis["declared_ids"].values(): + declared_anywhere |= set(vids) + parsed = [] + for pair in pairs: + if "=" not in pair: + print_error(f'--retire expects "OLD=NEW", got "{pair}"') + errors += 1 + continue + old, new = pair.split("=", 1) + is_reserved, _island = reserved_space_owner(old) + if old in ledger["retired"]: + print_error(f'--retire: "{old}" is already retired') + errors += 1 + elif old in ledger["hints"]: + print_error(f'--retire: "{old}" is a hint key; it already forwards') + errors += 1 + elif is_reserved: + print_error( + f'--retire: "{old}" sits in a reserved id space; island ids ' + f"forward via --add-hint, user-custom ids are never retired") + errors += 1 + elif old in live or old in declared_anywhere: + print_error( + f'--retire: "{old}" still lives in the tree; re-mint or delete ' + f"its declarers first (an id that vanishes normally gets its " + f"successor voted by --update-snapshot)") + errors += 1 + elif new not in live: + print_error(f'--retire: successor "{new}" is not a live tree id') + errors += 1 + else: + parsed.append((old, new)) + if errors: + return 1 + for old, new in parsed: + ledger["retired"][old] = {"claims": [], "successor": new} + print_info(f'retired: "{old}" -> "{new}"') + write_ledger(retired_path, {"retired": ledger["retired"], "hints": ledger["hints"]}) + return 0 + + # --------------------------------------------------------------------------- # Byte-preserving profile edits # --------------------------------------------------------------------------- @@ -1336,6 +1404,9 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_ triple; rewrite mismatching declarations in place (byte-preserving). Never touches the snapshot — run --update-snapshot afterwards and review the diff. + A declaration already equal to ANY salt iteration of its own triple is + mint-conformant (check 3) and left alone — deliberate salt splits (distinct + presets of one product kept apart for per-printer AMS matching) survive. A candidate id is blocked when it is a retired key, a hints key, or occurs in the tree with any triple set other than exactly {T}. Equal-triple reuse is convergence: the same product must end up under the same id everywhere. @@ -1393,6 +1464,13 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_ if is_island_declaration(vendor, fid): continue scanned += 1 + # Any salt iteration of the declarer's own triple is already + # mint-conformant (check 3) — leave it. This keeps deliberate salt + # splits (two presets of one product that must stay distinct for + # per-printer AMS matching, validator -f) stable across re-mints. + if fid in {generate_filament_id(*rec["triple"], salt=s) + for s in range(MAX_CHECK_SALT + 1)}: + continue want = want_id(rec["triple"]) if fid == want: continue @@ -1481,6 +1559,10 @@ def main(argv=None): help="record a cross-island succession hint (island-owned " "live id -> live id) in the shipped ledger; standalone, " "repeatable") + parser.add_argument("--retire", metavar='"OLD=NEW"', action="append", + help="retire a vanished non-island shipped id with an " + "explicit successor (for lineage the claim vote can " + "no longer see); standalone, repeatable") parser.add_argument("--remint", metavar="VENDOR", action="append", help="re-derive VENDOR's declared filament_ids from their " "triples and rewrite mismatches in place; repeatable") @@ -1507,10 +1589,16 @@ def main(argv=None): return 0 if args.add_hint: - if args.update_snapshot or args.check or args.remint or args.drop_redundant_ids: + if (args.update_snapshot or args.check or args.remint + or args.drop_redundant_ids or args.retire): parser.error("--add-hint runs standalone") return add_hints(args.add_hint, args.profiles, RETIRED_PATH) + if args.retire: + if args.update_snapshot or args.check or args.remint or args.drop_redundant_ids: + parser.error("--retire runs standalone") + return retire_ids(args.retire, args.profiles, RETIRED_PATH) + if args.remint: if args.update_snapshot or args.check or args.drop_redundant_ids: parser.error("--remint cannot be combined with other modes") diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 69e671d74d..4349592b25 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1,39 +1,6 @@ { "alias_exceptions": [ - "Anker/Anker Generic PC @base", - "Anycubic/Anycubic Generic PC", - "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", - "BBL/Bambu PC @base", - "BBL/Bambu PC FR @base", "BBL/COEX NYLEX UNFILLED @BBL X1C", - "BBL/Generic PC @base", - "Blocks/Blocks Generic PC", - "Creality/Creality Generic PC", - "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/Hyper PC @K2 Plus-all", - "Creality/Hyper PC @K2 Pro-all", - "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", - "Elegoo/Elegoo PC @base", - "Elegoo/Generic PC @base", - "FLSun/FLSun Generic PC", "Flashforge/Flashforge ABS Basic @FF C5", "Flashforge/Flashforge ABS Basic @FF C5P", "Flashforge/Flashforge ABS-GF @FF C5", @@ -104,16 +71,9 @@ "Flashforge/Generic TPU-90A @FF C5P", "Flashforge/Generic TPU-95A @FF C5", "Flashforge/Generic TPU-95A @FF C5P", - "FlyingBear/FlyingBear Generic PC", - "InfiMech/InfiMech Generic PC", "Lulzbot/Lulzbot 2.85mm ABS", "Lulzbot/Lulzbot 2.85mm PETG", "Lulzbot/Lulzbot 2.85mm PLA", - "OrcaArena/Arena PC @base", - "OrcaArena/OrcaArena Generic PC @base", - "Qidi/Qidi Generic PC", - "Ratrig/RatRig Generic PC", - "SecKit/SecKit Generic PC", "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", @@ -142,31 +102,10 @@ "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 PC", - "Tiertime/Tiertime Generic PC@300HS", - "Tiertime/Tiertime PC", - "Tiertime/Tiertime PC@300HS", - "Volumic/Volumic PC", - "Volumic/Volumic PC (Performance)", - "Vzbot/Vzbot Generic PC", - "re3D/re3D PC", - "re3D/re3D PC @0.4 nozzle", - "re3D/re3D PC @0.8 nozzle" + "Sovol/Sovol Zero TPU" ], "id_overrides": [ - "Anker/Anker Generic PC @base", "Anycubic/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic Generic PC", - "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 PETG @Anycubic Kobra 3 0.4 nozzle", "Anycubic/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", "Anycubic/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", @@ -223,18 +162,16 @@ "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery TPU", "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "BBL/Bambu PC @base", - "BBL/Bambu PC FR @base", - "BBL/Generic PC @base", "BBL/Generic SBS", - "Blocks/Blocks Generic PC", + "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", "Chuanying/Chuanying Generic HIPS", "Chuanying/Chuanying Generic PVA", + "Chuanying/Chuanying PETG @Chuanying X1 0.25 Nozzle", "Co Print/CoPrint Generic ABS", "Co Print/CoPrint Generic PETG", "Co Print/CoPrint Generic TPU", + "Comgrow/Comgrow T300 PLA", "Creality/Creality Generic ASA-CF @Hi-all", - "Creality/Creality Generic PC", "Creality/Creality Generic PETG-CF @Hi-all", "Creality/Creality Generic PLA High Speed @Ender-3V3-all", "Creality/Creality Generic PLA High Speed @Hi-all", @@ -249,14 +186,6 @@ "Creality/Creality Generic PLA Silk @K1-all", "Creality/Creality Generic PLA Silk @K2-all", "Creality/Creality Generic PLA Wood @Hi-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/Hyper PC @K2 Plus-all", - "Creality/Hyper PC @K2 Pro-all", "Cubicon/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", @@ -271,15 +200,12 @@ "Cubicon/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PA-CF @base", "Cubicon/Cubicon PC @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PC @base", "Cubicon/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PETG @base", "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", @@ -291,17 +217,10 @@ "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", "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", "Dremel/Dremel Generic PLA @3D20 all", "Dremel/Dremel Generic PLA @3D40 all", "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Elegoo ASA-CF @base", - "Elegoo/Elegoo PC @base", "Elegoo/Elegoo PC-FR @base", "Elegoo/Elegoo PET-CF @base", "Elegoo/Elegoo PETG HF @base", @@ -325,17 +244,27 @@ "Elegoo/Elegoo Rapid PLA+ @base", "Elegoo/Elegoo Rapid TPU 95A @base", "Elegoo/Generic ABS-CF @Elegoo Centauri", + "Elegoo/Generic ASA-CF @Elegoo Centauri", "Elegoo/Generic PA6-CF @Elegoo", - "Elegoo/Generic PC @base", "Elegoo/Generic PC-CF @Elegoo", "Elegoo/Generic PET-CF @Elegoo Centauri", "Elegoo/Generic PETG PRO @Elegoo", + "Elegoo/Generic PETG-CF @Elegoo Centauri", "Elegoo/Generic PLA Matte @Elegoo", - "FLSun/FLSun Generic PC", + "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 PC @FF G4 0.6 HF nozzle", "Flashforge/FlashForge PC @FF G4 0.6 nozzle", "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", @@ -350,6 +279,7 @@ "Flashforge/FlashForge PPS @FF G4P 0.8 HF nozzle", "Flashforge/FlashForge PPS-CF @FF G4 0.6 nozzle", "Flashforge/FlashForge PPS-CF @FF G4P 0.6 nozzle", + "Flashforge/Flashforge ABS @FF AD5M 0.25 Nozzle", "Flashforge/Flashforge ABS Basic", "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", "Flashforge/Flashforge ABS Basic @FF AD5X", @@ -495,6 +425,7 @@ "Flashforge/Flashforge PET-CF", "Flashforge/Flashforge PET-CF @FF C5", "Flashforge/Flashforge PET-CF @FF C5P", + "Flashforge/Flashforge PETG @FF AD5M 0.25 Nozzle", "Flashforge/Flashforge PETG Basic", "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PETG Pro", @@ -803,6 +734,7 @@ "Flashforge/FusRock S-Multi @FF C5P", "Flashforge/FusRock S-PAHT @FF C5", "Flashforge/FusRock S-PAHT @FF C5P", + "Flashforge/Generic ABS @Flashforge AD4", "Flashforge/Generic ASA @Flashforge AD4", "Flashforge/Generic PET @FF G4", "Flashforge/Generic PET @FF G4 0.6 HF nozzle", @@ -812,6 +744,7 @@ "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", "Flashforge/Generic PET @FF G4P 0.6 nozzle", "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", + "Flashforge/Generic PETG @Flashforge AD4", "Flashforge/Generic PETG-CF10 @Flashforge AD4", "Flashforge/Generic PLA @Flashforge AD4", "Flashforge/Generic PLA High Speed @Flashforge AD4", @@ -835,19 +768,12 @@ "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", "Flashforge/Polymaker Generic CoPA", "Flashforge/Polymaker Generic S1", - "FlyingBear/FlyingBear Generic PC", - "InfiMech/InfiMech Generic PC", "Lulzbot/Lulzbot 2.85mm ABS", "Lulzbot/Lulzbot 2.85mm PETG", "Lulzbot/Lulzbot 2.85mm PLA", - "OrcaArena/Arena PC @base", - "OrcaArena/OrcaArena Generic PC @base", "OrcaFilamentLibrary/AliZ PETG-CF @base", "OrcaFilamentLibrary/AliZ PETG-Metal @base", - "OrcaFilamentLibrary/Bambu PC @base", - "OrcaFilamentLibrary/Bambu PC FR @base", "OrcaFilamentLibrary/Elegoo ASA-CF @base", - "OrcaFilamentLibrary/Elegoo PC @base", "OrcaFilamentLibrary/Elegoo PC-FR @base", "OrcaFilamentLibrary/Elegoo PET-CF @base", "OrcaFilamentLibrary/Elegoo PETG HF @base", @@ -930,121 +856,9 @@ "OrcaFilamentLibrary/FilAr PLA-mate Uva", "OrcaFilamentLibrary/FilAr PLA-mate Verde", "OrcaFilamentLibrary/FilAr PLA-mate Violeta", - "OrcaFilamentLibrary/Generic PC @System", "OrcaFilamentLibrary/PolyLite Dual PLA @base", "OrcaFilamentLibrary/PolyTerra Dual PLA @System", - "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 @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 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 ASA HF @base", - "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 PC HF @base", - "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 @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 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 @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 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 TPU @CORE One", - "Prusa/Prusa Generic TPU @CORE One 0.6", - "Prusa/Prusa Generic TPU @CORE One 0.8", - "Prusa/Prusa Generic TPU @MK4S 0.6", - "Prusa/Prusa Generic TPU @MK4S 0.8", - "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 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 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 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 0.6", - "Prusa/Prusament rPLA @CORE One 0.8", "Qidi/QIDI ABS Rapido 0.2 nozzle", "Qidi/QIDI ABS Rapido 0.6 nozzle", "Qidi/QIDI ABS Rapido 0.8 nozzle", @@ -1160,7 +974,6 @@ "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 PC", "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", @@ -1170,14 +983,9 @@ "Qidi/Qidi PC-ABS-FR @Qidi X-Plus 4 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", - "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 Generic PC", - "SecKit/SecKit Generic PC", + "Snapmaker/PolyLite Dual PLA @0.2 nozzle", + "Snapmaker/PolyLite J1 PLA", + "Snapmaker/PolyLite J1 PLA @0.2 nozzle", "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", @@ -1219,420 +1027,12 @@ "Sovol/Sovol Zero PLA Silk", "Sovol/Sovol Zero PLA Silk HS Nozzle", "Sovol/Sovol Zero TPU", - "Tiertime/Tiertime Generic PC", - "Tiertime/Tiertime Generic PC@300HS", - "Tiertime/Tiertime PC", - "Tiertime/Tiertime PC@300HS", - "Volumic/Volumic PC", - "Volumic/Volumic PC (Performance)", - "Vzbot/Vzbot Generic PC", + "Wanhao France/YUMI PETG", "Wanhao France/YUMI PLA Bowden", "Wanhao France/YUMI PLA Direct Drive", - "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 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.6 nozzle", - "Z-Bolt/Generic PLA @Z-Bolt 0.8 nozzle", - "re3D/re3D PC", - "re3D/re3D PC @0.4 nozzle", - "re3D/re3D PC @0.8 nozzle" + "Z-Bolt/Generic ABS HT @Z-Bolt Base" ], "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" - ], - "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" - ], - "141703112701": [ - "Snapmaker/Snapmaker PLA SnapSpeed" - ], - "1417031127011": [ - "Snapmaker/Snapmaker PLA Lite" - ], - "144877656": [ - "Snapmaker/Snapmaker J1 ASA" - ], - "1480063856": [ - "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" - ], - "1682237920": [ - "Snapmaker/Snapmaker ABS" - ], - "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" - ], - "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 TPU" - ], - "29716562900": [ - "Snapmaker/Snapmaker TPU" - ], - "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 TPU" - ], - "4227461134": [ - "Snapmaker/Snapmaker Breakaway Support For PLA", - "Snapmaker/Snapmaker J1 PVA" - ], - "4235401834": [ - "Snapmaker/Snapmaker J1 PETG-CF" - ], - "581236806": [ - "Snapmaker/Snapmaker PA-CF" - ], "BABB00": [ "BBL/BETA ABS" ], @@ -1756,36 +1156,6 @@ "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 PLA-CF" - ], "BTUB00": [ "BBL/BETA TPU 90A" ], @@ -1798,174 +1168,29 @@ "BTUB03": [ "BBL/BETA TPU 98A" ], - "DFL99": [ - "Volumic/Désactivé" - ], - "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" - ], - "EFL33": [ - "Eryone/Eryone PP-CF" - ], - "EFL40": [ - "Eryone/Eryone PLA-CF" - ], - "EFL43": [ - "Eryone/Eryone PETG-CF" - ], - "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" - ], - "EPETGB00": [ - "Elegoo/Elegoo PETG" - ], - "EPLAB00": [ - "Elegoo/Elegoo PLA" - ], - "ETPUB00": [ - "Elegoo/Elegoo TPU 95A" - ], - "FFF01": [ - "Flashforge/Flashforge PLA" - ], - "FFF02": [ - "Flashforge/Flashforge ABS" - ], - "FFF03": [ - "Flashforge/Flashforge PETG", - "Flashforge/Generic PETG" - ], - "FFG01": [ - "Flashforge/Flashforge Generic PLA" - ], - "GABSB00": [ - "Elegoo/Generic ABS" - ], - "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", - "Tiertime/Tiertime PLA" + "BBL/Bambu PLA Basic" ], "GFA01": [ - "BBL/Bambu PLA Matte", - "OrcaArena/Arena PLA Matte", - "WonderMaker/WonderMaker PLA Matte" + "BBL/Bambu PLA Matte" ], "GFA02": [ - "BBL/Bambu PLA Metal", - "OrcaArena/Arena PLA Metal", - "WonderMaker/WonderMaker PLA Metal" - ], - "GFA03": [ - "OrcaArena/Arena PLA Impact" + "BBL/Bambu PLA Metal" ], "GFA05": [ - "BBL/Bambu PLA Silk", - "OrcaArena/Arena PLA Silk", - "Qidi/Qidi Generic PLA Silk", - "WonderMaker/WonderMaker PLA Silk" + "BBL/Bambu PLA Silk" ], "GFA06": [ "BBL/Bambu PLA Silk+" ], "GFA07": [ - "BBL/Bambu PLA Marble", - "OrcaArena/Arena PLA Marble", - "WonderMaker/WonderMaker PLA Marble" + "BBL/Bambu PLA Marble" ], "GFA08": [ - "BBL/Bambu PLA Sparkle", - "OrcaArena/Arena PLA Sparkle" + "BBL/Bambu PLA Sparkle" ], "GFA09": [ - "BBL/Bambu PLA Tough", - "OrcaArena/Arena PLA Tough" + "BBL/Bambu PLA Tough" ], "GFA10": [ "BBL/Bambu PLA Tough+" @@ -1983,8 +1208,7 @@ "BBL/Bambu PLA Galaxy" ], "GFA16": [ - "BBL/Bambu PLA Wood", - "WonderMaker/WonderMaker PLA Wood" + "BBL/Bambu PLA Wood" ], "GFA17": [ "BBL/Bambu PLA Translucent" @@ -1993,41 +1217,13 @@ "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+" - ], - "GFASA": [ - "Anycubic/Anycubic ASA" + "BBL/Bambu PLA-CF" ], "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", - "Tiertime/Tiertime ABS" + "BBL/Bambu ABS" ], "GFB01": [ - "BBL/Bambu ASA", - "Tiertime/Tiertime ASA", - "WonderMaker/WonderMaker ASA" - ], - "GFB01_01": [ - "Tiertime/Tiertime ASA" + "BBL/Bambu ASA" ], "GFB02": [ "BBL/Bambu ASA-Aero" @@ -2045,276 +1241,52 @@ "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", - "FLSun/FLSun Generic ASA", - "FLSun/FLSun S1 ASA", - "FLSun/FLSun T1 ASA", - "OrcaArena/OrcaArena Generic ASA", - "Prusa/Prusa Generic ASA", - "Prusa/Prusament 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" + "BBL/Generic ASA" ], "GFB99": [ - "Anker/Anker Generic ABS", - "Anker/Anker Generic ABS 0.2 nozzle", - "Anker/Anker Generic ABS 0.25 nozzle", - "Anycubic/Anycubic Generic ABS", - "Artillery/Artillery Generic ABS", - "BBL/Generic ABS", - "Chuanying/Chuanying ABS", - "Chuanying/Chuanying Generic ABS", - "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 Generic ABS", - "Flashforge/Generic ABS", - "FlyingBear/FlyingBear Generic ABS", - "InfiMech/InfiMech Generic ABS", - "Lulzbot/Lulzbot 2.85mm ABS", - "OrcaArena/OrcaArena Generic ABS", - "Prusa/Prusa Generic ABS", - "Qidi/Qidi Generic ABS", - "Ratrig/RatRig Generic ABS", - "SecKit/SecKit Generic ABS", - "Tiertime/Tiertime Generic ABS", - "Volumic/Volumic ABS Ultra", - "Volumic/Volumic ABS 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" + "BBL/Generic ABS" ], "GFC00": [ - "BBL/Bambu PC", - "OrcaArena/Arena PC", - "Tiertime/Tiertime PC" - ], - "GFC00_01": [ - "Tiertime/Tiertime PC" + "BBL/Bambu 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", - "InfiMech/InfiMech Generic PC", - "OrcaArena/OrcaArena Generic PC", - "Prusa/Prusa Generic PC", - "Prusa/Prusament PC Blend", - "Qidi/Qidi Generic PC", - "Ratrig/RatRig Generic PC", - "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" + "BBL/Generic PC" ], "GFG00": [ - "BBL/Bambu PETG Basic", - "OrcaArena/Arena PETG Basic", - "Tiertime/Tiertime PETG", - "WonderMaker/WonderMaker PETG Basic" - ], - "GFG00_01": [ - "Tiertime/Tiertime PETG" + "BBL/Bambu PETG Basic" ], "GFG01": [ - "BBL/Bambu PETG Translucent", - "re3D/re3D Greengate rPETG" + "BBL/Bambu PETG Translucent" ], "GFG02": [ - "BBL/Bambu PETG HF", - "re3D/re3D rPP" - ], - "GFG03": [ - "re3D/re3D PETG" + "BBL/Bambu PETG HF" ], "GFG50": [ - "BBL/Bambu PETG-CF", - "OrcaArena/Arena PETG-CF" + "BBL/Bambu PETG-CF" ], "GFG60": [ - "BBL/PolyLite PETG", - "Snapmaker/PolyLite PETG" + "BBL/PolyLite PETG" ], "GFG96": [ "BBL/Generic PETG HF" ], "GFG97": [ - "BBL/Generic PCTG", - "Tiertime/Tiertime Generic PCTG" - ], - "GFG97-01": [ - "Tiertime/Tiertime Generic PCTG" + "BBL/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" + "BBL/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", - "Artillery/Artillery Generic PETG", - "BBL/Generic PETG", - "CONSTRUCT3D/C1 Generic PETG", - "Chuanying/Chuanying Generic PETG", - "Chuanying/Chuanying PETG", - "CoLiDo/CoLiDo Generic PETG", - "CoLiDo/CoLiDo PETG", - "Comgrow/Comgrow Generic PETG", - "Creality/Creality Generic PETG", - "Custom/Generic PETG", - "DeltaMaker/DeltaMaker Generic PETG", - "FLSun/FLSun Generic PETG", - "FLSun/FLSun S1 PETG", - "FLSun/FLSun T1 PETG", - "Flashforge/Flashforge Generic PETG", - "Flashforge/Generic PETG", - "FlyingBear/FlyingBear Generic PETG", - "FlyingBear/FlyingBear PETG Basic", - "InfiMech/InfiMech Generic PETG", - "Lulzbot/Lulzbot 2.85mm PETG", - "MagicMaker/MM Generic PEEK", - "OrcaArena/OrcaArena Generic PETG", - "Qidi/Qidi Generic PETG", - "Ratrig/RatRig Generic PETG", - "SecKit/SecKit Generic PETG", - "Tiertime/Tiertime Generic PETG", - "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" + "BBL/Generic PETG" ], "GFL00": [ - "BBL/PolyLite PLA", - "OrcaArena/PolyLite PLA", - "Snapmaker/PolyLite PLA" + "BBL/PolyLite PLA" ], "GFL01": [ - "BBL/PolyTerra PLA", - "OrcaArena/PolyTerra PLA", - "Snapmaker/PolyTerra PLA" + "BBL/PolyTerra PLA" ], "GFL03": [ "BBL/eSUN PLA+" @@ -2326,62 +1298,11 @@ "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" + "BBL/Fiberon PETG-ESD" ], "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" ], @@ -2398,13 +1319,10 @@ "BBL/Fiberon PETG-rCF" ], "GFL56": [ - "BBL/Fiberon PA12-CF10", - "Snapmaker/Fiberon PA12-CF10" + "BBL/Fiberon PA12-CF10" ], "GFL57": [ - "Anycubic/Fiberon PA6-CF20", - "BBL/Fiberon PA6-CF20", - "Snapmaker/Fiberon PA6-CF20" + "BBL/Fiberon PA6-CF20" ], "GFL58": [ "BBL/Fiberon PA6-GF25" @@ -2419,218 +1337,53 @@ "BBL/Fiberon PETG-rCF08" ], "GFL62": [ - "BBL/PolyLite CosPLA", - "Snapmaker/PolyLite CosPLA" + "BBL/PolyLite CosPLA" ], "GFL63": [ - "BBL/PolyLite PLA Galaxy", - "Snapmaker/PolyLite PLA Galaxy" + "BBL/PolyLite PLA Galaxy" ], "GFL64": [ - "BBL/PolyLite PLA Glow", - "Snapmaker/PolyLite PLA Glow" + "BBL/PolyLite PLA Glow" ], "GFL65": [ - "BBL/PolyLite PLA Luminous", - "Snapmaker/PolyLite PLA Luminous" + "BBL/PolyLite PLA Luminous" ], "GFL66": [ - "BBL/PolyLite PLA Neon", - "Snapmaker/PolyLite PLA Neon" + "BBL/PolyLite PLA Neon" ], "GFL67": [ - "BBL/PolyLite PLA Starlight", - "Snapmaker/PolyLite PLA Starlight" + "BBL/PolyLite PLA Starlight" ], "GFL68": [ - "BBL/PolyLite PLA Translucent", - "Snapmaker/PolyLite PLA Translucent" + "BBL/PolyLite PLA Translucent" ], "GFL69": [ - "BBL/PolyTerra PLA Marble", - "Snapmaker/PolyTerra PLA Marble" + "BBL/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" - ], - "GFL94": [ - "Anycubic/Anycubic PLA Slik" + "BBL/PolyTerra PLA+" ], "GFL95": [ - "Anker/Anker Generic PLA+", - "Anker/Anker Generic PLA+ 0.2 nozzle", - "Anker/Anker Generic PLA+ 0.25 nozzle", - "BBL/Generic PLA High Speed", - "Tiertime/Tiertime Generic PLA High Speed" - ], - "GFL95_01": [ - "Tiertime/Tiertime Generic PLA High Speed" + "BBL/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", - "BBL/Generic PLA Silk", - "Tiertime/Tiertime Generic PLA Silk" - ], - "GFL96_01": [ - "Tiertime/Tiertime Generic PLA Silk" - ], - "GFL97": [ - "Anycubic/Anycubic PLA SE" + "BBL/Generic PLA Silk" ], "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 Generic 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" + "BBL/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", - "Artillery/Artillery Generic PLA", - "BBL/Generic PLA", - "CONSTRUCT3D/C1 Generic PLA", - "Chuanying/Chuanying Generic PLA", - "Chuanying/Chuanying PLA", - "Co Print/CoPrint Generic PLA", - "Comgrow/Comgrow Generic PLA", - "Comgrow/Comgrow T300 PLA", - "Creality/Creality Generic PLA", - "Custom/Generic PLA", - "DeltaMaker/DeltaMaker Generic PLA", - "Dremel/Dremel Generic PLA", - "FLSun/FLSun Generic PLA", - "FLSun/FLSun S1 PLA Generic", - "FLSun/FLSun T1 PLA Generic", - "Flashforge/Generic PLA", - "Flashforge/Generic PLA High Speed", - "FlyingBear/FlyingBear Generic PLA", - "InfiMech/InfiMech Generic PLA", - "Lulzbot/Lulzbot 2.85mm PLA", - "OrcaArena/OrcaArena Generic PLA", - "Peopoly/Peopoly Generic PLA", - "Phrozen/Phrozen PLA", - "Prusa/Prusa Generic PLA", - "Qidi/Qidi Generic PLA", - "Ratrig/RatRig Generic PLA", - "SecKit/SecKit Generic PLA", - "Sovol/Sovol SV07 PLA", - "Tiertime/Tiertime Generic PLA", - "Volumic/Volumic PLA Ultra", - "Volumic/Volumic PLA Ultra (Performance)", - "Vzbot/Vzbot Generic PLA", - "re3D/re3D PLA" - ], - "GFL99_01": [ - "Tiertime/Tiertime Generic PLA" - ], - "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" + "BBL/Generic PLA" ], "GFLSBS99": [], "GFN03": [ - "BBL/Bambu PA-CF", - "OrcaArena/Arena PA-CF" + "BBL/Bambu PA-CF" ], "GFN04": [ - "BBL/Bambu PAHT-CF", - "OrcaArena/Arena PAHT-CF" + "BBL/Bambu PAHT-CF" ], "GFN05": [ - "BBL/Bambu PA6-CF", - "Tiertime/Tiertime PA6-CF" - ], - "GFN05_01": [ - "Tiertime/Tiertime PA6-CF" + "BBL/Bambu PA6-CF" ], "GFN06": [ "BBL/Bambu PPA-CF" @@ -2639,81 +1392,16 @@ "BBL/Bambu PA6-GF" ], "GFN96": [ - "BBL/Generic PPA-GF", - "Tiertime/Tiertime Generic PPA-GF" - ], - "GFN96_01": [ - "Tiertime/Tiertime Generic PPA-GF" + "BBL/Generic PPA-GF" ], "GFN97": [ - "BBL/Generic PPA-CF", - "Tiertime/Tiertime Generic PPA-CF" - ], - "GFN97_01": [ - "Tiertime/Tiertime Generic PPA-CF" + "BBL/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", - "InfiMech/InfiMech Generic PA-CF", - "OrcaArena/OrcaArena Generic PA-CF", - "Prusa/Prusament PA-CF", - "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" + "BBL/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", - "Qidi/Qidi Generic PA", - "Ratrig/RatRig Generic PA", - "SecKit/SecKit Generic PA", - "Tiertime/Tiertime Generic PA", - "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" + "BBL/Generic PA" ], "GFNMK00": [ "BBL/Numakers PLA+" @@ -2722,192 +1410,91 @@ "BBL/Overture PLA Pro" ], "GFP95": [ - "BBL/Generic PP-GF", - "Tiertime/Tiertime Generic PP-GF" - ], - "GFP95_01": [ - "Tiertime/Tiertime Generic PP-GF" + "BBL/Generic PP-GF" ], "GFP96": [ - "BBL/Generic PP-CF", - "Tiertime/Tiertime Generic PP-CF" - ], - "GFP96_01": [ - "Tiertime/Tiertime Generic PP-CF" + "BBL/Generic PP-CF" ], "GFP97": [ - "BBL/Generic PP", - "Tiertime/Tiertime Generic PP" - ], - "GFP97_01": [ - "Tiertime/Tiertime Generic PP" + "BBL/Generic PP" ], "GFP98": [ - "BBL/Generic PE-CF", - "Tiertime/Tiertime Generic PE-CF" - ], - "GFP98_01": [ - "Tiertime/Tiertime Generic PE-CF" + "BBL/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/Generic PETG" - ], - "GFPETG-1": [ - "Peopoly/Peopoly Generic PETG" - ], - "GFPETG-CF": [ - "Anycubic/Anycubic PETG-CF" - ], - "GFPLA Glow": [ - "Anycubic/Anycubic PLA Glow" - ], - "GFPLA Translucent": [ - "Anycubic/Anycubic PLA Translucent" - ], - "GFPLA-CF": [ - "Anycubic/Anycubic PLA-CF" + "BBL/Generic PE" ], "GFPM001": [ - "Anycubic/Panchroma PLA", - "BBL/Panchroma PLA", - "Snapmaker/Panchroma PLA" + "BBL/Panchroma PLA" ], "GFPM002": [ - "BBL/Panchroma PLA Matte", - "Snapmaker/Panchroma PLA Matte" + "BBL/Panchroma PLA Matte" ], "GFPM003": [ - "BBL/Panchroma PLA Marble", - "Snapmaker/Panchroma PLA Marble" + "BBL/Panchroma PLA Marble" ], "GFPM004": [ - "BBL/Panchroma PLA Silk", - "Snapmaker/Panchroma PLA Silk" + "BBL/Panchroma PLA Silk" ], "GFPM005": [ - "BBL/Panchroma PLA Satin", - "Snapmaker/Panchroma PLA Satin" + "BBL/Panchroma PLA Satin" ], "GFPM006": [ - "BBL/Panchroma PLA Translucent", - "Snapmaker/Panchroma PLA Translucent" + "BBL/Panchroma PLA Translucent" ], "GFPM007": [ - "BBL/Panchroma PLA Galaxy", - "Snapmaker/Panchroma PLA Galaxy" + "BBL/Panchroma PLA Galaxy" ], "GFPM008": [ - "BBL/Panchroma PLA Celestial", - "Snapmaker/Panchroma PLA Celestial" + "BBL/Panchroma PLA Celestial" ], "GFPM009": [ - "BBL/Panchroma PLA Starlight", - "Snapmaker/Panchroma PLA Starlight" + "BBL/Panchroma PLA Starlight" ], "GFPM010": [ - "BBL/Panchroma PLA Glow", - "Snapmaker/Panchroma PLA Glow" + "BBL/Panchroma PLA Glow" ], "GFPM011": [ - "BBL/Panchroma PLA Luminous", - "Snapmaker/Panchroma PLA Luminous" + "BBL/Panchroma PLA Luminous" ], "GFPM012": [ - "BBL/Panchroma PLA Metallic", - "Snapmaker/Panchroma PLA Metallic" + "BBL/Panchroma PLA Metallic" ], "GFPM013": [ - "BBL/Panchroma PLA Neon", - "Snapmaker/Panchroma PLA Neon" + "BBL/Panchroma PLA Neon" ], "GFPM014": [ - "BBL/Panchroma PLA UV Shift", - "Snapmaker/Panchroma PLA UV Shift" + "BBL/Panchroma PLA UV Shift" ], "GFPM015": [ - "BBL/Panchroma PLA Temp Shift", - "Snapmaker/Panchroma PLA Temp Shift" + "BBL/Panchroma PLA Temp Shift" ], "GFPM016": [ - "BBL/Panchroma CoPE", - "Snapmaker/Panchroma CoPE" + "BBL/Panchroma CoPE" ], "GFPM017": [ - "BBL/Polymaker HT-PLA", - "Snapmaker/Polymaker HT-PLA" + "BBL/Polymaker HT-PLA" ], "GFPM018": [ - "BBL/Polymaker HT-PLA-GF", - "Snapmaker/Polymaker HT-PLA-GF" + "BBL/Polymaker HT-PLA-GF" ], "GFPM019": [ - "BBL/PolyLite PLA Pro", - "Snapmaker/PolyLite PLA Pro" - ], - "GFPVA": [ - "Anycubic/Anycubic PVA" + "BBL/PolyLite PLA Pro" ], "GFR00": [ "BBL/FusRock ABS-GF" ], "GFR98": [ - "BBL/Generic PHA", - "Tiertime/Tiertime Generic PHA" - ], - "GFR98_01": [ - "Tiertime/Tiertime Generic PHA" + "BBL/Generic PHA" ], "GFR99": [ - "BBL/Generic EVA", - "Tiertime/Tiertime Generic EVA" + "BBL/Generic EVA" ], - "GFR99_01": [ - "Tiertime/Tiertime Generic EVA" - ], - "GFRH01": [], - "GFRH02": [], - "GFRH03": [], - "GFRH04": [], - "GFRH05": [], - "GFRH06": [], "GFS00": [ - "BBL/Bambu Support W", - "OrcaArena/Arena Support W" + "BBL/Bambu Support W" ], "GFS01": [ - "BBL/Bambu Support G", - "OrcaArena/Arena Support G" + "BBL/Bambu Support G" ], "GFS02": [ "BBL/Bambu Support For PLA" @@ -2916,12 +1503,7 @@ "BBL/Bambu Support For PA/PET" ], "GFS04": [ - "BBL/Bambu PVA", - "Tiertime/Tiertime PVA", - "WonderMaker/WonderMaker PVA" - ], - "GFS04_01": [ - "Tiertime/Tiertime PVA" + "BBL/Bambu PVA" ], "GFS05": [ "BBL/Bambu Support For PLA/PETG" @@ -2930,135 +1512,52 @@ "BBL/Bambu Support for ABS" ], "GFS97": [ - "BBL/Generic BVOH", - "Tiertime/Tiertime Generic BVOH" - ], - "GFS97_01": [ - "Tiertime/Tiertime Generic BVOH" + "BBL/Generic BVOH" ], "GFS98": [ - "BBL/Generic HIPS", - "Prusa/Prusament PVB", - "Tiertime/Tiertime Generic HIPS" - ], - "GFS98_01": [ - "Tiertime/Tiertime Generic HIPS" + "BBL/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", - "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" - ], - "GFSL99": [ - "Peopoly/Peopoly Generic ABS" + "BBL/Generic PVA" ], "GFSNL02": [ - "BBL/SUNLU PLA Matte", - "Flashforge/SUNLU PLA Matte" + "BBL/SUNLU PLA Matte" ], "GFSNL03": [ - "BBL/SUNLU PLA+", - "Flashforge/SUNLU PLA+" + "BBL/SUNLU PLA+" ], "GFSNL04": [ - "BBL/SUNLU PLA+ 2.0", - "Flashforge/SUNLU PLA+ 2.0" + "BBL/SUNLU PLA+ 2.0" ], "GFSNL05": [ - "BBL/SUNLU Silk PLA+", - "Flashforge/SUNLU Silk PLA+" + "BBL/SUNLU Silk PLA+" ], "GFSNL06": [ - "BBL/SUNLU PLA Marble", - "Flashforge/SUNLU PLA Marble" + "BBL/SUNLU PLA Marble" ], "GFSNL07": [ - "BBL/SUNLU Wood PLA", - "Flashforge/SUNLU Wood PLA" + "BBL/SUNLU Wood PLA" ], "GFSNL08": [ - "BBL/SUNLU PETG", - "Flashforge/SUNLU PETG" + "BBL/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" + "BBL/Bambu PET-CF" ], "GFT02": [ - "BBL/Bambu PPS-CF", - "Prusa/Prusa Generic PETG" + "BBL/Bambu PPS-CF" ], "GFT97": [ - "BBL/Generic PPS", - "Tiertime/Tiertime Generic PPS" - ], - "GFT97_01": [ - "Tiertime/Tiertime Generic PPS" + "BBL/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" + "BBL/Generic PPS-CF" ], "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" + "BBL/Bambu TPU 95A" ], "GFU02": [ "BBL/Bambu TPU for AMS" @@ -3073,289 +1572,136 @@ "BBL/Generic TPU for AMS" ], "GFU99": [ - "Anker/Anker Generic TPU", - "Anycubic/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 Basic", - "InfiMech/InfiMech Generic TPU", - "InfiMech/InfiMech TPU Basic", - "OrcaArena/OrcaArena Generic TPU", - "Prusa/Prusa Generic FLEX", - "Prusa/Prusa Generic TPU", - "Qidi/Qidi Generic TPU", - "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" + "BBL/Generic TPU" ], - "GFU99_01": [ - "Tiertime/Tiertime Generic TPU" + "OF016CJw": [ + "Sovol/Sovol SV08 ABS" ], - "GFU99_2": [ - "Prusa/Prusa Generic TPU" + "OF02UAVh": [ + "Creality/Soleyin Ultra PLA" ], - "GFU99_3": [ - "Prusa/Prusa Generic TPU HF" + "OF0FfcAG": [ + "Anycubic/Anycubic TPU for ACE" ], - "GPAB00": [ - "Elegoo/Generic PA" - ], - "GPCB00": [ - "Elegoo/Generic PC" - ], - "GPETB00": [ - "Elegoo/Generic PET" - ], - "GPETGB00": [ - "Elegoo/Generic PETG", - "Elegoo/Generic PETG-CF" - ], - "GPLAB00": [ - "Elegoo/Generic PLA" - ], - "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" - ], - "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" - ], - "OF09vOcG": [ - "Elegoo/Elegoo PLA Galaxy" - ], - "OF0Ee2jQ": [ - "Snapmaker/Snapmaker Dual TPU High-Flow" + "OF0GIkJm": [ + "Tiertime/Tiertime Generic PLA Silk" ], "OF0NgY1y": [ "BBL/COEX NYLEX PA6-CF", "OrcaFilamentLibrary/COEX NYLEX PA6-CF" ], - "OF0SyJhk": [ - "Flashforge/Flashforge PA6-CF" - ], - "OF0TODnN": [ - "Elegoo/Generic PET-CF" - ], - "OF0TjJ0G": [ - "Qidi/Qidi ASA-Aero" + "OF0R5Wc7": [ + "Artillery/Artillery PLA Tough" ], "OF0UJcb6": [ - "OrcaFilamentLibrary/PolyLite PETG" + "OrcaFilamentLibrary/PolyLite PETG", + "Snapmaker/PolyLite PETG" ], - "OF0UbONm": [ - "Flashforge/FusRock S-PAHT" - ], - "OF0VEdLB": [ - "Cubicon/Cubicon PETG" + "OF0VpkBM": [ + "Snapmaker/PolyLite PETG Translucent" ], "OF0Vtzaw": [ "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" ], - "OF0Y5MLd": [ - "Qidi/QIDI PETG-GF" + "OF0b7M1z": [ + "SeeMeCNC/SeeMeCNC PA-CF" + ], + "OF0c7mnL": [ + "InfiMech/InfiMech ABS" ], "OF0gGRWk": [ - "OrcaFilamentLibrary/Panchroma PLA Glow" + "OrcaFilamentLibrary/Panchroma PLA Glow", + "Snapmaker/Panchroma PLA Glow" ], "OF0h7ERL": [ + "Elegoo/Elegoo PAHT-CF", "OrcaFilamentLibrary/Elegoo PAHT-CF" ], "OF0kCNDK": [ - "OrcaFilamentLibrary/Panchroma PLA Luminous" + "OrcaFilamentLibrary/Panchroma PLA Luminous", + "Snapmaker/Panchroma PLA Luminous" + ], + "OF0omtEb": [ + "Snapmaker/Fiberon ASA-CF08" ], "OF0pzFLc": [ "BBL/COEX PLA+Silk", "OrcaFilamentLibrary/COEX PLA+Silk" ], + "OF0w7OpJ": [ + "Qidi/QIDI ABS Rapido 0.8 nozzle" + ], "OF0wBGNx": [ "OrcaFilamentLibrary/Bambu ASA-CF" ], - "OF0wk0Pk": [ - "Flashforge/Flashforge PLA Pro" + "OF0wz84w": [ + "Qidi/QIDI ABS Rapido 0.6 nozzle" ], - "OF0z1XpN": [ - "Qidi/QIDI PLA Rapido Silk" + "OF0yFLkY": [ + "Anycubic/Anycubic ASA" ], - "OF17cONC": [ - "Snapmaker/PolyTerra Dual PLA" + "OF0zx94L": [ + "Vzbot/Vzbot Generic PA" + ], + "OF112FvY": [ + "Anycubic/Generic PETG Basic" + ], + "OF1Id239": [ + "Prusa/Prusa Generic PETG" ], "OF1N1qMK": [ - "OrcaFilamentLibrary/Panchroma PLA UV Shift" + "OrcaFilamentLibrary/Panchroma PLA UV Shift", + "Snapmaker/Panchroma PLA UV Shift" + ], + "OF1OZujR": [ + "Flashforge/Flashforge Generic PVA" ], "OF1Pke8t": [ "BBL/Overture Easy PLA", "OrcaFilamentLibrary/Overture Easy PLA" ], "OF1UNk9P": [ + "Creality/Generic PP", "OrcaFilamentLibrary/Generic PP" ], - "OF1Zypyy": [ - "Qidi/QIDI PETG Tough" + "OF1W7c76": [ + "Qidi/QIDI ASA-CF" + ], + "OF1bQyX2": [ + "Flashforge/Flashforge PLA Matte" + ], + "OF1d7c3A": [ + "Snapmaker/Snapmaker ASA" + ], + "OF1daEUW": [ + "Anker/Anker Generic PETG-CF" + ], + "OF1dpPrW": [ + "Qidi/Bambu PLA" ], "OF1hznGB": [ + "Elegoo/Elegoo PLA PRO", "OrcaFilamentLibrary/Elegoo PLA PRO" ], - "OF22AxCm": [ - "Sovol/Polymaker PETG" + "OF1uR1t2": [ + "Tiertime/Tiertime Generic PETG" + ], + "OF223rZv": [ + "Anycubic/Anycubic ABS" + ], + "OF2EB9Iz": [ + "Volumic/Volumic ASA Ultra" ], "OF2EK9F1": [ "OrcaFilamentLibrary/FilAr PLA-mate Violeta" ], "OF2GCW1l": [ - "OrcaFilamentLibrary/SUNLU PETG" + "Flashforge/SUNLU PETG", + "OrcaFilamentLibrary/SUNLU PETG", + "Sovol/SUNLU PETG" ], - "OF2HQqTC": [ - "Cubicon/Cubicon PLA+" - ], - "OF2Psxdc": [ - "Co Print/CoPrint Generic TPU" - ], - "OF2UFmOo": [ - "Qidi/Bambu PLA" + "OF2RjrWH": [ + "Flashforge/FusRock Generic PAHT-GF" ], "OF2VFe4J": [ "OrcaFilamentLibrary/Bambu PAHT-CF" @@ -3363,277 +1709,524 @@ "OF2Z1nT5": [ "OrcaFilamentLibrary/FilAr PETG Azul Imperial" ], + "OF2bZtyg": [ + "Flashforge/Flashforge PLA-CF" + ], + "OF2hfMcG": [ + "OrcaArena/Arena PLA-CF" + ], + "OF2mgDsI": [ + "Vzbot/Vzbot Generic PLA" + ], "OF2pj5l5": [ "BBL/Overture Super PLA+", "OrcaFilamentLibrary/Overture Super PLA+" ], - "OF2tvNYA": [ - "Sovol/Sovol Zero PLA Silk" - ], "OF2xccEe": [], "OF30Ftju": [ + "Elegoo/Elegoo Rapid TPU 95A", "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" ], - "OF38Hyk4": [ - "Flashforge/Flashforge PETG Pro" + "OF3F63OE": [ + "re3D/re3D PETG" ], - "OF3XeEuV": [ - "Qidi/QIDI PET-GF" + "OF3IKafc": [ + "Qidi/QIDI PLA Rapido Matte" ], - "OF3YOOOs": [ - "Chuanying/Chuanying Generic PETG-CF10" + "OF3OMgrI": [ + "Creality/CR-Silk" ], - "OF3arl18": [ - "Elegoo/Elegoo Rapid PETG" + "OF3P0BQA": [ + "Anker/Anker Generic ABS", + "Anker/Anker Generic ABS 0.2 nozzle", + "Anker/Anker Generic ABS 0.25 nozzle" + ], + "OF3WQaKK": [ + "Creality/CR-PETG" + ], + "OF3dJf4E": [ + "Volumic/Volumic PLA Ultra (Performance)" + ], + "OF3fwO8b": [ + "FlyingBear/FlyingBear PLA Basic" ], "OF3kBrdA": [ + "Creality/eSUN PETG", "OrcaFilamentLibrary/eSUN PETG" ], - "OF41QVDH": [ - "Flashforge/Flashforge Generic PLA-Silk" + "OF3msXEa": [ + "Snapmaker/Snapmaker Dual PETG-CF" ], - "OF43idK2": [ - "Creality/Creality Generic PLA Matte" + "OF3s929u": [ + "Tiertime/Tiertime Generic PP" + ], + "OF3wxlw9": [ + "CoLiDo/CoLiDo Generic PETG" + ], + "OF3ydJTT": [ + "InfiMech/InfiMech PLA Hyper" + ], + "OF41jaTh": [ + "Flashforge/Flashforge TPU-90A" + ], + "OF42ZDpN": [ + "Flashforge/FusRock PAHT" + ], + "OF43Raws": [ + "Snapmaker/PolyTerra J1 PLA" ], "OF44VYzK": [ "OrcaFilamentLibrary/FilAr PETG Azul Francia" ], - "OF48G7He": [ - "Qidi/QIDI PETG Tough 0.8 nozzle" + "OF48L671": [ + "Ratrig/RatRig Generic ASA" + ], + "OF4APyxe": [ + "Creality/Hyper PAHT-CF" ], "OF4KsW72": [], - "OF4RKeng": [ - "Flashforge/Flashforge Generic ASA" + "OF4Mf5Gz": [ + "Creality/Creality Generic PETG" + ], + "OF4Nhggz": [ + "Artillery/Artillery PLA Basic+" ], "OF4RvVuU": [], - "OF4gzzE4": [ - "Qidi/QIDI PET-CF" + "OF4S3To3": [ + "Qidi/QIDI PETG Rapido" ], - "OF4jILJA": [ - "FlyingBear/FlyingBear PC" + "OF4WB37S": [ + "Snapmaker/Snapmaker PETG" ], - "OF4m9A5w": [ - "Flashforge/Flashforge Generic HIPS" + "OF4XAUnp": [ + "Vzbot/Vzbot Generic ASA" ], - "OF50NUZI": [ - "FlyingBear/FlyingBear PLA Basic" + "OF4f8vVp": [ + "WonderMaker/WonderMaker PET-CF" + ], + "OF4iWKrE": [ + "Qidi/QIDI PETG-CF" + ], + "OF4nQ62r": [ + "Qidi/QIDI PLA Basic" + ], + "OF4oCRKe": [ + "DeltaMaker/DeltaMaker Generic PETG" + ], + "OF4ulo9Y": [ + "WonderMaker/WonderMaker PVA" + ], + "OF4xhTuK": [ + "OrcaArena/OrcaArena Generic PA-CF" + ], + "OF4zzGwp": [ + "Flashforge/FusRock Generic PET-GF" + ], + "OF51XQar": [ + "CONSTRUCT3D/C1 Generic PLA" + ], + "OF53eLVD": [ + "Creality/Generic ASA-CF", + "Elegoo/Generic ASA-CF" ], "OF54B0S0": [ "OrcaFilamentLibrary/Bambu PPA-CF" ], - "OF57IbZT": [ - "Artillery/Artillery PLA Basic" + "OF54SvEe": [ + "Prusa/Prusament PA-CF" ], - "OF5Bmdtg": [ - "Sovol/Sovol SV06 Plus ACE ABS" + "OF5BN24W": [ + "Flashforge/Flashforge PPA-GF" ], "OF5CgdDq": [ - "OrcaFilamentLibrary/PolyLite PLA" + "OrcaArena/PolyLite PLA", + "OrcaFilamentLibrary/PolyLite PLA", + "Qidi/PolyLite PLA", + "Snapmaker/PolyLite PLA" ], - "OF5J2axC": [ - "Sovol/Sovol Zero PLA Basic" + "OF5E5KNA": [ + "SecKit/SecKit Generic PC" + ], + "OF5NQFKI": [ + "Flashforge/Flashforge PLA Galaxy" + ], + "OF5NqBfC": [ + "Wanhao France/YUMI PETG" ], "OF5P4jgA": [ "OrcaFilamentLibrary/FilAr PLA Dorado" ], - "OF5T1Y9R": [ - "Flashforge/Flashforge ABS Basic" + "OF5PtjTp": [ + "Anycubic/Anycubic PLA Glow" ], - "OF5UUaUM": [ - "Qidi/Qidi Generic PLA High Speed" + "OF5SJ3jz": [ + "Flashforge/Flashforge ABS" ], - "OF5Ugv12": [ - "FlyingBear/Other PLA" + "OF5YVJXH": [ + "Artillery/Artillery ASA" ], - "OF5kwfZu": [ - "Flashforge/FusRock Generic NexPA-CF25" + "OF5Zk4e1": [ + "Anycubic/Anycubic Generic ABS" + ], + "OF5c6nq3": [ + "Flashforge/Generic TPU-64D" + ], + "OF5lGPup": [ + "WonderMaker/WonderMaker PETG Basic" ], "OF5nlfKY": [ "OrcaFilamentLibrary/FilAr PLA Oro" ], + "OF5oNRED": [ + "Eryone/Eryone PP" + ], + "OF5oXk4M": [ + "Anycubic/Polymaker PLA Pro", + "Snapmaker/Polymaker PLA Pro" + ], "OF5rnhjh": [], + "OF5umxxT": [ + "Snapmaker/PolyLite PLA Glow" + ], "OF5vgi2G": [ "OrcaFilamentLibrary/FilAr PLA-mate Azul" ], - "OF60Lmeq": [ - "Flashforge/Flashforge PLA Matte" + "OF5vzBhb": [ + "Chuanying/Chuanying Generic PLA", + "Chuanying/Chuanying PLA" ], - "OF6EOy1A": [ - "Qidi/Bambu PETG" + "OF5w29Kq": [ + "Flashforge/Flashforge HS PETG" ], - "OF6FM5F7": [ - "Flashforge/FusRock PAHT" + "OF65InrS": [ + "Snapmaker/Snapmaker TPU" + ], + "OF66KUAN": [ + "Creality/PolySonic PLA" + ], + "OF67EdL5": [ + "Sovol/Sovol SV06 ACE ABS" + ], + "OF6ATsCF": [ + "Snapmaker/Snapmaker Dual PLA-CF" + ], + "OF6Fpw1E": [ + "Comgrow/Comgrow Generic PETG" + ], + "OF6H51Xx": [ + "Snapmaker/Polymaker PETG", + "Sovol/Polymaker PETG" + ], + "OF6K467o": [ + "InfiMech/InfiMech Generic PA-CF" + ], + "OF6KELDx": [ + "Co Print/CoPrint Generic PLA" ], "OF6Ll8lK": [ + "Elegoo/Elegoo PETG Translucent", "OrcaFilamentLibrary/Elegoo PETG Translucent" ], - "OF6Mxzsg": [ - "Flashforge/Generic TPU" + "OF6MOPWx": [ + "Creality/Generic PET", + "Elegoo/Generic PET", + "Flashforge/Generic PET" ], - "OF6SEkeJ": [ - "Flashforge/FusRock PET-CF" + "OF6O67Xk": [ + "Lulzbot/Lulzbot 2.85mm ABS" ], - "OF6XIeUW": [ - "Flashforge/Generic PLA-CF10" + "OF6TuVAg": [ + "Snapmaker/Snapmaker Breakaway Support For PLA", + "Snapmaker/Snapmaker J1 PVA" ], - "OF6XuVQE": [ - "Cubicon/Cubicon ABS" + "OF6VgL2U": [ + "Phrozen/Phrozen PLA" ], - "OF70DKqH": [ - "Snapmaker/Snapmaker TPE" + "OF6WddJ1": [ + "Flashforge/FusRock S-PAHT" + ], + "OF6kj4jI": [ + "iQ/Fiberthree PACF Pro P2" + ], + "OF6ooviO": [ + "FLSun/FLSun S1 TPU" + ], + "OF6rMr3U": [ + "Flashforge/FusRock Generic S-Multi" + ], + "OF6rdQ6M": [ + "Creality/Generic PPS-CF" + ], + "OF6tKa1Z": [ + "Anker/Anker Generic TPU" + ], + "OF6ueBwd": [ + "Flashforge/Flashforge PLA Pro" + ], + "OF6vKLaU": [ + "Artillery/Artillery Generic ASA" + ], + "OF6xLvYg": [ + "InfiMech/InfiMech Generic PC" + ], + "OF6zAVFj": [ + "Sovol/Sovol Zero TPU" + ], + "OF70zbGS": [ + "Creality/Hyper L-W PLA" + ], + "OF72YYTd": [ + "Snapmaker/Snapmaker ABS" ], "OF74KeQR": [ "OrcaFilamentLibrary/Generic PHA" ], + "OF79Fbo6": [ + "Cubicon/Cubicon PC" + ], "OF7H3VJM": [ "OrcaFilamentLibrary/eSUN PLA-Marble" ], - "OF7M9vy4": [ - "Ratrig/RatRig BigNozzle PLA" + "OF7OqDp3": [ + "Tiertime/Tiertime PLA-CF" ], - "OF7cv1Ub": [ - "Qidi/QIDI PLA-CF" + "OF7SliVn": [ + "Snapmaker/PolyLite J1 PLA" ], - "OF7f0eUZ": [ - "Volumic/Volumic ASA Ultra" + "OF7VJMYM": [ + "Sovol/Sovol Zero PLA Basic" + ], + "OF7c9fln": [ + "Anycubic/Anycubic PLA Translucent" + ], + "OF7g2vYQ": [ + "Co Print/CoPrint Generic TPU" ], "OF7lOgYF": [ "OrcaFilamentLibrary/Generic PETG HF" ], - "OF7tgL9c": [ - "Chuanying/Chuanying ASA", - "Chuanying/Chuanying Generic ASA" + "OF7lwj52": [ + "CoLiDo/CoLiDo PETG" + ], + "OF7nBAd3": [ + "Eryone/Eryone Silk PLA" + ], + "OF7tt7DO": [ + "Cubicon/Cubicon PLA+" + ], + "OF7uE5KB": [ + "Anker/Anker Generic PA-CF" + ], + "OF8CXrvm": [ + "SecKit/SecKit Generic PA" + ], + "OF8GnyFU": [ + "Creality/Hyper ABS" + ], + "OF8Hx3Pi": [ + "Cubicon/Cubicon PETG" + ], + "OF8Jl6NT": [ + "Snapmaker/Snapmaker J1 PET" ], "OF8Tlg47": [ "OrcaFilamentLibrary/Generic PPA-GF" ], - "OF8WvPVL": [ - "Qidi/QIDI ABS Rapido 0.8 nozzle" - ], "OF8aFWfQ": [ "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" ], + "OF8bLDu7": [ + "Blocks/Blocks Generic PA-CF" + ], + "OF8dCquh": [ + "Snapmaker/Snapmaker J1 ABS Benchy" + ], + "OF8eQjjt": [ + "Lulzbot/Lulzbot 2.85mm PETG" + ], + "OF8eaY7j": [ + "Creality/Generic PA612-CF" + ], "OF8jh0Lk": [ "OrcaFilamentLibrary/FilAr PLA-mate Marron" ], + "OF8kJys9": [ + "Eryone/Eryone PETG" + ], "OF8tPByX": [ "OrcaFilamentLibrary/Generic PPA-CF" ], + "OF8wE5l7": [ + "Artillery/Artillery PETG Basic" + ], + "OF97ru74": [ + "Prusa/Prusa Generic PC" + ], + "OF995YXg": [ + "Flashforge/Flashforge TPU-64D" + ], "OF99UMPq": [ "BBL/COEX ABS", "OrcaFilamentLibrary/COEX ABS" ], "OF99vXPs": [], + "OF9EHUKK": [ + "Qidi/QIDI TPU-GF" + ], + "OF9HCdyQ": [ + "Afinia/Afinia PLA" + ], "OF9OlTWH": [ "OrcaFilamentLibrary/Bambu PLA Marble" ], - "OF9RZyBz": [ - "Flashforge/Polymaker Generic S1" + "OF9PELEb": [ + "Qidi/QIDI UltraPA-CF25" ], - "OF9sr3Vn": [ - "Flashforge/Flashforge PLA Sparkle" + "OF9UJOGF": [ + "Anycubic/Anycubic PETG-CF" ], - "OF9tjFbj": [ - "Peopoly/Peopoly Lancer PLA-C" + "OF9emAI9": [ + "Ratrig/RatRig PunkFil PETG" ], - "OF9vnvM8": [ - "Artillery/Artillery PETG-CF" + "OF9fOPpd": [ + "Vzbot/Vzbot Generic PC" ], - "OFAEqlWa": [ - "Flashforge/Flashforge Generic PLA-SILK" + "OF9z5LZ9": [ + "FLSun/FLSun S1 PETG" ], - "OFAGqTQG": [ - "Volumic/Volumic PP Ultra" + "OFA026vt": [ + "OrcaArena/Arena PA-CF" ], - "OFAGrVjP": [ - "Flashforge/Flashforge PLA Silk" + "OFAC7Wyu": [ + "Artillery/Artillery PLA Matte" ], - "OFAHagT9": [ - "Elegoo/Elegoo Rapid PLA+" + "OFACSw9O": [ + "Creality/Creality Generic PLA" ], - "OFAK2XjZ": [ - "InfiMech/Other ABS" + "OFAIBCLJ": [ + "Elegoo/Generic ABS-CF" ], - "OFAUDGEQ": [ - "Qidi/QIDI PLA Rapido Matte" + "OFAIrQXu": [ + "Creality/Creality Hyper PLA" ], - "OFAUX5fB": [ - "CONSTRUCT3D/C1 Generic High Flow PETG" + "OFANFm4x": [ + "Qidi/QIDI PLA Rapido Metal" ], - "OFAbsMuV": [ - "Snapmaker/Snapmaker Dual TPE" + "OFAO9A7J": [ + "Sovol/Sovol Zero PLA Silk HS Nozzle" ], - "OFAdAYYk": [ - "Qidi/QIDI PPS-CF" + "OFAZllAN": [ + "Artillery/Artillery PLA-CF" ], - "OFAdZFD1": [ - "Flashforge/FusRock Generic PET-GF" - ], - "OFAiqi5v": [ - "Elegoo/Elegoo ASA-CF" + "OFAf9pJF": [ + "Flashforge/Flashforge TPU 95A" ], "OFAnyRUI": [ "OrcaFilamentLibrary/Bambu Support For PLA" ], - "OFAnyzjN": [ - "Qidi/HATCHBOX PETG" - ], "OFAt6ec0": [ "OrcaFilamentLibrary/FilAr PLA Marron Oxido" ], - "OFAtydxE": [ - "Flashforge/FusRock S-Multi" + "OFB09fpe": [ + "Ratrig/RatRig Generic TPU" + ], + "OFB0a3hT": [ + "Anker/Anker Generic PLA-CF" + ], + "OFB1Tv1E": [ + "Anycubic/Anycubic Generic PA" ], "OFB5SmWk": [ "OrcaFilamentLibrary/Valment PLA Galaxy" ], - "OFBGxHgT": [ - "FlyingBear/FlyingBear PLA" + "OFB8wSps": [ + "Flashforge/FusRock PET-CF" ], - "OFBRSZom": [ - "Volumic/PPS Carbone (Performance)" + "OFB9dx27": [ + "Blocks/Blocks Generic ASA" + ], + "OFBBgw7B": [ + "WonderMaker/WonderMaker PLA Wood" + ], + "OFBC32Wb": [ + "Flashforge/FusRock PET" + ], + "OFBIadjM": [ + "Chuanying/Chuanying ASA", + "Chuanying/Chuanying Generic ASA" + ], + "OFBJAdLw": [ + "LH/LHS PCTG" + ], + "OFBK6zAi": [ + "Flashforge/Flashforge PETG-CF" + ], + "OFBLktDy": [ + "Creality/Soleyin Basic PETG" ], "OFBSW57R": [ "OrcaFilamentLibrary/Bambu PLA Aero" ], "OFBUIlZ7": [ + "Elegoo/Elegoo PLA+", "OrcaFilamentLibrary/Elegoo PLA+" ], - "OFBvxnjM": [ - "Elegoo/Elegoo PETG-GF" + "OFBlFMVp": [ + "Snapmaker/Snapmaker Dual PETG" + ], + "OFBoSWxb": [ + "Snapmaker/PolyLite PLA Luminous" + ], + "OFBpcB0a": [ + "TwoTrees/TwoTrees Generic HS PLA" + ], + "OFBtlI8M": [ + "FlyingBear/FlyingBear Generic ABS" ], "OFBw6eEG": [ "OrcaFilamentLibrary/Overture Matte PLA" ], - "OFC2FSsV": [ - "Qidi/Overture PLA" + "OFC1PzXz": [ + "Creality/Hyper Luminous" ], - "OFC5CCeo": [ - "Flashforge/Flashforge Generic PETG-CF" + "OFC20UMj": [ + "Flashforge/Flashforge Generic TPU" + ], + "OFC5f4Ay": [ + "RH3D/Generic PCCF" ], "OFC78WGQ": [ - "OrcaFilamentLibrary/Panchroma PLA Starlight" + "OrcaFilamentLibrary/Panchroma PLA Starlight", + "Snapmaker/Panchroma PLA Starlight" ], "OFCD8qiU": [ "OrcaFilamentLibrary/Generic EVA" ], + "OFCEA7Nt": [ + "Sovol/Sovol SV06 Plus ACE ABS" + ], "OFCIUsWh": [ - "OrcaFilamentLibrary/Panchroma PLA Translucent" + "OrcaFilamentLibrary/Panchroma PLA Translucent", + "Snapmaker/Panchroma PLA Translucent" ], - "OFCJaXZS": [ - "Flashforge/Flashforge PPS" + "OFCJpR7a": [ + "Creality/HP Ultra PLA" ], - "OFCKK3u9": [ - "FlyingBear/FlyingBear PA-CF" + "OFCVUEaV": [ + "Tiertime/Tiertime Generic TPU" + ], + "OFCZsqXg": [ + "Creality/Hyper PLA" + ], + "OFCaJHAA": [ + "Flashforge/FusRock Generic S-PAHT" ], "OFCccVrQ": [ - "OrcaFilamentLibrary/PolyTerra Dual PLA" + "OrcaFilamentLibrary/PolyTerra Dual PLA", + "Snapmaker/PolyTerra Dual PLA" ], - "OFCgpxn2": [ - "Prusa/Prusa Generic ABS HF" - ], - "OFChH9xu": [ - "Snapmaker/Snapmaker J1 TPE" + "OFCcsYtf": [ + "FLSun/FLSun Generic ASA" ], "OFCidU7j": [ "OrcaFilamentLibrary/DREMC ABS-GF" @@ -3641,36 +2234,80 @@ "OFCjG251": [ "OrcaFilamentLibrary/FilAr PLA-mate Verde" ], + "OFCnywiC": [ + "Tiertime/Tiertime PET-CF" + ], "OFCoRobU": [ "OrcaFilamentLibrary/Elas ASA" ], + "OFCp3Bgo": [ + "Anycubic/Anycubic PLA SE" + ], + "OFCu3jES": [], + "OFCuaCer": [ + "Volumic/Désactivé" + ], + "OFD21ije": [ + "Cubicon/Cubicon PA-CF" + ], + "OFD2JNS1": [ + "Dremel/Dremel Generic PLA" + ], + "OFD6kN7F": [ + "OrcaArena/OrcaArena Generic PLA" + ], + "OFD9taow": [ + "FlyingBear/FlyingBear PLA Hyper" + ], "OFDETOM6": [ + "Creality/eSUN PLA-Matte", "OrcaFilamentLibrary/eSUN PLA-Matte" ], "OFDGigEI": [ "OrcaFilamentLibrary/Bambu PLA Dynamic" ], - "OFDMWB6t": [ - "Elegoo/Elegoo PLA+" + "OFDJU6R3": [ + "Afinia/Afinia TPU" + ], + "OFDKIKyw": [ + "Snapmaker/Snapmaker Dual PVA" + ], + "OFDKgoqx": [ + "Flashforge/Flashforge PLA" + ], + "OFDRpXLZ": [ + "FlyingBear/Other PETG", + "InfiMech/Other PETG" ], "OFDSrzZ8": [ + "Creality/Generic PLA", + "Custom/Generic PLA", + "Elegoo/Generic PLA", "Flashforge/Generic PLA", + "LONGER/Generic PLA", "OrcaFilamentLibrary/Generic PLA", - "Sovol/Generic PLA" + "RH3D/Generic PLA", + "Sovol/Generic PLA", + "Z-Bolt/Generic PLA" ], "OFDe8uyM": [ "OrcaFilamentLibrary/Valment PLA" ], - "OFDkABjZ": [ - "Flashforge/Generic TPU-90A" + "OFDeTsJw": [ + "Chuanying/Chuanying Generic HIPS" + ], + "OFDgQaca": [ + "FlyingBear/FlyingBear PETG" ], "OFDpW3J8": [ "OrcaFilamentLibrary/FILL3D PLA Basic" ], - "OFDramZ2": [ - "Co Print/CoPrint Generic PETG" + "OFDtop41": [ + "Creality/Generic Support for PA" ], "OFDvXujf": [ + "Creality/Generic PVA", + "Custom/Generic PVA", "OrcaFilamentLibrary/Generic PVA" ], "OFDvqJ6n": [ @@ -3683,123 +2320,297 @@ "BBL/COEX TPU 60A", "OrcaFilamentLibrary/COEX TPU 60A" ], - "OFE22Uba": [ - "Flashforge/Flashforge TPU-90A" + "OFEE1Dld": [ + "Artillery/Artillery Generic TPU" ], "OFEGNJD4": [ "OrcaFilamentLibrary/Bambu PLA Silk" ], - "OFEYKrjb": [ - "Artillery/Artillery PETG" + "OFEMfQsX": [ + "Flashforge/Flashforge PETG Basic" + ], + "OFENzGSm": [ + "FLSun/FLSun T1 TPU" + ], + "OFEOnBj6": [ + "Snapmaker/Snapmaker PLA Lite" + ], + "OFETFWx7": [ + "SecKit/SecKit Generic PLA" + ], + "OFEWYR89": [ + "Qidi/Generic PLA+" ], "OFEZ449N": [ "OrcaFilamentLibrary/FilAr PLA-mate Uva" ], - "OFEdyZqS": [ - "Anycubic/Anycubic PLA Luminous" + "OFEZNNw1": [ + "Ratrig/RatRig Generic PA" + ], + "OFEZpel7": [ + "Volumic/PPS Carbone (Performance)" + ], + "OFEabreg": [ + "Anycubic/Fiberon PA6-CF20", + "Snapmaker/Fiberon PA6-CF20" + ], + "OFEbIx49": [ + "WonderMaker/WonderMaker PLA Marble" ], "OFEhuUNq": [], + "OFEj7sca": [ + "Cubicon/Cubicon PC" + ], + "OFEjbwqG": [ + "Snapmaker/PolyTerra PLA+" + ], "OFEkPBwx": [ "OrcaFilamentLibrary/Bambu PLA Glow" ], + "OFEmsric": [ + "Snapmaker/Snapmaker PA-CF" + ], + "OFEnbt6D": [ + "Peopoly/Peopoly Lancer PLA-C" + ], "OFEswT5W": [ "OrcaFilamentLibrary/Bambu PLA-CF" ], - "OFF9OKoY": [ - "OrcaFilamentLibrary/PolyLite PLA Pro" + "OFEwRwmL": [ + "Cubicon/Cubicon PLA" ], - "OFFIL5pD": [ - "Qidi/QIDI PA12-CF" + "OFF3cuzT": [ + "Creality/Generic TPU 64D" + ], + "OFF73Bvp": [ + "SecKit/SecKit Generic PLA-CF" + ], + "OFF9OKoY": [ + "OrcaFilamentLibrary/PolyLite PLA Pro", + "Snapmaker/PolyLite PLA Pro" + ], + "OFF9cgY5": [ + "Snapmaker/Snapmaker PLA Matte" + ], + "OFFC0VqZ": [ + "Ratrig/RatRig BigNozzle PCTG" ], "OFFNYwWR": [ "OrcaFilamentLibrary/Bambu PA-CF" ], - "OFFenwbU": [ - "FLSun/FLSun S1 PLA Silk" + "OFFP4ORR": [ + "Creality/Creality Hyper ABS" + ], + "OFFX1DRD": [ + "FlyingBear/FlyingBear PC" + ], + "OFFZ0BBL": [ + "FlyingBear/FlyingBear Generic PLA" + ], + "OFFZ458u": [ + "Snapmaker/Fiberon PA612-ESD" + ], + "OFFbQscs": [ + "Creality/eSUN PETG-Basic" ], "OFFkCLBl": [ - "OrcaFilamentLibrary/Panchroma PLA Galaxy" - ], - "OFFmJ8aR": [ - "FlyingBear/Other PLA Hyper" - ], - "OFFrbsvQ": [ - "InfiMech/Other TPU" + "OrcaFilamentLibrary/Panchroma PLA Galaxy", + "Snapmaker/Panchroma PLA Galaxy" ], "OFFvzqcd": [ "OrcaFilamentLibrary/Bambu PETG Basic" ], - "OFG8vHw8": [ - "Qidi/Qidi Generic ASA" + "OFFwJWea": [ + "Anycubic/Anycubic PLA Silk" ], - "OFGFZhWu": [ - "Sovol/Sovol SV06 ACE PETG" + "OFFxZ7hZ": [ + "Chuanying/Chuanying Generic PLA-CF10" + ], + "OFG0kOKX": [ + "Volumic/Volumic PETG Ultra" + ], + "OFG2RkhN": [ + "Creality/CR-TPU" + ], + "OFG4do34": [ + "Qidi/Qidi ASA-Aero" + ], + "OFGDaEHO": [ + "Tiertime/Tiertime Generic BVOH" + ], + "OFGGyAgJ": [ + "Vzbot/Vzbot Generic TPU" + ], + "OFGJ1nxs": [ + "FlyingBear/Other PLA", + "InfiMech/Other PLA" + ], + "OFGKLoUm": [ + "Anycubic/Anycubic Generic TPU" + ], + "OFGLeiNL": [], + "OFGPJxnt": [ + "Anker/Anker Generic PC", + "Anker/Anker Generic PC 0.2 nozzle", + "Anker/Anker Generic PC 0.25 nozzle" ], "OFGVwfK0": [ "OrcaFilamentLibrary/FilAr PLA-mate Gris" ], - "OFGb4hPY": [ - "Anycubic/Anycubic PEBA 95A" - ], + "OFGc282l": [], "OFGcLA5R": [ "OrcaFilamentLibrary/FilAr PLA-mate Beige" ], - "OFGfdP6J": [ - "Flashforge/FusRock Generic S-Multi" + "OFGcMkEB": [ + "Creality/HP-TPU" + ], + "OFGdP6Na": [ + "Volumic/Volumic PVA" ], "OFGkyftV": [ "BBL/Overture Silk PLA", "OrcaFilamentLibrary/Overture Silk PLA" ], + "OFGwT5Av": [ + "Creality/Creality Hyper PLA-CF" + ], + "OFGwZmgS": [ + "Creality/CR-ABS" + ], + "OFGxC8gB": [ + "Creality/CR-Wood" + ], + "OFGzUNbm": [ + "Tiertime/Tiertime Generic PPS-CF" + ], "OFH2nN08": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" ], + "OFH5UH6P": [ + "Flashforge/Flashforge ABS-GF" + ], + "OFH6Pjxe": [ + "Flashforge/Flashforge PLA Matte" + ], + "OFH7b12v": [ + "Creality/Generic PAHT-CF" + ], "OFHAccHz": [ "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" ], - "OFHBTqyD": [ - "Flashforge/Flashforge PLA Basic" + "OFHFZ1Te": [ + "Prusa/Prusa Generic PLA Silk" ], - "OFHDaMut": [ - "Volumic/PA6 CF20 (Performance)" + "OFHQUAoZ": [ + "FLSun/FLSun Generic PA-CF" ], - "OFHL32M0": [ - "Anycubic/Anycubic TPU" + "OFHTVfaU": [ + "Sovol/Sovol Zero PETG" + ], + "OFHUnLY2": [ + "Vzbot/Vzbot Generic PETG" ], "OFHWSM21": [ "OrcaFilamentLibrary/Fiberon PET-CF" ], + "OFHa3RZT": [ + "Tiertime/Tiertime Generic PA-CF" + ], "OFHa48An": [ "OrcaFilamentLibrary/Bambu PET-CF" ], + "OFHaYaB1": [ + "Creality/eSUN PET-Basic" + ], + "OFHf2lKK": [ + "FlyingBear/FlyingBear TPU Basic" + ], "OFHfzQXo": [ "OrcaFilamentLibrary/Eolas Prints PLA Transition" ], + "OFHknN4v": [ + "Anycubic/Polymaker PLA Pro Metallic", + "Snapmaker/Polymaker PLA Pro Metallic" + ], "OFHmPYRy": [ + "Flashforge/SUNLU PLA+ 2.0", "OrcaFilamentLibrary/SUNLU PLA+ 2.0" ], - "OFHtQDC9": [ - "Elegoo/Elegoo PLA Basic" + "OFI6WZpn": [ + "OrcaArena/Arena Support W" + ], + "OFI80Hct": [ + "Anycubic/Anycubic Generic ASA" ], "OFIBXa0k": [ "OrcaFilamentLibrary/FilAr PLA-mate Rojo" ], + "OFIE3vOf": [ + "Anycubic/Anycubic PLA Matte" + ], + "OFIK0xFa": [ + "FLSun/FLSun S1 ASA" + ], + "OFIPjqHt": [ + "OrcaArena/Arena Support G" + ], + "OFIRUqWi": [ + "Creality/eSUN PLA-Silk" + ], + "OFIVWJPm": [ + "InfiMech/InfiMech TPU" + ], + "OFIWMSGX": [ + "Qidi/HATCHBOX PETG" + ], + "OFIYTy8S": [ + "Anker/Anker Generic PLA+", + "Anker/Anker Generic PLA+ 0.2 nozzle", + "Anker/Anker Generic PLA+ 0.25 nozzle" + ], + "OFIZMQwM": [ + "LH/LHS TPU" + ], "OFIamQnD": [ "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" ], + "OFIda816": [ + "Vzbot/Vzbot Generic PVA" + ], + "OFIeCuXj": [ + "Peopoly/Peopoly Generic PETG" + ], "OFIegjmD": [ "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" ], "OFIfnzxC": [ "OrcaFilamentLibrary/Bambu Support For PLA/PETG" ], - "OFIl3ar9": [ - "Sovol/Sovol SV08 PETG" + "OFIgbDHq": [ + "Anycubic/Anycubic PLA Luminous" ], - "OFIzguhB": [ - "Volumic/Volumic UNIVERSAL Ultra" + "OFIieIka": [ + "Flashforge/Polymaker CoPA" + ], + "OFIxOuOu": [ + "Snapmaker/PolyLite PLA Starlight" + ], + "OFIxitiU": [ + "Flashforge/Flashforge PLA Basic" + ], + "OFIy3kLw": [ + "Prusa/Prusa Generic PA" + ], + "OFJ3HRsR": [ + "OrcaArena/Arena ABS" + ], + "OFJ80y1e": [ + "FLSun/FLSun T1 PETG" ], "OFJHBEGD": [], + "OFJJpaLS": [ + "FLSun/FLSun Generic PETG" + ], "OFJNeELv": [ "OrcaFilamentLibrary/FILL3D PA" ], @@ -3810,32 +2621,65 @@ "OFJQDUk3": [ "OrcaFilamentLibrary/FilAr PETG Cristal" ], + "OFJSksUs": [ + "FLSun/FLSun Generic PLA" + ], + "OFJVFpJz": [ + "Sovol/Sovol Zero PLA Silk" + ], + "OFJWKoYG": [ + "iQ/Material4Print ABS Natur P1" + ], + "OFJYpVAQ": [ + "Flashforge/Generic TPU-90A" + ], + "OFJfv07m": [ + "Sovol/Sovol SV06 ACE TPU" + ], + "OFJgijky": [ + "Snapmaker/PolyLite CosPLA" + ], + "OFJhT2fd": [ + "Snapmaker/Snapmaker Dual ABS" + ], + "OFJrvXth": [ + "Snapmaker/Snapmaker ABS Benchy" + ], "OFJs1ToM": [ "BBL/COEX NYLEX UNFILLED " ], "OFJu1XwK": [ "OrcaFilamentLibrary/NIT PETG" ], - "OFK39W9u": [ - "Flashforge/Flashforge Generic PETG-CF10" + "OFJxSqO4": [ + "Wanhao France/YUMI PLA Direct Drive" ], - "OFK820gS": [ - "Qidi/QIDI ASA" + "OFK01afJ": [ + "Qidi/Qidi Generic PC" ], - "OFKDnrjL": [ - "Artillery/Artillery PLA Matte" + "OFK4LdYI": [ + "Prusa/Prusa Generic ASA HF" ], - "OFKH15Hd": [ - "Sovol/Sovol SV08 ABS" + "OFK74HJD": [ + "Flashforge/Flashforge PLA Pro" + ], + "OFK8XHPn": [ + "Qidi/Overture ABS" + ], + "OFKIQO2W": [ + "Qidi/QIDI PLA Rapido" ], "OFKKajh6": [ "OrcaFilamentLibrary/FilAr PLA Gris Plata" ], + "OFKNAhls": [ + "Qidi/Qidi Generic PETG" + ], "OFKTSiYF": [ "OrcaFilamentLibrary/FilAr PLA Blanco Calido" ], - "OFKWVi10": [ - "Flashforge/Flashforge Generic PLA-CF10" + "OFKUEXPA": [ + "Snapmaker/Snapmaker Dual ASA" ], "OFKWWgyp": [ "OrcaFilamentLibrary/FilAr PLA Carpincho" @@ -3843,115 +2687,231 @@ "OFKZ9skj": [ "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" ], - "OFKZH00L": [ - "Flashforge/FusRock Generic PET-CF" + "OFKbdiiJ": [ + "Creality/PolySonic PLA Pro" + ], + "OFKfJTwL": [ + "Qidi/QIDI PET-CF" + ], + "OFKgmsqE": [ + "Qidi/QIDI PAHT-CF" ], "OFKhMPeX": [ "OrcaFilamentLibrary/Bambu PC" ], - "OFKhtNBx": [ - "Snapmaker/Snapmaker J1 TPU High-Flow" - ], "OFKiSMWR": [ - "OrcaFilamentLibrary/Panchroma PLA Marble" + "OrcaFilamentLibrary/Panchroma PLA Marble", + "Snapmaker/Panchroma PLA Marble" ], - "OFKjlAbC": [ - "Qidi/QIDI UltraPA-CF25" + "OFKo87c6": [ + "Snapmaker/Snapmaker TPU 95A" ], - "OFKzh9lx": [ - "InfiMech/InfiMech PLA" + "OFKpQTJI": [ + "Flashforge/Flashforge TPU 65D" ], - "OFL4BLAC": [ - "iQ/Grauts HPP4GF25 P1" + "OFKuTr12": [ + "Tiertime/Tiertime Generic PE" ], - "OFL4KniM": [ - "Elegoo/Elegoo Rapid TPU 95A" + "OFKyCgaK": [ + "Anycubic/Anycubic Generic PLA" ], - "OFL7U2MV": [ - "Ratrig/RatRig PunkFil ABS" + "OFLAXKqP": [ + "WonderMaker/WonderMaker TPU 95A" ], - "OFL7vEML": [ - "Flashforge/FlashForge PC" + "OFLBUkwC": [ + "Vzbot/Vzbot Generic ABS" + ], + "OFLC1oRH": [ + "Flashforge/Flashforge PPA-CF" + ], + "OFLDSqqi": [ + "Flashforge/Flashforge Generic ABS" ], "OFLJ8S6I": [ + "Flashforge/SUNLU Wood PLA", "OrcaFilamentLibrary/SUNLU Wood PLA" ], "OFLNgV3C": [], + "OFLOf6Sc": [ + "Tiertime/Tiertime TPU 95A" + ], "OFLPAxz3": [ + "Creality/Generic ASA", "Custom/Generic ASA", - "OrcaFilamentLibrary/Generic ASA" + "Elegoo/Generic ASA", + "Flashforge/Generic ASA", + "OrcaFilamentLibrary/Generic ASA", + "RH3D/Generic ASA" ], "OFLXvuMr": [ + "Elegoo/Elegoo Rapid PETG", "OrcaFilamentLibrary/Elegoo Rapid PETG" ], + "OFLYDIb8": [ + "Flashforge/Flashforge PLA Silk" + ], + "OFLYDngx": [ + "Qidi/Bambu PETG" + ], "OFLakOUI": [ + "Creality/Generic PC", + "Custom/Generic PC", + "Elegoo/Generic PC", "OrcaFilamentLibrary/Generic PC", "Sovol/Generic PC" ], + "OFLbXwoL": [ + "Artillery/Artillery PLA Silk" + ], + "OFLbdkrE": [ + "Snapmaker/Snapmaker J1 PLA Eco" + ], "OFLcd093": [ + "Elegoo/Elegoo PETG", "OrcaFilamentLibrary/Elegoo PETG" ], - "OFLeFaUO": [ - "Flashforge/Flashforge Generic PVA" + "OFLfywkp": [ + "Afinia/Afinia ABS+" ], - "OFLhOFQk": [ - "Volumic/Volumic ASA Ultra (Performance)" + "OFLgwqp2": [ + "Creality/Hyper PETG-GF" ], - "OFLiTjQK": [ - "FlyingBear/Other PA-CF" + "OFLrdHse": [ + "Flashforge/Flashforge Generic HS PLA" ], - "OFLriDvE": [ - "Creality/Creality Generic PLA High Speed" + "OFLuczRG": [ + "Creality/Creality Generic ASA-CF" ], - "OFLxO2Oc": [ - "Flashforge/FusRock PET" + "OFLzx3J4": [ + "Creality/Hyper Marble" ], - "OFM3PeVe": [ - "Flashforge/Flashforge ASA-CF" + "OFM0xjBG": [ + "Creality/CR-PLA Matte" + ], + "OFM4iJlv": [ + "Creality/Generic PA12-CF" + ], + "OFM87w9T": [ + "Tiertime/Tiertime Generic SBS" ], "OFM91vZs": [ "BBL/Overture ASA", "OrcaFilamentLibrary/Overture ASA" ], - "OFMHTnPP": [ - "Flashforge/Flashforge PA12-CF" + "OFMDHOcT": [ + "Qidi/QIDI TPU-Aero" + ], + "OFMEbuBE": [ + "Blocks/Blocks Generic TPU" + ], + "OFMIma8C": [ + "Flashforge/Flashforge PLA Luminous" + ], + "OFMIurFh": [ + "Creality/Creality HF Generic Speed PLA" + ], + "OFMK5gVo": [ + "WonderMaker/WonderMaker PLA Basic" + ], + "OFML2aVd": [ + "Anycubic/Anycubic TPU 95A" + ], + "OFMSvS8z": [ + "Artillery/Artillery PA" + ], + "OFMTBcnz": [ + "Tiertime/Tiertime Generic PP-CF" ], "OFMTK0UC": [ "OrcaFilamentLibrary/Bambu Support For PA/PET" ], "OFMUWNkp": [ + "Flashforge/SUNLU PLA+", "OrcaFilamentLibrary/SUNLU PLA+" ], + "OFMZAoqa": [ + "Tiertime/Tiertime Generic PVA" + ], "OFMZvH0z": [ "BBL/Overture Rock PLA", "OrcaFilamentLibrary/Overture Rock PLA" ], + "OFMgJQCZ": [ + "Anker/Anker Generic PA", + "Anker/Anker Generic PA 0.2 nozzle", + "Anker/Anker Generic PA 0.25 nozzle" + ], "OFMjtqTC": [ "OrcaFilamentLibrary/Bambu PLA Wood" ], + "OFMoLF46": [ + "FLSun/FLSun Generic TPU" + ], + "OFMpxamb": [ + "Flashforge/Flashforge PETG" + ], + "OFMqYusc": [ + "Creality/Creality Generic PA" + ], + "OFMsDGbs": [ + "Anycubic/Anycubic TPU" + ], "OFMuXBmO": [ "OrcaFilamentLibrary/Elas PLA Basic" ], - "OFN0X7oN": [ - "Qidi/QIDI PLA Basic" + "OFMyLYV8": [ + "Flashforge/Flashforge PETG Transparent" ], - "OFN0pBpo": [ - "Qidi/Qidi Generic TPU 95A" + "OFN7aNHe": [ + "Tiertime/Tiertime Generic PC" ], - "OFNQHqAV": [ - "Cubicon/Cubicon ABSk" + "OFN9fefN": [ + "Cubicon/Cubicon ABS-A100" ], - "OFNRgSch": [ - "Artillery/Artillery PC" + "OFNBlAPT": [ + "OrcaArena/Arena PETG Basic" + ], + "OFNGTH3w": [ + "Tiertime/Tiertime PLA" + ], + "OFNLXV8X": [ + "Tiertime/Tiertime Generic ABS" + ], + "OFNOxcYl": [ + "Ratrig/RatRig Generic PA-CF" + ], + "OFNQKF0M": [ + "Tiertime/Tiertime ABS" + ], + "OFNSYu5h": [ + "Volumic/Volumic PP Ultra (Performance)" ], "OFNU9YIW": [ "OrcaFilamentLibrary/FilAr PETG Azul Boreal" ], - "OFNX5uRT": [ - "Qidi/QIDI TPU-Aero" + "OFNW4ZTC": [ + "Creality/Creality Generic PLA Wood" ], - "OFNbajj9": [ - "Creality/Creality Generic ASA-CF" + "OFNWcJsM": [ + "Comgrow/Comgrow T300 PLA" + ], + "OFNWnx2c": [ + "Flashforge/Flashforge TPU-95A" + ], + "OFNX8GI1": [ + "Sovol/Sovol Zero ABS" + ], + "OFNYewRS": [ + "Blocks/Blocks Generic PLA" + ], + "OFNZYgLA": [ + "Qidi/Qidi Generic PVA" + ], + "OFNZjrLo": [ + "Sovol/Sovol SV06 Plus ACE PLA" + ], + "OFNcdCrm": [ + "Anycubic/Anycubic Generic PLA-CF" ], "OFNemJM6": [ "OrcaFilamentLibrary/FilAr PLA Cobre" @@ -3962,293 +2922,498 @@ "OFNk8bxk": [ "OrcaFilamentLibrary/Bambu PA6-GF" ], - "OFNvrbnf": [ - "Co Print/CoPrint Generic ABS" + "OFNn21yM": [ + "Vzbot/Vzbot Generic PA-CF" ], - "OFNz8rrn": [ - "FlyingBear/FlyingBear PLA Hyper" + "OFNstOna": [ + "Eryone/Eryone PETG-CF" + ], + "OFNvBIL0": [ + "Creality/Hyper PPA-CF" ], "OFO1GEq6": [ - "OrcaFilamentLibrary/Panchroma PLA Neon" + "OrcaFilamentLibrary/Panchroma PLA Neon", + "Snapmaker/Panchroma PLA Neon" ], - "OFO3IOWM": [ - "Volumic/PETG ESD (Performance)" - ], - "OFO5R9KJ": [ - "Sovol/Sovol Zero TPU" + "OFO5djrM": [ + "Flashforge/Generic PETG-CF10" ], "OFOABq7t": [ "BBL/AliZ PETG-Metal", "OrcaFilamentLibrary/AliZ PETG-Metal" ], - "OFOJUJAS": [ - "Cubicon/Cubicon PA-CF" + "OFOAdMCB": [ + "OrcaArena/Arena PLA Metal" ], - "OFOSzSuh": [ - "Flashforge/Flashforge PA-CF" + "OFOHOf2F": [ + "Creality/eSUN PLA-HS" ], - "OFOW9K96": [ - "Qidi/Qidi TPU 95A-HF" + "OFOJPAAS": [ + "iQ/VXL90 TiQ2 P2" + ], + "OFOKYhi6": [ + "Prusa/Prusa Generic PETG HF" + ], + "OFObG16Q": [ + "InfiMech/InfiMech PLA Basic" + ], + "OFObyktP": [ + "Tiertime/Tiertime PETG" ], "OFOiJfLM": [ "OrcaFilamentLibrary/FILL3D PETG CF" ], - "OFOkTA0C": [ - "Elegoo/Elegoo PETG Translucent" - ], - "OFOp3Oef": [ - "Anycubic/Generic ABS" + "OFOnSNt3": [ + "Artillery/Artillery PETG-CF" ], "OFOsHDnB": [ + "Elegoo/Elegoo PETG PRO", "OrcaFilamentLibrary/Elegoo PETG PRO" ], - "OFOvv91M": [ - "OrcaFilamentLibrary/PolyLite ABS" + "OFOuEEvv": [ + "Qidi/QIDI ABS Rapido 0.2 nozzle" ], - "OFOysPuE": [ - "Qidi/QIDI TPU-GF" + "OFOvv91M": [ + "OrcaFilamentLibrary/PolyLite ABS", + "Qidi/PolyLite ABS" + ], + "OFOwQuZM": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "OFOzwywz": [ + "Eryone/Eryone ABS" ], "OFP26zNb": [ "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" ], - "OFP4poIv": [ - "Sovol/Sovol Zero PLA Silk HS Nozzle" + "OFPHLnoe": [ + "Creality/HP-ASA" ], - "OFPGelMX": [ - "Volumic/Volumic PP Ultra (Performance)" - ], - "OFPJJxkF": [ - "Flashforge/Flashforge PET-CF" - ], - "OFPJrlC3": [ - "Flashforge/Flashforge PLA-CF" + "OFPQfNAf": [ + "Flashforge/Flashforge PETG Pro" ], "OFPWPlSC": [ "OrcaFilamentLibrary/FILL3D PP" ], + "OFPYDWgC": [ + "Peopoly/Peopoly Lancer PET-CF" + ], "OFPbyOSk": [ "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" ], "OFPc4zVY": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" ], - "OFPeGtB1": [ - "Volumic/Volumic UNIVERSAL Ultra (Performance)" + "OFPdhDlK": [ + "Anycubic/Anycubic Generic PA-CF" + ], + "OFPjOUtz": [ + "Flashforge/FusRock Generic PAHT-CF" ], "OFPkCJKE": [ - "OrcaFilamentLibrary/Panchroma PLA Satin" + "Creality/Panchroma PLA Satin", + "OrcaFilamentLibrary/Panchroma PLA Satin", + "Snapmaker/Panchroma PLA Satin" ], "OFPklMI1": [ "OrcaFilamentLibrary/Generic PE" ], - "OFPokkKe": [ - "Qidi/QIDI PETG-CF" - ], "OFPoyiFs": [ - "OrcaFilamentLibrary/Polymaker HT-PLA" + "OrcaFilamentLibrary/Polymaker HT-PLA", + "Snapmaker/Polymaker HT-PLA" ], "OFPqX3x2": [ "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" ], - "OFPwi9X0": [ - "Qidi/HATCHBOX ABS" + "OFPryWt5": [ + "Lulzbot/Lulzbot 2.85mm PLA" + ], + "OFPy0Ogq": [ + "Qidi/Qidi Generic PA-CF" + ], + "OFQ1KzO8": [ + "Snapmaker/Snapmaker J1 PLA Silk" + ], + "OFQ1zgm3": [ + "Eryone/Eryone ABS-CF" ], "OFQ3e56w": [ "OrcaFilamentLibrary/Bambu PLA Galaxy" ], - "OFQ5xAKf": [ - "Chuanying/Chuanying Generic PVA" + "OFQ40XeN": [ + "Qidi/QIDI PETG Tough" ], - "OFQ9dI8j": [ - "Prusa/Prusa Generic PC HF" + "OFQ7I5vC": [ + "Prusa/Prusa Generic PLA-CF" ], - "OFQCAYAt": [ - "Flashforge/Flashforge PPA-CF" + "OFQ9qnkd": [ + "FLSun/FLSun T1 PLA High Speed" + ], + "OFQC8Vna": [ + "Flashforge/Flashforge Generic PETG-CF" + ], + "OFQEGL7z": [ + "FlyingBear/FlyingBear PA-CF" + ], + "OFQGvU2G": [ + "OrcaArena/Arena TPU 95A" ], "OFQHiNJs": [ "OrcaFilamentLibrary/Bambu Support G" ], "OFQLcbps": [ + "Creality/Generic PA-CF", "Custom/Generic PA-CF", "OrcaFilamentLibrary/Generic PA-CF" ], + "OFQMTRc8": [ + "Snapmaker/Snapmaker J1 PETG" + ], + "OFQMsFfF": [ + "Qidi/QIDI ABS-GF10" + ], + "OFQTrLXB": [ + "Qidi/Qidi Generic PLA-CF" + ], "OFQWIKbV": [ "OrcaFilamentLibrary/FilAr PLA Titanio" ], - "OFQZINrX": [ - "Qidi/QIDI ABS-GF10" + "OFQYaiGg": [ + "Snapmaker/Snapmaker PET" + ], + "OFQZeyZv": [ + "Flashforge/Flashforge PLA Buint Ti" ], "OFQbjX3s": [ "OrcaFilamentLibrary/FILL3D PETG" ], - "OFR8dTVW": [ - "FLSun/FLSun S1 PLA High Speed" + "OFQbqeN7": [ + "Qidi/Qidi Generic PA" ], - "OFRNU58t": [ - "Flashforge/Flashforge TPU 95A" + "OFQdaVZS": [ + "Creality/Generic PET-CF", + "Elegoo/Generic PET-CF" ], - "OFRR8LUh": [ - "Flashforge/Generic ASA" + "OFQe7sAx": [ + "Anycubic/Anycubic PA6-CF" ], - "OFRgDMDJ": [ - "Flashforge/Flashforge PETG Transparent" + "OFQiq4fb": [ + "Flashforge/Flashforge PVA" + ], + "OFQswlnF": [ + "Tiertime/Tiertime Generic PA" + ], + "OFR0gODA": [ + "SeeMeCNC/SeeMeCNC ABS" + ], + "OFRDLNM9": [ + "Peopoly/Peopoly Generic PLA" + ], + "OFRJ325z": [ + "LH/LHS PETG" + ], + "OFRPEs5o": [ + "Flashforge/Flashforge Generic ASA" + ], + "OFRhBryT": [ + "Cubicon/Cubicon PLAi21" + ], + "OFRhCTUg": [ + "Anycubic/Anycubic PET-CF" + ], + "OFRi7v0b": [ + "Sovol/Sovol SV08 PETG" ], "OFRiFnfQ": [ "OrcaFilamentLibrary/Eolas Prints PETG Transition" ], "OFRiYgMK": [ - "OrcaFilamentLibrary/Panchroma PLA Celestial" + "OrcaFilamentLibrary/Panchroma PLA Celestial", + "Snapmaker/Panchroma PLA Celestial" + ], + "OFRiyes1": [ + "Anker/Anker Generic ASA", + "Anker/Anker Generic ASA 0.2 nozzle", + "Anker/Anker Generic ASA 0.25 nozzle" + ], + "OFRkjhxK": [ + "Volumic/Volumic PVA-BVOH (Performance)" + ], + "OFRmGKVX": [ + "Cubicon/Cubicon PLA+" + ], + "OFRooa0F": [ + "Snapmaker/Snapmaker Dual PA-CF" + ], + "OFRpAZ1P": [ + "DeltaMaker/DeltaMaker Brand PLA" + ], + "OFRujL0v": [ + "Flashforge/FusRock Generic PET-CF" + ], + "OFRusgEn": [ + "Chuanying/Chuanying Generic PVA" + ], + "OFRyOsZj": [ + "re3D/re3D PLA" ], "OFRzR5mi": [ "OrcaFilamentLibrary/eSUN ePLA-LW" ], - "OFS1ekCg": [ - "Ratrig/RatRig BigNozzle PCTG" + "OFRzsaDK": [ + "FlyingBear/FlyingBear Generic TPU" ], "OFS2tn6G": [ "OrcaFilamentLibrary/Fiberon PA612-CF" ], - "OFS3HrR1": [ - "InfiMech/Other PLA" + "OFS4jbj3": [ + "Eryone/Eryone PA" + ], + "OFS8JF3S": [ + "Qidi/Qidi Generic PLA High Speed" ], "OFS8lTQt": [ - "OrcaFilamentLibrary/Panchroma PLA Silk" + "OrcaFilamentLibrary/Panchroma PLA Silk", + "Snapmaker/Panchroma PLA Silk" ], - "OFSCm6pJ": [ - "Elegoo/Elegoo PET-CF" + "OFSDFYs4": [ + "Creality/Creality Generic PLA-CF" ], - "OFSSuKRr": [ - "Qidi/QIDI PETG Basic" + "OFSGbf2I": [ + "Anycubic/Anycubic Generic PVA" ], - "OFSdF3B1": [ - "Flashforge/FusRock PAHT-CF" + "OFSPdsuW": [ + "Tiertime/Tiertime Generic PPA-CF" ], - "OFSkBwxf": [ - "Ratrig/RatRig BigNozzle ASA" + "OFSStjay": [ + "FLSun/FLSun S1 PLA Silk" ], - "OFSoZBK2": [ - "Sovol/Sovol SV06 Plus ACE PLA" + "OFSTCno1": [ + "re3D/re3D Greengate rPETG" ], - "OFSpTWdv": [ - "InfiMech/Other PA-CF" + "OFSa39yP": [ + "Snapmaker/Snapmaker J1 PLA" + ], + "OFSbGfsz": [ + "OrcaArena/Arena PLA Basic" + ], + "OFShw1X8": [ + "Flashforge/Flashforge ABS Basic" ], "OFSwbBWS": [], + "OFT2jon4": [ + "Qidi/QIDI ABS Rapido" + ], "OFTGHyNC": [ "OrcaFilamentLibrary/Bambu PLA Impact" ], + "OFTKFAZ4": [ + "Tiertime/Tiertime Generic PCTG" + ], "OFTOPcx0": [ "OrcaFilamentLibrary/Eolas Prints TPU Transition" ], "OFTRZ8Y4": [ "OrcaFilamentLibrary/Bambu PETG-CF" ], - "OFTa6gPH": [ - "Flashforge/Flashforge PLA Pro" + "OFTSXxzE": [ + "Flashforge/Flashforge PPS-CF" ], - "OFTbdJyT": [ - "FlyingBear/Other PC" - ], - "OFTbsWVg": [ - "Artillery/Artillery TPU" + "OFTXduCM": [ + "Creality/eSUN ABS+" ], "OFTcE0nA": [ "OrcaFilamentLibrary/eSUN PLA-Basic" ], + "OFTdauIq": [ + "Volumic/Volumic PCTG Ultra (Performance)" + ], + "OFTkj6DR": [ + "Anycubic/Anycubic PVA" + ], "OFTlRzpe": [ "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" ], - "OFToBodi": [ - "Qidi/QIDI ABS Rapido Metal" + "OFTnWzBs": [ + "Creality/Hyper PLA-CF" ], - "OFTsGps3": [ - "InfiMech/InfiMech PC" + "OFTs8peJ": [ + "Snapmaker/Snapmaker Dual TPE" ], - "OFTszIHE": [ - "Creality/Creality Generic PLA Silk" + "OFTsHNQi": [ + "Qidi/QIDI ASA" + ], + "OFTvvox9": [ + "Sovol/Sovol SV06 ACE PLA" + ], + "OFU0n0zW": [ + "FLSun/FLSun T1 PLA Generic" ], "OFU1zPxE": [ + "Elegoo/Elegoo PLA Galaxy", "OrcaFilamentLibrary/Elegoo PLA Galaxy" ], - "OFUJw3Lx": [ - "Qidi/QIDI PEBA 95A" + "OFU3QXL7": [ + "re3D/re3D PC" ], - "OFUYjPc4": [ - "Dremel/Dremel Generic PLA" + "OFU3zwPc": [ + "Prusa/Prusa Generic TPU HF" + ], + "OFU5N9jI": [ + "OrcaArena/OrcaArena Generic TPU" + ], + "OFU6fjbi": [ + "Co Print/CoPrint Generic ABS" + ], + "OFU7CKZt": [ + "Volumic/Volumic ASA Ultra (Performance)" + ], + "OFUCpLaL": [ + "Flashforge/FlashForge PPS" + ], + "OFUF7oA4": [ + "Creality/Hyper PC" + ], + "OFUH1aee": [ + "Volumic/Volumic FLEX93 Ultra (Performance)" + ], + "OFUIfGoh": [ + "Snapmaker/Snapmaker Dual PET" + ], + "OFUScM0D": [ + "Flashforge/FusRock S-Multi" + ], + "OFUWRqwb": [ + "Creality/Creality Generic PA-CF" + ], + "OFUYCqtB": [ + "InfiMech/InfiMech PLA" + ], + "OFUaHEO9": [ + "Anycubic/Anycubic PEBA 95A" + ], + "OFUaVAdj": [ + "Tiertime/Tiertime Generic ASA" ], "OFUanySo": [ "OrcaFilamentLibrary/Bambu PLA Silk+" ], - "OFUkpobY": [ - "Qidi/QIDI PAHT-CF" + "OFUmS5z5": [ + "Creality/eSUN ASA+" ], - "OFUqBrgf": [ - "Chuanying/Chuanying Generic TPU" + "OFUrStd6": [ + "Ratrig/RatRig Generic PCTG" + ], + "OFUtGagr": [ + "Artillery/Artillery Generic PLA-CF" ], "OFUyDDNv": [ + "Elegoo/Elegoo PC", "OrcaFilamentLibrary/Elegoo PC" ], - "OFV1szQh": [ - "Peopoly/Peopoly Lancer PETG-C" + "OFV0KrAG": [ + "FLSun/FLSun T1 ABS" ], - "OFV4hD1o": [ - "Qidi/QIDI PLA Rapido Metal" + "OFV5Q7j2": [ + "Snapmaker/Snapmaker J1 TPE" ], "OFV5tNw6": [ + "Elegoo/Elegoo PET-CF", "OrcaFilamentLibrary/Elegoo PET-CF" ], - "OFVBNoov": [ - "InfiMech/InfiMech ABS" + "OFV5wEMe": [ + "Afinia/Afinia ABS" ], "OFVBlUFH": [], "OFVCkX5w": [ "OrcaFilamentLibrary/Bambu TPU 95A" ], - "OFVJXE4n": [ - "FlyingBear/Other ABS" + "OFVHMFJX": [ + "Qidi/QIDI PETG Tough 0.2 nozzle" ], - "OFVhG0yM": [ - "Qidi/QIDI ABS Odorless" + "OFVKADz5": [ + "Comgrow/Comgrow Generic PLA" ], "OFVptRxp": [ "BBL/COEX TPE 30D", "OrcaFilamentLibrary/COEX TPE 30D" ], + "OFVqZ2H0": [ + "FLSun/FLSun Generic PC" + ], + "OFVtIasg": [ + "Eryone/Eryone ASA" + ], "OFW29a9R": [ + "OrcaArena/PolyTerra PLA", "OrcaFilamentLibrary/PolyTerra PLA", "Snapmaker/PolyTerra PLA" ], - "OFW8UdlP": [ - "Qidi/QIDI ABS Rapido" + "OFW5FqkL": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "OFW9uIkE": [ + "Tiertime/Tiertime Generic HIPS" + ], + "OFWIr7ZE": [ + "CoLiDo/CoLiDo Generic ABS" + ], + "OFWRITFw": [ + "Prusa/Prusament rPLA" + ], + "OFWTAEjH": [ + "Snapmaker/Snapmaker TPE" ], "OFWTRJ1K": [ "OrcaFilamentLibrary/FilAr PLA Bronce" ], + "OFWY6vBh": [ + "Anycubic/Anycubic Generic PC" + ], "OFWYtgCa": [ + "Elegoo/Elegoo PLA Wood", "OrcaFilamentLibrary/Elegoo PLA Wood" ], + "OFWa0NiB": [ + "Volumic/Volumic NYLON Ultra" + ], + "OFWadebJ": [ + "Tiertime/Tiertime Generic PETG-CF" + ], + "OFWao3Ic": [ + "Creality/Ender-PLA" + ], + "OFWbbuRY": [ + "InfiMech/InfiMech Generic ABS" + ], "OFWbdGsC": [ + "Creality/Generic PLA-CF", + "Custom/Generic PLA-CF", "OrcaFilamentLibrary/Generic PLA-CF" ], - "OFWkCAdc": [ - "Qidi/QIDI PETG Tough 0.2 nozzle" + "OFWgFOjn": [ + "Snapmaker/Snapmaker PLA Silk" ], - "OFWs8KIZ": [ - "Flashforge/Flashforge ABS-CF" + "OFWnSvGu": [ + "Flashforge/Flashforge ASA-GF" ], - "OFWv6JYn": [ - "Flashforge/Flashforge PLA Metal" + "OFWof1Ap": [ + "FLSun/FLSun Generic ABS" + ], + "OFWukXja": [ + "Qidi/Qidi Generic TPU 95A" ], "OFWwF7K7": [ "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" ], - "OFWyCd0Y": [ - "Qidi/QIDI Support For PET/PA" + "OFWzr7m0": [ + "Anycubic/Anycubic Generic PETG" ], "OFX0ycRQ": [ "OrcaFilamentLibrary/Fiberon PA12-CF" ], - "OFXA8vy9": [ - "Artillery/Artillery PLA Basic+" + "OFX2zcrM": [ + "Flashforge/Generic PLA-CF10" ], "OFXCBZTA": [ "OrcaFilamentLibrary/Eolas Prints ABS" @@ -4256,93 +3421,158 @@ "OFXIbw5D": [ "OrcaFilamentLibrary/Bambu PLA Matte" ], - "OFXNO5Of": [ - "Qidi/QIDI PLA Rapido 0.2 nozzle" - ], - "OFXQX0tr": [ - "Ratrig/RatRig PunkFil PETG CF" + "OFXJ9iom": [ + "iQ/Grauts HPP4GF25 P1" ], "OFXTPuqV": [ "OrcaFilamentLibrary/Elas PETG Basic" ], - "OFXcfTEb": [ - "Qidi/Tinmorry PETG-ECO" + "OFXXUHSG": [ + "Chuanying/Chuanying Generic PETG-CF10" ], - "OFXfgh61": [ - "Prusa/Prusa Generic PA-CF" + "OFXhZ3uY": [ + "OrcaArena/OrcaArena Generic PC" + ], + "OFXi59OX": [ + "Afinia/Afinia Value ABS" + ], + "OFXk1emJ": [ + "Artillery/Artillery PLA Basic" ], "OFXkm8q1": [ + "Creality/Generic PP-CF", "OrcaFilamentLibrary/Generic PP-CF" ], - "OFXkwkn6": [ - "Qidi/QIDI PA-Ultra" + "OFXn3Vd9": [ + "Qidi/QIDI Support For PAHT" ], - "OFXv4FUi": [ - "Flashforge/Flashforge PLA Galaxy" + "OFXnToSX": [ + "Creality/Hyper Stardust" + ], + "OFXuGxvQ": [ + "Volumic/Volumic PLA Ultra" + ], + "OFXuwtnq": [ + "Co Print/CoPrint Generic PETG" + ], + "OFXyyfX6": [ + "Anker/Anker Generic PLA Silk", + "Anker/Anker Generic PLA Silk 0.2 nozzle", + "Anker/Anker Generic PLA Silk 0.25 nozzle" ], "OFXz7Mwx": [ + "Elegoo/Elegoo PLA Silk", "OrcaFilamentLibrary/Elegoo PLA Silk" ], "OFXzQ4yL": [ "OrcaFilamentLibrary/Bambu ASA-Aero" ], - "OFY1U4uM": [ - "Sovol/Sovol SV08 TPU" + "OFY0F5qA": [ + "Volumic/Volumic PETG Ultra carbone (Performance)" + ], + "OFY3AB7j": [ + "Snapmaker/Snapmaker J1 PLA Matte" ], "OFY9muEs": [ + "Anycubic/Generic ABS", + "Creality/Generic ABS", "Custom/Generic ABS", + "Elegoo/Generic ABS", + "Flashforge/Generic ABS", "OrcaFilamentLibrary/Generic ABS", - "Sovol/Generic ABS" + "RH3D/Generic ABS", + "Sovol/Generic ABS", + "Z-Bolt/Generic ABS" ], - "OFYG2Gfy": [ - "Afinia/Afinia ABS+" + "OFYEtXuk": [ + "Snapmaker/Snapmaker J1 PA-CF" ], "OFYGbPHX": [ - "OrcaFilamentLibrary/PolyLite Dual PLA" + "OrcaFilamentLibrary/PolyLite Dual PLA", + "Snapmaker/PolyLite Dual PLA" ], - "OFYH00jV": [ - "Qidi/QIDI ABS-GF" + "OFYHzKyS": [ + "Vzbot/Vzbot Generic PLA-CF" ], - "OFYICbI4": [ - "Flashforge/FusRock Generic PAHT-CF" + "OFYPdJ7t": [ + "Creality/Creality Generic ABS" ], "OFYPdQJh": [ + "Anycubic/Generic PETG", + "Creality/Generic PETG", + "Custom/Generic PETG", + "Elegoo/Generic PETG", + "Flashforge/Generic PETG", + "LONGER/Generic PETG", "OrcaFilamentLibrary/Generic PETG", - "Sovol/Generic PETG" - ], - "OFYRS7GZ": [ - "Flashforge/Generic TPU-95A" - ], - "OFYZs7dN": [ - "Flashforge/Flashforge Generic HS PLA" + "RH3D/Generic PETG", + "Sovol/Generic PETG", + "Z-Bolt/Generic PETG" ], "OFYd5uS3": [], - "OFYehFGr": [ - "Ratrig/RatRig BigNozzle TPU" - ], - "OFYfZgxU": [ + "OFYezc6s": [ "FlyingBear/FlyingBear TPU" ], + "OFYl0c8v": [ + "Flashforge/Flashforge Generic HIPS" + ], + "OFYlZMmy": [ + "Chuanying/Chuanying Generic TPU" + ], + "OFYlthXI": [ + "Flashforge/Flashforge Generic PLA-CF" + ], + "OFYtS9zg": [ + "Flashforge/FusRock PAHT-CF" + ], + "OFYuowge": [ + "FlyingBear/Other ABS", + "InfiMech/Other ABS" + ], + "OFYvSO1W": [ + "Flashforge/Flashforge Generic PLA-Silk" + ], + "OFZ0mR5b": [ + "Anycubic/Anycubic PLA-CF" + ], + "OFZ1hANN": [ + "Flashforge/FusRock Generic NexPA-CF25" + ], + "OFZ2LuAi": [ + "Wanhao France/YUMI PLA Bowden" + ], "OFZ4QbfK": [ "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" ], - "OFZAkPHG": [ - "Qidi/QIDI PPS-GF" + "OFZ4fTO8": [ + "CONSTRUCT3D/C1 Generic High Flow PETG" ], - "OFZQFvHQ": [ - "Flashforge/Flashforge HS PETG" + "OFZHgTVI": [ + "Flashforge/Flashforge Generic PETG" ], - "OFZcrV9c": [ - "Flashforge/Flashforge PPS-CF" + "OFZLtWYs": [ + "Qidi/QIDI ABS-GF25" ], - "OFZjZ1k7": [ - "Creality/Creality HF Generic PLA" + "OFZOuWrO": [ + "Qidi/QIDI PPS-CF" ], - "OFa5cFqE": [ - "Qidi/QIDI Support For PAHT" + "OFZPlCck": [ + "Chuanying/Chuanying Generic ABS" ], - "OFa6L3Of": [ - "Qidi/Qidi PC-ABS-FR" + "OFZivHGL": [ + "Snapmaker/Snapmaker Dual PLA" + ], + "OFZsChIG": [ + "Qidi/Qidi Generic TPU" + ], + "OFZtOQtl": [ + "Flashforge/Flashforge PA6-CF" + ], + "OFZtkHRq": [ + "Anycubic/Anycubic PC" + ], + "OFaBwRvT": [ + "Flashforge/Flashforge ASA Basic" ], "OFaDOaNt": [ "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" @@ -4350,74 +3580,130 @@ "OFaEesXQ": [ "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" ], - "OFaKIoH2": [ - "Elegoo/Elegoo PLA Sparkle" + "OFaEuvNF": [ + "Anycubic/Anycubic PAHT-CF" ], - "OFaKZ6JI": [ - "Anycubic/Generic PETG Basic" + "OFaFNP2U": [ + "Sovol/Sovol SV07 PLA" + ], + "OFaHjk1V": [ + "Volumic/Volumic PC" + ], + "OFaP2SsH": [ + "LH/LHS ASA" ], "OFaQMgRH": [ "OrcaFilamentLibrary/Bambu PLA Tough" ], + "OFaRjiIm": [ + "SeeMeCNC/SeeMeCNC PETG-CF" + ], + "OFaU2JxD": [ + "Dremel/Dremel Generic PLA" + ], "OFaYz8iE": [ "OrcaFilamentLibrary/Elas PLA Pro" ], + "OFaeIx7W": [ + "iQ/Polymaker PETG Polymax black P1" + ], + "OFafO6VM": [ + "Elegoo/Generic PC-CF" + ], + "OFafocjw": [ + "Cubicon/Cubicon ABS" + ], + "OFahE7HP": [ + "Blocks/Blocks Generic PC" + ], "OFausr3F": [ "OrcaFilamentLibrary/FilAr PLA-mate Rosa" ], - "OFaxQnfz": [ - "Cubicon/Cubicon PC" + "OFaz8VoR": [ + "Flashforge/Flashforge HIPS" ], - "OFb3UzMZ": [ - "InfiMech/InfiMech PA-CF" - ], - "OFbK5wve": [ - "Prusa/Prusa Generic TPU HF" + "OFb5EEM3": [ + "Artillery/Artillery PET" ], "OFbP8zEO": [ "OrcaFilamentLibrary/Eolas Prints PLA Silk" ], - "OFbS9rjH": [ - "Qidi/QIDI PETG Rapido" + "OFbSChKb": [ + "SeeMeCNC/SeeMeCNC PLA" ], - "OFbYP6Wb": [ - "Elegoo/Elegoo PLA Marble" + "OFbSZBOi": [ + "InfiMech/InfiMech TPU Basic" ], - "OFc2SnEp": [ - "Artillery/Artillery PVA" + "OFbeeFkl": [ + "OrcaArena/OrcaArena Generic PLA Silk" + ], + "OFbenYUK": [ + "Prusa/Prusa Generic TPU" + ], + "OFbh7HcA": [ + "Eryone/Eryone PP-CF" + ], + "OFbjtPQy": [ + "FLSun/FLSun T1 ASA" + ], + "OFbt04e0": [ + "DeltaMaker/DeltaMaker Generic TPU" + ], + "OFc0xiCz": [ + "InfiMech/InfiMech Generic TPU" ], "OFc3xdm9": [ - "OrcaFilamentLibrary/Overture PLA" + "OrcaFilamentLibrary/Overture PLA", + "Qidi/Overture PLA" ], - "OFcZZWnB": [ - "Cubicon/Cubicon ABS-A100" + "OFc87pL3": [ + "OrcaArena/Arena PET-CF" ], - "OFceJcLf": [ - "Qidi/PolyLite PLA" + "OFcBJQcC": [ + "Snapmaker/Snapmaker Dual TPU High-Flow" + ], + "OFcCzEkS": [ + "Prusa/Prusa Generic PVA" + ], + "OFcJ7AKd": [ + "Sovol/Sovol SV08 PLA" + ], + "OFcJDtTx": [ + "Artillery/Artillery TPU" + ], + "OFcKtw8W": [ + "Volumic/PA6 CF20 (Performance)" + ], + "OFcdqaWI": [ + "Sovol/Sovol Zero PC" ], "OFcfQk4h": [ "BBL/Overture Air PLA", "OrcaFilamentLibrary/Overture Air PLA" ], - "OFcqs5g7": [ - "Elegoo/Elegoo PLA Translucent2" + "OFcogyWl": [ + "WonderMaker/WonderMaker PLA Metal" ], - "OFcsHCy4": [ - "Sovol/Sovol SV08 PLA" + "OFctbSkL": [ + "Blocks/Blocks Generic ASA-CF" + ], + "OFctg8r1": [ + "CoLiDo/CoLiDo PLA+" ], "OFcvKkrs": [ "BBL/Overture TPU", "OrcaFilamentLibrary/Overture TPU" ], - "OFcy60o4": [ - "Flashforge/Flashforge ASA Basic" - ], "OFcytyoA": [ - "OrcaFilamentLibrary/Fiberon PETG-ESD" + "OrcaFilamentLibrary/Fiberon PETG-ESD", + "Snapmaker/Fiberon PETG-ESD" ], "OFd0Fv0k": [ "OrcaFilamentLibrary/Generic PE-CF" ], + "OFd10YeG": [ + "Ratrig/RatRig Generic PLA" + ], "OFd2vX0G": [ "BBL/COEX PLA PRIME", "OrcaFilamentLibrary/COEX PLA PRIME" @@ -4426,80 +3712,154 @@ "BBL/AliZ PA-CF", "OrcaFilamentLibrary/AliZ PA-CF" ], + "OFdD5Wbu": [ + "Snapmaker/Snapmaker J1 PLA-CF" + ], + "OFdEIwxy": [ + "Flashforge/Flashforge Generic PLA-CF10" + ], + "OFdHsxB4": [ + "TwoTrees/TwoTrees Generic 95A TPU" + ], "OFdI4zMo": [], - "OFdLGn0R": [ - "Creality/Creality Generic PLA Wood" + "OFdLdGgJ": [ + "OrcaArena/OrcaArena Generic PVA" ], - "OFdNORGt": [ - "Flashforge/Flashforge ASA-GF" + "OFdOWhCa": [ + "Ratrig/RatRig Generic PC" ], - "OFdSGkUG": [ - "Anycubic/Anycubic PETG" + "OFdXVjGZ": [ + "Tiertime/Tiertime PC" + ], + "OFdXgp2K": [ + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying HS PLA" ], "OFdb8YNz": [ "OrcaFilamentLibrary/FilAr PLA Verde Manzana" ], - "OFdhVJql": [ - "Flashforge/Flashforge PLA Buint Ti" + "OFdkWDiy": [ + "Cubicon/Cubicon PLAi21" + ], + "OFdlGycb": [ + "CoLiDo/CoLiDo Generic TPU" + ], + "OFdrYBmI": [ + "Tiertime/Tiertime ASA" + ], + "OFdtPd9h": [ + "Qidi/QIDI PETG-GF" ], "OFdzlrhi": [ "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" ], - "OFeFRwST": [ - "Flashforge/Flashforge PVA" + "OFe61n6v": [ + "Ratrig/RatRig PunkFil PETG CF" ], - "OFePPmng": [ - "Snapmaker/Snapmaker J1 ABS Benchy" + "OFe6sfXS": [ + "Flashforge/FlashForge PC" ], - "OFeWMAGH": [ - "Flashforge/Flashforge HS PLA Burnt Ti" + "OFe7Sx5B": [ + "Sovol/Sovol SV06 ACE PETG" ], - "OFefhSuj": [ - "InfiMech/InfiMech PLA Hyper" + "OFe8UJXH": [ + "Creality/Creality Generic PC" + ], + "OFe8tuNb": [ + "Tiertime/Tiertime PA6-CF" + ], + "OFe8yBMG": [ + "Qidi/QIDI PETG Tough 0.6 nozzle" + ], + "OFeAxvEt": [ + "Snapmaker/Snapmaker Dual ABS Benchy" + ], + "OFeCJqxx": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "OFeDfaCh": [ + "CoLiDo/CoLiDo Generic PLA" + ], + "OFeIyhUx": [ + "Anycubic/Anycubic PC-CF" + ], + "OFeJjoKF": [ + "FLSun/FLSun Generic PA" + ], + "OFeK2vkS": [ + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying PLA-SILK" + ], + "OFeTATC7": [ + "Snapmaker/Snapmaker J1 Breakaway" + ], + "OFeVzkSU": [ + "Snapmaker/Fiberon PPS-GF20" + ], + "OFec7Qiw": [ + "Flashforge/Flashforge PLA Sparkle" + ], + "OFeelsSM": [ + "Qidi/HATCHBOX PLA" + ], + "OFelDBgv": [ + "Snapmaker/Polymaker PLA" + ], + "OFepU7Tl": [ + "WonderMaker/WonderMaker PLA Matte" ], "OFesA6rF": [ "Flashforge/Generic PLA Silk", - "OrcaFilamentLibrary/Generic PLA Silk" + "OrcaFilamentLibrary/Generic PLA Silk", + "Sovol/Generic PLA Silk" + ], + "OFetENFF": [ + "OrcaArena/OrcaArena Generic ABS" ], "OFexaZU2": [ "OrcaFilamentLibrary/FilAr PLA Manteca" ], - "OFeybQvK": [ - "Qidi/QIDI ABS Rapido 0.2 nozzle" - ], - "OFf0JIqs": [ - "Eryone/Eryone PP" - ], - "OFf2b9wu": [ - "Anycubic/Anycubic ABS" + "OFf0MkD5": [ + "Qidi/QIDI PETG Translucent" ], "OFf5awy4": [ "OrcaFilamentLibrary/Eolas Prints PLA Matte" ], + "OFf6ZEvu": [ + "InfiMech/InfiMech PC" + ], "OFf6mfQO": [ "OrcaFilamentLibrary/Bambu Support for ABS" ], + "OFf6ynfH": [ + "FlyingBear/FlyingBear PETG Basic" + ], "OFfBpSRI": [ "OrcaFilamentLibrary/Bambu ASA" ], + "OFfHGM1D": [ + "re3D/re3D rPP" + ], "OFfJSCzm": [ "OrcaFilamentLibrary/FDplast PETG" ], - "OFfJoIgg": [ - "Qidi/QIDI PAHT-GF" + "OFfSqS4R": [ + "Creality/ENDER FAST PLA" + ], + "OFfZ0lTS": [ + "Qidi/Qidi Generic PETG-CF" ], "OFfZcoKr": [ "OrcaFilamentLibrary/FilAr PLA-mate Piel" ], - "OFfdxQok": [ - "Qidi/Generic PLA+" + "OFfb10SK": [ + "Artillery/Artillery PC" ], - "OFfiN1Lw": [ - "Chuanying/Chuanying Generic HS PLA", - "Chuanying/Chuanying HS PLA" + "OFfegVpA": [ + "Flashforge/Polymaker Generic S1" ], - "OFfkPhrJ": [ - "Creality/Creality HF Generic Speed PLA" + "OFfmHUkQ": [ + "Snapmaker/Snapmaker Dual Breakaway" ], "OFfmZrI3": [ "OrcaFilamentLibrary/FDplast TPU" @@ -4508,9 +3868,6 @@ "BBL/COEX TPE 40D", "OrcaFilamentLibrary/COEX TPE 40D" ], - "OFfoA8kJ": [ - "CoLiDo/CoLiDo PLA" - ], "OFfq5YXA": [ "OrcaFilamentLibrary/Valment PLA-CF" ], @@ -4518,14 +3875,24 @@ "BBL/COEX TPE 60D", "OrcaFilamentLibrary/COEX TPE 60D" ], - "OFftQOek": [ - "Flashforge/Flashforge PLA Matte" + "OFfr6JDF": [ + "Qidi/QIDI PETG Tough 0.8 nozzle" ], "OFfuhviw": [ + "Elegoo/Elegoo PLA Marble", "OrcaFilamentLibrary/Elegoo PLA Marble" ], - "OFg4N6ZL": [ - "FlyingBear/FlyingBear PETG" + "OFfuih8e": [ + "Creality/Creality Silk PLA" + ], + "OFfxFQf9": [ + "Chuanying/Chuanying Generic PETG" + ], + "OFfznI0Q": [ + "Prusa/Prusa Generic PA-CF" + ], + "OFg3cWVt": [ + "Snapmaker/Snapmaker Dual PLA Metal" ], "OFg57Nmc": [ "OrcaFilamentLibrary/Bambu PC FR" @@ -4534,175 +3901,290 @@ "OrcaFilamentLibrary/FILL3D PPCF" ], "OFg8ndtj": [ + "Creality/Generic PA", "Custom/Generic PA", - "OrcaFilamentLibrary/Generic PA" + "Elegoo/Generic PA", + "OrcaFilamentLibrary/Generic PA", + "Z-Bolt/Generic PA" ], - "OFgJX0Fc": [ - "Flashforge/FlashForge PPS" - ], - "OFgK2Xvv": [ - "Anycubic/Anycubic PLA" - ], - "OFgMGSpF": [ - "Sovol/Sovol SV06 Plus ACE PETG" + "OFgHh8ly": [ + "Afinia/Afinia Value PLA" ], "OFgMWJ8T": [ "OrcaFilamentLibrary/FilAr PLA Negro Azabache" ], - "OFgNzLVh": [ - "Sovol/Sovol Zero ABS" + "OFgSEwOZ": [ + "OrcaArena/OrcaArena Generic PETG" ], - "OFgSK1hL": [ - "Anycubic/Anycubic PLA High Speed" + "OFgSPtDn": [ + "MagicMaker/MM Generic PEEK" + ], + "OFgSbX7E": [ + "Volumic/Volumic PC (Performance)" + ], + "OFgVJhVt": [ + "Tiertime/Tiertime Generic PLA-CF" + ], + "OFgVQkqW": [ + "Cubicon/Cubicon ABSk" + ], + "OFgXgt98": [ + "Artillery/Artillery ABS" ], "OFgbpcy9": [ + "Anycubic/Generic TPU", + "Creality/Generic TPU", + "Custom/Generic TPU", + "Flashforge/Generic TPU", "OrcaFilamentLibrary/Generic TPU", + "RH3D/Generic TPU", "Sovol/Generic TPU" ], - "OFglpvEE": [ - "Sovol/Sovol SV06 ACE TPU" + "OFgcryz4": [ + "Ratrig/RatRig BigNozzle ASA" + ], + "OFgeM7nD": [ + "Flashforge/Flashforge PA12-CF" + ], + "OFgf4gZa": [ + "Flashforge/Flashforge PA" + ], + "OFglhKLM": [ + "Qidi/QIDI PLA Rapido 0.8 nozzle" ], "OFgpLTMR": [ "OrcaFilamentLibrary/FilAr PETG Gris Plata" ], - "OFgrGfPy": [ - "Anycubic/Anycubic PLA+" + "OFgpQwkk": [ + "Creality/CR-PLA Fluo" ], - "OFgtZjeX": [ - "Snapmaker/Snapmaker ABS Benchy" + "OFgptDSf": [ + "OrcaArena/Arena PLA Matte" ], - "OFh5GUhZ": [ - "Elegoo/Elegoo PLA Wood" + "OFgvOmM2": [ + "Anker/Anker Generic PETG", + "Anker/Anker Generic PETG 0.2 nozzle", + "Anker/Anker Generic PETG 0.25 nozzle" + ], + "OFgyPlwU": [ + "Snapmaker/Snapmaker TPU High-Flow" + ], + "OFh7mvPO": [ + "Prusa/Prusament PVB" + ], + "OFh9u9c0": [ + "Creality/Generic PA6-GF" ], "OFhASRWj": [ - "OrcaFilamentLibrary/Panchroma PLA Temp Shift" - ], - "OFhKNHC8": [ - "Elegoo/Generic PETG PRO" + "OrcaFilamentLibrary/Panchroma PLA Temp Shift", + "Snapmaker/Panchroma PLA Temp Shift" ], "OFhMO9Kh": [ "OrcaFilamentLibrary/GreenGate3D PETG" ], + "OFhO5aEJ": [ + "Ratrig/RatRig PunkFil ABS" + ], + "OFhQf8ou": [ + "Snapmaker/Snapmaker PLA-CF" + ], "OFhQfUQY": [ "OrcaFilamentLibrary/Generic SBS" ], + "OFhTPf6L": [ + "Creality/Generic PA6-CF", + "Elegoo/Generic PA6-CF" + ], + "OFhUjPA5": [ + "Eryone/Eryone TPU" + ], "OFhWc5Bv": [ "OrcaFilamentLibrary/NIT ABS" ], "OFhWhL1i": [ "OrcaFilamentLibrary/Eolas Prints PETG" ], + "OFhWrAuP": [ + "Qidi/QIDI PLA-CF" + ], + "OFhbolij": [ + "Creality/eSUN PLA-Lite" + ], "OFhcYzR8": [ + "Elegoo/Elegoo PLA Sparkle", "OrcaFilamentLibrary/Elegoo PLA Sparkle" ], + "OFhcrFw9": [ + "Creality/Creality Generic TPU" + ], "OFhfd722": [ "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" ], + "OFhiJE7Y": [ + "Qidi/QIDI PEBA 95A" + ], + "OFhkN0a7": [ + "Creality/Hyper PA612-CF" + ], "OFhlCNqq": [ "BBL/COEX PLA", "OrcaFilamentLibrary/COEX PLA" ], "OFhuaUQB": [ - "OrcaFilamentLibrary/Bambu ABS" + "OrcaFilamentLibrary/Bambu ABS", + "Qidi/Bambu ABS" ], - "OFhzHd2Y": [ - "Flashforge/Flashforge HIPS" + "OFhwiZ50": [ + "Qidi/QIDI PLA Rapido 0.2 nozzle" ], - "OFi1ocNv": [ - "Flashforge/Flashforge PA" + "OFhx4uOG": [ + "Qidi/QIDI PET-GF" + ], + "OFi5RSve": [ + "Creality/eSUN PLA-LW" + ], + "OFi6PfUM": [ + "Creality/Generic PLA-Silk" + ], + "OFi7Bf0F": [ + "Flashforge/Flashforge ABS-CF" + ], + "OFi90KlM": [ + "Volumic/Volumic NYLON Ultra (Performance)" + ], + "OFiCHnso": [ + "Prusa/Prusa Generic PLA" ], "OFiDpM1B": [ "OrcaFilamentLibrary/FilAr PLA-mate Bordo" ], - "OFiJYDPC": [ - "Qidi/HATCHBOX PLA" + "OFiEz2XI": [ + "Cubicon/Cubicon PA-CF" + ], + "OFiUSDih": [ + "Blocks/Blocks Generic PA" ], "OFiWaoqD": [ "OrcaFilamentLibrary/DREMC PPA-CF" ], - "OFic2uNr": [ - "Sovol/Sovol SV06 ACE PLA" + "OFifxPW1": [ + "DeltaMaker/DeltaMaker Generic PLA" ], - "OFicxmSa": [ - "Prusa/Prusa Generic PLA HF" + "OFilAA3b": [ + "Eryone/Eryone PLA-CF" ], - "OFidJLn8": [ - "Qidi/PolyLite ABS" + "OFilD4bP": [ + "FlyingBear/FlyingBear PLA" ], - "OFiyGNbI": [ - "Elegoo/Elegoo PETG-CF" + "OFilnglt": [ + "Artillery/Artillery PETG" + ], + "OFin64Qg": [ + "Creality/Generic Support for PLA" + ], + "OFiorRtJ": [ + "Blocks/Blocks Generic PVA" + ], + "OFitS8al": [ + "Snapmaker/PolyLite PLA Neon" + ], + "OFiuJSmy": [ + "Ratrig/RatRig BigNozzle PLA" + ], + "OFiwEbze": [ + "Volumic/PETG ESD (Performance)" ], "OFj3bTjw": [ "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" ], - "OFjFPhUC": [ - "Prusa/Prusament rPLA" + "OFj64R5U": [ + "Peopoly/Peopoly Lancer ABS-GF" + ], + "OFjD3YTW": [ + "Qidi/Qidi PC-ABS-FR" + ], + "OFjHrAX0": [ + "WonderMaker/WonderMaker ABS" + ], + "OFjLAYgO": [ + "Anycubic/Anycubic PEBA" ], "OFjPXrXO": [ + "Elegoo/Elegoo PLA Glow", "OrcaFilamentLibrary/Elegoo PLA Glow" ], "OFjT9PkZ": [ "OrcaFilamentLibrary/FilAr PLA Tabaco" ], - "OFjZw7k1": [ - "Snapmaker/PolyTerra J1 PLA" + "OFjUGUIK": [ + "iQ/Fiberthree PACF Pro P1" + ], + "OFjVOWfJ": [ + "Anycubic/Anycubic PLA High Speed" + ], + "OFjXrKFO": [ + "OrcaArena/Arena PLA Impact" ], "OFjb0wos": [ - "OrcaFilamentLibrary/Panchroma PLA Metallic" + "OrcaFilamentLibrary/Panchroma PLA Metallic", + "Snapmaker/Panchroma PLA Metallic" ], - "OFjdTQd6": [ - "Anycubic/Anycubic PLA Silk" + "OFjcwUEm": [ + "Cubicon/Cubicon PLA" ], - "OFjepy6j": [ - "Flashforge/FusRock Generic S-PAHT" + "OFjkdnyN": [ + "Snapmaker/Snapmaker Dual TPU" ], - "OFjj9Yiz": [ - "Ratrig/RatRig BigNozzle PETG" + "OFjoAe0R": [ + "Qidi/Qidi PLA-CF" ], - "OFjohFkg": [ - "Qidi/QIDI PETG Translucent" + "OFjoIVZ6": [ + "FlyingBear/FlyingBear Generic PA-CF" ], "OFjorDcx": [ "OrcaFilamentLibrary/FDplast ABS" ], - "OFjqPjjl": [ - "Flashforge/Generic PET" - ], "OFjt9en1": [ "OrcaFilamentLibrary/Generic CoPE" ], - "OFjurQ3I": [ - "Sovol/Sovol Zero PETG" - ], - "OFk388hR": [ - "Elegoo/Generic PA6-CF" - ], - "OFk6T5YH": [ - "Sovol/Sovol Zero PETG HS Nozzle" + "OFjz0a3m": [ + "Prusa/Prusament PC-CF" ], "OFk8t9mz": [ "OrcaFilamentLibrary/Fiberon PETG-rCF" ], + "OFkAltI8": [ + "FlyingBear/Other PA-CF", + "InfiMech/Other PA-CF" + ], + "OFkGp50Y": [ + "Volumic/Volumic UNIVERSAL Ultra (Performance)" + ], "OFkGvN4d": [ "OrcaFilamentLibrary/FilAr PLA Verde Pixel" ], "OFkOviHk": [ "OrcaFilamentLibrary/Fiberon PA6-CF" ], - "OFkaDtKx": [ - "Flashforge/Flashforge PA66-CF" + "OFkR8E2c": [ + "Prusa/Prusament PETG" ], - "OFkeeluv": [ - "Prusa/Prusa Generic ASA HF" + "OFkUaDnU": [ + "Tiertime/Tiertime Generic PE-CF" ], - "OFkfK62J": [ - "Elegoo/Elegoo PLA Silk" + "OFkWaWRo": [ + "Sovol/Sovol SV06 Plus ACE TPU" + ], + "OFkYkQGO": [ + "Tiertime/Tiertime Generic PP-GF" ], "OFkhhUS0": [ + "Elegoo/Elegoo Rapid PLA+", "OrcaFilamentLibrary/Elegoo Rapid PLA+" ], - "OFklg4aM": [ - "Elegoo/Elegoo PLA PRO" + "OFklJcWK": [ + "FlyingBear/Other PLA Hyper", + "InfiMech/Other PLA Hyper" ], "OFknl9Iz": [ "OrcaFilamentLibrary/Bambu ABS-GF" @@ -4710,453 +4192,681 @@ "OFkoLUtR": [ "OrcaFilamentLibrary/FilAr PLA Verde Oliva" ], - "OFkoT6jl": [ - "Prusa/Prusament PLA" + "OFkq7rPy": [ + "Eryone/Eryone PA-GF" + ], + "OFks6esg": [ + "Creality/EN-PLA+" + ], + "OFkwIWwc": [ + "Flashforge/Flashforge PLA Color Change" + ], + "OFkx5MEe": [ + "Artillery/Artillery PVA" ], "OFkzr35f": [ "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" ], - "OFlN56xW": [ - "Chuanying/Chuanying Generic PLA-Silk", - "Chuanying/Chuanying PLA-SILK" + "OFl2SXmv": [ + "Prusa/Prusa Generic FLEX" ], - "OFlNKZLP": [ - "Flashforge/Flashforge PLA Metal" + "OFl4ItvQ": [ + "Prusa/Prusa Generic PLA HF" + ], + "OFl7nOAf": [ + "Sovol/Sovol SV06 Plus ACE PETG" + ], + "OFlBoEfL": [ + "Snapmaker/Snapmaker J1 TPU High-Flow" + ], + "OFlIsW6f": [ + "Snapmaker/Snapmaker Dual PLA Matte" + ], + "OFlLmUeV": [ + "Ginger Additive/Ginger Generic PLA" + ], + "OFlN6DL1": [ + "Qidi/QIDI PA-Ultra" + ], + "OFlNWVr5": [ + "Flashforge/Flashforge Generic PETG-CF10" ], "OFlP3KWq": [ + "Elegoo/Elegoo PETG HF", "OrcaFilamentLibrary/Elegoo PETG HF" ], "OFlSNkhc": [ "OrcaFilamentLibrary/Eolas Prints ASA" ], - "OFlbn4FY": [ - "Snapmaker/Snapmaker PLA Matte" + "OFlXJxX1": [ + "Chuanying/Chuanying PETG" + ], + "OFllmFhT": [ + "Elegoo/Generic PETG PRO" ], "OFln72PT": [ + "Elegoo/Elegoo PLA-CF", "OrcaFilamentLibrary/Elegoo PLA-CF" ], "OFlsTpJG": [ + "Elegoo/Elegoo PC-FR", "OrcaFilamentLibrary/Elegoo PC-FR" ], + "OFlufQpZ": [ + "Snapmaker/Snapmaker PLA" + ], "OFlwmqrC": [ - "OrcaFilamentLibrary/Polymaker HT-PLA-GF" + "OrcaFilamentLibrary/Polymaker HT-PLA-GF", + "Snapmaker/Polymaker HT-PLA-GF" ], - "OFlxnxDx": [ - "Tiertime/Tiertime Generic SBS" - ], - "OFlzQ0IS": [ - "Peopoly/Peopoly Lancer PET-CF" + "OFlx52rn": [ + "Ratrig/RatRig Generic PLA-CF" ], "OFm06H6V": [ + "Elegoo/Elegoo PLA Basic", "OrcaFilamentLibrary/Elegoo PLA Basic" ], - "OFm1VZed": [ - "Flashforge/Flashforge Generic PLA-CF" + "OFm4ysMO": [ + "FlyingBear/FlyingBear ABS" ], - "OFmF1xL9": [ - "Qidi/QIDI ASA-CF" + "OFm70lLt": [ + "CoLiDo/CoLiDo PLA" + ], + "OFmFwUWM": [ + "Prusa/Prusament ASA" ], "OFmJAd3A": [ "OrcaFilamentLibrary/FDplast HIPS" ], - "OFmKNi3f": [ - "Qidi/QIDI PLA Rapido" + "OFmKU2Ha": [ + "Eryone/Eryone PLA" ], - "OFmOWC74": [ - "Elegoo/Elegoo PETG PRO" + "OFmQkb3c": [ + "Flashforge/Flashforge HS PLA Burnt Ti" ], "OFmY0l6t": [ + "Elegoo/Generic PLA Matte", "OrcaFilamentLibrary/Generic PLA Matte" ], + "OFma52eS": [ + "Blocks/Blocks Generic ABS" + ], + "OFma5TXH": [ + "Qidi/QIDI ABS Odorless" + ], "OFmaeU4a": [ "OrcaFilamentLibrary/FilAr PLA-mate Naranja" ], - "OFmcJsqt": [ - "InfiMech/InfiMech TPU" + "OFmexHIS": [ + "Ratrig/RatRig BigNozzle PETG" ], - "OFmduKVr": [ - "Flashforge/FlashForge PPS-CF" - ], - "OFmgesco": [ - "Flashforge/Flashforge TPU 65D" + "OFmfizbq": [ + "OrcaArena/Arena PLA Silk" ], "OFmhJs5V": [ + "Elegoo/Elegoo TPU 95A", "OrcaFilamentLibrary/Elegoo TPU 95A" ], + "OFmhWhEf": [ + "Creality/Creality HF Generic PLA" + ], + "OFmjN2bc": [ + "Anycubic/Anycubic PLA" + ], "OFmn9NZL": [ "OrcaFilamentLibrary/FusRock ABS-GF" ], + "OFmnJNqY": [ + "OrcaArena/OrcaArena Generic PA" + ], "OFmpMwxS": [ + "Flashforge/Generic PLA High Speed", "OrcaFilamentLibrary/Generic PLA High Speed" ], "OFmveLWz": [ + "Elegoo/Elegoo PETG-GF", "OrcaFilamentLibrary/Elegoo PETG-GF" ], + "OFmzftED": [ + "OrcaArena/OrcaArena Generic ASA" + ], "OFn1QaY3": [ + "Elegoo/Elegoo PLA Translucent2", "OrcaFilamentLibrary/Elegoo PLA Translucent2" ], - "OFnLnZQo": [ - "Cubicon/Cubicon PC" + "OFn2GlhY": [ + "Creality/Hyper PA6-CF" ], - "OFnMW5jr": [ - "FlyingBear/FlyingBear ABS" + "OFn6WpN7": [ + "Qidi/QIDI PA12-CF" ], - "OFnRTkEq": [ - "Ratrig/RatRig PunkFil PETG" + "OFnHc3D6": [ + "Creality/eSUN PLA-CF" ], - "OFnY9ovF": [ - "Artillery/Artillery PA-CF" + "OFnMv3W5": [ + "Flashforge/Flashforge HS PLA" + ], + "OFnO4wnf": [ + "Prusa/Prusament PLA" + ], + "OFnSeLHk": [ + "CoLiDo/CoLiDo PLA Silk" + ], + "OFnXrkhA": [ + "InfiMech/InfiMech PA-CF" + ], + "OFnXwW8l": [ + "Snapmaker/PolyLite PLA Pro Metallic" ], "OFnYVFk2": [ "OrcaFilamentLibrary/FilAr PLA Azul Francia" ], + "OFncpm7O": [ + "WonderMaker/WonderMaker PLA Silk" + ], + "OFndmfJ1": [ + "Anker/Anker Generic PLA", + "Anker/Anker Generic PLA 0.2 nozzle", + "Anker/Anker Generic PLA 0.25 nozzle" + ], + "OFneOFWe": [ + "CoLiDo/CoLiDo ABS" + ], "OFnejEt4": [ "OrcaFilamentLibrary/FilAr PETG Cian" ], + "OFnfBvn5": [ + "Artillery/Artillery Generic PLA" + ], + "OFngcE81": [ + "LH/LHS TPU Foamy 78A" + ], + "OFnh79eM": [ + "SecKit/SecKit Generic ABS" + ], "OFniMuTN": [ "OrcaFilamentLibrary/Bambu PA6-CF" ], - "OFnj7bPm": [ - "Qidi/QIDI ABS Rapido 0.6 nozzle" + "OFnmp6rt": [ + "Anycubic/Anycubic PLA+" ], - "OFnsWQTp": [ - "Qidi/QIDI WOOD Rapido" - ], - "OFnyirh9": [ - "Artillery/Artillery PLA Silk" + "OFo15hcT": [ + "Qidi/QIDI PAHT-GF" ], "OFo2UF2C": [ + "Creality/Generic BVOH", "Flashforge/Generic BVOH", "OrcaFilamentLibrary/Generic BVOH" ], - "OFo4VB3w": [ - "Elegoo/Generic ABS-CF" + "OFo6n2pB": [ + "Anycubic/Anycubic PETG" ], - "OFo9EwvK": [ - "Flashforge/Generic PETG-CF10" + "OFoBTKmn": [ + "Cubicon/Cubicon PETG" ], - "OFoAaHcF": [ - "Flashforge/FusRock Generic PAHT-GF" + "OFoDgVnY": [ + "FLSun/FLSun S1 PLA Generic" ], - "OFoJUGj6": [ - "Flashforge/Flashforge HS PLA" + "OFoJcr46": [ + "Prusa/Prusa Generic ASA" ], "OFoSknDB": [ "OrcaFilamentLibrary/FILL3D PLA Turbo" ], + "OFoT8F7Y": [ + "Prusa/Prusa Generic PVA HF" + ], + "OFoVZg32": [ + "SecKit/SecKit Generic TPU" + ], "OFoYSJKi": [ + "Creality/Generic PETG-CF", + "Elegoo/Generic PETG-CF", "OrcaFilamentLibrary/Generic PETG-CF" ], "OFobDOW5": [ + "Elegoo/Elegoo ASA", "OrcaFilamentLibrary/Elegoo ASA" ], "OFocyw69": [ "BBL/AliZ PETG", "OrcaFilamentLibrary/AliZ PETG" ], + "OFodPDxO": [ + "Tiertime/Tiertime Generic PLA High Speed" + ], + "OFogbnCb": [ + "Flashforge/FlashForge PPS-CF" + ], "OFoiVqVM": [ "OrcaFilamentLibrary/Bambu PLA Basic" ], - "OFoimrpo": [ - "Flashforge/Flashforge PETG-CF" + "OFoqrHTw": [ + "FLSun/FLSun S1 PLA High Speed" + ], + "OForhBi4": [ + "Cubicon/Cubicon ABSk" ], "OFovEIbw": [ "OrcaFilamentLibrary/Bambu PETG HF" ], - "OFp8lkYD": [ - "Flashforge/Flashforge PPA-GF" + "OFp4ETDP": [ + "Creality/CR-PLA" ], - "OFp90N8a": [ - "Artillery/Artillery PA" + "OFp57RRC": [ + "Qidi/QIDI PPS-GF" + ], + "OFp8gtPH": [ + "Creality/Creality Generic PLA Silk" + ], + "OFp9wdmf": [ + "Eryone/Eryone PA-CF" + ], + "OFpAaY6w": [ + "Creality/Creality Generic ASA" + ], + "OFpBV2Ma": [ + "Qidi/Tinmorry PETG-ECO" ], "OFpBlrvY": [ "OrcaFilamentLibrary/Valment PLA Silk" ], - "OFpHq9gJ": [ - "Prusa/Prusament PETG" + "OFpDo5Ix": [ + "Cubicon/Cubicon ABS" ], "OFpPGSKG": [ + "Flashforge/SUNLU Silk PLA+", "OrcaFilamentLibrary/SUNLU Silk PLA+" ], + "OFpPJSHE": [ + "Peopoly/Peopoly Lancer PETG-C" + ], + "OFpSYJLI": [ + "Creality/Creality Generic PLA Matte" + ], "OFpW4gdi": [ + "Flashforge/SUNLU PLA Matte", "OrcaFilamentLibrary/SUNLU PLA Matte" ], - "OFphFSUJ": [ - "Prusa/Prusa Generic PETG HF" + "OFptvi3F": [ + "Tiertime/Tiertime Generic PPA-GF" ], - "OFq6IhFg": [ - "Cubicon/Cubicon PLA" + "OFpu74Qe": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "OFpumhCM": [ + "Volumic/Volumic UNIVERSAL Ultra" + ], + "OFq0TY7C": [ + "Flashforge/Flashforge ASA-CF" + ], + "OFq5QANf": [ + "Prusa/Prusa Generic PC HF" ], "OFq8gfS4": [ "OrcaFilamentLibrary/FilAr PETG Negro Azabache" ], + "OFq9svOz": [ + "Creality/Generic PPS" + ], "OFqGRZyH": [ "OrcaFilamentLibrary/Numakers PLA+" ], "OFqINlYj": [ + "Creality/eSUN PLA+", "OrcaFilamentLibrary/eSUN PLA+" ], - "OFqPp2yL": [ - "Qidi/QIDI PETG Tough 0.6 nozzle" + "OFqKmLJe": [ + "Creality/Creality Generic PETG-CF" ], - "OFqRWRU6": [ - "Flashforge/Flashforge ABS-GF" + "OFqOk9Ww": [ + "Peopoly/Peopoly Generic ABS" ], - "OFqSTJ3I": [ - "OrcaArena/OrcaArena Generic PLA Silk" + "OFqS8fzK": [ + "SecKit/SecKit Generic PETG" ], - "OFqkcvDI": [ - "Peopoly/Peopoly Lancer ABS-GF" + "OFqcL5UF": [ + "Qidi/QIDI Support For PET/PA" ], "OFqtx549": [ "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" ], "OFqw2PQA": [ - "OrcaFilamentLibrary/Panchroma CoPE" - ], - "OFqyIUDi": [ - "Qidi/Qidi PLA-CF" + "OrcaFilamentLibrary/Panchroma CoPE", + "Snapmaker/Panchroma CoPE" ], "OFrFBEfd": [ "OrcaFilamentLibrary/Eolas Prints PLA Neon" ], + "OFrGJ4tR": [ + "Anycubic/Anycubic PLA Slik" + ], "OFrKLeE3": [ "OrcaFilamentLibrary/Bambu PLA Metal" ], - "OFrOh600": [ - "OrcaFilamentLibrary/Panchroma PLA Matte" + "OFrLiqiM": [ + "InfiMech/InfiMech PETG" ], - "OFrbbq6E": [ - "InfiMech/Other PLA Hyper" + "OFrM4hdm": [ + "Creality/CR-PLA Carbon" + ], + "OFrO2zyn": [ + "Creality/Creality Generic PLA High Speed" + ], + "OFrOh600": [ + "Creality/Panchroma PLA Matte", + "OrcaFilamentLibrary/Panchroma PLA Matte", + "Snapmaker/Panchroma PLA Matte" + ], + "OFrQqCwL": [ + "InfiMech/InfiMech Generic PLA" + ], + "OFrdZ0cK": [ + "Creality/eSUN PETG+HS" + ], + "OFrgGex8": [ + "Blocks/Blocks Generic PETG" + ], + "OFrh4bBH": [ + "SecKit/SecKit Generic ASA" + ], + "OFrjacXf": [ + "Flashforge/Flashforge PET-CF" + ], + "OFrnJJEa": [ + "Tiertime/Tiertime Generic EVA" + ], + "OFrnkURQ": [ + "Flashforge/Flashforge PLA Metal" + ], + "OFrr67nG": [ + "OrcaArena/Arena PC" + ], + "OFrrMLDw": [ + "Flashforge/Flashforge Generic PLA-SILK" ], "OFryjl35": [ + "Elegoo/Elegoo ASA-CF", "OrcaFilamentLibrary/Elegoo ASA-CF" ], - "OFs1CbB1": [ - "Qidi/QIDI PLA Rapido 0.8 nozzle" + "OFs1sNLz": [ + "Chuanying/Chuanying ABS" + ], + "OFs2ReMr": [ + "InfiMech/InfiMech Generic PETG" ], "OFsB2lxm": [ + "Elegoo/Elegoo PLA Matte", "OrcaFilamentLibrary/Elegoo PLA Matte" ], - "OFsCOJv7": [ - "Anycubic/Generic TPU" + "OFsCbVbN": [ + "Anker/Anker Generic PVA" + ], + "OFsD974q": [ + "Volumic/Volumic PETG Ultra (Performance)" ], "OFsDXRpS": [ "OrcaFilamentLibrary/FilAr PLA Piel" ], + "OFsF96Gt": [ + "FLSun/FLSun Generic PLA-CF" + ], + "OFsFo7ms": [ + "Volumic/Volumic PP Ultra" + ], "OFsFon5l": [ + "Creality/Generic HIPS", "OrcaFilamentLibrary/Generic HIPS" ], + "OFsGqI4y": [ + "Ginger Additive/Ginger Generic PETG" + ], "OFsHSVZc": [ "OrcaFilamentLibrary/Bambu Support W" ], - "OFsLkLw6": [ - "Elegoo/Generic PLA Matte" + "OFsNJjpc": [ + "Ratrig/RatRig BigNozzle TPU" + ], + "OFsP8PKH": [ + "Z-Bolt/Generic ABS HT" ], "OFsRDvTM": [ - "OrcaFilamentLibrary/Panchroma PLA" + "Anycubic/Panchroma PLA", + "OrcaFilamentLibrary/Panchroma PLA", + "Snapmaker/Panchroma PLA" + ], + "OFsXOMoX": [ + "Qidi/Qidi Generic PLA+" ], "OFsXQXbs": [ "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" ], - "OFsgANe3": [ - "Flashforge/Flashforge PAHT-CF" - ], - "OFsmPFwh": [ - "Sovol/Sovol SV06 Plus ACE TPU" + "OFsoQ12i": [ + "Comgrow/Comgrow Generic ABS" ], "OFsoykbm": [ "OrcaFilamentLibrary/DREMC PA6-CF" ], - "OFt1YdX8": [ - "FLSun/FLSun T1 PLA Silk" + "OFsxRSwr": [ + "Ratrig/RatRig Generic PVA" ], - "OFt5bvKK": [ - "Artillery/Artillery PETG Basic" + "OFsxlLdo": [ + "Qidi/Qidi Generic ASA" + ], + "OFt0JbR7": [ + "Snapmaker/Snapmaker J1 PLA Metal" + ], + "OFt3HtlG": [ + "Qidi/QIDI ABS-GF" ], "OFt6e0US": [ "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" ], - "OFt9AiN5": [ - "Flashforge/Polymaker CoPA" + "OFt7SngH": [ + "Snapmaker/Snapmaker J1 ASA" ], - "OFtEFtsz": [ - "Flashforge/Polymaker Generic CoPA" + "OFtFtiS0": [ + "Snapmaker/Polymaker PETG Galaxy" ], - "OFtJMczs": [ - "Flashforge/Flashforge TPU-64D" + "OFtGC1ye": [ + "Artillery/Artillery PA-CF" ], - "OFtL05hE": [ - "Sovol/Sovol Zero PLA Basic HS Nozzle" + "OFtKeKa9": [ + "OrcaArena/Arena PLA Tough" + ], + "OFtOPlK6": [ + "OrcaArena/Arena PAHT-CF" ], "OFtOoWIj": [], + "OFtP1rqJ": [ + "FLSun/FLSun Generic PVA" + ], "OFtRn8X8": [ "OrcaFilamentLibrary/FDplast SBS" ], - "OFtXBjvb": [ - "Artillery/Artillery PLA Tough" - ], - "OFtcKVgP": [], - "OFtcTs1o": [ - "Ratrig/RatRig BigNozzle ABS" + "OFtTHNTj": [ + "Flashforge/Flashforge Generic PLA" ], + "OFtTYl9Q": [], "OFtefokm": [ "OrcaFilamentLibrary/FilAr PLA-mate Blanco" ], - "OFtemzzw": [ - "Sovol/Sovol SV06 ACE ABS" - ], - "OFtet8ui": [ - "Snapmaker/Snapmaker TPU High-Flow" - ], - "OFti31HS": [ - "Cubicon/Cubicon PLAi21" - ], - "OFtmT4Nd": [ - "Artillery/Artillery ASA" - ], "OFtpXCCv": [ "BBL/COEX ASA PRIME", "OrcaFilamentLibrary/COEX ASA PRIME" ], + "OFtplX8o": [ + "Ratrig/RatRig BigNozzle ABS" + ], "OFtr8eZw": [ "OrcaFilamentLibrary/FDplast PLA" ], + "OFtsVp4v": [ + "SecKit/SecKit Generic PA-CF" + ], "OFtudokz": [ "OrcaFilamentLibrary/Eolas Prints PLA Premium" ], - "OFtwA91m": [ - "Sovol/Sovol Zero PC" + "OFtybfNX": [ + "Snapmaker/Snapmaker PLA Metal" + ], + "OFu08yGN": [ + "Volumic/Volumic PETG Ultra carbone" + ], + "OFu0fjPJ": [ + "LH/LHS PC CF" ], "OFu1evlr": [ + "Creality/Generic PCTG", "OrcaFilamentLibrary/Generic PCTG" ], - "OFuPC4S8": [ - "Elegoo/Elegoo PLA-CF" + "OFu79SUH": [ + "Qidi/Qidi Generic PLA" ], - "OFuPN3iW": [ - "FlyingBear/Other PETG" + "OFuFqYyG": [ + "Flashforge/Flashforge PAHT-CF" ], - "OFuTFxVP": [ - "Qidi/Overture ABS" + "OFuGRMNV": [ + "Flashforge/Flashforge PA-CF" + ], + "OFuJ49uH": [ + "Qidi/QIDI PETG Basic" + ], + "OFuO0cAP": [ + "OrcaArena/Arena PETG-CF" + ], + "OFuSwKgm": [ + "Tiertime/Tiertime Generic PLA" + ], + "OFuUJyRx": [ + "FLSun/FLSun T1 PLA Silk" ], "OFuUuIhR": [ + "Elegoo/Elegoo PETG-CF", "OrcaFilamentLibrary/Elegoo PETG-CF" ], + "OFuV79ru": [ + "Flashforge/Flashforge PA66-CF" + ], "OFuWCQXN": [ "BBL/COEX ABS PRIME", "OrcaFilamentLibrary/COEX ABS PRIME" ], - "OFuXkYly": [ - "Elegoo/Elegoo PLA Glow" - ], - "OFuYvNS3": [ - "Afinia/Afinia Value ABS" + "OFuehn62": [ + "OrcaArena/Arena PLA Marble" ], "OFufTAK9": [ "OrcaFilamentLibrary/FilAr PLA-mate Negro" ], - "OFuidAEg": [ - "Qidi/Bambu ABS" + "OFughwKn": [ + "Qidi/QIDI PLA Matte Basic" ], - "OFuq9tqb": [ - "InfiMech/InfiMech PLA Basic" + "OFujZSdh": [ + "Creality/Hyper PETG" + ], + "OFulOdT2": [ + "Flashforge/Generic TPU 85A" + ], + "OFupq0tY": [ + "Blocks/Blocks Generic PLA-CF" ], "OFurdQxc": [ "OrcaFilamentLibrary/FilAr PETG Magenta" ], - "OFuswXlp": [ - "Flashforge/Generic TPU 85A" + "OFusbWjj": [ + "Creality/Hyper PETG-CF" ], - "OFuyJhLF": [ - "Flashforge/Flashforge PETG Basic" + "OFuxH0Uz": [ + "Volumic/Volumic FLEX93 Ultra" ], - "OFv2NHLC": [ - "Qidi/QIDI ABS-GF25" + "OFv4VZCd": [ + "Qidi/Qidi Generic ABS" ], - "OFv8SRZh": [ - "Prusa/Prusa Generic PLA-CF" + "OFvDbkFq": [ + "Prusa/Prusament PC Blend" ], - "OFvGSn0l": [ - "Creality/Creality Generic PETG-CF" + "OFvGc67v": [ + "Prusa/Prusa Generic ABS" ], "OFvKUnLh": [ "OrcaFilamentLibrary/Bambu TPU 95A HF" ], - "OFvN3117": [ - "Qidi/QIDI PLA Matte Basic" - ], - "OFvOhSjO": [ - "FlyingBear/Other TPU" + "OFvLppPU": [ + "Creality/CR-Nylon" ], "OFvPPMxL": [ "OrcaFilamentLibrary/FilAr PLA Verde FilAr" ], + "OFvPomQf": [ + "Tiertime/Tiertime Generic PPS" + ], "OFvTVZc3": [ "BBL/COEX PETG", "OrcaFilamentLibrary/COEX PETG" ], + "OFvVxvzZ": [ + "Flashforge/Flashforge PLA Metal" + ], "OFvVy7yo": [ "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" ], - "OFvYfHPB": [ - "Anycubic/Anycubic PLA Matte" - ], - "OFvaXhYD": [ - "InfiMech/InfiMech PETG" + "OFvdZ2bx": [ + "Qidi/QIDI WOOD Rapido" ], "OFvgE0Zh": [ + "Elegoo/Elegoo PLA", "OrcaFilamentLibrary/Elegoo PLA" ], - "OFviQ9lH": [ - "Flashforge/Flashforge Generic TPU" - ], "OFvrXuV7": [ "OrcaFilamentLibrary/PolyLite ASA" ], - "OFvsS7Fb": [ - "Flashforge/Generic TPU-64D" + "OFvxIS9g": [ + "Snapmaker/Fiberon PA12-CF10" ], - "OFvw0owy": [ - "Afinia/Afinia Value PLA" - ], - "OFvxvkAd": [ - "Artillery/Artillery PLA-CF" + "OFvyB0Bz": [ + "Snapmaker/PolyLite PLA Galaxy" ], "OFvzvwCu": [ "OrcaFilamentLibrary/Eolas Prints PLA High Speed" ], - "OFw05rkF": [ - "InfiMech/Other PETG" - ], - "OFw0qp7w": [ - "Artillery/Artillery PET" - ], - "OFw1S8lL": [ - "Artillery/Artillery ABS" - ], - "OFwHPTvy": [ - "Qidi/Qidi Generic PLA+" - ], "OFwJ0qu2": [], + "OFwLBAGf": [ + "Qidi/HATCHBOX ABS" + ], + "OFwMFLAm": [ + "Artillery/Artillery Generic ABS" + ], "OFwPrlCM": [ "OrcaFilamentLibrary/Bambu PETG Translucent" ], "OFwRJ4g0": [ "OrcaFilamentLibrary/NIT PLA" ], + "OFwVVKEV": [ + "FlyingBear/Other TPU", + "InfiMech/Other TPU" + ], "OFwaYjL6": [ "OrcaFilamentLibrary/Fiberon PA6-GF" ], - "OFwf0oWp": [ - "Flashforge/Flashforge PLA Luminous" + "OFwhLMs4": [ + "Snapmaker/Snapmaker PLA SnapSpeed" + ], + "OFwpkvqf": [ + "OrcaArena/OrcaArena Generic PETG-CF" ], "OFwu7IAG": [ "BBL/COEX PCTG PRIME", "OrcaFilamentLibrary/COEX PCTG PRIME" ], - "OFwyqcGn": [ - "Elegoo/Elegoo PLA Matte" + "OFwxpmHM": [ + "Flashforge/Polymaker Generic CoPA" + ], + "OFwyt1xt": [ + "Eryone/Eryone ASA-CF" + ], + "OFx0ZzFV": [ + "OrcaArena/OrcaArena Generic PLA-CF" ], "OFx8Lmsd": [ "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" @@ -5164,371 +4874,148 @@ "OFxA1p01": [ "OrcaFilamentLibrary/Overture PLA Pro" ], - "OFxLeRyT": [ - "Prusa/Prusa Generic PVA HF" + "OFxDHUX8": [ + "SeeMeCNC/SeeMeCNC PETG" + ], + "OFxJRuVF": [ + "Anycubic/Anycubic PC-GF" + ], + "OFxMGIPt": [ + "Flashforge/Flashforge PPS" ], "OFxOHhZw": [ + "Elegoo/Elegoo ABS", "OrcaFilamentLibrary/Elegoo ABS" ], + "OFxTMg1d": [ + "FlyingBear/FlyingBear Generic PC" + ], "OFxUwUeW": [ + "Flashforge/SUNLU PLA Marble", "OrcaFilamentLibrary/SUNLU PLA Marble" ], - "OFxVzzn4": [ - "Chuanying/Chuanying Generic PLA-CF10" + "OFxYB4Sw": [ + "Snapmaker/Snapmaker J1 PETG-CF" ], - "OFxfCy9m": [ - "Volumic/Volumic PCTG Ultra (Performance)" + "OFxe4rXr": [ + "Snapmaker/PolyTerra PLA Marble" ], - "OFxjFYxE": [ - "Elegoo/Elegoo PETG HF" + "OFxg7n2G": [ + "Ratrig/RatRig Generic PETG" ], - "OFxlch4V": [ - "CoLiDo/CoLiDo PLA Silk" + "OFxvKuYW": [ + "Tiertime/Tiertime Generic PHA" ], - "OFxodd2u": [ - "DeltaMaker/DeltaMaker Brand PLA" + "OFy02QHU": [ + "Snapmaker/PolyLite PLA Translucent" ], - "OFxxa5yn": [ - "Snapmaker/Snapmaker Dual ABS Benchy" + "OFy14TRA": [ + "Snapmaker/Snapmaker J1 ABS" ], - "OFy7oQ1g": [ - "Blocks/Blocks Generic ASA-CF" + "OFy3sW6j": [ + "WonderMaker/WonderMaker ASA" ], - "OFyD1Zo8": [ + "OFy48TOp": [ + "Flashforge/Generic TPU-95A" + ], + "OFy4ajVZ": [ + "Qidi/Qidi Generic PLA Silk" + ], + "OFy8tYJE": [ + "Cubicon/Cubicon ABS-A100" + ], + "OFyCToOV": [ + "Sovol/Sovol SV08 TPU" + ], + "OFyFRojy": [ + "Ratrig/RatRig Generic ABS" + ], + "OFyFyLIp": [ + "SeeMeCNC/SeeMeCNC TPU" + ], + "OFyHgT60": [ + "OrcaArena/Arena PLA Sparkle" + ], + "OFyK5Lt9": [ + "Artillery/Artillery Generic PETG" + ], + "OFyLWVF3": [ + "Creality/Generic PETG-GF" + ], + "OFyPG8v2": [ + "Snapmaker/Snapmaker Dual PLA Eco" + ], + "OFyQwdaM": [ + "Volumic/Volumic ABS Ultra (Performance)" + ], + "OFyRCIMh": [ + "FlyingBear/Other PC", "InfiMech/Other PC" ], + "OFyUJI3q": [ + "Volumic/Volumic ABS Ultra" + ], "OFybzvQN": [ "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" ], - "OFyoW5W2": [ - "Flashforge/Flashforge PLA Color Change" + "OFyeSq8A": [ + "Prusa/Prusa Generic ABS HF" ], - "OFypQeKR": [ - "Elegoo/Generic PC-CF" + "OFyhjiNs": [ + "Snapmaker/Snapmaker PVA" + ], + "OFyj3m13": [ + "Snapmaker/Snapmaker Dual PLA Silk" + ], + "OFymnal9": [ + "Sovol/Sovol Zero PETG HS Nozzle" + ], + "OFyoBZdm": [ + "LH/LHS PLA" + ], + "OFyreocX": [ + "Tiertime/Tiertime PVA" + ], + "OFyrnlUn": [ + "Snapmaker/Snapmaker J1 TPU" ], "OFysxCep": [ "OrcaFilamentLibrary/FilAr PETG Coral" ], - "OFyt23xJ": [ - "FLSun/FLSun T1 PLA High Speed" - ], - "OFyxAbO4": [ - "Flashforge/Flashforge TPU-95A" - ], "OFyxayW4": [ "BBL/AliZ PLA", "OrcaFilamentLibrary/AliZ PLA" ], - "OFzFbFcl": [ - "Elegoo/Elegoo PC-FR" + "OFyySVby": [ + "SecKit/SecKit Generic PVA" ], - "OFzQQeCi": [ - "Chuanying/Chuanying Generic HIPS" + "OFz3q5Xz": [ + "CONSTRUCT3D/C1 Generic PETG" ], - "OFzb2BLs": [ - "Ratrig/RatRig Generic PCTG" + "OFzAWsca": [ + "Qidi/Qidi TPU 95A-HF" ], - "OFziUL2X": [ - "Ginger Additive/Ginger Generic PLA" + "OFzB4uOs": [ + "Sovol/Sovol Zero PLA Basic HS Nozzle" + ], + "OFzS7zt4": [ + "Anycubic/Anycubic PA" + ], + "OFzXURfo": [ + "FlyingBear/FlyingBear Generic PETG" + ], + "OFzY7N3Z": [ + "Artillery/Artillery PLA" ], "OFzrUUxc": [], + "OFztQ7rO": [ + "LH/LHS ABS" + ], "OFzyIxba": [ "OrcaFilamentLibrary/Bambu PVA" ], - "OGFC99": [], - "OGFG99": [], - "OGFL96": [ - "Flashforge/Generic PLA Silk", - "Sovol/Generic PLA Silk" - ], - "OGFN99": [], - "OGFSNL08": [ - "Sovol/SUNLU PETG" - ], - "P1001": [ - "Creality/Panchroma PLA Satin" - ], - "P1002": [ - "Creality/PolySonic PLA Pro" - ], - "P1003": [ - "Creality/Panchroma PLA Matte" - ], - "P1004": [ - "Creality/PolySonic PLA" - ], - "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" - ], - "P510eff9": [ - "Ginger Additive/Ginger Generic PETG" - ], - "Pfcf9c4c": [ - "Artillery/Artillery PLA" - ], - "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" + "OFzzmK2Q": [ + "FLSun/FLSun S1 ABS" ], "QD_0_1_1": [ "Qidi/QIDI PLA Rapido" @@ -6009,24 +5496,6 @@ ], "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" ] }, "instantiated_with_id": [ @@ -6846,12 +6315,6 @@ "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", "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", @@ -6861,10 +6324,12 @@ "Dremel/Dremel Generic PLA @3D40 all", "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Generic ABS-CF @Elegoo Centauri", + "Elegoo/Generic ASA-CF @Elegoo Centauri", "Elegoo/Generic PA6-CF @Elegoo", "Elegoo/Generic PC-CF @Elegoo", "Elegoo/Generic PET-CF @Elegoo Centauri", "Elegoo/Generic PETG PRO @Elegoo", + "Elegoo/Generic PETG-CF @Elegoo Centauri", "Elegoo/Generic PLA Matte @Elegoo", "Eryone/Eryone ABS", "Eryone/Eryone ABS-CF", @@ -7652,6 +7117,7 @@ "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", "Prusa/Prusa Generic ASA @CORE One", "Prusa/Prusa Generic ASA @CORE One 0.6", "Prusa/Prusa Generic ASA @CORE One 0.8", @@ -7659,10 +7125,15 @@ "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 @MINIIS", + "Prusa/Prusa Generic ASA @MINIIS 0.25", + "Prusa/Prusa Generic ASA @MINIIS 0.6", + "Prusa/Prusa Generic ASA @MINIIS 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 @MK4", "Prusa/Prusa Generic ASA @MK4S", "Prusa/Prusa Generic ASA @MK4S 0.6", "Prusa/Prusa Generic ASA @MK4S 0.8", @@ -7673,6 +7144,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 FLEX @XL", + "Prusa/Prusa Generic FLEX @XL 5T", "Prusa/Prusa Generic PA @MK3.5", "Prusa/Prusa Generic PA @MK3.5 0.25", "Prusa/Prusa Generic PA @MK3.5 0.6", @@ -7681,6 +7154,11 @@ "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", + "Prusa/Prusa Generic PC @MINIIS", + "Prusa/Prusa Generic PC @MINIIS 0.25", + "Prusa/Prusa Generic PC @MINIIS 0.6", + "Prusa/Prusa Generic PC @MINIIS 0.8", "Prusa/Prusa Generic PC @MK3.5", "Prusa/Prusa Generic PC @MK3.5 0.25", "Prusa/Prusa Generic PC @MK3.5 0.6", @@ -7762,9 +7240,13 @@ "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 ASA @XL", + "Prusa/Prusament ASA @XL 5T", "Prusa/Prusament PA-CF @CORE One", "Prusa/Prusament PA-CF @CORE One 0.6", "Prusa/Prusament PA-CF @CORE One 0.8", + "Prusa/Prusament PA-CF @XL", + "Prusa/Prusament PA-CF @XL 5T", "Prusa/Prusament PC Blend @CORE One", "Prusa/Prusament PC Blend @CORE One 0.6", "Prusa/Prusament PC Blend @CORE One 0.8", @@ -7772,9 +7254,13 @@ "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 Blend @XL", + "Prusa/Prusament PC Blend @XL 5T", "Prusa/Prusament PC-CF @CORE One", "Prusa/Prusament PC-CF @CORE One 0.6", "Prusa/Prusament PC-CF @CORE One 0.8", + "Prusa/Prusament PC-CF @XL", + "Prusa/Prusament PC-CF @XL 5T", "Prusa/Prusament PETG @CORE One", "Prusa/Prusament PETG @CORE One 0.6", "Prusa/Prusament PETG @CORE One 0.8", @@ -7792,6 +7278,8 @@ "Prusa/Prusament PVB @CORE One", "Prusa/Prusament PVB @CORE One 0.6", "Prusa/Prusament PVB @CORE One 0.8", + "Prusa/Prusament PVB @XL", + "Prusa/Prusament PVB @XL 5T", "Prusa/Prusament rPLA @CORE One", "Prusa/Prusament rPLA @CORE One 0.6", "Prusa/Prusament rPLA @CORE One 0.8", @@ -8387,6 +7875,9 @@ "SeeMeCNC/SeeMeCNC PETG-CF", "SeeMeCNC/SeeMeCNC PLA", "SeeMeCNC/SeeMeCNC TPU", + "Snapmaker/PolyLite Dual PLA @0.2 nozzle", + "Snapmaker/PolyLite J1 PLA", + "Snapmaker/PolyLite J1 PLA @0.2 nozzle", "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", @@ -8595,4601 +8086,34 @@ "re3D/re3D rPP @0.8 nozzle", "re3D/re3D rPP @1.75 nozzle" ], - "triple_exceptions": [ - "Anycubic/Anycubic ABS", - "Anycubic/Anycubic ASA", - "Anycubic/Anycubic PETG", - "Anycubic/Anycubic PLA", - "Anycubic/Anycubic PLA High Speed", - "Anycubic/Anycubic PLA Silk", - "Anycubic/Anycubic PLA+", - "Anycubic/Anycubic TPU", - "Anycubic/Generic PETG", - "Creality/Creality Generic ABS", - "Creality/Creality Generic ASA", - "Creality/Creality Generic PETG", - "Creality/Creality Generic TPU", - "Creality/Generic PETG-GF", - "Flashforge/Flashforge ABS", - "Flashforge/Flashforge ASA-CF", - "Flashforge/Flashforge PET-CF", - "Flashforge/Flashforge PETG", - "Flashforge/Flashforge PPA-CF", - "Flashforge/Flashforge PPS-CF", - "Flashforge/FusRock Generic PAHT-CF", - "Flashforge/FusRock Generic PET-CF", - "Flashforge/FusRock Generic S-Multi", - "Flashforge/FusRock Generic S-PAHT", - "Prusa/Prusa Generic ASA", - "Prusa/Prusa Generic TPU", - "Prusa/Prusa Generic TPU HF", - "Prusa/Prusament PETG", - "Prusa/Prusament PLA", - "Prusa/Prusament rPLA", - "Snapmaker/PolyLite PLA", - "re3D/re3D Greengate rPETG" - ], + "triple_exceptions": [], "triples": { - "00001": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "00002": [ - [ - "Generic", - "PLA", - "Generic PLA-Silk" - ] - ], - "00003": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "00004": [ + "OF016CJw": [ [ "Generic", "ABS", - "Generic ABS" + "Sovol SV08 ABS" ] ], - "00005": [ - [ - "Generic", - "TPU", - "Generic TPU" - ] - ], - "00006": [ - [ - "Generic", - "PLA-CF", - "Generic PLA-CF" - ] - ], - "00007": [ - [ - "Generic", - "ASA", - "Generic ASA" - ] - ], - "00008": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "00009": [ - [ - "Generic", - "PA-CF", - "Generic PA-CF" - ] - ], - "00010": [ - [ - "Generic", - "BVOH", - "Generic BVOH" - ] - ], - "00011": [ - [ - "Generic", - "PVA", - "Generic PVA" - ] - ], - "00012": [ - [ - "Generic", - "HIPS", - "Generic HIPS" - ] - ], - "00013": [ - [ - "Generic", - "PET-CF", - "Generic PET-CF" - ] - ], - "00014": [ - [ - "Generic", - "PETG-CF", - "Generic PETG-CF" - ] - ], - "00015": [ - [ - "Generic", - "PA6-CF", - "Generic PA6-CF" - ] - ], - "00016": [ - [ - "Generic", - "PA-CF", - "Generic PAHT-CF" - ] - ], - "00017": [ - [ - "Generic", - "PPS", - "Generic PPS" - ] - ], - "00018": [ - [ - "Generic", - "PPS-CF", - "Generic PPS-CF" - ] - ], - "00019": [ - [ - "Generic", - "PP", - "Generic PP" - ] - ], - "00020": [ - [ - "Generic", - "PET", - "Generic PET" - ] - ], - "00021": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "00022": [ - [ - "Generic", - "PA-CF", - "Generic PA612-CF" - ] - ], - "00023": [ - [ - "Generic", - "PA", - "Generic Support for PA" - ] - ], - "00024": [ - [ - "Generic", - "PLA", - "Generic Support for PLA" - ] - ], - "00025": [ - [ - "Generic", - "PA-CF", - "Generic PA12-CF" - ] - ], - "00026": [ - [ - "Generic", - "TPU", - "Generic TPU 64D" - ] - ], - "00027": [ - [ - "Creality", - "PETG-GF", - "Generic PETG-GF" - ], - [ - "Generic", - "PETG-GF", - "Generic PETG-GF" - ] - ], - "00031": [ - [ - "Generic", - "PP-CF", - "Generic PP-CF" - ] - ], - "00032": [ - [ - "Generic", - "PCTG", - "Generic PCTG" - ] - ], - "00033": [ - [ - "Generic", - "ASA-CF", - "Generic ASA-CF" - ] - ], - "00034": [ - [ - "Generic", - "PA-GF", - "Generic PA6-GF" - ] - ], - "00035": [ - [ - "eSUN", - "PLA", - "eSUN PLA-LW" - ] - ], - "01001": [ - [ - "Creality", - "PLA", - "Creality Hyper PLA" - ], - [ - "Creality", - "PLA", - "Hyper PLA" - ] - ], - "01002": [ - [ - "Creality", - "PLA", - "Hyper L-W PLA" - ] - ], - "01003": [ - [ - "Creality", - "PLA", - "Hyper Luminous" - ] - ], - "01004": [ - [ - "Creality", - "PLA", - "Hyper Stardust" - ] - ], - "01601": [ + "OF02UAVh": [ [ "Creality", "PLA", "Soleyin Ultra PLA" ] ], - "02001": [ - [ - "Creality", - "PLA-CF", - "Creality Hyper PLA-CF" - ], - [ - "Creality", - "PLA-CF", - "Hyper PLA-CF" - ] - ], - "03001": [ - [ - "Creality", - "ABS", - "Creality Hyper ABS" - ], - [ - "Creality", - "ABS", - "Hyper ABS" - ] - ], - "04001": [ - [ - "Creality", - "PLA", - "CR-PLA" - ], - [ - "Generic", - "PLA", - "Creality Generic PLA" - ] - ], - "05001": [ - [ - "Creality", - "PLA", - "CR-Silk" - ], - [ - "Creality", - "PLA", - "Creality Silk PLA" - ] - ], - "06001": [ - [ - "Creality", - "PETG", - "CR-PETG" - ], - [ - "Creality", - "PETG", - "Creality Generic PETG" - ] - ], - "06002": [ - [ - "Creality", - "PETG", - "Hyper PETG" - ] - ], - "06003": [ - [ - "Creality", - "PETG-CF", - "Hyper PETG-CF" - ] - ], - "06004": [ - [ - "Creality", - "PETG-GF", - "Hyper PETG-GF" - ] - ], - "06005": [ - [ - "Creality", - "PETG", - "Soleyin Basic PETG" - ] - ], - "07001": [ - [ - "Creality", - "ABS", - "CR-ABS" - ], - [ - "Creality", - "ABS", - "Creality Generic ABS" - ] - ], - "07002": [ - [ - "Creality", - "PC", - "Hyper PC" - ] - ], - "08001": [ - [ - "Creality", - "PLA", - "Ender-PLA" - ] - ], - "09001": [ - [ - "Creality", - "PLA", - "EN-PLA+" - ] - ], - "09002": [ - [ - "Creality", - "PLA", - "ENDER FAST PLA" - ] - ], - "10001": [ - [ - "Creality", - "TPU", - "Creality Generic TPU" - ], - [ - "Creality", - "TPU", - "HP-TPU" - ] - ], - "1009481135": [ - [ - "Snapmaker", - "PET", - "Snapmaker J1 PET" - ] - ], - "1042511226": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker Dual PETG-CF" - ] - ], - "10425112260": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker PETG-CF" - ] - ], - "11001": [ - [ - "Creality", - "PA", - "CR-Nylon" - ], - [ - "Creality", - "PA", - "Creality Generic PA" - ] - ], - "1172603684": [ - [ - "Snapmaker", - "PETG", - "Snapmaker J1 PETG" - ] - ], - "1181363872": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Silk" - ] - ], - "11813638720": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Silk" - ] - ], - "1192769348": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Matte" - ] - ], - "12002": [ - [ - "Creality", - "PA-CF", - "Hyper PPA-CF" - ] - ], - "12003": [ - [ - "Creality", - "PA-CF", - "Hyper PAHT-CF" - ] - ], - "12004": [ - [ - "Creality", - "PA-CF", - "Hyper PA612-CF" - ] - ], - "12005": [ - [ - "Creality", - "PA-CF", - "Hyper PA6-CF" - ] - ], - "1207881278": [ - [ - "Snapmaker", - "Breakaway Support", - "Snapmaker Dual Breakaway" - ] - ], - "1210173120": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker J1 PA-CF" - ] - ], - "1223824394": [ - [ - "Snapmaker", - "ABS", - "Snapmaker J1 ABS" - ] - ], - "1247172706": [ - [ - "Snapmaker", - "ASA", - "Snapmaker Dual ASA" - ] - ], - "12471727060": [ - [ - "Snapmaker", - "ASA", - "Snapmaker ASA" - ] - ], - "13001": [ - [ - "Creality", - "PLA-CF", - "CR-PLA Carbon" - ] - ], - "1344609062": [ - [ - "Snapmaker", - "PVA", - "Snapmaker PVA" - ] - ], - "1355502217": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker PETG-CF" - ] - ], - "1393866034": [ - [ - "Snapmaker", - "PLA", - "PolyLite PLA" - ] - ], - "14001": [ - [ - "Creality", - "PLA", - "CR-PLA Matte" - ] - ], - "1417031127": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA" - ] - ], - "14170311270": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA" - ] - ], - "141703112701": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA SnapSpeed" - ] - ], - "1417031127011": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Lite" - ] - ], - "144877656": [ - [ - "Snapmaker", - "ASA", - "Snapmaker J1 ASA" - ] - ], - "1480063856": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU" - ] - ], - "15001": [ - [ - "Creality", - "PLA", - "CR-PLA Fluo" - ] - ], - "1528786603": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Silk" - ] - ], - "16001": [ - [ - "Creality", - "TPU", - "CR-TPU" - ] - ], - "1655727393": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Silk" - ] - ], - "168223792": [ - [ - "Snapmaker", - "ABS", - "Snapmaker Dual ABS" - ] - ], - "1682237920": [ - [ - "Snapmaker", - "ABS", - "Snapmaker ABS" - ] - ], - "1695556157": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Eco" - ] - ], - "17001": [ - [ - "Creality", - "PLA", - "CR-Wood" - ] - ], - "1702147325": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker Dual PLA-CF" - ] - ], - "17021473250": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker PLA-CF" - ] - ], - "18001": [ - [ - "Creality", - "PLA", - "HP Ultra PLA" - ] - ], - "1895495477": [ - [ - "Snapmaker", - "PETG", - "Snapmaker PETG" - ] - ], - "19001": [ - [ - "Creality", - "ASA", - "Creality Generic ASA" - ], - [ - "Creality", - "ASA", - "HP-ASA" - ] - ], - "200803790": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Eco" - ] - ], - "2008037900": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Eco" - ] - ], - "2029994346": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Metal" - ] - ], - "20299943460": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Metal" - ] - ], - "2128577941": [ - [ - "Snapmaker", - "PET", - "Snapmaker Dual PET" - ] - ], - "21285779410": [ - [ - "Snapmaker", - "PET", - "Snapmaker PET" - ] - ], - "2209001062": [ - [ - "Snapmaker", - "PETG", - "Snapmaker Dual PETG" - ] - ], - "22090010620": [ - [ - "Snapmaker", - "PETG", - "Snapmaker PETG" - ] - ], - "2549587591": [ - [ - "Snapmaker", - "PET", - "Snapmaker PET" - ] - ], - "2742961008": [ - [ - "Snapmaker", - "ASA", - "Snapmaker ASA" - ] - ], - "29001": [ - [ - "Creality", - "PLA", - "Hyper Marble" - ] - ], - "2971656290": [ - [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPU" - ] - ], - "29716562900": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU" - ] - ], - "297165629001": [ - [ - "Generic", - "TPU", - "Snapmaker TPU 95A" - ] - ], - "3104636980": [ - [ - "Snapmaker", - "PVA", - "Snapmaker Dual PVA" - ] - ], - "31046369800": [ - [ - "Snapmaker", - "PVA", - "Snapmaker PVA" - ] - ], - "3177068229": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA" - ] - ], - "3383257822": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Eco" - ] - ], - "3492897526": [ - [ - "Snapmaker", - "Breakaway Support", - "Snapmaker J1 Breakaway" - ] - ], - "3493177425": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker Dual PA-CF" - ] - ], - "34931774250": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker PA-CF" - ] - ], - "3503790988": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Matte" - ] - ], - "377675245": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA" - ] - ], - "3806593857": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker J1 PLA-CF" - ] - ], - "3811508002": [ - [ - "Snapmaker", - "ABS", - "Snapmaker ABS" - ] - ], - "3864371306": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker PLA-CF" - ] - ], - "4012961186": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Metal" - ] - ], - "4092268632": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPU" - ] - ], - "4227461134": [ - [ - "Snapmaker", - "PVA", - "Snapmaker J1 PVA" - ] - ], - "4235401834": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker J1 PETG-CF" - ] - ], - "581236806": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker PA-CF" - ] - ], - "BSFI001": [ - [ - "Generic", - "PLA", - "Blocks Generic PLA" - ] - ], - "BSFI002": [ - [ - "Generic", - "PETG", - "Blocks Generic PETG" - ] - ], - "BSFI003": [ - [ - "Generic", - "TPU", - "Blocks Generic TPU" - ] - ], - "BSFI004": [ - [ - "Generic", - "ABS", - "Blocks Generic ABS" - ] - ], - "BSFI005": [ - [ - "Generic", - "ASA", - "Blocks Generic ASA" - ] - ], - "BSFI006": [ - [ - "Generic", - "PA", - "Blocks Generic PA" - ] - ], - "BSFI007": [ - [ - "Generic", - "PA-CF", - "Blocks Generic PA-CF" - ] - ], - "BSFI008": [ - [ - "Generic", - "PC", - "Blocks Generic PC" - ] - ], - "BSFI009": [ - [ - "Generic", - "PVA", - "Blocks Generic PVA" - ] - ], - "BSFI010": [ - [ - "Generic", - "PLA-CF", - "Blocks Generic PLA-CF" - ] - ], - "DFL99": [ - [ - "Volumic", - "PLA", - "Désactivé" - ] - ], - "E1001": [ - [ - "eSUN", - "PLA", - "eSUN PLA+" - ] - ], - "E1002": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Silk" - ] - ], - "E1003": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Matte" - ] - ], - "E1004": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Lite" - ] - ], - "E1005": [ - [ - "eSUN", - "PLA-CF", - "eSUN PLA-CF" - ] - ], - "E1006": [ - [ - "eSUN", - "PLA", - "eSUN PLA-HS" - ] - ], - "E2001": [ - [ - "eSUN", - "PETG", - "eSUN PETG" - ] - ], - "E2002": [ - [ - "eSUN", - "PETG", - "eSUN PETG+HS" - ] - ], - "E2003": [ - [ - "eSUN", - "PETG", - "eSUN PETG-Basic" - ] - ], - "E3001": [ - [ - "eSUN", - "ABS", - "eSUN ABS+" - ] - ], - "E4001": [ - [ - "eSUN", - "ASA", - "eSUN ASA+" - ] - ], - "E8001": [ - [ - "eSUN", - "PET", - "eSUN PET-Basic" - ] - ], - "EABSB00": [ - [ - "Elegoo", - "ABS", - "Elegoo ABS" - ] - ], - "EASAB00": [ - [ - "Elegoo", - "ASA", - "Elegoo ASA" - ] - ], - "EFL33": [ - [ - "Eryone", - "PP-CF", - "Eryone PP-CF" - ] - ], - "EFL40": [ - [ - "Eryone", - "PLA-CF", - "Eryone PLA-CF" - ] - ], - "EFL43": [ - [ - "Eryone", - "PETG-CF", - "Eryone PETG-CF" - ] - ], - "EFL71": [ - [ - "Eryone", - "PA", - "Eryone PA" - ] - ], - "EFL72": [ - [ - "Eryone", - "PA-CF", - "Eryone PA-CF" - ] - ], - "EFL73": [ - [ - "Eryone", - "PA-GF", - "Eryone PA-GF" - ] - ], - "EFL81": [ - [ - "Eryone", - "ABS-CF", - "Eryone ABS-CF" - ] - ], - "EFL82": [ - [ - "Eryone", - "ASA-CF", - "Eryone ASA-CF" - ] - ], - "EFL90": [ - [ - "Eryone", - "PLA", - "Eryone PLA" - ] - ], - "EFL91": [ - [ - "Eryone", - "ABS", - "Eryone ABS" - ] - ], - "EFL92": [ - [ - "Eryone", - "ASA", - "Eryone ASA" - ] - ], - "EFL93": [ - [ - "Eryone", - "PETG", - "Eryone PETG" - ] - ], - "EFL941": [ - [ - "Eryone", - "PLA Silk", - "Eryone Silk PLA" - ] - ], - "EFL95": [ - [ - "Eryone", - "TPU", - "Eryone TPU" - ] - ], - "EPAHTB00": [ - [ - "Elegoo", - "PA", - "Elegoo PAHT" - ] - ], - "EPCB00": [ - [ - "Elegoo", - "PC", - "Elegoo PC" - ] - ], - "EPETGB00": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG" - ] - ], - "EPLAB00": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA" - ] - ], - "ETPUB00": [ - [ - "Elegoo", - "TPU", - "Elegoo TPU" - ] - ], - "FFF01": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA" - ] - ], - "FFF02": [ - [ - "Flashforge", - "ABS", - "Flashforge ABS" - ] - ], - "FFF03": [ - [ - "Flashforge", - "PETG", - "Flashforge PETG" - ], - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "FFG01": [ - [ - "Generic", - "PLA", - "Flashforge Generic PLA" - ] - ], - "GABSB00": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "GASAB00": [ - [ - "Generic", - "ASA", - "Generic ASA" - ] - ], - "GFA00": [ - [ - "Afinia", - "PLA", - "Afinia PLA" - ], - [ - "Afinia", - "PLA", - "Afinia Value PLA" - ], - [ - "Orca Arena", - "PLA", - "Arena PLA Basic" - ], - [ - "Tiertime", - "PLA", - "Tiertime PLA" - ], - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Basic" - ] - ], - "GFA00_01": [ - [ - "Afinia", - "PLA", - "Afinia PLA" - ], - [ - "Tiertime", - "PLA", - "Tiertime PLA" - ] - ], - "GFA01": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Matte" - ], - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Matte" - ] - ], - "GFA02": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Metal" - ], - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Metal" - ] - ], - "GFA03": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Impact" - ] - ], - "GFA05": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA Silk" - ], - [ - "Orca Arena", - "PLA", - "Arena PLA Silk" - ], - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Silk" - ] - ], - "GFA07": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Marble" - ], - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Marble" - ] - ], - "GFA08": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Sparkle" - ] - ], - "GFA09": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Tough" - ] - ], - "GFA16": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Wood" - ] - ], - "GFA50": [ - [ - "Orca Arena", - "PLA-CF", - "Arena PLA-CF" - ], - [ - "Tiertime", - "PLA-CF", - "Tiertime PLA-CF" - ] - ], - "GFA50_01": [ - [ - "Tiertime", - "PLA-CF", - "Tiertime PLA-CF" - ] - ], - "GFA99": [ - [ - "Anycubic", - "ASA", - "Anycubic ASA" - ], - [ - "CoLiDo", - "PLA", - "CoLiDo Generic PLA" - ], - [ - "CoLiDo", - "PLA", - "CoLiDo PLA+" - ], - [ - "Generic", - "ASA", - "Anycubic ASA" - ] - ], - "GFASA": [ - [ - "Anycubic", - "ASA", - "Anycubic ASA" - ], - [ - "Generic", - "ASA", - "Anycubic ASA" - ] - ], - "GFB00": [ - [ - "Afinia", - "ABS", - "Afinia ABS" - ], - [ - "Afinia", - "ABS", - "Afinia ABS+" - ], - [ - "Afinia", - "ABS", - "Afinia Value ABS" - ], - [ - "Orca Arena", - "ABS", - "Arena ABS" - ], - [ - "Tiertime", - "ABS", - "Tiertime ABS" - ], - [ - "WonderMaker", - "ABS", - "WonderMaker ABS" - ] - ], - "GFB00_01": [ - [ - "Afinia", - "ABS", - "Afinia ABS" - ], - [ - "Tiertime", - "ABS", - "Tiertime ABS" - ] - ], - "GFB01": [ - [ - "Tiertime", - "ASA", - "Tiertime ASA" - ], - [ - "WonderMaker", - "ASA", - "WonderMaker ASA" - ] - ], - "GFB01_01": [ - [ - "Tiertime", - "ASA", - "Tiertime ASA" - ] - ], - "GFB98": [ - [ - "Generic", - "ASA", - "Anker Generic ASA" - ], - [ - "Generic", - "ASA", - "Anycubic Generic ASA" - ], - [ - "Generic", - "ASA", - "Artillery Generic ASA" - ], - [ - "Generic", - "ASA", - "Creality Generic ASA" - ], - [ - "Generic", - "ASA", - "FLSun Generic ASA" - ], - [ - "Generic", - "ASA", - "FLSun S1 ASA" - ], - [ - "Generic", - "ASA", - "FLSun T1 ASA" - ], - [ - "Generic", - "ASA", - "OrcaArena Generic ASA" - ], - [ - "Generic", - "ASA", - "RatRig Generic ASA" - ], - [ - "Generic", - "ASA", - "SecKit Generic ASA" - ], - [ - "Generic", - "ASA", - "Tiertime Generic ASA" - ], - [ - "Generic", - "ASA", - "Vzbot Generic ASA" - ], - [ - "Generic", - "ASA", - "fdm_filament_asa" - ] - ], - "GFB98_01": [ - [ - "Generic", - "ASA", - "Tiertime Generic ASA" - ] - ], - "GFB98_2": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "GFB98_3": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "GFB98_4": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "GFB98_5": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ], - [ - "Generic", - "ASA", - "Prusa Generic ASA HF" - ] - ], - "GFB98_6": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA HF" - ] - ], - "GFB98_7": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA HF" - ] - ], - "GFB99": [ - [ - "CoLiDo", - "ABS", - "CoLiDo ABS" - ], - [ - "CoLiDo", - "ABS", - "CoLiDo Generic ABS" - ], - [ - "FlyingBear", - "ABS", - "FlyingBear Generic ABS" - ], - [ - "Generic", - "ABS", - "Anker Generic ABS" - ], - [ - "Generic", - "ABS", - "Anycubic Generic ABS" - ], - [ - "Generic", - "ABS", - "Artillery Generic ABS" - ], - [ - "Generic", - "ABS", - "Chuanying ABS" - ], - [ - "Generic", - "ABS", - "Chuanying Generic ABS" - ], - [ - "Generic", - "ABS", - "Comgrow Generic ABS" - ], - [ - "Generic", - "ABS", - "Creality Generic ABS" - ], - [ - "Generic", - "ABS", - "FLSun Generic ABS" - ], - [ - "Generic", - "ABS", - "FLSun S1 ABS" - ], - [ - "Generic", - "ABS", - "FLSun T1 ABS" - ], - [ - "Generic", - "ABS", - "Flashforge ABS" - ], - [ - "Generic", - "ABS", - "Flashforge Generic ABS" - ], - [ - "Generic", - "ABS", - "Generic ABS" - ], - [ - "Generic", - "ABS", - "Lulzbot 2.85mm ABS" - ], - [ - "Generic", - "ABS", - "OrcaArena Generic ABS" - ], - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ], - [ - "Generic", - "ABS", - "Qidi Generic ABS" - ], - [ - "Generic", - "ABS", - "RatRig Generic ABS" - ], - [ - "Generic", - "ABS", - "SecKit Generic ABS" - ], - [ - "Generic", - "ABS", - "Tiertime Generic ABS" - ], - [ - "Generic", - "ABS", - "Vzbot Generic ABS" - ], - [ - "Generic", - "TPU", - "DeltaMaker Generic TPU" - ], - [ - "InfiMech", - "ABS", - "InfiMech Generic ABS" - ], - [ - "Volumic", - "ABS", - "Volumic ABS Ultra" - ], - [ - "Volumic", - "ABS", - "Volumic ABS Ultra (Performance)" - ] - ], - "GFB99_01": [ - [ - "Generic", - "ABS", - "Tiertime Generic ABS" - ] - ], - "GFB99_2": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "GFB99_3": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "GFB99_4": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "GFB99_5": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ], - [ - "Generic", - "ABS", - "Prusa Generic ABS HF" - ] - ], - "GFB99_6": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS HF" - ] - ], - "GFB99_7": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS HF" - ] - ], - "GFC00": [ - [ - "Orca Arena", - "PC", - "Arena PC" - ], - [ - "Tiertime", - "PC", - "Tiertime PC" - ] - ], - "GFC00_01": [ - [ - "Tiertime", - "PC", - "Tiertime PC" - ] - ], - "GFC98": [ - [ - "Generic", - "PC-CF", - "fdm_filament_pccf" - ] - ], - "GFC99": [ - [ - "FlyingBear", - "PC", - "FlyingBear Generic PC" - ], - [ - "Generic", - "PC", - "Anker Generic PC" - ], - [ - "Generic", - "PC", - "Anycubic Generic PC" - ], - [ - "Generic", - "PC", - "Creality Generic PC" - ], - [ - "Generic", - "PC", - "FLSun Generic PC" - ], - [ - "Generic", - "PC", - "Generic PC" - ], - [ - "Generic", - "PC", - "OrcaArena Generic PC" - ], - [ - "Generic", - "PC", - "Qidi Generic PC" - ], - [ - "Generic", - "PC", - "RatRig Generic PC" - ], - [ - "Generic", - "PC", - "SecKit Generic PC" - ], - [ - "Generic", - "PC", - "Tiertime Generic PC" - ], - [ - "Generic", - "PC", - "Vzbot Generic PC" - ], - [ - "Generic", - "PC", - "fdm_filament_pc" - ], - [ - "InfiMech", - "PC", - "InfiMech Generic PC" - ], - [ - "Volumic", - "PC", - "Volumic PC" - ], - [ - "Volumic", - "PC", - "Volumic PC (Performance)" - ] - ], - "GFC99_01": [ - [ - "Generic", - "PC", - "Tiertime Generic PC" - ] - ], - "GFC99_1": [ - [ - "Generic", - "PC", - "Prusa Generic PC" - ] - ], - "GFC99_2": [ - [ - "Generic", - "PC", - "Prusa Generic PC" - ] - ], - "GFC99_3": [ - [ - "Generic", - "PC", - "Prusa Generic PC" - ] - ], - "GFC99_4": [ - [ - "Generic", - "PC", - "Prusa Generic PC" - ], - [ - "Generic", - "PC", - "Prusa Generic PC HF" - ] - ], - "GFC99_5": [ - [ - "Generic", - "PC", - "Prusa Generic PC HF" - ] - ], - "GFC99_6": [ - [ - "Generic", - "PC", - "Prusa Generic PC HF" - ] - ], - "GFG00": [ - [ - "Orca Arena", - "PETG", - "Arena PETG Basic" - ], - [ - "Tiertime", - "PETG", - "Tiertime PETG" - ], - [ - "WonderMaker", - "PETG", - "WonderMaker PETG Basic" - ] - ], - "GFG00_01": [ - [ - "Tiertime", - "PETG", - "Tiertime PETG" - ] - ], - "GFG01": [ - [ - "Generic", - "PETG", - "re3D Greengate rPETG" - ], - [ - "re3D", - "PETG", - "re3D Greengate rPETG" - ] - ], - "GFG02": [ - [ - "re3D", - "PP", - "re3D rPP" - ] - ], - "GFG03": [ - [ - "re3D", - "PETG", - "re3D PETG" - ] - ], - "GFG50": [ - [ - "Orca Arena", - "PETG-CF", - "Arena PETG-CF" - ] - ], - "GFG60": [ - [ - "Polymaker", - "PETG", - "PolyLite PETG" - ] - ], - "GFG97": [ - [ - "Generic", - "PCTG", - "Tiertime Generic PCTG" - ] - ], - "GFG97-01": [ - [ - "Generic", - "PCTG", - "Tiertime Generic PCTG" - ] - ], - "GFG98": [ - [ - "Generic", - "PETG-CF", - "Anker Generic PETG-CF" - ], - [ - "Generic", - "PETG-CF", - "Qidi Generic PETG-CF" - ], - [ - "Generic", - "PETG-CF", - "Tiertime Generic PETG-CF" - ], - [ - "Orca Arena", - "PETG-CF", - "OrcaArena Generic PETG-CF" - ], - [ - "Volumic", - "PETG", - "Volumic PETG Ultra carbone" - ], - [ - "Volumic", - "PETG", - "Volumic PETG Ultra carbone (Performance)" - ] - ], - "GFG98_01": [ - [ - "Generic", - "PETG-CF", - "Tiertime Generic PETG-CF" - ] - ], - "GFG99": [ - [ - "CoLiDo", - "PETG", - "CoLiDo Generic PETG" - ], - [ - "CoLiDo", - "PETG", - "CoLiDo PETG" - ], - [ - "FlyingBear", - "PETG", - "FlyingBear Generic PETG" - ], - [ - "FlyingBear", - "PETG Basic", - "FlyingBear PETG Basic" - ], - [ - "Generic", - "PEEK", - "MM Generic PEEK" - ], - [ - "Generic", - "PETG", - "Anker Generic PETG" - ], - [ - "Generic", - "PETG", - "Anycubic Generic PETG" - ], - [ - "Generic", - "PETG", - "Artillery Generic PETG" - ], - [ - "Generic", - "PETG", - "C1 Generic PETG" - ], - [ - "Generic", - "PETG", - "Chuanying Generic PETG" - ], - [ - "Generic", - "PETG", - "Chuanying PETG" - ], - [ - "Generic", - "PETG", - "Comgrow Generic PETG" - ], - [ - "Generic", - "PETG", - "Creality Generic PETG" - ], - [ - "Generic", - "PETG", - "DeltaMaker Generic PETG" - ], - [ - "Generic", - "PETG", - "FLSun Generic PETG" - ], - [ - "Generic", - "PETG", - "FLSun S1 PETG" - ], - [ - "Generic", - "PETG", - "FLSun T1 PETG" - ], - [ - "Generic", - "PETG", - "Flashforge Generic PETG" - ], - [ - "Generic", - "PETG", - "Flashforge PETG" - ], - [ - "Generic", - "PETG", - "Generic PETG" - ], - [ - "Generic", - "PETG", - "Lulzbot 2.85mm PETG" - ], - [ - "Generic", - "PETG", - "OrcaArena Generic PETG" - ], - [ - "Generic", - "PETG", - "Qidi Generic PETG" - ], - [ - "Generic", - "PETG", - "RatRig Generic PETG" - ], - [ - "Generic", - "PETG", - "SecKit Generic PETG" - ], - [ - "Generic", - "PETG", - "Tiertime Generic PETG" - ], - [ - "Generic", - "PETG", - "Vzbot Generic PETG" - ], - [ - "Generic", - "PETG", - "Yumi Generic PETG" - ], - [ - "InfiMech", - "PETG", - "InfiMech Generic PETG" - ], - [ - "Volumic", - "PETG", - "Volumic PETG Ultra" - ], - [ - "Volumic", - "PETG", - "Volumic PETG Ultra (Performance)" - ], - [ - "Yumi", - "PETG", - "YUMI PETG" - ], - [ - "re3D", - "PC", - "re3D PC" - ] - ], - "GFG99_01": [ - [ - "Generic", - "PETG", - "Tiertime Generic PETG" - ] - ], - "GFG99_2": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "GFG99_3": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "GFG99_4": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "GFG99_5": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ], - [ - "Generic", - "PETG", - "Prusa Generic PETG HF" - ] - ], - "GFG99_6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG HF" - ] - ], - "GFG99_7": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG HF" - ] - ], - "GFL00": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA" - ] - ], - "GFL01": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA" - ] - ], - "GFL06": [ - [ - "Polymaker", - "PETG", - "Fiberon PETG-ESD" - ] - ], - "GFL100": [ - [ - "Generic", - "PLA", - "Generic PLA" - ], - [ - "Generic", - "PLA", - "TwoTrees Generic HS PLA" - ] - ], - "GFL106": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "GFL108": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "GFL200": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "GFL204": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "GFL206": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "GFL208": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "GFL300": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFL304": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFL306": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFL308": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFL400": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "GFL404": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "GFL406": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "GFL408": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "GFL500": [ - [ - "Generic", - "ABS", - "Generic ABS HT" - ] - ], - "GFL504": [ - [ - "Generic", - "ABS", - "Generic ABS HT" - ] - ], - "GFL506": [ - [ - "Generic", - "ABS", - "Generic ABS HT" - ] - ], - "GFL508": [ - [ - "Generic", - "ABS", - "Generic ABS HT" - ] - ], - "GFL56": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA12-CF10" - ] - ], - "GFL57": [ - [ - "Polymaker", - "PA6-CF", - "Fiberon PA6-CF20" - ] - ], - "GFL62": [ - [ - "Polymaker", - "PLA", - "PolyLite CosPLA" - ] - ], - "GFL63": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Galaxy" - ] - ], - "GFL64": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Glow" - ] - ], - "GFL65": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Luminous" - ] - ], - "GFL66": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Neon" - ] - ], - "GFL67": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Starlight" - ] - ], - "GFL68": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Translucent" - ] - ], - "GFL69": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA Marble" - ] - ], - "GFL70": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA+" - ] - ], - "GFL71": [ - [ - "Polymaker", - "ASA", - "Fiberon ASA-CF08" - ] - ], - "GFL72": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA612-ESD" - ] - ], - "GFL73": [ - [ - "Polymaker", - "ABS", - "Fiberon PPS-GF20" - ] - ], - "GFL74": [ - [ - "Polymaker", - "PETG", - "PolyLite PETG Translucent" - ] - ], - "GFL75": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Pro Metallic" - ] - ], - "GFL76": [ - [ - "Polymaker", - "PETG", - "Polymaker PETG" - ] - ], - "GFL77": [ - [ - "Polymaker", - "PETG", - "Polymaker PETG Galaxy" - ] - ], - "GFL78": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA" - ] - ], - "GFL79": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA Pro" - ] - ], - "GFL80": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA Pro Metallic" - ] - ], - "GFL94": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Slik" - ] - ], - "GFL95": [ - [ - "Generic", - "PLA", - "Anker Generic PLA+" - ], - [ - "Generic", - "PLA", - "Tiertime Generic PLA High Speed" - ] - ], - "GFL95_01": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA High Speed" - ] - ], - "GFL96": [ - [ - "Generic", - "PLA", - "Anker Generic PLA Silk" - ], - [ - "Generic", - "PLA", - "Tiertime Generic PLA Silk" - ] - ], - "GFL96_01": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA Silk" - ] - ], - "GFL97": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA SE" - ] - ], - "GFL98": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Glow" - ], - [ - "Generic", - "PLA-CF", - "Anker Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Anycubic Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Artillery Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Creality Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "FLSun Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "OrcaArena Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Qidi Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "RatRig Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "SecKit Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Tiertime Generic PLA-CF" - ], - [ - "Generic", - "PLA-CF", - "Vzbot Generic PLA-CF" - ] - ], - "GFL98_01": [ - [ - "Generic", - "PLA-CF", - "Tiertime Generic PLA-CF" - ] - ], - "GFL98_1": [ - [ - "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], - "GFL98_3": [ - [ - "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], - "GFL98_4": [ - [ - "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], - "GFL98_5": [ - [ - "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], - "GFL99": [ - [ - "Co Print", - "PLA", - "CoPrint Generic PLA" - ], - [ - "FlyingBear", - "PLA", - "FlyingBear Generic PLA" - ], - [ - "Generic", - "ASA", - "Flashforge ASA" - ], - [ - "Generic", - "PLA", - "Anker Generic PLA" - ], - [ - "Generic", - "PLA", - "Anycubic Generic PLA" - ], - [ - "Generic", - "PLA", - "Artillery Generic PLA" - ], - [ - "Generic", - "PLA", - "C1 Generic PLA" - ], - [ - "Generic", - "PLA", - "Chuanying Generic PLA" - ], - [ - "Generic", - "PLA", - "Comgrow Generic PLA" - ], - [ - "Generic", - "PLA", - "Comgrow T300 PLA" - ], - [ - "Generic", - "PLA", - "Creality Generic PLA" - ], - [ - "Generic", - "PLA", - "DeltaMaker Generic PLA" - ], - [ - "Generic", - "PLA", - "Dremel Generic PLA" - ], - [ - "Generic", - "PLA", - "FLSun Generic PLA" - ], - [ - "Generic", - "PLA", - "FLSun S1 PLA Generic" - ], - [ - "Generic", - "PLA", - "FLSun T1 PLA Generic" - ], - [ - "Generic", - "PLA", - "Flashforge PLA-SILK" - ], - [ - "Generic", - "PLA", - "Generic PLA" - ], - [ - "Generic", - "PLA", - "Generic PLA High Speed" - ], - [ - "Generic", - "PLA", - "Lulzbot 2.85mm PLA" - ], - [ - "Generic", - "PLA", - "OrcaArena Generic PLA" - ], - [ - "Generic", - "PLA", - "Peopoly Generic PLA" - ], - [ - "Generic", - "PLA", - "Phrozen PLA" - ], - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ], - [ - "Generic", - "PLA", - "Qidi Generic PLA" - ], - [ - "Generic", - "PLA", - "RatRig Generic PLA" - ], - [ - "Generic", - "PLA", - "SecKit Generic PLA" - ], - [ - "Generic", - "PLA", - "Sovol SV07 PLA" - ], - [ - "Generic", - "PLA", - "Tiertime Generic PLA" - ], - [ - "Generic", - "PLA", - "Vzbot Generic PLA" - ], - [ - "Generic", - "PLA", - "Yumi Generic PLA" - ], - [ - "InfiMech", - "PLA", - "InfiMech Generic PLA" - ], - [ - "Volumic", - "PLA", - "Volumic PLA Ultra" - ], - [ - "Volumic", - "PLA", - "Volumic PLA Ultra (Performance)" - ], - [ - "re3D", - "PLA", - "re3D PLA" - ] - ], - "GFL99_01": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA" - ] - ], - "GFL99_2": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "GFL99_3": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "GFL99_4": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "GFL99_5": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ], - [ - "Generic", - "PLA", - "Prusa Generic PLA HF" - ] - ], - "GFL99_6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA HF" - ] - ], - "GFL99_7": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA HF" - ] - ], - "GFLLK10PETG": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFLLK10PLA": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "GFLLK10PPETG": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFLLK10PPLA": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "GFN03": [ - [ - "Orca Arena", - "PA-CF", - "Arena PA-CF" - ] - ], - "GFN04": [ - [ - "Orca Arena", - "PA-CF", - "Arena PAHT-CF" - ] - ], - "GFN05": [ - [ - "Tiertime", - "PA6-CF", - "Tiertime PA6-CF" - ] - ], - "GFN05_01": [ - [ - "Tiertime", - "PA6-CF", - "Tiertime PA6-CF" - ] - ], - "GFN96": [ - [ - "Generic", - "PPA-GF", - "Tiertime Generic PPA-GF" - ] - ], - "GFN96_01": [ - [ - "Generic", - "PPA-GF", - "Tiertime Generic PPA-GF" - ] - ], - "GFN97": [ - [ - "Generic", - "PPA-CF", - "Tiertime Generic PPA-CF" - ] - ], - "GFN97_01": [ - [ - "Generic", - "PPA-CF", - "Tiertime Generic PPA-CF" - ] - ], - "GFN98": [ - [ - "FlyingBear", - "PA-CF", - "FlyingBear Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Anker Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Anycubic Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Creality Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "FLSun Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "OrcaArena Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Qidi Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "RatRig Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "SecKit Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Tiertime Generic PA-CF" - ], - [ - "Generic", - "PA-CF", - "Vzbot Generic PA-CF" - ], - [ - "Generic", - "PA11-CF", - "fdm_filament_pa11cf" - ], - [ - "InfiMech", - "PA-CF", - "InfiMech Generic PA-CF" - ] - ], - "GFN98_02": [ - [ - "Generic", - "PA-CF", - "Tiertime Generic PA-CF" - ] - ], - "GFN98_1": [ - [ - "Generic", - "PA-CF", - "Prusa Generic PA-CF" - ] - ], - "GFN98_2": [ - [ - "Generic", - "PA-CF", - "Prusa Generic PA-CF" - ] - ], - "GFN98_3": [ - [ - "Generic", - "PA-CF", - "Prusa Generic PA-CF" - ] - ], - "GFN98_4": [ - [ - "Generic", - "PA-CF", - "Prusa Generic PA-CF" - ] - ], - "GFN99": [ - [ - "Generic", - "PA", - "Anker Generic PA" - ], - [ - "Generic", - "PA", - "Anycubic Generic PA" - ], - [ - "Generic", - "PA", - "FLSun Generic PA" - ], - [ - "Generic", - "PA", - "OrcaArena Generic PA" - ], - [ - "Generic", - "PA", - "Prusa Generic PA" - ], - [ - "Generic", - "PA", - "Qidi Generic PA" - ], - [ - "Generic", - "PA", - "RatRig Generic PA" - ], - [ - "Generic", - "PA", - "SecKit Generic PA" - ], - [ - "Generic", - "PA", - "Tiertime Generic PA" - ], - [ - "Generic", - "PA", - "Vzbot Generic PA" - ], - [ - "Volumic", - "PA", - "Volumic NYLON Ultra" - ], - [ - "Volumic", - "PA", - "Volumic NYLON Ultra (Performance)" - ] - ], - "GFN99_01": [ - [ - "Generic", - "PA", - "Tiertime Generic PA" - ] - ], - "GFN99_1": [ - [ - "Generic", - "PA", - "Prusa Generic PA" - ] - ], - "GFN99_2": [ - [ - "Generic", - "PA", - "Prusa Generic PA" - ] - ], - "GFN99_3": [ - [ - "Generic", - "PA", - "Prusa Generic PA" - ] - ], - "GFN99_4": [ - [ - "Generic", - "PA", - "Prusa Generic PA" - ] - ], - "GFP95": [ - [ - "Generic", - "PP-GF", - "Tiertime Generic PP-GF" - ] - ], - "GFP95_01": [ - [ - "Generic", - "PP-GF", - "Tiertime Generic PP-GF" - ] - ], - "GFP96": [ - [ - "Generic", - "PP-CF", - "Tiertime Generic PP-CF" - ] - ], - "GFP96_01": [ - [ - "Generic", - "PP-CF", - "Tiertime Generic PP-CF" - ] - ], - "GFP97": [ - [ - "Generic", - "PP", - "Tiertime Generic PP" - ] - ], - "GFP97_01": [ - [ - "Generic", - "PP", - "Tiertime Generic PP" - ] - ], - "GFP98": [ - [ - "Generic", - "PE-CF", - "Tiertime Generic PE-CF" - ] - ], - "GFP98_01": [ - [ - "Generic", - "PE-CF", - "Tiertime Generic PE-CF" - ] - ], - "GFP99": [ - [ - "Generic", - "PE", - "Tiertime Generic PE" - ] - ], - "GFP99_01": [ - [ - "Generic", - "PE", - "Tiertime Generic PE" - ] - ], - "GFPA": [ - [ - "Anycubic", - "PA", - "Anycubic PA" - ] - ], - "GFPA6-CF": [ - [ - "Anycubic", - "PA6-CF", - "Anycubic PA6-CF" - ] - ], - "GFPAHT-CF": [ - [ - "Anycubic", - "PAHT-CF", - "Anycubic PAHT-CF" - ] - ], - "GFPC": [ - [ - "Anycubic", - "PC", - "Anycubic PC" - ] - ], - "GFPC-CF": [ - [ - "Anycubic", - "PC-CF", - "Anycubic PC-CF" - ] - ], - "GFPC-GF": [ - [ - "Anycubic", - "PC-GF", - "Anycubic PC-GF" - ] - ], - "GFPEBA": [ - [ - "Anycubic", - "PEBA", - "Anycubic PEBA" - ] - ], - "GFPET-CF": [ - [ - "Anycubic", - "PET-CF", - "Anycubic PET-CF" - ] - ], - "GFPETG": [ - [ - "Anycubic", - "PETG", - "Generic PETG" - ], - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GFPETG-1": [ - [ - "Generic", - "PETG", - "Peopoly Generic PETG" - ] - ], - "GFPETG-CF": [ - [ - "Anycubic", - "PETG-CF", - "Anycubic PETG-CF" - ] - ], - "GFPLA Glow": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Glow" - ] - ], - "GFPLA Translucent": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Translucent" - ] - ], - "GFPLA-CF": [ - [ - "Anycubic", - "PLA-CF", - "Anycubic PLA-CF" - ] - ], - "GFPM001": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA" - ] - ], - "GFPM002": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Matte" - ] - ], - "GFPM003": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Marble" - ] - ], - "GFPM004": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Silk" - ] - ], - "GFPM005": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Satin" - ] - ], - "GFPM006": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Translucent" - ] - ], - "GFPM007": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Galaxy" - ] - ], - "GFPM008": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Celestial" - ] - ], - "GFPM009": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Starlight" - ] - ], - "GFPM010": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Glow" - ] - ], - "GFPM011": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Luminous" - ] - ], - "GFPM012": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Metallic" - ] - ], - "GFPM013": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Neon" - ] - ], - "GFPM014": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA UV Shift" - ] - ], - "GFPM015": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Temp Shift" - ] - ], - "GFPM016": [ - [ - "Polymaker", - "PLA", - "Panchroma CoPE" - ] - ], - "GFPM017": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA" - ] - ], - "GFPM018": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA-GF" - ] - ], - "GFPM019": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Pro" - ] - ], - "GFPVA": [ - [ - "Anycubic", - "PVA", - "Anycubic PVA" - ] - ], - "GFR98": [ - [ - "Generic", - "PHA", - "Tiertime Generic PHA" - ] - ], - "GFR98_01": [ - [ - "Generic", - "PHA", - "Tiertime Generic PHA" - ] - ], - "GFR99": [ - [ - "Generic", - "EVA", - "Tiertime Generic EVA" - ] - ], - "GFR99_01": [ - [ - "Generic", - "EVA", - "Tiertime Generic EVA" - ] - ], - "GFRH01": [ - [ - "Generic", - "ABS", - "fdm_filament_abs" - ] - ], - "GFRH02": [ - [ - "Generic", - "ASA", - "fdm_filament_asa" - ] - ], - "GFRH03": [ - [ - "Generic", - "PETG", - "fdm_filament_petg" - ] - ], - "GFRH04": [ - [ - "Generic", - "PLA", - "fdm_filament_pla" - ] - ], - "GFRH05": [ - [ - "Generic", - "TPU", - "fdm_filament_tpu" - ] - ], - "GFRH06": [ - [ - "Generic", - "PC-CF", - "fdm_filament_pccf" - ] - ], - "GFS00": [ - [ - "Orca Arena", - "PLA", - "Arena Support W" - ] - ], - "GFS01": [ - [ - "Orca Arena", - "PA", - "Arena Support G" - ] - ], - "GFS04": [ - [ - "Tiertime", - "PVA", - "Tiertime PVA" - ], - [ - "WonderMaker", - "PVA", - "WonderMaker PVA" - ] - ], - "GFS04_01": [ - [ - "Tiertime", - "PVA", - "Tiertime PVA" - ] - ], - "GFS97": [ - [ - "Generic", - "BVOH", - "Tiertime Generic BVOH" - ] - ], - "GFS97_01": [ - [ - "Generic", - "BVOH", - "Tiertime Generic BVOH" - ] - ], - "GFS98": [ - [ - "Generic", - "HIPS", - "Tiertime Generic HIPS" - ], - [ - "Generic", - "PVB", - "fdm_filament_pvb" - ] - ], - "GFS98_01": [ - [ - "Generic", - "HIPS", - "Tiertime Generic HIPS" - ] - ], - "GFS99": [ - [ - "Generic", - "PVA", - "Anker Generic PVA" - ], - [ - "Generic", - "PVA", - "Anycubic Generic PVA" - ], - [ - "Generic", - "PVA", - "FLSun Generic PVA" - ], - [ - "Generic", - "PVA", - "Generic PVA" - ], - [ - "Generic", - "PVA", - "OrcaArena Generic PVA" - ], - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ], - [ - "Generic", - "PVA", - "Qidi Generic PVA" - ], - [ - "Generic", - "PVA", - "RatRig Generic PVA" - ], - [ - "Generic", - "PVA", - "SecKit Generic PVA" - ], - [ - "Generic", - "PVA", - "Tiertime Generic PVA" - ], - [ - "Generic", - "PVA", - "Vzbot Generic PVA" - ], - [ - "Volumic", - "PVA", - "Volumic PVA" - ], - [ - "Volumic", - "PVA", - "Volumic PVA-BVOH (Performance)" - ] - ], - "GFS99_01": [ - [ - "Generic", - "PVA", - "Tiertime Generic PVA" - ] - ], - "GFS99_1": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ] - ], - "GFS99_2": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ] - ], - "GFS99_3": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ] - ], - "GFS99_4": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ], - [ - "Generic", - "PVA", - "Prusa Generic PVA HF" - ] - ], - "GFS99_5": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA HF" - ] - ], - "GFS99_6": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA HF" - ] - ], - "GFSL99": [ - [ - "Generic", - "ABS", - "Peopoly Generic ABS" - ] - ], - "GFSNL02": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Matte" - ] - ], - "GFSNL03": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+" - ] - ], - "GFSNL04": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+ 2.0" - ] - ], - "GFSNL05": [ - [ - "SUNLU", - "PLA", - "SUNLU Silk PLA+" - ] - ], - "GFSNL06": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Marble" - ] - ], - "GFSNL07": [ - [ - "SUNLU", - "PLA", - "SUNLU Wood PLA" - ] - ], - "GFSNL08": [ - [ - "SUNLU", - "PETG", - "SUNLU PETG" - ] - ], - "GFT01": [ - [ - "Orca Arena", - "PET-CF", - "Arena PET-CF" - ], - [ - "Tiertime", - "PET-CF", - "Tiertime PET-CF" - ], - [ - "WonderMaker", - "PET-CF", - "WonderMaker PET-CF" - ] - ], - "GFT01_01": [ - [ - "Tiertime", - "PET-CF", - "Tiertime PET-CF" - ] - ], - "GFT02": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "GFT97": [ - [ - "Generic", - "PPS", - "Tiertime Generic PPS" - ] - ], - "GFT97_01": [ - [ - "Generic", - "PPS", - "Tiertime Generic PPS" - ] - ], - "GFT98": [ - [ - "Generic", - "PPS-CF", - "Tiertime Generic PPS-CF" - ] - ], - "GFT98_01": [ - [ - "Generic", - "PPS-CF", - "Tiertime Generic PPS-CF" - ] - ], - "GFTPU 95A": [ - [ - "Anycubic", - "TPU", - "Anycubic TPU 95A" - ] - ], - "GFTPU for ACE": [ + "OF0FfcAG": [ [ "Anycubic", "TPU", "Anycubic TPU for ACE" ] ], - "GFU01": [ - [ - "Afinia", - "TPU", - "Afinia TPU" - ], - [ - "Orca Arena", - "TPU", - "Arena TPU 95A" - ], - [ - "Tiertime", - "TPU", - "Tiertime TPU 95A" - ], - [ - "WonderMaker", - "TPU", - "WonderMaker TPU 95A" - ] - ], - "GFU01_01": [ - [ - "Afinia", - "TPU", - "Afinia TPU" - ], - [ - "Tiertime", - "TPU", - "Tiertime TPU 95A" - ] - ], - "GFU99": [ - [ - "CoLiDo", - "TPU", - "CoLiDo Generic TPU" - ], - [ - "FlyingBear", - "TPU", - "FlyingBear Generic TPU" - ], - [ - "FlyingBear", - "TPU", - "FlyingBear TPU Basic" - ], - [ - "Generic", - "FLEX", - "fdm_filament_flex" - ], - [ - "Generic", - "TPU", - "Anker Generic TPU" - ], - [ - "Generic", - "TPU", - "Anycubic Generic TPU" - ], - [ - "Generic", - "TPU", - "Artillery Generic TPU" - ], - [ - "Generic", - "TPU", - "Creality Generic TPU" - ], - [ - "Generic", - "TPU", - "FLSun Generic TPU" - ], - [ - "Generic", - "TPU", - "FLSun S1 TPU" - ], - [ - "Generic", - "TPU", - "FLSun T1 TPU" - ], - [ - "Generic", - "TPU", - "Generic TPU" - ], - [ - "Generic", - "TPU", - "OrcaArena Generic TPU" - ], - [ - "Generic", - "TPU", - "Prusa Generic TPU" - ], - [ - "Generic", - "TPU", - "Qidi Generic TPU" - ], - [ - "Generic", - "TPU", - "RatRig Generic TPU" - ], - [ - "Generic", - "TPU", - "SecKit Generic TPU" - ], - [ - "Generic", - "TPU", - "Tiertime Generic TPU" - ], - [ - "Generic", - "TPU", - "TwoTrees Generic 95A TPU" - ], - [ - "Generic", - "TPU", - "Vzbot Generic TPU" - ], - [ - "InfiMech", - "TPU", - "InfiMech Generic TPU" - ], - [ - "InfiMech", - "TPU", - "InfiMech TPU Basic" - ], - [ - "Volumic", - "TPU", - "Volumic FLEX93 Ultra" - ], - [ - "Volumic", - "TPU", - "Volumic FLEX93 Ultra (Performance)" - ], - [ - "Yumi", - "PLA", - "YUMI PLA Bowden" - ], - [ - "Yumi", - "PLA", - "YUMI PLA Direct Drive" - ] - ], - "GFU99_01": [ - [ - "Generic", - "TPU", - "Tiertime Generic TPU" - ] - ], - "GFU99_2": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "GFU99_3": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU HF" - ] - ], - "GPAB00": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "GPCB00": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "GPETB00": [ - [ - "Generic", - "PET", - "Generic PET" - ] - ], - "GPETGB00": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "GPLAB00": [ + "OF0GIkJm": [ [ "Generic", "PLA", - "Generic PLA" - ] - ], - "Generic ABS @E3NG v1.2S": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "Generic ABS @MK4S": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S 0.6": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S 0.8": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S HF0.4": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S HF0.5": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S HF0.6": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ABS @MK4S HF0.8": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Generic ASA @E3NG v1.2S": [ - [ - "Generic", - "ASA", - "Generic ASA" - ] - ], - "Generic FLEX @MK4S": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Generic FLEX @MK4S 0.6": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Generic FLEX @MK4S 0.8": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Generic PCCF @E3NG v1.2S": [ - [ - "Generic", - "PC-CF", - "Generic PCCF" - ] - ], - "Generic PETG @E3NG v1.2S": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "Generic PETG @MK4S": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S 0.6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S 0.8": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S HF0.4": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S HF0.5": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S HF0.6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PETG @MK4S HF0.8": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Generic PLA @E3NG v1.2S": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "Generic PLA @MK4S": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S 0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S 0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S HF0.4": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S HF0.5": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S HF0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA @MK4S HF0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Generic PLA Silk @MK4S": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Generic PLA Silk @MK4S 0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Generic PLA Silk @MK4S 0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Generic TPU @E3NG v1.2S": [ - [ - "Generic", - "TPU", - "Generic TPU" - ] - ], - "IQM1": [ - [ - "iQ Materials", - "PACF Pro", - "Fiberthree PACF Pro P1" - ] - ], - "IQM1011": [ - [ - "iQ Materials", - "VXL90 Xioneer", - "VXL90 TiQ2 P2" - ] - ], - "IQM2": [ - [ - "iQ Materials", - "ABS Material4Print Natur", - "Material4Print ABS Natur P1" - ] - ], - "IQM3": [ - [ - "iQ Materials", - "PETG Polymax", - "Polymaker PETG Polymax black P1" - ] - ], - "IQM7": [ - [ - "iQ Materials", - "PACF Pro", - "Fiberthree PACF Pro P2" - ] - ], - "LHF_abs": [ - [ - "LH Stinger", - "ASA", - "LHS ABS" - ] - ], - "LHF_asa": [ - [ - "LH Stinger", - "ASA", - "LHS ASA" - ] - ], - "LHF_ftpuf": [ - [ - "LH Stinger", - "TPU", - "LHS TPU Foamy 78A" - ] - ], - "LHF_pccf": [ - [ - "LH Stinger", - "PC", - "LHS PC CF" - ] - ], - "LHF_pctg": [ - [ - "LH Stinger", - "PCTG", - "LHS PCTG" - ] - ], - "LHF_petg": [ - [ - "LH Stinger", - "PETG", - "LHS PETG" - ] - ], - "LHF_pla": [ - [ - "LH Stinger", - "PLA", - "LHS PLA" - ] - ], - "LHF_ptpu_pl": [ - [ - "LH Stinger", - "TPU", - "LHS TPU" - ] - ], - "OF09vOcG": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Galaxy" - ] - ], - "OF0Ee2jQ": [ - [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPU High-Flow" + "Tiertime Generic PLA Silk" ] ], "OF0NgY1y": [ @@ -13199,25 +8123,11 @@ "COEX NYLEX PA6-CF" ] ], - "OF0SyJhk": [ + "OF0R5Wc7": [ [ - "FusRock", - "PA6-CF", - "Flashforge PA6-CF" - ] - ], - "OF0TODnN": [ - [ - "Generic", - "PET-CF", - "Generic PET-CF" - ] - ], - "OF0TjJ0G": [ - [ - "QIDI", - "ASA-AERO", - "Qidi ASA-Aero" + "Artillery", + "PLA Tough", + "Artillery PLA Tough" ] ], "OF0UJcb6": [ @@ -13227,18 +8137,11 @@ "PolyLite PETG" ] ], - "OF0UbONm": [ + "OF0VpkBM": [ [ - "Generic", - "S-PAHT", - "FusRock S-PAHT" - ] - ], - "OF0VEdLB": [ - [ - "Cubicon", + "Polymaker", "PETG", - "Cubicon PETG" + "PolyLite PETG Translucent" ] ], "OF0Vtzaw": [ @@ -13248,11 +8151,18 @@ "FilAr PETG Amarillo Radiante" ] ], - "OF0Y5MLd": [ + "OF0b7M1z": [ [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" + "SeeMeCNC", + "PA-CF", + "SeeMeCNC PA-CF" + ] + ], + "OF0c7mnL": [ + [ + "InfiMech", + "ABS", + "InfiMech ABS" ] ], "OF0gGRWk": [ @@ -13276,6 +8186,13 @@ "Panchroma PLA Luminous" ] ], + "OF0omtEb": [ + [ + "Polymaker", + "ASA", + "Fiberon ASA-CF08" + ] + ], "OF0pzFLc": [ [ "COEX 3D", @@ -13283,6 +8200,13 @@ "COEX PLA+Silk" ] ], + "OF0w7OpJ": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido 0.8 nozzle" + ] + ], "OF0wBGNx": [ [ "Bambu Lab", @@ -13290,25 +8214,39 @@ "Bambu ASA-CF" ] ], - "OF0wk0Pk": [ - [ - "Generic", - "PLA", - "Flashforge PLA Pro" - ] - ], - "OF0z1XpN": [ + "OF0wz84w": [ [ "QIDI", - "PLA", - "QIDI PLA Rapido Silk" + "ABS", + "QIDI ABS Rapido 0.6 nozzle" ] ], - "OF17cONC": [ + "OF0yFLkY": [ [ - "Polymaker", - "PLA", - "PolyTerra Dual PLA" + "Anycubic", + "ASA", + "Anycubic ASA" + ] + ], + "OF0zx94L": [ + [ + "Generic", + "PA", + "Vzbot Generic PA" + ] + ], + "OF112FvY": [ + [ + "Generic", + "PETG", + "Generic PETG Basic" + ] + ], + "OF1Id239": [ + [ + "Generic", + "PETG", + "Prusa Generic PETG" ] ], "OF1N1qMK": [ @@ -13318,6 +8256,13 @@ "Panchroma PLA UV Shift" ] ], + "OF1OZujR": [ + [ + "Generic", + "PVA", + "Flashforge Generic PVA" + ] + ], "OF1Pke8t": [ [ "Overture", @@ -13332,11 +8277,39 @@ "Generic PP" ] ], - "OF1Zypyy": [ + "OF1W7c76": [ [ "QIDI", - "PETG", - "QIDI PETG Tough" + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "OF1bQyX2": [ + [ + "Generic", + "PLA", + "Flashforge PLA Matte" + ] + ], + "OF1d7c3A": [ + [ + "Snapmaker", + "ASA", + "Snapmaker ASA" + ] + ], + "OF1daEUW": [ + [ + "Generic", + "PETG-CF", + "Anker Generic PETG-CF" + ] + ], + "OF1dpPrW": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA" ] ], "OF1hznGB": [ @@ -13346,11 +8319,25 @@ "Elegoo PLA PRO" ] ], - "OF22AxCm": [ + "OF1uR1t2": [ [ "Generic", "PETG", - "Polymaker PETG" + "Tiertime Generic PETG" + ] + ], + "OF223rZv": [ + [ + "Anycubic", + "ABS", + "Anycubic ABS" + ] + ], + "OF2EB9Iz": [ + [ + "Volumic", + "ASA", + "Volumic ASA Ultra" ] ], "OF2EK9F1": [ @@ -13367,25 +8354,11 @@ "SUNLU PETG" ] ], - "OF2HQqTC": [ + "OF2RjrWH": [ [ - "Cubicon", - "PLA", - "Cubicon PLA+" - ] - ], - "OF2Psxdc": [ - [ - "Co Print", - "TPU", - "CoPrint Generic TPU" - ] - ], - "OF2UFmOo": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA" + "Generic", + "PAHT-GF", + "FusRock Generic PAHT-GF" ] ], "OF2VFe4J": [ @@ -13402,6 +8375,27 @@ "FilAr PETG Azul Imperial" ] ], + "OF2bZtyg": [ + [ + "Generic", + "PLA-CF", + "Flashforge PLA-CF" + ] + ], + "OF2hfMcG": [ + [ + "Orca Arena", + "PLA-CF", + "Arena PLA-CF" + ] + ], + "OF2mgDsI": [ + [ + "Generic", + "PLA", + "Vzbot Generic PLA" + ] + ], "OF2pj5l5": [ [ "Overture", @@ -13409,13 +8403,6 @@ "Overture Super PLA+" ] ], - "OF2tvNYA": [ - [ - "Generic", - "PLA", - "Sovol Zero PLA Silk" - ] - ], "OF2xccEe": [ [ "DREMC", @@ -13430,32 +8417,53 @@ "Elegoo Rapid TPU 95A" ] ], - "OF38Hyk4": [ + "OF3F63OE": [ [ - "Generic", + "re3D", "PETG", - "Flashforge PETG Pro" + "re3D PETG" ] ], - "OF3XeEuV": [ + "OF3IKafc": [ [ "QIDI", - "PET-GF", - "QIDI PET-GF" + "PLA", + "QIDI PLA Rapido Matte" ] ], - "OF3YOOOs": [ + "OF3OMgrI": [ + [ + "Creality", + "PLA", + "CR-Silk" + ] + ], + "OF3P0BQA": [ [ "Generic", - "PETG-CF", - "Chuanying Generic PETG-CF10" + "ABS", + "Anker Generic ABS" ] ], - "OF3arl18": [ + "OF3WQaKK": [ [ - "Elegoo", + "Creality", "PETG", - "Elegoo Rapid PETG" + "CR-PETG" + ] + ], + "OF3dJf4E": [ + [ + "Volumic", + "PLA", + "Volumic PLA Ultra (Performance)" + ] + ], + "OF3fwO8b": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA Basic" ] ], "OF3kBrdA": [ @@ -13465,18 +8473,53 @@ "eSUN PETG" ] ], - "OF41QVDH": [ + "OF3msXEa": [ [ - "Generic", - "PLA", - "Flashforge Generic PLA-Silk" + "Snapmaker", + "PETG-CF", + "Snapmaker Dual PETG-CF" ] ], - "OF43idK2": [ + "OF3s929u": [ [ "Generic", + "PP", + "Tiertime Generic PP" + ] + ], + "OF3wxlw9": [ + [ + "CoLiDo", + "PETG", + "CoLiDo Generic PETG" + ] + ], + "OF3ydJTT": [ + [ + "InfiMech", "PLA", - "Creality Generic PLA Matte" + "InfiMech PLA Hyper" + ] + ], + "OF41jaTh": [ + [ + "Generic", + "TPU-90A", + "Flashforge TPU-90A" + ] + ], + "OF42ZDpN": [ + [ + "Generic", + "PAHT", + "FusRock PAHT" + ] + ], + "OF43Raws": [ + [ + "Polymaker", + "PLA", + "PolyTerra J1 PLA" ] ], "OF44VYzK": [ @@ -13486,11 +8529,18 @@ "FilAr PETG Azul Francia" ] ], - "OF48G7He": [ + "OF48L671": [ [ - "QIDI", - "PETG", - "QIDI PETG Tough 0.8 nozzle" + "Generic", + "ASA", + "RatRig Generic ASA" + ] + ], + "OF4APyxe": [ + [ + "Creality", + "PA-CF", + "Hyper PAHT-CF" ] ], "OF4KsW72": [ @@ -13500,11 +8550,18 @@ "FilAr PLA" ] ], - "OF4RKeng": [ + "OF4Mf5Gz": [ [ "Generic", - "ASA", - "Flashforge Generic ASA" + "PETG", + "Creality Generic PETG" + ] + ], + "OF4Nhggz": [ + [ + "Artillery", + "PLA Basic+", + "Artillery PLA Basic+" ] ], "OF4RvVuU": [ @@ -13514,32 +8571,88 @@ "Bambu PPS-CF" ] ], - "OF4gzzE4": [ + "OF4S3To3": [ [ "QIDI", - "PET-CF", - "QIDI PET-CF" + "PETG", + "QIDI PETG Rapido" ] ], - "OF4jILJA": [ + "OF4WB37S": [ [ - "FlyingBear", - "PC", - "FlyingBear PC" + "Snapmaker", + "PETG", + "Snapmaker PETG" ] ], - "OF4m9A5w": [ + "OF4XAUnp": [ [ "Generic", - "HIPS", - "Flashforge Generic HIPS" + "ASA", + "Vzbot Generic ASA" ] ], - "OF50NUZI": [ + "OF4f8vVp": [ [ - "FlyingBear", + "WonderMaker", + "PET-CF", + "WonderMaker PET-CF" + ] + ], + "OF4iWKrE": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "OF4nQ62r": [ + [ + "QIDI", "PLA", - "FlyingBear PLA Basic" + "QIDI PLA Basic" + ] + ], + "OF4oCRKe": [ + [ + "Generic", + "PETG", + "DeltaMaker Generic PETG" + ] + ], + "OF4ulo9Y": [ + [ + "WonderMaker", + "PVA", + "WonderMaker PVA" + ] + ], + "OF4xhTuK": [ + [ + "Generic", + "PA-CF", + "OrcaArena Generic PA-CF" + ] + ], + "OF4zzGwp": [ + [ + "Generic", + "PET-GF", + "FusRock Generic PET-GF" + ] + ], + "OF51XQar": [ + [ + "Generic", + "PLA", + "C1 Generic PLA" + ] + ], + "OF53eLVD": [ + [ + "Generic", + "ASA-CF", + "Generic ASA-CF" ] ], "OF54B0S0": [ @@ -13549,18 +8662,18 @@ "Bambu PPA-CF" ] ], - "OF57IbZT": [ + "OF54SvEe": [ [ - "Artillery", - "PLA Basic", - "Artillery PLA Basic" + "Prusa Polymers", + "PA11-CF", + "Prusament PA-CF" ] ], - "OF5Bmdtg": [ + "OF5BN24W": [ [ - "Generic", - "ABS", - "Sovol SV06 Plus ACE ABS" + "Flashforge", + "PPA-GF", + "Flashforge PPA-GF" ] ], "OF5CgdDq": [ @@ -13570,11 +8683,25 @@ "PolyLite PLA" ] ], - "OF5J2axC": [ + "OF5E5KNA": [ + [ + "Generic", + "PC", + "SecKit Generic PC" + ] + ], + "OF5NQFKI": [ [ "Generic", "PLA", - "Sovol Zero PLA Basic" + "Flashforge PLA Galaxy" + ] + ], + "OF5NqBfC": [ + [ + "Yumi", + "PETG", + "YUMI PETG" ] ], "OF5P4jgA": [ @@ -13584,32 +8711,46 @@ "FilAr PLA Dorado" ] ], - "OF5T1Y9R": [ + "OF5PtjTp": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Glow" + ] + ], + "OF5SJ3jz": [ + [ + "Flashforge", + "ABS", + "Flashforge ABS" + ] + ], + "OF5YVJXH": [ + [ + "Artillery", + "ASA", + "Artillery ASA" + ] + ], + "OF5Zk4e1": [ [ "Generic", "ABS", - "Flashforge ABS Basic" + "Anycubic Generic ABS" ] ], - "OF5UUaUM": [ + "OF5c6nq3": [ [ "Generic", - "PLA", - "Qidi Generic PLA High Speed" + "TPU-64D", + "Generic TPU-64D" ] ], - "OF5Ugv12": [ + "OF5lGPup": [ [ - "Other", - "PLA", - "Other PLA" - ] - ], - "OF5kwfZu": [ - [ - "FusRock", - "PA-CF", - "FusRock Generic NexPA-CF25" + "WonderMaker", + "PETG", + "WonderMaker PETG Basic" ] ], "OF5nlfKY": [ @@ -13619,6 +8760,20 @@ "FilAr PLA Oro" ] ], + "OF5oNRED": [ + [ + "Eryone", + "PP", + "Eryone PP" + ] + ], + "OF5oXk4M": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA Pro" + ] + ], "OF5rnhjh": [ [ "FilAr", @@ -13626,6 +8781,13 @@ "FilAr PETG" ] ], + "OF5umxxT": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Glow" + ] + ], "OF5vgi2G": [ [ "FilAr", @@ -13633,25 +8795,74 @@ "FilAr PLA-mate Azul" ] ], - "OF60Lmeq": [ + "OF5vzBhb": [ [ "Generic", "PLA", - "Flashforge PLA Matte" + "Chuanying Generic PLA" ] ], - "OF6EOy1A": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG" - ] - ], - "OF6FM5F7": [ + "OF5w29Kq": [ [ "Generic", - "PAHT", - "FusRock PAHT" + "PETG", + "Flashforge HS PETG" + ] + ], + "OF65InrS": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU" + ] + ], + "OF66KUAN": [ + [ + "Polymaker", + "PLA", + "PolySonic PLA" + ] + ], + "OF67EdL5": [ + [ + "Generic", + "ABS", + "Sovol SV06 ACE ABS" + ] + ], + "OF6ATsCF": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker Dual PLA-CF" + ] + ], + "OF6Fpw1E": [ + [ + "Generic", + "PETG", + "Comgrow Generic PETG" + ] + ], + "OF6H51Xx": [ + [ + "Polymaker", + "PETG", + "Polymaker PETG" + ] + ], + "OF6K467o": [ + [ + "InfiMech", + "PA-CF", + "InfiMech Generic PA-CF" + ] + ], + "OF6KELDx": [ + [ + "Co Print", + "PLA", + "CoPrint Generic PLA" ] ], "OF6Ll8lK": [ @@ -13661,39 +8872,116 @@ "Elegoo PETG Translucent" ] ], - "OF6Mxzsg": [ + "OF6MOPWx": [ [ "Generic", - "TPU", - "Generic TPU" + "PET", + "Generic PET" ] ], - "OF6SEkeJ": [ + "OF6O67Xk": [ [ "Generic", - "PET-CF", - "FusRock PET-CF" - ] - ], - "OF6XIeUW": [ - [ - "Generic", - "PLA-CF", - "Generic PLA-CF10" - ] - ], - "OF6XuVQE": [ - [ - "Cubicon", "ABS", - "Cubicon ABS" + "Lulzbot 2.85mm ABS" ] ], - "OF70DKqH": [ + "OF6TuVAg": [ [ "Snapmaker", + "PVA", + "Snapmaker J1 PVA" + ] + ], + "OF6VgL2U": [ + [ + "Generic", + "PLA", + "Phrozen PLA" + ] + ], + "OF6WddJ1": [ + [ + "Generic", + "S-PAHT", + "FusRock S-PAHT" + ] + ], + "OF6kj4jI": [ + [ + "iQ Materials", + "PACF Pro", + "Fiberthree PACF Pro P2" + ] + ], + "OF6ooviO": [ + [ + "Generic", "TPU", - "Snapmaker TPE" + "FLSun S1 TPU" + ] + ], + "OF6rMr3U": [ + [ + "Generic", + "PA", + "FusRock Generic S-Multi" + ] + ], + "OF6rdQ6M": [ + [ + "Generic", + "PPS-CF", + "Generic PPS-CF" + ] + ], + "OF6tKa1Z": [ + [ + "Generic", + "TPU", + "Anker Generic TPU" + ] + ], + "OF6ueBwd": [ + [ + "Generic", + "PLA", + "Flashforge PLA Pro" + ] + ], + "OF6vKLaU": [ + [ + "Generic", + "ASA", + "Artillery Generic ASA" + ] + ], + "OF6xLvYg": [ + [ + "InfiMech", + "PC", + "InfiMech Generic PC" + ] + ], + "OF6zAVFj": [ + [ + "Generic", + "TPU", + "Sovol Zero TPU" + ] + ], + "OF70zbGS": [ + [ + "Creality", + "PLA", + "Hyper L-W PLA" + ] + ], + "OF72YYTd": [ + [ + "Snapmaker", + "ABS", + "Snapmaker ABS" ] ], "OF74KeQR": [ @@ -13703,6 +8991,13 @@ "Generic PHA" ] ], + "OF79Fbo6": [ + [ + "Cubicon", + "PC", + "Cubicon PC" + ] + ], "OF7H3VJM": [ [ "eSUN", @@ -13710,25 +9005,39 @@ "eSUN PLA-Marble" ] ], - "OF7M9vy4": [ + "OF7OqDp3": [ + [ + "Tiertime", + "PLA-CF", + "Tiertime PLA-CF" + ] + ], + "OF7SliVn": [ + [ + "Polymaker", + "PLA", + "PolyLite J1 PLA" + ] + ], + "OF7VJMYM": [ [ "Generic", "PLA", - "RatRig BigNozzle PLA" + "Sovol Zero PLA Basic" ] ], - "OF7cv1Ub": [ + "OF7c9fln": [ [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" + "Anycubic", + "PLA", + "Anycubic PLA Translucent" ] ], - "OF7f0eUZ": [ + "OF7g2vYQ": [ [ - "Volumic", - "ASA", - "Volumic ASA Ultra" + "Co Print", + "TPU", + "CoPrint Generic TPU" ] ], "OF7lOgYF": [ @@ -13738,11 +9047,60 @@ "Generic PETG HF" ] ], - "OF7tgL9c": [ + "OF7lwj52": [ + [ + "CoLiDo", + "PETG", + "CoLiDo PETG" + ] + ], + "OF7nBAd3": [ + [ + "Eryone", + "PLA Silk", + "Eryone Silk PLA" + ] + ], + "OF7tt7DO": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA+" + ] + ], + "OF7uE5KB": [ [ "Generic", - "ASA", - "Chuanying Generic ASA" + "PA-CF", + "Anker Generic PA-CF" + ] + ], + "OF8CXrvm": [ + [ + "Generic", + "PA", + "SecKit Generic PA" + ] + ], + "OF8GnyFU": [ + [ + "Creality", + "ABS", + "Hyper ABS" + ] + ], + "OF8Hx3Pi": [ + [ + "Cubicon", + "PETG", + "Cubicon PETG" + ] + ], + "OF8Jl6NT": [ + [ + "Snapmaker", + "PET", + "Snapmaker J1 PET" ] ], "OF8Tlg47": [ @@ -13752,13 +9110,6 @@ "Generic PPA-GF" ] ], - "OF8WvPVL": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido 0.8 nozzle" - ] - ], "OF8aFWfQ": [ [ "FilAr", @@ -13766,6 +9117,34 @@ "FilAr PLA Amarillo Lirio" ] ], + "OF8bLDu7": [ + [ + "Generic", + "PA-CF", + "Blocks Generic PA-CF" + ] + ], + "OF8dCquh": [ + [ + "Snapmaker", + "ABS", + "Snapmaker J1 ABS Benchy" + ] + ], + "OF8eQjjt": [ + [ + "Generic", + "PETG", + "Lulzbot 2.85mm PETG" + ] + ], + "OF8eaY7j": [ + [ + "Generic", + "PA-CF", + "Generic PA612-CF" + ] + ], "OF8jh0Lk": [ [ "FilAr", @@ -13773,6 +9152,13 @@ "FilAr PLA-mate Marron" ] ], + "OF8kJys9": [ + [ + "Eryone", + "PETG", + "Eryone PETG" + ] + ], "OF8tPByX": [ [ "Generic", @@ -13780,6 +9166,27 @@ "Generic PPA-CF" ] ], + "OF8wE5l7": [ + [ + "Artillery", + "PETG Basic", + "Artillery PETG Basic" + ] + ], + "OF97ru74": [ + [ + "Generic", + "PC", + "Prusa Generic PC" + ] + ], + "OF995YXg": [ + [ + "Generic", + "TPU-64D", + "Flashforge TPU-64D" + ] + ], "OF99UMPq": [ [ "COEX 3D", @@ -13794,6 +9201,20 @@ "DREMC ABS+" ] ], + "OF9EHUKK": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "OF9HCdyQ": [ + [ + "Afinia", + "PLA", + "Afinia PLA" + ] + ], "OF9OlTWH": [ [ "Bambu Lab", @@ -13801,109 +9222,102 @@ "Bambu PLA Marble" ] ], - "OF9RZyBz": [ - [ - "Polymaker", - "PA", - "Polymaker Generic S1" - ] - ], - "OF9sr3Vn": [ - [ - "Generic", - "PLA", - "Flashforge PLA Sparkle" - ] - ], - "OF9tjFbj": [ - [ - "Peopoly", - "PLA", - "Peopoly Lancer PLA-C" - ] - ], - "OF9vnvM8": [ - [ - "Artillery", - "PETG-CF", - "Artillery PETG-CF" - ] - ], - "OFAEqlWa": [ - [ - "Generic", - "PLA", - "Flashforge Generic PLA-SILK" - ] - ], - "OFAGqTQG": [ - [ - "Volumic", - "PP", - "Volumic PP Ultra" - ] - ], - "OFAGrVjP": [ - [ - "Generic", - "PLA", - "Flashforge PLA Silk" - ] - ], - "OFAHagT9": [ - [ - "Elegoo", - "PLA", - "Elegoo Rapid PLA+" - ] - ], - "OFAK2XjZ": [ - [ - "Other", - "ABS", - "Other ABS" - ] - ], - "OFAUDGEQ": [ + "OF9PELEb": [ [ "QIDI", - "PLA", - "QIDI PLA Rapido Matte" + "UltraPA-CF25", + "QIDI UltraPA-CF25" ] ], - "OFAUX5fB": [ + "OF9UJOGF": [ + [ + "Anycubic", + "PETG-CF", + "Anycubic PETG-CF" + ] + ], + "OF9emAI9": [ + [ + "RatRig", + "PETG", + "RatRig PunkFil PETG" + ] + ], + "OF9fOPpd": [ + [ + "Generic", + "PC", + "Vzbot Generic PC" + ] + ], + "OF9z5LZ9": [ [ "Generic", "PETG", - "C1 Generic High Flow PETG" + "FLSun S1 PETG" ] ], - "OFAbsMuV": [ + "OFA026vt": [ [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPE" + "Orca Arena", + "PA-CF", + "Arena PA-CF" ] ], - "OFAdAYYk": [ + "OFAC7Wyu": [ + [ + "Artillery", + "PLA Matte", + "Artillery PLA Matte" + ] + ], + "OFACSw9O": [ + [ + "Generic", + "PLA", + "Creality Generic PLA" + ] + ], + "OFAIBCLJ": [ + [ + "Generic", + "ABS-CF", + "Generic ABS-CF" + ] + ], + "OFAIrQXu": [ + [ + "Creality", + "PLA", + "Creality Hyper PLA" + ] + ], + "OFANFm4x": [ [ "QIDI", - "PPS-CF", - "QIDI PPS-CF" + "PLA", + "QIDI PLA Rapido Metal" ] ], - "OFAdZFD1": [ + "OFAO9A7J": [ [ - "FusRock", - "PET-GF", - "FusRock Generic PET-GF" + "Generic", + "PLA", + "Sovol Zero PLA Silk HS Nozzle" ] ], - "OFAiqi5v": [ + "OFAZllAN": [ [ - "Elegoo", - "ASA", - "Elegoo ASA-CF" + "Artillery", + "PLA-CF", + "Artillery PLA-CF" + ] + ], + "OFAf9pJF": [ + [ + "Generic", + "TPU", + "Flashforge TPU 95A" ] ], "OFAnyRUI": [ @@ -13913,13 +9327,6 @@ "Bambu Support For PLA" ] ], - "OFAnyzjN": [ - [ - "HATCHBOX", - "PETG", - "HATCHBOX PETG" - ] - ], "OFAt6ec0": [ [ "FilAr", @@ -13927,11 +9334,25 @@ "FilAr PLA Marron Oxido" ] ], - "OFAtydxE": [ + "OFB09fpe": [ [ "Generic", - "S-Multi", - "FusRock S-Multi" + "TPU", + "RatRig Generic TPU" + ] + ], + "OFB0a3hT": [ + [ + "Generic", + "PLA-CF", + "Anker Generic PLA-CF" + ] + ], + "OFB1Tv1E": [ + [ + "Generic", + "PA", + "Anycubic Generic PA" ] ], "OFB5SmWk": [ @@ -13941,18 +9362,60 @@ "Valment PLA Galaxy" ] ], - "OFBGxHgT": [ + "OFB8wSps": [ [ - "FlyingBear", - "PLA", - "FlyingBear PLA" + "Generic", + "PET-CF", + "FusRock PET-CF" ] ], - "OFBRSZom": [ + "OFB9dx27": [ [ - "Volumic", - "PPS-CF", - "PPS Carbone (Performance)" + "Generic", + "ASA", + "Blocks Generic ASA" + ] + ], + "OFBBgw7B": [ + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Wood" + ] + ], + "OFBC32Wb": [ + [ + "Generic", + "PET", + "FusRock PET" + ] + ], + "OFBIadjM": [ + [ + "Generic", + "ASA", + "Chuanying Generic ASA" + ] + ], + "OFBJAdLw": [ + [ + "LH Stinger", + "PCTG", + "LHS PCTG" + ] + ], + "OFBK6zAi": [ + [ + "Generic", + "PETG-CF", + "Flashforge PETG-CF" + ] + ], + "OFBLktDy": [ + [ + "Creality", + "PETG", + "Soleyin Basic PETG" ] ], "OFBSW57R": [ @@ -13969,11 +9432,32 @@ "Elegoo PLA+" ] ], - "OFBvxnjM": [ + "OFBlFMVp": [ [ - "Elegoo", + "Snapmaker", "PETG", - "Elegoo PETG-GF" + "Snapmaker Dual PETG" + ] + ], + "OFBoSWxb": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Luminous" + ] + ], + "OFBpcB0a": [ + [ + "Generic", + "PLA", + "TwoTrees Generic HS PLA" + ] + ], + "OFBtlI8M": [ + [ + "FlyingBear", + "ABS", + "FlyingBear Generic ABS" ] ], "OFBw6eEG": [ @@ -13983,18 +9467,25 @@ "Overture Matte PLA" ] ], - "OFC2FSsV": [ + "OFC1PzXz": [ [ - "Overture", + "Creality", "PLA", - "Overture PLA" + "Hyper Luminous" ] ], - "OFC5CCeo": [ + "OFC20UMj": [ [ "Generic", - "PETG-CF", - "Flashforge Generic PETG-CF" + "TPU", + "Flashforge Generic TPU" + ] + ], + "OFC5f4Ay": [ + [ + "Generic", + "PC-CF", + "Generic PCCF" ] ], "OFC78WGQ": [ @@ -14011,6 +9502,13 @@ "Generic EVA" ] ], + "OFCEA7Nt": [ + [ + "Generic", + "ABS", + "Sovol SV06 Plus ACE ABS" + ] + ], "OFCIUsWh": [ [ "Polymaker", @@ -14018,18 +9516,32 @@ "Panchroma PLA Translucent" ] ], - "OFCJaXZS": [ + "OFCJpR7a": [ [ - "Generic", - "PPS", - "Flashforge PPS" + "Creality", + "PLA", + "HP Ultra PLA" ] ], - "OFCKK3u9": [ + "OFCVUEaV": [ [ - "FlyingBear", - "PA-CF", - "FlyingBear PA-CF" + "Generic", + "TPU", + "Tiertime Generic TPU" + ] + ], + "OFCZsqXg": [ + [ + "Creality", + "PLA", + "Hyper PLA" + ] + ], + "OFCaJHAA": [ + [ + "Generic", + "PAHT", + "FusRock Generic S-PAHT" ] ], "OFCccVrQ": [ @@ -14039,18 +9551,11 @@ "PolyTerra Dual PLA" ] ], - "OFCgpxn2": [ + "OFCcsYtf": [ [ "Generic", - "ABS", - "Prusa Generic ABS HF" - ] - ], - "OFChH9xu": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPE" + "ASA", + "FLSun Generic ASA" ] ], "OFCidU7j": [ @@ -14067,6 +9572,13 @@ "FilAr PLA-mate Verde" ] ], + "OFCnywiC": [ + [ + "Tiertime", + "PET-CF", + "Tiertime PET-CF" + ] + ], "OFCoRobU": [ [ "Elas", @@ -14074,6 +9586,55 @@ "Elas ASA" ] ], + "OFCp3Bgo": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA SE" + ] + ], + "OFCu3jES": [ + [ + "Generic", + "PETG", + "Yumi Generic PETG" + ] + ], + "OFCuaCer": [ + [ + "Volumic", + "PLA", + "Désactivé" + ] + ], + "OFD21ije": [ + [ + "Cubicon", + "PA", + "Cubicon PA-CF" + ] + ], + "OFD2JNS1": [ + [ + "Generic", + "PLA", + "Dremel Generic PLA" + ] + ], + "OFD6kN7F": [ + [ + "Generic", + "PLA", + "OrcaArena Generic PLA" + ] + ], + "OFD9taow": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA Hyper" + ] + ], "OFDETOM6": [ [ "eSUN", @@ -14088,11 +9649,32 @@ "Bambu PLA Dynamic" ] ], - "OFDMWB6t": [ + "OFDJU6R3": [ [ - "Elegoo", + "Afinia", + "TPU", + "Afinia TPU" + ] + ], + "OFDKIKyw": [ + [ + "Snapmaker", + "PVA", + "Snapmaker Dual PVA" + ] + ], + "OFDKgoqx": [ + [ + "Flashforge", "PLA", - "Elegoo PLA+" + "Flashforge PLA" + ] + ], + "OFDRpXLZ": [ + [ + "Other", + "PETG", + "Other PETG" ] ], "OFDSrzZ8": [ @@ -14109,11 +9691,18 @@ "Valment PLA" ] ], - "OFDkABjZ": [ + "OFDeTsJw": [ [ "Generic", - "TPU-90A", - "Generic TPU-90A" + "HIPS", + "Chuanying Generic HIPS" + ] + ], + "OFDgQaca": [ + [ + "FlyingBear", + "PETG", + "FlyingBear PETG" ] ], "OFDpW3J8": [ @@ -14123,11 +9712,11 @@ "FILL3D PLA Basic" ] ], - "OFDramZ2": [ + "OFDtop41": [ [ - "Co Print", - "PETG", - "CoPrint Generic PETG" + "Generic", + "PA", + "Generic Support for PA" ] ], "OFDvXujf": [ @@ -14158,11 +9747,11 @@ "COEX TPU 60A" ] ], - "OFE22Uba": [ + "OFEE1Dld": [ [ "Generic", - "TPU-90A", - "Flashforge TPU-90A" + "TPU", + "Artillery Generic TPU" ] ], "OFEGNJD4": [ @@ -14172,11 +9761,39 @@ "Bambu PLA Silk" ] ], - "OFEYKrjb": [ + "OFEMfQsX": [ [ - "Artillery", + "Generic", "PETG", - "Artillery PETG" + "Flashforge PETG Basic" + ] + ], + "OFENzGSm": [ + [ + "Generic", + "TPU", + "FLSun T1 TPU" + ] + ], + "OFEOnBj6": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Lite" + ] + ], + "OFETFWx7": [ + [ + "Generic", + "PLA", + "SecKit Generic PLA" + ] + ], + "OFEWYR89": [ + [ + "Generic", + "PLA", + "Generic PLA+" ] ], "OFEZ449N": [ @@ -14186,11 +9803,32 @@ "FilAr PLA-mate Uva" ] ], - "OFEdyZqS": [ + "OFEZNNw1": [ [ - "Anycubic", + "Generic", + "PA", + "RatRig Generic PA" + ] + ], + "OFEZpel7": [ + [ + "Volumic", + "PPS-CF", + "PPS Carbone (Performance)" + ] + ], + "OFEabreg": [ + [ + "Polymaker", + "PA6-CF", + "Fiberon PA6-CF20" + ] + ], + "OFEbIx49": [ + [ + "WonderMaker", "PLA", - "Anycubic PLA Luminous" + "WonderMaker PLA Marble" ] ], "OFEhuUNq": [ @@ -14200,6 +9838,20 @@ "DREMC PA12-CF" ] ], + "OFEj7sca": [ + [ + "Cubicon", + "PC", + "Cubicon PC" + ] + ], + "OFEjbwqG": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA+" + ] + ], "OFEkPBwx": [ [ "Bambu Lab", @@ -14207,6 +9859,20 @@ "Bambu PLA Glow" ] ], + "OFEmsric": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker PA-CF" + ] + ], + "OFEnbt6D": [ + [ + "Peopoly", + "PLA", + "Peopoly Lancer PLA-C" + ] + ], "OFEswT5W": [ [ "Bambu Lab", @@ -14214,6 +9880,27 @@ "Bambu PLA-CF" ] ], + "OFEwRwmL": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA" + ] + ], + "OFF3cuzT": [ + [ + "Generic", + "TPU", + "Generic TPU 64D" + ] + ], + "OFF73Bvp": [ + [ + "Generic", + "PLA-CF", + "SecKit Generic PLA-CF" + ] + ], "OFF9OKoY": [ [ "Polymaker", @@ -14221,11 +9908,18 @@ "PolyLite PLA Pro" ] ], - "OFFIL5pD": [ + "OFF9cgY5": [ [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" + "Snapmaker", + "PLA", + "Snapmaker PLA Matte" + ] + ], + "OFFC0VqZ": [ + [ + "Generic", + "PETG", + "RatRig BigNozzle PCTG" ] ], "OFFNYwWR": [ @@ -14235,11 +9929,39 @@ "Bambu PA-CF" ] ], - "OFFenwbU": [ + "OFFP4ORR": [ [ - "Generic", + "Creality", + "ABS", + "Creality Hyper ABS" + ] + ], + "OFFX1DRD": [ + [ + "FlyingBear", + "PC", + "FlyingBear PC" + ] + ], + "OFFZ0BBL": [ + [ + "FlyingBear", "PLA", - "FLSun S1 PLA Silk" + "FlyingBear Generic PLA" + ] + ], + "OFFZ458u": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA612-ESD" + ] + ], + "OFFbQscs": [ + [ + "eSUN", + "PETG", + "eSUN PETG-Basic" ] ], "OFFkCLBl": [ @@ -14249,20 +9971,6 @@ "Panchroma PLA Galaxy" ] ], - "OFFmJ8aR": [ - [ - "Other", - "PLA", - "Other PLA Hyper" - ] - ], - "OFFrbsvQ": [ - [ - "Other", - "TPU", - "Other TPU" - ] - ], "OFFvzqcd": [ [ "Bambu Lab", @@ -14270,18 +9978,81 @@ "Bambu PETG Basic" ] ], - "OFG8vHw8": [ + "OFFwJWea": [ [ - "Generic", - "ASA", - "Qidi Generic ASA" + "Anycubic", + "PLA", + "Anycubic PLA Silk" ] ], - "OFGFZhWu": [ + "OFFxZ7hZ": [ [ "Generic", + "PLA-CF", + "Chuanying Generic PLA-CF10" + ] + ], + "OFG0kOKX": [ + [ + "Volumic", "PETG", - "Sovol SV06 ACE PETG" + "Volumic PETG Ultra" + ] + ], + "OFG2RkhN": [ + [ + "Creality", + "TPU", + "CR-TPU" + ] + ], + "OFG4do34": [ + [ + "QIDI", + "ASA-AERO", + "Qidi ASA-Aero" + ] + ], + "OFGDaEHO": [ + [ + "Generic", + "BVOH", + "Tiertime Generic BVOH" + ] + ], + "OFGGyAgJ": [ + [ + "Generic", + "TPU", + "Vzbot Generic TPU" + ] + ], + "OFGJ1nxs": [ + [ + "Other", + "PLA", + "Other PLA" + ] + ], + "OFGKLoUm": [ + [ + "Generic", + "TPU", + "Anycubic Generic TPU" + ] + ], + "OFGLeiNL": [ + [ + "Generic", + "PLA", + "Yumi Generic PLA" + ] + ], + "OFGPJxnt": [ + [ + "Generic", + "PC", + "Anker Generic PC" ] ], "OFGVwfK0": [ @@ -14291,11 +10062,11 @@ "FilAr PLA-mate Gris" ] ], - "OFGb4hPY": [ + "OFGc282l": [ [ - "Anycubic", - "PEBA", - "Anycubic PEBA 95A" + "Generic", + "PLA", + "Flashforge PLA-SILK" ] ], "OFGcLA5R": [ @@ -14305,16 +10076,18 @@ "FilAr PLA-mate Beige" ] ], - "OFGfdP6J": [ + "OFGcMkEB": [ [ - "FusRock", - "S-Multi", - "FusRock Generic S-Multi" - ], + "Creality", + "TPU", + "HP-TPU" + ] + ], + "OFGdP6Na": [ [ - "Generic", - "PET-CF", - "FusRock Generic S-Multi" + "Volumic", + "PVA", + "Volumic PVA" ] ], "OFGkyftV": [ @@ -14324,6 +10097,34 @@ "Overture Silk PLA" ] ], + "OFGwT5Av": [ + [ + "Creality", + "PLA-CF", + "Creality Hyper PLA-CF" + ] + ], + "OFGwZmgS": [ + [ + "Creality", + "ABS", + "CR-ABS" + ] + ], + "OFGxC8gB": [ + [ + "Creality", + "PLA", + "CR-Wood" + ] + ], + "OFGzUNbm": [ + [ + "Generic", + "PPS-CF", + "Tiertime Generic PPS-CF" + ] + ], "OFH2nN08": [ [ "Eolas Prints", @@ -14331,6 +10132,27 @@ "Eolas Prints PLA INGEO 850" ] ], + "OFH5UH6P": [ + [ + "Generic", + "ABS-GF", + "Flashforge ABS-GF" + ] + ], + "OFH6Pjxe": [ + [ + "Generic", + "PLA", + "Flashforge PLA Matte" + ] + ], + "OFH7b12v": [ + [ + "Generic", + "PA-CF", + "Generic PAHT-CF" + ] + ], "OFHAccHz": [ [ "FilAr", @@ -14338,30 +10160,32 @@ "FilAr PLA Blanco Antartida" ] ], - "OFHBTqyD": [ + "OFHFZ1Te": [ [ "Generic", "PLA", - "Flashforge PLA Basic" + "Prusa Generic PLA Silk" ] ], - "OFHDaMut": [ - [ - "Volumic", - "PA6-CF", - "PA6 CF20 (Performance)" - ] - ], - "OFHL32M0": [ - [ - "Anycubic", - "TPU", - "Anycubic TPU" - ], + "OFHQUAoZ": [ [ "Generic", - "TPU", - "Anycubic TPU" + "PA-CF", + "FLSun Generic PA-CF" + ] + ], + "OFHTVfaU": [ + [ + "Generic", + "PETG", + "Sovol Zero PETG" + ] + ], + "OFHUnLY2": [ + [ + "Generic", + "PETG", + "Vzbot Generic PETG" ] ], "OFHWSM21": [ @@ -14371,6 +10195,13 @@ "Fiberon PET-CF" ] ], + "OFHa3RZT": [ + [ + "Generic", + "PA-CF", + "Tiertime Generic PA-CF" + ] + ], "OFHa48An": [ [ "Bambu Lab", @@ -14378,6 +10209,20 @@ "Bambu PET-CF" ] ], + "OFHaYaB1": [ + [ + "eSUN", + "PET", + "eSUN PET-Basic" + ] + ], + "OFHf2lKK": [ + [ + "FlyingBear", + "TPU", + "FlyingBear TPU Basic" + ] + ], "OFHfzQXo": [ [ "Eolas Prints", @@ -14385,6 +10230,13 @@ "Eolas Prints PLA Transition" ] ], + "OFHknN4v": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA Pro Metallic" + ] + ], "OFHmPYRy": [ [ "SUNLU", @@ -14392,11 +10244,18 @@ "SUNLU PLA+ 2.0" ] ], - "OFHtQDC9": [ + "OFI6WZpn": [ [ - "Elegoo", + "Orca Arena", "PLA", - "Elegoo PLA Basic" + "Arena Support W" + ] + ], + "OFI80Hct": [ + [ + "Generic", + "ASA", + "Anycubic Generic ASA" ] ], "OFIBXa0k": [ @@ -14406,6 +10265,62 @@ "FilAr PLA-mate Rojo" ] ], + "OFIE3vOf": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Matte" + ] + ], + "OFIK0xFa": [ + [ + "Generic", + "ASA", + "FLSun S1 ASA" + ] + ], + "OFIPjqHt": [ + [ + "Orca Arena", + "PA", + "Arena Support G" + ] + ], + "OFIRUqWi": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Silk" + ] + ], + "OFIVWJPm": [ + [ + "InfiMech", + "TPU", + "InfiMech TPU" + ] + ], + "OFIWMSGX": [ + [ + "HATCHBOX", + "PETG", + "HATCHBOX PETG" + ] + ], + "OFIYTy8S": [ + [ + "Generic", + "PLA", + "Anker Generic PLA+" + ] + ], + "OFIZMQwM": [ + [ + "LH Stinger", + "TPU", + "LHS TPU" + ] + ], "OFIamQnD": [ [ "FilAr", @@ -14413,6 +10328,20 @@ "FilAr PLA Gris Ceniza" ] ], + "OFIda816": [ + [ + "Generic", + "PVA", + "Vzbot Generic PVA" + ] + ], + "OFIeCuXj": [ + [ + "Generic", + "PETG", + "Peopoly Generic PETG" + ] + ], "OFIegjmD": [ [ "Eolas Prints", @@ -14427,18 +10356,53 @@ "Bambu Support For PLA/PETG" ] ], - "OFIl3ar9": [ + "OFIgbDHq": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Luminous" + ] + ], + "OFIieIka": [ + [ + "Generic", + "PA", + "Polymaker CoPA" + ] + ], + "OFIxOuOu": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Starlight" + ] + ], + "OFIxitiU": [ + [ + "Generic", + "PLA", + "Flashforge PLA Basic" + ] + ], + "OFIy3kLw": [ + [ + "Generic", + "PA", + "Prusa Generic PA" + ] + ], + "OFJ3HRsR": [ + [ + "Orca Arena", + "ABS", + "Arena ABS" + ] + ], + "OFJ80y1e": [ [ "Generic", "PETG", - "Sovol SV08 PETG" - ] - ], - "OFIzguhB": [ - [ - "Volumic", - "UNIV", - "Volumic UNIVERSAL Ultra" + "FLSun T1 PETG" ] ], "OFJHBEGD": [ @@ -14448,6 +10412,13 @@ "DREMC PLA+ HS" ] ], + "OFJJpaLS": [ + [ + "Generic", + "PETG", + "FLSun Generic PETG" + ] + ], "OFJNeELv": [ [ "FILL3D", @@ -14469,6 +10440,62 @@ "FilAr PETG Cristal" ] ], + "OFJSksUs": [ + [ + "Generic", + "PLA", + "FLSun Generic PLA" + ] + ], + "OFJVFpJz": [ + [ + "Generic", + "PLA", + "Sovol Zero PLA Silk" + ] + ], + "OFJWKoYG": [ + [ + "iQ Materials", + "ABS Material4Print Natur", + "Material4Print ABS Natur P1" + ] + ], + "OFJYpVAQ": [ + [ + "Generic", + "TPU-90A", + "Generic TPU-90A" + ] + ], + "OFJfv07m": [ + [ + "Generic", + "TPU", + "Sovol SV06 ACE TPU" + ] + ], + "OFJgijky": [ + [ + "Polymaker", + "PLA", + "PolyLite CosPLA" + ] + ], + "OFJhT2fd": [ + [ + "Snapmaker", + "ABS", + "Snapmaker Dual ABS" + ] + ], + "OFJrvXth": [ + [ + "Snapmaker", + "ABS", + "Snapmaker ABS Benchy" + ] + ], "OFJs1ToM": [ [ "COEX 3D", @@ -14483,32 +10510,46 @@ "NIT PETG" ] ], - "OFK39W9u": [ + "OFJxSqO4": [ [ - "Generic", - "PETG-CF", - "Flashforge Generic PETG-CF10" + "Yumi", + "PLA", + "YUMI PLA Direct Drive" ] ], - "OFK820gS": [ + "OFK01afJ": [ + [ + "Generic", + "PC", + "Qidi Generic PC" + ] + ], + "OFK4LdYI": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA HF" + ] + ], + "OFK74HJD": [ + [ + "Generic", + "PLA", + "Flashforge PLA Pro" + ] + ], + "OFK8XHPn": [ + [ + "Overture", + "ABS", + "Overture ABS" + ] + ], + "OFKIQO2W": [ [ "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "OFKDnrjL": [ - [ - "Artillery", - "PLA Matte", - "Artillery PLA Matte" - ] - ], - "OFKH15Hd": [ - [ - "Generic", - "ABS", - "Sovol SV08 ABS" + "PLA", + "QIDI PLA Rapido" ] ], "OFKKajh6": [ @@ -14518,6 +10559,13 @@ "FilAr PLA Gris Plata" ] ], + "OFKNAhls": [ + [ + "Generic", + "PETG", + "Qidi Generic PETG" + ] + ], "OFKTSiYF": [ [ "FilAr", @@ -14525,11 +10573,11 @@ "FilAr PLA Blanco Calido" ] ], - "OFKWVi10": [ + "OFKUEXPA": [ [ - "Generic", - "PLA-CF", - "Flashforge Generic PLA-CF10" + "Snapmaker", + "ASA", + "Snapmaker Dual ASA" ] ], "OFKWWgyp": [ @@ -14546,16 +10594,25 @@ "FilAr PLA Naranja Tigre" ] ], - "OFKZH00L": [ + "OFKbdiiJ": [ [ - "FusRock", - "PET-CF", - "FusRock Generic PET-CF" - ], + "Polymaker", + "PLA", + "PolySonic PLA Pro" + ] + ], + "OFKfJTwL": [ [ - "Generic", + "QIDI", "PET-CF", - "FusRock Generic PET-CF" + "QIDI PET-CF" + ] + ], + "OFKgmsqE": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" ] ], "OFKhMPeX": [ @@ -14565,13 +10622,6 @@ "Bambu PC" ] ], - "OFKhtNBx": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPU High-Flow" - ] - ], "OFKiSMWR": [ [ "Polymaker", @@ -14579,46 +10629,60 @@ "Panchroma PLA Marble" ] ], - "OFKjlAbC": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "OFKzh9lx": [ - [ - "InfiMech", - "PLA", - "InfiMech PLA" - ] - ], - "OFL4BLAC": [ - [ - "iQ Materials", - "HPP4GF25", - "Grauts HPP4GF25 P1" - ] - ], - "OFL4KniM": [ - [ - "Elegoo", - "TPU", - "Elegoo Rapid TPU 95A" - ] - ], - "OFL7U2MV": [ - [ - "RatRig", - "ABS", - "RatRig PunkFil ABS" - ] - ], - "OFL7vEML": [ + "OFKo87c6": [ [ "Generic", - "PC", - "FlashForge PC" + "TPU", + "Snapmaker TPU 95A" + ] + ], + "OFKpQTJI": [ + [ + "Generic", + "TPU", + "Flashforge TPU 65D" + ] + ], + "OFKuTr12": [ + [ + "Generic", + "PE", + "Tiertime Generic PE" + ] + ], + "OFKyCgaK": [ + [ + "Generic", + "PLA", + "Anycubic Generic PLA" + ] + ], + "OFLAXKqP": [ + [ + "WonderMaker", + "TPU", + "WonderMaker TPU 95A" + ] + ], + "OFLBUkwC": [ + [ + "Generic", + "ABS", + "Vzbot Generic ABS" + ] + ], + "OFLC1oRH": [ + [ + "Flashforge", + "PPA-CF", + "Flashforge PPA-CF" + ] + ], + "OFLDSqqi": [ + [ + "Generic", + "ABS", + "Flashforge Generic ABS" ] ], "OFLJ8S6I": [ @@ -14635,6 +10699,13 @@ "DREMC ASA" ] ], + "OFLOf6Sc": [ + [ + "Tiertime", + "TPU", + "Tiertime TPU 95A" + ] + ], "OFLPAxz3": [ [ "Generic", @@ -14649,6 +10720,20 @@ "Elegoo Rapid PETG" ] ], + "OFLYDIb8": [ + [ + "Generic", + "PLA", + "Flashforge PLA Silk" + ] + ], + "OFLYDngx": [ + [ + "Bambu Lab", + "PETG", + "Bambu PETG" + ] + ], "OFLakOUI": [ [ "Generic", @@ -14656,6 +10741,20 @@ "Generic PC" ] ], + "OFLbXwoL": [ + [ + "Artillery", + "PLA Silk", + "Artillery PLA Silk" + ] + ], + "OFLbdkrE": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Eco" + ] + ], "OFLcd093": [ [ "Elegoo", @@ -14663,51 +10762,60 @@ "Elegoo PETG" ] ], - "OFLeFaUO": [ + "OFLfywkp": [ [ - "Generic", - "PVA", - "Flashforge Generic PVA" + "Afinia", + "ABS", + "Afinia ABS+" ] ], - "OFLhOFQk": [ + "OFLgwqp2": [ [ - "Volumic", - "ASA", - "Volumic ASA Ultra (Performance)" + "Creality", + "PETG-GF", + "Hyper PETG-GF" ] ], - "OFLiTjQK": [ - [ - "Other", - "PA-CF", - "Other PA-CF" - ] - ], - "OFLriDvE": [ + "OFLrdHse": [ [ "Generic", "PLA", - "Creality Generic PLA High Speed" + "Flashforge Generic HS PLA" ] ], - "OFLxO2Oc": [ + "OFLuczRG": [ [ "Generic", - "PET", - "FusRock PET" + "ASA", + "Creality Generic ASA-CF" ] ], - "OFM3PeVe": [ + "OFLzx3J4": [ [ - "FusRock", - "ASA-CF", - "Flashforge ASA-CF" - ], + "Creality", + "PLA", + "Hyper Marble" + ] + ], + "OFM0xjBG": [ + [ + "Creality", + "PLA", + "CR-PLA Matte" + ] + ], + "OFM4iJlv": [ [ "Generic", - "ASA-CF", - "Flashforge ASA-CF" + "PA-CF", + "Generic PA12-CF" + ] + ], + "OFM87w9T": [ + [ + "Generic", + "SBS", + "Tiertime Generic SBS" ] ], "OFM91vZs": [ @@ -14717,11 +10825,60 @@ "Overture ASA" ] ], - "OFMHTnPP": [ + "OFMDHOcT": [ [ - "FusRock", - "PA-CF", - "Flashforge PA12-CF" + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "OFMEbuBE": [ + [ + "Generic", + "TPU", + "Blocks Generic TPU" + ] + ], + "OFMIma8C": [ + [ + "Generic", + "PLA", + "Flashforge PLA Luminous" + ] + ], + "OFMIurFh": [ + [ + "Generic", + "PLA", + "Creality HF Generic Speed PLA" + ] + ], + "OFMK5gVo": [ + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Basic" + ] + ], + "OFML2aVd": [ + [ + "Anycubic", + "TPU", + "Anycubic TPU 95A" + ] + ], + "OFMSvS8z": [ + [ + "Artillery", + "PA", + "Artillery PA" + ] + ], + "OFMTBcnz": [ + [ + "Generic", + "PP-CF", + "Tiertime Generic PP-CF" ] ], "OFMTK0UC": [ @@ -14738,6 +10895,13 @@ "SUNLU PLA+" ] ], + "OFMZAoqa": [ + [ + "Generic", + "PVA", + "Tiertime Generic PVA" + ] + ], "OFMZvH0z": [ [ "Overture", @@ -14745,6 +10909,13 @@ "Overture Rock PLA" ] ], + "OFMgJQCZ": [ + [ + "Generic", + "PA", + "Anker Generic PA" + ] + ], "OFMjtqTC": [ [ "Bambu Lab", @@ -14752,6 +10923,34 @@ "Bambu PLA Wood" ] ], + "OFMoLF46": [ + [ + "Generic", + "TPU", + "FLSun Generic TPU" + ] + ], + "OFMpxamb": [ + [ + "Flashforge", + "PETG", + "Flashforge PETG" + ] + ], + "OFMqYusc": [ + [ + "Generic", + "PA", + "Creality Generic PA" + ] + ], + "OFMsDGbs": [ + [ + "Anycubic", + "TPU", + "Anycubic TPU" + ] + ], "OFMuXBmO": [ [ "Elas", @@ -14759,32 +10958,67 @@ "Elas PLA Basic" ] ], - "OFN0X7oN": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "OFN0pBpo": [ + "OFMyLYV8": [ [ "Generic", - "TPU", - "Qidi Generic TPU 95A" + "PETG", + "Flashforge PETG Transparent" ] ], - "OFNQHqAV": [ + "OFN7aNHe": [ + [ + "Generic", + "PC", + "Tiertime Generic PC" + ] + ], + "OFN9fefN": [ [ "Cubicon", "ABS", - "Cubicon ABSk" + "Cubicon ABS-A100" ] ], - "OFNRgSch": [ + "OFNBlAPT": [ [ - "Artillery", - "PC", - "Artillery PC" + "Orca Arena", + "PETG", + "Arena PETG Basic" + ] + ], + "OFNGTH3w": [ + [ + "Tiertime", + "PLA", + "Tiertime PLA" + ] + ], + "OFNLXV8X": [ + [ + "Generic", + "ABS", + "Tiertime Generic ABS" + ] + ], + "OFNOxcYl": [ + [ + "Generic", + "PA-CF", + "RatRig Generic PA-CF" + ] + ], + "OFNQKF0M": [ + [ + "Tiertime", + "ABS", + "Tiertime ABS" + ] + ], + "OFNSYu5h": [ + [ + "Volumic", + "PP", + "Volumic PP Ultra (Performance)" ] ], "OFNU9YIW": [ @@ -14794,18 +11028,60 @@ "FilAr PETG Azul Boreal" ] ], - "OFNX5uRT": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "OFNbajj9": [ + "OFNW4ZTC": [ [ "Generic", - "ASA", - "Creality Generic ASA-CF" + "PLA", + "Creality Generic PLA Wood" + ] + ], + "OFNWcJsM": [ + [ + "Generic", + "PLA", + "Comgrow T300 PLA" + ] + ], + "OFNWnx2c": [ + [ + "Generic", + "TPU-95A", + "Flashforge TPU-95A" + ] + ], + "OFNX8GI1": [ + [ + "Generic", + "ABS", + "Sovol Zero ABS" + ] + ], + "OFNYewRS": [ + [ + "Generic", + "PLA", + "Blocks Generic PLA" + ] + ], + "OFNZYgLA": [ + [ + "Generic", + "PVA", + "Qidi Generic PVA" + ] + ], + "OFNZjrLo": [ + [ + "Generic", + "PLA", + "Sovol SV06 Plus ACE PLA" + ] + ], + "OFNcdCrm": [ + [ + "Generic", + "PLA-CF", + "Anycubic Generic PLA-CF" ] ], "OFNemJM6": [ @@ -14829,18 +11105,25 @@ "Bambu PA6-GF" ] ], - "OFNvrbnf": [ + "OFNn21yM": [ [ - "Co Print", - "ABS", - "CoPrint Generic ABS" + "Generic", + "PA-CF", + "Vzbot Generic PA-CF" ] ], - "OFNz8rrn": [ + "OFNstOna": [ [ - "FlyingBear", - "PLA", - "FlyingBear PLA Hyper" + "Eryone", + "PETG-CF", + "Eryone PETG-CF" + ] + ], + "OFNvBIL0": [ + [ + "Creality", + "PA-CF", + "Hyper PPA-CF" ] ], "OFO1GEq6": [ @@ -14850,18 +11133,11 @@ "Panchroma PLA Neon" ] ], - "OFO3IOWM": [ - [ - "Volumic", - "PETG-ESD", - "PETG ESD (Performance)" - ] - ], - "OFO5R9KJ": [ + "OFO5djrM": [ [ "Generic", - "TPU", - "Sovol Zero TPU" + "PETG-CF", + "Generic PETG-CF10" ] ], "OFOABq7t": [ @@ -14871,25 +11147,46 @@ "AliZ PETG-Metal" ] ], - "OFOJUJAS": [ + "OFOAdMCB": [ [ - "Cubicon", - "PA", - "Cubicon PA-CF" + "Orca Arena", + "PLA", + "Arena PLA Metal" ] ], - "OFOSzSuh": [ + "OFOHOf2F": [ + [ + "eSUN", + "PLA", + "eSUN PLA-HS" + ] + ], + "OFOJPAAS": [ + [ + "iQ Materials", + "VXL90 Xioneer", + "VXL90 TiQ2 P2" + ] + ], + "OFOKYhi6": [ [ "Generic", - "PA-CF", - "Flashforge PA-CF" + "PETG", + "Prusa Generic PETG HF" ] ], - "OFOW9K96": [ + "OFObG16Q": [ [ - "QIDI", - "TPU", - "Qidi TPU 95A-HF" + "InfiMech", + "PLA", + "InfiMech PLA Basic" + ] + ], + "OFObyktP": [ + [ + "Tiertime", + "PETG", + "Tiertime PETG" ] ], "OFOiJfLM": [ @@ -14899,18 +11196,11 @@ "FILL3D PETG CF" ] ], - "OFOkTA0C": [ + "OFOnSNt3": [ [ - "Elegoo", - "PETG", - "Elegoo PETG Translucent" - ] - ], - "OFOp3Oef": [ - [ - "Generic", - "ABS", - "Generic ABS" + "Artillery", + "PETG-CF", + "Artillery PETG-CF" ] ], "OFOsHDnB": [ @@ -14920,6 +11210,13 @@ "Elegoo PETG PRO" ] ], + "OFOuEEvv": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido 0.2 nozzle" + ] + ], "OFOvv91M": [ [ "Polymaker", @@ -14927,11 +11224,18 @@ "PolyLite ABS" ] ], - "OFOysPuE": [ + "OFOwQuZM": [ [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" + "Snapmaker", + "PETG-CF", + "Snapmaker PETG-CF" + ] + ], + "OFOzwywz": [ + [ + "Eryone", + "ABS", + "Eryone ABS" ] ], "OFP26zNb": [ @@ -14941,37 +11245,18 @@ "FilAr PLA Violeta Jacaranda" ] ], - "OFP4poIv": [ + "OFPHLnoe": [ [ - "Generic", - "PLA", - "Sovol Zero PLA Silk HS Nozzle" + "Creality", + "ASA", + "HP-ASA" ] ], - "OFPGelMX": [ - [ - "Volumic", - "PP", - "Volumic PP Ultra (Performance)" - ] - ], - "OFPJJxkF": [ - [ - "FusRock", - "PET-CF", - "Flashforge PET-CF" - ], + "OFPQfNAf": [ [ "Generic", - "PET-CF", - "Flashforge PET-CF" - ] - ], - "OFPJrlC3": [ - [ - "Generic", - "PLA-CF", - "Flashforge PLA-CF" + "PETG", + "Flashforge PETG Pro" ] ], "OFPWPlSC": [ @@ -14981,6 +11266,13 @@ "FILL3D PP" ] ], + "OFPYDWgC": [ + [ + "Peopoly", + "PET-CF", + "Peopoly Lancer PET-CF" + ] + ], "OFPbyOSk": [ [ "FilAr", @@ -14995,11 +11287,18 @@ "Eolas Prints PLA INGEO 870" ] ], - "OFPeGtB1": [ + "OFPdhDlK": [ [ - "Volumic", - "UNIV", - "Volumic UNIVERSAL Ultra (Performance)" + "Generic", + "PA-CF", + "Anycubic Generic PA-CF" + ] + ], + "OFPjOUtz": [ + [ + "Generic", + "PAHT-CF", + "FusRock Generic PAHT-CF" ] ], "OFPkCJKE": [ @@ -15016,13 +11315,6 @@ "Generic PE" ] ], - "OFPokkKe": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], "OFPoyiFs": [ [ "Polymaker", @@ -15037,11 +11329,32 @@ "FilAr PLA Rosa Amaranto" ] ], - "OFPwi9X0": [ + "OFPryWt5": [ [ - "HATCHBOX", - "ABS", - "HATCHBOX ABS" + "Generic", + "PLA", + "Lulzbot 2.85mm PLA" + ] + ], + "OFPy0Ogq": [ + [ + "Generic", + "PA-CF", + "Qidi Generic PA-CF" + ] + ], + "OFQ1KzO8": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Silk" + ] + ], + "OFQ1zgm3": [ + [ + "Eryone", + "ABS-CF", + "Eryone ABS-CF" ] ], "OFQ3e56w": [ @@ -15051,30 +11364,46 @@ "Bambu PLA Galaxy" ] ], - "OFQ5xAKf": [ + "OFQ40XeN": [ [ - "Generic", - "PVA", - "Chuanying Generic PVA" + "QIDI", + "PETG", + "QIDI PETG Tough" ] ], - "OFQ9dI8j": [ + "OFQ7I5vC": [ [ "Generic", - "PC", - "Prusa Generic PC HF" + "PLA-CF", + "Prusa Generic PLA-CF" ] ], - "OFQCAYAt": [ - [ - "FusRock", - "PPA-CF", - "Flashforge PPA-CF" - ], + "OFQ9qnkd": [ [ "Generic", - "PPA-CF", - "Flashforge PPA-CF" + "PLA", + "FLSun T1 PLA High Speed" + ] + ], + "OFQC8Vna": [ + [ + "Generic", + "PETG-CF", + "Flashforge Generic PETG-CF" + ] + ], + "OFQEGL7z": [ + [ + "FlyingBear", + "PA-CF", + "FlyingBear PA-CF" + ] + ], + "OFQGvU2G": [ + [ + "Orca Arena", + "TPU", + "Arena TPU 95A" ] ], "OFQHiNJs": [ @@ -15091,6 +11420,27 @@ "Generic PA-CF" ] ], + "OFQMTRc8": [ + [ + "Snapmaker", + "PETG", + "Snapmaker J1 PETG" + ] + ], + "OFQMsFfF": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF10" + ] + ], + "OFQTrLXB": [ + [ + "Generic", + "PLA-CF", + "Qidi Generic PLA-CF" + ] + ], "OFQWIKbV": [ [ "FilAr", @@ -15098,11 +11448,18 @@ "FilAr PLA Titanio" ] ], - "OFQZINrX": [ + "OFQYaiGg": [ [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF10" + "Snapmaker", + "PET", + "Snapmaker PET" + ] + ], + "OFQZeyZv": [ + [ + "Generic", + "PLA", + "Flashforge PLA Buint Ti" ] ], "OFQbjX3s": [ @@ -15112,32 +11469,88 @@ "FILL3D PETG" ] ], - "OFR8dTVW": [ + "OFQbqeN7": [ + [ + "Generic", + "PA", + "Qidi Generic PA" + ] + ], + "OFQdaVZS": [ + [ + "Generic", + "PET-CF", + "Generic PET-CF" + ] + ], + "OFQe7sAx": [ + [ + "Anycubic", + "PA6-CF", + "Anycubic PA6-CF" + ] + ], + "OFQiq4fb": [ + [ + "Generic", + "PVA", + "Flashforge PVA" + ] + ], + "OFQswlnF": [ + [ + "Generic", + "PA", + "Tiertime Generic PA" + ] + ], + "OFR0gODA": [ + [ + "SeeMeCNC", + "ABS", + "SeeMeCNC ABS" + ] + ], + "OFRDLNM9": [ [ "Generic", "PLA", - "FLSun S1 PLA High Speed" + "Peopoly Generic PLA" ] ], - "OFRNU58t": [ + "OFRJ325z": [ [ - "Generic", - "TPU", - "Flashforge TPU 95A" + "LH Stinger", + "PETG", + "LHS PETG" ] ], - "OFRR8LUh": [ + "OFRPEs5o": [ [ "Generic", "ASA", - "Generic ASA" + "Flashforge Generic ASA" ] ], - "OFRgDMDJ": [ + "OFRhBryT": [ + [ + "Cubicon", + "PLA", + "Cubicon PLAi21" + ] + ], + "OFRhCTUg": [ + [ + "Anycubic", + "PET-CF", + "Anycubic PET-CF" + ] + ], + "OFRi7v0b": [ [ "Generic", "PETG", - "Flashforge PETG Transparent" + "Sovol SV08 PETG" ] ], "OFRiFnfQ": [ @@ -15154,6 +11567,62 @@ "Panchroma PLA Celestial" ] ], + "OFRiyes1": [ + [ + "Generic", + "ASA", + "Anker Generic ASA" + ] + ], + "OFRkjhxK": [ + [ + "Volumic", + "PVA", + "Volumic PVA-BVOH (Performance)" + ] + ], + "OFRmGKVX": [ + [ + "Cubicon", + "PLA", + "Cubicon PLA+" + ] + ], + "OFRooa0F": [ + [ + "Snapmaker", + "PA-CF", + "Snapmaker Dual PA-CF" + ] + ], + "OFRpAZ1P": [ + [ + "DeltaMaker", + "PLA", + "DeltaMaker Brand PLA" + ] + ], + "OFRujL0v": [ + [ + "Generic", + "PET-CF", + "FusRock Generic PET-CF" + ] + ], + "OFRusgEn": [ + [ + "Generic", + "PVA", + "Chuanying Generic PVA" + ] + ], + "OFRyOsZj": [ + [ + "re3D", + "PLA", + "re3D PLA" + ] + ], "OFRzR5mi": [ [ "eSUN", @@ -15161,11 +11630,11 @@ "eSUN ePLA-LW" ] ], - "OFS1ekCg": [ + "OFRzsaDK": [ [ - "Generic", - "PETG", - "RatRig BigNozzle PCTG" + "FlyingBear", + "TPU", + "FlyingBear Generic TPU" ] ], "OFS2tn6G": [ @@ -15175,11 +11644,18 @@ "Fiberon PA612-CF" ] ], - "OFS3HrR1": [ + "OFS4jbj3": [ [ - "Other", + "Eryone", + "PA", + "Eryone PA" + ] + ], + "OFS8JF3S": [ + [ + "Generic", "PLA", - "Other PLA" + "Qidi Generic PLA High Speed" ] ], "OFS8lTQt": [ @@ -15189,46 +11665,60 @@ "Panchroma PLA Silk" ] ], - "OFSCm6pJ": [ - [ - "Elegoo", - "PETG", - "Elegoo PET-CF" - ] - ], - "OFSSuKRr": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "OFSdF3B1": [ + "OFSDFYs4": [ [ "Generic", - "PAHT-CF", - "FusRock PAHT-CF" + "PLA-CF", + "Creality Generic PLA-CF" ] ], - "OFSkBwxf": [ + "OFSGbf2I": [ [ "Generic", - "ASA", - "RatRig BigNozzle ASA" + "PVA", + "Anycubic Generic PVA" ] ], - "OFSoZBK2": [ + "OFSPdsuW": [ + [ + "Generic", + "PPA-CF", + "Tiertime Generic PPA-CF" + ] + ], + "OFSStjay": [ [ "Generic", "PLA", - "Sovol SV06 Plus ACE PLA" + "FLSun S1 PLA Silk" ] ], - "OFSpTWdv": [ + "OFSTCno1": [ [ - "Other", - "PA-CF", - "Other PA-CF" + "GreenGate3D", + "PETG", + "re3D Greengate rPETG" + ] + ], + "OFSa39yP": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA" + ] + ], + "OFSbGfsz": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Basic" + ] + ], + "OFShw1X8": [ + [ + "Generic", + "ABS", + "Flashforge ABS Basic" ] ], "OFSwbBWS": [ @@ -15238,6 +11728,13 @@ "DREMC PLA+" ] ], + "OFT2jon4": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], "OFTGHyNC": [ [ "Bambu Lab", @@ -15245,6 +11742,13 @@ "Bambu PLA Impact" ] ], + "OFTKFAZ4": [ + [ + "Generic", + "PCTG", + "Tiertime Generic PCTG" + ] + ], "OFTOPcx0": [ [ "Eolas Prints", @@ -15259,25 +11763,18 @@ "Bambu PETG-CF" ] ], - "OFTa6gPH": [ + "OFTSXxzE": [ [ - "Generic", - "PLA", - "Flashforge PLA Pro" + "Flashforge", + "PPS-CF", + "Flashforge PPS-CF" ] ], - "OFTbdJyT": [ + "OFTXduCM": [ [ - "Other", - "PC", - "Other PC" - ] - ], - "OFTbsWVg": [ - [ - "Artillery", - "TPU", - "Artillery TPU" + "eSUN", + "ABS", + "eSUN ABS+" ] ], "OFTcE0nA": [ @@ -15287,6 +11784,20 @@ "eSUN PLA-Basic" ] ], + "OFTdauIq": [ + [ + "Volumic", + "PETG", + "Volumic PCTG Ultra (Performance)" + ] + ], + "OFTkj6DR": [ + [ + "Anycubic", + "PVA", + "Anycubic PVA" + ] + ], "OFTlRzpe": [ [ "FilAr", @@ -15294,25 +11805,39 @@ "FilAr PLA Gris Pizarra" ] ], - "OFToBodi": [ + "OFTnWzBs": [ + [ + "Creality", + "PLA-CF", + "Hyper PLA-CF" + ] + ], + "OFTs8peJ": [ + [ + "Snapmaker", + "TPU", + "Snapmaker Dual TPE" + ] + ], + "OFTsHNQi": [ [ "QIDI", - "ABS", - "QIDI ABS Rapido Metal" + "ASA", + "QIDI ASA" ] ], - "OFTsGps3": [ - [ - "InfiMech", - "PC", - "InfiMech PC" - ] - ], - "OFTszIHE": [ + "OFTvvox9": [ [ "Generic", "PLA", - "Creality Generic PLA Silk" + "Sovol SV06 ACE PLA" + ] + ], + "OFU0n0zW": [ + [ + "Generic", + "PLA", + "FLSun T1 PLA Generic" ] ], "OFU1zPxE": [ @@ -15322,18 +11847,102 @@ "Elegoo PLA Galaxy" ] ], - "OFUJw3Lx": [ + "OFU3QXL7": [ [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" + "re3D", + "PC", + "re3D PC" ] ], - "OFUYjPc4": [ + "OFU3zwPc": [ [ "Generic", + "TPU", + "Prusa Generic TPU HF" + ] + ], + "OFU5N9jI": [ + [ + "Generic", + "TPU", + "OrcaArena Generic TPU" + ] + ], + "OFU6fjbi": [ + [ + "Co Print", + "ABS", + "CoPrint Generic ABS" + ] + ], + "OFU7CKZt": [ + [ + "Volumic", + "ASA", + "Volumic ASA Ultra (Performance)" + ] + ], + "OFUCpLaL": [ + [ + "Generic", + "PPS", + "FlashForge PPS" + ] + ], + "OFUF7oA4": [ + [ + "Creality", + "PC", + "Hyper PC" + ] + ], + "OFUH1aee": [ + [ + "Volumic", + "TPU", + "Volumic FLEX93 Ultra (Performance)" + ] + ], + "OFUIfGoh": [ + [ + "Snapmaker", + "PET", + "Snapmaker Dual PET" + ] + ], + "OFUScM0D": [ + [ + "Generic", + "S-Multi", + "FusRock S-Multi" + ] + ], + "OFUWRqwb": [ + [ + "Generic", + "PA-CF", + "Creality Generic PA-CF" + ] + ], + "OFUYCqtB": [ + [ + "InfiMech", "PLA", - "Dremel Generic PLA" + "InfiMech PLA" + ] + ], + "OFUaHEO9": [ + [ + "Anycubic", + "PEBA", + "Anycubic PEBA 95A" + ] + ], + "OFUaVAdj": [ + [ + "Generic", + "ASA", + "Tiertime Generic ASA" ] ], "OFUanySo": [ @@ -15343,18 +11952,25 @@ "Bambu PLA Silk+" ] ], - "OFUkpobY": [ + "OFUmS5z5": [ [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" + "eSUN", + "ASA", + "eSUN ASA+" ] ], - "OFUqBrgf": [ + "OFUrStd6": [ [ "Generic", - "TPU", - "Chuanying Generic TPU" + "PETG", + "RatRig Generic PCTG" + ] + ], + "OFUtGagr": [ + [ + "Generic", + "PLA-CF", + "Artillery Generic PLA-CF" ] ], "OFUyDDNv": [ @@ -15364,18 +11980,18 @@ "Elegoo PC" ] ], - "OFV1szQh": [ + "OFV0KrAG": [ [ - "Peopoly", - "PETG", - "Peopoly Lancer PETG-C" + "Generic", + "ABS", + "FLSun T1 ABS" ] ], - "OFV4hD1o": [ + "OFV5Q7j2": [ [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" + "Snapmaker", + "TPU", + "Snapmaker J1 TPE" ] ], "OFV5tNw6": [ @@ -15385,11 +12001,11 @@ "Elegoo PET-CF" ] ], - "OFVBNoov": [ + "OFV5wEMe": [ [ - "InfiMech", + "Afinia", "ABS", - "InfiMech ABS" + "Afinia ABS" ] ], "OFVBlUFH": [ @@ -15406,18 +12022,18 @@ "Bambu TPU 95A" ] ], - "OFVJXE4n": [ - [ - "Other", - "ABS", - "Other ABS" - ] - ], - "OFVhG0yM": [ + "OFVHMFJX": [ [ "QIDI", - "ABS", - "QIDI ABS Odorless" + "PETG", + "QIDI PETG Tough 0.2 nozzle" + ] + ], + "OFVKADz5": [ + [ + "Generic", + "PLA", + "Comgrow Generic PLA" ] ], "OFVptRxp": [ @@ -15427,6 +12043,20 @@ "COEX TPE 30D" ] ], + "OFVqZ2H0": [ + [ + "Generic", + "PC", + "FLSun Generic PC" + ] + ], + "OFVtIasg": [ + [ + "Eryone", + "ASA", + "Eryone ASA" + ] + ], "OFW29a9R": [ [ "Polymaker", @@ -15434,11 +12064,39 @@ "PolyTerra PLA" ] ], - "OFW8UdlP": [ + "OFW5FqkL": [ [ "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "OFW9uIkE": [ + [ + "Generic", + "HIPS", + "Tiertime Generic HIPS" + ] + ], + "OFWIr7ZE": [ + [ + "CoLiDo", "ABS", - "QIDI ABS Rapido" + "CoLiDo Generic ABS" + ] + ], + "OFWRITFw": [ + [ + "Prusa Polymers", + "PLA", + "Prusament rPLA" + ] + ], + "OFWTAEjH": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPE" ] ], "OFWTRJ1K": [ @@ -15448,6 +12106,13 @@ "FilAr PLA Bronce" ] ], + "OFWY6vBh": [ + [ + "Generic", + "PC", + "Anycubic Generic PC" + ] + ], "OFWYtgCa": [ [ "Elegoo", @@ -15455,6 +12120,34 @@ "Elegoo PLA Wood" ] ], + "OFWa0NiB": [ + [ + "Volumic", + "PA", + "Volumic NYLON Ultra" + ] + ], + "OFWadebJ": [ + [ + "Generic", + "PETG-CF", + "Tiertime Generic PETG-CF" + ] + ], + "OFWao3Ic": [ + [ + "Creality", + "PLA", + "Ender-PLA" + ] + ], + "OFWbbuRY": [ + [ + "InfiMech", + "ABS", + "InfiMech Generic ABS" + ] + ], "OFWbdGsC": [ [ "Generic", @@ -15462,25 +12155,32 @@ "Generic PLA-CF" ] ], - "OFWkCAdc": [ + "OFWgFOjn": [ [ - "QIDI", - "PETG", - "QIDI PETG Tough 0.2 nozzle" - ] - ], - "OFWs8KIZ": [ - [ - "Generic", - "ABS-CF", - "Flashforge ABS-CF" - ] - ], - "OFWv6JYn": [ - [ - "Generic", + "Snapmaker", "PLA", - "Flashforge PLA Metal" + "Snapmaker PLA Silk" + ] + ], + "OFWnSvGu": [ + [ + "Generic", + "ASA-GF", + "Flashforge ASA-GF" + ] + ], + "OFWof1Ap": [ + [ + "Generic", + "ABS", + "FLSun Generic ABS" + ] + ], + "OFWukXja": [ + [ + "Generic", + "TPU", + "Qidi Generic TPU 95A" ] ], "OFWwF7K7": [ @@ -15490,11 +12190,11 @@ "FilAr PLA Cafe con Leche" ] ], - "OFWyCd0Y": [ + "OFWzr7m0": [ [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" + "Generic", + "PETG", + "Anycubic Generic PETG" ] ], "OFX0ycRQ": [ @@ -15504,11 +12204,11 @@ "Fiberon PA12-CF" ] ], - "OFXA8vy9": [ + "OFX2zcrM": [ [ - "Artillery", - "PLA Basic+", - "Artillery PLA Basic+" + "Generic", + "PLA-CF", + "Generic PLA-CF10" ] ], "OFXCBZTA": [ @@ -15525,18 +12225,11 @@ "Bambu PLA Matte" ] ], - "OFXNO5Of": [ + "OFXJ9iom": [ [ - "QIDI", - "PLA", - "QIDI PLA Rapido 0.2 nozzle" - ] - ], - "OFXQX0tr": [ - [ - "RatRig", - "PETG-CF10", - "RatRig PunkFil PETG CF" + "iQ Materials", + "HPP4GF25", + "Grauts HPP4GF25 P1" ] ], "OFXTPuqV": [ @@ -15546,18 +12239,32 @@ "Elas PETG Basic" ] ], - "OFXcfTEb": [ + "OFXXUHSG": [ [ "Generic", - "PETG", - "Tinmorry PETG-ECO" + "PETG-CF", + "Chuanying Generic PETG-CF10" ] ], - "OFXfgh61": [ + "OFXhZ3uY": [ [ "Generic", - "PA-CF", - "Prusa Generic PA-CF" + "PC", + "OrcaArena Generic PC" + ] + ], + "OFXi59OX": [ + [ + "Afinia", + "ABS", + "Afinia Value ABS" + ] + ], + "OFXk1emJ": [ + [ + "Artillery", + "PLA Basic", + "Artillery PLA Basic" ] ], "OFXkm8q1": [ @@ -15567,18 +12274,39 @@ "Generic PP-CF" ] ], - "OFXkwkn6": [ + "OFXn3Vd9": [ [ "QIDI", - "UltraPA", - "QIDI PA-Ultra" + "PAHT-S", + "QIDI Support For PAHT" ] ], - "OFXv4FUi": [ + "OFXnToSX": [ + [ + "Creality", + "PLA", + "Hyper Stardust" + ] + ], + "OFXuGxvQ": [ + [ + "Volumic", + "PLA", + "Volumic PLA Ultra" + ] + ], + "OFXuwtnq": [ + [ + "Co Print", + "PETG", + "CoPrint Generic PETG" + ] + ], + "OFXyyfX6": [ [ "Generic", "PLA", - "Flashforge PLA Galaxy" + "Anker Generic PLA Silk" ] ], "OFXz7Mwx": [ @@ -15595,11 +12323,18 @@ "Bambu ASA-Aero" ] ], - "OFY1U4uM": [ + "OFY0F5qA": [ [ - "Generic", - "TPU", - "Sovol SV08 TPU" + "Volumic", + "PETG", + "Volumic PETG Ultra carbone (Performance)" + ] + ], + "OFY3AB7j": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Matte" ] ], "OFY9muEs": [ @@ -15609,11 +12344,11 @@ "Generic ABS" ] ], - "OFYG2Gfy": [ + "OFYEtXuk": [ [ - "Afinia", - "ABS", - "Afinia ABS+" + "Snapmaker", + "PA-CF", + "Snapmaker J1 PA-CF" ] ], "OFYGbPHX": [ @@ -15623,23 +12358,18 @@ "PolyLite Dual PLA" ] ], - "OFYH00jV": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "OFYICbI4": [ - [ - "FusRock", - "PAHT-CF", - "FusRock Generic PAHT-CF" - ], + "OFYHzKyS": [ [ "Generic", - "PAHT-CF", - "FusRock Generic PAHT-CF" + "PLA-CF", + "Vzbot Generic PLA-CF" + ] + ], + "OFYPdJ7t": [ + [ + "Generic", + "ABS", + "Creality Generic ABS" ] ], "OFYPdQJh": [ @@ -15649,20 +12379,6 @@ "Generic PETG" ] ], - "OFYRS7GZ": [ - [ - "Generic", - "TPU-95A", - "Generic TPU-95A" - ] - ], - "OFYZs7dN": [ - [ - "Generic", - "PLA", - "Flashforge Generic HS PLA" - ] - ], "OFYd5uS3": [ [ "DREMC", @@ -15670,20 +12386,76 @@ "DREMC TPU 95A" ] ], - "OFYehFGr": [ - [ - "Generic", - "TPU", - "RatRig BigNozzle TPU" - ] - ], - "OFYfZgxU": [ + "OFYezc6s": [ [ "FlyingBear", "TPU", "FlyingBear TPU" ] ], + "OFYl0c8v": [ + [ + "Generic", + "HIPS", + "Flashforge Generic HIPS" + ] + ], + "OFYlZMmy": [ + [ + "Generic", + "TPU", + "Chuanying Generic TPU" + ] + ], + "OFYlthXI": [ + [ + "Generic", + "PLA-CF", + "Flashforge Generic PLA-CF" + ] + ], + "OFYtS9zg": [ + [ + "Generic", + "PAHT-CF", + "FusRock PAHT-CF" + ] + ], + "OFYuowge": [ + [ + "Other", + "ABS", + "Other ABS" + ] + ], + "OFYvSO1W": [ + [ + "Generic", + "PLA", + "Flashforge Generic PLA-Silk" + ] + ], + "OFZ0mR5b": [ + [ + "Anycubic", + "PLA-CF", + "Anycubic PLA-CF" + ] + ], + "OFZ1hANN": [ + [ + "FusRock", + "PA-CF", + "FusRock Generic NexPA-CF25" + ] + ], + "OFZ2LuAi": [ + [ + "Yumi", + "PLA", + "YUMI PLA Bowden" + ] + ], "OFZ4QbfK": [ [ "FilAr", @@ -15691,51 +12463,74 @@ "FilAr PLA Rosa Flamenco" ] ], - "OFZAkPHG": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "OFZQFvHQ": [ + "OFZ4fTO8": [ [ "Generic", "PETG", - "Flashforge HS PETG" + "C1 Generic High Flow PETG" ] ], - "OFZcrV9c": [ - [ - "FusRock", - "PPS-CF", - "Flashforge PPS-CF" - ], + "OFZHgTVI": [ [ "Generic", - "PPS-CF", - "Flashforge PPS-CF" + "PETG", + "Flashforge Generic PETG" ] ], - "OFZjZ1k7": [ + "OFZLtWYs": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF25" + ] + ], + "OFZOuWrO": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "OFZPlCck": [ [ "Generic", + "ABS", + "Chuanying Generic ABS" + ] + ], + "OFZivHGL": [ + [ + "Snapmaker", "PLA", - "Creality HF Generic PLA" + "Snapmaker Dual PLA" ] ], - "OFa5cFqE": [ + "OFZsChIG": [ [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" + "Generic", + "TPU", + "Qidi Generic TPU" ] ], - "OFa6L3Of": [ + "OFZtOQtl": [ [ - "QIDI", - "PC-ABS-FR", - "Qidi PC-ABS-FR" + "Flashforge", + "PA6-CF", + "Flashforge PA6-CF" + ] + ], + "OFZtkHRq": [ + [ + "Anycubic", + "PC", + "Anycubic PC" + ] + ], + "OFaBwRvT": [ + [ + "Generic", + "ASA", + "Flashforge ASA Basic" ] ], "OFaDOaNt": [ @@ -15752,18 +12547,32 @@ "FilAr PLA Rojo de Carreras" ] ], - "OFaKIoH2": [ + "OFaEuvNF": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Sparkle" + "Anycubic", + "PAHT-CF", + "Anycubic PAHT-CF" ] ], - "OFaKZ6JI": [ + "OFaFNP2U": [ [ "Generic", - "PETG", - "Generic PETG Basic" + "PLA", + "Sovol SV07 PLA" + ] + ], + "OFaHjk1V": [ + [ + "Volumic", + "PC", + "Volumic PC" + ] + ], + "OFaP2SsH": [ + [ + "LH Stinger", + "ASA", + "LHS ASA" ] ], "OFaQMgRH": [ @@ -15773,6 +12582,20 @@ "Bambu PLA Tough" ] ], + "OFaRjiIm": [ + [ + "SeeMeCNC", + "PETG-CF", + "SeeMeCNC PETG-CF" + ] + ], + "OFaU2JxD": [ + [ + "Generic", + "PLA", + "Dremel Generic PLA" + ] + ], "OFaYz8iE": [ [ "Elas", @@ -15780,6 +12603,34 @@ "Elas PLA Pro" ] ], + "OFaeIx7W": [ + [ + "iQ Materials", + "PETG Polymax", + "Polymaker PETG Polymax black P1" + ] + ], + "OFafO6VM": [ + [ + "Generic", + "PC-CF", + "Generic PC-CF" + ] + ], + "OFafocjw": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS" + ] + ], + "OFahE7HP": [ + [ + "Generic", + "PC", + "Blocks Generic PC" + ] + ], "OFausr3F": [ [ "FilAr", @@ -15787,25 +12638,18 @@ "FilAr PLA-mate Rosa" ] ], - "OFaxQnfz": [ - [ - "Cubicon", - "PC", - "Cubicon PC" - ] - ], - "OFb3UzMZ": [ - [ - "InfiMech", - "PA-CF", - "InfiMech PA-CF" - ] - ], - "OFbK5wve": [ + "OFaz8VoR": [ [ "Generic", - "TPU", - "Prusa Generic TPU HF" + "HIPS", + "Flashforge HIPS" + ] + ], + "OFb5EEM3": [ + [ + "Artillery", + "PET", + "Artillery PET" ] ], "OFbP8zEO": [ @@ -15815,25 +12659,60 @@ "Eolas Prints PLA Silk" ] ], - "OFbS9rjH": [ + "OFbSChKb": [ [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "OFbYP6Wb": [ - [ - "Elegoo", + "SeeMeCNC", "PLA", - "Elegoo PLA Marble" + "SeeMeCNC PLA" ] ], - "OFc2SnEp": [ + "OFbSZBOi": [ [ - "Artillery", - "PVA", - "Artillery PVA" + "InfiMech", + "TPU", + "InfiMech TPU Basic" + ] + ], + "OFbeeFkl": [ + [ + "Generic", + "PLA", + "OrcaArena Generic PLA Silk" + ] + ], + "OFbenYUK": [ + [ + "Generic", + "TPU", + "Prusa Generic TPU" + ] + ], + "OFbh7HcA": [ + [ + "Eryone", + "PP-CF", + "Eryone PP-CF" + ] + ], + "OFbjtPQy": [ + [ + "Generic", + "ASA", + "FLSun T1 ASA" + ] + ], + "OFbt04e0": [ + [ + "Generic", + "TPU", + "DeltaMaker Generic TPU" + ] + ], + "OFc0xiCz": [ + [ + "InfiMech", + "TPU", + "InfiMech Generic TPU" ] ], "OFc3xdm9": [ @@ -15843,18 +12722,53 @@ "Overture PLA" ] ], - "OFcZZWnB": [ + "OFc87pL3": [ [ - "Cubicon", - "ABS", - "Cubicon ABS-A100" + "Orca Arena", + "PET-CF", + "Arena PET-CF" ] ], - "OFceJcLf": [ + "OFcBJQcC": [ [ - "Polymaker", + "Snapmaker", + "TPU", + "Snapmaker Dual TPU High-Flow" + ] + ], + "OFcCzEkS": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA" + ] + ], + "OFcJ7AKd": [ + [ + "Generic", "PLA", - "PolyLite PLA" + "Sovol SV08 PLA" + ] + ], + "OFcJDtTx": [ + [ + "Artillery", + "TPU", + "Artillery TPU" + ] + ], + "OFcKtw8W": [ + [ + "Volumic", + "PA6-CF", + "PA6 CF20 (Performance)" + ] + ], + "OFcdqaWI": [ + [ + "Generic", + "PC", + "Sovol Zero PC" ] ], "OFcfQk4h": [ @@ -15864,18 +12778,25 @@ "Overture Air PLA" ] ], - "OFcqs5g7": [ + "OFcogyWl": [ [ - "Elegoo", + "WonderMaker", "PLA", - "Elegoo PLA Translucent2" + "WonderMaker PLA Metal" ] ], - "OFcsHCy4": [ + "OFctbSkL": [ [ "Generic", + "ASA", + "Blocks Generic ASA-CF" + ] + ], + "OFctg8r1": [ + [ + "CoLiDo", "PLA", - "Sovol SV08 PLA" + "CoLiDo PLA+" ] ], "OFcvKkrs": [ @@ -15885,13 +12806,6 @@ "Overture TPU" ] ], - "OFcy60o4": [ - [ - "Generic", - "ASA", - "Flashforge ASA Basic" - ] - ], "OFcytyoA": [ [ "Polymaker", @@ -15906,6 +12820,13 @@ "Generic PE-CF" ] ], + "OFd10YeG": [ + [ + "Generic", + "PLA", + "RatRig Generic PLA" + ] + ], "OFd2vX0G": [ [ "COEX 3D", @@ -15920,6 +12841,27 @@ "AliZ PA-CF" ] ], + "OFdD5Wbu": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker J1 PLA-CF" + ] + ], + "OFdEIwxy": [ + [ + "Generic", + "PLA-CF", + "Flashforge Generic PLA-CF10" + ] + ], + "OFdHsxB4": [ + [ + "Generic", + "TPU", + "TwoTrees Generic 95A TPU" + ] + ], "OFdI4zMo": [ [ "DREMC", @@ -15927,30 +12869,32 @@ "DREMC ASA CF" ] ], - "OFdLGn0R": [ + "OFdLdGgJ": [ + [ + "Generic", + "PVA", + "OrcaArena Generic PVA" + ] + ], + "OFdOWhCa": [ + [ + "Generic", + "PC", + "RatRig Generic PC" + ] + ], + "OFdXVjGZ": [ + [ + "Tiertime", + "PC", + "Tiertime PC" + ] + ], + "OFdXgp2K": [ [ "Generic", "PLA", - "Creality Generic PLA Wood" - ] - ], - "OFdNORGt": [ - [ - "Generic", - "ASA-GF", - "Flashforge ASA-GF" - ] - ], - "OFdSGkUG": [ - [ - "Anycubic", - "PETG", - "Anycubic PETG" - ], - [ - "Generic", - "PETG", - "Anycubic PETG" + "Chuanying Generic HS PLA" ] ], "OFdb8YNz": [ @@ -15960,11 +12904,32 @@ "FilAr PLA Verde Manzana" ] ], - "OFdhVJql": [ + "OFdkWDiy": [ [ - "Generic", + "Cubicon", "PLA", - "Flashforge PLA Buint Ti" + "Cubicon PLAi21" + ] + ], + "OFdlGycb": [ + [ + "CoLiDo", + "TPU", + "CoLiDo Generic TPU" + ] + ], + "OFdrYBmI": [ + [ + "Tiertime", + "ASA", + "Tiertime ASA" + ] + ], + "OFdtPd9h": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" ] ], "OFdzlrhi": [ @@ -15974,32 +12939,130 @@ "FilAr PLA-mate Chocolate" ] ], - "OFeFRwST": [ + "OFe61n6v": [ [ - "Generic", - "PVA", - "Flashforge PVA" + "RatRig", + "PETG-CF10", + "RatRig PunkFil PETG CF" ] ], - "OFePPmng": [ + "OFe6sfXS": [ + [ + "Generic", + "PC", + "FlashForge PC" + ] + ], + "OFe7Sx5B": [ + [ + "Generic", + "PETG", + "Sovol SV06 ACE PETG" + ] + ], + "OFe8UJXH": [ + [ + "Generic", + "PC", + "Creality Generic PC" + ] + ], + "OFe8tuNb": [ + [ + "Tiertime", + "PA6-CF", + "Tiertime PA6-CF" + ] + ], + "OFe8yBMG": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough 0.6 nozzle" + ] + ], + "OFeAxvEt": [ [ "Snapmaker", "ABS", - "Snapmaker J1 ABS Benchy" + "Snapmaker Dual ABS Benchy" ] ], - "OFeWMAGH": [ + "OFeCJqxx": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "OFeDfaCh": [ + [ + "CoLiDo", + "PLA", + "CoLiDo Generic PLA" + ] + ], + "OFeIyhUx": [ + [ + "Anycubic", + "PC-CF", + "Anycubic PC-CF" + ] + ], + "OFeJjoKF": [ + [ + "Generic", + "PA", + "FLSun Generic PA" + ] + ], + "OFeK2vkS": [ [ "Generic", "PLA", - "Flashforge HS PLA Burnt Ti" + "Chuanying Generic PLA-Silk" ] ], - "OFefhSuj": [ + "OFeTATC7": [ [ - "InfiMech", + "Snapmaker", + "Breakaway Support", + "Snapmaker J1 Breakaway" + ] + ], + "OFeVzkSU": [ + [ + "Polymaker", + "ABS", + "Fiberon PPS-GF20" + ] + ], + "OFec7Qiw": [ + [ + "Generic", "PLA", - "InfiMech PLA Hyper" + "Flashforge PLA Sparkle" + ] + ], + "OFeelsSM": [ + [ + "HATCHBOX", + "PLA", + "HATCHBOX PLA" + ] + ], + "OFelDBgv": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA" + ] + ], + "OFepU7Tl": [ + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Matte" ] ], "OFesA6rF": [ @@ -16009,6 +13072,13 @@ "Generic PLA Silk" ] ], + "OFetENFF": [ + [ + "Generic", + "ABS", + "OrcaArena Generic ABS" + ] + ], "OFexaZU2": [ [ "FilAr", @@ -16016,30 +13086,11 @@ "FilAr PLA Manteca" ] ], - "OFeybQvK": [ + "OFf0MkD5": [ [ "QIDI", - "ABS", - "QIDI ABS Rapido 0.2 nozzle" - ] - ], - "OFf0JIqs": [ - [ - "Eryone", - "PP", - "Eryone PP" - ] - ], - "OFf2b9wu": [ - [ - "Anycubic", - "ABS", - "Anycubic ABS" - ], - [ - "Generic", - "ABS", - "Anycubic ABS" + "PETG", + "QIDI PETG Translucent" ] ], "OFf5awy4": [ @@ -16049,6 +13100,13 @@ "Eolas Prints PLA Matte" ] ], + "OFf6ZEvu": [ + [ + "InfiMech", + "PC", + "InfiMech PC" + ] + ], "OFf6mfQO": [ [ "Bambu Lab", @@ -16056,6 +13114,13 @@ "Bambu Support for ABS" ] ], + "OFf6ynfH": [ + [ + "FlyingBear", + "PETG Basic", + "FlyingBear PETG Basic" + ] + ], "OFfBpSRI": [ [ "Bambu Lab", @@ -16063,6 +13128,13 @@ "Bambu ASA" ] ], + "OFfHGM1D": [ + [ + "re3D", + "PP", + "re3D rPP" + ] + ], "OFfJSCzm": [ [ "FDplast", @@ -16070,11 +13142,18 @@ "FDplast PETG" ] ], - "OFfJoIgg": [ + "OFfSqS4R": [ [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" + "Creality", + "PLA", + "ENDER FAST PLA" + ] + ], + "OFfZ0lTS": [ + [ + "Generic", + "PETG-CF", + "Qidi Generic PETG-CF" ] ], "OFfZcoKr": [ @@ -16084,25 +13163,25 @@ "FilAr PLA-mate Piel" ] ], - "OFfdxQok": [ + "OFfb10SK": [ [ - "Generic", - "PLA", - "Generic PLA+" + "Artillery", + "PC", + "Artillery PC" ] ], - "OFfiN1Lw": [ + "OFfegVpA": [ [ - "Generic", - "PLA", - "Chuanying Generic HS PLA" + "Polymaker", + "PA", + "Polymaker Generic S1" ] ], - "OFfkPhrJ": [ + "OFfmHUkQ": [ [ - "Generic", - "PLA", - "Creality HF Generic Speed PLA" + "Snapmaker", + "Breakaway Support", + "Snapmaker Dual Breakaway" ] ], "OFfmZrI3": [ @@ -16119,13 +13198,6 @@ "COEX TPE 40D" ] ], - "OFfoA8kJ": [ - [ - "CoLiDo", - "PLA", - "CoLiDo PLA" - ] - ], "OFfq5YXA": [ [ "Valment", @@ -16140,11 +13212,11 @@ "COEX TPE 60D" ] ], - "OFftQOek": [ + "OFfr6JDF": [ [ - "Generic", - "PLA", - "Flashforge PLA Matte" + "QIDI", + "PETG", + "QIDI PETG Tough 0.8 nozzle" ] ], "OFfuhviw": [ @@ -16154,11 +13226,32 @@ "Elegoo PLA Marble" ] ], - "OFg4N6ZL": [ + "OFfuih8e": [ [ - "FlyingBear", + "Creality", + "PLA", + "Creality Silk PLA" + ] + ], + "OFfxFQf9": [ + [ + "Generic", "PETG", - "FlyingBear PETG" + "Chuanying Generic PETG" + ] + ], + "OFfznI0Q": [ + [ + "Generic", + "PA-CF", + "Prusa Generic PA-CF" + ] + ], + "OFg3cWVt": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Metal" ] ], "OFg57Nmc": [ @@ -16182,30 +13275,11 @@ "Generic PA" ] ], - "OFgJX0Fc": [ + "OFgHh8ly": [ [ - "Generic", - "PPS", - "FlashForge PPS" - ] - ], - "OFgK2Xvv": [ - [ - "Anycubic", + "Afinia", "PLA", - "Anycubic PLA" - ], - [ - "Generic", - "PLA", - "Anycubic PLA" - ] - ], - "OFgMGSpF": [ - [ - "Generic", - "PETG", - "Sovol SV06 Plus ACE PETG" + "Afinia Value PLA" ] ], "OFgMWJ8T": [ @@ -16215,23 +13289,46 @@ "FilAr PLA Negro Azabache" ] ], - "OFgNzLVh": [ + "OFgSEwOZ": [ [ "Generic", - "ABS", - "Sovol Zero ABS" + "PETG", + "OrcaArena Generic PETG" ] ], - "OFgSK1hL": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA High Speed" - ], + "OFgSPtDn": [ [ "Generic", - "PLA", - "Anycubic PLA High Speed" + "PEEK", + "MM Generic PEEK" + ] + ], + "OFgSbX7E": [ + [ + "Volumic", + "PC", + "Volumic PC (Performance)" + ] + ], + "OFgVJhVt": [ + [ + "Generic", + "PLA-CF", + "Tiertime Generic PLA-CF" + ] + ], + "OFgVQkqW": [ + [ + "Cubicon", + "ABS", + "Cubicon ABSk" + ] + ], + "OFgXgt98": [ + [ + "Artillery", + "ABS", + "Artillery ABS" ] ], "OFgbpcy9": [ @@ -16241,11 +13338,32 @@ "Generic TPU" ] ], - "OFglpvEE": [ + "OFgcryz4": [ [ "Generic", - "TPU", - "Sovol SV06 ACE TPU" + "ASA", + "RatRig BigNozzle ASA" + ] + ], + "OFgeM7nD": [ + [ + "Flashforge", + "PA-CF", + "Flashforge PA12-CF" + ] + ], + "OFgf4gZa": [ + [ + "Generic", + "PA", + "Flashforge PA" + ] + ], + "OFglhKLM": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido 0.8 nozzle" ] ], "OFgpLTMR": [ @@ -16255,30 +13373,46 @@ "FilAr PETG Gris Plata" ] ], - "OFgrGfPy": [ + "OFgpQwkk": [ [ - "Anycubic", + "Creality", "PLA", - "Anycubic PLA+" - ], + "CR-PLA Fluo" + ] + ], + "OFgptDSf": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Matte" + ] + ], + "OFgvOmM2": [ [ "Generic", - "PLA", - "Anycubic PLA+" + "PETG", + "Anker Generic PETG" ] ], - "OFgtZjeX": [ + "OFgyPlwU": [ [ "Snapmaker", - "ABS", - "Snapmaker ABS Benchy" + "TPU", + "Snapmaker TPU High-Flow" ] ], - "OFh5GUhZ": [ + "OFh7mvPO": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Wood" + "Prusa Polymers", + "PVB", + "Prusament PVB" + ] + ], + "OFh9u9c0": [ + [ + "Generic", + "PA-GF", + "Generic PA6-GF" ] ], "OFhASRWj": [ @@ -16288,13 +13422,6 @@ "Panchroma PLA Temp Shift" ] ], - "OFhKNHC8": [ - [ - "Generic", - "PETG", - "Generic PETG PRO" - ] - ], "OFhMO9Kh": [ [ "GreenGate3D", @@ -16302,6 +13429,20 @@ "GreenGate3D PETG" ] ], + "OFhO5aEJ": [ + [ + "RatRig", + "ABS", + "RatRig PunkFil ABS" + ] + ], + "OFhQf8ou": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker PLA-CF" + ] + ], "OFhQfUQY": [ [ "Generic", @@ -16309,6 +13450,20 @@ "Generic SBS" ] ], + "OFhTPf6L": [ + [ + "Generic", + "PA6-CF", + "Generic PA6-CF" + ] + ], + "OFhUjPA5": [ + [ + "Eryone", + "TPU", + "Eryone TPU" + ] + ], "OFhWc5Bv": [ [ "NIT", @@ -16323,6 +13478,20 @@ "Eolas Prints PETG" ] ], + "OFhWrAuP": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "OFhbolij": [ + [ + "eSUN", + "PLA", + "eSUN PLA-Lite" + ] + ], "OFhcYzR8": [ [ "Elegoo", @@ -16330,6 +13499,13 @@ "Elegoo PLA Sparkle" ] ], + "OFhcrFw9": [ + [ + "Generic", + "TPU", + "Creality Generic TPU" + ] + ], "OFhfd722": [ [ "Eolas Prints", @@ -16337,6 +13513,20 @@ "Eolas Prints TPU Flex 93A" ] ], + "OFhiJE7Y": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "OFhkN0a7": [ + [ + "Creality", + "PA-CF", + "Hyper PA612-CF" + ] + ], "OFhlCNqq": [ [ "COEX 3D", @@ -16351,18 +13541,53 @@ "Bambu ABS" ] ], - "OFhzHd2Y": [ + "OFhwiZ50": [ [ - "Generic", - "HIPS", - "Flashforge HIPS" + "QIDI", + "PLA", + "QIDI PLA Rapido 0.2 nozzle" ] ], - "OFi1ocNv": [ + "OFhx4uOG": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "OFi5RSve": [ + [ + "eSUN", + "PLA", + "eSUN PLA-LW" + ] + ], + "OFi6PfUM": [ [ "Generic", + "PLA", + "Generic PLA-Silk" + ] + ], + "OFi7Bf0F": [ + [ + "Generic", + "ABS-CF", + "Flashforge ABS-CF" + ] + ], + "OFi90KlM": [ + [ + "Volumic", "PA", - "Flashforge PA" + "Volumic NYLON Ultra (Performance)" + ] + ], + "OFiCHnso": [ + [ + "Generic", + "PLA", + "Prusa Generic PLA" ] ], "OFiDpM1B": [ @@ -16372,11 +13597,18 @@ "FilAr PLA-mate Bordo" ] ], - "OFiJYDPC": [ + "OFiEz2XI": [ [ - "HATCHBOX", - "PLA", - "HATCHBOX PLA" + "Cubicon", + "PA", + "Cubicon PA-CF" + ] + ], + "OFiUSDih": [ + [ + "Generic", + "PA", + "Blocks Generic PA" ] ], "OFiWaoqD": [ @@ -16386,32 +13618,67 @@ "DREMC PPA-CF" ] ], - "OFic2uNr": [ + "OFifxPW1": [ [ "Generic", "PLA", - "Sovol SV06 ACE PLA" + "DeltaMaker Generic PLA" ] ], - "OFicxmSa": [ + "OFilAA3b": [ + [ + "Eryone", + "PLA-CF", + "Eryone PLA-CF" + ] + ], + "OFilD4bP": [ + [ + "FlyingBear", + "PLA", + "FlyingBear PLA" + ] + ], + "OFilnglt": [ + [ + "Artillery", + "PETG", + "Artillery PETG" + ] + ], + "OFin64Qg": [ [ "Generic", "PLA", - "Prusa Generic PLA HF" + "Generic Support for PLA" ] ], - "OFidJLn8": [ + "OFiorRtJ": [ + [ + "Generic", + "PVA", + "Blocks Generic PVA" + ] + ], + "OFitS8al": [ [ "Polymaker", - "ABS", - "PolyLite ABS" + "PLA", + "PolyLite PLA Neon" ] ], - "OFiyGNbI": [ + "OFiuJSmy": [ [ - "Elegoo", - "PETG", - "Elegoo PETG-CF" + "Generic", + "PLA", + "RatRig BigNozzle PLA" + ] + ], + "OFiwEbze": [ + [ + "Volumic", + "PETG-ESD", + "PETG ESD (Performance)" ] ], "OFj3bTjw": [ @@ -16421,11 +13688,32 @@ "FilAr PLA-mate Amarillo" ] ], - "OFjFPhUC": [ + "OFj64R5U": [ [ - "Generic", - "PLA", - "Prusament rPLA" + "Peopoly", + "ABS", + "Peopoly Lancer ABS-GF" + ] + ], + "OFjD3YTW": [ + [ + "QIDI", + "PC-ABS-FR", + "Qidi PC-ABS-FR" + ] + ], + "OFjHrAX0": [ + [ + "WonderMaker", + "ABS", + "WonderMaker ABS" + ] + ], + "OFjLAYgO": [ + [ + "Anycubic", + "PEBA", + "Anycubic PEBA" ] ], "OFjPXrXO": [ @@ -16442,11 +13730,25 @@ "FilAr PLA Tabaco" ] ], - "OFjZw7k1": [ + "OFjUGUIK": [ [ - "Polymaker", + "iQ Materials", + "PACF Pro", + "Fiberthree PACF Pro P1" + ] + ], + "OFjVOWfJ": [ + [ + "Anycubic", "PLA", - "PolyTerra J1 PLA" + "Anycubic PLA High Speed" + ] + ], + "OFjXrKFO": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Impact" ] ], "OFjb0wos": [ @@ -16456,42 +13758,32 @@ "Panchroma PLA Metallic" ] ], - "OFjdTQd6": [ + "OFjcwUEm": [ [ - "Anycubic", + "Cubicon", "PLA", - "Anycubic PLA Silk" - ], - [ - "Generic", - "PLA", - "Anycubic PLA Silk" + "Cubicon PLA" ] ], - "OFjepy6j": [ + "OFjkdnyN": [ [ - "FusRock", - "S-PAHT", - "FusRock Generic S-PAHT" - ], - [ - "Generic", - "PA-CF", - "FusRock Generic S-PAHT" + "Snapmaker", + "TPU", + "Snapmaker Dual TPU" ] ], - "OFjj9Yiz": [ - [ - "Generic", - "PETG", - "RatRig BigNozzle PETG" - ] - ], - "OFjohFkg": [ + "OFjoAe0R": [ [ "QIDI", - "PETG", - "QIDI PETG Translucent" + "PLA-CF", + "Qidi PLA-CF" + ] + ], + "OFjoIVZ6": [ + [ + "FlyingBear", + "PA-CF", + "FlyingBear Generic PA-CF" ] ], "OFjorDcx": [ @@ -16501,13 +13793,6 @@ "FDplast ABS" ] ], - "OFjqPjjl": [ - [ - "Generic", - "PET", - "Generic PET" - ] - ], "OFjt9en1": [ [ "Generic", @@ -16515,25 +13800,11 @@ "Generic CoPE" ] ], - "OFjurQ3I": [ + "OFjz0a3m": [ [ - "Generic", - "PETG", - "Sovol Zero PETG" - ] - ], - "OFk388hR": [ - [ - "Generic", - "PA6-CF", - "Generic PA6-CF" - ] - ], - "OFk6T5YH": [ - [ - "Generic", - "PETG", - "Sovol Zero PETG HS Nozzle" + "Prusa Polymers", + "PC-CF", + "Prusament PC-CF" ] ], "OFk8t9mz": [ @@ -16543,6 +13814,20 @@ "Fiberon PETG-rCF" ] ], + "OFkAltI8": [ + [ + "Other", + "PA-CF", + "Other PA-CF" + ] + ], + "OFkGp50Y": [ + [ + "Volumic", + "UNIV", + "Volumic UNIVERSAL Ultra (Performance)" + ] + ], "OFkGvN4d": [ [ "FilAr", @@ -16557,25 +13842,32 @@ "Fiberon PA6-CF" ] ], - "OFkaDtKx": [ + "OFkR8E2c": [ [ - "FusRock", - "PA-CF", - "Flashforge PA66-CF" + "Prusa Polymers", + "PETG", + "Prusament PETG" ] ], - "OFkeeluv": [ + "OFkUaDnU": [ [ "Generic", - "ASA", - "Prusa Generic ASA HF" + "PE-CF", + "Tiertime Generic PE-CF" ] ], - "OFkfK62J": [ + "OFkWaWRo": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Silk" + "Generic", + "TPU", + "Sovol SV06 Plus ACE TPU" + ] + ], + "OFkYkQGO": [ + [ + "Generic", + "PP-GF", + "Tiertime Generic PP-GF" ] ], "OFkhhUS0": [ @@ -16585,11 +13877,11 @@ "Elegoo Rapid PLA+" ] ], - "OFklg4aM": [ + "OFklJcWK": [ [ - "Elegoo", + "Other", "PLA", - "Elegoo PLA PRO" + "Other PLA Hyper" ] ], "OFknl9Iz": [ @@ -16606,11 +13898,32 @@ "FilAr PLA Verde Oliva" ] ], - "OFkoT6jl": [ + "OFkq7rPy": [ + [ + "Eryone", + "PA-GF", + "Eryone PA-GF" + ] + ], + "OFks6esg": [ + [ + "Creality", + "PLA", + "EN-PLA+" + ] + ], + "OFkwIWwc": [ [ "Generic", "PLA", - "Prusament PLA" + "Flashforge PLA Color Change" + ] + ], + "OFkx5MEe": [ + [ + "Artillery", + "PVA", + "Artillery PVA" ] ], "OFkzr35f": [ @@ -16620,18 +13933,60 @@ "Eolas Prints PLA Antibacterial" ] ], - "OFlN56xW": [ + "OFl2SXmv": [ [ "Generic", - "PLA", - "Chuanying Generic PLA-Silk" + "FLEX", + "Prusa Generic FLEX" ] ], - "OFlNKZLP": [ + "OFl4ItvQ": [ [ "Generic", "PLA", - "Flashforge PLA Metal" + "Prusa Generic PLA HF" + ] + ], + "OFl7nOAf": [ + [ + "Generic", + "PETG", + "Sovol SV06 Plus ACE PETG" + ] + ], + "OFlBoEfL": [ + [ + "Snapmaker", + "TPU", + "Snapmaker J1 TPU High-Flow" + ] + ], + "OFlIsW6f": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Matte" + ] + ], + "OFlLmUeV": [ + [ + "Generic", + "PLA", + "Ginger Generic PLA" + ] + ], + "OFlN6DL1": [ + [ + "QIDI", + "UltraPA", + "QIDI PA-Ultra" + ] + ], + "OFlNWVr5": [ + [ + "Generic", + "PETG-CF", + "Flashforge Generic PETG-CF10" ] ], "OFlP3KWq": [ @@ -16648,11 +14003,18 @@ "Eolas Prints ASA" ] ], - "OFlbn4FY": [ + "OFlXJxX1": [ [ - "Snapmaker", - "PLA", - "Snapmaker PLA Matte" + "Generic", + "PETG", + "Chuanying PETG" + ] + ], + "OFllmFhT": [ + [ + "Generic", + "PETG", + "Generic PETG PRO" ] ], "OFln72PT": [ @@ -16669,6 +14031,13 @@ "Elegoo PC-FR" ] ], + "OFlufQpZ": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA" + ] + ], "OFlwmqrC": [ [ "Polymaker", @@ -16676,18 +14045,11 @@ "Polymaker HT-PLA-GF" ] ], - "OFlxnxDx": [ + "OFlx52rn": [ [ "Generic", - "SBS", - "Tiertime Generic SBS" - ] - ], - "OFlzQ0IS": [ - [ - "Peopoly", - "PET-CF", - "Peopoly Lancer PET-CF" + "PLA-CF", + "RatRig Generic PLA-CF" ] ], "OFm06H6V": [ @@ -16697,18 +14059,25 @@ "Elegoo PLA Basic" ] ], - "OFm1VZed": [ + "OFm4ysMO": [ [ - "Generic", - "PLA-CF", - "Flashforge Generic PLA-CF" + "FlyingBear", + "ABS", + "FlyingBear ABS" ] ], - "OFmF1xL9": [ + "OFm70lLt": [ [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" + "CoLiDo", + "PLA", + "CoLiDo PLA" + ] + ], + "OFmFwUWM": [ + [ + "Prusa Polymers", + "ASA", + "Prusament ASA" ] ], "OFmJAd3A": [ @@ -16718,18 +14087,18 @@ "FDplast HIPS" ] ], - "OFmKNi3f": [ + "OFmKU2Ha": [ [ - "QIDI", + "Eryone", "PLA", - "QIDI PLA Rapido" + "Eryone PLA" ] ], - "OFmOWC74": [ + "OFmQkb3c": [ [ - "Elegoo", - "PETG", - "Elegoo PETG PRO" + "Generic", + "PLA", + "Flashforge HS PLA Burnt Ti" ] ], "OFmY0l6t": [ @@ -16739,6 +14108,20 @@ "Generic PLA Matte" ] ], + "OFma52eS": [ + [ + "Generic", + "ABS", + "Blocks Generic ABS" + ] + ], + "OFma5TXH": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], "OFmaeU4a": [ [ "FilAr", @@ -16746,25 +14129,18 @@ "FilAr PLA-mate Naranja" ] ], - "OFmcJsqt": [ - [ - "InfiMech", - "TPU", - "InfiMech TPU" - ] - ], - "OFmduKVr": [ + "OFmexHIS": [ [ "Generic", - "PPS-CF", - "FlashForge PPS-CF" + "PETG", + "RatRig BigNozzle PETG" ] ], - "OFmgesco": [ + "OFmfizbq": [ [ - "Generic", - "TPU", - "Flashforge TPU 65D" + "Orca Arena", + "PLA", + "Arena PLA Silk" ] ], "OFmhJs5V": [ @@ -16774,6 +14150,20 @@ "Elegoo TPU" ] ], + "OFmhWhEf": [ + [ + "Generic", + "PLA", + "Creality HF Generic PLA" + ] + ], + "OFmjN2bc": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA" + ] + ], "OFmn9NZL": [ [ "FusRock", @@ -16781,6 +14171,13 @@ "FusRock ABS-GF" ] ], + "OFmnJNqY": [ + [ + "Generic", + "PA", + "OrcaArena Generic PA" + ] + ], "OFmpMwxS": [ [ "Generic", @@ -16795,6 +14192,13 @@ "Elegoo PETG-GF" ] ], + "OFmzftED": [ + [ + "Generic", + "ASA", + "OrcaArena Generic ASA" + ] + ], "OFn1QaY3": [ [ "Elegoo", @@ -16802,32 +14206,60 @@ "Elegoo PLA Translucent2" ] ], - "OFnLnZQo": [ + "OFn2GlhY": [ [ - "Cubicon", - "PC", - "Cubicon PC" - ] - ], - "OFnMW5jr": [ - [ - "FlyingBear", - "ABS", - "FlyingBear ABS" - ] - ], - "OFnRTkEq": [ - [ - "RatRig", - "PETG", - "RatRig PunkFil PETG" - ] - ], - "OFnY9ovF": [ - [ - "Artillery", + "Creality", "PA-CF", - "Artillery PA-CF" + "Hyper PA6-CF" + ] + ], + "OFn6WpN7": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "OFnHc3D6": [ + [ + "eSUN", + "PLA-CF", + "eSUN PLA-CF" + ] + ], + "OFnMv3W5": [ + [ + "Generic", + "PLA", + "Flashforge HS PLA" + ] + ], + "OFnO4wnf": [ + [ + "Prusa Polymers", + "PLA", + "Prusament PLA" + ] + ], + "OFnSeLHk": [ + [ + "CoLiDo", + "PLA", + "CoLiDo PLA Silk" + ] + ], + "OFnXrkhA": [ + [ + "InfiMech", + "PA-CF", + "InfiMech PA-CF" + ] + ], + "OFnXwW8l": [ + [ + "Polymaker", + "PLA", + "PolyLite PLA Pro Metallic" ] ], "OFnYVFk2": [ @@ -16837,6 +14269,27 @@ "FilAr PLA Azul Francia" ] ], + "OFncpm7O": [ + [ + "WonderMaker", + "PLA", + "WonderMaker PLA Silk" + ] + ], + "OFndmfJ1": [ + [ + "Generic", + "PLA", + "Anker Generic PLA" + ] + ], + "OFneOFWe": [ + [ + "CoLiDo", + "ABS", + "CoLiDo ABS" + ] + ], "OFnejEt4": [ [ "FilAr", @@ -16844,6 +14297,27 @@ "FilAr PETG Cian" ] ], + "OFnfBvn5": [ + [ + "Generic", + "PLA", + "Artillery Generic PLA" + ] + ], + "OFngcE81": [ + [ + "LH Stinger", + "TPU", + "LHS TPU Foamy 78A" + ] + ], + "OFnh79eM": [ + [ + "Generic", + "ABS", + "SecKit Generic ABS" + ] + ], "OFniMuTN": [ [ "Bambu Lab", @@ -16851,25 +14325,18 @@ "Bambu PA6-CF" ] ], - "OFnj7bPm": [ + "OFnmp6rt": [ [ - "QIDI", - "ABS", - "QIDI ABS Rapido 0.6 nozzle" - ] - ], - "OFnsWQTp": [ - [ - "QIDI", + "Anycubic", "PLA", - "QIDI WOOD Rapido" + "Anycubic PLA+" ] ], - "OFnyirh9": [ + "OFo15hcT": [ [ - "Artillery", - "PLA Silk", - "Artillery PLA Silk" + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" ] ], "OFo2UF2C": [ @@ -16879,32 +14346,32 @@ "Generic BVOH" ] ], - "OFo4VB3w": [ + "OFo6n2pB": [ [ - "Generic", - "ABS-CF", - "Generic ABS-CF" + "Anycubic", + "PETG", + "Anycubic PETG" ] ], - "OFo9EwvK": [ + "OFoBTKmn": [ [ - "Generic", - "PETG-CF", - "Generic PETG-CF10" + "Cubicon", + "PETG", + "Cubicon PETG" ] ], - "OFoAaHcF": [ - [ - "FusRock", - "PAHT-GF", - "FusRock Generic PAHT-GF" - ] - ], - "OFoJUGj6": [ + "OFoDgVnY": [ [ "Generic", "PLA", - "Flashforge HS PLA" + "FLSun S1 PLA Generic" + ] + ], + "OFoJcr46": [ + [ + "Generic", + "ASA", + "Prusa Generic ASA" ] ], "OFoSknDB": [ @@ -16914,6 +14381,20 @@ "FILL3D PLA Turbo" ] ], + "OFoT8F7Y": [ + [ + "Generic", + "PVA", + "Prusa Generic PVA HF" + ] + ], + "OFoVZg32": [ + [ + "Generic", + "TPU", + "SecKit Generic TPU" + ] + ], "OFoYSJKi": [ [ "Generic", @@ -16935,6 +14416,20 @@ "AliZ PETG" ] ], + "OFodPDxO": [ + [ + "Generic", + "PLA", + "Tiertime Generic PLA High Speed" + ] + ], + "OFogbnCb": [ + [ + "Generic", + "PPS-CF", + "FlashForge PPS-CF" + ] + ], "OFoiVqVM": [ [ "Bambu Lab", @@ -16942,11 +14437,18 @@ "Bambu PLA Basic" ] ], - "OFoimrpo": [ + "OFoqrHTw": [ [ "Generic", - "PETG-CF", - "Flashforge PETG-CF" + "PLA", + "FLSun S1 PLA High Speed" + ] + ], + "OForhBi4": [ + [ + "Cubicon", + "ABS", + "Cubicon ABSk" ] ], "OFovEIbw": [ @@ -16956,18 +14458,46 @@ "Bambu PETG HF" ] ], - "OFp8lkYD": [ + "OFp4ETDP": [ [ - "FusRock", - "PPA-GF", - "Flashforge PPA-GF" + "Creality", + "PLA", + "CR-PLA" ] ], - "OFp90N8a": [ + "OFp57RRC": [ [ - "Artillery", - "PA", - "Artillery PA" + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "OFp8gtPH": [ + [ + "Generic", + "PLA", + "Creality Generic PLA Silk" + ] + ], + "OFp9wdmf": [ + [ + "Eryone", + "PA-CF", + "Eryone PA-CF" + ] + ], + "OFpAaY6w": [ + [ + "Generic", + "ASA", + "Creality Generic ASA" + ] + ], + "OFpBV2Ma": [ + [ + "Generic", + "PETG", + "Tinmorry PETG-ECO" ] ], "OFpBlrvY": [ @@ -16977,11 +14507,11 @@ "Valment PLA Silk" ] ], - "OFpHq9gJ": [ + "OFpDo5Ix": [ [ - "Generic", - "PETG", - "Prusament PETG" + "Cubicon", + "ABS", + "Cubicon ABS" ] ], "OFpPGSKG": [ @@ -16991,6 +14521,20 @@ "SUNLU Silk PLA+" ] ], + "OFpPJSHE": [ + [ + "Peopoly", + "PETG", + "Peopoly Lancer PETG-C" + ] + ], + "OFpSYJLI": [ + [ + "Generic", + "PLA", + "Creality Generic PLA Matte" + ] + ], "OFpW4gdi": [ [ "SUNLU", @@ -16998,18 +14542,39 @@ "SUNLU PLA Matte" ] ], - "OFphFSUJ": [ + "OFptvi3F": [ [ "Generic", - "PETG", - "Prusa Generic PETG HF" + "PPA-GF", + "Tiertime Generic PPA-GF" ] ], - "OFq6IhFg": [ + "OFpu74Qe": [ [ - "Cubicon", + "Snapmaker", "PLA", - "Cubicon PLA" + "Snapmaker PLA Eco" + ] + ], + "OFpumhCM": [ + [ + "Volumic", + "UNIV", + "Volumic UNIVERSAL Ultra" + ] + ], + "OFq0TY7C": [ + [ + "Flashforge", + "ASA-CF", + "Flashforge ASA-CF" + ] + ], + "OFq5QANf": [ + [ + "Generic", + "PC", + "Prusa Generic PC HF" ] ], "OFq8gfS4": [ @@ -17019,6 +14584,13 @@ "FilAr PETG Negro Azabache" ] ], + "OFq9svOz": [ + [ + "Generic", + "PPS", + "Generic PPS" + ] + ], "OFqGRZyH": [ [ "Numakers", @@ -17033,32 +14605,32 @@ "eSUN PLA+" ] ], - "OFqPp2yL": [ + "OFqKmLJe": [ + [ + "Generic", + "PETG", + "Creality Generic PETG-CF" + ] + ], + "OFqOk9Ww": [ + [ + "Generic", + "ABS", + "Peopoly Generic ABS" + ] + ], + "OFqS8fzK": [ + [ + "Generic", + "PETG", + "SecKit Generic PETG" + ] + ], + "OFqcL5UF": [ [ "QIDI", - "PETG", - "QIDI PETG Tough 0.6 nozzle" - ] - ], - "OFqRWRU6": [ - [ - "Generic", - "ABS-GF", - "Flashforge ABS-GF" - ] - ], - "OFqSTJ3I": [ - [ - "Generic", - "PLA", - "OrcaArena Generic PLA Silk" - ] - ], - "OFqkcvDI": [ - [ - "Peopoly", - "ABS", - "Peopoly Lancer ABS-GF" + "PA-S", + "QIDI Support For PET/PA" ] ], "OFqtx549": [ @@ -17075,13 +14647,6 @@ "Panchroma CoPE" ] ], - "OFqyIUDi": [ - [ - "QIDI", - "PLA-CF", - "Qidi PLA-CF" - ] - ], "OFrFBEfd": [ [ "Eolas Prints", @@ -17089,6 +14654,13 @@ "Eolas Prints PLA Neon" ] ], + "OFrGJ4tR": [ + [ + "Anycubic", + "PLA", + "Anycubic PLA Slik" + ] + ], "OFrKLeE3": [ [ "Bambu Lab", @@ -17096,6 +14668,27 @@ "Bambu PLA Metal" ] ], + "OFrLiqiM": [ + [ + "InfiMech", + "PETG", + "InfiMech PETG" + ] + ], + "OFrM4hdm": [ + [ + "Creality", + "PLA-CF", + "CR-PLA Carbon" + ] + ], + "OFrO2zyn": [ + [ + "Generic", + "PLA", + "Creality Generic PLA High Speed" + ] + ], "OFrOh600": [ [ "Polymaker", @@ -17103,11 +14696,67 @@ "Panchroma PLA Matte" ] ], - "OFrbbq6E": [ + "OFrQqCwL": [ [ - "Other", + "InfiMech", "PLA", - "Other PLA Hyper" + "InfiMech Generic PLA" + ] + ], + "OFrdZ0cK": [ + [ + "eSUN", + "PETG", + "eSUN PETG+HS" + ] + ], + "OFrgGex8": [ + [ + "Generic", + "PETG", + "Blocks Generic PETG" + ] + ], + "OFrh4bBH": [ + [ + "Generic", + "ASA", + "SecKit Generic ASA" + ] + ], + "OFrjacXf": [ + [ + "Flashforge", + "PET-CF", + "Flashforge PET-CF" + ] + ], + "OFrnJJEa": [ + [ + "Generic", + "EVA", + "Tiertime Generic EVA" + ] + ], + "OFrnkURQ": [ + [ + "Generic", + "PLA", + "Flashforge PLA Metal" + ] + ], + "OFrr67nG": [ + [ + "Orca Arena", + "PC", + "Arena PC" + ] + ], + "OFrrMLDw": [ + [ + "Generic", + "PLA", + "Flashforge Generic PLA-SILK" ] ], "OFryjl35": [ @@ -17117,11 +14766,18 @@ "Elegoo ASA-CF" ] ], - "OFs1CbB1": [ + "OFs1sNLz": [ [ - "QIDI", - "PLA", - "QIDI PLA Rapido 0.8 nozzle" + "Generic", + "ABS", + "Chuanying ABS" + ] + ], + "OFs2ReMr": [ + [ + "InfiMech", + "PETG", + "InfiMech Generic PETG" ] ], "OFsB2lxm": [ @@ -17131,11 +14787,18 @@ "Elegoo PLA Matte" ] ], - "OFsCOJv7": [ + "OFsCbVbN": [ [ "Generic", - "TPU", - "Generic TPU" + "PVA", + "Anker Generic PVA" + ] + ], + "OFsD974q": [ + [ + "Volumic", + "PETG", + "Volumic PETG Ultra (Performance)" ] ], "OFsDXRpS": [ @@ -17145,6 +14808,20 @@ "FilAr PLA Piel" ] ], + "OFsF96Gt": [ + [ + "Generic", + "PLA-CF", + "FLSun Generic PLA-CF" + ] + ], + "OFsFo7ms": [ + [ + "Volumic", + "PP", + "Volumic PP Ultra" + ] + ], "OFsFon5l": [ [ "Generic", @@ -17152,6 +14829,13 @@ "Generic HIPS" ] ], + "OFsGqI4y": [ + [ + "Generic", + "PETG", + "Ginger Generic PETG" + ] + ], "OFsHSVZc": [ [ "Bambu Lab", @@ -17159,11 +14843,18 @@ "Bambu Support W" ] ], - "OFsLkLw6": [ + "OFsNJjpc": [ [ "Generic", - "PLA", - "Generic PLA Matte" + "TPU", + "RatRig BigNozzle TPU" + ] + ], + "OFsP8PKH": [ + [ + "Generic", + "ABS", + "Generic ABS HT" ] ], "OFsRDvTM": [ @@ -17173,6 +14864,13 @@ "Panchroma PLA" ] ], + "OFsXOMoX": [ + [ + "Generic", + "PLA", + "Qidi Generic PLA+" + ] + ], "OFsXQXbs": [ [ "FilAr", @@ -17180,18 +14878,11 @@ "FilAr PETG Blanco Antartida" ] ], - "OFsgANe3": [ + "OFsoQ12i": [ [ "Generic", - "PAHT-CF", - "Flashforge PAHT-CF" - ] - ], - "OFsmPFwh": [ - [ - "Generic", - "TPU", - "Sovol SV06 Plus ACE TPU" + "ABS", + "Comgrow Generic ABS" ] ], "OFsoykbm": [ @@ -17201,18 +14892,32 @@ "DREMC PA6-CF" ] ], - "OFt1YdX8": [ + "OFsxRSwr": [ [ "Generic", - "PLA", - "FLSun T1 PLA Silk" + "PVA", + "RatRig Generic PVA" ] ], - "OFt5bvKK": [ + "OFsxlLdo": [ [ - "Artillery", - "PETG Basic", - "Artillery PETG Basic" + "Generic", + "ASA", + "Qidi Generic ASA" + ] + ], + "OFt0JbR7": [ + [ + "Snapmaker", + "PLA", + "Snapmaker J1 PLA Metal" + ] + ], + "OFt3HtlG": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" ] ], "OFt6e0US": [ @@ -17222,32 +14927,39 @@ "FilAr PETG Amarillo Lima" ] ], - "OFt9AiN5": [ + "OFt7SngH": [ [ - "Generic", - "PA", - "Polymaker CoPA" + "Snapmaker", + "ASA", + "Snapmaker J1 ASA" ] ], - "OFtEFtsz": [ + "OFtFtiS0": [ [ "Polymaker", - "PA", - "Polymaker Generic CoPA" + "PETG", + "Polymaker PETG Galaxy" ] ], - "OFtJMczs": [ + "OFtGC1ye": [ [ - "Generic", - "TPU-64D", - "Flashforge TPU-64D" + "Artillery", + "PA-CF", + "Artillery PA-CF" ] ], - "OFtL05hE": [ + "OFtKeKa9": [ [ - "Generic", + "Orca Arena", "PLA", - "Sovol Zero PLA Basic HS Nozzle" + "Arena PLA Tough" + ] + ], + "OFtOPlK6": [ + [ + "Orca Arena", + "PA-CF", + "Arena PAHT-CF" ] ], "OFtOoWIj": [ @@ -17257,6 +14969,13 @@ "FilAr PLA-mate" ] ], + "OFtP1rqJ": [ + [ + "Generic", + "PVA", + "FLSun Generic PVA" + ] + ], "OFtRn8X8": [ [ "FDplast", @@ -17264,25 +14983,18 @@ "FDplast SBS" ] ], - "OFtXBjvb": [ - [ - "Artillery", - "PLA Tough", - "Artillery PLA Tough" - ] - ], - "OFtcKVgP": [ + "OFtTHNTj": [ [ "Generic", - "PC", - "fdm_filament_pc" + "PLA", + "Flashforge Generic PLA" ] ], - "OFtcTs1o": [ + "OFtTYl9Q": [ [ "Generic", - "ABS", - "RatRig BigNozzle ABS" + "ASA", + "Flashforge ASA" ] ], "OFtefokm": [ @@ -17292,34 +15004,6 @@ "FilAr PLA-mate Blanco" ] ], - "OFtemzzw": [ - [ - "Generic", - "ABS", - "Sovol SV06 ACE ABS" - ] - ], - "OFtet8ui": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU High-Flow" - ] - ], - "OFti31HS": [ - [ - "Cubicon", - "PLA", - "Cubicon PLAi21" - ] - ], - "OFtmT4Nd": [ - [ - "Artillery", - "ASA", - "Artillery ASA" - ] - ], "OFtpXCCv": [ [ "COEX 3D", @@ -17327,6 +15011,13 @@ "COEX ASA PRIME" ] ], + "OFtplX8o": [ + [ + "Generic", + "ABS", + "RatRig BigNozzle ABS" + ] + ], "OFtr8eZw": [ [ "FDplast", @@ -17334,6 +15025,13 @@ "FDplast PLA" ] ], + "OFtsVp4v": [ + [ + "Generic", + "PA-CF", + "SecKit Generic PA-CF" + ] + ], "OFtudokz": [ [ "Eolas Prints", @@ -17341,11 +15039,25 @@ "Eolas Prints PLA Premium" ] ], - "OFtwA91m": [ + "OFtybfNX": [ [ - "Generic", + "Snapmaker", + "PLA", + "Snapmaker PLA Metal" + ] + ], + "OFu08yGN": [ + [ + "Volumic", + "PETG", + "Volumic PETG Ultra carbone" + ] + ], + "OFu0fjPJ": [ + [ + "LH Stinger", "PC", - "Sovol Zero PC" + "LHS PC CF" ] ], "OFu1evlr": [ @@ -17355,25 +15067,53 @@ "Generic PCTG" ] ], - "OFuPC4S8": [ + "OFu79SUH": [ [ - "Elegoo", + "Generic", "PLA", - "Elegoo PLA-CF" + "Qidi Generic PLA" ] ], - "OFuPN3iW": [ + "OFuFqYyG": [ [ - "Other", + "Generic", + "PAHT-CF", + "Flashforge PAHT-CF" + ] + ], + "OFuGRMNV": [ + [ + "Generic", + "PA-CF", + "Flashforge PA-CF" + ] + ], + "OFuJ49uH": [ + [ + "QIDI", "PETG", - "Other PETG" + "QIDI PETG Basic" ] ], - "OFuTFxVP": [ + "OFuO0cAP": [ [ - "Overture", - "ABS", - "Overture ABS" + "Orca Arena", + "PETG-CF", + "Arena PETG-CF" + ] + ], + "OFuSwKgm": [ + [ + "Generic", + "PLA", + "Tiertime Generic PLA" + ] + ], + "OFuUJyRx": [ + [ + "Generic", + "PLA", + "FLSun T1 PLA Silk" ] ], "OFuUuIhR": [ @@ -17383,6 +15123,13 @@ "Elegoo PETG-CF" ] ], + "OFuV79ru": [ + [ + "Flashforge", + "PA-CF", + "Flashforge PA66-CF" + ] + ], "OFuWCQXN": [ [ "COEX 3D", @@ -17390,18 +15137,11 @@ "COEX ABS PRIME" ] ], - "OFuXkYly": [ + "OFuehn62": [ [ - "Elegoo", + "Orca Arena", "PLA", - "Elegoo PLA Glow" - ] - ], - "OFuYvNS3": [ - [ - "Afinia", - "ABS", - "Afinia Value ABS" + "Arena PLA Marble" ] ], "OFufTAK9": [ @@ -17411,18 +15151,32 @@ "FilAr PLA-mate Negro" ] ], - "OFuidAEg": [ + "OFughwKn": [ [ - "Bambu Lab", - "ABS", - "Bambu ABS" + "QIDI", + "PLA", + "QIDI PLA Matte Basic" ] ], - "OFuq9tqb": [ + "OFujZSdh": [ [ - "InfiMech", - "PLA", - "InfiMech PLA Basic" + "Creality", + "PETG", + "Hyper PETG" + ] + ], + "OFulOdT2": [ + [ + "Generic", + "TPU", + "Generic TPU 85A" + ] + ], + "OFupq0tY": [ + [ + "Generic", + "PLA-CF", + "Blocks Generic PLA-CF" ] ], "OFurdQxc": [ @@ -17432,39 +15186,39 @@ "FilAr PETG Magenta" ] ], - "OFuswXlp": [ + "OFusbWjj": [ [ - "Generic", + "Creality", + "PETG-CF", + "Hyper PETG-CF" + ] + ], + "OFuxH0Uz": [ + [ + "Volumic", "TPU", - "Generic TPU 85A" + "Volumic FLEX93 Ultra" ] ], - "OFuyJhLF": [ + "OFv4VZCd": [ [ "Generic", - "PETG", - "Flashforge PETG Basic" + "ABS", + "Qidi Generic ABS" ] ], - "OFv2NHLC": [ + "OFvDbkFq": [ [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF25" + "Prusa Polymers", + "PC", + "Prusament PC Blend" ] ], - "OFv8SRZh": [ + "OFvGc67v": [ [ "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], - "OFvGSn0l": [ - [ - "Generic", - "PETG", - "Creality Generic PETG-CF" + "ABS", + "Prusa Generic ABS" ] ], "OFvKUnLh": [ @@ -17474,18 +15228,11 @@ "Bambu TPU 95A HF" ] ], - "OFvN3117": [ + "OFvLppPU": [ [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "OFvOhSjO": [ - [ - "Other", - "TPU", - "Other TPU" + "Creality", + "PA", + "CR-Nylon" ] ], "OFvPPMxL": [ @@ -17495,6 +15242,13 @@ "FilAr PLA Verde FilAr" ] ], + "OFvPomQf": [ + [ + "Generic", + "PPS", + "Tiertime Generic PPS" + ] + ], "OFvTVZc3": [ [ "COEX 3D", @@ -17502,6 +15256,13 @@ "COEX PETG" ] ], + "OFvVxvzZ": [ + [ + "Generic", + "PLA", + "Flashforge PLA Metal" + ] + ], "OFvVy7yo": [ [ "Eolas Prints", @@ -17509,18 +15270,11 @@ "Eolas Prints TPU D60 UV Resistant" ] ], - "OFvYfHPB": [ + "OFvdZ2bx": [ [ - "Anycubic", + "QIDI", "PLA", - "Anycubic PLA Matte" - ] - ], - "OFvaXhYD": [ - [ - "InfiMech", - "PETG", - "InfiMech PETG" + "QIDI WOOD Rapido" ] ], "OFvgE0Zh": [ @@ -17530,13 +15284,6 @@ "Elegoo PLA" ] ], - "OFviQ9lH": [ - [ - "Generic", - "TPU", - "Flashforge Generic TPU" - ] - ], "OFvrXuV7": [ [ "Polymaker", @@ -17544,25 +15291,18 @@ "PolyLite ASA" ] ], - "OFvsS7Fb": [ + "OFvxIS9g": [ [ - "Generic", - "TPU-64D", - "Generic TPU-64D" + "Polymaker", + "PA-CF", + "Fiberon PA12-CF10" ] ], - "OFvw0owy": [ + "OFvyB0Bz": [ [ - "Afinia", + "Polymaker", "PLA", - "Afinia Value PLA" - ] - ], - "OFvxvkAd": [ - [ - "Artillery", - "PLA-CF", - "Artillery PLA-CF" + "PolyLite PLA Galaxy" ] ], "OFvzvwCu": [ @@ -17572,34 +15312,6 @@ "Eolas Prints PLA High Speed" ] ], - "OFw05rkF": [ - [ - "Other", - "PETG", - "Other PETG" - ] - ], - "OFw0qp7w": [ - [ - "Artillery", - "PET", - "Artillery PET" - ] - ], - "OFw1S8lL": [ - [ - "Artillery", - "ABS", - "Artillery ABS" - ] - ], - "OFwHPTvy": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA+" - ] - ], "OFwJ0qu2": [ [ "DREMC", @@ -17607,6 +15319,20 @@ "DREMC PET-CF" ] ], + "OFwLBAGf": [ + [ + "HATCHBOX", + "ABS", + "HATCHBOX ABS" + ] + ], + "OFwMFLAm": [ + [ + "Generic", + "ABS", + "Artillery Generic ABS" + ] + ], "OFwPrlCM": [ [ "Bambu Lab", @@ -17621,6 +15347,13 @@ "NIT PLA" ] ], + "OFwVVKEV": [ + [ + "Other", + "TPU", + "Other TPU" + ] + ], "OFwaYjL6": [ [ "Polymaker", @@ -17628,11 +15361,18 @@ "Fiberon PA6-GF" ] ], - "OFwf0oWp": [ + "OFwhLMs4": [ [ - "Generic", + "Snapmaker", "PLA", - "Flashforge PLA Luminous" + "Snapmaker PLA SnapSpeed" + ] + ], + "OFwpkvqf": [ + [ + "Orca Arena", + "PETG-CF", + "OrcaArena Generic PETG-CF" ] ], "OFwu7IAG": [ @@ -17642,11 +15382,25 @@ "COEX PCTG PRIME" ] ], - "OFwyqcGn": [ + "OFwxpmHM": [ [ - "Elegoo", - "PLA", - "Elegoo PLA Matte" + "Polymaker", + "PA", + "Polymaker Generic CoPA" + ] + ], + "OFwyt1xt": [ + [ + "Eryone", + "ASA-CF", + "Eryone ASA-CF" + ] + ], + "OFx0ZzFV": [ + [ + "Generic", + "PLA-CF", + "OrcaArena Generic PLA-CF" ] ], "OFx8Lmsd": [ @@ -17663,11 +15417,25 @@ "Overture PLA Pro" ] ], - "OFxLeRyT": [ + "OFxDHUX8": [ + [ + "SeeMeCNC", + "PETG", + "SeeMeCNC PETG" + ] + ], + "OFxJRuVF": [ + [ + "Anycubic", + "PC-GF", + "Anycubic PC-GF" + ] + ], + "OFxMGIPt": [ [ "Generic", - "PVA", - "Prusa Generic PVA HF" + "PPS", + "Flashforge PPS" ] ], "OFxOHhZw": [ @@ -17677,6 +15445,13 @@ "Elegoo ABS" ] ], + "OFxTMg1d": [ + [ + "FlyingBear", + "PC", + "FlyingBear Generic PC" + ] + ], "OFxUwUeW": [ [ "SUNLU", @@ -17684,62 +15459,146 @@ "SUNLU PLA Marble" ] ], - "OFxVzzn4": [ + "OFxYB4Sw": [ + [ + "Snapmaker", + "PETG-CF", + "Snapmaker J1 PETG-CF" + ] + ], + "OFxe4rXr": [ + [ + "Polymaker", + "PLA", + "PolyTerra PLA Marble" + ] + ], + "OFxg7n2G": [ [ "Generic", - "PLA-CF", - "Chuanying Generic PLA-CF10" - ] - ], - "OFxfCy9m": [ - [ - "Volumic", "PETG", - "Volumic PCTG Ultra (Performance)" + "RatRig Generic PETG" ] ], - "OFxjFYxE": [ + "OFxvKuYW": [ [ - "Elegoo", - "PETG", - "Elegoo PETG HF" + "Generic", + "PHA", + "Tiertime Generic PHA" ] ], - "OFxlch4V": [ + "OFy02QHU": [ [ - "CoLiDo", + "Polymaker", "PLA", - "CoLiDo PLA Silk" + "PolyLite PLA Translucent" ] ], - "OFxodd2u": [ - [ - "DeltaMaker", - "PLA", - "DeltaMaker Brand PLA" - ] - ], - "OFxxa5yn": [ + "OFy14TRA": [ [ "Snapmaker", "ABS", - "Snapmaker Dual ABS Benchy" + "Snapmaker J1 ABS" ] ], - "OFy7oQ1g": [ + "OFy3sW6j": [ + [ + "WonderMaker", + "ASA", + "WonderMaker ASA" + ] + ], + "OFy48TOp": [ [ "Generic", - "ASA", - "Blocks Generic ASA-CF" + "TPU-95A", + "Generic TPU-95A" ] ], - "OFyD1Zo8": [ + "OFy4ajVZ": [ + [ + "Generic", + "PLA", + "Qidi Generic PLA Silk" + ] + ], + "OFy8tYJE": [ + [ + "Cubicon", + "ABS", + "Cubicon ABS-A100" + ] + ], + "OFyCToOV": [ + [ + "Generic", + "TPU", + "Sovol SV08 TPU" + ] + ], + "OFyFRojy": [ + [ + "Generic", + "ABS", + "RatRig Generic ABS" + ] + ], + "OFyFyLIp": [ + [ + "SeeMeCNC", + "TPU", + "SeeMeCNC TPU" + ] + ], + "OFyHgT60": [ + [ + "Orca Arena", + "PLA", + "Arena PLA Sparkle" + ] + ], + "OFyK5Lt9": [ + [ + "Generic", + "PETG", + "Artillery Generic PETG" + ] + ], + "OFyLWVF3": [ + [ + "Generic", + "PETG-GF", + "Generic PETG-GF" + ] + ], + "OFyPG8v2": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Eco" + ] + ], + "OFyQwdaM": [ + [ + "Volumic", + "ABS", + "Volumic ABS Ultra (Performance)" + ] + ], + "OFyRCIMh": [ [ "Other", "PC", "Other PC" ] ], + "OFyUJI3q": [ + [ + "Volumic", + "ABS", + "Volumic ABS Ultra" + ] + ], "OFybzvQN": [ [ "FilAr", @@ -17747,18 +15606,53 @@ "FilAr PETG Gris Ceniza" ] ], - "OFyoW5W2": [ + "OFyeSq8A": [ [ "Generic", - "PLA", - "Flashforge PLA Color Change" + "ABS", + "Prusa Generic ABS HF" ] ], - "OFypQeKR": [ + "OFyhjiNs": [ + [ + "Snapmaker", + "PVA", + "Snapmaker PVA" + ] + ], + "OFyj3m13": [ + [ + "Snapmaker", + "PLA", + "Snapmaker Dual PLA Silk" + ] + ], + "OFymnal9": [ [ "Generic", - "PC-CF", - "Generic PC-CF" + "PETG", + "Sovol Zero PETG HS Nozzle" + ] + ], + "OFyoBZdm": [ + [ + "LH Stinger", + "PLA", + "LHS PLA" + ] + ], + "OFyreocX": [ + [ + "Tiertime", + "PVA", + "Tiertime PVA" + ] + ], + "OFyrnlUn": [ + [ + "Snapmaker", + "TPU", + "Snapmaker J1 TPU" ] ], "OFysxCep": [ @@ -17768,20 +15662,6 @@ "FilAr PETG Coral" ] ], - "OFyt23xJ": [ - [ - "Generic", - "PLA", - "FLSun T1 PLA High Speed" - ] - ], - "OFyxAbO4": [ - [ - "Generic", - "TPU-95A", - "Flashforge TPU-95A" - ] - ], "OFyxayW4": [ [ "Aliz", @@ -17789,32 +15669,53 @@ "AliZ PLA" ] ], - "OFzFbFcl": [ - [ - "Elegoo", - "PC", - "Elegoo PC-FR" - ] - ], - "OFzQQeCi": [ + "OFyySVby": [ [ "Generic", - "HIPS", - "Chuanying Generic HIPS" + "PVA", + "SecKit Generic PVA" ] ], - "OFzb2BLs": [ + "OFz3q5Xz": [ [ "Generic", "PETG", - "RatRig Generic PCTG" + "C1 Generic PETG" ] ], - "OFziUL2X": [ + "OFzAWsca": [ + [ + "QIDI", + "TPU", + "Qidi TPU 95A-HF" + ] + ], + "OFzB4uOs": [ [ "Generic", "PLA", - "Ginger Generic PLA" + "Sovol Zero PLA Basic HS Nozzle" + ] + ], + "OFzS7zt4": [ + [ + "Anycubic", + "PA", + "Anycubic PA" + ] + ], + "OFzXURfo": [ + [ + "FlyingBear", + "PETG", + "FlyingBear Generic PETG" + ] + ], + "OFzY7N3Z": [ + [ + "Artillery", + "PLA", + "Artillery PLA" ] ], "OFzrUUxc": [ @@ -17824,6 +15725,13 @@ "DREMC ABS" ] ], + "OFztQ7rO": [ + [ + "LH Stinger", + "ASA", + "LHS ABS" + ] + ], "OFzyIxba": [ [ "Bambu Lab", @@ -17831,746 +15739,11 @@ "Bambu PVA" ] ], - "OGFC99": [ - [ - "Generic", - "PC", - "fdm_filament_pc" - ] - ], - "OGFG99": [ - [ - "Generic", - "PETG", - "fdm_filament_pet" - ] - ], - "OGFL96": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "OGFN99": [ - [ - "Generic", - "PA", - "fdm_filament_pa" - ] - ], - "OGFSNL08": [ - [ - "Generic", - "PETG", - "SUNLU PETG" - ] - ], - "P1001": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Satin" - ] - ], - "P1002": [ - [ - "Polymaker", - "PLA", - "PolySonic PLA Pro" - ] - ], - "P1003": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Matte" - ] - ], - "P1004": [ - [ - "Polymaker", - "PLA", - "PolySonic PLA" - ] - ], - "P510cfa0": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA" - ] - ], - "P510cfa1": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA+" - ] - ], - "P510cfa2": [ - [ - "Cubicon", - "PLA", - "Cubicon PLAi21" - ] - ], - "P510cfb0": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS" - ] - ], - "P510cfb1": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS-A100" - ] - ], - "P510cfb2": [ - [ - "Cubicon", - "ABS", - "Cubicon ABSk" - ] - ], - "P510cfc0": [ - [ - "Cubicon", - "PETG", - "Cubicon PETG" - ] - ], - "P510cfd0": [ - [ - "Cubicon", - "PA", - "Cubicon PA-CF" - ] - ], - "P510eff9": [ - [ - "Generic", - "PETG", - "Ginger Generic PETG" - ] - ], - "Pfcf9c4c": [ - [ - "Artillery", - "PLA", - "Artillery PLA" - ] - ], - "Prusa Generic ABS @CORE One": [ + "OFzzmK2Q": [ [ "Generic", "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One 0.6": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One 0.8": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One HF 0.4": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One HF 0.5": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One HF 0.6": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ABS @CORE One HF 0.8": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], - "Prusa Generic ASA @CORE One": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One 0.6": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One 0.8": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One HF 0.4": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One HF 0.5": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One HF 0.6": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic ASA @CORE One HF 0.8": [ - [ - "Prusa Polymers", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusa Generic PETG @CORE One": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One 0.6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One 0.8": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One HF 0.4": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One HF 0.5": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One HF 0.6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PETG @CORE One HF 0.8": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], - "Prusa Generic PLA @CORE One": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One 0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One 0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One HF 0.4": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One HF 0.5": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One HF 0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA @CORE One HF 0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], - "Prusa Generic PLA Silk @CORE One": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Prusa Generic PLA Silk @CORE One 0.6": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Prusa Generic PLA Silk @CORE One 0.8": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "Prusa Generic TPU @CORE One": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Prusa Generic TPU @CORE One 0.6": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Prusa Generic TPU @CORE One 0.8": [ - [ - "Generic", - "FLEX", - "Prusa Generic TPU" - ] - ], - "Prusament ASA @CORE One": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One 0.6": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One 0.8": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One HF 0.4": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One HF 0.5": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One HF 0.6": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @CORE One HF 0.8": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "Prusament ASA @MK4S": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S 0.6": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S 0.8": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S HF0.4": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S HF0.5": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S HF0.6": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament ASA @MK4S HF0.8": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], - "Prusament PA-CF @CORE One": [ - [ - "Prusa Polymers", - "PA", - "Prusament PA-CF" - ] - ], - "Prusament PA-CF @CORE One 0.6": [ - [ - "Prusa Polymers", - "PA", - "Prusament PA-CF" - ] - ], - "Prusament PA-CF @CORE One 0.8": [ - [ - "Prusa Polymers", - "PA", - "Prusament PA-CF" - ] - ], - "Prusament PC Blend @CORE One": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One 0.6": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One 0.8": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One HF 0.4": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One HF 0.5": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One HF 0.6": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC Blend @CORE One HF 0.8": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "Prusament PC-CF @CORE One": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC-CF" - ] - ], - "Prusament PC-CF @CORE One 0.6": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC-CF" - ] - ], - "Prusament PC-CF @CORE One 0.8": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC-CF" - ] - ], - "Prusament PETG @CORE One": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One 0.6": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One 0.8": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One HF 0.4": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One HF 0.5": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One HF 0.6": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PETG @CORE One HF 0.8": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "Prusament PLA @CORE One": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One 0.6": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One 0.8": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One HF 0.4": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One HF 0.5": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One HF 0.6": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PLA @CORE One HF 0.8": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "Prusament PVB @CORE One": [ - [ - "Prusa Polymers", - "PVB", - "Prusament PVB" - ] - ], - "Prusament PVB @CORE One 0.6": [ - [ - "Prusa Polymers", - "PVB", - "Prusament PVB" - ] - ], - "Prusament PVB @CORE One 0.8": [ - [ - "Prusa Polymers", - "PVB", - "Prusament PVB" - ] - ], - "Prusament rPLA @CORE One": [ - [ - "Prusa Polymers", - "PLA", - "Prusament rPLA" - ] - ], - "Prusament rPLA @CORE One 0.6": [ - [ - "Prusa Polymers", - "PLA", - "Prusament rPLA" - ] - ], - "Prusament rPLA @CORE One 0.8": [ - [ - "Prusa Polymers", - "PLA", - "Prusament rPLA" - ] - ], - "SMCFB001": [ - [ - "SeeMeCNC", - "ABS", - "SeeMeCNC ABS" - ] - ], - "SMCFG001": [ - [ - "SeeMeCNC", - "PETG", - "SeeMeCNC PETG" - ] - ], - "SMCFG002": [ - [ - "SeeMeCNC", - "PETG-CF", - "SeeMeCNC PETG-CF" - ] - ], - "SMCFL001": [ - [ - "SeeMeCNC", - "PLA", - "SeeMeCNC PLA" - ] - ], - "SMCFN001": [ - [ - "SeeMeCNC", - "PA-CF", - "SeeMeCNC PA-CF" - ] - ], - "SMCFU001": [ - [ - "SeeMeCNC", - "TPU", - "SeeMeCNC TPU" + "FLSun S1 ABS" ] ] } diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index d60377f51e..cfba38866c 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -153,6 +153,12 @@ class SyntheticTree: rc = afi.add_hints(pairs, self.profiles, self.retired) return rc, buf.getvalue() + def retire(self, pairs): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.retire_ids(pairs, self.profiles, self.retired) + return rc, buf.getvalue() + def make_clean_tree(): """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic.""" @@ -1049,6 +1055,65 @@ class TestAddHint(SyntheticTreeCase): self.assertIn('expects "OLD=NEW"', out) +class TestRetire(SyntheticTreeCase): + def test_retires_vanished_id_with_successor(self): + rc, out = self.t.retire(["OFOLD001=AX01"]) + self.assertEqual(rc, 0, out) + self.assertEqual(load_json_file(self.t.retired)["retired"]["OFOLD001"], + {"claims": [], "successor": "AX01"}) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_rejects_live_old(self): + rc, out = self.t.retire(["AX01=OGFL99"]) + self.assertEqual(rc, 1) + self.assertIn("still lives in the tree", out) + self.assertEqual(afi.load_ledger(self.t.retired)["retired"], {}) + + def test_rejects_declaration_only_old(self): + # The inert-fork case: an id declared by a claim-less root still lives + # in the tree; the declaration must be deleted before --retire. + self.t.write_preset("VendorA", preset("ZOLD @base", filament_id="ZDECL01", + instantiation=False, + filament_vendor="ZV", + filament_type="PLA")) + rc, out = self.t.retire(["ZDECL01=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("still lives in the tree", out) + + def test_rejects_island_space_old(self): + rc, out = self.t.retire(["GFXX99=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("reserved id space", out) + + def test_rejects_user_space_old(self): + rc, out = self.t.retire(["P1234ABC=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("reserved id space", out) + + def test_rejects_already_retired_old(self): + self.t.write_ledger(retired={"ROLD": {"claims": [], "successor": None}}) + rc, out = self.t.retire(["ROLD=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("already retired", out) + + def test_rejects_hinted_old(self): + self.t.write_ledger(hints={"HOLD": "AX01"}) + rc, out = self.t.retire(["HOLD=AX01"]) + self.assertEqual(rc, 1) + self.assertIn("hint key", out) + + def test_rejects_dead_successor(self): + rc, out = self.t.retire(["OFOLD001=OFnope99"]) + self.assertEqual(rc, 1) + self.assertIn("not a live tree id", out) + + def test_rejects_malformed_pair(self): + rc, out = self.t.retire(["OFOLD001"]) + self.assertEqual(rc, 1) + self.assertIn('expects "OLD=NEW"', out) + + # --------------------------------------------------------------------------- # default run: mint + insert # --------------------------------------------------------------------------- @@ -1261,6 +1326,21 @@ class TestRemint(SyntheticTreeCase): changed, errors, _out = self.t.remint(["VendorA"]) self.assertEqual((changed, errors), (0, 0)) + def test_salted_declaration_survives_remint(self): + # A deliberate salt split (a second preset of one product kept on its + # own id for per-printer AMS disambiguation) is mint-conformant and + # must not be converged back onto salt 0. + salt1 = afi.generate_filament_id(*self.TRIPLE, salt=1) + self.t.write_preset("VendorA", preset("APLA @legacy", + filament_id=salt1, + inherits="APLA @base", + compatible_printers=["P2 0.4 nozzle"])) + changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) # only the non-conformant AX01 root + legacy = load_json_file(self.t.preset_path("VendorA", "APLA @legacy")) + self.assertEqual(legacy["filament_id"], salt1) + def test_same_triple_converges_within_run(self): self.t.add_vendor("VendorB", [ preset("APLA @Bbase", filament_id="BX01", instantiation=False, From b280ab555cda4a2626e4465628a86511c2e53565 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 10:49:49 +0800 Subject: [PATCH 020/208] Initial Commit for Publish Settings workflow --- localization/i18n/list.txt | 2 + resources/images/menu_publish.svg | 1 + src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/PresetBundle.cpp | 288 ++++- src/libslic3r/PresetBundle.hpp | 23 +- src/libslic3r/PublishSettings.cpp | 105 ++ src/libslic3r/PublishSettings.hpp | 56 + src/slic3r/CMakeLists.txt | 4 + src/slic3r/GUI/ConfigValueFormatter.cpp | 245 ++++ src/slic3r/GUI/ConfigValueFormatter.hpp | 31 + src/slic3r/GUI/MainFrame.cpp | 20 + src/slic3r/GUI/Plater.cpp | 155 ++- src/slic3r/GUI/Plater.hpp | 4 + src/slic3r/GUI/PublishSettingsDialog.cpp | 1077 +++++++++++++++++ src/slic3r/GUI/PublishSettingsDialog.hpp | 183 +++ src/slic3r/GUI/Tab.cpp | 6 + src/slic3r/GUI/Tab.hpp | 3 +- src/slic3r/GUI/UnsavedChangesDialog.cpp | 223 +--- tests/libslic3r/test_3mf.cpp | 177 +++ .../libslic3r/test_preset_bundle_loading.cpp | 535 ++++++++ 20 files changed, 2897 insertions(+), 243 deletions(-) create mode 100644 resources/images/menu_publish.svg create mode 100644 src/libslic3r/PublishSettings.cpp create mode 100644 src/libslic3r/PublishSettings.hpp create mode 100644 src/slic3r/GUI/ConfigValueFormatter.cpp create mode 100644 src/slic3r/GUI/ConfigValueFormatter.hpp create mode 100644 src/slic3r/GUI/PublishSettingsDialog.cpp create mode 100644 src/slic3r/GUI/PublishSettingsDialog.hpp diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 1614bc453b..c36a3aba40 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -136,6 +136,7 @@ src/slic3r/GUI/BackgroundSlicingProcess.cpp src/slic3r/GUI/BedShapeDialog.cpp src/slic3r/GUI/BedShapeDialog.hpp src/slic3r/GUI/ConfigManipulation.cpp +src/slic3r/GUI/ConfigValueFormatter.cpp src/slic3r/GUI/DeviceManager.cpp src/slic3r/GUI/DeviceErrorDialog.cpp src/slic3r/GUI/ExtraRenderers.cpp @@ -175,6 +176,7 @@ src/slic3r/GUI/ProgressStatusBar.cpp src/slic3r/GUI/PlateSettingsDialog.cpp src/slic3r/GUI/PrivacyUpdateDialog.cpp src/slic3r/GUI/PublishDialog.cpp +src/slic3r/GUI/PublishSettingsDialog.cpp src/slic3r/GUI/SavePresetDialog.cpp src/slic3r/GUI/Search.cpp src/slic3r/GUI/Selection.cpp diff --git a/resources/images/menu_publish.svg b/resources/images/menu_publish.svg new file mode 100644 index 0000000000..e444623e33 --- /dev/null +++ b/resources/images/menu_publish.svg @@ -0,0 +1 @@ + diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 812d28e088..16bee2d70c 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -350,6 +350,8 @@ set(lisbslic3r_sources Preset.hpp PrincipalComponents2D.cpp PrincipalComponents2D.hpp + PublishSettings.cpp + PublishSettings.hpp PrintApply.cpp PrintBase.cpp PrintBase.hpp diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 01cbc43bc2..9e0fc61323 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3,6 +3,7 @@ #include "PresetBundle.hpp" #include "PrintConfig.hpp" +#include "PublishSettings.hpp" #include "libslic3r.h" #include "I18N.hpp" #include "Utils.hpp" @@ -11,7 +12,7 @@ #include "libslic3r_version.h" #include -#include +#include #include #include #include @@ -40,6 +41,8 @@ namespace Slic3r { +// Project-level options imported from a loaded 3MF into project_config. s_project_options_published +// below is the reduced subset that crosses over in "published" 3MF mode; keep both in sync. static std::vector s_project_options { "flush_volumes_vector", "flush_volumes_matrix", @@ -71,6 +74,24 @@ static std::vector s_project_options { "enable_filament_dynamic_map" }; +// Project options applied when loading a "published" 3MF project: the full s_project_options +// minus the filament/purge keys. A published file must not port the author's filament data +// (colors, colour types, filament/map/AMS slot state, purge/prime/flush volumes, nozzle +// volume types, filament switcher state) to the receiver's project_config, which feeds the +// scene colors, AMS slot colors and purge data. Only the plate/bed geometry keys cross over; +// normal (non-published) 3MF loads keep importing the author's flush data via s_project_options. +// +// KEEP IN SYNC with s_project_options above: when a new project option is added there, decide +// here whether it is plate/bed geometry (add it to this list) or filament/purge/mapping/device +// state (it must NOT be added). curr_bed_type is deliberately NOT in this list: the receiver +// keeps its own bed type when loading a published project. The published-mode project_config +// assertions in tests/libslic3r/test_preset_bundle_loading.cpp guard both directions. +static std::vector s_project_options_published { + "wipe_tower_x", + "wipe_tower_y", + "wipe_tower_rotation_angle" +}; + //Orca: add custom as default const char *PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom"; const char *PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; @@ -4426,10 +4447,14 @@ static void convert_filament_preset_name(std::string& machine_name, std::string& } // Load a config file from a boost property_tree. This is a private method called from load_config_file. // is_external == false on if called from ConfigWizard -void PresetBundle::load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version, bool selected) +void PresetBundle::load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version, bool selected, PublishedConfig *published_config) { PrinterTechnology printer_technology = Preset::printer_technology(config); + // A "published" 3MF project keeps the user's currently-selected presets and overlays only + // the author-selected published keys onto the edited presets. + const bool is_published = published_config != nullptr && published_config->published; + auto clear_compatible_printers = [](DynamicPrintConfig& config){ ConfigOption *opt_compatible = config.optptr("compatible_printers"); if (opt_compatible != nullptr) { @@ -4570,6 +4595,10 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool switch (Preset::printer_technology(config)) { case ptFFF: { + // A "published" 3MF project keeps the user's currently-selected presets, so the + // print / printer / filament presets are NOT loaded from the file. Only the + // project config values and the published keys are applied below. + if (!is_published) { //BBS: add different settings logic BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id"); std::vector print_different_keys_vector; @@ -4722,9 +4751,12 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool this->filament_presets[i] = loaded->name; } } + } // !is_published // 4) Load the project config values (the per extruder wipe matrix etc). - this->project_config.apply_only(config, s_project_options); + // In published mode the receiver must not inherit the author's filament/purge data, + // so only the plate/bed geometry project keys are applied. + this->project_config.apply_only(config, is_published ? s_project_options_published : s_project_options); break; } @@ -4743,9 +4775,258 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool this->update_compatible(PresetSelectCompatibleType::Never); this->update_multi_material_filament_presets(); + // A "published" 3MF project overlays only the author-selected published keys onto the + // user's currently-selected (edited) process preset. Scalar keys are applied directly; + // vector (multi-extruder) keys are applied only when the edited preset has a matching + // vector size. Keys that cannot be applied are collected for notification; legacy + // filament/printer keys in a published file fall through into skipped_keys. + if (is_published) { + std::vector skipped_keys; + std::set applied_keys; + // Structural keys must never be applied to the user's presets: doing so would + // rewrite their preset inheritance/structure. This is the single source of truth + // shared with PublishSettingsDialog.cpp (publish_structural_keys in + // PublishSettings.hpp). Defense-in-depth: a hand-crafted 3MF could set + // published_keys to these regardless of the dialog, so skip them here too. + const std::set &structural_keys = publish_structural_keys(); + // The printer overlay is restricted to the publishable retraction/z-hop allowlist. + // Printer-class keys outside it are contract-excluded: never applied and never + // reported as skipped (a hand-crafted 3MF listing machine_start_gcode or + // nozzle_diameter must not apply them and must not spam the warning). + const std::set &printer_allowlist = publishable_printer_keys(); + const std::vector &printer_options = Preset::printer_options(); + const std::set printer_option_set(printer_options.begin(), printer_options.end()); + std::set contract_excluded_keys; + auto apply_published = [&](DynamicPrintConfig &target, const std::set *allowlist) { + for (const std::string &key : published_config->published_keys) { + if (applied_keys.count(key) != 0) + continue; // already applied + // A '#' suffix denotes a variant (per-extruder/per-filament) key; resolve the base key. + const std::string base_key = key.substr(0, key.find('#')); + // Structural keys are intentionally never applied (not "skipped due to + // mismatch"), so bail out before the applied/skipped bookkeeping. + if (structural_keys.count(base_key) != 0) + continue; + if (allowlist != nullptr && + printer_option_set.count(base_key) != 0 && + allowlist->count(base_key) == 0) { + // Printer-class key outside the publishable allowlist: contract-excluded. + contract_excluded_keys.insert(base_key); + continue; + } + const ConfigOption *src_opt = config.option(base_key); + if (src_opt == nullptr) + continue; // key not present in the loaded config; record later + if (src_opt->is_vector()) { + // Vector key: apply only when the edited preset has a matching vector size. + const ConfigOption *dst_opt = target.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector() || + static_cast(src_opt)->size() != static_cast(dst_opt)->size()) + continue; // cannot apply; will be reported as skipped + // A '#' variant index must be in range: ConfigOptionVector::set_at would + // otherwise resize the destination vector, corrupting the receiver's preset. + if (key.size() > base_key.size()) { + const size_t idx = static_cast(std::atoi(key.c_str() + base_key.size() + 1)); + if (idx >= static_cast(src_opt)->size()) + continue; // out-of-range variant: cannot apply; reported as skipped + } + target.apply_only(config, {key}, true); + applied_keys.insert(key); + } else { + // A scalar key cannot carry a '#N' variant suffix; a hand-crafted file + // listing one is reported as skipped instead of being silently marked applied. + if (key.find('#') != std::string::npos) + continue; + // Scalar key: apply only if present on the user's machine. + if (target.option(base_key) == nullptr) + continue; // not present on the edited preset; will be reported as skipped + target.apply_only(config, {key}, true); + applied_keys.insert(key); + } + } + }; + apply_published(this->prints.get_edited_preset().config, nullptr); + apply_published(this->printers.get_edited_preset().config, &printer_allowlist); + + // Material pass: apply the author's material-qualified keys onto the receiver's + // matching filament presets. The file config carries the author's per-slot identity + // (filament_type / filament_vendor remain in config; filament_ids was moved into a + // local earlier) and the per-slot material retraction values. + if (!published_config->material_keys.empty()) { + const ConfigOptionStrings *file_types = config.option("filament_type"); + const ConfigOptionStrings *file_vendors = config.option("filament_vendor"); + auto identity_matches = [](const std::string &id, const std::string &type, const std::string &vendor, + const std::string &slot_id, const std::string &slot_type, const std::string &slot_vendor) { + // When both sides carry a filament_id, equality is required; otherwise fall + // back to filament_type, with filament_vendor as an additional qualifier only + // when both sides have a non-empty vendor. + if (!id.empty() && !slot_id.empty()) + return id == slot_id; + if (type.empty() || type != slot_type) + return false; + if (!vendor.empty() && !slot_vendor.empty()) + return vendor == slot_vendor; + return true; + }; + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + // Resolve the author's source slot and its ordinal among the author slots + // carrying this entry's identity. A slotted entry (slot >= 0) names the exact + // author slot and targets the receiver's Nth matching preset (N = ordinal); + // a legacy entry (slot -1) uses the first matching author slot and applies to + // every matching receiver preset. + auto slot_identity = [&filament_ids, file_types, file_vendors](size_t slot, std::string &id, std::string &type, std::string &vendor) { + id = (slot < filament_ids.size()) ? filament_ids[slot] : std::string(); + type = (file_types && slot < file_types->size()) ? file_types->get_at(slot) : std::string(); + vendor = (file_vendors && slot < file_vendors->size()) ? file_vendors->get_at(slot) : std::string(); + }; + bool author_found = false; + size_t author_slot = 0; + size_t author_ordinal = 0; + if (entry.slot >= 0) { + // Collect every author slot carrying this identity, in slot order; the + // entry's slot must be among them, and its position is the ordinal used + // to pick the receiver's matching preset. + std::vector matching_author_slots; + for (size_t slot = 0; slot < filament_ids.size(); ++slot) { + std::string slot_id, slot_type, slot_vendor; + slot_identity(slot, slot_id, slot_type, slot_vendor); + if (identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, + slot_id, slot_type, slot_vendor)) + matching_author_slots.emplace_back(slot); + } + const auto ordinal_it = std::find(matching_author_slots.begin(), matching_author_slots.end(), size_t(entry.slot)); + if (ordinal_it != matching_author_slots.end()) { + author_slot = size_t(entry.slot); + author_ordinal = size_t(ordinal_it - matching_author_slots.begin()); + author_found = true; + } + // Out of range, or the slot does not carry this identity: silent skip below. + } else { + // Legacy: the first author slot whose identity matches. + for (size_t slot = 0; slot < filament_ids.size(); ++slot) { + std::string slot_id, slot_type, slot_vendor; + slot_identity(slot, slot_id, slot_type, slot_vendor); + if (identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, + slot_id, slot_type, slot_vendor)) { + author_slot = slot; + author_found = true; + break; + } + } + } + if (!author_found) + // No author slot carries this material: nothing to apply, nothing to report. + continue; + + const std::string material_label = entry.filament_id.empty() ? entry.filament_type : entry.filament_id; + auto report_skipped = [&skipped_keys, &material_label](const std::string &key, const std::string &slot_qualifier = std::string()) { + skipped_keys.emplace_back("material:" + material_label + + (slot_qualifier.empty() ? std::string() : " " + slot_qualifier) + + " (" + key + ")"); + }; + + // Collect the receiver's matching filament presets (distinct by preset name). + std::vector matched_preset_names; + std::set fallback_matched_names; + for (const std::string &preset_name : this->filament_presets) { + Preset *preset = this->filaments.find_preset(preset_name); + if (preset == nullptr) + continue; + const std::string slot_id = preset->filament_id; + // Null-guard the identity reads: a malformed user preset may lack + // filament_type / filament_vendor entirely (hand-edited preset file). + const ConfigOptionStrings *slot_types = preset->config.option("filament_type"); + const ConfigOptionStrings *slot_vendors = preset->config.option("filament_vendor"); + const std::string slot_type = (slot_types && !slot_types->values.empty()) ? slot_types->get_at(0) : std::string(); + const std::string slot_vendor = (slot_vendors && !slot_vendors->values.empty()) ? slot_vendors->get_at(0) : std::string(); + if (!identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, + slot_id, slot_type, slot_vendor)) + continue; + if (std::find(matched_preset_names.begin(), matched_preset_names.end(), preset_name) == matched_preset_names.end()) + matched_preset_names.emplace_back(preset_name); + if (entry.filament_id.empty() || slot_id.empty()) + fallback_matched_names.insert(preset_name); + } + if (matched_preset_names.empty()) { + // No receiver material matches this entry: report each key as skipped. + for (const std::string &key : entry.keys) + report_skipped(key); + continue; + } + if (fallback_matched_names.size() > 1) { + // The type fallback matched more than one distinct receiver preset: never + // guess which one the author meant. + for (const std::string &key : entry.keys) + report_skipped(key); + continue; + } + + // Slotted entries target the receiver's matching preset at the author's + // ordinal; legacy entries apply to every matching receiver preset. + std::vector apply_to_preset_names; + if (entry.slot >= 0) { + if (author_ordinal >= matched_preset_names.size()) { + // The receiver has fewer matching presets than the author's ordinal: + // this slot's values cannot be placed, report each key. + const std::string slot_qualifier = "slot " + std::to_string(entry.slot); + for (const std::string &key : entry.keys) + report_skipped(key, slot_qualifier); + continue; + } + apply_to_preset_names.emplace_back(matched_preset_names[author_ordinal]); + } else { + apply_to_preset_names = matched_preset_names; + } + + for (const std::string &key : entry.keys) { + const std::string base_key = key.substr(0, key.find('#')); + if (structural_keys.count(base_key) != 0) + continue; // structural: silent + const ConfigOption *src_opt = config.option(base_key); + if (src_opt == nullptr || !src_opt->is_vector() || + author_slot >= static_cast(src_opt)->size()) { + report_skipped(key); + continue; + } + for (const std::string &preset_name : apply_to_preset_names) { + Preset *preset = this->filaments.find_preset(preset_name); + if (preset == nullptr) + continue; + ConfigOption *dst_opt = preset->config.option(base_key); + // Per-slot scalar copy: the receiver's filament preset holds a single + // value per key (vector of size 1), the file holds the per-slot vector. + if (dst_opt == nullptr || !dst_opt->is_vector() || + static_cast(dst_opt)->empty() || + dst_opt->type() != src_opt->type()) { + report_skipped(key); + continue; + } + static_cast(dst_opt)->set_at(src_opt, 0, author_slot); + } + } + } + } + + for (const std::string &key : published_config->published_keys) { + if (applied_keys.count(key) != 0) + continue; + const std::string base_key = key.substr(0, key.find('#')); + // Structural keys are silently ignored, never reported as skipped: a hand-crafted + // 3MF must not trigger the "could not be applied" warning for them. + if (structural_keys.count(base_key) != 0) + continue; + // Printer-class keys outside the publishable allowlist are contract-excluded too. + if (contract_excluded_keys.count(base_key) != 0) + continue; + skipped_keys.emplace_back(key); + } + published_config->skipped_keys = std::move(skipped_keys); + } + //BBS //const std::string &physical_printer = config.option("physical_printer_settings_id", true)->value; const std::string physical_printer; + if (!is_published) { if (this->printers.get_edited_preset().is_external || physical_printer.empty()) { this->physical_printers.unselect_printer(); } else { @@ -4756,6 +5037,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool else this->physical_printers.unselect_printer(); } + } //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished"); } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 685687975b..c8af2e4b71 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -3,6 +3,7 @@ #include "Preset.hpp" #include "AppConfig.hpp" +#include "PublishSettings.hpp" #include "enum_bitmask.hpp" #include @@ -166,6 +167,22 @@ struct PresetBundleMetadata } }; +// Configuration describing a "published" 3MF project: the file carries a flag plus a list of +// author-selected setting keys. When loading such a project the user's currently-selected +// presets are kept and only the published keys are overlaid onto the edited presets. +struct PublishedConfig +{ + bool published = false; + std::vector published_keys; + // Material-qualified published keys chosen by the author for the materials used in the + // project; applied on load only to the receiver's filament presets whose material + // identity matches (see PublishedMaterialEntry in PublishSettings.hpp). + std::vector material_keys; + // Keys that could not be applied (missing on the user's machine or vector size mismatch), + // filled in by load_config_file_config for notification purposes. + std::vector skipped_keys; +}; + // Bundle of Print + Filament + Printer presets. class PresetBundle { @@ -414,8 +431,8 @@ public: // Load configuration that comes from a model file containing configuration, such as 3MF et al. // This method is called by the Plater. - void load_config_model(const std::string &name, DynamicPrintConfig config, Semver file_version = Semver()) - { this->load_config_file_config(name, true, std::move(config), file_version); } + void load_config_model(const std::string &name, DynamicPrintConfig config, Semver file_version = Semver(), PublishedConfig *published_config = nullptr) + { this->load_config_file_config(name, true, std::move(config), file_version, false, published_config); } // Load an external config file containing the print, filament and printer presets. // Instead of a config file, a G-code may be loaded containing the full set of parameters. @@ -544,7 +561,7 @@ private: // Load print, filament & printer presets from a config. If it is an external config, then the name is extracted from the external path. // and the external config is just referenced, not stored into user profile directory. // If it is not an external config, then the config will be stored into the user profile directory. - void load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version = Semver(), bool selected = false); + void load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version = Semver(), bool selected = false, PublishedConfig *published_config = nullptr); /*ConfigSubstitutions load_config_file_config_bundle( const std::string &path, const boost::property_tree::ptree &tree, ForwardCompatibilitySubstitutionRule compatibility_rule);*/ diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp new file mode 100644 index 0000000000..4c0a851696 --- /dev/null +++ b/src/libslic3r/PublishSettings.cpp @@ -0,0 +1,105 @@ +#include "PublishSettings.hpp" + +#include "PresetBundle.hpp" +#include "Preset.hpp" + +#include + +namespace Slic3r { + +const std::set& publish_structural_keys() +{ + // Structural / non-publishable keys. The *_settings_id keys are also part of + // PresetCollection::skipped_in_dirty (Preset.cpp) and are excluded there too. + // This mirrors the structural keys stripped from configs in Preset.cpp + // (profile_print_params_same) plus other keys that must never be published + // because they would rewrite the user's preset inheritance/structure. + static const std::set structural_keys = { + "printer_settings_id", "filament_settings_id", "print_settings_id", + "sla_print_settings_id", "sla_material_settings_id", + "compatible_printers", "compatible_prints", + "compatible_printers_condition", "compatible_prints_condition", + "default_filament_profile", "default_print_profile", + "default_sla_print_profile", "default_sla_material_profile", + "extruder_count", "bed_shape", + "inherits", "inherits_group", + "printer_technology", "printer_model", "printer_variant", + "physical_printer_settings_id", "filament_ids", + "different_settings_to_system" + }; + return structural_keys; +} + +// The printer tab's "Retraction" optgroup (TabPrinter::build_fff, Tab.cpp), in tab order. +// KEEP IN SYNC with that optgroup: the published-3MF printer allowlist is built from these +// lists, so any key shown there must be publishable here (and vice versa). +const std::vector& publishable_printer_retraction_options() +{ + static const std::vector options = { + { "retraction_length", "printer_extruder_retraction#length" }, + { "retract_restart_extra", "printer_extruder_retraction#extra-length-on-restart" }, + { "retraction_speed", "printer_extruder_retraction#retraction-speed" }, + { "deretraction_speed", "printer_extruder_retraction#deretraction-speed" }, + { "retraction_minimum_travel", "printer_extruder_retraction#travel-distance-threshold" }, + { "retract_when_changing_layer", "printer_extruder_retraction#retract-on-layer-change" }, + { "wipe", "printer_extruder_retraction#wipe-while-retracting" }, + { "wipe_distance", "printer_extruder_retraction#wipe-distance" }, + { "retract_before_wipe", "printer_extruder_retraction#retract-amount-before-wipe" }, + { "retract_after_wipe", "printer_extruder_retraction#retract-amount-after-wipe" }, + }; + return options; +} + +// The printer tab's "Z-Hop" optgroup (TabPrinter::build_fff, Tab.cpp), in tab order. KEEP IN +// SYNC with that optgroup, same as publishable_printer_retraction_options(). +const std::vector& publishable_printer_z_hop_options() +{ + static const std::vector options = { + { "retract_lift_enforce", "printer_extruder_z_hop#on-surfaces" }, + { "z_hop_types", "printer_extruder_z_hop#z-hop-type" }, + { "z_hop", "printer_extruder_z_hop#z-hop-height" }, + { "travel_slope", "printer_extruder_z_hop#traveling-angle" }, + { "retract_lift_above", "printer_extruder_z_hop#only-lift-z-above" }, + { "retract_lift_below", "printer_extruder_z_hop#only-lift-z-below" }, + }; + return options; +} + +const std::set& publishable_printer_keys() +{ + // The union of the printer tab's "Retraction" and "Z-Hop" optgroups. The "Retraction when + // switching material" keys are intentionally excluded: toolchange retraction is + // device/profile territory, not a publishable behavior tweak. + static const std::set printer_keys = [] { + std::set keys; + for (const PublishablePrinterOption &opt : publishable_printer_retraction_options()) + keys.insert(opt.key); + for (const PublishablePrinterOption &opt : publishable_printer_z_hop_options()) + keys.insert(opt.key); + return keys; + }(); + return printer_keys; +} + +std::vector collect_dirty_settings_keys(const PresetBundle& bundle) +{ + std::vector keys; + + auto append_dirty = [&keys](const std::vector& dirty) { + for (const std::string& key : dirty) { + if (std::find(keys.begin(), keys.end(), key) == keys.end()) + keys.push_back(key); + } + }; + + // Print and printer presets each track a single edited preset; filaments may span + // multiple slots (multi-material). Union the dirty keys of each collection's edited + // preset; this feeds only the Publish dialog's pre-check. + append_dirty(bundle.prints.current_dirty_options(true)); + append_dirty(bundle.printers.current_dirty_options(true)); + append_dirty(bundle.filaments.current_dirty_options(true)); + + return keys; +} + +} // namespace Slic3r diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp new file mode 100644 index 0000000000..ecc939d883 --- /dev/null +++ b/src/libslic3r/PublishSettings.hpp @@ -0,0 +1,56 @@ +#pragma once +#include +#include +#include + +namespace Slic3r { +class PresetBundle; + +// Structural / non-publishable setting keys, shared by the Publish dialog and the published-3MF +// overlay path in PresetBundle::load_config_file_config. These keys must never be published +// because they would rewrite the user's preset inheritance/structure. This is the single +// source of truth for the denylist. +const std::set& publish_structural_keys(); + +// One option row of the printer tab's "Retraction" / "Z-Hop" optgroups (TabPrinter::build_fff, +// Tab.cpp). Key and icon id are kept together so the tab can later be migrated onto these +// lists; publishable_printer_keys() is their union, and the published-3MF loader/dialog must +// never accept printer keys outside it. +struct PublishablePrinterOption { + const char *key; // config key, e.g. "retraction_length" + const char *icon; // tab icon id, e.g. "printer_extruder_retraction#length" +}; + +// The printer tab's "Retraction" optgroup options, in tab order. +const std::vector& publishable_printer_retraction_options(); +// The printer tab's "Z-Hop" optgroup options, in tab order. +const std::vector& publishable_printer_z_hop_options(); + +// Printer-class retraction / z-hop keys that are publishable: the union of +// publishable_printer_retraction_options() and publishable_printer_z_hop_options(). The +// published-3MF overlay applies printer keys only when their base key is in this allowlist; +// any other printer-class key in a published file is contract-excluded (never applied, never +// reported as skipped). +const std::set& publishable_printer_keys(); + +// Returns the union of setting keys that differ from the base/system preset across the current +// print, printer and filament presets (feeds the Publish dialog's pre-check). +std::vector collect_dirty_settings_keys(const PresetBundle& bundle); + +// A material-qualified set of published setting keys, chosen by the author for one of the +// materials used in the project. The identity fields let the receiver apply the keys only +// when a matching material is selected: filament_id is the most precise (stable across +// machines/vendors when present, empty for user presets); filament_type + filament_vendor +// are the fallback. Keys are base keys (no "#N" variant suffix). +struct PublishedMaterialEntry { + std::string filament_type; // material family, e.g. "PLA" (may be empty) + std::string filament_vendor; // e.g. "Generic", "Bambu" (may be empty) + std::string filament_id; // stable material id, e.g. "GFL99" (may be empty) + // 0-based author filament slot this entry's values came from; -1 = legacy/unspecified + // (files written before the slot field). Slotted entries apply to the receiver's Nth + // matching preset (N = the slot's ordinal among the author's matching slots); legacy + // entries apply to every matching receiver preset. + int slot{-1}; + std::vector keys; +}; +} diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index b98396f943..4d103ff749 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -93,6 +93,8 @@ set(SLIC3R_GUI_SOURCES GUI/CloneDialog.hpp GUI/ConfigManipulation.cpp GUI/ConfigManipulation.hpp + GUI/ConfigValueFormatter.cpp + GUI/ConfigValueFormatter.hpp GUI/ConfigWizard.cpp GUI/ConfigWizard.hpp GUI/ConfigWizard_private.hpp @@ -437,6 +439,8 @@ set(SLIC3R_GUI_SOURCES GUI/Project.hpp GUI/PublishDialog.cpp GUI/PublishDialog.hpp + GUI/PublishSettingsDialog.cpp + GUI/PublishSettingsDialog.hpp GUI/PurgeModeDialog.cpp GUI/PurgeModeDialog.hpp GUI/RammingChart.cpp diff --git a/src/slic3r/GUI/ConfigValueFormatter.cpp b/src/slic3r/GUI/ConfigValueFormatter.cpp new file mode 100644 index 0000000000..f3ea539d4f --- /dev/null +++ b/src/slic3r/GUI/ConfigValueFormatter.cpp @@ -0,0 +1,245 @@ +#include "ConfigValueFormatter.hpp" + +#include +#include +#include +#include + +#include +#include + +#include "libslic3r/Config.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include "I18N.hpp" +#include "GUI.hpp" +#include "Field.hpp" + +namespace Slic3r { +namespace GUI { + +std::string get_pure_opt_key(const std::string& opt_key) +{ + std::string pure_key = opt_key; + const int pos = pure_key.find("#"); + if (pos > 0) + boost::erase_tail(pure_key, pure_key.size() - pos); + return pure_key; +} + +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill, int idx) +{ + const ConfigOptionDef& def = config.def()->options.at(opt_key); + const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); + int val = 0; + + if (idx >= 0) + val = dynamic_cast(config.option(opt_key))->get_at(idx); + else + val = config.option(opt_key)->getInt(); + + // Each infill doesn't use all list of infill declared in PrintConfig.hpp. + // So we should "convert" val to the correct one + if (is_infill) { + for (auto key_val : *def.enum_keys_map) + if (int(key_val.second) == val) { + auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); + if (it == def.enum_values.end()) + return ""; + return from_u8(_utf8(names[it - def.enum_values.begin()])); + } + return _L("Undefined"); + } + return from_u8(_utf8(names[val])); +} + +wxString get_full_label(const std::string& opt_key, const DynamicPrintConfig& config) +{ + const std::string pure_key = get_pure_opt_key(opt_key); + auto option = config.option(pure_key); + + if (!option || option->is_nil()) + return _L("N/A"); + + const ConfigOptionDef* opt = config.def()->get(pure_key); + return opt->full_label.empty() ? opt->label : opt->full_label; +} + +wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config) +{ + int orig_opt_idx = -1; + int opt_idx = -1; + int pos = opt_key.find("#"); + std::string temp_str = opt_key; + if (pos > 0) { + boost::erase_head(temp_str, pos + 1); + orig_opt_idx = static_cast(atoi(temp_str.c_str())); + } + opt_idx = orig_opt_idx >= 0 ? orig_opt_idx : 0; + const std::string pure_key = get_pure_opt_key(opt_key); + auto option = config.option(pure_key); + if (!option) { + return _L("N/A"); + } + auto opt_vector = dynamic_cast(option); + + if (option->is_scalar() && config.option(pure_key)->is_nil() || + option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx)) + return _L("N/A"); + + wxString out; + + const ConfigOptionDef* opt = config.def()->get(pure_key); + bool is_nullable = opt->nullable; + + switch (opt->type) { + case coInt: + return from_u8((boost::format("%1%") % config.opt_int(pure_key)).str()); + case coInts: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); + } + else { + auto values = config.opt(pure_key); + if (orig_opt_idx >= 0 && orig_opt_idx < values->size()) { + return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); + } + else { + std::string value_str; + for (int i = 0; i < values->size(); i++) { + value_str += std::to_string(values->get_at(i)); + if (i != values->size() - 1) { + value_str += ","; + } + } + return from_u8(value_str); + } + } + return _L("Undefined"); + } + case coBool: + return config.opt_bool(pure_key) ? "true" : "false"; + case coBools: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return values->get_at(opt_idx) ? "true" : "false"; + } + else { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return values->get_at(opt_idx) ? "true" : "false"; + } + return _L("Undefined"); + } + case coPercent: + return from_u8((boost::format("%1%%%") % int(config.optptr(pure_key)->getFloat())).str()); + case coPercents: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); + } + else { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); + } + return _L("Undefined"); + } + case coFloat: + return double_to_string(config.opt_float(pure_key)); + case coFloats: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return double_to_string(values->get_at(opt_idx)); + } + else { + auto values = config.opt(pure_key); + if (values && opt_idx < values->size()) + return double_to_string(values->get_at(opt_idx)); + } + return _L("Undefined"); + } + case coString: + return from_u8(config.opt_string(pure_key)); + case coStrings: { + const ConfigOptionStrings* strings = config.opt(pure_key); + if (strings) { + if (pure_key == "compatible_printers" || pure_key == "compatible_prints") { + if (strings->empty()) + return _L("All"); + for (size_t id = 0; id < strings->size(); id++) + out += from_u8(strings->get_at(id)) + "\n"; + out.RemoveLast(1); + return out; + } + if (!strings->empty() && opt_idx < strings->values.size()) + return from_u8(strings->get_at(opt_idx)); + } + break; + } + case coFloatOrPercent: { + const ConfigOptionFloatOrPercent* opt = config.opt(pure_key); + if (opt) + out = double_to_string(opt->value) + (opt->percent ? "%" : ""); + return out; + } + case coEnum: { + return get_string_from_enum(pure_key, config, + pure_key == "top_surface_pattern" || + pure_key == "bottom_surface_pattern" || + pure_key == "internal_solid_infill_pattern" || + pure_key == "sparse_infill_pattern" || + pure_key == "ironing_pattern" || + pure_key == "support_ironing_pattern" || + pure_key == "support_pattern" || + pure_key == "support_interface_pattern") + ; + } + case coEnums: { + return get_string_from_enum(pure_key, config, + pure_key == "top_surface_pattern" || + pure_key == "bottom_surface_pattern" || + pure_key == "internal_solid_infill_pattern" || + pure_key == "sparse_infill_pattern" || + pure_key == "ironing_pattern" || + pure_key == "support_ironing_pattern" || + pure_key == "support_pattern" || + pure_key == "support_interface_pattern" + , opt_idx); + } + case coPoint: { + Vec2d val = config.opt(pure_key)->value; + return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); + } + case coPoints: { + //BBS: add bed_exclude_area + if (pure_key == "printable_area" || pure_key == "thumbnails") { + ConfigOptionPoints points = *config.option(pure_key); + //BuildVolume build_volume = {points.values, 0.}; + return get_thumbnails_string(points.values); + } + else if (pure_key == "bed_exclude_area") { + return get_thumbnails_string(config.option(pure_key)->values); + } + else if (pure_key == "head_wrap_detect_zone") { + return get_thumbnails_string(config.option(pure_key)->values); + } + else if (pure_key == "wrapping_exclude_area") { + return get_thumbnails_string(config.option(pure_key)->values); + } + Vec2d val = config.opt(pure_key)->get_at(opt_idx); + return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); + } + default: + break; + } + return out; +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/ConfigValueFormatter.hpp b/src/slic3r/GUI/ConfigValueFormatter.hpp new file mode 100644 index 0000000000..e7ed549930 --- /dev/null +++ b/src/slic3r/GUI/ConfigValueFormatter.hpp @@ -0,0 +1,31 @@ +#ifndef slic3r_ConfigValueFormatter_hpp_ +#define slic3r_ConfigValueFormatter_hpp_ + +#include + +#include + +namespace Slic3r { + +class DynamicPrintConfig; + +namespace GUI { + +// Return the value of the given option (identified by opt_key, which may contain +// a "#" suffix) formatted as a human readable string. +wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config); + +// Return the full label of the given option (identified by opt_key, which may contain +// a "#" suffix). Returns "N/A" when the option is not set. +wxString get_full_label(const std::string& opt_key, const DynamicPrintConfig& config); + +// Strip the "#" suffix (if any) from the given option key. +std::string get_pure_opt_key(const std::string& opt_key); + +// Return the localized label of the currently selected value of an enum option. +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false, int idx = -1); + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_ConfigValueFormatter_hpp_ diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5ef81a32e1..6aa7932c84 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -54,6 +54,7 @@ #include "GUI_App.hpp" #include "UnsavedChangesDialog.hpp" +#include "PublishSettingsDialog.hpp" #include "MsgDialog.hpp" #include "Notebook.hpp" #include "GUI_Factories.hpp" @@ -2821,6 +2822,25 @@ void MainFrame::init_menubar_as_editor() [this](){return m_plater != nullptr && can_save_as(); }, this); #endif + // BBS: publish settings + fileMenu->AppendSeparator(); + auto publish_handler = [this](wxCommandEvent&) { + if (!m_plater) return; + PublishSettingsDialog dlg(this); + if (dlg.ShowModal() != wxID_OK) return; + m_plater->export_published_3mf(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); + }; + +#ifndef __APPLE__ + append_menu_item(fileMenu, wxID_ANY, _L("Publish Settings") + dots, _L("Export a 3MF file with the selected settings embedded"), + publish_handler, "menu_publish", nullptr, + [this](){return can_export_model(); }, this); +#else + append_menu_item(fileMenu, wxID_ANY, _L("Publish Settings") + dots, _L("Export a 3MF file with the selected settings embedded"), + publish_handler, "", nullptr, + [this](){return can_export_model(); }, this); +#endif + fileMenu->AppendSeparator(); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8299125353..847d98f398 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1,12 +1,10 @@ #include "Plater.hpp" #include "../Utils/NetworkAgent.hpp" -#include "../Utils/NetworkAgentFactory.hpp" #include "libslic3r/Config.hpp" #include "libslic3r_version.h" #include #include -#include #include #include #include @@ -16,8 +14,6 @@ #include #include #include -#include -#include #include #include #include @@ -69,7 +65,6 @@ #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Model.hpp" -#include "libslic3r/SLA/Hollowing.hpp" #include "libslic3r/SLA/SupportPoint.hpp" #include "libslic3r/SLA/ReprojectPointsOnMesh.hpp" #include "libslic3r/Polygon.hpp" @@ -78,16 +73,15 @@ #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PublishSettings.hpp" #include "slic3r/Utils/CrealityPrint.hpp" #include "libslic3r/ClipperUtils.hpp" -#include "libslic3r/ObjColorUtils.hpp" // For stl export #include "libslic3r/CSGMesh/ModelToCSGMesh.hpp" #include "libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp" #include "GUI.hpp" #include "GUI_App.hpp" -#include "GuiColor.hpp" #include "GUI_ObjectList.hpp" #ifdef __WXGTK__ #include "LinuxDisplayBackend.hpp" @@ -123,7 +117,6 @@ #include "SendMultiMachinePage.hpp" #include "SendToPrinter.hpp" #include "PublishDialog.hpp" -#include "ModelMall.hpp" #include "ConfigWizard.hpp" #include "SyncAmsInfoDialog.hpp" #include "../Utils/ASCIIFolding.hpp" @@ -149,7 +142,6 @@ #include "ParamsDialog.hpp" #include "ImageDPIFrame.hpp" #include "Widgets/Label.hpp" -#include "Widgets/RoundedRectangle.hpp" #include "Widgets/RadioGroup.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/Button.hpp" @@ -5459,7 +5451,7 @@ struct Plater::priv std::vector load_model_objects(const ModelObjectPtrs& model_objects, bool allow_negative_z = false, bool split_object = false, bool auto_drop = true); fs::path get_export_file_path(GUI::FileType file_type); - wxString get_export_file(GUI::FileType file_type); + wxString get_export_file(GUI::FileType file_type, const wxString& title = {}); // BBS void load_auxiliary_files(); @@ -7214,6 +7206,64 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } + // BBS: a "published" 3MF project carries a flag plus a list of author-selected + // setting keys. When present, keep the user's currently-selected presets and + // overlay only the published keys onto the edited presets on load. + PublishedConfig published_config; + if (model.model_info != nullptr) { + auto published_it = model.model_info->metadata_items.find("published"); + if (published_it != model.model_info->metadata_items.end() && + (published_it->second == "true" || published_it->second == "1")) { + published_config.published = true; + auto keys_it = model.model_info->metadata_items.find("published_keys"); + if (keys_it != model.model_info->metadata_items.end()) { + try { + auto j = nlohmann::json::parse(keys_it->second); + if (j.is_array()) + for (const auto &k : j) + if (k.is_string()) + published_config.published_keys.emplace_back(k.get()); + } catch (...) { + // Ignore malformed published_keys; the project still loads normally. + } + } + + auto material_keys_it = model.model_info->metadata_items.find("published_material_keys"); + if (material_keys_it != model.model_info->metadata_items.end()) { + try { + auto jm = nlohmann::json::parse(material_keys_it->second); + if (jm.is_array()) + for (const auto &m : jm) { + // Malformed entries are skipped individually. + if (!m.is_object()) + continue; + PublishedMaterialEntry entry; + const auto mat_it = m.find("material"); + if (mat_it != m.end() && mat_it->is_object()) { + const auto &mat = *mat_it; + if (mat.contains("filament_type") && mat["filament_type"].is_string()) + entry.filament_type = mat["filament_type"].get(); + if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) + entry.filament_vendor = mat["filament_vendor"].get(); + if (mat.contains("filament_id") && mat["filament_id"].is_string()) + entry.filament_id = mat["filament_id"].get(); + } + if (m.contains("slot") && m["slot"].is_number_integer()) + entry.slot = m["slot"].get(); + const auto entry_keys_it = m.find("keys"); + if (entry_keys_it != m.end() && entry_keys_it->is_array()) + for (const auto &k : *entry_keys_it) + if (k.is_string()) + entry.keys.emplace_back(k.get()); + published_config.material_keys.emplace_back(std::move(entry)); + } + } catch (...) { + // Ignore malformed published_material_keys; the project still loads normally. + } + } + } + } + if (load_config) { if (!config.empty()) { Preset::normalize(config); @@ -7317,7 +7367,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (wipe_tower_y_opt) file_wipe_tower_y = *wipe_tower_y_opt; - preset_bundle->load_config_model(filename.string(), std::move(config), file_version); + preset_bundle->load_config_model(filename.string(), std::move(config), file_version, &published_config); + + // BBS: notify the user about published settings that could not be applied. + if (!published_config.skipped_keys.empty()) { + NotificationManager *notify_manager = q->get_notification_manager(); + std::string message = _u8L("Some published settings could not be applied:"); + for (const std::string &key : published_config.skipped_keys) + message += "\n-" + key; + notify_manager->bbl_show_3mf_warn_notification(message); + } ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); if (bed_type_opt != nullptr) { @@ -8179,7 +8238,7 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) return output_file; } -wxString Plater::priv::get_export_file(GUI::FileType file_type) +wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& title) { wxString wildcard; switch (file_type) { @@ -8222,7 +8281,7 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type) case FT_3MF: { output_file.replace_extension("3mf"); - dlg_title = _L("Save file as"); + dlg_title = title.empty() ? _L("Save file as") : title; break; } case FT_OBJ: @@ -16105,6 +16164,76 @@ void Plater::export_core_3mf() export_3mf(path_u8, SaveStrategy::Silence); } +// Export the current project as a "published" 3MF. This is a pure export: unlike save_project(), +// it never touches the project's file name, dirty state, backup path or title, and the +// published metadata is attached to the model only for the duration of the export so the +// in-memory project stays exactly as it was (a later Save Project produces a normal 3MF). +int Plater::export_published_3mf(const std::vector& published_keys, const std::vector& material_keys) +{ + wxString path = p->get_export_file(FT_3MF, _L("Publish 3MF file as:")); + if (path.empty() || path == "") + return wxID_CANCEL; + + nlohmann::json j = nlohmann::json::array(); + for (const std::string& key : published_keys) + j.push_back(key); + nlohmann::json jm = nlohmann::json::array(); + for (const Slic3r::PublishedMaterialEntry& e : material_keys) + jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}}}, {"slot", e.slot}, {"keys", e.keys} }); + + Model& model = this->model(); + // Remember the previous metadata state so it can be restored after the export, keeping the + // in-memory project pristine (the published flag lives only in the exported file). + const bool had_model_info = (model.model_info != nullptr); + const bool had_published = had_model_info && (model.model_info->metadata_items.find("published") != model.model_info->metadata_items.end()); + const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find("published_keys") != model.model_info->metadata_items.end()); + const bool had_material_keys = had_model_info && (model.model_info->metadata_items.find("published_material_keys") != model.model_info->metadata_items.end()); + const std::string prev_published = had_published ? model.model_info->metadata_items.at("published") : std::string(); + const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at("published_keys") : std::string(); + const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at("published_material_keys") : std::string(); + if (model.model_info == nullptr) + model.model_info = std::make_shared(); + model.model_info->metadata_items["published"] = "1"; + model.model_info->metadata_items["published_keys"] = j.dump(); + model.model_info->metadata_items["published_material_keys"] = jm.dump(); + + // Same file layout save_project() uses for its project files, plus SaveStrategy::Silence: + // without it export_3mf() calls set_project_filename() on success, which would make this + // pure export the current project file. Silence keeps the project state untouched, exactly + // like export_core_3mf(). + auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence; + bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); + if (full_pathnames) + save_strategy = save_strategy | SaveStrategy::FullPathSources; + + const int ret = export_3mf(into_path(path), save_strategy); + + // Restore the previous metadata state (both on success and on failure). + if (!had_model_info) { + model.model_info = nullptr; + } else { + if (had_published) + model.model_info->metadata_items["published"] = prev_published; + else + model.model_info->metadata_items.erase("published"); + if (had_published_keys) + model.model_info->metadata_items["published_keys"] = prev_published_keys; + else + model.model_info->metadata_items.erase("published_keys"); + if (had_material_keys) + model.model_info->metadata_items["published_material_keys"] = prev_material_keys; + else + model.model_info->metadata_items.erase("published_material_keys"); + } + + if (ret < 0) { + MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), + _L("Publish Settings"), wxOK | wxICON_WARNING).ShowModal(); + return wxID_CANCEL; + } + return wxID_YES; +} + Preset *get_printer_preset(const MachineObject *obj) { if (!obj) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index b60c0eb242..5a83e5e4e1 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -495,6 +495,10 @@ public: void export_gcode_3mf(bool export_all = false); void send_gcode_finish(wxString name); void export_core_3mf(); + // Export the current project as a "published" 3MF: embeds the author-selected settings + // (published_keys / published_material_keys) into the file's metadata. A pure export: the + // in-memory project (filename, dirty state, model_info metadata) is left untouched. + int export_published_3mf(const std::vector& published_keys, const std::vector& material_keys); static TriangleMesh combine_mesh_fff(const ModelObject& mo, int instance_id, std::function notify_func = {}); void export_stl(bool extended = false, bool selection_only = false, bool multi_stls = false, FileType file_type = FT_STL); //BBS: remove amf diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp new file mode 100644 index 0000000000..36b7372d4a --- /dev/null +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -0,0 +1,1077 @@ +#include "PublishSettingsDialog.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "MsgDialog.hpp" +#include "I18N.hpp" +#include "Tab.hpp" +#include "ConfigValueFormatter.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/TextInput.hpp" +#include "Widgets/DialogButtons.hpp" +#include "Widgets/StaticLine.hpp" +#include "Widgets/StateColor.hpp" + +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/Preset.hpp" +#include "libslic3r/PublishSettings.hpp" + +#include +#include +#include +#include +#include + +// Custom-painted collapse chevron: a vector path (down when expanded, right +// when collapsed) drawn in the dialog's secondary-text grey. Vector drawing +// keeps it crisp at any DPI (the earlier 16px bitmap chevron looked +// blurry/wide). +class CollapseChevron : public wxWindow +{ +public: + explicit CollapseChevron(wxWindow* parent) : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) + { + SetBackgroundColour(parent->GetBackgroundColour()); + DisableFocusFromKeyboard(); + SetMinSize(FromDIP(wxSize(10, 10))); + Bind(wxEVT_PAINT, &CollapseChevron::on_paint, this); + } + + void SetCollapsed(bool collapsed) + { + if (m_collapsed == collapsed) + return; + m_collapsed = collapsed; + Refresh(); + } + +private: + void on_paint(wxPaintEvent&) + { + wxPaintDC dc(this); + wxGraphicsContext* ctx = wxGraphicsContext::Create(dc); + if (ctx == nullptr) + return; + ctx->SetAntialiasMode(wxANTIALIAS_DEFAULT); + // Same grey as the row value labels, dark-mode aware. + wxPen pen(StateColor::darkModeColorFor(wxColour("#6B6B6B")), FromDIP(1.5), wxPENSTYLE_SOLID); + pen.SetCap(wxCAP_ROUND); + pen.SetJoin(wxJOIN_ROUND); + ctx->SetPen(pen); + + const wxSize sz = GetClientSize(); + const double cx = sz.x / 2.0; + const double cy = sz.y / 2.0; + const double r = std::min(sz.x, sz.y) * 0.32; + + wxGraphicsPath path = ctx->CreatePath(); + if (m_collapsed) { + // Right-pointing chevron ">". + path.MoveToPoint(cx - r, cy - r); + path.AddLineToPoint(cx + r, cy); + path.AddLineToPoint(cx - r, cy + r); + } else { + // Down-pointing chevron "v". + path.MoveToPoint(cx - r, cy - r); + path.AddLineToPoint(cx, cy + r); + path.AddLineToPoint(cx + r, cy - r); + } + ctx->StrokePath(path); + delete ctx; + } + + bool m_collapsed{false}; +}; + +namespace Slic3r { namespace GUI { +namespace { + +// Identity of a filament slot: the stable material id when present, else the +// type+vendor pair. Used to emit the PublishedMaterialEntry identity fields. +struct MaterialIdentity +{ + std::string type; + std::string vendor; + std::string id; +}; + +// Menu ids for show_menu(). Dedicated range above the standard ids so the popup cannot +// collide with application-level bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). +enum { + kPublishSelectAll = wxID_HIGHEST + 1, + kPublishDeselectAll, + kPublishSelectVisible, + kPublishDeselectVisible, + kPublishFilterSelected, + kPublishFilterNonSelected +}; + +MaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& full) +{ + MaterialIdentity identity; + if (const auto* types = full.opt("filament_type")) + if (slot < types->size()) + identity.type = types->get_at(slot); + if (const auto* vendors = full.opt("filament_vendor")) + if (slot < vendors->size()) + identity.vendor = vendors->get_at(slot); + if (const auto* ids = full.opt("filament_ids")) + if (slot < ids->size()) + identity.id = ids->get_at(slot); + return identity; +} + +// "Generic PLA @System" -> "Generic PLA"; mirrors the alias derivation in +// PresetBundle::load_vendor_configs_from_json (PresetBundle.cpp) and +// PresetCollection::set_custom_preset_alias (Preset.cpp). +std::string material_display_name(const std::string& preset_name) +{ + const size_t at = preset_name.find_first_of('@'); + if (at == std::string::npos) + return preset_name; + std::string bare = preset_name.substr(0, at); + boost::trim_right(bare); + return bare.empty() ? preset_name : bare; +} + +// Human-readable section title for a filament slot: the resolved preset name, +// falling back to the filament type, then to the generic "Material". +wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPrintConfig& full) +{ + if (slot < bundle->filament_presets.size()) { + const Preset* preset = bundle->filaments.find_preset(bundle->filament_presets[slot]); + if (preset != nullptr && !preset->name.empty()) + return from_u8(material_display_name(preset->name)); + } + const MaterialIdentity identity = material_identity(slot, full); + if (!identity.type.empty()) + return from_u8(identity.type); + return _L("Material"); +} + +} // namespace + +PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) + : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), + wxID_ANY, + _L("Publish Settings"), + wxDefaultPosition, + wxDefaultSize, + wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) + , m_search(this, "search", 16) + , m_menu(this, "filter", 16) +{ + SetBackgroundColour(*wxWHITE); + + build_option_model(); + + // --- filter bar: search box, All/None, menu button --- + wxPanel* f_bar = new wxPanel(this, wxID_ANY); + f_bar->SetBackgroundColour(GetBackgroundColour()); + wxBoxSizer* f_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_filter_box = new TextInput(f_bar, "", "", "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + m_filter_box->SetIcon(m_search.bmp()); + m_filter_box->SetMinSize(FromDIP(wxSize(200, 24))); + m_filter_box->SetSize(FromDIP(wxSize(-1, 24))); + m_filter_box->SetFocus(); + m_filter_ctrl = m_filter_box->GetTextCtrl(); + m_filter_ctrl->SetFont(Label::Body_13); + m_filter_ctrl->SetSize(wxSize(-1, FromDIP(16))); // centers text vertically + m_filter_ctrl->SetHint(_L("Type to filter...")); + m_filter_ctrl->Bind(wxEVT_TEXT, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_filter_ctrl->Bind(wxEVT_TEXT_ENTER, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_filter_ctrl->Bind(wxEVT_SET_FOCUS, [this](auto& e) { + apply_filter(m_filter_ctrl->GetValue()); + e.Skip(); + }); + m_filter_ctrl->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + apply_filter(m_filter_ctrl->GetValue()); + e.Skip(); + }); + f_sizer->Add(m_filter_box, 1, wxEXPAND); + Bind(wxEVT_SET_FOCUS, [this](auto&) { m_filter_box->SetFocus(); }); + + m_fb_sizer = new wxBoxSizer(wxHORIZONTAL); + auto create_btn = [this, f_bar](wxString title, bool select) { + auto btn = new wxStaticText(f_bar, wxID_ANY, title); + btn->SetForegroundColour("#009687"); + btn->SetCursor(wxCURSOR_HAND); + btn->SetFont(Label::Body_13); + btn->Bind(wxEVT_LEFT_DOWN, [this, select](wxMouseEvent&) { select_all(select); }); + m_fb_sizer->Add(btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + }; + f_sizer->Add(m_fb_sizer, 0, wxALIGN_CENTER_VERTICAL); + create_btn(_L("All"), true); + create_btn(_L("None"), false); + + m_menu_button = new wxStaticBitmap(f_bar, wxID_ANY, m_menu.bmp()); + m_menu_button->SetCursor(wxCURSOR_HAND); + m_menu_button->Bind(wxEVT_LEFT_DOWN, &PublishSettingsDialog::show_menu, this); + f_sizer->Add(m_menu_button, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + + f_bar->SetSizerAndFit(f_sizer); + + wxBoxSizer* w_sizer = new wxBoxSizer(wxVERTICAL); + + wxStaticText* msg = new wxStaticText(this, wxID_ANY, _L("Select which settings to embed in the 3MF file")); + msg->SetFont(Label::Body_13); + msg->Wrap(-1); + w_sizer->Add(msg, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); + + w_sizer->Add(f_bar, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + w_sizer->Add(m_scroll, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); + + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + // At least one checked, enabled (publishable) key is required. A gated + // material row is disabled even if its value is pre-checked, so it must + // not count. + for (const Row& row : m_rows) + if (row.check->GetValue() && row.check->IsEnabled()) { + EndModal(wxID_OK); + return; + } + MessageDialog(this, _L("No settings selected. Please select at least one setting to publish."), _L("Publish Settings"), + wxOK | wxICON_WARNING) + .ShowModal(); + }); + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); + + w_sizer->Add(dlg_btns, 0, wxEXPAND); + + SetSizerAndFit(w_sizer); + SetMinSize(FromDIP(wxSize(600, 500))); + SetSize(FromDIP(wxSize(600, 500))); // initial size only; the dialog is resizable + wxGetApp().UpdateDlgDarkUI(this); +} + +PublishSettingsDialog::~PublishSettingsDialog() {} + +void PublishSettingsDialog::build_option_model() +{ + // Structural / non-publishable keys, shared with the published-3MF overlay + // path (see libslic3r/PublishSettings.hpp). + const std::set& denylist = publish_structural_keys(); + // Base keys already added in the print/printer sections. Printer rows share + // this set: a base key appears once (per-extruder "#N" variants collapse to + // the first occurrence - acceptable MVP; the per-extruder context is lost). + std::set added; + + PresetBundle* bundle = wxGetApp().preset_bundle; + DynamicPrintConfig full = bundle->full_config(); + + m_scroll = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_scroll->SetScrollRate(0, 10); + m_scroll->SetBackgroundColour(GetBackgroundColour()); + m_list_sizer = new wxBoxSizer(wxVERTICAL); + m_scroll->SetSizer(m_list_sizer); + m_scroll->DisableFocusFromKeyboard(); + m_scroll->Bind(wxEVT_RIGHT_DOWN, &PublishSettingsDialog::show_menu, this); + + // "no matching rows" info label, shown by apply_filter(). + m_info = new wxStaticText(m_scroll, wxID_ANY, ""); + m_info->SetFont(Label::Body_13); + m_list_sizer->Add(m_info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); + m_info->Hide(); + m_info_nonsel = _L("No selected items..."); + m_info_allsel = _L("All items selected..."); + m_info_empty = _L("No matching items..."); + + // Shared per-option label/value computation; returns false when the option + // must be skipped (denylisted / unknown / empty label). value is the pure + // stringified value; unit is the translated sidetext (may be empty). + auto option_text = [&denylist, &full](const std::string& opt_id, const std::string& pure_key, wxString& label, wxString& value, + wxString& unit) -> bool { + if (denylist.count(pure_key) > 0) + return false; + const ConfigOptionDef* def = print_config_def.get(pure_key); + if (def == nullptr) + return false; + label = _(def->full_label.empty() ? def->label : def->full_label); + if (label.IsEmpty()) + return false; + value = get_string_value(opt_id, full); + unit = _(def->sidetext); + return true; + }; + + // Find-or-create a main category; builds its header row UI on first use. + // Material sections are additionally matched by identity and slot so two + // identities (or slots) that happen to share a title stay separate. + auto category_index_for = [this, &full](const wxString& title, Section section, const std::string& icon_name, size_t group, + const MaterialIdentity& identity = MaterialIdentity(), size_t slot = 0) -> size_t { + for (size_t i = 0; i < m_categories.size(); ++i) { + if (m_categories[i].title != title || m_categories[i].section != section) + continue; + if (section == Section::Material && + (m_categories[i].filament_id != identity.id || m_categories[i].filament_type != identity.type || + m_categories[i].filament_vendor != identity.vendor || m_categories[i].filament_slot != slot)) + continue; + return i; + } + Category cat; + cat.title = title; + cat.section = section; + cat.group = group; + cat.icon_name = icon_name; + cat.filament_type = identity.type; + cat.filament_vendor = identity.vendor; + cat.filament_id = identity.id; + cat.filament_slot = slot; + if (!icon_name.empty()) { + ScalableBitmap icon_bmp(m_scroll, icon_name, 18); + cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, icon_bmp.bmp()); + } + if (section == Section::Material) { + // Material header: [master (title)][slim tri-state select-all]. + // The master is a 2-state opt-in that carries the material title; + // the tri-state is label-less and gates on the master. + cat.master_check = new wxCheckBox(m_scroll, wxID_ANY, title); + cat.master_check->SetFont(Label::Head_14); + cat.master_check->SetToolTip(_L("Export this material")); + cat.header = new wxCheckBox(m_scroll, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); + cat.header->SetFont(Label::Head_14); + cat.header->SetToolTip(_L("Select/deselect all settings in this material")); + } else { + cat.header = new wxCheckBox(m_scroll, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); + cat.header->SetFont(Label::Head_14.Bold()); + } + const size_t new_index = m_categories.size(); + cat.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_category(new_index); }); + // [icon][chevron][(chip)(master)(tri-state) | checkbox]: the chevron + // collapses/expands the category, the checkbox is the select-all. + auto header_sizer = new wxBoxSizer(wxHORIZONTAL); + if (cat.icon != nullptr) + header_sizer->Add(cat.icon, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(2)); + header_sizer->Add(cat.chevron, 0, wxALIGN_CENTER_VERTICAL); + if (section == Section::Material) { + // Per-slot colour chip, before the master title. + std::string hex; + if (const auto* colours = full.opt("filament_colour")) + if (slot < colours->size()) + hex = colours->get_at(slot); + wxBitmap* chip_bmp = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12)); + // chip_bmp points into get_extruder_color_icon's static BitmapCache + // and must NOT be deleted; the wxStaticBitmap takes its own copy. + header_sizer->Add(new wxStaticBitmap(m_scroll, wxID_ANY, *chip_bmp), 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + header_sizer->Add(cat.master_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + header_sizer->Add(cat.header, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(6)); + } else { + header_sizer->Add(cat.header, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(4)); + } + // A wrapper sizer splits the vertical separation (TOP 10) from the + // horizontal indent (LEFT|RIGHT 22), so the top gap collapses with the + // header when it is hidden. + auto wrap = new wxBoxSizer(wxVERTICAL); + wrap->Add(header_sizer, 0, wxTOP, FromDIP(10)); + cat.item = m_list_sizer->Add(wrap, 0, wxLEFT | wxRIGHT, FromDIP(22)); + // Register the new category with its section group: the group's visibility + // and select-all logic iterates section.categories. + m_sections[group].categories.push_back(new_index); + m_categories.push_back(std::move(cat)); + return new_index; + }; + + // Find-or-create a subcategory (optgroup) heading within a category. + auto subcategory_index_for = [this](size_t cat_index, const wxString& title, const wxString& icon) -> size_t { + Category& cat = m_categories[cat_index]; + for (size_t i = 0; i < cat.subs.size(); ++i) + if (cat.subs[i].title == title) + return i; + Subcategory sub; + sub.title = title; + if (!title.IsEmpty()) { + // Same look as the Tab's optgroup headers (incl. its icon), plus a + // collapse chevron. A click on the chevron bitmap does not reach the + // StaticLine, so both are bound to the same toggle (LEFT_UP so the + // StaticLine's label acts as the click target too). + sub.header = new ::StaticLine(m_scroll, false, title, icon); + sub.header->SetFont(Label::Head_14); + sub.header->SetForegroundColour("#363636"); + sub.header->SetCursor(wxCURSOR_HAND); + const size_t new_index = cat.subs.size(); + auto toggle = [this, cat_index, new_index] { toggle_subcategory(cat_index, new_index); }; + sub.header->Bind(wxEVT_LEFT_UP, [toggle](wxMouseEvent&) { toggle(); }); + sub.chevron = create_chevron(m_scroll, wxEVT_LEFT_UP, toggle); + auto header_sizer = new wxBoxSizer(wxHORIZONTAL); + header_sizer->Add(sub.chevron, 0, wxALIGN_CENTER_VERTICAL); + header_sizer->Add(sub.header, 1, wxEXPAND | wxLEFT, FromDIP(4)); + // A wrapper sizer splits the vertical separation (TOP|BOTTOM 6) from + // the horizontal indent (LEFT|RIGHT 38), so the gaps collapse with + // the header when it is hidden. + auto wrap = new wxBoxSizer(wxVERTICAL); + wrap->Add(header_sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); + sub.item = m_list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); + } + cat.subs.push_back(std::move(sub)); + return cat.subs.size() - 1; + }; + + // Creates the row UI (checkbox + white ellipsized value + grey unit) and + // registers the row into the given category/subcategory. + auto add_row_ui = [this](const std::string& key, const wxString& label, const wxString& value, const wxString& unit, size_t cat_index, + size_t sub_index) { + Row row; + row.key = key; + row.label = label; + row.value = value; + row.unit = unit; + row.category = m_categories[cat_index].title; + row.subcategory = m_categories[cat_index].subs[sub_index].title; + row.section = m_categories[cat_index].section; + row.section_title = m_sections[m_categories[cat_index].group].title; + const size_t row_index = m_rows.size(); + m_rows.push_back(std::move(row)); + + Row& r = m_rows[row_index]; + r.check = new wxCheckBox(m_scroll, wxID_ANY, label, wxDefaultPosition, wxDefaultSize); + r.check->SetFont(Label::Body_13); + // Value in the Tab's text color (near-black light / #EFEFF0 dark); the + // unit is the grey secondary text. + r.value_label = new wxStaticText(m_scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + r.value_label->SetFont(Label::Body_13); + r.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); + r.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); + if (!unit.IsEmpty()) { + r.unit_label = new wxStaticText(m_scroll, wxID_ANY, unit); + r.unit_label->SetFont(Label::Body_13); + r.unit_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); + } + + auto row_sizer = new wxBoxSizer(wxHORIZONTAL); + row_sizer->Add(r.check, 0, wxALIGN_CENTER_VERTICAL); + row_sizer->Add(r.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + if (r.unit_label != nullptr) + row_sizer->Add(r.unit_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + r.item = m_list_sizer->Add(row_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(54)); + + m_categories[cat_index].rows.push_back(row_index); + m_categories[cat_index].subs[sub_index].rows.push_back(row_index); + }; + + // --- Phase 1: printer per-extruder retraction settings (displayed first, + // mirroring the sidebar's Printer group). The printer tab's + // "Extruder"/"Extruder N" pages carry the per-extruder retraction options. + { + size_t g = section_group_for(Section::Printer); + for (Tab* tab : wxGetApp().tabs_list) { + if (tab->m_type != Preset::TYPE_PRINTER) + continue; + for (const PageShp& page : tab->m_pages) { + if (!page->title().StartsWith("Extruder")) + continue; + const wxString page_title = Tab::translate_category(page->title(), tab->m_type); + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + // Allowlist on the untranslated optgroup title; the "Retraction + // when switching material" group is intentionally skipped. + if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") + continue; + const wxString subcategory = page_title + L" \u00B7 " + _(optgroup->title); + for (const auto& opt : optgroup->opt_map()) { + const std::string& opt_id = opt.first; + const std::string& pure_key = opt.second.first; + // Per-extruder "#N" variants collapse to the first base key. The row stores + // the BASE key (whole-vector semantics on load: the size-guarded apply + // copies the author's full vector), while the "#0" opt_id is only used to + // display the first extruder's value. + if (!added.insert(pure_key).second) + continue; + wxString label, value, unit; + if (!option_text(opt_id, pure_key, label, value, unit)) + continue; + size_t cat_index = category_index_for(_L("Retraction & Z-hop"), Section::Printer, "custom-gcode_extruder", g); + size_t sub_index = subcategory_index_for(cat_index, subcategory, optgroup->icon); + add_row_ui(pure_key, label, value, unit, cat_index, sub_index); + } + } + } + } + } + + // --- Phase 2: per-material sections synthesized from the filament tab's + // "Setting Overrides" page, under the Filament group. + { + size_t g = section_group_for(Section::Material); + Tab* filament_tab = nullptr; + for (Tab* tab : wxGetApp().tabs_list) + if (tab->m_type == Preset::TYPE_FILAMENT) { + filament_tab = tab; + break; + } + if (filament_tab != nullptr) { + const Page* overrides_page = nullptr; + for (const PageShp& page : filament_tab->m_pages) + if (page->title() == "Setting Overrides") { + overrides_page = page.get(); + break; + } + + if (overrides_page != nullptr) { + // One section per filament slot: a 4-slot printer (e.g. 1 PLA + + // 3 PETG) shows 4 sections, each disambiguated by its colour chip + // and slot number. The "· Slot N" title suffix keeps the category + // titles unique across slots. + for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { + const MaterialIdentity identity = material_identity(slot, full); + const wxString title = material_title(slot, bundle, full) + L" \u00B7 " + + wxString::Format(_L("Slot %d"), static_cast(slot) + 1); + // A material section must not repeat a key; the same key may + // appear in other material sections - that is intended. + std::set material_added; + + for (const ConfigOptionsGroupShp& optgroup : overrides_page->m_optgroups) { + // Allowlist on the untranslated optgroup title; the + // "Ironing" group is intentionally skipped. + if (optgroup->title != "Retraction" && optgroup->title != "Retraction when switching material") + continue; + for (const auto& opt : optgroup->opt_map()) { + // Row keys are base keys (no "#N"): the load side + // matches the material and uses the author's slot. + const std::string& opt_id = opt.first; + std::string base = opt_id.substr(0, opt_id.find('#')); + if (!material_added.insert(base).second) + continue; + // Show the value of this slot; fall back to slot 0 if out of range. + std::string value_opt_id = base + "#" + std::to_string(slot); + if (const ConfigOption* opt_cfg = full.option(base)) + if (const auto* vec = dynamic_cast(opt_cfg)) + if (vec->size() > 0 && slot >= vec->size()) + value_opt_id = base + "#0"; + wxString label, value, unit; + if (!option_text(value_opt_id, base, label, value, unit)) + continue; + size_t cat_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, identity, slot); + size_t sub_index = subcategory_index_for(cat_index, _(optgroup->title), optgroup->icon); + add_row_ui(base, label, value, unit, cat_index, sub_index); + } + } + } + } + } + } + + // --- Phase 3: process (print) settings; grouping matches the process tab. + { + size_t g = section_group_for(Section::Print); + for (Tab* tab : wxGetApp().tabs_list) { + if (tab->m_type != Preset::TYPE_PRINT) + continue; + const auto& icon_map = tab->get_category_icon_map(); + for (const PageShp& page : tab->m_pages) { + wxString category = Tab::translate_category(page->title(), tab->m_type); + // Page icon, keyed by the untranslated page title (per-Tab map). + std::string icon_name; + auto icon_it = icon_map.find(page->title()); + if (icon_it != icon_map.end()) + icon_name = icon_it->second; + + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + for (const auto& opt : optgroup->opt_map()) { + // opt_map() key is the opt_id (may carry "#N"); the value is + // (pure_opt_key, opt_index). + const std::string& opt_id = opt.first; + const std::string& pure_key = opt.second.first; + // A key may appear in more than one page/group; keep the first. + if (!added.insert(pure_key).second) + continue; + wxString label, value, unit; + if (!option_text(opt_id, pure_key, label, value, unit)) + continue; + size_t cat_index = category_index_for(category, Section::Print, icon_name, g); + size_t sub_index = subcategory_index_for(cat_index, _(optgroup->title), optgroup->icon); + add_row_ui(opt_id, label, value, unit, cat_index, sub_index); + } + } + } + } + } + + // Pre-check the dirty (modified) settings and mark them bold. The base-key + // match covers all sections; collect_dirty_settings_keys already unions the + // prints, printers and filaments of the bundle. + std::set dirty_base; + for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) { + auto n = key.find('#'); + dirty_base.insert(n == std::string::npos ? key : key.substr(0, n)); + } + for (Row& row : m_rows) { + std::string base = row.key.substr(0, row.key.find('#')); + row.dirty = dirty_base.count(base) > 0; + if (row.dirty) { + row.check->SetValue(true); + set_row_bold(row, true); + } + } + + // Wire the section group tri-state headers (chevrons/StaticLine toggles were + // bound at creation in section_group_for). + for (size_t s = 0; s < m_sections.size(); ++s) { + if (m_sections[s].header != nullptr) { + m_sections[s].header->Bind(wxEVT_CHECKBOX, [this, s](wxCommandEvent&) { on_section_toggle(s); }); + update_section_header(m_sections[s]); + } + } + + // Wire the tri-state headers: clicking a header toggles all its children; + // toggling any child re-syncs its header. Bind by index so the lambdas stay + // valid even if the vectors are reallocated later. + for (size_t c = 0; c < m_categories.size(); ++c) { + if (m_categories[c].master_check != nullptr) + m_categories[c].master_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_master_toggle(c); }); + m_categories[c].header->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_category_toggle(c); }); + for (size_t r : m_categories[c].rows) + m_rows[r].check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { update_category_header(m_categories[c]); }); + update_category_header(m_categories[c]); + } + + // Material sections start gated (master OFF): their rows and tri-state are + // disabled until the author opts the material in. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].section == Section::Material) + on_master_toggle(c); + + // No filter is active at startup: every row matches until the user types. + for (Row& row : m_rows) + row.matches_filter = true; + apply_visibility(); + + m_scroll->FitInside(); + m_list_sizer->Layout(); +} + +size_t PublishSettingsDialog::section_group_for(Section kind) +{ + for (size_t i = 0; i < m_sections.size(); ++i) + if (m_sections[i].kind == kind) + return i; + + SectionGroup section; + section.kind = kind; + const size_t new_index = m_sections.size(); + + switch (kind) { + case Section::Printer: + section.title = _L("Printer"); + section.icon_name = "printer"; + break; + case Section::Material: + section.title = _L("Filament"); + section.icon_name = "filament"; + break; + case Section::Print: + section.title = _L("Process"); + section.icon_name = "process"; + break; + } + + if (!section.icon_name.empty()) { + ScalableBitmap icon_bmp(m_scroll, section.icon_name, 18); + section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, icon_bmp.bmp()); + } + + section.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_section(new_index); }); + + auto header_sizer = new wxBoxSizer(wxHORIZONTAL); + if (section.icon != nullptr) + header_sizer->Add(section.icon, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(2)); + header_sizer->Add(section.chevron, 0, wxALIGN_CENTER_VERTICAL); + + if (kind == Section::Material) { + // Filament group: clickable StaticLine title, no tri-state (each + // material below opts in individually). + section.header_line = new ::StaticLine(m_scroll, false, section.title); + section.header_line->SetFont(Label::Head_14.Bold()); + section.header_line->SetForegroundColour("#363636"); + section.header_line->SetCursor(wxCURSOR_HAND); + section.header_line->SetToolTip(_L("Enable each material below to export its settings")); + auto toggle = [this, new_index] { toggle_section(new_index); }; + section.header_line->Bind(wxEVT_LEFT_UP, [toggle](wxMouseEvent&) { toggle(); }); + header_sizer->Add(section.header_line, 1, wxEXPAND | wxLEFT, FromDIP(4)); + } else { + // Printer/Process: tri-state select-all carries the title. + section.header = new wxCheckBox(m_scroll, wxID_ANY, section.title, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); + section.header->SetFont(Label::Head_14.Bold()); + header_sizer->Add(section.header, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(4)); + } + + // A wrapper sizer splits the larger vertical separation (TOP 14) from the + // shallow horizontal indent (LEFT|RIGHT 6), so the top gap collapses with + // the header when it is hidden. wxEXPAND lets the Filament StaticLine's + // separator span the width like the subcategory headers. + auto wrap = new wxBoxSizer(wxVERTICAL); + wrap->Add(header_sizer, 0, wxEXPAND | wxTOP, FromDIP(14)); + section.item = m_list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(6)); + m_sections.push_back(std::move(section)); + return new_index; +} + +void PublishSettingsDialog::on_category_toggle(size_t category_index) +{ + Category& cat = m_categories[category_index]; + // Defensive: a gated material header is disabled and cannot fire. + if (cat.section == Section::Material && !cat.master) + return; + // A click on the header toggles between "all" and "none": if every child is + // checked, uncheck all; otherwise check all. + bool all_checked = true; + for (size_t r : cat.rows) + if (!m_rows[r].check->GetValue()) { + all_checked = false; + break; + } + bool value = !all_checked; + for (size_t r : cat.rows) + m_rows[r].check->SetValue(value); + update_category_header(cat); +} + +void PublishSettingsDialog::on_master_toggle(size_t category_index) +{ + Category& cat = m_categories[category_index]; + cat.master = cat.master_check->GetValue(); + for (size_t r : cat.rows) + m_rows[r].check->Enable(cat.master); + cat.header->Enable(cat.master); + update_category_header(cat); +} + +void PublishSettingsDialog::on_section_toggle(size_t section_index) +{ + SectionGroup& section = m_sections[section_index]; + if (section.header == nullptr) + return; // defensive: the Filament group has no select-all + // All-or-none over every enabled row in the group's categories. + bool all_checked = true; + for (size_t c : section.categories) { + for (size_t r : m_categories[c].rows) + if (m_rows[r].check->IsEnabled() && !m_rows[r].check->GetValue()) { + all_checked = false; + break; + } + if (!all_checked) + break; + } + const bool value = !all_checked; + for (size_t c : section.categories) + for (size_t r : m_categories[c].rows) + if (m_rows[r].check->IsEnabled()) + m_rows[r].check->SetValue(value); + for (size_t c : section.categories) + update_category_header(m_categories[c]); + update_section_header(section); +} + +void PublishSettingsDialog::update_section_header(SectionGroup& section) +{ + if (section.header == nullptr) + return; // Filament group has no tri-state. + int checked = 0; + int total = 0; + for (size_t c : section.categories) { + for (size_t r : m_categories[c].rows) { + if (!m_rows[r].check->IsEnabled()) + continue; // gated material rows don't count (defensive) + ++total; + if (m_rows[r].check->GetValue()) + ++checked; + } + } + if (total == 0 || checked == 0) + section.header->Set3StateValue(wxCHK_UNCHECKED); + else if (checked == total) + section.header->Set3StateValue(wxCHK_CHECKED); + else + section.header->Set3StateValue(wxCHK_UNDETERMINED); +} + +void PublishSettingsDialog::update_category_header(Category& category) +{ + // A gated material section's tri-state must not reflect the preserved + // (greyed-out) row values. + if (category.section == Section::Material && !category.master) { + category.header->Set3StateValue(wxCHK_UNCHECKED); + return; + } + int checked = 0; + for (size_t r : category.rows) + if (m_rows[r].check->GetValue()) + ++checked; + + if (checked == 0) + category.header->Set3StateValue(wxCHK_UNCHECKED); + else if (checked == static_cast(category.rows.size())) + category.header->Set3StateValue(wxCHK_CHECKED); + else + category.header->Set3StateValue(wxCHK_UNDETERMINED); +} + +void PublishSettingsDialog::set_row_bold(Row& row, bool bold) +{ + // Real set/clear: rebase on the dialog's body font so that clearing bold + // restores the exact original font (the old CheckList::SetBold was one-way). + row.check->SetFont(bold ? Label::Body_13.Bold() : Label::Body_13); +} + +void PublishSettingsDialog::apply_filter(const wxString& filter_text) +{ + Freeze(); + wxString filter = filter_text.Lower(); + + // Pseudo filters (menu only): show only checked ("::sel") or only + // unchecked ("::nonsel") rows. + const bool pseudo = (filter == "::sel" || filter == "::nonsel"); + m_fb_sizer->Show(!pseudo); + + // Update the per-row match flags only; actual visibility is computed by + // apply_visibility() (which also respects the collapse state). + if (pseudo) { + if (m_filter_ctrl->GetValue().Lower() != filter) { + m_filter_ctrl->SetValue(filter); + m_filter_ctrl->SetSelection(0, -1); + } + const bool want_checked = (filter == "::sel"); + for (Row& row : m_rows) + row.matches_filter = row.check->IsEnabled() && row.check->GetValue() == want_checked; + } else { + const bool clear = filter.IsEmpty(); + for (Row& row : m_rows) { + row.matches_filter = clear || (row.section_title + " " + row.category + " " + row.subcategory + " " + row.label + " " + + row.value + " " + row.unit) + .Lower() + .Contains(filter); + } + } + + // The info label reflects the filter result only; a collapsed section + // hiding its matches is a user choice, not "no match". + m_info->Show(); + for (const Row& row : m_rows) { + if (row.matches_filter) { + m_info->Hide(); + break; + } + } + if (m_info->IsShown()) + m_info->SetLabel(pseudo ? (filter == "::sel" ? m_info_nonsel : m_info_allsel) : m_info_empty); + + apply_visibility(); + m_scroll->FitInside(); + Layout(); + Thaw(); +} + +void PublishSettingsDialog::apply_visibility() +{ + Freeze(); + for (SectionGroup& section : m_sections) { + // The section header stays visible whenever any row in the group matches + // (a section header never depends on its own collapsed state). + bool section_any = false; + for (size_t c : section.categories) { + for (size_t r : m_categories[c].rows) + if (m_rows[r].matches_filter) { + section_any = true; + break; + } + if (section_any) + break; + } + section.item->Show(section_any); + section.chevron->SetCollapsed(section.collapsed); + + for (size_t c : section.categories) { + Category& cat = m_categories[c]; + + // The category header stays visible whenever it has any match and + // the section is not collapsed, so it can always be re-expanded. + bool cat_any = false; + for (size_t r : cat.rows) + if (m_rows[r].matches_filter) { + cat_any = true; + break; + } + cat.item->Show(cat_any && !section.collapsed); + cat.chevron->SetCollapsed(cat.collapsed); + + for (Subcategory& sub : cat.subs) { + if (sub.header != nullptr) { + // The subcategory header visibility depends on its rows' matches + // and on its ancestors, but NOT on its own collapsed state. + bool sub_any = false; + for (size_t r : sub.rows) + if (m_rows[r].matches_filter) { + sub_any = true; + break; + } + sub.item->Show(sub_any && !section.collapsed && !cat.collapsed); + sub.chevron->SetCollapsed(sub.collapsed); + } + // Rows are hidden by the filter and by any collapsed ancestor. + for (size_t r : sub.rows) + m_rows[r].item->Show(m_rows[r].matches_filter && !section.collapsed && !cat.collapsed && !sub.collapsed); + } + } + } + Thaw(); +} + +void PublishSettingsDialog::toggle_section(size_t section_index) +{ + m_sections[section_index].collapsed = !m_sections[section_index].collapsed; + apply_visibility(); + m_scroll->FitInside(); + m_list_sizer->Layout(); +} + +void PublishSettingsDialog::toggle_category(size_t category_index) +{ + m_categories[category_index].collapsed = !m_categories[category_index].collapsed; + apply_visibility(); + m_scroll->FitInside(); + m_list_sizer->Layout(); +} + +void PublishSettingsDialog::toggle_subcategory(size_t category_index, size_t subcategory_index) +{ + m_categories[category_index].subs[subcategory_index].collapsed = !m_categories[category_index].subs[subcategory_index].collapsed; + apply_visibility(); + m_scroll->FitInside(); + m_list_sizer->Layout(); +} + +CollapseChevron* PublishSettingsDialog::create_chevron(wxWindow* parent, + const wxEventTypeTag& event_type, + std::function toggle) +{ + CollapseChevron* chevron = new CollapseChevron(parent); + chevron->SetCursor(wxCURSOR_HAND); + // The tag type (not wxEventType) keeps Bind's EventTag template deduced as + // wxEventTypeTag; wxEvent& is used so the helper works with + // any mouse event tag, and the toggle itself does not inspect the event. + chevron->Bind(event_type, [toggle](wxEvent&) { toggle(); }); + return chevron; +} + +void PublishSettingsDialog::select_all(bool value) +{ + // "All" does not auto-enable gated material sections; "None" leaves a gated + // row's preserved value untouched. + for (Row& row : m_rows) + if (row.check->IsEnabled()) + row.check->SetValue(value); + for (Category& cat : m_categories) + update_category_header(cat); +} + +void PublishSettingsDialog::select_visible(bool value) +{ + wxString filter = m_filter_ctrl->GetValue().Lower(); + // In a pseudo-filter view the rows being toggled would all disappear; + // drop the filter afterwards so the result stays visible. + bool clear_pseudo = (!value && filter == "::nonsel") || (value && filter == "::sel"); + + // Toggle the rows that are visible under the *current* filter. + for (Row& row : m_rows) + if (row.check->IsShown() && row.check->IsEnabled()) + row.check->SetValue(value); + + if (clear_pseudo) { + // Note: SetValue() may fire wxEVT_TEXT on some platforms, which + // re-enters apply_filter() - that is fine, the rows above were already + // toggled and the trailing call below is idempotent. + m_filter_ctrl->SetValue(""); + apply_filter(""); // resync visibility, headers and the All/None bar + } + for (Category& cat : m_categories) + update_category_header(cat); +} + +void PublishSettingsDialog::show_menu(wxMouseEvent& evt) +{ + bool filtering = !m_filter_ctrl->GetValue().IsEmpty(); + bool list_empty = m_info->IsShown(); + + wxMenu m; + m.Append(kPublishSelectAll, _L("Select All"))->Enable(!filtering); + m.Append(kPublishDeselectAll, _L("Deselect All"))->Enable(!filtering); + m.AppendSeparator(); + m.Append(kPublishSelectVisible, _L("Select visible"))->Enable(!list_empty && filtering); + m.Append(kPublishDeselectVisible, _L("Deselect visible"))->Enable(!list_empty && filtering); + m.AppendSeparator(); + m.Append(kPublishFilterSelected, _L("Filter selected")); + m.Append(kPublishFilterNonSelected, _L("Filter nonSelected")); + + m.Bind( + wxEVT_MENU, + [this](wxCommandEvent& e) { + switch (e.GetId()) { + case kPublishSelectAll: select_all(true); break; + case kPublishDeselectAll: select_all(false); break; + case kPublishSelectVisible: select_visible(true); break; + case kPublishDeselectVisible: select_visible(false); break; + case kPublishFilterSelected: apply_filter("::sel"); break; + case kPublishFilterNonSelected: apply_filter("::nonsel"); break; + default: break; + } + }, + kPublishSelectAll, kPublishFilterNonSelected); + + wxWindow* src = dynamic_cast(evt.GetEventObject()); + if (!src) + return; + wxPoint screen_pos = src->ClientToScreen(evt.GetPosition()); + wxPoint local_pos = ScreenToClient(screen_pos); + PopupMenu(&m, local_pos); +} + +std::vector PublishSettingsDialog::GetPublishedKeys() const +{ + std::vector out; + // Process and printer sections both travel through published_keys (the load-side + // overlay applies process keys to the prints edited preset and the allowlisted + // printer keys to the printers edited preset). Material keys use a separate API. + for (const Row& row : m_rows) + if ((row.section == Section::Print || row.section == Section::Printer) && row.check->GetValue()) + out.push_back(row.key); + return out; +} + +std::vector PublishSettingsDialog::GetPublishedMaterialKeys() const +{ + std::vector out; + for (const Category& cat : m_categories) { + // Only opted-in materials export their keys. + if (cat.section != Section::Material || !cat.master) + continue; + Slic3r::PublishedMaterialEntry entry; + entry.filament_type = cat.filament_type; + entry.filament_vendor = cat.filament_vendor; + entry.filament_id = cat.filament_id; + entry.slot = static_cast(cat.filament_slot); + for (size_t r : cat.rows) + if (m_rows[r].check->GetValue()) + entry.keys.push_back(m_rows[r].key); + // A section without any checked key carries no information for the writer. + if (!entry.keys.empty()) + out.push_back(std::move(entry)); + } + return out; +} + +void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + // The remaining bitmap icons are rescaled; the collapse chevrons are + // vector-drawn and repaint themselves. + m_search.msw_rescale(); + m_menu.msw_rescale(); + m_filter_box->SetIcon(m_search.bmp()); + m_menu_button->SetBitmap(m_menu.bmp()); + SetMinSize(FromDIP(wxSize(600, 500))); + m_scroll->FitInside(); + m_list_sizer->Layout(); + Refresh(); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp new file mode 100644 index 0000000000..ff9cb88e4b --- /dev/null +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -0,0 +1,183 @@ +#ifndef slic3r_GUI_PublishSettingsDialog_hpp_ +#define slic3r_GUI_PublishSettingsDialog_hpp_ + +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" + +#include "libslic3r/PublishSettings.hpp" + +#include +#include +#include +#include +#include +#include + +// Forward declarations (all are global classes, see Widgets/TextInput.hpp, +// Widgets/StaticLine.hpp and the CollapseChevron definition in the .cpp). +class TextInput; +class StaticLine; +class CollapseChevron; + +namespace Slic3r { namespace GUI { + +// Dialog that lets a model author select which settings get embedded in a 3MF. +// Settings are grouped the way the tabs show them: the process (print) pages, +// the printer's per-extruder retraction settings, and one section per material +// used in the project (filament overrides). Each main category has a select-all +// tri-state header, subcategory (optgroup) headings, one row per setting +// (checkbox + grey value label), and both header levels are collapsible (chevron +// toggle). A search filter and an All/None / select-visible menu are provided. +// Modified (dirty) settings are pre-checked and shown bold. On OK, the print +// rows become the "published_keys" list and the material rows become the +// per-material "published_material_keys". +class PublishSettingsDialog : public DPIDialog +{ +public: + PublishSettingsDialog(wxWindow* parent = nullptr); + ~PublishSettingsDialog(); + + // The selected print-section setting keys (in display order). Keys may + // contain '#'. + std::vector GetPublishedKeys() const; + + // The selected keys grouped per material: one entry per material section + // with at least one checked key. Keys are base keys (no "#N" suffix). + std::vector GetPublishedMaterialKeys() const; + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + +private: + // Which part of the settings the row/category came from. + enum class Section { Print, Printer, Material }; + + // One selectable setting row: a checkbox (setting name) plus a value label + // and a (optional) grey unit label. key is the full config key and may carry + // a "#N" variant suffix (print/printer rows); material rows carry the base key. + struct Row + { + std::string key; + wxString category; + wxString subcategory; + wxString label; + wxString value; + wxString unit; + wxString section_title; // top-level group title, for filter matching + Section section{Section::Print}; + bool dirty{false}; // matches a dirty base key: pre-checked + bold + bool matches_filter{false}; // survives the active filter (computed by apply_filter) + wxCheckBox* check{nullptr}; + wxStaticText* value_label{nullptr}; + wxStaticText* unit_label{nullptr}; + wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in m_list_sizer + }; + + // A subcategory (optgroup) heading. Rows store indices into m_rows. + struct Subcategory + { + wxString title; + ::StaticLine* header{nullptr}; // null when the title is empty + bool collapsed{false}; + CollapseChevron* chevron{nullptr}; + wxSizerItem* item{nullptr}; // sizer item of the header h-sizer in m_list_sizer + std::vector rows; + }; + + // A main category with its select-all tri-state header. + struct Category + { + wxString title; + Section section{Section::Print}; + size_t group{0}; // index into m_sections + std::string icon_name; // bitmap name; empty = no icon + wxStaticBitmap* icon{nullptr}; // 18px category icon (null when icon_name empty) + wxCheckBox* header{nullptr}; // select-all tri-state + // Material opt-in: the master checkbox carries the material title and + // gates whether this material's keys may be exported. + bool master{false}; + wxCheckBox* master_check{nullptr}; + bool collapsed{false}; + CollapseChevron* chevron{nullptr}; + wxSizerItem* item{nullptr}; // sizer item of the header h-sizer in m_list_sizer + // Material identity, only for Section::Material categories. + std::string filament_type; + std::string filament_vendor; + std::string filament_id; + // The author's 0-based filament slot this material section represents. + size_t filament_slot{0}; + std::vector subs; + std::vector rows; // flattened rows, for the tri-state math + }; + + // A top-level section group mirroring the editor sidebar. Categories are + // nested inside. + struct SectionGroup + { + wxString title; // _L("Printer") / _L("Filament") / _L("Process") + Section kind{Section::Print}; // maps 1:1 to the display group + std::string icon_name; // "printer" / "filament" / "process" + wxStaticBitmap* icon{nullptr}; // 18px, like Category::icon + wxCheckBox* header{nullptr}; // tri-state select-all; nullptr for the Filament group + ::StaticLine* header_line{nullptr}; // Filament group's clickable title + CollapseChevron* chevron{nullptr}; + wxSizerItem* item{nullptr}; + bool collapsed{false}; + std::vector categories; // indices into m_categories + }; + + void build_option_model(); + void apply_filter(const wxString& filter_text); + void select_all(bool value); + void select_visible(bool value); + void show_menu(wxMouseEvent& evt); + void update_category_header(Category& category); + void set_row_bold(Row& row, bool bold); + void on_category_toggle(size_t category_index); + // Material opt-in toggled: enables/disables the material's rows + tri-state + // and resyncs the header. + void on_master_toggle(size_t category_index); + // Collapse/expand a category or subcategory; resyncs visibility + chevrons. + void toggle_category(size_t category_index); + void toggle_subcategory(size_t category_index, size_t subcategory_index); + // Find-or-create the top-level section group for a Section kind (builds its + // header row on first use). + size_t section_group_for(Section kind); + // Top-level section group: select-all tri-state toggled / collapse/expand / + // header resync. + void on_section_toggle(size_t section_index); + void toggle_section(size_t section_index); + void update_section_header(SectionGroup& section); + // Single pass over categories/subs/rows: shows an item iff it is not hidden + // by the filter and (for subs/rows) by a collapsed ancestor. Flips the + // header chevrons. Only reads matches_filter; never re-runs filter matching. + void apply_visibility(); + // Creates a collapse chevron with a hand cursor; clicking it (with the given + // mouse event, LEFT_DOWN for categories / LEFT_UP for subcategories, + // matching the header's own binding) invokes the toggle. + CollapseChevron* create_chevron(wxWindow* parent, const wxEventTypeTag& event_type, std::function toggle); + + wxScrolledWindow* m_scroll{nullptr}; + wxBoxSizer* m_list_sizer{nullptr}; // vertical sizer of the scrolled window + wxBoxSizer* m_fb_sizer{nullptr}; // "All"/"None" buttons sizer + TextInput* m_filter_box{nullptr}; + wxTextCtrl* m_filter_ctrl{nullptr}; + wxStaticBitmap* m_menu_button{nullptr}; + wxStaticText* m_info{nullptr}; + wxString m_info_nonsel; + wxString m_info_allsel; + wxString m_info_empty; + + ScalableBitmap m_search; + ScalableBitmap m_menu; + + std::vector m_rows; + std::vector m_categories; + // Fixed display order enforced by phase order in build_option_model(): + // Printer, then Filament, then Process. + std::vector m_sections; +}; + +}} // namespace Slic3r::GUI + +#endif // slic3r_GUI_PublishSettingsDialog_hpp_ diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 1a31355d0e..935ab58592 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5675,6 +5675,9 @@ if (is_marlin_flavor) optgroup->append_single_option_line("extruder_offset", "printer_extruder_basic_information#extruder-offset-position", extruder_idx); //BBS: don't show retract related config menu in machine page + // Keep this optgroup's options in sync with publishable_printer_retraction_options() + // in libslic3r/PublishSettings.hpp: the published-3MF printer allowlist is its union + // with the Z-Hop optgroup below. optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); optgroup->append_single_option_line("retraction_length", "printer_extruder_retraction#length", extruder_idx); optgroup->append_single_option_line("retract_restart_extra", "printer_extruder_retraction#extra-length-on-restart", extruder_idx); @@ -5688,6 +5691,9 @@ if (is_marlin_flavor) // Orca optgroup->append_single_option_line("retract_after_wipe", "printer_extruder_retraction#retract-amount-after-wipe", extruder_idx); + // Keep this optgroup's options in sync with publishable_printer_z_hop_options() + // in libslic3r/PublishSettings.hpp: the published-3MF printer allowlist is its union + // with the Retraction optgroup above. optgroup = page->new_optgroup(L("Z-Hop"), L"param_extruder_lift_enforcement"); optgroup->append_single_option_line("retract_lift_enforce", "printer_extruder_z_hop#on-surfaces", extruder_idx); optgroup->append_single_option_line("z_hop_types", "printer_extruder_z_hop#z-hop-type", extruder_idx); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 19eb0b849d..1d3f8daf2a 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -30,7 +30,6 @@ #include //#include "BedShapeDialog.hpp" -#include "Event.hpp" #include "wxExtensions.hpp" #include "ConfigManipulation.hpp" #include "OptionsGroup.hpp" @@ -38,7 +37,6 @@ //BBS: GUI refactor #include "Notebook.hpp" #include "ParamsPanel.hpp" -#include "Widgets/RoundedRectangle.hpp" #include "Widgets/TextInput.hpp" #include "Widgets/CheckBox.hpp" // ORCA @@ -472,6 +470,7 @@ protected: std::string m_last_sparse_infill_rotate_template_value; ConfigManipulation get_config_manipulation(); friend class EditGCodeDialog; + friend class PublishSettingsDialog; }; class TabPrint : public Tab diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 5c69466cfa..dd1bf43253 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -12,6 +12,7 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/Color.hpp" #include "format.hpp" +#include "ConfigValueFormatter.hpp" #include "GUI_App.hpp" #include "Plater.hpp" #include "Tab.hpp" @@ -571,14 +572,6 @@ void DiffModel::Clear() } -static std::string get_pure_opt_key(std::string opt_key) -{ - const int pos = opt_key.find("#"); - if (pos > 0) - boost::erase_tail(opt_key, opt_key.size() - pos); - return opt_key; -} - // ---------------------------------------------------------------------------- // DiffViewCtrl // ---------------------------------------------------------------------------- @@ -1212,32 +1205,6 @@ bool UnsavedChangesDialog::save(PresetCollection* dependent_presets, bool show_s return true; } -wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false, int idx = -1) -{ - const ConfigOptionDef& def = config.def()->options.at(opt_key); - const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); - int val = 0; - - if (idx >= 0) - val = dynamic_cast(config.option(opt_key))->get_at(idx); - else - val = config.option(opt_key)->getInt(); - - // Each infill doesn't use all list of infill declared in PrintConfig.hpp. - // So we should "convert" val to the correct one - if (is_infill) { - for (auto key_val : *def.enum_keys_map) - if (int(key_val.second) == val) { - auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); - if (it == def.enum_values.end()) - return ""; - return from_u8(_utf8(names[it - def.enum_values.begin()])); - } - return _L("Undefined"); - } - return from_u8(_utf8(names[val])); -} - // BBS #if 0 static size_t get_id_from_opt_key(std::string opt_key) @@ -1251,194 +1218,6 @@ static size_t get_id_from_opt_key(std::string opt_key) } #endif -static wxString get_full_label(std::string opt_key, const DynamicPrintConfig& config) -{ - opt_key = get_pure_opt_key(opt_key); - auto option = config.option(opt_key); - - if (!option || option->is_nil()) - return _L("N/A"); - - const ConfigOptionDef* opt = config.def()->get(opt_key); - return opt->full_label.empty() ? opt->label : opt->full_label; -} - -static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& config) -{ - int orig_opt_idx = -1; - int opt_idx = -1; - int pos = opt_key.find("#"); - std::string temp_str = opt_key; - if (pos > 0) { - boost::erase_head(temp_str, pos + 1); - orig_opt_idx = static_cast(atoi(temp_str.c_str())); - } - opt_idx = orig_opt_idx >= 0 ? orig_opt_idx : 0; - opt_key = get_pure_opt_key(opt_key); - auto option = config.option(opt_key); - if (!option) { - return _L("N/A"); - } - auto opt_vector = dynamic_cast(option); - - if (option->is_scalar() && config.option(opt_key)->is_nil() || - option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx)) - return _L("N/A"); - - wxString out; - - const ConfigOptionDef* opt = config.def()->get(opt_key); - bool is_nullable = opt->nullable; - - switch (opt->type) { - case coInt: - return from_u8((boost::format("%1%") % config.opt_int(opt_key)).str()); - case coInts: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); - } - else { - auto values = config.opt(opt_key); - if (orig_opt_idx >= 0 && orig_opt_idx < values->size()) { - return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); - } - else { - std::string value_str; - for (int i = 0; i < values->size(); i++) { - value_str += std::to_string(values->get_at(i)); - if (i != values->size() - 1) { - value_str += ","; - } - } - return from_u8(value_str); - } - } - return _L("Undefined"); - } - case coBool: - return config.opt_bool(opt_key) ? "true" : "false"; - case coBools: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return values->get_at(opt_idx) ? "true" : "false"; - } - else { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return values->get_at(opt_idx) ? "true" : "false"; - } - return _L("Undefined"); - } - case coPercent: - return from_u8((boost::format("%1%%%") % int(config.optptr(opt_key)->getFloat())).str()); - case coPercents: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); - } - else { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); - } - return _L("Undefined"); - } - case coFloat: - return double_to_string(config.opt_float(opt_key)); - case coFloats: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return double_to_string(values->get_at(opt_idx)); - } - else { - auto values = config.opt(opt_key); - if (values && opt_idx < values->size()) - return double_to_string(values->get_at(opt_idx)); - } - return _L("Undefined"); - } - case coString: - return from_u8(config.opt_string(opt_key)); - case coStrings: { - const ConfigOptionStrings* strings = config.opt(opt_key); - if (strings) { - if (opt_key == "compatible_printers" || opt_key == "compatible_prints") { - if (strings->empty()) - return _L("All"); - for (size_t id = 0; id < strings->size(); id++) - out += from_u8(strings->get_at(id)) + "\n"; - out.RemoveLast(1); - return out; - } - if (!strings->empty() && opt_idx < strings->values.size()) - return from_u8(strings->get_at(opt_idx)); - } - break; - } - case coFloatOrPercent: { - const ConfigOptionFloatOrPercent* opt = config.opt(opt_key); - if (opt) - out = double_to_string(opt->value) + (opt->percent ? "%" : ""); - return out; - } - case coEnum: { - return get_string_from_enum(opt_key, config, - opt_key == "top_surface_pattern" || - opt_key == "bottom_surface_pattern" || - opt_key == "internal_solid_infill_pattern" || - opt_key == "sparse_infill_pattern" || - opt_key == "ironing_pattern" || - opt_key == "support_ironing_pattern" || - opt_key == "support_pattern" || - opt_key == "support_interface_pattern") - ; - } - case coEnums: { - return get_string_from_enum(opt_key, config, - opt_key == "top_surface_pattern" || - opt_key == "bottom_surface_pattern" || - opt_key == "internal_solid_infill_pattern" || - opt_key == "sparse_infill_pattern" || - opt_key == "ironing_pattern" || - opt_key == "support_ironing_pattern" || - opt_key == "support_pattern" || - opt_key == "support_interface_pattern" - , opt_idx); - } - case coPoint: { - Vec2d val = config.opt(opt_key)->value; - return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); - } - case coPoints: { - //BBS: add bed_exclude_area - if (opt_key == "printable_area" || opt_key == "thumbnails") { - ConfigOptionPoints points = *config.option(opt_key); - //BuildVolume build_volume = {points.values, 0.}; - return get_thumbnails_string(points.values); - } - else if (opt_key == "bed_exclude_area") { - return get_thumbnails_string(config.option(opt_key)->values); - } - else if (opt_key == "head_wrap_detect_zone") { - return get_thumbnails_string(config.option(opt_key)->values); - } - else if (opt_key == "wrapping_exclude_area") { - return get_thumbnails_string(config.option(opt_key)->values); - } - Vec2d val = config.opt(opt_key)->get_at(opt_idx); - return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); - } - default: - break; - } - return out; -} - void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header) { PresetCollection* presets = dependent_presets; diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index c839149f5f..4eccf0e9fa 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -11,6 +11,8 @@ #include "test_utils.hpp" +#include + #include #include @@ -497,3 +499,178 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { delete plate; } } + +// The "Publish" feature stores a published flag plus a JSON array of author-selected setting keys +// in model.model_info->metadata_items. This locks the serialization contract: both keys must survive +// a store_bbs_3mf -> load_bbs_3mf round-trip unchanged. (The full preset-preservation behavior — +// keeping the user's currently-selected presets and overlaying only the published keys onto them — +// is exercised headlessly in "Published 3MF overlays only the author-selected process keys onto the +// edited preset" in test_preset_bundle_loading.cpp.) +SCENARIO("Published 3MF round-trips the published flag and published_keys metadata", "[3mf]") { + GIVEN("a model carrying published metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + model.model_info = std::make_shared(); + model.model_info->metadata_items["published"] = "1"; + model.model_info->metadata_items["published_keys"] = R"(["layer_height","wall_thickness"])"; + + // store_bbs_3mf stages Metadata/project_settings.config through the model's backup path; + // point it at a writable temp dir (the default lives under a read-only root in CI). + ScopedTemporaryDir backup_dir("orca_pub"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the published metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items["published"] == "1"); + REQUIRE(dst_model.model_info->metadata_items["published_keys"] == R"(["layer_height","wall_thickness"])"); + + // The published_keys value is a JSON array of setting keys; it must parse back to + // the same keys that were selected. + nlohmann::json keys = nlohmann::json::parse(dst_model.model_info->metadata_items["published_keys"]); + REQUIRE(keys.is_array()); + REQUIRE(keys.size() == 2); + REQUIRE(keys[0] == "layer_height"); + REQUIRE(keys[1] == "wall_thickness"); + } + release_PlateData_list(dst_plates); + } + } +} + +// A project saved without the Publish metadata (i.e. a normal 3MF) must load identically: the +// loader must not fabricate a "published" flag or published_keys for files that never carried them. +SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { + GIVEN("a model without any published metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + ScopedTemporaryDir backup_dir("orca_legacy"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("no published key is fabricated") { + REQUIRE(loaded); + if (dst_model.model_info != nullptr) { + REQUIRE(dst_model.model_info->metadata_items.count("published") == 0); + REQUIRE(dst_model.model_info->metadata_items.count("published_keys") == 0); + } + } + release_PlateData_list(dst_plates); + } + } +} + +// The "Publish" feature can also store material-qualified setting keys, one entry per material +// the author uses, in model.model_info->metadata_items. This locks the serialization contract +// for that entry list: the JSON must survive a store_bbs_3mf -> load_bbs_3mf round-trip +// verbatim, exactly like the plain published_keys array. +SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf]") { + GIVEN("a model carrying published material keys metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + const std::string material_keys_json = + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99"},"slot":0,"keys":["filament_retraction_length","filament_z_hop"]}])"; + + model.model_info = std::make_shared(); + model.model_info->metadata_items["published_material_keys"] = material_keys_json; + + ScopedTemporaryDir backup_dir("orca_pub_mat"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the published material keys metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); + + // The value must parse back to one material entry carrying the nested identity + // object, the author slot ordinal and the key list, so the loader can match it + // to the receiver's filaments. + nlohmann::json entries = nlohmann::json::parse(material_keys_json); + REQUIRE(entries.is_array()); + REQUIRE(entries.size() == 1); + REQUIRE(entries[0]["material"]["filament_type"] == "PLA"); + REQUIRE(entries[0]["material"]["filament_vendor"] == "Generic"); + REQUIRE(entries[0]["material"]["filament_id"] == "GFL99"); + REQUIRE(entries[0]["slot"] == 0); + REQUIRE(entries[0]["keys"].is_array()); + REQUIRE(entries[0]["keys"].size() == 2); + REQUIRE(entries[0]["keys"][0] == "filament_retraction_length"); + } + release_PlateData_list(dst_plates); + } + } +} diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 844ccb6a8b..fc61083896 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -7,12 +7,20 @@ #include "test_utils.hpp" +#include + using namespace Slic3r; namespace { namespace fs = boost::filesystem; +// Whether a key is listed in a vector of keys (published_keys / skipped_keys). +bool contains_key(const std::vector &keys, const std::string &key) +{ + return std::find(keys.begin(), keys.end(), key) != keys.end(); +} + void write_print_preset(const DynamicPrintConfig &default_config, const fs::path &file, const std::string &name, const std::string &inherits = {}) { DynamicPrintConfig config(default_config); @@ -540,3 +548,530 @@ TEST_CASE("A printer specific filament supersedes the generic library filament w CHECK(is_compatible_with_printer(generic_lib, PresetWithVendorProfile(*printer_c, nullptr))); } +// A "published" 3MF keeps the user's currently-selected presets and overlays only the +// author-selected process keys onto the edited preset. Mirrors the GUI load path +// (src/slic3r/GUI/Plater.cpp): Preset::normalize before load_config_model, then the +// published overlay in PresetBundle::load_config_file_config. +TEST_CASE("Published 3MF overlays only the author-selected process keys onto the edited preset", "[Preset][Bundle][Published]") +{ + // The file config the GUI builds from a .3mf's project settings. + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // The loader derives the filament count from filament_colour and throws when it is + // empty ("Invalid configuration file"); a 3mf always carries it. + config.opt("filament_colour")->values = { "#FF0000" }; + // Process scalar key. + config.opt_float("layer_height") = 0.28; + // Process vector key, size 2 to match the edited preset's resized vector. + config.opt("wiping_volumes_extruders")->values = { 140., 150. }; + // Process vector key, size 2: deliberately mismatched against the edited preset. + config.opt("post_process")->values = { "script-a", "script-b" }; + // A filament key: published files may still carry legacy filament keys. + config.opt("nozzle_temperature")->values = { 220 }; + // A structural (denylisted) key: must be silently ignored even if a hand-crafted + // file lists it as published. full_print_config() omits the *_settings_id keys (they + // have no static counterpart), while a real 3mf project config carries it, so create + // it explicitly. + config.opt_string("print_settings_id", true) = "file process"; + // Project-level filament/purge data: must NOT cross over in published mode. + config.opt("flush_multiplier")->values = { 2., 2. }; + // A project-level option, to pin the project_config.apply_only() invariant. + config.opt("wipe_tower_x")->values = { 100. }; + // The author's bed type must NOT cross over either: the receiver keeps its own. + config.option("curr_bed_type")->setInt(BedType::btPC); + return config; + }; + + const std::vector published_keys = { + "layer_height", "wiping_volumes_extruders", "post_process", "nozzle_temperature", "print_settings_id" + }; + + PresetBundle bundle; + const std::string pre_load_name = bundle.prints.get_edited_preset().name; + const size_t pre_load_size = bundle.prints.size(); + + // The edited presets are the overlay targets: recognizable pre-load values. + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values = { 10., 20. }; + bundle.prints.get_edited_preset().config.opt("post_process")->values = { "existing-script" }; + bundle.prints.get_edited_preset().config.opt_string("print_settings_id") = "user process"; + // Capture the ctor-seeded project_config values; the assertions below check that the + // published load leaves them untouched rather than hardcoding the defaults. + const std::vector seed_filament_colour = bundle.project_config.opt("filament_colour")->values; + const std::vector seed_flush_multiplier = bundle.project_config.opt("flush_multiplier")->values; + const int seed_bed_type = bundle.project_config.option("curr_bed_type")->getInt(); + + DynamicPrintConfig config = make_file_config(); + // The GUI normalizes the config before load; do the same so only the production path is exercised. + Preset::normalize(config); + + PublishedConfig pub; + pub.published = true; + pub.published_keys = published_keys; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // a) The process scalar is overlaid onto the edited preset. + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); + + // b) A matching-size process vector is applied; a size-mismatched one is neither applied + // nor reported as skipped by accident — it lands in skipped_keys. + CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 140., 150. }); + CHECK(bundle.prints.get_edited_preset().config.opt("post_process")->values == std::vector{ "existing-script" }); + CHECK(contains_key(pub.skipped_keys, "post_process")); + + // c) A filament key is never applied anywhere and is reported as skipped (warning). + CHECK(bundle.prints.get_edited_preset().config.option("nozzle_temperature") == nullptr); + CHECK(contains_key(pub.skipped_keys, "nozzle_temperature")); + + // d) A structural key is silently ignored: neither applied nor reported as skipped. + CHECK(bundle.prints.get_edited_preset().config.opt_string("print_settings_id") == "user process"); + CHECK_FALSE(contains_key(pub.skipped_keys, "print_settings_id")); + + // Applied keys are not reported as skipped. + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); + + // e) project_config.apply_only() still runs, but in published mode only the plate/bed + // geometry crosses: the file's filament/purge data must NOT port to the receiver. + // Filament colors do not port; project_config keeps its ctor-seeded values. + CHECK(bundle.project_config.opt("filament_colour")->values != std::vector{ "#FF0000" }); + CHECK(bundle.project_config.opt("filament_colour")->values == seed_filament_colour); + // Purge data does not port either, and update_multi_material_filament_presets() cannot + // resurrect it (flush_multiplier stays at the ctor seed). + CHECK(bundle.project_config.opt("flush_multiplier")->values == seed_flush_multiplier); + // The author's bed type does not cross over: the receiver keeps its own. + CHECK(bundle.project_config.option("curr_bed_type")->getInt() == seed_bed_type); + // Plate/bed geometry still crosses. + CHECK(bundle.project_config.opt("wipe_tower_x")->values == std::vector{ 100. }); + + // The published path keeps the user's currently-selected presets: the edited process + // preset is the same preset as before the load. + CHECK(bundle.prints.get_edited_preset().name == pre_load_name); + CHECK(bundle.prints.size() == pre_load_size); + + // f) Non-published control: with published=false the overlay is disabled. The file's + // presets are loaded and selected instead (the user's preset is not kept) and no + // skipped_keys are produced. + PresetBundle control_bundle; + const size_t control_pre_size = control_bundle.prints.size(); + PublishedConfig control_pub; + control_pub.published = false; + control_pub.published_keys = published_keys; + DynamicPrintConfig control_config = make_file_config(); + Preset::normalize(control_config); + control_bundle.load_config_model("test.3mf", std::move(control_config), Semver(), &control_pub); + + CHECK(control_pub.skipped_keys.empty()); + CHECK(control_bundle.prints.size() > control_pre_size); + // The file's layer_height reached the edited preset through the normal preset import, + // not through the published overlay. + CHECK_THAT(control_bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); +} + +// The published printer overlay is restricted to the publishable retraction/z-hop allowlist +// (publishable_printer_keys). Matching-size retraction vectors apply; mismatched vectors are +// reported as skipped; any other printer-class key (e.g. machine_start_gcode) is +// contract-excluded: never applied and never reported. +TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys onto the edited printer preset", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + Preset::normalize(config); + // Matching size (the receiver's default printer has one extruder). + config.opt("retraction_length")->values = { 1.4 }; + // Size 2: mismatched against the single-extruder receiver. + config.opt("retraction_speed")->values = { 45., 55. }; + // Printer-class but outside the allowlist: must be silently contract-excluded. + config.opt_string("machine_start_gcode") = "G28 ; from file"; + + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") = "G28 ; user"; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length", "retraction_speed", "machine_start_gcode" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Matching-size retraction vector applied to the edited printer preset. + CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 1.4 }); + // Mismatched vector not applied and reported as skipped. + CHECK(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values == std::vector{ 30. }); + CHECK(contains_key(pub.skipped_keys, "retraction_speed")); + // Contract-excluded printer key: silently ignored, absent from skipped_keys. + CHECK(bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") == "G28 ; user"); + CHECK_FALSE(contains_key(pub.skipped_keys, "machine_start_gcode")); +} + +// A published 3MF can carry material-qualified keys; on load they are applied to the +// receiver's filament presets whose material identity matches the author's (filament_id when +// both sides have one, filament_type + vendor fallback otherwise). +TEST_CASE("Published 3MF applies material retraction keys onto the receiver's matching filament presets", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Two filament slots; filament_diameter drives the normalized per-slot vector sizes. + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + // Keep the multi-extruder consistency validation happy for a 2-slot config. + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + // Author per-slot material identity (filament_ids feeds the loader's local copy). + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + // Author per-slot retraction values. These are per-filament override keys that are not + // members of the static PrintRegionConfig, so full_print_config() omits them and they + // must be created explicitly (as nullable, matching the real 3MF project config). + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + config.option("filament_z_hop", true)->values = { 0.2, 0.3 }; + return config; + }; + + PresetBundle bundle; + // Receiver materials with matching stable ids. + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.filament_id = "GFL99"; + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt_string("filament_vendor", 0u) = "Generic"; + // In-memory preset configs carry the per-filament retraction keys as nullable options + // (the type real filament presets hold), so access them through the nullable type. + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_settings_id")->values = { "receiver-pla" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.filament_id = "GFT99"; + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt_string("filament_vendor", 0u) = "Generic"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + // The z-hop key must exist on the receiver preset for the overlay to apply into it. + petg.config.opt("filament_z_hop", true)->values = { 0.1 }; + bundle.filament_presets = { "My PLA", "My PETG" }; + + PublishedMaterialEntry pla_entry; + pla_entry.filament_type = "PLA"; + pla_entry.filament_vendor = "Generic"; + pla_entry.filament_id = "GFL99"; + pla_entry.slot = 0; // the author's PLA slot + pla_entry.keys = { "filament_retraction_length", "filament_settings_id" }; + PublishedMaterialEntry petg_entry; + petg_entry.filament_type = "PETG"; + petg_entry.filament_vendor = "Generic"; + petg_entry.filament_id = "GFT99"; + petg_entry.slot = 1; // the author's PETG slot + petg_entry.keys = { "filament_retraction_length", "filament_z_hop" }; + // A material that does not exist on the author's side: whole entry skipped, no reporting. + PublishedMaterialEntry abs_entry; + abs_entry.filament_type = "ABS"; + abs_entry.filament_id = "GFX99"; + abs_entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { pla_entry, petg_entry, abs_entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Per-slot scalar copy: the author's slot value lands in the matching receiver preset. + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); + CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_z_hop")->values == std::vector{ 0.3 }); + // Structural keys inside a material entry are silently ignored: the receiver's own + // filament_settings_id is left untouched and nothing is reported for it. + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_settings_id")->values == std::vector{ "receiver-pla" }); + CHECK_FALSE(contains_key(pub.skipped_keys, "material:GFL99 (filament_settings_id)")); + // Everything applied; the unknown material entry produced no skipped entry. + CHECK(pub.skipped_keys.empty()); +} + +// Material-qualified keys whose receiver-side material match is missing or ambiguous must be +// reported as skipped (material-qualified) and never applied; a single unqualified type +// fallback still applies. +TEST_CASE("Published 3MF reports material keys with no unique receiver match as skipped", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Three author slots: PLA, PETG, ABS. + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF" }; + config.opt("filament_type")->values = { "PLA", "PETG", "ABS" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99", "GFA99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2, 1.5 }; + return config; + }; + + PresetBundle bundle; + // Two receiver presets of the SAME type with no filament_id: the type fallback is ambiguous. + Preset &pla_a = add_inmemory_preset(bundle.filaments, "My PLA A"); + pla_a.config.opt_string("filament_type", 0u) = "PLA"; + pla_a.config.opt_string("filament_vendor", 0u) = "Generic"; + pla_a.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &pla_b = add_inmemory_preset(bundle.filaments, "My PLA B"); + pla_b.config.opt_string("filament_type", 0u) = "PLA"; + pla_b.config.opt_string("filament_vendor", 0u) = "Generic"; + pla_b.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // A unique PETG receiver preset: the single type fallback is unambiguous. + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt_string("filament_vendor", 0u) = "Generic"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + bundle.filament_presets = { "My PLA A", "My PLA B", "My PETG" }; + + auto make_entry = [](const std::string &type, const std::string &key) { + PublishedMaterialEntry entry; + entry.filament_type = type; + entry.filament_vendor = "Generic"; + entry.keys = { key }; + return entry; + }; + + PublishedMaterialEntry pla_entry = make_entry("PLA", "filament_retraction_length"); + pla_entry.slot = 0; // the author's PLA slot + PublishedMaterialEntry petg_entry = make_entry("PETG", "filament_retraction_length"); + petg_entry.slot = 1; // the author's PETG slot + PublishedMaterialEntry abs_entry = make_entry("ABS", "filament_retraction_length"); // author slot exists, no receiver match + abs_entry.slot = 2; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { pla_entry, petg_entry, abs_entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Ambiguous type fallback: neither PLA preset is touched, reported as skipped. + CHECK(bundle.filaments.find_preset("My PLA A")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filaments.find_preset("My PLA B")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(contains_key(pub.skipped_keys, "material:PLA (filament_retraction_length)")); + // Unambiguous single fallback: applied. + CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); + CHECK_FALSE(contains_key(pub.skipped_keys, "material:PETG (filament_retraction_length)")); + // Receiver-side miss: the author slot exists but no receiver preset matches. + CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); +} + +// A slotted material entry carries the author's per-slot overrides: on load it applies to the +// receiver's matching preset at the author's slot ordinal (first matching author slot -> first +// matching receiver preset, second -> second, ...). Legacy entries without a slot keep applying +// to every matching receiver preset. +TEST_CASE("Published material keys apply to the receiver's matching filament preset by author slot ordinal", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Three author slots of the SAME material (PETG) with distinct per-slot retraction. + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF" }; + config.opt("filament_type")->values = { "PETG", "PETG", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFT99", "GFT99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.7, 0.8, 0.9 }; + return config; + }; + auto make_slotted_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.filament_type = "PETG"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFT99"; + entry.slot = slot; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + auto add_petg_preset = [](PresetBundle &bundle, const std::string &name) { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.filament_id = "GFT99"; + preset.config.opt_string("filament_type", 0u) = "PETG"; + preset.config.opt_string("filament_vendor", 0u) = "Generic"; + preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; + return &preset; + }; + + // Three receiver presets, one per author slot: each gets its ordinal's value. + { + PresetBundle bundle; + add_petg_preset(bundle, "My PETG 1"); + add_petg_preset(bundle, "My PETG 2"); + add_petg_preset(bundle, "My PETG 3"); + bundle.filament_presets = { "My PETG 1", "My PETG 2", "My PETG 3" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_slotted_entry(0), make_slotted_entry(1), make_slotted_entry(2) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Each author slot's value lands in the receiver preset at the same ordinal. + CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); + CHECK(bundle.filaments.find_preset("My PETG 2")->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); + CHECK(bundle.filaments.find_preset("My PETG 3")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(pub.skipped_keys.empty()); + } + + // A single receiver preset: only the first ordinal fits; the later slots are reported + // with a slot-qualified label. + { + PresetBundle bundle; + add_petg_preset(bundle, "My PETG 1"); + bundle.filament_presets = { "My PETG 1" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_slotted_entry(0), make_slotted_entry(1), make_slotted_entry(2) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); + CHECK(contains_key(pub.skipped_keys, "material:GFT99 slot 1 (filament_retraction_length)")); + CHECK(contains_key(pub.skipped_keys, "material:GFT99 slot 2 (filament_retraction_length)")); + CHECK_FALSE(contains_key(pub.skipped_keys, "material:GFT99 slot 0 (filament_retraction_length)")); + } + + // A legacy entry (no slot) applies to every matching receiver preset, from the first + // author slot. + { + PresetBundle bundle; + add_petg_preset(bundle, "My PETG 1"); + add_petg_preset(bundle, "My PETG 2"); + bundle.filament_presets = { "My PETG 1", "My PETG 2" }; + + PublishedMaterialEntry legacy = make_slotted_entry(0); + legacy.slot = -1; // legacy: no slot field + PublishedConfig pub; + pub.published = true; + pub.material_keys = { legacy }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); + CHECK(bundle.filaments.find_preset("My PETG 2")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); + CHECK(pub.skipped_keys.empty()); + } + + // An out-of-range author slot is silently skipped: nothing applied, nothing reported. + { + PresetBundle bundle; + add_petg_preset(bundle, "My PETG 1"); + bundle.filament_presets = { "My PETG 1" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_slotted_entry(5) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// The published overlay must validate '#' variant indices: an out-of-range index must be +// reported as skipped and must NOT resize/corrupt the receiver's vector, and a variant suffix +// on a scalar key must be rejected instead of silently no-op'd. +TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffixed scalar keys", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Vector key, size 2 (matches the receiver's resized vector); distinct values so the + // applied element is observable. + config.opt("wiping_volumes_extruders")->values = { 140., 150. }; + config.opt_float("layer_height") = 0.28; + Preset::normalize(config); + + PresetBundle bundle; + bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values = { 10., 20. }; + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "wiping_volumes_extruders#5", "wiping_volumes_extruders#1", "layer_height#0" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // In-range variant applied element-wise; the out-of-range one did not resize the vector. + CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 10., 150. }); + CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values.size() == 2); + // Out-of-range variant and variant-suffixed scalar are reported as skipped. + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders#5")); + CHECK(contains_key(pub.skipped_keys, "layer_height#0")); + CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders#1")); + // The scalar was never applied. + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.1, 0.000001)); +} + +// A receiver filament preset whose material identity fields are missing (hand-edited preset +// file) must not crash the material pass: the entry simply cannot match and is reported skipped. +TEST_CASE("Published 3MF survives a receiver filament preset missing its material identity", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + Preset::normalize(config); + + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + // Malformed receiver preset: the identity options are missing entirely. + pla.config.erase("filament_type"); + pla.config.erase("filament_vendor"); + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFL99"; + entry.slot = 0; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // No match possible without the identity fields: reported skipped, preset untouched. + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (filament_retraction_length)")); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); +} + +// The printer publishable allowlist is the union of the printer tab's "Retraction" and +// "Z-Hop" optgroup option lists; lock the exact contents and order (Tab.cpp). +TEST_CASE("Printer publishable allowlist matches the printer tab's Retraction and Z-Hop optgroups", "[Preset][Bundle][Published]") +{ + auto keys_of = [](const std::vector& opts) { + std::vector keys; + keys.reserve(opts.size()); + for (const PublishablePrinterOption& opt : opts) + keys.emplace_back(opt.key); + return keys; + }; + + const std::vector expected_retraction = { + "retraction_length", "retract_restart_extra", "retraction_speed", "deretraction_speed", + "retraction_minimum_travel", "retract_when_changing_layer", "wipe", "wipe_distance", + "retract_before_wipe", "retract_after_wipe" + }; + const std::vector expected_z_hop = { + "retract_lift_enforce", "z_hop_types", "z_hop", "travel_slope", "retract_lift_above", + "retract_lift_below" + }; + + CHECK(keys_of(publishable_printer_retraction_options()) == expected_retraction); + CHECK(keys_of(publishable_printer_z_hop_options()) == expected_z_hop); + + std::set expected_union(expected_retraction.begin(), expected_retraction.end()); + expected_union.insert(expected_z_hop.begin(), expected_z_hop.end()); + CHECK(publishable_printer_keys() == expected_union); +} + From 96f5a2338711e891c3a7270c76f991f1797109ca Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 12:53:44 +0800 Subject: [PATCH 021/208] Only serialize selected published settings. Minor cleanup --- src/libslic3r/Format/bbs_3mf.cpp | 6 +- src/libslic3r/Format/bbs_3mf.hpp | 1 + src/libslic3r/PublishSettings.cpp | 57 ++++++++++++++++++ src/libslic3r/PublishSettings.hpp | 8 +++ src/slic3r/GUI/ConfigValueFormatter.cpp | 6 +- src/slic3r/GUI/Plater.cpp | 17 ++++-- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 32 ++++++++-- src/slic3r/GUI/PublishSettingsDialog.hpp | 2 + tests/libslic3r/test_3mf.cpp | 77 ++++++++++++++++++++++++ 10 files changed, 190 insertions(+), 18 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 3000adb441..a5d20807b7 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -5943,6 +5943,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool m_save_gcode { false }; // whether to save gcode for normal save bool m_skip_model { false }; // skip model when exporting .gcode.3mf bool m_skip_auxiliary { false }; // skip normal axuiliary files + bool m_minimal_published { false }; // published 3MF: omit embedded preset files bool m_use_loaded_id { false }; // whether to use loaded id for identify_id bool m_share_mesh { false }; // whether to share mesh between objects std::string m_thumbnail_middle = PRINTER_THUMBNAIL_MIDDLE_FILE; @@ -6042,6 +6043,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_skip_auxiliary = store_params.strategy & SaveStrategy::SkipAuxiliary; m_share_mesh = store_params.strategy & SaveStrategy::ShareMesh; m_from_backup_save = store_params.strategy & SaveStrategy::Backup; + m_minimal_published = store_params.strategy & SaveStrategy::MinimalPublished; m_use_loaded_id = store_params.strategy & SaveStrategy::UseLoadedId; @@ -6464,8 +6466,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (cb_cancel) return false; } - // BBS: add project config - if (project_presets.size() > 0) { + // BBS: add project config (omitted for minimal published 3MF) + if (!m_minimal_published && project_presets.size() > 0) { // BBS: add project embedded preset files _add_project_embedded_presets_to_archive(archive, model, project_presets); diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 9c697a14fc..0addf23385 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -145,6 +145,7 @@ enum class SaveStrategy SkipAuxiliary = 1 << 9, UseLoadedId = 1 << 10, ShareMesh = 1 << 11, + MinimalPublished = 1 << 12, SplitModel = 0x1000 | ProductionExt, Encrypted = SecureContentExt | SplitModel, diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index 4c0a851696..9ac0c49472 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -2,6 +2,7 @@ #include "PresetBundle.hpp" #include "Preset.hpp" +#include "PrintConfig.hpp" #include @@ -102,4 +103,60 @@ std::vector collect_dirty_settings_keys(const PresetBundle& bundle) return keys; } +DynamicPrintConfig filter_published_config( + const DynamicPrintConfig &full_config, + const std::vector &published_keys, + const std::vector &material_keys) +{ + DynamicPrintConfig filtered; + + std::set base_keys_to_include; + + // 1. Mandatory material identity & slot count keys for 3MF validation/normalization + static const std::vector s_material_identity_keys = { + "filament_colour", + "filament_type", + "filament_vendor", + "filament_ids", + "filament_diameter", + "filament_self_index", + "filament_extruder_variant" + }; + for (const std::string &key : s_material_identity_keys) + base_keys_to_include.insert(key); + + // 2. Published plate / bed geometry keys (wipe tower positioning) + static const std::vector s_plate_geometry_keys = { + "wipe_tower_x", + "wipe_tower_y", + "wipe_tower_rotation_angle" + }; + for (const std::string &key : s_plate_geometry_keys) + base_keys_to_include.insert(key); + + // 3. Process and printer published keys + for (const std::string &key : published_keys) { + const std::string base_key = key.substr(0, key.find('#')); + if (!base_key.empty()) + base_keys_to_include.insert(base_key); + } + + // 4. Material-specific published keys + for (const PublishedMaterialEntry &entry : material_keys) { + for (const std::string &key : entry.keys) { + const std::string base_key = key.substr(0, key.find('#')); + if (!base_key.empty()) + base_keys_to_include.insert(base_key); + } + } + + // Copy selected options from full_config into filtered config + for (const std::string &key : base_keys_to_include) { + if (const ConfigOption *opt = full_config.option(key)) + filtered.set_key_value(key, opt->clone()); + } + + return filtered; +} + } // namespace Slic3r diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index ecc939d883..6525fbb66e 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -53,4 +53,12 @@ struct PublishedMaterialEntry { int slot{-1}; std::vector keys; }; + +// Constructs a minimal DynamicPrintConfig for a published 3MF export containing only the +// author-selected published keys, material keys, material identity fields, and plate geometry keys. +class DynamicPrintConfig; +DynamicPrintConfig filter_published_config( + const DynamicPrintConfig &full_config, + const std::vector &published_keys, + const std::vector &material_keys); } diff --git a/src/slic3r/GUI/ConfigValueFormatter.cpp b/src/slic3r/GUI/ConfigValueFormatter.cpp index f3ea539d4f..6f9128841b 100644 --- a/src/slic3r/GUI/ConfigValueFormatter.cpp +++ b/src/slic3r/GUI/ConfigValueFormatter.cpp @@ -73,7 +73,7 @@ wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& std::string temp_str = opt_key; if (pos > 0) { boost::erase_head(temp_str, pos + 1); - orig_opt_idx = static_cast(atoi(temp_str.c_str())); + orig_opt_idx = std::atoi(temp_str.c_str()); } opt_idx = orig_opt_idx >= 0 ? orig_opt_idx : 0; const std::string pure_key = get_pure_opt_key(opt_key); @@ -83,8 +83,8 @@ wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& } auto opt_vector = dynamic_cast(option); - if (option->is_scalar() && config.option(pure_key)->is_nil() || - option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx)) + if ((option->is_scalar() && option->is_nil()) || + (option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx))) return _L("N/A"); wxString out; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fd307d32d2..571d7350b9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7324,7 +7324,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } auto choise = wxGetApp().app_config->get("no_warn_when_modified_gcodes"); - if (choise.empty() || choise != "true") { + if (!published_config.published && (choise.empty() || choise != "true")) { // BBS: first validate the printer // validate the system profiles std::set modified_gcodes; @@ -16204,16 +16204,21 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info->metadata_items["published_keys"] = j.dump(); model.model_info->metadata_items["published_material_keys"] = jm.dump(); - // Same file layout save_project() uses for its project files, plus SaveStrategy::Silence: + // Minimal published export: filter full_config to only the published keys, material keys, + // identity fields, and plate geometry keys, and omit project-embedded preset dumps. + DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + + // Same file layout save_project() uses for its project files, plus SaveStrategy::Silence and SaveStrategy::MinimalPublished: // without it export_3mf() calls set_project_filename() on success, which would make this // pure export the current project file. Silence keeps the project state untouched, exactly // like export_core_3mf(). - auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence; + auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence | SaveStrategy::MinimalPublished; bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); if (full_pathnames) save_strategy = save_strategy | SaveStrategy::FullPathSources; - const int ret = export_3mf(into_path(path), save_strategy); + const int ret = export_3mf(into_path(path), save_strategy, -1, nullptr, &filtered_cfg); // Restore the previous metadata state (both on success and on failure). if (!had_model_info) { @@ -16737,7 +16742,7 @@ void publish(Model &model, SaveStrategy strategy) { } // BBS: backup -int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn) +int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn, const DynamicPrintConfig* override_config) { int ret = 0; //if (p->model.objects.empty()) { @@ -16759,7 +16764,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy // modify model publish(p->model, strategy); - DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig cfg = override_config ? *override_config : wxGetApp().preset_bundle->full_config_secure(); const std::string path_u8 = into_u8(path); wxBusyCursor wait; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5a83e5e4e1..d29e86a4fa 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -505,7 +505,7 @@ public: //void export_amf(); //BBS add extra param for exporting 3mf silence // BBS: backup - int export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path(), SaveStrategy strategy = SaveStrategy::Default, int export_plate_idx = -1, Export3mfProgressFn proFn = nullptr); + int export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path(), SaveStrategy strategy = SaveStrategy::Default, int export_plate_idx = -1, Export3mfProgressFn proFn = nullptr, const DynamicPrintConfig* override_config = nullptr); //BBS void publish_project(); diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 36b7372d4a..90ad2e0dc3 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -321,8 +321,8 @@ void PublishSettingsDialog::build_option_model() cat.filament_id = identity.id; cat.filament_slot = slot; if (!icon_name.empty()) { - ScalableBitmap icon_bmp(m_scroll, icon_name, 18); - cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, icon_bmp.bmp()); + cat.icon_bmp = ScalableBitmap(m_scroll, icon_name, 18); + cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, cat.icon_bmp.bmp()); } if (section == Section::Material) { // Material header: [master (title)][slim tri-state select-all]. @@ -667,8 +667,8 @@ size_t PublishSettingsDialog::section_group_for(Section kind) } if (!section.icon_name.empty()) { - ScalableBitmap icon_bmp(m_scroll, section.icon_name, 18); - section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, icon_bmp.bmp()); + section.icon_bmp = ScalableBitmap(m_scroll, section.icon_name, 18); + section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, section.icon_bmp.bmp()); } section.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_section(new_index); }); @@ -1062,12 +1062,32 @@ std::vector PublishSettingsDialog::GetPublishedM void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) { - // The remaining bitmap icons are rescaled; the collapse chevrons are - // vector-drawn and repaint themselves. + // Rescale toolbar bitmaps and icons; collapse chevrons are vector-drawn and repaint themselves. m_search.msw_rescale(); m_menu.msw_rescale(); m_filter_box->SetIcon(m_search.bmp()); m_menu_button->SetBitmap(m_menu.bmp()); + + for (SectionGroup& section : m_sections) { + if (section.icon != nullptr && section.icon_bmp.bmp().IsOk()) { + section.icon_bmp.msw_rescale(); + section.icon->SetBitmap(section.icon_bmp.bmp()); + } + if (section.header_line != nullptr) + section.header_line->Rescale(); + } + + for (Category& cat : m_categories) { + if (cat.icon != nullptr && cat.icon_bmp.bmp().IsOk()) { + cat.icon_bmp.msw_rescale(); + cat.icon->SetBitmap(cat.icon_bmp.bmp()); + } + for (Subcategory& sub : cat.subs) { + if (sub.header != nullptr) + sub.header->Rescale(); + } + } + SetMinSize(FromDIP(wxSize(600, 500))); m_scroll->FitInside(); m_list_sizer->Layout(); diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index ff9cb88e4b..4767b9a29e 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -91,6 +91,7 @@ private: Section section{Section::Print}; size_t group{0}; // index into m_sections std::string icon_name; // bitmap name; empty = no icon + ScalableBitmap icon_bmp; // scalable bitmap for DPI changes wxStaticBitmap* icon{nullptr}; // 18px category icon (null when icon_name empty) wxCheckBox* header{nullptr}; // select-all tri-state // Material opt-in: the master checkbox carries the material title and @@ -117,6 +118,7 @@ private: wxString title; // _L("Printer") / _L("Filament") / _L("Process") Section kind{Section::Print}; // maps 1:1 to the display group std::string icon_name; // "printer" / "filament" / "process" + ScalableBitmap icon_bmp; // scalable bitmap for DPI changes wxStaticBitmap* icon{nullptr}; // 18px, like Category::icon wxCheckBox* header{nullptr}; // tri-state select-all; nullptr for the Filament group ::StaticLine* header_line{nullptr}; // Filament group's clickable title diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 4eccf0e9fa..462324ea13 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -8,6 +8,7 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/MultiNozzleUtils.hpp" #include "libslic3r/ProjectTask.hpp" +#include "libslic3r/PublishSettings.hpp" #include "test_utils.hpp" @@ -674,3 +675,79 @@ SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf } } } + +SCENARIO("Minimal published 3MF serialization filters config and omits embedded presets", "[3mf]") { + GIVEN("a full print configuration and published keys") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.set_key_value("layer_height", new ConfigOptionFloat(0.24)); + full_cfg.set_key_value("retraction_length", new ConfigOptionFloats({ 1.2 })); + + const std::vector published_keys = { "layer_height", "retraction_length" }; + const std::vector material_keys = { + { "PLA", "Generic", "GFL99", 0, { "filament_retraction_length" } } + }; + + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + + // Filtered config must contain the published keys and identity keys + REQUIRE(filtered_cfg.option("layer_height") != nullptr); + REQUIRE(filtered_cfg.option("retraction_length") != nullptr); + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + REQUIRE(filtered_cfg.option("filament_type") != nullptr); + REQUIRE(filtered_cfg.option("wipe_tower_x") != nullptr); + + // Non-published settings should NOT be in filtered_cfg + REQUIRE(filtered_cfg.option("sparse_infill_density") == nullptr); + REQUIRE(filtered_cfg.option("machine_start_gcode") == nullptr); + + model.model_info = std::make_shared(); + model.model_info->metadata_items["published"] = "1"; + model.model_info->metadata_items["published_keys"] = R"(["layer_height","retraction_length"])"; + + ScopedTemporaryDir backup_dir("orca_min_pub"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored using SaveStrategy::MinimalPublished") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + // Create a fake project preset to verify it gets omitted with MinimalPublished + Preset preset(Preset::TYPE_PRINT, "TestPrintPreset"); + preset.config = full_cfg; + std::vector project_presets = { &preset }; + + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &filtered_cfg; + store_params.project_presets = project_presets; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector loaded_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &loaded_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the 3MF loads successfully without project embedded presets") { + REQUIRE(loaded); + REQUIRE(loaded_presets.empty()); + REQUIRE(dst_config.option("layer_height") != nullptr); + REQUIRE(dst_config.opt_float("layer_height") == 0.24); + REQUIRE(dst_config.option("sparse_infill_density") == nullptr); + } + release_PlateData_list(dst_plates); + } + } +} + From d124e1ccbc05c35d5f6d3815d46080bc2437846d Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 13:41:38 +0800 Subject: [PATCH 022/208] Update unit test --- src/libslic3r/Format/bbs_3mf.hpp | 4 +++- tests/libslic3r/test_3mf.cpp | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 0addf23385..57a40c2012 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -145,7 +145,9 @@ enum class SaveStrategy SkipAuxiliary = 1 << 9, UseLoadedId = 1 << 10, ShareMesh = 1 << 11, - MinimalPublished = 1 << 12, + // Keep this separate from SplitModel, which uses the 0x1000 bit as part of its + // production-extension value. + MinimalPublished = 1 << 13, SplitModel = 0x1000 | ProductionExt, Encrypted = SecureContentExt | SplitModel, diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 462324ea13..daf46c3834 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -730,6 +730,8 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded REQUIRE(store_bbs_3mf(store_params)); Model dst_model; + ScopedTemporaryDir loaded_backup_dir("orca_min_pub_loaded"); + dst_model.set_backup_path(loaded_backup_dir.string()); DynamicPrintConfig dst_config; ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; PlateDataPtrs dst_plates; @@ -743,11 +745,10 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded REQUIRE(loaded); REQUIRE(loaded_presets.empty()); REQUIRE(dst_config.option("layer_height") != nullptr); - REQUIRE(dst_config.opt_float("layer_height") == 0.24); + REQUIRE_THAT(dst_config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.24, 1e-6)); REQUIRE(dst_config.option("sparse_infill_density") == nullptr); } release_PlateData_list(dst_plates); } } } - From 99db5cca38dfe040ada967e3cb10105a642b75aa Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 14:00:20 +0800 Subject: [PATCH 023/208] Renamed to Publish instead of Publish Settings --- src/slic3r/GUI/MainFrame.cpp | 10 +++------- src/slic3r/GUI/Plater.cpp | 2 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 11 +++++------ 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5594241988..abca800277 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -39,7 +39,6 @@ #include "Plater.hpp" #include "WebViewDialog.hpp" #include "../Utils/Process.hpp" -#include "format.hpp" // BBS #include "PartPlate.hpp" #include "Preferences.hpp" @@ -49,9 +48,6 @@ #include "../Utils/NetworkAgentFactory.hpp" #include "../Utils/PrintHost.hpp" -#include -#include - #include "GUI_App.hpp" #include "UnsavedChangesDialog.hpp" #include "PublishSettingsDialog.hpp" @@ -2822,7 +2818,7 @@ void MainFrame::init_menubar_as_editor() [this](){return m_plater != nullptr && can_save_as(); }, this); #endif - // BBS: publish settings + // BBS: publish fileMenu->AppendSeparator(); auto publish_handler = [this](wxCommandEvent&) { if (!m_plater) return; @@ -2832,11 +2828,11 @@ void MainFrame::init_menubar_as_editor() }; #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Publish Settings") + dots, _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots, _L("Export a 3MF file with the selected settings embedded"), publish_handler, "menu_publish", nullptr, [this](){return can_export_model(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Publish Settings") + dots, _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots, _L("Export a 3MF file with the selected settings embedded"), publish_handler, "", nullptr, [this](){return can_export_model(); }, this); #endif diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 571d7350b9..82dd38fe97 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16240,7 +16240,7 @@ int Plater::export_published_3mf(const std::vector& published_keys, if (ret < 0) { MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), - _L("Publish Settings"), wxOK | wxICON_WARNING).ShowModal(); + _L("Publish"), wxOK | wxICON_WARNING).ShowModal(); return wxID_CANCEL; } return wxID_YES; diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 90ad2e0dc3..548c1402fe 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -98,7 +98,7 @@ struct MaterialIdentity // Menu ids for show_menu(). Dedicated range above the standard ids so the popup cannot // collide with application-level bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). enum { - kPublishSelectAll = wxID_HIGHEST + 1, + kPublishSelectAll = wxID_HIGHEST + 1, kPublishDeselectAll, kPublishSelectVisible, kPublishDeselectVisible, @@ -154,7 +154,7 @@ wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPr PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), wxID_ANY, - _L("Publish Settings"), + _L("Publish"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) @@ -233,8 +233,7 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) EndModal(wxID_OK); return; } - MessageDialog(this, _L("No settings selected. Please select at least one setting to publish."), _L("Publish Settings"), - wxOK | wxICON_WARNING) + MessageDialog(this, _L("No settings selected. Please select at least one setting to publish."), _L("Publish"), wxOK | wxICON_WARNING) .ShowModal(); }); dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); @@ -322,7 +321,7 @@ void PublishSettingsDialog::build_option_model() cat.filament_slot = slot; if (!icon_name.empty()) { cat.icon_bmp = ScalableBitmap(m_scroll, icon_name, 18); - cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, cat.icon_bmp.bmp()); + cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, cat.icon_bmp.bmp()); } if (section == Section::Material) { // Material header: [master (title)][slim tri-state select-all]. @@ -668,7 +667,7 @@ size_t PublishSettingsDialog::section_group_for(Section kind) if (!section.icon_name.empty()) { section.icon_bmp = ScalableBitmap(m_scroll, section.icon_name, 18); - section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, section.icon_bmp.bmp()); + section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, section.icon_bmp.bmp()); } section.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_section(new_index); }); From 76ec2f10c63ec1467c55320d21d2fcc3579074fb Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 16:19:46 +0800 Subject: [PATCH 024/208] Switch to a Tab layout for the Publish dialog --- src/slic3r/GUI/PublishSettingsDialog.cpp | 845 ++++++++++------------- src/slic3r/GUI/PublishSettingsDialog.hpp | 118 ++-- 2 files changed, 427 insertions(+), 536 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 548c1402fe..b67a962650 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -16,85 +16,13 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PublishSettings.hpp" -#include #include #include #include -#include - -// Custom-painted collapse chevron: a vector path (down when expanded, right -// when collapsed) drawn in the dialog's secondary-text grey. Vector drawing -// keeps it crisp at any DPI (the earlier 16px bitmap chevron looked -// blurry/wide). -class CollapseChevron : public wxWindow -{ -public: - explicit CollapseChevron(wxWindow* parent) : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) - { - SetBackgroundColour(parent->GetBackgroundColour()); - DisableFocusFromKeyboard(); - SetMinSize(FromDIP(wxSize(10, 10))); - Bind(wxEVT_PAINT, &CollapseChevron::on_paint, this); - } - - void SetCollapsed(bool collapsed) - { - if (m_collapsed == collapsed) - return; - m_collapsed = collapsed; - Refresh(); - } - -private: - void on_paint(wxPaintEvent&) - { - wxPaintDC dc(this); - wxGraphicsContext* ctx = wxGraphicsContext::Create(dc); - if (ctx == nullptr) - return; - ctx->SetAntialiasMode(wxANTIALIAS_DEFAULT); - // Same grey as the row value labels, dark-mode aware. - wxPen pen(StateColor::darkModeColorFor(wxColour("#6B6B6B")), FromDIP(1.5), wxPENSTYLE_SOLID); - pen.SetCap(wxCAP_ROUND); - pen.SetJoin(wxJOIN_ROUND); - ctx->SetPen(pen); - - const wxSize sz = GetClientSize(); - const double cx = sz.x / 2.0; - const double cy = sz.y / 2.0; - const double r = std::min(sz.x, sz.y) * 0.32; - - wxGraphicsPath path = ctx->CreatePath(); - if (m_collapsed) { - // Right-pointing chevron ">". - path.MoveToPoint(cx - r, cy - r); - path.AddLineToPoint(cx + r, cy); - path.AddLineToPoint(cx - r, cy + r); - } else { - // Down-pointing chevron "v". - path.MoveToPoint(cx - r, cy - r); - path.AddLineToPoint(cx, cy + r); - path.AddLineToPoint(cx + r, cy - r); - } - ctx->StrokePath(path); - delete ctx; - } - - bool m_collapsed{false}; -}; namespace Slic3r { namespace GUI { namespace { -// Identity of a filament slot: the stable material id when present, else the -// type+vendor pair. Used to emit the PublishedMaterialEntry identity fields. -struct MaterialIdentity -{ - std::string type; - std::string vendor; - std::string id; -}; - // Menu ids for show_menu(). Dedicated range above the standard ids so the popup cannot // collide with application-level bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). enum { @@ -106,9 +34,9 @@ enum { kPublishFilterNonSelected }; -MaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& full) +PublishMaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& full) { - MaterialIdentity identity; + PublishMaterialIdentity identity; if (const auto* types = full.opt("filament_type")) if (slot < types->size()) identity.type = types->get_at(slot); @@ -143,7 +71,7 @@ wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPr if (preset != nullptr && !preset->name.empty()) return from_u8(material_display_name(preset->name)); } - const MaterialIdentity identity = material_identity(slot, full); + const PublishMaterialIdentity identity = material_identity(slot, full); if (!identity.type.empty()) return from_u8(identity.type); return _L("Material"); @@ -163,8 +91,6 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) { SetBackgroundColour(*wxWHITE); - build_option_model(); - // --- filter bar: search box, All/None, menu button --- wxPanel* f_bar = new wxPanel(this, wxID_ANY); f_bar->SetBackgroundColour(GetBackgroundColour()); @@ -212,6 +138,17 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) f_bar->SetSizerAndFit(f_sizer); + constexpr long tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | + wxTR_FULL_ROW_HIGHLIGHT; + m_outer_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, tab_style); + m_outer_tabs->SetFont(Label::Body_14); + m_outer_tabs->SetBackgroundColour(GetBackgroundColour()); + + m_outer_host = new wxPanel(this, wxID_ANY); + m_outer_host->SetBackgroundColour(GetBackgroundColour()); + m_outer_host_sizer = new wxBoxSizer(wxVERTICAL); + m_outer_host->SetSizer(m_outer_host_sizer); + wxBoxSizer* w_sizer = new wxBoxSizer(wxVERTICAL); wxStaticText* msg = new wxStaticText(this, wxID_ANY, _L("Select which settings to embed in the 3MF file")); @@ -220,7 +157,10 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) w_sizer->Add(msg, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); w_sizer->Add(f_bar, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); - w_sizer->Add(m_scroll, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + w_sizer->Add(m_outer_tabs, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + w_sizer->Add(m_outer_host, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + + build_option_model(); auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); @@ -261,23 +201,18 @@ void PublishSettingsDialog::build_option_model() PresetBundle* bundle = wxGetApp().preset_bundle; DynamicPrintConfig full = bundle->full_config(); - m_scroll = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); - m_scroll->SetScrollRate(0, 10); - m_scroll->SetBackgroundColour(GetBackgroundColour()); - m_list_sizer = new wxBoxSizer(wxVERTICAL); - m_scroll->SetSizer(m_list_sizer); - m_scroll->DisableFocusFromKeyboard(); - m_scroll->Bind(wxEVT_RIGHT_DOWN, &PublishSettingsDialog::show_menu, this); - - // "no matching rows" info label, shown by apply_filter(). - m_info = new wxStaticText(m_scroll, wxID_ANY, ""); - m_info->SetFont(Label::Body_13); - m_list_sizer->Add(m_info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); - m_info->Hide(); m_info_nonsel = _L("No selected items..."); m_info_allsel = _L("All items selected..."); m_info_empty = _L("No matching items..."); + // Keep the tab order explicit: Section's enum order is Print, Printer, + // Material, while the dialog presents Printer, Filament, Process. + m_sections.reserve(3); + const Section tab_order[] = {Section::Printer, Section::Material, Section::Print}; + for (Section kind : tab_order) + section_group_for(kind); + bind_tab_events(); + // Shared per-option label/value computation; returns false when the option // must be skipped (denylisted / unknown / empty label). value is the pure // stringified value; unit is the translated sidetext (may be empty). @@ -296,165 +231,12 @@ void PublishSettingsDialog::build_option_model() return true; }; - // Find-or-create a main category; builds its header row UI on first use. - // Material sections are additionally matched by identity and slot so two - // identities (or slots) that happen to share a title stay separate. - auto category_index_for = [this, &full](const wxString& title, Section section, const std::string& icon_name, size_t group, - const MaterialIdentity& identity = MaterialIdentity(), size_t slot = 0) -> size_t { - for (size_t i = 0; i < m_categories.size(); ++i) { - if (m_categories[i].title != title || m_categories[i].section != section) - continue; - if (section == Section::Material && - (m_categories[i].filament_id != identity.id || m_categories[i].filament_type != identity.type || - m_categories[i].filament_vendor != identity.vendor || m_categories[i].filament_slot != slot)) - continue; - return i; - } - Category cat; - cat.title = title; - cat.section = section; - cat.group = group; - cat.icon_name = icon_name; - cat.filament_type = identity.type; - cat.filament_vendor = identity.vendor; - cat.filament_id = identity.id; - cat.filament_slot = slot; - if (!icon_name.empty()) { - cat.icon_bmp = ScalableBitmap(m_scroll, icon_name, 18); - cat.icon = new wxStaticBitmap(m_scroll, wxID_ANY, cat.icon_bmp.bmp()); - } - if (section == Section::Material) { - // Material header: [master (title)][slim tri-state select-all]. - // The master is a 2-state opt-in that carries the material title; - // the tri-state is label-less and gates on the master. - cat.master_check = new wxCheckBox(m_scroll, wxID_ANY, title); - cat.master_check->SetFont(Label::Head_14); - cat.master_check->SetToolTip(_L("Export this material")); - cat.header = new wxCheckBox(m_scroll, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); - cat.header->SetFont(Label::Head_14); - cat.header->SetToolTip(_L("Select/deselect all settings in this material")); - } else { - cat.header = new wxCheckBox(m_scroll, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); - cat.header->SetFont(Label::Head_14.Bold()); - } - const size_t new_index = m_categories.size(); - cat.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_category(new_index); }); - // [icon][chevron][(chip)(master)(tri-state) | checkbox]: the chevron - // collapses/expands the category, the checkbox is the select-all. - auto header_sizer = new wxBoxSizer(wxHORIZONTAL); - if (cat.icon != nullptr) - header_sizer->Add(cat.icon, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(2)); - header_sizer->Add(cat.chevron, 0, wxALIGN_CENTER_VERTICAL); - if (section == Section::Material) { - // Per-slot colour chip, before the master title. - std::string hex; - if (const auto* colours = full.opt("filament_colour")) - if (slot < colours->size()) - hex = colours->get_at(slot); - wxBitmap* chip_bmp = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12)); - // chip_bmp points into get_extruder_color_icon's static BitmapCache - // and must NOT be deleted; the wxStaticBitmap takes its own copy. - header_sizer->Add(new wxStaticBitmap(m_scroll, wxID_ANY, *chip_bmp), 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); - header_sizer->Add(cat.master_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); - header_sizer->Add(cat.header, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(6)); - } else { - header_sizer->Add(cat.header, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(4)); - } - // A wrapper sizer splits the vertical separation (TOP 10) from the - // horizontal indent (LEFT|RIGHT 22), so the top gap collapses with the - // header when it is hidden. - auto wrap = new wxBoxSizer(wxVERTICAL); - wrap->Add(header_sizer, 0, wxTOP, FromDIP(10)); - cat.item = m_list_sizer->Add(wrap, 0, wxLEFT | wxRIGHT, FromDIP(22)); - // Register the new category with its section group: the group's visibility - // and select-all logic iterates section.categories. - m_sections[group].categories.push_back(new_index); - m_categories.push_back(std::move(cat)); - return new_index; - }; - - // Find-or-create a subcategory (optgroup) heading within a category. - auto subcategory_index_for = [this](size_t cat_index, const wxString& title, const wxString& icon) -> size_t { - Category& cat = m_categories[cat_index]; - for (size_t i = 0; i < cat.subs.size(); ++i) - if (cat.subs[i].title == title) - return i; - Subcategory sub; - sub.title = title; - if (!title.IsEmpty()) { - // Same look as the Tab's optgroup headers (incl. its icon), plus a - // collapse chevron. A click on the chevron bitmap does not reach the - // StaticLine, so both are bound to the same toggle (LEFT_UP so the - // StaticLine's label acts as the click target too). - sub.header = new ::StaticLine(m_scroll, false, title, icon); - sub.header->SetFont(Label::Head_14); - sub.header->SetForegroundColour("#363636"); - sub.header->SetCursor(wxCURSOR_HAND); - const size_t new_index = cat.subs.size(); - auto toggle = [this, cat_index, new_index] { toggle_subcategory(cat_index, new_index); }; - sub.header->Bind(wxEVT_LEFT_UP, [toggle](wxMouseEvent&) { toggle(); }); - sub.chevron = create_chevron(m_scroll, wxEVT_LEFT_UP, toggle); - auto header_sizer = new wxBoxSizer(wxHORIZONTAL); - header_sizer->Add(sub.chevron, 0, wxALIGN_CENTER_VERTICAL); - header_sizer->Add(sub.header, 1, wxEXPAND | wxLEFT, FromDIP(4)); - // A wrapper sizer splits the vertical separation (TOP|BOTTOM 6) from - // the horizontal indent (LEFT|RIGHT 38), so the gaps collapse with - // the header when it is hidden. - auto wrap = new wxBoxSizer(wxVERTICAL); - wrap->Add(header_sizer, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); - sub.item = m_list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); - } - cat.subs.push_back(std::move(sub)); - return cat.subs.size() - 1; - }; - - // Creates the row UI (checkbox + white ellipsized value + grey unit) and - // registers the row into the given category/subcategory. - auto add_row_ui = [this](const std::string& key, const wxString& label, const wxString& value, const wxString& unit, size_t cat_index, - size_t sub_index) { - Row row; - row.key = key; - row.label = label; - row.value = value; - row.unit = unit; - row.category = m_categories[cat_index].title; - row.subcategory = m_categories[cat_index].subs[sub_index].title; - row.section = m_categories[cat_index].section; - row.section_title = m_sections[m_categories[cat_index].group].title; - const size_t row_index = m_rows.size(); - m_rows.push_back(std::move(row)); - - Row& r = m_rows[row_index]; - r.check = new wxCheckBox(m_scroll, wxID_ANY, label, wxDefaultPosition, wxDefaultSize); - r.check->SetFont(Label::Body_13); - // Value in the Tab's text color (near-black light / #EFEFF0 dark); the - // unit is the grey secondary text. - r.value_label = new wxStaticText(m_scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - r.value_label->SetFont(Label::Body_13); - r.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); - r.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); - if (!unit.IsEmpty()) { - r.unit_label = new wxStaticText(m_scroll, wxID_ANY, unit); - r.unit_label->SetFont(Label::Body_13); - r.unit_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); - } - - auto row_sizer = new wxBoxSizer(wxHORIZONTAL); - row_sizer->Add(r.check, 0, wxALIGN_CENTER_VERTICAL); - row_sizer->Add(r.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); - if (r.unit_label != nullptr) - row_sizer->Add(r.unit_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); - r.item = m_list_sizer->Add(row_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(54)); - - m_categories[cat_index].rows.push_back(row_index); - m_categories[cat_index].subs[sub_index].rows.push_back(row_index); - }; - // --- Phase 1: printer per-extruder retraction settings (displayed first, // mirroring the sidebar's Printer group). The printer tab's // "Extruder"/"Extruder N" pages carry the per-extruder retraction options. { size_t g = section_group_for(Section::Printer); + category_index_for(_L("Extruder"), Section::Printer, "custom-gcode_extruder", g, 0); for (Tab* tab : wxGetApp().tabs_list) { if (tab->m_type != Preset::TYPE_PRINTER) continue; @@ -467,7 +249,7 @@ void PublishSettingsDialog::build_option_model() // when switching material" group is intentionally skipped. if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") continue; - const wxString subcategory = page_title + L" \u00B7 " + _(optgroup->title); + const wxString subcategory = _(optgroup->title); for (const auto& opt : optgroup->opt_map()) { const std::string& opt_id = opt.first; const std::string& pure_key = opt.second.first; @@ -480,7 +262,7 @@ void PublishSettingsDialog::build_option_model() wxString label, value, unit; if (!option_text(opt_id, pure_key, label, value, unit)) continue; - size_t cat_index = category_index_for(_L("Retraction & Z-hop"), Section::Printer, "custom-gcode_extruder", g); + size_t cat_index = category_index_for(_L("Extruder"), Section::Printer, "custom-gcode_extruder", g, 0); size_t sub_index = subcategory_index_for(cat_index, subcategory, optgroup->icon); add_row_ui(pure_key, label, value, unit, cat_index, sub_index); } @@ -509,13 +291,12 @@ void PublishSettingsDialog::build_option_model() if (overrides_page != nullptr) { // One section per filament slot: a 4-slot printer (e.g. 1 PLA + - // 3 PETG) shows 4 sections, each disambiguated by its colour chip - // and slot number. The "· Slot N" title suffix keeps the category - // titles unique across slots. + // 3 PETG) shows 4 separate pages, each disambiguated internally by + // its colour chip and slot identity while displaying the bare name. for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { - const MaterialIdentity identity = material_identity(slot, full); - const wxString title = material_title(slot, bundle, full) + L" \u00B7 " + - wxString::Format(_L("Slot %d"), static_cast(slot) + 1); + const PublishMaterialIdentity identity = material_identity(slot, full); + const wxString title = material_title(slot, bundle, full); + const size_t category_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, slot, identity); // A material section must not repeat a key; the same key may // appear in other material sections - that is intended. std::set material_added; @@ -541,9 +322,8 @@ void PublishSettingsDialog::build_option_model() wxString label, value, unit; if (!option_text(value_opt_id, base, label, value, unit)) continue; - size_t cat_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, identity, slot); - size_t sub_index = subcategory_index_for(cat_index, _(optgroup->title), optgroup->icon); - add_row_ui(base, label, value, unit, cat_index, sub_index); + size_t sub_index = subcategory_index_for(category_index, _(optgroup->title), optgroup->icon); + add_row_ui(base, label, value, unit, category_index, sub_index); } } } @@ -558,6 +338,7 @@ void PublishSettingsDialog::build_option_model() if (tab->m_type != Preset::TYPE_PRINT) continue; const auto& icon_map = tab->get_category_icon_map(); + size_t page_index = 0; for (const PageShp& page : tab->m_pages) { wxString category = Tab::translate_category(page->title(), tab->m_type); // Page icon, keyed by the untranslated page title (per-Tab map). @@ -565,6 +346,7 @@ void PublishSettingsDialog::build_option_model() auto icon_it = icon_map.find(page->title()); if (icon_it != icon_map.end()) icon_name = icon_it->second; + const size_t category_index = category_index_for(category, Section::Print, icon_name, g, page_index); for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { for (const auto& opt : optgroup->opt_map()) { @@ -578,11 +360,11 @@ void PublishSettingsDialog::build_option_model() wxString label, value, unit; if (!option_text(opt_id, pure_key, label, value, unit)) continue; - size_t cat_index = category_index_for(category, Section::Print, icon_name, g); - size_t sub_index = subcategory_index_for(cat_index, _(optgroup->title), optgroup->icon); - add_row_ui(opt_id, label, value, unit, cat_index, sub_index); + size_t sub_index = subcategory_index_for(category_index, _(optgroup->title), optgroup->icon); + add_row_ui(opt_id, label, value, unit, category_index, sub_index); } } + ++page_index; } } } @@ -604,28 +386,20 @@ void PublishSettingsDialog::build_option_model() } } - // Wire the section group tri-state headers (chevrons/StaticLine toggles were - // bound at creation in section_group_for). - for (size_t s = 0; s < m_sections.size(); ++s) { - if (m_sections[s].header != nullptr) { - m_sections[s].header->Bind(wxEVT_CHECKBOX, [this, s](wxCommandEvent&) { on_section_toggle(s); }); - update_section_header(m_sections[s]); - } - } - - // Wire the tri-state headers: clicking a header toggles all its children; + // Wire the inner-page tri-state headers: clicking a header toggles all its children; // toggling any child re-syncs its header. Bind by index so the lambdas stay // valid even if the vectors are reallocated later. for (size_t c = 0; c < m_categories.size(); ++c) { if (m_categories[c].master_check != nullptr) m_categories[c].master_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_master_toggle(c); }); - m_categories[c].header->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_category_toggle(c); }); + if (m_categories[c].header != nullptr) + m_categories[c].header->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_category_toggle(c); }); for (size_t r : m_categories[c].rows) - m_rows[r].check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { update_category_header(m_categories[c]); }); + m_rows[r].check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { update_all_headers(); }); update_category_header(m_categories[c]); } - // Material sections start gated (master OFF): their rows and tri-state are + // Material pages start gated (master OFF): their rows and tri-state are // disabled until the author opts the material in. for (size_t c = 0; c < m_categories.size(); ++c) if (m_categories[c].section == Section::Material) @@ -636,8 +410,17 @@ void PublishSettingsDialog::build_option_model() row.matches_filter = true; apply_visibility(); - m_scroll->FitInside(); - m_list_sizer->Layout(); + for (Category& category : m_categories) { + category.scroll->FitInside(); + category.list_sizer->Layout(); + } + for (SectionGroup& section : m_sections) + if (!section.categories.empty()) + section.tabs->SelectItem(0); + if (!m_sections.empty()) { + m_outer_tabs->SelectItem(0); + show_outer_page(0); + } } size_t PublishSettingsDialog::section_group_for(Section kind) @@ -649,7 +432,6 @@ size_t PublishSettingsDialog::section_group_for(Section kind) SectionGroup section; section.kind = kind; const size_t new_index = m_sections.size(); - switch (kind) { case Section::Printer: section.title = _L("Printer"); @@ -665,47 +447,166 @@ size_t PublishSettingsDialog::section_group_for(Section kind) break; } - if (!section.icon_name.empty()) { - section.icon_bmp = ScalableBitmap(m_scroll, section.icon_name, 18); - section.icon = new wxStaticBitmap(m_scroll, wxID_ANY, section.icon_bmp.bmp()); - } + constexpr long tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | + wxTR_FULL_ROW_HIGHLIGHT; + section.page = new wxPanel(m_outer_host, wxID_ANY); + section.page->SetBackgroundColour(GetBackgroundColour()); + auto* page_sizer = new wxBoxSizer(wxVERTICAL); + section.tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, tab_style); + section.tabs->SetFont(Label::Body_14); + section.tabs->SetBackgroundColour(GetBackgroundColour()); + page_sizer->Add(section.tabs, 0, wxEXPAND); + section.page_host = new wxPanel(section.page, wxID_ANY); + section.page_host->SetBackgroundColour(GetBackgroundColour()); + section.page_host_sizer = new wxBoxSizer(wxVERTICAL); + section.page_host->SetSizer(section.page_host_sizer); + page_sizer->Add(section.page_host, 1, wxEXPAND | wxTOP, FromDIP(4)); + section.page->SetSizer(page_sizer); - section.chevron = create_chevron(m_scroll, wxEVT_LEFT_DOWN, [this, new_index] { toggle_section(new_index); }); - - auto header_sizer = new wxBoxSizer(wxHORIZONTAL); - if (section.icon != nullptr) - header_sizer->Add(section.icon, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(2)); - header_sizer->Add(section.chevron, 0, wxALIGN_CENTER_VERTICAL); - - if (kind == Section::Material) { - // Filament group: clickable StaticLine title, no tri-state (each - // material below opts in individually). - section.header_line = new ::StaticLine(m_scroll, false, section.title); - section.header_line->SetFont(Label::Head_14.Bold()); - section.header_line->SetForegroundColour("#363636"); - section.header_line->SetCursor(wxCURSOR_HAND); - section.header_line->SetToolTip(_L("Enable each material below to export its settings")); - auto toggle = [this, new_index] { toggle_section(new_index); }; - section.header_line->Bind(wxEVT_LEFT_UP, [toggle](wxMouseEvent&) { toggle(); }); - header_sizer->Add(section.header_line, 1, wxEXPAND | wxLEFT, FromDIP(4)); - } else { - // Printer/Process: tri-state select-all carries the title. - section.header = new wxCheckBox(m_scroll, wxID_ANY, section.title, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); - section.header->SetFont(Label::Head_14.Bold()); - header_sizer->Add(section.header, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(4)); - } - - // A wrapper sizer splits the larger vertical separation (TOP 14) from the - // shallow horizontal indent (LEFT|RIGHT 6), so the top gap collapses with - // the header when it is hidden. wxEXPAND lets the Filament StaticLine's - // separator span the width like the subcategory headers. - auto wrap = new wxBoxSizer(wxVERTICAL); - wrap->Add(header_sizer, 0, wxEXPAND | wxTOP, FromDIP(14)); - section.item = m_list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(6)); + m_outer_tabs->AppendItem(section.title); + m_outer_host_sizer->Add(section.page, 1, wxEXPAND); + section.page->Hide(); m_sections.push_back(std::move(section)); return new_index; } +size_t PublishSettingsDialog::category_index_for(const wxString& title, + Section section, + const std::string& icon_name, + size_t group, + size_t source_index, + const PublishMaterialIdentity& identity) +{ + for (size_t i : m_sections[group].categories) { + Category& existing = m_categories[i]; + if (existing.title == title && existing.section == section && existing.source_index == source_index && + existing.filament_id == identity.id && existing.filament_type == identity.type && existing.filament_vendor == identity.vendor) + return i; + } + + Category category; + category.title = title; + category.section = section; + category.group = group; + category.source_index = source_index; + category.icon_name = icon_name; + category.filament_type = identity.type; + category.filament_vendor = identity.vendor; + category.filament_id = identity.id; + category.filament_slot = source_index; + category.page = new wxPanel(m_sections[group].page_host, wxID_ANY); + category.page->SetBackgroundColour(GetBackgroundColour()); + auto* page_sizer = new wxBoxSizer(wxVERTICAL); + + if (section == Section::Material) { + auto* header_sizer = new wxBoxSizer(wxHORIZONTAL); + std::string hex; + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + if (const auto* colours = full.opt("filament_colour")) + if (source_index < colours->size()) + hex = colours->get_at(source_index); + if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) + header_sizer->Add(new wxStaticBitmap(category.page, wxID_ANY, *chip), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + category.master_check = new wxCheckBox(category.page, wxID_ANY, title); + category.master_check->SetFont(Label::Head_14); + category.master_check->SetToolTip(_L("Export this material")); + header_sizer->Add(category.master_check, 0, wxALIGN_CENTER_VERTICAL); + category.header = new wxCheckBox(category.page, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); + category.header->SetToolTip(_L("Select/deselect all settings in this material")); + header_sizer->Add(category.header, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(6)); + page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + } + + category.scroll = new wxScrolledWindow(category.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + category.scroll->SetScrollRate(0, 10); + category.scroll->SetBackgroundColour(GetBackgroundColour()); + category.list_sizer = new wxBoxSizer(wxVERTICAL); + category.scroll->SetSizer(category.list_sizer); + category.scroll->DisableFocusFromKeyboard(); + category.scroll->Bind(wxEVT_RIGHT_DOWN, &PublishSettingsDialog::show_menu, this); + category.info = new wxStaticText(category.scroll, wxID_ANY, m_info_empty); + category.info->SetFont(Label::Body_13); + category.list_sizer->Add(category.info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); + category.info->Hide(); + page_sizer->Add(category.scroll, 1, wxEXPAND | wxALL, FromDIP(4)); + category.page->SetSizer(page_sizer); + category.page->Hide(); + + const size_t category_index = m_categories.size(); + m_categories.push_back(std::move(category)); + m_sections[group].categories.push_back(category_index); + m_sections[group].tabs->AppendItem(title); + m_sections[group].page_host_sizer->Add(m_categories[category_index].page, 1, wxEXPAND); + if (m_sections[group].selected_inner < 0) + m_sections[group].selected_inner = 0; + return category_index; +} + +size_t PublishSettingsDialog::subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon) +{ + Category& category = m_categories[category_index]; + for (size_t i = 0; i < category.subs.size(); ++i) + if (category.subs[i].title == title) + return i; + + Subcategory sub; + sub.title = title; + if (!title.IsEmpty()) { + sub.header = new ::StaticLine(category.scroll, false, title, icon); + sub.header->SetFont(Label::Head_14); + sub.header->SetForegroundColour("#363636"); + auto* wrap = new wxBoxSizer(wxVERTICAL); + wrap->Add(sub.header, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); + sub.item = category.list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(22)); + } + category.subs.push_back(std::move(sub)); + return category.subs.size() - 1; +} + +void PublishSettingsDialog::add_row_ui(const std::string& key, + const wxString& label, + const wxString& value, + const wxString& unit, + size_t category_index, + size_t subcategory_index) +{ + Category& category = m_categories[category_index]; + Row row; + row.key = key; + row.label = label; + row.value = value; + row.unit = unit; + row.category = category.title; + row.subcategory = category.subs[subcategory_index].title; + row.section = category.section; + row.section_title = m_sections[category.group].title; + row.outer_index = category.group; + row.inner_index = category_index; + row.subcategory_index = subcategory_index; + const size_t row_index = m_rows.size(); + m_rows.push_back(std::move(row)); + Row& current = m_rows[row_index]; + current.check = new wxCheckBox(category.scroll, wxID_ANY, label); + current.check->SetFont(Label::Body_13); + current.value_label = new wxStaticText(category.scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + current.value_label->SetFont(Label::Body_13); + current.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); + current.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); + if (!unit.IsEmpty()) { + current.unit_label = new wxStaticText(category.scroll, wxID_ANY, unit); + current.unit_label->SetFont(Label::Body_13); + current.unit_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); + } + auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); + row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); + row_sizer->Add(current.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + if (current.unit_label != nullptr) + row_sizer->Add(current.unit_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + current.item = category.list_sizer->Add(row_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); + category.rows.push_back(row_index); + category.subs[subcategory_index].rows.push_back(row_index); +} + void PublishSettingsDialog::on_category_toggle(size_t category_index) { Category& cat = m_categories[category_index]; @@ -723,7 +624,7 @@ void PublishSettingsDialog::on_category_toggle(size_t category_index) bool value = !all_checked; for (size_t r : cat.rows) m_rows[r].check->SetValue(value); - update_category_header(cat); + update_all_headers(); } void PublishSettingsDialog::on_master_toggle(size_t category_index) @@ -733,60 +634,19 @@ void PublishSettingsDialog::on_master_toggle(size_t category_index) for (size_t r : cat.rows) m_rows[r].check->Enable(cat.master); cat.header->Enable(cat.master); - update_category_header(cat); + update_all_headers(); } -void PublishSettingsDialog::on_section_toggle(size_t section_index) +void PublishSettingsDialog::update_all_headers() { - SectionGroup& section = m_sections[section_index]; - if (section.header == nullptr) - return; // defensive: the Filament group has no select-all - // All-or-none over every enabled row in the group's categories. - bool all_checked = true; - for (size_t c : section.categories) { - for (size_t r : m_categories[c].rows) - if (m_rows[r].check->IsEnabled() && !m_rows[r].check->GetValue()) { - all_checked = false; - break; - } - if (!all_checked) - break; - } - const bool value = !all_checked; - for (size_t c : section.categories) - for (size_t r : m_categories[c].rows) - if (m_rows[r].check->IsEnabled()) - m_rows[r].check->SetValue(value); - for (size_t c : section.categories) - update_category_header(m_categories[c]); - update_section_header(section); -} - -void PublishSettingsDialog::update_section_header(SectionGroup& section) -{ - if (section.header == nullptr) - return; // Filament group has no tri-state. - int checked = 0; - int total = 0; - for (size_t c : section.categories) { - for (size_t r : m_categories[c].rows) { - if (!m_rows[r].check->IsEnabled()) - continue; // gated material rows don't count (defensive) - ++total; - if (m_rows[r].check->GetValue()) - ++checked; - } - } - if (total == 0 || checked == 0) - section.header->Set3StateValue(wxCHK_UNCHECKED); - else if (checked == total) - section.header->Set3StateValue(wxCHK_CHECKED); - else - section.header->Set3StateValue(wxCHK_UNDETERMINED); + for (Category& category : m_categories) + update_category_header(category); } void PublishSettingsDialog::update_category_header(Category& category) { + if (category.header == nullptr) + return; // A gated material section's tri-state must not reflect the preserved // (greyed-out) row values. if (category.section == Section::Material && !category.master) { @@ -813,6 +673,71 @@ void PublishSettingsDialog::set_row_bold(Row& row, bool bold) row.check->SetFont(bold ? Label::Body_13.Bold() : Label::Body_13); } +void PublishSettingsDialog::save_scroll_position(Category& category) +{ + if (category.scroll != nullptr) + category.scroll->GetViewStart(&category.scroll_pos.x, &category.scroll_pos.y); +} + +void PublishSettingsDialog::show_outer_page(size_t section_index) +{ + if (section_index >= m_sections.size()) + return; + if (m_selected_outer >= 0 && m_selected_outer < static_cast(m_sections.size())) { + SectionGroup& old_section = m_sections[m_selected_outer]; + if (old_section.selected_inner >= 0 && old_section.selected_inner < static_cast(old_section.categories.size())) + save_scroll_position(m_categories[old_section.categories[old_section.selected_inner]]); + m_sections[m_selected_outer].page->Hide(); + } + m_selected_outer = static_cast(section_index); + SectionGroup& section = m_sections[section_index]; + section.page->Show(); + if (section.selected_inner >= 0) + show_inner_page(section_index, section.selected_inner); + m_outer_host_sizer->Layout(); +} + +void PublishSettingsDialog::show_inner_page(size_t section_index, int inner_index) +{ + if (section_index >= m_sections.size()) + return; + SectionGroup& section = m_sections[section_index]; + if (inner_index < 0 || inner_index >= static_cast(section.categories.size())) + return; + if (section.selected_inner >= 0 && section.selected_inner < static_cast(section.categories.size())) { + save_scroll_position(m_categories[section.categories[section.selected_inner]]); + m_categories[section.categories[section.selected_inner]].page->Hide(); + } + section.selected_inner = inner_index; + Category& category = m_categories[section.categories[inner_index]]; + category.page->Show(); + category.scroll->FitInside(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + section.page_host_sizer->Layout(); +} + +void PublishSettingsDialog::on_outer_tab_changed(wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (selection >= 0 && selection < static_cast(m_sections.size())) + show_outer_page(static_cast(selection)); +} + +void PublishSettingsDialog::on_inner_tab_changed(size_t section_index, wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (section_index < m_sections.size() && selection >= 0 && selection < static_cast(m_sections[section_index].categories.size())) + show_inner_page(section_index, selection); +} + +void PublishSettingsDialog::bind_tab_events() +{ + m_outer_tabs->Bind(wxEVT_TAB_SEL_CHANGED, &PublishSettingsDialog::on_outer_tab_changed, this); + for (size_t section_index = 0; section_index < m_sections.size(); ++section_index) + m_sections[section_index].tabs->Bind(wxEVT_TAB_SEL_CHANGED, + [this, section_index](wxCommandEvent& event) { on_inner_tab_changed(section_index, event); }); +} + void PublishSettingsDialog::apply_filter(const wxString& filter_text) { Freeze(); @@ -823,11 +748,10 @@ void PublishSettingsDialog::apply_filter(const wxString& filter_text) const bool pseudo = (filter == "::sel" || filter == "::nonsel"); m_fb_sizer->Show(!pseudo); - // Update the per-row match flags only; actual visibility is computed by - // apply_visibility() (which also respects the collapse state). + // Update row matches first; page and optgroup visibility is applied below. if (pseudo) { if (m_filter_ctrl->GetValue().Lower() != filter) { - m_filter_ctrl->SetValue(filter); + m_filter_ctrl->ChangeValue(filter); m_filter_ctrl->SetSelection(0, -1); } const bool want_checked = (filter == "::sel"); @@ -843,20 +767,43 @@ void PublishSettingsDialog::apply_filter(const wxString& filter_text) } } - // The info label reflects the filter result only; a collapsed section - // hiding its matches is a user choice, not "no match". - m_info->Show(); - for (const Row& row : m_rows) { - if (row.matches_filter) { - m_info->Hide(); - break; + size_t first_outer = 0; + int first_inner = -1; + bool active_has_match = false; + for (size_t s = 0; s < m_sections.size(); ++s) { + for (size_t inner = 0; inner < m_sections[s].categories.size(); ++inner) { + Category& category = m_categories[m_sections[s].categories[inner]]; + bool has_match = false; + for (size_t r : category.rows) + has_match = has_match || m_rows[r].matches_filter; + category.info->Show(!has_match); + if (!has_match) + category.info->SetLabel(pseudo ? (filter == "::sel" ? m_info_nonsel : m_info_allsel) : m_info_empty); + if (has_match && first_inner < 0) { + first_outer = s; + first_inner = static_cast(inner); + } + if (static_cast(s) == m_selected_outer && static_cast(inner) == m_sections[s].selected_inner) + active_has_match = has_match; } } - if (m_info->IsShown()) - m_info->SetLabel(pseudo ? (filter == "::sel" ? m_info_nonsel : m_info_allsel) : m_info_empty); + if (!active_has_match && first_inner >= 0 && + (m_selected_outer != static_cast(first_outer) || m_sections[first_outer].selected_inner != first_inner)) { + if (m_selected_outer != static_cast(first_outer)) { + m_outer_tabs->SelectItem(static_cast(first_outer)); + show_outer_page(first_outer); + } + m_sections[first_outer].tabs->SelectItem(first_inner); + show_inner_page(first_outer, first_inner); + } apply_visibility(); - m_scroll->FitInside(); + for (Category& category : m_categories) { + save_scroll_position(category); + category.scroll->FitInside(); + category.list_sizer->Layout(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + } Layout(); Thaw(); } @@ -864,95 +811,26 @@ void PublishSettingsDialog::apply_filter(const wxString& filter_text) void PublishSettingsDialog::apply_visibility() { Freeze(); - for (SectionGroup& section : m_sections) { - // The section header stays visible whenever any row in the group matches - // (a section header never depends on its own collapsed state). - bool section_any = false; - for (size_t c : section.categories) { - for (size_t r : m_categories[c].rows) - if (m_rows[r].matches_filter) { - section_any = true; - break; - } - if (section_any) - break; - } - section.item->Show(section_any); - section.chevron->SetCollapsed(section.collapsed); - - for (size_t c : section.categories) { - Category& cat = m_categories[c]; - - // The category header stays visible whenever it has any match and - // the section is not collapsed, so it can always be re-expanded. - bool cat_any = false; - for (size_t r : cat.rows) - if (m_rows[r].matches_filter) { - cat_any = true; - break; - } - cat.item->Show(cat_any && !section.collapsed); - cat.chevron->SetCollapsed(cat.collapsed); - - for (Subcategory& sub : cat.subs) { - if (sub.header != nullptr) { - // The subcategory header visibility depends on its rows' matches - // and on its ancestors, but NOT on its own collapsed state. - bool sub_any = false; - for (size_t r : sub.rows) - if (m_rows[r].matches_filter) { - sub_any = true; - break; - } - sub.item->Show(sub_any && !section.collapsed && !cat.collapsed); - sub.chevron->SetCollapsed(sub.collapsed); - } - // Rows are hidden by the filter and by any collapsed ancestor. - for (size_t r : sub.rows) - m_rows[r].item->Show(m_rows[r].matches_filter && !section.collapsed && !cat.collapsed && !sub.collapsed); - } + for (Category& category : m_categories) { + bool category_any = false; + for (size_t r : category.rows) + category_any = category_any || m_rows[r].matches_filter; + category.info->Show(!category_any); + for (Subcategory& sub : category.subs) { + bool sub_any = false; + for (size_t r : sub.rows) + sub_any = sub_any || m_rows[r].matches_filter; + if (sub.header != nullptr) + sub.item->Show(sub_any); + for (size_t r : sub.rows) + m_rows[r].item->Show(m_rows[r].matches_filter); } + category.list_sizer->Layout(); + category.scroll->FitInside(); } Thaw(); } -void PublishSettingsDialog::toggle_section(size_t section_index) -{ - m_sections[section_index].collapsed = !m_sections[section_index].collapsed; - apply_visibility(); - m_scroll->FitInside(); - m_list_sizer->Layout(); -} - -void PublishSettingsDialog::toggle_category(size_t category_index) -{ - m_categories[category_index].collapsed = !m_categories[category_index].collapsed; - apply_visibility(); - m_scroll->FitInside(); - m_list_sizer->Layout(); -} - -void PublishSettingsDialog::toggle_subcategory(size_t category_index, size_t subcategory_index) -{ - m_categories[category_index].subs[subcategory_index].collapsed = !m_categories[category_index].subs[subcategory_index].collapsed; - apply_visibility(); - m_scroll->FitInside(); - m_list_sizer->Layout(); -} - -CollapseChevron* PublishSettingsDialog::create_chevron(wxWindow* parent, - const wxEventTypeTag& event_type, - std::function toggle) -{ - CollapseChevron* chevron = new CollapseChevron(parent); - chevron->SetCursor(wxCURSOR_HAND); - // The tag type (not wxEventType) keeps Bind's EventTag template deduced as - // wxEventTypeTag; wxEvent& is used so the helper works with - // any mouse event tag, and the toggle itself does not inspect the event. - chevron->Bind(event_type, [toggle](wxEvent&) { toggle(); }); - return chevron; -} - void PublishSettingsDialog::select_all(bool value) { // "All" does not auto-enable gated material sections; "None" leaves a gated @@ -960,8 +838,18 @@ void PublishSettingsDialog::select_all(bool value) for (Row& row : m_rows) if (row.check->IsEnabled()) row.check->SetValue(value); - for (Category& cat : m_categories) - update_category_header(cat); + update_all_headers(); +} + +bool PublishSettingsDialog::row_is_visible(const Row& row) const +{ + if (m_selected_outer < 0 || m_selected_outer >= static_cast(m_sections.size()) || + row.outer_index != static_cast(m_selected_outer) || m_sections[m_selected_outer].selected_inner < 0 || + m_sections[m_selected_outer].selected_inner >= static_cast(m_sections[m_selected_outer].categories.size()) || + row.inner_index != m_sections[m_selected_outer].categories[m_sections[m_selected_outer].selected_inner] || !row.matches_filter || + !row.check->IsEnabled()) + return false; + return row.item->IsShown(); } void PublishSettingsDialog::select_visible(bool value) @@ -973,24 +861,30 @@ void PublishSettingsDialog::select_visible(bool value) // Toggle the rows that are visible under the *current* filter. for (Row& row : m_rows) - if (row.check->IsShown() && row.check->IsEnabled()) + if (row_is_visible(row)) row.check->SetValue(value); if (clear_pseudo) { // Note: SetValue() may fire wxEVT_TEXT on some platforms, which // re-enters apply_filter() - that is fine, the rows above were already // toggled and the trailing call below is idempotent. - m_filter_ctrl->SetValue(""); + m_filter_ctrl->ChangeValue(""); apply_filter(""); // resync visibility, headers and the All/None bar } - for (Category& cat : m_categories) - update_category_header(cat); + update_all_headers(); } void PublishSettingsDialog::show_menu(wxMouseEvent& evt) { bool filtering = !m_filter_ctrl->GetValue().IsEmpty(); - bool list_empty = m_info->IsShown(); + bool list_empty = true; + if (m_selected_outer >= 0) { + for (const Row& row : m_rows) + if (row_is_visible(row)) { + list_empty = false; + break; + } + } wxMenu m; m.Append(kPublishSelectAll, _L("Select All"))->Enable(!filtering); @@ -1066,30 +960,25 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) m_menu.msw_rescale(); m_filter_box->SetIcon(m_search.bmp()); m_menu_button->SetBitmap(m_menu.bmp()); - - for (SectionGroup& section : m_sections) { - if (section.icon != nullptr && section.icon_bmp.bmp().IsOk()) { - section.icon_bmp.msw_rescale(); - section.icon->SetBitmap(section.icon_bmp.bmp()); - } - if (section.header_line != nullptr) - section.header_line->Rescale(); - } + m_outer_tabs->Rescale(); for (Category& cat : m_categories) { if (cat.icon != nullptr && cat.icon_bmp.bmp().IsOk()) { cat.icon_bmp.msw_rescale(); cat.icon->SetBitmap(cat.icon_bmp.bmp()); } - for (Subcategory& sub : cat.subs) { - if (sub.header != nullptr) - sub.header->Rescale(); - } + if (cat.header != nullptr) + cat.header->Refresh(); + if (cat.master_check != nullptr) + cat.master_check->Refresh(); + cat.scroll->FitInside(); + cat.list_sizer->Layout(); } + for (SectionGroup& section : m_sections) + section.tabs->Rescale(); + SetMinSize(FromDIP(wxSize(600, 500))); - m_scroll->FitInside(); - m_list_sizer->Layout(); Refresh(); } diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 4767b9a29e..0bae39daa4 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -3,6 +3,7 @@ #include "GUI_Utils.hpp" #include "wxExtensions.hpp" +#include "Widgets/TabCtrl.hpp" #include "libslic3r/PublishSettings.hpp" @@ -13,21 +14,24 @@ #include #include -// Forward declarations (all are global classes, see Widgets/TextInput.hpp, -// Widgets/StaticLine.hpp and the CollapseChevron definition in the .cpp). +// Forward declarations (all are global classes, see Widgets/TextInput.hpp and +// Widgets/StaticLine.hpp). class TextInput; class StaticLine; -class CollapseChevron; namespace Slic3r { namespace GUI { +struct PublishMaterialIdentity +{ + std::string type; + std::string vendor; + std::string id; +}; + // Dialog that lets a model author select which settings get embedded in a 3MF. -// Settings are grouped the way the tabs show them: the process (print) pages, -// the printer's per-extruder retraction settings, and one section per material -// used in the project (filament overrides). Each main category has a select-all -// tri-state header, subcategory (optgroup) headings, one row per setting -// (checkbox + grey value label), and both header levels are collapsible (chevron -// toggle). A search filter and an All/None / select-visible menu are provided. +// Settings are grouped into the same nested custom tab layout used by the +// Process settings: Printer, Filament, and Process outer tabs, with category or +// material tabs inside each section. Optgroups are ordinary grouped headers. // Modified (dirty) settings are pre-checked and shown bold. On OK, the print // rows become the "published_keys" list and the material rows become the // per-material "published_material_keys". @@ -63,44 +67,49 @@ private: wxString label; wxString value; wxString unit; - wxString section_title; // top-level group title, for filter matching + wxString section_title; // outer tab title, for filter matching Section section{Section::Print}; + size_t outer_index{0}; + size_t inner_index{0}; + size_t subcategory_index{0}; bool dirty{false}; // matches a dirty base key: pre-checked + bold bool matches_filter{false}; // survives the active filter (computed by apply_filter) wxCheckBox* check{nullptr}; wxStaticText* value_label{nullptr}; wxStaticText* unit_label{nullptr}; - wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in m_list_sizer + wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in its tab list sizer }; - // A subcategory (optgroup) heading. Rows store indices into m_rows. + // An optgroup heading. Rows store indices into m_rows. struct Subcategory { wxString title; ::StaticLine* header{nullptr}; // null when the title is empty - bool collapsed{false}; - CollapseChevron* chevron{nullptr}; - wxSizerItem* item{nullptr}; // sizer item of the header h-sizer in m_list_sizer + wxSizerItem* item{nullptr}; std::vector rows; }; - // A main category with its select-all tri-state header. + // An inner TabCtrl page with its select-all/material controls and content. struct Category { wxString title; Section section{Section::Print}; - size_t group{0}; // index into m_sections - std::string icon_name; // bitmap name; empty = no icon + size_t group{0}; // index into m_sections / outer page + size_t source_index{0}; // stable source page or material slot index + std::string source_title; + std::string icon_name; + wxPanel* page{nullptr}; + wxScrolledWindow* scroll{nullptr}; + wxBoxSizer* list_sizer{nullptr}; + wxStaticText* info{nullptr}; + wxPoint scroll_pos{0, 0}; ScalableBitmap icon_bmp; // scalable bitmap for DPI changes - wxStaticBitmap* icon{nullptr}; // 18px category icon (null when icon_name empty) - wxCheckBox* header{nullptr}; // select-all tri-state + wxStaticBitmap* icon{nullptr}; + wxCheckBox* header{nullptr}; // material select-all tri-state; null for Printer/Process // Material opt-in: the master checkbox carries the material title and // gates whether this material's keys may be exported. bool master{false}; wxCheckBox* master_check{nullptr}; - bool collapsed{false}; - CollapseChevron* chevron{nullptr}; - wxSizerItem* item{nullptr}; // sizer item of the header h-sizer in m_list_sizer // Material identity, only for Section::Material categories. std::string filament_type; std::string filament_vendor; @@ -111,20 +120,17 @@ private: std::vector rows; // flattened rows, for the tri-state math }; - // A top-level section group mirroring the editor sidebar. Categories are - // nested inside. + // One outer TabCtrl page. Category entries are its inner tabs. struct SectionGroup { - wxString title; // _L("Printer") / _L("Filament") / _L("Process") - Section kind{Section::Print}; // maps 1:1 to the display group - std::string icon_name; // "printer" / "filament" / "process" - ScalableBitmap icon_bmp; // scalable bitmap for DPI changes - wxStaticBitmap* icon{nullptr}; // 18px, like Category::icon - wxCheckBox* header{nullptr}; // tri-state select-all; nullptr for the Filament group - ::StaticLine* header_line{nullptr}; // Filament group's clickable title - CollapseChevron* chevron{nullptr}; - wxSizerItem* item{nullptr}; - bool collapsed{false}; + wxString title; // _L("Printer") / _L("Filament") / _L("Process") + Section kind{Section::Print}; // maps 1:1 to the display group + std::string icon_name; // "printer" / "filament" / "process" + wxPanel* page{nullptr}; + TabCtrl* tabs{nullptr}; + wxPanel* page_host{nullptr}; + wxBoxSizer* page_host_sizer{nullptr}; + int selected_inner{-1}; std::vector categories; // indices into m_categories }; @@ -139,33 +145,31 @@ private: // Material opt-in toggled: enables/disables the material's rows + tri-state // and resyncs the header. void on_master_toggle(size_t category_index); - // Collapse/expand a category or subcategory; resyncs visibility + chevrons. - void toggle_category(size_t category_index); - void toggle_subcategory(size_t category_index, size_t subcategory_index); - // Find-or-create the top-level section group for a Section kind (builds its - // header row on first use). + // Return/create the fixed outer page for a Section kind. size_t section_group_for(Section kind); - // Top-level section group: select-all tri-state toggled / collapse/expand / - // header resync. - void on_section_toggle(size_t section_index); - void toggle_section(size_t section_index); - void update_section_header(SectionGroup& section); - // Single pass over categories/subs/rows: shows an item iff it is not hidden - // by the filter and (for subs/rows) by a collapsed ancestor. Flips the - // header chevrons. Only reads matches_filter; never re-runs filter matching. + size_t category_index_for(const wxString& title, Section section, const std::string& icon_name, size_t group, + size_t source_index, const PublishMaterialIdentity& identity = PublishMaterialIdentity()); + size_t subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon); + void add_row_ui(const std::string& key, const wxString& label, const wxString& value, const wxString& unit, + size_t category_index, size_t subcategory_index); + void save_scroll_position(Category& category); + void show_outer_page(size_t section_index); + void show_inner_page(size_t section_index, int inner_index); + void on_outer_tab_changed(wxCommandEvent& event); + void on_inner_tab_changed(size_t section_index, wxCommandEvent& event); + void update_all_headers(); + bool row_is_visible(const Row& row) const; void apply_visibility(); - // Creates a collapse chevron with a hand cursor; clicking it (with the given - // mouse event, LEFT_DOWN for categories / LEFT_UP for subcategories, - // matching the header's own binding) invokes the toggle. - CollapseChevron* create_chevron(wxWindow* parent, const wxEventTypeTag& event_type, std::function toggle); + void bind_tab_events(); - wxScrolledWindow* m_scroll{nullptr}; - wxBoxSizer* m_list_sizer{nullptr}; // vertical sizer of the scrolled window - wxBoxSizer* m_fb_sizer{nullptr}; // "All"/"None" buttons sizer + TabCtrl* m_outer_tabs{nullptr}; + wxPanel* m_outer_host{nullptr}; + wxBoxSizer* m_outer_host_sizer{nullptr}; + int m_selected_outer{-1}; + wxBoxSizer* m_fb_sizer{nullptr}; // "All"/"None" buttons sizer TextInput* m_filter_box{nullptr}; wxTextCtrl* m_filter_ctrl{nullptr}; wxStaticBitmap* m_menu_button{nullptr}; - wxStaticText* m_info{nullptr}; wxString m_info_nonsel; wxString m_info_allsel; wxString m_info_empty; @@ -175,8 +179,6 @@ private: std::vector m_rows; std::vector m_categories; - // Fixed display order enforced by phase order in build_option_model(): - // Printer, then Filament, then Process. std::vector m_sections; }; From 92123cdc2c044c9a161def34812a80d13ce9dc57 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 14 Aug 2026 16:50:33 +0800 Subject: [PATCH 025/208] Add filament color next to tab button in filament setting --- src/slic3r/GUI/PublishSettingsDialog.cpp | 46 ++++++++++++++++++++++-- src/slic3r/GUI/PublishSettingsDialog.hpp | 1 + src/slic3r/GUI/Widgets/Button.cpp | 21 +++++++---- src/slic3r/GUI/Widgets/Button.hpp | 2 ++ src/slic3r/GUI/Widgets/TabCtrl.cpp | 16 +++++++++ src/slic3r/GUI/Widgets/TabCtrl.hpp | 2 ++ 6 files changed, 79 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index b67a962650..c3b927d09b 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -505,8 +505,10 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, if (const auto* colours = full.opt("filament_colour")) if (source_index < colours->size()) hex = colours->get_at(source_index); - if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) - header_sizer->Add(new wxStaticBitmap(category.page, wxID_ANY, *chip), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { + category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); + header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + } category.master_check = new wxCheckBox(category.page, wxID_ANY, title); category.master_check->SetFont(Label::Head_14); category.master_check->SetToolTip(_L("Export this material")); @@ -535,7 +537,19 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, const size_t category_index = m_categories.size(); m_categories.push_back(std::move(category)); m_sections[group].categories.push_back(category_index); - m_sections[group].tabs->AppendItem(title); + if (section == Section::Material) { + std::string hex; + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + if (const auto* colours = full.opt("filament_colour")) + if (source_index < colours->size()) + hex = colours->get_at(source_index); + if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) + m_sections[group].tabs->AppendItem(title, *chip); + else + m_sections[group].tabs->AppendItem(title); + } else { + m_sections[group].tabs->AppendItem(title); + } m_sections[group].page_host_sizer->Add(m_categories[category_index].page, 1, wxEXPAND); if (m_sections[group].selected_inner < 0) m_sections[group].selected_inner = 0; @@ -971,6 +985,15 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) cat.header->Refresh(); if (cat.master_check != nullptr) cat.master_check->Refresh(); + if (cat.filament_color_chip != nullptr) { + std::string hex; + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + if (const auto* colours = full.opt("filament_colour")) + if (cat.filament_slot < colours->size()) + hex = colours->get_at(cat.filament_slot); + if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) + cat.filament_color_chip->SetBitmap(*chip); + } cat.scroll->FitInside(); cat.list_sizer->Layout(); } @@ -978,6 +1001,23 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) for (SectionGroup& section : m_sections) section.tabs->Rescale(); + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + for (size_t category_index = 0; category_index < m_categories.size(); ++category_index) { + const Category& category = m_categories[category_index]; + if (category.section != Section::Material) + continue; + std::string hex; + if (const auto* colours = full.opt("filament_colour")) + if (category.filament_slot < colours->size()) + hex = colours->get_at(category.filament_slot); + if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { + const SectionGroup& section = m_sections[category.group]; + const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); + if (iter != section.categories.end()) + m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); + } + } + SetMinSize(FromDIP(wxSize(600, 500))); Refresh(); } diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 0bae39daa4..949c08a81b 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -105,6 +105,7 @@ private: wxPoint scroll_pos{0, 0}; ScalableBitmap icon_bmp; // scalable bitmap for DPI changes wxStaticBitmap* icon{nullptr}; + wxStaticBitmap* filament_color_chip{nullptr}; wxCheckBox* header{nullptr}; // material select-all tri-state; null for Printer/Process // Material opt-in: the master checkbox carries the material title and // gates whether this material's keys may be exported. diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index e236c84e67..0efba60f3d 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -80,6 +80,7 @@ bool Button::SetFont(const wxFont& font) void Button::SetIcon(const wxString& icon) { + custom_icon = wxNullBitmap; auto tmpBitmap = ScalableBitmap(this, icon.ToStdString(), this->active_icon.px_cnt()); if (!icon.IsEmpty()) { //BBS set button icon default size to 20 @@ -95,6 +96,13 @@ void Button::SetIcon(const wxString& icon) } } +void Button::SetBitmap(const wxBitmap& bitmap) +{ + custom_icon = bitmap; + messureSize(); + Refresh(); +} + void Button::SetInactiveIcon(const wxString &icon) { if (!icon.IsEmpty()) { @@ -311,7 +319,8 @@ void Button::render(wxDC& dc) } } auto szContent = textSize; - if (icon.bmp().IsOk()) { + const bool has_custom_icon = custom_icon.IsOk(); + if (has_custom_icon || icon.bmp().IsOk()) { if (szContent.y > 0) { //BBS norrow size between text and icon if (vertical) @@ -319,7 +328,7 @@ void Button::render(wxDC& dc) else szContent.x += spacing; } - szIcon = icon.GetBmpSize(); + szIcon = has_custom_icon ? custom_icon.GetSize() : icon.GetBmpSize(); if (vertical) { szContent.y += szIcon.y; if (szIcon.x > szContent.x) szContent.x = szIcon.x; @@ -342,12 +351,12 @@ void Button::render(wxDC& dc) } // start draw wxPoint pt = rcContent.GetLeftTop(); - if (icon.bmp().IsOk()) { + if (has_custom_icon || icon.bmp().IsOk()) { if (vertical) pt.x += (rcContent.width - szIcon.x) / 2; else pt.y += (rcContent.height - szIcon.y) / 2; - dc.DrawBitmap(icon.bmp(), pt); + dc.DrawBitmap(has_custom_icon ? custom_icon : icon.bmp(), pt); //BBS norrow size between text and icon if (vertical) { pt.y += szIcon.y + spacing; @@ -380,7 +389,7 @@ void Button::messureSize() wxClientDC dc(this); dc.GetTextExtent(GetLabel(), &textSize.width, &textSize.height, &textSize.x, &textSize.y); wxSize szContent = textSize.GetSize(); - if (this->active_icon.bmp().IsOk()) { + if (custom_icon.IsOk() || this->active_icon.bmp().IsOk()) { if (szContent.y > 0) { //BBS norrow size between text and icon if (vertical) @@ -388,7 +397,7 @@ void Button::messureSize() else szContent.x += 5; } - wxSize szIcon = this->active_icon.GetBmpSize(); + wxSize szIcon = custom_icon.IsOk() ? custom_icon.GetSize() : this->active_icon.GetBmpSize(); if (vertical) { szContent.y += szIcon.y; if (szIcon.x > szContent.x) szContent.x = szIcon.x; diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 94b245a75b..bb9a013baa 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -35,6 +35,7 @@ class Button : public StaticBox wxSize paddingSize; ScalableBitmap active_icon; ScalableBitmap inactive_icon; + wxBitmap custom_icon; StateColor text_color; @@ -61,6 +62,7 @@ public: bool SetFont(const wxFont& font) override; void SetIcon(const wxString& icon); + void SetBitmap(const wxBitmap& bitmap); void SetInactiveIcon(const wxString& icon); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 40e291d5ad..6aeffd2dce 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -84,6 +84,7 @@ void TabCtrl::Rescale() { for (auto & b : btns) b->Rescale(); + relayout(); } bool TabCtrl::SetFont(wxFont const& font) @@ -117,6 +118,13 @@ int TabCtrl::AppendItem(const wxString &item, return btns.size() - 1; } +int TabCtrl::AppendItem(const wxString& item, const wxBitmap& bitmap, void* clientData) +{ + const int index = AppendItem(item, -1, -1, clientData); + SetItemBitmap(index, bitmap); + return index; +} + bool TabCtrl::DeleteItem(int item) { if (item < 0 || item >= btns.size()) { @@ -170,6 +178,14 @@ void TabCtrl::SetItemText(unsigned int item, wxString const &value) btns[item]->SetLabel(value); } +void TabCtrl::SetItemBitmap(unsigned int item, const wxBitmap& bitmap) +{ + if (item >= btns.size()) + return; + btns[item]->SetBitmap(bitmap); + relayout(); +} + bool TabCtrl::GetItemBold(unsigned int item) const { if (item >= btns.size()) return false; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index a25f332fb3..e79dd1dee6 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -29,6 +29,7 @@ public: public: int AppendItem(const wxString &item, int image = -1, int selImage = -1, void *clientData = nullptr); + int AppendItem(const wxString &item, const wxBitmap& bitmap, void *clientData = nullptr); bool DeleteItem(int item); @@ -46,6 +47,7 @@ public: wxString GetItemText(unsigned int item) const; void SetItemText(unsigned int item, wxString const &value); + void SetItemBitmap(unsigned int item, const wxBitmap& bitmap); bool GetItemBold(unsigned int item) const; void SetItemBold(unsigned int item, bool bold); From 2b18744cc237c2b9d9e30190d58ecc597c84432d Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 17 Aug 2026 17:50:54 +0800 Subject: [PATCH 026/208] Allow model to be Published without any settings modified --- src/slic3r/GUI/PublishSettingsDialog.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index c3b927d09b..63333ea451 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -165,16 +165,9 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { - // At least one checked, enabled (publishable) key is required. A gated - // material row is disabled even if its value is pre-checked, so it must - // not count. - for (const Row& row : m_rows) - if (row.check->GetValue() && row.check->IsEnabled()) { - EndModal(wxID_OK); - return; - } - MessageDialog(this, _L("No settings selected. Please select at least one setting to publish."), _L("Publish"), wxOK | wxICON_WARNING) - .ShowModal(); + // Publish is always allowed: no settings selected means a publish with + // no settings override. + EndModal(wxID_OK); }); dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); @@ -1012,7 +1005,7 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) hex = colours->get_at(category.filament_slot); if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { const SectionGroup& section = m_sections[category.group]; - const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); + const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); if (iter != section.categories.end()) m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); } From 6c429059e019d558bf9502aadf886df6e9539fc7 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 18 Aug 2026 13:49:10 +0800 Subject: [PATCH 027/208] Extend Publish workflow with full-filament and type/color requirements Per material slot, the Publish dialog can now embed the entire filament preset ("Full Publish") and require a curated filament type and/or colour: - On export, full-publish vector options are masked to the author's slot so unrelated slot data never leaks into the published file. - On load, slots are matched by the published type: a match keeps the receiver's material (full dumps ignored, partial keys applied); a mismatch replaces the slot with the first visible same-type library filament, falling back to a temporary embedded preset or skipped keys when none exists. Required colours apply regardless of the type match. - The receiver's slot count grows only to the highest published slot. - Published 3MFs load as a new project: the file's path is not adopted as the project filename, published metadata is stripped from the model, and the file is added to recent projects. - Notifications list replaced slots, and the edited filament preset is refreshed so applied values surface in the GUI. - Dialog: "Full Publish" toggle replaces the material opt-in and select-all headers; new Color/Type requirement rows with swatches. - Add Ctrl+Shift+E shortcut for the Publish dialog (menu, key handling, and the keyboard shortcuts dialog). - Tests for export slot masking, metadata round-trip, replacement semantics, slot growth, and skipped-key reporting. --- src/libslic3r/PresetBundle.cpp | 219 ++++++++++ src/libslic3r/PresetBundle.hpp | 3 + src/libslic3r/PublishSettings.cpp | 81 +++- src/libslic3r/PublishSettings.hpp | 22 + src/slic3r/GUI/KBShortcutsDialog.cpp | 1 + src/slic3r/GUI/MainFrame.cpp | 25 +- src/slic3r/GUI/MainFrame.hpp | 2 + src/slic3r/GUI/Plater.cpp | 73 +++- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 213 ++++----- src/slic3r/GUI/PublishSettingsDialog.hpp | 33 +- tests/libslic3r/test_3mf.cpp | 95 +++++ .../libslic3r/test_preset_bundle_loading.cpp | 403 ++++++++++++++++++ 13 files changed, 1037 insertions(+), 135 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index febfa5d4dc..8a047fea00 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4783,6 +4783,11 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (is_published) { std::vector skipped_keys; std::set applied_keys; + // Set whenever the material overlay actually modifies a receiver filament preset + // (applied key, colour or slot replacement). Only then must the edited preset be + // re-snapshotted: re-selecting unconditionally would discard the user's unsaved + // in-memory filament edits when the published file touches nothing. + bool material_applied = false; // Structural keys must never be applied to the user's presets: doing so would // rewrite their preset inheritance/structure. This is the single source of truth // shared with PublishSettingsDialog.cpp (publish_structural_keys in @@ -4869,6 +4874,11 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool return true; }; for (const PublishedMaterialEntry &entry : published_config->material_keys) { + // Entries using the filament-publishing-v2 features (full dump, published type or + // colour) are handled by the positional per-slot pass below; the legacy identity + // matching here applies only to files that predate those features. + if (entry.full || entry.publish_type || entry.publish_color) + continue; // Resolve the author's source slot and its ordinal among the author slots // carrying this entry's identity. A slotted entry (slot >= 0) names the exact // author slot and targets the receiver's Nth matching preset (N = ordinal); @@ -5002,11 +5012,212 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool continue; } static_cast(dst_opt)->set_at(src_opt, 0, author_slot); + material_applied = true; } } } } + // Filament-publishing-v2: positional per-slot entries. The author published, per slot, + // either the entire filament (full) or specific keys plus optionally a curated type + // and/or colour. The receiver's slot is matched positionally against the published type: + // - colour: always applied to the slot, independent of the type gate; + // - type match: a full dump is intentionally ignored (the receiver keeps its material), + // a partial entry's keys are applied as usual; + // - type mismatch: the slot is replaced with the first visible same-type filament from + // the receiver's library; the author's values are applied on top of it (full) or the + // published keys are applied (partial); + // - no replacement available: a full entry falls back to applying the author's values + // in-memory onto the receiver's current preset (no library import); a partial entry + // keeps the receiver's material and reports its keys as skipped. + { + // Slot growth is tied to the author slots that carry published content (full, + // type or colour): the file's total filament count is irrelevant, and a slot the + // author left unpublished must not pull a filler material into the receiver's + // setup. Grow only as far as the highest published slot (never shrink, never + // remove the receiver's existing materials). + bool has_new_semantics = false; + size_t target_slots = this->filament_presets.size(); + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + if (!entry.full && !entry.publish_type && !entry.publish_color) + continue; // legacy entry, handled above + has_new_semantics = true; + if (entry.slot >= 0) + target_slots = std::max(target_slots, size_t(entry.slot) + 1); + } + if (has_new_semantics) { + // Defensive cap: never exceed the file's own filament count. + target_slots = std::min(target_slots, num_filaments); + while (this->filament_presets.size() < target_slots) { + const size_t new_slot_idx = this->filament_presets.size(); + std::string initial_preset; + // Proactively assign matching candidate preset if this slot carries a published type + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + if (entry.slot == static_cast(new_slot_idx) && entry.publish_type && !entry.publish_type_value.empty()) { + for (size_t i = 0; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible) + continue; + if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) == entry.publish_type_value) { + initial_preset = candidate.name; + break; + } + } + break; + } + } + if (initial_preset.empty()) + initial_preset = this->filaments.first_visible().name; + this->filament_presets.emplace_back(initial_preset); + } + + auto apply_slot_keys = [&](Preset &preset, const std::vector &slot_keys, int author_slot, + const std::string &material_label) { + for (const std::string &key : slot_keys) { + const std::string base_key = key.substr(0, key.find('#')); + if (structural_keys.count(base_key) != 0) + continue; + const ConfigOption *src_opt = config.option(base_key); + if (src_opt == nullptr || !src_opt->is_vector() || + author_slot < 0 || author_slot >= static_cast(static_cast(src_opt)->size())) { + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + ConfigOption *dst_opt = preset.config.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector() || + static_cast(dst_opt)->empty() || + dst_opt->type() != src_opt->type()) { + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + // Per-slot scalar copy: the receiver's filament preset holds a single + // value per key (vector of size 1), the file holds the per-slot vector. + static_cast(dst_opt)->set_at(src_opt, 0, author_slot); + material_applied = true; + } + }; + + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + if (!entry.full && !entry.publish_type && !entry.publish_color) + continue; // legacy entry, handled above + if (entry.slot < 0 || size_t(entry.slot) >= this->filament_presets.size()) + continue; // out of range: nothing to do for this slot + const size_t slot = size_t(entry.slot); + // Modify the stored preset itself (real=true), never the edited snapshot: + // find_preset would return &m_edited_preset for the currently selected slot, + // and the re-select at the end of this block re-snapshots from the stored + // preset, silently discarding any values applied to the snapshot. + Preset *recv = this->filaments.find_preset(this->filament_presets[slot], false, true); + if (recv == nullptr) + continue; + + const std::string material_label = entry.filament_id.empty() + ? (entry.publish_type_value.empty() ? entry.filament_type : entry.publish_type_value) + : entry.filament_id; + + bool apply_slot = true; + if (entry.publish_type && !entry.publish_type_value.empty()) { + const std::string recv_type = normalize_filament_type(recv->config.opt_string("filament_type", 0u)); + if (recv_type == entry.publish_type_value) { + // Type match: the receiver keeps its material. A full dump is + // intentionally ignored for this slot; partial keys still apply. + if (entry.full) + apply_slot = false; + } else { + // Type mismatch: replace the slot with the first visible same-type + // filament from the receiver's library. + std::string replacement; + for (size_t i = 0; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible) + continue; + if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) != entry.publish_type_value) + continue; + replacement = candidate.name; + break; + } + if (!replacement.empty()) { + const std::string old_name = recv->name; + this->filament_presets[slot] = replacement; + recv = this->filaments.find_preset(replacement, false, true); + material_applied = true; + published_config->material_replacements.emplace_back( + "slot " + std::to_string(slot) + ": " + old_name + " -> " + replacement); + } else if (entry.full) { + // No library match: create a temporary project-embedded custom preset + // populated with default settings and overlaid with the author's values. + std::string custom_name = entry.publish_type_value + " (Published)"; + for (size_t idx = 1; this->filaments.find_preset(custom_name, false) != nullptr; ++idx) + custom_name = entry.publish_type_value + " (Published " + std::to_string(idx) + ")"; + + // Capture the slot's current name BEFORE load_preset: the custom + // name sorts ahead of the slot's material, so the deque insertion + // relocates it and recv would dangle after the call. + const std::string old_name = recv->name; + + DynamicPrintConfig custom_cfg = this->filaments.default_preset_for(config).config; + // filament_type is a per-slot vector option: set it via the strings + // accessor. opt_string(key, bool) would ask for the scalar + // ConfigOptionString, fail the cast and dereference nullptr. + if (ConfigOptionStrings *type_opt = custom_cfg.opt("filament_type", true)) { + if (type_opt->values.empty()) + type_opt->values.emplace_back(); + type_opt->values[0] = entry.publish_type_value; + } + if (ConfigOptionStrings *id_opt = custom_cfg.opt("filament_settings_id", true)) + if (!id_opt->values.empty()) + id_opt->values[0] = custom_name; + + Preset &created = this->filaments.load_preset("", custom_name, std::move(custom_cfg), false, file_version); + created.is_project_embedded = true; + created.is_visible = true; + + this->filament_presets[slot] = custom_name; + recv = &created; + material_applied = true; + published_config->material_replacements.emplace_back( + "slot " + std::to_string(slot) + ": " + old_name + " -> " + custom_name); + } else { + // Partial publish with no replacement available: keep the + // receiver's material and report this slot's keys as skipped. + for (const std::string &key : entry.keys) + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + apply_slot = false; + } + } + } + + // Colour is slot-scoped and independent of the type gate: it is applied to + // whichever material ends up in the slot (original, replacement or the + // in-memory fallback), and synced into project_config for GUI rendering. + if (entry.publish_color && !entry.color.empty()) { + if (recv != nullptr) { + // Create the key when the target preset lacks it (e.g. a replacement + // built from the static defaults): the colour is a requirement, not + // an optional override. + if (ConfigOptionStrings *colour = recv->config.opt("filament_colour", true)) { + if (colour->values.empty()) + colour->values.emplace_back(); + colour->values[0] = entry.color; + material_applied = true; + } + } + if (ConfigOptionStrings *proj_colour = this->project_config.opt("filament_colour")) { + if (slot < proj_colour->values.size()) + proj_colour->values[slot] = entry.color; + } + if (ConfigOptionStrings *proj_multi_colour = this->project_config.opt("filament_multi_colour")) { + if (slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = entry.color; + } + } + + if (apply_slot && recv != nullptr) + apply_slot_keys(*recv, entry.full ? entry.full_keys : entry.keys, entry.slot, material_label); + } + } + } + for (const std::string &key : published_config->published_keys) { if (applied_keys.count(key) != 0) continue; @@ -5021,6 +5232,14 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool skipped_keys.emplace_back(key); } published_config->skipped_keys = std::move(skipped_keys); + + // The material overlay above modified the filament collection presets in place, but + // the edited preset (what the GUI displays) is a snapshot taken when the preset was + // last selected. Re-select the first slot's filament (mirroring a normal project load) + // so the applied values (colour, type, keys and slot replacements) surface in the GUI; + // selecting any other slot's filament afterwards snapshots its modified preset too. + if (material_applied && !this->filament_presets.empty()) + this->filaments.select_preset_by_name(this->filament_presets.front(), true); } //BBS diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index c8af2e4b71..d568de30e3 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -181,6 +181,9 @@ struct PublishedConfig // Keys that could not be applied (missing on the user's machine or vector size mismatch), // filled in by load_config_file_config for notification purposes. std::vector skipped_keys; + // Human-readable notices of the slot material replacements performed while loading a + // published project (e.g. "Slot 2: replaced PETG with PLA"), for the load notification. + std::vector material_replacements; }; // Bundle of Print + Filament + Printer presets. diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index 9ac0c49472..0d1bd07989 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -3,11 +3,31 @@ #include "PresetBundle.hpp" #include "Preset.hpp" #include "PrintConfig.hpp" +#include "MaterialType.hpp" #include +#include +#include namespace Slic3r { +std::string normalize_filament_type(const std::string& type) +{ + if (type.empty()) + return type; + if (MaterialType::find(type) != nullptr) + return type; + // "PLA High Speed" -> "PLA": strip a space-separated modifier, but keep dash-separated + // types like "PA-CF" / "PETG-CF" intact (they are distinct materials, not modifiers). + const size_t sep = type.find(' '); + if (sep != std::string::npos) { + const std::string base = type.substr(0, sep); + if (MaterialType::find(base) != nullptr) + return base; + } + return type; +} + const std::set& publish_structural_keys() { // Structural / non-publishable keys. The *_settings_id keys are also part of @@ -111,6 +131,13 @@ DynamicPrintConfig filter_published_config( DynamicPrintConfig filtered; std::set base_keys_to_include; + // Base keys that must never be masked: identity, plate geometry, process/printer keys and + // partially-published material keys keep today's whole-vector serialization (all slots). + std::set mask_exempt_keys; + // For keys carried only by "full" entries: base key -> author slots whose values must + // survive; the other slots are masked to their defaults so a full publish does not leak + // the author's unrelated slot data. + std::map> full_slot_map; // 1. Mandatory material identity & slot count keys for 3MF validation/normalization static const std::vector s_material_identity_keys = { @@ -122,8 +149,10 @@ DynamicPrintConfig filter_published_config( "filament_self_index", "filament_extruder_variant" }; - for (const std::string &key : s_material_identity_keys) + for (const std::string &key : s_material_identity_keys) { base_keys_to_include.insert(key); + mask_exempt_keys.insert(key); + } // 2. Published plate / bed geometry keys (wipe tower positioning) static const std::vector s_plate_geometry_keys = { @@ -131,29 +160,69 @@ DynamicPrintConfig filter_published_config( "wipe_tower_y", "wipe_tower_rotation_angle" }; - for (const std::string &key : s_plate_geometry_keys) + for (const std::string &key : s_plate_geometry_keys) { base_keys_to_include.insert(key); + mask_exempt_keys.insert(key); + } // 3. Process and printer published keys for (const std::string &key : published_keys) { const std::string base_key = key.substr(0, key.find('#')); - if (!base_key.empty()) + if (!base_key.empty()) { base_keys_to_include.insert(base_key); + mask_exempt_keys.insert(base_key); + } } // 4. Material-specific published keys for (const PublishedMaterialEntry &entry : material_keys) { for (const std::string &key : entry.keys) { const std::string base_key = key.substr(0, key.find('#')); - if (!base_key.empty()) + if (!base_key.empty()) { base_keys_to_include.insert(base_key); + mask_exempt_keys.insert(base_key); + } + } + // 4b. "Full publish" entries carry the entire slot; the values of the covered keys are + // masked to the author's slot on export (see the copy loop below). + for (const std::string &key : entry.full_keys) { + const std::string base_key = key.substr(0, key.find('#')); + if (base_key.empty()) + continue; + base_keys_to_include.insert(base_key); + if (entry.slot >= 0) + full_slot_map[base_key].insert(entry.slot); } } + // Mask a vector option's slots that are not author-published: copy the option default over + // each non-published index. Keys without an option default are left unmasked (the file then + // carries the whole vector, matching the partial-publish behavior). + auto mask_slots = [](ConfigOption &opt, const ConfigOptionDef *def, const std::set &keep_slots) { + auto *vec = dynamic_cast(&opt); + if (vec == nullptr || vec->size() == 0 || def == nullptr || !def->default_value) + return; + if (def->default_value->type() != opt.type()) + return; + const auto *default_vec = dynamic_cast(def->default_value.get()); + if (default_vec == nullptr || default_vec->empty()) + return; + for (size_t idx = 0; idx < vec->size(); ++idx) + if (keep_slots.count(static_cast(idx)) == 0) + vec->set_at(def->default_value.get(), idx, 0); + }; + // Copy selected options from full_config into filtered config for (const std::string &key : base_keys_to_include) { - if (const ConfigOption *opt = full_config.option(key)) - filtered.set_key_value(key, opt->clone()); + if (const ConfigOption *opt = full_config.option(key)) { + ConfigOption *cloned = opt->clone(); + if (mask_exempt_keys.count(key) == 0) { + const auto it = full_slot_map.find(key); + if (it != full_slot_map.end() && !it->second.empty()) + mask_slots(*cloned, print_config_def.get(key), it->second); + } + filtered.set_key_value(key, cloned); + } } return filtered; diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index 6525fbb66e..aadf0d3234 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -52,8 +52,30 @@ struct PublishedMaterialEntry { // entries apply to every matching receiver preset. int slot{-1}; std::vector keys; + // "Full Publish": the entire filament preset of this slot is serialized (see full_keys), + // not just the individually selected keys. On load the type gate (publish_type_value) + // decides whether the receiver keeps its material (type match) or is replaced; a full + // entry carries no partial keys. + bool full{false}; + // All non-structural filament keys of the author's slot preset, present when full is true. + // Values travel in the file config, masked to the author's slot index. + std::vector full_keys; + // Vendor-agnostic, curated (MaterialType) filament type the author requires for this slot. + // On load the receiver's slot material is matched against it; on mismatch the slot is + // replaced with a same-type filament from the receiver's library. + bool publish_type{false}; + std::string publish_type_value; + // Required filament colour for this slot, applied on load regardless of the type match. + bool publish_color{false}; + std::string color; }; +// Normalizes a filament type string against the curated MaterialType list: an exact match +// wins, then the value is stripped after its first space ("PLA High Speed" -> "PLA"); a +// value still not recognized is returned unchanged. Shared by the Publish dialog's type row +// default and by the published-3MF loader's type matching. +std::string normalize_filament_type(const std::string& type); + // Constructs a minimal DynamicPrintConfig for a published 3MF export containing only the // author-selected published keys, material keys, material identity fields, and plate geometry keys. class DynamicPrintConfig; diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index ed513c425f..df69fa5434 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -174,6 +174,7 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "O", L("Open Project") }, { ctrl + "S", L("Save Project") }, { ctrl + shift + "S", L("Save Project as")}, + { ctrl + shift + "E", L("Publish") }, // File>Import { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, // File>Export diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index abca800277..3cb246529f 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -741,6 +741,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ if (m_plater) { m_plater->add_file(); } return; } + if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'E') { + if (can_export_model()) publish_project(); + return; + } evt.Skip(); }); @@ -1728,6 +1732,16 @@ bool MainFrame::save_project_as(const wxString& filename) return ret; } +void MainFrame::publish_project() +{ + if (m_plater == nullptr) + return; + PublishSettingsDialog dlg(this); + if (dlg.ShowModal() != wxID_OK) + return; + m_plater->export_published_3mf(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); +} + bool MainFrame::can_upload() const { return true; @@ -2820,19 +2834,14 @@ void MainFrame::init_menubar_as_editor() // BBS: publish fileMenu->AppendSeparator(); - auto publish_handler = [this](wxCommandEvent&) { - if (!m_plater) return; - PublishSettingsDialog dlg(this); - if (dlg.ShowModal() != wxID_OK) return; - m_plater->export_published_3mf(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); - }; + auto publish_handler = [this](wxCommandEvent&) { publish_project(); }; #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots, _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), publish_handler, "menu_publish", nullptr, [this](){return can_export_model(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots, _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), publish_handler, "", nullptr, [this](){return can_export_model(); }, this); #endif diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index a614783c31..040b9447e8 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -340,6 +340,8 @@ public: bool can_upload() const; void save_project(); bool save_project_as(const wxString& filename = wxString()); + // Open the Publish dialog and export the selected settings as a published 3MF. + void publish_project(); void add_to_recent_projects(const wxString& filename); void get_recent_projects(boost::property_tree::wptree &tree, int images); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 82dd38fe97..28ba184d1c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5449,7 +5449,7 @@ struct Plater::priv BoundingBox scaled_bed_shape_bb() const; // BBS: backup & restore - std::vector load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi = false); + std::vector load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi = false, bool* published_out = nullptr); std::vector load_model_objects(const ModelObjectPtrs& model_objects, bool allow_negative_z = false, bool split_object = false, bool auto_drop = true); fs::path get_export_file_path(GUI::FileType file_type); @@ -6759,7 +6759,7 @@ void read_binary_stl(const std::string& filename, std::string& model_id, std::st } // BBS: backup & restore -std::vector Plater::priv::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) +std::vector Plater::priv::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi, bool* published_out) { std::vector empty_result; bool dlg_cont = true; @@ -7257,6 +7257,22 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (const auto &k : *entry_keys_it) if (k.is_string()) entry.keys.emplace_back(k.get()); + // Filament-publishing-v2 fields; absent in legacy files. + if (m.contains("full") && m["full"].is_boolean()) + entry.full = m["full"].get(); + const auto entry_full_keys_it = m.find("full_keys"); + if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) + for (const auto &k : *entry_full_keys_it) + if (k.is_string()) + entry.full_keys.emplace_back(k.get()); + if (m.contains("publish_type") && m["publish_type"].is_boolean()) + entry.publish_type = m["publish_type"].get(); + if (m.contains("type") && m["type"].is_string()) + entry.publish_type_value = m["type"].get(); + if (m.contains("publish_color") && m["publish_color"].is_boolean()) + entry.publish_color = m["publish_color"].get(); + if (m.contains("color") && m["color"].is_string()) + entry.color = m["color"].get(); published_config.material_keys.emplace_back(std::move(entry)); } } catch (...) { @@ -7266,6 +7282,18 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } + // BBS: a "published" 3MF behaves like a new project once loaded: the file's path + // must not become the project filename (Save/Ctrl-S would otherwise overwrite the + // shared file), and the published metadata is consumed by the overlay above and + // stripped so a later save produces a normal, unpublished 3MF. + if (published_out != nullptr && published_config.published) + *published_out = true; + if (published_config.published && load_config && this->model.model_info != nullptr) { + this->model.model_info->metadata_items.erase("published"); + this->model.model_info->metadata_items.erase("published_keys"); + this->model.model_info->metadata_items.erase("published_material_keys"); + } + if (load_config) { if (!config.empty()) { Preset::normalize(config); @@ -7380,6 +7408,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ notify_manager->bbl_show_3mf_warn_notification(message); } + // BBS: notify the user about slot materials that were replaced while + // loading a published project (type mismatch / no same-type match). + if (!published_config.material_replacements.empty()) { + NotificationManager *notify_manager = q->get_notification_manager(); + std::string message = _u8L("Some filament slots were changed to match the published materials:"); + for (const std::string &replacement : published_config.material_replacements) + message += "\n-" + replacement; + notify_manager->bbl_show_3mf_warn_notification(message); + } + ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); if (bed_type_opt != nullptr) { BedType bed_type = (BedType)bed_type_opt->getInt(); @@ -7519,7 +7557,13 @@ std::vector Plater::priv::load_files(const std::vector& input_ dynamic_map->value = false; } // Update filament combobox after loading config - wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT); + if (published_config.published) { + q->update_filament_colors_in_full_config(); + wxGetApp().plater()->sidebar().update_all_preset_comboboxes(); + wxGetApp().plater()->sidebar().update_dynamic_filament_list(); + } else { + wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT); + } // The loaded project supplies nozzle_volume_type; refresh the sidebar // nozzle-count badges against it. if (auto *nozzle_volumes = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")) { @@ -13244,14 +13288,15 @@ void Plater::load_project(wxString const& filename2, if (strategy & LoadStrategy::Restore) input_paths.push_back(into_u8(originfile)); - std::vector res = load_files(input_paths, strategy); + bool loaded_published = false; + std::vector res = load_files(input_paths, strategy, false, &loaded_published); reset_project_dirty_initial_presets(); update_project_dirty_from_presets(); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); // if res is empty no data has been loaded - if (!res.empty() && (load_restore || !(strategy & LoadStrategy::Silence))) { + if (!res.empty() && !loaded_published && (load_restore || !(strategy & LoadStrategy::Silence))) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << (load_restore ? originfile : filename); p->set_project_filename(load_restore ? originfile : filename); if (load_restore && originfile.IsEmpty()) { @@ -13263,6 +13308,15 @@ void Plater::load_project(wxString const& filename2, BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " using ecported set project filename: " << filename; p->set_project_filename(filename); } + else if (loaded_published) { + // A "published" 3MF loads as a new project: the shared file's path must not become + // the project filename, so Save/Ctrl-S prompts for a destination instead of + // overwriting the published file. reset() above already cleared the project name + // and folder; restore the default new-project title and keep the file in recents. + p->set_project_name(_L("Untitled")); + if (!filename.IsEmpty()) + wxGetApp().mainframe->add_to_recent_projects(filename); + } } @@ -14918,12 +14972,12 @@ void Plater::force_update_all_plate_thumbnails() } // BBS: backup -std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) { +std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi, bool* published_out) { //BBS: wish to reset state when load a new file p->m_slice_all_only_has_gcode = false; //BBS: wish to reset all plates stats item selected state when load a new file p->preview->get_canvas3d()->reset_select_plate_toolbar_selection(); - return p->load_files(input_files, strategy, ask_multi); + return p->load_files(input_files, strategy, ask_multi, published_out); } // To be called when providing a list of files to the GUI slic3r on command line. @@ -16186,7 +16240,10 @@ int Plater::export_published_3mf(const std::vector& published_keys, j.push_back(key); nlohmann::json jm = nlohmann::json::array(); for (const Slic3r::PublishedMaterialEntry& e : material_keys) - jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}}}, {"slot", e.slot}, {"keys", e.keys} }); + jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}}}, {"slot", e.slot}, {"keys", e.keys}, + {"full", e.full}, {"full_keys", e.full_keys}, + {"publish_type", e.publish_type}, {"type", e.publish_type_value}, + {"publish_color", e.publish_color}, {"color", e.color} }); Model& model = this->model(); // Remember the previous metadata state so it can be restored after the export, keeping the diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index d29e86a4fa..d6ec283409 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -383,7 +383,7 @@ public: bool preview_zip_archive(const boost::filesystem::path& archive_path); // BBS: restore - std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false); + std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false, bool* published_out = nullptr); // To be called when providing a list of files to the GUI slic3r on command line. std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false); // to be called on drag and drop diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 63333ea451..5baff8282c 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -290,6 +290,25 @@ void PublishSettingsDialog::build_option_model() const PublishMaterialIdentity identity = material_identity(slot, full); const wxString title = material_title(slot, bundle, full); const size_t category_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, slot, identity); + + // Filament-publishing-v2 rows: the author may require a filament colour and/or + // a vendor-agnostic material type for this slot. They live in their own + // optgroup so they stay visually separated from the setting rows. + { + const size_t req_sub = subcategory_index_for(category_index, _L("Material"), "custom-gcode_filament"); + std::string hex; + if (const auto* colours = full.opt("filament_colour")) + if (slot < colours->size()) + hex = colours->get_at(slot); + add_row_ui("filament_colour", _L("Color"), from_u8(hex), wxString(), category_index, req_sub, RowKind::Color); + std::string type; + if (const auto* types = full.opt("filament_type")) + if (slot < types->size()) + type = types->get_at(slot); + add_row_ui("filament_type", _L("Type"), from_u8(normalize_filament_type(type)), wxString(), category_index, req_sub, + RowKind::Type); + } + // A material section must not repeat a key; the same key may // appear in other material sections - that is intended. std::set material_added; @@ -371,6 +390,10 @@ void PublishSettingsDialog::build_option_model() dirty_base.insert(n == std::string::npos ? key : key.substr(0, n)); } for (Row& row : m_rows) { + // The Color/Type requirement rows are not "dirty overrides": they are never + // auto-checked by the dirty pre-check. + if (row.kind != RowKind::Setting) + continue; std::string base = row.key.substr(0, row.key.find('#')); row.dirty = dirty_base.count(base) > 0; if (row.dirty) { @@ -379,24 +402,11 @@ void PublishSettingsDialog::build_option_model() } } - // Wire the inner-page tri-state headers: clicking a header toggles all its children; - // toggling any child re-syncs its header. Bind by index so the lambdas stay - // valid even if the vectors are reallocated later. - for (size_t c = 0; c < m_categories.size(); ++c) { - if (m_categories[c].master_check != nullptr) - m_categories[c].master_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_master_toggle(c); }); - if (m_categories[c].header != nullptr) - m_categories[c].header->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_category_toggle(c); }); - for (size_t r : m_categories[c].rows) - m_rows[r].check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { update_all_headers(); }); - update_category_header(m_categories[c]); - } - - // Material pages start gated (master OFF): their rows and tri-state are - // disabled until the author opts the material in. + // Wire the "Full Publish" checkboxes: toggling one disables/enables the material's + // rows. Bind by index so the lambda stays valid even if the vector is reallocated later. for (size_t c = 0; c < m_categories.size(); ++c) - if (m_categories[c].section == Section::Material) - on_master_toggle(c); + if (m_categories[c].full_check != nullptr) + m_categories[c].full_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_full_toggle(c); }); // No filter is active at startup: every row matches until the user types. for (Row& row : m_rows) @@ -502,13 +512,13 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); } - category.master_check = new wxCheckBox(category.page, wxID_ANY, title); - category.master_check->SetFont(Label::Head_14); - category.master_check->SetToolTip(_L("Export this material")); - header_sizer->Add(category.master_check, 0, wxALIGN_CENTER_VERTICAL); - category.header = new wxCheckBox(category.page, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxCHK_3STATE); - category.header->SetToolTip(_L("Select/deselect all settings in this material")); - header_sizer->Add(category.header, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(6)); + category.title_label = new wxStaticText(category.page, wxID_ANY, title); + category.title_label->SetFont(Label::Head_14); + header_sizer->Add(category.title_label, 0, wxALIGN_CENTER_VERTICAL); + category.full_check = new wxCheckBox(category.page, wxID_ANY, _L("Full Publish")); + category.full_check->SetFont(Label::Body_13); + category.full_check->SetToolTip(_L("Embed the entire filament of this slot in the 3MF file")); + header_sizer->Add(category.full_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(10)); page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); } @@ -575,7 +585,8 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, const wxString& value, const wxString& unit, size_t category_index, - size_t subcategory_index) + size_t subcategory_index, + RowKind kind) { Category& category = m_categories[category_index]; Row row; @@ -583,6 +594,7 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, row.label = label; row.value = value; row.unit = unit; + row.kind = kind; row.category = category.title; row.subcategory = category.subs[subcategory_index].title; row.section = category.section; @@ -595,82 +607,38 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, Row& current = m_rows[row_index]; current.check = new wxCheckBox(category.scroll, wxID_ANY, label); current.check->SetFont(Label::Body_13); + auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); + row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); + // The value is read-only text (incl. the Type row: the published type is the slot's + // normalized type, the author cannot pick a different one here). current.value_label = new wxStaticText(category.scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); current.value_label->SetFont(Label::Body_13); current.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); current.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); + if (kind == RowKind::Color && !value.IsEmpty()) { + if (wxBitmap* chip = get_extruder_color_icon(value.ToStdString(), "", FromDIP(12), FromDIP(12))) { + current.color_chip = new wxStaticBitmap(category.scroll, wxID_ANY, *chip); + row_sizer->Add(current.color_chip, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + } + } + row_sizer->Add(current.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); if (!unit.IsEmpty()) { current.unit_label = new wxStaticText(category.scroll, wxID_ANY, unit); current.unit_label->SetFont(Label::Body_13); current.unit_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); - } - auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); - row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); - row_sizer->Add(current.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); - if (current.unit_label != nullptr) row_sizer->Add(current.unit_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + } current.item = category.list_sizer->Add(row_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); category.rows.push_back(row_index); category.subs[subcategory_index].rows.push_back(row_index); } -void PublishSettingsDialog::on_category_toggle(size_t category_index) +void PublishSettingsDialog::on_full_toggle(size_t category_index) { Category& cat = m_categories[category_index]; - // Defensive: a gated material header is disabled and cannot fire. - if (cat.section == Section::Material && !cat.master) - return; - // A click on the header toggles between "all" and "none": if every child is - // checked, uncheck all; otherwise check all. - bool all_checked = true; + cat.full = cat.full_check->GetValue(); for (size_t r : cat.rows) - if (!m_rows[r].check->GetValue()) { - all_checked = false; - break; - } - bool value = !all_checked; - for (size_t r : cat.rows) - m_rows[r].check->SetValue(value); - update_all_headers(); -} - -void PublishSettingsDialog::on_master_toggle(size_t category_index) -{ - Category& cat = m_categories[category_index]; - cat.master = cat.master_check->GetValue(); - for (size_t r : cat.rows) - m_rows[r].check->Enable(cat.master); - cat.header->Enable(cat.master); - update_all_headers(); -} - -void PublishSettingsDialog::update_all_headers() -{ - for (Category& category : m_categories) - update_category_header(category); -} - -void PublishSettingsDialog::update_category_header(Category& category) -{ - if (category.header == nullptr) - return; - // A gated material section's tri-state must not reflect the preserved - // (greyed-out) row values. - if (category.section == Section::Material && !category.master) { - category.header->Set3StateValue(wxCHK_UNCHECKED); - return; - } - int checked = 0; - for (size_t r : category.rows) - if (m_rows[r].check->GetValue()) - ++checked; - - if (checked == 0) - category.header->Set3StateValue(wxCHK_UNCHECKED); - else if (checked == static_cast(category.rows.size())) - category.header->Set3StateValue(wxCHK_CHECKED); - else - category.header->Set3StateValue(wxCHK_UNDETERMINED); + m_rows[r].check->Enable(!cat.full); } void PublishSettingsDialog::set_row_bold(Row& row, bool bold) @@ -845,7 +813,6 @@ void PublishSettingsDialog::select_all(bool value) for (Row& row : m_rows) if (row.check->IsEnabled()) row.check->SetValue(value); - update_all_headers(); } bool PublishSettingsDialog::row_is_visible(const Row& row) const @@ -876,9 +843,8 @@ void PublishSettingsDialog::select_visible(bool value) // re-enters apply_filter() - that is fine, the rows above were already // toggled and the trailing call below is idempotent. m_filter_ctrl->ChangeValue(""); - apply_filter(""); // resync visibility, headers and the All/None bar + apply_filter(""); // resync visibility and the All/None bar } - update_all_headers(); } void PublishSettingsDialog::show_menu(wxMouseEvent& evt) @@ -942,24 +908,67 @@ std::vector PublishSettingsDialog::GetPublishedM { std::vector out; for (const Category& cat : m_categories) { - // Only opted-in materials export their keys. - if (cat.section != Section::Material || !cat.master) + if (cat.section != Section::Material) continue; Slic3r::PublishedMaterialEntry entry; entry.filament_type = cat.filament_type; entry.filament_vendor = cat.filament_vendor; entry.filament_id = cat.filament_id; entry.slot = static_cast(cat.filament_slot); - for (size_t r : cat.rows) - if (m_rows[r].check->GetValue()) - entry.keys.push_back(m_rows[r].key); - // A section without any checked key carries no information for the writer. - if (!entry.keys.empty()) + // "Full Publish": the entire filament preset of the slot is embedded; type and color + // are implicitly published, and the per-key rows are disabled and their state is ignored. + if (cat.full_check != nullptr && cat.full_check->GetValue()) { + entry.full = true; + entry.full_keys = full_keys_for_slot(); + entry.publish_type = true; + entry.publish_type_value = normalize_filament_type(cat.filament_type); + for (size_t r : cat.rows) { + const Row& row = m_rows[r]; + if (row.kind == RowKind::Color && !row.value.IsEmpty()) { + entry.publish_color = true; + entry.color = row.value.ToStdString(); + } + } + out.push_back(std::move(entry)); + continue; + } + for (size_t r : cat.rows) { + const Row& row = m_rows[r]; + if (!row.check->GetValue()) + continue; + if (row.kind == RowKind::Color) { + entry.publish_color = true; + entry.color = row.value.ToStdString(); + } else if (row.kind == RowKind::Type) { + entry.publish_type = true; + entry.publish_type_value = row.value.ToStdString(); + } else { + entry.keys.push_back(row.key); + } + } + // A material with only setting keys but none checked, or with nothing selected at all, + // carries no information for the writer. + if (!entry.keys.empty() || entry.publish_type || entry.publish_color) out.push_back(std::move(entry)); } return out; } +std::vector PublishSettingsDialog::full_keys_for_slot() const +{ + // The canonical filament preset keys, minus the structural keys the published overlay must + // never touch (inherits, compatibility, *_settings_id, ...), plus filament_colour (not a + // member of Preset::filament_options). The values travel in the exported config, masked to + // this slot, and are applied on load onto the receiver's slot. + const std::set& denylist = publish_structural_keys(); + std::vector keys; + for (const std::string& key : Preset::filament_options()) + if (denylist.count(key) == 0) + keys.emplace_back(key); + keys.emplace_back("filament_colour"); + return keys; +} + void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) { // Rescale toolbar bitmaps and icons; collapse chevrons are vector-drawn and repaint themselves. @@ -974,10 +983,10 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) cat.icon_bmp.msw_rescale(); cat.icon->SetBitmap(cat.icon_bmp.bmp()); } - if (cat.header != nullptr) - cat.header->Refresh(); - if (cat.master_check != nullptr) - cat.master_check->Refresh(); + if (cat.full_check != nullptr) + cat.full_check->Refresh(); + if (cat.title_label != nullptr) + cat.title_label->Refresh(); if (cat.filament_color_chip != nullptr) { std::string hex; const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); @@ -994,6 +1003,14 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) for (SectionGroup& section : m_sections) section.tabs->Rescale(); + // Refresh the per-row Color chips at the new DPI. + for (Row& row : m_rows) { + if (row.color_chip != nullptr && !row.value.IsEmpty()) { + if (wxBitmap* chip = get_extruder_color_icon(row.value.ToStdString(), "", FromDIP(12), FromDIP(12))) + row.color_chip->SetBitmap(*chip); + } + } + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); for (size_t category_index = 0; category_index < m_categories.size(); ++category_index) { const Category& category = m_categories[category_index]; diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 949c08a81b..70b1dc8a2d 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -59,6 +59,11 @@ private: // One selectable setting row: a checkbox (setting name) plus a value label // and a (optional) grey unit label. key is the full config key and may carry // a "#N" variant suffix (print/printer rows); material rows carry the base key. + enum class RowKind { + Setting, // a regular setting key + Color, // material colour requirement (filament_colour) + Type, // material type requirement (read-only text) + }; struct Row { std::string key; @@ -69,6 +74,7 @@ private: wxString unit; wxString section_title; // outer tab title, for filter matching Section section{Section::Print}; + RowKind kind{RowKind::Setting}; size_t outer_index{0}; size_t inner_index{0}; size_t subcategory_index{0}; @@ -77,6 +83,7 @@ private: wxCheckBox* check{nullptr}; wxStaticText* value_label{nullptr}; wxStaticText* unit_label{nullptr}; + wxStaticBitmap* color_chip{nullptr}; // Color rows only; swatch next to the value wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in its tab list sizer }; @@ -89,7 +96,7 @@ private: std::vector rows; }; - // An inner TabCtrl page with its select-all/material controls and content. + // An inner TabCtrl page with its material controls and content. struct Category { wxString title; @@ -106,11 +113,11 @@ private: ScalableBitmap icon_bmp; // scalable bitmap for DPI changes wxStaticBitmap* icon{nullptr}; wxStaticBitmap* filament_color_chip{nullptr}; - wxCheckBox* header{nullptr}; // material select-all tri-state; null for Printer/Process - // Material opt-in: the master checkbox carries the material title and - // gates whether this material's keys may be exported. - bool master{false}; - wxCheckBox* master_check{nullptr}; + wxStaticText* title_label{nullptr}; // material title (static text, Full Publish carries the label elsewhere) + // "Full Publish": serializing the entire filament preset of this slot. While checked, + // the slot's rows (incl. Color/Type) are disabled. + bool full{false}; + wxCheckBox* full_check{nullptr}; // Material identity, only for Section::Material categories. std::string filament_type; std::string filament_vendor; @@ -118,7 +125,7 @@ private: // The author's 0-based filament slot this material section represents. size_t filament_slot{0}; std::vector subs; - std::vector rows; // flattened rows, for the tri-state math + std::vector rows; // flattened rows of this category }; // One outer TabCtrl page. Category entries are its inner tabs. @@ -140,25 +147,23 @@ private: void select_all(bool value); void select_visible(bool value); void show_menu(wxMouseEvent& evt); - void update_category_header(Category& category); void set_row_bold(Row& row, bool bold); - void on_category_toggle(size_t category_index); - // Material opt-in toggled: enables/disables the material's rows + tri-state - // and resyncs the header. - void on_master_toggle(size_t category_index); + // "Full Publish" toggled: disables/enables the material's rows. + void on_full_toggle(size_t category_index); // Return/create the fixed outer page for a Section kind. size_t section_group_for(Section kind); size_t category_index_for(const wxString& title, Section section, const std::string& icon_name, size_t group, size_t source_index, const PublishMaterialIdentity& identity = PublishMaterialIdentity()); size_t subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon); void add_row_ui(const std::string& key, const wxString& label, const wxString& value, const wxString& unit, - size_t category_index, size_t subcategory_index); + size_t category_index, size_t subcategory_index, RowKind kind = RowKind::Setting); + // The non-structural filament keys of a slot's preset, for a "Full Publish" entry. + std::vector full_keys_for_slot() const; void save_scroll_position(Category& category); void show_outer_page(size_t section_index); void show_inner_page(size_t section_index, int inner_index); void on_outer_tab_changed(wxCommandEvent& event); void on_inner_tab_changed(size_t section_index, wxCommandEvent& event); - void update_all_headers(); bool row_is_visible(const Row& row) const; void apply_visibility(); void bind_tab_events(); diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index daf46c3834..d9d6833a5a 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -752,3 +752,98 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded } } } + +// Filament-publishing v2: a "full publish" entry carries the whole slot's key list. Its vector +// options keep only the author's slot value; the other slots are masked to their defaults so a +// slot-1 full publish does not leak slot 0's data into the file. +SCENARIO("Full-publish entries filter the whole slot and mask the other slots", "[3mf]") { + GIVEN("a full print configuration with two filament slots") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222" }; + // filament_flow_ratio carries a non-empty option default (1.0) of the same type, so the + // mask can restore it on the non-published slot. + full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; + + PublishedMaterialEntry full_entry; + full_entry.slot = 1; + full_entry.full = true; + full_entry.full_keys = { "filament_flow_ratio" }; + + WHEN("filtering with a full entry for slot 1") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { full_entry }); + + THEN("the full key list is present with the author's slot value") { + REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); + REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[1] == 0.98); + } + THEN("the non-published slot is masked to its default") { + REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[0] == 1.0); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + +// Filament-publishing v2: the extended per-entry fields (full dump list, published type and +// colour) travel inside the published_material_keys metadata and round-trip unchanged. +SCENARIO("Published 3MF round-trips the filament-publishing-v2 material metadata", "[3mf]") { + GIVEN("a model carrying extended published material keys metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + const std::string material_keys_json = + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; + + model.model_info = std::make_shared(); + model.model_info->metadata_items["published_material_keys"] = material_keys_json; + + ScopedTemporaryDir backup_dir("orca_pub_mat2"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the extended material metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); + + // The value must parse back with every filament-publishing-v2 field intact. + nlohmann::json entries = nlohmann::json::parse(material_keys_json); + REQUIRE(entries.is_array()); + REQUIRE(entries.size() == 1); + REQUIRE(entries[0]["full"].get() == true); + REQUIRE(entries[0]["full_keys"].is_array()); + REQUIRE(entries[0]["full_keys"].size() == 2); + REQUIRE(entries[0]["publish_type"].get() == true); + REQUIRE(entries[0]["type"] == "PLA"); + REQUIRE(entries[0]["publish_color"].get() == false); + } + release_PlateData_list(dst_plates); + } + } +} diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index fc61083896..f1d2c79f95 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -784,6 +784,409 @@ TEST_CASE("Published 3MF applies material retraction keys onto the receiver's ma CHECK(pub.skipped_keys.empty()); } +// Filament-publishing v2: a "full publish" slot serializes the entire filament of the slot. On +// load the slot is matched positionally against the published (curated, vendor-agnostic) type: +// a matching receiver type leaves the slot untouched, a mismatched type replaces it with the +// first same-type visible preset (applying the author's full values on top), and a slot whose +// type cannot be found in the receiver's library falls back to the author's values in-memory. +TEST_CASE("Published 3MF full-published slots replace or ignore the receiver material by type", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Two author slots; filament_diameter drives the normalized per-slot vector sizes. + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + return config; + }; + // The full dump of slot 0, publishing the whole filament as type "ABS". + auto make_full_abs_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "ABS"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + + SECTION("type match leaves a full-published slot untouched") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA", "My PLA" }; + + PublishedMaterialEntry full = make_full_abs_entry(); + full.publish_type_value = "PLA"; // author requires PLA, receiver slot is PLA + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { full }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver keeps its own material and its own values: the full dump is ignored. + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); + } + + SECTION("type mismatch replaces the slot with the first same-type preset and applies the full dump") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &abs = add_inmemory_preset(bundle.filaments, "My ABS"); + abs.config.opt_string("filament_type", 0u) = "ABS"; + abs.config.opt("filament_retraction_length", true)->values = { 0.3 }; + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_abs_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + CHECK(bundle.filament_presets[0] == "My ABS"); + // The author's slot-0 full values were applied onto the replacement. + CHECK(bundle.filaments.find_preset("My ABS")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + } + + SECTION("no same-type match creates a temporary project-embedded custom preset") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_abs_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // No ABS in the library: a temporary embedded preset is created and selected. + CHECK(bundle.filament_presets[0] == "ABS (Published)"); + Preset *created = bundle.filaments.find_preset("ABS (Published)"); + REQUIRE(created != nullptr); + CHECK(created->is_project_embedded); + CHECK(created->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // The original user preset remains untouched. Re-fetch by name: load_preset's deque + // insertion relocated the presets, so the pre-load `pla` reference points at the + // newly created "ABS (Published)" slot. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + } +} + +// Filament-publishing v2: a partially-published slot can carry a curated type and/or colour. +// The colour is applied regardless of the type match; a type mismatch with no same-type +// replacement keeps the receiver's material and reports the slot's keys as skipped. The +// receiver's slot count grows only as far as the highest slot with published content. +TEST_CASE("Published 3MF partial slots apply colour and gate keys by the published type", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + return config; + }; + + SECTION("matching type applies the keys and the colour") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Type matched: keys applied, colour applied. + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); + } + + SECTION("type mismatch without a replacement keeps the material and skips the keys") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "ABS"; // no ABS in the receiver library + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Colour still applies (type-independent); the material is kept and the keys skipped. + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); + CHECK(pub.material_replacements.empty()); + } + + SECTION("receiver slot count grows to fit the highest published slot and assigns matching type preset") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.8 }; + // The receiver has a single slot; the file carries two, only slot 1 is published. + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.publish_type = true; + entry.publish_type_value = "PETG"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The slot list was grown so author slot 1 has a material, automatically assigning the PETG preset. + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[1] == "My PETG"); + } +} + +// The receiver's slot list grows only as far as the highest author slot that carries published +// content: a 4-filament file whose author published nothing (or only a low slot) must not pull +// filler materials into the receiver's setup, and the receiver never grows to the file's count. +TEST_CASE("Published 3MF grows the receiver's slots only as far as the published slots", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Four author slots (a 4-filament model). + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + auto add_pla_preset = [](PresetBundle &bundle) { + Preset &preset = add_inmemory_preset(bundle.filaments, "My PLA"); + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt("filament_colour", true)->values = { "#123456" }; + return &preset; + }; + auto make_color_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.publish_color = true; + entry.color = "#ABCDEF"; + return entry; + }; + + // A file whose author published nothing for any slot: the receiver's setup is untouched. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; // no material entries at all + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#123456" }); + CHECK(pub.skipped_keys.empty()); + } + + // Only slot 0 published: a single-slot receiver keeps its single slot; the file's other + // three slots pull nothing in. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + } + + // Slot 3 published: the receiver grows to 4 so the published slot exists; the filler is + // the receiver's own first visible material. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + const std::string filler = bundle.filaments.first_visible().name; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(3) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + CHECK(bundle.filament_presets[3] == filler); + } + + // Slots 0 and 2 published: the receiver grows to 3, never to the file's 4. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0), make_color_entry(2) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + } +} + +// The GUI displays the edited preset, a snapshot of the selected collection preset taken at +// selection time. The published overlay modifies the collection presets in place, so the load +// must re-select the first slot's filament (mirroring a normal project load) for the applied +// colour/type/keys - and slot replacements - to surface in the GUI. +TEST_CASE("Published 3MF refreshes the edited preset so the applied material values surface", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + SECTION("the edited preset carries the applied colour and keys") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + // Mirror the GUI: the displayed preset is the collection's edited preset. + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + const Preset &edited = bundle.filaments.get_edited_preset(); + CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("a slot replacement is reflected in the edited preset") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &abs = add_inmemory_preset(bundle.filaments, "My ABS"); + abs.config.opt_string("filament_type", 0u) = "ABS"; + abs.config.opt("filament_retraction_length", true)->values = { 0.3 }; + bundle.filament_presets = { "My PLA" }; + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + PublishedMaterialEntry entry = make_entry(); + entry.publish_type_value = "ABS"; // mismatch: replaced by the library's ABS + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets[0] == "My ABS"); + // The edited preset now displays the replacement with the author's values on top. + const Preset &edited = bundle.filaments.get_edited_preset(); + CHECK(edited.name == "My ABS"); + CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + } +} + // Material-qualified keys whose receiver-side material match is missing or ambiguous must be // reported as skipped (material-qualified) and never applied; a single unqualified type // fallback still applies. From b82d4f3af8ab729a72912b8ddd78f52718fbcec4 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 18 Aug 2026 15:11:00 +0800 Subject: [PATCH 028/208] Fix issues with filament import when receiver has fewer filament slots than the author's 3MF format --- src/libslic3r/PresetBundle.cpp | 150 ++++++++++++++++-- .../libslic3r/test_preset_bundle_loading.cpp | 78 ++++++++- 2 files changed, 217 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index c58e6c30e7..fd3d4d24b6 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5047,15 +5047,30 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (has_new_semantics) { // Defensive cap: never exceed the file's own filament count. target_slots = std::min(target_slots, num_filaments); + // Slots that carry published content (full/type/colour) must reference a stored + // preset that no other slot shares: the overlay mutates stored presets in place + // (colour and keys), so a shared preset would leak one slot's published values + // into every slot that references it. + std::set published_slots; + for (const PublishedMaterialEntry &entry : published_config->material_keys) + if ((entry.full || entry.publish_type || entry.publish_color) && entry.slot >= 0) + published_slots.insert(entry.slot); + std::set used_preset_names(this->filament_presets.begin(), this->filament_presets.end()); + // Mirror first_visible_idx()'s start index so suppressed default presets are + // never picked as a slot material. + const size_t first_candidate = this->filaments.is_default_suppressed() ? this->filaments.num_default_presets() : 0; while (this->filament_presets.size() < target_slots) { const size_t new_slot_idx = this->filament_presets.size(); std::string initial_preset; - // Proactively assign matching candidate preset if this slot carries a published type - for (const PublishedMaterialEntry &entry : published_config->material_keys) { - if (entry.slot == static_cast(new_slot_idx) && entry.publish_type && !entry.publish_type_value.empty()) { + if (published_slots.count(static_cast(new_slot_idx)) != 0) { + // Proactively assign a distinct matching candidate preset if this slot + // carries a published type... + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + if (entry.slot != static_cast(new_slot_idx) || !entry.publish_type || entry.publish_type_value.empty()) + continue; for (size_t i = 0; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible) + if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) continue; if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) == entry.publish_type_value) { initial_preset = candidate.name; @@ -5064,11 +5079,114 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } break; } + // ...otherwise any visible preset not already used by another slot. + if (initial_preset.empty()) { + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) + continue; + initial_preset = candidate.name; + break; + } + } } if (initial_preset.empty()) - initial_preset = this->filaments.first_visible().name; + // Unpublished filler slot, or every visible preset is already used: repeat + // the receiver's last preset, mirroring the "Add one filament" behaviour + // (PresetBundle::set_num_filaments). + initial_preset = this->filament_presets.empty() ? this->filaments.first_visible().name + : this->filament_presets.back(); this->filament_presets.emplace_back(initial_preset); + used_preset_names.insert(initial_preset); } + // Slots that were grown before this block (e.g. by update_multi_material_filament_presets + // matching the extruder count) may still alias another slot; re-point them at a + // distinct preset. Slot 0, the receiver's own material, is never re-assigned. + for (size_t slot = 1; slot < this->filament_presets.size(); ++slot) { + if (published_slots.count(static_cast(slot)) == 0) + continue; + bool shared = false; + for (size_t other = 0; other < this->filament_presets.size(); ++other) + if (other != slot && this->filament_presets[other] == this->filament_presets[slot]) { + shared = true; + break; + } + if (!shared) + continue; + std::string replacement; + for (const PublishedMaterialEntry &entry : published_config->material_keys) { + if (entry.slot != static_cast(slot) || !entry.publish_type || entry.publish_type_value.empty()) + continue; + for (size_t i = 0; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) + continue; + if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) == entry.publish_type_value) { + replacement = candidate.name; + break; + } + } + break; + } + if (replacement.empty()) { + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) + continue; + replacement = candidate.name; + break; + } + } + if (replacement.empty()) + continue; // every visible preset is used: aliasing is unavoidable + used_preset_names.erase(this->filament_presets[slot]); + this->filament_presets[slot] = replacement; + used_preset_names.insert(replacement); + } + // Mirror set_num_filaments' project_config vector handling ("Add one filament"): + // resize the per-slot colour/type/map vectors to the grown slot count and seed the + // new entries so the slots render with colours instead of blank chips. Only the + // new entries are seeded; the receiver's existing values are left untouched. + ConfigOptionStrings *proj_colour = this->project_config.opt("filament_colour"); + ConfigOptionStrings *proj_multi_colour = this->project_config.opt("filament_multi_colour"); + ConfigOptionStrings *proj_colour_type = this->project_config.opt("filament_colour_type"); + ConfigOptionInts *proj_map = this->project_config.opt("filament_map"); + ConfigOptionInts *proj_nozzle_map = this->project_config.opt("filament_nozzle_map"); + ConfigOptionInts *proj_volume_map = this->project_config.opt("filament_volume_map"); + const size_t old_colour_count = (proj_colour != nullptr) ? proj_colour->values.size() : 0; + if (proj_colour) proj_colour->resize(target_slots); + if (proj_multi_colour) proj_multi_colour->values.resize(target_slots); + if (proj_colour_type) proj_colour_type->values.resize(target_slots); + if (proj_map) proj_map->values.resize(target_slots, 1); + if (proj_nozzle_map) proj_nozzle_map->values.resize(target_slots, 0); + if (proj_volume_map) proj_volume_map->values.resize(target_slots, static_cast(NozzleVolumeType::nvtStandard)); + this->ams_multi_color_filment.resize(target_slots); + for (size_t slot = old_colour_count; slot < target_slots; ++slot) { + std::string seed; + for (const PublishedMaterialEntry &entry : published_config->material_keys) + if (entry.slot == static_cast(slot) && entry.publish_color && !entry.color.empty()) { + seed = entry.color; + break; + } + if (seed.empty()) { + if (const Preset *preset = this->filaments.find_preset(this->filament_presets[slot], false)) { + const ConfigOptionStrings *colours = preset->config.opt("filament_colour"); + if (colours != nullptr && !colours->values.empty()) + seed = colours->values.front(); + } + if (seed.empty()) + seed = "#F2754E"; // filament_colour default + } + if (proj_colour && slot < proj_colour->values.size()) + proj_colour->values[slot] = seed; + if (proj_multi_colour && slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = seed; + if (proj_colour_type && slot < proj_colour_type->values.size()) + proj_colour_type->values[slot] = "1"; // default colour type + } + // Rebuild the flush volumes for the grown slot count (set_num_filaments does the + // same; without it the matrix would stay at the receiver's old size). + this->update_multi_material_filament_presets(); auto apply_slot_keys = [&](Preset &preset, const std::vector &slot_keys, int author_slot, const std::string &material_label) { @@ -5124,17 +5242,31 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool apply_slot = false; } else { // Type mismatch: replace the slot with the first visible same-type - // filament from the receiver's library. - std::string replacement; + // filament from the receiver's library, preferring one that no other + // slot references (a shared stored preset would leak this slot's + // published values into that slot). + std::string replacement, first_same_type; for (size_t i = 0; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); if (!candidate.is_visible) continue; if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) != entry.publish_type_value) continue; - replacement = candidate.name; - break; + if (first_same_type.empty()) + first_same_type = candidate.name; + bool used_elsewhere = false; + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (s != slot && this->filament_presets[s] == candidate.name) { + used_elsewhere = true; + break; + } + if (!used_elsewhere) { + replacement = candidate.name; + break; + } } + if (replacement.empty()) + replacement = first_same_type; if (!replacement.empty()) { const std::string old_name = recv->name; this->filament_presets[slot] = replacement; diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index f1d2c79f95..8716af417d 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1069,8 +1069,10 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); } - // Slot 3 published: the receiver grows to 4 so the published slot exists; the filler is - // the receiver's own first visible material. + // Slot 3 published: the receiver grows to 4 so the published slot exists. The unpublished + // filler slots repeat the receiver's last preset ("Add one filament" behaviour); the + // published slot gets a visible preset not used by another slot (with a single-preset + // library it falls back to the receiver's last preset, aliasing being unavoidable). { PresetBundle bundle; add_pla_preset(bundle); @@ -1085,7 +1087,18 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 4); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "My PLA"); CHECK(bundle.filament_presets[3] == filler); + // The project-level per-slot vectors were grown and seeded like "Add one filament": + // fillers take their preset's colour, the published slot its published colour. + CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); + CHECK(bundle.project_config.opt("filament_colour")->values[3] == "#ABCDEF"); + CHECK(bundle.project_config.opt("filament_multi_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour_type")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); + CHECK(bundle.project_config.opt("flush_volumes_matrix")->values.size() == 16); } // Slots 0 and 2 published: the receiver grows to 3, never to the file's 4. @@ -1102,9 +1115,70 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); } } +// The published overlay mutates stored filament presets in place per slot, so a slot carrying +// published content must never share its stored preset with another slot: its colour/keys +// would leak into the sibling slot - and, with "repeat the last preset" growth, into the +// receiver's own first slot. Regression for the slot-aliasing hazard. +TEST_CASE("Published 3MF gives grown published slots a distinct preset so values never leak", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + // The receiver has one slot of its own material plus one more preset in the library; the + // author publishes only slot 4 (Red). With naive repeat-last growth the new slot would + // reference the receiver's own preset and the published red would recolor it; the grown + // slot must point at a distinct preset. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PLA"); + other.config.opt_string("filament_type", 0u) = "PLA"; + other.config.opt("filament_colour", true)->values = { "#654321" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 3; + entry.publish_color = true; + entry.color = "#ABCDEF"; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + // Unpublished filler slots repeat the receiver's last preset ("Add one filament"). + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "My PLA"); + // The published slot references the unused library preset, not the receiver's own... + CHECK(bundle.filament_presets[3] == "Other PLA"); + // ...so the published colour landed there and never recoloured the receiver's material. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); + CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // The project-level colours are sized and seeded for every grown slot. + CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); + CHECK(bundle.project_config.opt("filament_colour")->values[3] == "#ABCDEF"); + CHECK(bundle.project_config.opt("filament_multi_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour_type")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); +} + // The GUI displays the edited preset, a snapshot of the selected collection preset taken at // selection time. The published overlay modifies the collection presets in place, so the load // must re-select the first slot's filament (mirroring a normal project load) for the applied From 36a8811cc081cae7f9b7ba267c1eafb696b0fefc Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 18 Aug 2026 16:29:27 +0800 Subject: [PATCH 029/208] Change label to "Publish 3MF..." --- localization/i18n/OrcaSlicer.pot | 179 ++++++++++---- localization/i18n/ca/OrcaSlicer_ca.po | 197 ++++++++++++---- localization/i18n/cs/OrcaSlicer_cs.po | 201 ++++++++++++---- localization/i18n/de/OrcaSlicer_de.po | 197 ++++++++++++---- localization/i18n/en/OrcaSlicer_en.po | 179 ++++++++++---- localization/i18n/es/OrcaSlicer_es.po | 197 ++++++++++++---- localization/i18n/eu/OrcaSlicer_eu.po | 197 ++++++++++++---- localization/i18n/fr/OrcaSlicer_fr.po | 197 ++++++++++++---- localization/i18n/hu/OrcaSlicer_hu.po | 199 ++++++++++++---- localization/i18n/it/OrcaSlicer_it.po | 197 ++++++++++++---- localization/i18n/ja/OrcaSlicer_ja.po | 199 ++++++++++++---- localization/i18n/ko/OrcaSlicer_ko.po | 203 ++++++++++++---- localization/i18n/lt/OrcaSlicer_lt.po | 201 ++++++++++++---- localization/i18n/nl/OrcaSlicer_nl.po | 201 ++++++++++++---- localization/i18n/pl/OrcaSlicer_pl.po | 203 ++++++++++++---- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 203 ++++++++++++---- localization/i18n/ru/OrcaSlicer_ru.po | 247 +++++++++++++++----- localization/i18n/sv/OrcaSlicer_sv.po | 207 ++++++++++++---- localization/i18n/th/OrcaSlicer_th.po | 197 ++++++++++++---- localization/i18n/tr/OrcaSlicer_tr.po | 205 ++++++++++++---- localization/i18n/uk/OrcaSlicer_uk.po | 199 ++++++++++++---- localization/i18n/vi/OrcaSlicer_vi.po | 203 ++++++++++++---- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 201 ++++++++++++---- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 197 ++++++++++++---- src/slic3r/GUI/PublishSettingsDialog.cpp | 2 +- 25 files changed, 3733 insertions(+), 1075 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 88e49a85fc..c55cdb7336 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -4452,6 +4452,20 @@ msgstr "" msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "" +#, possible-c-format, possible-boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4533,6 +4547,12 @@ msgid "" "No - Disable Arachne Wall Generator and set [Displacement] mode of the Fuzzy Skin" msgstr "" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" @@ -4545,6 +4565,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -4784,6 +4807,12 @@ msgstr "" msgid "Calibration error" msgstr "" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + msgid "Network unavailable" msgstr "" @@ -4987,9 +5016,6 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" @@ -5615,7 +5641,7 @@ msgstr "" msgid "Size:" msgstr "" -#, possible-c-format, possible-boost-format +#, possible-boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "" @@ -5790,6 +5816,9 @@ msgstr "" msgid "Project" msgstr "" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "" @@ -5916,6 +5945,12 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" @@ -7634,6 +7669,12 @@ msgstr "" msgid "Customized Preset" msgstr "" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "" @@ -7780,19 +7821,19 @@ msgstr "" msgid "Replaced with 3D files from directory:\n" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "✖ Skipped %s: same file.\n" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "✔ Replaced %s.\n" msgstr "" @@ -7994,6 +8035,14 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -8797,6 +8846,14 @@ msgstr "" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "" @@ -9024,9 +9081,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9042,6 +9096,21 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, possible-c-format, possible-boost-format msgid "Save %s as" msgstr "" @@ -9052,9 +9121,21 @@ msgstr "" msgid "Preset Inside Project" msgstr "" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "" @@ -9732,20 +9813,6 @@ msgstr "" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "" - -msgid "Adjust to the set range automatically?\n" -msgstr "" - -msgid "Adjust" -msgstr "" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "" @@ -9931,6 +9998,9 @@ msgstr "" msgid "Setting Overrides" msgstr "" +msgid "Retraction when switching material" +msgstr "" + msgid "Basic information" msgstr "" @@ -10057,6 +10127,12 @@ msgstr "" msgid "Printable space" msgstr "" +msgid "Printer Agent" +msgstr "" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, possible-boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10179,9 +10255,6 @@ msgstr "" msgid "Z-Hop" msgstr "" -msgid "Retraction when switching material" -msgstr "" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11445,6 +11518,9 @@ msgstr "" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr "" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "" @@ -11740,9 +11816,6 @@ msgstr "" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "" -msgid "Printer Agent" -msgstr "" - msgid "Select the network agent implementation for printer communication." msgstr "" @@ -12279,9 +12352,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "" -msgid "Brim width" -msgstr "" - msgid "This is the distance from the model to the outermost brim line." msgstr "" @@ -12347,6 +12417,12 @@ msgid "" "0 to deactivate." msgstr "" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "" @@ -13359,6 +13435,12 @@ msgstr "" msgid "Gyroid" msgstr "" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "" @@ -13839,6 +13921,12 @@ msgstr "" msgid "Klipper" msgstr "" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "" @@ -14800,6 +14888,12 @@ msgstr "" msgid "Retraction distance when extruder change" msgstr "" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "" @@ -14893,6 +14987,9 @@ msgstr "" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "" @@ -15278,6 +15375,12 @@ msgstr "" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "" @@ -18253,9 +18356,6 @@ msgstr "" msgid "Print Host upload" msgstr "" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "" - msgid "Select a Flashforge printer" msgstr "" @@ -19087,9 +19187,6 @@ msgstr "" msgid "User canceled." msgstr "" -msgid "Head diameter" -msgstr "" - msgid "Max angle" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 79a9d82df4..4eb07b2635 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -4828,6 +4828,20 @@ msgstr "La temperatura actual de la cambra és superior a la temperatura segura msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "La temperatura mínima de la cambra (%d℃) és superior a la temperatura objectiu de la cambra (%d℃). El valor mínim és el llindar a partir del qual comença la impressió mentre la cambra continua escalfant-se cap a l'objectiu, de manera que no l'hauria de superar. Es limitarà al valor objectiu." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Ajustar" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4948,6 +4962,12 @@ msgstr "" "Sí - Activa el generador de parets Arachne\n" "No - Desactiva el generador de parets Arachne i estableix el mode [Desplaçament] de la pell difusa" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Ample de la Vora d'Adherència" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "El mode espiral només funciona quan els bucles de paret són 1, el suport està desactivat, la detecció d'acumulació per sondeig està desactivada, les capes de la coberta superior són 0, la densitat de farciment dispers és 0 i el tipus de timelapse és tradicional." @@ -4963,6 +4983,9 @@ msgstr "" "Sí: canviar aquesta configuració i activar el mode d'espiral automàticament\n" "No - Renunciar a utilitzar el mode espiral aquesta vegada" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimint" @@ -5202,6 +5225,12 @@ msgstr "No s'ha pogut generar el gcode cali" msgid "Calibration error" msgstr "Error de calibratge" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Xarxa no disponible" @@ -5416,9 +5445,6 @@ msgstr "Patró no vàlid. Utilitzeu N, N#K, o una llista separada per comes amb msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format no vàlid. Format vectorial esperat: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agents del sistema" @@ -6067,7 +6093,7 @@ msgstr "Volum:" msgid "Size:" msgstr "Mida:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "S'han trobat conflictes de rutes gcode a la capa %d, Z = %.2lfmm. Si us plau, separeu els objectes conflictius més lluny ( %s <-> %s )." @@ -6248,6 +6274,9 @@ msgstr "Multidispositiu" msgid "Project" msgstr "Projecte" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Sí" @@ -6377,6 +6406,12 @@ msgstr "Desa el projecte com a" msgid "Save current project as" msgstr "Desar el projecte actual com" +msgid "Publish" +msgstr "Publicar" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF STL/STEP/SVG/OBJ/AMF" @@ -8195,6 +8230,12 @@ msgstr "Confirmeu que els Codis-G d'aquests perfils són segurs per evitar danys msgid "Customized Preset" msgstr "Perfil personalitzat" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF8!" @@ -8361,19 +8402,19 @@ msgstr "No s'ha seleccionat el directori per a la substitució" msgid "Replaced with 3D files from directory:\n" msgstr "Substituït amb fitxers 3D del directori:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Omès %s: mateix fitxer.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Omès %s: el fitxer no existeix.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Omès %s: la substitució ha fallat.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Substituït %s.\n" @@ -8583,6 +8624,14 @@ msgstr "Desa el fitxer Laminat com a:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El fitxer %s s'ha enviat a l'emmagatzematge de la impressora i es pot visualitzar a la impressora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipus de broquet no està establert. Establiu el broquet i torneu-ho a provar." @@ -9506,6 +9555,14 @@ msgstr "Mostrar els perfils no compatibles" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostra els perfils incompatibles o no compatibles a les llistes desplegables d'impressora i de filament. Aquests perfils no es poden seleccionar." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Funcions experimentals" @@ -9748,9 +9805,6 @@ msgstr "Anar a la pàgina web de publicació de models" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparació pot trigar uns quants minuts. Si us plau, sigui pacient." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicació ha estat cancel·lada" @@ -9766,6 +9820,21 @@ msgstr "Carregant dades" msgid "Jump to webpage" msgstr "Anar a la pàgina web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Desar %s com a" @@ -9776,9 +9845,21 @@ msgstr "Perfil d'usuari" msgid "Preset Inside Project" msgstr "Perfil intern del Projecte" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Desvincula del pare" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "El nom no està disponible." @@ -10521,22 +10602,6 @@ msgstr "Estàs segur que vols activar aquesta opció?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Els patrons de farciment estan dissenyats normalment per gestionar la rotació automàticament per garantir una impressió correcta i aconseguir els efectes desitjats (p. ex., Gyroid, Cúbic). Rotar el patró de farciment dispers actual pot portar a un suport insuficient. Procediu amb precaució i comproveu minuciosament qualsevol problema d'impressió potencial. Esteu segur que voleu activar aquesta opció?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"L'alçada de la capa és massa petita.\n" -"Es posarà a min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "L'alçada de la capa supera el límit a Configuració de la Impressora -> Extrusora -> Límits d'alçada de la capa, això pot causar problemes de qualitat d'impressió." - -msgid "Adjust to the set range automatically?\n" -msgstr "Voleu ajustar el rang automàticament?\n" - -msgid "Adjust" -msgstr "Ajustar" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Característica experimental: Retreure i tallar el filament a major distància durant els canvis de filaments per minimitzar el flux. Tot i que pot reduir notablement el flux, també pot elevar el risc d'esclops de broquets o altres complicacions d'impressió." @@ -10735,6 +10800,9 @@ msgstr "Trobades paraules clau reservades" msgid "Setting Overrides" msgstr "Anul·lacions de configuració" +msgid "Retraction when switching material" +msgstr "Retracció en canviar de material" + msgid "Basic information" msgstr "Informació bàsica" @@ -10867,6 +10935,12 @@ msgstr "Perfils de processos compatibles" msgid "Printable space" msgstr "Espai imprimible" +msgid "Printer Agent" +msgstr "Agent de la impressora" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Seleccioneu la implementació de l'agent de xarxa per a la comunicació amb la impressora. Els agents disponibles es registren a l'inici." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10997,9 +11071,6 @@ msgstr "Límits d'alçada de capa" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Retracció en canviar de material" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12380,6 +12451,9 @@ msgstr " està massa a prop de la zona d'exclusió, i es provocaran col·lisions msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " és massa a prop de l'àrea de detecció d'acumulació i es causaran col·lisions.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Les temperatures de broquet seleccionades són incompatibles. La temperatura de broquet de cada filament ha d'estar dins del rang de temperatura de broquet recomanat dels altres filaments. Altrament, es pot produir una obturació del broquet o danys a la impressora." @@ -12714,9 +12788,6 @@ msgstr "Utilitzar 3MF en lloc de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activeu-ho si la impressora accepta un fitxer 3MF com a treball d'impressió. Quan està activat, Orca Slicer envia el fitxer laminat com a .gcode.3mf, en lloc d'un fitxer .gcode simple." -msgid "Printer Agent" -msgstr "Agent de la impressora" - msgid "Select the network agent implementation for printer communication." msgstr "Seleccioneu la implementació de l'agent de xarxa per a la comunicació amb la impressora." @@ -13402,9 +13473,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Velocitat dels ponts interns. Si el valor s'expressa com un percentatge, es calcularà en funció de la velocitat del pont (bridge_speed). El valor per defecte és del 150%." -msgid "Brim width" -msgstr "Ample de la Vora d'Adherència" - msgid "This is the distance from the model to the outermost brim line." msgstr "Distància del model a la línia de la Vora d'Adherència més exterior" @@ -13488,6 +13556,12 @@ msgstr "" "La geometria es simplificarà abans de detectar angles pronunciats. Aquest paràmetre indica la longitud mínima de la desviació per a la simplificació.\n" "0 per desactivar" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "màquina compatible ascendent" @@ -14679,6 +14753,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Acceleració del farciment superficial superior. L'ús d'un valor inferior pot millorar la qualitat de la superfície superior" @@ -15232,6 +15312,12 @@ msgstr "Amb quin tipus de Codi-G és compatible la impressora." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Impressora modificada de pellets" @@ -16321,6 +16407,12 @@ msgstr "Retracció llarga al canviar d'extrusor" msgid "Retraction distance when extruder change" msgstr "Distància de retracció al canviar d'extrusor" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Alçada Z-hop" @@ -16419,6 +16511,9 @@ msgstr "Longitud addicional en reiniciar" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Quan la retracció es compensa després d'un desplaçament, l'extrusor introduirà una quantitat addicional de filament. Aquest ajustament rarament es necessita." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Quan la retracció es compensa després d'un canvi d'eina, l'extrusor introduirà una quantitat addicional de filament." @@ -16835,6 +16930,12 @@ msgstr "Canvi d'eina a la Torre de Purga" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Força el capçal a desplaçar-se a la Torre de Purga abans d'emetre l'ordre de canvi d'eina (Tx). Només és rellevant per a impressores multiextrusor (multicapçal) que utilitzen una Torre de Purga de tipus 2. Per defecte, Orca omet aquest desplaçament en màquines multicapçal perquè el firmware gestiona el canvi de capçal, cosa que pot fer que l'ordre Tx s'emeti sobre la peça impresa. Activeu aquesta opció si voleu que el canvi d'eina s'emeti sempre sobre la Torre de Purga." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Sense capes poc denses( beta )" @@ -20121,9 +20222,6 @@ msgstr "Impressora Física" msgid "Print Host upload" msgstr "Pujada al amfitrió( host ) d'impressió" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Seleccioneu la implementació de l'agent de xarxa per a la comunicació amb la impressora. Els agents disponibles es registren a l'inici." - # AI Translated msgid "Select a Flashforge printer" msgstr "Seleccioneu una impressora Flashforge" @@ -21066,9 +21164,6 @@ msgstr "Alguna cosa inesperada ha passat en intentar iniciar sessió, torneu-ho msgid "User canceled." msgstr "Usuari cancel·lat." -msgid "Head diameter" -msgstr "Diàmetre del cap" - msgid "Max angle" msgstr "Angle màxim" @@ -21887,6 +21982,22 @@ msgstr "" "Evitar la deformació( warping )\n" "Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "L'alçada de la capa és massa petita.\n" +#~ "Es posarà a min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "L'alçada de la capa supera el límit a Configuració de la Impressora -> Extrusora -> Límits d'alçada de la capa, això pot causar problemes de qualitat d'impressió." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Voleu ajustar el rang automàticament?\n" + +#~ msgid "Head diameter" +#~ msgstr "Diàmetre del cap" + #~ msgid "Print order within a single layer." #~ msgstr "Ordre d'impressió dins d'una sola capa" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index e21fd3086c..95259e0895 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -4786,6 +4786,20 @@ msgstr "Aktuální teplota komory je vyšší než bezpečná teplota materiálu msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Minimální teplota komory (%d℃) je vyšší než cílová teplota komory (%d℃). Minimální hodnota je práh, při kterém tisk začíná, zatímco se komora dále ohřívá k cílové teplotě, takže by ji neměla překročit. Bude omezena na cílovou hodnotu." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Upravit" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4906,6 +4920,12 @@ msgstr "" "Ano – povolit Arachne Wall Generator\n" "Ne – zakázat Arachne Wall Generator a nastavit režim [Displacement] pro Fuzzy Skin" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Šířka límce" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Spirálový režim funguje pouze tehdy, když je počet smyček stěny 1, podpěry jsou vypnuté, detekce usazenin sondováním je vypnutá, počet horních plných vrstev je 0, hustota řídké výplně je 0 a typ časosběru je tradiční." @@ -4921,6 +4941,10 @@ msgstr "" "Ano – změnit tato nastavení a automaticky povolit spirálový režim\n" "Ne – tentokrát nepoužít spirálový režim" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Tisk" @@ -5160,6 +5184,12 @@ msgstr "Nepodařilo se vygenerovat kalibrační G-code." msgid "Calibration error" msgstr "Chyba kalibrace" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Síť není dostupná" @@ -5372,10 +5402,6 @@ msgstr "Neplatný vzor. Použijte N, N#K nebo seznam oddělený čárkami s voli msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Neplatný formát. Očekávaný vektorový formát: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Systémoví agenti" @@ -6029,7 +6055,7 @@ msgstr "Objem:" msgid "Size:" msgstr "Velikost:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Byly nalezeny konflikty drah G-kódu ve vrstvě %d, Z = %.2lf mm. Oddělte prosím konfliktní objekty více od sebe (%s <-> %s)." @@ -6210,6 +6236,9 @@ msgstr "Více zařízení" msgid "Project" msgstr "Projekt" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Ano" @@ -6338,6 +6367,12 @@ msgstr "Uložit projekt jako" msgid "Save current project as" msgstr "Uložit aktuální projekt jako" +msgid "Publish" +msgstr "Publikovat" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importovat 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8157,6 +8192,12 @@ msgstr "Potvrďte prosím, že je G-code v těchto předvolbách bezpečný, aby msgid "Customized Preset" msgstr "Přizpůsobená předvolba" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Názvy komponent v souboru STEP nejsou ve formátu UTF-8!" @@ -8320,19 +8361,19 @@ msgstr "Nebyla vybrána složka pro nahrazení" msgid "Replaced with 3D files from directory:\n" msgstr "Nahrazeno 3D soubory ze složky:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Přeskočeno %s: stejný soubor.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Přeskočeno %s: soubor neexistuje.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Přeskočeno %s: nahrazení se nezdařilo.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Nahrazeno %s.\n" @@ -8543,6 +8584,14 @@ msgstr "Uložit rozřezaný soubor jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Soubor %s byl odeslán do úložiště tiskárny a lze jej zobrazit na tiskárně." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Typ trysky není nastaven. Nastavte prosím trysku a zkuste to znovu." @@ -9457,6 +9506,14 @@ msgstr "Zobrazit nepodporované předvolby" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Zobrazovat nekompatibilní/nepodporované předvolby v rozevíracích seznamech tiskáren a filamentů. Tyto předvolby nelze vybrat." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Experimentální funkce" @@ -9696,9 +9753,6 @@ msgstr "Přejít na webovou stránku publikace modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Poznámka: Příprava může trvat několik minut. Buďte prosím trpěliví." -msgid "Publish" -msgstr "Publikovat" - msgid "Publish was canceled" msgstr "Publikování bylo zrušeno" @@ -9714,6 +9768,21 @@ msgstr "Nahrávání dat" msgid "Jump to webpage" msgstr "Přejít na webovou stránku" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Uložit %s jako" @@ -9724,10 +9793,22 @@ msgstr "Uživatelská předvolba" msgid "Preset Inside Project" msgstr "Předvolba v projektu" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Oddělit od nadřazeného" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Název není k dispozici." @@ -10469,22 +10550,6 @@ msgstr "Opravdu chcete tuto možnost povolit?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Vzory výplně jsou obvykle navrženy tak, aby automaticky pracovaly s rotací a zajistily správný tisk i zamýšlený efekt (např. Gyroid, Cubic). Otočení aktuální řídké výplně může vést k nedostatečné opoře. Postupujte opatrně a pečlivě zkontrolujte možné problémy při tisku. Opravdu chcete tuto možnost povolit?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Výška vrstvy je příliš malá.\n" -"Bude nastavena na min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Výška vrstvy přesahuje limit v Nastavení tiskárny -> Extruder -> Omezení výšky vrstvy, což může způsobit problémy s kvalitou tisku." - -msgid "Adjust to the set range automatically?\n" -msgstr "Automaticky upravit do nastaveného rozsahu?\n" - -msgid "Adjust" -msgstr "Upravit" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Experimentální funkce: Stažení a odstřižení filamentu na větší vzdálenost během výměny filamentu pro minimalizaci purge. Ačkoliv to může výrazně snížit purge, může to také zvýšit riziko ucpání trysky nebo jiných komplikací při tisku." @@ -10684,6 +10749,9 @@ msgstr "Byla nalezena rezervovaná klíčová slova" msgid "Setting Overrides" msgstr "Přepisování nastavení" +msgid "Retraction when switching material" +msgstr "Retrakce při změně materiálu" + msgid "Basic information" msgstr "Základní informace" @@ -10816,6 +10884,13 @@ msgstr "Kompatibilní procesní profily" msgid "Printable space" msgstr "Tisknutelný prostor" +# AI Translated +msgid "Printer Agent" +msgstr "Agent tiskárny" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Vyberte implementaci síťového agenta pro komunikaci s tiskárnou. Dostupní agenti jsou registrováni při spuštění." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10943,9 +11018,6 @@ msgstr "Omezení výšky vrstvy" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Retrakce při změně materiálu" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12363,6 +12435,9 @@ msgstr " je příliš blízko oblasti vyloučení a může způsobit kolize.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " je příliš blízko oblasti detekce shlukování a dojde ke kolizi.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Vybrané teploty trysky nejsou kompatibilní. Teplota trysky každého filamentu musí spadat do doporučeného rozsahu teplot ostatních filamentů. Jinak může dojít k ucpání trysky nebo poškození tiskárny." @@ -12696,10 +12771,6 @@ msgstr "Použít 3MF místo G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Zapněte, pokud tiskárna přijímá jako tiskovou úlohu soubor 3MF. Je-li zapnuto, odešle Orca Slicer slicovaný soubor jako .gcode.3mf místo prostého souboru .gcode." -# AI Translated -msgid "Printer Agent" -msgstr "Agent tiskárny" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Vyberte implementaci síťového agenta pro komunikaci s tiskárnou." @@ -13387,9 +13458,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Rychlost vnitřních mostů. Pokud je hodnota zadána v procentech, vypočítá se podle bridge_speed. Výchozí hodnota je 150 %." -msgid "Brim width" -msgstr "Šířka límce" - msgid "This is the distance from the model to the outermost brim line." msgstr "Vzdálenost od modelu k nejvzdálenější brim linii." @@ -13470,6 +13538,12 @@ msgstr "" "Geometrie bude decimována před detekcí ostrých úhlů. Tento parametr určuje minimální délku odchylky pro decimaci.\n" "0 pro deaktivaci." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "stroj zpětně kompatibilní" @@ -14646,6 +14720,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Akcelerace výplně horní plochy. Použití nižší hodnoty může zlepšit kvalitu horní plochy." @@ -15198,6 +15278,12 @@ msgstr "Jaký typ G-code je s tiskárnou kompatibilní." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Tiskárna na pelety" @@ -16265,6 +16351,12 @@ msgstr "Dlouhá retrakce při změně extruderu" msgid "Retraction distance when extruder change" msgstr "Délka retrakce při změně extruderu" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Výška Z-hopu" @@ -16362,6 +16454,9 @@ msgstr "Dodatečná délka při restartu" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Při kompenzaci retrakce po pohybu přesunu extruder posune toto přídavné množství filamentu. Toto nastavení je potřeba jen zřídka." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Při kompenzaci retrakce po výměně nástroje extruder posune toto přídavné množství filamentu." @@ -16780,6 +16875,12 @@ msgstr "Výměna nástroje na věži na očištění trysky" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Vynutí přejezd tiskové hlavy k věži na očištění trysky před vydáním příkazu k výměně nástroje (Tx). Týká se pouze tiskáren s více extrudery (více tiskovými hlavami), které používají věž na očištění trysky typu 2. Ve výchozím nastavení Orca na strojích s více tiskovými hlavami tento přejezd vynechává, protože výměnu hlavy řeší firmware, což může vést k vydání příkazu Tx nad tištěným dílem. Zapněte tuto volbu, chcete-li, aby byla výměna nástroje vždy vydána nad věží na očištění trysky." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Žádné řídké vrstvy (beta)" @@ -20043,9 +20144,6 @@ msgstr "Fyzická tiskárna" msgid "Print Host upload" msgstr "Nahrání na tiskový server" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Vyberte implementaci síťového agenta pro komunikaci s tiskárnou. Dostupní agenti jsou registrováni při spuštění." - # AI Translated msgid "Select a Flashforge printer" msgstr "Vyberte tiskárnu Flashforge" @@ -21002,9 +21100,6 @@ msgstr "Při pokusu o přihlášení došlo k neočekávané chybě, zkuste to p msgid "User canceled." msgstr "Zrušeno uživatelem." -msgid "Head diameter" -msgstr "Průměr hlavy" - msgid "Max angle" msgstr "Maximální úhel" @@ -21873,6 +21968,22 @@ msgstr "" "Zamezte kroucení\n" "Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Výška vrstvy je příliš malá.\n" +#~ "Bude nastavena na min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Výška vrstvy přesahuje limit v Nastavení tiskárny -> Extruder -> Omezení výšky vrstvy, což může způsobit problémy s kvalitou tisku." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Automaticky upravit do nastaveného rozsahu?\n" + +#~ msgid "Head diameter" +#~ msgstr "Průměr hlavy" + #~ msgid "Print order within a single layer." #~ msgstr "Pořadí tisku v rámci jedné vrstvy." diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 50384598e3..0a86439cab 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -4692,6 +4692,20 @@ msgstr "Die aktuelle Kammer-Temperatur ist höher als die sichere Temperatur des msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Die minimale Druckraumtemperatur (%d℃) ist höher als die Ziel-Druckraumtemperatur (%d℃). Der Minimalwert ist der Schwellenwert, bei dem der Druck beginnt, während der Druckraum weiter auf die Zieltemperatur heizt; er sollte diese daher nicht überschreiten. Er wird auf die Zieltemperatur begrenzt." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Anpassen" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4812,6 +4826,12 @@ msgstr "" "Ja - Arachne Wall Generator aktivieren\n" "Nein - Arachne Wall Generator deaktivieren und den Modus [Verschiebung] des Fuzzy Skin setzen" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Randbreite" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Der Spiralmodus funktioniert nur, wenn die Wandschleifen 1 sind, die Stütze deaktiviert ist, die Klumpenerkennung durch Abtasten deaktiviert ist, die oberen Schichtlagen 0 sind, die Dichte der spärlichen Füllung 0 ist und der Zeitraffertyp traditionell ist." @@ -4827,6 +4847,9 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Spiralmodus nicht aktivieren" +msgid "N/A" +msgstr "Nicht verfügbar" + msgid "Printing" msgstr "Drucken" @@ -5066,6 +5089,12 @@ msgstr "Fehler beim Generieren des Kalibrierungs-G-Codes" msgid "Calibration error" msgstr "Kalibrierungsfehler" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Netzwerk nicht verfügbar" @@ -5278,9 +5307,6 @@ msgstr "Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennt msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ungültiges Format. Erwartetes Vektorformat: \"%1%\"" -msgid "N/A" -msgstr "Nicht verfügbar" - # AI Translated msgid "System agents" msgstr "Systemagenten" @@ -5923,7 +5949,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Größe:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Konflikte von G-Code-Pfaden wurden bei Layer %d, Z = %.2lf mm gefunden.Bitte trennen Sie die konfliktbehafteten Objekte weiter voneinander (%s <-> %s)." @@ -6103,6 +6129,9 @@ msgstr "Multi-Gerät" msgid "Project" msgstr "Projekt" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Ja" @@ -6230,6 +6259,12 @@ msgstr "Projekt speichern als" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" +msgid "Publish" +msgstr "Veröffentlichen" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importiere 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8027,6 +8062,12 @@ msgstr "Bitte bestätigen Sie, dass die G-Codes innerhalb dieser Profile sicher msgid "Customized Preset" msgstr "Benutzerdefinierte Profile" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" @@ -8191,19 +8232,19 @@ msgstr "Verzeichnis um daraus zu ersetzen wurde nicht ausgewählt" msgid "Replaced with 3D files from directory:\n" msgstr "Ersetzt durch 3D-Dateien aus Verzeichnis:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Übersprungen %s: gleiche Datei.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Übersprungen %s: Datei existiert nicht.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Übersprungen %s: Ersetzen fehlgeschlagen.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Ersetzt %s.\n" @@ -8415,6 +8456,14 @@ msgstr "Geslicte Datei speichern unter:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Die Datei %s wurde an den Speicher des Druckers gesendet und kann auf dem Drucker angezeigt werden." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Die Düsenart ist nicht eingestellt. Bitte stellen Sie die Düse ein und versuchen Sie es erneut." @@ -9296,6 +9345,14 @@ msgstr "Nicht unterstützte Profile anzeigen" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Zeigt inkompatible/nicht unterstützte Profile in den Dropdown-Listen für Drucker und Filament an. Diese Profile können nicht ausgewählt werden." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Experimentelle Funktionen" @@ -9530,9 +9587,6 @@ msgstr "Zur Modellveröffentlichungs-Webseite springen" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Hinweis: Die Vorbereitung kann einige Minuten dauern. Bitte haben Sie Geduld." -msgid "Publish" -msgstr "Veröffentlichen" - msgid "Publish was canceled" msgstr "Veröffentlichung wurde abgebrochen" @@ -9548,6 +9602,21 @@ msgstr "Daten werden hochgeladen" msgid "Jump to webpage" msgstr "Zu einer Website springen" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s speichern als" @@ -9558,9 +9627,21 @@ msgstr "Benutzerprofil" msgid "Preset Inside Project" msgstr "Projektbasiertes Profil" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Vom übergeordneten Element trennen" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Der Name ist nicht verfügbar." @@ -10296,22 +10377,6 @@ msgstr "Sind Sie sicher, dass Sie diese Option aktivieren möchten?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Infill-Muster sind in der Regel so konzipiert, dass sie eine automatische Drehung ermöglichen, um einen ordnungsgemäßen Druck zu gewährleisten und die beabsichtigten Effekte zu erzielen (z. B. Gyroid, Cubic). Das Drehen des aktuellen spärlichen Infill-Musters kann zu unzureichender Unterstützung führen. Bitte gehen Sie vorsichtig vor und überprüfen Sie gründlich auf mögliche Druckprobleme. Sind Sie sicher, dass Sie diese Option aktivieren möchten?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Die Schichthöhe ist zu klein.\n" -"Sie wird auf min_layer_height gesetzt\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Die Schichthöhe überschreitet das Limit in Druckereinstellungen -> Extruder -> Schichthöhenlimits. Dies kann zu Problemen mit der Druckqualität führen." - -msgid "Adjust to the set range automatically?\n" -msgstr "Automatisch an den eingestellten Bereich anpassen?\n" - -msgid "Adjust" -msgstr "Anpassen" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Experimentelle Funktion: Filament beim Filamentwechsel weiter zurückziehen und abschneiden, um den Flush zu minimieren. Obwohl dies den Flush deutlich reduzieren kann, kann es auch das Risiko von Düsenverstopfungen oder anderen Druckkomplikationen erhöhen." @@ -10505,6 +10570,9 @@ msgstr "Reservierte Schlüsselwörter gefunden" msgid "Setting Overrides" msgstr "Überschreiben der Einstellungen" +msgid "Retraction when switching material" +msgstr "Rückzug bei Materialwechsel" + msgid "Basic information" msgstr "Grundlegende Informationen" @@ -10634,6 +10702,12 @@ msgstr "Kompatible Prozessprofile" msgid "Printable space" msgstr "Druckbarer Raum" +msgid "Printer Agent" +msgstr "Drucker-Agent" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Wählen Sie die Implementierung des Netzwerkagenten für die Druckerkommunikation. Verfügbare Agenten werden beim Start registriert." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10759,9 +10833,6 @@ msgstr "Höhenbegrenzungen für Schichten" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Rückzug bei Materialwechsel" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12103,6 +12174,9 @@ msgstr " ist zu nahe am Sperrbereich und es werden Kollisionen verursacht.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " ist zu nahe am Klumpenerkennungsbereich und es werden Kollisionen verursacht.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Die ausgewählten Düsentemperaturen sind nicht kompatibel. Die Düsentemperatur jedes Filaments muss innerhalb des empfohlenen Düsentemperaturbereichs der anderen Filamente liegen. Andernfalls kann es zu Düsenverstopfungen oder Druckerschäden kommen." @@ -12418,9 +12492,6 @@ msgstr "Benutze 3MF statt G-Code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Aktivieren Sie diese Option, wenn der Drucker eine 3MF-Datei als Druckauftrag akzeptiert. Wenn aktiviert, sendet Orca Slicer die geslicete Datei als .gcode.3mf, anstatt als einfache .gcode-Datei." -msgid "Printer Agent" -msgstr "Drucker-Agent" - msgid "Select the network agent implementation for printer communication." msgstr "Wählen Sie die Netzwerk-Agent-Implementierung für die Druckerkommunikation aus." @@ -13091,9 +13162,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Geschwindigkeit der internen Brücken. Wenn der Wert als Prozentsatz angegeben wird, wird er auf der Grundlage der Brückengeschwindigkeit berechnet. Der Standardwert beträgt 150 %." -msgid "Brim width" -msgstr "Randbreite" - msgid "This is the distance from the model to the outermost brim line." msgstr "Abstand vom Modell zur äußersten Randlinie" @@ -13174,6 +13242,12 @@ msgstr "" "Die Geometrie wird vor der Erkennung scharfer Winkel reduziert. Dieser Parameter ist ein Indikator für die minimale Länge der Abweichung für die Reduzierung.\n" "0 zum Deaktivieren." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "Aufwärtskompatible Maschine" @@ -14341,6 +14415,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Dies ist die Beschleunigung der Füllung von der obersten Schicht. Die Verwendung eines niedrigeren Werts kann die Qualität der Oberfläche verbessern." @@ -14874,6 +14954,12 @@ msgstr "Mit welcher Art von G-Code ist der Drucker kompatibel." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Pellet-Modifizierter Drucker" @@ -15920,6 +16006,12 @@ msgstr "Langer Rückzug beim Extruderwechsel" msgid "Retraction distance when extruder change" msgstr "Rückzugslänge beim Extruderwechsel" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z-Hub-Höhe" @@ -16014,6 +16106,9 @@ msgstr "Zusätzliche Länge beim Neustart" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Wenn die Rückzugskompensation nach dem Reisemove durchgeführt wird, wird der Extruder diese zusätzliche Menge an Filament schieben. Diese Einstellung wird nur selten benötigt." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Wenn die Rückzugskompensation nach dem Wechsel des Werkzeugs durchgeführt wird, wird der Extruder diese zusätzliche Menge an Filament schieben." @@ -16431,6 +16526,12 @@ msgstr "Werkzeugwechsel auf dem Reinigungsturm" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Erzwinge, dass der Werkzeugkopf zum Reinigungsturm fährt, bevor der Werkzeugwechselbefehl (Tx) ausgegeben wird. Nur relevant für Mehrfach-Extruder (Mehrfach-Werkzeugkopf) Drucker, die einen Typ-2-Reinigungsturm verwenden. Standardmäßig überspringt Orca die Fahrt auf Mehrfach-Werkzeugkopf-Maschinen, da die Firmware den Kopfwechsel übernimmt, was dazu führen kann, dass der Tx-Befehl über dem gedruckten Teil ausgegeben wird. Aktivieren Sie diese Option, wenn Sie möchten, dass der Werkzeugwechsel immer über dem Reinigungsturm ausgegeben wird." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Keine dünnen Schichten (Beta)" @@ -19650,9 +19751,6 @@ msgstr "Drucker" msgid "Print Host upload" msgstr "Hochladen zum Druck-Host" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Wählen Sie die Implementierung des Netzwerkagenten für die Druckerkommunikation. Verfügbare Agenten werden beim Start registriert." - msgid "Select a Flashforge printer" msgstr "Wählen Sie einen Flashforge-Drucker aus" @@ -20500,9 +20598,6 @@ msgstr "Es ist etwas Unerwartetes passiert, als Sie versucht haben, sich anzumel msgid "User canceled." msgstr "Benutzer abgebrochen." -msgid "Head diameter" -msgstr "Kopfdurchmesser" - msgid "Max angle" msgstr "Maximaler Winkel" @@ -21286,6 +21381,22 @@ msgstr "" "Verwerfungen vermeiden\n" "Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Die Schichthöhe ist zu klein.\n" +#~ "Sie wird auf min_layer_height gesetzt\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Die Schichthöhe überschreitet das Limit in Druckereinstellungen -> Extruder -> Schichthöhenlimits. Dies kann zu Problemen mit der Druckqualität führen." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Automatisch an den eingestellten Bereich anpassen?\n" + +#~ msgid "Head diameter" +#~ msgstr "Kopfdurchmesser" + #~ msgid "Print order within a single layer." #~ msgstr "Druckreihenfolge innerhalb einer einzelnen Schicht" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 232820f681..03b83309de 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -4448,6 +4448,20 @@ msgstr "" msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "" +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4529,6 +4543,12 @@ msgid "" "No - Disable Arachne Wall Generator and set [Displacement] mode of the Fuzzy Skin" msgstr "" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" @@ -4541,6 +4561,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -4780,6 +4803,12 @@ msgstr "" msgid "Calibration error" msgstr "" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + msgid "Network unavailable" msgstr "" @@ -4983,9 +5012,6 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" @@ -5611,7 +5637,7 @@ msgstr "" msgid "Size:" msgstr "" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "" @@ -5786,6 +5812,9 @@ msgstr "" msgid "Project" msgstr "" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "" @@ -5912,6 +5941,12 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" @@ -7630,6 +7665,12 @@ msgstr "" msgid "Customized Preset" msgstr "" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "" @@ -7776,19 +7817,19 @@ msgstr "" msgid "Replaced with 3D files from directory:\n" msgstr "" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "" @@ -7990,6 +8031,14 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -8793,6 +8842,14 @@ msgstr "" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "" @@ -9020,9 +9077,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9038,6 +9092,21 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "" @@ -9048,9 +9117,21 @@ msgstr "" msgid "Preset Inside Project" msgstr "" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "" @@ -9728,20 +9809,6 @@ msgstr "" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "" - -msgid "Adjust to the set range automatically?\n" -msgstr "" - -msgid "Adjust" -msgstr "" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "" @@ -9927,6 +9994,9 @@ msgstr "" msgid "Setting Overrides" msgstr "" +msgid "Retraction when switching material" +msgstr "" + msgid "Basic information" msgstr "" @@ -10053,6 +10123,12 @@ msgstr "" msgid "Printable space" msgstr "" +msgid "Printer Agent" +msgstr "" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10175,9 +10251,6 @@ msgstr "" msgid "Z-Hop" msgstr "" -msgid "Retraction when switching material" -msgstr "" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11441,6 +11514,9 @@ msgstr "" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr "" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "" @@ -11736,9 +11812,6 @@ msgstr "" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "" -msgid "Printer Agent" -msgstr "" - msgid "Select the network agent implementation for printer communication." msgstr "" @@ -12275,9 +12348,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "" -msgid "Brim width" -msgstr "" - msgid "This is the distance from the model to the outermost brim line." msgstr "" @@ -12343,6 +12413,12 @@ msgid "" "0 to deactivate." msgstr "" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "" @@ -13355,6 +13431,12 @@ msgstr "" msgid "Gyroid" msgstr "" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "" @@ -13835,6 +13917,12 @@ msgstr "" msgid "Klipper" msgstr "" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "" @@ -14796,6 +14884,12 @@ msgstr "" msgid "Retraction distance when extruder change" msgstr "" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "" @@ -14889,6 +14983,9 @@ msgstr "" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "" @@ -15274,6 +15371,12 @@ msgstr "" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "" @@ -18249,9 +18352,6 @@ msgstr "" msgid "Print Host upload" msgstr "" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "" - msgid "Select a Flashforge printer" msgstr "" @@ -19083,9 +19183,6 @@ msgstr "" msgid "User canceled." msgstr "" -msgid "Head diameter" -msgstr "" - msgid "Max angle" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 1913c4512a..74617b88ec 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -4564,6 +4564,20 @@ msgstr "La temperatura actual de la recámara es superior a la temperatura de se msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "La temperatura mínima de la recámara (%d℃) es superior a la temperatura objetivo de la recámara (%d℃). El valor mínimo es el umbral en el que comienza la impresión mientras la recámara continúa calentándose hacia el objetivo, por lo que no debería superarlo. Se ajustará al valor objetivo." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Ajustar" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4684,6 +4698,12 @@ msgstr "" "Sí: habilitar el generador de muros Arachne\n" "No: deshabilitar el generador de paredes Arachne y establecer el modo [Desplazamiento] de la piel rugosa" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Ancho del borde de adherencia" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "El modo espiral solo funciona cuando los bucles de perímetro son 1, el soporte está desactivado, la detección de agrupamientos mediante sondeo está desactivada, las capas superiores de la carcasa son 0, la densidad de relleno es 0 y el tipo de lapso de tiempo es tradicional." @@ -4699,6 +4719,9 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Imprimiendo" @@ -4938,6 +4961,12 @@ msgstr "Fallo al generar el G-Code de calibración" msgid "Calibration error" msgstr "Error de calibración" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + msgid "Network unavailable" msgstr "Red no disponible" @@ -5144,9 +5173,6 @@ msgstr "Patrón inválido. Use N, N#K, o una lista separada por comas con #K opc msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vector esperado: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Agentes del sistema" @@ -5779,7 +5805,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Tamaño:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Se han encontrado conflictos de rutas G-Code en la capa %d, Z = %.2lfmm. Por favor, separe más los objetos en conflicto (%s <-> %s)." @@ -5960,6 +5986,9 @@ msgstr "Multi-dispositivo" msgid "Project" msgstr "Proyecto" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Sí" @@ -6087,6 +6116,12 @@ msgstr "Guardar proyecto como" msgid "Save current project as" msgstr "Guardar el proyecto actual como" +msgid "Publish" +msgstr "Publicar" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7841,6 +7876,12 @@ msgstr "¡Por favor, confirme que el G-Code dentro de los perfiles son seguros p msgid "Customized Preset" msgstr "Perfil Personalizado" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF8!" @@ -7997,19 +8038,19 @@ msgstr "No se seleccionó el directorio para el reemplazo" msgid "Replaced with 3D files from directory:\n" msgstr "Reemplazado con archivos 3D desde el directorio:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Omitido %s: mismo archivo.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Omitido %s: el archivo no existe.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Omitido %s: fallo al reemplazar.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Reemplazado %s.\n" @@ -8218,6 +8259,14 @@ msgstr "Guardar el archivo laminado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El archivo %s ha sido mandado al almacenamiento de la impresora y puede ser visualizado en la impresora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipo de boquilla no está establecido. Configure la boquilla e inténtelo de nuevo." @@ -9074,6 +9123,14 @@ msgstr "Mostrar ajustes preestablecidos no compatibles" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostrar los ajustes preestablecidos incompatibles o no compatibles en los menús desplegables de impresoras y filamentos. Estos ajustes preestablecidos no se pueden seleccionar." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Funciones experimentales" @@ -9305,9 +9362,6 @@ msgstr "Ir a la página web de publicación de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparación puede llevar varios minutos. Por favor, sea paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicación fue cancelada" @@ -9323,6 +9377,21 @@ msgstr "Cargando datos" msgid "Jump to webpage" msgstr "Ir a la página web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Guardar %s como" @@ -9333,9 +9402,21 @@ msgstr "Perfil de usuario" msgid "Preset Inside Project" msgstr "Perfil interno del proyecto" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Separar del elemento padre" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "El nombre no está disponible." @@ -10031,22 +10112,6 @@ msgstr "¿Está seguro de que desea activar esta opción?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Los patrones de relleno suelen diseñarse para gestionar la rotación automáticamente y asegurar una impresión adecuada y lograr sus efectos previstos (p. ej., Giroide, Cúbico). Rotar el patrón de relleno actual puede provocar soporte insuficiente. Proceda con precaución y compruebe detenidamente posibles problemas de impresión. ¿Está seguro de que desea activar esta opción?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"La altura de la capa es demasiado pequeña.\n" -"Se establecerá en min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "La altura de la capa excede el límite en Ajustes de la Impresora -> Extrusor -> Limite de Altura de Capa, esto puede causar problemas de calidad de impresión." - -msgid "Adjust to the set range automatically?\n" -msgstr "¿Desea ajustar el rango automáticamente?\n" - -msgid "Adjust" -msgstr "Ajustar" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Función experimental: retraer y cortar el filamento a una mayor distancia durante los cambios de filamento para minimizar el purgado. Aunque puede reducir notablemente el purgado, también puede aumentar el riesgo de atascos de boquilla u otras complicaciones de impresión.Característica experimental: Retraer y cortar el filamento a mayor distancia durante los cambios de filamento para minimizar el descarte. Aunque puede reducir notablemente el descarte, también puede elevar el riesgo de atascos de boquillas u otros problemas en la impresión." @@ -10238,6 +10303,9 @@ msgstr "Palabras clave utilizadas y encontradas" msgid "Setting Overrides" msgstr "Sobreescribir Ajustes de impresora" +msgid "Retraction when switching material" +msgstr "Retracción al cambiar de material" + msgid "Basic information" msgstr "Información básica" @@ -10364,6 +10432,12 @@ msgstr "Perfiles de proceso compatibles" msgid "Printable space" msgstr "Espacio imprimible" +msgid "Printer Agent" +msgstr "Agente de impresora" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Seleccione la implementación del agente de red para la comunicación con la impresora. Los agentes disponibles se registran al iniciar el sistema." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10489,9 +10563,6 @@ msgstr "Límites de altura de la capa" msgid "Z-Hop" msgstr "Salto en Z" -msgid "Retraction when switching material" -msgstr "Retracción al cambiar de material" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11809,6 +11880,9 @@ msgstr " está demasiado cerca de una zona de exclusión, lo que provocará coli msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " está demasiado cerca del área de detección de aglomeraciones, y se producirán colisiones.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Las temperaturas de boquilla seleccionadas son incompatibles. La temperatura de boquilla de cada filamento debe estar dentro del rango de temperaturas recomendado para los demás filamentos. De lo contrario, podrían producirse atascos en la boquilla o daños en la impresora." @@ -12116,9 +12190,6 @@ msgstr "Utiliza 3MF en lugar de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activa esta opción si la impresora admite un archivo 3MF como trabajo de impresión. Cuando está activada, Orca Slicer envía el archivo cortado como un archivo .gcode.3mf, en lugar de como un archivo .gcode convencional." -msgid "Printer Agent" -msgstr "Agente de impresora" - msgid "Select the network agent implementation for printer communication." msgstr "Seleccione la implementación del agente de red para la comunicación con la impresora." @@ -12794,9 +12865,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Velocidad de los puntes internos. Si se expresa como un porcentaje, será Calculado en base a la velocidad de puente. El valor por defecto es 150%." -msgid "Brim width" -msgstr "Ancho del borde de adherencia" - msgid "This is the distance from the model to the outermost brim line." msgstr "Distancia del modelo a la línea más externa del borde de adherencia." @@ -12876,6 +12944,12 @@ msgstr "" "La geometría se verá diezmada antes de detectar angulos agudos. Este parámetro indica la longitud mínima de desviación para el diezmado\n" "0 para desactivar." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "máquina compatible ascendente" @@ -14011,6 +14085,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Aceleración del relleno de la superficie superior. El uso de un valor más bajo puede mejorar la calidad de la superficie superior." @@ -14544,6 +14624,12 @@ msgstr "Con qué tipo de G-Code es compatible la impresora." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Impresora Modificada para Pellets" @@ -15583,6 +15669,12 @@ msgstr "Retracción larga al cambiar de extrusor" msgid "Retraction distance when extruder change" msgstr "Distancia de retracción al cambiar de extrusor" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Altura de Salto en Z" @@ -15676,6 +15768,9 @@ msgstr "Longitud extra de reinicio" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Cuando la retracción se compensa después de un desplazamiento, el extrusor expulsará esta cantidad adicional de filamento. Esta función no suele ser necesaria." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Cuando se compensa la retracción después de cambiar de cabezal, el extrusor expulsará esta cantidad adicional de filamento." @@ -16082,6 +16177,12 @@ msgstr "Cambio de herramienta en la torre de purga" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Obliga al cabezal a desplazarse hasta la torre de purga antes de emitir el comando de cambio de herramienta (Tx). Solo es relevante para impresoras con múltiples extrusores (múltiples cabezales) que utilicen una torre de limpieza de tipo 2. Por defecto, Orca omite el desplazamiento en máquinas con múltiples cabezales porque el firmware se encarga del cambio de cabezal, lo que puede provocar que el comando Tx se emita por encima de la pieza impresa. Habilita esta opción si deseas que el cambio de herramienta se emita siempre por encima de la torre de purga." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Sin capas de baja densidad (beta)" @@ -19281,9 +19382,6 @@ msgstr "Impresora física" msgid "Print Host upload" msgstr "Mandar al servidor de impresión" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Seleccione la implementación del agente de red para la comunicación con la impresora. Los agentes disponibles se registran al iniciar el sistema." - msgid "Select a Flashforge printer" msgstr "Selecciona una impresora Flashforge" @@ -20125,9 +20223,6 @@ msgstr "Ha ocurrido algo inesperado al intentar iniciar sesión, inténtelo de n msgid "User canceled." msgstr "Cancelado por el usuario." -msgid "Head diameter" -msgstr "Diámetro de la cabeza" - msgid "Max angle" msgstr "Ángulo máximo" @@ -20861,6 +20956,22 @@ msgstr "" "Evita la deformación\n" "¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "La altura de la capa es demasiado pequeña.\n" +#~ "Se establecerá en min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "La altura de la capa excede el límite en Ajustes de la Impresora -> Extrusor -> Limite de Altura de Capa, esto puede causar problemas de calidad de impresión." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "¿Desea ajustar el rango automáticamente?\n" + +#~ msgid "Head diameter" +#~ msgstr "Diámetro de la cabeza" + #~ msgid "Print order within a single layer." #~ msgstr "Orden de impresión dentro de cada capa." diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index fa10cc387f..cceccaa64c 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -4606,6 +4606,20 @@ msgstr "Uneko ganberako tenperatura materialaren tenperatura segurua baino handi msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Ganberako gutxieneko tenperatura (%d ℃) helburuko ganbera-tenperatura (%d ℃) baino altuagoa da. Gutxieneko balioa inprimaketa hasten den atalasea da, ganberak helbururantz berotzen jarraitzen duen bitartean; beraz, ez luke helburua gainditu behar. Helburuko baliora mugatuko da." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Doitu" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4725,6 +4739,12 @@ msgstr "" "Bai - Gaitu Arachne horma-sorgailua\n" "Ez - Desgaitu Arachne horma-sorgailua eta ezarri gainazal zimurraren [Desplazamendua] modua" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Itsaspen ertzaren zabalera" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Espiral moduak baldintza hauetan bakarrik funtzionatzen du: horma-begiztak 1 izatea, euskarriak desgaituta egotea, haztatze bidezko material-metaketa detektatzea desgaituta egotea, goiko estalki-geruzak 0 izatea, dentsitate baxuko betegarriaren dentsitatea 0 izatea eta timelapse mota tradizionala izatea." @@ -4740,6 +4760,9 @@ msgstr "" "Bai - Aldatu ezarpen hauek eta gaitu espiral/loreontzi modua automatikoki\n" "Ez - Utzi bertan behera espiral modua gaitzea" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Inprimatzen" @@ -4979,6 +5002,12 @@ msgstr "Hutsegitea gertatu da kalibrazioko G-Code-a sortzean" msgid "Calibration error" msgstr "Kalibrazio akatsa" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Sarea ez dago erabilgarri" @@ -5192,9 +5221,6 @@ msgstr "Patroi baliogabea. Erabili N, N#K edo komaz bereizitako zerrenda bat, sa msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formatuak ez du balio. Espero den formatu bektoriala: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Sistema-agenteak" @@ -5828,7 +5854,7 @@ msgstr "Bolumena:" msgid "Size:" msgstr "Tamaina:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "G-code ibilbideen gatazkak aurkitu dira %d geruzan, Z = %.2lf mm. Urrundu gehiago gatazkan dauden objektuak (%s <-> %s)." @@ -6005,6 +6031,9 @@ msgstr "Gailu anitz" msgid "Project" msgstr "Proiektua" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Bai" @@ -6132,6 +6161,12 @@ msgstr "Gorde proiektua honela" msgid "Save current project as" msgstr "Gorde uneko proiektua honela" +msgid "Publish" +msgstr "Argitaratu" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Inportatu 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7909,6 +7944,12 @@ msgstr "Berretsi aurrezarpen hauetako G-codea segurua dela, makinari kalterik ez msgid "Customized Preset" msgstr "Aurrezarpen pertsonalizatua" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP fitxategiko osagai-izena(k) ez dago/daude UTF-8 formatuan!" @@ -8064,19 +8105,19 @@ msgstr "Ez da ordezkatzeko direktoriorik hautatu" msgid "Replaced with 3D files from directory:\n" msgstr "Direktorio honetako 3D fitxategiekin ordeztuta:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ %s saltatu da: fitxategi bera.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ %s saltatu da: fitxategia ez da existitzen.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ %s saltatu da: ezin izan da ordeztu.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ %s ordezkatu da.\n" @@ -8285,6 +8326,14 @@ msgstr "Gorde xerratutako fitxategia honela:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s fitxategia inprimagailuaren biltegiratze-eremura bidali da eta inprimagailuan ikus daiteke." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Pita mota ez dago ezarrita. Ezarri pita eta saiatu berriro." @@ -9142,6 +9191,14 @@ msgstr "Erakutsi onartzen ez diren aurrezarpenak" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Erakutsi bateraezinak edo onartu gabeak diren aurrezarpenak inprimagailuaren eta filamentuaren goitibeherako zerrendetan. Aurrezarpen hauek ezin dira hautatu." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Ezaugarri esperimentalak" @@ -9374,9 +9431,6 @@ msgstr "Joan modeloa argitaratzeko web-orrira" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Oharra: prestaketak minutu batzuk iraun ditzake. Izan pazientzia." -msgid "Publish" -msgstr "Argitaratu" - msgid "Publish was canceled" msgstr "Argitaratzea bertan behera utzi da" @@ -9392,6 +9446,21 @@ msgstr "Datuak igotzen" msgid "Jump to webpage" msgstr "Joan web-orrira" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Gorde %s honela" @@ -9402,9 +9471,21 @@ msgstr "Erabiltzailearen aurrezarpena" msgid "Preset Inside Project" msgstr "Proiektu barruko aurrezarpena" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Bereizi gurasotik" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Izena ez dago erabilgarri." @@ -10124,22 +10205,6 @@ msgstr "Ziur aukera hau gaitu nahi duzula?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Betegarri-patroiak normalean biraketa automatikoki kudeatzeko diseinatuta daude, behar bezala inprimatzeko eta nahi den efektua lortzeko (adibidez, Giroidea edo Kubikoa). Uneko dentsitate baxuko betegarri-patroia biratzeak euskarri eskasa eragin dezake. Kontuz jarraitu eta egiaztatu arretaz inprimatze-arazorik sor daitekeen. Ziur zaude aukera hau gaitu nahi duzula?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Geruza-altuera txikiegia da.\n" -"min_layer_height baliora ezarriko da\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Geruza-altuerak Inprimagailuaren ezarpenak -> Estrusorea -> Geruza-altueraren mugak ataleko muga gainditzen du; horrek inprimatze-kalitateko arazoak sor ditzake." - -msgid "Adjust to the set range automatically?\n" -msgstr "Doitu automatikoki ezarritako barrutira?\n" - -msgid "Adjust" -msgstr "Doitu" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funtzio esperimentala: filamentu aldaketetan distantzia handiagoan atzera egitea eta moztea, purgatzea minimizatzeko. Purgatzea nabarmen murriztu dezakeen arren, pitaren buxadurak edo bestelako inprimatze-arazoak izateko arriskua ere handitu dezake." @@ -10333,6 +10398,9 @@ msgstr "Erreserbatutako gako-hitzak aurkitu dira" msgid "Setting Overrides" msgstr "Ezarpenen gainidazketak" +msgid "Retraction when switching material" +msgstr "Atzera-egitea materiala aldatzean" + msgid "Basic information" msgstr "Oinarrizko informazioa" @@ -10459,6 +10527,12 @@ msgstr "Prozesu-profil bateragarriak" msgid "Printable space" msgstr "Inprimatzeko espazioa" +msgid "Printer Agent" +msgstr "Inprimagailu-agentea" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Hautatu sare-agentearen inplementazioa inprimagailuarekin komunikatzeko. Erabilgarri dauden agenteak abioan erregistratzen dira." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10584,9 +10658,6 @@ msgstr "Geruza-altueraren mugak" msgid "Z-Hop" msgstr "Z jauzia" -msgid "Retraction when switching material" -msgstr "Atzera-egitea materiala aldatzean" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11912,6 +11983,9 @@ msgstr " bazterketa-eremu batetik gertuegi dago, eta talkak eragingo ditu.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " material-metaketa detektatzeko eremutik gertuegi dago, eta talkak eragingo ditu.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Hautatutako pita-tenperaturak ez dira bateragarriak. Filamentu bakoitzaren pita-tenperaturak gainerako filamentuen gomendatutako pita-tenperatura tartean egon behar du. Bestela, pita buxatu edo inprimagailua kaltetu daiteke." @@ -12228,9 +12302,6 @@ msgstr "Erabili 3MF G-codearen ordez" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Gaitu aukera hau inprimagailuak 3MF fitxategi bat inprimatze-lan gisa onartzen badu. Gaituta dagoenean, OrcaSlicerrek xerratutako fitxategia .gcode.3mf gisa bidaltzen du, .gcode fitxategi arrunt baten ordez." -msgid "Printer Agent" -msgstr "Inprimagailu-agentea" - msgid "Select the network agent implementation for printer communication." msgstr "Hautatu inprimagailuarekin komunikatzeko sare-agentearen inplementazioa." @@ -12905,9 +12976,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Barru-zubien abiadura. Balioa ehuneko gisa adierazten bada, Zubien abiadura-ren arabera kalkulatuko da. Lehenetsitako balioa % 150ekoa da." -msgid "Brim width" -msgstr "Itsaspen ertzaren zabalera" - msgid "This is the distance from the model to the outermost brim line." msgstr "Hau da modelotik itsaspen ertzaren kanporen lerrora dagoen distantzia." @@ -12987,6 +13055,12 @@ msgstr "" "Geometria sinplifikatu egingo da angelu zorrotzak detektatu aurretik. Parametro honek sinplifikaziorako desbideratzearen gutxieneko luzera adierazten du.\n" "0, desaktibatzeko." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "gorantz bateragarria den makina" @@ -14137,6 +14211,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroidea" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Hau da goiko gainazaleko betegarriaren azelerazioa. Balio txikiago batek goiko gainazalaren kalitatea hobetu dezake." @@ -14676,6 +14756,12 @@ msgstr "Inprimagailua zer G-code motarekin den bateragarria." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Pelletekin moldatutako inprimagailua" @@ -15719,6 +15805,12 @@ msgstr "Atzera-egite luzea estrusorea aldatzean" msgid "Retraction distance when extruder change" msgstr "Atzera-egite distantzia estrusorea aldatzean" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z jauziaren altuera" @@ -15812,6 +15904,9 @@ msgstr "Berrabiaraztean luzera gehigarria" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Mugimenduaren ondoren atzera-egitea konpentsatzen denean, estrusoreak filamentu kantitate gehigarri hau bultzatuko du. Ezarpen hau gutxitan behar da." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Tresna aldatu ondoren atzera-egitea konpentsatzen denean, estrusoreak filamentu kantitate gehigarri hau bultzatuko du." @@ -16220,6 +16315,12 @@ msgstr "Tresna-aldaketa purgatze-dorrean" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Behartu inprimatze-burua purgatze-dorrera joatera tresna aldatzeko agindua (Tx) eman aurretik. 2. motako purgatze-dorrea erabiltzen duten estrusore anitzeko (inprimatze-buru anitzeko) inprimagailuetarako bakarrik da garrantzitsua. Lehenespenez, Orcak ez du joan-etorria egiten inprimatze-buru anitzeko makinetan, firmwareak buruaren aldaketa kudeatzen duelako; horren ondorioz, Tx agindua inprimatutako piezaren gainean eman daiteke. Gaitu aukera hau tresna-aldaketa beti purgatze-dorrearen gainean egin dadin." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Geruza bakandurik ez (beta)" @@ -19429,9 +19530,6 @@ msgstr "Inprimagailu fisikoa" msgid "Print Host upload" msgstr "Inprimatze-ostalariaren karga" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Hautatu sare-agentearen inplementazioa inprimagailuarekin komunikatzeko. Erabilgarri dauden agenteak abioan erregistratzen dira." - msgid "Select a Flashforge printer" msgstr "Hautatu Flashforge inprimagailu bat" @@ -20278,9 +20376,6 @@ msgstr "Ustekabeko zerbait gertatu da saioa hasten saiatzean; saiatu berriro." msgid "User canceled." msgstr "Erabiltzaileak bertan behera utzi du." -msgid "Head diameter" -msgstr "Buruaren diametroa" - msgid "Max angle" msgstr "Gehieneko angelua" @@ -21016,6 +21111,22 @@ msgstr "" "Saihestu okertzea\n" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Geruza-altuera txikiegia da.\n" +#~ "min_layer_height baliora ezarriko da\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Geruza-altuerak Inprimagailuaren ezarpenak -> Estrusorea -> Geruza-altueraren mugak ataleko muga gainditzen du; horrek inprimatze-kalitateko arazoak sor ditzake." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Doitu automatikoki ezarritako barrutira?\n" + +#~ msgid "Head diameter" +#~ msgstr "Buruaren diametroa" + #~ msgid "Print order within a single layer." #~ msgstr "Geruza bakarreko inprimatze-ordena." diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 1257994f16..5aeed754f0 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -4643,6 +4643,20 @@ msgstr "La température actuelle du caisson est supérieure à la température d msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "La température minimale du caisson (%d℃) est supérieure à la température cible du caisson (%d℃). La valeur minimale est le seuil à partir duquel l’impression démarre tandis que le caisson continue de chauffer vers la cible ; elle ne doit donc pas la dépasser. Elle sera limitée à la cible." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Ajuster" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4762,6 +4776,12 @@ msgstr "" "Oui - Activer le générateur de parois Arachne\n" "Non - Désactiver le générateur de parois Arachne et définir le mode [Déplacement] de la surface irrégulière" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Largeur de la bordure" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Le mode spirale ne fonctionne que lorsque le nombre de parois est 1, le support est désactivé, la détection d'agglomération par sondage est désactivée, les couches supérieures sont à 0, la densité de remplissage clairsemé est à 0 et le type de timelapse est traditionnel." @@ -4777,6 +4797,9 @@ msgstr "" "Oui - Modifiez ces paramètres et activez automatiquement le mode spirale/vase\n" "Non - Annuler l'activation du mode spirale" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Impression" @@ -5016,6 +5039,12 @@ msgstr "Échec de la génération du G-code de calibration" msgid "Calibration error" msgstr "Erreur de la calibration" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Réseau indisponible" @@ -5228,9 +5257,6 @@ msgstr "Motif invalide. Utilisez N, N#K, ou une liste séparée par des virgules msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format invalide. Format vectoriel attendu : \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Agents système" @@ -5871,7 +5897,7 @@ msgstr "Volume :" msgid "Size:" msgstr "Taille :" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Des conflits de chemins G-code ont été trouvés au niveau de la couche %d, z = %.2lfmm. Veuillez séparer davantage les objets en conflit (%s <-> %s)." @@ -6052,6 +6078,9 @@ msgstr "Multi-appareils" msgid "Project" msgstr "Projet" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Oui" @@ -6179,6 +6208,12 @@ msgstr "Enregistrer le projet sous" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" +msgid "Publish" +msgstr "Publier" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7964,6 +7999,12 @@ msgstr "Veuillez vous assurer que les G-codes de ces préréglages sont sûrs af msgid "Customized Preset" msgstr "Préréglage personnalisé" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Le nom des composants dans le fichier STEP n'est pas au format UTF-8 !" @@ -8120,19 +8161,19 @@ msgstr "Le répertoire pour le remplacement n'a pas été sélectionné" msgid "Replaced with 3D files from directory:\n" msgstr "Remplacé par des fichiers 3D depuis le répertoire :\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Ignoré %s : même fichier.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Ignoré %s : le fichier n'existe pas.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Ignoré %s : échec du remplacement.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Remplacé %s.\n" @@ -8341,6 +8382,14 @@ msgstr "Enregistrer le fichier découpé sous :" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Le fichier %s a été envoyé vers l'espace de stockage de l'imprimante et peut être visualisé sur l'imprimante." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Le type de buse n'est pas défini. Veuillez définir la buse et réessayer." @@ -9211,6 +9260,14 @@ msgstr "Afficher les préréglages non pris en charge" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Affiche les préréglages incompatibles ou non pris en charge dans les listes déroulantes d’imprimantes et de filaments. Ces préréglages ne peuvent pas être sélectionnés." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Fonctionnalités expérimentales" @@ -9444,9 +9501,6 @@ msgstr "Accéder à la page internet de publication des modèles" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Remarque : La préparation peut prendre plusieurs minutes. Veuillez patienter." -msgid "Publish" -msgstr "Publier" - msgid "Publish was canceled" msgstr "La publication a été annulée" @@ -9462,6 +9516,21 @@ msgstr "Téléversement des données" msgid "Jump to webpage" msgstr "Ouvrir la page internet" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Enregistrer %s sous" @@ -9472,9 +9541,21 @@ msgstr "Préréglage utilisateur" msgid "Preset Inside Project" msgstr "Préréglage intégré au projet" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Détacher du parent" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Le nom n'est pas disponible." @@ -10211,22 +10292,6 @@ msgstr "Voulez-vous vraiment activer cette option ?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Les motifs de remplissage sont généralement conçus pour gérer la rotation automatiquement afin d'assurer une impression correcte et d'atteindre les effets souhaités (ex. : Gyroïde, Cubique). La rotation du motif de remplissage clairsemé actuel peut entraîner un support insuffisant. Veuillez procéder avec précaution et vérifier soigneusement tout problème d'impression potentiel. Voulez-vous vraiment activer cette option ?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"La hauteur de couche est trop faible.\n" -"Elle sera définie à min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "La hauteur de la couche dépasse la limite fixée dans Paramètres de l’imprimante -> Extrudeur -> Limites de la hauteur de la couche, ce qui peut entraîner des problèmes de qualité d’impression." - -msgid "Adjust to the set range automatically?\n" -msgstr "S’ajuster automatiquement à la plage définie ?\n" - -msgid "Adjust" -msgstr "Ajuster" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Fonction expérimentale : Rétracter et couper le filament à une plus grande distance lors des changements de filament afin de minimiser le rinçage. Bien que cela puisse réduire considérablement le rinçage, cela peut également augmenter le risque de bouchage des buses ou d’autres complications d’impression." @@ -10422,6 +10487,9 @@ msgstr "Mots clés réservés trouvés" msgid "Setting Overrides" msgstr "Forçage des réglages" +msgid "Retraction when switching material" +msgstr "Rétraction lors du changement de matériau" + msgid "Basic information" msgstr "Informations de base" @@ -10548,6 +10616,12 @@ msgstr "Profils de traitement compatibles" msgid "Printable space" msgstr "Espace imprimable" +msgid "Printer Agent" +msgstr "Agent d'imprimante" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Sélectionner l'implémentation de l'agent réseau pour la communication avec l'imprimante. Les agents disponibles sont enregistrés au démarrage." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10673,9 +10747,6 @@ msgstr "Limites de hauteur de couche" msgid "Z-Hop" msgstr "Saut en Z" -msgid "Retraction when switching material" -msgstr "Rétraction lors du changement de matériau" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12010,6 +12081,9 @@ msgstr " est trop proche d'une zone d'exclusion. Cela va entraîner des collisio msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " est trop proche de la zone de détection d'agglomération, et des collisions seront causées.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Les températures de buse sélectionnées sont incompatibles. La température de buse de chaque filament doit se situer dans la plage de température de buse recommandée des autres filaments. Sinon, un bouchage de la buse ou des dommages à l’imprimante peuvent survenir." @@ -12323,9 +12397,6 @@ msgstr "Utiliser le 3MF au lieu du G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activez ceci si l’imprimante accepte un fichier 3MF comme tâche d’impression. Lorsque cette option est activée, Orca Slicer envoie le fichier découpé au format .gcode.3mf au lieu d’un simple fichier .gcode." -msgid "Printer Agent" -msgstr "Agent d'imprimante" - msgid "Select the network agent implementation for printer communication." msgstr "Sélectionner l'implémentation de l'agent réseau pour la communication avec l'imprimante." @@ -13000,9 +13071,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Vitesse des ponts internes. Si la valeur est exprimée en pourcentage, elle sera calculée sur la base de la vitesse du pont. La valeur par défaut est 150%." -msgid "Brim width" -msgstr "Largeur de la bordure" - msgid "This is the distance from the model to the outermost brim line." msgstr "Distance du modèle à la ligne de bord la plus externe" @@ -13082,6 +13150,12 @@ msgstr "" "La géométrie sera décimée avant de détecter les angles vifs. Ce paramètre indique la longueur minimale de l’écart pour la décimation.\n" "0 pour désactiver" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "machine à compatibilité ascendante" @@ -14236,6 +14310,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroïde" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Il s'agit de l'accélération de la surface supérieure du remplissage. Utiliser une valeur plus petite pourrait améliorer la qualité de la surface supérieure" @@ -14774,6 +14854,12 @@ msgstr "Avec quel type de G-code l'imprimante est-elle compatible." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Imprimante à pellets" @@ -15821,6 +15907,12 @@ msgstr "Rétraction longue lors du changement d'extrudeur" msgid "Retraction distance when extruder change" msgstr "Distance de rétraction lors du changement d'extrudeur" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Hauteur du saut en Z" @@ -15914,6 +16006,9 @@ msgstr "Longueur supplémentaire" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Lorsque la rétraction est compensée après le mouvement de déplacement, l’extrudeuse poussera cette quantité supplémentaire de filament. Ce paramètre est rarement nécessaire." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Lorsque la rétraction est compensée après le changement d’outil, l’extrudeur poussera cette quantité supplémentaire de filament." @@ -16326,6 +16421,12 @@ msgstr "Changement d’outil sur la tour d’essuyage" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Force la tête d’outil à se déplacer vers la tour d’essuyage avant d’émettre la commande de changement d’outil (Tx). Pertinent uniquement pour les imprimantes multi-extrudeurs (à têtes d’outil multiples) utilisant une tour d’essuyage de type 2. Par défaut, Orca omet ce déplacement sur les machines à têtes d’outil multiples car le firmware gère le changement de tête, ce qui peut entraîner l’émission de la commande Tx au-dessus de la pièce imprimée. Activez cette option si vous préférez que le changement d’outil soit toujours émis au-dessus de la tour d’essuyage." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Pas de couches éparses (beta)" @@ -19542,9 +19643,6 @@ msgstr "Imprimante Physique" msgid "Print Host upload" msgstr "Envoi vers l’imprimante hôte" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Sélectionner l'implémentation de l'agent réseau pour la communication avec l'imprimante. Les agents disponibles sont enregistrés au démarrage." - msgid "Select a Flashforge printer" msgstr "Sélectionner une imprimante Flashforge" @@ -20392,9 +20490,6 @@ msgstr "Un événement inattendu s’est produit lors de la connexion, veuillez msgid "User canceled." msgstr "L’utilisateur a annulé." -msgid "Head diameter" -msgstr "Diamètre de la tête" - msgid "Max angle" msgstr "Angle maximal" @@ -21176,6 +21271,22 @@ msgstr "" "Éviter la déformation\n" "Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "La hauteur de couche est trop faible.\n" +#~ "Elle sera définie à min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "La hauteur de la couche dépasse la limite fixée dans Paramètres de l’imprimante -> Extrudeur -> Limites de la hauteur de la couche, ce qui peut entraîner des problèmes de qualité d’impression." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "S’ajuster automatiquement à la plage définie ?\n" + +#~ msgid "Head diameter" +#~ msgstr "Diamètre de la tête" + #~ msgid "Print order within a single layer." #~ msgstr "Ordre d’impression au sein d’une même couche" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 98cd987512..6c9c5669d8 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4739,6 +4739,20 @@ msgstr "A kamra aktuális hőmérséklete magasabb az anyag biztonságos hőmér msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "A minimális kamrahőmérséklet (%d℃) magasabb a cél kamrahőmérsékletnél (%d℃). A minimális érték az a küszöb, amelynél a nyomtatás elindul, miközben a kamra tovább melegszik a célérték felé, ezért nem haladhatja meg azt. Az érték a célértékre lesz korlátozva." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Módosítás" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4858,6 +4872,12 @@ msgstr "" "Igen - Engedélyezd az Arachne falgenerátort\n" "Nem - Tiltsd le az Arachne falgenerátort, majd állítsd a barázdált felületet [Eltolás] módra" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Perem szélessége" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "A spirál mód csak akkor működik, ha a falhurkok száma 1, a támasz és a szondázásos csomósodásészlelés ki van kapcsolva, a felső héjrétegek száma 0, a kitöltés sűrűsége 0, a Timelapse típusa pedig hagyományos." @@ -4873,6 +4893,10 @@ msgstr "" "Igen - Módosítsd ezeket a beállításokat, és automatikusan kapcsold be a spirál módot\n" "Nem - Most ne kapcsold be a spirál módot" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Nyomtatás" @@ -5112,6 +5136,12 @@ msgstr "Nem sikerült létrehozni a kalibrációs G-kódot" msgid "Calibration error" msgstr "Kalibrációs hiba" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "A hálózat nem érhető el" @@ -5324,10 +5354,6 @@ msgstr "Érvénytelen minta. Használj N, N#K formátumot, vagy vesszővel elvá msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Érvénytelen formátum. Elvárt vektor formátum: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Rendszerügynökök" @@ -5971,7 +5997,7 @@ msgstr "Térfogat:" msgid "Size:" msgstr "Méret:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "G-kód útvonalütközés található a(z) %d. rétegen, Z = %.2lfmm. Helyezd távolabb egymástól az ütköző objektumokat (%s <-> %s)." @@ -6153,6 +6179,9 @@ msgstr "Több eszköz" msgid "Project" msgstr "Projekt" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Igen" @@ -6281,6 +6310,12 @@ msgstr "Projekt mentése másként" msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" +msgid "Publish" +msgstr "Közzététel" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8079,6 +8114,12 @@ msgstr "Kérlek, győződj meg arról, hogy a beállításokban található G-k msgid "Customized Preset" msgstr "Egyedi beállítás" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "A STEP fájlon belüli komponens neve nem UTF-8 formátumban van!" @@ -8244,19 +8285,19 @@ msgstr "A cseréhez nem lett mappa kiválasztva" msgid "Replaced with 3D files from directory:\n" msgstr "Cserélve a mappából származó 3D fájlokra:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ %s kihagyva: azonos fájl.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ %s kihagyva: a fájl nem létezik.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ %s kihagyva: a csere sikertelen.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔%s lecserélve.\n" @@ -8467,6 +8508,14 @@ msgstr "Szeletelt fájl mentése mint:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "A(z) %s fájlt elküldtük a nyomtató tárhelyére. A fájl a nyomtatón tekinthető meg." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "A fúvókatípus nincs beállítva. Állítsd be a fúvókát, majd próbáld újra." @@ -9362,6 +9411,14 @@ msgstr "Nem támogatott beállítások megjelenítése" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Megjeleníti a nem kompatibilis vagy nem támogatott beállításokat a nyomtató- és filamentlegördülő listákban. Ezek a beállítások nem választhatók ki." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Kísérleti funkciók" @@ -9604,9 +9661,6 @@ msgstr "Ugrás a modell közzététele weboldalra" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Megjegyzés: Az előkészítés több percig is eltarthat. Kérlek, várj." -msgid "Publish" -msgstr "Közzététel" - msgid "Publish was canceled" msgstr "A közzététel törlésre került" @@ -9622,6 +9676,21 @@ msgstr "Adatok feltöltése" msgid "Jump to webpage" msgstr "Ugrás a weboldalra" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s mentése" @@ -9632,9 +9701,21 @@ msgstr "Felhasználói beállítás" msgid "Preset Inside Project" msgstr "Projekt a beállításon belül" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Leválasztás a szülőről" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "A név nem elérhető." @@ -10376,22 +10457,6 @@ msgstr "Biztos, hogy engedélyezed ezt az opciót?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "A kitöltési minták általában maguk kezelik a forgatást a megfelelő nyomtatás és a kívánt hatás elérése érdekében (pl. Gyroid, Cubic). A jelenlegi kitöltési minta elforgatása elégtelen alátámasztáshoz vezethet. Kérlek, járj el körültekintően, és alaposan ellenőrizd a lehetséges nyomtatási problémákat. Biztos, hogy engedélyezed ezt a beállítást?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"A rétegmagasság túl kicsi.\n" -"A rendszer a min_layer_height értékre állítja.\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "A rétegmagasság meghaladja a Nyomtatóbeállítások -> Extruder -> Rétegmagasság limitek menüpontban megadott értéket, ez minőségbeli problémákat okozhat a nyomtatás során." - -msgid "Adjust to the set range automatically?\n" -msgstr "Szeretnéd az értéket automatikusan a beállított tartományhoz igazítani?\n" - -msgid "Adjust" -msgstr "Módosítás" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Kísérleti funkció: Filamentcsere közben nagyobb távolságon történő visszahúzás és elvágás az öblítés minimalizálása érdekében. Bár ez jelentősen csökkentheti az öblítés mértékét, növelheti a fúvóka eltömődésének vagy más nyomtatási problémák kockázatát." @@ -10587,6 +10652,9 @@ msgstr "Foglalt kulcsszavakat találtunk" msgid "Setting Overrides" msgstr "Beállítások felülbírálása" +msgid "Retraction when switching material" +msgstr "Visszahúzás anyagváltáskor" + msgid "Basic information" msgstr "Alapinformációk" @@ -10720,6 +10788,12 @@ msgstr "Kompatibilis folyamatprofilok" msgid "Printable space" msgstr "Nyomtatási terület" +msgid "Printer Agent" +msgstr "Nyomtatóügynök" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Válaszd ki a nyomtatóval való kommunikációhoz használt hálózati ügynököt. Az elérhető ügynököket indításkor regisztrálja a rendszer." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10845,9 +10919,6 @@ msgstr "Rétegmagasság limitek" msgid "Z-Hop" msgstr "Z-emelés" -msgid "Retraction when switching material" -msgstr "Visszahúzás anyagváltáskor" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12200,6 +12271,9 @@ msgstr " túl közel van a tiltott területhez, a nyomtatás során előfordulha msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " túl közel van a csomósodásészlelési területhez, és ez ütközést fog okozni.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "A kiválasztott fúvóka hőmérsékletek nem kompatibilisek. Mindegyik filament fúvóka hőmérsékletének a többi filament ajánlott fúvóka hőmérsékleti tartományába kell esnie. Ellenkező esetben a fúvóka eltömődhet vagy a nyomtató megsérülhet." @@ -12530,9 +12604,6 @@ msgstr "3MF használata G-kód helyett" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Kapcsold be, ha a nyomtató 3MF fájlt fogad el nyomtatási feladatként. Bekapcsolva az Orca Slicer a szeletelt fájlt .gcode.3mf formátumban küldi el egyszerű .gcode fájl helyett." -msgid "Printer Agent" -msgstr "Nyomtatóügynök" - msgid "Select the network agent implementation for printer communication." msgstr "Válaszd ki a nyomtató kommunikációjához használt hálózati ügynök implementációját." @@ -13220,9 +13291,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "A belső hidak sebessége. Ha az érték százalékban van megadva, a bridge_speed alapján lesz kiszámítva. Az alapértelmezett érték 150%." -msgid "Brim width" -msgstr "Perem szélessége" - msgid "This is the distance from the model to the outermost brim line." msgstr "A modell és a legkülső peremvonal közötti távolság" @@ -13302,6 +13370,12 @@ msgstr "" "Az éles szögek észlelése előtt a geometria egyszerűsítve lesz. Ez a paraméter a leegyszerűsítésnél figyelembe vett eltérés minimális hosszát adja meg.\n" "0 értékkel kikapcsolható." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "felfelé kompatibilis gép" @@ -14475,6 +14549,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "A felső felületi kitöltés gyorsulása. Alacsonyabb érték használata javíthatja a felső felület minőségét" @@ -15017,6 +15097,12 @@ msgstr "Milyen G-kóddal kompatibilis a nyomtató." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Granulátumos módosított nyomtató" @@ -16079,6 +16165,12 @@ msgstr "Hosszú visszahúzás extruderváltáskor" msgid "Retraction distance when extruder change" msgstr "Visszahúzási távolság extruderváltáskor" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z-emelés magassága" @@ -16172,6 +16264,9 @@ msgstr "Extra hossz újraindításkor" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Amikor a visszahúzás kompenzálásra kerül utazási mozgás után, az extruder ezt a további szálmennyiséget nyomja előre. Erre a beállításra ritkán van szükség." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Amikor a visszahúzás kompenzálásra kerül szerszámváltás után, az extruder ezt a további szálmennyiséget nyomja előre." @@ -16588,6 +16683,12 @@ msgstr "Szerszámcsere a törlőtoronyban" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "A szerszámcsere parancs (Tx) kiadása előtt a törlőtoronyhoz mozgatja a szerszámfejet. Csak a 2-es típusú törlőtornyot használó többextruderes (több szerszámfejes) nyomtatóknál van jelentősége. Az Orca alapértelmezés szerint kihagyja ezt a mozgást a több szerszámfejes gépeknél, mert a fejcserét a firmware kezeli. Emiatt azonban előfordulhat, hogy a Tx parancsot a nyomtatott tárgy felett adja ki. Kapcsold be ezt a beállítást, ha azt szeretnéd, hogy a szerszámcsere mindig a törlőtorony felett történjen." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Nincsenek ritka rétegek (béta)" @@ -19847,9 +19948,6 @@ msgstr "Fizikai nyomtató" msgid "Print Host upload" msgstr "Feltöltés a nyomtatóra" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Válaszd ki a nyomtatóval való kommunikációhoz használt hálózati ügynököt. Az elérhető ügynököket indításkor regisztrálja a rendszer." - # AI Translated msgid "Select a Flashforge printer" msgstr "Válassz egy Flashforge nyomtatót" @@ -20791,9 +20889,6 @@ msgstr "Bejelentkezés közben váratlan hiba történt, próbáld újra." msgid "User canceled." msgstr "Felhasználó által megszakítva." -msgid "Head diameter" -msgstr "Fej átmérő" - msgid "Max angle" msgstr "Maximális szög" @@ -21607,6 +21702,22 @@ msgstr "" "Kunkorodás elkerülése\n" "Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor az asztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "A rétegmagasság túl kicsi.\n" +#~ "A rendszer a min_layer_height értékre állítja.\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "A rétegmagasság meghaladja a Nyomtatóbeállítások -> Extruder -> Rétegmagasság limitek menüpontban megadott értéket, ez minőségbeli problémákat okozhat a nyomtatás során." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Szeretnéd az értéket automatikusan a beállított tartományhoz igazítani?\n" + +#~ msgid "Head diameter" +#~ msgstr "Fej átmérő" + #~ msgid "Print order within a single layer." #~ msgstr "Nyomtatási sorrend egyetlen rétegen belül." diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 3c43178102..8533b8b39f 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -4741,6 +4741,20 @@ msgstr "L'attuale temperatura della camera è superiore alla temperatura di sicu msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "La temperatura minima della camera (%d℃) è superiore alla temperatura target della camera (%d℃). Il valore minimo è la soglia alla quale inizia la stampa mentre la camera continua a riscaldarsi verso il target, quindi non dovrebbe superarlo. Verrà limitato al valore target." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Regola" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4860,6 +4874,12 @@ msgstr "" "Sì - Abilita generatore di pareti Arachne\n" "No - Disabilita generatore di pareti Arachne e imposta la modalità [Spostamento] della Superficie ruvida" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Larghezza tesa" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "La modalità spirale funziona solo quando i perimetri sono 1, il supporto è disabilitato, il rilevamento degli ammassi tramite sondaggio è disabilitato, gli strati superiori della shell sono 0, la densità del riempimento sparso è 0 e il tipo di timelapse è tradizionale." @@ -4875,6 +4895,9 @@ msgstr "" "Sì - Modifica queste impostazioni ed abilita la modalità spirale automaticamente\n" "No - Annulla l'attivazione della modalità a spirale" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Stampa" @@ -5114,6 +5137,12 @@ msgstr "Impossibile generare G-code di calibrazione" msgid "Calibration error" msgstr "Errore di calibrazione" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Rete non disponibile" @@ -5326,9 +5355,6 @@ msgstr "Schema non valido. Utilizzare N, N#K o un elenco separato da virgole con msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agenti di sistema" @@ -5973,7 +5999,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Dimensione:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Sono stati trovati conflitti di percorsi nel G-code sullo strato %d, Z = %.2lfmm. Si prega di separare gli oggetti in conflitto (%s <-> %s)." @@ -6154,6 +6180,9 @@ msgstr "Multi-dispositivo" msgid "Project" msgstr "Progetto" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Sì" @@ -6283,6 +6312,12 @@ msgstr "Salva progetto con nome" msgid "Save current project as" msgstr "Salva progetto corrente con nome" +msgid "Publish" +msgstr "Pubblica" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8083,6 +8118,12 @@ msgstr "Si prega di confermare che i G-code all'interno di questi profili sono s msgid "Customized Preset" msgstr "Profilo personalizzato" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF8!" @@ -8244,19 +8285,19 @@ msgstr "La directory per la sostituzione non è stata selezionata" msgid "Replaced with 3D files from directory:\n" msgstr "Sostituito con file 3D dalla directory:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Saltato %s: stesso file.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Saltato %s: il file non esiste.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Saltato %s: sostituzione fallita.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Sostituito %s.\n" @@ -8466,6 +8507,14 @@ msgstr "Salva file elaborato con nome:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Il file %s è stato inviato alla memoria della stampante e può essere visualizzato da lì." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Il tipo di ugello non è impostato. Impostare l'ugello e riprovare." @@ -9381,6 +9430,14 @@ msgstr "Mostra i profili non supportati" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Mostra i profili incompatibili/non supportati negli elenchi a discesa di stampante e filamento. Questi profili non possono essere selezionati." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Funzionalità sperimentali" @@ -9622,9 +9679,6 @@ msgstr "Vai alla pagina web di pubblicazione del modello" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: la preparazione può richiedere alcuni minuti. Si prega di avere pazienza." -msgid "Publish" -msgstr "Pubblica" - msgid "Publish was canceled" msgstr "La pubblicazione è stata annullata" @@ -9640,6 +9694,21 @@ msgstr "Caricamento dati" msgid "Jump to webpage" msgstr "Vai alla pagina web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Salva %s con nome" @@ -9650,9 +9719,21 @@ msgstr "Profilo utente" msgid "Preset Inside Project" msgstr "Profilo interno al progetto" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Scollega dal genitore" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Nome non disponibile." @@ -10392,22 +10473,6 @@ msgstr "Sei sicuro di voler abilitare questa opzione?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "I pattern di riempimento sono generalmente progettati per gestire automaticamente la rotazione per garantire una stampa corretta e ottenere gli effetti desiderati (ad es. Gyroid, Cubico). La rotazione del pattern di riempimento sparso corrente potrebbe portare a un supporto insufficiente. Procedere con cautela e verificare accuratamente eventuali problemi di stampa. Sei sicuro di voler abilitare questa opzione?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"L'altezza dello strato è troppo piccola.\n" -"Sarà impostato su min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "L'altezza dello strato supera il limite in Impostazioni stampante -> Estrusore -> Limiti Altezza Strato. Ciò potrebbe causare problemi di qualità di stampa." - -msgid "Adjust to the set range automatically?\n" -msgstr "Regolare automaticamente l'intervallo impostato?\n" - -msgid "Adjust" -msgstr "Regola" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funzionalità sperimentale: ritrazione e taglio del filamento a una distanza maggiore durante i cambi di filamento per ridurre al minimo lo spurgo. Sebbene possa ridurre notevolmente lo spurgo, può anche aumentare il rischio di intasamento degli ugelli o di altre complicazioni di stampa." @@ -10603,6 +10668,9 @@ msgstr "Parole chiave riservate trovate" msgid "Setting Overrides" msgstr "Sovrascrivi impostazioni" +msgid "Retraction when switching material" +msgstr "Retrazione quando si cambia materiale" + msgid "Basic information" msgstr "Informazioni di base" @@ -10734,6 +10802,12 @@ msgstr "Profili di processo compatibili" msgid "Printable space" msgstr "Spazio di stampa" +msgid "Printer Agent" +msgstr "Agente stampante" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Selezionare l'implementazione dell'agente di rete per la comunicazione con la stampante. Gli agenti disponibili vengono registrati all'avvio." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10859,9 +10933,6 @@ msgstr "Limiti altezza strati" msgid "Z-Hop" msgstr "Sollevamento Z" -msgid "Retraction when switching material" -msgstr "Retrazione quando si cambia materiale" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12221,6 +12292,9 @@ msgstr " è troppo vicino all'area di esclusione e si verificheranno collisioni. msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " è troppo vicino all'area di rilevamento ammassi e verranno causate collisioni.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Le temperature degli ugelli selezionate sono incompatibili. La temperatura dell'ugello per ciascun filamento deve rientrare nell'intervallo di temperatura consigliato per gli altri filamenti. In caso contrario, potrebbero verificarsi ostruzioni degli ugelli o danni alla stampante." @@ -12550,9 +12624,6 @@ msgstr "Usa 3MF invece di G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Abilita questa opzione se la stampante accetta un file 3MF come processo di stampa. Quando è abilitata, Orca Slicer invia il file elaborato come .gcode.3mf, invece di un semplice file .gcode." -msgid "Printer Agent" -msgstr "Agente stampante" - msgid "Select the network agent implementation for printer communication." msgstr "Selezionare l'implementazione dell'agente di rete per la comunicazione con la stampante." @@ -13239,9 +13310,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Velocità dei ponti interni. Se il valore è espresso in percentuale, verrà calcolato in base a bridge_speed. Il valore predefinito è 150%." -msgid "Brim width" -msgstr "Larghezza tesa" - msgid "This is the distance from the model to the outermost brim line." msgstr "Questa è la distanza tra il modello e la linea più esterna della tesa." @@ -13321,6 +13389,12 @@ msgstr "" "La geometria verrà decimata prima di rilevare gli spigoli vivi. Questo parametro indica la lunghezza minima dello scostamento per la decimazione.\n" "0 per disattivare." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "macchina compatibile con versioni successive" @@ -14495,6 +14569,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Accelerazione del riempimento della superficie superiore. L'utilizzo di un valore inferiore può migliorare la qualità della superficie superiore." @@ -15039,6 +15119,12 @@ msgstr "Con quale tipo di G-code la stampante è compatibile." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Stampante modificata per granuli" @@ -16098,6 +16184,12 @@ msgstr "Retrazione lunga al cambio estrusore" msgid "Retraction distance when extruder change" msgstr "Distanza di retrazione al cambio estrusore" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Altezza sollevamento Z" @@ -16195,6 +16287,9 @@ msgstr "Lunghezza aggiuntiva in ripresa" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Quando la retrazione è compensata dopo uno spostamento, l'estrusore espelle questa quantità aggiuntiva di filamento. Questa impostazione è raramente necessaria." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Quando la retrazione è compensata dopo un cambio di testina, l'estrusore espelle questa quantità aggiuntiva di filamento." @@ -16612,6 +16707,12 @@ msgstr "Cambio utensile sulla torre di spurgo" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Forza la testa di stampa a spostarsi sulla torre di spurgo prima di emettere il comando di cambio utensile (Tx). Rilevante solo per le stampanti multi-estrusore (multi-testa) che utilizzano una torre di spurgo di Tipo 2. Per impostazione predefinita Orca salta lo spostamento sulle macchine multi-testa perché il firmware gestisce il cambio della testa, il che può far sì che il comando Tx venga emesso sopra la parte stampata. Abilita questa opzione se desideri che il cambio utensile venga sempre emesso sopra la torre di spurgo." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Nessuno strato sparso (beta)" @@ -19865,9 +19966,6 @@ msgstr "Stampante fisica" msgid "Print Host upload" msgstr "Caricamento host di stampa" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Selezionare l'implementazione dell'agente di rete per la comunicazione con la stampante. Gli agenti disponibili vengono registrati all'avvio." - # AI Translated msgid "Select a Flashforge printer" msgstr "Seleziona una stampante Flashforge" @@ -20810,9 +20908,6 @@ msgstr "Si è verificato un problema imprevisto durante il tentativo di accesso. msgid "User canceled." msgstr "Utente rimosso." -msgid "Head diameter" -msgstr "Diametro testa" - msgid "Max angle" msgstr "Angolo massimo" @@ -21631,6 +21726,22 @@ msgstr "" "Evita le deformazioni\n" "Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "L'altezza dello strato è troppo piccola.\n" +#~ "Sarà impostato su min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "L'altezza dello strato supera il limite in Impostazioni stampante -> Estrusore -> Limiti Altezza Strato. Ciò potrebbe causare problemi di qualità di stampa." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Regolare automaticamente l'intervallo impostato?\n" + +#~ msgid "Head diameter" +#~ msgstr "Diametro testa" + #~ msgid "Print order within a single layer." #~ msgstr "Ordine di stampa all'interno di un singolo strato." diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 0d9f044060..2c28d2b166 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -4750,6 +4750,20 @@ msgstr "現在のチャンバー温度が材料の安全温度を超えていま msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "最低庫内温度 (%d℃) が目標庫内温度 (%d℃) を上回っています。最低値は、チャンバーが目標に向けて加熱を続けながら印刷を開始するしきい値であるため、目標値を超えてはいけません。値は目標値に制限されます。" +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "調整" + # AI Translated msgid "" "Layer height too small\n" @@ -4873,6 +4887,12 @@ msgstr "" "はい - Arachneウォールジェネレーターを有効にする\n" "いいえ - Arachneウォールジェネレーターを無効にし、ファジースキンを[変位]モードに設定する" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "ブリム幅" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "スパイラルモードは壁ループが1、サポートが無効、プロービングによるクランピング検出が無効、上部シェルレイヤーが0、スパースインフィル密度が0、タイムラプスタイプがトラディショナルの場合のみ機能します。" @@ -4888,6 +4908,10 @@ msgstr "" "はい - 変更して、スパイラルモードを有効にします\n" "いいえ - 変更せず、スパイラルモードを有効しません" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "造形中" @@ -5127,6 +5151,12 @@ msgstr "キャリブレーションG-codeの生成に失敗しました" msgid "Calibration error" msgstr "キャリブレーションエラー" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "ネットワークが利用できません" @@ -5338,10 +5368,6 @@ msgstr "無効なパターンです。N、N#K、またはオプション#K付き msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無効なフォーマット、%1%であるはずです。" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "システムエージェント" @@ -5988,7 +6014,7 @@ msgstr "ボリューム" msgid "Size:" msgstr "サイズ:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "レイヤー%d、Z = %.2lfmmでG-codeパスの衝突が検出されました。衝突するオブジェクトをもっと離してください(%s <-> %s)。" @@ -6164,6 +6190,9 @@ msgstr "マルチデバイス" msgid "Project" msgstr "プロジェクト" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "はい" @@ -6292,6 +6321,12 @@ msgstr "プロジェクトを名前を付けて保存" msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" +msgid "Publish" +msgstr "公開する" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" @@ -8097,6 +8132,12 @@ msgstr "これらのプリセット内のG-codeがマシンに損傷を与えな msgid "Customized Preset" msgstr "カスタマイズされたプリセット" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" @@ -8262,19 +8303,19 @@ msgstr "置換用のディレクトリが選択されていません" msgid "Replaced with 3D files from directory:\n" msgstr "ディレクトリの3Dファイルで置換しました:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ スキップ %s: 同一ファイル。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ スキップ %s: ファイルが存在しません。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ スキップ %s: 置換に失敗しました。\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ 置換しました %s。\n" @@ -8485,6 +8526,14 @@ msgstr "名前を付けて保存:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%sを送信しました、プリンターにて確認できます" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ノズルタイプが設定されていません。ノズルを設定して再試行してください。" @@ -9404,6 +9453,14 @@ msgstr "非対応のプリセットを表示" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "プリンターとフィラメントのドロップダウンリストに、互換性のない/非対応のプリセットを表示します。これらのプリセットは選択できません。" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "実験的機能" @@ -9644,9 +9701,6 @@ msgstr "モデル公開ページに移動" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "注意: 準備するには数分かかる場合があります、暫くお待ち下さい。" -msgid "Publish" -msgstr "公開する" - msgid "Publish was canceled" msgstr "公開は取り消しました" @@ -9662,6 +9716,21 @@ msgstr "データをアップロード中" msgid "Jump to webpage" msgstr "ウェブページに移動" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%sを名前つけて保存" @@ -9672,9 +9741,21 @@ msgstr "ユーザープリセット" msgid "Preset Inside Project" msgstr "プロジェクト プリセット" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "親から分離" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "名称は使用できません" @@ -10416,22 +10497,6 @@ msgstr "このオプションを有効にしてもよろしいですか?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "インフィルパターンは通常、適切な印刷と意図した効果を確保するために回転を自動的に処理するように設計されています(例: ジャイロイド、キュービック)。現在のスパースインフィルパターンを回転させると、サポートが不十分になる可能性があります。慎重に進め、潜在的な印刷問題を十分に確認してください。このオプションを有効にしてもよろしいですか?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"レイヤー高さが小さすぎます。\n" -"min_layer_heightに設定されます\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "レイヤー高さがプリンター設定 -> エクストルーダー -> レイヤー高さ制限の上限を超えています。印刷品質の問題が発生する可能性があります。" - -msgid "Adjust to the set range automatically?\n" -msgstr "設定範囲に自動調整しますか?\n" - -msgid "Adjust" -msgstr "調整" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "実験的機能: フィラメント交換時により長い距離でフィラメントをリトラクト・カットしてフラッシュを最小化します。フラッシュを大幅に削減できますが、ノズル詰まりやその他の印刷問題のリスクが高まる可能性もあります。" @@ -10621,6 +10686,9 @@ msgstr "保留キーワードが見つかりました" msgid "Setting Overrides" msgstr "上書き設定" +msgid "Retraction when switching material" +msgstr "素材変更時のリトラクション" + msgid "Basic information" msgstr "基本情報" @@ -10751,6 +10819,12 @@ msgstr "互換性のあるプロセスプロファイル" msgid "Printable space" msgstr "造形可能領域" +msgid "Printer Agent" +msgstr "プリンターエージェント" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "プリンター通信用のネットワークエージェント実装を選択します。使用可能なエージェントは起動時に登録されます。" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10877,9 +10951,6 @@ msgstr "積層ピッチの制限" msgid "Z-Hop" msgstr "Z-ホップ" -msgid "Retraction when switching material" -msgstr "素材変更時のリトラクション" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12258,6 +12329,9 @@ msgstr " は除外エリアに近すぎるため、衝突が発生します。\n msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " がクランピング検出エリアに近すぎ、衝突が発生します。\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "選択したノズル温度に互換性がありません。各フィラメントのノズル温度は、他のフィラメントの推奨ノズル温度範囲内に収まる必要があります。そうでない場合、ノズル詰まりやプリンターの損傷が発生する可能性があります。" @@ -12599,9 +12673,6 @@ msgstr "G-codeの代わりに3MFを使用" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "プリンターが印刷ジョブとして3MFファイルを受け付ける場合に有効にします。有効にすると、Orca Slicerはスライス済みファイルを通常の.gcodeファイルではなく.gcode.3mfとして送信します。" -msgid "Printer Agent" -msgstr "プリンターエージェント" - msgid "Select the network agent implementation for printer communication." msgstr "プリンター通信用のネットワークエージェント実装を選択します。" @@ -13320,9 +13391,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "内部ブリッジの速度です。値を%で指定した場合、bridge_speedを基準に計算されます。デフォルト値は150%です。" -msgid "Brim width" -msgstr "ブリム幅" - msgid "This is the distance from the model to the outermost brim line." msgstr "一番外側のブリム線がモデルと距離です。" @@ -13411,6 +13479,12 @@ msgstr "" "鋭角を検出する前にジオメトリが間引かれます。このパラメータは、間引きにおける偏差の最小長さを指定します。\n" "0で無効になります。" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "互換性のあるデバイス" @@ -14634,6 +14708,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "ジャイロイド" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "トップ面のインフィル加速度です。遅くすると表面の仕上がりが向上させることができます" @@ -15233,6 +15313,12 @@ msgstr "プリンターが対応するG-code" msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + # AI Translated msgid "Pellet Modded Printer" msgstr "ペレット改造プリンター" @@ -16374,6 +16460,12 @@ msgstr "押出機切り替え時のロングリトラクション" msgid "Retraction distance when extruder change" msgstr "押出機切替時のリトラクション距離" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + # AI Translated msgid "Z-hop height" msgstr "Zホップの高さ" @@ -16488,6 +16580,9 @@ msgstr "再開時の追加長さ" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "移動後に引込みが補償されると、エクストルーダーはこの追加量のフィラメントを押し出します。 この設定はほとんど必要ありません。" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "ツールの交換後に吸込み分が補正されると、エクストルーダーはこの追加量のフィラメントを押し出します。" @@ -16963,6 +17058,12 @@ msgstr "ワイプタワー上でツール交換" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "ツール交換コマンド (Tx) を発行する前に、ツールヘッドを強制的にワイプタワーへ移動させます。タイプ2のワイプタワーを使用するマルチ押出機 (マルチツールヘッド) プリンターにのみ関係します。デフォルトでは、マルチツールヘッド機ではファームウェアがヘッドの交換を処理するためOrcaは移動をスキップしますが、その結果Txコマンドが造形物の上で発行される場合があります。ツール交換を常にワイプタワーの上で発行したい場合は、このオプションを有効にしてください。" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + # AI Translated msgid "No sparse layers (beta)" msgstr "スパース層なし (ベータ)" @@ -20389,9 +20490,6 @@ msgstr "実物プリンター" msgid "Print Host upload" msgstr "プリントホストのアップロード" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "プリンター通信用のネットワークエージェント実装を選択します。使用可能なエージェントは起動時に登録されます。" - # AI Translated msgid "Select a Flashforge printer" msgstr "Flashforgeプリンターを選択" @@ -21363,9 +21461,6 @@ msgstr "ログイン中に予期しない問題が発生しました。再試行 msgid "User canceled." msgstr "ユーザーがキャンセルしました。" -msgid "Head diameter" -msgstr "直径" - msgid "Max angle" msgstr "最大角度" @@ -22194,6 +22289,22 @@ msgstr "" "反りを避ける\n" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "レイヤー高さが小さすぎます。\n" +#~ "min_layer_heightに設定されます\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "レイヤー高さがプリンター設定 -> エクストルーダー -> レイヤー高さ制限の上限を超えています。印刷品質の問題が発生する可能性があります。" + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "設定範囲に自動調整しますか?\n" + +#~ msgid "Head diameter" +#~ msgstr "直径" + #~ msgid "Print order within a single layer." #~ msgstr "単一レイヤー内の印刷順序。" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 5a6ac0438b..5e81f19e0d 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -4763,6 +4763,20 @@ msgstr "현재 챔버 온도가 재료의 안전 온도보다 높으므로 재 msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "최소 챔버 온도(%d℃)가 목표 챔버 온도(%d℃)보다 높습니다. 최소값은 챔버가 목표 온도까지 계속 가열되는 동안 출력을 시작하는 기준값이므로 목표값을 초과해서는 안 됩니다. 이 값은 목표값으로 제한됩니다." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "조정" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4884,6 +4898,12 @@ msgstr "" "예 - 아라크네 벽 생성기 활성화\n" "아니오 - 아라크네 벽 생성기 비활성화 및 퍼지 스킨 [변위] 모드 설정" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "브림 너비" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "나선형 모드는 벽 루프가 1이고, 서포트가 비활성화되고, 프로빙에 의한 클럼핑 감지가 비활성화되고, 상단 셸 레이어가 0이고, 희소 인필 밀도가 0이고 타임랩스 유형이 전통적인 경우에만 작동합니다." @@ -4899,6 +4919,10 @@ msgstr "" "예 - 이 설정을 변경하고 나선 모드를 자동으로 활성화합니다\n" "아니오 - 이번에는 나선 모드 사용을 포기합니다" +# AI Translated +msgid "N/A" +msgstr "해당 없음" + msgid "Printing" msgstr "출력 중" @@ -5138,6 +5162,12 @@ msgstr "교정 Gcode를 생성하지 못했습니다" msgid "Calibration error" msgstr "교정 오류" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "네트워크를 사용할 수 없음" @@ -5350,10 +5380,6 @@ msgstr "잘못된 패턴입니다. N, N#K 또는 항목당 선택적 #K가 있 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "잘못된 형식입니다. 필요한 벡터 형식: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "해당 없음" - # AI Translated msgid "System agents" msgstr "시스템 에이전트" @@ -6001,7 +6027,7 @@ msgstr "용량:" msgid "Size:" msgstr "크기:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "레이어 %d, Z = %.2lf mm에서 Gcode 경로 충돌이 발견되었습니다. 충돌하는 객체를 더 멀리 분리하세요 (%s <-> %s)." @@ -6178,6 +6204,9 @@ msgstr "멀티 디바이스" msgid "Project" msgstr "프로젝트" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "예" @@ -6306,6 +6335,12 @@ msgstr "프로젝트 다른 이름으로 저장" msgid "Save current project as" msgstr "현재 프로젝트 다른 이름으로 저장" +msgid "Publish" +msgstr "게시" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" @@ -8115,6 +8150,12 @@ msgstr "이러한 사전 설정 내의 Gcode가 기계 손상을 방지할 수 msgid "Customized Preset" msgstr "사용자 정의 프리셋" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 파일 내부의 구성 요소 이름이 UTF8 형식이 아닙니다!" @@ -8288,22 +8329,22 @@ msgid "Replaced with 3D files from directory:\n" msgstr "다음 디렉터리의 3D 파일로 교체했습니다:\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ 건너뜀 %s: 동일한 파일입니다.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ 건너뜀 %s: 파일이 존재하지 않습니다.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ 건너뜀 %s: 교체하지 못했습니다.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ %s을(를) 교체했습니다.\n" @@ -8518,6 +8559,14 @@ msgstr "슬라이스 파일을 다음으로 저장:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s 파일이 프린터의 저장 공간으로 전송되었으며 프린터에서 볼 수 있습니다." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "노즐 유형이 설정되지 않았습니다. 노즐을 설정하고 다시 시도하세요." @@ -9491,6 +9540,14 @@ msgstr "지원되지 않는 사전 설정 표시" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "프린터 및 필라멘트 드롭다운 목록에 호환되지 않거나 지원되지 않는 사전 설정을 표시합니다. 이러한 사전 설정은 선택할 수 없습니다." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "실험적 기능" @@ -9733,9 +9790,6 @@ msgstr "모델 게시 웹 페이지로 이동" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "참고: 준비하는 데 몇 분 정도 걸릴 수 있습니다. 조금만 기다려 주십시오." -msgid "Publish" -msgstr "게시" - msgid "Publish was canceled" msgstr "게시가 취소되었습니다" @@ -9752,6 +9806,21 @@ msgstr "데이터 업로드 중" msgid "Jump to webpage" msgstr "웹 페이지로 이동" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s을(를) 다음으로 저장" @@ -9762,10 +9831,22 @@ msgstr "사용자 사전 설정" msgid "Preset Inside Project" msgstr "프로젝트 내부 사전 설정" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "상위 항목에서 분리" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "이름을 사용할 수 없습니다." @@ -10519,22 +10600,6 @@ msgstr "이 옵션을 사용하시겠습니까?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "채우기 패턴은 일반적으로 올바른 출력과 의도한 효과를 위해 회전을 자동으로 처리하도록 설계되어 있습니다(예: 자이로이드, 큐빅). 현재 드문 채우기 패턴을 회전시키면 지지력이 부족해질 수 있습니다. 신중하게 진행하고 출력 문제가 발생하지 않는지 충분히 확인하십시오. 이 옵션을 활성화하시겠습니까?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"레이어 높이가 너무 작습니다.\n" -"min_layer_height로 설정됩니다.\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "레이어 높이가 프린터 설정 -> 압출기 -> 레이어의 제한을 초과합니다.높이 제한으로 인해 출력 품질 문제가 발생할 수 있습니다." - -msgid "Adjust to the set range automatically?\n" -msgstr "설정 범위에 자동으로 맞춰지나요?\n" - -msgid "Adjust" -msgstr "조정" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "실험적 기능: 플러시를 최소화하기 위해 필라멘트 교체 중에 더 먼 거리에서 필라멘트를 집어넣고 절단합니다. 플러시를 눈에 띄게 줄일 수 있지만 노즐 막힘이나 기타 출력 문제의 위험이 높아질 수도 있습니다." @@ -10728,6 +10793,9 @@ msgstr "예약어를 찾았습니다" msgid "Setting Overrides" msgstr "설정 덮어쓰기" +msgid "Retraction when switching material" +msgstr "재료 전환 시 후퇴" + msgid "Basic information" msgstr "기본 정보" @@ -10861,6 +10929,14 @@ msgstr "호환 프로세스 사전설정" msgid "Printable space" msgstr "출력 가능 공간" +# AI Translated +msgid "Printer Agent" +msgstr "프린터 에이전트" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "프린터 통신에 사용할 네트워크 에이전트 구현을 선택합니다. 사용 가능한 에이전트는 시작 시 등록됩니다." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10993,9 +11069,6 @@ msgstr "레이어 높이 한도" msgid "Z-Hop" msgstr "Z올리기" -msgid "Retraction when switching material" -msgstr "재료 전환 시 후퇴" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12388,6 +12461,9 @@ msgstr " 이(가) 제외 영역에 너무 가깝습니다. 출력 시 충돌이 msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " 뭉침 감지 영역에 너무 가까워 충돌이 발생할 수 있습니다.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "선택한 노즐 온도가 서로 호환되지 않습니다. 각 필라멘트의 노즐 온도는 다른 필라멘트의 권장 노즐 온도 범위 안에 있어야 합니다. 그렇지 않으면 노즐 막힘이나 프린터 손상이 발생할 수 있습니다." @@ -12732,10 +12808,6 @@ msgstr "G-code 대신 3MF 사용" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "프린터가 출력 작업으로 3MF 파일을 허용하는 경우 이 옵션을 활성화하십시오. 활성화하면 Orca Slicer가 슬라이스된 파일을 일반 .gcode 파일 대신 .gcode.3mf로 전송합니다." -# AI Translated -msgid "Printer Agent" -msgstr "프린터 에이전트" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "프린터 통신에 사용할 네트워크 에이전트 구현을 선택합니다." @@ -13446,9 +13518,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "내부 브릿지의 속도. 값을 백분율로 표현하면 bridge_speed를 기준으로 계산됩니다. 기본값은 150%입니다." -msgid "Brim width" -msgstr "브림 너비" - msgid "This is the distance from the model to the outermost brim line." msgstr "모델과 가장 바깥쪽 브림 선까지의 거리" @@ -13533,6 +13602,12 @@ msgstr "" "날카로운 각도를 감지하기 전에 형상이 무시됩니다. 이 매개변수는 무시하는 형상의 최소 길이를 나타냅니다.\n" "0으로 비활성화합니다" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "상향 호환 장치" @@ -14729,6 +14804,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "자이로이드" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "상단 표면 가속도. 낮은 값을 사용하면 상단 표면 품질이 향상될 수 있습니다" @@ -15291,6 +15372,12 @@ msgstr "프린터와 호환되는 Gcode 종류" msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "펠릿 프린터" @@ -16400,6 +16487,12 @@ msgstr "압출기 교체 시 긴 수축" msgid "Retraction distance when extruder change" msgstr "압출기 교체 시 수축 거리" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z올리기 높이" @@ -16498,6 +16591,9 @@ msgstr "재 시작 시 추가 길이" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "이동 후 후퇴가 보상되면 압출기는 이 추가 양의 필라멘트를 밀어냅니다. 이 설정은 거의 필요하지 않습니다." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "툴 체인지 후 후퇴가 보상되면 압출기는 이 추가 양의 필라멘트를 밀어냅니다." @@ -16922,6 +17018,12 @@ msgstr "프라임 타워에서 툴 체인지" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "툴 체인지 명령(Tx)을 실행하기 전에 툴헤드가 반드시 프라임 타워로 이동하도록 합니다. 유형 2 프라임 타워를 사용하는 다중 압출기(멀티 툴헤드) 프린터에만 해당됩니다. 기본적으로 Orca는 멀티 툴헤드 장비에서 펌웨어가 헤드 교체를 처리하므로 이동을 생략하는데, 이 때문에 Tx 명령이 출력물 위에서 실행될 수 있습니다. 툴 체인지가 항상 프라임 타워 위에서 실행되도록 하려면 이 옵션을 활성화하십시오." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "희소 레이어 없음(베타)" @@ -20261,10 +20363,6 @@ msgstr "물리 프린터" msgid "Print Host upload" msgstr "출력 호스트 업로드" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "프린터 통신에 사용할 네트워크 에이전트 구현을 선택합니다. 사용 가능한 에이전트는 시작 시 등록됩니다." - # AI Translated msgid "Select a Flashforge printer" msgstr "Flashforge 프린터 선택" @@ -21217,9 +21315,6 @@ msgstr "로그인을 시도하는 동안 예기치 않은 문제가 발생했습 msgid "User canceled." msgstr "사용자가 취소했습니다." -msgid "Head diameter" -msgstr "헤드 직경" - msgid "Max angle" msgstr "최대 각도" @@ -22057,6 +22152,22 @@ msgstr "" "뒤틀림 방지\n" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "레이어 높이가 너무 작습니다.\n" +#~ "min_layer_height로 설정됩니다.\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "레이어 높이가 프린터 설정 -> 압출기 -> 레이어의 제한을 초과합니다.높이 제한으로 인해 출력 품질 문제가 발생할 수 있습니다." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "설정 범위에 자동으로 맞춰지나요?\n" + +#~ msgid "Head diameter" +#~ msgstr "헤드 직경" + #~ msgid "Print order within a single layer." #~ msgstr "단일 레이어 내의 출력 순서" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 9a6b7ae590..aac9ef9dc6 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -4728,6 +4728,20 @@ msgstr "Dabartinė kameros temperatūra yra aukštesnė už saugią medžiagos t msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Minimali kameros temperatūra (%d℃) yra aukštesnė nei tikslinė kameros temperatūra (%d℃). Minimali vertė yra slenkstis, kurį pasiekus pradedamas spausdinimas, kol kamera vis dar kaitinama iki tikslinės temperatūros, todėl ji neturėtų viršyti tikslinės. Vertė bus apribota iki tikslinės temperatūros." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Sureguliuoti" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4847,6 +4861,12 @@ msgstr "" "Taip – įjungti „Arachne“ sienelių generatorių\n" "Ne – išjungti „Arachne“ sienelių generatorių ir nustatyti „Šiurkštaus paviršius“ režimą [Slinktis]" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Pado apvado plotis" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Spiralinis režimas veikia tik tada, kai sienelės kilpų skaičius yra 1, atramos išjungtos, sulipimo aptikimas zonduojant išjungtas, viršutinių apvalkalo sluoksnių yra 0, reto užpildo tankis yra 0 %, o laiko intervalų vaizdo įrašo tipas – tradicinis." @@ -4862,6 +4882,9 @@ msgstr "" "Taip – pakeisti šiuos nustatymus ir automatiškai įjungti spiralinį režimą\n" "Ne – nenaudoti spiralinio režimo" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Spausdinimas" @@ -5101,6 +5124,12 @@ msgstr "Nepavyko sugeneruoti kalibravimo G-kodo" msgid "Calibration error" msgstr "Kalibravimo klaida" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Tinklas neprieinamas" @@ -5313,9 +5342,6 @@ msgstr "Neteisingas šablonas. Naudokite N, N#K arba kableliais atskirtą sąra msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Netinkamas formatas. Tinkamas vektorinis formatas: \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Sisteminiai agentai" @@ -5961,7 +5987,7 @@ msgstr "Tūris:" msgid "Size:" msgstr "Dydis:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Rasta G-kodo trajektorijų konfliktų %d sluoksnyje, Z = %.2lfmm. Prašome labiau atskirti konfliktuojančius objektus (%s <-> %s)." @@ -6142,6 +6168,9 @@ msgstr "Kelių įrenginių valdymas (Multi-device)" msgid "Project" msgstr "Projektas" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Taip" @@ -6269,6 +6298,12 @@ msgstr "Įrašyti projektą kaip" msgid "Save current project as" msgstr "Įrašyti dabartinį projektą kaip" +msgid "Publish" +msgstr "Talpinti" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuoti 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8074,6 +8109,12 @@ msgstr "Patvirtinkite, kad šiuose profiliuose esantis G-kodas yra saugus, kad i msgid "Customized Preset" msgstr "Pritaikytas profilis" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" @@ -8239,19 +8280,19 @@ msgstr "" "Pakeista 3D failais iš katalogo:\n" "\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Praleistas %s: tas pats failas.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Praleistas %s: failas neegzistuoja.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Praleistas %s: nepavyko pakeisti.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Pakeistas %s.\n" @@ -8461,6 +8502,14 @@ msgstr "Išsaugoti susluoksniuotą failą kaip:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Failas %s išsiųstas į spausdintuvo laikmeną ir gali būti peržiūrimas spausdintuve." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Purkštuko tipas nenustatytas. Nustatykite purkštuką ir bandykite dar kartą." @@ -9329,6 +9378,14 @@ msgstr "Rodyti nepalaikomus profilius" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Rodyti nesuderinamus / nepalaikomus profilius spausdintuvų ir gijų išskleidžiamuosiuose sąrašuose. Šių profilių pasirinkti negalima." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Eksperimentinis" @@ -9562,9 +9619,6 @@ msgstr "Pereiti į modelio talpinimo interneto puslapį" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Pastaba: paruošimas gali užtrukti kelias minutes. Būkite kantrūs." -msgid "Publish" -msgstr "Talpinti" - msgid "Publish was canceled" msgstr "Publikavimas buvo atšauktas" @@ -9580,6 +9634,21 @@ msgstr "Įkeliami duomenys" msgid "Jump to webpage" msgstr "Pereiti į interneto puslapį" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Išsaugoti %s kaip" @@ -9590,9 +9659,21 @@ msgstr "Naudotojo profilis" msgid "Preset Inside Project" msgstr "Profilis projekto viduje" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Atskirti nuo tėvinio profilio" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Nėra pavadinimo." @@ -10330,24 +10411,6 @@ msgstr "Ar tikrai norite įjungti šią parinktį?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Užpildymo modeliai paprastai yra suprojektuoti taip, kad automatiškai tvarkytų sukimąsi, siekiant užtikrinti tinkamą spausdinimą ir pasiekti numatytus efektus (pvz., Gyroid, Cubic). Sukant esamą retą užpildymo modelį, gali atsirasti nepakankamas atraminis paviršius. Prašome elgtis atsargiai ir atidžiai patikrinti, ar nėra galimų spausdinimo problemų. Ar tikrai norite įjungti šią parinktį?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Per mažas sluoksnio aukštis.\n" -"Jis bus nustatytas į min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Sluoksnio aukštis viršija ribą, nurodytą Spausdintuvo nustatymai -> Ekstruderis -> Sluoksnio aukščio ribos, tai gali sukelti spausdinimo kokybės problemų." - -msgid "Adjust to the set range automatically?\n" -msgstr "" -"Sureguliuoti pagal nustatytą diapazoną automatiškai?\n" -"\n" - -msgid "Adjust" -msgstr "Sureguliuoti" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Eksperimentinė funkcija: gijos įtraukimas ir nukirpimas didesniu atstumu keičiant giją, siekiant sumažinti išvalymą (flush). Nors tai gali pastebimai sumažinti išvalymą, taip pat gali padidėti purkštuko užsikimšimo ar kitų spausdinimo komplikacijų rizika." @@ -10547,6 +10610,9 @@ msgstr "Rasti rezervuoti raktažodžiai" msgid "Setting Overrides" msgstr "Nustatymų perrašymas" +msgid "Retraction when switching material" +msgstr "Įtraukimas keičiant medžiagą" + msgid "Basic information" msgstr "Pagrindinė informacija" @@ -10673,6 +10739,12 @@ msgstr "Suderinami apdorojimo profiliai" msgid "Printable space" msgstr "Erdvė spausdinimui" +msgid "Printer Agent" +msgstr "Spausdintuvo agentas" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Pasirinkite tinklo agento modulį ryšiui su spausdintuvu palaikyti. Prieinami agentai užregistruojami paleidimo metu." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10798,9 +10870,6 @@ msgstr "Sluoksnio aukščio ribos" msgid "Z-Hop" msgstr "Z šuolis" -msgid "Retraction when switching material" -msgstr "Įtraukimas keičiant medžiagą" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12146,6 +12215,9 @@ msgstr "" " yra per arti sulipimo aptikimo zonos, todėl įvyks susidūrimai.\n" "\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Pasirinktos purkštuko temperatūros yra nesuderinamos. Kiekvienos gijos purkštuko temperatūra turi patekti į kitų gijų rekomenduojamos temperatūros diapazoną. Priešingu atveju gali užsikimšti purkštukas arba sugesti spausdintuvas." @@ -12459,9 +12531,6 @@ msgstr "Vietoj G-kodo naudoti 3MF" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Įjunkite, jei spausdintuvas spausdinimo užduotims priima 3MF failus. Kai įjungta, „Orca Slicer“ sugeneruotą failą siunčia kaip „.gcode.3mf“, o ne kaip paprastą „.gcode“ failą." -msgid "Printer Agent" -msgstr "Spausdintuvo agentas" - msgid "Select the network agent implementation for printer communication." msgstr "Pasirinkite tinklo agento modulį ryšiui su spausdintuvu palaikyti." @@ -13134,9 +13203,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Vidinių tiltelių spausdinimo greitis. Jei reikšmė nurodoma procentais, ji apskaičiuojama pagal „bridge_speed“ (tiltelių greitį). Numatytoji reikšmė – 150 %." -msgid "Brim width" -msgstr "Pado apvado plotis" - msgid "This is the distance from the model to the outermost brim line." msgstr "Atstumas nuo modelio iki išorinės krašto linijos" @@ -13217,6 +13283,12 @@ msgstr "" "Prieš aptinkant aštrius kampus, geometrija yra supaprastinama (decimuojama). Šis parametras nurodo minimalų nuokrypio ilgį supaprastinimui atlikti.\n" "Įrašykite 0, kad išjungtumėte." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "atgaliniu būdu suderinamas įrenginys" @@ -14370,6 +14442,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroidas" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Viršutinio paviršiaus užpildo pagreitis. Naudojant mažesnę vertę gali pagerėti viršutinio paviršiaus kokybė." @@ -14914,6 +14992,12 @@ msgstr "Su kokiu G kodu suderinamas spausdintuvas." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Modifikuotas granulinis spausdintuvas" @@ -15955,6 +16039,12 @@ msgstr "Ilgas įtraukimas keičiant ekstruderį" msgid "Retraction distance when extruder change" msgstr "Įtraukimo atstumas keičiant ekstruderį" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "„Z-hop“ (pakėlimo) aukštis" @@ -16049,6 +16139,9 @@ msgstr "Papildomas ilgis po sugrąžinimo" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Kai po judėjimo kompensuojamas gijos įtraukimas, ekstruderis papildomai išstums šį gijos kiekį. Šis nustatymas reikalingas retai." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Kai po įrankio pakeitimo kompensuojamas gijos įtraukimas, ekstruderis papildomai išstums šį gijos kiekį." @@ -16461,6 +16554,12 @@ msgstr "Įrankio keitimas virš valymo bokšto" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Priverstinai nukreipti spausdinimo galvutę prie valymo bokšto prieš vykdant įrankio keitimo komandą (Tx). Aktualu tik spausdintuvams su keliais ekstruderiais (keliomis galvutėmis), naudojantiems 2 tipo valymo bokštą. Pagal numatytuosius nustatymus „OrcaSlicer“ praleidžia šį judesį kelių galvučių įrenginiuose, nes galvučių sukeitimą valdo aparatinė programinė įranga, todėl Tx komanda gali būti įvykdyta virš spausdinamos detalės. Įjunkite šią parinktį, jei norite, kad įrankio keitimas visada vyktų virš valymo bokšto." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Nėra retų sluoksnių (beta)" @@ -19702,9 +19801,6 @@ msgstr "Fizinis spausdintuvas" msgid "Print Host upload" msgstr "Įkėlimas spausdinimui tinkle" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Pasirinkite tinklo agento modulį ryšiui su spausdintuvu palaikyti. Prieinami agentai užregistruojami paleidimo metu." - msgid "Select a Flashforge printer" msgstr "Pasirinkite „Flashforge“ spausdintuvą" @@ -20552,9 +20648,6 @@ msgstr "Bandant prisijungti įvyko kažkas netikėto. Bandykite dar kartą." msgid "User canceled." msgstr "Vartotojas atšaukė." -msgid "Head diameter" -msgstr "Galvutės skersmuo" - msgid "Max angle" msgstr "Maksimalus kampas" @@ -21336,6 +21429,24 @@ msgstr "" "Venkite deformacijų (warping)\n" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Per mažas sluoksnio aukštis.\n" +#~ "Jis bus nustatytas į min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Sluoksnio aukštis viršija ribą, nurodytą Spausdintuvo nustatymai -> Ekstruderis -> Sluoksnio aukščio ribos, tai gali sukelti spausdinimo kokybės problemų." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "" +#~ "Sureguliuoti pagal nustatytą diapazoną automatiškai?\n" +#~ "\n" + +#~ msgid "Head diameter" +#~ msgstr "Galvutės skersmuo" + #~ msgid "Print order within a single layer." #~ msgstr "Elementų spausdinimo eiliškumas vieno sluoksnio ribose." diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 1ae53b2888..4d37e65fee 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -5150,6 +5150,20 @@ msgstr "De huidige kamertemperatuur is hoger dan de veilige temperatuur van het msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "De minimale kamertemperatuur (%d℃) is hoger dan de doelkamertemperatuur (%d℃). De minimale waarde is de drempel waarbij het printen start terwijl de kamer verder opwarmt naar de doelwaarde; deze mag die dus niet overschrijden. De waarde wordt begrensd tot de doelwaarde." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Aanpassen" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -5277,6 +5291,12 @@ msgstr "" "Ja - Arachne-wandgenerator inschakelen\n" "Nee - Arachne-wandgenerator uitschakelen en de modus [Displacement] van Vage buitenkant instellen" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Rand breedte" + # AI Translated msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "De spiraalmodus werkt alleen wanneer Wanden 1 is, ondersteuning is uitgeschakeld, klontdetectie via aftasten is uitgeschakeld, het aantal bovenste buitenlagen 0 is, de dichtheid van de dunne vulling (infill) 0 is en het timelapse-type traditioneel is." @@ -5293,6 +5313,9 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" +msgid "N/A" +msgstr "N/B" + msgid "Printing" msgstr "Printen" @@ -5582,6 +5605,12 @@ msgstr "Cali G-code niet gegenereerd" msgid "Calibration error" msgstr "Kalibratiefout" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Netwerk niet beschikbaar" @@ -5821,9 +5850,6 @@ msgstr "Ongeldig patroon. Gebruik N, N#K of een door komma's gescheiden lijst me msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Onjuist formaat. Het Vector formaat wordt verwacht: \"%1%\"" -msgid "N/A" -msgstr "N/B" - # AI Translated msgid "System agents" msgstr "Systeemagenten" @@ -6513,7 +6539,7 @@ msgid "Size:" msgstr "Maat:" # AI Translated -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Er zijn conflicten tussen G-code-paden gevonden op laag %d, Z = %.2lfmm. Plaats de conflicterende objecten verder uit elkaar (%s <-> %s)." @@ -6714,6 +6740,9 @@ msgstr "Meerdere apparaten" msgid "Project" msgstr "Project" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Ja" @@ -6844,6 +6873,12 @@ msgstr "Bewaar project als" msgid "Save current project as" msgstr "Bewaar huidig project als" +msgid "Publish" +msgstr "Publiceren" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF importeren" @@ -8824,6 +8859,12 @@ msgstr "Controleer of de G-codes in deze presets veilig zijn om schade aan de ma msgid "Customized Preset" msgstr "Aangepaste voorinstelling" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" @@ -8999,22 +9040,22 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Vervangen door 3D-bestanden uit de map:\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Overgeslagen %s: hetzelfde bestand.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Overgeslagen %s: bestand bestaat niet.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Overgeslagen %s: vervangen is mislukt.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Vervangen %s.\n" @@ -9235,6 +9276,14 @@ msgstr "Bewaar het geslicede bestand als:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Het bestand %s is naar de opslagruimte van de printer gestuurd en kan op de printer worden bekeken." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Het mondstuktype is niet ingesteld. Stel het mondstuk in en probeer het opnieuw." @@ -10243,6 +10292,14 @@ msgstr "Niet-ondersteunde voorinstellingen tonen" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Toon incompatibele/niet-ondersteunde voorinstellingen in de keuzelijsten voor printer en filament. Deze voorinstellingen kunnen niet worden geselecteerd." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Experimentele functies" @@ -10494,9 +10551,6 @@ msgstr "Ga naar de website om het model te publiceren" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notitie: het voorbereiden kan enkele minuten duren. Even geduld alstublieft." -msgid "Publish" -msgstr "Publiceren" - msgid "Publish was canceled" msgstr "Het publiceren is geannuleerd" @@ -10513,6 +10567,21 @@ msgstr "Gegevens uploaden" msgid "Jump to webpage" msgstr "Ga naar de website" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Bewaar %s als" @@ -10523,10 +10592,22 @@ msgstr "Gebruikersvoorinstelling" msgid "Preset Inside Project" msgstr "Voorinstelling binnen project" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Losmaken van bovenliggend element" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Naam is niet beschikbaar." @@ -11336,22 +11417,6 @@ msgstr "Weet u zeker dat u deze optie wilt inschakelen?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Vulpatronen zijn doorgaans ontworpen om rotatie automatisch af te handelen, zodat ze goed printen en hun beoogde effect bereiken (bijv. Gyroide, Kubisch). Het roteren van het huidige patroon voor de dunne vulling (infill) kan tot onvoldoende ondersteuning leiden. Ga voorzichtig te werk en controleer grondig op mogelijke printproblemen. Weet u zeker dat u deze optie wilt inschakelen?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Laaghoogte is te klein.\n" -"Het zal worden ingesteld op min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "De laaghoogte overschrijdt de limiet in Printerinstellingen -> Extruder -> Laaghoogtelimieten, dit kan problemen met de afdrukkwaliteit veroorzaken." - -msgid "Adjust to the set range automatically?\n" -msgstr "Automatisch aanpassen aan het ingestelde bereik?\n" - -msgid "Adjust" -msgstr "Aanpassen" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Experimentele functie: Het filament op grotere afstand terugtrekken en afsnijden tijdens filamentwisselingen om flush te minimaliseren. Hoewel het het doorspoelen aanzienlijk kan verminderen, kan het ook het risico op een verstopt mondstuk of andere printcomplicaties vergroten." @@ -11551,6 +11616,9 @@ msgstr "Gereserveerde zoekworden gevonden" msgid "Setting Overrides" msgstr "Overschrijvingen instellen" +msgid "Retraction when switching material" +msgstr "Terugtrekken (retraction) bij het wisselen van filament" + msgid "Basic information" msgstr "Basisinformatie" @@ -11689,6 +11757,14 @@ msgstr "Geschikte proces profielen" msgid "Printable space" msgstr "Ruimte waarbinnen geprint kan worden" +# AI Translated +msgid "Printer Agent" +msgstr "Printeragent" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Selecteer de implementatie van de netwerkagent voor de communicatie met de printer. Beschikbare agenten worden bij het opstarten geregistreerd." + # AI Translated #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format @@ -11829,9 +11905,6 @@ msgstr "Limieten voor laaghoogte" msgid "Z-Hop" msgstr "Z-hop" -msgid "Retraction when switching material" -msgstr "Terugtrekken (retraction) bij het wisselen van filament" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -13323,6 +13396,9 @@ msgstr " bevindt zich te dicht bij het uitsluitingsgebied en er zullen botsingen msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " ligt te dicht bij het gebied voor klontdetectie, waardoor er botsingen zullen ontstaan.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "De geselecteerde mondstuktemperaturen zijn niet compatibel. De mondstuktemperatuur van elk filament moet binnen het aanbevolen mondstuktemperatuurbereik van de andere filamenten vallen. Anders kan het mondstuk verstopt raken of kan de printer beschadigd raken." @@ -13686,10 +13762,6 @@ msgstr "3MF gebruiken in plaats van G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Schakel dit in als de printer een 3MF-bestand als printopdracht accepteert. Indien ingeschakeld verzendt Orca Slicer het geslicede bestand als een .gcode.3mf in plaats van als een gewoon .gcode-bestand." -# AI Translated -msgid "Printer Agent" -msgstr "Printeragent" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Selecteer de implementatie van de netwerkagent voor de communicatie met de printer." @@ -14443,9 +14515,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Snelheid van interne bruggen. Als de waarde als percentage wordt uitgedrukt, wordt deze berekend op basis van bridge_speed. De standaardwaarde is 150%." -msgid "Brim width" -msgstr "Rand breedte" - msgid "This is the distance from the model to the outermost brim line." msgstr "Dit is de afstand van het model tot de buitenste randlijn." @@ -14537,6 +14606,12 @@ msgstr "" "De geometrie wordt vereenvoudigd voordat scherpe hoeken worden gedetecteerd. Deze parameter geeft de minimale lengte van de afwijking voor die vereenvoudiging aan.\n" "0 om uit te schakelen." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "opwaarts compatibele machine" @@ -15846,6 +15921,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroide" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Versnelling van de topoppervlakte-invulling. Gebruik van een lagere waarde kan de kwaliteit van de bovenlaag verbeteren." @@ -16456,6 +16537,12 @@ msgstr "Het type G-code waarmee de printer compatibel is." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + # AI Translated msgid "Pellet Modded Printer" msgstr "Printer omgebouwd voor pellets" @@ -17653,6 +17740,12 @@ msgstr "Lange terugtrekking bij extruderwissel" msgid "Retraction distance when extruder change" msgstr "Terugtrekafstand bij extruderwissel" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + # AI Translated msgid "Z-hop height" msgstr "Z-hop-hoogte" @@ -17763,6 +17856,9 @@ msgstr "Extra lengte bij herstart" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Als retracten wordt gecompenseerd na een beweging, wordt deze extra hoeveelheid filament geëxtrudeerd. Deze instelling is zelden van toepassing." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Als retracten wordt gecompenseerd na een toolwisseling, wordt deze extra hoeveelheid filament geëxtrudeerd." @@ -18255,6 +18351,12 @@ msgstr "Toolwissel op het afveegblok" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Dwing de printkop naar het afveegblok te bewegen voordat de opdracht voor de toolwissel (Tx) wordt gegeven. Alleen relevant voor printers met meerdere extruders (meerdere printkoppen) die een afveegblok van type 2 gebruiken. Standaard slaat Orca deze verplaatsing op machines met meerdere printkoppen over, omdat de firmware de kopwissel afhandelt, waardoor de Tx-opdracht boven het geprinte onderdeel kan worden gegeven. Schakel deze optie in als u wilt dat de toolwissel altijd boven het afveegblok wordt uitgevoerd." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + # AI Translated msgid "No sparse layers (beta)" msgstr "Geen dunne lagen (bèta)" @@ -21860,10 +21962,6 @@ msgstr "Fysieke printer" msgid "Print Host upload" msgstr "Host-upload afdrukken" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Selecteer de implementatie van de netwerkagent voor de communicatie met de printer. Beschikbare agenten worden bij het opstarten geregistreerd." - # AI Translated msgid "Select a Flashforge printer" msgstr "Selecteer een Flashforge-printer" @@ -22918,9 +23016,6 @@ msgstr "Er is iets onverwachts gebeurd bij het inloggen. Probeer het opnieuw." msgid "User canceled." msgstr "Gebruiker geannuleerd." -msgid "Head diameter" -msgstr "Kopdiameter" - # AI Translated msgid "Max angle" msgstr "Maximale hoek" @@ -23781,6 +23876,22 @@ msgstr "" "Kromtrekken voorkomen\n" "Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Laaghoogte is te klein.\n" +#~ "Het zal worden ingesteld op min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "De laaghoogte overschrijdt de limiet in Printerinstellingen -> Extruder -> Laaghoogtelimieten, dit kan problemen met de afdrukkwaliteit veroorzaken." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Automatisch aanpassen aan het ingestelde bereik?\n" + +#~ msgid "Head diameter" +#~ msgstr "Kopdiameter" + # AI Translated #~ msgid "Print order within a single layer." #~ msgstr "Printvolgorde binnen één laag." diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index a0701dca09..e9430155ea 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -4843,6 +4843,20 @@ msgstr "Obecna temperatura komory jest wyższa niż bezpieczna temperatura dla f msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Minimalna temperatura komory (%d℃) jest wyższa niż docelowa temperatura komory (%d℃). Wartość minimalna to próg, przy którym rozpoczyna się druk, podczas gdy komora nadal nagrzewa się do wartości docelowej, więc nie powinna jej przekraczać. Zostanie ograniczona do wartości docelowej." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Dostosuj" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4965,6 +4979,12 @@ msgstr "" "Tak — włącz generator ścian Arachne\n" "Nie — wyłącz generator ścian Arachne i ustaw tryb [Przesunięcie] skóry fuzzy" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Szerokość brimu" + # AI Translated msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Tryb spiralny działa tylko wtedy, gdy liczba pętli ściany wynosi 1, podpory są wyłączone, wykrywanie zlepiania przez sondowanie jest wyłączone, liczba warstw górnej powłoki wynosi 0, gęstość wypełnienia wynosi 0, a typ timelapse jest tradycyjny." @@ -4981,6 +5001,10 @@ msgstr "" "Tak - Zmień te ustawienia automatycznie i włącz tryb Wazy\n" "Nie - Zrezygnuj tym razem z używania trybu Wazy" +# AI Translated +msgid "N/A" +msgstr "Nie dotyczy" + msgid "Printing" msgstr "Drukowanie" @@ -5226,6 +5250,12 @@ msgstr "Nie udało się wygenerować kodu kalibracji" msgid "Calibration error" msgstr "Błąd kalibracji" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Sieć niedostępna" @@ -5440,10 +5470,6 @@ msgstr "Nieprawidłowy wzorzec. Użyj N, N#K lub listy rozdzielonej przecinkami msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Nieprawidłowy format. Oczekiwano formatu wektorowego: „%1%”" -# AI Translated -msgid "N/A" -msgstr "Nie dotyczy" - # AI Translated msgid "System agents" msgstr "Agenci systemowi" @@ -6109,7 +6135,7 @@ msgstr "Objętość:" msgid "Size:" msgstr "Rozmiar:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Wykryto konflikty ścieżek G-code na warstwie %d, Z = %.2lfmm. Proszę oddalić od siebie obiekty będące w konflikcie (%s <-> %s)." @@ -6295,6 +6321,9 @@ msgstr "Wiele urządzeń" msgid "Project" msgstr "Projekt" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Tak" @@ -6425,6 +6454,12 @@ msgstr "Zapisz projekt jako" msgid "Save current project as" msgstr "Zapisz bieżący projekt jako" +msgid "Publish" +msgstr "Opublikuj" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8273,6 +8308,12 @@ msgstr "Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zap msgid "Customized Preset" msgstr "Dostosowany profil" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF8!" @@ -8444,22 +8485,22 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Zastąpiono plikami 3D z katalogu:\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Pominięto %s: ten sam plik.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Pominięto %s: plik nie istnieje.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Pominięto %s: nie udało się zastąpić.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Zastąpiono %s.\n" @@ -8675,6 +8716,14 @@ msgstr "Zapisz plik po wykonaniu cięcia jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Plik %s został wysłany do pamięci drukarki i można go obejrzeć na urządzeniu." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nie ustawiono typu dyszy Wprowadź ustawienia dyszy i spróbuj ponownie." @@ -9647,6 +9696,14 @@ msgstr "Pokaż nieobsługiwane profile" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Pokazuj niekompatybilne/nieobsługiwane profile na listach rozwijanych drukarek i filamentów. Tych profili nie można wybrać." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Funkcje eksperymentalne" @@ -9889,9 +9946,6 @@ msgstr "Przejdź do strony publikacji modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Uwaga: Przygotowanie może zająć kilka minut. Proszę o cierpliwość." -msgid "Publish" -msgstr "Opublikuj" - msgid "Publish was canceled" msgstr "Publikacja została anulowana" @@ -9908,6 +9962,21 @@ msgstr "Przesyłanie danych" msgid "Jump to webpage" msgstr "Przejdź na stronę" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Zapisz %s jako" @@ -9918,10 +9987,22 @@ msgstr "Profil użytkownika" msgid "Preset Inside Project" msgstr "Profil wewnątrz projektu" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Odłącz od elementu nadrzędnego" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Nazwa jest niedostępna." @@ -10684,22 +10765,6 @@ msgstr "Czy na pewno włączyć tę opcję?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Wzory wypełnienia są zwykle projektowane tak, aby samodzielnie obsługiwać obrót, co zapewnia prawidłowy druk i zamierzony efekt (np. Gyroidalny, Sześcienny). Obracanie bieżącego wzoru wypełnienia może prowadzić do niewystarczającego podparcia. Zachowaj ostrożność i dokładnie sprawdź, czy nie występują problemy z drukiem. Czy na pewno chcesz włączyć tę opcję?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Wysokość warstwy jest zbyt mała.\n" -"Ustawione zostanie na min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Wysokość warstwy przekracza limit w Ustawieniach Drukarki -> Extruder -> Limity wysokości warstwy, co może powodować problemy z jakością druku." - -msgid "Adjust to the set range automatically?\n" -msgstr "Dostosować automatycznie do ustawionego zakresu?\n" - -msgid "Adjust" -msgstr "Dostosuj" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funkcja eksperymentalna: Polega na wycofywaniu filamentu na większą odległość w celu zminimalizowania płukania, a następne jego odcięcie. Choć może to znacząco zmniejszyć ilość zużytego filamentu, może również zwiększyć ryzyko zatknięcia dyszy lub innych problemów z drukowaniem." @@ -10899,6 +10964,9 @@ msgstr "Znaleziono zarezerwowane słowa kluczowe" msgid "Setting Overrides" msgstr "Nadpisywane Ustawień" +msgid "Retraction when switching material" +msgstr "Retrakcja podczas zmiany filamentu" + msgid "Basic information" msgstr "Podstawowe informacje" @@ -11033,6 +11101,14 @@ msgstr "Kompatybilne profile procesów" msgid "Printable space" msgstr "Przestrzeń do druku" +# AI Translated +msgid "Printer Agent" +msgstr "Agent drukarki" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Wybierz implementację agenta sieciowego do komunikacji z drukarką. Dostępni agenci są rejestrowani przy uruchamianiu." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -11165,9 +11241,6 @@ msgstr "Ograniczenia wysokości warstwy" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Retrakcja podczas zmiany filamentu" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12559,6 +12632,9 @@ msgstr " jest zbyt blisko obszaru wykluczenia, mogą wystąpić kolizje.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " jest zbyt blisko obszaru wykrywania zalepienia dyszy, co doprowadzi do kolizji.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Wybrane temperatury dyszy są niezgodne. Temperatura dyszy każdego filamentu musi mieścić się w zalecanym zakresie temperatur dyszy pozostałych filamentów. W przeciwnym razie może dojść do zatkania dyszy lub uszkodzenia drukarki." @@ -12901,10 +12977,6 @@ msgstr "Użyj 3MF zamiast G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Włącz tę opcję, jeśli drukarka przyjmuje plik 3MF jako zadanie druku. Po włączeniu Orca Slicer wysyła plik po cięciu jako .gcode.3mf zamiast zwykłego pliku .gcode." -# AI Translated -msgid "Printer Agent" -msgstr "Agent drukarki" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Wybierz implementację agenta sieciowego do komunikacji z drukarką." @@ -13617,9 +13689,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Prędkość wewnętrznych mostów. Jeśli wartość jest wyrażona w procentach, będzie obliczana na podstawie prędkości mostu. Wartość domyślna wynosi 150%." -msgid "Brim width" -msgstr "Szerokość brimu" - msgid "This is the distance from the model to the outermost brim line." msgstr "Odległość od modelu do najbardziej zewnętrznej linii brimu" @@ -13703,6 +13772,12 @@ msgstr "" "Kształt zostanie zredukowany przed wykryciem ostrych kątów. Ten parametr wskazuje minimalną długość odchylenia dla redukcji.\n" "0, aby dezaktywować" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "drukarka kompatybilna i wzwyż" @@ -14896,6 +14971,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroidalny" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Przyspieszenie dla wypełnienia górnej powierzchni. Użycie niższej wartości może poprawić jakość górnej powierzchni" @@ -15459,6 +15540,12 @@ msgstr "Z jakim rodzajem G-code drukarka jest kompatybilna." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Drukarka do druku granulatem" @@ -16571,6 +16658,12 @@ msgstr "Długa retrakcja podczas zmian ekstruderów" msgid "Retraction distance when extruder change" msgstr "Długość retrakcji podczas zmian ekstruderów" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Wysokość Z-hop" @@ -16669,6 +16762,9 @@ msgstr "Dodatkowa ilość dla powrotu" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Gdy retrakcja jest kompensowana po przemieszczeniu, ekstruder przepycha tę dodatkową ilość filamentu. To opcja jest rzadko potrzebna." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Jeśli retrakcja jest korygowana po zmianie narzędzia, extruder przepchnie taką dodatkową ilość filamentu." @@ -17099,6 +17195,12 @@ msgstr "Zmiana narzędzia na wieży czyszczącej" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Wymusza przemieszczenie głowicy do wieży czyszczącej przed wydaniem polecenia zmiany narzędzia (Tx). Dotyczy tylko drukarek wieloekstruderowych (wielogłowicowych) korzystających z wieży czyszczącej typu 2. Domyślnie Orca pomija to przemieszczenie na maszynach wielogłowicowych, ponieważ zamianą głowic zajmuje się oprogramowanie sprzętowe, przez co polecenie Tx może zostać wydane nad drukowaną częścią. Włącz tę opcję, jeśli chcesz, aby zmiana narzędzia zawsze następowała nad wieżą czyszczącą." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Warstwy bez czyszczenia (beta)" @@ -20445,10 +20547,6 @@ msgstr "Fizyczna drukarka" msgid "Print Host upload" msgstr "Przesyłanie do hosta drukowania" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Wybierz implementację agenta sieciowego do komunikacji z drukarką. Dostępni agenci są rejestrowani przy uruchamianiu." - # AI Translated msgid "Select a Flashforge printer" msgstr "Wybierz drukarkę Flashforge" @@ -21401,9 +21499,6 @@ msgstr "Wystąpił problem podczas próby logowania, proszę spróbować ponowni msgid "User canceled." msgstr "Anulowane przez użytkownika." -msgid "Head diameter" -msgstr "Średnica łącznika" - msgid "Max angle" msgstr "Maksymalny kąt" @@ -22234,6 +22329,22 @@ msgstr "" "Unikaj odkształceń\n" "Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Wysokość warstwy jest zbyt mała.\n" +#~ "Ustawione zostanie na min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Wysokość warstwy przekracza limit w Ustawieniach Drukarki -> Extruder -> Limity wysokości warstwy, co może powodować problemy z jakością druku." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Dostosować automatycznie do ustawionego zakresu?\n" + +#~ msgid "Head diameter" +#~ msgstr "Średnica łącznika" + #~ msgid "Print order within a single layer." #~ msgstr "Kolejność druku obiektów w obrębie jednej warstwy. Domyślnie lub według listy obiektów" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 595e46b8cf..b001ea24b8 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -4577,6 +4577,20 @@ msgstr "A temperatura da câmara atual está mais alta do que a temperatura segu msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "A temperatura mínima da câmara (%d℃) é superior à temperatura alvo da câmara (%d℃). O valor mínimo é o limite no qual a impressão começa enquanto a câmara continua aquecendo em direção ao alvo; portanto, não deve execedê-lo. O valor será limitado ao alvo." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Ajustar" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4696,6 +4710,12 @@ msgstr "" "Sim - Habilitar Gerador de Parede Arachne\n" "Não - Desabilitar Gerador de Parede Arachne e setar o modo [Deslocamento] da Textura Difusa" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Largura da borda" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "O modo espiral só funciona quando as voltas da parede são 1, o suporte está desativado, a detecção de aglomeração por sondagem está desativada, as camadas da casca de topo são 0, a densidade de preenchimento esparso é 0 e o tipo de timelapse é tradicional." @@ -4711,6 +4731,9 @@ msgstr "" "Sim - Alterar essas configurações e ativar o modo espiral/vaso automaticamente\n" "Não - Cancelar ativação do modo espiral" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimindo" @@ -4950,6 +4973,12 @@ msgstr "Falha ao gerar o G-code de calibração" msgid "Calibration error" msgstr "Erro de calibração" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + msgid "Network unavailable" msgstr "Rede indisponível" @@ -5156,9 +5185,6 @@ msgstr "Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vetor esperado: \"%1%\"" -msgid "N/A" -msgstr "N/D" - msgid "System agents" msgstr "Agentes do sistema" @@ -5793,7 +5819,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Tamanho:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Foram encontrados conflitos de caminhos de G-code na camada %d, Z = %.2lfmm. Por favor, separe mais os objetos em conflito (%s <-> %s)." @@ -5974,6 +6000,9 @@ msgstr "Multi-dispositivo" msgid "Project" msgstr "Projeto" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Sim" @@ -6101,6 +6130,12 @@ msgstr "Salvar projeto como" msgid "Save current project as" msgstr "Salvar o projeto atual como" +msgid "Publish" +msgstr "Publicar" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7861,6 +7896,12 @@ msgstr "Por favor, confirme se o G-code dentro dessas predefinições é seguro msgid "Customized Preset" msgstr "Predefinição Personalizada" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Os nomes dos componentes dentro do arquivo STEP não estão no formato UTF-8!" @@ -8020,19 +8061,19 @@ msgstr "Diretório para substituição não foi selecionado" msgid "Replaced with 3D files from directory:\n" msgstr "Substituído por arquivos 3D do diretório:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ %s Ignorados: mesmo arquivo.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ %s Ignorados: arquivo não existe.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ %s Ignorados: falha ao substituir.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ %s Substituídos.\n" @@ -8241,6 +8282,14 @@ msgstr "Salvar arquivo fatiado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode ser visualizado na impressora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "O tipo de bico não está configurado. Configure o bico e tente novamente." @@ -9113,6 +9162,14 @@ msgstr "Mostrar predefinições não suportadas" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Exibir predefinições incompatíveis e não suportadas nas listas de impressora e filamento. Essas predefinições não podem ser selecionadas." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Recursos Experimentais" @@ -9346,9 +9403,6 @@ msgstr "Ir para a página web de publicação de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: A preparação pode levar vários minutos. Por favor, seja paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "Publicação cancelada" @@ -9364,6 +9418,21 @@ msgstr "Enviando dados" msgid "Jump to webpage" msgstr "Ir para a página web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Salvar %s como" @@ -9374,9 +9443,21 @@ msgstr "Predefinição do Usuário" msgid "Preset Inside Project" msgstr "Predefinição Dentro do Projeto" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Separar do pai" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "O nome não está disponível." @@ -10096,24 +10177,6 @@ msgstr "Tem certeza de que deseja habilitar esta opção?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Padrões de preenchimento são projetados para lidar com a rotação automaticamente para garantir a impressão adequada e atingir os efeitos pretendidos (Ex. Giroide, Cúbico). Girar o padrão de preenchimento esparso atual pode causar suporte insuficiente. Prossiga com cautela e verifique cuidadosamente se há possíveis problemas de impressão. Tem certeza de que deseja habilitar esta opção?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"A altura da camada é muito pequena.\n" -"Ela será definida como altura mínima da camada\n" -"A altura da camada é muito pequena.\n" -"Ela será definida como altura mínima da camada\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "A altura da camada excede o limite em Configurações da Impressora -> Extrusora -> Limites de altura da camada, isso pode causar problemas de qualidade de impressão." - -msgid "Adjust to the set range automatically?\n" -msgstr "Ajustar automaticamente à faixa definida?\n" - -msgid "Adjust" -msgstr "Ajustar" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funcionalidade experimental: Retrair e cortar o filamento a uma distância maior durante mudanças de filamento para minimizar a purga. Embora possa reduzir notavelmente a purga, ele também pode elevar o risco de bolhas no bico ou outras complicações de impressão." @@ -10308,6 +10371,9 @@ msgstr "Palavras-chave reservadas encontradas" msgid "Setting Overrides" msgstr "Sobrescrever configurações" +msgid "Retraction when switching material" +msgstr "Retração ao trocar material" + msgid "Basic information" msgstr "Informações básicas" @@ -10435,6 +10501,12 @@ msgstr "Perfis de processo compatíveis" msgid "Printable space" msgstr "Espaço de impressão" +msgid "Printer Agent" +msgstr "Agente de Impressora" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Selecione a implementação do agente de rede para comunicação com a impressora. Os agentes disponíveis são registrados na inicialização." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10560,9 +10632,6 @@ msgstr "Limites de altura da camada" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Retração ao trocar material" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -11893,6 +11962,9 @@ msgstr " está muito perto de uma área de exclusão, e colisões vão ocorrer.\ msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " está muito perto da área de detecção de aglomeração, e ocorrerão colisões.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "As temperaturas dos bicos selecionadas são incompatíveis. A temperatura do bico de cada filamento deve estar dentro da faixa de temperatura recomendada para os demais filamentos. Caso contrário, pode ocorrer entupimento do bico ou danos à impressora." @@ -12206,9 +12278,6 @@ msgstr "Usar 3MF em vez de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Ative esta opção se a impressora aceitar um arquivo 3MF como trabalho de impressão. Quando ativada, o OrcaSlicer envia o arquivo fatiado como .gcode.3mf, em vez de um arquivo .gcode comum." -msgid "Printer Agent" -msgstr "Agente de Impressora" - msgid "Select the network agent implementation for printer communication." msgstr "Selecione a implementação do agente de rede para comunicação com a impressora." @@ -12888,9 +12957,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Velocidade de pontes internas. Se o valor for expresso como uma porcentagem, ele será calculado com base na bridge_speed. O valor padrão é 150%." -msgid "Brim width" -msgstr "Largura da borda" - msgid "This is the distance from the model to the outermost brim line." msgstr "Essa é a distância do modelo até a linha da borda mais externa." @@ -12970,6 +13036,12 @@ msgstr "" "A geometria será decimada antes de detectar ângulos agudos. Este parâmetro indica o comprimento mínimo da divergência para a decimação.\n" "0 para desativar." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "uáquina compatível ascendente" @@ -14104,6 +14176,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Esta é a aceleração do preenchimento da superfície superior. Usar um valor menor pode melhorar a qualidade da superfície superior." @@ -14639,6 +14717,12 @@ msgstr "Com que tipo de G-code a impressora é compatível." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Impressora Modificada para Pellets" @@ -15681,6 +15765,12 @@ msgstr "Retração longa na troca de extrusora" msgid "Retraction distance when extruder change" msgstr "Distância de retração na troca de extrusora" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Altura de Z-hop" @@ -15774,6 +15864,9 @@ msgstr "Comprimento extra na retração" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Quando a retração é compensada após o movimento de deslocamento, a extrusora empurrará essa quantidade adicional de filamento. Esta configuração é raramente necessária." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Quando a retração é compensada após a troca de ferramenta, a extrusora empurrará essa quantidade adicional de filamento." @@ -16182,6 +16275,12 @@ msgstr "Troca de ferramenta na torre de purga" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Força o cabeçote de impressão a se deslocar até a torre de purga antes de emitir o comando de troca de ferramenta (Tx). Relevante apenas para impressoras com múltiplas extrusoras (múltiplos cabeçotes de impressão) que utilizam uma torre de purga Tipo 2. Por padrão, o Orca ignora o deslocamento em máquinas com múltiplos cabeçotes de impressão, pois o firmware gerencia a troca do cabeçote, o que pode resultar na emissão do comando Tx acima da peça impressa. Habilite esta opção se desejar que a troca de ferramenta seja sempre emitida acima da torre de purga." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Sem camadas esparsas (beta)" @@ -16733,7 +16832,7 @@ msgstr "Volume de preparo" msgid "This is the volume of material to prime the extruder with on the tower." msgstr "Este é o volume de material para preparar a extrusora na torre." -#,fuzzy +#, fuzzy msgid "Prime volume mode" msgstr "Modo de volume de preparação" @@ -19369,9 +19468,6 @@ msgstr "Impressora Física" msgid "Print Host upload" msgstr "Upload do Host de Impressão" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Selecione a implementação do agente de rede para comunicação com a impressora. Os agentes disponíveis são registrados na inicialização." - msgid "Select a Flashforge printer" msgstr "Selecione uma impressora Flashforge" @@ -20213,9 +20309,6 @@ msgstr "Algo inesperado aconteceu ao tentar conectar, por favor tente novamente. msgid "User canceled." msgstr "Cancelado pelo usuário." -msgid "Head diameter" -msgstr "Diâmetro da cabeça" - msgid "Max angle" msgstr "Ângulo máx" @@ -20949,6 +21042,24 @@ msgstr "" "Evitar empenamento\n" "Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "A altura da camada é muito pequena.\n" +#~ "Ela será definida como altura mínima da camada\n" +#~ "A altura da camada é muito pequena.\n" +#~ "Ela será definida como altura mínima da camada\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "A altura da camada excede o limite em Configurações da Impressora -> Extrusora -> Limites de altura da camada, isso pode causar problemas de qualidade de impressão." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Ajustar automaticamente à faixa definida?\n" + +#~ msgid "Head diameter" +#~ msgstr "Diâmetro da cabeça" + #~ msgid "Print order within a single layer." #~ msgstr "Ordem de impressão dentro de uma única camada." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index c2fbcb54be..919710f917 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -4715,6 +4715,20 @@ msgstr "Текущая температура внутри термокамер msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Стартовая температура внутри термокамеры (%d℃) превышает целевую (%d℃). Подразумевается, что печать начинается заранее, поэтому стартовая температура не должна превышать её. Значение будет уменьшено." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Подстроиться" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4839,6 +4853,12 @@ msgid "" "No - Disable Arachne Wall Generator and set [Displacement] mode of the Fuzzy Skin" msgstr "Использовать нечёткую оболочку с движком Arachne?" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Ширина каймы" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "" "Для печати в режиме вазы необходимы следующие настройки:\n" @@ -4859,6 +4879,11 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "Использовать эти настройки и режим вазы?" +# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо +# символов +msgid "N/A" +msgstr "–" + msgid "Printing" msgstr "Печать" @@ -5107,6 +5132,12 @@ msgstr "Не удалось сгенерировать калибровочны msgid "Calibration error" msgstr "Ошибка калибровки" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + msgid "Network unavailable" msgstr "Сеть недоступна" @@ -5320,11 +5351,6 @@ msgstr "Недопустимый шаблон. Используйте N, N#K и msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Недопустимый формат. Ожидаемый векторный формат: \"%1%\"" -# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо -# символов -msgid "N/A" -msgstr "–" - msgid "System agents" msgstr "Системные агенты" @@ -5991,7 +6017,7 @@ msgstr "Объём:" msgid "Size:" msgstr "Размер:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "В G-коде на %d слое (z = %.2lf мм) обнаружен конфликт путей. Пожалуйста, разместите конфликтующие модели дальше друг от друга (%s <-> %s)." @@ -6198,6 +6224,9 @@ msgstr "Принтеры" msgid "Project" msgstr "Проект" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Да" @@ -6334,6 +6363,12 @@ msgstr "Сохранить проект как" msgid "Save current project as" msgstr "Сохранить текущий проект как" +msgid "Publish" +msgstr "Опубликовать" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Импорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8132,6 +8167,12 @@ msgstr "Во избежание повреждения принтера убед msgid "Customized Preset" msgstr "Пользовательский профиль" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Имена компонентов внутри файла STEP не в формате UTF8." @@ -8299,19 +8340,19 @@ msgstr "Расположение для замены не указано" msgid "Replaced with 3D files from directory:\n" msgstr "Заменено файлами из расположения:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Пропущен %s: идентичный файл.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Пропущен %s: файл не существует.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Пропущен %s: не удалось заменить.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Заменён %s.\n" @@ -8520,6 +8561,14 @@ msgstr "Сохранить нарезанный файл как:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s отправлен в память принтера и может быть просмотрен на нём." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Не указан тип сопла. Укажите его и попробуйте ещё раз." @@ -9400,6 +9449,14 @@ msgstr "" "\n" "Примечание: профили остаются недоступными для выбора." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Экспериментальные настройки" @@ -9638,9 +9695,6 @@ msgstr "Перейти на веб-страницу публикации мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примечание: подготовка может занять несколько минут. Пожалуйста, наберитесь терпения." -msgid "Publish" -msgstr "Опубликовать" - msgid "Publish was canceled" msgstr "Публикация была отменена" @@ -9656,6 +9710,21 @@ msgstr "Отправка данных" msgid "Jump to webpage" msgstr "Перейти на страницу" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Сохранить %s как" @@ -9666,9 +9735,21 @@ msgstr "Пользовательский профиль" msgid "Preset Inside Project" msgstr "Профиль внутри проекта" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Сделать независимым" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Имя недоступно." @@ -9686,7 +9767,9 @@ msgstr "" "несовместим с текущим принтером." msgid "Please note that saving will overwrite the current preset." -msgstr "Обратите внимание: при сохранении произойдёт\nперезапись текущего профиля." +msgstr "" +"Обратите внимание: при сохранении произойдёт\n" +"перезапись текущего профиля." msgid "The name cannot be the same as a preset alias name." msgstr "Имя не должно совпадать с именем предустановленного профиля." @@ -10389,22 +10472,6 @@ msgstr "Вы действительно хотите задействовать msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Многие шаблоны заполнения разработаны на основе автоматического поворота по определённым правилам для поддержания правильной печати и желаемого эффекта (например, «Гироид» или «Куб»). Изменение правила поворота текущего шаблона может привести к его провисанию. Будьте осторожны и внимательно проверяйте результат на наличие потенциальных проблем с печатью." -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Высота слоя слишком мала.\n" -"Будет установлено значение min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Высота слоя не может превышать ограничения, установленные в настройках принтера → Экструдер → Ограничение высоты слоя. Это может вызвать проблемы с качеством печати." - -msgid "Adjust to the set range automatically?\n" -msgstr "Автоматически подстроиться под заданный в настройках диапазон?\n" - -msgid "Adjust" -msgstr "Подстроиться" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "[Экспериментальная функция] Втягивание и обрезка прутка на большем расстоянии во время его замены для минимизации очистки. Хотя это значительно сокращает величину очистки, это может повысить риск возникновения затора или вызвать другие проблемы при печати." @@ -10604,6 +10671,9 @@ msgstr "Найдены зарезервированные ключевые сл msgid "Setting Overrides" msgstr "Замещение настроек" +msgid "Retraction when switching material" +msgstr "Откат при смене материала" + msgid "Basic information" msgstr "Основные" @@ -10751,6 +10821,12 @@ msgstr "Совместимые настройки" msgid "Printable space" msgstr "Область печати" +msgid "Printer Agent" +msgstr "Сетевой агент" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Реализация сетевого агента для обмена информацией с принтером. Доступные реализации определяются при запуске." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10879,9 +10955,6 @@ msgstr "Ограничение высоты слоя" msgid "Z-Hop" msgstr "Подъём головы при откате" -msgid "Retraction when switching material" -msgstr "Откат при смене материала" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12218,6 +12291,9 @@ msgstr " находится слишком близко к области иск msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " находится слишком близко к зоне обнаружения налипаний, столкновения неизбежны.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Обнаружен недопустимый перепад температур. Каждый из используемых материалов должен иметь в профиле температуру печати в пределах допустимого диапазона других материалов. В противном случае сопло может забиться и повредить принтер." @@ -12539,9 +12615,6 @@ msgstr "Сжатие G-кода перед отправкой" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Рекомендуется для принтеров, поддерживающих печать из архивов 3MF. Файлы печати будут отправляться с расширением \".gcode.3mf\"." -msgid "Printer Agent" -msgstr "Сетевой агент" - msgid "Select the network agent implementation for printer communication." msgstr "Реализация сетевого агента для обмена информацией с принтером." @@ -13232,9 +13305,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Скорость печати внутреннего моста. Можно указать процент от скорости внешнего моста (bridge_speed). По умолчанию – 150%." -msgid "Brim width" -msgstr "Ширина каймы" - msgid "This is the distance from the model to the outermost brim line." msgstr "Расстояние от модели до внешней линии каймы." @@ -13316,6 +13386,12 @@ msgstr "" "Геометрия модели будет упрощена перед обнаружением острых углов. Этот параметр задаёт минимальную длину отклонения для её упрощения.\n" "Установите 0 для отключения." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "условия для совместимых принтеров" @@ -14308,13 +14384,19 @@ msgid "Interface layer pre-extrusion distance" msgstr "Дистанция избыточной подачи при смене" msgid "Pre-extrusion distance for prime tower interface layer (where different materials meet)." -msgstr "Протяжённость первичного движения прочистки после смены материала. Позволяет быстро набрать давление в сопле и сбросить перегретый материал.\n\nПримечание: фактическая длина может быть ограничена шириной башни." +msgstr "" +"Протяжённость первичного движения прочистки после смены материала. Позволяет быстро набрать давление в сопле и сбросить перегретый материал.\n" +"\n" +"Примечание: фактическая длина может быть ограничена шириной башни." msgid "Interface layer pre-extrusion length" msgstr "Длина прутка для избыточной подачи" msgid "Pre-extrusion length for prime tower interface layer (where different materials meet)." -msgstr "Длина прутка, которую необходимо продавить на этапе избыточной подачи.\n\n0 – отключить этот этап." +msgstr "" +"Длина прутка, которую необходимо продавить на этапе избыточной подачи.\n" +"\n" +"0 – отключить этот этап." msgid "Tower ironing area" msgstr "Разглаживание кончиков" @@ -14626,6 +14708,12 @@ msgstr "ТПМП Фишера-Коха S" msgid "Gyroid" msgstr "Гироид" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Ускорение на верхней поверхности. Использование меньшего значения может улучшить качество верхней поверхности." @@ -15213,6 +15301,12 @@ msgstr "Выбор типа G-кода для совместимости с пр msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Гранульная модификация принтера" @@ -15396,8 +15490,7 @@ msgstr "Наклон опор" msgid "" "Controls how aggressively short or unsupported Lightning branches are pruned.\n" "This angle is converted internally to a per-layer distance." -msgstr "" -"Допустимый наклон опор молнии. Чем выше, тем быстрее и экономичнее распространяются её ветви." +msgstr "Допустимый наклон опор молнии. Чем выше, тем быстрее и экономичнее распространяются её ветви." # "Выпрямление" здесь, вопреки первой мысли – это как раз-таки наоборот искажение шаблона по ходу печати для сокращения количества ветвей. Короче, опять путаница из-за того, что генерация ветвей происходит сверху вниз. При печати снизу вверх шаблон именно что искажается. msgid "Straightening angle" @@ -16309,8 +16402,7 @@ msgid "" "The length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" -"Быстрый откат после очистки, выраженный в процентах от общей длины отката. В некоторых случаях позволяет значительно снизить количество «паутины»." -"\n" +"Быстрый откат после очистки, выраженный в процентах от общей длины отката. В некоторых случаях позволяет значительно снизить количество «паутины».\n" "Примечание: суммарное значение не должно превышать 100% и будет скорректировано автоматически." msgid "Retract on layer change" @@ -16344,6 +16436,12 @@ msgstr "Длинный откат перед сменой экструдера" msgid "Retraction distance when extruder change" msgstr "Длина отката перед сменой экструдера" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Высота подъёма" @@ -16461,6 +16559,9 @@ msgstr "Доп. подача после отката" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Дополнительная длина подачи при возврате прутка после отката. Требуется крайне редко (например, для компенсации багов прошивки принтера)." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Дополнительная длина подачи после смены насадки." @@ -16474,7 +16575,9 @@ msgid "Deretraction speed" msgstr "Скорость возврата" msgid "Speed for reloading filament into the nozzle. Zero means same speed of retraction." -msgstr "Скорость возврата материала в сопло после отката.\n0 – использовать скорость отката." +msgstr "" +"Скорость возврата материала в сопло после отката.\n" +"0 – использовать скорость отката." msgid "Deretraction speed (extruder change)" msgstr "Скорость возврата (смена экструдера)" @@ -16945,6 +17048,12 @@ msgstr "" "\n" "Внимание: применимо только к многоэкструдерным принтерам с черновой башней 2 типа." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Без разреженных слоёв (beta)" @@ -17942,13 +18051,21 @@ msgid "To prevent oozing, the nozzle temperature will be cooled during ramming. msgstr "Во избежание подтёков температура сопла будет снижена на время рэмминга. Поэтому время рэмминга должно быть больше времени охлаждения. 0 значит отключено." msgid "The maximum volumetric speed for ramming before extruder change, where -1 means using the maximum volumetric speed." -msgstr "Максимальный объёмный расход для рэмминга перед сменой экструдера.\n-1 – использовать максимальный расход." +msgstr "" +"Максимальный объёмный расход для рэмминга перед сменой экструдера.\n" +"-1 – использовать максимальный расход." msgid "To prevent oozing, the nozzle temperature will be cooled during ramming. Note: only a cooldown command and fan activation are triggered, reaching the target temperature is not guaranteed. 0 means disabled." -msgstr "Во избежание подтёков температура сопла будет снижена на время рэмминга.\n0 – не менять температуру.\n\nПримечание: срабатывают только команда охлаждения и включение вентилятора; достижение целевой температуры не гарантируется." +msgstr "" +"Во избежание подтёков температура сопла будет снижена на время рэмминга.\n" +"0 – не менять температуру.\n" +"\n" +"Примечание: срабатывают только команда охлаждения и включение вентилятора; достижение целевой температуры не гарантируется." msgid "The maximum volumetric speed for ramming before a hotend change, where -1 means using the maximum volumetric speed." -msgstr "Максимальный объёмный расход для рэмминга перед сменой хотэнда.\n-1 – использовать максимальный расход." +msgstr "" +"Максимальный объёмный расход для рэмминга перед сменой хотэнда.\n" +"-1 – использовать максимальный расход." msgid "length when change hotend" msgstr "Откат при смене хотэнда" @@ -19414,10 +19531,14 @@ msgid "Continue anyway?" msgstr "Всё равно продолжить?" msgid "Enable \"Auto-adjust\" to fix this automatically, or continue anyway?" -msgstr "Включить адаптацию к расходу для автоматического исправления?\nНет – игнорировать предупреждение." +msgstr "" +"Включить адаптацию к расходу для автоматического исправления?\n" +"Нет – игнорировать предупреждение." msgid "Enable \"Auto-scale for nozzle\" and \"Auto-adjust\" to fix this automatically, or continue anyway?" -msgstr "Включить адаптацию к соплу и расходу для автоматического исправления?\nНет – игнорировать предупреждение." +msgstr "" +"Включить адаптацию к соплу и расходу для автоматического исправления?\n" +"Нет – игнорировать предупреждение." msgid "Start retraction length: " msgstr "Начальная длина отката: " @@ -20341,9 +20462,6 @@ msgstr "Физический принтер" msgid "Print Host upload" msgstr "Загрузка на хост печати" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Реализация сетевого агента для обмена информацией с принтером. Доступные реализации определяются при запуске." - msgid "Select a Flashforge printer" msgstr "Выберите принтер Flashforge" @@ -21202,9 +21320,6 @@ msgstr "При попытке войти произошла какая-то ош msgid "User canceled." msgstr "Отменено пользователем." -msgid "Head diameter" -msgstr "Диаметр уха" - msgid "Max angle" msgstr "Макс. угол" @@ -21959,6 +22074,22 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Высота слоя слишком мала.\n" +#~ "Будет установлено значение min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Высота слоя не может превышать ограничения, установленные в настройках принтера → Экструдер → Ограничение высоты слоя. Это может вызвать проблемы с качеством печати." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Автоматически подстроиться под заданный в настройках диапазон?\n" + +#~ msgid "Head diameter" +#~ msgstr "Диаметр уха" + #~ msgid "Print order within a single layer." #~ msgstr "Последовательность печати моделей в пределах одного слоя." diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 5686fb7d8f..1caffffd36 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -5213,6 +5213,20 @@ msgstr "Kammarens aktuella temperatur är högre än materialets säkra temperat msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Kammarens minimitemperatur (%d℃) är högre än kammarens måltemperatur (%d℃). Minimivärdet är tröskeln där utskriften startar medan kammaren fortsätter värmas mot målet, så det bör inte överstiga målet. Värdet begränsas till måltemperaturen." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Justera" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -5339,6 +5353,12 @@ msgstr "" "Ja – Aktivera Arachne-väggeneratorn\n" "Nej – Inaktivera Arachne-väggeneratorn och ställ in läget [Förskjutning] för ojämn yta" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Brim bredd" + # AI Translated msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Spiralläget fungerar bara när antal väggar är 1, support är avstängt, detektering av klumpbildning med sondering är avstängd, antal översta skallager är 0, sparsam ifyllnadsdensitet är 0 och timelapse-typen är traditionell." @@ -5355,6 +5375,10 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" +# AI Translated +msgid "N/A" +msgstr "Ej tillämpligt" + msgid "Printing" msgstr "Utskrift pågår" @@ -5645,6 +5669,12 @@ msgstr "Misslyckades med att generera cali G kod" msgid "Calibration error" msgstr "Fel vid kalibrering" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Nätverket är inte tillgängligt" @@ -5896,10 +5926,6 @@ msgstr "Ogiltigt mönster. Använd N, N#K eller en kommaseparerad lista med valf msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ogiltligt format. Förväntat vector format: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Ej tillämpligt" - # AI Translated msgid "System agents" msgstr "Systemagenter" @@ -6596,7 +6622,7 @@ msgid "Size:" msgstr "Storlek:" # AI Translated -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Konflikter mellan G-code-banor hittades på lager %d, Z = %.2lfmm. Placera de objekt som krockar längre ifrån varandra (%s <-> %s)." @@ -6798,6 +6824,9 @@ msgstr "Flera enheter" msgid "Project" msgstr "Projekt" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Ja" @@ -6928,6 +6957,12 @@ msgstr "Spara Projekt som" msgid "Save current project as" msgstr "Spara nuvarande projekt som" +msgid "Publish" +msgstr "Publicera" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importera 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8916,6 +8951,12 @@ msgstr "Bekräfta att G-koderna i dessa inställningar är säkra för att förh msgid "Customized Preset" msgstr "Anpassad inställning" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Komponent namnet i STEP filen är inte UTF8 format!" @@ -9088,22 +9129,22 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Ersatt med 3D-filer från mappen:\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Hoppade över %s: samma fil.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Hoppade över %s: filen finns inte.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Hoppade över %s: det gick inte att ersätta.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Ersatte %s.\n" @@ -9328,6 +9369,14 @@ msgstr "Spara beredningen som:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Filen %s har skickats till skrivarens lagringsutrymme och kan visas på skrivaren." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozzeltypen är inte angiven. Ange nozzeln och försök igen." @@ -10357,6 +10406,14 @@ msgstr "Visa förinställningar som inte stöds" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Visa inkompatibla förinställningar och förinställningar som inte stöds i rullgardinslistorna för skrivare och filament. Dessa förinställningar kan inte väljas." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Experimentella funktioner" @@ -10608,9 +10665,6 @@ msgstr "Växla till modell publicerings hemsidan" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notera: Förberedelserna kan ta flera minuter. Vänligen vänta." -msgid "Publish" -msgstr "Publicera" - msgid "Publish was canceled" msgstr "Publiceringen avbröts" @@ -10627,6 +10681,21 @@ msgstr "Laddar upp data" msgid "Jump to webpage" msgstr "Växla till hemsidan" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Spara %s som" @@ -10637,10 +10706,22 @@ msgstr "Användar förinställning" msgid "Preset Inside Project" msgstr "Projekt förinställning" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Koppla loss från överordnad" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Namnet ej tillgängligt." @@ -11459,23 +11540,6 @@ msgstr "Är du säker på att du vill aktivera det här alternativet?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Ifyllnadsmönster är oftast konstruerade för att hantera rotation automatiskt så att de skrivs ut korrekt och ger avsedd effekt (t.ex. Gyroid, Kubisk). Att rotera det aktuella sparsamma ifyllnadsmönstret kan ge otillräckligt stöd. Var försiktig och kontrollera noga om det uppstår utskriftsproblem. Är du säker på att du vill aktivera det här alternativet?" -# AI Translated -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Lagerhöjden är för liten.\n" -"Den ställs in på min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Lagerhöjden överskrider gränsen i Skrivarinställningar -> Extruder -> Lagerhöjds gränser, detta kan orsaka problem med utskriftskvaliteten." - -msgid "Adjust to the set range automatically?\n" -msgstr "Justera automatiskt till det inställda området?\n" - -msgid "Adjust" -msgstr "Justera" - # AI Translated msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Experimentell funktion: Filamentet dras tillbaka och kapas på ett längre avstånd vid filamentbyten för att minimera rensningen. Det kan minska rensningen avsevärt, men kan också öka risken för igensatt nozzel eller andra utskriftsproblem." @@ -11707,6 +11771,9 @@ msgstr "Hittade reserverade nyckelord" msgid "Setting Overrides" msgstr "Åsidosätter inställningar" +msgid "Retraction when switching material" +msgstr "Reduktion vid material byte" + msgid "Basic information" msgstr "Allmän information" @@ -11848,6 +11915,14 @@ msgstr "Kompatibla process profiler" msgid "Printable space" msgstr "Utskriftsbar yta" +# AI Translated +msgid "Printer Agent" +msgstr "Skrivaragent" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Välj vilken nätverksagentimplementation som ska användas för kommunikation med skrivaren. Tillgängliga agenter registreras vid start." + # AI Translated #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format @@ -11992,9 +12067,6 @@ msgstr "Lagerhöjds begränsning" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Reduktion vid material byte" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -13486,6 +13558,9 @@ msgstr " är för nära uteslutningsområdet, och kollisioner kommer att orsakas msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " ligger för nära området för klumpdetektering, vilket kommer att orsaka kollisioner.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "De valda nozzeltemperaturerna är inkompatibla. Varje filaments nozzeltemperatur måste ligga inom de andra filamentens rekommenderade nozzeltemperaturintervall. Annars kan nozzeln sättas igen eller skrivaren skadas." @@ -13856,10 +13931,6 @@ msgstr "Använd 3MF i stället för G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Aktivera detta om skrivaren tar emot en 3MF-fil som utskriftsjobb. När det är aktiverat skickar Orca Slicer den beredda filen som en .gcode.3mf i stället för en vanlig .gcode-fil." -# AI Translated -msgid "Printer Agent" -msgstr "Skrivaragent" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Välj vilken nätverksagentimplementation som ska användas för kommunikation med skrivaren." @@ -14616,9 +14687,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Hastighet för inre bridges. Om värdet anges i procent beräknas det utifrån bridge_speed. Standardvärdet är 150 %." -msgid "Brim width" -msgstr "Brim bredd" - msgid "This is the distance from the model to the outermost brim line." msgstr "Avståndet från modellen till yttersta brim linjen" @@ -14707,6 +14775,12 @@ msgstr "" "Geometrin decimeras innan skarpa vinklar detekteras. Den här parametern anger avvikelsens minsta längd för decimeringen.\n" "0 för att avaktivera." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "uppåt kompatibel maskin" @@ -16039,6 +16113,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Acceleration av fyllning av toppytan. Att använda ett lägre värde kan förbättra ytkvaliteten" @@ -16651,6 +16731,12 @@ msgstr "Vilken typ av G-kod är skrivaren kompatibel med" msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + # AI Translated msgid "Pellet Modded Printer" msgstr "Skrivare ombyggd för pellets" @@ -17868,6 +17954,12 @@ msgstr "Lång reduktion vid extruderbyte" msgid "Retraction distance when extruder change" msgstr "Reduktionssträcka vid extruderbyte" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + # AI Translated msgid "Z-hop height" msgstr "Z-hop-höjd" @@ -17983,6 +18075,9 @@ msgstr "Extra längd vid omstart" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "När reduktionen kompenseras efter flyttrörelsen trycker extrudern fram den här extra mängden filament. Den här inställningen behövs sällan." +msgid "Extra length on restart (Toolchange)" +msgstr "" + # AI Translated msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "När reduktionen kompenseras efter verktygsbyte trycker extrudern fram den här extra mängden filament." @@ -18477,6 +18572,12 @@ msgstr "Verktygsbyte vid prime tornet" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Tvinga verktygshuvudet att flytta till prime tornet innan verktygsbyteskommandot (Tx) skickas. Endast relevant för skrivare med flera extrudrar (flera verktygshuvuden) som använder ett prime torn av typ 2. Som standard hoppar Orca över flytten på maskiner med flera verktygshuvuden, eftersom den fasta programvaran hanterar huvudbytet, vilket kan leda till att Tx-kommandot skickas ovanför den utskrivna delen. Aktivera det här alternativet om du vill att verktygsbytet alltid ska ske ovanför prime tornet i stället." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + # AI Translated msgid "No sparse layers (beta)" msgstr "Inga glesa lager (beta)" @@ -22101,10 +22202,6 @@ msgstr "Fysisk printer" msgid "Print Host upload" msgstr "Uppladdning utskriftsvärd" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Välj vilken nätverksagentimplementation som ska användas för kommunikation med skrivaren. Tillgängliga agenter registreras vid start." - # AI Translated msgid "Select a Flashforge printer" msgstr "Välj en Flashforge-skrivare" @@ -23181,10 +23278,6 @@ msgstr "Något oväntat hände vid inloggningen, försök igen." msgid "User canceled." msgstr "Användaren avbröt." -# AI Translated -msgid "Head diameter" -msgstr "Huvuddiameter" - # AI Translated msgid "Max angle" msgstr "Maxvinkel" @@ -24071,6 +24164,24 @@ msgstr "" "Undvik vridning\n" "Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?" +# AI Translated +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Lagerhöjden är för liten.\n" +#~ "Den ställs in på min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Lagerhöjden överskrider gränsen i Skrivarinställningar -> Extruder -> Lagerhöjds gränser, detta kan orsaka problem med utskriftskvaliteten." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Justera automatiskt till det inställda området?\n" + +# AI Translated +#~ msgid "Head diameter" +#~ msgstr "Huvuddiameter" + # AI Translated #~ msgid "Print order within a single layer." #~ msgstr "Utskriftsordning inom ett enskilt lager." diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index a419ba320e..7f86af0e5e 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -4720,6 +4720,20 @@ msgstr "อุณหภูมิห้องพิมพ์ปัจจุบั msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "อุณหภูมิห้องพิมพ์ต่ำสุด (%d℃) สูงกว่าอุณหภูมิห้องพิมพ์เป้าหมาย (%d℃) ค่าต่ำสุดคือเกณฑ์ที่การพิมพ์จะเริ่มต้นในขณะที่ห้องพิมพ์ยังคงร้อนขึ้นไปสู่เป้าหมาย จึงไม่ควรเกินค่าเป้าหมาย ระบบจะจำกัดค่าให้เท่ากับเป้าหมาย" +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "ปรับ" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4840,6 +4854,12 @@ msgstr "" "ใช่ - เปิดใช้งาน Arachne Wall Generator\n" "ไม่ - ปิดการใช้งาน Arachne Wall Generator และตั้งค่าโหมด [Displacement] ของ Fuzzy Skin" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "ความกว้าง ขอบยึดชิ้นงาน" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "โหมดเกลียวจะทำงานเฉพาะเมื่อลูปติดผนังเป็น 1, ปิดใช้งานส่วนรองรับ, การตรวจจับการจับตัวเป็นก้อนโดยการตรวจวัดถูกปิดใช้งาน, ชั้นเปลือกด้านบนเป็น 0, ความหนาแน่นของไส้ในแบบกระจายเป็น 0 และประเภทไทม์แลปส์เป็นแบบดั้งเดิม" @@ -4855,6 +4875,9 @@ msgstr "" "ใช่ - เปลี่ยนการตั้งค่าเหล่านี้และเปิดใช้งานโหมดเกลียวโดยอัตโนมัติ\n" "ไม่ - เลิกใช้โหมดเกลียวในครั้งนี้" +msgid "N/A" +msgstr "ไม่มี" + msgid "Printing" msgstr "กำลังพิมพ์" @@ -5094,6 +5117,12 @@ msgstr "ไม่สามารถสร้าง cali G-code" msgid "Calibration error" msgstr "ข้อผิดพลาดในการสอบเทียบ" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "เครือข่ายไม่พร้อมใช้งาน" @@ -5306,9 +5335,6 @@ msgstr "รูปแบบไม่ถูกต้อง ใช้ N, N#K หร msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "รูปแบบไม่ถูกต้อง รูปแบบเวกเตอร์ที่ต้องการ: \"%1%\"" -msgid "N/A" -msgstr "ไม่มี" - # AI Translated msgid "System agents" msgstr "เอเจนต์ระบบ" @@ -5952,7 +5978,7 @@ msgstr "ปริมาณ:" msgid "Size:" msgstr "ขนาด:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "พบความขัดแย้งของเส้นทางรหัส G ที่เลเยอร์ %d, Z = %.2lfmm โปรดแยกวัตถุที่ขัดแย้งกันให้ไกลออกไป (%s <-> %s)" @@ -6133,6 +6159,9 @@ msgstr "หลายอุปกรณ์" msgid "Project" msgstr "โปรเจกต์" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "ใช่" @@ -6260,6 +6289,12 @@ msgstr "บันทึกโปรเจกต์เป็น" msgid "Save current project as" msgstr "บันทึกโครงการปัจจุบันเป็น" +msgid "Publish" +msgstr "เผยแพร่" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "นำเข้า 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8038,6 +8073,12 @@ msgstr "โปรดยืนยันว่ารหัส G ภายในค msgid "Customized Preset" msgstr "ค่าที่ตั้งไว้ล่วงหน้าที่กำหนดเอง" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF8!" @@ -8199,19 +8240,19 @@ msgstr "ไม่ได้เลือกไดเรกทอรีสำหร msgid "Replaced with 3D files from directory:\n" msgstr "แทนที่ด้วยไฟล์ 3D จากไดเรกทอรี:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ ข้าม %s: ไฟล์เดียวกัน\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ ข้าม %s: ไม่มีไฟล์อยู่\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ ข้าม %s: ไม่สามารถแทนที่ได้\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔แทนที่ %s\n" @@ -8421,6 +8462,14 @@ msgstr "บันทึกไฟล์ที่สไลซ์เป็น:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "ไฟล์ %s ถูกส่งไปยังพื้นที่เก็บข้อมูลของเครื่องพิมพ์แล้ว และสามารถดูได้บนเครื่องพิมพ์" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ไม่ได้ตั้งค่าประเภทหัวฉีด โปรดตั้งหัวฉีดแล้วลองอีกครั้ง" @@ -9299,6 +9348,14 @@ msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้ msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "แสดงค่าที่ตั้งไว้ล่วงหน้าที่ไม่เข้ากันหรือไม่รองรับในรายการเลือกเครื่องพิมพ์และเส้นพลาสติก ไม่สามารถเลือกค่าที่ตั้งไว้ล่วงหน้าเหล่านี้ได้" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "ฟีเจอร์ทดลอง" @@ -9535,9 +9592,6 @@ msgstr "ข้ามไปที่โมเดลเผยแพร่หน้ msgid "Note: The preparation may take several minutes. Please be patient." msgstr "หมายเหตุ: การเตรียมการอาจใช้เวลาหลายนาที กรุณาอดทน." -msgid "Publish" -msgstr "เผยแพร่" - msgid "Publish was canceled" msgstr "การเผยแพร่ถูกยกเลิก" @@ -9553,6 +9607,21 @@ msgstr "กำลังอัพโหลดข้อมูล" msgid "Jump to webpage" msgstr "ข้ามไปที่หน้าเว็บ" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "บันทึก %s เป็น" @@ -9563,9 +9632,21 @@ msgstr "พรีเซ็ตผู้ใช้" msgid "Preset Inside Project" msgstr "พรีเซ็ตภายในโปรเจ็กต์" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "แยกออกจากพรีเซ็ตแม่" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "ชื่อไม่พร้อมใช้งาน" @@ -10305,22 +10386,6 @@ msgstr "คุณแน่ใจหรือไม่ว่าต้องกา msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "โดยทั่วไปรูปแบบไส้ในได้รับการออกแบบให้รองรับการหมุนโดยอัตโนมัติเพื่อให้แน่ใจว่าการพิมพ์ถูกต้องและบรรลุผลตามที่ต้องการ (เช่น Gyroid, ลูกบาศก์) การหมุนรูปแบบ ไส้ใน แบบกระจัดกระจายในปัจจุบันอาจทำให้ส่วนรองรับไม่เพียงพอ โปรดดำเนินการด้วยความระมัดระวังและตรวจสอบปัญหาการพิมพ์ที่อาจเกิดขึ้นอย่างละเอียด คุณแน่ใจหรือไม่ว่าต้องการเปิดใช้งานตัวเลือกนี้" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"ความสูงของเลเยอร์น้อยเกินไป\n" -"มันจะตั้งค่าเป็น min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "ความสูงของเลเยอร์เกินขีดจำกัดในการตั้งค่าเครื่องพิมพ์ -> ชุดดันเส้น -> ขีดจำกัดความสูงของเลเยอร์ ซึ่งอาจทำให้เกิดปัญหาคุณภาพการพิมพ์" - -msgid "Adjust to the set range automatically?\n" -msgstr "ปรับเป็นช่วงที่ตั้งไว้อัตโนมัติ?\n" - -msgid "Adjust" -msgstr "ปรับ" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "คุณลักษณะการทดลอง: การดึงกลับและตัดเส้นพลาสติกออกในระยะห่างที่มากขึ้นระหว่างการเปลี่ยนเส้นพลาสติกเพื่อลดการไล่เส้น แม้ว่าจะสามารถลดการไล่เส้นได้อย่างเห็นได้ชัด แต่ก็อาจเพิ่มความเสี่ยงของการอุดตันของหัวฉีดหรือภาวะแทรกซ้อนในการพิมพ์อื่นๆ อีกด้วย" @@ -10513,6 +10578,9 @@ msgstr "พบคีย์เวิร์ดที่สงวนไว้" msgid "Setting Overrides" msgstr "การตั้งค่าการแทนที่" +msgid "Retraction when switching material" +msgstr "การร่นกลับเมื่อเปลี่ยนวัสดุ" + msgid "Basic information" msgstr "ข้อมูลพื้นฐาน" @@ -10642,6 +10710,12 @@ msgstr "โปรไฟล์กระบวนการที่เข้าก msgid "Printable space" msgstr "พื้นที่ที่สามารถพิมพ์ได้" +msgid "Printer Agent" +msgstr "ตัวแทนเครื่องพิมพ์" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "เลือกการใช้งานตัวแทนเครือข่ายสำหรับการสื่อสารของเครื่องพิมพ์ ตัวแทนที่มีอยู่จะได้รับการลงทะเบียนเมื่อเริ่มต้น" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10767,9 +10841,6 @@ msgstr "การจำกัดความสูงของเลเยอร msgid "Z-Hop" msgstr "ยกแกน Z" -msgid "Retraction when switching material" -msgstr "การร่นกลับเมื่อเปลี่ยนวัสดุ" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12111,6 +12182,9 @@ msgstr "อยู่ใกล้เขตหวงห้ามมากเกิ msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr "อยู่ใกล้พื้นที่การตรวจจับการจับตัวกันมากเกินไป และจะเกิดการชนกัน\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "อุณหภูมิหัวฉีดที่เลือกเข้ากันไม่ได้ อุณหภูมิหัวฉีดของเส้นพลาสติกแต่ละเส้นต้องอยู่ในช่วงอุณหภูมิหัวฉีดที่แนะนำของเส้นพลาสติกอื่นๆ มิฉะนั้นอาจเกิดการอุดตันของหัวฉีดหรือเครื่องพิมพ์เสียหายได้" @@ -12426,9 +12500,6 @@ msgstr "ใช้ 3MF แทน G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "เปิดใช้งานหากเครื่องพิมพ์รับไฟล์ 3MF เป็นงานพิมพ์ เมื่อเปิดใช้งาน OrcaSlicer จะส่งไฟล์ที่สไลซ์แล้วเป็น .gcode.3mf แทนไฟล์ .gcode ธรรมดา" -msgid "Printer Agent" -msgstr "ตัวแทนเครื่องพิมพ์" - msgid "Select the network agent implementation for printer communication." msgstr "เลือกการใช้งานตัวแทนเครือข่ายสำหรับการสื่อสารของเครื่องพิมพ์" @@ -13103,9 +13174,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "ความเร็วของสะพานภายใน หากค่าแสดงเป็นเปอร์เซ็นต์ ค่าดังกล่าวจะถูกคำนวณตาม bridge_speed ค่าเริ่มต้นคือ 150%" -msgid "Brim width" -msgstr "ความกว้าง ขอบยึดชิ้นงาน" - msgid "This is the distance from the model to the outermost brim line." msgstr "ระยะห่างจากแบบจำลองถึงเส้นขอบยึดชิ้นงานด้านนอกสุด" @@ -13185,6 +13253,12 @@ msgstr "" "รูปทรงจะถูกทำลายก่อนที่จะตรวจจับมุมแหลม พารามิเตอร์นี้ระบุความยาวขั้นต่ำของการเบี่ยงเบนสำหรับการทำลาย\n" "0 เพื่อปิดการใช้งาน" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "เครื่องที่รองรับขึ้นไป" @@ -14351,6 +14425,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "ไจรอยด์" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "ความเร่งของไส้ในพื้นผิวด้านบน การใช้ค่าที่ต่ำกว่าอาจปรับปรุงคุณภาพพื้นผิวด้านบนได้" @@ -14893,6 +14973,12 @@ msgstr "เครื่องพิมพ์ G-code ชนิดใดที่ msgid "Klipper" msgstr "คลิปเปอร์" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "เครื่องพิมพ์ Modded เม็ด" @@ -15945,6 +16031,12 @@ msgstr "การถอยกลับนานเมื่อเปลี่ย msgid "Retraction distance when extruder change" msgstr "ระยะการดึงกลับเมื่อชุดดันเส้นเปลี่ยน" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "ความสูงยกแกน Z" @@ -16039,6 +16131,9 @@ msgstr "ความยาวพิเศษเมื่อรีสตาร์ msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "เมื่อชดเชยการดึงกลับหลังการเคลื่อนที่เดินทาง ชุดดันเส้นจะดันเส้นพลาสติกเพิ่มเติมในปริมาณนี้ การตั้งค่านี้ไม่ค่อยจำเป็น" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "เมื่อชดเชยการดึงกลับหลังเปลี่ยนเครื่องมือ ชุดดันเส้นจะดันเส้นพลาสติกเพิ่มเติมในปริมาณนี้" @@ -16451,6 +16546,12 @@ msgstr "การเปลี่ยนเครื่องมือบน Wipe msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "บังคับให้หัวเครื่องมือเคลื่อนที่ไปที่ Wipe Tower ก่อนที่จะออกคำสั่งเปลี่ยนเครื่องมือ (Tx) เกี่ยวข้องเฉพาะกับเครื่องพิมพ์ที่มีชุดดันเส้นหลายเครื่อง (หลายหัวเครื่องมือ) ที่ใช้แผ่นเช็ดแบบ Type 2 ตามค่าเริ่มต้น Orca จะข้ามการเดินทางบนเครื่องที่มีหัวเครื่องมือหลายหัวเนื่องจากเฟิร์มแวร์จัดการการสลับหัว ซึ่งอาจส่งผลให้มีการออกคำสั่ง Tx เหนือส่วนที่พิมพ์ เปิดใช้งานตัวเลือกนี้หากคุณต้องการให้ทำการเปลี่ยนแปลงเครื่องมือเหนือ Wipe Tower แทนเสมอ" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "ไม่มีชั้นกระจัดกระจาย (เบต้า)" @@ -19681,9 +19782,6 @@ msgstr "เครื่องพิมพ์ทางกายภาพ" msgid "Print Host upload" msgstr "อัพโหลดโฮสต์การพิมพ์" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "เลือกการใช้งานตัวแทนเครือข่ายสำหรับการสื่อสารของเครื่องพิมพ์ ตัวแทนที่มีอยู่จะได้รับการลงทะเบียนเมื่อเริ่มต้น" - msgid "Select a Flashforge printer" msgstr "เลือกเครื่องพิมพ์ Flashforge" @@ -20575,9 +20673,6 @@ msgstr "เกิดสิ่งที่ไม่คาดคิดขณะพ msgid "User canceled." msgstr "ผู้ใช้ยกเลิก" -msgid "Head diameter" -msgstr "เส้นผ่านศูนย์กลางหัว" - msgid "Max angle" msgstr "มุมสูงสุด" @@ -21361,6 +21456,22 @@ msgstr "" "หลีกเลี่ยงการบิดเบี้ยว\n" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "ความสูงของเลเยอร์น้อยเกินไป\n" +#~ "มันจะตั้งค่าเป็น min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "ความสูงของเลเยอร์เกินขีดจำกัดในการตั้งค่าเครื่องพิมพ์ -> ชุดดันเส้น -> ขีดจำกัดความสูงของเลเยอร์ ซึ่งอาจทำให้เกิดปัญหาคุณภาพการพิมพ์" + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "ปรับเป็นช่วงที่ตั้งไว้อัตโนมัติ?\n" + +#~ msgid "Head diameter" +#~ msgstr "เส้นผ่านศูนย์กลางหัว" + #~ msgid "Print order within a single layer." #~ msgstr "สั่งพิมพ์ภายในชั้นเดียว" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 467b3c355b..944c322a94 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-08-01 20:32+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -4812,6 +4812,20 @@ msgstr "Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksek msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Minimum oda sıcaklığı (%d℃), hedef oda sıcaklığından (%d℃) yüksek. Minimum değer, oda hedefe doğru ısınmaya devam ederken baskının başladığı eşiktir; bu nedenle hedefi aşmamalıdır. Değer hedefe sınırlandırılacak." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Ayarla" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4932,6 +4946,12 @@ msgstr "" "Evet - Arachne Duvarı Oluşturucusunu Etkinleştir\n" "Hayır - Arachne Duvarı Oluşturucusunu Devre Dışı Bırak ve Pütürlü Yüzey [Yer Değiştirme] modunu ayarla" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Kenar genişliği" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Spiral mod yalnızca duvar döngüleri 1 olduğunda, destek devre dışı bırakıldığında, problama yoluyla topaklanma tespiti devre dışı bırakıldığında, üst kabuk katmanları 0 olduğunda, seyrek dolgu yoğunluğu 0 olduğunda ve hızlandırılmış tip geleneksel olduğunda çalışır." @@ -4947,6 +4967,10 @@ msgstr "" "Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" +# AI Translated +msgid "N/A" +msgstr "Yok" + msgid "Printing" msgstr "Baskı" @@ -5186,6 +5210,12 @@ msgstr "Cali G-code oluşturma başarısız oldu" msgid "Calibration error" msgstr "Kalibrasyon hatası" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Ağ kullanılamıyor" @@ -5398,10 +5428,6 @@ msgstr "Geçersiz kalıp. N, N#K veya giriş başına isteğe bağlı #K ile vir msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Geçersiz format. Beklenen vektör formatı: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Yok" - # AI Translated msgid "System agents" msgstr "Sistem aracıları" @@ -6050,7 +6076,7 @@ msgstr "Hacim:" msgid "Size:" msgstr "Boyut:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "%d katmanında gcode yollarında çakışmalar bulundu, Z = %.2lfmm. Lütfen çakışan nesneleri daha uzağa ayırın (%s <-> %s)." @@ -6232,6 +6258,9 @@ msgstr "Çoklu cihaz" msgid "Project" msgstr "Proje" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Evet" @@ -6360,6 +6389,12 @@ msgstr "Projeyi farklı kaydet" msgid "Save current project as" msgstr "Mevcut projeyi farklı kaydet" +msgid "Publish" +msgstr "Yayınla" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF'yi içe aktar" @@ -8170,6 +8205,12 @@ msgstr "Lütfen bu ön ayarlar içindeki G-kodlarının makineye herhangi bir za msgid "Customized Preset" msgstr "Özel Ayar" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Step dosyasındaki bileşenlerin adı UTF8 formatında değil!" @@ -8335,19 +8376,19 @@ msgstr "Değiştirme için dizin seçilmedi" msgid "Replaced with 3D files from directory:\n" msgstr "Dizindeki 3D dosyalarla değiştirildi:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ %s atlandı: aynı dosya.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ %s atlandı: dosya mevcut değil.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ %s atlandı: değiştirilemedi.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ %s değiştirildi.\n" @@ -8557,6 +8598,14 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda görüntülenebiliyor." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozul tipi ayarlanmamış. Lütfen nozulu ayarlayın ve tekrar deneyin." @@ -9477,6 +9526,14 @@ msgstr "Desteklenmeyen ön ayarları göster" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Yazıcı ve filament açılır listelerinde uyumsuz/desteklenmeyen ön ayarları gösterir. Bu ön ayarlar seçilemez." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Deneysel Özellikler" @@ -9716,9 +9773,6 @@ msgstr "Model yayınlama web sayfasına git" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Not: Hazırlık birkaç dakika sürebilir. Lütfen sabırlı olun." -msgid "Publish" -msgstr "Yayınla" - msgid "Publish was canceled" msgstr "Yayınlama iptal edildi" @@ -9734,6 +9788,21 @@ msgstr "Veriler yükleniyor" msgid "Jump to webpage" msgstr "Web sayfasına atla" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s'yi farklı kaydet" @@ -9744,9 +9813,21 @@ msgstr "Kullanıcı Ön Ayarı" msgid "Preset Inside Project" msgstr "Ön ayar içerisinde proje" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "Ebeveynden ayrıl" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Ad kullanılamıyor." @@ -10496,22 +10577,6 @@ msgstr "Bu seçeneği etkinleştirmek istediğinizden emin misiniz?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Dolgu desenleri genellikle, doğru baskı alınmasını ve istenen etkilerin (ör. Gyroid, Kübik) elde edilmesini sağlamak için döndürme işlemini otomatik olarak yapacak şekilde tasarlanmıştır. Mevcut seyrek dolgu desenini döndürmek, yetersiz destekle sonuçlanabilir. Lütfen dikkatli ilerleyin ve olası baskı sorunlarını iyice kontrol edin. Bu seçeneği etkinleştirmek istediğinizden emin misiniz?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Katman yüksekliği çok küçük.\n" -"min_layer_height olarak ayarlanacak\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına neden olabilir." - -msgid "Adjust to the set range automatically?\n" -msgstr "Ayarlanan aralığa otomatik olarak ayarlansın mı?\n" - -msgid "Adjust" -msgstr "Ayarla" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Deneysel özellik: Filament değişiklikleri sırasında, floşu en aza indirmek için filamenti daha büyük bir mesafeden geri çekmek ve kesmek. Flush’u önemli ölçüde azaltabilmesine rağmen, aynı zamanda nozul tıkanmaları veya diğer yazdırma komplikasyonları riskini de artırabilir." @@ -10710,6 +10775,9 @@ msgstr "Ayrılmış anahtar kelimeler bulundu" msgid "Setting Overrides" msgstr "Ayarların Üzerine Yazma" +msgid "Retraction when switching material" +msgstr "Malzemeyi Değiştirirken Geri Çekme" + msgid "Basic information" msgstr "Temel Bilgiler" @@ -10843,6 +10911,12 @@ msgstr "Uyumlu süreç profilleri" msgid "Printable space" msgstr "Plaka Ayarı" +msgid "Printer Agent" +msgstr "Yazıcı Aracısı" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Yazıcı iletişimi için ağ aracısı uygulamasını seçin. Kullanılabilir aracılar başlangıçta kaydedilir." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10973,9 +11047,6 @@ msgstr "Katman Yüksekliği Sınırları" msgid "Z-Hop" msgstr "Z Sıçraması" -msgid "Retraction when switching material" -msgstr "Malzemeyi Değiştirirken Geri Çekme" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12353,6 +12424,9 @@ msgstr " dışlama alanına çok yakın ve çarpışmalara neden olacak.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " topaklanma algılama alanına çok yakın, çarpışmalar meydana gelecektir.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Seçilen nozul sıcaklıkları uyumsuz. Her filamentin nozul sıcaklığı, diğer filamentlerin önerilen nozul sıcaklığı aralığında olmalıdır. Aksi hâlde nozul tıkanması veya yazıcıda hasar oluşabilir." @@ -12688,9 +12762,6 @@ msgstr "G-code yerine 3MF kullan" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Yazıcı, baskı işi olarak 3MF dosyası kabul ediyorsa bunu etkinleştirin. Etkinleştirildiğinde Orca Slicer, dilimlenmiş dosyayı düz bir .gcode dosyası yerine .gcode.3mf olarak gönderir." -msgid "Printer Agent" -msgstr "Yazıcı Aracısı" - msgid "Select the network agent implementation for printer communication." msgstr "Yazıcı iletişimi için ağ aracısı uygulamasını seçin." @@ -13376,9 +13447,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "İç köprülerin hızı. Değer yüzde olarak ifade edilirse köprü hızına göre hesaplanacaktır. Varsayılan değer %150’dir." -msgid "Brim width" -msgstr "Kenar genişliği" - msgid "This is the distance from the model to the outermost brim line." msgstr "Modelden en dış kenar çizgisine kadar olan mesafe." @@ -13463,6 +13531,12 @@ msgstr "" "Keskin açılar algılanmadan önce geometri azaltılacaktır. Bu parametre, azaltma için minimum sapma uzunluğunu belirtir.\n" "Devre dışı bırakmak için 0." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "yukarı doğru uyumlu makine" @@ -14647,6 +14721,12 @@ msgstr "Tpms-fk" msgid "Gyroid" msgstr "Jiroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması üst yüzey kalitesini iyileştirebilir." @@ -15205,6 +15285,12 @@ msgstr "Yazıcının ne tür bir gcode ile uyumlu olduğu." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Pelet modlu yazıcı" @@ -16292,6 +16378,12 @@ msgstr "Ekstruder değiştiğinde uzun geri çekilme" msgid "Retraction distance when extruder change" msgstr "Ekstruder değiştiğinde geri çekilme mesafesi" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z-Sıçrama yüksekliği" @@ -16391,6 +16483,9 @@ msgstr "Yeniden başlatma sırasında ekstra uzunluk" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "İlerleme hareketinden sonra geri çekilme telafi edildiğinde, ekstruder bu ek filament miktarını itecektir. Bu ayara nadiren ihtiyaç duyulur." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Takım değiştirildikten sonra geri çekilme telafi edildiğinde, ekstruder bu ilave filament miktarını itecektir." @@ -16808,6 +16903,12 @@ msgstr "Silme kulesinde takım değişimi" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Takım değişimi komutu (Tx) verilmeden önce baskı kafasını silme kulesine gitmeye zorlar. Yalnızca Tip 2 silme kulesi kullanan çok ekstruderli (çok baskı kafalı) yazıcılar için geçerlidir. Orca, çok baskı kafalı makinelerde bu seyahati varsayılan olarak atlar çünkü kafa değişimini ürün yazılımı yönetir; bu da Tx komutunun yazdırılan parçanın üzerinde verilmesine yol açabilir. Takım değişiminin her zaman silme kulesinin üzerinde verilmesini istiyorsanız bu seçeneği etkinleştirin." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Seyrek katman yok (beta)" @@ -20092,9 +20193,6 @@ msgstr "Fiziksel Yazıcı" msgid "Print Host upload" msgstr "Yazıcı Bağlantı Ayarları" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Yazıcı iletişimi için ağ aracısı uygulamasını seçin. Kullanılabilir aracılar başlangıçta kaydedilir." - # AI Translated msgid "Select a Flashforge printer" msgstr "Bir Flashforge yazıcısı seçin" @@ -21037,9 +21135,6 @@ msgstr "Giriş yapmaya çalışırken beklenmeyen bir şey oldu, lütfen tekrar msgid "User canceled." msgstr "Kullanıcı iptal edildi." -msgid "Head diameter" -msgstr "Kafa çapı" - msgid "Max angle" msgstr "Maksimum açı" @@ -21768,7 +21863,8 @@ msgstr "" "Baskılarınızı plakalara ayırın\n" "Çok sayıda parçası olan bir modeli baskıya hazır ayrı kalıplara bölebileceğinizi biliyor muydunuz? Bu, tüm parçaları takip etme sürecini basitleştirecektir." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -21841,7 +21937,8 @@ msgstr "" "Gücü artırın\n" "Modelin gücünü artırmak için daha fazla duvar halkası ve daha yüksek seyrek dolgu yoğunluğu kullanabileceğinizi biliyor muydunuz?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer +#: door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." @@ -21857,6 +21954,22 @@ msgstr "" "Eğilmeyi önleyin\n" "ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Katman yüksekliği çok küçük.\n" +#~ "min_layer_height olarak ayarlanacak\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına neden olabilir." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Ayarlanan aralığa otomatik olarak ayarlansın mı?\n" + +#~ msgid "Head diameter" +#~ msgstr "Kafa çapı" + #~ msgid "Print order within a single layer." #~ msgstr "Tek bir katmanda yazdırma sırası." diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 9204a67ec3..5c162e8475 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -4716,6 +4716,20 @@ msgstr "Поточна температура камери вища, ніж бе msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Мінімальна температура камери (%d℃) вища за цільову температуру камери (%d℃). Мінімальне значення — це поріг, за якого починається друк, поки камера продовжує нагріватися до цільової температури, тому воно не повинно її перевищувати. Значення буде обмежено цільовим." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Налаштувати" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4839,6 +4853,12 @@ msgstr "" "Так - Увімкнути генератор стінок Arachne\n" "Ні - Вимкнути генератор стінок Arachne і встановити режим [Зміщення] для шорсткої поверхні" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Ширина кайми" + # AI Translated msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Спіральний режим працює лише тоді, коли кількість стінок дорівнює 1, підтримки вимкнено, виявлення налипання зондуванням вимкнено, кількість верхніх шарів оболонки дорівнює 0, щільність часткового заповнення дорівнює 0, а тип таймлапсу — традиційний." @@ -4855,6 +4875,9 @@ msgstr "" "Так – змінити ці налаштування та автоматично включити режим спіральна ваза\n" "Ні - цього разу відмовитися від використання режиму спіральна ваза" +msgid "N/A" +msgstr "Н/Д" + msgid "Printing" msgstr "Друк" @@ -5104,6 +5127,12 @@ msgstr "Не вдалося згенерувати калібрувальний msgid "Calibration error" msgstr "Помилка калібрування" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Мережа недоступна" @@ -5318,9 +5347,6 @@ msgstr "Некоректний шаблон. Використовуйте N, N#K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Невірний формат. Очікуваний векторний формат: \"%1%\"" -msgid "N/A" -msgstr "Н/Д" - # AI Translated msgid "System agents" msgstr "Системні агенти" @@ -5978,7 +6004,7 @@ msgid "Size:" msgstr "Розмір:" # AI Translated -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Виявлено конфлікти шляхів G-коду на шарі %d, Z = %.2lf мм. Будь ласка, рознесіть конфліктуючі обʼєкти далі один від одного (%s <-> %s)." @@ -6170,6 +6196,9 @@ msgstr "Багато пристроїв" msgid "Project" msgstr "Проєкт" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Так" @@ -6297,6 +6326,12 @@ msgstr "Зберегти проєкт як" msgid "Save current project as" msgstr "Зберегти поточний проєкт як" +msgid "Publish" +msgstr "Публікувати" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8143,6 +8178,12 @@ msgstr "Будь ласка, підтвердьте, що G-коди в цих msgid "Customized Preset" msgstr "Пристосований пресет" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Назви компонентів усередині файлу STEP не у форматі UTF8!" @@ -8306,19 +8347,19 @@ msgstr "Каталог для заміни не вибрано" msgid "Replaced with 3D files from directory:\n" msgstr "Замінено 3D-файлами з каталогу:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Пропущено %s: той самий файл.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Пропущено %s: файл не існує.\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Пропущено %s: не вдалося замінити.\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Замінено %s.\n" @@ -8531,6 +8572,14 @@ msgstr "Зберегти нарізаний файл як:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s надіслано до памʼяті принтера та доступний для перегляду на принтері." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Тип сопла не встановлений. Будь ласка, оберіть сопло та спробуйте ще раз." @@ -9446,6 +9495,14 @@ msgstr "Показати непідтримувані пресети" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Показати несумісні/непідтримувані пресети у випадаючому списку принтера і філаменту. Ці пресети не можна вибрати." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + msgid "Experimental Features" msgstr "Експериментальні функції" @@ -9682,9 +9739,6 @@ msgstr "Перейти на веб-сторінку публікації мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примітка. Підготовка може тривати кілька хвилин. Будь ласка, будьте терплячі." -msgid "Publish" -msgstr "Публікувати" - msgid "Publish was canceled" msgstr "Публікація скасована" @@ -9700,6 +9754,21 @@ msgstr "Відвантаження даних" msgid "Jump to webpage" msgstr "Перейти на вебсторінку" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Зберегти %s як" @@ -9710,10 +9779,22 @@ msgstr "Пресети користувача" msgid "Preset Inside Project" msgstr "Налаштування проекту всередині" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Відʼєднати від батьківського" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Назва недоступна." @@ -10492,22 +10573,6 @@ msgstr "Ви впевнені, що хочете ввімкнути цю опц msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Шаблони заповнення зазвичай розроблені так, щоб автоматично враховувати обертання, забезпечувати належний друк і досягати задуманого ефекту (наприклад, Гіроїд, Кубічний). Обертання поточного шаблону часткового заповнення може призвести до недостатньої підтримки. Дійте обережно та ретельно перевіряйте можливі проблеми друку. Ви впевнені, що хочете увімкнути цю опцію?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Висота шару занадто мала.\n" -"Буде встановлено значення min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Висота шару перевищує ліміт у Налаштуваннях принтера -> Екструдер -> Ліміти висоти шару, це може призвести до проблем з якістю друку." - -msgid "Adjust to the set range automatically?\n" -msgstr "Автоматично налаштувати на встановлений діапазон?\n" - -msgid "Adjust" -msgstr "Налаштувати" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Експериментальна функція: Втягування та відрізання філаменту на більшій відстані під час зміни філаменту для мінімізації промивання. Хоча це може помітно зменшити промивання, це також може підвищити ризик засмічення сопла або інших ускладнень друку." @@ -10711,6 +10776,9 @@ msgstr "Знайдено зарезервовані ключові слова" msgid "Setting Overrides" msgstr "Налаштування перевизначень" +msgid "Retraction when switching material" +msgstr "Втягування під час зміни матеріалу" + msgid "Basic information" msgstr "Базова інформація" @@ -10848,6 +10916,13 @@ msgstr "Сумісні профілі процесів" msgid "Printable space" msgstr "Місце для друку" +msgid "Printer Agent" +msgstr "Агент принтера" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Виберіть реалізацію мережевого агента для звʼязку з принтером. Доступні агенти реєструються під час запуску." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10978,9 +11053,6 @@ msgstr "Обмеження висоти шару" msgid "Z-Hop" msgstr "Стрибок-Z" -msgid "Retraction when switching material" -msgstr "Втягування під час зміни матеріалу" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12376,6 +12448,9 @@ msgstr " знаходиться надто близько до зони відч msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " розташовано занадто близько до зони виявлення налипання, і це спричинить зіткнення.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Вибрані температури сопла несумісні. Температура сопла кожного філаменту має входити в рекомендований діапазон температур сопла інших філаментів. Інакше можливе засмічення сопла або пошкодження принтера." @@ -12722,9 +12797,6 @@ msgstr "Використовувати 3MF замість G-коду" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Увімкніть, якщо принтер приймає файл 3MF як завдання друку. Якщо увімкнено, Orca Slicer надсилає нарізаний файл як .gcode.3mf замість звичайного файлу .gcode." -msgid "Printer Agent" -msgstr "Агент принтера" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Виберіть реалізацію мережевого агента для звʼязку з принтером." @@ -13438,9 +13510,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Швидкість внутрішніх мостів. Якщо значення вказано у відсотках, воно буде розраховане на основі bridge_speed. Значення за замовчуванням: 150%." -msgid "Brim width" -msgstr "Ширина кайми" - msgid "This is the distance from the model to the outermost brim line." msgstr "Відстань від моделі до останньої зовнішньої лінії кайми" @@ -13525,6 +13594,12 @@ msgstr "" "Геометрія буде оброблена перед детектуванням гострих кутів. Цей параметр вказує мінімальну довжину відхилення для обробки.\n" "0 для вимкнення" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "висхідна сумісна машина" @@ -14734,6 +14809,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Гіроїд" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Прискорення заповнення верхньої поверхні. Використання меншого значенняможе покращити якість верхньої поверхні" @@ -15300,6 +15381,12 @@ msgstr "З яким gcode сумісний принтер" msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Принтер модифікований гранулами" @@ -16438,6 +16525,12 @@ msgstr "Довге втягування при зміні екструдера" msgid "Retraction distance when extruder change" msgstr "Відстань втягування при зміні екструдера" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Висота Z-підйому" @@ -16534,6 +16627,9 @@ msgstr "Додаткова довжина під час перезавантаж msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Коли втягування компенсується після переміщення, екструдер проштовхуєЦе додаткова кількість нитки. Ця установка рідко потрібна." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Коли втягування компенсується після заміни інструменту, екструдерпроштовхує цю додаткову кількість нитки." @@ -16960,6 +17056,12 @@ msgstr "Зміна інструмента на вежі протирання" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Примусово переміщати головку до вежі протирання перед видачею команди зміни інструмента (Tx). Стосується лише багатоекструдерних (багатоінструментальних) принтерів з вежею протирання типу 2. Типово Orca пропускає це переміщення на багатоінструментальних машинах, оскільки заміну головки виконує прошивка, через що команда Tx може бути видана над надрукованою деталлю. Увімкніть цю опцію, якщо хочете, щоб зміна інструмента завжди відбувалася над вежею протирання." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Без розріджених шарів (бета)" @@ -20304,10 +20406,6 @@ msgstr "Фізичний принтер" msgid "Print Host upload" msgstr "Завантаження хоста друку" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Виберіть реалізацію мережевого агента для звʼязку з принтером. Доступні агенти реєструються під час запуску." - msgid "Select a Flashforge printer" msgstr "Вибрати принтер Flashforge" @@ -21181,9 +21279,6 @@ msgstr "Під час спроби входу трапилося щось нес msgid "User canceled." msgstr "Користувача скасовано." -msgid "Head diameter" -msgstr "Діаметр голови" - msgid "Max angle" msgstr "Максимальний кут" @@ -21979,6 +22074,22 @@ msgstr "" "Уникнення деформації\n" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Висота шару занадто мала.\n" +#~ "Буде встановлено значення min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Висота шару перевищує ліміт у Налаштуваннях принтера -> Екструдер -> Ліміти висоти шару, це може призвести до проблем з якістю друку." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Автоматично налаштувати на встановлений діапазон?\n" + +#~ msgid "Head diameter" +#~ msgstr "Діаметр голови" + #~ msgid "Print order within a single layer." #~ msgstr "Друк замовлення в один шар" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index e6e7adf43d..f900f3fc1f 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -4975,6 +4975,20 @@ msgstr "Nhiệt độ buồng hiện tại cao hơn nhiệt độ an toàn của msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "Nhiệt độ buồng tối thiểu (%d℃) cao hơn nhiệt độ buồng mục tiêu (%d℃). Giá trị tối thiểu là ngưỡng để bắt đầu in trong khi buồng vẫn tiếp tục gia nhiệt tới mục tiêu, nên nó không được vượt quá giá trị mục tiêu. Nó sẽ được giới hạn về mức mục tiêu." +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "Điều chỉnh" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -5095,6 +5109,12 @@ msgstr "" "Yes - Bật trình tạo wall Arachne\n" "No - Tắt trình tạo wall Arachne và đặt chế độ [Displacement] của Fuzzy Skin" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Độ rộng brim" + # AI Translated msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "Chế độ xoắn ốc chỉ hoạt động khi vòng wall bằng 1, support bị tắt, phát hiện vón cục bằng dò bị tắt, số lớp vỏ trên bằng 0, mật độ infill thưa bằng 0 và loại timelapse là truyền thống." @@ -5111,6 +5131,10 @@ msgstr "" "Yes - Thay đổi các cài đặt này và bật chế độ spiral tự động\n" "No - Từ bỏ dùng chế độ spiral lần này" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Đang in" @@ -5399,6 +5423,12 @@ msgstr "Không thể tạo G-code hiệu chỉnh" msgid "Calibration error" msgstr "Lỗi hiệu chỉnh" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "Mạng không khả dụng" @@ -5621,10 +5651,6 @@ msgstr "Mẫu không hợp lệ. Dùng N, N#K, hoặc danh sách phân cách d msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Định dạng không hợp lệ. Mong đợi định dạng vector: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Tác nhân hệ thống" @@ -6317,7 +6343,7 @@ msgstr "Thể tích:" msgid "Size:" msgstr "Kích thước:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Đã tìm thấy xung đột đường đi G-code tại lớp %d, Z = %.2lfmm. Vui lòng tách các vật thể xung đột ra xa hơn (%s <-> %s)." @@ -6516,6 +6542,9 @@ msgstr "Nhiều thiết bị" msgid "Project" msgstr "Dự án" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "Có" @@ -6645,6 +6674,12 @@ msgstr "Lưu dự án thành" msgid "Save current project as" msgstr "Lưu dự án hiện tại thành" +msgid "Publish" +msgstr "Xuất bản" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Nhập 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8549,6 +8584,12 @@ msgstr "Vui lòng xác nhận G-code trong các preset này an toàn để ngăn msgid "Customized Preset" msgstr "Preset tùy chỉnh" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF8!" @@ -8721,22 +8762,22 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Đã thay thế bằng file 3D từ thư mục:\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ Đã bỏ qua %s: cùng một file.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ Đã bỏ qua %s: file không tồn tại.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ Đã bỏ qua %s: thay thế thất bại.\n" # AI Translated -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ Đã thay thế %s.\n" @@ -8952,6 +8993,14 @@ msgstr "Lưu file đã slice dưới dạng:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "File %s đã được gửi đến không gian lưu trữ của máy in và có thể được xem trên máy in." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Chưa đặt loại đầu phun. Vui lòng đặt đầu phun rồi thử lại." @@ -9947,6 +9996,14 @@ msgstr "Hiện cài đặt sẵn không được hỗ trợ" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "Hiện các cài đặt sẵn không tương thích/không được hỗ trợ trong danh sách thả xuống máy in và filament. Không thể chọn các cài đặt sẵn này." +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "Tính năng thử nghiệm" @@ -10194,9 +10251,6 @@ msgstr "Chuyển đến trang web xuất bản model" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Lưu ý: Chuẩn bị có thể mất vài phút. Vui lòng kiên nhẫn." -msgid "Publish" -msgstr "Xuất bản" - msgid "Publish was canceled" msgstr "Xuất bản đã bị hủy" @@ -10213,6 +10267,21 @@ msgstr "Đang tải dữ liệu lên" msgid "Jump to webpage" msgstr "Chuyển đến trang web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Lưu %s dưới dạng" @@ -10223,10 +10292,22 @@ msgstr "Preset người dùng" msgid "Preset Inside Project" msgstr "Preset bên trong dự án" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + # AI Translated msgid "Detach from parent" msgstr "Tách khỏi vật thể cha" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "Tên không khả dụng." @@ -11026,22 +11107,6 @@ msgstr "Bạn có chắc chắn muốn bật tùy chọn này?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "Mẫu infill thường được thiết kế để xử lý xoay tự động nhằm đảm bảo in đúng cách và đạt được hiệu quả dự kiến (ví dụ: Gyroid, Cubic). Xoay mẫu infill thưa hiện tại có thể dẫn đến support không đủ . Vui lòng tiến hành thận trọng và kiểm tra kỹ bất kỳ vấn đề in tiềm ẩn nào. Bạn có chắc chắn muốn bật tùy chọn này?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"Chiều cao lớp quá nhỏ.\n" -"Nó sẽ được đặt thành min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "Chiều cao lớp vượt quá giới hạn trong Cài đặt máy in -> Extruder -> Giới hạn chiều cao lớp, điều này có thể gây ra vấn đề chất lượng in." - -msgid "Adjust to the set range automatically?\n" -msgstr "Điều chỉnh về phạm vi đặt tự động?\n" - -msgid "Adjust" -msgstr "Điều chỉnh" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Tính năng thử nghiệm: Rút và cắt filament ở khoảng cách lớn hơn trong quá trình thay filament để giảm thiểu xả. Mặc dù có thể giảm đáng kể lượng xả, nó cũng có thể làm tăng nguy cơ tắc đầu phun hoặc các vấn đề in khác." @@ -11235,6 +11300,9 @@ msgstr "Tìm thấy từ khóa dành riêng" msgid "Setting Overrides" msgstr "Ghi đè cài đặt" +msgid "Retraction when switching material" +msgstr "Rút khi chuyển vật liệu" + msgid "Basic information" msgstr "Thông tin cơ bản" @@ -11366,6 +11434,14 @@ msgstr "Hồ sơ quy trình tương thích" msgid "Printable space" msgstr "Không gian in" +# AI Translated +msgid "Printer Agent" +msgstr "Tác nhân máy in" + +# AI Translated +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "Chọn cách triển khai tác nhân mạng cho việc giao tiếp với máy in. Các tác nhân khả dụng được đăng ký khi khởi động." + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -11498,9 +11574,6 @@ msgstr "Giới hạn chiều cao lớp" msgid "Z-Hop" msgstr "Z-Hop" -msgid "Retraction when switching material" -msgstr "Rút khi chuyển vật liệu" - # AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" @@ -12950,6 +13023,9 @@ msgstr " quá gần vùng loại trừ, và sẽ gây va chạm.\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " ở quá gần vùng phát hiện vón cục, và sẽ gây ra va chạm.\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + # AI Translated msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "Nhiệt độ đầu phun đã chọn không tương thích. Nhiệt độ đầu phun của mỗi filament phải nằm trong dải nhiệt độ đầu phun được khuyến nghị của các filament còn lại. Nếu không, có thể xảy ra tắc đầu phun hoặc hư hỏng máy in." @@ -13291,10 +13367,6 @@ msgstr "Dùng 3MF thay cho G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Bật tùy chọn này nếu máy in nhận file 3MF làm tác vụ in. Khi bật, Orca Slicer sẽ gửi file đã slice dưới dạng .gcode.3mf thay vì file .gcode thuần." -# AI Translated -msgid "Printer Agent" -msgstr "Tác nhân máy in" - # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Chọn cách triển khai tác nhân mạng cho việc giao tiếp với máy in." @@ -14002,9 +14074,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "Tốc độ của cầu bên trong. Nếu giá trị được biểu thị dưới dạng phần trăm, nó sẽ được tính dựa trên bridge_speed. Giá trị mặc định là 150%." -msgid "Brim width" -msgstr "Độ rộng brim" - msgid "This is the distance from the model to the outermost brim line." msgstr "Khoảng cách từ model đến đường brim ngoài cùng." @@ -14088,6 +14157,12 @@ msgstr "" "Hình học sẽ được giảm trước khi phát hiện góc sắc. Tham số này chỉ ra độ dài tối thiểu của độ lệch cho việc giảm.\n" "0 để vô hiệu hóa." +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "máy tương thích ngược" @@ -15305,6 +15380,12 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Gyroid" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "Gia tốc của infill bề mặt trên. Sử dụng giá trị thấp hơn có thể cải thiện chất lượng bề mặt trên." @@ -15868,6 +15949,12 @@ msgstr "Loại G-code mà máy in tương thích." msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "Máy in Pellet đã chỉnh sửa" @@ -16971,6 +17058,12 @@ msgstr "Rút dài khi đổi extruder" msgid "Retraction distance when extruder change" msgstr "Khoảng cách rút khi đổi extruder" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Chiều cao Z-hop" @@ -17069,6 +17162,9 @@ msgstr "Độ dài bổ sung khi khởi động lại" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Khi rút được bù sau khi di chuyển, extruder sẽ đẩy lượng filament bổ sung này. Cài đặt này hiếm khi cần thiết." +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Khi rút được bù sau khi thay công cụ, extruder sẽ đẩy lượng filament bổ sung này." @@ -17489,6 +17585,12 @@ msgstr "Đổi công cụ trên wipe tower" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Buộc đầu công cụ di chuyển đến wipe tower trước khi phát lệnh đổi công cụ (Tx). Chỉ liên quan đến máy in nhiều extruder (nhiều đầu công cụ) dùng wipe tower Loại 2. Theo mặc định, Orca bỏ qua bước di chuyển này trên máy nhiều đầu công cụ vì firmware tự xử lý việc đổi đầu, điều này có thể khiến lệnh Tx được phát ra ngay phía trên phần đang in. Hãy bật tùy chọn này nếu bạn muốn việc đổi công cụ luôn diễn ra phía trên wipe tower." +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "Không có lớp thưa (beta)" @@ -20849,10 +20951,6 @@ msgstr "Máy in vật lý" msgid "Print Host upload" msgstr "Tải lên máy chủ in" -# AI Translated -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "Chọn cách triển khai tác nhân mạng cho việc giao tiếp với máy in. Các tác nhân khả dụng được đăng ký khi khởi động." - # AI Translated msgid "Select a Flashforge printer" msgstr "Chọn một máy in Flashforge" @@ -21832,9 +21930,6 @@ msgstr "Đã xảy ra điều gì đó không mong đợi khi cố gắng đăng msgid "User canceled." msgstr "Người dùng đã hủy." -msgid "Head diameter" -msgstr "Đường kính đầu" - msgid "Max angle" msgstr "Góc tối đa" @@ -22702,6 +22797,22 @@ msgstr "" "Tránh cong vênh\n" "Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "Chiều cao lớp quá nhỏ.\n" +#~ "Nó sẽ được đặt thành min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "Chiều cao lớp vượt quá giới hạn trong Cài đặt máy in -> Extruder -> Giới hạn chiều cao lớp, điều này có thể gây ra vấn đề chất lượng in." + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "Điều chỉnh về phạm vi đặt tự động?\n" + +#~ msgid "Head diameter" +#~ msgstr "Đường kính đầu" + #~ msgid "Print order within a single layer." #~ msgstr "Thứ tự in trong một lớp đơn." diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 345891f250..f89ad1dd52 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -4574,6 +4574,20 @@ msgstr "当前腔体温度高于材料的安全温度,这可能导致材料软 msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "最低机箱温度(%d℃)高于目标机箱温度(%d℃)。最低值是开始打印的阈值,此时机箱会持续朝目标温度加热,因此它不应超过目标值。该值将被限制到目标值。" +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "调整" + # AI Translated msgid "" "Layer height too small\n" @@ -4696,6 +4710,12 @@ msgstr "" "是 - 启用Arachne墙生成器\n" "否 - 禁用Arachne墙生成器并将绒毛表面设置为[位移]模式" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Brim宽度" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "螺旋模式仅在壁环为 1、支撑被禁用、探测结块检测被禁用、顶部壳层为 0、稀疏填充密度为 0 且延时类型为传统时才起作用。" @@ -4711,6 +4731,9 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" +msgid "N/A" +msgstr "不适用" + msgid "Printing" msgstr "打印中" @@ -4950,6 +4973,12 @@ msgstr "生成校准gcode失败" msgid "Calibration error" msgstr "校准错误" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "网络不可用" @@ -5162,9 +5191,6 @@ msgstr "无效的模式。请使用 N、N#K 或逗号分隔的列表(每个条 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "无效格式,应该是\"%1%\"这种数组格式" -msgid "N/A" -msgstr "不适用" - # AI Translated msgid "System agents" msgstr "系统代理" @@ -5807,7 +5833,7 @@ msgstr "体积:" msgid "Size:" msgstr "尺寸:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "发现G-code路径在层%d,高度为%.2lf mm处有冲突。请将有冲突的对象分离得更远(%s <-> %s)。" @@ -5988,6 +6014,9 @@ msgstr "多设备" msgid "Project" msgstr "项目" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "是" @@ -6115,6 +6144,12 @@ msgstr "项目另存为" msgid "Save current project as" msgstr "项目另存为" +msgid "Publish" +msgstr "发布" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7869,6 +7904,12 @@ msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造 msgid "Customized Preset" msgstr "自定义的预设" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 文件中的部件名称不是 UTF8 格式!" @@ -8028,19 +8069,19 @@ msgstr "未选择替换目录" msgid "Replaced with 3D files from directory:\n" msgstr "替换为目录中的 3D 文件:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ 跳过 %s:同一文件。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ 跳过%s:文件不存在。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ 跳过%s:替换失败。\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ 替换了 %s。\n" @@ -8250,6 +8291,14 @@ msgstr "切片文件另存为:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "文件%s已经发送到打印机的存储空间,可以在打印机上浏览。" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "未设置喷嘴类型。请设置喷嘴并重试。" @@ -9121,6 +9170,14 @@ msgstr "显示不受支持的预设" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "在打印机和耗材下拉列表中显示不兼容/不受支持的预设。这些预设无法被选择。" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "实验性功能" @@ -9357,9 +9414,6 @@ msgstr "跳转到发布页面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:发布前需要一些准备时间,请耐心等待。" -msgid "Publish" -msgstr "发布" - msgid "Publish was canceled" msgstr "发布已取消" @@ -9375,6 +9429,21 @@ msgstr "正在上传数据" msgid "Jump to webpage" msgstr "跳转到网页" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "另存%s为" @@ -9385,9 +9454,21 @@ msgstr "用户预设" msgid "Preset Inside Project" msgstr "项目预设" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "与父级分离" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "名称不可用。" @@ -10093,24 +10174,6 @@ msgstr "您确定要启用此选项吗?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "填充图案通常设计为自动处理旋转,以确保正确打印并实现其预期效果(例如,Gyroid、Cubic)。旋转当前的稀疏填充图案可能会导致支撑不足。请谨慎操作并彻底检查是否存在任何潜在的打印问题。您确定要启用此选项吗?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"层高太小。\n" -"将设置为min_layer_height\n" -"层高太小。\n" -"将自动设置为min_layer_height的值\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "层高超出了打印机设置->挤出机->层高限制中的范围,这可能导致打印质量问题。" - -msgid "Adjust to the set range automatically?\n" -msgstr "是否自动调整到范围内?\n" - -msgid "Adjust" -msgstr "调整" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "实验性选项。在更换耗材丝时,将耗材丝回抽一段距离后再切断以最小化冲刷。虽然这可以显著减少冲刷,但也可能增加喷嘴堵塞或其他打印问题的风险。" @@ -10303,6 +10366,9 @@ msgstr "检测到保留的关键字" msgid "Setting Overrides" msgstr "参数覆盖" +msgid "Retraction when switching material" +msgstr "切换材料时的回抽量" + msgid "Basic information" msgstr "基础信息" @@ -10433,6 +10499,12 @@ msgstr "兼容的切片配置" msgid "Printable space" msgstr "可打印区域" +msgid "Printer Agent" +msgstr "打印机代理" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "为打印机通信选择网络代理。可用的代理将在启动时列出。" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10558,9 +10630,6 @@ msgstr "层高限制" msgid "Z-Hop" msgstr "Z轴抬升" -msgid "Retraction when switching material" -msgstr "切换材料时的回抽量" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11911,6 +11980,9 @@ msgstr "离不可打印区域太近,会发生碰撞。\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr "距离聚集检测区域太近,会引起碰撞。\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "所选的喷嘴温度不兼容。每种耗材的喷嘴温度都必须落在其他耗材的推荐喷嘴温度范围内。否则可能会发生喷嘴堵塞或打印机损坏。" @@ -12224,9 +12296,6 @@ msgstr "使用 3MF 代替 G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "如果打印机接受 3MF 文件作为打印任务,请启用此选项。启用后,Orca Slicer 将以 .gcode.3mf 格式发送切片文件,而不是普通的 .gcode 文件。" -msgid "Printer Agent" -msgstr "打印机代理" - msgid "Select the network agent implementation for printer communication." msgstr "选择打印机通信的网络代理实施。" @@ -12861,9 +12930,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "内部桥接的速度。如果该值以百分比表示,将基于桥接速度计算。默认值为150%。" -msgid "Brim width" -msgstr "Brim宽度" - msgid "This is the distance from the model to the outermost brim line." msgstr "从模型到最外圈brim走线的距离" @@ -12944,6 +13010,12 @@ msgstr "" "在检测尖锐角度之前,几何形状将被简化。此参数表示简化的最小偏差长度。\n" "设为0以停用" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "向上兼容的机器" @@ -14119,6 +14191,12 @@ msgstr "TPMS-FK结构" msgid "Gyroid" msgstr "螺旋体" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "顶面填充的加速度。使用较低值可能会改善顶面质量" @@ -14659,6 +14737,12 @@ msgstr "打印机兼容的G-code风格'" msgid "Klipper" msgstr "Klipper固件" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "颗粒改装打印机" @@ -15704,6 +15788,12 @@ msgstr "更换挤出机时长回缩" msgid "Retraction distance when extruder change" msgstr "更换挤出机时的回缩距离" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z抬升高度" @@ -15797,6 +15887,9 @@ msgstr "额外回填长度" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "每当空驶后回抽被补偿时,挤出机将推入额外数量的耗材丝。很少需要此设置。" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "当换色后回抽被补偿时,挤出机将推入额外数量的耗材丝。" @@ -16211,6 +16304,12 @@ msgstr "在擦拭塔上换头" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "在发出换头命令 (Tx) 之前,强制打印头先移动到擦拭塔。仅与使用第 2 类擦拭塔的多挤出机(多打印头)打印机相关。默认情况下,Orca 会在多打印头机器上跳过此移动,因为固件会处理换头,这可能导致 Tx 命令在打印件上方发出。如果您希望换头命令始终在擦拭塔上方发出,请启用此选项。" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "无稀疏层 (实验功能)" @@ -19433,9 +19532,6 @@ msgstr "物理打印机" msgid "Print Host upload" msgstr "打印主机上传" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "为打印机通信选择网络代理。可用的代理将在启动时列出。" - msgid "Select a Flashforge printer" msgstr "选择一台 Flashforge 打印机" @@ -20325,9 +20421,6 @@ msgstr "在尝试登录时发生了异常,请重试。" msgid "User canceled." msgstr "用户已取消。" -msgid "Head diameter" -msgstr "Brim 直径" - msgid "Max angle" msgstr "最大角度" @@ -21111,6 +21204,24 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "层高太小。\n" +#~ "将设置为min_layer_height\n" +#~ "层高太小。\n" +#~ "将自动设置为min_layer_height的值\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "层高超出了打印机设置->挤出机->层高限制中的范围,这可能导致打印质量问题。" + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "是否自动调整到范围内?\n" + +#~ msgid "Head diameter" +#~ msgstr "Brim 直径" + #~ msgid "Print order within a single layer." #~ msgstr "同一层内的打印顺序" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 9b37009978..88596d495a 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-07-29 17:40-0300\n" +"POT-Creation-Date: 2026-08-18 16:25+0800\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -4691,6 +4691,20 @@ msgstr "目前列印裝置內部溫度高於線材的安全溫度,可能會導 msgid "The minimal chamber temperature (%d℃) is higher than the target chamber temperature (%d℃). The minimal value is the threshold at which printing starts while the chamber keeps heating toward the target, so it should not exceed it. It will be clamped to the target." msgstr "最低倉室溫度(%d℃)高於目標倉室溫度(%d℃)。最低值是列印開始的門檻,此時倉室會持續朝目標溫度加熱,因此不應超過目標值。系統會將其限制在目標值。" +#, c-format, boost-format +msgid "Layer height is too small. It will be set to the minimum (%g mm)." +msgstr "" + +msgid "Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +msgstr "" + +#, c-format, boost-format +msgid "Adjust it to the limit (%g mm) automatically?" +msgstr "" + +msgid "Adjust" +msgstr "調整" + msgid "" "Layer height too small\n" "It has been reset to 0.2" @@ -4825,6 +4839,12 @@ msgstr "" "是 - 啟用 Arachne Wall 產生器\n" "否 - 停用 Arachne Wall 產生器,並將 Fuzzy Skin 設定為 [位移] 模式" +msgid "Brim ear radius" +msgstr "" + +msgid "Brim width" +msgstr "Brim 寬度" + msgid "Spiral mode only works when wall loops is 1, support is disabled, clumping detection by probing is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." msgstr "花瓶模式僅適用於牆體圈數為 1、停用支撐、停用偵測堵塞、頂部外殼層數為 0、稀疏填充密度為 0,且延時攝影類型為傳統模式時。" @@ -4840,6 +4860,9 @@ msgstr "" "是 - 自動調整這些設定並啟用花瓶模式\n" "否 - 不使用花瓶模式" +msgid "N/A" +msgstr "不適用" + msgid "Printing" msgstr "列印中" @@ -5079,6 +5102,12 @@ msgstr "產生校正代碼失敗" msgid "Calibration error" msgstr "校正錯誤" +msgid "This printer is not configured with the hardware this control needs." +msgstr "" + +msgid "This control is not supported on this printer." +msgstr "" + # AI Translated msgid "Network unavailable" msgstr "網路無法使用" @@ -5291,9 +5320,6 @@ msgstr "無效的格式。請使用 N、N#K 或逗號分隔的清單,每個項 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無效格式,應該是「%1%」這種格式" -msgid "N/A" -msgstr "不適用" - # AI Translated msgid "System agents" msgstr "系統代理程式" @@ -5936,7 +5962,7 @@ msgstr "體積:" msgid "Size:" msgstr "尺寸:" -#, c-format, boost-format +#, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "發現 G-code 路徑在 %d 層,Z = %.2lf mm 處的衝突。請將有衝突的物件分離得更遠(%s <-> %s)。" @@ -6118,6 +6144,9 @@ msgstr "多臺裝置" msgid "Project" msgstr "專案" +msgid "Device (Web)" +msgstr "" + msgid "Yes" msgstr "是" @@ -6245,6 +6274,12 @@ msgstr "另存專案為" msgid "Save current project as" msgstr "將目前專案另存為" +msgid "Publish" +msgstr "發布" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8030,6 +8065,12 @@ msgstr "請確認這些預設中的 G-code 是安全的,以防止對列印裝 msgid "Customized Preset" msgstr "自訂預設" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 檔案內部元件的名稱不是 UTF-8 格式!" @@ -8193,19 +8234,19 @@ msgstr "未選擇替換的目錄" msgid "Replaced with 3D files from directory:\n" msgstr "已從目錄替換為 3D 檔案:\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: same file.\n" msgstr "✖ 已跳過 %s:相同檔案。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: file does not exist.\n" msgstr "✖ 已跳過 %s:檔案不存在。\n" -#, c-format +#, c-format, boost-format msgid "✖ Skipped %s: failed to replace.\n" msgstr "✖ 已跳過 %s:無法替換。\n" -#, c-format +#, c-format, boost-format msgid "✔ Replaced %s.\n" msgstr "✔ 已替換 %s。\n" @@ -8416,6 +8457,14 @@ msgstr "切片檔案另存為:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "檔案 %s 已經傳送到列印裝置的儲存空間,可以在列印裝置上瀏覽。" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "噴嘴類型尚未設定。請設定噴嘴後再試一次。" @@ -9294,6 +9343,14 @@ msgstr "顯示不支援的預設" msgid "Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected." msgstr "在列印裝置和線材下拉選單中顯示不相容/不支援的預設。這些預設無法選取。" +msgid "(Experimental) Use printer agents instead of print hosts" +msgstr "" + +msgid "" +"Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\n" +"When disabled, OrcaSlicer uses the legacy print-host behavior." +msgstr "" + # AI Translated msgid "Experimental Features" msgstr "實驗性功能" @@ -9530,9 +9587,6 @@ msgstr "發布頁面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:發布前需要一些準備時間,請耐心等待。" -msgid "Publish" -msgstr "發布" - msgid "Publish was canceled" msgstr "發布已取消" @@ -9548,6 +9602,21 @@ msgstr "正在上傳資料" msgid "Jump to webpage" msgstr "跳至網頁" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "另存 %s 為" @@ -9558,9 +9627,21 @@ msgstr "使用者預設" msgid "Preset Inside Project" msgstr "項目預設" +msgid "Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported." +msgstr "" + msgid "Detach from parent" msgstr "從父預設分離" +msgid "Unique preset" +msgstr "" + +msgid "Parent preset" +msgstr "" + +msgid "This preset does not inherit from another preset." +msgstr "" + msgid "Name is unavailable." msgstr "名稱不可用。" @@ -10299,22 +10380,6 @@ msgstr "您確認要啟用此選項嗎?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" msgstr "填充模式通常設計為自動處理旋轉,以確保正確列印並實現其預期效果(例如:Gyroid、Cubic)。旋轉目前的稀疏填充模式可能會導致支撐不足。請謹慎操作,並仔細檢查任何潛在的列印問題。您確定要啟用此選項嗎?" -msgid "" -"Layer height is too small.\n" -"It will set to min_layer_height\n" -msgstr "" -"層高過薄\n" -"將改為 min_layer_height\n" - -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." -msgstr "層高超過了印表裝置設定 -> 擠出機 -> 層高限制,這可能會導致列印品質問題。" - -msgid "Adjust to the set range automatically?\n" -msgstr "是否自動調整至設定範圍?\n" - -msgid "Adjust" -msgstr "調整" - msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "實驗性功能:在換線過程中以更大的距離收回並切斷線材,以減少沖洗量。儘管這可以顯著減少沖洗,但也可能增加噴嘴堵塞或其他列印問題的風險。" @@ -10507,6 +10572,9 @@ msgstr "偵測到保留的關鍵字" msgid "Setting Overrides" msgstr "參數覆蓋" +msgid "Retraction when switching material" +msgstr "切換線材時的回抽量" + msgid "Basic information" msgstr "基本資訊" @@ -10637,6 +10705,12 @@ msgstr "相容的切片設定" msgid "Printable space" msgstr "可列印區域" +msgid "Printer Agent" +msgstr "列印裝置代理" + +msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." +msgstr "選擇列印裝置通訊的網路代理實施。可用代理在啟動時註冊。" + #. TRN: The first argument is the parameter's name; the second argument is its value. #, boost-format msgid "Invalid value provided for parameter %1%: %2%" @@ -10762,9 +10836,6 @@ msgstr "層高限制" msgid "Z-Hop" msgstr "Z 軸抬升" -msgid "Retraction when switching material" -msgstr "切換線材時的回抽量" - msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -12113,6 +12184,9 @@ msgstr "離淨空區域太近,會發生碰撞。\n" msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr "離堵塞偵測區域太近,會發生碰撞。\n" +msgid " is partially outside the printable area, and it cannot be printed.\n" +msgstr "" + msgid "Selected nozzle temperatures are incompatible. Each filament's nozzle temperature must fall within the recommended nozzle temperature range of the other filaments. Otherwise, nozzle clogging or printer damage may occur." msgstr "所選的噴嘴溫度不相容。每種線材的噴嘴溫度都必須落在其他線材的建議噴嘴溫度範圍內。否則可能會發生噴嘴堵塞或列印裝置損壞。" @@ -12426,9 +12500,6 @@ msgstr "使用 3MF 取代 G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "若列印裝置接受 3MF 檔案作為列印作業,請啟用此選項。啟用後,Orca Slicer 會將切片後的檔案以 .gcode.3mf 形式傳送,而非單純的 .gcode 檔案。" -msgid "Printer Agent" -msgstr "列印裝置代理" - msgid "Select the network agent implementation for printer communication." msgstr "選擇用於列印裝置通訊的網路代理實作。" @@ -13074,9 +13145,6 @@ msgstr "" msgid "Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." msgstr "內部橋接速度。如果該值以百分比表示,將基於 bridge_speed 進行計算。預設值為 150%。" -msgid "Brim width" -msgstr "Brim 寬度" - msgid "This is the distance from the model to the outermost brim line." msgstr "從模型到 Brim 最外圈的距離" @@ -13157,6 +13225,12 @@ msgstr "" "在偵測尖銳角度之前,幾何形狀將被簡化。此參數表示簡化的最小偏差長度。\n" "設為 0 以停用" +msgid "Brim ears outer only" +msgstr "" + +msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." +msgstr "" + msgid "upward compatible machine" msgstr "向上相容的裝置" @@ -14316,6 +14390,12 @@ msgstr "TPMS-FK結構" msgid "Gyroid" msgstr "螺旋體" +msgid "Sparse infill smooth factor" +msgstr "" + +msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original right-angle path, while 100% produces the largest possible curves between adjacent infill lines. Currently applies only to the Hilbert Curve." +msgstr "" + msgid "This is the acceleration of top surface infill. Using a lower value may improve top surface quality." msgstr "頂面填充的加速度。使用較低值可能會改善頂面列印品質" @@ -14856,6 +14936,12 @@ msgstr "列印裝置相容的 G-code 樣式" msgid "Klipper" msgstr "Klipper" +msgid "Skip G-code config block" +msgstr "" + +msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." +msgstr "" + msgid "Pellet Modded Printer" msgstr "顆粒改裝列印裝置" @@ -15909,6 +15995,12 @@ msgstr "更換擠出機時長回抽" msgid "Retraction distance when extruder change" msgstr "更換擠出機時的回抽距離" +msgid "Retraction Length (Toolchange)" +msgstr "" + +msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." +msgstr "" + msgid "Z-hop height" msgstr "Z 抬升高度" @@ -16002,6 +16094,9 @@ msgstr "額外回填長度" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "每當空駛後回抽被補償時,擠出機將推入額外長度的線材。很少需要此設定。" +msgid "Extra length on restart (Toolchange)" +msgstr "" + msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "當換色後回抽被補償時,擠出機將推入額外長度的線材。" @@ -16405,6 +16500,12 @@ msgstr "在換料塔上換刀" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "強制工具頭在發出換刀指令 (Tx) 之前先移動到換料塔。僅適用於使用 Type 2 換料塔的多擠出機(多工具頭)列印裝置。預設情況下,Orca 會在多工具頭機器上略過此空駛,因為韌體會處理工具頭交換,這可能導致 Tx 指令在已列印零件上方發出。若您希望換刀一律改在換料塔上方發出,請啟用此選項。" +msgid "Wait for temperature on wipe tower" +msgstr "" + +msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." +msgstr "" + msgid "No sparse layers (beta)" msgstr "取消稀疏層(Beta)" @@ -19622,9 +19723,6 @@ msgstr "實體列印裝置" msgid "Print Host upload" msgstr "列印主機上傳" -msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." -msgstr "選擇列印裝置通訊的網路代理實施。可用代理在啟動時註冊。" - msgid "Select a Flashforge printer" msgstr "選取 Flashforge 列印裝置" @@ -20516,9 +20614,6 @@ msgstr "嘗試登入時發生了意外錯誤,請再試一次。" msgid "User canceled." msgstr "使用者取消。" -msgid "Head diameter" -msgstr "頭直徑" - msgid "Max angle" msgstr "最大角度" @@ -21323,6 +21418,22 @@ msgstr "" "避免翹曲\n" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" +#~ msgid "" +#~ "Layer height is too small.\n" +#~ "It will set to min_layer_height\n" +#~ msgstr "" +#~ "層高過薄\n" +#~ "將改為 min_layer_height\n" + +#~ msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, this may cause printing quality issues." +#~ msgstr "層高超過了印表裝置設定 -> 擠出機 -> 層高限制,這可能會導致列印品質問題。" + +#~ msgid "Adjust to the set range automatically?\n" +#~ msgstr "是否自動調整至設定範圍?\n" + +#~ msgid "Head diameter" +#~ msgstr "頭直徑" + #~ msgid "Print order within a single layer." #~ msgstr "每一層的列印順序" diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 5baff8282c..009f672d3e 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -82,7 +82,7 @@ wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPr PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), wxID_ANY, - _L("Publish"), + _L("Publish 3MF..."), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) From 1b770e863843fe18937ee5378ebcf1f339c1f25f Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 19 Aug 2026 15:47:28 +0800 Subject: [PATCH 030/208] Bug fixes and test cases for import filament of published 3MF. Update translations --- localization/i18n/OrcaSlicer.pot | 7 +- localization/i18n/ca/OrcaSlicer_ca.po | 9 +- localization/i18n/cs/OrcaSlicer_cs.po | 9 +- localization/i18n/de/OrcaSlicer_de.po | 9 +- localization/i18n/en/OrcaSlicer_en.po | 7 +- localization/i18n/es/OrcaSlicer_es.po | 9 +- localization/i18n/eu/OrcaSlicer_eu.po | 9 +- localization/i18n/fr/OrcaSlicer_fr.po | 9 +- localization/i18n/hu/OrcaSlicer_hu.po | 9 +- localization/i18n/it/OrcaSlicer_it.po | 9 +- localization/i18n/ja/OrcaSlicer_ja.po | 9 +- localization/i18n/ko/OrcaSlicer_ko.po | 9 +- localization/i18n/lt/OrcaSlicer_lt.po | 9 +- localization/i18n/nl/OrcaSlicer_nl.po | 9 +- localization/i18n/pl/OrcaSlicer_pl.po | 9 +- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 9 +- localization/i18n/ru/OrcaSlicer_ru.po | 9 +- localization/i18n/sv/OrcaSlicer_sv.po | 9 +- localization/i18n/th/OrcaSlicer_th.po | 9 +- localization/i18n/tr/OrcaSlicer_tr.po | 9 +- localization/i18n/uk/OrcaSlicer_uk.po | 9 +- localization/i18n/vi/OrcaSlicer_vi.po | 9 +- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 9 +- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 9 +- src/libslic3r/PresetBundle.cpp | 562 ++++------- src/libslic3r/PresetBundle.hpp | 13 +- src/libslic3r/PublishSettings.cpp | 37 +- src/libslic3r/PublishSettings.hpp | 69 +- src/slic3r/GUI/ConfigValueFormatter.hpp | 10 +- src/slic3r/GUI/MainFrame.cpp | 4 +- src/slic3r/GUI/Plater.cpp | 48 +- src/slic3r/GUI/Plater.hpp | 5 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 173 ++-- src/slic3r/GUI/PublishSettingsDialog.hpp | 31 +- tests/libslic3r/test_3mf.cpp | 51 +- .../libslic3r/test_preset_bundle_loading.cpp | 936 +++++++++++------- 36 files changed, 1148 insertions(+), 1003 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index c55cdb7336..771a9e183c 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -5945,7 +5945,7 @@ msgstr "" msgid "Save current project as" msgstr "" -msgid "Publish" +msgid "Publish 3MF" msgstr "" msgid "Export a 3MF file with the selected settings embedded" @@ -8043,6 +8043,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 4eb07b2635..244cf7f41b 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -6406,8 +6406,8 @@ msgstr "Desa el projecte com a" msgid "Save current project as" msgstr "Desar el projecte actual com" -msgid "Publish" -msgstr "Publicar" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8632,6 +8632,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipus de broquet no està establert. Establiu el broquet i torneu-ho a provar." diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 95259e0895..f5a8cc6717 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -6367,8 +6367,8 @@ msgstr "Uložit projekt jako" msgid "Save current project as" msgstr "Uložit aktuální projekt jako" -msgid "Publish" -msgstr "Publikovat" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8592,6 +8592,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publikovat" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Typ trysky není nastaven. Nastavte prosím trysku a zkuste to znovu." diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 0a86439cab..28113d16d3 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -6259,8 +6259,8 @@ msgstr "Projekt speichern als" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" -msgid "Publish" -msgstr "Veröffentlichen" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8464,6 +8464,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Veröffentlichen" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Die Düsenart ist nicht eingestellt. Bitte stellen Sie die Düse ein und versuchen Sie es erneut." diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 03b83309de..29b88cdab0 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -5941,7 +5941,7 @@ msgstr "" msgid "Save current project as" msgstr "" -msgid "Publish" +msgid "Publish 3MF" msgstr "" msgid "Export a 3MF file with the selected settings embedded" @@ -8039,6 +8039,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 74617b88ec..54c4bccafe 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -6116,8 +6116,8 @@ msgstr "Guardar proyecto como" msgid "Save current project as" msgstr "Guardar el proyecto actual como" -msgid "Publish" -msgstr "Publicar" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8267,6 +8267,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipo de boquilla no está establecido. Configure la boquilla e inténtelo de nuevo." diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index cceccaa64c..8a9a0a6ad3 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -6161,8 +6161,8 @@ msgstr "Gorde proiektua honela" msgid "Save current project as" msgstr "Gorde uneko proiektua honela" -msgid "Publish" -msgstr "Argitaratu" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8334,6 +8334,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Argitaratu" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Pita mota ez dago ezarrita. Ezarri pita eta saiatu berriro." diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 5aeed754f0..5197f6c725 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -6208,8 +6208,8 @@ msgstr "Enregistrer le projet sous" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" -msgid "Publish" -msgstr "Publier" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8390,6 +8390,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publier" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Le type de buse n'est pas défini. Veuillez définir la buse et réessayer." diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 6c9c5669d8..e87f21c567 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6310,8 +6310,8 @@ msgstr "Projekt mentése másként" msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" -msgid "Publish" -msgstr "Közzététel" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8516,6 +8516,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Közzététel" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "A fúvókatípus nincs beállítva. Állítsd be a fúvókát, majd próbáld újra." diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 8533b8b39f..8ce671c1e6 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6312,8 +6312,8 @@ msgstr "Salva progetto con nome" msgid "Save current project as" msgstr "Salva progetto corrente con nome" -msgid "Publish" -msgstr "Pubblica" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8515,6 +8515,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Pubblica" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Il tipo di ugello non è impostato. Impostare l'ugello e riprovare." diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 2c28d2b166..ca68f62e0c 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6321,8 +6321,8 @@ msgstr "プロジェクトを名前を付けて保存" msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" -msgid "Publish" -msgstr "公開する" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8534,6 +8534,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "公開する" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ノズルタイプが設定されていません。ノズルを設定して再試行してください。" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 5e81f19e0d..a9d1a699af 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -6335,8 +6335,8 @@ msgstr "프로젝트 다른 이름으로 저장" msgid "Save current project as" msgstr "현재 프로젝트 다른 이름으로 저장" -msgid "Publish" -msgstr "게시" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8567,6 +8567,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "게시" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "노즐 유형이 설정되지 않았습니다. 노즐을 설정하고 다시 시도하세요." diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index aac9ef9dc6..9f16194315 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -6298,8 +6298,8 @@ msgstr "Įrašyti projektą kaip" msgid "Save current project as" msgstr "Įrašyti dabartinį projektą kaip" -msgid "Publish" -msgstr "Talpinti" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8510,6 +8510,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Talpinti" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Purkštuko tipas nenustatytas. Nustatykite purkštuką ir bandykite dar kartą." diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 4d37e65fee..96840c0844 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6873,8 +6873,8 @@ msgstr "Bewaar project als" msgid "Save current project as" msgstr "Bewaar huidig project als" -msgid "Publish" -msgstr "Publiceren" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -9284,6 +9284,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publiceren" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Het mondstuktype is niet ingesteld. Stel het mondstuk in en probeer het opnieuw." diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index e9430155ea..5df6507348 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -6454,8 +6454,8 @@ msgstr "Zapisz projekt jako" msgid "Save current project as" msgstr "Zapisz bieżący projekt jako" -msgid "Publish" -msgstr "Opublikuj" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8724,6 +8724,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Opublikuj" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nie ustawiono typu dyszy Wprowadź ustawienia dyszy i spróbuj ponownie." diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index b001ea24b8..48ed2fb774 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -6130,8 +6130,8 @@ msgstr "Salvar projeto como" msgid "Save current project as" msgstr "Salvar o projeto atual como" -msgid "Publish" -msgstr "Publicar" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8290,6 +8290,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "O tipo de bico não está configurado. Configure o bico e tente novamente." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 919710f917..fd7b617642 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -6363,8 +6363,8 @@ msgstr "Сохранить проект как" msgid "Save current project as" msgstr "Сохранить текущий проект как" -msgid "Publish" -msgstr "Опубликовать" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8569,6 +8569,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Опубликовать" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Не указан тип сопла. Укажите его и попробуйте ещё раз." diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 1caffffd36..2e2ca51d7c 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6957,8 +6957,8 @@ msgstr "Spara Projekt som" msgid "Save current project as" msgstr "Spara nuvarande projekt som" -msgid "Publish" -msgstr "Publicera" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -9377,6 +9377,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Publicera" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozzeltypen är inte angiven. Ange nozzeln och försök igen." diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 7f86af0e5e..1826f2be8e 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -6289,8 +6289,8 @@ msgstr "บันทึกโปรเจกต์เป็น" msgid "Save current project as" msgstr "บันทึกโครงการปัจจุบันเป็น" -msgid "Publish" -msgstr "เผยแพร่" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8470,6 +8470,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "เผยแพร่" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ไม่ได้ตั้งค่าประเภทหัวฉีด โปรดตั้งหัวฉีดแล้วลองอีกครั้ง" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 944c322a94..b2394caeb3 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-08-01 20:32+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -6389,8 +6389,8 @@ msgstr "Projeyi farklı kaydet" msgid "Save current project as" msgstr "Mevcut projeyi farklı kaydet" -msgid "Publish" -msgstr "Yayınla" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8606,6 +8606,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Yayınla" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozul tipi ayarlanmamış. Lütfen nozulu ayarlayın ve tekrar deneyin." diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 5c162e8475..40290ba12c 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -6326,8 +6326,8 @@ msgstr "Зберегти проєкт як" msgid "Save current project as" msgstr "Зберегти поточний проєкт як" -msgid "Publish" -msgstr "Публікувати" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8580,6 +8580,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Публікувати" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Тип сопла не встановлений. Будь ласка, оберіть сопло та спробуйте ще раз." diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index f900f3fc1f..dc269a9519 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -6674,8 +6674,8 @@ msgstr "Lưu dự án thành" msgid "Save current project as" msgstr "Lưu dự án hiện tại thành" -msgid "Publish" -msgstr "Xuất bản" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -9001,6 +9001,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "Xuất bản" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Chưa đặt loại đầu phun. Vui lòng đặt đầu phun rồi thử lại." diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index f89ad1dd52..93a9f0ae0b 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -6144,8 +6144,8 @@ msgstr "项目另存为" msgid "Save current project as" msgstr "项目另存为" -msgid "Publish" -msgstr "发布" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8299,6 +8299,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "发布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "未设置喷嘴类型。请设置喷嘴并重试。" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 88596d495a..7a19a1c540 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-18 16:25+0800\n" +"POT-Creation-Date: 2026-08-19 14:59+0800\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -6274,8 +6274,8 @@ msgstr "另存專案為" msgid "Save current project as" msgstr "將目前專案另存為" -msgid "Publish" -msgstr "發布" +msgid "Publish 3MF" +msgstr "" msgid "Export a 3MF file with the selected settings embedded" msgstr "" @@ -8465,6 +8465,9 @@ msgid "" "Please check whether the folder exists online or if other programs have the file open." msgstr "" +msgid "Publish" +msgstr "發布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "噴嘴類型尚未設定。請設定噴嘴後再試一次。" diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index fd3d4d24b6..7a90036fe2 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4752,9 +4752,8 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } } // !is_published - // 4) Load the project config values (the per extruder wipe matrix etc). - // In published mode the receiver must not inherit the author's filament/purge data, - // so only the plate/bed geometry project keys are applied. + // Load the project config values. In published mode only the plate/bed geometry keys + // cross over (the receiver must not inherit the author's filament/purge data). this->project_config.apply_only(config, is_published ? s_project_options_published : s_project_options); break; @@ -4774,29 +4773,23 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool this->update_compatible(PresetSelectCompatibleType::Never); this->update_multi_material_filament_presets(); - // A "published" 3MF project overlays only the author-selected published keys onto the - // user's currently-selected (edited) process preset. Scalar keys are applied directly; - // vector (multi-extruder) keys are applied only when the edited preset has a matching - // vector size. Keys that cannot be applied are collected for notification; legacy - // filament/printer keys in a published file fall through into skipped_keys. + // A "published" 3MF project overlays the author-selected published keys onto the user's + // currently-selected (edited) process preset. Keys that cannot be applied are collected for + // notification; filament-class keys in published_keys (which only the material pass knows + // how to apply) fall through into skipped_keys. if (is_published) { std::vector skipped_keys; std::set applied_keys; - // Set whenever the material overlay actually modifies a receiver filament preset - // (applied key, colour or slot replacement). Only then must the edited preset be - // re-snapshotted: re-selecting unconditionally would discard the user's unsaved - // in-memory filament edits when the published file touches nothing. + // Only re-select the edited filament preset when the material overlay changed + // something: re-selecting unconditionally would discard the user's unsaved in-memory + // filament edits when the published file touches nothing. bool material_applied = false; - // Structural keys must never be applied to the user's presets: doing so would - // rewrite their preset inheritance/structure. This is the single source of truth - // shared with PublishSettingsDialog.cpp (publish_structural_keys in - // PublishSettings.hpp). Defense-in-depth: a hand-crafted 3MF could set - // published_keys to these regardless of the dialog, so skip them here too. + // Structural keys are never applied (they would rewrite the user's preset + // inheritance/structure). Defense-in-depth: a hand-crafted 3MF could list them despite + // the dialog, so skip them here too. const std::set &structural_keys = publish_structural_keys(); - // The printer overlay is restricted to the publishable retraction/z-hop allowlist. - // Printer-class keys outside it are contract-excluded: never applied and never - // reported as skipped (a hand-crafted 3MF listing machine_start_gcode or - // nozzle_diameter must not apply them and must not spam the warning). + // The printer overlay is restricted to the publishable retraction/z-hop allowlist; + // printer-class keys outside it are contract-excluded (never applied, never reported). const std::set &printer_allowlist = publishable_printer_keys(); const std::vector &printer_options = Preset::printer_options(); const std::set printer_option_set(printer_options.begin(), printer_options.end()); @@ -4805,10 +4798,10 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool for (const std::string &key : published_config->published_keys) { if (applied_keys.count(key) != 0) continue; // already applied - // A '#' suffix denotes a variant (per-extruder/per-filament) key; resolve the base key. + // A '#' suffix denotes a variant key; resolve the base key. const std::string base_key = key.substr(0, key.find('#')); - // Structural keys are intentionally never applied (not "skipped due to - // mismatch"), so bail out before the applied/skipped bookkeeping. + // Structural keys are never applied (not "skipped due to mismatch"), so bail + // out before the applied/skipped bookkeeping. if (structural_keys.count(base_key) != 0) continue; if (allowlist != nullptr && @@ -4822,23 +4815,29 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (src_opt == nullptr) continue; // key not present in the loaded config; record later if (src_opt->is_vector()) { - // Vector key: apply only when the edited preset has a matching vector size. const ConfigOption *dst_opt = target.option(base_key); - if (dst_opt == nullptr || !dst_opt->is_vector() || - static_cast(src_opt)->size() != static_cast(dst_opt)->size()) + if (dst_opt == nullptr || !dst_opt->is_vector()) continue; // cannot apply; will be reported as skipped - // A '#' variant index must be in range: ConfigOptionVector::set_at would - // otherwise resize the destination vector, corrupting the receiver's preset. + // A '#N' variant key (e.g. per-extruder retraction_length#2) applies one + // element, so the index only needs to be in range on both sides - the + // receiver may have a different extruder count than the author. Out-of-range + // indices are skipped (set_at would otherwise resize the receiver's vector). if (key.size() > base_key.size()) { const size_t idx = static_cast(std::atoi(key.c_str() + base_key.size() + 1)); - if (idx >= static_cast(src_opt)->size()) + if (idx >= static_cast(src_opt)->size() || + idx >= static_cast(dst_opt)->size()) continue; // out-of-range variant: cannot apply; reported as skipped + } else if (static_cast(src_opt)->size() != + static_cast(dst_opt)->size()) { + // Whole-vector base key: the receiver must have a matching vector size, + // otherwise applying would overwrite a different number of elements. + continue; // cannot apply; will be reported as skipped } target.apply_only(config, {key}, true); applied_keys.insert(key); } else { - // A scalar key cannot carry a '#N' variant suffix; a hand-crafted file - // listing one is reported as skipped instead of being silently marked applied. + // A scalar key cannot carry a '#N' suffix; a hand-crafted file listing one + // is reported as skipped instead of being silently marked applied. if (key.find('#') != std::string::npos) continue; // Scalar key: apply only if present on the user's machine. @@ -4852,229 +4851,87 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool apply_published(this->prints.get_edited_preset().config, nullptr); apply_published(this->printers.get_edited_preset().config, &printer_allowlist); - // Material pass: apply the author's material-qualified keys onto the receiver's - // matching filament presets. The file config carries the author's per-slot identity - // (filament_type / filament_vendor remain in config; filament_ids was moved into a - // local earlier) and the per-slot material retraction values. - if (!published_config->material_keys.empty()) { - const ConfigOptionStrings *file_types = config.option("filament_type"); - const ConfigOptionStrings *file_vendors = config.option("filament_vendor"); - auto identity_matches = [](const std::string &id, const std::string &type, const std::string &vendor, - const std::string &slot_id, const std::string &slot_type, const std::string &slot_vendor) { - // When both sides carry a filament_id, equality is required; otherwise fall - // back to filament_type, with filament_vendor as an additional qualifier only - // when both sides have a non-empty vendor. - if (!id.empty() && !slot_id.empty()) - return id == slot_id; - if (type.empty() || type != slot_type) - return false; - if (!vendor.empty() && !slot_vendor.empty()) - return vendor == slot_vendor; - return true; - }; - for (const PublishedMaterialEntry &entry : published_config->material_keys) { - // Entries using the filament-publishing-v2 features (full dump, published type or - // colour) are handled by the positional per-slot pass below; the legacy identity - // matching here applies only to files that predate those features. - if (entry.full || entry.publish_type || entry.publish_color) - continue; - // Resolve the author's source slot and its ordinal among the author slots - // carrying this entry's identity. A slotted entry (slot >= 0) names the exact - // author slot and targets the receiver's Nth matching preset (N = ordinal); - // a legacy entry (slot -1) uses the first matching author slot and applies to - // every matching receiver preset. - auto slot_identity = [&filament_ids, file_types, file_vendors](size_t slot, std::string &id, std::string &type, std::string &vendor) { - id = (slot < filament_ids.size()) ? filament_ids[slot] : std::string(); - type = (file_types && slot < file_types->size()) ? file_types->get_at(slot) : std::string(); - vendor = (file_vendors && slot < file_vendors->size()) ? file_vendors->get_at(slot) : std::string(); - }; - bool author_found = false; - size_t author_slot = 0; - size_t author_ordinal = 0; - if (entry.slot >= 0) { - // Collect every author slot carrying this identity, in slot order; the - // entry's slot must be among them, and its position is the ordinal used - // to pick the receiver's matching preset. - std::vector matching_author_slots; - for (size_t slot = 0; slot < filament_ids.size(); ++slot) { - std::string slot_id, slot_type, slot_vendor; - slot_identity(slot, slot_id, slot_type, slot_vendor); - if (identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, - slot_id, slot_type, slot_vendor)) - matching_author_slots.emplace_back(slot); - } - const auto ordinal_it = std::find(matching_author_slots.begin(), matching_author_slots.end(), size_t(entry.slot)); - if (ordinal_it != matching_author_slots.end()) { - author_slot = size_t(entry.slot); - author_ordinal = size_t(ordinal_it - matching_author_slots.begin()); - author_found = true; - } - // Out of range, or the slot does not carry this identity: silent skip below. - } else { - // Legacy: the first author slot whose identity matches. - for (size_t slot = 0; slot < filament_ids.size(); ++slot) { - std::string slot_id, slot_type, slot_vendor; - slot_identity(slot, slot_id, slot_type, slot_vendor); - if (identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, - slot_id, slot_type, slot_vendor)) { - author_slot = slot; - author_found = true; - break; - } - } - } - if (!author_found) - // No author slot carries this material: nothing to apply, nothing to report. - continue; - - const std::string material_label = entry.filament_id.empty() ? entry.filament_type : entry.filament_id; - auto report_skipped = [&skipped_keys, &material_label](const std::string &key, const std::string &slot_qualifier = std::string()) { - skipped_keys.emplace_back("material:" + material_label + - (slot_qualifier.empty() ? std::string() : " " + slot_qualifier) + - " (" + key + ")"); - }; - - // Collect the receiver's matching filament presets (distinct by preset name). - std::vector matched_preset_names; - std::set fallback_matched_names; - for (const std::string &preset_name : this->filament_presets) { - Preset *preset = this->filaments.find_preset(preset_name); - if (preset == nullptr) - continue; - const std::string slot_id = preset->filament_id; - // Null-guard the identity reads: a malformed user preset may lack - // filament_type / filament_vendor entirely (hand-edited preset file). - const ConfigOptionStrings *slot_types = preset->config.option("filament_type"); - const ConfigOptionStrings *slot_vendors = preset->config.option("filament_vendor"); - const std::string slot_type = (slot_types && !slot_types->values.empty()) ? slot_types->get_at(0) : std::string(); - const std::string slot_vendor = (slot_vendors && !slot_vendors->values.empty()) ? slot_vendors->get_at(0) : std::string(); - if (!identity_matches(entry.filament_id, entry.filament_type, entry.filament_vendor, - slot_id, slot_type, slot_vendor)) - continue; - if (std::find(matched_preset_names.begin(), matched_preset_names.end(), preset_name) == matched_preset_names.end()) - matched_preset_names.emplace_back(preset_name); - if (entry.filament_id.empty() || slot_id.empty()) - fallback_matched_names.insert(preset_name); - } - if (matched_preset_names.empty()) { - // No receiver material matches this entry: report each key as skipped. - for (const std::string &key : entry.keys) - report_skipped(key); - continue; - } - if (fallback_matched_names.size() > 1) { - // The type fallback matched more than one distinct receiver preset: never - // guess which one the author meant. - for (const std::string &key : entry.keys) - report_skipped(key); - continue; - } - - // Slotted entries target the receiver's matching preset at the author's - // ordinal; legacy entries apply to every matching receiver preset. - std::vector apply_to_preset_names; - if (entry.slot >= 0) { - if (author_ordinal >= matched_preset_names.size()) { - // The receiver has fewer matching presets than the author's ordinal: - // this slot's values cannot be placed, report each key. - const std::string slot_qualifier = "slot " + std::to_string(entry.slot); - for (const std::string &key : entry.keys) - report_skipped(key, slot_qualifier); - continue; - } - apply_to_preset_names.emplace_back(matched_preset_names[author_ordinal]); - } else { - apply_to_preset_names = matched_preset_names; - } - - for (const std::string &key : entry.keys) { - const std::string base_key = key.substr(0, key.find('#')); - if (structural_keys.count(base_key) != 0) - continue; // structural: silent - const ConfigOption *src_opt = config.option(base_key); - if (src_opt == nullptr || !src_opt->is_vector() || - author_slot >= static_cast(src_opt)->size()) { - report_skipped(key); - continue; - } - for (const std::string &preset_name : apply_to_preset_names) { - Preset *preset = this->filaments.find_preset(preset_name); - if (preset == nullptr) - continue; - ConfigOption *dst_opt = preset->config.option(base_key); - // Per-slot scalar copy: the receiver's filament preset holds a single - // value per key (vector of size 1), the file holds the per-slot vector. - if (dst_opt == nullptr || !dst_opt->is_vector() || - static_cast(dst_opt)->empty() || - dst_opt->type() != src_opt->type()) { - report_skipped(key); - continue; - } - static_cast(dst_opt)->set_at(src_opt, 0, author_slot); - material_applied = true; - } - } - } - } - - // Filament-publishing-v2: positional per-slot entries. The author published, per slot, - // either the entire filament (full) or specific keys plus optionally a curated type - // and/or colour. The receiver's slot is matched positionally against the published type: + // Material pass: positional per-slot entries. The author published, per slot, either the + // entire filament (full) or specific keys plus optionally a curated type and/or colour. + // The receiver's slot is matched positionally against the published type: // - colour: always applied to the slot, independent of the type gate; - // - type match: a full dump is intentionally ignored (the receiver keeps its material), - // a partial entry's keys are applied as usual; - // - type mismatch: the slot is replaced with the first visible same-type filament from - // the receiver's library; the author's values are applied on top of it (full) or the - // published keys are applied (partial); - // - no replacement available: a full entry falls back to applying the author's values - // in-memory onto the receiver's current preset (no library import); a partial entry - // keeps the receiver's material and reports its keys as skipped. + // - type match: the full dump still applies wholesale (every setting, as if the slot's + // filament had been loaded from a normal save); a partial entry's keys are applied + // as usual; + // - type mismatch: the slot is replaced with the best visible candidate, scored by the + // published identity (exact filament_id, then vendor+type, then type only); a + // preset no other slot references wins on equal scores, and a shared exact-material + // preset is taken even though mutating it also affects the other slot; the author's + // values are applied on top of it (full) or the published keys are applied (partial); + // - no replacement available: a full entry falls back to the first available visible + // preset, applying the author's values on top of it; a partial entry keeps the + // receiver's material and reports its keys as skipped. + // All applied values (colour and keys) are written onto the slot's stored preset + // directly (mutate in place): the receiver's material keeps its identity and is simply + // overridden. To keep slot-to-slot aliasing (several slots referencing one preset) from + // leaking one slot's values into another, published slots sharing a preset with another + // slot are re-pointed at distinct presets before the values are applied. { - // Slot growth is tied to the author slots that carry published content (full, - // type or colour): the file's total filament count is irrelevant, and a slot the - // author left unpublished must not pull a filler material into the receiver's - // setup. Grow only as far as the highest published slot (never shrink, never - // remove the receiver's existing materials). - bool has_new_semantics = false; - size_t target_slots = this->filament_presets.size(); + // Grow the receiver's slots only as far as the highest published slot (never + // shrink, never pull filler materials for unpublished slots). + bool has_published_entries = false; + size_t target_slots = this->filament_presets.size(); for (const PublishedMaterialEntry &entry : published_config->material_keys) { - if (!entry.full && !entry.publish_type && !entry.publish_color) - continue; // legacy entry, handled above - has_new_semantics = true; + has_published_entries = true; if (entry.slot >= 0) target_slots = std::max(target_slots, size_t(entry.slot) + 1); } - if (has_new_semantics) { + if (has_published_entries) { // Defensive cap: never exceed the file's own filament count. target_slots = std::min(target_slots, num_filaments); - // Slots that carry published content (full/type/colour) must reference a stored - // preset that no other slot shares: the overlay mutates stored presets in place - // (colour and keys), so a shared preset would leak one slot's published values - // into every slot that references it. + // Slots carrying published content, steering the initial preset selection of + // newly grown slots. std::set published_slots; for (const PublishedMaterialEntry &entry : published_config->material_keys) - if ((entry.full || entry.publish_type || entry.publish_color) && entry.slot >= 0) + if (entry.slot >= 0) published_slots.insert(entry.slot); std::set used_preset_names(this->filament_presets.begin(), this->filament_presets.end()); // Mirror first_visible_idx()'s start index so suppressed default presets are // never picked as a slot material. const size_t first_candidate = this->filaments.is_default_suppressed() ? this->filaments.num_default_presets() : 0; + // Candidate preference for a published entry: exact setting_id (variant-level, + // since "Generic PLA" and "Generic PLA Matte" share filament_id), then exact + // filament_id, then vendor+type, then type only (a type-only pick may surface an + // unrelated preset, e.g. a different vendor's PLA). + auto candidate_score = [](const Preset &candidate, const PublishedMaterialEntry &entry) -> int { + if (!entry.setting_id.empty() && candidate.setting_id == entry.setting_id) + return 3; + const ConfigOptionStrings *types = candidate.config.opt("filament_type"); + const ConfigOptionStrings *vendors = candidate.config.opt("filament_vendor"); + const std::string type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : std::string(); + const std::string vendor = (vendors != nullptr && !vendors->values.empty()) ? vendors->get_at(0) : std::string(); + if (!entry.filament_id.empty() && candidate.filament_id == entry.filament_id) + return 2; + if (normalize_filament_type(type) == entry.publish_type_value) { + if (!entry.filament_vendor.empty() && vendor == entry.filament_vendor) + return 1; + return 0; + } + return -1; + }; while (this->filament_presets.size() < target_slots) { const size_t new_slot_idx = this->filament_presets.size(); std::string initial_preset; if (published_slots.count(static_cast(new_slot_idx)) != 0) { - // Proactively assign a distinct matching candidate preset if this slot - // carries a published type... + // Prefer the best distinct candidate for the slot's published material + // (exact id, then vendor+type, then type only)... for (const PublishedMaterialEntry &entry : published_config->material_keys) { if (entry.slot != static_cast(new_slot_idx) || !entry.publish_type || entry.publish_type_value.empty()) continue; - for (size_t i = 0; i < this->filaments.size(); ++i) { + int best_score = -1; + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) continue; - if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) == entry.publish_type_value) { + const int score = candidate_score(candidate, entry); + if (score > best_score) { + best_score = score; initial_preset = candidate.name; - break; } } break; @@ -5091,62 +4948,65 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } } if (initial_preset.empty()) - // Unpublished filler slot, or every visible preset is already used: repeat - // the receiver's last preset, mirroring the "Add one filament" behaviour - // (PresetBundle::set_num_filaments). + // Unpublished filler slot, or every visible preset is already used: + // repeat the receiver's last preset ("Add one filament" behaviour). initial_preset = this->filament_presets.empty() ? this->filaments.first_visible().name : this->filament_presets.back(); this->filament_presets.emplace_back(initial_preset); used_preset_names.insert(initial_preset); } - // Slots that were grown before this block (e.g. by update_multi_material_filament_presets - // matching the extruder count) may still alias another slot; re-point them at a - // distinct preset. Slot 0, the receiver's own material, is never re-assigned. + // Published slots that alias another slot (multi-extruder with one filament) + // get re-pointed at distinct presets: the overlay mutates stored presets in + // place, so a shared preset would leak one slot's published values into every + // aliased slot. Slot 0 (the receiver's own material) is never re-assigned; + // when no unused candidate exists the aliasing stays (unavoidable). + auto referenced_elsewhere = [&](const std::string &preset_name, size_t except_slot) { + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (s != except_slot && this->filament_presets[s] == preset_name) + return true; + return false; + }; for (size_t slot = 1; slot < this->filament_presets.size(); ++slot) { - if (published_slots.count(static_cast(slot)) == 0) - continue; - bool shared = false; - for (size_t other = 0; other < this->filament_presets.size(); ++other) - if (other != slot && this->filament_presets[other] == this->filament_presets[slot]) { - shared = true; - break; - } - if (!shared) + if (published_slots.count(static_cast(slot)) == 0 || + !referenced_elsewhere(this->filament_presets[slot], slot)) continue; + // Prefer the best distinct candidate for the slot's published material + // (exact id, then vendor+type, then type only)... std::string replacement; + int best_score = -1; for (const PublishedMaterialEntry &entry : published_config->material_keys) { if (entry.slot != static_cast(slot) || !entry.publish_type || entry.publish_type_value.empty()) continue; - for (size_t i = 0; i < this->filaments.size(); ++i) { + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) + if (!candidate.is_visible || referenced_elsewhere(candidate.name, size_t(-1))) continue; - if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) == entry.publish_type_value) { + const int score = candidate_score(candidate, entry); + if (score > best_score) { + best_score = score; replacement = candidate.name; - break; } } break; } + // ...otherwise any distinct visible preset not referenced by another slot. if (replacement.empty()) { for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) - continue; - replacement = candidate.name; - break; + if (candidate.is_visible && !referenced_elsewhere(candidate.name, size_t(-1))) { + replacement = candidate.name; + break; + } } } if (replacement.empty()) - continue; // every visible preset is used: aliasing is unavoidable - used_preset_names.erase(this->filament_presets[slot]); + continue; // every visible preset is referenced: aliasing is unavoidable this->filament_presets[slot] = replacement; - used_preset_names.insert(replacement); + material_applied = true; } - // Mirror set_num_filaments' project_config vector handling ("Add one filament"): - // resize the per-slot colour/type/map vectors to the grown slot count and seed the - // new entries so the slots render with colours instead of blank chips. Only the - // new entries are seeded; the receiver's existing values are left untouched. + // Grow the per-slot colour/type/map project vectors to the new slot count and + // seed the new entries so the slots render with colours instead of blank chips + // (mirrors set_num_filaments; existing values are left untouched). ConfigOptionStrings *proj_colour = this->project_config.opt("filament_colour"); ConfigOptionStrings *proj_multi_colour = this->project_config.opt("filament_multi_colour"); ConfigOptionStrings *proj_colour_type = this->project_config.opt("filament_colour_type"); @@ -5184,8 +5044,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (proj_colour_type && slot < proj_colour_type->values.size()) proj_colour_type->values[slot] = "1"; // default colour type } - // Rebuild the flush volumes for the grown slot count (set_num_filaments does the - // same; without it the matrix would stay at the receiver's old size). + // Rebuild the flush volumes for the grown slot count (as set_num_filaments does). this->update_multi_material_filament_presets(); auto apply_slot_keys = [&](Preset &preset, const std::vector &slot_keys, int author_slot, @@ -5207,23 +5066,22 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); continue; } - // Per-slot scalar copy: the receiver's filament preset holds a single - // value per key (vector of size 1), the file holds the per-slot vector. + // Per-slot scalar copy: the receiver preset holds one value per key + // (vector of size 1), the file holds the per-slot vector. static_cast(dst_opt)->set_at(src_opt, 0, author_slot); material_applied = true; } }; + // The slot's values are applied directly onto the slot's stored preset (mutate + // in place); the per-entry type gate below may re-point the slot first. for (const PublishedMaterialEntry &entry : published_config->material_keys) { - if (!entry.full && !entry.publish_type && !entry.publish_color) - continue; // legacy entry, handled above if (entry.slot < 0 || size_t(entry.slot) >= this->filament_presets.size()) continue; // out of range: nothing to do for this slot const size_t slot = size_t(entry.slot); - // Modify the stored preset itself (real=true), never the edited snapshot: - // find_preset would return &m_edited_preset for the currently selected slot, - // and the re-select at the end of this block re-snapshots from the stored - // preset, silently discarding any values applied to the snapshot. + // Resolve the stored preset itself (real=true), never the edited snapshot: + // find_preset would return &m_edited_preset for the selected slot, and the + // re-select at the end re-snapshots from the stored preset. Preset *recv = this->filaments.find_preset(this->filament_presets[slot], false, true); if (recv == nullptr) continue; @@ -5234,83 +5092,96 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool bool apply_slot = true; if (entry.publish_type && !entry.publish_type_value.empty()) { - const std::string recv_type = normalize_filament_type(recv->config.opt_string("filament_type", 0u)); - if (recv_type == entry.publish_type_value) { - // Type match: the receiver keeps its material. A full dump is - // intentionally ignored for this slot; partial keys still apply. - if (entry.full) - apply_slot = false; - } else { - // Type mismatch: replace the slot with the first visible same-type - // filament from the receiver's library, preferring one that no other - // slot references (a shared stored preset would leak this slot's - // published values into that slot). - std::string replacement, first_same_type; - for (size_t i = 0; i < this->filaments.size(); ++i) { - const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible) - continue; - if (normalize_filament_type(candidate.config.opt_string("filament_type", 0u)) != entry.publish_type_value) - continue; - if (first_same_type.empty()) - first_same_type = candidate.name; - bool used_elsewhere = false; - for (size_t s = 0; s < this->filament_presets.size(); ++s) - if (s != slot && this->filament_presets[s] == candidate.name) { - used_elsewhere = true; - break; + // Null-guard: a malformed receiver preset may lack filament_type. + const ConfigOptionStrings *recv_types = recv->config.opt("filament_type"); + const std::string recv_type = (recv_types != nullptr && !recv_types->values.empty()) ? recv_types->get_at(0) : std::string(); + if (normalize_filament_type(recv_type) != entry.publish_type_value) { + // Type mismatch: replace the slot with the best matching preset, + // scored by the published identity (exact filament_id, then + // vendor+type, then type only). A preset no other slot references + // wins on equal scores; a shared exact-material preset is taken even + // though mutating it also affects the other slot. + auto find_best = [&](bool unreferenced_only) -> std::pair { + int best_score = -1; + std::string best_name; + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible) + continue; + const int score = candidate_score(candidate, entry); + if (score <= best_score) + continue; + if (unreferenced_only) { + bool used = false; + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (s != slot && this->filament_presets[s] == candidate.name) { + used = true; + break; + } + if (used) + continue; } - if (!used_elsewhere) { - replacement = candidate.name; - break; + best_score = score; + best_name = candidate.name; } + return { best_score, best_name }; + }; + const auto [strict_score, strict_name] = find_best(true); + const auto [relaxed_score, relaxed_name] = find_best(false); + int score = strict_score; + std::string replacement = strict_name; + if (relaxed_score > strict_score) { + score = relaxed_score; + replacement = relaxed_name; } - if (replacement.empty()) - replacement = first_same_type; if (!replacement.empty()) { const std::string old_name = recv->name; this->filament_presets[slot] = replacement; recv = this->filaments.find_preset(replacement, false, true); material_applied = true; - published_config->material_replacements.emplace_back( - "slot " + std::to_string(slot) + ": " + old_name + " -> " + replacement); + std::string replacement_line = "slot " + std::to_string(slot) + ": " + old_name + " -> " + replacement; + // A pick that is not the exact published material is a substitute; + // an entry without identity fields cannot be judged, so it stays plain. + if (score < 2 && (!entry.filament_id.empty() || !entry.filament_vendor.empty())) + replacement_line += " (substitute: no exact material match)"; + published_config->material_replacements.emplace_back(std::move(replacement_line)); } else if (entry.full) { - // No library match: create a temporary project-embedded custom preset - // populated with default settings and overlaid with the author's values. - std::string custom_name = entry.publish_type_value + " (Published)"; - for (size_t idx = 1; this->filaments.find_preset(custom_name, false) != nullptr; ++idx) - custom_name = entry.publish_type_value + " (Published " + std::to_string(idx) + ")"; - - // Capture the slot's current name BEFORE load_preset: the custom - // name sorts ahead of the slot's material, so the deque insertion - // relocates it and recv would dangle after the call. - const std::string old_name = recv->name; - - DynamicPrintConfig custom_cfg = this->filaments.default_preset_for(config).config; - // filament_type is a per-slot vector option: set it via the strings - // accessor. opt_string(key, bool) would ask for the scalar - // ConfigOptionString, fail the cast and dereference nullptr. - if (ConfigOptionStrings *type_opt = custom_cfg.opt("filament_type", true)) { - if (type_opt->values.empty()) - type_opt->values.emplace_back(); - type_opt->values[0] = entry.publish_type_value; + // No same-type library preset: fall back to the first available + // visible preset, preferring one no other slot references, and + // apply the author's full values on top of it (the dump carries + // filament_type, so the preset takes the author's type). + std::string fallback; + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible) + continue; + if (fallback.empty()) + fallback = candidate.name; + bool referenced = false; + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (this->filament_presets[s] == candidate.name) { + referenced = true; + break; + } + if (!referenced) { + fallback = candidate.name; + break; + } } - if (ConfigOptionStrings *id_opt = custom_cfg.opt("filament_settings_id", true)) - if (!id_opt->values.empty()) - id_opt->values[0] = custom_name; - - Preset &created = this->filaments.load_preset("", custom_name, std::move(custom_cfg), false, file_version); - created.is_project_embedded = true; - created.is_visible = true; - - this->filament_presets[slot] = custom_name; - recv = &created; - material_applied = true; - published_config->material_replacements.emplace_back( - "slot " + std::to_string(slot) + ": " + old_name + " -> " + custom_name); + if (!fallback.empty() && fallback != recv->name) { + const std::string old_name = recv->name; + this->filament_presets[slot] = fallback; + recv = this->filaments.find_preset(fallback, false, true); + material_applied = true; + published_config->material_replacements.emplace_back( + "slot " + std::to_string(slot) + ": " + old_name + " -> " + fallback + + " (substitute: no " + entry.publish_type_value + " available)"); + } + // No visible preset at all: keep the receiver's material and let + // the full dump mutate it below. } else { - // Partial publish with no replacement available: keep the - // receiver's material and report this slot's keys as skipped. + // Partial publish with no replacement: keep the receiver's + // material and report the slot's keys as skipped. for (const std::string &key : entry.keys) skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); apply_slot = false; @@ -5318,14 +5189,15 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } } - // Colour is slot-scoped and independent of the type gate: it is applied to - // whichever material ends up in the slot (original, replacement or the - // in-memory fallback), and synced into project_config for GUI rendering. + // The values below are applied onto whatever stored preset the slot ended up + // on (original, type replacement or the full-publish fallback), in place. + + // Colour is slot-scoped and independent of the type gate; it is also synced + // into project_config for GUI rendering. if (entry.publish_color && !entry.color.empty()) { if (recv != nullptr) { - // Create the key when the target preset lacks it (e.g. a replacement - // built from the static defaults): the colour is a requirement, not - // an optional override. + // Create the key when the target preset lacks it: the colour is a + // requirement, not an override. if (ConfigOptionStrings *colour = recv->config.opt("filament_colour", true)) { if (colour->values.empty()) colour->values.emplace_back(); @@ -5364,11 +5236,9 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } published_config->skipped_keys = std::move(skipped_keys); - // The material overlay above modified the filament collection presets in place, but - // the edited preset (what the GUI displays) is a snapshot taken when the preset was - // last selected. Re-select the first slot's filament (mirroring a normal project load) - // so the applied values (colour, type, keys and slot replacements) surface in the GUI; - // selecting any other slot's filament afterwards snapshots its modified preset too. + // The material overlay mutates the collection presets in place, but the edited preset + // (what the GUI displays) is a snapshot taken when the preset was last selected. + // Re-select the first slot's filament so the applied values surface in the GUI. if (material_applied && !this->filament_presets.empty()) this->filaments.select_preset_by_name(this->filament_presets.front(), true); } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index d568de30e3..ad78a7c59c 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -167,22 +167,21 @@ struct PresetBundleMetadata } }; -// Configuration describing a "published" 3MF project: the file carries a flag plus a list of -// author-selected setting keys. When loading such a project the user's currently-selected -// presets are kept and only the published keys are overlaid onto the edited presets. +// A "published" 3MF project: keeps the user's currently-selected presets and overlays only the +// author-selected published keys onto the edited presets. struct PublishedConfig { bool published = false; std::vector published_keys; - // Material-qualified published keys chosen by the author for the materials used in the - // project; applied on load only to the receiver's filament presets whose material - // identity matches (see PublishedMaterialEntry in PublishSettings.hpp). + // Per-slot published material keys, applied positionally (author slot N -> receiver slot N), + // gated by the author's optional type requirement and written onto the slot's stored preset + // in place (see PublishedMaterialEntry in PublishSettings.hpp). std::vector material_keys; // Keys that could not be applied (missing on the user's machine or vector size mismatch), // filled in by load_config_file_config for notification purposes. std::vector skipped_keys; // Human-readable notices of the slot material replacements performed while loading a - // published project (e.g. "Slot 2: replaced PETG with PLA"), for the load notification. + // published project, for the load notification. std::vector material_replacements; }; diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index 0d1bd07989..2be7a869d1 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -30,11 +30,9 @@ std::string normalize_filament_type(const std::string& type) const std::set& publish_structural_keys() { - // Structural / non-publishable keys. The *_settings_id keys are also part of - // PresetCollection::skipped_in_dirty (Preset.cpp) and are excluded there too. - // This mirrors the structural keys stripped from configs in Preset.cpp - // (profile_print_params_same) plus other keys that must never be published - // because they would rewrite the user's preset inheritance/structure. + // Non-publishable keys: the *_settings_id keys are also in PresetCollection::skipped_in_dirty + // (Preset.cpp) / stripped from configs (profile_print_params_same); publishing them would + // rewrite the user's preset inheritance/structure. static const std::set structural_keys = { "printer_settings_id", "filament_settings_id", "print_settings_id", "sla_print_settings_id", "sla_material_settings_id", @@ -88,9 +86,8 @@ const std::vector& publishable_printer_z_hop_options() const std::set& publishable_printer_keys() { - // The union of the printer tab's "Retraction" and "Z-Hop" optgroups. The "Retraction when - // switching material" keys are intentionally excluded: toolchange retraction is - // device/profile territory, not a publishable behavior tweak. + // Union of the two optgroups; "Retraction when switching material" keys are excluded + // (toolchange retraction is device/profile territory, not a publishable behavior tweak). static const std::set printer_keys = [] { std::set keys; for (const PublishablePrinterOption &opt : publishable_printer_retraction_options()) @@ -113,9 +110,8 @@ std::vector collect_dirty_settings_keys(const PresetBundle& bundle) } }; - // Print and printer presets each track a single edited preset; filaments may span - // multiple slots (multi-material). Union the dirty keys of each collection's edited - // preset; this feeds only the Publish dialog's pre-check. + // Union the dirty keys of each collection's edited preset (filaments may span multiple + // slots); feeds only the Publish dialog's pre-check. append_dirty(bundle.prints.current_dirty_options(true)); append_dirty(bundle.printers.current_dirty_options(true)); append_dirty(bundle.filaments.current_dirty_options(true)); @@ -131,12 +127,11 @@ DynamicPrintConfig filter_published_config( DynamicPrintConfig filtered; std::set base_keys_to_include; - // Base keys that must never be masked: identity, plate geometry, process/printer keys and - // partially-published material keys keep today's whole-vector serialization (all slots). + // Never masked (whole-vector serialization): identity, plate geometry, process/printer + // keys and partially-published material keys. std::set mask_exempt_keys; - // For keys carried only by "full" entries: base key -> author slots whose values must - // survive; the other slots are masked to their defaults so a full publish does not leak - // the author's unrelated slot data. + // "Full" entries only: base key -> author slots whose values must survive; other slots are + // masked to their defaults so a full publish does not leak unrelated slot data. std::map> full_slot_map; // 1. Mandatory material identity & slot count keys for 3MF validation/normalization @@ -183,8 +178,7 @@ DynamicPrintConfig filter_published_config( mask_exempt_keys.insert(base_key); } } - // 4b. "Full publish" entries carry the entire slot; the values of the covered keys are - // masked to the author's slot on export (see the copy loop below). + // Full-publish keys: mask to the author's slot on export (see the copy loop below). for (const std::string &key : entry.full_keys) { const std::string base_key = key.substr(0, key.find('#')); if (base_key.empty()) @@ -195,9 +189,8 @@ DynamicPrintConfig filter_published_config( } } - // Mask a vector option's slots that are not author-published: copy the option default over - // each non-published index. Keys without an option default are left unmasked (the file then - // carries the whole vector, matching the partial-publish behavior). + // Mask non-published vector slots with the option default; keys without a default stay + // unmasked (whole vector, matching partial-publish behavior). auto mask_slots = [](ConfigOption &opt, const ConfigOptionDef *def, const std::set &keep_slots) { auto *vec = dynamic_cast(&opt); if (vec == nullptr || vec->size() == 0 || def == nullptr || !def->default_value) @@ -212,7 +205,7 @@ DynamicPrintConfig filter_published_config( vec->set_at(def->default_value.get(), idx, 0); }; - // Copy selected options from full_config into filtered config + // Copy the selected options from full_config into the filtered config. for (const std::string &key : base_keys_to_include) { if (const ConfigOption *opt = full_config.option(key)) { ConfigOption *cloned = opt->clone(); diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index aadf0d3234..ecb51523f5 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -6,78 +6,63 @@ namespace Slic3r { class PresetBundle; -// Structural / non-publishable setting keys, shared by the Publish dialog and the published-3MF -// overlay path in PresetBundle::load_config_file_config. These keys must never be published -// because they would rewrite the user's preset inheritance/structure. This is the single -// source of truth for the denylist. +// Structural keys that must never be published (single source of truth for the denylist): +// publishing them would rewrite the user's preset inheritance/structure. const std::set& publish_structural_keys(); -// One option row of the printer tab's "Retraction" / "Z-Hop" optgroups (TabPrinter::build_fff, -// Tab.cpp). Key and icon id are kept together so the tab can later be migrated onto these -// lists; publishable_printer_keys() is their union, and the published-3MF loader/dialog must -// never accept printer keys outside it. +// One row of the printer tab's "Retraction" / "Z-Hop" optgroups (key + tab icon id), kept +// together so the tab can later be migrated onto these lists. struct PublishablePrinterOption { const char *key; // config key, e.g. "retraction_length" const char *icon; // tab icon id, e.g. "printer_extruder_retraction#length" }; -// The printer tab's "Retraction" optgroup options, in tab order. +// The printer tab's "Retraction" / "Z-Hop" optgroup options, in tab order. const std::vector& publishable_printer_retraction_options(); -// The printer tab's "Z-Hop" optgroup options, in tab order. const std::vector& publishable_printer_z_hop_options(); -// Printer-class retraction / z-hop keys that are publishable: the union of -// publishable_printer_retraction_options() and publishable_printer_z_hop_options(). The -// published-3MF overlay applies printer keys only when their base key is in this allowlist; -// any other printer-class key in a published file is contract-excluded (never applied, never -// reported as skipped). +// Union of the two optgroup option lists; the published-3MF overlay applies printer keys only +// when their base key is in this allowlist (anything else is contract-excluded). const std::set& publishable_printer_keys(); -// Returns the union of setting keys that differ from the base/system preset across the current -// print, printer and filament presets (feeds the Publish dialog's pre-check). +// Union of setting keys differing from the base/system preset across the current print, +// printer and filament presets (feeds the Publish dialog's pre-check). std::vector collect_dirty_settings_keys(const PresetBundle& bundle); -// A material-qualified set of published setting keys, chosen by the author for one of the -// materials used in the project. The identity fields let the receiver apply the keys only -// when a matching material is selected: filament_id is the most precise (stable across -// machines/vendors when present, empty for user presets); filament_type + filament_vendor -// are the fallback. Keys are base keys (no "#N" variant suffix). +// Per-slot published material keys, applied positionally (author slot N -> receiver slot N). +// The identity fields are carried for reference/notification labels only; the type gate +// (publish_type) is the author's explicit opt-in for requiring a material type. struct PublishedMaterialEntry { std::string filament_type; // material family, e.g. "PLA" (may be empty) std::string filament_vendor; // e.g. "Generic", "Bambu" (may be empty) std::string filament_id; // stable material id, e.g. "GFL99" (may be empty) - // 0-based author filament slot this entry's values came from; -1 = legacy/unspecified - // (files written before the slot field). Slotted entries apply to the receiver's Nth - // matching preset (N = the slot's ordinal among the author's matching slots); legacy - // entries apply to every matching receiver preset. + // Unique preset id of the author's slot preset (e.g. Orca Filament Library "setting_id"); + // used on load to match the exact published variant, which filament_id alone cannot + // distinguish ("Generic PLA" and "Generic PLA Matte" share their inherited id). + std::string setting_id; + // 0-based author filament slot; -1 (hand-crafted files) is skipped. int slot{-1}; std::vector keys; - // "Full Publish": the entire filament preset of this slot is serialized (see full_keys), - // not just the individually selected keys. On load the type gate (publish_type_value) - // decides whether the receiver keeps its material (type match) or is replaced; a full - // entry carries no partial keys. + // "Full Publish": serialize the whole filament preset (full_keys); the type gate then + // decides whether the receiver keeps its material (type match) or is replaced. bool full{false}; - // All non-structural filament keys of the author's slot preset, present when full is true. - // Values travel in the file config, masked to the author's slot index. + // All non-structural filament keys of the author's slot preset; values travel in the file + // config, masked to the author's slot index. std::vector full_keys; - // Vendor-agnostic, curated (MaterialType) filament type the author requires for this slot. - // On load the receiver's slot material is matched against it; on mismatch the slot is - // replaced with a same-type filament from the receiver's library. + // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on + // mismatch the slot is replaced with a same-type filament from the receiver's library. bool publish_type{false}; std::string publish_type_value; - // Required filament colour for this slot, applied on load regardless of the type match. + // Required filament colour, applied on load regardless of the type match. bool publish_color{false}; std::string color; }; -// Normalizes a filament type string against the curated MaterialType list: an exact match -// wins, then the value is stripped after its first space ("PLA High Speed" -> "PLA"); a -// value still not recognized is returned unchanged. Shared by the Publish dialog's type row -// default and by the published-3MF loader's type matching. +// "PLA High Speed" -> "PLA" (strip a space modifier); dash types like "PA-CF" are kept intact. std::string normalize_filament_type(const std::string& type); -// Constructs a minimal DynamicPrintConfig for a published 3MF export containing only the -// author-selected published keys, material keys, material identity fields, and plate geometry keys. +// Minimal DynamicPrintConfig for a published 3MF export: only the selected published keys, +// material keys, identity fields and plate geometry keys. class DynamicPrintConfig; DynamicPrintConfig filter_published_config( const DynamicPrintConfig &full_config, diff --git a/src/slic3r/GUI/ConfigValueFormatter.hpp b/src/slic3r/GUI/ConfigValueFormatter.hpp index e7ed549930..c51a8e8a17 100644 --- a/src/slic3r/GUI/ConfigValueFormatter.hpp +++ b/src/slic3r/GUI/ConfigValueFormatter.hpp @@ -11,18 +11,16 @@ class DynamicPrintConfig; namespace GUI { -// Return the value of the given option (identified by opt_key, which may contain -// a "#" suffix) formatted as a human readable string. +// Human-readable value of opt_key (may carry a "#" suffix) in config. wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config); -// Return the full label of the given option (identified by opt_key, which may contain -// a "#" suffix). Returns "N/A" when the option is not set. +// Full label of opt_key; "N/A" when the option is not set. wxString get_full_label(const std::string& opt_key, const DynamicPrintConfig& config); -// Strip the "#" suffix (if any) from the given option key. +// Strip the "#" suffix (if any) from the option key. std::string get_pure_opt_key(const std::string& opt_key); -// Return the localized label of the currently selected value of an enum option. +// Localized label of the currently selected value of an enum option. wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false, int idx = -1); } // namespace GUI diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 3cb246529f..48f315453c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2837,11 +2837,11 @@ void MainFrame::init_menubar_as_editor() auto publish_handler = [this](wxCommandEvent&) { publish_project(); }; #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), publish_handler, "menu_publish", nullptr, [this](){return can_export_model(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Publish") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), publish_handler, "", nullptr, [this](){return can_export_model(); }, this); #endif diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index cef3613ae9..5bd1fa6d87 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7208,9 +7208,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - // BBS: a "published" 3MF project carries a flag plus a list of author-selected - // setting keys. When present, keep the user's currently-selected presets and - // overlay only the published keys onto the edited presets on load. + // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; + // on load keep the user's current presets and overlay only those keys. PublishedConfig published_config; if (model.model_info != nullptr) { auto published_it = model.model_info->metadata_items.find("published"); @@ -7249,6 +7248,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ entry.filament_vendor = mat["filament_vendor"].get(); if (mat.contains("filament_id") && mat["filament_id"].is_string()) entry.filament_id = mat["filament_id"].get(); + if (mat.contains("setting_id") && mat["setting_id"].is_string()) + entry.setting_id = mat["setting_id"].get(); } if (m.contains("slot") && m["slot"].is_number_integer()) entry.slot = m["slot"].get(); @@ -7257,7 +7258,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (const auto &k : *entry_keys_it) if (k.is_string()) entry.keys.emplace_back(k.get()); - // Filament-publishing-v2 fields; absent in legacy files. + // Fields always written by the current exporter. if (m.contains("full") && m["full"].is_boolean()) entry.full = m["full"].get(); const auto entry_full_keys_it = m.find("full_keys"); @@ -7282,10 +7283,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - // BBS: a "published" 3MF behaves like a new project once loaded: the file's path - // must not become the project filename (Save/Ctrl-S would otherwise overwrite the - // shared file), and the published metadata is consumed by the overlay above and - // stripped so a later save produces a normal, unpublished 3MF. + // BBS: a "published" 3MF loads as a new project: its path must not become the + // project filename (Save/Ctrl-S would overwrite the shared file), and the + // published metadata is consumed above and stripped so a later save is a normal + // unpublished 3MF. if (published_out != nullptr && published_config.published) *published_out = true; if (published_config.published && load_config && this->model.model_info != nullptr) { @@ -13309,10 +13310,10 @@ void Plater::load_project(wxString const& filename2, p->set_project_filename(filename); } else if (loaded_published) { - // A "published" 3MF loads as a new project: the shared file's path must not become - // the project filename, so Save/Ctrl-S prompts for a destination instead of - // overwriting the published file. reset() above already cleared the project name - // and folder; restore the default new-project title and keep the file in recents. + // A "published" 3MF loads as a new project: its path must not become the project + // filename (Save/Ctrl-S prompts for a destination instead of overwriting it); + // reset() already cleared the project name, so restore the default title and keep + // the file in recents. p->set_project_name(_L("Untitled")); if (!filename.IsEmpty()) wxGetApp().mainframe->add_to_recent_projects(filename); @@ -16225,10 +16226,9 @@ void Plater::export_core_3mf() export_3mf(path_u8, SaveStrategy::Silence); } -// Export the current project as a "published" 3MF. This is a pure export: unlike save_project(), -// it never touches the project's file name, dirty state, backup path or title, and the -// published metadata is attached to the model only for the duration of the export so the -// in-memory project stays exactly as it was (a later Save Project produces a normal 3MF). +// Export the current project as a "published" 3MF: a pure export that never touches the +// project's file name, dirty state, backup path or title, and attaches the published metadata +// to the model only for the duration of the export (a later Save Project is a normal 3MF). int Plater::export_published_3mf(const std::vector& published_keys, const std::vector& material_keys) { wxString path = p->get_export_file(FT_3MF, _L("Publish 3MF file as:")); @@ -16240,14 +16240,14 @@ int Plater::export_published_3mf(const std::vector& published_keys, j.push_back(key); nlohmann::json jm = nlohmann::json::array(); for (const Slic3r::PublishedMaterialEntry& e : material_keys) - jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}}}, {"slot", e.slot}, {"keys", e.keys}, + jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}, {"setting_id", e.setting_id}}}, {"slot", e.slot}, {"keys", e.keys}, {"full", e.full}, {"full_keys", e.full_keys}, {"publish_type", e.publish_type}, {"type", e.publish_type_value}, {"publish_color", e.publish_color}, {"color", e.color} }); Model& model = this->model(); - // Remember the previous metadata state so it can be restored after the export, keeping the - // in-memory project pristine (the published flag lives only in the exported file). + // Save the previous metadata so it can be restored after the export, keeping the in-memory + // project pristine (the published flag lives only in the exported file). const bool had_model_info = (model.model_info != nullptr); const bool had_published = had_model_info && (model.model_info->metadata_items.find("published") != model.model_info->metadata_items.end()); const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find("published_keys") != model.model_info->metadata_items.end()); @@ -16261,15 +16261,13 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info->metadata_items["published_keys"] = j.dump(); model.model_info->metadata_items["published_material_keys"] = jm.dump(); - // Minimal published export: filter full_config to only the published keys, material keys, - // identity fields, and plate geometry keys, and omit project-embedded preset dumps. + // Minimal published export: filter full_config to the published keys, material keys, + // identity fields and plate geometry keys, and omit project-embedded preset dumps. DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); - // Same file layout save_project() uses for its project files, plus SaveStrategy::Silence and SaveStrategy::MinimalPublished: - // without it export_3mf() calls set_project_filename() on success, which would make this - // pure export the current project file. Silence keeps the project state untouched, exactly - // like export_core_3mf(). + // Same file layout as save_project(), plus Silence (so export_3mf does not set the project + // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence | SaveStrategy::MinimalPublished; bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); if (full_pathnames) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index d6ec283409..826fe29a5a 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -495,9 +495,8 @@ public: void export_gcode_3mf(bool export_all = false); void send_gcode_finish(wxString name); void export_core_3mf(); - // Export the current project as a "published" 3MF: embeds the author-selected settings - // (published_keys / published_material_keys) into the file's metadata. A pure export: the - // in-memory project (filename, dirty state, model_info metadata) is left untouched. + // Export a "published" 3MF embedding the author-selected settings in the file metadata; a + // pure export that leaves the in-memory project untouched. int export_published_3mf(const std::vector& published_keys, const std::vector& material_keys); static TriangleMesh combine_mesh_fff(const ModelObject& mo, int instance_id, std::function notify_func = {}); void export_stl(bool extended = false, bool selection_only = false, bool multi_stls = false, FileType file_type = FT_STL); diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 009f672d3e..f62d7af3a4 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -23,8 +23,8 @@ namespace Slic3r { namespace GUI { namespace { -// Menu ids for show_menu(). Dedicated range above the standard ids so the popup cannot -// collide with application-level bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). +// Menu ids for show_menu(): dedicated range so the popup cannot collide with application-level +// bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). enum { kPublishSelectAll = wxID_HIGHEST + 1, kPublishDeselectAll, @@ -49,9 +49,7 @@ PublishMaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& return identity; } -// "Generic PLA @System" -> "Generic PLA"; mirrors the alias derivation in -// PresetBundle::load_vendor_configs_from_json (PresetBundle.cpp) and -// PresetCollection::set_custom_preset_alias (Preset.cpp). +// "Generic PLA @System" -> "Generic PLA"; mirrors the alias derivation in PresetBundle.cpp. std::string material_display_name(const std::string& preset_name) { const size_t at = preset_name.find_first_of('@'); @@ -62,8 +60,8 @@ std::string material_display_name(const std::string& preset_name) return bare.empty() ? preset_name : bare; } -// Human-readable section title for a filament slot: the resolved preset name, -// falling back to the filament type, then to the generic "Material". +// Section title for a filament slot: the resolved preset name, then the filament type, then +// the generic "Material". wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPrintConfig& full) { if (slot < bundle->filament_presets.size()) { @@ -165,8 +163,7 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { - // Publish is always allowed: no settings selected means a publish with - // no settings override. + // Publish is always allowed: no settings selected means no settings override. EndModal(wxID_OK); }); dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); @@ -183,12 +180,11 @@ PublishSettingsDialog::~PublishSettingsDialog() {} void PublishSettingsDialog::build_option_model() { - // Structural / non-publishable keys, shared with the published-3MF overlay - // path (see libslic3r/PublishSettings.hpp). + // Structural / non-publishable keys, shared with the published-3MF overlay path. const std::set& denylist = publish_structural_keys(); - // Base keys already added in the print/printer sections. Printer rows share - // this set: a base key appears once (per-extruder "#N" variants collapse to - // the first occurrence - acceptable MVP; the per-extruder context is lost). + // Base keys already added in the print/printer sections. Printer rows share this set: + // per-extruder "#N" variants collapse to the first occurrence (acceptable MVP; the + // per-extruder context is lost in the UI). std::set added; PresetBundle* bundle = wxGetApp().preset_bundle; @@ -198,17 +194,17 @@ void PublishSettingsDialog::build_option_model() m_info_allsel = _L("All items selected..."); m_info_empty = _L("No matching items..."); - // Keep the tab order explicit: Section's enum order is Print, Printer, - // Material, while the dialog presents Printer, Filament, Process. + // Tab order differs from Section's enum order (Print, Printer, Material): the dialog + // presents Printer, Filament, Process. m_sections.reserve(3); const Section tab_order[] = {Section::Printer, Section::Material, Section::Print}; for (Section kind : tab_order) section_group_for(kind); bind_tab_events(); - // Shared per-option label/value computation; returns false when the option - // must be skipped (denylisted / unknown / empty label). value is the pure - // stringified value; unit is the translated sidetext (may be empty). + // Shared per-option label/value computation; returns false when the option must be skipped + // (denylisted / unknown / empty label). value is the stringified value; unit the translated + // sidetext (may be empty). auto option_text = [&denylist, &full](const std::string& opt_id, const std::string& pure_key, wxString& label, wxString& value, wxString& unit) -> bool { if (denylist.count(pure_key) > 0) @@ -224,9 +220,8 @@ void PublishSettingsDialog::build_option_model() return true; }; - // --- Phase 1: printer per-extruder retraction settings (displayed first, - // mirroring the sidebar's Printer group). The printer tab's - // "Extruder"/"Extruder N" pages carry the per-extruder retraction options. + // --- Phase 1: printer per-extruder retraction settings (first, mirroring the sidebar's + // Printer group), from the printer tab's "Extruder"/"Extruder N" pages. { size_t g = section_group_for(Section::Printer); category_index_for(_L("Extruder"), Section::Printer, "custom-gcode_extruder", g, 0); @@ -238,18 +233,17 @@ void PublishSettingsDialog::build_option_model() continue; const wxString page_title = Tab::translate_category(page->title(), tab->m_type); for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { - // Allowlist on the untranslated optgroup title; the "Retraction - // when switching material" group is intentionally skipped. + // Allowlist on the untranslated optgroup title; the "Retraction when + // switching material" group is intentionally skipped. if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") continue; const wxString subcategory = _(optgroup->title); for (const auto& opt : optgroup->opt_map()) { const std::string& opt_id = opt.first; const std::string& pure_key = opt.second.first; - // Per-extruder "#N" variants collapse to the first base key. The row stores - // the BASE key (whole-vector semantics on load: the size-guarded apply - // copies the author's full vector), while the "#0" opt_id is only used to - // display the first extruder's value. + // Per-extruder "#N" variants collapse to the first base key. The row + // stores the base key; GetPublishedKeys() later expands it back to one + // "#N" entry per extruder so the load side can apply per-extruder values. if (!added.insert(pure_key).second) continue; wxString label, value, unit; @@ -264,8 +258,8 @@ void PublishSettingsDialog::build_option_model() } } - // --- Phase 2: per-material sections synthesized from the filament tab's - // "Setting Overrides" page, under the Filament group. + // --- Phase 2: per-material sections synthesized from the filament tab's "Setting + // Overrides" page, under the Filament group. { size_t g = section_group_for(Section::Material); Tab* filament_tab = nullptr; @@ -283,17 +277,16 @@ void PublishSettingsDialog::build_option_model() } if (overrides_page != nullptr) { - // One section per filament slot: a 4-slot printer (e.g. 1 PLA + - // 3 PETG) shows 4 separate pages, each disambiguated internally by - // its colour chip and slot identity while displaying the bare name. + // One section per filament slot (a 4-slot printer shows 4 pages), each + // disambiguated by its colour chip and slot identity while showing the bare name. for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { const PublishMaterialIdentity identity = material_identity(slot, full); const wxString title = material_title(slot, bundle, full); const size_t category_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, slot, identity); - // Filament-publishing-v2 rows: the author may require a filament colour and/or - // a vendor-agnostic material type for this slot. They live in their own - // optgroup so they stay visually separated from the setting rows. + // Material requirement rows: an optional filament colour and/or a + // vendor-agnostic material type for this slot, in their own optgroup so they + // stay visually separated from the setting rows. { const size_t req_sub = subcategory_index_for(category_index, _L("Material"), "custom-gcode_filament"); std::string hex; @@ -309,18 +302,16 @@ void PublishSettingsDialog::build_option_model() RowKind::Type); } - // A material section must not repeat a key; the same key may - // appear in other material sections - that is intended. + // A material section must not repeat a key; the same key may appear in other + // material sections - that is intended. std::set material_added; for (const ConfigOptionsGroupShp& optgroup : overrides_page->m_optgroups) { - // Allowlist on the untranslated optgroup title; the - // "Ironing" group is intentionally skipped. + // Allowlist on the untranslated optgroup title; "Ironing" is skipped. if (optgroup->title != "Retraction" && optgroup->title != "Retraction when switching material") continue; for (const auto& opt : optgroup->opt_map()) { - // Row keys are base keys (no "#N"): the load side - // matches the material and uses the author's slot. + // Row keys are base keys; the load side applies them positionally. const std::string& opt_id = opt.first; std::string base = opt_id.substr(0, opt_id.find('#')); if (!material_added.insert(base).second) @@ -381,17 +372,15 @@ void PublishSettingsDialog::build_option_model() } } - // Pre-check the dirty (modified) settings and mark them bold. The base-key - // match covers all sections; collect_dirty_settings_keys already unions the - // prints, printers and filaments of the bundle. + // Pre-check the dirty (modified) settings and mark them bold (base-key match, across all + // sections; collect_dirty_settings_keys unions the prints, printers and filaments). std::set dirty_base; for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) { auto n = key.find('#'); dirty_base.insert(n == std::string::npos ? key : key.substr(0, n)); } for (Row& row : m_rows) { - // The Color/Type requirement rows are not "dirty overrides": they are never - // auto-checked by the dirty pre-check. + // The Color/Type requirement rows are not "dirty overrides": never auto-checked. if (row.kind != RowKind::Setting) continue; std::string base = row.key.substr(0, row.key.find('#')); @@ -402,8 +391,8 @@ void PublishSettingsDialog::build_option_model() } } - // Wire the "Full Publish" checkboxes: toggling one disables/enables the material's - // rows. Bind by index so the lambda stays valid even if the vector is reallocated later. + // Wire the "Full Publish" checkboxes: toggling one disables/enables the material's rows. + // Bind by index so the lambda stays valid even if the vector is reallocated later. for (size_t c = 0; c < m_categories.size(); ++c) if (m_categories[c].full_check != nullptr) m_categories[c].full_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_full_toggle(c); }); @@ -449,6 +438,7 @@ size_t PublishSettingsDialog::section_group_for(Section kind) section.icon_name = "process"; break; } + section.icon_bmp = ScalableBitmap(this, section.icon_name, 16); constexpr long tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT; @@ -466,7 +456,10 @@ size_t PublishSettingsDialog::section_group_for(Section kind) page_sizer->Add(section.page_host, 1, wxEXPAND | wxTOP, FromDIP(4)); section.page->SetSizer(page_sizer); - m_outer_tabs->AppendItem(section.title); + if (section.icon_bmp.bmp().IsOk()) + m_outer_tabs->AppendItem(section.title, section.icon_bmp.bmp()); + else + m_outer_tabs->AppendItem(section.title); m_outer_host_sizer->Add(section.page, 1, wxEXPAND); section.page->Hide(); m_sections.push_back(std::move(section)); @@ -610,7 +603,7 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); // The value is read-only text (incl. the Type row: the published type is the slot's - // normalized type, the author cannot pick a different one here). + // normalized type, not author-editable). current.value_label = new wxStaticText(category.scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); current.value_label->SetFont(Label::Body_13); current.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); @@ -643,8 +636,7 @@ void PublishSettingsDialog::on_full_toggle(size_t category_index) void PublishSettingsDialog::set_row_bold(Row& row, bool bold) { - // Real set/clear: rebase on the dialog's body font so that clearing bold - // restores the exact original font (the old CheckList::SetBold was one-way). + // Rebase on the dialog's body font so clearing bold restores the exact original font. row.check->SetFont(bold ? Label::Body_13.Bold() : Label::Body_13); } @@ -718,12 +710,11 @@ void PublishSettingsDialog::apply_filter(const wxString& filter_text) Freeze(); wxString filter = filter_text.Lower(); - // Pseudo filters (menu only): show only checked ("::sel") or only - // unchecked ("::nonsel") rows. + // Pseudo filters (menu only): show only checked ("::sel") or only unchecked ("::nonsel"). const bool pseudo = (filter == "::sel" || filter == "::nonsel"); m_fb_sizer->Show(!pseudo); - // Update row matches first; page and optgroup visibility is applied below. + // Row matches are computed first; page and optgroup visibility is applied below. if (pseudo) { if (m_filter_ctrl->GetValue().Lower() != filter) { m_filter_ctrl->ChangeValue(filter); @@ -808,8 +799,7 @@ void PublishSettingsDialog::apply_visibility() void PublishSettingsDialog::select_all(bool value) { - // "All" does not auto-enable gated material sections; "None" leaves a gated - // row's preserved value untouched. + // "All" skips disabled (gated) rows; "None" leaves a gated row's preserved value. for (Row& row : m_rows) if (row.check->IsEnabled()) row.check->SetValue(value); @@ -829,19 +819,18 @@ bool PublishSettingsDialog::row_is_visible(const Row& row) const void PublishSettingsDialog::select_visible(bool value) { wxString filter = m_filter_ctrl->GetValue().Lower(); - // In a pseudo-filter view the rows being toggled would all disappear; - // drop the filter afterwards so the result stays visible. + // In a pseudo-filter view the rows being toggled would all disappear; drop the filter + // afterwards so the result stays visible. bool clear_pseudo = (!value && filter == "::nonsel") || (value && filter == "::sel"); - // Toggle the rows that are visible under the *current* filter. + // Toggle the rows visible under the *current* filter. for (Row& row : m_rows) if (row_is_visible(row)) row.check->SetValue(value); if (clear_pseudo) { - // Note: SetValue() may fire wxEVT_TEXT on some platforms, which - // re-enters apply_filter() - that is fine, the rows above were already - // toggled and the trailing call below is idempotent. + // Note: SetValue() may fire wxEVT_TEXT on some platforms, re-entering apply_filter() - + // that is fine; the rows above were already toggled and the trailing call is idempotent. m_filter_ctrl->ChangeValue(""); apply_filter(""); // resync visibility and the All/None bar } @@ -895,12 +884,31 @@ void PublishSettingsDialog::show_menu(wxMouseEvent& evt) std::vector PublishSettingsDialog::GetPublishedKeys() const { std::vector out; - // Process and printer sections both travel through published_keys (the load-side - // overlay applies process keys to the prints edited preset and the allowlisted - // printer keys to the printers edited preset). Material keys use a separate API. - for (const Row& row : m_rows) - if ((row.section == Section::Print || row.section == Section::Printer) && row.check->GetValue()) + // Process and printer sections both travel through published_keys (the load-side overlay + // applies process keys to the prints edited preset and the allowlisted printer keys to the + // printers edited preset); material keys use a separate API. + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + for (const Row& row : m_rows) { + if ((row.section != Section::Print && row.section != Section::Printer) || !row.check->GetValue()) + continue; + if (row.section == Section::Printer) { + // Printer rows store the base key (per-extruder "#N" variants collapsed during + // build). Publish every extruder element so the load side can apply per-extruder + // values even when the receiver has a different extruder count; a scalar printer + // key is published as-is. + const std::string base_key = row.key.substr(0, row.key.find('#')); + if (const ConfigOption* opt = full.option(base_key)) { + if (const auto* vec = dynamic_cast(opt)) { + for (size_t i = 0; i < vec->size(); ++i) + out.push_back(base_key + "#" + std::to_string(i)); + } else { + out.push_back(base_key); + } + } + } else { out.push_back(row.key); + } + } return out; } @@ -915,8 +923,15 @@ std::vector PublishSettingsDialog::GetPublishedM entry.filament_vendor = cat.filament_vendor; entry.filament_id = cat.filament_id; entry.slot = static_cast(cat.filament_slot); - // "Full Publish": the entire filament preset of the slot is embedded; type and color - // are implicitly published, and the per-key rows are disabled and their state is ignored. + // The author's preset id distinguishes exact variants that share filament_id + // ("Generic PLA" vs "Generic PLA Matte"), so the receiver can match precisely. + PresetBundle *bundle = wxGetApp().preset_bundle; + if (bundle != nullptr && cat.filament_slot < bundle->filament_presets.size()) { + if (const Preset *preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) + entry.setting_id = preset->setting_id; + } + // "Full Publish": the whole filament preset is embedded; type and colour are implicitly + // published, and the per-key rows are disabled / their state ignored. if (cat.full_check != nullptr && cat.full_check->GetValue()) { entry.full = true; entry.full_keys = full_keys_for_slot(); @@ -946,8 +961,7 @@ std::vector PublishSettingsDialog::GetPublishedM entry.keys.push_back(row.key); } } - // A material with only setting keys but none checked, or with nothing selected at all, - // carries no information for the writer. + // Nothing checked at all -> nothing to write. if (!entry.keys.empty() || entry.publish_type || entry.publish_color) out.push_back(std::move(entry)); } @@ -956,9 +970,9 @@ std::vector PublishSettingsDialog::GetPublishedM std::vector PublishSettingsDialog::full_keys_for_slot() const { - // The canonical filament preset keys, minus the structural keys the published overlay must + // The canonical filament preset keys minus the structural keys the published overlay must // never touch (inherits, compatibility, *_settings_id, ...), plus filament_colour (not a - // member of Preset::filament_options). The values travel in the exported config, masked to + // member of Preset::filament_options). Values travel in the exported config, masked to // this slot, and are applied on load onto the receiver's slot. const std::set& denylist = publish_structural_keys(); std::vector keys; @@ -971,7 +985,7 @@ std::vector PublishSettingsDialog::full_keys_for_slot() const void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) { - // Rescale toolbar bitmaps and icons; collapse chevrons are vector-drawn and repaint themselves. + // Rescale toolbar bitmaps and icons; collapse chevrons are vector-drawn and repaint. m_search.msw_rescale(); m_menu.msw_rescale(); m_filter_box->SetIcon(m_search.bmp()); @@ -1000,8 +1014,13 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) cat.list_sizer->Layout(); } - for (SectionGroup& section : m_sections) + for (size_t s = 0; s < m_sections.size(); ++s) { + SectionGroup& section = m_sections[s]; + section.icon_bmp.msw_rescale(); + if (section.icon_bmp.bmp().IsOk()) + m_outer_tabs->SetItemBitmap(s, section.icon_bmp.bmp()); section.tabs->Rescale(); + } // Refresh the per-row Color chips at the new DPI. for (Row& row : m_rows) { diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 70b1dc8a2d..74fc6a7077 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -28,25 +28,21 @@ struct PublishMaterialIdentity std::string id; }; -// Dialog that lets a model author select which settings get embedded in a 3MF. -// Settings are grouped into the same nested custom tab layout used by the -// Process settings: Printer, Filament, and Process outer tabs, with category or -// material tabs inside each section. Optgroups are ordinary grouped headers. -// Modified (dirty) settings are pre-checked and shown bold. On OK, the print -// rows become the "published_keys" list and the material rows become the -// per-material "published_material_keys". +// Dialog letting a model author select which settings get embedded in a 3MF. Nested tab layout +// mirroring the Process settings (Printer / Filament / Process outer tabs, category or material +// tabs inside each). Dirty settings are pre-checked and shown bold; on OK the print rows become +// "published_keys" and the material rows become "published_material_keys". class PublishSettingsDialog : public DPIDialog { public: PublishSettingsDialog(wxWindow* parent = nullptr); ~PublishSettingsDialog(); - // The selected print-section setting keys (in display order). Keys may - // contain '#'. + // The selected print/printer setting keys (in display order); printer keys carry a '#N' + // per-extruder suffix. std::vector GetPublishedKeys() const; - // The selected keys grouped per material: one entry per material section - // with at least one checked key. Keys are base keys (no "#N" suffix). + // The selected keys grouped per material section (base keys, no '#N' suffix). std::vector GetPublishedMaterialKeys() const; protected: @@ -56,9 +52,9 @@ private: // Which part of the settings the row/category came from. enum class Section { Print, Printer, Material }; - // One selectable setting row: a checkbox (setting name) plus a value label - // and a (optional) grey unit label. key is the full config key and may carry - // a "#N" variant suffix (print/printer rows); material rows carry the base key. + // One selectable setting row: a checkbox (setting name) plus a value label and an optional + // grey unit label. key is the full config key, possibly with a "#N" variant suffix + // (print/printer rows); material rows carry the base key. enum class RowKind { Setting, // a regular setting key Color, // material colour requirement (filament_colour) @@ -113,9 +109,9 @@ private: ScalableBitmap icon_bmp; // scalable bitmap for DPI changes wxStaticBitmap* icon{nullptr}; wxStaticBitmap* filament_color_chip{nullptr}; - wxStaticText* title_label{nullptr}; // material title (static text, Full Publish carries the label elsewhere) - // "Full Publish": serializing the entire filament preset of this slot. While checked, - // the slot's rows (incl. Color/Type) are disabled. + wxStaticText* title_label{nullptr}; // material title (static text; Full Publish carries the label elsewhere) + // "Full Publish": while checked, the whole slot preset is serialized and its rows + // (incl. Color/Type) are disabled. bool full{false}; wxCheckBox* full_check{nullptr}; // Material identity, only for Section::Material categories. @@ -134,6 +130,7 @@ private: wxString title; // _L("Printer") / _L("Filament") / _L("Process") Section kind{Section::Print}; // maps 1:1 to the display group std::string icon_name; // "printer" / "filament" / "process" + ScalableBitmap icon_bmp; // tab icon next to the title; rescaled on DPI change wxPanel* page{nullptr}; TabCtrl* tabs{nullptr}; wxPanel* page_host{nullptr}; diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index d9d6833a5a..34ff31183f 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -501,12 +501,10 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { } } -// The "Publish" feature stores a published flag plus a JSON array of author-selected setting keys -// in model.model_info->metadata_items. This locks the serialization contract: both keys must survive -// a store_bbs_3mf -> load_bbs_3mf round-trip unchanged. (The full preset-preservation behavior — -// keeping the user's currently-selected presets and overlaying only the published keys onto them — -// is exercised headlessly in "Published 3MF overlays only the author-selected process keys onto the -// edited preset" in test_preset_bundle_loading.cpp.) +// Locks the serialization contract of the "Publish" metadata: the published flag and the +// published_keys JSON array in model.model_info->metadata_items must survive a store_bbs_3mf -> +// load_bbs_3mf round-trip unchanged. (The full preset-preservation behavior is exercised +// headlessly in test_preset_bundle_loading.cpp.) SCENARIO("Published 3MF round-trips the published flag and published_keys metadata", "[3mf]") { GIVEN("a model carrying published metadata") { Model model; @@ -518,8 +516,8 @@ SCENARIO("Published 3MF round-trips the published flag and published_keys metada model.model_info->metadata_items["published"] = "1"; model.model_info->metadata_items["published_keys"] = R"(["layer_height","wall_thickness"])"; - // store_bbs_3mf stages Metadata/project_settings.config through the model's backup path; - // point it at a writable temp dir (the default lives under a read-only root in CI). + // store_bbs_3mf stages project_settings.config through the model's backup path; point + // it at a writable temp dir (the default lives under a read-only root in CI). ScopedTemporaryDir backup_dir("orca_pub"); model.set_backup_path(backup_dir.string()); @@ -564,8 +562,8 @@ SCENARIO("Published 3MF round-trips the published flag and published_keys metada } } -// A project saved without the Publish metadata (i.e. a normal 3MF) must load identically: the -// loader must not fabricate a "published" flag or published_keys for files that never carried them. +// A normal 3MF (no Publish metadata) must load identically: the loader must not fabricate a +// "published" flag or published_keys for files that never carried them. SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { GIVEN("a model without any published metadata") { Model model; @@ -610,10 +608,8 @@ SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { } } -// The "Publish" feature can also store material-qualified setting keys, one entry per material -// the author uses, in model.model_info->metadata_items. This locks the serialization contract -// for that entry list: the JSON must survive a store_bbs_3mf -> load_bbs_3mf round-trip -// verbatim, exactly like the plain published_keys array. +// Locks the serialization contract of the published_material_keys metadata: the per-entry JSON +// must survive a store_bbs_3mf -> load_bbs_3mf round-trip verbatim, exactly like published_keys. SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf]") { GIVEN("a model carrying published material keys metadata") { Model model; @@ -658,8 +654,7 @@ SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); // The value must parse back to one material entry carrying the nested identity - // object, the author slot ordinal and the key list, so the loader can match it - // to the receiver's filaments. + // object, the author slot ordinal and the key list. nlohmann::json entries = nlohmann::json::parse(material_keys_json); REQUIRE(entries.is_array()); REQUIRE(entries.size() == 1); @@ -689,19 +684,19 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded const std::vector published_keys = { "layer_height", "retraction_length" }; const std::vector material_keys = { - { "PLA", "Generic", "GFL99", 0, { "filament_retraction_length" } } + { "PLA", "Generic", "GFL99", "", 0, { "filament_retraction_length" } } }; DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); - // Filtered config must contain the published keys and identity keys + // Filtered config keeps the published and identity keys... REQUIRE(filtered_cfg.option("layer_height") != nullptr); REQUIRE(filtered_cfg.option("retraction_length") != nullptr); REQUIRE(filtered_cfg.option("filament_colour") != nullptr); REQUIRE(filtered_cfg.option("filament_type") != nullptr); REQUIRE(filtered_cfg.option("wipe_tower_x") != nullptr); - // Non-published settings should NOT be in filtered_cfg + // ...and drops everything else. REQUIRE(filtered_cfg.option("sparse_infill_density") == nullptr); REQUIRE(filtered_cfg.option("machine_start_gcode") == nullptr); @@ -716,7 +711,7 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded ScopedTemporaryFile temp(".3mf"); const std::string test_file = temp.string(); - // Create a fake project preset to verify it gets omitted with MinimalPublished + // Create a fake project preset to verify MinimalPublished omits it. Preset preset(Preset::TYPE_PRINT, "TestPrintPreset"); preset.config = full_cfg; std::vector project_presets = { &preset }; @@ -753,9 +748,9 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded } } -// Filament-publishing v2: a "full publish" entry carries the whole slot's key list. Its vector -// options keep only the author's slot value; the other slots are masked to their defaults so a -// slot-1 full publish does not leak slot 0's data into the file. +// A "full publish" entry carries the whole slot's key list: its vector options keep only the +// author's slot value, the other slots are masked to their defaults so a slot-1 full publish +// does not leak slot 0's data into the file. SCENARIO("Full-publish entries filter the whole slot and mask the other slots", "[3mf]") { GIVEN("a full print configuration with two filament slots") { DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); @@ -787,9 +782,9 @@ SCENARIO("Full-publish entries filter the whole slot and mask the other slots", } } -// Filament-publishing v2: the extended per-entry fields (full dump list, published type and -// colour) travel inside the published_material_keys metadata and round-trip unchanged. -SCENARIO("Published 3MF round-trips the filament-publishing-v2 material metadata", "[3mf]") { +// The extended per-entry fields (full dump list, published type and colour) travel inside the +// published_material_keys metadata and round-trip unchanged. +SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { GIVEN("a model carrying extended published material keys metadata") { Model model; std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; @@ -797,7 +792,7 @@ SCENARIO("Published 3MF round-trips the filament-publishing-v2 material metadata model.add_default_instances(); const std::string material_keys_json = - R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99","setting_id":"RFs9eCKYOMUSmvZf"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; model.model_info = std::make_shared(); model.model_info->metadata_items["published_material_keys"] = material_keys_json; @@ -832,7 +827,7 @@ SCENARIO("Published 3MF round-trips the filament-publishing-v2 material metadata REQUIRE(dst_model.model_info != nullptr); REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); - // The value must parse back with every filament-publishing-v2 field intact. + // The value must parse back with every extended field intact. nlohmann::json entries = nlohmann::json::parse(material_keys_json); REQUIRE(entries.is_array()); REQUIRE(entries.size() == 1); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 8716af417d..3a9ff77be9 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -549,36 +549,26 @@ TEST_CASE("A printer specific filament supersedes the generic library filament w } // A "published" 3MF keeps the user's currently-selected presets and overlays only the -// author-selected process keys onto the edited preset. Mirrors the GUI load path -// (src/slic3r/GUI/Plater.cpp): Preset::normalize before load_config_model, then the -// published overlay in PresetBundle::load_config_file_config. +// author-selected process keys onto the edited preset (mirrors the GUI load path: normalize +// before load_config_model, then the overlay in load_config_file_config). TEST_CASE("Published 3MF overlays only the author-selected process keys onto the edited preset", "[Preset][Bundle][Published]") { // The file config the GUI builds from a .3mf's project settings. auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); // The loader derives the filament count from filament_colour and throws when it is - // empty ("Invalid configuration file"); a 3mf always carries it. + // empty; a 3mf always carries it. config.opt("filament_colour")->values = { "#FF0000" }; - // Process scalar key. - config.opt_float("layer_height") = 0.28; - // Process vector key, size 2 to match the edited preset's resized vector. - config.opt("wiping_volumes_extruders")->values = { 140., 150. }; - // Process vector key, size 2: deliberately mismatched against the edited preset. - config.opt("post_process")->values = { "script-a", "script-b" }; - // A filament key: published files may still carry legacy filament keys. - config.opt("nozzle_temperature")->values = { 220 }; - // A structural (denylisted) key: must be silently ignored even if a hand-crafted - // file lists it as published. full_print_config() omits the *_settings_id keys (they - // have no static counterpart), while a real 3mf project config carries it, so create - // it explicitly. + config.opt_float("layer_height") = 0.28; // process scalar + config.opt("wiping_volumes_extruders")->values = { 140., 150. }; // matching-size vector + config.opt("post_process")->values = { "script-a", "script-b" }; // mismatched vector + config.opt("nozzle_temperature")->values = { 220 }; // filament key (not applied anywhere) + // Structural (denylisted) key: must be silently ignored. full_print_config() omits the + // *_settings_id keys, so create one explicitly. config.opt_string("print_settings_id", true) = "file process"; - // Project-level filament/purge data: must NOT cross over in published mode. - config.opt("flush_multiplier")->values = { 2., 2. }; - // A project-level option, to pin the project_config.apply_only() invariant. - config.opt("wipe_tower_x")->values = { 100. }; - // The author's bed type must NOT cross over either: the receiver keeps its own. - config.option("curr_bed_type")->setInt(BedType::btPC); + config.opt("flush_multiplier")->values = { 2., 2. }; // must NOT cross over + config.opt("wipe_tower_x")->values = { 100. }; // plate geometry, does cross over + config.option("curr_bed_type")->setInt(BedType::btPC); // must NOT cross over return config; }; @@ -595,14 +585,14 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values = { 10., 20. }; bundle.prints.get_edited_preset().config.opt("post_process")->values = { "existing-script" }; bundle.prints.get_edited_preset().config.opt_string("print_settings_id") = "user process"; - // Capture the ctor-seeded project_config values; the assertions below check that the - // published load leaves them untouched rather than hardcoding the defaults. + // Capture the ctor-seeded project_config values so the assertions below check the load + // leaves them untouched rather than hardcoding the defaults. const std::vector seed_filament_colour = bundle.project_config.opt("filament_colour")->values; const std::vector seed_flush_multiplier = bundle.project_config.opt("flush_multiplier")->values; const int seed_bed_type = bundle.project_config.option("curr_bed_type")->getInt(); DynamicPrintConfig config = make_file_config(); - // The GUI normalizes the config before load; do the same so only the production path is exercised. + // The GUI normalizes the config before load; mirror that so only the production path runs. Preset::normalize(config); PublishedConfig pub; @@ -610,48 +600,36 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the pub.published_keys = published_keys; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // a) The process scalar is overlaid onto the edited preset. + // a) Process scalar overlaid; matching-size vector applied, mismatched one lands in + // skipped_keys; applied keys are not reported. CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); - - // b) A matching-size process vector is applied; a size-mismatched one is neither applied - // nor reported as skipped by accident — it lands in skipped_keys. CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 140., 150. }); CHECK(bundle.prints.get_edited_preset().config.opt("post_process")->values == std::vector{ "existing-script" }); CHECK(contains_key(pub.skipped_keys, "post_process")); - - // c) A filament key is never applied anywhere and is reported as skipped (warning). - CHECK(bundle.prints.get_edited_preset().config.option("nozzle_temperature") == nullptr); - CHECK(contains_key(pub.skipped_keys, "nozzle_temperature")); - - // d) A structural key is silently ignored: neither applied nor reported as skipped. - CHECK(bundle.prints.get_edited_preset().config.opt_string("print_settings_id") == "user process"); - CHECK_FALSE(contains_key(pub.skipped_keys, "print_settings_id")); - - // Applied keys are not reported as skipped. CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); - // e) project_config.apply_only() still runs, but in published mode only the plate/bed - // geometry crosses: the file's filament/purge data must NOT port to the receiver. - // Filament colors do not port; project_config keeps its ctor-seeded values. - CHECK(bundle.project_config.opt("filament_colour")->values != std::vector{ "#FF0000" }); + // b) A filament key is never applied anywhere and is reported as skipped. + CHECK(bundle.prints.get_edited_preset().config.option("nozzle_temperature") == nullptr); + CHECK(contains_key(pub.skipped_keys, "nozzle_temperature")); + + // c) A structural key is silently ignored: neither applied nor reported as skipped. + CHECK(bundle.prints.get_edited_preset().config.opt_string("print_settings_id") == "user process"); + CHECK_FALSE(contains_key(pub.skipped_keys, "print_settings_id")); + + // d) Only plate/bed geometry crosses in published mode: filament/purge data and bed type + // stay at the ctor seeds. CHECK(bundle.project_config.opt("filament_colour")->values == seed_filament_colour); - // Purge data does not port either, and update_multi_material_filament_presets() cannot - // resurrect it (flush_multiplier stays at the ctor seed). CHECK(bundle.project_config.opt("flush_multiplier")->values == seed_flush_multiplier); - // The author's bed type does not cross over: the receiver keeps its own. CHECK(bundle.project_config.option("curr_bed_type")->getInt() == seed_bed_type); - // Plate/bed geometry still crosses. CHECK(bundle.project_config.opt("wipe_tower_x")->values == std::vector{ 100. }); - // The published path keeps the user's currently-selected presets: the edited process - // preset is the same preset as before the load. + // e) The published path keeps the user's currently-selected presets: same preset, same size. CHECK(bundle.prints.get_edited_preset().name == pre_load_name); CHECK(bundle.prints.size() == pre_load_size); - // f) Non-published control: with published=false the overlay is disabled. The file's - // presets are loaded and selected instead (the user's preset is not kept) and no - // skipped_keys are produced. + // f) Non-published control: the overlay is disabled, the file's presets are imported + // instead, and no skipped_keys are produced. PresetBundle control_bundle; const size_t control_pre_size = control_bundle.prints.size(); PublishedConfig control_pub; @@ -663,26 +641,22 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the CHECK(control_pub.skipped_keys.empty()); CHECK(control_bundle.prints.size() > control_pre_size); - // The file's layer_height reached the edited preset through the normal preset import, - // not through the published overlay. + // The file's layer_height reached the edited preset via the normal import, not the overlay. CHECK_THAT(control_bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); } -// The published printer overlay is restricted to the publishable retraction/z-hop allowlist -// (publishable_printer_keys). Matching-size retraction vectors apply; mismatched vectors are -// reported as skipped; any other printer-class key (e.g. machine_start_gcode) is -// contract-excluded: never applied and never reported. +// The published printer overlay is restricted to the publishable retraction/z-hop allowlist: +// matching-size vectors apply, mismatched vectors are reported as skipped, and any other +// printer-class key (e.g. machine_start_gcode) is contract-excluded (never applied, never +// reported). TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys onto the edited printer preset", "[Preset][Bundle][Published]") { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); config.opt("filament_colour")->values = { "#FF0000" }; Preset::normalize(config); - // Matching size (the receiver's default printer has one extruder). - config.opt("retraction_length")->values = { 1.4 }; - // Size 2: mismatched against the single-extruder receiver. - config.opt("retraction_speed")->values = { 45., 55. }; - // Printer-class but outside the allowlist: must be silently contract-excluded. - config.opt_string("machine_start_gcode") = "G28 ; from file"; + config.opt("retraction_length")->values = { 1.4 }; // matching size (1 extruder) + config.opt("retraction_speed")->values = { 45., 55. }; // size 2: mismatched + config.opt_string("machine_start_gcode") = "G28 ; from file"; // outside the allowlist PresetBundle bundle; bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; @@ -693,9 +667,8 @@ TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys pub.published_keys = { "retraction_length", "retraction_speed", "machine_start_gcode" }; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // Matching-size retraction vector applied to the edited printer preset. + // Matching-size retraction vector applied; mismatched vector reported as skipped. CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 1.4 }); - // Mismatched vector not applied and reported as skipped. CHECK(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values == std::vector{ 30. }); CHECK(contains_key(pub.skipped_keys, "retraction_speed")); // Contract-excluded printer key: silently ignored, absent from skipped_keys. @@ -703,10 +676,10 @@ TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys CHECK_FALSE(contains_key(pub.skipped_keys, "machine_start_gcode")); } -// A published 3MF can carry material-qualified keys; on load they are applied to the -// receiver's filament presets whose material identity matches the author's (filament_id when -// both sides have one, filament_type + vendor fallback otherwise). -TEST_CASE("Published 3MF applies material retraction keys onto the receiver's matching filament presets", "[Preset][Bundle][Published]") +// A published 3MF carries per-slot material keys; on load they are applied positionally to the +// receiver's slot N (a key-only entry has no type gate), written onto the slot's stored preset +// in place. +TEST_CASE("Published 3MF applies positional material keys onto the receiver's material presets", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -715,7 +688,6 @@ TEST_CASE("Published 3MF applies material retraction keys onto the receiver's ma // Keep the multi-extruder consistency validation happy for a 2-slot config. config.opt("filament_self_index")->values = { 1, 2 }; config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; - // Author per-slot material identity (filament_ids feeds the loader's local copy). config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; config.opt("filament_type")->values = { "PLA", "PETG" }; config.opt("filament_vendor")->values = { "Generic", "Generic" }; @@ -729,13 +701,10 @@ TEST_CASE("Published 3MF applies material retraction keys onto the receiver's ma }; PresetBundle bundle; - // Receiver materials with matching stable ids. Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.filament_id = "GFL99"; pla.config.opt_string("filament_type", 0u) = "PLA"; pla.config.opt_string("filament_vendor", 0u) = "Generic"; - // In-memory preset configs carry the per-filament retraction keys as nullable options - // (the type real filament presets hold), so access them through the nullable type. pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; pla.config.opt("filament_settings_id")->values = { "receiver-pla" }; Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); @@ -743,52 +712,46 @@ TEST_CASE("Published 3MF applies material retraction keys onto the receiver's ma petg.config.opt_string("filament_type", 0u) = "PETG"; petg.config.opt_string("filament_vendor", 0u) = "Generic"; petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // The z-hop key must exist on the receiver preset for the overlay to apply into it. petg.config.opt("filament_z_hop", true)->values = { 0.1 }; bundle.filament_presets = { "My PLA", "My PETG" }; PublishedMaterialEntry pla_entry; - pla_entry.filament_type = "PLA"; - pla_entry.filament_vendor = "Generic"; - pla_entry.filament_id = "GFL99"; - pla_entry.slot = 0; // the author's PLA slot - pla_entry.keys = { "filament_retraction_length", "filament_settings_id" }; + pla_entry.filament_id = "GFL99"; + pla_entry.slot = 0; // the author's PLA slot + pla_entry.keys = { "filament_retraction_length", "filament_settings_id" }; PublishedMaterialEntry petg_entry; - petg_entry.filament_type = "PETG"; - petg_entry.filament_vendor = "Generic"; - petg_entry.filament_id = "GFT99"; - petg_entry.slot = 1; // the author's PETG slot - petg_entry.keys = { "filament_retraction_length", "filament_z_hop" }; - // A material that does not exist on the author's side: whole entry skipped, no reporting. - PublishedMaterialEntry abs_entry; - abs_entry.filament_type = "ABS"; - abs_entry.filament_id = "GFX99"; - abs_entry.keys = { "filament_retraction_length" }; + petg_entry.filament_id = "GFT99"; + petg_entry.slot = 1; // the author's PETG slot + petg_entry.keys = { "filament_retraction_length", "filament_z_hop" }; + // A slot-less entry (no slot field, only possible in hand-crafted files): silently skipped. + PublishedMaterialEntry noslot_entry; + noslot_entry.filament_type = "ABS"; + noslot_entry.keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; - pub.material_keys = { pla_entry, petg_entry, abs_entry }; + pub.material_keys = { pla_entry, petg_entry, noslot_entry }; DynamicPrintConfig config = make_file_config(); Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // Per-slot scalar copy: the author's slot value lands in the matching receiver preset. + // The author's slot values are written onto the receiver's stored presets in place. CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_z_hop")->values == std::vector{ 0.3 }); // Structural keys inside a material entry are silently ignored: the receiver's own - // filament_settings_id is left untouched and nothing is reported for it. + // filament_settings_id is untouched and nothing is reported for it. CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_settings_id")->values == std::vector{ "receiver-pla" }); CHECK_FALSE(contains_key(pub.skipped_keys, "material:GFL99 (filament_settings_id)")); - // Everything applied; the unknown material entry produced no skipped entry. + // Everything applied; the slot-less entry produced no skipped entry. CHECK(pub.skipped_keys.empty()); } -// Filament-publishing v2: a "full publish" slot serializes the entire filament of the slot. On -// load the slot is matched positionally against the published (curated, vendor-agnostic) type: -// a matching receiver type leaves the slot untouched, a mismatched type replaces it with the -// first same-type visible preset (applying the author's full values on top), and a slot whose -// type cannot be found in the receiver's library falls back to the author's values in-memory. +// A "full publish" slot serializes the whole filament. On load the slot is matched positionally +// against the published type: a matching receiver type still receives the author's full values +// (like a normal save/load of the filament), a mismatched type replaces it with the first +// same-type visible preset (applying the author's full values on top), and a type not in the +// receiver's library falls back to the first available visible preset. TEST_CASE("Published 3MF full-published slots replace or ignore the receiver material by type", "[Preset][Bundle][Published]") { auto make_file_config = [] { @@ -815,7 +778,7 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat return entry; }; - SECTION("type match leaves a full-published slot untouched") { + SECTION("type match applies the full dump onto the receiver's material") { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.config.opt_string("filament_type", 0u) = "PLA"; @@ -832,8 +795,9 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The receiver keeps its own material and its own values: the full dump is ignored. - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + // The type matches, but a full publish behaves like a normal save: the author's values + // are written onto the slot's preset wholesale. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); CHECK(pub.skipped_keys.empty()); CHECK(pub.material_replacements.empty()); } @@ -855,47 +819,306 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - CHECK(bundle.filament_presets.size() == 1); + REQUIRE(bundle.filament_presets.size() == 1); + // The slot is re-pointed at the library's ABS preset and the author's full values are + // written onto it in place (the original 0.3 is overwritten); the receiver's own + // material is untouched. CHECK(bundle.filament_presets[0] == "My ABS"); - // The author's slot-0 full values were applied onto the replacement. - CHECK(bundle.filaments.find_preset("My ABS")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); + // The entry carries no identity fields, so the pick cannot be judged as a substitute. + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> My ABS"); } - SECTION("no same-type match creates a temporary project-embedded custom preset") { + SECTION("no same-type match falls back to the first available visible preset") { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.config.opt_string("filament_type", 0u) = "PLA"; pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PLA"); + other.config.opt_string("filament_type", 0u) = "PLA"; + other.config.opt("filament_retraction_length", true)->values = { 0.7 }; bundle.filament_presets = { "My PLA" }; + PublishedMaterialEntry full = make_full_abs_entry(); + // The dump carries the identity too, so the fallback preset must take the author's type + // and vendor. + full.full_keys = { "filament_retraction_length", "filament_type", "filament_vendor" }; + PublishedConfig pub; pub.published = true; - pub.material_keys = { make_full_abs_entry() }; + pub.material_keys = { full }; DynamicPrintConfig config = make_file_config(); + // The author's slot 0 really is ABS. + config.opt("filament_type")->values = { "ABS", "PETG" }; Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // No ABS in the library: a temporary embedded preset is created and selected. - CHECK(bundle.filament_presets[0] == "ABS (Published)"); - Preset *created = bundle.filaments.find_preset("ABS (Published)"); - REQUIRE(created != nullptr); - CHECK(created->is_project_embedded); - CHECK(created->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - // The original user preset remains untouched. Re-fetch by name: load_preset's deque - // insertion relocated the presets, so the pre-load `pla` reference points at the - // newly created "ABS (Published)" slot. + // No ABS in the library: the slot falls back to the first available visible preset (the + // unused "Other PLA") and the author's full values are written onto it, type and vendor + // included. The receiver's own material is untouched. + CHECK(bundle.filament_presets[0] == "Other PLA"); + Preset *fallback = bundle.filaments.find_preset("Other PLA", false, true); + REQUIRE(fallback != nullptr); + CHECK(fallback->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(fallback->config.opt_string("filament_type", 0u) == "ABS"); + CHECK(fallback->config.opt_string("filament_vendor", 0u) == "Generic"); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt_string("filament_type", 0u) == "PLA"); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> Other PLA (substitute: no ABS available)"); } } -// Filament-publishing v2: a partially-published slot can carry a curated type and/or colour. -// The colour is applied regardless of the type match; a type mismatch with no same-type -// replacement keeps the receiver's material and reports the slot's keys as skipped. The -// receiver's slot count grows only as far as the highest slot with published content. +// Regression for the author's published material being skipped by a type-only replacement +// search: the slot must prefer the exact published material (filament_id) over the first other +// same-type preset, even when the exact preset is already referenced by another slot. +TEST_CASE("Published 3MF replaces a mismatched slot with the exact published material when available", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + // The receiver's second slot already uses the exact published material. + Preset &generic_pla = add_inmemory_preset(bundle.filaments, "Generic PLA"); + generic_pla.filament_id = "GFL99"; + generic_pla.config.opt_string("filament_type", 0u) = "PLA"; + generic_pla.config.opt_string("filament_vendor", 0u) = "Generic"; + generic_pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // An unrelated PLA, unreferenced: a type-only search picks it because Generic PLA is + // referenced by slot 1. + Preset &bambu = add_inmemory_preset(bundle.filaments, "Bambu PLA Basic"); + bambu.filament_id = "GFB00"; + bambu.config.opt_string("filament_type", 0u) = "PLA"; + bambu.config.opt_string("filament_vendor", 0u) = "Bambu Lab"; + bambu.config.opt("filament_retraction_length", true)->values = { 0.4 }; + bundle.filament_presets = { "My PETG", "Generic PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "GFL99"; + entry.filament_vendor = "Generic"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The exact published material (id GFL99) wins over the unreferenced type-only preset. + CHECK(bundle.filament_presets[0] == "Generic PLA"); + CHECK(bundle.filament_presets[1] == "Generic PLA"); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // The receiver's own material is untouched; the unrelated PLA too. + CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); + CHECK(bundle.filaments.find_preset("Bambu PLA Basic", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.4 }); + // Accepted mutate tradeoff: the shared exact-material preset was mutated, so slot 1 also + // carries the author's values (the leak is documented, not accidental). + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // An exact-material pick is reported without a substitute qualifier. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA"); + CHECK(pub.skipped_keys.empty()); +} + +// The replacement search prefers the published identity: exact filament_id, then vendor+type, +// then type only (collection order decides equal scores; the pick is reported as a substitute +// when it is not the exact published material). +TEST_CASE("Published 3MF prefers the published material identity when replacing a slot", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "GFL99"; + entry.filament_vendor = "Generic"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + auto add_pla = [](PresetBundle &bundle, const char *name, const char *id, const char *vendor) { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.filament_id = id; + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt_string("filament_vendor", 0u) = vendor; + preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; + return &preset; + }; + auto load = [&](PresetBundle &bundle, PublishedConfig &pub) { + PublishedMaterialEntry entry = make_entry(); + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + }; + + SECTION("exact filament_id beats collection order") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + // "Bambu PLA Basic" sorts before "Zebra PLA"; only the latter carries the published id. + add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); + add_pla(bundle, "Zebra PLA", "GFL99", "Generic"); + bundle.filament_presets = { "My PETG" }; + + PublishedConfig pub; + load(bundle, pub); + CHECK(bundle.filament_presets[0] == "Zebra PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Zebra PLA"); + } + + SECTION("vendor and type beat a type-only preset, reported as a substitute") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); + add_pla(bundle, "Zebra PLA", "ZZZ99", "Generic"); // same vendor+type, different id + bundle.filament_presets = { "My PETG" }; + + PublishedConfig pub; + load(bundle, pub); + CHECK(bundle.filament_presets[0] == "Zebra PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Zebra PLA (substitute: no exact material match)"); + } + + SECTION("type-only candidates keep collection order and are reported as substitutes") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); + add_pla(bundle, "Zebra PLA", "ZZZ99", "Acme"); // no identity match at all + bundle.filament_presets = { "My PETG" }; + + PublishedConfig pub; + load(bundle, pub); + CHECK(bundle.filament_presets[0] == "Bambu PLA Basic"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Bambu PLA Basic (substitute: no exact material match)"); + } +} + +// "Generic PLA" and "Generic PLA Matte" share their inherited filament_id (OGFL99), so the +// exact variant can only be matched via the preset setting_id carried in the published file. +TEST_CASE("Published 3MF matches the exact published variant via setting_id", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "OGFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto add_pla = [](PresetBundle &bundle, const char *name, const char *setting_id) { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.setting_id = setting_id; + preset.filament_id = "OGFL99"; // shared by all Generic PLA variants + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt_string("filament_vendor", 0u) = "Generic"; + preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; + return &preset; + }; + auto load = [&](PresetBundle &bundle, PublishedConfig &pub, const std::string &setting_id) { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "OGFL99"; + entry.filament_vendor = "Generic"; + entry.setting_id = setting_id; + entry.full_keys = { "filament_retraction_length" }; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + }; + + SECTION("the published variant wins over its same-id sibling") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Generic PLA Matte", "RFs9eCKYOMUSmvZf"); + bundle.filament_presets = { "My PETG" }; + + PublishedConfig pub; + load(bundle, pub, "RFs9eCKYOMUSmvZf"); // the author published "Generic PLA Matte" + CHECK(bundle.filament_presets[0] == "Generic PLA Matte"); + CHECK(bundle.filaments.find_preset("Generic PLA Matte", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA Matte"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("without a setting_id the same-id siblings fall back to collection order") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Generic PLA Matte", "RFs9eCKYOMUSmvZf"); + bundle.filament_presets = { "My PETG" }; + + PublishedConfig pub; + load(bundle, pub, ""); // legacy file without the field + CHECK(bundle.filament_presets[0] == "Generic PLA"); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// A partially-published slot can carry a curated type and/or colour. The colour is applied +// regardless of the type match; a type mismatch with no same-type replacement keeps the +// receiver's material and reports the slot's keys as skipped. The receiver's slot count grows +// only as far as the highest slot with published content. TEST_CASE("Published 3MF partial slots apply colour and gate keys by the published type", "[Preset][Bundle][Published]") { auto make_file_config = [] { @@ -934,9 +1157,11 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // Type matched: keys applied, colour applied. - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // Type matched: keys and colour applied onto the receiver's preset in place. + Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(pla_preset != nullptr); + CHECK(pla_preset->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(pub.skipped_keys.empty()); CHECK(pub.material_replacements.empty()); } @@ -964,10 +1189,13 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // Colour still applies (type-independent); the material is kept and the keys skipped. + // The slot keeps the receiver's material: the colour applies in place, the keys are + // skipped. CHECK(bundle.filament_presets[0] == "My PLA"); - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(pla_preset != nullptr); + CHECK(pla_preset->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); CHECK(pub.material_replacements.empty()); } @@ -997,15 +1225,18 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The slot list was grown so author slot 1 has a material, automatically assigning the PETG preset. + // The slot list was grown so author slot 1 has a material (the PETG preset), which + // then receives the author's values in place. REQUIRE(bundle.filament_presets.size() == 2); CHECK(bundle.filament_presets[1] == "My PETG"); + CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); } } -// The receiver's slot list grows only as far as the highest author slot that carries published -// content: a 4-filament file whose author published nothing (or only a low slot) must not pull -// filler materials into the receiver's setup, and the receiver never grows to the file's count. +// The receiver's slot list grows only as far as the highest published slot: a file whose author +// published nothing (or only a low slot) must not pull filler materials into the receiver's +// setup, and the receiver never grows to the file's count. TEST_CASE("Published 3MF grows the receiver's slots only as far as the published slots", "[Preset][Bundle][Published]") { auto make_file_config = [] { @@ -1066,18 +1297,16 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); CHECK(bundle.filament_presets.size() == 1); - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // The published colour lands on the slot's preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); } - // Slot 3 published: the receiver grows to 4 so the published slot exists. The unpublished - // filler slots repeat the receiver's last preset ("Add one filament" behaviour); the - // published slot gets a visible preset not used by another slot (with a single-preset - // library it falls back to the receiver's last preset, aliasing being unavoidable). + // Slot 3 published: the receiver grows to 4 so the published slot exists. Unpublished + // filler slots repeat the receiver's last preset ("Add one filament" behaviour). { PresetBundle bundle; add_pla_preset(bundle); bundle.filament_presets = { "My PLA" }; - const std::string filler = bundle.filaments.first_visible().name; PublishedConfig pub; pub.published = true; @@ -1089,9 +1318,12 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published REQUIRE(bundle.filament_presets.size() == 4); CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "My PLA"); - CHECK(bundle.filament_presets[3] == filler); - // The project-level per-slot vectors were grown and seeded like "Add one filament": - // fillers take their preset's colour, the published slot its published colour. + // Only "My PLA" exists in the library, so the published slot keeps the aliasing and the + // colour is written onto the shared preset (every slot references it). + CHECK(bundle.filament_presets[3] == "My PLA"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // The project-level per-slot vectors were grown and seeded: fillers take their preset's + // colour, the published slot its published colour. CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); CHECK(bundle.project_config.opt("filament_colour")->values[3] == "#ABCDEF"); @@ -1119,11 +1351,9 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published } } -// The published overlay mutates stored filament presets in place per slot, so a slot carrying -// published content must never share its stored preset with another slot: its colour/keys -// would leak into the sibling slot - and, with "repeat the last preset" growth, into the -// receiver's own first slot. Regression for the slot-aliasing hazard. -TEST_CASE("Published 3MF gives grown published slots a distinct preset so values never leak", "[Preset][Bundle][Published]") +// A published slot is seeded from an unused library preset and the values are written onto it +// in place, so the receiver's own material (slot 0) is never overwritten. +TEST_CASE("Published 3MF seeds published slots from unused presets and mutates them in place", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -1137,10 +1367,9 @@ TEST_CASE("Published 3MF gives grown published slots a distinct preset so values return config; }; - // The receiver has one slot of its own material plus one more preset in the library; the - // author publishes only slot 4 (Red). With naive repeat-last growth the new slot would - // reference the receiver's own preset and the published red would recolor it; the grown - // slot must point at a distinct preset. + // Receiver with its own material plus one more library preset; author publishes only slot 4 + // (Red). The grown slot is seeded from the unused library preset, so the published red + // recolors that preset in place and never the receiver's own material. PresetBundle bundle; Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); mine.config.opt_string("filament_type", 0u) = "PLA"; @@ -1165,9 +1394,9 @@ TEST_CASE("Published 3MF gives grown published slots a distinct preset so values // Unpublished filler slots repeat the receiver's last preset ("Add one filament"). CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "My PLA"); - // The published slot references the unused library preset, not the receiver's own... + // The published slot was seeded from the unused library preset; the published colour was + // written onto it in place, never onto the receiver's own material. CHECK(bundle.filament_presets[3] == "Other PLA"); - // ...so the published colour landed there and never recoloured the receiver's material. CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); // The project-level colours are sized and seeded for every grown slot. @@ -1180,9 +1409,9 @@ TEST_CASE("Published 3MF gives grown published slots a distinct preset so values } // The GUI displays the edited preset, a snapshot of the selected collection preset taken at -// selection time. The published overlay modifies the collection presets in place, so the load -// must re-select the first slot's filament (mirroring a normal project load) for the applied -// colour/type/keys - and slot replacements - to surface in the GUI. +// selection time. Since the overlay mutates the collection presets in place, the load must +// re-select the first slot's filament so the applied values - and slot replacements - surface +// in the GUI. TEST_CASE("Published 3MF refreshes the edited preset so the applied material values surface", "[Preset][Bundle][Published]") { auto make_file_config = [] { @@ -1226,8 +1455,11 @@ TEST_CASE("Published 3MF refreshes the edited preset so the applied material val bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); const Preset &edited = bundle.filaments.get_edited_preset(); + // The slot's preset was mutated in place; the edited preset displays the applied values. + CHECK(edited.name == "My PLA"); CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(pub.skipped_keys.empty()); } @@ -1261,203 +1493,15 @@ TEST_CASE("Published 3MF refreshes the edited preset so the applied material val } } -// Material-qualified keys whose receiver-side material match is missing or ambiguous must be -// reported as skipped (material-qualified) and never applied; a single unqualified type -// fallback still applies. -TEST_CASE("Published 3MF reports material keys with no unique receiver match as skipped", "[Preset][Bundle][Published]") -{ - auto make_file_config = [] { - DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); - // Three author slots: PLA, PETG, ABS. - config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; - config.opt("filament_self_index")->values = { 1, 2, 3 }; - config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; - config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF" }; - config.opt("filament_type")->values = { "PLA", "PETG", "ABS" }; - config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; - config.opt("filament_ids")->values = { "GFL99", "GFT99", "GFA99" }; - config.option("filament_retraction_length", true)->values = { 0.9, 1.2, 1.5 }; - return config; - }; - - PresetBundle bundle; - // Two receiver presets of the SAME type with no filament_id: the type fallback is ambiguous. - Preset &pla_a = add_inmemory_preset(bundle.filaments, "My PLA A"); - pla_a.config.opt_string("filament_type", 0u) = "PLA"; - pla_a.config.opt_string("filament_vendor", 0u) = "Generic"; - pla_a.config.opt("filament_retraction_length", true)->values = { 0.5 }; - Preset &pla_b = add_inmemory_preset(bundle.filaments, "My PLA B"); - pla_b.config.opt_string("filament_type", 0u) = "PLA"; - pla_b.config.opt_string("filament_vendor", 0u) = "Generic"; - pla_b.config.opt("filament_retraction_length", true)->values = { 0.5 }; - // A unique PETG receiver preset: the single type fallback is unambiguous. - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt_string("filament_vendor", 0u) = "Generic"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - bundle.filament_presets = { "My PLA A", "My PLA B", "My PETG" }; - - auto make_entry = [](const std::string &type, const std::string &key) { - PublishedMaterialEntry entry; - entry.filament_type = type; - entry.filament_vendor = "Generic"; - entry.keys = { key }; - return entry; - }; - - PublishedMaterialEntry pla_entry = make_entry("PLA", "filament_retraction_length"); - pla_entry.slot = 0; // the author's PLA slot - PublishedMaterialEntry petg_entry = make_entry("PETG", "filament_retraction_length"); - petg_entry.slot = 1; // the author's PETG slot - PublishedMaterialEntry abs_entry = make_entry("ABS", "filament_retraction_length"); // author slot exists, no receiver match - abs_entry.slot = 2; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { pla_entry, petg_entry, abs_entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - // Ambiguous type fallback: neither PLA preset is touched, reported as skipped. - CHECK(bundle.filaments.find_preset("My PLA A")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(bundle.filaments.find_preset("My PLA B")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(contains_key(pub.skipped_keys, "material:PLA (filament_retraction_length)")); - // Unambiguous single fallback: applied. - CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); - CHECK_FALSE(contains_key(pub.skipped_keys, "material:PETG (filament_retraction_length)")); - // Receiver-side miss: the author slot exists but no receiver preset matches. - CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); -} - -// A slotted material entry carries the author's per-slot overrides: on load it applies to the -// receiver's matching preset at the author's slot ordinal (first matching author slot -> first -// matching receiver preset, second -> second, ...). Legacy entries without a slot keep applying -// to every matching receiver preset. -TEST_CASE("Published material keys apply to the receiver's matching filament preset by author slot ordinal", "[Preset][Bundle][Published]") -{ - auto make_file_config = [] { - DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); - // Three author slots of the SAME material (PETG) with distinct per-slot retraction. - config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; - config.opt("filament_self_index")->values = { 1, 2, 3 }; - config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; - config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF" }; - config.opt("filament_type")->values = { "PETG", "PETG", "PETG" }; - config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; - config.opt("filament_ids")->values = { "GFT99", "GFT99", "GFT99" }; - config.option("filament_retraction_length", true)->values = { 0.7, 0.8, 0.9 }; - return config; - }; - auto make_slotted_entry = [](int slot) { - PublishedMaterialEntry entry; - entry.filament_type = "PETG"; - entry.filament_vendor = "Generic"; - entry.filament_id = "GFT99"; - entry.slot = slot; - entry.keys = { "filament_retraction_length" }; - return entry; - }; - auto add_petg_preset = [](PresetBundle &bundle, const std::string &name) { - Preset &preset = add_inmemory_preset(bundle.filaments, name); - preset.filament_id = "GFT99"; - preset.config.opt_string("filament_type", 0u) = "PETG"; - preset.config.opt_string("filament_vendor", 0u) = "Generic"; - preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; - return &preset; - }; - - // Three receiver presets, one per author slot: each gets its ordinal's value. - { - PresetBundle bundle; - add_petg_preset(bundle, "My PETG 1"); - add_petg_preset(bundle, "My PETG 2"); - add_petg_preset(bundle, "My PETG 3"); - bundle.filament_presets = { "My PETG 1", "My PETG 2", "My PETG 3" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { make_slotted_entry(0), make_slotted_entry(1), make_slotted_entry(2) }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - // Each author slot's value lands in the receiver preset at the same ordinal. - CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); - CHECK(bundle.filaments.find_preset("My PETG 2")->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); - CHECK(bundle.filaments.find_preset("My PETG 3")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(pub.skipped_keys.empty()); - } - - // A single receiver preset: only the first ordinal fits; the later slots are reported - // with a slot-qualified label. - { - PresetBundle bundle; - add_petg_preset(bundle, "My PETG 1"); - bundle.filament_presets = { "My PETG 1" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { make_slotted_entry(0), make_slotted_entry(1), make_slotted_entry(2) }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); - CHECK(contains_key(pub.skipped_keys, "material:GFT99 slot 1 (filament_retraction_length)")); - CHECK(contains_key(pub.skipped_keys, "material:GFT99 slot 2 (filament_retraction_length)")); - CHECK_FALSE(contains_key(pub.skipped_keys, "material:GFT99 slot 0 (filament_retraction_length)")); - } - - // A legacy entry (no slot) applies to every matching receiver preset, from the first - // author slot. - { - PresetBundle bundle; - add_petg_preset(bundle, "My PETG 1"); - add_petg_preset(bundle, "My PETG 2"); - bundle.filament_presets = { "My PETG 1", "My PETG 2" }; - - PublishedMaterialEntry legacy = make_slotted_entry(0); - legacy.slot = -1; // legacy: no slot field - PublishedConfig pub; - pub.published = true; - pub.material_keys = { legacy }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); - CHECK(bundle.filaments.find_preset("My PETG 2")->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); - CHECK(pub.skipped_keys.empty()); - } - - // An out-of-range author slot is silently skipped: nothing applied, nothing reported. - { - PresetBundle bundle; - add_petg_preset(bundle, "My PETG 1"); - bundle.filament_presets = { "My PETG 1" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { make_slotted_entry(5) }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filaments.find_preset("My PETG 1")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(pub.skipped_keys.empty()); - } -} - -// The published overlay must validate '#' variant indices: an out-of-range index must be -// reported as skipped and must NOT resize/corrupt the receiver's vector, and a variant suffix -// on a scalar key must be rejected instead of silently no-op'd. +// The published overlay must validate '#' variant indices: an out-of-range index is reported as +// skipped and must NOT resize/corrupt the receiver's vector, and a variant suffix on a scalar +// key is rejected instead of silently no-op'd. TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffixed scalar keys", "[Preset][Bundle][Published]") { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); config.opt("filament_colour")->values = { "#FF0000" }; - // Vector key, size 2 (matches the receiver's resized vector); distinct values so the - // applied element is observable. + // Vector key, size 2 (matches the receiver's resized vector); distinct values make the + // applied element observable. config.opt("wiping_volumes_extruders")->values = { 140., 150. }; config.opt_float("layer_height") = 0.28; Preset::normalize(config); @@ -1482,9 +1526,10 @@ TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffix CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.1, 0.000001)); } -// A receiver filament preset whose material identity fields are missing (hand-edited preset -// file) must not crash the material pass: the entry simply cannot match and is reported skipped. -TEST_CASE("Published 3MF survives a receiver filament preset missing its material identity", "[Preset][Bundle][Published]") +// A receiver filament preset missing its material identity (hand-edited file) must not crash +// the type gate: the gate reads it as a type mismatch, and the slot falls back to the +// "no replacement" path (keys skipped, colour still applied to the slot's preset). +TEST_CASE("Published 3MF survives a receiver preset missing its material identity", "[Preset][Bundle][Published]") { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); config.opt("filament_diameter")->values = { 1.75 }; @@ -1502,28 +1547,40 @@ TEST_CASE("Published 3MF survives a receiver filament preset missing its materia // Malformed receiver preset: the identity options are missing entirely. pla.config.erase("filament_type"); pla.config.erase("filament_vendor"); + pla.config.opt("filament_colour", true)->values = { "#123456" }; pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; bundle.filament_presets = { "My PLA" }; PublishedMaterialEntry entry; - entry.filament_type = "PLA"; - entry.filament_vendor = "Generic"; - entry.filament_id = "GFL99"; - entry.slot = 0; - entry.keys = { "filament_retraction_length" }; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFL99"; + entry.slot = 0; + entry.publish_type = true; // exercises the type gate against the missing identity + // Require ABS: the receiver library (PLA-typed default preset, typeless slot preset) has no + // ABS candidate, so the gate falls into the "no replacement" path (a PLA requirement would + // legitimately replace the slot with the visible PLA default). + entry.publish_type_value = "ABS"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; pub.material_keys = { entry }; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // No match possible without the identity fields: reported skipped, preset untouched. + // The gate reads the missing identity as a type mismatch; no same-type replacement exists, + // so the keys are skipped while the colour applies to the slot's preset in place. No crash. CHECK(contains_key(pub.skipped_keys, "material:GFL99 (filament_retraction_length)")); - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filament_presets[0] == "My PLA"); + Preset *mine_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(mine_preset != nullptr); + CHECK(mine_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); } -// The printer publishable allowlist is the union of the printer tab's "Retraction" and -// "Z-Hop" optgroup option lists; lock the exact contents and order (Tab.cpp). +// Lock the exact contents and order of the printer allowlist (the union of the tab's +// "Retraction" and "Z-Hop" optgroup lists, Tab.cpp). TEST_CASE("Printer publishable allowlist matches the printer tab's Retraction and Z-Hop optgroups", "[Preset][Bundle][Published]") { auto keys_of = [](const std::vector& opts) { @@ -1552,3 +1609,166 @@ TEST_CASE("Printer publishable allowlist matches the printer tab's Retraction an CHECK(publishable_printer_keys() == expected_union); } +// Loading the same published file twice must not compound values on the receiver's presets: +// each load re-applies the same absolute values, so the result is idempotent. +TEST_CASE("Published 3MF reloading does not compound values on the receiver's presets", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + auto load = [&] { + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + }; + load(); + // First load: the receiver's preset carries the published values (mutated in place). + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + load(); + // Each load re-applies the same values onto the (already mutated) preset: no accumulation. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); +} + +// A receiver with several slots aliasing the same preset (multi-extruder profile with one +// filament) and an author publishing keys on several slots: each published slot is re-pointed +// at its own distinct preset so values never leak between slots. +TEST_CASE("Published 3MF gives each published slot its own preset on an aliased receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.6, 0.9, 1.2, 1.5 }; + return config; + }; + auto make_key_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + // A 4-extruder receiver with a single filament preset: the slots alias [A, A, A, A] before + // the published pass. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // Spare library presets for the re-pointing to fall back on. + for (const char *name : { "Extra PLA A", "Extra PLA B", "Extra PLA C" }) { + Preset &extra = add_inmemory_preset(bundle.filaments, name); + extra.config.opt_string("filament_type", 0u) = "PLA"; + extra.config.opt("filament_retraction_length", true)->values = { 0.5 }; + } + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_key_entry(0), make_key_entry(1), make_key_entry(2), make_key_entry(3) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + // Every published slot references its own distinct preset: slot 0 keeps the receiver's + // material, slots 1-3 are re-pointed at the spare library presets. + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[2] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[2] != bundle.filament_presets[1]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[1]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[2]); + // Each slot's stored preset carries its own slot's retraction (mutated in place). + const std::vector expected = { 0.6, 0.9, 1.2, 1.5 }; + for (size_t slot = 0; slot < 4; ++slot) { + Preset *preset = bundle.filaments.find_preset(bundle.filament_presets[slot], false, true); + REQUIRE(preset != nullptr); + CHECK(preset->config.opt("filament_retraction_length")->values == std::vector{ expected[slot] }); + } + CHECK(pub.skipped_keys.empty()); +} + +// Printer retraction keys are published per-extruder ("#N"): a receiver with a different +// extruder count still receives the in-range elements; out-of-range variants are reported as +// skipped instead of corrupting the receiver's vector. +TEST_CASE("Published 3MF applies per-extruder printer keys across extruder-count mismatches", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Author has 4 extruders. + config.opt("retraction_length")->values = { 0.6, 0.9, 1.2, 1.5 }; + Preset::normalize(config); + return config; + }; + + // Receiver with a single extruder: only "#0" is in range; "#1..#3" are skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1", "retraction_length#2", "retraction_length#3" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 0.6 }); + CHECK(contains_key(pub.skipped_keys, "retraction_length#1")); + CHECK(contains_key(pub.skipped_keys, "retraction_length#2")); + CHECK(contains_key(pub.skipped_keys, "retraction_length#3")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_length#0")); + } + + // Receiver with four extruders and a 1-extruder author: only "#0" is published; the + // receiver's other extruders keep their own values. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8, 0.8, 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0" }; + DynamicPrintConfig config = make_file_config(); + // The author's file carries a single-extruder value. + config.opt("retraction_length")->values = { 0.7 }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 0.7, 0.8, 0.8, 0.8 }); + CHECK(pub.skipped_keys.empty()); + } +} + From aeaa3c5d66c78bfc3c9d3ca956cabea453383626 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 19 Aug 2026 16:57:45 +0800 Subject: [PATCH 031/208] Bug fix for perfect name matching --- src/libslic3r/PresetBundle.cpp | 38 +++- src/libslic3r/PublishSettings.hpp | 4 + src/slic3r/GUI/Plater.cpp | 4 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 9 +- tests/libslic3r/test_3mf.cpp | 4 +- .../libslic3r/test_preset_bundle_loading.cpp | 199 ++++++++++++++++++ 6 files changed, 242 insertions(+), 16 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 7a90036fe2..bc6df4c3a9 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4894,11 +4894,19 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // Mirror first_visible_idx()'s start index so suppressed default presets are // never picked as a slot material. const size_t first_candidate = this->filaments.is_default_suppressed() ? this->filaments.num_default_presets() : 0; - // Candidate preference for a published entry: exact setting_id (variant-level, - // since "Generic PLA" and "Generic PLA Matte" share filament_id), then exact - // filament_id, then vendor+type, then type only (a type-only pick may surface an - // unrelated preset, e.g. a different vendor's PLA). + // Candidate preference for a published entry: exact preset name (unambiguous + // even when ids are shared between variants or missing from older files), then + // exact setting_id (variant-level, since "Generic PLA" and "Generic PLA Matte" + // share filament_id), then exact filament_id, then vendor+type, then type only + // (a type-only pick may surface an unrelated preset, e.g. a different vendor's + // PLA). auto candidate_score = [](const Preset &candidate, const PublishedMaterialEntry &entry) -> int { + if (!entry.preset_name.empty()) { + const std::string bare_name = entry.preset_name.substr(0, entry.preset_name.find('@')); + if (candidate.name == entry.preset_name || candidate.alias == entry.preset_name || + candidate.name == bare_name || candidate.alias == bare_name) + return 4; + } if (!entry.setting_id.empty() && candidate.setting_id == entry.setting_id) return 3; const ConfigOptionStrings *types = candidate.config.opt("filament_type"); @@ -4926,10 +4934,13 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool int best_score = -1; for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) - continue; const int score = candidate_score(candidate, entry); if (score > best_score) { + // Exact identity tiers (name / setting_id) win even when the + // preset is hidden or already referenced by another slot; the + // alias re-pointing pass below still de-aliases afterwards. + if (score < 3 && (!candidate.is_visible || used_preset_names.count(candidate.name) != 0)) + continue; best_score = score; initial_preset = candidate.name; } @@ -4979,9 +4990,13 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool continue; for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible || referenced_elsewhere(candidate.name, size_t(-1))) - continue; const int score = candidate_score(candidate, entry); + // Exact identity tiers (name / setting_id) may use a hidden preset; + // the referenced check stays: re-pointing exists to de-alias. + if (score < 3 && !candidate.is_visible) + continue; + if (referenced_elsewhere(candidate.name, size_t(-1))) + continue; if (score > best_score) { best_score = score; replacement = candidate.name; @@ -5106,11 +5121,14 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool std::string best_name; for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible) - continue; const int score = candidate_score(candidate, entry); if (score <= best_score) continue; + // Lower tiers (vendor+type, type only) need a visible preset; + // an exact identity match (name / setting_id) wins even when + // the preset is hidden in the library. + if (score < 3 && !candidate.is_visible) + continue; if (unreferenced_only) { bool used = false; for (size_t s = 0; s < this->filament_presets.size(); ++s) diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index ecb51523f5..0dc579c2a9 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -40,6 +40,10 @@ struct PublishedMaterialEntry { // used on load to match the exact published variant, which filament_id alone cannot // distinguish ("Generic PLA" and "Generic PLA Matte" share their inherited id). std::string setting_id; + // Canonical name of the author's slot preset (e.g. "Generic PLA @System"). The receiver + // prefers an exact name/alias match over id matching: ids can be shared across variants + // or missing from older files, the name is what the author actually selected. + std::string preset_name; // 0-based author filament slot; -1 (hand-crafted files) is skipped. int slot{-1}; std::vector keys; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index be56cc1f66..50d613de33 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -7252,6 +7252,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ entry.filament_id = mat["filament_id"].get(); if (mat.contains("setting_id") && mat["setting_id"].is_string()) entry.setting_id = mat["setting_id"].get(); + if (mat.contains("name") && mat["name"].is_string()) + entry.preset_name = mat["name"].get(); } if (m.contains("slot") && m["slot"].is_number_integer()) entry.slot = m["slot"].get(); @@ -16251,7 +16253,7 @@ int Plater::export_published_3mf(const std::vector& published_keys, j.push_back(key); nlohmann::json jm = nlohmann::json::array(); for (const Slic3r::PublishedMaterialEntry& e : material_keys) - jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}, {"setting_id", e.setting_id}}}, {"slot", e.slot}, {"keys", e.keys}, + jm.push_back({ {"material", {{"filament_type", e.filament_type}, {"filament_vendor", e.filament_vendor}, {"filament_id", e.filament_id}, {"setting_id", e.setting_id}, {"name", e.preset_name}}}, {"slot", e.slot}, {"keys", e.keys}, {"full", e.full}, {"full_keys", e.full_keys}, {"publish_type", e.publish_type}, {"type", e.publish_type_value}, {"publish_color", e.publish_color}, {"color", e.color} }); diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index f62d7af3a4..881560f93c 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -924,11 +924,14 @@ std::vector PublishSettingsDialog::GetPublishedM entry.filament_id = cat.filament_id; entry.slot = static_cast(cat.filament_slot); // The author's preset id distinguishes exact variants that share filament_id - // ("Generic PLA" vs "Generic PLA Matte"), so the receiver can match precisely. + // ("Generic PLA" vs "Generic PLA Matte"), so the receiver can match precisely; the + // preset name is the most direct identity and is matched first on load. PresetBundle *bundle = wxGetApp().preset_bundle; if (bundle != nullptr && cat.filament_slot < bundle->filament_presets.size()) { - if (const Preset *preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) - entry.setting_id = preset->setting_id; + if (const Preset *preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) { + entry.setting_id = preset->setting_id; + entry.preset_name = preset->name; + } } // "Full Publish": the whole filament preset is embedded; type and colour are implicitly // published, and the per-key rows are disabled / their state ignored. diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 34ff31183f..818c354628 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -684,7 +684,7 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded const std::vector published_keys = { "layer_height", "retraction_length" }; const std::vector material_keys = { - { "PLA", "Generic", "GFL99", "", 0, { "filament_retraction_length" } } + { "PLA", "Generic", "GFL99", "", "Generic PLA", 0, { "filament_retraction_length" } } }; DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); @@ -792,7 +792,7 @@ SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { model.add_default_instances(); const std::string material_keys_json = - R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99","setting_id":"RFs9eCKYOMUSmvZf"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99","setting_id":"RFs9eCKYOMUSmvZf","name":"Generic PLA Matte @System"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; model.model_info = std::make_shared(); model.model_info->metadata_items["published_material_keys"] = material_keys_json; diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 3a9ff77be9..11162922fc 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -942,6 +942,205 @@ TEST_CASE("Published 3MF replaces a mismatched slot with the exact published mat CHECK(pub.skipped_keys.empty()); } +// The author's preset name travels in the file, so a type mismatch resolves to the exact +// published material even when the identity fields are absent or stale (older files): a +// "Generic PLA" author must land on the receiver's "Generic PLA", never on a same-type +// substitute like "Bambu PLA Basic". +TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by name", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "OGFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + + auto add_pla = [](PresetBundle &bundle, const char *name, const char *id, const char *vendor, const char *setting_id) { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.filament_id = id; + preset.setting_id = setting_id; + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt_string("filament_vendor", 0u) = vendor; + preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; + return &preset; + }; + + SECTION("full identity (name, setting_id, filament_id): the name match wins") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "OGFL99"; + entry.filament_vendor = "Generic"; + entry.setting_id = "RcBNzytWgwRrwXXz"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA @System"); + CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("only the name is present (broken/stale ids): still the exact preset") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA @System"); + CHECK(bundle.filaments.find_preset("Bambu PLA Basic @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("the exact preset is hidden in the library: the exact match still wins") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &generic_pla = *add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + generic_pla.is_visible = false; + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA @System"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("grown slot (author slot 1) is seeded with the exact preset by name") { + auto two_slot_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "OGFL99", "OGFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 0.8 }; + return config; + }; + + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = two_slot_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "My PETG"); + CHECK(bundle.filament_presets[1] == "Generic PLA @System"); + // The full dump applies the author's slot-1 value onto the grown slot's preset. + CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("no exact preset in the library: falls back to the substitute") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.filament_id = "OGFL99"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Bambu PLA Basic @System"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Bambu PLA Basic @System (substitute: no exact material match)"); + } +} + // The replacement search prefers the published identity: exact filament_id, then vendor+type, // then type only (collection order decides equal scores; the pick is reported as a substitute // when it is not the exact published material). From aa3ce35683c2fdddc55df3d5db80f0def3a42122 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 21 Aug 2026 13:00:32 +0800 Subject: [PATCH 032/208] Published 3MF: silent geometry-only fallback in old versions via tag/config-less export --- src/libslic3r/Format/bbs_3mf.cpp | 48 ++++++-- src/slic3r/GUI/Plater.cpp | 205 ++++++++++++++++++------------- tests/libslic3r/test_3mf.cpp | 51 ++++++-- 3 files changed, 202 insertions(+), 102 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index a5d20807b7..06cc89de99 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -1214,6 +1214,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // add backup & restore logic bool _load_model_from_file(std::string filename, Model& model, PlateDataPtrs& plate_data_list, std::vector& project_presets, DynamicPrintConfig& config, ConfigSubstitutionContext& config_substitutions, Import3mfProgressFn proFn = nullptr, BBLProject* project = nullptr, int plate_id = 0); + + // A minimal published 3MF carries no slicer tags (any tag would make old receivers show + // a baked-in, wrong "old version" popup on their geometry-only fallback), so it + // classifies as From_Other. It is still a fully structured OrcaSlicer file though: + // identified by its own metadata, it keeps BBS-grade geometry handling (no instance + // splitting, no transform baking, no renaming) in this build. Old receivers without the + // publish feature don't know the metadata and take their third-party geometry path. + // Reads the parse-time metadata: the model XML carries it before its resources, while + // m_model->model_info is only filled in after the whole XML has been parsed. + bool _is_published_3mf() const { + return this->model_info.metadata_items.find("published") != this->model_info.metadata_items.end(); + } + bool _is_svg_shape_file(const std::string &filename) const; bool _extract_from_archive(mz_zip_archive& archive, std::string const & path, std::function, bool restore = false); bool _extract_xml_from_archive(mz_zip_archive& archive, std::string const & path, XML_StartElementHandler start_handler, XML_EndElementHandler end_handler); @@ -2037,7 +2050,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) lock.close(); - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is more than one instance, // split the object in as many objects as instances BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", found 3mf from other vendor, split as instance"); @@ -3591,7 +3604,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_index_paths.insert({ object.first.second, object.first.first}); } - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is only one object, // set the object name to match the filename if (m_model->objects.size() == 1) @@ -5297,7 +5310,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) TriangleMesh triangle_mesh(std::move(its), volume_data.mesh_stats); - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is only one instance, // bake the transformation into the geometry to allow the reload from disk command // to work properly @@ -5943,7 +5956,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool m_save_gcode { false }; // whether to save gcode for normal save bool m_skip_model { false }; // skip model when exporting .gcode.3mf bool m_skip_auxiliary { false }; // skip normal axuiliary files - bool m_minimal_published { false }; // published 3MF: omit embedded preset files + bool m_minimal_published { false }; // published 3MF: omit the project config, the embedded preset files and the slicer tags bool m_use_loaded_id { false }; // whether to use loaded id for identify_id bool m_share_mesh { false }; // whether to share mesh between objects std::string m_thumbnail_middle = PRINTER_THUMBNAIL_MIDDLE_FILE; @@ -6453,7 +6466,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Adds slic3r print config file ("Metadata/Slic3r_PE.config"). // This file contains the content of FullPrintConfig / SLAFullPrintConfig. - if (config != nullptr) { + // Omitted for minimal published 3MF: OrcaSlicer versions without the publish feature + // then fall back to importing the geometry only, and new versions read the published + // payload from the model metadata instead. + if (config != nullptr && !m_minimal_published) { // BBS: change to json format // if (!_add_print_config_file_to_archive(archive, *config)) { if (!_add_project_config_file_to_archive(archive, *config, model)) { return false; } @@ -6939,8 +6955,13 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Orca: PRIVACY: do not store creation & modification date in 3mf metadata_item_map[BBL_CREATION_DATE_TAG] = ""; metadata_item_map[BBL_MODIFICATION_TAG] = ""; - // Orca: Write the BambuStudio compatibility version string using SLIC3R_VERSION - metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + // Orca: Write the BambuStudio compatibility version string using SLIC3R_VERSION. + // A minimal published 3MF writes no slicer tags at all: any tag would route old + // receivers onto a geometry-only fallback whose baked-in popup misreports the + // file ("old OrcaSlicer version" / "BambuStudio"), while tag-less files classify + // as From_Other and import the geometry silently. + if (!m_minimal_published) + metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); } metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); @@ -6966,8 +6987,17 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " name=\"" << item.first << "\">" << xml_escape(item.second) << "\n"; if (item.first == BBL_APPLICATION_TAG) { - stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" - << xml_escape(SoftFever_VERSION) << "\n"; + // The OrcaSlicer tag is the version receivers compare against their own to + // pick the import branch, and every graceful config-less branch of an + // Orca-classified file shows a baked-in "old OrcaSlicer version" popup. A + // minimal published 3MF omits the tag (together with the Application tag + // above): old receivers then classify it From_Other and import the geometry + // silently, while this build rebuilds the config from the published metadata + // payload before the branch runs. + if (!m_minimal_published) { + stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" + << xml_escape(SoftFever_VERSION) << "\n"; + } } } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 50d613de33..908e4dc222 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6881,6 +6881,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ DynamicPrintConfig config; Semver file_version; En3mfType en_3mf_file_type = En3mfType::From_BBS; + // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; + // on load keep the user's current presets and overlay only those keys. Declared + // here (outside the config block below) so it stays alive for the embedded-preset + // gate, the metadata strip and the preset overlay after the block closes. + PublishedConfig published_config; { DynamicPrintConfig config_loaded; @@ -6908,6 +6913,102 @@ std::vector Plater::priv::load_files(const std::vector& input_ << boost::format(", plate_data.size %1%, project_preset.size %2%, is_bbs_or_orca_3mf %3%, file_version %4% \n") % plate_data.size() % project_presets.size() % (en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) % file_version.to_string(); + // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; + // on load keep the user's current presets and overlay only those keys. Parsed + // here (before the version/fallback chain below) because a published file has + // no project_settings.config: its values travel in the published_config + // metadata payload, which must fill config_loaded before the chain decides + // whether to import geometry only. + if (model.model_info != nullptr) { + auto published_it = model.model_info->metadata_items.find("published"); + if (published_it != model.model_info->metadata_items.end() && + (published_it->second == "true" || published_it->second == "1")) { + published_config.published = true; + auto keys_it = model.model_info->metadata_items.find("published_keys"); + if (keys_it != model.model_info->metadata_items.end()) { + try { + auto j = nlohmann::json::parse(keys_it->second); + if (j.is_array()) + for (const auto &k : j) + if (k.is_string()) + published_config.published_keys.emplace_back(k.get()); + } catch (...) { + // Ignore malformed published_keys; the project still loads normally. + } + } + + auto material_keys_it = model.model_info->metadata_items.find("published_material_keys"); + if (material_keys_it != model.model_info->metadata_items.end()) { + try { + auto jm = nlohmann::json::parse(material_keys_it->second); + if (jm.is_array()) + for (const auto &m : jm) { + // Malformed entries are skipped individually. + if (!m.is_object()) + continue; + PublishedMaterialEntry entry; + const auto mat_it = m.find("material"); + if (mat_it != m.end() && mat_it->is_object()) { + const auto &mat = *mat_it; + if (mat.contains("filament_type") && mat["filament_type"].is_string()) + entry.filament_type = mat["filament_type"].get(); + if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) + entry.filament_vendor = mat["filament_vendor"].get(); + if (mat.contains("filament_id") && mat["filament_id"].is_string()) + entry.filament_id = mat["filament_id"].get(); + if (mat.contains("setting_id") && mat["setting_id"].is_string()) + entry.setting_id = mat["setting_id"].get(); + if (mat.contains("name") && mat["name"].is_string()) + entry.preset_name = mat["name"].get(); + } + if (m.contains("slot") && m["slot"].is_number_integer()) + entry.slot = m["slot"].get(); + const auto entry_keys_it = m.find("keys"); + if (entry_keys_it != m.end() && entry_keys_it->is_array()) + for (const auto &k : *entry_keys_it) + if (k.is_string()) + entry.keys.emplace_back(k.get()); + // Fields always written by the current exporter. + if (m.contains("full") && m["full"].is_boolean()) + entry.full = m["full"].get(); + const auto entry_full_keys_it = m.find("full_keys"); + if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) + for (const auto &k : *entry_full_keys_it) + if (k.is_string()) + entry.full_keys.emplace_back(k.get()); + if (m.contains("publish_type") && m["publish_type"].is_boolean()) + entry.publish_type = m["publish_type"].get(); + if (m.contains("type") && m["type"].is_string()) + entry.publish_type_value = m["type"].get(); + if (m.contains("publish_color") && m["publish_color"].is_boolean()) + entry.publish_color = m["publish_color"].get(); + if (m.contains("color") && m["color"].is_string()) + entry.color = m["color"].get(); + published_config.material_keys.emplace_back(std::move(entry)); + } + } catch (...) { + // Ignore malformed published_material_keys; the project still loads normally. + } + } + + // Rebuild the published values from the metadata payload: a published + // file carries no project_settings.config, so config_loaded is filled + // from here; a missing or malformed payload leaves it empty and the + // fallback chain below imports the geometry only. + auto payload_it = model.model_info->metadata_items.find("published_config"); + if (payload_it != model.model_info->metadata_items.end()) { + try { + ConfigSubstitutions payload_substitutions = config_loaded.load_from_ini_string(payload_it->second, ForwardCompatibilitySubstitutionRule::Enable); + config_substitutions.substitutions.insert(config_substitutions.substitutions.end(), + std::make_move_iterator(payload_substitutions.begin()), + std::make_move_iterator(payload_substitutions.end())); + } catch (...) { + // Ignore malformed published_config; the project still loads normally. + } + } + } + } + // 1. add extruder for prusa model if the number of existing extruders is not enough // 2. add extruder for BBS or Other model if only import geometry if (en_3mf_file_type == En3mfType::From_Prusa || (load_model && !load_config)) { @@ -7071,7 +7172,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ text += "\n"; log_and_show_3mf_info(text, bambu_project_title); } - } else if (load_config) { + } else if (load_config && !published_config.published) { // BambuStudio version is older or same as our SLIC3R_VERSION wxString text = _L("The 3MF was created by BambuStudio. Some settings may differ from OrcaSlicer."); log_and_show_3mf_info(text, bambu_project_title); @@ -7153,8 +7254,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - // BBS:: project embedded presets - if ((project_presets.size() > 0) && load_config) { + // BBS:: project embedded presets (skipped for published projects: the author's + // embedded presets must not pollute the receiver's library, the overlay applies + // the published keys to the receiver's own presets instead). + if ((project_presets.size() > 0) && load_config && !published_config.published) { // load project embedded presets PresetsConfigSubstitutions preset_substitutions; PresetBundle & preset_bundle = *wxGetApp().preset_bundle; @@ -7210,83 +7313,6 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; - // on load keep the user's current presets and overlay only those keys. - PublishedConfig published_config; - if (model.model_info != nullptr) { - auto published_it = model.model_info->metadata_items.find("published"); - if (published_it != model.model_info->metadata_items.end() && - (published_it->second == "true" || published_it->second == "1")) { - published_config.published = true; - auto keys_it = model.model_info->metadata_items.find("published_keys"); - if (keys_it != model.model_info->metadata_items.end()) { - try { - auto j = nlohmann::json::parse(keys_it->second); - if (j.is_array()) - for (const auto &k : j) - if (k.is_string()) - published_config.published_keys.emplace_back(k.get()); - } catch (...) { - // Ignore malformed published_keys; the project still loads normally. - } - } - - auto material_keys_it = model.model_info->metadata_items.find("published_material_keys"); - if (material_keys_it != model.model_info->metadata_items.end()) { - try { - auto jm = nlohmann::json::parse(material_keys_it->second); - if (jm.is_array()) - for (const auto &m : jm) { - // Malformed entries are skipped individually. - if (!m.is_object()) - continue; - PublishedMaterialEntry entry; - const auto mat_it = m.find("material"); - if (mat_it != m.end() && mat_it->is_object()) { - const auto &mat = *mat_it; - if (mat.contains("filament_type") && mat["filament_type"].is_string()) - entry.filament_type = mat["filament_type"].get(); - if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) - entry.filament_vendor = mat["filament_vendor"].get(); - if (mat.contains("filament_id") && mat["filament_id"].is_string()) - entry.filament_id = mat["filament_id"].get(); - if (mat.contains("setting_id") && mat["setting_id"].is_string()) - entry.setting_id = mat["setting_id"].get(); - if (mat.contains("name") && mat["name"].is_string()) - entry.preset_name = mat["name"].get(); - } - if (m.contains("slot") && m["slot"].is_number_integer()) - entry.slot = m["slot"].get(); - const auto entry_keys_it = m.find("keys"); - if (entry_keys_it != m.end() && entry_keys_it->is_array()) - for (const auto &k : *entry_keys_it) - if (k.is_string()) - entry.keys.emplace_back(k.get()); - // Fields always written by the current exporter. - if (m.contains("full") && m["full"].is_boolean()) - entry.full = m["full"].get(); - const auto entry_full_keys_it = m.find("full_keys"); - if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) - for (const auto &k : *entry_full_keys_it) - if (k.is_string()) - entry.full_keys.emplace_back(k.get()); - if (m.contains("publish_type") && m["publish_type"].is_boolean()) - entry.publish_type = m["publish_type"].get(); - if (m.contains("type") && m["type"].is_string()) - entry.publish_type_value = m["type"].get(); - if (m.contains("publish_color") && m["publish_color"].is_boolean()) - entry.publish_color = m["publish_color"].get(); - if (m.contains("color") && m["color"].is_string()) - entry.color = m["color"].get(); - published_config.material_keys.emplace_back(std::move(entry)); - } - } catch (...) { - // Ignore malformed published_material_keys; the project still loads normally. - } - } - } - } - // BBS: a "published" 3MF loads as a new project: its path must not become the // project filename (Save/Ctrl-S would overwrite the shared file), and the // published metadata is consumed above and stripped so a later save is a normal @@ -7297,6 +7323,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ this->model.model_info->metadata_items.erase("published"); this->model.model_info->metadata_items.erase("published_keys"); this->model.model_info->metadata_items.erase("published_material_keys"); + this->model.model_info->metadata_items.erase("published_config"); } if (load_config) { @@ -16265,9 +16292,11 @@ int Plater::export_published_3mf(const std::vector& published_keys, const bool had_published = had_model_info && (model.model_info->metadata_items.find("published") != model.model_info->metadata_items.end()); const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find("published_keys") != model.model_info->metadata_items.end()); const bool had_material_keys = had_model_info && (model.model_info->metadata_items.find("published_material_keys") != model.model_info->metadata_items.end()); + const bool had_payload = had_model_info && (model.model_info->metadata_items.find("published_config") != model.model_info->metadata_items.end()); const std::string prev_published = had_published ? model.model_info->metadata_items.at("published") : std::string(); const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at("published_keys") : std::string(); const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at("published_material_keys") : std::string(); + const std::string prev_payload = had_payload ? model.model_info->metadata_items.at("published_config") : std::string(); if (model.model_info == nullptr) model.model_info = std::make_shared(); model.model_info->metadata_items["published"] = "1"; @@ -16275,9 +16304,17 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info->metadata_items["published_material_keys"] = jm.dump(); // Minimal published export: filter full_config to the published keys, material keys, - // identity fields and plate geometry keys, and omit project-embedded preset dumps. + // identity fields and plate geometry keys, and omit the project config file, the + // project-embedded preset dumps and the OrcaSlicer version tag from the archive. The + // filtered values are serialized into the published_config metadata payload instead, so + // OrcaSlicer versions without the publish feature fall back to importing the geometry only + // (keeping the receiver's presets) while new versions rebuild the config from the payload. DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + std::string payload; + for (const std::string &key : filtered_cfg.keys()) + payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; + model.model_info->metadata_items["published_config"] = std::move(payload); // Same file layout as save_project(), plus Silence (so export_3mf does not set the project // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. @@ -16286,7 +16323,7 @@ int Plater::export_published_3mf(const std::vector& published_keys, if (full_pathnames) save_strategy = save_strategy | SaveStrategy::FullPathSources; - const int ret = export_3mf(into_path(path), save_strategy, -1, nullptr, &filtered_cfg); + const int ret = export_3mf(into_path(path), save_strategy, -1, nullptr); // Restore the previous metadata state (both on success and on failure). if (!had_model_info) { @@ -16304,6 +16341,10 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info->metadata_items["published_material_keys"] = prev_material_keys; else model.model_info->metadata_items.erase("published_material_keys"); + if (had_payload) + model.model_info->metadata_items["published_config"] = prev_payload; + else + model.model_info->metadata_items.erase("published_config"); } if (ret < 0) { diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 5fdad8b7ce..6a20613a79 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -671,12 +671,15 @@ SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf } } -SCENARIO("Minimal published 3MF serialization filters config and omits embedded presets", "[3mf]") { - GIVEN("a full print configuration and published keys") { +SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer tags", "[3mf]") { + GIVEN("a multi-instance model carrying published metadata and a published_config payload") { Model model; std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; REQUIRE(load_stl(src_file.c_str(), &model)); model.add_default_instances(); + // A second instance: tag-less third-party files get their multi-instance objects split, + // published files must not (the loader recognizes them by their metadata). + model.objects.front()->add_instance(); DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); full_cfg.set_key_value("layer_height", new ConfigOptionFloat(0.24)); @@ -687,27 +690,30 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded { "PLA", "Generic", "GFL99", "", "Generic PLA", 0, { "filament_retraction_length" } } }; + // The payload builder keeps the published and identity keys and drops everything else. DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); - - // Filtered config keeps the published and identity keys... REQUIRE(filtered_cfg.option("layer_height") != nullptr); REQUIRE(filtered_cfg.option("retraction_length") != nullptr); REQUIRE(filtered_cfg.option("filament_colour") != nullptr); REQUIRE(filtered_cfg.option("filament_type") != nullptr); REQUIRE(filtered_cfg.option("wipe_tower_x") != nullptr); - - // ...and drops everything else. REQUIRE(filtered_cfg.option("sparse_infill_density") == nullptr); REQUIRE(filtered_cfg.option("machine_start_gcode") == nullptr); + // Serialize the payload exactly like export_published_3mf does. + std::string payload; + for (const std::string &key : filtered_cfg.keys()) + payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; + model.model_info = std::make_shared(); model.model_info->metadata_items["published"] = "1"; model.model_info->metadata_items["published_keys"] = R"(["layer_height","retraction_length"])"; + model.model_info->metadata_items["published_config"] = payload; ScopedTemporaryDir backup_dir("orca_min_pub"); model.set_backup_path(backup_dir.string()); - WHEN("stored using SaveStrategy::MinimalPublished") { + WHEN("stored using SaveStrategy::MinimalPublished and reloaded") { ScopedTemporaryFile temp(".3mf"); const std::string test_file = temp.string(); @@ -736,12 +742,35 @@ SCENARIO("Minimal published 3MF serialization filters config and omits embedded bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, &loaded_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, LoadStrategy::LoadModel | LoadStrategy::LoadConfig); - THEN("the 3MF loads successfully without project embedded presets") { + THEN("the 3MF loads without project config or embedded presets") { REQUIRE(loaded); + REQUIRE(dst_config.empty()); REQUIRE(loaded_presets.empty()); - REQUIRE(dst_config.option("layer_height") != nullptr); - REQUIRE_THAT(dst_config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.24, 1e-6)); - REQUIRE(dst_config.option("sparse_infill_density") == nullptr); + } + THEN("the file carries no slicer tags and classifies as a generic 3MF") { + REQUIRE_FALSE(is_bbl_3mf); + REQUIRE_FALSE(is_orca_3mf); + // No Application / OrcaSlicer tag: old receivers import the geometry silently + // instead of showing a baked-in, wrong "old version" popup. + REQUIRE_FALSE(file_version.valid()); + } + THEN("the geometry keeps BBS-grade handling: instances are not split") { + REQUIRE(dst_model.objects.size() == 1); + REQUIRE(dst_model.objects.front()->instances.size() == 2); + } + THEN("the published metadata and payload round-trip unchanged") { + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items["published"] == "1"); + REQUIRE(dst_model.model_info->metadata_items["published_keys"] == R"(["layer_height","retraction_length"])"); + REQUIRE(dst_model.model_info->metadata_items["published_config"] == payload); + } + THEN("the payload parses back to the published values") { + DynamicPrintConfig parsed_payload; + parsed_payload.load_from_ini_string(dst_model.model_info->metadata_items["published_config"], ForwardCompatibilitySubstitutionRule::Enable); + REQUIRE(parsed_payload.option("layer_height") != nullptr); + REQUIRE_THAT(parsed_payload.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.24, 1e-6)); + REQUIRE(parsed_payload.option("retraction_length") != nullptr); + REQUIRE_THAT(parsed_payload.opt("retraction_length")->get_at(0), Catch::Matchers::WithinAbs(1.2, 1e-6)); } release_PlateData_list(dst_plates); } From a0e95abebe6355807d9f0283f6b9e85975eddaa4 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 21 Aug 2026 13:26:17 +0800 Subject: [PATCH 033/208] Fix unit test: --- tests/libslic3r/test_preset_bundle_loading.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index df00b1a41c..d3bf4a2f49 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1216,17 +1216,20 @@ TEST_CASE("Published 3MF prefers a compatible preset over an exact but incompati petg.config.opt_string("filament_type", 0u) = "PETG"; petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; // The bare-named legacy preset (Bambu-printer only) and the exact author preset are both - // incompatible with the receiver's printer. + // incompatible with the receiver's printer. update_compatible() recomputes is_compatible + // inside load_config_model, so the incompatibility is expressed the way production derives + // it: a compatible_printers constraint no receiver printer satisfies (the fresh bundle's + // active printer is the "Default Printer" placeholder). Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); bare.config.opt_string("filament_type", 0u) = "PLA"; bare.config.opt_string("filament_vendor", 0u) = "Generic"; bare.config.opt("filament_retraction_length", true)->values = { 0.5 }; - bare.is_compatible = false; + bare.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); Preset &qidi = add_inmemory_preset(bundle.filaments, "Generic PLA @Qidi Q2 0.4 nozzle"); qidi.config.opt_string("filament_type", 0u) = "PLA"; qidi.config.opt_string("filament_vendor", 0u) = "Generic"; qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; - qidi.is_compatible = false; + qidi.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); // The receiver's own compatible library preset. Preset &sys = add_inmemory_preset(bundle.filaments, "Generic PLA @System"); sys.config.opt_string("filament_type", 0u) = "PLA"; @@ -1264,11 +1267,15 @@ TEST_CASE("Published 3MF falls back to an incompatible exact preset when no comp Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); petg.config.opt_string("filament_type", 0u) = "PETG"; petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + // The exact author preset is incompatible with the receiver's printer. update_compatible() + // recomputes is_compatible inside load_config_model, so the incompatibility is expressed the + // way production derives it: a compatible_printers constraint the receiver's printer (the + // fresh bundle's "Default Printer" placeholder) does not satisfy. Preset &qidi = add_inmemory_preset(bundle.filaments, "Generic PLA @Qidi Q2 0.4 nozzle"); qidi.config.opt_string("filament_type", 0u) = "PLA"; qidi.config.opt_string("filament_vendor", 0u) = "Generic"; qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; - qidi.is_compatible = false; + qidi.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); bundle.filament_presets = { "My PETG" }; PublishedMaterialEntry entry; From a5033afaf847710c6ef49c90bd54d3ac87d5dbc6 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 21 Aug 2026 14:26:20 +0800 Subject: [PATCH 034/208] UI cleanup and translations updated --- localization/i18n/OrcaSlicer.pot | 52 +++++- localization/i18n/ca/OrcaSlicer_ca.po | 52 +++++- localization/i18n/cs/OrcaSlicer_cs.po | 54 +++++- localization/i18n/de/OrcaSlicer_de.po | 52 +++++- localization/i18n/en/OrcaSlicer_en.po | 52 +++++- localization/i18n/es/OrcaSlicer_es.po | 52 +++++- localization/i18n/eu/OrcaSlicer_eu.po | 52 +++++- localization/i18n/fr/OrcaSlicer_fr.po | 52 +++++- localization/i18n/hu/OrcaSlicer_hu.po | 54 +++++- localization/i18n/it/OrcaSlicer_it.po | 52 +++++- localization/i18n/ja/OrcaSlicer_ja.po | 54 +++++- localization/i18n/ko/OrcaSlicer_ko.po | 54 +++++- localization/i18n/lt/OrcaSlicer_lt.po | 52 +++++- localization/i18n/nl/OrcaSlicer_nl.po | 52 +++++- localization/i18n/pl/OrcaSlicer_pl.po | 54 +++++- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 52 +++++- localization/i18n/ru/OrcaSlicer_ru.po | 56 ++++++- localization/i18n/sv/OrcaSlicer_sv.po | 54 +++++- localization/i18n/th/OrcaSlicer_th.po | 52 +++++- localization/i18n/tr/OrcaSlicer_tr.po | 54 +++++- localization/i18n/uk/OrcaSlicer_uk.po | 52 +++++- localization/i18n/vi/OrcaSlicer_vi.po | 54 +++++- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 52 +++++- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 52 +++++- src/slic3r/GUI/PublishSettingsDialog.cpp | 175 +++++++++++--------- src/slic3r/GUI/PublishSettingsDialog.hpp | 40 +++-- 26 files changed, 1210 insertions(+), 273 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 6ec0ecd9cf..c1dc798ff3 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -4565,6 +4565,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -5013,9 +5016,6 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" @@ -5945,6 +5945,12 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" @@ -7663,6 +7669,12 @@ msgstr "" msgid "Customized Preset" msgstr "" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "" @@ -8023,6 +8035,17 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -9070,9 +9093,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9088,6 +9108,24 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, possible-c-format, possible-boost-format msgid "Save %s as" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index b7eb022c0d..7070c885be 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -4987,6 +4987,9 @@ msgstr "" "Sí: canviar aquesta configuració i activar el mode d'espiral automàticament\n" "No - Renunciar a utilitzar el mode espiral aquesta vegada" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimint" @@ -5448,9 +5451,6 @@ msgstr "Patró no vàlid. Utilitzeu N, N#K, o una llista separada per comes amb msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format no vàlid. Format vectorial esperat: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agents del sistema" @@ -6413,6 +6413,12 @@ msgstr "Desa el projecte com a" msgid "Save current project as" msgstr "Desar el projecte actual com" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF STL/STEP/SVG/OBJ/AMF" @@ -8231,6 +8237,12 @@ msgstr "Confirmeu que els Codis-G d'aquests perfils són segurs per evitar danys msgid "Customized Preset" msgstr "Perfil personalitzat" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF8!" @@ -8619,6 +8631,17 @@ msgstr "Desa el fitxer Laminat com a:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El fitxer %s s'ha enviat a l'emmagatzematge de la impressora i es pot visualitzar a la impressora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipus de broquet no està establert. Establiu el broquet i torneu-ho a provar." @@ -9808,9 +9831,6 @@ msgstr "Anar a la pàgina web de publicació de models" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparació pot trigar uns quants minuts. Si us plau, sigui pacient." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicació ha estat cancel·lada" @@ -9826,6 +9846,24 @@ msgstr "Carregant dades" msgid "Jump to webpage" msgstr "Anar a la pàgina web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Desar %s com a" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index b521a8073b..889b659a0b 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -4945,6 +4945,10 @@ msgstr "" "Ano – změnit tato nastavení a automaticky povolit spirálový režim\n" "Ne – tentokrát nepoužít spirálový režim" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Tisk" @@ -5404,10 +5408,6 @@ msgstr "Neplatný vzor. Použijte N, N#K nebo seznam oddělený čárkami s voli msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Neplatný formát. Očekávaný vektorový formát: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Systémoví agenti" @@ -6374,6 +6374,12 @@ msgstr "Uložit projekt jako" msgid "Save current project as" msgstr "Uložit aktuální projekt jako" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importovat 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8193,6 +8199,12 @@ msgstr "Potvrďte prosím, že je G-code v těchto předvolbách bezpečný, aby msgid "Customized Preset" msgstr "Přizpůsobená předvolba" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Názvy komponent v souboru STEP nejsou ve formátu UTF-8!" @@ -8579,6 +8591,17 @@ msgstr "Uložit rozřezaný soubor jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Soubor %s byl odeslán do úložiště tiskárny a lze jej zobrazit na tiskárně." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publikovat" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Typ trysky není nastaven. Nastavte prosím trysku a zkuste to znovu." @@ -9756,9 +9779,6 @@ msgstr "Přejít na webovou stránku publikace modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Poznámka: Příprava může trvat několik minut. Buďte prosím trpěliví." -msgid "Publish" -msgstr "Publikovat" - msgid "Publish was canceled" msgstr "Publikování bylo zrušeno" @@ -9774,6 +9794,24 @@ msgstr "Nahrávání dat" msgid "Jump to webpage" msgstr "Přejít na webovou stránku" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Uložit %s jako" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 436966457a..fe17251f32 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -4851,6 +4851,9 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Spiralmodus nicht aktivieren" +msgid "N/A" +msgstr "Nicht verfügbar" + msgid "Printing" msgstr "Drucken" @@ -5310,9 +5313,6 @@ msgstr "Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennt msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ungültiges Format. Erwartetes Vektorformat: \"%1%\"" -msgid "N/A" -msgstr "Nicht verfügbar" - # AI Translated msgid "System agents" msgstr "Systemagenten" @@ -6266,6 +6266,12 @@ msgstr "Projekt speichern als" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importiere 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8063,6 +8069,12 @@ msgstr "Bitte bestätigen Sie, dass die G-Codes innerhalb dieser Profile sicher msgid "Customized Preset" msgstr "Benutzerdefinierte Profile" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" @@ -8451,6 +8463,17 @@ msgstr "Geslicte Datei speichern unter:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Die Datei %s wurde an den Speicher des Druckers gesendet und kann auf dem Drucker angezeigt werden." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Veröffentlichen" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Die Düsenart ist nicht eingestellt. Bitte stellen Sie die Düse ein und versuchen Sie es erneut." @@ -9590,9 +9613,6 @@ msgstr "Zur Modellveröffentlichungs-Webseite springen" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Hinweis: Die Vorbereitung kann einige Minuten dauern. Bitte haben Sie Geduld." -msgid "Publish" -msgstr "Veröffentlichen" - msgid "Publish was canceled" msgstr "Veröffentlichung wurde abgebrochen" @@ -9608,6 +9628,24 @@ msgstr "Daten werden hochgeladen" msgid "Jump to webpage" msgstr "Zu einer Website springen" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s speichern als" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 88fb455959..0da5e9d2b5 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -4561,6 +4561,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -5009,9 +5012,6 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" @@ -5941,6 +5941,12 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" @@ -7659,6 +7665,12 @@ msgstr "" msgid "Customized Preset" msgstr "" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "" @@ -8019,6 +8031,17 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -9066,9 +9089,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9084,6 +9104,24 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 9c5127e50a..ded492a284 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -4723,6 +4723,9 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Imprimiendo" @@ -5176,9 +5179,6 @@ msgstr "Patrón inválido. Use N, N#K, o una lista separada por comas con #K opc msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vector esperado: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Agentes del sistema" @@ -6123,6 +6123,12 @@ msgstr "Guardar proyecto como" msgid "Save current project as" msgstr "Guardar el proyecto actual como" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7877,6 +7883,12 @@ msgstr "¡Por favor, confirme que el G-Code dentro de los perfiles son seguros p msgid "Customized Preset" msgstr "Perfil Personalizado" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF8!" @@ -8254,6 +8266,17 @@ msgstr "Guardar el archivo laminado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El archivo %s ha sido mandado al almacenamiento de la impresora y puede ser visualizado en la impresora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipo de boquilla no está establecido. Configure la boquilla e inténtelo de nuevo." @@ -9365,9 +9388,6 @@ msgstr "Ir a la página web de publicación de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparación puede llevar varios minutos. Por favor, sea paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicación fue cancelada" @@ -9383,6 +9403,24 @@ msgstr "Cargando datos" msgid "Jump to webpage" msgstr "Ir a la página web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Guardar %s como" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 03e6d6685d..e950ea3d2e 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -4764,6 +4764,9 @@ msgstr "" "Bai - Aldatu ezarpen hauek eta gaitu espiral/loreontzi modua automatikoki\n" "Ez - Utzi bertan behera espiral modua gaitzea" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Inprimatzen" @@ -5224,9 +5227,6 @@ msgstr "Patroi baliogabea. Erabili N, N#K edo komaz bereizitako zerrenda bat, sa msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formatuak ez du balio. Espero den formatu bektoriala: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Sistema-agenteak" @@ -6168,6 +6168,12 @@ msgstr "Gorde proiektua honela" msgid "Save current project as" msgstr "Gorde uneko proiektua honela" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Inportatu 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7945,6 +7951,12 @@ msgstr "Berretsi aurrezarpen hauetako G-codea segurua dela, makinari kalterik ez msgid "Customized Preset" msgstr "Aurrezarpen pertsonalizatua" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP fitxategiko osagai-izena(k) ez dago/daude UTF-8 formatuan!" @@ -8321,6 +8333,17 @@ msgstr "Gorde xerratutako fitxategia honela:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s fitxategia inprimagailuaren biltegiratze-eremura bidali da eta inprimagailuan ikus daiteke." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Argitaratu" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Pita mota ez dago ezarrita. Ezarri pita eta saiatu berriro." @@ -9434,9 +9457,6 @@ msgstr "Joan modeloa argitaratzeko web-orrira" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Oharra: prestaketak minutu batzuk iraun ditzake. Izan pazientzia." -msgid "Publish" -msgstr "Argitaratu" - msgid "Publish was canceled" msgstr "Argitaratzea bertan behera utzi da" @@ -9452,6 +9472,24 @@ msgstr "Datuak igotzen" msgid "Jump to webpage" msgstr "Joan web-orrira" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Gorde %s honela" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index fc58381106..5bd15b57cd 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -4801,6 +4801,9 @@ msgstr "" "Oui - Modifiez ces paramètres et activez automatiquement le mode spirale/vase\n" "Non - Annuler l'activation du mode spirale" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Impression" @@ -5260,9 +5263,6 @@ msgstr "Motif invalide. Utilisez N, N#K, ou une liste séparée par des virgules msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format invalide. Format vectoriel attendu : \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Agents système" @@ -6215,6 +6215,12 @@ msgstr "Enregistrer le projet sous" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8000,6 +8006,12 @@ msgstr "Veuillez vous assurer que les G-codes de ces préréglages sont sûrs af msgid "Customized Preset" msgstr "Préréglage personnalisé" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Le nom des composants dans le fichier STEP n'est pas au format UTF-8 !" @@ -8377,6 +8389,17 @@ msgstr "Enregistrer le fichier découpé sous :" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Le fichier %s a été envoyé vers l'espace de stockage de l'imprimante et peut être visualisé sur l'imprimante." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publier" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Le type de buse n'est pas défini. Veuillez définir la buse et réessayer." @@ -9504,9 +9527,6 @@ msgstr "Accéder à la page internet de publication des modèles" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Remarque : La préparation peut prendre plusieurs minutes. Veuillez patienter." -msgid "Publish" -msgstr "Publier" - msgid "Publish was canceled" msgstr "La publication a été annulée" @@ -9522,6 +9542,24 @@ msgstr "Téléversement des données" msgid "Jump to webpage" msgstr "Ouvrir la page internet" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Enregistrer %s sous" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 9f8a849884..1f8c1022bb 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4897,6 +4897,10 @@ msgstr "" "Igen - Módosítsd ezeket a beállításokat, és automatikusan kapcsold be a spirál módot\n" "Nem - Most ne kapcsold be a spirál módot" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Nyomtatás" @@ -5356,10 +5360,6 @@ msgstr "Érvénytelen minta. Használj N, N#K formátumot, vagy vesszővel elvá msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Érvénytelen formátum. Elvárt vektor formátum: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Rendszerügynökök" @@ -6317,6 +6317,12 @@ msgstr "Projekt mentése másként" msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8115,6 +8121,12 @@ msgstr "Kérlek, győződj meg arról, hogy a beállításokban található G-k msgid "Customized Preset" msgstr "Egyedi beállítás" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "A STEP fájlon belüli komponens neve nem UTF-8 formátumban van!" @@ -8503,6 +8515,17 @@ msgstr "Szeletelt fájl mentése mint:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "A(z) %s fájlt elküldtük a nyomtató tárhelyére. A fájl a nyomtatón tekinthető meg." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Közzététel" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "A fúvókatípus nincs beállítva. Állítsd be a fúvókát, majd próbáld újra." @@ -9664,9 +9687,6 @@ msgstr "Ugrás a modell közzététele weboldalra" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Megjegyzés: Az előkészítés több percig is eltarthat. Kérlek, várj." -msgid "Publish" -msgstr "Közzététel" - msgid "Publish was canceled" msgstr "A közzététel törlésre került" @@ -9682,6 +9702,24 @@ msgstr "Adatok feltöltése" msgid "Jump to webpage" msgstr "Ugrás a weboldalra" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s mentése" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index bc36e08d25..ac9d5531e5 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -4899,6 +4899,9 @@ msgstr "" "Sì - Modifica queste impostazioni ed abilita la modalità spirale automaticamente\n" "No - Annulla l'attivazione della modalità a spirale" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Stampa" @@ -5358,9 +5361,6 @@ msgstr "Schema non valido. Utilizzare N, N#K o un elenco separato da virgole con msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agenti di sistema" @@ -6319,6 +6319,12 @@ msgstr "Salva progetto con nome" msgid "Save current project as" msgstr "Salva progetto corrente con nome" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8119,6 +8125,12 @@ msgstr "Si prega di confermare che i G-code all'interno di questi profili sono s msgid "Customized Preset" msgstr "Profilo personalizzato" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF8!" @@ -8502,6 +8514,17 @@ msgstr "Salva file elaborato con nome:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Il file %s è stato inviato alla memoria della stampante e può essere visualizzato da lì." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Pubblica" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Il tipo di ugello non è impostato. Impostare l'ugello e riprovare." @@ -9682,9 +9705,6 @@ msgstr "Vai alla pagina web di pubblicazione del modello" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: la preparazione può richiedere alcuni minuti. Si prega di avere pazienza." -msgid "Publish" -msgstr "Pubblica" - msgid "Publish was canceled" msgstr "La pubblicazione è stata annullata" @@ -9700,6 +9720,24 @@ msgstr "Caricamento dati" msgid "Jump to webpage" msgstr "Vai alla pagina web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Salva %s con nome" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 1b70ddbf67..55ad80089b 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -4912,6 +4912,10 @@ msgstr "" "はい - 変更して、スパイラルモードを有効にします\n" "いいえ - 変更せず、スパイラルモードを有効しません" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "造形中" @@ -5370,10 +5374,6 @@ msgstr "無効なパターンです。N、N#K、またはオプション#K付き msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無効なフォーマット、%1%であるはずです。" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "システムエージェント" @@ -6328,6 +6328,12 @@ msgstr "プロジェクトを名前を付けて保存" msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" @@ -8133,6 +8139,12 @@ msgstr "これらのプリセット内のG-codeがマシンに損傷を与えな msgid "Customized Preset" msgstr "カスタマイズされたプリセット" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" @@ -8521,6 +8533,17 @@ msgstr "名前を付けて保存:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%sを送信しました、プリンターにて確認できます" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "公開する" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ノズルタイプが設定されていません。ノズルを設定して再試行してください。" @@ -9704,9 +9727,6 @@ msgstr "モデル公開ページに移動" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "注意: 準備するには数分かかる場合があります、暫くお待ち下さい。" -msgid "Publish" -msgstr "公開する" - msgid "Publish was canceled" msgstr "公開は取り消しました" @@ -9722,6 +9742,24 @@ msgstr "データをアップロード中" msgid "Jump to webpage" msgstr "ウェブページに移動" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%sを名前つけて保存" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 767674e525..66ce7b49a1 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -4923,6 +4923,10 @@ msgstr "" "예 - 이 설정을 변경하고 나선 모드를 자동으로 활성화합니다\n" "아니오 - 이번에는 나선 모드 사용을 포기합니다" +# AI Translated +msgid "N/A" +msgstr "해당 없음" + msgid "Printing" msgstr "출력 중" @@ -5382,10 +5386,6 @@ msgstr "잘못된 패턴입니다. N, N#K 또는 항목당 선택적 #K가 있 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "잘못된 형식입니다. 필요한 벡터 형식: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "해당 없음" - # AI Translated msgid "System agents" msgstr "시스템 에이전트" @@ -6342,6 +6342,12 @@ msgstr "프로젝트 다른 이름으로 저장" msgid "Save current project as" msgstr "현재 프로젝트 다른 이름으로 저장" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" @@ -8151,6 +8157,12 @@ msgstr "이러한 사전 설정 내의 Gcode가 기계 손상을 방지할 수 msgid "Customized Preset" msgstr "사용자 정의 프리셋" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 파일 내부의 구성 요소 이름이 UTF8 형식이 아닙니다!" @@ -8554,6 +8566,17 @@ msgstr "슬라이스 파일을 다음으로 저장:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s 파일이 프린터의 저장 공간으로 전송되었으며 프린터에서 볼 수 있습니다." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "게시" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "노즐 유형이 설정되지 않았습니다. 노즐을 설정하고 다시 시도하세요." @@ -9793,9 +9816,6 @@ msgstr "모델 게시 웹 페이지로 이동" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "참고: 준비하는 데 몇 분 정도 걸릴 수 있습니다. 조금만 기다려 주십시오." -msgid "Publish" -msgstr "게시" - msgid "Publish was canceled" msgstr "게시가 취소되었습니다" @@ -9812,6 +9832,24 @@ msgstr "데이터 업로드 중" msgid "Jump to webpage" msgstr "웹 페이지로 이동" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s을(를) 다음으로 저장" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index ad5edffc9a..866f5fa3f6 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -4886,6 +4886,9 @@ msgstr "" "Taip – pakeisti šiuos nustatymus ir automatiškai įjungti spiralinį režimą\n" "Ne – nenaudoti spiralinio režimo" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Spausdinimas" @@ -5345,9 +5348,6 @@ msgstr "Neteisingas šablonas. Naudokite N, N#K arba kableliais atskirtą sąra msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Netinkamas formatas. Tinkamas vektorinis formatas: \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Sisteminiai agentai" @@ -6305,6 +6305,12 @@ msgstr "Įrašyti projektą kaip" msgid "Save current project as" msgstr "Įrašyti dabartinį projektą kaip" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuoti 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8110,6 +8116,12 @@ msgstr "Patvirtinkite, kad šiuose profiliuose esantis G-kodas yra saugus, kad i msgid "Customized Preset" msgstr "Pritaikytas profilis" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" @@ -8497,6 +8509,17 @@ msgstr "Išsaugoti susluoksniuotą failą kaip:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Failas %s išsiųstas į spausdintuvo laikmeną ir gali būti peržiūrimas spausdintuve." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Talpinti" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Purkštuko tipas nenustatytas. Nustatykite purkštuką ir bandykite dar kartą." @@ -9622,9 +9645,6 @@ msgstr "Pereiti į modelio talpinimo interneto puslapį" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Pastaba: paruošimas gali užtrukti kelias minutes. Būkite kantrūs." -msgid "Publish" -msgstr "Talpinti" - msgid "Publish was canceled" msgstr "Publikavimas buvo atšauktas" @@ -9640,6 +9660,24 @@ msgstr "Įkeliami duomenys" msgid "Jump to webpage" msgstr "Pereiti į interneto puslapį" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Išsaugoti %s kaip" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 28ad63d455..470aa9fa86 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -5317,6 +5317,9 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" +msgid "N/A" +msgstr "N/B" + msgid "Printing" msgstr "Printen" @@ -5853,9 +5856,6 @@ msgstr "Ongeldig patroon. Gebruik N, N#K of een door komma's gescheiden lijst me msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Onjuist formaat. Het Vector formaat wordt verwacht: \"%1%\"" -msgid "N/A" -msgstr "N/B" - # AI Translated msgid "System agents" msgstr "Systeemagenten" @@ -6880,6 +6880,12 @@ msgstr "Bewaar project als" msgid "Save current project as" msgstr "Bewaar huidig project als" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF importeren" @@ -8860,6 +8866,12 @@ msgstr "Controleer of de G-codes in deze presets veilig zijn om schade aan de ma msgid "Customized Preset" msgstr "Aangepaste voorinstelling" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" @@ -9271,6 +9283,17 @@ msgstr "Bewaar het geslicede bestand als:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Het bestand %s is naar de opslagruimte van de printer gestuurd en kan op de printer worden bekeken." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publiceren" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Het mondstuktype is niet ingesteld. Stel het mondstuk in en probeer het opnieuw." @@ -10554,9 +10577,6 @@ msgstr "Ga naar de website om het model te publiceren" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notitie: het voorbereiden kan enkele minuten duren. Even geduld alstublieft." -msgid "Publish" -msgstr "Publiceren" - msgid "Publish was canceled" msgstr "Het publiceren is geannuleerd" @@ -10573,6 +10593,24 @@ msgstr "Gegevens uploaden" msgid "Jump to webpage" msgstr "Ga naar de website" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Bewaar %s als" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index e8acc62a9b..4adcf037ca 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -5005,6 +5005,10 @@ msgstr "" "Tak - Zmień te ustawienia automatycznie i włącz tryb Wazy\n" "Nie - Zrezygnuj tym razem z używania trybu Wazy" +# AI Translated +msgid "N/A" +msgstr "Nie dotyczy" + msgid "Printing" msgstr "Drukowanie" @@ -5472,10 +5476,6 @@ msgstr "Nieprawidłowy wzorzec. Użyj N, N#K lub listy rozdzielonej przecinkami msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Nieprawidłowy format. Oczekiwano formatu wektorowego: „%1%”" -# AI Translated -msgid "N/A" -msgstr "Nie dotyczy" - # AI Translated msgid "System agents" msgstr "Agenci systemowi" @@ -6461,6 +6461,12 @@ msgstr "Zapisz projekt jako" msgid "Save current project as" msgstr "Zapisz bieżący projekt jako" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8309,6 +8315,12 @@ msgstr "Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zap msgid "Customized Preset" msgstr "Dostosowany profil" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF8!" @@ -8711,6 +8723,17 @@ msgstr "Zapisz plik po wykonaniu cięcia jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Plik %s został wysłany do pamięci drukarki i można go obejrzeć na urządzeniu." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Opublikuj" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nie ustawiono typu dyszy Wprowadź ustawienia dyszy i spróbuj ponownie." @@ -9949,9 +9972,6 @@ msgstr "Przejdź do strony publikacji modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Uwaga: Przygotowanie może zająć kilka minut. Proszę o cierpliwość." -msgid "Publish" -msgstr "Opublikuj" - msgid "Publish was canceled" msgstr "Publikacja została anulowana" @@ -9968,6 +9988,24 @@ msgstr "Przesyłanie danych" msgid "Jump to webpage" msgstr "Przejdź na stronę" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Zapisz %s jako" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 1b39d4a159..0e1e34c7d7 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -4735,6 +4735,9 @@ msgstr "" "Sim - Alterar essas configurações e ativar o modo espiral/vaso automaticamente\n" "Não - Cancelar ativação do modo espiral" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimindo" @@ -5188,9 +5191,6 @@ msgstr "Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vetor esperado: \"%1%\"" -msgid "N/A" -msgstr "N/D" - msgid "System agents" msgstr "Agentes do sistema" @@ -6137,6 +6137,12 @@ msgstr "Salvar projeto como" msgid "Save current project as" msgstr "Salvar o projeto atual como" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7897,6 +7903,12 @@ msgstr "Por favor, confirme se o G-code dentro dessas predefinições é seguro msgid "Customized Preset" msgstr "Predefinição Personalizada" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Os nomes dos componentes dentro do arquivo STEP não estão no formato UTF-8!" @@ -8277,6 +8289,17 @@ msgstr "Salvar arquivo fatiado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode ser visualizado na impressora." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "O tipo de bico não está configurado. Configure o bico e tente novamente." @@ -9406,9 +9429,6 @@ msgstr "Ir para a página web de publicação de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: A preparação pode levar vários minutos. Por favor, seja paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "Publicação cancelada" @@ -9424,6 +9444,24 @@ msgstr "Enviando dados" msgid "Jump to webpage" msgstr "Ir para a página web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Salvar %s como" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 2372471707..debec4f832 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -4883,6 +4883,11 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "Использовать эти настройки и режим вазы?" +# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо +# символов +msgid "N/A" +msgstr "–" + msgid "Printing" msgstr "Печать" @@ -5352,11 +5357,6 @@ msgstr "Недопустимый шаблон. Используйте N, N#K и msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Недопустимый формат. Ожидаемый векторный формат: \"%1%\"" -# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо -# символов -msgid "N/A" -msgstr "–" - msgid "System agents" msgstr "Системные агенты" @@ -6370,6 +6370,12 @@ msgstr "Сохранить проект как" msgid "Save current project as" msgstr "Сохранить текущий проект как" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Импорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8168,6 +8174,12 @@ msgstr "Во избежание повреждения принтера убед msgid "Customized Preset" msgstr "Пользовательский профиль" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Имена компонентов внутри файла STEP не в формате UTF8." @@ -8556,6 +8568,17 @@ msgstr "Сохранить нарезанный файл как:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s отправлен в память принтера и может быть просмотрен на нём." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Опубликовать" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Не указан тип сопла. Укажите его и попробуйте ещё раз." @@ -9698,9 +9721,6 @@ msgstr "Перейти на веб-страницу публикации мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примечание: подготовка может занять несколько минут. Пожалуйста, наберитесь терпения." -msgid "Publish" -msgstr "Опубликовать" - msgid "Publish was canceled" msgstr "Публикация была отменена" @@ -9716,6 +9736,24 @@ msgstr "Отправка данных" msgid "Jump to webpage" msgstr "Перейти на страницу" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Сохранить %s как" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 432000f96d..7add432a60 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -5379,6 +5379,10 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" +# AI Translated +msgid "N/A" +msgstr "Ej tillämpligt" + msgid "Printing" msgstr "Utskrift pågår" @@ -5928,10 +5932,6 @@ msgstr "Ogiltigt mönster. Använd N, N#K eller en kommaseparerad lista med valf msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ogiltligt format. Förväntat vector format: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Ej tillämpligt" - # AI Translated msgid "System agents" msgstr "Systemagenter" @@ -6964,6 +6964,12 @@ msgstr "Spara Projekt som" msgid "Save current project as" msgstr "Spara nuvarande projekt som" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importera 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8952,6 +8958,12 @@ msgstr "Bekräfta att G-koderna i dessa inställningar är säkra för att förh msgid "Customized Preset" msgstr "Anpassad inställning" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Komponent namnet i STEP filen är inte UTF8 format!" @@ -9364,6 +9376,17 @@ msgstr "Spara beredningen som:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Filen %s har skickats till skrivarens lagringsutrymme och kan visas på skrivaren." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Publicera" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozzeltypen är inte angiven. Ange nozzeln och försök igen." @@ -10668,9 +10691,6 @@ msgstr "Växla till modell publicerings hemsidan" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notera: Förberedelserna kan ta flera minuter. Vänligen vänta." -msgid "Publish" -msgstr "Publicera" - msgid "Publish was canceled" msgstr "Publiceringen avbröts" @@ -10687,6 +10707,24 @@ msgstr "Laddar upp data" msgid "Jump to webpage" msgstr "Växla till hemsidan" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Spara %s som" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index a0c0079125..60163fe29b 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -4879,6 +4879,9 @@ msgstr "" "ใช่ - เปลี่ยนการตั้งค่าเหล่านี้และเปิดใช้งานโหมดเกลียวโดยอัตโนมัติ\n" "ไม่ - เลิกใช้โหมดเกลียวในครั้งนี้" +msgid "N/A" +msgstr "ไม่มี" + msgid "Printing" msgstr "กำลังพิมพ์" @@ -5338,9 +5341,6 @@ msgstr "รูปแบบไม่ถูกต้อง ใช้ N, N#K หร msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "รูปแบบไม่ถูกต้อง รูปแบบเวกเตอร์ที่ต้องการ: \"%1%\"" -msgid "N/A" -msgstr "ไม่มี" - # AI Translated msgid "System agents" msgstr "เอเจนต์ระบบ" @@ -6296,6 +6296,12 @@ msgstr "บันทึกโปรเจกต์เป็น" msgid "Save current project as" msgstr "บันทึกโครงการปัจจุบันเป็น" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "นำเข้า 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8074,6 +8080,12 @@ msgstr "โปรดยืนยันว่ารหัส G ภายในค msgid "Customized Preset" msgstr "ค่าที่ตั้งไว้ล่วงหน้าที่กำหนดเอง" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF8!" @@ -8457,6 +8469,17 @@ msgstr "บันทึกไฟล์ที่สไลซ์เป็น:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "ไฟล์ %s ถูกส่งไปยังพื้นที่เก็บข้อมูลของเครื่องพิมพ์แล้ว และสามารถดูได้บนเครื่องพิมพ์" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "เผยแพร่" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ไม่ได้ตั้งค่าประเภทหัวฉีด โปรดตั้งหัวฉีดแล้วลองอีกครั้ง" @@ -9595,9 +9618,6 @@ msgstr "ข้ามไปที่โมเดลเผยแพร่หน้ msgid "Note: The preparation may take several minutes. Please be patient." msgstr "หมายเหตุ: การเตรียมการอาจใช้เวลาหลายนาที กรุณาอดทน." -msgid "Publish" -msgstr "เผยแพร่" - msgid "Publish was canceled" msgstr "การเผยแพร่ถูกยกเลิก" @@ -9613,6 +9633,24 @@ msgstr "กำลังอัพโหลดข้อมูล" msgid "Jump to webpage" msgstr "ข้ามไปที่หน้าเว็บ" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "บันทึก %s เป็น" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index a31d2216f4..5d7a6707c3 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-08-04 19:36+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -4967,6 +4967,10 @@ msgstr "" "Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" +# AI Translated +msgid "N/A" +msgstr "Yok" + msgid "Printing" msgstr "Baskı" @@ -5426,10 +5430,6 @@ msgstr "Geçersiz kalıp. N, N#K veya giriş başına isteğe bağlı #K ile vir msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Geçersiz format. Beklenen vektör formatı: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Yok" - # AI Translated msgid "System agents" msgstr "Sistem aracıları" @@ -6390,6 +6390,12 @@ msgstr "Projeyi farklı kaydet" msgid "Save current project as" msgstr "Mevcut projeyi farklı kaydet" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF'yi içe aktar" @@ -8197,6 +8203,12 @@ msgstr "Lütfen bu ön ayarlar içindeki G-kodlarının makineye herhangi bir za msgid "Customized Preset" msgstr "Özel Ayar" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Step dosyasındaki bileşenlerin adı UTF8 formatında değil!" @@ -8582,6 +8594,17 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda görüntülenebiliyor." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Yayınla" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozul tipi ayarlanmamış. Lütfen nozulu ayarlayın ve tekrar deneyin." @@ -9765,9 +9788,6 @@ msgstr "Model yayınlama web sayfasına git" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Not: Hazırlık birkaç dakika sürebilir. Lütfen sabırlı olun." -msgid "Publish" -msgstr "Yayınla" - msgid "Publish was canceled" msgstr "Yayınlama iptal edildi" @@ -9783,6 +9803,24 @@ msgstr "Veriler yükleniyor" msgid "Jump to webpage" msgstr "Web sayfasına atla" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "%s'yi farklı kaydet" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 4c3cc1d56c..fbbb095cb5 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -4879,6 +4879,9 @@ msgstr "" "Так – змінити ці налаштування та автоматично включити режим спіральна ваза\n" "Ні - цього разу відмовитися від використання режиму спіральна ваза" +msgid "N/A" +msgstr "Н/Д" + msgid "Printing" msgstr "Друк" @@ -5350,9 +5353,6 @@ msgstr "Некоректний шаблон. Використовуйте N, N#K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Невірний формат. Очікуваний векторний формат: \"%1%\"" -msgid "N/A" -msgstr "Н/Д" - # AI Translated msgid "System agents" msgstr "Системні агенти" @@ -6333,6 +6333,12 @@ msgstr "Зберегти проєкт як" msgid "Save current project as" msgstr "Зберегти поточний проєкт як" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8179,6 +8185,12 @@ msgstr "Будь ласка, підтвердьте, що G-коди в цих msgid "Customized Preset" msgstr "Пристосований пресет" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + # AI Translated msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Назви компонентів усередині файлу STEP не у форматі UTF8!" @@ -8567,6 +8579,17 @@ msgstr "Зберегти нарізаний файл як:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s надіслано до памʼяті принтера та доступний для перегляду на принтері." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Публікувати" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Тип сопла не встановлений. Будь ласка, оберіть сопло та спробуйте ще раз." @@ -9742,9 +9765,6 @@ msgstr "Перейти на веб-сторінку публікації мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примітка. Підготовка може тривати кілька хвилин. Будь ласка, будьте терплячі." -msgid "Publish" -msgstr "Публікувати" - msgid "Publish was canceled" msgstr "Публікація скасована" @@ -9760,6 +9780,24 @@ msgstr "Відвантаження даних" msgid "Jump to webpage" msgstr "Перейти на вебсторінку" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Зберегти %s як" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 00a9a558ba..519a6c3b25 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -5135,6 +5135,10 @@ msgstr "" "Yes - Thay đổi các cài đặt này và bật chế độ spiral tự động\n" "No - Từ bỏ dùng chế độ spiral lần này" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Đang in" @@ -5653,10 +5657,6 @@ msgstr "Mẫu không hợp lệ. Dùng N, N#K, hoặc danh sách phân cách d msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Định dạng không hợp lệ. Mong đợi định dạng vector: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Tác nhân hệ thống" @@ -6681,6 +6681,12 @@ msgstr "Lưu dự án thành" msgid "Save current project as" msgstr "Lưu dự án hiện tại thành" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Nhập 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8585,6 +8591,12 @@ msgstr "Vui lòng xác nhận G-code trong các preset này an toàn để ngăn msgid "Customized Preset" msgstr "Preset tùy chỉnh" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF8!" @@ -8988,6 +9000,17 @@ msgstr "Lưu file đã slice dưới dạng:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "File %s đã được gửi đến không gian lưu trữ của máy in và có thể được xem trên máy in." +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "Xuất bản" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Chưa đặt loại đầu phun. Vui lòng đặt đầu phun rồi thử lại." @@ -10254,9 +10277,6 @@ msgstr "Chuyển đến trang web xuất bản model" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Lưu ý: Chuẩn bị có thể mất vài phút. Vui lòng kiên nhẫn." -msgid "Publish" -msgstr "Xuất bản" - msgid "Publish was canceled" msgstr "Xuất bản đã bị hủy" @@ -10273,6 +10293,24 @@ msgstr "Đang tải dữ liệu lên" msgid "Jump to webpage" msgstr "Chuyển đến trang web" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "Lưu %s dưới dạng" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 133e0815a4..2abe2fc5d2 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -4735,6 +4735,9 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" +msgid "N/A" +msgstr "不适用" + msgid "Printing" msgstr "打印中" @@ -5194,9 +5197,6 @@ msgstr "无效的模式。请使用 N、N#K 或逗号分隔的列表(每个条 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "无效格式,应该是\"%1%\"这种数组格式" -msgid "N/A" -msgstr "不适用" - # AI Translated msgid "System agents" msgstr "系统代理" @@ -6151,6 +6151,12 @@ msgstr "项目另存为" msgid "Save current project as" msgstr "项目另存为" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -7905,6 +7911,12 @@ msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造 msgid "Customized Preset" msgstr "自定义的预设" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 文件中的部件名称不是 UTF8 格式!" @@ -8286,6 +8298,17 @@ msgstr "切片文件另存为:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "文件%s已经发送到打印机的存储空间,可以在打印机上浏览。" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "发布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "未设置喷嘴类型。请设置喷嘴并重试。" @@ -9417,9 +9440,6 @@ msgstr "跳转到发布页面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:发布前需要一些准备时间,请耐心等待。" -msgid "Publish" -msgstr "发布" - msgid "Publish was canceled" msgstr "发布已取消" @@ -9435,6 +9455,24 @@ msgstr "正在上传数据" msgid "Jump to webpage" msgstr "跳转到网页" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "另存%s为" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index cf6a2519c3..839e7cdb2b 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-08-21 14:25+0800\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -4864,6 +4864,9 @@ msgstr "" "是 - 自動調整這些設定並啟用花瓶模式\n" "否 - 不使用花瓶模式" +msgid "N/A" +msgstr "不適用" + msgid "Printing" msgstr "列印中" @@ -5323,9 +5326,6 @@ msgstr "無效的格式。請使用 N、N#K 或逗號分隔的清單,每個項 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無效格式,應該是「%1%」這種格式" -msgid "N/A" -msgstr "不適用" - # AI Translated msgid "System agents" msgstr "系統代理程式" @@ -6281,6 +6281,12 @@ msgstr "另存專案為" msgid "Save current project as" msgstr "將目前專案另存為" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" @@ -8066,6 +8072,12 @@ msgstr "請確認這些預設中的 G-code 是安全的,以防止對列印裝 msgid "Customized Preset" msgstr "自訂預設" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed to match the published materials:" +msgstr "" + msgid "Component name(s) inside step file not in UTF8 format!" msgstr "STEP 檔案內部元件的名稱不是 UTF-8 格式!" @@ -8452,6 +8464,17 @@ msgstr "切片檔案另存為:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "檔案 %s 已經傳送到列印裝置的儲存空間,可以在列印裝置上瀏覽。" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "發布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "噴嘴類型尚未設定。請設定噴嘴後再試一次。" @@ -9590,9 +9613,6 @@ msgstr "發布頁面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:發布前需要一些準備時間,請耐心等待。" -msgid "Publish" -msgstr "發布" - msgid "Publish was canceled" msgstr "發布已取消" @@ -9608,6 +9628,24 @@ msgstr "正在上傳資料" msgid "Jump to webpage" msgstr "跳至網頁" +msgid "Material" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to embed in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "另存 %s 為" diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 881560f93c..cd8b82a489 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -34,6 +34,20 @@ enum { kPublishFilterNonSelected }; +// Tree-style flags shared by the outer tabs and every group's inner tabs. +constexpr long s_tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | + wxTR_FULL_ROW_HIGHLIGHT; + +// The author's hex colour for a filament slot (empty when the slot is out of range); shared by +// the header chip, the inner-tab chip and the DPI rescale paths. +std::string filament_color_hex(const DynamicPrintConfig& full, size_t slot) +{ + if (const auto* colours = full.opt("filament_colour")) + if (slot < colours->size()) + return colours->get_at(slot); + return std::string(); +} + PublishMaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& full) { PublishMaterialIdentity identity; @@ -114,7 +128,6 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) e.Skip(); }); f_sizer->Add(m_filter_box, 1, wxEXPAND); - Bind(wxEVT_SET_FOCUS, [this](auto&) { m_filter_box->SetFocus(); }); m_fb_sizer = new wxBoxSizer(wxHORIZONTAL); auto create_btn = [this, f_bar](wxString title, bool select) { @@ -129,6 +142,17 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) create_btn(_L("All"), true); create_btn(_L("None"), false); + // Indicator for the menu's pseudo filters: sits where All/None go while they are hidden. + // Labels reuse the menu entries (no new strings); clicking the chip returns to text + // filtering, keeping the search box contents. + m_pseudo_chip = new wxStaticText(f_bar, wxID_ANY, ""); + m_pseudo_chip->SetForegroundColour("#009687"); + m_pseudo_chip->SetCursor(wxCURSOR_HAND); + m_pseudo_chip->SetFont(Label::Body_13); + m_pseudo_chip->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_pseudo_chip->Hide(); + f_sizer->Add(m_pseudo_chip, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + m_menu_button = new wxStaticBitmap(f_bar, wxID_ANY, m_menu.bmp()); m_menu_button->SetCursor(wxCURSOR_HAND); m_menu_button->Bind(wxEVT_LEFT_DOWN, &PublishSettingsDialog::show_menu, this); @@ -136,9 +160,7 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) f_bar->SetSizerAndFit(f_sizer); - constexpr long tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | - wxTR_FULL_ROW_HIGHLIGHT; - m_outer_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, tab_style); + m_outer_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); m_outer_tabs->SetFont(Label::Body_14); m_outer_tabs->SetBackgroundColour(GetBackgroundColour()); @@ -224,7 +246,7 @@ void PublishSettingsDialog::build_option_model() // Printer group), from the printer tab's "Extruder"/"Extruder N" pages. { size_t g = section_group_for(Section::Printer); - category_index_for(_L("Extruder"), Section::Printer, "custom-gcode_extruder", g, 0); + category_index_for(_L("Extruder"), Section::Printer, g, 0); for (Tab* tab : wxGetApp().tabs_list) { if (tab->m_type != Preset::TYPE_PRINTER) continue; @@ -249,7 +271,7 @@ void PublishSettingsDialog::build_option_model() wxString label, value, unit; if (!option_text(opt_id, pure_key, label, value, unit)) continue; - size_t cat_index = category_index_for(_L("Extruder"), Section::Printer, "custom-gcode_extruder", g, 0); + size_t cat_index = category_index_for(_L("Extruder"), Section::Printer, g, 0); size_t sub_index = subcategory_index_for(cat_index, subcategory, optgroup->icon); add_row_ui(pure_key, label, value, unit, cat_index, sub_index); } @@ -282,18 +304,15 @@ void PublishSettingsDialog::build_option_model() for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { const PublishMaterialIdentity identity = material_identity(slot, full); const wxString title = material_title(slot, bundle, full); - const size_t category_index = category_index_for(title, Section::Material, "custom-gcode_filament", g, slot, identity); + const size_t category_index = category_index_for(title, Section::Material, g, slot, identity); // Material requirement rows: an optional filament colour and/or a // vendor-agnostic material type for this slot, in their own optgroup so they // stay visually separated from the setting rows. { const size_t req_sub = subcategory_index_for(category_index, _L("Material"), "custom-gcode_filament"); - std::string hex; - if (const auto* colours = full.opt("filament_colour")) - if (slot < colours->size()) - hex = colours->get_at(slot); - add_row_ui("filament_colour", _L("Color"), from_u8(hex), wxString(), category_index, req_sub, RowKind::Color); + add_row_ui("filament_colour", _L("Color"), from_u8(filament_color_hex(full, slot)), wxString(), category_index, + req_sub, RowKind::Color); std::string type; if (const auto* types = full.opt("filament_type")) if (slot < types->size()) @@ -340,16 +359,10 @@ void PublishSettingsDialog::build_option_model() for (Tab* tab : wxGetApp().tabs_list) { if (tab->m_type != Preset::TYPE_PRINT) continue; - const auto& icon_map = tab->get_category_icon_map(); - size_t page_index = 0; + size_t page_index = 0; for (const PageShp& page : tab->m_pages) { - wxString category = Tab::translate_category(page->title(), tab->m_type); - // Page icon, keyed by the untranslated page title (per-Tab map). - std::string icon_name; - auto icon_it = icon_map.find(page->title()); - if (icon_it != icon_map.end()) - icon_name = icon_it->second; - const size_t category_index = category_index_for(category, Section::Print, icon_name, g, page_index); + wxString category = Tab::translate_category(page->title(), tab->m_type); + const size_t category_index = category_index_for(category, Section::Print, g, page_index); for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { for (const auto& opt : optgroup->opt_map()) { @@ -440,12 +453,10 @@ size_t PublishSettingsDialog::section_group_for(Section kind) } section.icon_bmp = ScalableBitmap(this, section.icon_name, 16); - constexpr long tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | - wxTR_FULL_ROW_HIGHLIGHT; - section.page = new wxPanel(m_outer_host, wxID_ANY); + section.page = new wxPanel(m_outer_host, wxID_ANY); section.page->SetBackgroundColour(GetBackgroundColour()); auto* page_sizer = new wxBoxSizer(wxVERTICAL); - section.tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, tab_style); + section.tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); section.tabs->SetFont(Label::Body_14); section.tabs->SetBackgroundColour(GetBackgroundColour()); page_sizer->Add(section.tabs, 0, wxEXPAND); @@ -466,12 +477,8 @@ size_t PublishSettingsDialog::section_group_for(Section kind) return new_index; } -size_t PublishSettingsDialog::category_index_for(const wxString& title, - Section section, - const std::string& icon_name, - size_t group, - size_t source_index, - const PublishMaterialIdentity& identity) +size_t PublishSettingsDialog::category_index_for( + const wxString& title, Section section, size_t group, size_t source_index, const PublishMaterialIdentity& identity) { for (size_t i : m_sections[group].categories) { Category& existing = m_categories[i]; @@ -485,7 +492,6 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, category.section = section; category.group = group; category.source_index = source_index; - category.icon_name = icon_name; category.filament_type = identity.type; category.filament_vendor = identity.vendor; category.filament_id = identity.id; @@ -494,13 +500,13 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, category.page->SetBackgroundColour(GetBackgroundColour()); auto* page_sizer = new wxBoxSizer(wxVERTICAL); + // The slot's colour chip decorates both the section header and the inner tab. + std::string hex; + if (section == Section::Material) + hex = filament_color_hex(wxGetApp().preset_bundle->full_config(), source_index); + if (section == Section::Material) { auto* header_sizer = new wxBoxSizer(wxHORIZONTAL); - std::string hex; - const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); - if (const auto* colours = full.opt("filament_colour")) - if (source_index < colours->size()) - hex = colours->get_at(source_index); if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); @@ -534,11 +540,6 @@ size_t PublishSettingsDialog::category_index_for(const wxString& title, m_categories.push_back(std::move(category)); m_sections[group].categories.push_back(category_index); if (section == Section::Material) { - std::string hex; - const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); - if (const auto* colours = full.opt("filament_colour")) - if (source_index < colours->size()) - hex = colours->get_at(source_index); if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) m_sections[group].tabs->AppendItem(title, *chip); else @@ -564,7 +565,7 @@ size_t PublishSettingsDialog::subcategory_index_for(size_t category_index, const if (!title.IsEmpty()) { sub.header = new ::StaticLine(category.scroll, false, title, icon); sub.header->SetFont(Label::Head_14); - sub.header->SetForegroundColour("#363636"); + sub.header->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); auto* wrap = new wxBoxSizer(wxVERTICAL); wrap->Add(sub.header, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); sub.item = category.list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(22)); @@ -594,7 +595,6 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, row.section_title = m_sections[category.group].title; row.outer_index = category.group; row.inner_index = category_index; - row.subcategory_index = subcategory_index; const size_t row_index = m_rows.size(); m_rows.push_back(std::move(row)); Row& current = m_rows[row_index]; @@ -628,10 +628,10 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, void PublishSettingsDialog::on_full_toggle(size_t category_index) { - Category& cat = m_categories[category_index]; - cat.full = cat.full_check->GetValue(); + Category& cat = m_categories[category_index]; + const bool full = cat.full_check->GetValue(); for (size_t r : cat.rows) - m_rows[r].check->Enable(!cat.full); + m_rows[r].check->Enable(!full); } void PublishSettingsDialog::set_row_bold(Row& row, bool bold) @@ -707,20 +707,30 @@ void PublishSettingsDialog::bind_tab_events() void PublishSettingsDialog::apply_filter(const wxString& filter_text) { - Freeze(); - wxString filter = filter_text.Lower(); + m_filter_mode = FilterMode::Text; + refresh_filter(filter_text.Lower()); +} - // Pseudo filters (menu only): show only checked ("::sel") or only unchecked ("::nonsel"). - const bool pseudo = (filter == "::sel" || filter == "::nonsel"); +void PublishSettingsDialog::apply_pseudo_filter(bool selected_only) +{ + m_filter_mode = selected_only ? FilterMode::SelectedOnly : FilterMode::UnselectedOnly; + refresh_filter(wxString()); // the pseudo modes ignore the search text +} + +void PublishSettingsDialog::refresh_filter(const wxString& filter) +{ + Freeze(); + const bool pseudo = m_filter_mode != FilterMode::Text; + const bool want_checked = m_filter_mode == FilterMode::SelectedOnly; m_fb_sizer->Show(!pseudo); + if (pseudo) { + // "×" marks the chip as a dismissible filter state (U+00D7, present in all UI fonts). + m_pseudo_chip->SetLabel((want_checked ? _L("Filter selected") : _L("Filter non-selected")) + " " + wxString::FromUTF8("\u00d7")); + } + m_pseudo_chip->Show(pseudo); // Row matches are computed first; page and optgroup visibility is applied below. if (pseudo) { - if (m_filter_ctrl->GetValue().Lower() != filter) { - m_filter_ctrl->ChangeValue(filter); - m_filter_ctrl->SetSelection(0, -1); - } - const bool want_checked = (filter == "::sel"); for (Row& row : m_rows) row.matches_filter = row.check->IsEnabled() && row.check->GetValue() == want_checked; } else { @@ -744,7 +754,7 @@ void PublishSettingsDialog::apply_filter(const wxString& filter_text) has_match = has_match || m_rows[r].matches_filter; category.info->Show(!has_match); if (!has_match) - category.info->SetLabel(pseudo ? (filter == "::sel" ? m_info_nonsel : m_info_allsel) : m_info_empty); + category.info->SetLabel(pseudo ? (want_checked ? m_info_nonsel : m_info_allsel) : m_info_empty); if (has_match && first_inner < 0) { first_outer = s; first_inner = static_cast(inner); @@ -818,10 +828,10 @@ bool PublishSettingsDialog::row_is_visible(const Row& row) const void PublishSettingsDialog::select_visible(bool value) { - wxString filter = m_filter_ctrl->GetValue().Lower(); // In a pseudo-filter view the rows being toggled would all disappear; drop the filter // afterwards so the result stays visible. - bool clear_pseudo = (!value && filter == "::nonsel") || (value && filter == "::sel"); + const bool clear_pseudo = (m_filter_mode == FilterMode::UnselectedOnly && !value) || + (m_filter_mode == FilterMode::SelectedOnly && value); // Toggle the rows visible under the *current* filter. for (Row& row : m_rows) @@ -838,7 +848,7 @@ void PublishSettingsDialog::select_visible(bool value) void PublishSettingsDialog::show_menu(wxMouseEvent& evt) { - bool filtering = !m_filter_ctrl->GetValue().IsEmpty(); + bool filtering = !m_filter_ctrl->GetValue().IsEmpty() || m_filter_mode != FilterMode::Text; bool list_empty = true; if (m_selected_outer >= 0) { for (const Row& row : m_rows) @@ -855,8 +865,10 @@ void PublishSettingsDialog::show_menu(wxMouseEvent& evt) m.Append(kPublishSelectVisible, _L("Select visible"))->Enable(!list_empty && filtering); m.Append(kPublishDeselectVisible, _L("Deselect visible"))->Enable(!list_empty && filtering); m.AppendSeparator(); - m.Append(kPublishFilterSelected, _L("Filter selected")); - m.Append(kPublishFilterNonSelected, _L("Filter nonSelected")); + m.AppendCheckItem(kPublishFilterSelected, _L("Filter selected")); + m.AppendCheckItem(kPublishFilterNonSelected, _L("Filter non-selected")); + m.Check(kPublishFilterSelected, m_filter_mode == FilterMode::SelectedOnly); + m.Check(kPublishFilterNonSelected, m_filter_mode == FilterMode::UnselectedOnly); m.Bind( wxEVT_MENU, @@ -866,8 +878,19 @@ void PublishSettingsDialog::show_menu(wxMouseEvent& evt) case kPublishDeselectAll: select_all(false); break; case kPublishSelectVisible: select_visible(true); break; case kPublishDeselectVisible: select_visible(false); break; - case kPublishFilterSelected: apply_filter("::sel"); break; - case kPublishFilterNonSelected: apply_filter("::nonsel"); break; + case kPublishFilterSelected: + // Clicking the active entry again clears the pseudo filter. + if (m_filter_mode == FilterMode::SelectedOnly) + apply_filter(m_filter_ctrl->GetValue()); + else + apply_pseudo_filter(true); + break; + case kPublishFilterNonSelected: + if (m_filter_mode == FilterMode::UnselectedOnly) + apply_filter(m_filter_ctrl->GetValue()); + else + apply_pseudo_filter(false); + break; default: break; } }, @@ -926,9 +949,9 @@ std::vector PublishSettingsDialog::GetPublishedM // The author's preset id distinguishes exact variants that share filament_id // ("Generic PLA" vs "Generic PLA Matte"), so the receiver can match precisely; the // preset name is the most direct identity and is matched first on load. - PresetBundle *bundle = wxGetApp().preset_bundle; + PresetBundle* bundle = wxGetApp().preset_bundle; if (bundle != nullptr && cat.filament_slot < bundle->filament_presets.size()) { - if (const Preset *preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) { + if (const Preset* preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) { entry.setting_id = preset->setting_id; entry.preset_name = preset->name; } @@ -995,22 +1018,15 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) m_menu_button->SetBitmap(m_menu.bmp()); m_outer_tabs->Rescale(); + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + for (Category& cat : m_categories) { - if (cat.icon != nullptr && cat.icon_bmp.bmp().IsOk()) { - cat.icon_bmp.msw_rescale(); - cat.icon->SetBitmap(cat.icon_bmp.bmp()); - } if (cat.full_check != nullptr) cat.full_check->Refresh(); if (cat.title_label != nullptr) cat.title_label->Refresh(); if (cat.filament_color_chip != nullptr) { - std::string hex; - const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); - if (const auto* colours = full.opt("filament_colour")) - if (cat.filament_slot < colours->size()) - hex = colours->get_at(cat.filament_slot); - if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, cat.filament_slot), "", FromDIP(12), FromDIP(12))) cat.filament_color_chip->SetBitmap(*chip); } cat.scroll->FitInside(); @@ -1033,16 +1049,11 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) } } - const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); for (size_t category_index = 0; category_index < m_categories.size(); ++category_index) { const Category& category = m_categories[category_index]; if (category.section != Section::Material) continue; - std::string hex; - if (const auto* colours = full.opt("filament_colour")) - if (category.filament_slot < colours->size()) - hex = colours->get_at(category.filament_slot); - if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), "", FromDIP(12), FromDIP(12))) { const SectionGroup& section = m_sections[category.group]; const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); if (iter != section.categories.end()) diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 74fc6a7077..b474baa938 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -73,14 +73,13 @@ private: RowKind kind{RowKind::Setting}; size_t outer_index{0}; size_t inner_index{0}; - size_t subcategory_index{0}; bool dirty{false}; // matches a dirty base key: pre-checked + bold bool matches_filter{false}; // survives the active filter (computed by apply_filter) wxCheckBox* check{nullptr}; wxStaticText* value_label{nullptr}; wxStaticText* unit_label{nullptr}; wxStaticBitmap* color_chip{nullptr}; // Color rows only; swatch next to the value - wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in its tab list sizer + wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in its tab list sizer }; // An optgroup heading. Rows store indices into m_rows. @@ -97,22 +96,17 @@ private: { wxString title; Section section{Section::Print}; - size_t group{0}; // index into m_sections / outer page - size_t source_index{0}; // stable source page or material slot index - std::string source_title; - std::string icon_name; + size_t group{0}; // index into m_sections / outer page + size_t source_index{0}; // stable source page or material slot index wxPanel* page{nullptr}; wxScrolledWindow* scroll{nullptr}; wxBoxSizer* list_sizer{nullptr}; wxStaticText* info{nullptr}; wxPoint scroll_pos{0, 0}; - ScalableBitmap icon_bmp; // scalable bitmap for DPI changes - wxStaticBitmap* icon{nullptr}; wxStaticBitmap* filament_color_chip{nullptr}; wxStaticText* title_label{nullptr}; // material title (static text; Full Publish carries the label elsewhere) // "Full Publish": while checked, the whole slot preset is serialized and its rows // (incl. Color/Type) are disabled. - bool full{false}; wxCheckBox* full_check{nullptr}; // Material identity, only for Section::Material categories. std::string filament_type; @@ -141,6 +135,12 @@ private: void build_option_model(); void apply_filter(const wxString& filter_text); + // Menu-only pseudo filters: show only the checked ("Filter selected") or only the + // unchecked ("Filter non-selected") rows. The search box keeps the user's text. + void apply_pseudo_filter(bool selected_only); + // Recompute row matches and visibility for the active filter mode. filter is the lowered + // search text; it is ignored by the pseudo modes. + void refresh_filter(const wxString& filter); void select_all(bool value); void select_visible(bool value); void show_menu(wxMouseEvent& evt); @@ -149,11 +149,19 @@ private: void on_full_toggle(size_t category_index); // Return/create the fixed outer page for a Section kind. size_t section_group_for(Section kind); - size_t category_index_for(const wxString& title, Section section, const std::string& icon_name, size_t group, - size_t source_index, const PublishMaterialIdentity& identity = PublishMaterialIdentity()); + size_t category_index_for(const wxString& title, + Section section, + size_t group, + size_t source_index, + const PublishMaterialIdentity& identity = PublishMaterialIdentity()); size_t subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon); - void add_row_ui(const std::string& key, const wxString& label, const wxString& value, const wxString& unit, - size_t category_index, size_t subcategory_index, RowKind kind = RowKind::Setting); + void add_row_ui(const std::string& key, + const wxString& label, + const wxString& value, + const wxString& unit, + size_t category_index, + size_t subcategory_index, + RowKind kind = RowKind::Setting); // The non-structural filament keys of a slot's preset, for a "Full Publish" entry. std::vector full_keys_for_slot() const; void save_scroll_position(Category& category); @@ -170,9 +178,15 @@ private: wxBoxSizer* m_outer_host_sizer{nullptr}; int m_selected_outer{-1}; wxBoxSizer* m_fb_sizer{nullptr}; // "All"/"None" buttons sizer + // Active filter mode: free text from the search box, or one of the menu's pseudo filters. + enum class FilterMode { Text, SelectedOnly, UnselectedOnly }; + FilterMode m_filter_mode{FilterMode::Text}; TextInput* m_filter_box{nullptr}; wxTextCtrl* m_filter_ctrl{nullptr}; wxStaticBitmap* m_menu_button{nullptr}; + // Shown while a pseudo filter is active (the search box keeps the user's text, so the chip + // carries the visible state); clicking it returns to text filtering. + wxStaticText* m_pseudo_chip{nullptr}; wxString m_info_nonsel; wxString m_info_allsel; wxString m_info_empty; From 71563cc6c6eb396631d55ad2a4c38eddfaf1308c Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 21 Aug 2026 18:13:18 +0800 Subject: [PATCH 035/208] Add filament_id plan v4: dissolve the Qidi QD_* island --- filament_id_plan_v4.md | 224 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 filament_id_plan_v4.md diff --git a/filament_id_plan_v4.md b/filament_id_plan_v4.md new file mode 100644 index 0000000000..046a7cae1c --- /dev/null +++ b/filament_id_plan_v4.md @@ -0,0 +1,224 @@ +# filament_id plan v4: dissolve the Qidi `QD_*` island + +Supersedes §0.2 of `filament_id_plan_v3.md` (the "`QD_*` island — untouched, forever" +decision) and amends every v3 section that carved out `QD_*`. Everything else in v3 — +the mint rule, the succession ledger, the BBL island, checks 1–9 — stands as +implemented (v3.0–v3.2, all gates green at commit `f7c1b290fd`). + +Decision driver: the island contradicts the catalog architecture v3 built. Qidi presets +carry 204 `QD___` ids over 264 declarations (49 families, +measured 2026-08-21) — one commercial product carries up to *five* ids (one per printer +series: `QIDI PLA Rapido` = `QD_0_1_1` … `QD_4_1_1`), which is exactly the +fragmentation v3 exists to remove. The island was frozen because Qidi's filament box +composes these ids from device enums and requires exactly-matching presets +(`QidiPrinterAgent.cpp:146-152`). But v3.0 shipped the machinery that makes freezing +unnecessary: the succession ledger already translates retired ids on resolution miss. +`QD_*` stops being a *preset id space* and becomes a *device protocol namespace*, +translated once at the agent edge. + +## 0. The architecture change + +Two tiers, **one** frozen island: + +1. **BBL island — untouched, unchanged.** All v3 reasoning holds (device/RFID/cloud + contract is external and opaque). +2. **Everything else converges on OFL product ids — now including Qidi.** All 204 + `QD_*` ids re-mint from their family triples and gain **retired** ledger entries + (not cross-island hints: after dissolution there is no island to own them, and + check 4's "never again" is exactly the guard we want against upstream re-adding + them). The box keeps working because `QidiPrinterAgent` resolves its composed + `QD_*` id through `resolve_filament_id_succession()` on miss — the same mechanism + every other retired id already uses. + +Why retire rather than hint (the one real design choice here): hints exist for ids a +*foreign catalog* owns and may legitimately re-ship (`GF*`). Post-dissolution, nothing +may ever re-ship a `QD_*` id in the profile tree — the device composes them at +runtime, the tree translates them. Retired entries make CI enforce that permanently +(`--update-snapshot` refuses resurrections, check 4 refuses occurrences); hints would +permit re-shipping, which is now always a regression. The QD→family mapping is +strictly 1:1 (verified: no `QD_*` id is claimed by more than one family), so the +mode-rule successor is unambiguous for every entry. + +## 1. What the dissolution consists of + +Three independent work packages, ordered for bisectability: + +- **(A) Re-converge the drifted tree** — prerequisite, not Qidi-specific. The + 2026-07 main merge (`f3fa3a34bd`) brought upstream vendor updates in pre-v3 style: + `--check` currently exits with **243 errors** (123 unsanctioned new ids, 46 new + instantiated own-key presets, 31 override drifts, 18 reserved-space claims, 5 + hint-keys re-declared — Qidi re-added `GFB99`/`GFG99`/`GFL99`, Snapmaker re-added + `GFG96`/`GFU99` and even four *retired* ids incl. `OGFL99`, plus Snapmaker U1 + triple errors and a GreenGate3D rename). This is the standing WF-B maintenance + pass; the dissolution's gates cannot go green on a red base. +- **(B) C++ succession hook in the Qidi agent** — safe to land before any data + changes (pure miss-path: while `QD_*` presets still exist, the hook never fires). +- **(C) The dissolution proper** — tooling flip + Qidi data fixes + re-mint + + snapshot/ledger regeneration, one vendor worksheet in the v3.2 mold. + +## 2. Runtime translation (work package B) + +`QidiPrinterAgent.cpp:183-192` currently: compose `setting_id` → keep it if a visible +base preset declares it → else degrade to `filament_id_by_type(tray_type)` (i.e. every +QIDI-brand box slot silently becomes Generic once the ids re-mint). Insert the +succession walk between those two steps: + +```cpp +} else if (!setting_id.empty() && has_visible_base_preset(bundle->filaments, setting_id)) { + tray.tray_info_idx = setting_id; +} else { + // Retired QD_* protocol ids forward to their minted successors via the shipped ledger. + const std::string successor = setting_id.empty() ? std::string() + : resolve_filament_id_succession(setting_id); + if (!successor.empty() && has_visible_base_preset(bundle->filaments, successor)) + tray.tray_info_idx = successor; + else + tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); +} +``` + +`resolve_filament_id_succession` is `Preset.hpp:119` (loads once, cycle-guarded, +empty-safe) — no new includes needed beyond what the file already reaches through +`PresetBundle`. This one hook covers both composition paths: the numeric-series +`build_setting_id` lambda *and* the non-numeric fallback +`map_filament_type_to_setting_id` (`:325-342`), whose four hardcoded returns +(`QD_1_0_1`/`_11`/`_41`/`_50` = Generic PLA/ABS/PETG/TPU 95A) become ledger keys in +package C. Keep that function as-is but extend its comment: the returned ids are +retired ledger keys by design, and `scripts/tests/test_filament_id.py` parses the +initializer (see §4 tests) — the Moonraker treatment (`MoonrakerPrinterAgent.cpp: +619-627`) of replacing the table with name lookups was considered and not taken: the +table already routes through the same ledger as the composed ids, and two translation +mechanisms in one agent is worse than one. + +Tests (same commit): + +- `tests/libslic3r/test_filament_id_succession.cpp`: add a section asserting a + `QD_`-shaped key forwards like any other (`{"QD_2_1_11", "OFnew001"}` resolves to + `"OFnew001"`) — pins that the walk is prefix-agnostic. +- `scripts/tests/test_filament_id.py`: new test parsing the four `QD_` literals out of + `QidiPrinterAgent.cpp::map_filament_type_to_setting_id` (mirror the parser in + `scripts/test_moonraker_lane_data.py`) and asserting each is a ledger key whose + chain terminates at a live tree id. **Add it marked expected-fail/skipped until + package C lands, then flip it on** — it is the permanent code↔ledger lockstep guard. + +## 3. Tooling and validation flip (work package C, first commit) + +All in `scripts/assign_filament_ids.py`; every touched line measured 2026-08-21: + +- `is_island_declaration` (`:327-329`) → `return vendor == "BBL"`. This single change + pulls every `QD_*` declarer into the triple bookkeeping (`:385`) and thus into + checks 3 and 8, into `--remint`'s domain (`:1464`), and out of the hint-key + tolerances (`:877`, `:1100`). +- `reserved_space_owner` (`:596-604`): `QD_*` returns `(True, None)` — reserved, + ownerless, exactly like the P-hex/user-custom space. Consequences, all wanted: + check 6 refuses any future vendor claim; the `--update-snapshot` sanction gate + (`:938-963`) refuses new `QD_*` ids outright; the vanish path (`:994`) routes + `QD_*` to **retired** (owner `None` ≠ island), not released-with-hint. Update the + two message sites that render `owner is None` as "reserved for user-custom presets" + (`:628` docstring, `:958`, and check 6's copy) to name the space generically or + special-case `QD_*` ("Qidi device protocol; dissolved island — retired, never + declarable"). +- Check 1 (`:667-668`): delete the `vendor == "Qidi" and fid.startswith("QD_")` + exemption. +- Module docstring (`:27-45`): rewrite the `QD_*` bullet — reserved space stays + listed, but as "device protocol namespace, translated via the succession ledger; + dissolved as a catalog island in v4, may never be declared". +- `scripts/tests/test_filament_id.py`: update the three island assertions — + `reserved_space_owner("QD_X4_PLA")` → `(True, None)` (`:403`), + `is_island_declaration("Qidi", "QD_X4_PLA")` → `False` (`:413`), and the + reserved-space message case (`:570`). + +No changes to the ledger schema, the C++ checks, `--retire` (post-flip it accepts +`QD_*` olds automatically — they are non-island now), or the validator: check 3's +"non-BBL, non-`QD_*`" phrasing in v3 §3 was always implemented as "non-island", so the +flip *is* the spec change. + +## 4. Migration phases + +**v4.0 — re-converge the drifted tree (package A).** Per-vendor WF-B worksheets over +the 243 errors: Snapmaker U1 (triple divergence `Generic|Snapmaker|snapmaker`, empty +vendors, four resurrected retired ids — these force re-mints since retirement is +permanent), BBL/addnorth `GF_AN*` overrides (BBL island: grandfather via snapshot, +they are BBL-internal), Qidi/Snapmaker re-declared hint keys (re-mint those declarers, +the check's own prescription), GreenGate3D rename, then `--update-snapshot` (new +upstream `QD_*` ids sanction cleanly — the island is still intact in this phase) and +the full v3 §5 gate battery. Bump `version` in every touched +`resources/profiles/.json`. **Do not start v4.2 until `--check` exits 0.** + +**v4.1 — the agent hook (package B).** §2 as written; `libslic3r_tests` + +`scripts/tests/test_filament_id.py` green; behavior-neutral by construction (no `QD_*` +ledger entries exist yet). + +**v4.2 — the dissolution (package C).** One Qidi worksheet, v3.2 machinery: + +1. Tooling flip commit (§3). `--check` now reports the Qidi island as + non-conformant — expected, red only between commits of this phase. +2. Data fixes, before any re-mint (the v3 "W3 lands first" lesson — type/vendor are + key components): add `filament_vendor: ["QIDI"]` at each QIDI-brand family's + inheritance apex so all declarers resolve it (39 of 49 families currently resolve + none — check 8a would refuse the mint). Verify the six Generic families + (`Generic PLA/ABS/PETG/PC/TPU 95A/PLA Silk`) resolve triples identical to their + OFL counterparts (vendor `Generic`, OFL's `filament_type`) so they *converge onto + the OFL ids* by triple math — the whole point; any mismatch is a W3-style data fix + here, not a fork. No `inherits`/`compatible_printers` re-pointing anywhere: the + series intermediates (`Generic PLA@Q2-Series` etc., all `instantiation: false`) + simply keep declarations whose values become the OFL ids. +3. `python scripts/assign_filament_ids.py --remint Qidi` — rewrites all 264 + declarations in place to their family mints (same triple ⇒ same id across a + family's series intermediates and per-nozzle declarers; convergence with OFL ids + is legal by design, `want_id` already permits same-triple collisions `:1447`). +4. `--update-snapshot` — retires every vanished `QD_*` id with its mode-rule + successor. **Audit the ledger diff: all ~204 new entries must be `QD_*`→non-null.** + A null successor (possible only for a declared-only id with zero instantiated + claims) gets an explicit `--retire "QD_x=OFy"` with the family's minted id. +5. Un-skip the §2 lockstep test. Bump `resources/profiles/Qidi.json` version. Full + gate battery (§5). + +Known residue, accepted: `QIDI PC-ABS-FR` (series 1–2) vs `QIDI PC/ABS-FR` +(series 3–4) are two preset-name families for one product → two ids. Renames were +ruled out in v3 (`renamed_from` rejected for migrations); if upstream ever unifies the +name, content-addressing re-ids and the ledger absorbs it — self-healing, no action +now. + +**v4.3 — OFL consolidation (unchanged).** v3.3 stays optional and id-stable; QIDI-brand +families are vendor-unique and stay in the Qidi bundle. + +## 5. Gates (per phase, delta from v3 §5) + +Unchanged battery: `orca_extra_profile_check.py` exit 0, `assign_filament_ids.py +--check` exit 0, `scripts/tests/test_filament_id.py` all green, `libslic3r_tests` +green, validator `-l 2` tree-wide + `-f` tree-wide + `-v Qidi` exit 0, custom-preset +fixture archives (v4.2 touches no preset visibility, but they are cheap insurance — +run them for v4.0, which touches instantiation-adjacent upstream drift), flatten +config-equivalence. New for v4.2: equivalence diff may contain **only** `filament_id` +value changes (QD→OF) and the added `filament_vendor` keys on QIDI-brand families; +ledger diff audit per §4.4; the map-literal lockstep test. Manual release-checklist +item: Qidi box smoke test — slot holding a QIDI-brand material must surface the brand +preset (not Generic) on an updated client, via the memory-documented local Klipper +test rig. + +## 6. Accepted costs (explicit, new relative to v3) + +- **Every Qidi box slot resolves through the ledger miss-path forever** (one hash-map + walk per slot per status poll — negligible, and structurally identical to how + every retired id already resolves). The QD→OF translation table is maintained by + the retirement machinery, not by hand. +- **Older Orca clients** (pre-v4 profiles) paired with re-minted profile trees lose + QIDI-brand slot matching (they look up `QD_*` and fall back generic-by-type — the + degradation the hook removes for updated clients). Same one-time field-transition + shape v3 §6 already accepted for AMS/AFC ids. +- **Two ids for PC-ABS-FR** until upstream unifies the family name (§4 residue). + +## 7. Evidence + +Measured on this tree 2026-08-21 unless cited to v3: 204 distinct `QD_*` ids / 264 +declaring presets / 49 families, QD→family strictly 1:1, per-series id sets +(`QD_0..4_1_1` = `QIDI PLA Rapido` etc.); 39 families resolve no `filament_vendor`; +declarations live on `instantiation:false` series intermediates (Q2/Q2C/X5/X4) and +per-nozzle X-Plus-4 presets; composition + miss-fallback at +`QidiPrinterAgent.cpp:146-152, 183-192`, hardcoded fallback table `:325-342`; +succession helpers `Preset.hpp:109-119`; ledger = 575 retired + 194 hints, zero `QD_*` +entries; snapshot holds 160 of the 204 (the 44 newcomers are post-merge drift); +`--check` = 243 errors, categorized in §1(A); island exemption mechanics at +`assign_filament_ids.py:327-329, 385, 596-604, 667, 877, 994, 1464, 1514`; `--remint` +same-triple convergence guard `:1447-1453`; retirement-permanence gate `:965-976`. From 58d1a3b093e050c6ba176171dc48224b17a1984d Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 21 Aug 2026 18:13:18 +0800 Subject: [PATCH 036/208] filament_id v4.0: re-converge post-merge drift (Qidi/Snapmaker/re3D) The 2026-08 main merge brought upstream vendor updates in pre-v3 style; assign_filament_ids.py --check reported 243 errors. Re-converged per plan v4 SS1(A)/SS4: - Qidi X5: 12 brand presets had copied BBL catalog ids (GFB99/GFG99/GFL99); re-minted to their product triples (PolyLite PLA converges onto OF5CgdDq). - Snapmaker U1: fixed empty/lowercase/wrong filament_vendor on 5 bases (triple inputs, W3-style); re-minted 24 declarations, resurrecting no retired ids (11813638720/141703112701/1417031127011/OGFL99 all re-minted away; base2 duplicates converge onto their families' v3.2 ids). - re3D: rPETG had copied GFG01 (BBL space); re-minted to OFmCOW2Y. The GreenGate3D bundle was removed upstream with its product relocated here; retired OFSTCno1 -> OFmCOW2Y so shipped references keep resolving. - validator -f: resolved 34 AMS-match ambiguities using the v3 mechanisms: salt-1 ids on the 5 re3D root presets and Snapmaker PLA-CF @U1 0.4 (duplicate presets of one product; deletion forbidden), own minted ids for the 4 cross-family riders (Polymaker General/Silk/Tough PLA Family, Snapmaker PLA Full Spectrum). - Snapshot re-sanctioned (+92 ids incl. 44 new QD_4_* island ids and BBL addnorth GF_AN*); ledger +1 entry (OFSTCno1). Gates: --check 0; orca_extra_profile_check 0/0; 116 script tests OK; validator base + -f exit 0. Vendor versions bumped (Qidi, Snapmaker, re3D). --- resources/profiles/Qidi.json | 2 +- .../Qidi/filament/X5/Bambu ABS @X-Plus 5.json | 2 +- .../filament/X5/Bambu PETG @X-Plus 5.json | 2 +- .../Qidi/filament/X5/Bambu PLA @X-Plus 5.json | 2 +- .../filament/X5/Generic PLA+ @X-Plus 5.json | 2 +- .../filament/X5/HATCHBOX ABS @X-Plus 5.json | 2 +- .../filament/X5/HATCHBOX PETG @X-Plus 5.json | 2 +- .../filament/X5/HATCHBOX PLA @X-Plus 5.json | 2 +- .../filament/X5/Overture ABS @X-Plus 5.json | 2 +- .../filament/X5/Overture PLA @X-Plus 5.json | 2 +- .../filament/X5/PolyLite ABS @X-Plus 5.json | 2 +- .../filament/X5/PolyLite PLA @X-Plus 5.json | 2 +- .../X5/Polymaker PLA-HT @X-Plus 5.json | 2 +- resources/profiles/Snapmaker.json | 2 +- .../Polymaker General PLA Family @U1.json | 1 + .../filament/Polymaker PLA @U1 base.json | 4 +- .../Polymaker Silk PLA Family @U1.json | 1 + .../Polymaker Tough PLA Family @U1.json | 1 + .../filament/Snapmaker PETG HF @U1 base2.json | 4 +- .../Snapmaker PETG Translucent @U1 base.json | 2 +- .../Snapmaker PLA Basic @U1 base.json | 5 +- ...aker PLA Full Spectrum @U1 0.4 nozzle.json | 1 + .../filament/Snapmaker PLA Glow @U1 base.json | 2 +- .../Snapmaker PLA Matte @U1 base2.json | 5 +- .../Snapmaker PLA Silk @U1 0.2 nozzle.json | 2 +- .../Snapmaker PLA Silk @U1 0.6 nozzle.json | 2 +- .../Snapmaker PLA Silk @U1 0.8 nozzle.json | 2 +- .../filament/Snapmaker PLA Silk @U1.json | 2 +- .../Snapmaker PLA SnapSpeed @U1 base2.json | 4 +- .../Snapmaker PLA Translucent @U1 base.json | 2 +- .../Snapmaker PLA Wood @U1 0.4 nozzle.json | 2 +- .../Snapmaker PLA Wood @U1 0.6 nozzle.json | 2 +- .../Snapmaker PLA Wood @U1 0.8 nozzle.json | 2 +- .../Snapmaker PLA-CF @U1 0.4 nozzle.json | 2 +- .../Snapmaker PLA-CF @U1 0.6 nozzle.json | 2 +- .../Snapmaker PLA-CF @U1 0.8 nozzle.json | 2 +- .../Snapmaker TPU 90A @U1 0.6 nozzle.json | 2 +- .../Snapmaker TPU 90A @U1 0.8 nozzle.json | 2 +- .../filament/Snapmaker TPU 90A @U1.json | 2 +- .../Snapmaker TPU 95A HF @U1 0.6 nozzle.json | 2 +- .../Snapmaker TPU 95A HF @U1 0.8 nozzle.json | 2 +- .../filament/Snapmaker TPU 95A HF @U1.json | 2 +- resources/profiles/re3D.json | 2 +- resources/profiles/re3D/filament/re3D PC.json | 2 +- .../profiles/re3D/filament/re3D PETG.json | 2 +- .../profiles/re3D/filament/re3D PLA.json | 2 +- .../re3D/filament/re3D rPETG @0.8 nozzle.json | 2 +- .../filament/re3D rPETG @1.75 nozzle.json | 2 +- .../profiles/re3D/filament/re3D rPETG.json | 2 +- .../profiles/re3D/filament/re3D rPP.json | 2 +- resources/profiles/retired_filament_ids.json | 6 + scripts/filament_id_snapshot.json | 520 +++++++++++++++++- 52 files changed, 566 insertions(+), 68 deletions(-) diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 08a2d6a230..ecceff5a8a 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.10", + "version": "02.04.00.11", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json index 1464576f61..0e0fdb08b0 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "name": "Bambu ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json index 0a4d2ce22c..ef6ea57354 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "name": "Bambu PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json index 7660c8174d..ad90cb8a81 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "name": "Bambu PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json index e1d40b179f..72d7b6f9c6 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFEWYR89", "name": "Generic PLA+@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json index 3f5987240c..323fcf3e90 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "name": "HATCHBOX ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json index 5f794e561c..6f0495c45b 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "name": "HATCHBOX PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json index 094e540793..7ee05c27f7 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "name": "HATCHBOX PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json index ea12b78ead..82863e8d80 100644 --- a/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "name": "Overture ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json index 571eb2bbeb..0dbb498feb 100644 --- a/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "name": "Overture PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json index 48b6caa32b..1cf57f8ce3 100644 --- a/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "name": "PolyLite ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json index 5b37f7ae8a..4702c9ba1c 100644 --- a/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "name": "PolyLite PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json index f3c54e81f1..233542bab1 100644 --- a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFfYHK5z", "name": "Polymaker PLA-HT@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 9a6fab7942..65b1d12a3a 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.09", + "version": "02.04.00.10", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json index c706ba776d..0e743d7aee 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "thXfSaUkOAKJ50ey", + "filament_id": "OF44ERDr", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json index b27c48f720..ae420e8912 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL99", + "filament_id": "OFelDBgv", "instantiation": "false", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" @@ -48,7 +48,7 @@ "nil" ], "filament_vendor": [ - "Generic" + "Polymaker" ], "filament_scarf_seam_type": [ "none" diff --git a/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json index b6bd119022..990cc483f3 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "h8vIYpXbxFtHPV6e", + "filament_id": "OFH57ibH", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json index e5c2c7d7f6..1dad000fb2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "d6CC81Es2hp46bto", + "filament_id": "OFgdaBOt", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json index 0ad75759a1..4f934b93a3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG HF @U1 base2", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFG96", + "filament_id": "OFL9aRjN", "instantiation": "false", "cool_plate_temp": [ "0" @@ -177,7 +177,7 @@ "nil" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_prime_volume": [ "45" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json index eb18fb4838..6b51cd2535 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PETG Translucent @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "PETG_TRANSLUCENT_001", + "filament_id": "OFW8lqnb", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json index adf7624e1f..d6e7e209c6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json @@ -2,8 +2,11 @@ "type": "filament", "name": "Snapmaker PLA Basic @U1 base", "from": "system", - "filament_id": "1417031127011", + "filament_id": "OFhmxnYw", "instantiation": "false", + "filament_vendor": [ + "Snapmaker" + ], "filament_end_gcode": [ "" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json index 990e67a79e..219e8075e5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "iybaFWrXKOsmXgMJ", + "filament_id": "OFOPU1xv", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json index ad3c1f4bbb..e69ca63254 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Glow @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "SPGLOW001", + "filament_id": "OFfD87Gy", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json index 6c0dcf26fd..109dbc19e7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json @@ -2,8 +2,11 @@ "type": "filament", "name": "Snapmaker PLA Matte @U1 base2", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFF9cgY5", "instantiation": "false", + "filament_vendor": [ + "Snapmaker" + ], "filament_end_gcode": [ "" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json index 5eb860506c..e4fdb8016b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "Q5xH6oGGlbXr14Pa", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json index 5df6ff5a3a..b144ce86dd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "2pieDQoz9PiDCnU1", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json index 0758372ea0..aa92e97d18 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "f3H0JFUnds0mkKCN", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json index c68904ffd9..6b6030b919 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "9PkHSwtXFM0zPWth", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json index 84889e3d9b..41876b04bb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA SnapSpeed @U1 base2", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFwhLMs4", "instantiation": "false", "activate_air_filtration": [ "0" @@ -195,7 +195,7 @@ "100" ], "filament_vendor": [ - "snapmaker" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json index 4f4842ae1d..1ed79183c9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Translucent @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "SPTR001", + "filament_id": "OFLTYJW0", "instantiation": "false", "filament_end_gcode": [ "" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json index 4768ac2783..283d5876b7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XvizDDHbds3bVrzi", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json index 43d306ebae..09555457d5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Kp77DCcitdmoyjqm", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json index da788a35fb..4a5a04a5ee 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "nBYnNiqwLo6nAsqi", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json index b986a7244a..44aeab2a48 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "2INwruC3ZVkBTdUT", - "filament_id": "GFL98111", + "filament_id": "OFf52D4e", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json index dcb6392634..6f09ea5d6a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CKfdL85SvbOLzMuP", - "filament_id": "GFL98111", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json index 1e6e961497..564e59e1a9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "fhhnfJm4dN9FXpWQ", - "filament_id": "GFL98111", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json index 6ae8a5b675..afb529e983 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "uQCplebxmpBpzsnk", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json index 45f0f7a0e9..8cf3452469 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "w4Hpl2qNPmgNvaeM", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.5" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json index e89397849b..8f6ba9663f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "T4MmgICRrSzvmCZ5", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json index 1085c84e6f..b9619dcca5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "Q2svXpkEqg0dCdq3", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json index bef4c7712f..4283ac2651 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "RjsE08h3l37cAkAs", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json index 5e0696d906..816b78ceb8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "KwcwmV2UmZUgCBoz", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/re3D.json b/resources/profiles/re3D.json index 94cca3c2ef..9a00807c1a 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,7 +1,7 @@ { "name": "re3D", "url": "", - "version": "03.00.08", + "version": "03.00.09", "force_update": "0", "description": "re3D configurations", "machine_model_list": [ diff --git a/resources/profiles/re3D/filament/re3D PC.json b/resources/profiles/re3D/filament/re3D PC.json index d06438c3bd..dbd43758de 100644 --- a/resources/profiles/re3D/filament/re3D PC.json +++ b/resources/profiles/re3D/filament/re3D PC.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "OFU3QXL7", + "filament_id": "OFwbsgWj", "setting_id": "eSR00TZTotTvJs8l", "filament_settings_id": [ "re3D PC" diff --git a/resources/profiles/re3D/filament/re3D PETG.json b/resources/profiles/re3D/filament/re3D PETG.json index 8337cbf61a..273ef5165b 100644 --- a/resources/profiles/re3D/filament/re3D PETG.json +++ b/resources/profiles/re3D/filament/re3D PETG.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "OF3F63OE", + "filament_id": "OFX0etlv", "setting_id": "msXDK31R8KOvqNqK", "filament_settings_id": [ "re3D PETG" diff --git a/resources/profiles/re3D/filament/re3D PLA.json b/resources/profiles/re3D/filament/re3D PLA.json index 5e8bf16a63..7637049e80 100644 --- a/resources/profiles/re3D/filament/re3D PLA.json +++ b/resources/profiles/re3D/filament/re3D PLA.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "OFRyOsZj", + "filament_id": "OFDdEaoL", "setting_id": "nPpDwvFg7WQr7K3t", "filament_settings_id": [ "re3D PLA" diff --git a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json index 0ac0d012f5..ffe4277113 100644 --- a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFmCOW2Y", "setting_id": "WlELqPVnuL7DaTxs", "name": "re3D rPETG @0.8 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json index 8cd090fc06..888880055f 100644 --- a/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFmCOW2Y", "setting_id": "sHzO2S3mmE6Iqs2O", "name": "re3D rPETG @1.75 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPETG.json b/resources/profiles/re3D/filament/re3D rPETG.json index fe19f12539..85f359d828 100644 --- a/resources/profiles/re3D/filament/re3D rPETG.json +++ b/resources/profiles/re3D/filament/re3D rPETG.json @@ -5,7 +5,7 @@ "renamed_from": "re3D Greengate rPETG", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG01", + "filament_id": "OFD8loeT", "setting_id": "6aESuJ2S2Kogd4Lq", "filament_settings_id": [ "re3D rPETG" diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json index 057e88413b..c4d2d776a9 100644 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ b/resources/profiles/re3D/filament/re3D rPP.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pp", - "filament_id": "OFfHGM1D", + "filament_id": "OFm8rqoY", "setting_id": "8PB62qm5Cd3SHLf4", "filament_settings_id": [ "re3D rPP" diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index fd99602923..241b4cbb9f 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -2328,6 +2328,12 @@ ], "successor": "OFhQfUQY" }, + "OFSTCno1": { + "claims": [ + "re3D/re3D Greengate rPETG" + ], + "successor": "OFmCOW2Y" + }, "OGFA00": { "claims": [ "OrcaFilamentLibrary/Bambu PLA Basic" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 4349592b25..c8ae5b34be 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -163,6 +163,33 @@ "Artillery/Artillery TPU", "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", "BBL/Generic SBS", + "BBL/addnorth ABS rABS", + "BBL/addnorth PA Adura", + "BBL/addnorth PA Adura FDA", + "BBL/addnorth PA-CF Adura X", + "BBL/addnorth PA6 Addlantis", + "BBL/addnorth PC BLend HT LCF", + "BBL/addnorth PETG Base", + "BBL/addnorth PETG ESD", + "BBL/addnorth PETG Economy", + "BBL/addnorth PETG Flame v0", + "BBL/addnorth PETG PRO Matte", + "BBL/addnorth PETG rPETG Matte", + "BBL/addnorth PETG-CF Rigid X", + "BBL/addnorth PLA E-PLA", + "BBL/addnorth PLA Economy", + "BBL/addnorth PLA HT-PLA PRO Matte", + "BBL/addnorth PLA Premium Silk", + "BBL/addnorth PLA Textura", + "BBL/addnorth PLA Wood", + "BBL/addnorth PLA X-PLA", + "BBL/addnorth PLA X-PLA High Speed", + "BBL/addnorth PLA rPLA RE-ADD", + "BBL/addnorth PLA-CF Carbon Fiber", + "BBL/addnorth PVDF Adamant S1", + "BBL/addnorth TPU EasyFlex", + "BBL/addnorth TPU Pro Matte 85A", + "BBL/addnorth TPU Pro Matte 95A", "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", "Chuanying/Chuanying Generic HIPS", "Chuanying/Chuanying Generic PVA", @@ -989,6 +1016,9 @@ "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", + "Snapmaker/Polymaker General PLA Family @U1", + "Snapmaker/Polymaker Silk PLA Family @U1", + "Snapmaker/Polymaker Tough PLA Family @U1", "Snapmaker/Snapmaker ABS Benchy @U1", "Snapmaker/Snapmaker Dual ABS Benchy", "Snapmaker/Snapmaker Dual TPE", @@ -997,7 +1027,12 @@ "Snapmaker/Snapmaker J1 TPE", "Snapmaker/Snapmaker J1 TPU High-Flow", "Snapmaker/Snapmaker PET @Dual", + "Snapmaker/Snapmaker PLA Full Spectrum @U1 0.4 nozzle", "Snapmaker/Snapmaker PLA Matte @U1", + "Snapmaker/Snapmaker PLA Silk @U1", + "Snapmaker/Snapmaker PLA Silk @U1 0.2 nozzle", + "Snapmaker/Snapmaker PLA Silk @U1 0.6 nozzle", + "Snapmaker/Snapmaker PLA Silk @U1 0.8 nozzle", "Snapmaker/Snapmaker TPE", "Snapmaker/Snapmaker TPE @U1", "Snapmaker/Snapmaker TPU High-Flow @U1", @@ -1216,6 +1251,9 @@ "GFA18": [ "BBL/Bambu PLA Lite" ], + "GFA19": [ + "BBL/Bambu PLA Pure" + ], "GFA50": [ "BBL/Bambu PLA-CF" ], @@ -1574,6 +1612,87 @@ "GFU99": [ "BBL/Generic TPU" ], + "GF_ANAD": [ + "BBL/addnorth PA Adura" + ], + "GF_ANAF": [ + "BBL/addnorth PA Adura FDA" + ], + "GF_ANAX": [ + "BBL/addnorth PA-CF Adura X" + ], + "GF_ANEF": [ + "BBL/addnorth TPU EasyFlex" + ], + "GF_ANEG": [ + "BBL/addnorth PETG ESD" + ], + "GF_ANEP": [ + "BBL/addnorth PLA E-PLA" + ], + "GF_ANGE": [ + "BBL/addnorth PETG Economy" + ], + "GF_ANHTP": [ + "BBL/addnorth PLA HT-PLA PRO Matte" + ], + "GF_ANLA": [ + "BBL/addnorth PA6 Addlantis" + ], + "GF_ANPBX": [ + "BBL/addnorth PC BLend HT LCF" + ], + "GF_ANPCF": [ + "BBL/addnorth PLA-CF Carbon Fiber" + ], + "GF_ANPE": [ + "BBL/addnorth PETG Base" + ], + "GF_ANPF": [ + "BBL/addnorth PETG Flame v0" + ], + "GF_ANPL": [ + "BBL/addnorth PLA Economy" + ], + "GF_ANPLW": [ + "BBL/addnorth PLA Wood" + ], + "GF_ANPM": [ + "BBL/addnorth PETG PRO Matte" + ], + "GF_ANPS": [ + "BBL/addnorth PLA Premium Silk" + ], + "GF_ANPV": [ + "BBL/addnorth PVDF Adamant S1" + ], + "GF_ANRA": [ + "BBL/addnorth ABS rABS" + ], + "GF_ANRM": [ + "BBL/addnorth PETG rPETG Matte" + ], + "GF_ANRPL": [ + "BBL/addnorth PLA rPLA RE-ADD" + ], + "GF_ANRX": [ + "BBL/addnorth PETG-CF Rigid X" + ], + "GF_ANTA": [ + "BBL/addnorth TPU Pro Matte 85A" + ], + "GF_ANTE": [ + "BBL/addnorth PLA Textura" + ], + "GF_ANTM": [ + "BBL/addnorth TPU Pro Matte 95A" + ], + "GF_ANXP": [ + "BBL/addnorth PLA X-PLA" + ], + "GF_ANXPH": [ + "BBL/addnorth PLA X-PLA High Speed" + ], "OF016CJw": [ "Sovol/Sovol SV08 ABS" ], @@ -1775,6 +1894,9 @@ "OF43Raws": [ "Snapmaker/PolyTerra J1 PLA" ], + "OF44ERDr": [ + "Snapmaker/Polymaker General PLA Family" + ], "OF44VYzK": [ "OrcaFilamentLibrary/FilAr PETG Azul Francia" ], @@ -2256,6 +2378,9 @@ "OFD6kN7F": [ "OrcaArena/OrcaArena Generic PLA" ], + "OFD8loeT": [ + "re3D/re3D rPETG" + ], "OFD9taow": [ "FlyingBear/FlyingBear PLA Hyper" ], @@ -2290,6 +2415,9 @@ "Sovol/Generic PLA", "Z-Bolt/Generic PLA" ], + "OFDdEaoL": [ + "re3D/re3D PLA" + ], "OFDe8uyM": [ "OrcaFilamentLibrary/Valment PLA" ], @@ -2486,6 +2614,9 @@ "OFH2nN08": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" ], + "OFH57ibH": [ + "Snapmaker/Polymaker Silk PLA Family" + ], "OFH5UH6P": [ "Flashforge/Flashforge ABS-GF" ], @@ -2715,6 +2846,9 @@ "OFKyCgaK": [ "Anycubic/Anycubic Generic PLA" ], + "OFL9aRjN": [ + "Snapmaker/Snapmaker PETG HF" + ], "OFLAXKqP": [ "WonderMaker/WonderMaker TPU 95A" ], @@ -2743,6 +2877,9 @@ "OrcaFilamentLibrary/Generic ASA", "RH3D/Generic ASA" ], + "OFLTYJW0": [ + "Snapmaker/Snapmaker PLA Translucent" + ], "OFLXvuMr": [ "Elegoo/Elegoo Rapid PETG", "OrcaFilamentLibrary/Elegoo Rapid PETG" @@ -2954,6 +3091,9 @@ "OFOKYhi6": [ "Prusa/Prusa Generic PETG HF" ], + "OFOPU1xv": [ + "Snapmaker/Snapmaker PLA Full Spectrum" + ], "OFObG16Q": [ "InfiMech/InfiMech PLA Basic" ], @@ -3188,9 +3328,6 @@ "OFSStjay": [ "FLSun/FLSun S1 PLA Silk" ], - "OFSTCno1": [ - "re3D/re3D Greengate rPETG" - ], "OFSa39yP": [ "Snapmaker/Snapmaker J1 PLA" ], @@ -3352,6 +3489,9 @@ "OFW5FqkL": [ "Qidi/QIDI PLA Rapido Silk" ], + "OFW8lqnb": [ + "Snapmaker/Snapmaker PETG Translucent" + ], "OFW9uIkE": [ "Tiertime/Tiertime Generic HIPS" ], @@ -3409,6 +3549,9 @@ "OFWzr7m0": [ "Anycubic/Anycubic Generic PETG" ], + "OFX0etlv": [ + "re3D/re3D PETG" + ], "OFX0ycRQ": [ "OrcaFilamentLibrary/Fiberon PA12-CF" ], @@ -3424,6 +3567,9 @@ "OFXJ9iom": [ "iQ/Grauts HPP4GF25 P1" ], + "OFXSvqOX": [ + "Snapmaker/Snapmaker TPU 95A HF" + ], "OFXTPuqV": [ "OrcaFilamentLibrary/Elas PETG Basic" ], @@ -3473,6 +3619,9 @@ "OFY3AB7j": [ "Snapmaker/Snapmaker J1 PLA Matte" ], + "OFY7jxcS": [ + "Snapmaker/Snapmaker TPU 90A" + ], "OFY9muEs": [ "Anycubic/Generic ABS", "Creality/Generic ABS", @@ -3738,6 +3887,9 @@ "OFdb8YNz": [ "OrcaFilamentLibrary/FilAr PLA Verde Manzana" ], + "OFdd8ZqJ": [ + "Snapmaker/Snapmaker PLA Wood" + ], "OFdkWDiy": [ "Cubicon/Cubicon PLAi21" ], @@ -3822,6 +3974,9 @@ "OFf0MkD5": [ "Qidi/QIDI PETG Translucent" ], + "OFf52D4e": [ + "Snapmaker/Snapmaker PLA-CF" + ], "OFf5awy4": [ "OrcaFilamentLibrary/Eolas Prints PLA Matte" ], @@ -3837,6 +3992,9 @@ "OFfBpSRI": [ "OrcaFilamentLibrary/Bambu ASA" ], + "OFfD87Gy": [ + "Snapmaker/Snapmaker PLA Glow" + ], "OFfHGM1D": [ "re3D/re3D rPP" ], @@ -3846,6 +4004,9 @@ "OFfSqS4R": [ "Creality/ENDER FAST PLA" ], + "OFfYHK5z": [ + "Qidi/Polymaker PLA-HT" + ], "OFfZ0lTS": [ "Qidi/Qidi Generic PETG-CF" ], @@ -3943,6 +4104,9 @@ "OFgcryz4": [ "Ratrig/RatRig BigNozzle ASA" ], + "OFgdaBOt": [ + "Snapmaker/Polymaker Tough PLA Family" + ], "OFgeM7nD": [ "Flashforge/Flashforge PA12-CF" ], @@ -4030,6 +4194,9 @@ "BBL/COEX PLA", "OrcaFilamentLibrary/COEX PLA" ], + "OFhmxnYw": [ + "Snapmaker/Snapmaker PLA Basic" + ], "OFhuaUQB": [ "OrcaFilamentLibrary/Bambu ABS", "Qidi/Bambu ABS" @@ -4272,6 +4439,12 @@ "OFm70lLt": [ "CoLiDo/CoLiDo PLA" ], + "OFm8rqoY": [ + "re3D/re3D rPP" + ], + "OFmCOW2Y": [ + "re3D/re3D rPETG" + ], "OFmFwUWM": [ "Prusa/Prusament ASA" ], @@ -4849,6 +5022,9 @@ "OFwaYjL6": [ "OrcaFilamentLibrary/Fiberon PA6-GF" ], + "OFwbsgWj": [ + "re3D/re3D PC" + ], "OFwhLMs4": [ "Snapmaker/Snapmaker PLA SnapSpeed" ], @@ -5496,20 +5672,146 @@ ], "QD_3_1_8": [ "Qidi/QIDI PLA Matte Basic" + ], + "QD_4_0_1": [ + "Qidi/Generic PLA" + ], + "QD_4_0_11": [ + "Qidi/Generic ABS" + ], + "QD_4_0_23": [ + "Qidi/Generic PC" + ], + "QD_4_0_4": [ + "Qidi/Generic PLA Silk" + ], + "QD_4_0_41": [ + "Qidi/Generic PETG" + ], + "QD_4_0_50": [ + "Qidi/Generic TPU 95A" + ], + "QD_4_1_1": [ + "Qidi/QIDI PLA Rapido" + ], + "QD_4_1_11": [ + "Qidi/QIDI ABS Rapido" + ], + "QD_4_1_12": [ + "Qidi/QIDI ABS-GF" + ], + "QD_4_1_13": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "QD_4_1_14": [ + "Qidi/QIDI ABS Odorless" + ], + "QD_4_1_15": [ + "Qidi/QIDI TPU-GF" + ], + "QD_4_1_18": [ + "Qidi/QIDI ASA" + ], + "QD_4_1_19": [ + "Qidi/QIDI ASA-Aero" + ], + "QD_4_1_2": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "QD_4_1_20": [ + "Qidi/QIDI ASA-CF" + ], + "QD_4_1_24": [ + "Qidi/QIDI UltraPA" + ], + "QD_4_1_25": [ + "Qidi/QIDI PA6-CF" + ], + "QD_4_1_26": [ + "Qidi/QIDI UltraPA-CF25" + ], + "QD_4_1_27": [ + "Qidi/QIDI PA12-CF" + ], + "QD_4_1_3": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "QD_4_1_30": [ + "Qidi/QIDI PAHT-CF" + ], + "QD_4_1_31": [ + "Qidi/QIDI PAHT-GF" + ], + "QD_4_1_32": [ + "Qidi/QIDI Support For PAHT" + ], + "QD_4_1_33": [ + "Qidi/QIDI Support For PET/PA" + ], + "QD_4_1_34": [ + "Qidi/QIDI PC/ABS-FR" + ], + "QD_4_1_36": [ + "Qidi/QIDI PEBA 95A" + ], + "QD_4_1_37": [ + "Qidi/QIDI PET-CF" + ], + "QD_4_1_38": [ + "Qidi/QIDI PET-GF" + ], + "QD_4_1_39": [ + "Qidi/QIDI PETG Basic" + ], + "QD_4_1_4": [ + "Qidi/QIDI PLA Silk" + ], + "QD_4_1_40": [ + "Qidi/QIDI PETG Tough" + ], + "QD_4_1_41": [ + "Qidi/QIDI PETG Rapido" + ], + "QD_4_1_42": [ + "Qidi/QIDI PETG-CF" + ], + "QD_4_1_43": [ + "Qidi/QIDI PETG-GF" + ], + "QD_4_1_44": [ + "Qidi/QIDI PPS-CF" + ], + "QD_4_1_45": [ + "Qidi/QIDI PETG Translucent" + ], + "QD_4_1_46": [ + "Qidi/QIDI PPS-GF" + ], + "QD_4_1_49": [ + "Qidi/QIDI TPU-Aero" + ], + "QD_4_1_5": [ + "Qidi/QIDI PLA-CF" + ], + "QD_4_1_50": [ + "Qidi/QIDI TPU 95A-HF" + ], + "QD_4_1_6": [ + "Qidi/QIDI WOOD Rapido" + ], + "QD_4_1_7": [ + "Qidi/QIDI PLA Basic" + ], + "QD_4_1_8": [ + "Qidi/QIDI PLA Matte Basic" ] }, "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", @@ -5720,6 +6022,33 @@ "Artillery/Artillery TPU @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery TPU @Artillery M1 Pro 0.8 nozzle", "BBL/Generic SBS", + "BBL/addnorth ABS rABS", + "BBL/addnorth PA Adura", + "BBL/addnorth PA Adura FDA", + "BBL/addnorth PA-CF Adura X", + "BBL/addnorth PA6 Addlantis", + "BBL/addnorth PC BLend HT LCF", + "BBL/addnorth PETG Base", + "BBL/addnorth PETG ESD", + "BBL/addnorth PETG Economy", + "BBL/addnorth PETG Flame v0", + "BBL/addnorth PETG PRO Matte", + "BBL/addnorth PETG rPETG Matte", + "BBL/addnorth PETG-CF Rigid X", + "BBL/addnorth PLA E-PLA", + "BBL/addnorth PLA Economy", + "BBL/addnorth PLA HT-PLA PRO Matte", + "BBL/addnorth PLA Premium Silk", + "BBL/addnorth PLA Textura", + "BBL/addnorth PLA Wood", + "BBL/addnorth PLA X-PLA", + "BBL/addnorth PLA X-PLA High Speed", + "BBL/addnorth PLA rPLA RE-ADD", + "BBL/addnorth PLA-CF Carbon Fiber", + "BBL/addnorth PVDF Adamant S1", + "BBL/addnorth TPU EasyFlex", + "BBL/addnorth TPU Pro Matte 85A", + "BBL/addnorth TPU Pro Matte 95A", "Blocks/Blocks Generic ABS", "Blocks/Blocks Generic ASA", "Blocks/Blocks Generic ASA-CF", @@ -7881,6 +8210,9 @@ "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", + "Snapmaker/Polymaker General PLA Family @U1", + "Snapmaker/Polymaker Silk PLA Family @U1", + "Snapmaker/Polymaker Tough PLA Family @U1", "Snapmaker/Snapmaker ABS Benchy @U1", "Snapmaker/Snapmaker Dual ABS Benchy", "Snapmaker/Snapmaker Dual TPE", @@ -7889,9 +8221,26 @@ "Snapmaker/Snapmaker J1 TPE", "Snapmaker/Snapmaker J1 TPU High-Flow", "Snapmaker/Snapmaker PET @Dual", + "Snapmaker/Snapmaker PLA Full Spectrum @U1 0.4 nozzle", "Snapmaker/Snapmaker PLA Matte @U1", + "Snapmaker/Snapmaker PLA Silk @U1", + "Snapmaker/Snapmaker PLA Silk @U1 0.2 nozzle", + "Snapmaker/Snapmaker PLA Silk @U1 0.6 nozzle", + "Snapmaker/Snapmaker PLA Silk @U1 0.8 nozzle", + "Snapmaker/Snapmaker PLA Wood @U1 0.4 nozzle", + "Snapmaker/Snapmaker PLA Wood @U1 0.6 nozzle", + "Snapmaker/Snapmaker PLA Wood @U1 0.8 nozzle", + "Snapmaker/Snapmaker PLA-CF @U1 0.4 nozzle", + "Snapmaker/Snapmaker PLA-CF @U1 0.6 nozzle", + "Snapmaker/Snapmaker PLA-CF @U1 0.8 nozzle", "Snapmaker/Snapmaker TPE", "Snapmaker/Snapmaker TPE @U1", + "Snapmaker/Snapmaker TPU 90A @U1", + "Snapmaker/Snapmaker TPU 90A @U1 0.6 nozzle", + "Snapmaker/Snapmaker TPU 90A @U1 0.8 nozzle", + "Snapmaker/Snapmaker TPU 95A HF @U1", + "Snapmaker/Snapmaker TPU 95A HF @U1 0.6 nozzle", + "Snapmaker/Snapmaker TPU 95A HF @U1 0.8 nozzle", "Snapmaker/Snapmaker TPU High-Flow @U1", "Sovol/Generic PLA Silk @Sovol SV08 MAX", "Sovol/Polymaker PETG @Sovol SV08 MAX", @@ -8070,9 +8419,6 @@ "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", @@ -8082,6 +8428,9 @@ "re3D/re3D PLA", "re3D/re3D PLA @0.4 nozzle", "re3D/re3D PLA @0.8 nozzle", + "re3D/re3D rPETG", + "re3D/re3D rPETG @0.8 nozzle", + "re3D/re3D rPETG @1.75 nozzle", "re3D/re3D rPP", "re3D/re3D rPP @0.8 nozzle", "re3D/re3D rPP @1.75 nozzle" @@ -8522,6 +8871,13 @@ "PolyTerra J1 PLA" ] ], + "OF44ERDr": [ + [ + "Polymaker", + "PLA", + "Polymaker General PLA Family" + ] + ], "OF44VYzK": [ [ "FilAr", @@ -9628,6 +9984,13 @@ "OrcaArena Generic PLA" ] ], + "OFD8loeT": [ + [ + "re3D", + "PETG", + "re3D rPETG" + ] + ], "OFD9taow": [ [ "FlyingBear", @@ -9684,6 +10047,13 @@ "Generic PLA" ] ], + "OFDdEaoL": [ + [ + "re3D", + "PLA", + "re3D PLA" + ] + ], "OFDe8uyM": [ [ "Valment", @@ -10132,6 +10502,13 @@ "Eolas Prints PLA INGEO 850" ] ], + "OFH57ibH": [ + [ + "Polymaker", + "PLA", + "Polymaker Silk PLA Family" + ] + ], "OFH5UH6P": [ [ "Generic", @@ -10657,6 +11034,13 @@ "Anycubic Generic PLA" ] ], + "OFL9aRjN": [ + [ + "Snapmaker", + "PETG", + "Snapmaker PETG HF" + ] + ], "OFLAXKqP": [ [ "WonderMaker", @@ -10713,6 +11097,13 @@ "Generic ASA" ] ], + "OFLTYJW0": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Translucent" + ] + ], "OFLXvuMr": [ [ "Elegoo", @@ -11175,6 +11566,13 @@ "Prusa Generic PETG HF" ] ], + "OFOPU1xv": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Full Spectrum" + ] + ], "OFObG16Q": [ [ "InfiMech", @@ -11693,13 +12091,6 @@ "FLSun S1 PLA Silk" ] ], - "OFSTCno1": [ - [ - "GreenGate3D", - "PETG", - "re3D Greengate rPETG" - ] - ], "OFSa39yP": [ [ "Snapmaker", @@ -12071,6 +12462,13 @@ "QIDI PLA Rapido Silk" ] ], + "OFW8lqnb": [ + [ + "Snapmaker", + "PETG", + "Snapmaker PETG Translucent" + ] + ], "OFW9uIkE": [ [ "Generic", @@ -12197,6 +12595,13 @@ "Anycubic Generic PETG" ] ], + "OFX0etlv": [ + [ + "re3D", + "PETG", + "re3D PETG" + ] + ], "OFX0ycRQ": [ [ "Polymaker", @@ -12232,6 +12637,13 @@ "Grauts HPP4GF25 P1" ] ], + "OFXSvqOX": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU 95A HF" + ] + ], "OFXTPuqV": [ [ "Elas", @@ -12337,6 +12749,13 @@ "Snapmaker J1 PLA Matte" ] ], + "OFY7jxcS": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU 90A" + ] + ], "OFY9muEs": [ [ "Generic", @@ -12904,6 +13323,13 @@ "FilAr PLA Verde Manzana" ] ], + "OFdd8ZqJ": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Wood" + ] + ], "OFdkWDiy": [ [ "Cubicon", @@ -13093,6 +13519,13 @@ "QIDI PETG Translucent" ] ], + "OFf52D4e": [ + [ + "Snapmaker", + "PLA-CF", + "Snapmaker PLA-CF" + ] + ], "OFf5awy4": [ [ "Eolas Prints", @@ -13128,6 +13561,13 @@ "Bambu ASA" ] ], + "OFfD87Gy": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Glow" + ] + ], "OFfHGM1D": [ [ "re3D", @@ -13149,6 +13589,13 @@ "ENDER FAST PLA" ] ], + "OFfYHK5z": [ + [ + "Polymaker", + "PLA", + "Polymaker PLA-HT" + ] + ], "OFfZ0lTS": [ [ "Generic", @@ -13345,6 +13792,13 @@ "RatRig BigNozzle ASA" ] ], + "OFgdaBOt": [ + [ + "Polymaker", + "PLA", + "Polymaker Tough PLA Family" + ] + ], "OFgeM7nD": [ [ "Flashforge", @@ -13534,6 +13988,13 @@ "COEX PLA" ] ], + "OFhmxnYw": [ + [ + "Snapmaker", + "PLA", + "Snapmaker PLA Basic" + ] + ], "OFhuaUQB": [ [ "Bambu Lab", @@ -14073,6 +14534,20 @@ "CoLiDo PLA" ] ], + "OFm8rqoY": [ + [ + "re3D", + "PP", + "re3D rPP" + ] + ], + "OFmCOW2Y": [ + [ + "re3D", + "PETG", + "re3D rPETG" + ] + ], "OFmFwUWM": [ [ "Prusa Polymers", @@ -15361,6 +15836,13 @@ "Fiberon PA6-GF" ] ], + "OFwbsgWj": [ + [ + "re3D", + "PC", + "re3D PC" + ] + ], "OFwhLMs4": [ [ "Snapmaker", From 1c405f8a2c1d174649e4af451195461b8398c07e Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 21 Aug 2026 18:34:20 +0800 Subject: [PATCH 037/208] filament_id v4.1: resolve retired QD_* ids in the Qidi box miss path QidiPrinterAgent composes QD___ setting ids from device enums and previously degraded any slot whose id matched no visible preset to generic-by-type. Plan v4.2 retires every QD_* preset id to the succession ledger, so insert the ledger walk between the direct match and the generic fallback: a composed QD_* id now forwards to its family's minted OF* successor exactly like every other retired id. Behavior-neutral until the ids are actually retired (the ledger holds no QD_* keys yet, and live QD_* presets still match directly). Also documents the code<->ledger lockstep on the hardcoded non-numeric- series fallback table (QD_1_0_1/_11/_41/_50) and adds a C++ test pinning that the succession walk is key-format agnostic. Gates: libslic3r_tests [filament_id] 14 assertions green; libslic3r_gui compiles. --- src/slic3r/Utils/QidiPrinterAgent.cpp | 12 +++++++++++- tests/libslic3r/test_filament_id_succession.cpp | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/slic3r/Utils/QidiPrinterAgent.cpp b/src/slic3r/Utils/QidiPrinterAgent.cpp index 6b05480194..22b8d37735 100644 --- a/src/slic3r/Utils/QidiPrinterAgent.cpp +++ b/src/slic3r/Utils/QidiPrinterAgent.cpp @@ -188,7 +188,13 @@ bool QidiPrinterAgent::fetch_slot_info(const std::string& base_url, } else if (!setting_id.empty() && has_visible_base_preset(bundle->filaments, setting_id)) { tray.tray_info_idx = setting_id; } else { - tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); + // Retired QD_* protocol ids forward to their minted successors via the shipped ledger. + const std::string successor = setting_id.empty() ? std::string() + : resolve_filament_id_succession(setting_id); + if (!successor.empty() && has_visible_base_preset(bundle->filaments, successor)) + tray.tray_info_idx = successor; + else + tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); } // Look up color from dictionary @@ -324,6 +330,10 @@ void QidiPrinterAgent::parse_filament_sections(const std::string& content, std:: std::string QidiPrinterAgent::map_filament_type_to_setting_id(const std::string& filament_type) { + // These QD_* protocol ids no longer appear on any preset: they are retired ledger keys + // that parse_box_status resolves through resolve_filament_id_succession(). Each literal + // must stay a ledger key whose chain ends at a live preset id — + // scripts/tests/test_filament_id.py parses this function and enforces that. const std::string upper = trim_and_upper(filament_type); if (upper == "PLA") { diff --git a/tests/libslic3r/test_filament_id_succession.cpp b/tests/libslic3r/test_filament_id_succession.cpp index 36268277f8..12fa82f9bb 100644 --- a/tests/libslic3r/test_filament_id_succession.cpp +++ b/tests/libslic3r/test_filament_id_succession.cpp @@ -34,6 +34,14 @@ TEST_CASE("filament_id succession follows forwarding chains", "[Preset][filament CHECK(follow_filament_id_succession("OFchainB", forwards) == "OFlive00"); CHECK(follow_filament_id_succession("OFchainC", forwards) == "OFlive00"); } + + // QidiPrinterAgent resolves device-composed QD_* protocol ids through this same walk; + // the map key format carries no OF assumption. + SECTION("device-protocol QD_* keys forward like any other id") { + const std::map qd = {{"QD_2_1_11", "OFnew001"}}; + CHECK(follow_filament_id_succession("QD_2_1_11", qd) == "OFnew001"); + CHECK(follow_filament_id_succession("QD_2_1_12", qd).empty()); + } } // Cycles are a ledger-validation error (script check 9) and never ship, but the client From 8d83414d095b317b5f8f3bb46e0f1edf2a9af69a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 21 Aug 2026 18:34:20 +0800 Subject: [PATCH 038/208] filament_id v4.2a: dissolve the QD_* island in the tooling (plan v4 SS3) - is_island_declaration: only BBL remains an island; Qidi QD_* declarations now enter the triple bookkeeping (checks 3 and 8, --remint's domain). - reserved_space_owner: QD_* stays reserved but ownerless -- no vendor may declare it, --update-snapshot refuses new QD_* ids outright, and vanished QD_* ids take the retired-with-successor path instead of the island release-with-hint path. New reserved_space_desc() names the space in check 6 / sanction-gate messages. - Check 1 drops the vendor-Qidi QD_* format exemption; --add-hint now refuses QD_* keys (island space is GF* only); docstrings updated. - Snapshot regenerated: the 204 QD_* declarer triples are now recorded (declared triples 1113 -> 1317); ids/claims unchanged. - Tests updated for the flip; new (skipped until v4.2b) lockstep test asserting the QidiPrinterAgent fallback QD_* literals stay retired ledger keys chaining to live ids. Tree state is untouched: presets still declare their QD_* ids, all grandfathered by the snapshot. --check exit 0; 117 script tests OK. --- scripts/assign_filament_ids.py | 47 +- scripts/filament_id_snapshot.json | 1428 +++++++++++++++++++++++++++++ scripts/tests/test_filament_id.py | 34 +- 3 files changed, 1488 insertions(+), 21 deletions(-) diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 6f12554f14..c5e6aefe58 100644 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -26,7 +26,11 @@ Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan_v3.md): resolving. * Reserved id spaces that are never minted into or altered: - GF* Bambu AMS/RFID catalog (vendor BBL untouchable) - - QD_* Qidi device protocol + - QD_* Qidi device protocol (dissolved island, plan v4: + every shipped QD_* id is retired in the ledger and + the QidiPrinterAgent translates device-composed + QD_* ids through the succession walk; no preset + may ever declare one again) - 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 @@ -40,7 +44,7 @@ Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan_v3.md): rule over the vanished id's old claims — and the runtime follows those chains (plus cross-island "hints" for ids Orca cannot retire, e.g. GF*) on resolution miss. A retired id may never be used again for anything. - Vanished ids in a FOREIGN island's space (GF*/QD_*) are released with a + Vanished ids in a FOREIGN island's space (GF*) are released with a hint instead of retired: the island's catalog owns them and may legitimately (re)ship them. @@ -325,8 +329,9 @@ def resolve_triple(name, filaments, ofl_filaments): def is_island_declaration(vendor, fid): - """Declarations frozen outside the OF mint domain: all of BBL, QD_* in Qidi.""" - return vendor == "BBL" or (vendor == "Qidi" and fid.startswith("QD_")) + """Declarations frozen outside the OF mint domain: all of BBL (the QD_* + island was dissolved by plan v4 — Qidi declarations mint like any other).""" + return vendor == "BBL" def analyze_tree(profiles_dir): @@ -598,12 +603,21 @@ def reserved_space_owner(fid): if fid.startswith("GF"): return True, "BBL" if fid.startswith("QD_"): - return True, "Qidi" + return True, None # dissolved Qidi device-protocol space: NO vendor may declare it 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 +def reserved_space_desc(fid, owner): + """Human description of a reserved space for error messages.""" + if owner: + return f"owned by {owner}" + if fid.startswith("QD_"): + return "Qidi device protocol; dissolved island — ids are retired, never declarable" + return "reserved for user-custom presets" + + # --------------------------------------------------------------------------- # Checks (imported and called tree-wide by orca_extra_profile_check.py) # --------------------------------------------------------------------------- @@ -613,8 +627,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_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. + the snapshot, or match ^OF[0-9A-Za-z]{6}$, or belong to vendor BBL. 2. Snapshot equality, both directions: the tree-derived id->families multimap AND the id->triples map of the declarers must equal the snapshot exactly (the snapshot diff is the maintainer gate). @@ -625,8 +638,8 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 5. Alias hygiene: a vendor preset riding an OFL family must keep the OFL base name, claim printers via non-empty compatible_printers, and declare no filament_id key of its own. - 6. Reserved namespaces (GF*/QD_*/P-hex/"null") only for their owner vendors, - except claims grandfathered in the snapshot. + 6. Reserved namespaces (GF* for BBL; QD_*/P-hex/"null" for nobody) must not + be claimed by other 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++). @@ -664,8 +677,6 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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 ' @@ -765,7 +776,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, continue if claim in snap_ids.get(fid, []): continue # grandfathered - space = f"owned by {owner}" if owner else "reserved for user-custom presets" + space = reserved_space_desc(fid, owner) 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") @@ -861,7 +872,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, if island is None: print_error( f'hint key "{key}" ({RETIRED_REL}) is not in an island id space ' - f"(GF*/QD_*); non-island ids are retired with a successor instead") + f"(GF*); non-island ids are retired with a successor instead") errors += 1 continue if key in retired: @@ -902,7 +913,7 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, Vanished ids gain a succession-ledger entry whose successor is picked by the mode rule over their old claims (None when the family died heirless); - vanished ids in a foreign island's space (GF*/QD_*) are released with a + vanished ids in a foreign island's space (GF*) are released with a hint instead — the island catalog owns them, so they must stay mintable there and must never be blocked by check 4. --forget-never-shipped lists ids to drop from lineage instead of retiring @@ -955,7 +966,7 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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" + space = reserved_space_desc(fid, owner) print_error( f'refusing to sanction new claim "{claim}" on reserved-namespace id ' f'"{fid}" ({space}); pass --allow-shared-catalog only for ' @@ -977,7 +988,7 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # Retire ids that fully vanished from the tree (append-only ledger), with a # mode-rule successor so devices and user presets keep resolving. Vanished - # ids in a FOREIGN island's reserved space (GF*/QD_*) are never retired — + # ids in a FOREIGN island's reserved space (GF*) are never retired — # the island's catalog still owns them and may legitimately (re)ship them — # they are RELEASED, with a succession hint so they keep resolving on miss. claim_ids = claim_effective_ids(analysis) @@ -1073,7 +1084,7 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, def add_hints(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): """--add-hint "OLD=NEW": forward an island-space id to a live id. - OLD must sit in an island id space (GF*/QD_*), must not be retired, and — + OLD must sit in an island id space (GF*), must not be retired, and — when live in the tree — may be declared only by island vendors (Orca cannot retire it). An absent OLD is fine: island catalogs own ids Orca never shipped or has released. NEW must be live in the tree. All pairs validate @@ -1103,7 +1114,7 @@ def add_hints(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): errors += 1 elif island is None: print_error( - f'--add-hint: "{old}" is not in an island id space (GF*/QD_*); ' + f'--add-hint: "{old}" is not in an island id space (GF*); ' f"non-island ids are retired with a successor by --update-snapshot") errors += 1 elif outsiders: diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index c8ae5b34be..14d207b34f 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -16227,6 +16227,1434 @@ "ABS", "FLSun S1 ABS" ] + ], + "QD_0_1_1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "QD_0_1_15": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "QD_0_1_2": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "QD_0_1_20": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "QD_0_1_24": [ + [ + "QIDI", + "UltraPA", + "QIDI PA-Ultra" + ] + ], + "QD_0_1_26": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "QD_0_1_27": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "QD_0_1_3": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "QD_0_1_30": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "QD_0_1_31": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "QD_0_1_32": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "QD_0_1_33": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "QD_0_1_34": [ + [ + "QIDI", + "PC-ABS-FR", + "Qidi PC-ABS-FR" + ] + ], + "QD_0_1_36": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "QD_0_1_37": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "QD_0_1_38": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "QD_0_1_39": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "QD_0_1_4": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "QD_0_1_40": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "QD_0_1_41": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "QD_0_1_42": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "QD_0_1_43": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "QD_0_1_44": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "QD_0_1_45": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "QD_0_1_46": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "QD_0_1_49": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "QD_0_1_5": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "QD_0_1_50": [ + [ + "QIDI", + "TPU", + "Qidi TPU 95A-HF" + ] + ], + "QD_0_1_6": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "QD_0_1_7": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "QD_0_1_8": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] + ], + "QD_1_0_1": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "QD_1_0_11": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "QD_1_0_23": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "QD_1_0_4": [ + [ + "Generic", + "PLA", + "Generic PLA Silk" + ] + ], + "QD_1_0_41": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "QD_1_0_50": [ + [ + "Generic", + "TPU", + "Generic TPU 95A" + ] + ], + "QD_1_1_1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "QD_1_1_11": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], + "QD_1_1_12": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" + ] + ], + "QD_1_1_13": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "QD_1_1_14": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], + "QD_1_1_15": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "QD_1_1_18": [ + [ + "QIDI", + "ASA", + "QIDI ASA" + ] + ], + "QD_1_1_19": [ + [ + "QIDI", + "ASA-AERO", + "QIDI ASA-Aero" + ] + ], + "QD_1_1_2": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "QD_1_1_20": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "QD_1_1_24": [ + [ + "QIDI", + "UltraPA", + "QIDI UltraPA" + ] + ], + "QD_1_1_26": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "QD_1_1_27": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "QD_1_1_3": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "QD_1_1_30": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "QD_1_1_31": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "QD_1_1_32": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "QD_1_1_33": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "QD_1_1_34": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC-ABS-FR" + ] + ], + "QD_1_1_36": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "QD_1_1_37": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "QD_1_1_38": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "QD_1_1_39": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "QD_1_1_4": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "QD_1_1_40": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "QD_1_1_41": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "QD_1_1_42": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "QD_1_1_43": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "QD_1_1_44": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "QD_1_1_45": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "QD_1_1_46": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "QD_1_1_49": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "QD_1_1_5": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "QD_1_1_50": [ + [ + "QIDI", + "TPU", + "QIDI TPU 95A-HF" + ] + ], + "QD_1_1_6": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "QD_1_1_7": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "QD_1_1_8": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] + ], + "QD_2_0_1": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "QD_2_0_11": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "QD_2_0_23": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "QD_2_0_4": [ + [ + "Generic", + "PLA", + "Generic PLA Silk" + ] + ], + "QD_2_0_41": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "QD_2_0_50": [ + [ + "Generic", + "TPU", + "Generic TPU 95A" + ] + ], + "QD_2_1_1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "QD_2_1_11": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], + "QD_2_1_12": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" + ] + ], + "QD_2_1_13": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "QD_2_1_14": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], + "QD_2_1_15": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "QD_2_1_18": [ + [ + "QIDI", + "ASA", + "QIDI ASA" + ] + ], + "QD_2_1_19": [ + [ + "QIDI", + "ASA-AERO", + "QIDI ASA-Aero" + ] + ], + "QD_2_1_2": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "QD_2_1_20": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "QD_2_1_24": [ + [ + "QIDI", + "UltraPA", + "QIDI UltraPA" + ] + ], + "QD_2_1_26": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "QD_2_1_27": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "QD_2_1_3": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "QD_2_1_30": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "QD_2_1_31": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "QD_2_1_32": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "QD_2_1_33": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "QD_2_1_34": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC-ABS-FR" + ] + ], + "QD_2_1_36": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "QD_2_1_37": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "QD_2_1_38": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "QD_2_1_39": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "QD_2_1_4": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "QD_2_1_40": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "QD_2_1_41": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "QD_2_1_42": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "QD_2_1_43": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "QD_2_1_44": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "QD_2_1_45": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "QD_2_1_46": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "QD_2_1_49": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "QD_2_1_5": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "QD_2_1_50": [ + [ + "QIDI", + "TPU", + "QIDI TPU 95A-HF" + ] + ], + "QD_2_1_6": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "QD_2_1_7": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "QD_2_1_8": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] + ], + "QD_3_0_1": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "QD_3_0_11": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "QD_3_0_23": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "QD_3_0_4": [ + [ + "Generic", + "PLA", + "Generic PLA Silk" + ] + ], + "QD_3_0_41": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "QD_3_0_50": [ + [ + "Generic", + "TPU", + "Generic TPU 95A" + ] + ], + "QD_3_1_1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "QD_3_1_11": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], + "QD_3_1_12": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" + ] + ], + "QD_3_1_13": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "QD_3_1_14": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], + "QD_3_1_15": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "QD_3_1_18": [ + [ + "QIDI", + "ASA", + "QIDI ASA" + ] + ], + "QD_3_1_19": [ + [ + "QIDI", + "ASA-AERO", + "QIDI ASA-Aero" + ] + ], + "QD_3_1_2": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "QD_3_1_20": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "QD_3_1_24": [ + [ + "QIDI", + "UltraPA", + "QIDI UltraPA" + ] + ], + "QD_3_1_26": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "QD_3_1_27": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "QD_3_1_3": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "QD_3_1_30": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "QD_3_1_31": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "QD_3_1_32": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "QD_3_1_33": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "QD_3_1_34": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC/ABS-FR" + ] + ], + "QD_3_1_36": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "QD_3_1_37": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "QD_3_1_38": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "QD_3_1_39": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "QD_3_1_4": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Silk" + ] + ], + "QD_3_1_40": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "QD_3_1_41": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "QD_3_1_42": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "QD_3_1_43": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "QD_3_1_44": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "QD_3_1_45": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "QD_3_1_46": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "QD_3_1_49": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "QD_3_1_5": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "QD_3_1_50": [ + [ + "QIDI", + "TPU", + "QIDI TPU 95A-HF" + ] + ], + "QD_3_1_6": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "QD_3_1_7": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "QD_3_1_8": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] + ], + "QD_4_0_1": [ + [ + "Generic", + "PLA", + "Generic PLA" + ] + ], + "QD_4_0_11": [ + [ + "Generic", + "ABS", + "Generic ABS" + ] + ], + "QD_4_0_23": [ + [ + "Generic", + "PC", + "Generic PC" + ] + ], + "QD_4_0_4": [ + [ + "Generic", + "PLA", + "Generic PLA Silk" + ] + ], + "QD_4_0_41": [ + [ + "Generic", + "PETG", + "Generic PETG" + ] + ], + "QD_4_0_50": [ + [ + "Generic", + "TPU", + "Generic TPU 95A" + ] + ], + "QD_4_1_1": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido" + ] + ], + "QD_4_1_11": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido" + ] + ], + "QD_4_1_12": [ + [ + "QIDI", + "ABS-GF", + "QIDI ABS-GF" + ] + ], + "QD_4_1_13": [ + [ + "QIDI", + "ABS", + "QIDI ABS Rapido Metal" + ] + ], + "QD_4_1_14": [ + [ + "QIDI", + "ABS", + "QIDI ABS Odorless" + ] + ], + "QD_4_1_15": [ + [ + "QIDI", + "TPU-GF", + "QIDI TPU-GF" + ] + ], + "QD_4_1_18": [ + [ + "QIDI", + "ASA", + "QIDI ASA" + ] + ], + "QD_4_1_19": [ + [ + "QIDI", + "ASA-AERO", + "QIDI ASA-Aero" + ] + ], + "QD_4_1_2": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Matte" + ] + ], + "QD_4_1_20": [ + [ + "QIDI", + "ASA-CF", + "QIDI ASA-CF" + ] + ], + "QD_4_1_24": [ + [ + "QIDI", + "UltraPA", + "QIDI UltraPA" + ] + ], + "QD_4_1_25": [ + [ + "QIDI", + "PA6-CF", + "QIDI PA6-CF" + ] + ], + "QD_4_1_26": [ + [ + "QIDI", + "UltraPA-CF25", + "QIDI UltraPA-CF25" + ] + ], + "QD_4_1_27": [ + [ + "QIDI", + "PA12-CF", + "QIDI PA12-CF" + ] + ], + "QD_4_1_3": [ + [ + "QIDI", + "PLA", + "QIDI PLA Rapido Metal" + ] + ], + "QD_4_1_30": [ + [ + "QIDI", + "PAHT-CF", + "QIDI PAHT-CF" + ] + ], + "QD_4_1_31": [ + [ + "QIDI", + "PAHT-GF", + "QIDI PAHT-GF" + ] + ], + "QD_4_1_32": [ + [ + "QIDI", + "PAHT-S", + "QIDI Support For PAHT" + ] + ], + "QD_4_1_33": [ + [ + "QIDI", + "PA-S", + "QIDI Support For PET/PA" + ] + ], + "QD_4_1_34": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC/ABS-FR" + ] + ], + "QD_4_1_36": [ + [ + "QIDI", + "PEBA", + "QIDI PEBA 95A" + ] + ], + "QD_4_1_37": [ + [ + "QIDI", + "PET-CF", + "QIDI PET-CF" + ] + ], + "QD_4_1_38": [ + [ + "QIDI", + "PET-GF", + "QIDI PET-GF" + ] + ], + "QD_4_1_39": [ + [ + "QIDI", + "PETG", + "QIDI PETG Basic" + ] + ], + "QD_4_1_4": [ + [ + "QIDI", + "PLA", + "QIDI PLA Silk" + ] + ], + "QD_4_1_40": [ + [ + "QIDI", + "PETG", + "QIDI PETG Tough" + ] + ], + "QD_4_1_41": [ + [ + "QIDI", + "PETG", + "QIDI PETG Rapido" + ] + ], + "QD_4_1_42": [ + [ + "QIDI", + "PETG-CF", + "QIDI PETG-CF" + ] + ], + "QD_4_1_43": [ + [ + "QIDI", + "PETG-GF", + "QIDI PETG-GF" + ] + ], + "QD_4_1_44": [ + [ + "QIDI", + "PPS-CF", + "QIDI PPS-CF" + ] + ], + "QD_4_1_45": [ + [ + "QIDI", + "PETG", + "QIDI PETG Translucent" + ] + ], + "QD_4_1_46": [ + [ + "QIDI", + "PPS-GF", + "QIDI PPS-GF" + ] + ], + "QD_4_1_49": [ + [ + "QIDI", + "TPU-AERO", + "QIDI TPU-Aero" + ] + ], + "QD_4_1_5": [ + [ + "QIDI", + "PLA-CF", + "QIDI PLA-CF" + ] + ], + "QD_4_1_50": [ + [ + "QIDI", + "TPU", + "QIDI TPU 95A-HF" + ] + ], + "QD_4_1_6": [ + [ + "QIDI", + "PLA", + "QIDI WOOD Rapido" + ] + ], + "QD_4_1_7": [ + [ + "QIDI", + "PLA", + "QIDI PLA Basic" + ] + ], + "QD_4_1_8": [ + [ + "QIDI", + "PLA", + "QIDI PLA Matte Basic" + ] ] } } diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index cfba38866c..0918702017 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -8,6 +8,7 @@ import contextlib import io import json import os +import re import shutil import sys import tempfile @@ -400,7 +401,8 @@ class TestTripleResolution(unittest.TestCase): 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")) + # dissolved island (plan v4): reserved, but no vendor may declare it + self.assertEqual(afi.reserved_space_owner("QD_X4_PLA"), (True, None)) 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)) @@ -410,7 +412,8 @@ class TestReservedSpaces(unittest.TestCase): def test_island_declarations(self): self.assertTrue(afi.is_island_declaration("BBL", "GFL99")) self.assertTrue(afi.is_island_declaration("BBL", "OF5CgdDq")) - self.assertTrue(afi.is_island_declaration("Qidi", "QD_X4_PLA")) + # dissolved island (plan v4): Qidi declarations mint like any other + self.assertFalse(afi.is_island_declaration("Qidi", "QD_X4_PLA")) self.assertFalse(afi.is_island_declaration("Qidi", "OF5CgdDq")) self.assertFalse(afi.is_island_declaration("VendorA", "GFL99")) @@ -567,7 +570,7 @@ class TestChecks(SyntheticTreeCase): def test_check6_reserved_namespace_claims(self): for fid, marker in [("GFX99", "owned by BBL"), - ("QD_X_PLA", "owned by Qidi"), + ("QD_X_PLA", "dissolved island"), ("P1a2b3c4", "user-custom"), ("null", "user-custom")]: with self.subTest(fid=fid): @@ -1478,6 +1481,31 @@ class TestRealTree(unittest.TestCase): self.assertEqual(analysis["missing_effective"], []) self.assertEqual(analysis["read_errors"], []) + # Code<->ledger lockstep for the Qidi box (plan v4 SS2): the QD_* literals + # QidiPrinterAgent::map_filament_type_to_setting_id returns must stay + # retired ledger keys whose chains end at a live preset id, because the + # agent resolves them through resolve_filament_id_succession() at runtime. + @unittest.skip("enable with plan v4.2: QD_* ids are not retired yet") + def test_qidi_agent_fallback_ids_resolve_through_ledger(self): + cpp = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "QidiPrinterAgent.cpp") + with open(cpp, encoding="utf-8") as f: + src = f.read() + m = re.search( + r"map_filament_type_to_setting_id\(const std::string& filament_type\)" + r"\s*\{(.*?)\n\}", src, re.DOTALL) + self.assertIsNotNone(m, "map_filament_type_to_setting_id not found in QidiPrinterAgent.cpp") + qd_ids = re.findall(r'return "(QD_[0-9_]+)";', m.group(1)) + self.assertTrue(qd_ids, "no QD_* literals parsed from map_filament_type_to_setting_id") + ledger = afi.load_ledger(afi.RETIRED_PATH) + live = set(afi.analyze_tree(REAL_PROFILES)["ids"]) + for fid in qd_ids: + self.assertIn(fid, ledger["retired"], f'"{fid}" must be a retired ledger key') + status, node = afi.follow_succession( + fid, set(), ledger["retired"], ledger["hints"], live) + self.assertEqual( + status, "live", + f'"{fid}" succession must end at a live id (got {status} at "{node}")') + # --------------------------------------------------------------------------- # review-fix regressions From f23e5875d5474c7c0cbd7380b7d943ad47e9ad4a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 21 Aug 2026 18:36:28 +0800 Subject: [PATCH 039/208] filament_id v4.2b: re-mint the Qidi QD_* island (plan v4 SS4) All 264 QD_* declarations re-derive from their family triples via --remint Qidi. Only 8 family ids are new: most QIDI-brand products already carried v3.2-minted ids on older printer series, so the QD-series declarations converge onto them (QD_0..4_1_1 -> OFKIQO2W "QIDI PLA Rapido"), and the six Generic families converge onto the shared generic ids (Generic PLA -> OFDSrzZ8 etc.) by triple math -- no inherits or compatible_printers changes anywhere. --update-snapshot retires all 204 QD_* ids with mode-rule successors. Audit: 204/204 non-null successors, every chain ends at a live id; the four ids hardcoded in QidiPrinterAgent's non-numeric-series fallback resolve to the OFL generics (QD_1_0_1 -> OFDSrzZ8, ...). The v4.1 agent hook translates device-composed QD_* ids through these entries at runtime, so box behavior is preserved on updated clients. Known accepted residue (plan v4 SS4): three case/spelling family splits keep distinct ids for one product line each -- QIDI PC-ABS-FR (series 1-2) vs QIDI PC/ABS-FR (series 3-4) vs Qidi PC-ABS-FR (X-Plus 4), and QIDI TPU 95A-HF vs Qidi TPU 95A-HF. Renames are ruled out; the ledger's per-series successors keep each device slot resolving to the right presets, and a future upstream name unification self-heals through content addressing. The code<->ledger lockstep test is now active (un-skipped). Gates: --check 0; orca_extra_profile_check 0/0; 117 script tests OK (0 skipped); validator base, -f tree-wide, -v Qidi all exit 0; libslic3r_tests green; Qidi profile diff is filament_id-value-only. Qidi.json version bumped. --- resources/profiles/Qidi.json | 2 +- .../Qidi/filament/Q2/Generic ABS @Q2.json | 2 +- .../Qidi/filament/Q2/Generic ABS @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic PC @Q2.json | 2 +- .../Qidi/filament/Q2/Generic PC @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic PETG @Q2.json | 2 +- .../Qidi/filament/Q2/Generic PETG @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic PLA @Q2.json | 2 +- .../Qidi/filament/Q2/Generic PLA @Q2C.json | 2 +- .../filament/Q2/Generic PLA Silk @Q2.json | 2 +- .../filament/Q2/Generic PLA Silk @Q2C.json | 2 +- .../Qidi/filament/Q2/Generic TPU 95A @Q2.json | 2 +- .../filament/Q2/Generic TPU 95A @Q2C.json | 2 +- .../filament/Q2/QIDI ABS Odorless @Q2.json | 2 +- .../filament/Q2/QIDI ABS Odorless @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI ABS Rapido @Q2.json | 2 +- .../filament/Q2/QIDI ABS Rapido @Q2C.json | 2 +- .../Q2/QIDI ABS Rapido Metal @Q2.json | 2 +- .../Q2/QIDI ABS Rapido Metal @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI ABS-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI ABS-GF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI ASA @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI ASA @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI ASA-Aero @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI ASA-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI ASA-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PA12-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PA12-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PAHT-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PAHT-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PEBA 95A @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PET-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PET-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PET-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PET-GF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PETG Basic @Q2.json | 2 +- .../filament/Q2/QIDI PETG Basic @Q2C.json | 2 +- .../filament/Q2/QIDI PETG Rapido @Q2.json | 2 +- .../filament/Q2/QIDI PETG Rapido @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PETG Tough @Q2.json | 2 +- .../filament/Q2/QIDI PETG Tough @Q2C.json | 2 +- .../Q2/QIDI PETG Translucent @Q2.json | 2 +- .../Q2/QIDI PETG Translucent @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PETG-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PETG-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PETG-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PETG-GF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PLA Basic @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PLA Basic @Q2C.json | 2 +- .../filament/Q2/QIDI PLA Matte Basic @Q2.json | 2 +- .../Q2/QIDI PLA Matte Basic @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PLA Rapido @Q2.json | 2 +- .../filament/Q2/QIDI PLA Rapido @Q2C.json | 2 +- .../Q2/QIDI PLA Rapido Matte @Q2.json | 2 +- .../Q2/QIDI PLA Rapido Matte @Q2C.json | 2 +- .../Q2/QIDI PLA Rapido Metal @Q2.json | 2 +- .../Q2/QIDI PLA Rapido Metal @Q2C.json | 2 +- .../filament/Q2/QIDI PLA Rapido Silk @Q2.json | 2 +- .../Q2/QIDI PLA Rapido Silk @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PLA-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PLA-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PPS-CF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PPS-CF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI PPS-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI PPS-GF @Q2C.json | 2 +- .../Q2/QIDI Support For PAHT @Q2.json | 2 +- .../Q2/QIDI Support For PAHT @Q2C.json | 2 +- .../Q2/QIDI Support For PET-PA @Q2.json | 2 +- .../Q2/QIDI Support For PET-PA @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json | 2 +- .../filament/Q2/QIDI TPU 95A-HF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI TPU-Aero @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI TPU-GF @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI TPU-GF @Q2C.json | 2 +- .../Qidi/filament/Q2/QIDI UltraPA @Q2.json | 2 +- .../Qidi/filament/Q2/QIDI UltraPA @Q2C.json | 2 +- .../filament/Q2/QIDI UltraPA-CF25 @Q2.json | 2 +- .../filament/Q2/QIDI UltraPA-CF25 @Q2C.json | 2 +- .../filament/Q2/QIDI WOOD Rapido @Q2.json | 2 +- .../filament/Q2/QIDI WOOD Rapido @Q2C.json | 2 +- .../profiles/Qidi/filament/QIDI ASA-CF.json | 2 +- ...DI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...DI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...IDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...IDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...IDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...IDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...IDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...IDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...IDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...IDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...IDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PEBA 95A.json | 2 +- ...QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... PETG Basic @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... PETG Basic @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... PETG Basic @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... PETG Basic @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... PETG Tough @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... PETG Tough @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... PETG Tough @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... PETG Tough @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...Translucent @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Translucent @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Translucent @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Translucent @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...IDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...IDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...IDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...IDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...IDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...IDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...I PLA Basic @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...I PLA Basic @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...I PLA Basic @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...I PLA Basic @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...Matte Basic @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...Matte Basic @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Matte Basic @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...Matte Basic @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ... PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...apido Matte @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...apido Matte @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...apido Matte @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...apido Matte @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.2 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...apido Metal @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI PPS-GF.json | 2 +- ...rt For PAHT @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...rt For PAHT @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...rt For PAHT @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... For PET-PA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... For PET-PA @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ... For PET-PA @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...DI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...DI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../profiles/Qidi/filament/QIDI TPU-GF.json | 2 +- ...ltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...ltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...ltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ...i PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ...i PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json | 2 +- ...i PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json | 2 +- ... TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../filament/X4/Generic ABS @X-Max 4.json | 2 +- .../Qidi/filament/X4/Generic PC @X-Max 4.json | 2 +- .../filament/X4/Generic PETG @X-Max 4.json | 2 +- .../filament/X4/Generic PLA @X-Max 4.json | 2 +- .../X4/Generic PLA Silk @X-Max 4.json | 2 +- .../filament/X4/Generic TPU 95A @X-Max 4.json | 2 +- .../X4/QIDI ABS Odorless @X-Max 4.json | 2 +- .../filament/X4/QIDI ABS Rapido @X-Max 4.json | 2 +- .../X4/QIDI ABS Rapido Metal @X-Max 4.json | 2 +- .../filament/X4/QIDI ABS-GF @X-Max 4.json | 2 +- .../Qidi/filament/X4/QIDI ASA @X-Max 4.json | 2 +- .../filament/X4/QIDI ASA-Aero @X-Max 4.json | 2 +- .../filament/X4/QIDI ASA-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PA12-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PAHT-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PAHT-GF @X-Max 4.json | 2 +- .../filament/X4/QIDI PC-ABS-FR @X-Max 4.json | 2 +- .../filament/X4/QIDI PEBA 95A @X-Max 4.json | 2 +- .../filament/X4/QIDI PET-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PET-GF @X-Max 4.json | 2 +- .../filament/X4/QIDI PETG Basic @X-Max 4.json | 2 +- .../X4/QIDI PETG Rapido @X-Max 4.json | 2 +- .../filament/X4/QIDI PETG Tough @X-Max 4.json | 2 +- .../X4/QIDI PETG Translucent @X-Max 4.json | 2 +- .../filament/X4/QIDI PETG-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PETG-GF @X-Max 4.json | 2 +- .../filament/X4/QIDI PLA Basic @X-Max 4.json | 2 +- .../X4/QIDI PLA Matte Basic @X-Max 4.json | 2 +- .../filament/X4/QIDI PLA Rapido @X-Max 4.json | 2 +- .../X4/QIDI PLA Rapido Matte @X-Max 4.json | 2 +- .../X4/QIDI PLA Rapido Metal @X-Max 4.json | 2 +- .../X4/QIDI PLA Rapido Silk @X-Max 4.json | 2 +- .../filament/X4/QIDI PLA-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PPS-CF @X-Max 4.json | 2 +- .../filament/X4/QIDI PPS-GF @X-Max 4.json | 2 +- .../X4/QIDI Support For PAHT @X-Max 4.json | 2 +- .../X4/QIDI Support For PET-PA @X-Max 4.json | 2 +- .../filament/X4/QIDI TPU 95A-HF @X-Max 4.json | 2 +- .../filament/X4/QIDI TPU-Aero @X-Max 4.json | 2 +- .../filament/X4/QIDI TPU-GF @X-Max 4.json | 2 +- .../filament/X4/QIDI UltraPA @X-Max 4.json | 2 +- .../X4/QIDI UltraPA-CF25 @X-Max 4.json | 2 +- .../X4/QIDI WOOD Rapido @X-Max 4.json | 2 +- .../filament/X5/Generic ABS @X-Plus 5.json | 2 +- .../filament/X5/Generic PC @X-Plus 5.json | 2 +- .../filament/X5/Generic PETG @X-Plus 5.json | 2 +- .../filament/X5/Generic PLA @X-Plus 5.json | 2 +- .../X5/Generic PLA Silk @X-Plus 5.json | 2 +- .../X5/Generic TPU 95A @X-Plus 5.json | 2 +- .../X5/QIDI ABS Odorless @X-Plus 5.json | 2 +- .../X5/QIDI ABS Rapido @X-Plus 5.json | 2 +- .../X5/QIDI ABS Rapido Metal @X-Plus 5.json | 2 +- .../filament/X5/QIDI ABS-GF @X-Plus 5.json | 2 +- .../Qidi/filament/X5/QIDI ASA @X-Plus 5.json | 2 +- .../filament/X5/QIDI ASA-Aero @X-Plus 5.json | 2 +- .../filament/X5/QIDI ASA-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PA12-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PA6-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PAHT-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PAHT-GF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PC-ABS-FR @X-Plus 5.json | 2 +- .../filament/X5/QIDI PEBA 95A @X-Plus 5.json | 2 +- .../filament/X5/QIDI PET-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PET-GF @X-Plus 5.json | 2 +- .../X5/QIDI PETG Basic @X-Plus 5.json | 2 +- .../X5/QIDI PETG Rapido @X-Plus 5.json | 2 +- .../X5/QIDI PETG Tough @X-Plus 5.json | 2 +- .../X5/QIDI PETG Translucent @X-Plus 5.json | 2 +- .../filament/X5/QIDI PETG-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PETG-GF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PLA Basic @X-Plus 5.json | 2 +- .../X5/QIDI PLA Matte Basic @X-Plus 5.json | 2 +- .../X5/QIDI PLA Rapido @X-Plus 5.json | 2 +- .../X5/QIDI PLA Rapido Matte @X-Plus 5.json | 2 +- .../X5/QIDI PLA Rapido Metal @X-Plus 5.json | 2 +- .../filament/X5/QIDI PLA Silk @X-Plus 5.json | 2 +- .../filament/X5/QIDI PLA-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PPS-CF @X-Plus 5.json | 2 +- .../filament/X5/QIDI PPS-GF @X-Plus 5.json | 2 +- .../X5/QIDI Support For PAHT @X-Plus 5.json | 2 +- .../X5/QIDI Support For PET-PA @X-Plus 5.json | 2 +- .../X5/QIDI TPU 95A-HF @X-Plus 5.json | 2 +- .../filament/X5/QIDI TPU-Aero @X-Plus 5.json | 2 +- .../filament/X5/QIDI TPU-GF @X-Plus 5.json | 2 +- .../filament/X5/QIDI UltraPA @X-Plus 5.json | 2 +- .../X5/QIDI UltraPA-CF25 @X-Plus 5.json | 2 +- .../X5/QIDI WOOD Rapido @X-Plus 5.json | 2 +- resources/profiles/retired_filament_ids.json | 1224 +++++++++ scripts/filament_id_snapshot.json | 2229 +---------------- scripts/tests/test_filament_id.py | 1 - 268 files changed, 1574 insertions(+), 2410 deletions(-) diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index ecceff5a8a..98f157c9a3 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.11", + "version": "02.04.00.12", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json index 9e42298338..1dc3825126 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Generic ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json index 88edeb6155..c3641af840 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json index 90d5f9150f..26abc6179b 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PC@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json index 55a834093d..148bc80d29 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PC@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json index 5a8d64615a..de56662460 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json index 88c5c926ab..13dc11da37 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json index 21ed221909..f8da1c0008 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json index 82423a614d..b33774304d 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json index a24a0f4d6f..23d04a049a 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json index 1254b1d53a..30588be03e 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json index 107d337155..189c740c72 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json index 8e867a26f2..bfb84c16de 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json index 62dc85146b..19a568850c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json index be98105a39..2c2b667fd7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json index 9d7e3d0e7f..c5cb2aca78 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json index da40111dc4..4e68e02cf5 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json index 46ccb9e691..e123946376 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json index afd2b355cb..6589613879 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json index a20b7bb2c1..298e063e51 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json index 5e6df7914d..36ec082dc3 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json index 88e5d964e7..4a64191f92 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json index c68044bfaf..11cbffc08f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json index b449906758..c32a28c5ff 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json index 3c810517f6..30835ce25e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json index 4d2165ffd1..44845f9c1c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json index 99e1043b46..5f100e18e7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json index c15cf5ca65..454bb935c1 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json index 3dbd928222..ae7dce989c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json index fe908219a5..86d433078a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json index d76e92349e..d456e57eea 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json index e694512bc7..2f4d499ddd 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json index cb8c2640a3..c64465630c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json index d4639142de..67c1da6278 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PC-ABS-FR@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_34", + "filament_id": "OFFAWVf0", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json index b0e25aa480..b5ccaf706c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PC-ABS-FR@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_34", + "filament_id": "OFFAWVf0", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json index 9dd9600bf9..23717031de 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json index e1c1441da1..ec065181d8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json index 211f90a3a6..e6c29cea5c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json index 59f7315e29..62461cb73a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json index 85fc6f5847..424b78379d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json index c7e66b7972..f178094458 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json index ba87c9a3b7..58a0fd7dbf 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json index a08ec8af68..8cb18721e2 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json index 9815a8eb64..2e3d793089 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json index 1c50f16b51..96a2ec23e6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json index b8f8c4ec5f..ed639e45a3 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json index 3f272efaee..f3886ffbdd 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json index 64a56ca919..d996077b6e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json index 6010799fff..31a8543037 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json index 475b8f2a78..8f424ae68d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json index 4ba3a94c25..3b0175abd0 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json index d510eb7fe8..cb45a7126e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json index 353d2eb3ee..2b37be4655 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json index c2799f2f9e..9681191225 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json index 4597470db3..7b5d0b42e9 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json index 4a25bf91f3..86320677b5 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json index 824ff1d846..49a420c205 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json index 3f57b73a1f..3e61216161 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json index d3afa29ba4..6bcc1465f8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json index e4432822ad..3b0813506f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json index b8cf01a822..1fdd0cbfe0 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json index 9728e57f4c..b06fcf26cb 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json index 2e3295cd86..ac5ef39d81 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json index ae38a9189f..d74b31e3b6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json index 9d07d3375e..2cd6d5206b 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json index 4e1b88726e..68a6fe3591 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json index 67832cba33..1547635255 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json index dc4e1fd221..6f4ec50f8b 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json index 2f27693f04..b582d662f8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json index f1de945749..7d0507a4d7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json index 3fda14c322..0412893632 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json index 7e12181e9d..36ef25367a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json index 1dfffa1bd7..1252ad814e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json index 25dca621ad..16dba7f79a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json index f126a37f8e..759e704f3f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json index b31512f047..ca94f5a4d1 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json index dd9b428fed..80bde58289 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json index 38a1c1883a..58c2776f6e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json index 525aebb88f..580060e6fe 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json index 5e995b72be..c4a3c31413 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json index b17c65d3e7..887a0fa639 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json index 5b9881cb9f..27942a7e1d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json index 7f11a52b7c..925c18aa11 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json index 194fe42853..3c9c558f77 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json index 1593decfea..ebcabb0fa6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json index 380d48bcb1..5b31143e00 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json index 5a7882bd68..a4b1c223db 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF.json b/resources/profiles/Qidi/filament/QIDI ASA-CF.json index 9e1ac1c012..0b6906338b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "QD_0_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json index 56512094ca..1d8276e697 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "qdecbUennyPdmB0A", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json index 3b0d9029c2..ebd5a74d26 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "oAp4leYdCEJY771O", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json index 795c6dbbfc..7f36d5973b 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "d5wSCLXU0dhvtbM5", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json index 14e508b501..271abf03e1 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "e8Lz1jXDuBS8tzvW", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json index 8d024087cf..d82b9caf50 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "2DYXiTX67NfmBSCX", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json index a9f43cdaee..d291f54a00 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "Kkj773eEVzhT6B7Q", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json index 66bf7ff727..f8945441a6 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "3HTNW0nsdZy151mm", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json index 0e3da99aed..d403b161f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "t9VMvRmLwAT37YHm", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json index 1c5730c874..ab786208f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "F30WpUvosUoiAKry", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json index 0d83c21079..e2c869d923 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "xHG5cy5GGfu88GoC", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json index d90f8c3eec..fd0fe1f926 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "z1EQUUwgsLHYgeHG", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json index 4d1b97b8fd..3a56d3c6fa 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "yTNCP86ycfXgy8zV", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A.json index 4695bcf9ae..937ef89808 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "qkErLCeMU5ufGB0k", - "filament_id": "QD_0_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "true", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json index 5a9f9e7aa5..7ebb044048 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "3k9qy3LCbhnnRRad", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json index a6477c90bb..fcaf24fe9a 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "xYAAeJcC83x4RoIl", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json index 4670fe40bc..6fffac3277 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "JXE7r9nJqui21eJW", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json index e7131b8b4a..3614aa9ebc 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "zSjGCRFJPKjrnxXj", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json index 62eaf75e85..71d711d7f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "qKGOeBEUrafs1H1C", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json index 96112b4283..072689464e 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "S3VakjOmAENmBhoU", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json index dd6e20b2ed..900c3e1f7e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "SaZRrBNZwbPUxSRv", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json index 853d55b506..8e63d3f56a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "33Anr90IUQGC3jJZ", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json index 8758f39eb5..2e8f4acbb4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "l4LT5GPolnkeEEK6", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json index 55db9aa126..741988239b 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "r6LnysrDaSyIserx", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json index a2098e7af1..c0b3eb3d2d 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "O2SmSJeOq2QkMawy", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json index c2a930616a..4df839e4d4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "UkzoaZIuBEwTCUYL", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json index fc64677656..00b3f5abeb 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "wMG9FBNFTJR3mI2Y", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json index da2dbce484..480da3bd6a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "WF4EIoqqebSQYJCL", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json index 5a24596ad8..6aeaf4d124 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "Mu4RDxD4sVyJwRXc", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json index 20e2ce8605..0058311761 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "FJryx96xxfATPqls", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json index f0676efd80..1546b821fe 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "SmywHXjvv1Ju150F", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json index a669d37ca3..e4d84406f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "BwMkyVGyL0Pmqp1w", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json index 5082d4d9f0..d1fc5490ca 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "6bASygXwTEKR4Twi", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json index 22d8ffe823..a629cb862f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "QL7Ob5qH7GBsl9ga", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json index e1fbad24e9..d6cbc67505 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "wwodlWk71rHgZ323", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json index 7ad9a35a0c..1ff04f026c 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "Nh88D1u7mMVGhqCU", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json index 42fe672412..76176b1597 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "OSLMQVT2l2Yert5l", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json index a0b04d61be..fbeb10bf2e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "rpJAbHlG6bJhJoAs", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json index 91265bb6b3..92fafc92ca 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "yyB4FvX6mflpfiZd", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json index b7f85630bd..73b3a23fab 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "I6Tg5JVz1Q0RigOW", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json index 4b29595ea8..20d1de619e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "RmitFKegDy89lNH4", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json index a7a0295a94..a67ef4d5a4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "AoO0ihxQmsL2up4w", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json index e49360108e..34d98b4b1c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "AOa9WW2IN1VHGXGM", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json index 951227fba2..3dbeaf452f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "qdagUM7IIKyfHB2g", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json index c7f30d1c03..183fe2cf8f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "CwsM4SCrRAhAJVfN", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json index a255f2e368..878f91711e 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "HE3KK8QRsGrgLnr5", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json index a6d7f3b66b..4074d5a1cd 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "8JEZpQeq7FEoUQQd", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json index 90b3876c66..ae55810f39 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "6Z2ery99xHlP2ciV", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json index 35d11757ce..bb1c7bd1d1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "27eKOPtsQZIRwQYo", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json index de7de4d803..59ffd6424f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "nf5VwfZ4gpGG5ufO", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json index 49115068c6..574c3f9f38 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "xaGFbFpbrZ9v3RKy", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json index 1a17ca5b69..466ff357d7 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "Vy1gTRsTAyLCcyTC", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json index 03d69431af..35654f4798 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "Rt3UcmwI8R8fxKUa", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json index e62b729ec9..ba7fd2b4b1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "dWb415VG0AlqTWFD", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json index 28111c4f07..2c89680ccc 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "9YVeedSIviWv3n9F", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json index dce300b652..5be44f4493 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "M7OXECFdZK4ZAoba", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json index b95ff5f588..55b3b75f4c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "zXKa67Oj1qSsHlct", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json index 14732dfba7..7f9c359004 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "iJ0geNRlmJkSPQfN", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json index 0ac378e9e8..57af588669 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "PvK39S1OvklDcZiB", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json index 171ae933d8..4063f51d06 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "9CsEnbzkLosi8Y4Y", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json index 46940dd8b6..7966d19908 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "kQGl05whrHW2T43U", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json index b007ae0bf6..8b0517b09b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "m2ctHQXA57lyjj4Q", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json index 0cb15c1cae..7e53839859 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "X0DxlkkldQnTUfLy", - "filament_id": "QD_0_1_4", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json index bacf625ed2..4fa2ca7198 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "McXMhVyp029M56kU", - "filament_id": "QD_0_1_4", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json index 890f9d3f5a..85c8e28574 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "Uue4WvW1uAwK2o0Y", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json index ed3f0d52ac..f77049928d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "3SSQEk5a2vnHKG2g", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json index 29df7c92ea..01650e5b11 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "jlUhowcsrMLKZBHH", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json index 2060c98114..b0eba4d48b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "HVN6Bfz9FENqgw14", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json index 37cd2a368d..ebbadcecbc 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "T5f0IJeUy3XIzrVw", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json index 2910fe2bd7..eccaa7c066 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "eXV1ZPiBolFIU4Ub", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF.json b/resources/profiles/Qidi/filament/QIDI PPS-GF.json index 8688747e35..dcee07928b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "uoOOXPpTEGa9bqhx", - "filament_id": "QD_0_1_46", + "filament_id": "OFp57RRC", "instantiation": "true", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json index 7093e58d9e..ad53eb97eb 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "aQUPvUd9uPbi7HEx", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json index 2d85b489c1..c214764ce8 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "2RpRJwkUVzHwU6Ts", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json index 77b6a34209..3ecffe9c54 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "Arig0uL9inQi0NKf", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json index bd6310ae72..c5717ecee8 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "EzPLJJzV7W1GfAuZ", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json index 7899b0435f..4282ec8718 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "Nfu1o1YZL9zK1VNS", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json index 43ffafb5bb..3791f09e5a 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "xJQLw0SvSPItH0wa", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json index 18134da7e2..193a5d327f 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "6PFep2VmiWoOZLSn", - "filament_id": "QD_0_1_49", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json index fc9b28c722..9ee1ce187e 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "cqXDJN6nwBX3xVB7", - "filament_id": "QD_0_1_49", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF.json b/resources/profiles/Qidi/filament/QIDI TPU-GF.json index af3827eb77..3f2eef6661 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "r8sdMolKGn3b52NX", - "filament_id": "QD_0_1_15", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json index 3871891090..fcaa74f9c7 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "5Two6xier5Pt2f8V", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json index 31b300d45f..8c8bc9d4f7 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "H011um5zj6afHdTI", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json index 8a2ce25ae4..fc03e055ef 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "26BECX2hYZ6JNFRq", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json index ec46dd83ff..0bf0bc31f2 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "gfnllytSwMCbiB6b", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json index 1e7359636c..260d987ec0 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "PLrMThf2TXZGtp7N", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json index f184003ac0..d3fd897a93 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "ErWlv0gKexLj8wjB", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json index 6116b16149..458556f94c 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "WZuAmHHfdACv1F6k", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json index 859df30d32..296581a97a 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "JCCjjewJVs13S08j", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json index 63911a1567..ce939299ba 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "lWfYhsmJo1Q8FmM8", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json index 469f190953..9cce69fc3b 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "MQ5o43Gclt9U65x6", - "filament_id": "QD_0_1_50", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json index e56f67abf2..3c1e2d5987 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "wNxGljiKmTzCPgzk", - "filament_id": "QD_0_1_50", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json index e01dbb5296..90cac58dbe 100644 --- a/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json index 655713b891..6d10f9e6a6 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PC@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json index e855840148..3c470bad37 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json index a4ee80e67d..5ce7036913 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json index e83be7d908..afa2c0b90b 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json index 10a520531d..4f96f760b2 100644 --- a/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json index 0b89883f41..ea38a66fe4 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json index 3ba45a14dc..89647b53d5 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json index 64dc667a44..beb4d8f07b 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json index 218e883448..e1ddebc083 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json index c6937e0080..27a6187a1d 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json index 3a66fdea86..8fc3684bfa 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json index 3cc72406a4..5da0ac2e10 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json index e217915579..76a9afd45e 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json index 83cd3e27cb..e195621413 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json index 8a35c7330b..ad1878ee8b 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json index 7bffaf11b5..a3e381a55c 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PC/ABS-FR@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_34", + "filament_id": "OFDIrhbu", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json index 4745e19ad2..a78fefa651 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json index 6322639eb3..6573bb507a 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json index f18e2de950..8ee271de38 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json index c7261208cc..5dc9cc4cda 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json index 3050d4abd6..1a888d7bc6 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json index 783925d2b5..885ff3c1c0 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json index 21477a006f..a5f0628a80 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json index f3aabb1ef5..4acccce76b 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json index 9b0379ea52..f1501c1e7e 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json index 2dd1d28dd4..1340cd0d03 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json index dd407427ce..d23f66eede 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json index 1e6ea5b8e0..b072ca8019 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json index 95d0666c1d..9963e2418a 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json index 0f848e6d5b..89e966f907 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json index d5f3d83679..64620cdff7 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json index 7331ce75ad..f5a72549cf 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json index c5500bb3c0..a560f6933d 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json index 318920501f..de93c9e149 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json index 2a1eddd8a2..161f9bd4c3 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json index 64fbb1eb22..c437350e37 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json index fea6c771ac..9a1cafaf3c 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json index 7aeb542fec..a19ddd39ea 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json index 25a934fd19..2739b9f1a0 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json index 1194e6c03d..618b506251 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json index 21629d63c9..140dd98bdc 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json index d62533d44e..a8824c9917 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json index 4bb0cbe387..accf79987f 100644 --- a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_11", + "filament_id": "OFY9muEs", "name": "Generic ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json index 360f0ee803..79745adfce 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_23", + "filament_id": "OFLakOUI", "name": "Generic PC@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json index ab1b23bb60..0e65fe68f7 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_41", + "filament_id": "OFYPdQJh", "name": "Generic PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json index e3939b7796..3b7690cc38 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_1", + "filament_id": "OFDSrzZ8", "name": "Generic PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json index 1c0d325a37..afa64cc602 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_4", + "filament_id": "OFesA6rF", "name": "Generic PLA Silk@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json index d5f56d408b..b98a3a0a2f 100644 --- a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_50", + "filament_id": "OFjiXpyf", "name": "Generic TPU 95A@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json index a2f14984a0..7a80b433df 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_14", + "filament_id": "OFma5TXH", "name": "QIDI ABS Odorless@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json index 0ecb9c656c..0afffa18f4 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_11", + "filament_id": "OFT2jon4", "name": "QIDI ABS Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json index f3603eda99..9614cab30f 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_13", + "filament_id": "OFeCJqxx", "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json index 2ab2fbfc84..5336842811 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_12", + "filament_id": "OFt3HtlG", "name": "QIDI ABS-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json index 97127fe57b..b8fe444dd2 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_18", + "filament_id": "OFTsHNQi", "name": "QIDI ASA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json index 14423fd58c..73fb83834d 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_19", + "filament_id": "OFu1E4ur", "name": "QIDI ASA-Aero@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json index 9a8958c860..12606c993b 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_20", + "filament_id": "OF1W7c76", "name": "QIDI ASA-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json index 3464bed9a3..6abc420237 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_27", + "filament_id": "OFn6WpN7", "name": "QIDI PA12-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json index 9b6a66f61b..1c70ef53a0 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_25", + "filament_id": "OFZ3K2cL", "name": "QIDI PA6-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json index fcfccfe0f6..ca5591813d 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_30", + "filament_id": "OFKgmsqE", "name": "QIDI PAHT-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json index 3c0f1056ed..411ae26214 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_31", + "filament_id": "OFo15hcT", "name": "QIDI PAHT-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json index b6c6fb3b64..c7e407cd2e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_34", + "filament_id": "OFDIrhbu", "name": "QIDI PC/ABS-FR@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json index 43410eabe1..bf56f12203 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_36", + "filament_id": "OFhiJE7Y", "name": "QIDI PEBA 95A@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json index 162cbec691..9163c3344e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_37", + "filament_id": "OFKfJTwL", "name": "QIDI PET-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json index 84310856cc..83e68f579f 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_38", + "filament_id": "OFhx4uOG", "name": "QIDI PET-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json index 46810f49c3..7254fd50bb 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_39", + "filament_id": "OFuJ49uH", "name": "QIDI PETG Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json index fd506d8e74..01a3e6cabe 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_41", + "filament_id": "OF4S3To3", "name": "QIDI PETG Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json index 3e9f0a1cdf..ed1b218139 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_40", + "filament_id": "OFQ40XeN", "name": "QIDI PETG Tough@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json index 62ea937028..94792b7a75 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_45", + "filament_id": "OFf0MkD5", "name": "QIDI PETG Translucent@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json index fcddc636a8..19f7f473dd 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_42", + "filament_id": "OF4iWKrE", "name": "QIDI PETG-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json index fa65907d3d..3bed003091 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_43", + "filament_id": "OFdtPd9h", "name": "QIDI PETG-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json index 0ee194dfb3..30e12990e3 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_7", + "filament_id": "OF4nQ62r", "name": "QIDI PLA Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json index 7796bf1faa..2843092024 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_8", + "filament_id": "OFughwKn", "name": "QIDI PLA Matte Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json index 1aa1803258..6327908055 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_1", + "filament_id": "OFKIQO2W", "name": "QIDI PLA Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json index d8cbd06ea1..9e2380faea 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_2", + "filament_id": "OF3IKafc", "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json index 404b7cd1e8..bc9f655538 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_3", + "filament_id": "OFANFm4x", "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json index 57c0c3e1dc..2b6574b104 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_4", + "filament_id": "OF2TQpOO", "name": "QIDI PLA Silk@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json index 1c4d8c99e3..390b331556 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_5", + "filament_id": "OFhWrAuP", "name": "QIDI PLA-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json index c6be7046f6..b482042819 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_44", + "filament_id": "OFZOuWrO", "name": "QIDI PPS-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json index 757d4dbf3d..615d895851 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_46", + "filament_id": "OFp57RRC", "name": "QIDI PPS-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json index ed1222daa9..63941c851b 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_32", + "filament_id": "OFXn3Vd9", "name": "QIDI Support For PAHT@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json index 346c3cc3eb..969fc2bccc 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_33", + "filament_id": "OFqcL5UF", "name": "QIDI Support For PET/PA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json index 4721ab171c..7b06c92253 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_50", + "filament_id": "OFR1XLMN", "name": "QIDI TPU 95A-HF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json index b6eee90916..4ede2d7d6e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_49", + "filament_id": "OFMDHOcT", "name": "QIDI TPU-Aero@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json index b3f2f71866..90de30cb02 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_15", + "filament_id": "OF9EHUKK", "name": "QIDI TPU-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json index 9d86c06f95..75a89479e2 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_24", + "filament_id": "OFWDe7YH", "name": "QIDI UltraPA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json index 73379541b3..2ea27efa4b 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_26", + "filament_id": "OF9PELEb", "name": "QIDI UltraPA-CF25@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json index 30428c7422..efbe41d51d 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_6", + "filament_id": "OFvdZ2bx", "name": "QIDI WOOD Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index 241b4cbb9f..795fa4f768 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -3603,6 +3603,1230 @@ ], "successor": "OFWRITFw" }, + "QD_0_1_1": { + "claims": [ + "Qidi/QIDI PLA Rapido" + ], + "successor": "OFKIQO2W" + }, + "QD_0_1_15": { + "claims": [ + "Qidi/QIDI TPU-GF" + ], + "successor": "OF9EHUKK" + }, + "QD_0_1_2": { + "claims": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "successor": "OF3IKafc" + }, + "QD_0_1_20": { + "claims": [ + "Qidi/QIDI ASA-CF" + ], + "successor": "OF1W7c76" + }, + "QD_0_1_24": { + "claims": [ + "Qidi/QIDI PA-Ultra" + ], + "successor": "OFlN6DL1" + }, + "QD_0_1_26": { + "claims": [ + "Qidi/QIDI UltraPA-CF25" + ], + "successor": "OF9PELEb" + }, + "QD_0_1_27": { + "claims": [ + "Qidi/QIDI PA12-CF" + ], + "successor": "OFn6WpN7" + }, + "QD_0_1_3": { + "claims": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "successor": "OFANFm4x" + }, + "QD_0_1_30": { + "claims": [ + "Qidi/QIDI PAHT-CF" + ], + "successor": "OFKgmsqE" + }, + "QD_0_1_31": { + "claims": [ + "Qidi/QIDI PAHT-GF" + ], + "successor": "OFo15hcT" + }, + "QD_0_1_32": { + "claims": [ + "Qidi/QIDI Support For PAHT" + ], + "successor": "OFXn3Vd9" + }, + "QD_0_1_33": { + "claims": [ + "Qidi/QIDI Support For PET/PA" + ], + "successor": "OFqcL5UF" + }, + "QD_0_1_34": { + "claims": [ + "Qidi/Qidi PC-ABS-FR" + ], + "successor": "OFjD3YTW" + }, + "QD_0_1_36": { + "claims": [ + "Qidi/QIDI PEBA 95A" + ], + "successor": "OFhiJE7Y" + }, + "QD_0_1_37": { + "claims": [ + "Qidi/QIDI PET-CF" + ], + "successor": "OFKfJTwL" + }, + "QD_0_1_38": { + "claims": [ + "Qidi/QIDI PET-GF" + ], + "successor": "OFhx4uOG" + }, + "QD_0_1_39": { + "claims": [ + "Qidi/QIDI PETG Basic" + ], + "successor": "OFuJ49uH" + }, + "QD_0_1_4": { + "claims": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "successor": "OFW5FqkL" + }, + "QD_0_1_40": { + "claims": [ + "Qidi/QIDI PETG Tough" + ], + "successor": "OFQ40XeN" + }, + "QD_0_1_41": { + "claims": [ + "Qidi/QIDI PETG Rapido" + ], + "successor": "OF4S3To3" + }, + "QD_0_1_42": { + "claims": [ + "Qidi/QIDI PETG-CF" + ], + "successor": "OF4iWKrE" + }, + "QD_0_1_43": { + "claims": [ + "Qidi/QIDI PETG-GF" + ], + "successor": "OFdtPd9h" + }, + "QD_0_1_44": { + "claims": [ + "Qidi/QIDI PPS-CF" + ], + "successor": "OFZOuWrO" + }, + "QD_0_1_45": { + "claims": [ + "Qidi/QIDI PETG Translucent" + ], + "successor": "OFf0MkD5" + }, + "QD_0_1_46": { + "claims": [ + "Qidi/QIDI PPS-GF" + ], + "successor": "OFp57RRC" + }, + "QD_0_1_49": { + "claims": [ + "Qidi/QIDI TPU-Aero" + ], + "successor": "OFMDHOcT" + }, + "QD_0_1_5": { + "claims": [ + "Qidi/QIDI PLA-CF" + ], + "successor": "OFhWrAuP" + }, + "QD_0_1_50": { + "claims": [ + "Qidi/Qidi TPU 95A-HF" + ], + "successor": "OFzAWsca" + }, + "QD_0_1_6": { + "claims": [ + "Qidi/QIDI WOOD Rapido" + ], + "successor": "OFvdZ2bx" + }, + "QD_0_1_7": { + "claims": [ + "Qidi/QIDI PLA Basic" + ], + "successor": "OF4nQ62r" + }, + "QD_0_1_8": { + "claims": [ + "Qidi/QIDI PLA Matte Basic" + ], + "successor": "OFughwKn" + }, + "QD_1_0_1": { + "claims": [ + "Qidi/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "QD_1_0_11": { + "claims": [ + "Qidi/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "QD_1_0_23": { + "claims": [ + "Qidi/Generic PC" + ], + "successor": "OFLakOUI" + }, + "QD_1_0_4": { + "claims": [ + "Qidi/Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "QD_1_0_41": { + "claims": [ + "Qidi/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "QD_1_0_50": { + "claims": [ + "Qidi/Generic TPU 95A" + ], + "successor": "OFjiXpyf" + }, + "QD_1_1_1": { + "claims": [ + "Qidi/QIDI PLA Rapido" + ], + "successor": "OFKIQO2W" + }, + "QD_1_1_11": { + "claims": [ + "Qidi/QIDI ABS Rapido" + ], + "successor": "OFT2jon4" + }, + "QD_1_1_12": { + "claims": [ + "Qidi/QIDI ABS-GF" + ], + "successor": "OFt3HtlG" + }, + "QD_1_1_13": { + "claims": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "successor": "OFeCJqxx" + }, + "QD_1_1_14": { + "claims": [ + "Qidi/QIDI ABS Odorless" + ], + "successor": "OFma5TXH" + }, + "QD_1_1_15": { + "claims": [ + "Qidi/QIDI TPU-GF" + ], + "successor": "OF9EHUKK" + }, + "QD_1_1_18": { + "claims": [ + "Qidi/QIDI ASA" + ], + "successor": "OFTsHNQi" + }, + "QD_1_1_19": { + "claims": [ + "Qidi/QIDI ASA-Aero" + ], + "successor": "OFu1E4ur" + }, + "QD_1_1_2": { + "claims": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "successor": "OF3IKafc" + }, + "QD_1_1_20": { + "claims": [ + "Qidi/QIDI ASA-CF" + ], + "successor": "OF1W7c76" + }, + "QD_1_1_24": { + "claims": [ + "Qidi/QIDI UltraPA" + ], + "successor": "OFWDe7YH" + }, + "QD_1_1_26": { + "claims": [ + "Qidi/QIDI UltraPA-CF25" + ], + "successor": "OF9PELEb" + }, + "QD_1_1_27": { + "claims": [ + "Qidi/QIDI PA12-CF" + ], + "successor": "OFn6WpN7" + }, + "QD_1_1_3": { + "claims": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "successor": "OFANFm4x" + }, + "QD_1_1_30": { + "claims": [ + "Qidi/QIDI PAHT-CF" + ], + "successor": "OFKgmsqE" + }, + "QD_1_1_31": { + "claims": [ + "Qidi/QIDI PAHT-GF" + ], + "successor": "OFo15hcT" + }, + "QD_1_1_32": { + "claims": [ + "Qidi/QIDI Support For PAHT" + ], + "successor": "OFXn3Vd9" + }, + "QD_1_1_33": { + "claims": [ + "Qidi/QIDI Support For PET/PA" + ], + "successor": "OFqcL5UF" + }, + "QD_1_1_34": { + "claims": [ + "Qidi/QIDI PC-ABS-FR" + ], + "successor": "OFFAWVf0" + }, + "QD_1_1_36": { + "claims": [ + "Qidi/QIDI PEBA 95A" + ], + "successor": "OFhiJE7Y" + }, + "QD_1_1_37": { + "claims": [ + "Qidi/QIDI PET-CF" + ], + "successor": "OFKfJTwL" + }, + "QD_1_1_38": { + "claims": [ + "Qidi/QIDI PET-GF" + ], + "successor": "OFhx4uOG" + }, + "QD_1_1_39": { + "claims": [ + "Qidi/QIDI PETG Basic" + ], + "successor": "OFuJ49uH" + }, + "QD_1_1_4": { + "claims": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "successor": "OFW5FqkL" + }, + "QD_1_1_40": { + "claims": [ + "Qidi/QIDI PETG Tough" + ], + "successor": "OFQ40XeN" + }, + "QD_1_1_41": { + "claims": [ + "Qidi/QIDI PETG Rapido" + ], + "successor": "OF4S3To3" + }, + "QD_1_1_42": { + "claims": [ + "Qidi/QIDI PETG-CF" + ], + "successor": "OF4iWKrE" + }, + "QD_1_1_43": { + "claims": [ + "Qidi/QIDI PETG-GF" + ], + "successor": "OFdtPd9h" + }, + "QD_1_1_44": { + "claims": [ + "Qidi/QIDI PPS-CF" + ], + "successor": "OFZOuWrO" + }, + "QD_1_1_45": { + "claims": [ + "Qidi/QIDI PETG Translucent" + ], + "successor": "OFf0MkD5" + }, + "QD_1_1_46": { + "claims": [ + "Qidi/QIDI PPS-GF" + ], + "successor": "OFp57RRC" + }, + "QD_1_1_49": { + "claims": [ + "Qidi/QIDI TPU-Aero" + ], + "successor": "OFMDHOcT" + }, + "QD_1_1_5": { + "claims": [ + "Qidi/QIDI PLA-CF" + ], + "successor": "OFhWrAuP" + }, + "QD_1_1_50": { + "claims": [ + "Qidi/QIDI TPU 95A-HF" + ], + "successor": "OFR1XLMN" + }, + "QD_1_1_6": { + "claims": [ + "Qidi/QIDI WOOD Rapido" + ], + "successor": "OFvdZ2bx" + }, + "QD_1_1_7": { + "claims": [ + "Qidi/QIDI PLA Basic" + ], + "successor": "OF4nQ62r" + }, + "QD_1_1_8": { + "claims": [ + "Qidi/QIDI PLA Matte Basic" + ], + "successor": "OFughwKn" + }, + "QD_2_0_1": { + "claims": [ + "Qidi/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "QD_2_0_11": { + "claims": [ + "Qidi/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "QD_2_0_23": { + "claims": [ + "Qidi/Generic PC" + ], + "successor": "OFLakOUI" + }, + "QD_2_0_4": { + "claims": [ + "Qidi/Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "QD_2_0_41": { + "claims": [ + "Qidi/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "QD_2_0_50": { + "claims": [ + "Qidi/Generic TPU 95A" + ], + "successor": "OFjiXpyf" + }, + "QD_2_1_1": { + "claims": [ + "Qidi/QIDI PLA Rapido" + ], + "successor": "OFKIQO2W" + }, + "QD_2_1_11": { + "claims": [ + "Qidi/QIDI ABS Rapido" + ], + "successor": "OFT2jon4" + }, + "QD_2_1_12": { + "claims": [ + "Qidi/QIDI ABS-GF" + ], + "successor": "OFt3HtlG" + }, + "QD_2_1_13": { + "claims": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "successor": "OFeCJqxx" + }, + "QD_2_1_14": { + "claims": [ + "Qidi/QIDI ABS Odorless" + ], + "successor": "OFma5TXH" + }, + "QD_2_1_15": { + "claims": [ + "Qidi/QIDI TPU-GF" + ], + "successor": "OF9EHUKK" + }, + "QD_2_1_18": { + "claims": [ + "Qidi/QIDI ASA" + ], + "successor": "OFTsHNQi" + }, + "QD_2_1_19": { + "claims": [ + "Qidi/QIDI ASA-Aero" + ], + "successor": "OFu1E4ur" + }, + "QD_2_1_2": { + "claims": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "successor": "OF3IKafc" + }, + "QD_2_1_20": { + "claims": [ + "Qidi/QIDI ASA-CF" + ], + "successor": "OF1W7c76" + }, + "QD_2_1_24": { + "claims": [ + "Qidi/QIDI UltraPA" + ], + "successor": "OFWDe7YH" + }, + "QD_2_1_26": { + "claims": [ + "Qidi/QIDI UltraPA-CF25" + ], + "successor": "OF9PELEb" + }, + "QD_2_1_27": { + "claims": [ + "Qidi/QIDI PA12-CF" + ], + "successor": "OFn6WpN7" + }, + "QD_2_1_3": { + "claims": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "successor": "OFANFm4x" + }, + "QD_2_1_30": { + "claims": [ + "Qidi/QIDI PAHT-CF" + ], + "successor": "OFKgmsqE" + }, + "QD_2_1_31": { + "claims": [ + "Qidi/QIDI PAHT-GF" + ], + "successor": "OFo15hcT" + }, + "QD_2_1_32": { + "claims": [ + "Qidi/QIDI Support For PAHT" + ], + "successor": "OFXn3Vd9" + }, + "QD_2_1_33": { + "claims": [ + "Qidi/QIDI Support For PET/PA" + ], + "successor": "OFqcL5UF" + }, + "QD_2_1_34": { + "claims": [ + "Qidi/QIDI PC-ABS-FR" + ], + "successor": "OFFAWVf0" + }, + "QD_2_1_36": { + "claims": [ + "Qidi/QIDI PEBA 95A" + ], + "successor": "OFhiJE7Y" + }, + "QD_2_1_37": { + "claims": [ + "Qidi/QIDI PET-CF" + ], + "successor": "OFKfJTwL" + }, + "QD_2_1_38": { + "claims": [ + "Qidi/QIDI PET-GF" + ], + "successor": "OFhx4uOG" + }, + "QD_2_1_39": { + "claims": [ + "Qidi/QIDI PETG Basic" + ], + "successor": "OFuJ49uH" + }, + "QD_2_1_4": { + "claims": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "successor": "OFW5FqkL" + }, + "QD_2_1_40": { + "claims": [ + "Qidi/QIDI PETG Tough" + ], + "successor": "OFQ40XeN" + }, + "QD_2_1_41": { + "claims": [ + "Qidi/QIDI PETG Rapido" + ], + "successor": "OF4S3To3" + }, + "QD_2_1_42": { + "claims": [ + "Qidi/QIDI PETG-CF" + ], + "successor": "OF4iWKrE" + }, + "QD_2_1_43": { + "claims": [ + "Qidi/QIDI PETG-GF" + ], + "successor": "OFdtPd9h" + }, + "QD_2_1_44": { + "claims": [ + "Qidi/QIDI PPS-CF" + ], + "successor": "OFZOuWrO" + }, + "QD_2_1_45": { + "claims": [ + "Qidi/QIDI PETG Translucent" + ], + "successor": "OFf0MkD5" + }, + "QD_2_1_46": { + "claims": [ + "Qidi/QIDI PPS-GF" + ], + "successor": "OFp57RRC" + }, + "QD_2_1_49": { + "claims": [ + "Qidi/QIDI TPU-Aero" + ], + "successor": "OFMDHOcT" + }, + "QD_2_1_5": { + "claims": [ + "Qidi/QIDI PLA-CF" + ], + "successor": "OFhWrAuP" + }, + "QD_2_1_50": { + "claims": [ + "Qidi/QIDI TPU 95A-HF" + ], + "successor": "OFR1XLMN" + }, + "QD_2_1_6": { + "claims": [ + "Qidi/QIDI WOOD Rapido" + ], + "successor": "OFvdZ2bx" + }, + "QD_2_1_7": { + "claims": [ + "Qidi/QIDI PLA Basic" + ], + "successor": "OF4nQ62r" + }, + "QD_2_1_8": { + "claims": [ + "Qidi/QIDI PLA Matte Basic" + ], + "successor": "OFughwKn" + }, + "QD_3_0_1": { + "claims": [ + "Qidi/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "QD_3_0_11": { + "claims": [ + "Qidi/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "QD_3_0_23": { + "claims": [ + "Qidi/Generic PC" + ], + "successor": "OFLakOUI" + }, + "QD_3_0_4": { + "claims": [ + "Qidi/Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "QD_3_0_41": { + "claims": [ + "Qidi/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "QD_3_0_50": { + "claims": [ + "Qidi/Generic TPU 95A" + ], + "successor": "OFjiXpyf" + }, + "QD_3_1_1": { + "claims": [ + "Qidi/QIDI PLA Rapido" + ], + "successor": "OFKIQO2W" + }, + "QD_3_1_11": { + "claims": [ + "Qidi/QIDI ABS Rapido" + ], + "successor": "OFT2jon4" + }, + "QD_3_1_12": { + "claims": [ + "Qidi/QIDI ABS-GF" + ], + "successor": "OFt3HtlG" + }, + "QD_3_1_13": { + "claims": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "successor": "OFeCJqxx" + }, + "QD_3_1_14": { + "claims": [ + "Qidi/QIDI ABS Odorless" + ], + "successor": "OFma5TXH" + }, + "QD_3_1_15": { + "claims": [ + "Qidi/QIDI TPU-GF" + ], + "successor": "OF9EHUKK" + }, + "QD_3_1_18": { + "claims": [ + "Qidi/QIDI ASA" + ], + "successor": "OFTsHNQi" + }, + "QD_3_1_19": { + "claims": [ + "Qidi/QIDI ASA-Aero" + ], + "successor": "OFu1E4ur" + }, + "QD_3_1_2": { + "claims": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "successor": "OF3IKafc" + }, + "QD_3_1_20": { + "claims": [ + "Qidi/QIDI ASA-CF" + ], + "successor": "OF1W7c76" + }, + "QD_3_1_24": { + "claims": [ + "Qidi/QIDI UltraPA" + ], + "successor": "OFWDe7YH" + }, + "QD_3_1_26": { + "claims": [ + "Qidi/QIDI UltraPA-CF25" + ], + "successor": "OF9PELEb" + }, + "QD_3_1_27": { + "claims": [ + "Qidi/QIDI PA12-CF" + ], + "successor": "OFn6WpN7" + }, + "QD_3_1_3": { + "claims": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "successor": "OFANFm4x" + }, + "QD_3_1_30": { + "claims": [ + "Qidi/QIDI PAHT-CF" + ], + "successor": "OFKgmsqE" + }, + "QD_3_1_31": { + "claims": [ + "Qidi/QIDI PAHT-GF" + ], + "successor": "OFo15hcT" + }, + "QD_3_1_32": { + "claims": [ + "Qidi/QIDI Support For PAHT" + ], + "successor": "OFXn3Vd9" + }, + "QD_3_1_33": { + "claims": [ + "Qidi/QIDI Support For PET/PA" + ], + "successor": "OFqcL5UF" + }, + "QD_3_1_34": { + "claims": [ + "Qidi/QIDI PC/ABS-FR" + ], + "successor": "OFDIrhbu" + }, + "QD_3_1_36": { + "claims": [ + "Qidi/QIDI PEBA 95A" + ], + "successor": "OFhiJE7Y" + }, + "QD_3_1_37": { + "claims": [ + "Qidi/QIDI PET-CF" + ], + "successor": "OFKfJTwL" + }, + "QD_3_1_38": { + "claims": [ + "Qidi/QIDI PET-GF" + ], + "successor": "OFhx4uOG" + }, + "QD_3_1_39": { + "claims": [ + "Qidi/QIDI PETG Basic" + ], + "successor": "OFuJ49uH" + }, + "QD_3_1_4": { + "claims": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "successor": "OFW5FqkL" + }, + "QD_3_1_40": { + "claims": [ + "Qidi/QIDI PETG Tough" + ], + "successor": "OFQ40XeN" + }, + "QD_3_1_41": { + "claims": [ + "Qidi/QIDI PETG Rapido" + ], + "successor": "OF4S3To3" + }, + "QD_3_1_42": { + "claims": [ + "Qidi/QIDI PETG-CF" + ], + "successor": "OF4iWKrE" + }, + "QD_3_1_43": { + "claims": [ + "Qidi/QIDI PETG-GF" + ], + "successor": "OFdtPd9h" + }, + "QD_3_1_44": { + "claims": [ + "Qidi/QIDI PPS-CF" + ], + "successor": "OFZOuWrO" + }, + "QD_3_1_45": { + "claims": [ + "Qidi/QIDI PETG Translucent" + ], + "successor": "OFf0MkD5" + }, + "QD_3_1_46": { + "claims": [ + "Qidi/QIDI PPS-GF" + ], + "successor": "OFp57RRC" + }, + "QD_3_1_49": { + "claims": [ + "Qidi/QIDI TPU-Aero" + ], + "successor": "OFMDHOcT" + }, + "QD_3_1_5": { + "claims": [ + "Qidi/QIDI PLA-CF" + ], + "successor": "OFhWrAuP" + }, + "QD_3_1_50": { + "claims": [ + "Qidi/QIDI TPU 95A-HF" + ], + "successor": "OFR1XLMN" + }, + "QD_3_1_6": { + "claims": [ + "Qidi/QIDI WOOD Rapido" + ], + "successor": "OFvdZ2bx" + }, + "QD_3_1_7": { + "claims": [ + "Qidi/QIDI PLA Basic" + ], + "successor": "OF4nQ62r" + }, + "QD_3_1_8": { + "claims": [ + "Qidi/QIDI PLA Matte Basic" + ], + "successor": "OFughwKn" + }, + "QD_4_0_1": { + "claims": [ + "Qidi/Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "QD_4_0_11": { + "claims": [ + "Qidi/Generic ABS" + ], + "successor": "OFY9muEs" + }, + "QD_4_0_23": { + "claims": [ + "Qidi/Generic PC" + ], + "successor": "OFLakOUI" + }, + "QD_4_0_4": { + "claims": [ + "Qidi/Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "QD_4_0_41": { + "claims": [ + "Qidi/Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "QD_4_0_50": { + "claims": [ + "Qidi/Generic TPU 95A" + ], + "successor": "OFjiXpyf" + }, + "QD_4_1_1": { + "claims": [ + "Qidi/QIDI PLA Rapido" + ], + "successor": "OFKIQO2W" + }, + "QD_4_1_11": { + "claims": [ + "Qidi/QIDI ABS Rapido" + ], + "successor": "OFT2jon4" + }, + "QD_4_1_12": { + "claims": [ + "Qidi/QIDI ABS-GF" + ], + "successor": "OFt3HtlG" + }, + "QD_4_1_13": { + "claims": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "successor": "OFeCJqxx" + }, + "QD_4_1_14": { + "claims": [ + "Qidi/QIDI ABS Odorless" + ], + "successor": "OFma5TXH" + }, + "QD_4_1_15": { + "claims": [ + "Qidi/QIDI TPU-GF" + ], + "successor": "OF9EHUKK" + }, + "QD_4_1_18": { + "claims": [ + "Qidi/QIDI ASA" + ], + "successor": "OFTsHNQi" + }, + "QD_4_1_19": { + "claims": [ + "Qidi/QIDI ASA-Aero" + ], + "successor": "OFu1E4ur" + }, + "QD_4_1_2": { + "claims": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "successor": "OF3IKafc" + }, + "QD_4_1_20": { + "claims": [ + "Qidi/QIDI ASA-CF" + ], + "successor": "OF1W7c76" + }, + "QD_4_1_24": { + "claims": [ + "Qidi/QIDI UltraPA" + ], + "successor": "OFWDe7YH" + }, + "QD_4_1_25": { + "claims": [ + "Qidi/QIDI PA6-CF" + ], + "successor": "OFZ3K2cL" + }, + "QD_4_1_26": { + "claims": [ + "Qidi/QIDI UltraPA-CF25" + ], + "successor": "OF9PELEb" + }, + "QD_4_1_27": { + "claims": [ + "Qidi/QIDI PA12-CF" + ], + "successor": "OFn6WpN7" + }, + "QD_4_1_3": { + "claims": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "successor": "OFANFm4x" + }, + "QD_4_1_30": { + "claims": [ + "Qidi/QIDI PAHT-CF" + ], + "successor": "OFKgmsqE" + }, + "QD_4_1_31": { + "claims": [ + "Qidi/QIDI PAHT-GF" + ], + "successor": "OFo15hcT" + }, + "QD_4_1_32": { + "claims": [ + "Qidi/QIDI Support For PAHT" + ], + "successor": "OFXn3Vd9" + }, + "QD_4_1_33": { + "claims": [ + "Qidi/QIDI Support For PET/PA" + ], + "successor": "OFqcL5UF" + }, + "QD_4_1_34": { + "claims": [ + "Qidi/QIDI PC/ABS-FR" + ], + "successor": "OFDIrhbu" + }, + "QD_4_1_36": { + "claims": [ + "Qidi/QIDI PEBA 95A" + ], + "successor": "OFhiJE7Y" + }, + "QD_4_1_37": { + "claims": [ + "Qidi/QIDI PET-CF" + ], + "successor": "OFKfJTwL" + }, + "QD_4_1_38": { + "claims": [ + "Qidi/QIDI PET-GF" + ], + "successor": "OFhx4uOG" + }, + "QD_4_1_39": { + "claims": [ + "Qidi/QIDI PETG Basic" + ], + "successor": "OFuJ49uH" + }, + "QD_4_1_4": { + "claims": [ + "Qidi/QIDI PLA Silk" + ], + "successor": "OF2TQpOO" + }, + "QD_4_1_40": { + "claims": [ + "Qidi/QIDI PETG Tough" + ], + "successor": "OFQ40XeN" + }, + "QD_4_1_41": { + "claims": [ + "Qidi/QIDI PETG Rapido" + ], + "successor": "OF4S3To3" + }, + "QD_4_1_42": { + "claims": [ + "Qidi/QIDI PETG-CF" + ], + "successor": "OF4iWKrE" + }, + "QD_4_1_43": { + "claims": [ + "Qidi/QIDI PETG-GF" + ], + "successor": "OFdtPd9h" + }, + "QD_4_1_44": { + "claims": [ + "Qidi/QIDI PPS-CF" + ], + "successor": "OFZOuWrO" + }, + "QD_4_1_45": { + "claims": [ + "Qidi/QIDI PETG Translucent" + ], + "successor": "OFf0MkD5" + }, + "QD_4_1_46": { + "claims": [ + "Qidi/QIDI PPS-GF" + ], + "successor": "OFp57RRC" + }, + "QD_4_1_49": { + "claims": [ + "Qidi/QIDI TPU-Aero" + ], + "successor": "OFMDHOcT" + }, + "QD_4_1_5": { + "claims": [ + "Qidi/QIDI PLA-CF" + ], + "successor": "OFhWrAuP" + }, + "QD_4_1_50": { + "claims": [ + "Qidi/QIDI TPU 95A-HF" + ], + "successor": "OFR1XLMN" + }, + "QD_4_1_6": { + "claims": [ + "Qidi/QIDI WOOD Rapido" + ], + "successor": "OFvdZ2bx" + }, + "QD_4_1_7": { + "claims": [ + "Qidi/QIDI PLA Basic" + ], + "successor": "OF4nQ62r" + }, + "QD_4_1_8": { + "claims": [ + "Qidi/QIDI PLA Matte Basic" + ], + "successor": "OFughwKn" + }, "SMCFB001": { "claims": [ "SeeMeCNC/SeeMeCNC ABS" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 14d207b34f..5183acc069 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -889,87 +889,11 @@ "Qidi/QIDI ABS Rapido 0.2 nozzle", "Qidi/QIDI ABS Rapido 0.6 nozzle", "Qidi/QIDI ABS Rapido 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 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 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 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 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 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 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 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 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 0.2 nozzle", "Qidi/QIDI PETG Tough 0.6 nozzle", "Qidi/QIDI PETG Tough 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 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 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 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 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 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 0.2 nozzle", "Qidi/QIDI PLA Rapido 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 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 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 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", @@ -978,38 +902,10 @@ "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 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 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 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 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 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 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 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 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 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 TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle", "Snapmaker/PolyLite Dual PLA @0.2 nozzle", "Snapmaker/PolyLite J1 PLA", "Snapmaker/PolyLite J1 PLA @0.2 nozzle", @@ -1822,6 +1718,9 @@ "OF2RjrWH": [ "Flashforge/FusRock Generic PAHT-GF" ], + "OF2TQpOO": [ + "Qidi/QIDI PLA Silk" + ], "OF2VFe4J": [ "OrcaFilamentLibrary/Bambu PAHT-CF" ], @@ -2391,6 +2290,9 @@ "OFDGigEI": [ "OrcaFilamentLibrary/Bambu PLA Dynamic" ], + "OFDIrhbu": [ + "Qidi/QIDI PC/ABS-FR" + ], "OFDJU6R3": [ "Afinia/Afinia TPU" ], @@ -2411,6 +2313,7 @@ "Flashforge/Generic PLA", "LONGER/Generic PLA", "OrcaFilamentLibrary/Generic PLA", + "Qidi/Generic PLA", "RH3D/Generic PLA", "Sovol/Generic PLA", "Z-Bolt/Generic PLA" @@ -2520,6 +2423,9 @@ "OFF9cgY5": [ "Snapmaker/Snapmaker PLA Matte" ], + "OFFAWVf0": [ + "Qidi/QIDI PC-ABS-FR" + ], "OFFC0VqZ": [ "Ratrig/RatRig BigNozzle PCTG" ], @@ -2895,6 +2801,7 @@ "Custom/Generic PC", "Elegoo/Generic PC", "OrcaFilamentLibrary/Generic PC", + "Qidi/Generic PC", "Sovol/Generic PC" ], "OFLbXwoL": [ @@ -3246,6 +3153,9 @@ "OFR0gODA": [ "SeeMeCNC/SeeMeCNC ABS" ], + "OFR1XLMN": [ + "Qidi/QIDI TPU 95A-HF" + ], "OFRDLNM9": [ "Peopoly/Peopoly Generic PLA" ], @@ -3495,6 +3405,9 @@ "OFW9uIkE": [ "Tiertime/Tiertime Generic HIPS" ], + "OFWDe7YH": [ + "Qidi/QIDI UltraPA" + ], "OFWIr7ZE": [ "CoLiDo/CoLiDo Generic ABS" ], @@ -3629,6 +3542,7 @@ "Elegoo/Generic ABS", "Flashforge/Generic ABS", "OrcaFilamentLibrary/Generic ABS", + "Qidi/Generic ABS", "RH3D/Generic ABS", "Sovol/Generic ABS", "Z-Bolt/Generic ABS" @@ -3654,6 +3568,7 @@ "Flashforge/Generic PETG", "LONGER/Generic PETG", "OrcaFilamentLibrary/Generic PETG", + "Qidi/Generic PETG", "RH3D/Generic PETG", "Sovol/Generic PETG", "Z-Bolt/Generic PETG" @@ -3690,6 +3605,9 @@ "OFZ2LuAi": [ "Wanhao France/YUMI PLA Bowden" ], + "OFZ3K2cL": [ + "Qidi/QIDI PA6-CF" + ], "OFZ4QbfK": [ "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" ], @@ -3963,6 +3881,7 @@ "OFesA6rF": [ "Flashforge/Generic PLA Silk", "OrcaFilamentLibrary/Generic PLA Silk", + "Qidi/Generic PLA Silk", "Sovol/Generic PLA Silk" ], "OFetENFF": [ @@ -4299,6 +4218,9 @@ "OFjcwUEm": [ "Cubicon/Cubicon PLA" ], + "OFjiXpyf": [ + "Qidi/Generic TPU 95A" + ], "OFjkdnyN": [ "Snapmaker/Snapmaker Dual TPU" ], @@ -4889,6 +4811,9 @@ "OFu0fjPJ": [ "LH/LHS PC CF" ], + "OFu1E4ur": [ + "Qidi/QIDI ASA-Aero" + ], "OFu1evlr": [ "Creality/Generic PCTG", "OrcaFilamentLibrary/Generic PCTG" @@ -5192,618 +5117,6 @@ ], "OFzzmK2Q": [ "FLSun/FLSun S1 ABS" - ], - "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" - ], - "QD_4_0_1": [ - "Qidi/Generic PLA" - ], - "QD_4_0_11": [ - "Qidi/Generic ABS" - ], - "QD_4_0_23": [ - "Qidi/Generic PC" - ], - "QD_4_0_4": [ - "Qidi/Generic PLA Silk" - ], - "QD_4_0_41": [ - "Qidi/Generic PETG" - ], - "QD_4_0_50": [ - "Qidi/Generic TPU 95A" - ], - "QD_4_1_1": [ - "Qidi/QIDI PLA Rapido" - ], - "QD_4_1_11": [ - "Qidi/QIDI ABS Rapido" - ], - "QD_4_1_12": [ - "Qidi/QIDI ABS-GF" - ], - "QD_4_1_13": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "QD_4_1_14": [ - "Qidi/QIDI ABS Odorless" - ], - "QD_4_1_15": [ - "Qidi/QIDI TPU-GF" - ], - "QD_4_1_18": [ - "Qidi/QIDI ASA" - ], - "QD_4_1_19": [ - "Qidi/QIDI ASA-Aero" - ], - "QD_4_1_2": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "QD_4_1_20": [ - "Qidi/QIDI ASA-CF" - ], - "QD_4_1_24": [ - "Qidi/QIDI UltraPA" - ], - "QD_4_1_25": [ - "Qidi/QIDI PA6-CF" - ], - "QD_4_1_26": [ - "Qidi/QIDI UltraPA-CF25" - ], - "QD_4_1_27": [ - "Qidi/QIDI PA12-CF" - ], - "QD_4_1_3": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "QD_4_1_30": [ - "Qidi/QIDI PAHT-CF" - ], - "QD_4_1_31": [ - "Qidi/QIDI PAHT-GF" - ], - "QD_4_1_32": [ - "Qidi/QIDI Support For PAHT" - ], - "QD_4_1_33": [ - "Qidi/QIDI Support For PET/PA" - ], - "QD_4_1_34": [ - "Qidi/QIDI PC/ABS-FR" - ], - "QD_4_1_36": [ - "Qidi/QIDI PEBA 95A" - ], - "QD_4_1_37": [ - "Qidi/QIDI PET-CF" - ], - "QD_4_1_38": [ - "Qidi/QIDI PET-GF" - ], - "QD_4_1_39": [ - "Qidi/QIDI PETG Basic" - ], - "QD_4_1_4": [ - "Qidi/QIDI PLA Silk" - ], - "QD_4_1_40": [ - "Qidi/QIDI PETG Tough" - ], - "QD_4_1_41": [ - "Qidi/QIDI PETG Rapido" - ], - "QD_4_1_42": [ - "Qidi/QIDI PETG-CF" - ], - "QD_4_1_43": [ - "Qidi/QIDI PETG-GF" - ], - "QD_4_1_44": [ - "Qidi/QIDI PPS-CF" - ], - "QD_4_1_45": [ - "Qidi/QIDI PETG Translucent" - ], - "QD_4_1_46": [ - "Qidi/QIDI PPS-GF" - ], - "QD_4_1_49": [ - "Qidi/QIDI TPU-Aero" - ], - "QD_4_1_5": [ - "Qidi/QIDI PLA-CF" - ], - "QD_4_1_50": [ - "Qidi/QIDI TPU 95A-HF" - ], - "QD_4_1_6": [ - "Qidi/QIDI WOOD Rapido" - ], - "QD_4_1_7": [ - "Qidi/QIDI PLA Basic" - ], - "QD_4_1_8": [ - "Qidi/QIDI PLA Matte Basic" ] }, "instantiated_with_id": [ @@ -8710,6 +8023,13 @@ "FusRock Generic PAHT-GF" ] ], + "OF2TQpOO": [ + [ + "QIDI", + "PLA", + "QIDI PLA Silk" + ] + ], "OF2VFe4J": [ [ "Bambu Lab", @@ -10012,6 +9332,13 @@ "Bambu PLA Dynamic" ] ], + "OFDIrhbu": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC/ABS-FR" + ] + ], "OFDJU6R3": [ [ "Afinia", @@ -10285,6 +9612,13 @@ "Snapmaker PLA Matte" ] ], + "OFFAWVf0": [ + [ + "QIDI", + "PC-ABS-FR", + "QIDI PC-ABS-FR" + ] + ], "OFFC0VqZ": [ [ "Generic", @@ -11909,6 +11243,13 @@ "SeeMeCNC ABS" ] ], + "OFR1XLMN": [ + [ + "QIDI", + "TPU", + "QIDI TPU 95A-HF" + ] + ], "OFRDLNM9": [ [ "Generic", @@ -12476,6 +11817,13 @@ "Tiertime Generic HIPS" ] ], + "OFWDe7YH": [ + [ + "QIDI", + "UltraPA", + "QIDI UltraPA" + ] + ], "OFWIr7ZE": [ [ "CoLiDo", @@ -12875,6 +12223,13 @@ "YUMI PLA Bowden" ] ], + "OFZ3K2cL": [ + [ + "QIDI", + "PA6-CF", + "QIDI PA6-CF" + ] + ], "OFZ4QbfK": [ [ "FilAr", @@ -14226,6 +13581,13 @@ "Cubicon PLA" ] ], + "OFjiXpyf": [ + [ + "Generic", + "TPU", + "Generic TPU 95A" + ] + ], "OFjkdnyN": [ [ "Snapmaker", @@ -15535,6 +14897,13 @@ "LHS PC CF" ] ], + "OFu1E4ur": [ + [ + "QIDI", + "ASA-AERO", + "QIDI ASA-Aero" + ] + ], "OFu1evlr": [ [ "Generic", @@ -16227,1434 +15596,6 @@ "ABS", "FLSun S1 ABS" ] - ], - "QD_0_1_1": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "QD_0_1_15": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "QD_0_1_2": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "QD_0_1_20": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "QD_0_1_24": [ - [ - "QIDI", - "UltraPA", - "QIDI PA-Ultra" - ] - ], - "QD_0_1_26": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "QD_0_1_27": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "QD_0_1_3": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "QD_0_1_30": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "QD_0_1_31": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "QD_0_1_32": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "QD_0_1_33": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "QD_0_1_34": [ - [ - "QIDI", - "PC-ABS-FR", - "Qidi PC-ABS-FR" - ] - ], - "QD_0_1_36": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "QD_0_1_37": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "QD_0_1_38": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "QD_0_1_39": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "QD_0_1_4": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Silk" - ] - ], - "QD_0_1_40": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "QD_0_1_41": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "QD_0_1_42": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "QD_0_1_43": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "QD_0_1_44": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "QD_0_1_45": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "QD_0_1_46": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "QD_0_1_49": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "QD_0_1_5": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "QD_0_1_50": [ - [ - "QIDI", - "TPU", - "Qidi TPU 95A-HF" - ] - ], - "QD_0_1_6": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "QD_0_1_7": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "QD_0_1_8": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "QD_1_0_1": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "QD_1_0_11": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "QD_1_0_23": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "QD_1_0_4": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "QD_1_0_41": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "QD_1_0_50": [ - [ - "Generic", - "TPU", - "Generic TPU 95A" - ] - ], - "QD_1_1_1": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "QD_1_1_11": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido" - ] - ], - "QD_1_1_12": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "QD_1_1_13": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido Metal" - ] - ], - "QD_1_1_14": [ - [ - "QIDI", - "ABS", - "QIDI ABS Odorless" - ] - ], - "QD_1_1_15": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "QD_1_1_18": [ - [ - "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "QD_1_1_19": [ - [ - "QIDI", - "ASA-AERO", - "QIDI ASA-Aero" - ] - ], - "QD_1_1_2": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "QD_1_1_20": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "QD_1_1_24": [ - [ - "QIDI", - "UltraPA", - "QIDI UltraPA" - ] - ], - "QD_1_1_26": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "QD_1_1_27": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "QD_1_1_3": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "QD_1_1_30": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "QD_1_1_31": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "QD_1_1_32": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "QD_1_1_33": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "QD_1_1_34": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC-ABS-FR" - ] - ], - "QD_1_1_36": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "QD_1_1_37": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "QD_1_1_38": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "QD_1_1_39": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "QD_1_1_4": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Silk" - ] - ], - "QD_1_1_40": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "QD_1_1_41": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "QD_1_1_42": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "QD_1_1_43": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "QD_1_1_44": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "QD_1_1_45": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "QD_1_1_46": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "QD_1_1_49": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "QD_1_1_5": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "QD_1_1_50": [ - [ - "QIDI", - "TPU", - "QIDI TPU 95A-HF" - ] - ], - "QD_1_1_6": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "QD_1_1_7": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "QD_1_1_8": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "QD_2_0_1": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "QD_2_0_11": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "QD_2_0_23": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "QD_2_0_4": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "QD_2_0_41": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "QD_2_0_50": [ - [ - "Generic", - "TPU", - "Generic TPU 95A" - ] - ], - "QD_2_1_1": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "QD_2_1_11": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido" - ] - ], - "QD_2_1_12": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "QD_2_1_13": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido Metal" - ] - ], - "QD_2_1_14": [ - [ - "QIDI", - "ABS", - "QIDI ABS Odorless" - ] - ], - "QD_2_1_15": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "QD_2_1_18": [ - [ - "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "QD_2_1_19": [ - [ - "QIDI", - "ASA-AERO", - "QIDI ASA-Aero" - ] - ], - "QD_2_1_2": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "QD_2_1_20": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "QD_2_1_24": [ - [ - "QIDI", - "UltraPA", - "QIDI UltraPA" - ] - ], - "QD_2_1_26": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "QD_2_1_27": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "QD_2_1_3": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "QD_2_1_30": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "QD_2_1_31": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "QD_2_1_32": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "QD_2_1_33": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "QD_2_1_34": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC-ABS-FR" - ] - ], - "QD_2_1_36": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "QD_2_1_37": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "QD_2_1_38": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "QD_2_1_39": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "QD_2_1_4": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Silk" - ] - ], - "QD_2_1_40": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "QD_2_1_41": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "QD_2_1_42": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "QD_2_1_43": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "QD_2_1_44": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "QD_2_1_45": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "QD_2_1_46": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "QD_2_1_49": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "QD_2_1_5": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "QD_2_1_50": [ - [ - "QIDI", - "TPU", - "QIDI TPU 95A-HF" - ] - ], - "QD_2_1_6": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "QD_2_1_7": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "QD_2_1_8": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "QD_3_0_1": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "QD_3_0_11": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "QD_3_0_23": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "QD_3_0_4": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "QD_3_0_41": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "QD_3_0_50": [ - [ - "Generic", - "TPU", - "Generic TPU 95A" - ] - ], - "QD_3_1_1": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "QD_3_1_11": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido" - ] - ], - "QD_3_1_12": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "QD_3_1_13": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido Metal" - ] - ], - "QD_3_1_14": [ - [ - "QIDI", - "ABS", - "QIDI ABS Odorless" - ] - ], - "QD_3_1_15": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "QD_3_1_18": [ - [ - "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "QD_3_1_19": [ - [ - "QIDI", - "ASA-AERO", - "QIDI ASA-Aero" - ] - ], - "QD_3_1_2": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "QD_3_1_20": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "QD_3_1_24": [ - [ - "QIDI", - "UltraPA", - "QIDI UltraPA" - ] - ], - "QD_3_1_26": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "QD_3_1_27": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "QD_3_1_3": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "QD_3_1_30": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "QD_3_1_31": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "QD_3_1_32": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "QD_3_1_33": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "QD_3_1_34": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC/ABS-FR" - ] - ], - "QD_3_1_36": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "QD_3_1_37": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "QD_3_1_38": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "QD_3_1_39": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "QD_3_1_4": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Silk" - ] - ], - "QD_3_1_40": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "QD_3_1_41": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "QD_3_1_42": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "QD_3_1_43": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "QD_3_1_44": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "QD_3_1_45": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "QD_3_1_46": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "QD_3_1_49": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "QD_3_1_5": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "QD_3_1_50": [ - [ - "QIDI", - "TPU", - "QIDI TPU 95A-HF" - ] - ], - "QD_3_1_6": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "QD_3_1_7": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "QD_3_1_8": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "QD_4_0_1": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "QD_4_0_11": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "QD_4_0_23": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "QD_4_0_4": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "QD_4_0_41": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "QD_4_0_50": [ - [ - "Generic", - "TPU", - "Generic TPU 95A" - ] - ], - "QD_4_1_1": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "QD_4_1_11": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido" - ] - ], - "QD_4_1_12": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "QD_4_1_13": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido Metal" - ] - ], - "QD_4_1_14": [ - [ - "QIDI", - "ABS", - "QIDI ABS Odorless" - ] - ], - "QD_4_1_15": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "QD_4_1_18": [ - [ - "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "QD_4_1_19": [ - [ - "QIDI", - "ASA-AERO", - "QIDI ASA-Aero" - ] - ], - "QD_4_1_2": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "QD_4_1_20": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "QD_4_1_24": [ - [ - "QIDI", - "UltraPA", - "QIDI UltraPA" - ] - ], - "QD_4_1_25": [ - [ - "QIDI", - "PA6-CF", - "QIDI PA6-CF" - ] - ], - "QD_4_1_26": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "QD_4_1_27": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "QD_4_1_3": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "QD_4_1_30": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "QD_4_1_31": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "QD_4_1_32": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "QD_4_1_33": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "QD_4_1_34": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC/ABS-FR" - ] - ], - "QD_4_1_36": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "QD_4_1_37": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "QD_4_1_38": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "QD_4_1_39": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "QD_4_1_4": [ - [ - "QIDI", - "PLA", - "QIDI PLA Silk" - ] - ], - "QD_4_1_40": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "QD_4_1_41": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "QD_4_1_42": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "QD_4_1_43": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "QD_4_1_44": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "QD_4_1_45": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "QD_4_1_46": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "QD_4_1_49": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "QD_4_1_5": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "QD_4_1_50": [ - [ - "QIDI", - "TPU", - "QIDI TPU 95A-HF" - ] - ], - "QD_4_1_6": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "QD_4_1_7": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "QD_4_1_8": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] ] } } diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 0918702017..41df9c582e 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -1485,7 +1485,6 @@ class TestRealTree(unittest.TestCase): # QidiPrinterAgent::map_filament_type_to_setting_id returns must stay # retired ledger keys whose chains end at a live preset id, because the # agent resolves them through resolve_filament_id_succession() at runtime. - @unittest.skip("enable with plan v4.2: QD_* ids are not retired yet") def test_qidi_agent_fallback_ids_resolve_through_ledger(self): cpp = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "QidiPrinterAgent.cpp") with open(cpp, encoding="utf-8") as f: From 95e392e206108782c557b44009f5d620a333ea18 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 21 Aug 2026 18:36:30 +0800 Subject: [PATCH 040/208] Code cleanup --- src/libslic3r/Format/bbs_3mf.cpp | 16 +++------- src/libslic3r/PresetBundle.cpp | 31 +++++++++++++------ src/libslic3r/PublishSettings.cpp | 28 +++++++---------- src/libslic3r/PublishSettings.hpp | 13 ++++++-- src/slic3r/GUI/ConfigValueFormatter.hpp | 5 +-- src/slic3r/GUI/Plater.cpp | 4 +-- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 12 +++---- src/slic3r/GUI/PublishSettingsDialog.hpp | 5 +-- .../libslic3r/test_preset_bundle_loading.cpp | 10 ++++-- 10 files changed, 67 insertions(+), 59 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 06cc89de99..6415f29413 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -6987,17 +6987,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) stream << " <" << METADATA_TAG << " name=\"" << item.first << "\">" << xml_escape(item.second) << "\n"; if (item.first == BBL_APPLICATION_TAG) { - // The OrcaSlicer tag is the version receivers compare against their own to - // pick the import branch, and every graceful config-less branch of an - // Orca-classified file shows a baked-in "old OrcaSlicer version" popup. A - // minimal published 3MF omits the tag (together with the Application tag - // above): old receivers then classify it From_Other and import the geometry - // silently, while this build rebuilds the config from the published metadata - // payload before the branch runs. - if (!m_minimal_published) { - stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" - << xml_escape(SoftFever_VERSION) << "\n"; - } + // The OrcaSlicer tag is only written for files that carry the Application + // tag, which a minimal published 3MF omits (see the map assignment above): + // the branch below is unreachable in minimal mode. + stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" + << xml_escape(SoftFever_VERSION) << "\n"; } } diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b6a3ed2d4b..fffd9c7fa4 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -43,6 +43,8 @@ namespace Slic3r { // Project-level options imported from a loaded 3MF into project_config. s_project_options_published // below is the reduced subset that crosses over in "published" 3MF mode; keep both in sync. +// s_project_options_published additionally carries wipe_tower_rotation_angle, which normal +// loads do not import (it is not listed here): published-only plate geometry. static std::vector s_project_options { "flush_volumes_vector", "flush_volumes_matrix", @@ -73,8 +75,9 @@ static std::vector s_project_options { "enable_filament_dynamic_map" }; -// Project options applied when loading a "published" 3MF project: the full s_project_options -// minus the filament/purge keys. A published file must not port the author's filament data +// Project options applied when loading a "published" 3MF project: s_project_options minus the +// filament/purge keys, plus wipe_tower_rotation_angle (plate geometry that only published +// loads import today). A published file must not port the author's filament data // (colors, colour types, filament/map/AMS slot state, purge/prime/flush volumes, nozzle // volume types, filament switcher state) to the receiver's project_config, which feeds the // scene colors, AMS slot colors and purge data. Only the plate/bed geometry keys cross over; @@ -4799,7 +4802,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (applied_keys.count(key) != 0) continue; // already applied // A '#' suffix denotes a variant key; resolve the base key. - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); // Structural keys are never applied (not "skipped due to mismatch"), so bail // out before the applied/skipped bookkeeping. if (structural_keys.count(base_key) != 0) @@ -4936,9 +4939,11 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // type-only pick may surface an unrelated preset, e.g. a different vendor's // PLA). auto candidate_score = [](const Preset &candidate, const PublishedMaterialEntry &entry, const std::string &resolved_name) -> int { - // Exact preset name: raw and collection-resolved forms both score above the - // fuzzy bare/alias tier, so a receiver preset literally named "Generic PLA" - // can never beat the author's exact "Generic PLA @Vendor" preset on a tie. + // Exact preset name: raw and collection-resolved forms both outrank the + // fuzzy bare/alias tier by tier value, so a receiver preset literally named + // "Generic PLA" (tier 4) can never beat the author's exact + // "Generic PLA @Vendor" (tier 5). Within one tier the strict ">" + // comparison keeps the first candidate in collection order. if (!entry.preset_name.empty() && candidate.name == entry.preset_name) return 5; if (!resolved_name.empty() && candidate.name == resolved_name) @@ -5137,8 +5142,14 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (colours != nullptr && !colours->values.empty()) seed = colours->values.front(); } - if (seed.empty()) - seed = "#F2754E"; // filament_colour default + if (seed.empty()) { + // Fall back to the option's registered default instead of a + // duplicated literal; if the lookup fails the chip stays blank. + if (const ConfigOptionDef *colour_def = print_config_def.get("filament_colour")) + if (const auto *default_colours = dynamic_cast(colour_def->default_value.get())) + if (!default_colours->values.empty()) + seed = default_colours->values.front(); + } } if (proj_colour && slot < proj_colour->values.size()) proj_colour->values[slot] = seed; @@ -5153,7 +5164,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool auto apply_slot_keys = [&](DynamicPrintConfig &preset_config, const std::vector &slot_keys, int author_slot, const std::string &material_label) { for (const std::string &key : slot_keys) { - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); if (structural_keys.count(base_key) != 0) continue; const ConfigOption *src_opt = config.option(base_key); @@ -5375,7 +5386,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool for (const std::string &key : published_config->published_keys) { if (applied_keys.count(key) != 0) continue; - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); // Structural keys are silently ignored, never reported as skipped: a hand-crafted // 3MF must not trigger the "could not be applied" warning for them. if (structural_keys.count(base_key) != 0) diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index 8e2e58f5ee..e212770fd8 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -5,7 +5,6 @@ #include "PrintConfig.hpp" #include "MaterialType.hpp" -#include #include #include @@ -101,22 +100,18 @@ const std::set& publishable_printer_keys() std::vector collect_dirty_settings_keys(const PresetBundle& bundle) { - std::vector keys; - - auto append_dirty = [&keys](const std::vector& dirty) { - for (const std::string& key : dirty) { - if (std::find(keys.begin(), keys.end(), key) == keys.end()) - keys.push_back(key); - } - }; + std::set keys; // Union the dirty keys of each collection's edited preset (filaments may span multiple // slots); feeds only the Publish dialog's pre-check. - append_dirty(bundle.prints.current_dirty_options(true)); - append_dirty(bundle.printers.current_dirty_options(true)); - append_dirty(bundle.filaments.current_dirty_options(true)); + for (const std::string& key : bundle.prints.current_dirty_options(true)) + keys.insert(key); + for (const std::string& key : bundle.printers.current_dirty_options(true)) + keys.insert(key); + for (const std::string& key : bundle.filaments.current_dirty_options(true)) + keys.insert(key); - return keys; + return std::vector(keys.begin(), keys.end()); } DynamicPrintConfig filter_published_config( @@ -136,6 +131,7 @@ DynamicPrintConfig filter_published_config( std::map> slot_mask_map; // 1. Mandatory material identity & slot count keys for 3MF validation/normalization + // (filament_ids: exported for validation, denylisted on apply - see publish_structural_keys). static const std::vector s_material_identity_keys = { "filament_colour", "filament_type", @@ -163,7 +159,7 @@ DynamicPrintConfig filter_published_config( // 3. Process and printer published keys for (const std::string &key : published_keys) { - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); if (!base_key.empty()) { base_keys_to_include.insert(base_key); mask_exempt_keys.insert(base_key); @@ -175,7 +171,7 @@ DynamicPrintConfig filter_published_config( // slot-less entries (hand-crafted files) stay unmasked (whole vector). for (const PublishedMaterialEntry &entry : material_keys) { for (const std::string &key : entry.keys) { - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); if (base_key.empty()) continue; base_keys_to_include.insert(base_key); @@ -183,7 +179,7 @@ DynamicPrintConfig filter_published_config( slot_mask_map[base_key].insert(entry.slot); } for (const std::string &key : entry.full_keys) { - const std::string base_key = key.substr(0, key.find('#')); + const std::string base_key = publish_base_key(key); if (base_key.empty()) continue; base_keys_to_include.insert(base_key); diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index 0dc579c2a9..929c08dd51 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -6,8 +6,17 @@ namespace Slic3r { class PresetBundle; -// Structural keys that must never be published (single source of truth for the denylist): -// publishing them would rewrite the user's preset inheritance/structure. +// Strip a trailing "#N" variant suffix ("retraction_length#2" -> "retraction_length"). +inline std::string publish_base_key(const std::string &key) +{ + const size_t pos = key.find('#'); + return pos == std::string::npos ? key : key.substr(0, pos); +} + +// Structural keys that are never applied onto the receiver's presets when loading a published +// 3MF (single source of truth for the denylist): applying them would rewrite the user's preset +// inheritance/structure. filament_ids is nevertheless exported via the identity list in +// filter_published_config because 3MF validation needs it - exported, never applied. const std::set& publish_structural_keys(); // One row of the printer tab's "Retraction" / "Z-Hop" optgroups (key + tab icon id), kept diff --git a/src/slic3r/GUI/ConfigValueFormatter.hpp b/src/slic3r/GUI/ConfigValueFormatter.hpp index c51a8e8a17..67b16f9326 100644 --- a/src/slic3r/GUI/ConfigValueFormatter.hpp +++ b/src/slic3r/GUI/ConfigValueFormatter.hpp @@ -1,5 +1,4 @@ -#ifndef slic3r_ConfigValueFormatter_hpp_ -#define slic3r_ConfigValueFormatter_hpp_ +#pragma once #include @@ -25,5 +24,3 @@ wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConf } // namespace GUI } // namespace Slic3r - -#endif // slic3r_ConfigValueFormatter_hpp_ diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 908e4dc222..52d90623fe 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16851,7 +16851,7 @@ void publish(Model &model, SaveStrategy strategy) { } // BBS: backup -int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn, const DynamicPrintConfig* override_config) +int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn) { int ret = 0; //if (p->model.objects.empty()) { @@ -16873,7 +16873,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy // modify model publish(p->model, strategy); - DynamicPrintConfig cfg = override_config ? *override_config : wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure(); const std::string path_u8 = into_u8(path); wxBusyCursor wait; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index af599d6161..61e6bee15c 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -504,7 +504,7 @@ public: //void export_amf(); //BBS add extra param for exporting 3mf silence // BBS: backup - int export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path(), SaveStrategy strategy = SaveStrategy::Default, int export_plate_idx = -1, Export3mfProgressFn proFn = nullptr, const DynamicPrintConfig* override_config = nullptr); + int export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path(), SaveStrategy strategy = SaveStrategy::Default, int export_plate_idx = -1, Export3mfProgressFn proFn = nullptr); //BBS void publish_project(); diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index cd8b82a489..08adae903b 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -332,7 +332,7 @@ void PublishSettingsDialog::build_option_model() for (const auto& opt : optgroup->opt_map()) { // Row keys are base keys; the load side applies them positionally. const std::string& opt_id = opt.first; - std::string base = opt_id.substr(0, opt_id.find('#')); + std::string base = publish_base_key(opt_id); if (!material_added.insert(base).second) continue; // Show the value of this slot; fall back to slot 0 if out of range. @@ -388,15 +388,13 @@ void PublishSettingsDialog::build_option_model() // Pre-check the dirty (modified) settings and mark them bold (base-key match, across all // sections; collect_dirty_settings_keys unions the prints, printers and filaments). std::set dirty_base; - for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) { - auto n = key.find('#'); - dirty_base.insert(n == std::string::npos ? key : key.substr(0, n)); - } + for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) + dirty_base.insert(publish_base_key(key)); for (Row& row : m_rows) { // The Color/Type requirement rows are not "dirty overrides": never auto-checked. if (row.kind != RowKind::Setting) continue; - std::string base = row.key.substr(0, row.key.find('#')); + std::string base = publish_base_key(row.key); row.dirty = dirty_base.count(base) > 0; if (row.dirty) { row.check->SetValue(true); @@ -919,7 +917,7 @@ std::vector PublishSettingsDialog::GetPublishedKeys() const // build). Publish every extruder element so the load side can apply per-extruder // values even when the receiver has a different extruder count; a scalar printer // key is published as-is. - const std::string base_key = row.key.substr(0, row.key.find('#')); + const std::string base_key = publish_base_key(row.key); if (const ConfigOption* opt = full.option(base_key)) { if (const auto* vec = dynamic_cast(opt)) { for (size_t i = 0; i < vec->size(); ++i) diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index b474baa938..312931c0c1 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -1,5 +1,4 @@ -#ifndef slic3r_GUI_PublishSettingsDialog_hpp_ -#define slic3r_GUI_PublishSettingsDialog_hpp_ +#pragma once #include "GUI_Utils.hpp" #include "wxExtensions.hpp" @@ -200,5 +199,3 @@ private: }; }} // namespace Slic3r::GUI - -#endif // slic3r_GUI_PublishSettingsDialog_hpp_ diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index d3bf4a2f49..b68fafbc2a 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -584,6 +584,7 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the config.opt_string("print_settings_id", true) = "file process"; config.opt("flush_multiplier")->values = { 2., 2. }; // must NOT cross over config.opt("wipe_tower_x")->values = { 100. }; // plate geometry, does cross over + config.opt("wipe_tower_rotation_angle")->value = 45.; // published-only plate geometry, crosses over config.option("curr_bed_type")->setInt(BedType::btPC); // must NOT cross over return config; }; @@ -639,6 +640,7 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the CHECK(bundle.project_config.opt("flush_multiplier")->values == seed_flush_multiplier); CHECK(bundle.project_config.option("curr_bed_type")->getInt() == seed_bed_type); CHECK(bundle.project_config.opt("wipe_tower_x")->values == std::vector{ 100. }); + CHECK_THAT(bundle.project_config.opt("wipe_tower_rotation_angle")->value, Catch::Matchers::WithinAbs(45., 0.000001)); // e) The published path keeps the user's currently-selected presets: same preset, same size. CHECK(bundle.prints.get_edited_preset().name == pre_load_name); @@ -676,6 +678,9 @@ TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys PresetBundle bundle; bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + // A recognizable non-default value: the skipped mismatch below must leave it untouched + // (asserting the default instead would silently test PrintConfig's retraction_speed). + bundle.printers.get_edited_preset().config.opt("retraction_speed")->values = { 33. }; bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") = "G28 ; user"; PublishedConfig pub; @@ -683,9 +688,10 @@ TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys pub.published_keys = { "retraction_length", "retraction_speed", "machine_start_gcode" }; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // Matching-size retraction vector applied; mismatched vector reported as skipped. + // Matching-size retraction vector applied; mismatched vector reported as skipped and the + // receiver's own value survives. CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 1.4 }); - CHECK(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values == std::vector{ 30. }); + CHECK(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values == std::vector{ 33. }); CHECK(contains_key(pub.skipped_keys, "retraction_speed")); // Contract-excluded printer key: silently ignored, absent from skipped_keys. CHECK(bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") == "G28 ; user"); From 36e5d4770b2cb833ed73f121b7fcd4f5ebc74476 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 21 Aug 2026 19:04:10 +0800 Subject: [PATCH 041/208] Code cleanup and fixes --- src/libslic3r/PresetBundle.cpp | 56 ++++++++++++++----- src/libslic3r/PublishSettings.cpp | 44 +++++++++------ tests/libslic3r/test_3mf.cpp | 33 +++++++++++ .../libslic3r/test_preset_bundle_loading.cpp | 41 +++++++++++++- 4 files changed, 141 insertions(+), 33 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index fffd9c7fa4..d29dbdf46f 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4834,10 +4834,26 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // receiver may have a different extruder count than the author. Out-of-range // indices are skipped (set_at would otherwise resize the receiver's vector). if (key.size() > base_key.size()) { - const size_t idx = static_cast(std::atoi(key.c_str() + base_key.size() + 1)); - if (idx >= static_cast(src_opt)->size() || + // Strict numeric suffix parse: a malformed variant ("#abc", "#1x") + // must be reported as skipped, not silently applied as element 0. + const std::string suffix = key.substr(base_key.size() + 1); + size_t idx = 0; + bool valid = !suffix.empty(); + for (const char c : suffix) { + if (c < '0' || c > '9') { + valid = false; + break; + } + idx = idx * 10 + size_t(c - '0'); + if (idx > 1000000) { // overflow guard; real vector sizes are tiny + valid = false; + break; + } + } + if (!valid || + idx >= static_cast(src_opt)->size() || idx >= static_cast(dst_opt)->size()) - continue; // out-of-range variant: cannot apply; reported as skipped + continue; // malformed or out-of-range variant: cannot apply; reported as skipped } else if (static_cast(src_opt)->size() != static_cast(dst_opt)->size()) { // Whole-vector base key: the receiver must have a matching vector size, @@ -4894,15 +4910,18 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // Grow the receiver's slots only as far as the highest published slot (never // shrink, never pull filler materials for unpublished slots). bool has_published_entries = false; - size_t target_slots = this->filament_presets.size(); + size_t grow_target = 0; for (const PublishedMaterialEntry &entry : published_config->material_keys) { has_published_entries = true; if (entry.slot >= 0) - target_slots = std::max(target_slots, size_t(entry.slot) + 1); + grow_target = std::max(grow_target, size_t(entry.slot) + 1); } if (has_published_entries) { - // Defensive cap: never exceed the file's own filament count. - target_slots = std::min(target_slots, num_filaments); + // Defensive cap: growth never exceeds the file's own filament count. The + // receiver's current slot count is a floor: neither the preset list nor the + // project vectors are ever shrunk, even when the file carries fewer filaments + // than the receiver has slots. + const size_t target_slots = std::max(this->filament_presets.size(), std::min(grow_target, num_filaments)); // Slots carrying published content, steering the initial preset selection of // newly grown slots. std::set published_slots; @@ -5122,13 +5141,22 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool ConfigOptionInts *proj_nozzle_map = this->project_config.opt("filament_nozzle_map"); ConfigOptionInts *proj_volume_map = this->project_config.opt("filament_volume_map"); const size_t old_colour_count = (proj_colour != nullptr) ? proj_colour->values.size() : 0; - if (proj_colour) proj_colour->resize(target_slots); - if (proj_multi_colour) proj_multi_colour->values.resize(target_slots); - if (proj_colour_type) proj_colour_type->values.resize(target_slots); - if (proj_map) proj_map->values.resize(target_slots, 1); - if (proj_nozzle_map) proj_nozzle_map->values.resize(target_slots, 0); - if (proj_volume_map) proj_volume_map->values.resize(target_slots, static_cast(NozzleVolumeType::nvtStandard)); - this->ams_multi_color_filment.resize(target_slots); + // Grow-only: an already-larger project vector is left untouched (the receiver's + // slot count never shrinks below its own setup). + if (proj_colour && proj_colour->values.size() < target_slots) + proj_colour->resize(target_slots); + if (proj_multi_colour && proj_multi_colour->values.size() < target_slots) + proj_multi_colour->values.resize(target_slots); + if (proj_colour_type && proj_colour_type->values.size() < target_slots) + proj_colour_type->values.resize(target_slots); + if (proj_map && proj_map->values.size() < target_slots) + proj_map->values.resize(target_slots, 1); + if (proj_nozzle_map && proj_nozzle_map->values.size() < target_slots) + proj_nozzle_map->values.resize(target_slots, 0); + if (proj_volume_map && proj_volume_map->values.size() < target_slots) + proj_volume_map->values.resize(target_slots, static_cast(NozzleVolumeType::nvtStandard)); + if (this->ams_multi_color_filment.size() < target_slots) + this->ams_multi_color_filment.resize(target_slots); for (size_t slot = old_colour_count; slot < target_slots; ++slot) { std::string seed; for (const PublishedMaterialEntry &entry : published_config->material_keys) diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index e212770fd8..ac25d815f1 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -5,6 +5,8 @@ #include "PrintConfig.hpp" #include "MaterialType.hpp" +#include + #include #include @@ -188,17 +190,20 @@ DynamicPrintConfig filter_published_config( } } - // Mask non-published vector slots with the option default; keys without a default stay - // unmasked (whole vector, matching partial-publish behavior). + // Masking restores every non-published slot of a vector option with the option default, so + // a partial publish does not leak unrelated slot data. can_mask_slots reports whether a key + // is maskable at all (vector option plus a registered default of the same type); an + // unmaskable key is dropped from the payload entirely instead of shipping the author's + // whole vector. + auto can_mask_slots = [](const ConfigOption &opt, const ConfigOptionDef *def) -> bool { + if (def == nullptr || !def->default_value || def->default_value->type() != opt.type()) + return false; + const auto *vec = dynamic_cast(&opt); + const auto *default_vec = dynamic_cast(def->default_value.get()); + return vec != nullptr && vec->size() > 0 && default_vec != nullptr && !default_vec->empty(); + }; auto mask_slots = [](ConfigOption &opt, const ConfigOptionDef *def, const std::set &keep_slots) { auto *vec = dynamic_cast(&opt); - if (vec == nullptr || vec->size() == 0 || def == nullptr || !def->default_value) - return; - if (def->default_value->type() != opt.type()) - return; - const auto *default_vec = dynamic_cast(def->default_value.get()); - if (default_vec == nullptr || default_vec->empty()) - return; for (size_t idx = 0; idx < vec->size(); ++idx) if (keep_slots.count(static_cast(idx)) == 0) vec->set_at(def->default_value.get(), idx, 0); @@ -206,15 +211,20 @@ DynamicPrintConfig filter_published_config( // Copy the selected options from full_config into the filtered config. for (const std::string &key : base_keys_to_include) { - if (const ConfigOption *opt = full_config.option(key)) { - ConfigOption *cloned = opt->clone(); - if (mask_exempt_keys.count(key) == 0) { - const auto it = slot_mask_map.find(key); - if (it != slot_mask_map.end() && !it->second.empty()) - mask_slots(*cloned, print_config_def.get(key), it->second); - } - filtered.set_key_value(key, cloned); + const ConfigOption *opt = full_config.option(key); + if (opt == nullptr) + continue; + const auto mask_it = slot_mask_map.find(key); + const bool needs_masking = mask_exempt_keys.count(key) == 0 && mask_it != slot_mask_map.end() && !mask_it->second.empty(); + if (needs_masking && !can_mask_slots(*opt, print_config_def.get(key))) { + BOOST_LOG_TRIVIAL(warning) << "publish: dropping unmaskable key \"" << key + << "\" from the published payload (no usable option default)"; + continue; } + ConfigOption *cloned = opt->clone(); + if (needs_masking) + mask_slots(*cloned, print_config_def.get(key), mask_it->second); + filtered.set_key_value(key, cloned); } return filtered; diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 6a20613a79..8898dae2fe 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -841,6 +841,39 @@ SCENARIO("Partial-publish entries mask the other slots like full entries", "[3mf } } +// A key needing slot masking that cannot be masked (no registered option default of the same +// type) is dropped from the payload entirely instead of shipping the author's whole vector. +SCENARIO("Unmaskable keys are dropped from the published payload instead of leaking", "[3mf]") { + GIVEN("a config carrying a synthetic def-less vector key and a maskable one") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222" }; + // Not a PrintConfig key: print_config_def has no default to mask with. + full_cfg.set_key_value("orca_synthetic_setting", new ConfigOptionFloats({ 9.9, 8.8 })); + full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; + + PublishedMaterialEntry partial_entry; + partial_entry.slot = 1; + partial_entry.keys = { "orca_synthetic_setting", "filament_flow_ratio" }; + + WHEN("filtering with a partial entry for slot 1") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { partial_entry }); + + THEN("the unmaskable synthetic key is not published") { + REQUIRE(filtered_cfg.option("orca_synthetic_setting") == nullptr); + } + THEN("the maskable key is present, author slot kept, other slot masked") { + REQUIRE(filtered_cfg.opt("filament_flow_ratio") != nullptr); + REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[1] == 0.98); + REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[0] == 1.0); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + // The extended per-entry fields (full dump list, published type and colour) travel inside the // published_material_keys metadata and round-trip unchanged. SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index b68fafbc2a..3a344e0fdc 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1890,6 +1890,41 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published REQUIRE(bundle.filament_presets.size() == 3); CHECK(bundle.filament_presets[1] == "My PLA"); } + + // A receiver with more slots than the file's filament count keeps its setup: neither the + // preset list nor the project-level vectors are shrunk to the file's smaller size. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + // Distinct project colours make a shrink observable. + bundle.project_config.opt("filament_colour")->values = { "#111111", "#222222", "#333333" }; + bundle.project_config.opt("filament_multi_colour")->values = { "#111111", "#222222", "#333333" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0) }; // highest published slot: 0 + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // A one-filament file: num_filaments (1) is below the receiver's slot count (3). + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + // No shrink: all three project entries survive, with slot 0 synced to the published + // colour at its unshifted index and slots 1-2 untouched. + CHECK(bundle.project_config.opt("filament_colour")->values == std::vector{ "#ABCDEF", "#222222", "#333333" }); + CHECK(bundle.project_config.opt("filament_multi_colour")->values == std::vector{ "#ABCDEF", "#222222", "#333333" }); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 3); + // The published colour still reached slot 0's preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + } } // A published slot is seeded from an unused library preset and the values are written onto it @@ -2108,14 +2143,16 @@ TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffix PublishedConfig pub; pub.published = true; - pub.published_keys = { "wiping_volumes_extruders#5", "wiping_volumes_extruders#1", "layer_height#0" }; + pub.published_keys = { "wiping_volumes_extruders#5", "wiping_volumes_extruders#1", "wiping_volumes_extruders#abc", "layer_height#0" }; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); // In-range variant applied element-wise; the out-of-range one did not resize the vector. CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 10., 150. }); CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values.size() == 2); - // Out-of-range variant and variant-suffixed scalar are reported as skipped. + // Out-of-range variant, malformed variant and variant-suffixed scalar are reported as + // skipped; the malformed one must not fall back to element 0. CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders#5")); + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders#abc")); CHECK(contains_key(pub.skipped_keys, "layer_height#0")); CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders#1")); // The scalar was never applied. From 575a8748325396c2018360a0216e1a70d55c2e0c Mon Sep 17 00:00:00 2001 From: raistlin7447 Date: Sun, 23 Aug 2026 19:37:35 -0500 Subject: [PATCH 042/208] fix: keep CRLF when patching CPython on Windows git apply inherits the caller's configuration, so under core.autocrlf=input it rewrites the patched PCbuild/find_python.bat to LF. cmd.exe cannot resolve goto labels in an LF batch file, so CPython's build fails with "The system cannot find the batch label specified - begin_search" and then "Cannot locate python.exe on PATH or as PYTHON variable". git init already runs in the extracted source, so setting core.autocrlf on the repository it creates is enough, without touching the shared PATCH_CMD. --- deps/python3/python3.cmake | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/deps/python3/python3.cmake b/deps/python3/python3.cmake index e93045fe45..936d75f488 100644 --- a/deps/python3/python3.cmake +++ b/deps/python3/python3.cmake @@ -15,7 +15,12 @@ if(WIN32) # See https://github.com/python/cpython/issues/153438 # Patch from https://github.com/python/cpython/pull/153608 # This patch has not been merged to 3.12 yet so we need to apply it manually - set(_patch_cmd git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) + # + # The config lands on the CPython repo git init just made, not OrcaSlicer. Without + # it the patched find_python.bat comes out LF and cmd.exe cannot find its goto labels. + set(_patch_cmd git init + && git config core.autocrlf false + && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) if(MSVC_VERSION EQUAL 1800) set(_python_platform_toolset v120) From 2aff31c07a887f04c09aa2b7c36d6fe1aa83bfd5 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 24 Aug 2026 13:19:57 +0800 Subject: [PATCH 043/208] Published 3MF: match filament slots by exported identity without a Type requirement --- src/libslic3r/PresetBundle.cpp | 115 +++++++++++++---- .../libslic3r/test_preset_bundle_loading.cpp | 119 ++++++++++++++++++ 2 files changed, 209 insertions(+), 25 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 755f2590e2..ce88c7a030 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5020,7 +5020,12 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool const std::string vendor = (vendors != nullptr && !vendors->values.empty()) ? vendors->get_at(0) : std::string(); if (!entry.filament_id.empty() && candidate.filament_id == entry.filament_id) return 2; - if (normalize_filament_type(type) == entry.publish_type_value) { + // Tier 0/1 family gate: the explicit type requirement when published as + // such, otherwise the entry's own material family - so identity scoring + // also applies to entries published without a checked Type row. + const std::string required_type = !entry.publish_type_value.empty() + ? entry.publish_type_value : normalize_filament_type(entry.filament_type); + if (!required_type.empty() && normalize_filament_type(type) == required_type) { if (!entry.filament_vendor.empty() && vendor == entry.filament_vendor) return 1; return 0; @@ -5036,7 +5041,10 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // presets first and falling back to incompatible ones only when no // compatible candidate exists... for (const PublishedMaterialEntry &entry : published_config->material_keys) { - if (entry.slot != static_cast(new_slot_idx) || !entry.publish_type || entry.publish_type_value.empty()) + // Scored for every entry with an identity (name / ids / family), + // not only when a Type requirement was checked; candidate_score's + // family tiers fall back to the entry's own filament_type. + if (entry.slot != static_cast(new_slot_idx)) continue; const std::string resolved_name = resolved_name_for(entry.slot); int best_score = -1; @@ -5073,14 +5081,32 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF grew slot " << new_slot_idx << " with " << initial_preset << " (score " << best_score << ", preset_name \"" << entry.preset_name << "\", type \"" << entry.publish_type_value << "\")"; + if (best_score >= 0 && best_score < 2 && (!entry.filament_id.empty() || !entry.filament_vendor.empty())) + published_config->material_replacements.emplace_back( + "slot " + std::to_string(new_slot_idx) + ": " + initial_preset + + " (substitute: no exact material match)"); break; } - // ...otherwise any visible preset not already used by another slot. + // ...otherwise any visible preset not already used by another slot, + // preferring the published material's own family when it is known. if (initial_preset.empty()) { + std::string slot_family; + for (const PublishedMaterialEntry &entry : published_config->material_keys) + if (entry.slot == static_cast(new_slot_idx)) { + slot_family = !entry.publish_type_value.empty() + ? entry.publish_type_value : normalize_filament_type(entry.filament_type); + break; + } for (size_t i = first_candidate; i < this->filaments.size(); ++i) { const Preset &candidate = this->filaments.preset(i); if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) continue; + if (!slot_family.empty()) { + const ConfigOptionStrings *types = candidate.config.opt("filament_type"); + const std::string cand_type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : std::string(); + if (normalize_filament_type(cand_type) != slot_family) + continue; + } initial_preset = candidate.name; break; } @@ -5114,7 +5140,9 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool std::string replacement; int best_score = -1; for (const PublishedMaterialEntry &entry : published_config->material_keys) { - if (entry.slot != static_cast(slot) || !entry.publish_type || entry.publish_type_value.empty()) + // Scored for every entry with an identity, not only when a Type + // requirement was checked (same as the growth seeding above). + if (entry.slot != static_cast(slot)) continue; const std::string resolved_name = resolved_name_for(entry.slot); auto scan = [&](bool compatible_only) -> std::pair { @@ -5153,20 +5181,39 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool << entry.preset_name << "\", type \"" << entry.publish_type_value << "\")"; break; } - // ...otherwise any distinct visible preset not referenced by another slot. + // ...otherwise any distinct visible preset not referenced by another slot, + // preferring the published material's own family when it is known. if (replacement.empty()) { - for (size_t i = first_candidate; i < this->filaments.size(); ++i) { - const Preset &candidate = this->filaments.preset(i); - if (candidate.is_visible && !referenced_elsewhere(candidate.name, size_t(-1))) { - replacement = candidate.name; + std::string slot_family; + for (const PublishedMaterialEntry &entry : published_config->material_keys) + if (entry.slot == static_cast(slot)) { + slot_family = !entry.publish_type_value.empty() + ? entry.publish_type_value : normalize_filament_type(entry.filament_type); break; } + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible || referenced_elsewhere(candidate.name, size_t(-1))) + continue; + if (!slot_family.empty()) { + const ConfigOptionStrings *types = candidate.config.opt("filament_type"); + const std::string cand_type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : std::string(); + if (normalize_filament_type(cand_type) != slot_family) + continue; + } + replacement = candidate.name; + break; } } if (replacement.empty()) continue; // every visible preset is referenced: aliasing is unavoidable + const std::string aliased_name = this->filament_presets[slot]; this->filament_presets[slot] = replacement; material_applied = true; + // The re-point used to be silent; surface it like the other slot changes. + published_config->material_replacements.emplace_back( + "slot " + std::to_string(slot) + ": " + aliased_name + " -> " + replacement + + " (de-aliased: shared profile)"); } // Grow the per-slot colour/type/map project vectors to the new slot count and // seed the new entries so the slots render with colours instead of blank chips @@ -5367,25 +5414,43 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // No same-type library preset: fall back to the first available // visible preset, preferring one no other slot references, and // apply the author's full values on top of it (the dump carries - // filament_type, so the preset takes the author's type). + // filament_type, so the preset takes the author's type). A preset + // of the published material's own family is preferred overall - + // except that a referenced preset must never win just on family, + // since the dump would mutate it for every sharing slot too. std::string fallback; - for (size_t i = first_candidate; i < this->filaments.size(); ++i) { - const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible) - continue; - if (fallback.empty()) - fallback = candidate.name; - bool referenced = false; - for (size_t s = 0; s < this->filament_presets.size(); ++s) - if (this->filament_presets[s] == candidate.name) { - referenced = true; - break; + const std::string wanted_family = !entry.publish_type_value.empty() + ? entry.publish_type_value : normalize_filament_type(entry.filament_type); + auto pick_fallback = [&](bool want_family) -> std::string { + std::string first; + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset &candidate = this->filaments.preset(i); + if (!candidate.is_visible) + continue; + if (want_family) { + if (wanted_family.empty()) + break; + const ConfigOptionStrings *cand_types = candidate.config.opt("filament_type"); + if (normalize_filament_type(cand_types != nullptr && !cand_types->values.empty() ? cand_types->get_at(0) : std::string()) != wanted_family) + continue; } - if (!referenced) { - fallback = candidate.name; - break; + bool referenced = false; + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (this->filament_presets[s] == candidate.name) { + referenced = true; + break; + } + if (!referenced) + return candidate.name; + if (first.empty()) + first = candidate.name; } - } + return first; + }; + if (!wanted_family.empty()) + fallback = pick_fallback(true); + if (fallback.empty()) + fallback = pick_fallback(false); if (!fallback.empty() && fallback != recv->name) { const std::string old_name = recv->name; this->filament_presets[slot] = fallback; diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 6909b9b335..3cf5e95ce7 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -2010,6 +2010,72 @@ TEST_CASE("Published 3MF seeds published slots from unused presets and mutates t CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); } +// Without a checked Type row, a grown published slot is still seeded from the published +// material's identity - an exact filament_id outranks any arbitrary unused preset, and an +// entry carrying only a family constrains the pick to that family. +TEST_CASE("Published 3MF seeds a grown slot by published identity or family without a type requirement", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + PublishedMaterialEntry entry; + entry.slot = 2; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + // An unused preset sorting before everything else: an unconstrained pick would take it. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &arbitrary = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + arbitrary.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + SECTION("an exact filament_id outranks the first unused preset") { + Preset &authored = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + authored.config.opt_string("filament_type", 0u) = "PLA"; + authored.filament_id = "GFA00"; + entry.filament_id = "GFA00"; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Zzz PLA"); + // An exact identity match is not a substitute, so nothing is reported. + CHECK(pub.material_replacements.empty()); + } + + SECTION("a family-only entry picks an unused preset of that family") { + Preset &petg = add_inmemory_preset(bundle.filaments, "Bbb PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + entry.filament_type = "PETG"; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[2] == "Bbb PETG"); + } +} + // The GUI displays the edited preset, a snapshot of the selected collection preset taken at // selection time. Since the overlay mutates the collection presets in place, the load must // re-select the first slot's filament so the applied values - and slot replacements - surface @@ -2415,6 +2481,59 @@ TEST_CASE("Published 3MF gives each published slot its own preset on an aliased CHECK(pub.skipped_keys.empty()); } +// De-aliasing runs on the exported identity even without a checked Type row: the re-pointed +// slot lands on the exact published material (by filament_id) rather than an arbitrary spare, +// and the formerly silent re-point is surfaced through the replacements notification list. +TEST_CASE("Published 3MF de-aliases an aliased slot by published identity without a type requirement", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.6, 0.9 }; + + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // A spare sorting before the exact match: an unconstrained pick would take it. + Preset &spare = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + spare.config.opt_string("filament_type", 0u) = "PLA"; + spare.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &match = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + match.config.opt_string("filament_type", 0u) = "PLA"; + match.config.opt("filament_retraction_length", true)->values = { 0.5 }; + match.filament_id = "GFA00"; + bundle.filament_presets = { "My PLA", "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFA00"; + entry.keys = { "filament_retraction_length" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] == "Zzz PLA"); + // The published key was written onto the re-pointed slot's own preset. + Preset *target = bundle.filaments.find_preset("Zzz PLA", false, true); + REQUIRE(target != nullptr); + CHECK(target->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0].find("(de-aliased") != std::string::npos); + CHECK(pub.skipped_keys.empty()); +} + // Printer retraction keys are published per-extruder ("#N"): a receiver with a different // extruder count still receives the in-range elements; out-of-range variants are reported as // skipped instead of corrupting the receiver's vector. From 52aa5a52e9e2943485195d3408793cf2220e4a58 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 12:27:45 +0800 Subject: [PATCH 044/208] Published 3MF: import Full Publish materials as standalone detached presets inside the project --- src/libslic3r/Preset.cpp | 75 ++++++++++++++++++++ src/libslic3r/Preset.hpp | 18 +++++ src/libslic3r/PresetBundle.cpp | 111 ++++++++++++++++++++++++++++++ src/libslic3r/PublishSettings.cpp | 33 +++++++++ src/libslic3r/PublishSettings.hpp | 30 +++++--- 5 files changed, 259 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1334bd4e7a..c422253dcd 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -3053,6 +3053,81 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det this->get_selected_preset().save(nullptr); } +// A detached standalone preset for the Full Publish receiver: create a user preset holding +// the full resolved filament config (no inheritance, no vendor/alias links), parentless and +// universally compatible. Mirrors save_current_preset(detach=true)'s creation branch but +// does not force-select or diff against a parent; the caller decides whether to select it. +// The published entry's filament_id is forwarded so user bases keep their stable +// material grouping (get_filament_presets() groups user bases by filament_id). +// save_to_project=true (the Full Publish default) creates a project-embedded preset: +// it lives inside the loaded project only (serialized into the saved .3mf, restored by +// load_project_embedded_presets) and never touches the user's library directory; +// Preset::save() early-returns for embedded presets, so persistence is skipped here too. +// Returns the final (uniquified) name; on collision "" -> " (Published)" -> +// " (Published 2)" ... +std::string PresetCollection::add_detached_preset(const std::string &name_base, DynamicPrintConfig config, + const std::string &filament_id, bool save_to_project) +{ + if (name_base.empty()) + return std::string(); + Preset stored(m_type, name_base); + stored.config = std::move(config); + stored.filament_id = filament_id; + + // Uniquify verbatim; only on collision append " (Published)" then " (Published 2)". + const std::string base_name = name_base; + std::string final_name = base_name; + auto exists = [this](const std::string &candidate) -> bool { + const auto it = this->find_preset_internal(candidate); + return it != m_presets.end() && it->name == candidate; + }; + if (exists(final_name)) { + final_name = base_name + " (Published)"; + for (int i = 2; exists(final_name); ++i) + final_name = base_name + " (Published " + std::to_string(i) + ")"; + } + + // Creation branch of save_current_preset(detach=true), without its selection side + // effects or project-embedded path. + lock(); + const auto it = this->find_preset_internal(final_name); + Preset &preset = *m_presets.insert(it, stored); + stored.name.clear(); // avoid stale copied name being used below + stored.config.clear(); + preset.name = final_name; + preset.vendor = nullptr; + preset.alias.clear(); + preset.renamed_from.clear(); + preset.m_excluded_from.clear(); + preset.setting_id.clear(); + preset.inherits().clear(); + preset.version = Semver::parse(SoftFever_VERSION) ? *Semver::parse(SoftFever_VERSION) : Semver(); + preset.is_default = false; + preset.is_system = false; + preset.is_external = false; + preset.bundle_id.clear(); + preset.file = this->path_for_preset(preset); + preset.is_visible = true; + preset.is_project_embedded = save_to_project; + if (m_type == Preset::TYPE_PRINT) + preset.config.option("print_settings_id", true)->value = final_name; + else if (m_type == Preset::TYPE_FILAMENT) + preset.config.option("filament_settings_id", true)->values[0] = final_name; + else if (m_type == Preset::TYPE_PRINTER) + preset.config.option("printer_settings_id", true)->value = final_name; + unlock(); + + if (!save_to_project) { + // Persist the full resolved config (no parent). Project-embedded presets are + // serialized into the .3mf instead; Preset::save() would early-return anyway. + // find by final_name — m_presets may have reallocated, so don't keep a raw ref. + auto persist_it = this->find_preset_internal(final_name); + if (persist_it != m_presets.end() && persist_it->name == final_name) + persist_it->save(nullptr); + } + return final_name; +} + bool PresetCollection::delete_current_preset() { Preset &selected = this->get_selected_preset(); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index c9b3197a6f..e904851a1d 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -631,6 +631,24 @@ public: // All presets are marked as not modified and the new preset is activated. //BBS: add project embedded preset logic void save_current_preset(const std::string &new_name, bool detach = false, bool save_to_project = false, Preset* _curr_preset = nullptr); + // Insert a standalone user preset holding the full resolved config (no inheritance, + // no vendor links): the libslic3r equivalent of "Detach from parent". Takes a + // resolved config, clears parent/vendor/alias metadata, stamps filament_settings_id. + // Unlike save_current_preset it does not force-select or diff against a parent. + // Used by the published-3MF Full Publish path. The optional filament_id seeds the + // preset's stable material grouping (get_filament_presets groups user bases by + // filament_id); the published entry's filament_id is forwarded so the copy keeps + // the author's grouping. + // With save_to_project=true (default) the copy is a project-embedded preset + // ("Preset Inside Project"): it lives inside the loaded project only, is serialized + // into the saved .3mf via get_current_project_embedded_presets(), and is never + // written to the user's library directory. With false it persists as a normal + // user preset file. + // Returns the final (uniquified) name; on collision the suffix rule is: + // "" -> " (Published)" -> " (Published 2)" ... + std::string add_detached_preset(const std::string &name_base, DynamicPrintConfig config, + const std::string &filament_id = std::string(), + bool save_to_project = true); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index ce88c7a030..96373eae7c 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5312,6 +5312,10 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // slots wrote to it; that compound case is not chased.) const bool edited_survives_load = this->filament_presets.empty() || this->filament_presets.front() == this->filaments.get_edited_preset().name; + // Full Publish within-load dedup: identical Full materials (same setting_id + // + preset_name identity) share one created instance, so an author who + // pointed two slots at one preset yields one standalone copy here. + std::map published_full_dedup; for (const PublishedMaterialEntry &entry : published_config->material_keys) { if (entry.slot < 0 || size_t(entry.slot) >= this->filament_presets.size()) continue; // out of range: nothing to do for this slot @@ -5327,6 +5331,113 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool ? (entry.publish_type_value.empty() ? entry.filament_type : entry.publish_type_value) : entry.filament_id; + // Full Publish: always create a standalone detached copy (even on exact + // identity match) as a "Preset Inside Project" (project-embedded: lives + // in this project only, never written to the library), universally + // compatible, named after the author's preset with its variant tail + // stripped ("(Published)" uniquification on collision). No existing + // preset is ever mutated. + if (entry.full) { + std::string dedup_key = entry.setting_id + std::string("\x1f") + entry.preset_name; + // Identity-less hand-crafted files (empty setting_id+name) must not + // collide: fall back to slot-scoped key so each slot gets its own copy + // unless the dedup above is meaningful. + if (dedup_key == std::string("\x1f")) + dedup_key = dedup_key + std::to_string(slot); + else if (!entry.filament_id.empty()) + dedup_key += std::string("\x1f") + entry.filament_id; + std::string new_name; + const auto dedup_it = published_full_dedup.find(dedup_key); + if (dedup_it != published_full_dedup.end()) { + new_name = dedup_it->second; + } else { + // Baseline: clone the receiver slot's stored preset config (schema- + // complete across versions), then overlay the published full_keys. + DynamicPrintConfig new_cfg = recv != nullptr + ? recv->config : this->filaments.default_preset().config; + for (const std::string &key : entry.full_keys) { + const std::string base_key = publish_base_key(key); + if (structural_keys.count(base_key) != 0) + continue; + const ConfigOption *src_opt = config.option(base_key); + if (src_opt == nullptr || !src_opt->is_vector() || + entry.slot < 0 || + entry.slot >= static_cast(static_cast(src_opt)->size())) + continue; + ConfigOption *dst_opt = new_cfg.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector() || + static_cast(dst_opt)->empty() || + dst_opt->type() != src_opt->type()) + continue; + static_cast(dst_opt)->set_at(src_opt, 0, entry.slot); + } + // The published colour is authoritative even for Full (the payload's + // filament_colour plus the explicit publish_color field). + if (entry.publish_color && !entry.color.empty()) { + if (ConfigOptionStrings *col = new_cfg.opt("filament_colour", true)) { + if (col->values.empty()) + col->values.emplace_back(); + col->values[0] = entry.color; + } + } + make_publish_universal(new_cfg); + // Naming: stripped variant tail ("Generic PLA @System" -> "Generic + // PLA"), then identity fallbacks; collisions uniquify with + // "(Published)" / "(Published N)" inside add_detached_preset. + std::string base_name = entry.preset_name.empty() ? std::string() : publish_material_base_name(entry.preset_name); + if (base_name.empty()) { + base_name = !entry.filament_id.empty() ? entry.filament_id + : (!entry.publish_type_value.empty() ? entry.publish_type_value : entry.filament_type); + if (base_name.empty()) + base_name = "Published Filament"; + } + new_name = this->filaments.add_detached_preset(base_name, std::move(new_cfg), entry.filament_id); + published_full_dedup.emplace(dedup_key, new_name); + } + const std::string old_name = this->filament_presets[slot]; + this->filament_presets[slot] = new_name; + material_applied = true; + published_config->material_replacements.emplace_back( + "slot " + std::to_string(slot) + ": " + old_name + " -> " + new_name + + " (published material imported)"); + // Colour is slot-scoped and project-visible: sync into project_config + // (the copy already baked it, this makes the chips render). + if (entry.publish_color && !entry.color.empty()) { + if (ConfigOptionStrings *proj_colour = this->project_config.opt("filament_colour")) { + if (slot < proj_colour->values.size()) + proj_colour->values[slot] = entry.color; + } + if (ConfigOptionStrings *proj_multi_colour = this->project_config.opt("filament_multi_colour")) { + if (slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = entry.color; + } + } else if (proj_colour && new_name != old_name) { + // Fall back to the copy's colour so the chip is never blank: try + // the newly created preset's filament_colour, then the option default. + std::string seed; + if (const Preset *created = this->filaments.find_preset(new_name, false, true)) { + if (const ConfigOptionStrings *cols = created->config.opt("filament_colour")) + if (!cols->values.empty()) + seed = cols->values.front(); + } + if (seed.empty()) { + if (const ConfigOptionDef *colour_def = print_config_def.get("filament_colour")) + if (const auto *defaults = dynamic_cast(colour_def->default_value.get())) + if (!defaults->values.empty()) + seed = defaults->values.front(); + } + if (!seed.empty()) { + if (proj_colour && slot < proj_colour->values.size()) + proj_colour->values[slot] = seed; + if (proj_multi_colour && slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = seed; + } + } + if (proj_colour_type && slot < proj_colour_type->values.size()) + proj_colour_type->values[slot] = "1"; + continue; + } + bool apply_slot = true; // The gate compares against the slot's effective material type: the edited // layer when the slot references the collection's edited preset and that diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index ac25d815f1..3a3d241e81 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -6,12 +6,19 @@ #include "MaterialType.hpp" #include +#include #include #include namespace Slic3r { +std::string publish_base_key(const std::string &key) +{ + const size_t pos = key.find('#'); + return pos == std::string::npos ? key : key.substr(0, pos); +} + std::string normalize_filament_type(const std::string& type) { if (type.empty()) @@ -29,6 +36,32 @@ std::string normalize_filament_type(const std::string& type) return type; } +void make_publish_universal(DynamicPrintConfig &config) +{ + // Lists: empty => compatible with every printer / every print preset. Conditions: + // empty so a leftover expression left behind by the baseline clone can never + // re-narrow the match (see is_compatible_with_printer, Preset.cpp:840). All four + // keys exist on filament presets; nil-guard for hand-crafted future schemas. + if (auto *opt = config.opt("compatible_printers", false)) + opt->values.clear(); + if (auto *opt = config.opt("compatible_prints", false)) + opt->values.clear(); + if (auto *opt = config.opt("compatible_printers_condition", false)) + opt->value.clear(); + if (auto *opt = config.opt("compatible_prints_condition", false)) + opt->value.clear(); +} + +std::string publish_material_base_name(const std::string &preset_name) +{ + if (preset_name.empty()) + return preset_name; + const size_t at = preset_name.find('@'); + std::string base = (at == std::string::npos) ? preset_name : preset_name.substr(0, at); + boost::trim_right(base); + return base; +} + const std::set& publish_structural_keys() { // Non-publishable keys: the *_settings_id keys are also in PresetCollection::skipped_in_dirty diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index 929c08dd51..bcb3397dcc 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -7,11 +7,7 @@ namespace Slic3r { class PresetBundle; // Strip a trailing "#N" variant suffix ("retraction_length#2" -> "retraction_length"). -inline std::string publish_base_key(const std::string &key) -{ - const size_t pos = key.find('#'); - return pos == std::string::npos ? key : key.substr(0, pos); -} +std::string publish_base_key(const std::string &key); // Structural keys that are never applied onto the receiver's presets when loading a published // 3MF (single source of truth for the denylist): applying them would rewrite the user's preset @@ -56,14 +52,20 @@ struct PublishedMaterialEntry { // 0-based author filament slot; -1 (hand-crafted files) is skipped. int slot{-1}; std::vector keys; - // "Full Publish": serialize the whole filament preset (full_keys); the type gate then - // decides whether the receiver keeps its material (type match) or is replaced. + // "Full Publish": the whole filament preset (full_keys) is published. On the receiver + // Full Publish always creates a standalone parentless copy (libslic3r's "Detach from + // parent"): a new project-embedded preset ("Preset Inside Project") with the full + // resolved config, universally compatible (compatible_printers/condition cleared). + // It lives inside the loaded project only - never written to the user's library, + // no existing preset is ever selected-by-reference or mutated. Identical Full + // entries inside one load share one created instance (within-load dedup). bool full{false}; // All non-structural filament keys of the author's slot preset; values travel in the file // config, masked to the author's slot index. std::vector full_keys; // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on // mismatch the slot is replaced with a same-type filament from the receiver's library. + // For Full entries the baked filament_type on the created copy satisfies the type gate. bool publish_type{false}; std::string publish_type_value; // Required filament colour, applied on load regardless of the type match. @@ -74,9 +76,21 @@ struct PublishedMaterialEntry { // "PLA High Speed" -> "PLA" (strip a space modifier); dash types like "PA-CF" are kept intact. std::string normalize_filament_type(const std::string& type); +class DynamicPrintConfig; +// Clear the compatibility lists/conditions on a filament config so it is compatible +// with every printer and every print profile. A detached published material is +// universally compatible by construction: the baseline clone may carry machine-specific +// restrictions. Empty lists + empty conditions => compatible with everything +// (see is_compatible_with_printer, Preset.cpp:840). +void make_publish_universal(DynamicPrintConfig &config); + +// Naming base for a detached published-material copy: "Generic PLA @System" -> +// "Generic PLA" (truncate at the first '@' variant tail, right-trimmed). Unchanged +// when the name carries no '@'. Empty result means "fall back to identity fields". +std::string publish_material_base_name(const std::string &preset_name); + // Minimal DynamicPrintConfig for a published 3MF export: only the selected published keys, // material keys, identity fields and plate geometry keys. -class DynamicPrintConfig; DynamicPrintConfig filter_published_config( const DynamicPrintConfig &full_config, const std::vector &published_keys, From 0ba7bae79490d08d6b9093bb5423033efc807220 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 13:18:00 +0800 Subject: [PATCH 045/208] Fix conflicts. Update unit tests --- src/slic3r/GUI/Widgets/Button.hpp | 2 - .../libslic3r/test_preset_bundle_loading.cpp | 819 +++++++----------- 2 files changed, 318 insertions(+), 503 deletions(-) diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 9b97d0eb86..9ad0810804 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -46,8 +46,6 @@ class Button : public StaticBox bool isCenter = true; bool vertical = false; - wxTipWindow* tipWindow = nullptr; - static const int buttonWidth = 200; static const int buttonHeight = 50; diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 3cf5e95ce7..ba92f43943 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -795,12 +795,10 @@ TEST_CASE("Published 3MF applies positional material keys onto the receiver's ma CHECK(pub.skipped_keys.empty()); } -// A "full publish" slot serializes the whole filament. On load the slot is matched positionally -// against the published type: a matching receiver type still receives the author's full values -// (like a normal save/load of the filament), a mismatched type replaces it with the first -// same-type visible preset (applying the author's full values on top), and a type not in the -// receiver's library falls back to the first available visible preset. -TEST_CASE("Published 3MF full-published slots replace or ignore the receiver material by type", "[Preset][Bundle][Published]") +// A "full publish" slot serializes the whole filament. On load the slot always receives a +// standalone detached copy of the author's material - created even when the receiver's own +// material matches the published type - and no receiver library preset is ever mutated. +TEST_CASE("Published 3MF full-published slots are imported as standalone detached copies", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -826,7 +824,7 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat return entry; }; - SECTION("type match applies the full dump onto the receiver's material") { + SECTION("type match still creates a detached copy instead of mutating the receiver material") { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.config.opt_string("filament_type", 0u) = "PLA"; @@ -843,14 +841,20 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The type matches, but a full publish behaves like a normal save: the author's values - // are written onto the slot's preset wholesale. - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // The type matches, but the import still detaches: the slot lands on a fresh copy + // named from the published type (no identity fields in this entry), carrying the + // author's values; the receiver's own material is untouched. + CHECK(bundle.filament_presets[0] == "PLA"); + Preset *copy = bundle.filaments.find_preset("PLA", false, true); + REQUIRE(copy != nullptr); + CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); CHECK(pub.skipped_keys.empty()); - CHECK(pub.material_replacements.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> PLA (published material imported)"); } - SECTION("type mismatch replaces the slot with the first same-type preset and applies the full dump") { + SECTION("type mismatch also detaches: a fresh same-type copy replaces the slot") { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.config.opt_string("filament_type", 0u) = "PLA"; @@ -868,19 +872,20 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 1); - // The slot is re-pointed at the library's ABS preset and the author's full values are - // written onto it in place (the original 0.3 is overwritten); the receiver's own - // material is untouched. - CHECK(bundle.filament_presets[0] == "My ABS"); - CHECK(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // No substitution search runs: a brand-new copy named after the published type is + // created and both pre-existing presets stay exactly as they were. + CHECK(bundle.filament_presets[0] == "ABS"); + Preset *copy = bundle.filaments.find_preset("ABS", false, true); + REQUIRE(copy != nullptr); + CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.3 }); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); - // The entry carries no identity fields, so the pick cannot be judged as a substitute. - CHECK(pub.material_replacements[0] == "slot 0: My PLA -> My ABS"); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS (published material imported)"); } - SECTION("no same-type match falls back to the first available visible preset") { + SECTION("the author's identity rides on the copy when the type has no library match") { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); pla.config.opt_string("filament_type", 0u) = "PLA"; @@ -891,8 +896,8 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat bundle.filament_presets = { "My PLA" }; PublishedMaterialEntry full = make_full_abs_entry(); - // The dump carries the identity too, so the fallback preset must take the author's type - // and vendor. + // The dump carries the identity too, so the created copy takes the author's type + // and vendor instead of the baseline clone's. full.full_keys = { "filament_retraction_length", "filament_type", "filament_vendor" }; PublishedConfig pub; @@ -904,97 +909,27 @@ TEST_CASE("Published 3MF full-published slots replace or ignore the receiver mat Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // No ABS in the library: the slot falls back to the first available visible preset (the - // unused "Other PLA") and the author's full values are written onto it, type and vendor - // included. The receiver's own material is untouched. - CHECK(bundle.filament_presets[0] == "Other PLA"); - Preset *fallback = bundle.filaments.find_preset("Other PLA", false, true); - REQUIRE(fallback != nullptr); - CHECK(fallback->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(fallback->config.opt_string("filament_type", 0u) == "ABS"); - CHECK(fallback->config.opt_string("filament_vendor", 0u) == "Generic"); + // No ABS preset needs to exist in the library: the copy carries the author's values, + // type and vendor included. Neither receiver preset was touched. + CHECK(bundle.filament_presets[0] == "ABS"); + Preset *copy = bundle.filaments.find_preset("ABS", false, true); + REQUIRE(copy != nullptr); + CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(copy->config.opt_string("filament_type", 0u) == "ABS"); + CHECK(copy->config.opt_string("filament_vendor", 0u) == "Generic"); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt_string("filament_type", 0u) == "PLA"); + CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PLA -> Other PLA (substitute: no ABS available)"); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS (published material imported)"); } } -// Regression for the author's published material being skipped by a type-only replacement -// search: the slot must prefer the exact published material (filament_id) over the first other -// same-type preset, even when the exact preset is already referenced by another slot. -TEST_CASE("Published 3MF replaces a mismatched slot with the exact published material when available", "[Preset][Bundle][Published]") -{ - auto make_file_config = [] { - DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); - config.opt("filament_diameter")->values = { 1.75 }; - config.opt("filament_self_index")->values = { 1 }; - config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; - config.opt("filament_colour")->values = { "#FF0000" }; - config.opt("filament_type")->values = { "PLA" }; - config.opt("filament_vendor")->values = { "Generic" }; - config.opt("filament_ids")->values = { "GFL99" }; - config.option("filament_retraction_length", true)->values = { 0.9 }; - return config; - }; - - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // The receiver's second slot already uses the exact published material. - Preset &generic_pla = add_inmemory_preset(bundle.filaments, "Generic PLA"); - generic_pla.filament_id = "GFL99"; - generic_pla.config.opt_string("filament_type", 0u) = "PLA"; - generic_pla.config.opt_string("filament_vendor", 0u) = "Generic"; - generic_pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; - // An unrelated PLA, unreferenced: a type-only search picks it because Generic PLA is - // referenced by slot 1. - Preset &bambu = add_inmemory_preset(bundle.filaments, "Bambu PLA Basic"); - bambu.filament_id = "GFB00"; - bambu.config.opt_string("filament_type", 0u) = "PLA"; - bambu.config.opt_string("filament_vendor", 0u) = "Bambu Lab"; - bambu.config.opt("filament_retraction_length", true)->values = { 0.4 }; - bundle.filament_presets = { "My PETG", "Generic PLA" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.filament_id = "GFL99"; - entry.filament_vendor = "Generic"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - // The exact published material (id GFL99) wins over the unreferenced type-only preset. - CHECK(bundle.filament_presets[0] == "Generic PLA"); - CHECK(bundle.filament_presets[1] == "Generic PLA"); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - // The receiver's own material is untouched; the unrelated PLA too. - CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); - CHECK(bundle.filaments.find_preset("Bambu PLA Basic", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.4 }); - // Accepted mutate tradeoff: the shared exact-material preset was mutated, so slot 1 also - // carries the author's values (the leak is documented, not accidental). - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - // An exact-material pick is reported without a substitute qualifier. - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA"); - CHECK(pub.skipped_keys.empty()); -} - -// The author's preset name travels in the file, so a type mismatch resolves to the exact -// published material even when the identity fields are absent or stale (older files): a -// "Generic PLA" author must land on the receiver's "Generic PLA", never on a same-type -// substitute like "Bambu PLA Basic". -TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by name", "[Preset][Bundle][Published]") +// The author's preset name travels in the file and names the created standalone copy (variant +// tail stripped), regardless of what the receiver's library holds: an exact-name library preset +// is never reused nor mutated. +TEST_CASE("Published 3MF imports a full material under the author's stripped name", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -1019,7 +954,7 @@ TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by nam return &preset; }; - SECTION("full identity (name, setting_id, filament_id): the name match wins") { + SECTION("an exact-name library preset exists: a detached copy is created beside it") { PresetBundle bundle; Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); petg.config.opt_string("filament_type", 0u) = "PETG"; @@ -1046,15 +981,18 @@ TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by nam Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - CHECK(bundle.filament_presets[0] == "Generic PLA @System"); - CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // The copy is named after the stripped author name; the receiver's exact-name preset + // keeps its own values. + CHECK(bundle.filament_presets[0] == "Generic PLA"); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (published material imported)"); CHECK(pub.skipped_keys.empty()); } - SECTION("only the name is present (broken/stale ids): still the exact preset") { + SECTION("only the name is present (broken/stale ids): the copy is still created") { PresetBundle bundle; Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); petg.config.opt_string("filament_type", 0u) = "PETG"; @@ -1078,43 +1016,14 @@ TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by nam Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - CHECK(bundle.filament_presets[0] == "Generic PLA @System"); + CHECK(bundle.filament_presets[0] == "Generic PLA"); CHECK(bundle.filaments.find_preset("Bambu PLA Basic @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (published material imported)"); CHECK(pub.skipped_keys.empty()); } - SECTION("the exact preset is hidden in the library: the exact match still wins") { - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - Preset &generic_pla = *add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); - generic_pla.is_visible = false; - add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); - bundle.filament_presets = { "My PETG" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @System"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filament_presets[0] == "Generic PLA @System"); - CHECK(pub.skipped_keys.empty()); - } - - SECTION("grown slot (author slot 1) is seeded with the exact preset by name") { + SECTION("grown slot (author slot 1) receives its own detached copy") { auto two_slot_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); config.opt("filament_diameter")->values = { 1.75, 1.75 }; @@ -1153,53 +1062,27 @@ TEST_CASE("Published 3MF replaces a mismatched slot with the exact preset by nam REQUIRE(bundle.filament_presets.size() == 2); CHECK(bundle.filament_presets[0] == "My PETG"); - CHECK(bundle.filament_presets[1] == "Generic PLA @System"); - // The full dump applies the author's slot-1 value onto the grown slot's preset. - CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); - CHECK(pub.skipped_keys.empty()); - } - - SECTION("no exact preset in the library: falls back to the substitute") { - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); - bundle.filament_presets = { "My PETG" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @System"; - entry.filament_id = "OGFL99"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filament_presets[0] == "Bambu PLA Basic @System"); + // The grown slot lands on a freshly created copy carrying the author's slot-1 value; + // the library preset that seeded it stays untouched. + CHECK(bundle.filament_presets[1] == "Generic PLA"); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); + CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Bambu PLA Basic @System (substitute: no exact material match)"); + CHECK(pub.material_replacements[0] == "slot 1: Generic PLA @System -> Generic PLA (published material imported)"); + CHECK(pub.skipped_keys.empty()); } } -// The receiver library can hold several presets that all look like "Generic PLA": a bare-named -// legacy copy, the author's exact vendor preset and the Orca library preset (whose alias is the -// bare name). The exact preset name must outrank the fuzzy bare/alias tier, so the author's -// "Generic PLA @Qidi Q2 0.4 nozzle" wins regardless of collection order. -TEST_CASE("Published 3MF prefers the exact preset over same-bare-name presets", "[Preset][Bundle][Published]") +// The stripped author name can collide with an existing library preset ("Generic PLA"): the +// created copy must uniquify with the "(Published)" suffix rather than overwrite, reuse or +// mutate any of the receiver's own presets. +TEST_CASE("Published 3MF uniquifies an imported full material name on collision", "[Preset][Bundle][Published]") { PresetBundle bundle; Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); petg.config.opt_string("filament_type", 0u) = "PETG"; petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // A legacy bundle preset literally named "Generic PLA": bare-name match, sorts first. + // A legacy bundle preset literally named "Generic PLA" - collides with the stripped name. Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); bare.config.opt_string("filament_type", 0u) = "PLA"; bare.config.opt_string("filament_vendor", 0u) = "Generic"; @@ -1209,7 +1092,7 @@ TEST_CASE("Published 3MF prefers the exact preset over same-bare-name presets", qidi.config.opt_string("filament_type", 0u) = "PLA"; qidi.config.opt_string("filament_vendor", 0u) = "Generic"; qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; - // The Orca library preset: alias "Generic PLA" matches the bare-name tier too. + // The Orca library preset. Preset &sys = add_inmemory_preset(bundle.filaments, "Generic PLA @System"); sys.config.opt_string("filament_type", 0u) = "PLA"; sys.config.opt_string("filament_vendor", 0u) = "Generic"; @@ -1231,103 +1114,15 @@ TEST_CASE("Published 3MF prefers the exact preset over same-bare-name presets", Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The exact preset beats the bare/alias matches even though "Generic PLA" sorts first. - CHECK(bundle.filament_presets[0] == "Generic PLA @Qidi Q2 0.4 nozzle"); + // The copy lands beside the collision, suffixed; every pre-existing preset keeps its own + // values. + CHECK(bundle.filament_presets[0] == "Generic PLA (Published)"); + CHECK(bundle.filaments.find_preset("Generic PLA (Published)", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filaments.find_preset("Generic PLA @Qidi Q2 0.4 nozzle", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @Qidi Q2 0.4 nozzle"); - CHECK(pub.skipped_keys.empty()); -} - -// The author's exact preset exists on the receiver but is incompatible with the active printer -// (a Qidi bundle preset on a non-Qidi printer); a same-family preset that IS compatible must -// win instead, so the slot never ends up with a filament the printer cannot use. -TEST_CASE("Published 3MF prefers a compatible preset over an exact but incompatible one", "[Preset][Bundle][Published]") -{ - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // The bare-named legacy preset (Bambu-printer only) and the exact author preset are both - // incompatible with the receiver's printer. update_compatible() recomputes is_compatible - // inside load_config_model, so the incompatibility is expressed the way production derives - // it: a compatible_printers constraint no receiver printer satisfies (the fresh bundle's - // active printer is the "Default Printer" placeholder). - Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); - bare.config.opt_string("filament_type", 0u) = "PLA"; - bare.config.opt_string("filament_vendor", 0u) = "Generic"; - bare.config.opt("filament_retraction_length", true)->values = { 0.5 }; - bare.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); - Preset &qidi = add_inmemory_preset(bundle.filaments, "Generic PLA @Qidi Q2 0.4 nozzle"); - qidi.config.opt_string("filament_type", 0u) = "PLA"; - qidi.config.opt_string("filament_vendor", 0u) = "Generic"; - qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; - qidi.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); - // The receiver's own compatible library preset. - Preset &sys = add_inmemory_preset(bundle.filaments, "Generic PLA @System"); - sys.config.opt_string("filament_type", 0u) = "PLA"; - sys.config.opt_string("filament_vendor", 0u) = "Generic"; - sys.config.opt("filament_retraction_length", true)->values = { 0.5 }; - bundle.filament_presets = { "My PETG" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @Qidi Q2 0.4 nozzle"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = published_pla_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filament_presets[0] == "Generic PLA @System"); - // A same-family name-tier pick is not reported as a substitute. - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); - CHECK(pub.skipped_keys.empty()); -} - -// When every candidate is incompatible with the receiver's printer, the search still falls back -// to the best (exact) match rather than leaving the slot on the mismatched type. -TEST_CASE("Published 3MF falls back to an incompatible exact preset when no compatible candidate exists", "[Preset][Bundle][Published]") -{ - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // The exact author preset is incompatible with the receiver's printer. update_compatible() - // recomputes is_compatible inside load_config_model, so the incompatibility is expressed the - // way production derives it: a compatible_printers constraint the receiver's printer (the - // fresh bundle's "Default Printer" placeholder) does not satisfy. - Preset &qidi = add_inmemory_preset(bundle.filaments, "Generic PLA @Qidi Q2 0.4 nozzle"); - qidi.config.opt_string("filament_type", 0u) = "PLA"; - qidi.config.opt_string("filament_vendor", 0u) = "Generic"; - qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; - qidi.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); - bundle.filament_presets = { "My PETG" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @Qidi Q2 0.4 nozzle"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = published_pla_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filament_presets[0] == "Generic PLA @Qidi Q2 0.4 nozzle"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @Qidi Q2 0.4 nozzle"); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (Published) (published material imported)"); CHECK(pub.skipped_keys.empty()); } @@ -1393,35 +1188,46 @@ TEST_CASE("Published 3MF writes to the stored preset when the edited layer is re CHECK(pub.skipped_keys.empty()); } -// The author published "Generic PLA @System"; the receiver's copy "Generic PLA" drops the -// "@System" suffix (and has no setting_id, a different filament_id), so only the trimmed -// bare-name tier can reach it - the truncated form carries trailing whitespace that must not -// defeat the match. -TEST_CASE("Published 3MF name matching accepts suffix-less receiver presets", "[Preset][Bundle][Published]") +// The created copy is named after the author's preset with the "@variant" tail stripped; +// trailing whitespace left behind by the truncation must be trimmed away, and names without +// a tail pass through unchanged. +TEST_CASE("publish_material_base_name strips the variant tail from a published preset name", "[Preset][Bundle][Published]") +{ + CHECK(publish_material_base_name("Generic PLA @System") == "Generic PLA"); + CHECK(publish_material_base_name("Generic PLA @Qidi Q2 0.4 nozzle") == "Generic PLA"); + // Truncation at '@' leaves the space before the tail; it must not survive. + CHECK(publish_material_base_name("Generic PLA @System") == "Generic PLA"); + CHECK(publish_material_base_name("Voron Generic PLA") == "Voron Generic PLA"); + CHECK(publish_material_base_name("") == ""); + // A tail-only name strips to nothing; the caller falls back to identity fields. + CHECK(publish_material_base_name("@System").empty()); +} + +// A full-published material arrives as a brand-new standalone preset: parentless, visible, +// project-embedded ("Preset Inside Project"), carrying the author's values and colour - and +// never touching any of the receiver's own presets. +TEST_CASE("Published 3MF imports a full material as a detached project-embedded preset", "[Preset][Bundle][Published]") { PresetBundle bundle; Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); petg.config.opt_string("filament_type", 0u) = "PETG"; petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - Preset &plain = add_inmemory_preset(bundle.filaments, "Generic PLA"); - plain.config.opt_string("filament_type", 0u) = "PLA"; - plain.config.opt_string("filament_vendor", 0u) = "Generic"; - plain.config.opt("filament_retraction_length", true)->values = { 0.5 }; - // An unrelated same-type preset that would win a type-only search. - Preset &bambu = add_inmemory_preset(bundle.filaments, "Bambu PLA Basic"); - bambu.config.opt_string("filament_type", 0u) = "PLA"; - bambu.config.opt_string("filament_vendor", 0u) = "Bambu Lab"; - bambu.config.opt("filament_retraction_length", true)->values = { 0.4 }; + Preset &spare = add_inmemory_preset(bundle.filaments, "Spare PLA"); + spare.config.opt_string("filament_type", 0u) = "PLA"; + spare.config.opt("filament_retraction_length", true)->values = { 0.4 }; bundle.filament_presets = { "My PETG" }; PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @System"; - entry.filament_id = "GFL99"; - entry.full_keys = { "filament_retraction_length" }; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; @@ -1430,37 +1236,57 @@ TEST_CASE("Published 3MF name matching accepts suffix-less receiver presets", "[ Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The trimmed bare-name tier fires: the suffix-less copy wins over the type-only - // candidate, without a substitute qualifier. - CHECK(bundle.filament_presets[0] == "Generic PLA"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA"); + // The slot lands on the freshly created copy, named after the stripped author name. + CHECK(bundle.filament_presets[0] == "Author PLA"); + Preset *copy = bundle.filaments.find_preset("Author PLA", false, true); + REQUIRE(copy != nullptr); + // Detached + project-embedded contract. + CHECK(copy->is_project_embedded); + CHECK(copy->inherits().empty()); + CHECK(copy->setting_id.empty()); + CHECK(copy->vendor == nullptr); + CHECK_FALSE(copy->is_system); + CHECK_FALSE(copy->is_default); + CHECK_FALSE(copy->is_external); + CHECK(copy->is_visible); + CHECK(copy->filament_id == "AFL01"); + CHECK(copy->config.opt("filament_settings_id")->values == std::vector{ "Author PLA" }); + // The published values and colour live on the copy. + CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(copy->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // Universally compatible: no printer/print restrictions survive the import. + CHECK(copy->config.opt("compatible_printers")->values.empty()); + CHECK(copy->config.opt("compatible_prints")->values.empty()); + CHECK(copy->config.opt("compatible_printers_condition")->value.empty()); + CHECK(copy->config.opt("compatible_prints_condition")->value.empty()); + // Nothing pre-existing was touched. + CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); + CHECK(bundle.filaments.find_preset("Spare PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.4 }); CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA (published material imported)"); } -// The receiver's vendor renamed "Generic PLA @System" to "PLA Generic @System" (renamed_from -// records the old name); the published file still names the old preset, which resolves through -// the collection's rename map instead of degrading to a same-type substitute. -TEST_CASE("Published 3MF name matching follows the receiver's preset renames", "[Preset][Bundle][Published]") +// Compatibility restrictions riding on the receiver's baseline preset must not leak onto the +// imported copy: a detached full material is usable with every printer and print profile. +TEST_CASE("Published 3MF clears printer restrictions on the imported full material", "[Preset][Bundle][Published]") { PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_inmemory_preset(bundle.filaments, "PLA Generic @System"); - bundle.filament_presets = { "My PETG" }; - - set_renamed_from(bundle.filaments, "PLA Generic @System", { "Generic PLA @System" }); - AppConfig app_config; - bundle.load_installed_printers(app_config); // rebuild the rename map + Preset &restricted = add_inmemory_preset(bundle.filaments, "Restricted PLA"); + restricted.config.opt_string("filament_type", 0u) = "PLA"; + restricted.config.opt("filament_retraction_length", true)->values = { 0.5 }; + restricted.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); + restricted.config.set_key_value("compatible_prints", new ConfigOptionStrings({ "Unrelated Print" })); + restricted.config.option("compatible_printers_condition", true)->value = "printer_settings_id==\"Nope\""; + restricted.config.option("compatible_prints_condition", true)->value = "print_settings_id==\"Nope\""; + bundle.filament_presets = { "Restricted PLA" }; PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Generic PLA @System"; // the pre-rename name - entry.full_keys = { "filament_retraction_length" }; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.full_keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; @@ -1469,215 +1295,206 @@ TEST_CASE("Published 3MF name matching follows the receiver's preset renames", " Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // find_preset2 resolves the pre-rename name through the collection's rename map. - CHECK(bundle.filament_presets[0] == "PLA Generic @System"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> PLA Generic @System"); + // The copy (named from the published type; no identity fields) has no restrictions left. + CHECK(bundle.filament_presets[0] == "PLA"); + Preset *copy = bundle.filaments.find_preset("PLA", false, true); + REQUIRE(copy != nullptr); + CHECK(copy->config.opt("compatible_printers")->values.empty()); + CHECK(copy->config.opt("compatible_prints")->values.empty()); + CHECK(copy->config.opt("compatible_printers_condition")->value.empty()); + CHECK(copy->config.opt("compatible_prints_condition")->value.empty()); + // The receiver's own restricted preset keeps its restrictions. + const Preset *original = bundle.filaments.find_preset("Restricted PLA", false, true); + REQUIRE(original != nullptr); + CHECK(original->config.opt("compatible_printers")->values == std::vector{ "Unrelated Printer" }); + CHECK(original->config.opt("compatible_printers_condition")->value == "printer_settings_id==\"Nope\""); CHECK(pub.skipped_keys.empty()); } -// The author's preset "Voron Generic PLA" (a vendor-specific generic) is gone from the -// receiver's profile set; find_preset2 auto-matches it to the Orca Filament Library instead of -// falling back to a same-type substitute. -TEST_CASE("Published 3MF name matching falls back to the library for removed vendor generics", "[Preset][Bundle][Published]") -{ - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_inmemory_preset(bundle.filaments, "Generic PLA @System"); - bundle.filament_presets = { "My PETG" }; - - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.preset_name = "Voron Generic PLA"; - entry.full_keys = { "filament_retraction_length" }; - - PublishedConfig pub; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = published_pla_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - - CHECK(bundle.filament_presets[0] == "Generic PLA @System"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA @System"); - CHECK(pub.skipped_keys.empty()); -} - -// The replacement search prefers the published identity: exact filament_id, then vendor+type, -// then type only (collection order decides equal scores; the pick is reported as a substitute -// when it is not the exact published material). -TEST_CASE("Published 3MF prefers the published material identity when replacing a slot", "[Preset][Bundle][Published]") +// Identical Full materials (same setting_id + preset_name identity) share one created +// instance: an author who pointed several slots at one material gets one standalone copy, +// and the first entry's slot values win. +TEST_CASE("Published 3MF shares one imported copy between identical full slots", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); - config.opt("filament_diameter")->values = { 1.75 }; - config.opt("filament_self_index")->values = { 1 }; - config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; - config.opt("filament_colour")->values = { "#FF0000" }; - config.opt("filament_type")->values = { "PLA" }; - config.opt("filament_vendor")->values = { "Generic" }; - config.opt("filament_ids")->values = { "GFL99" }; - config.option("filament_retraction_length", true)->values = { 0.9 }; + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "AFL01", "AFL01" }; + config.option("filament_retraction_length", true)->values = { 0.9, 0.8 }; return config; }; - auto make_entry = [] { + auto make_entry = [](int slot) { PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.filament_id = "GFL99"; - entry.filament_vendor = "Generic"; - entry.full_keys = { "filament_retraction_length" }; + entry.slot = slot; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; return entry; }; - auto add_pla = [](PresetBundle &bundle, const char *name, const char *id, const char *vendor) { - Preset &preset = add_inmemory_preset(bundle.filaments, name); - preset.filament_id = id; - preset.config.opt_string("filament_type", 0u) = "PLA"; - preset.config.opt_string("filament_vendor", 0u) = vendor; - preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; - return &preset; - }; - auto load = [&](PresetBundle &bundle, PublishedConfig &pub) { - PublishedMaterialEntry entry = make_entry(); - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - }; - SECTION("exact filament_id beats collection order") { - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - // "Bambu PLA Basic" sorts before "Zebra PLA"; only the latter carries the published id. - add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); - add_pla(bundle, "Zebra PLA", "GFL99", "Generic"); - bundle.filament_presets = { "My PETG" }; + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PETG"); + other.config.opt_string("filament_type", 0u) = "PETG"; + other.config.opt("filament_retraction_length", true)->values = { 0.65 }; + bundle.filament_presets = { "My PETG", "Other PETG" }; - PublishedConfig pub; - load(bundle, pub); - CHECK(bundle.filament_presets[0] == "Zebra PLA"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Zebra PLA"); - } + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry(0), make_entry(1) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - SECTION("vendor and type beat a type-only preset, reported as a substitute") { - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); - add_pla(bundle, "Zebra PLA", "ZZZ99", "Generic"); // same vendor+type, different id - bundle.filament_presets = { "My PETG" }; - - PublishedConfig pub; - load(bundle, pub); - CHECK(bundle.filament_presets[0] == "Zebra PLA"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Zebra PLA (substitute: no exact material match)"); - } - - SECTION("type-only candidates keep collection order and are reported as substitutes") { - PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_pla(bundle, "Bambu PLA Basic", "GFB00", "Bambu Lab"); - add_pla(bundle, "Zebra PLA", "ZZZ99", "Acme"); // no identity match at all - bundle.filament_presets = { "My PETG" }; - - PublishedConfig pub; - load(bundle, pub); - CHECK(bundle.filament_presets[0] == "Bambu PLA Basic"); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Bambu PLA Basic (substitute: no exact material match)"); - } + // Both slots point at the single shared copy; no second "(Published)" instance exists. + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "Author PLA"); + CHECK(bundle.filament_presets[1] == "Author PLA"); + CHECK(bundle.filaments.find_preset("Author PLA", false, true) != nullptr); + CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true) == nullptr); + // The first entry's slot values won. + CHECK(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + // Both slots reported, same target; originals untouched. + REQUIRE(pub.material_replacements.size() == 2); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA (published material imported)"); + CHECK(pub.material_replacements[1] == "slot 1: Other PETG -> Author PLA (published material imported)"); + CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); + CHECK(bundle.filaments.find_preset("Other PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.65 }); + CHECK(pub.skipped_keys.empty()); } -// "Generic PLA" and "Generic PLA Matte" share their inherited filament_id (OGFL99), so the -// exact variant can only be matched via the preset setting_id carried in the published file. -TEST_CASE("Published 3MF matches the exact published variant via setting_id", "[Preset][Bundle][Published]") +// Without a preset name the copy falls back to the stable material id; fully anonymous +// hand-crafted entries never share instances between slots (their dedup key is slot-scoped). +TEST_CASE("Published 3MF names unidentified full materials from their fallback fields", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); - config.opt("filament_diameter")->values = { 1.75 }; - config.opt("filament_self_index")->values = { 1 }; - config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; - config.opt("filament_colour")->values = { "#FF0000" }; - config.opt("filament_type")->values = { "PLA" }; - config.opt("filament_vendor")->values = { "Generic" }; - config.opt("filament_ids")->values = { "OGFL99" }; - config.option("filament_retraction_length", true)->values = { 0.9 }; + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; return config; }; - auto add_pla = [](PresetBundle &bundle, const char *name, const char *setting_id) { - Preset &preset = add_inmemory_preset(bundle.filaments, name); - preset.setting_id = setting_id; - preset.filament_id = "OGFL99"; // shared by all Generic PLA variants - preset.config.opt_string("filament_type", 0u) = "PLA"; - preset.config.opt_string("filament_vendor", 0u) = "Generic"; - preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; - return &preset; - }; - auto load = [&](PresetBundle &bundle, PublishedConfig &pub, const std::string &setting_id) { - PublishedMaterialEntry entry; - entry.slot = 0; - entry.full = true; - entry.publish_type = true; - entry.publish_type_value = "PLA"; - entry.filament_id = "OGFL99"; - entry.filament_vendor = "Generic"; - entry.setting_id = setting_id; - entry.full_keys = { "filament_retraction_length" }; - pub.published = true; - pub.material_keys = { entry }; - DynamicPrintConfig config = make_file_config(); - Preset::normalize(config); - bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - }; - SECTION("the published variant wins over its same-id sibling") { + SECTION("empty preset_name falls back to the filament_id") { PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_pla(bundle, "Generic PLA", "RcBNzytWgwRrwXXz"); - add_pla(bundle, "Generic PLA Matte", "RFs9eCKYOMUSmvZf"); - bundle.filament_presets = { "My PETG" }; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.full_keys = { "filament_retraction_length" }; PublishedConfig pub; - load(bundle, pub, "RFs9eCKYOMUSmvZf"); // the author published "Generic PLA Matte" - CHECK(bundle.filament_presets[0] == "Generic PLA Matte"); - CHECK(bundle.filaments.find_preset("Generic PLA Matte", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA Matte"); + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "AFL01"); + CHECK(bundle.filaments.find_preset("AFL01", false, true) != nullptr); CHECK(pub.skipped_keys.empty()); } - SECTION("without a setting_id the same-id siblings fall back to collection order") { + SECTION("fully anonymous entries get slot-scoped copies") { PresetBundle bundle; - Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); - petg.config.opt_string("filament_type", 0u) = "PETG"; - petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; - add_pla(bundle, "Generic PLA", "RcBNzytWgwRrwXXz"); - add_pla(bundle, "Generic PLA Matte", "RFs9eCKYOMUSmvZf"); - bundle.filament_presets = { "My PETG" }; + Preset &first = add_inmemory_preset(bundle.filaments, "First PLA"); + first.config.opt_string("filament_type", 0u) = "PLA"; + first.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &second = add_inmemory_preset(bundle.filaments, "Second PLA"); + second.config.opt_string("filament_type", 0u) = "PLA"; + second.config.opt("filament_retraction_length", true)->values = { 0.55 }; + bundle.filament_presets = { "First PLA", "Second PLA" }; + + PublishedMaterialEntry entry0; + entry0.slot = 0; + entry0.full = true; + entry0.publish_type = true; + entry0.publish_type_value = "ABS"; // the only naming field present + entry0.full_keys = { "filament_retraction_length" }; + PublishedMaterialEntry entry1 = entry0; + entry1.slot = 1; PublishedConfig pub; - load(bundle, pub, ""); // legacy file without the field - CHECK(bundle.filament_presets[0] == "Generic PLA"); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + pub.published = true; + pub.material_keys = { entry0, entry1 }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // No shared identity: each slot gets its own uniquified copy. + CHECK(bundle.filament_presets[0] == "ABS"); + CHECK(bundle.filament_presets[1] == "ABS (Published)"); + CHECK(bundle.filaments.find_preset("ABS", false, true) != nullptr); + CHECK(bundle.filaments.find_preset("ABS (Published)", false, true) != nullptr); + CHECK(pub.skipped_keys.empty()); + } +} + +// Within-load dedup does not span loads: importing the same published file again into the same +// session creates a second, uniquified copy instead of mutating or reusing the first. +TEST_CASE("Re-importing a published full material uniquifies the second copy", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + bundle.filament_presets = { "My PETG" }; + + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + + for (int round = 0; round < 2; ++round) { + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + if (round == 0) { + CHECK(bundle.filament_presets[0] == "Author PLA"); + CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true) == nullptr); + } else { + // The second import uniquifies beside the first instead of touching it. + CHECK(bundle.filament_presets[0] == "Author PLA (Published)"); + CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + CHECK(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: Author PLA -> Author PLA (Published) (published material imported)"); + } CHECK(pub.skipped_keys.empty()); } } From d4cb739b8b735b7014994db481017f7ce4dff455 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 14:17:56 +0800 Subject: [PATCH 046/208] Dead code removal and comment cleanup --- src/libslic3r/Preset.cpp | 12 ++-- src/libslic3r/PresetBundle.cpp | 97 +++++++------------------------ src/libslic3r/PresetBundle.hpp | 7 ++- src/libslic3r/PublishSettings.hpp | 24 ++++---- 4 files changed, 43 insertions(+), 97 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 802da6ae8c..a0fd9a9e04 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -3056,9 +3056,11 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det } // A detached standalone preset for the Full Publish receiver: create a user preset holding -// the full resolved filament config (no inheritance, no vendor/alias links), parentless and -// universally compatible. Mirrors save_current_preset(detach=true)'s creation branch but -// does not force-select or diff against a parent; the caller decides whether to select it. +// the full resolved filament config (no inheritance, no vendor/alias links), parentless. +// Note: universal printer compatibility is not enforced here - callers apply +// make_publish_universal() to the config before handing it over when they need it. +// Mirrors save_current_preset(detach=true)'s creation branch but does not force-select or +// diff against a parent; the caller decides whether to select it. // The published entry's filament_id is forwarded so user bases keep their stable // material grouping (get_filament_presets() groups user bases by filament_id). // save_to_project=true (the Full Publish default) creates a project-embedded preset: @@ -3094,8 +3096,6 @@ std::string PresetCollection::add_detached_preset(const std::string &name_base, lock(); const auto it = this->find_preset_internal(final_name); Preset &preset = *m_presets.insert(it, stored); - stored.name.clear(); // avoid stale copied name being used below - stored.config.clear(); preset.name = final_name; preset.vendor = nullptr; preset.alias.clear(); @@ -3103,7 +3103,7 @@ std::string PresetCollection::add_detached_preset(const std::string &name_base, preset.m_excluded_from.clear(); preset.setting_id.clear(); preset.inherits().clear(); - preset.version = Semver::parse(SoftFever_VERSION) ? *Semver::parse(SoftFever_VERSION) : Semver(); + preset.version = Semver::parse(SoftFever_VERSION).value_or(Semver()); preset.is_default = false; preset.is_system = false; preset.is_external = false; diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 96373eae7c..f1b653feac 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4921,25 +4921,21 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // Material pass: positional per-slot entries. The author published, per slot, either the // entire filament (full) or specific keys plus optionally a curated type and/or colour. - // The receiver's slot is matched positionally against the published type: - // - colour: always applied to the slot, independent of the type gate; - // - type match: the full dump still applies wholesale (every setting, as if the slot's - // filament had been loaded from a normal save); a partial entry's keys are applied - // as usual; - // - type mismatch: the slot is replaced with the best visible candidate, scored by the - // published identity (exact preset name resolved through the collection's name - // machinery, then exact setting_id, exact filament_id, then vendor+type, then type - // only); a preset no other slot references wins on equal scores, and a shared - // exact-material preset is taken even though mutating it also affects the other - // slot; the author's values are applied on top of it (full) or the published keys - // are applied (partial); - // - no replacement available: a full entry falls back to the first available visible - // preset, applying the author's values on top of it; a partial entry keeps the - // receiver's material and reports its keys as skipped. - // All applied values (colour and keys) are written onto the slot's effective preset - - // the collection's edited layer when the slot references the edited preset (visible as - // a modification, revertible, the user's unsaved edits preserved), otherwise the stored - // preset in place: the receiver's material keeps its identity and is simply overridden. + // - full: the slot always lands on a freshly created standalone detached copy + // ("Detach from parent", project-embedded, universally compatible, within-load + // deduped) - handled up front in the entry loop below; no library preset is ever + // reused or mutated; + // - partial: a type requirement gates the application - on type match (or no + // requirement) the keys are applied onto the slot's effective preset; on mismatch + // the slot is replaced with the best visible candidate, scored by the published + // identity (exact preset name resolved through the collection's name machinery, + // then exact setting_id, exact filament_id, then vendor+type, then type only); a + // preset no other slot references wins on equal scores; with no replacement + // available the receiver's material is kept and the keys are reported as skipped; + // - colour: applied to the slot regardless of the type gate. + // Applied partial values land on the collection's edited layer when the slot references + // it and that layer survives the load (visible as a modification, revertible, the user's + // unsaved edits preserved), otherwise on the stored preset in place. // To keep slot-to-slot aliasing (several slots referencing one preset) from leaking one // slot's values into another, published slots sharing a preset with another slot are // re-pointed at distinct presets before the values are applied. @@ -5521,64 +5517,10 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (score < 2 && (!entry.filament_id.empty() || !entry.filament_vendor.empty())) replacement_line += " (substitute: no exact material match)"; published_config->material_replacements.emplace_back(std::move(replacement_line)); - } else if (entry.full) { - // No same-type library preset: fall back to the first available - // visible preset, preferring one no other slot references, and - // apply the author's full values on top of it (the dump carries - // filament_type, so the preset takes the author's type). A preset - // of the published material's own family is preferred overall - - // except that a referenced preset must never win just on family, - // since the dump would mutate it for every sharing slot too. - std::string fallback; - const std::string wanted_family = !entry.publish_type_value.empty() - ? entry.publish_type_value : normalize_filament_type(entry.filament_type); - auto pick_fallback = [&](bool want_family) -> std::string { - std::string first; - for (size_t i = first_candidate; i < this->filaments.size(); ++i) { - const Preset &candidate = this->filaments.preset(i); - if (!candidate.is_visible) - continue; - if (want_family) { - if (wanted_family.empty()) - break; - const ConfigOptionStrings *cand_types = candidate.config.opt("filament_type"); - if (normalize_filament_type(cand_types != nullptr && !cand_types->values.empty() ? cand_types->get_at(0) : std::string()) != wanted_family) - continue; - } - bool referenced = false; - for (size_t s = 0; s < this->filament_presets.size(); ++s) - if (this->filament_presets[s] == candidate.name) { - referenced = true; - break; - } - if (!referenced) - return candidate.name; - if (first.empty()) - first = candidate.name; - } - return first; - }; - if (!wanted_family.empty()) - fallback = pick_fallback(true); - if (fallback.empty()) - fallback = pick_fallback(false); - if (!fallback.empty() && fallback != recv->name) { - const std::string old_name = recv->name; - this->filament_presets[slot] = fallback; - recv = this->filaments.find_preset(fallback, false, true); - material_applied = true; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF slot " << slot << " material " << old_name - << " -> " << fallback << " (full-publish fallback, preset_name \"" - << entry.preset_name << "\", type \"" << entry.publish_type_value << "\")"; - published_config->material_replacements.emplace_back( - "slot " + std::to_string(slot) + ": " + old_name + " -> " + fallback + - " (substitute: no " + entry.publish_type_value + " available)"); - } - // No visible preset at all: keep the receiver's material and let - // the full dump mutate it below. } else { // Partial publish with no replacement: keep the receiver's - // material and report the slot's keys as skipped. + // material and report the slot's keys as skipped. (Full entries + // never reach this gate: they detach above.) for (const std::string &key : entry.keys) skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); apply_slot = false; @@ -5590,7 +5532,8 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // layer when the slot references the collection's edited preset and that // layer will survive the load (visible as a modification and revertible, // preserving the user's unsaved edits), otherwise the stored preset it ended - // up on (original, type replacement or the full-publish fallback), in place. + // up on (original or partial type replacement), in place. Full entries never + // get here - they detach above. DynamicPrintConfig &write_config = (edited_survives_load && recv->name == this->filaments.get_edited_preset().name) ? this->filaments.get_edited_preset().config : recv->config; @@ -5619,7 +5562,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool } if (apply_slot && recv != nullptr) - apply_slot_keys(write_config, entry.full ? entry.full_keys : entry.keys, entry.slot, material_label); + apply_slot_keys(write_config, entry.keys, entry.slot, material_label); } } } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 98b83e053b..c3c8d0f8b0 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -175,9 +175,10 @@ struct PublishedConfig { bool published = false; std::vector published_keys; - // Per-slot published material keys, applied positionally (author slot N -> receiver slot N), - // gated by the author's optional type requirement and written onto the slot's stored preset - // in place (see PublishedMaterialEntry in PublishSettings.hpp). + // Per-slot published material keys, applied positionally (author slot N -> receiver slot N). + // Partial entries are gated by the author's optional type requirement and written onto the + // slot's stored preset in place; full entries instead detach (see PublishedMaterialEntry in + // PublishSettings.hpp). std::vector material_keys; // Keys that could not be applied (missing on the user's machine or vector size mismatch), // filled in by load_config_file_config for notification purposes. diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index bcb3397dcc..d10472ce71 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -35,19 +35,20 @@ const std::set& publishable_printer_keys(); std::vector collect_dirty_settings_keys(const PresetBundle& bundle); // Per-slot published material keys, applied positionally (author slot N -> receiver slot N). -// The identity fields are carried for reference/notification labels only; the type gate -// (publish_type) is the author's explicit opt-in for requiring a material type. +// The identity fields drive the created copy's naming and grouping on Full entries, the +// notification labels, and the partial type gate (publish_type) is the author's explicit +// opt-in for requiring a material type. struct PublishedMaterialEntry { std::string filament_type; // material family, e.g. "PLA" (may be empty) std::string filament_vendor; // e.g. "Generic", "Bambu" (may be empty) std::string filament_id; // stable material id, e.g. "GFL99" (may be empty) - // Unique preset id of the author's slot preset (e.g. Orca Filament Library "setting_id"); - // used on load to match the exact published variant, which filament_id alone cannot - // distinguish ("Generic PLA" and "Generic PLA Matte" share their inherited id). + // Unique preset id of the author's slot preset (e.g. Orca Filament Library "setting_id"). + // Not matched against the receiver's library; carried so identical Full entries within one + // load share one created instance (within-load dedup key). std::string setting_id; - // Canonical name of the author's slot preset (e.g. "Generic PLA @System"). The receiver - // prefers an exact name/alias match over id matching: ids can be shared across variants - // or missing from older files, the name is what the author actually selected. + // Canonical name of the author's slot preset (e.g. "Generic PLA @System"). On Full import + // it names the created copy after its "@variant" tail is stripped; never matched against + // the receiver's library. std::string preset_name; // 0-based author filament slot; -1 (hand-crafted files) is skipped. int slot{-1}; @@ -63,9 +64,10 @@ struct PublishedMaterialEntry { // All non-structural filament keys of the author's slot preset; values travel in the file // config, masked to the author's slot index. std::vector full_keys; - // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on - // mismatch the slot is replaced with a same-type filament from the receiver's library. - // For Full entries the baked filament_type on the created copy satisfies the type gate. + // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on a + // partial entry's mismatch the slot is replaced with a same-type filament from the + // receiver's library. Full entries consult no gate: they detach unconditionally, and the + // copy carries whatever values the payload bakes. bool publish_type{false}; std::string publish_type_value; // Required filament colour, applied on load regardless of the type match. From 795514900da47f420739f2d1b407b7f8250cd19e Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 15:18:38 +0800 Subject: [PATCH 047/208] Fix Windows paint on resize issue. Automatically resize to fit tabs and button content --- src/slic3r/GUI/PublishSettingsDialog.cpp | 40 +++++++++++++++++++++--- src/slic3r/GUI/PublishSettingsDialog.hpp | 2 ++ src/slic3r/GUI/Widgets/StaticBox.cpp | 7 +++++ src/slic3r/GUI/Widgets/StaticBox.hpp | 2 ++ src/slic3r/GUI/Widgets/TabCtrl.cpp | 9 ++++++ src/slic3r/GUI/Widgets/TabCtrl.hpp | 2 ++ 6 files changed, 58 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 08adae903b..0ebb784b01 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -17,6 +17,7 @@ #include "libslic3r/PublishSettings.hpp" #include +#include #include #include @@ -97,7 +98,7 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) _L("Publish 3MF..."), wxDefaultPosition, wxDefaultSize, - wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) + wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE) , m_search(this, "search", 16) , m_menu(this, "filter", 16) { @@ -193,11 +194,42 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) w_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(w_sizer); - SetMinSize(FromDIP(wxSize(600, 500))); - SetSize(FromDIP(wxSize(600, 500))); // initial size only; the dialog is resizable + fit_to_content(); // initial size only; the dialog is resizable wxGetApp().UpdateDlgDarkUI(this); } +// Size the window to its content: width follows the widest tab strip so no filament tab is +// hidden (TabCtrl::relayout hides overflowing buttons), height scales proportionally. Both +// are floored at the 600x500 base and capped at hard DIP limits - deliberately not the whole +// display - with one last-resort clamp so the dialog can never open larger than the screen. +// Also owns the resize floor: the window cannot be resized below what the tabs need, so +// shrinking never re-hides a filament tab. +void PublishSettingsDialog::fit_to_content() +{ + static const wxSize BASE{600, 500}; + static const wxSize CAP{1300, 850}; + + int strip = m_outer_tabs->buttons_best_width(); + for (const SectionGroup& section : m_sections) + strip = std::max(strip, section.tabs->buttons_best_width()); + + // Minimum width: whatever keeps every tab visible (never below the base). strip is device + // pixels (Button min sizes); BASE/CAP are DIP and converted over. + const int min_w = std::max(strip + 2 * FromDIP(10), FromDIP(BASE.x)); + + // Initial size: prefer proportional growth within the caps. + const int w = std::clamp(min_w, FromDIP(BASE.x), FromDIP(CAP.x)); + const double f = double(w) / FromDIP(BASE.x); + const int h = std::clamp(int(FromDIP(BASE.y) * f), FromDIP(BASE.y), FromDIP(CAP.y)); + + const wxRect area = wxDisplay(this).GetClientArea(); + const int max_w = area.width * 9 / 10; + const int max_h = area.height * 9 / 10; + + SetMinSize(wxSize(std::min(min_w, max_w), std::min(FromDIP(BASE.y), max_h))); + SetSize(std::min(w, max_w), std::min(h, max_h)); +} + PublishSettingsDialog::~PublishSettingsDialog() {} void PublishSettingsDialog::build_option_model() @@ -1059,7 +1091,7 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) } } - SetMinSize(FromDIP(wxSize(600, 500))); + fit_to_content(); // tab buttons' min widths grew with the DPI: re-fit (incl. resize floor) Refresh(); } diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 312931c0c1..2b094da75b 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -48,6 +48,8 @@ protected: void on_dpi_changed(const wxRect& suggested_rect) override; private: + void fit_to_content(); + // Which part of the settings the row/category came from. enum class Section { Print, Printer, Material }; diff --git a/src/slic3r/GUI/Widgets/StaticBox.cpp b/src/slic3r/GUI/Widgets/StaticBox.cpp index 6391c1a8c4..f6e7ca67f6 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.cpp +++ b/src/slic3r/GUI/Widgets/StaticBox.cpp @@ -7,6 +7,7 @@ BEGIN_EVENT_TABLE(StaticBox, wxWindow) // catch paint events //EVT_ERASE_BACKGROUND(StaticBox::eraseEvent) +EVT_SIZE(StaticBox::sizeEvent) EVT_PAINT(StaticBox::paintEvent) END_EVENT_TABLE() @@ -140,6 +141,12 @@ void StaticBox::eraseEvent(wxEraseEvent& evt) #endif } +void StaticBox::sizeEvent(wxSizeEvent& evt) +{ + Refresh(); + evt.Skip(); +} + void StaticBox::paintEvent(wxPaintEvent& evt) { // depending on your system you may need to look at double-buffered dcs diff --git a/src/slic3r/GUI/Widgets/StaticBox.hpp b/src/slic3r/GUI/Widgets/StaticBox.hpp index b7cdee34ef..363d431c8e 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.hpp +++ b/src/slic3r/GUI/Widgets/StaticBox.hpp @@ -46,6 +46,8 @@ public: protected: void eraseEvent(wxEraseEvent& evt); + void sizeEvent(wxSizeEvent& evt); + void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 6aeffd2dce..5c2eb2d693 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -295,6 +295,15 @@ void TabCtrl::relayout() Layout(); } +int TabCtrl::buttons_best_width() const +{ + // Mirrors relayout(): a 10px leading spacer plus every button's min width and spacing. + int width = 10; + for (const Button *btn : btns) + width += btn->GetMinSize().x + TAB_BUTTON_SPACE * 2; + return width; +} + void TabCtrl::buttonClicked(wxCommandEvent &event) { SetFocus(); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index e79dd1dee6..5631eeb6a7 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -73,6 +73,8 @@ private: void relayout(); + int buttons_best_width() const; + void buttonClicked(wxCommandEvent & event); void keyDown(wxKeyEvent &event); From 51b646efcf7aeae7cc5a7e4790b31fa8baf4bbe1 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 16:40:18 +0800 Subject: [PATCH 048/208] Better safety if publish workflow crashes. Cleanup on Button --- src/slic3r/GUI/Plater.cpp | 56 +++++++++++++++++++----------- src/slic3r/GUI/Widgets/Button.cpp | 21 ++++------- src/slic3r/GUI/Widgets/Button.hpp | 3 -- src/slic3r/GUI/Widgets/TabCtrl.cpp | 2 +- src/slic3r/GUI/Widgets/TabCtrl.hpp | 5 +-- 5 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 52d90623fe..bdca6b7c77 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16323,29 +16323,43 @@ int Plater::export_published_3mf(const std::vector& published_keys, if (full_pathnames) save_strategy = save_strategy | SaveStrategy::FullPathSources; - const int ret = export_3mf(into_path(path), save_strategy, -1, nullptr); + // Restore the previous metadata state (both on success and on failure): a thrown export + // must not leave the published metadata on the in-memory project, or a later Save Project + // would write a hybrid file (full config + slicer tags + published metadata) that receivers + // silently load in published mode, skipping the project's own presets. + auto restore_metadata = [&]() { + if (!had_model_info) { + model.model_info = nullptr; + } else { + if (had_published) + model.model_info->metadata_items["published"] = prev_published; + else + model.model_info->metadata_items.erase("published"); + if (had_published_keys) + model.model_info->metadata_items["published_keys"] = prev_published_keys; + else + model.model_info->metadata_items.erase("published_keys"); + if (had_material_keys) + model.model_info->metadata_items["published_material_keys"] = prev_material_keys; + else + model.model_info->metadata_items.erase("published_material_keys"); + if (had_payload) + model.model_info->metadata_items["published_config"] = prev_payload; + else + model.model_info->metadata_items.erase("published_config"); + } + }; - // Restore the previous metadata state (both on success and on failure). - if (!had_model_info) { - model.model_info = nullptr; - } else { - if (had_published) - model.model_info->metadata_items["published"] = prev_published; - else - model.model_info->metadata_items.erase("published"); - if (had_published_keys) - model.model_info->metadata_items["published_keys"] = prev_published_keys; - else - model.model_info->metadata_items.erase("published_keys"); - if (had_material_keys) - model.model_info->metadata_items["published_material_keys"] = prev_material_keys; - else - model.model_info->metadata_items.erase("published_material_keys"); - if (had_payload) - model.model_info->metadata_items["published_config"] = prev_payload; - else - model.model_info->metadata_items.erase("published_config"); + int ret; + try { + ret = export_3mf(into_path(path), save_strategy, -1, nullptr); + } catch (...) { + restore_metadata(); + MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), + _L("Publish"), wxOK | wxICON_WARNING).ShowModal(); + return wxID_CANCEL; } + restore_metadata(); if (ret < 0) { MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 3129d608ca..5a5bd89403 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -80,7 +80,6 @@ bool Button::SetFont(const wxFont& font) void Button::SetIcon(const wxString& icon) { - custom_icon = wxNullBitmap; auto tmpBitmap = ScalableBitmap(this, icon.ToStdString(), this->active_icon.px_cnt()); if (!icon.IsEmpty()) { //BBS set button icon default size to 20 @@ -104,13 +103,6 @@ void Button::SetIcon(const wxBitmap& icon) Refresh(); } -void Button::SetBitmap(const wxBitmap& bitmap) -{ - custom_icon = bitmap; - messureSize(); - Refresh(); -} - void Button::SetMinSize(const wxSize& size) { minSize = size; @@ -310,8 +302,7 @@ void Button::render(wxDC& dc) } } auto szContent = textSize; - const bool has_custom_icon = custom_icon.IsOk(); - if (has_custom_icon || icon.bmp().IsOk()) { + if (icon.bmp().IsOk()) { if (szContent.y > 0) { //BBS norrow size between text and icon if (vertical) @@ -319,7 +310,7 @@ void Button::render(wxDC& dc) else szContent.x += spacing; } - szIcon = has_custom_icon ? custom_icon.GetSize() : icon.GetBmpSize(); + szIcon = icon.GetBmpSize(); if (vertical) { szContent.y += szIcon.y; if (szIcon.x > szContent.x) szContent.x = szIcon.x; @@ -342,12 +333,12 @@ void Button::render(wxDC& dc) } // start draw wxPoint pt = rcContent.GetLeftTop(); - if (has_custom_icon || icon.bmp().IsOk()) { + if (icon.bmp().IsOk()) { if (vertical) pt.x += (rcContent.width - szIcon.x) / 2; else pt.y += (rcContent.height - szIcon.y) / 2; - dc.DrawBitmap(has_custom_icon ? custom_icon : icon.bmp(), pt); + dc.DrawBitmap(icon.bmp(), pt); //BBS norrow size between text and icon if (vertical) { pt.y += szIcon.y + spacing; @@ -380,7 +371,7 @@ void Button::messureSize() wxClientDC dc(this); dc.GetTextExtent(GetLabel(), &textSize.width, &textSize.height, &textSize.x, &textSize.y); wxSize szContent = textSize.GetSize(); - if (custom_icon.IsOk() || this->active_icon.bmp().IsOk()) { + if (this->active_icon.bmp().IsOk()) { if (szContent.y > 0) { //BBS norrow size between text and icon if (vertical) @@ -388,7 +379,7 @@ void Button::messureSize() else szContent.x += 5; } - wxSize szIcon = custom_icon.IsOk() ? custom_icon.GetSize() : this->active_icon.GetBmpSize(); + wxSize szIcon = this->active_icon.GetBmpSize(); if (vertical) { szContent.y += szIcon.y; if (szIcon.x > szContent.x) szContent.x = szIcon.x; diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 9ad0810804..19dcd24938 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -36,7 +36,6 @@ class Button : public StaticBox wxSize minSize; // set by outer wxSize paddingSize; ScalableBitmap active_icon; - wxBitmap custom_icon; StateColor text_color; @@ -63,8 +62,6 @@ public: void SetIcon(const wxString& icon); void SetIcon(const wxBitmap& icon); - void SetBitmap(const wxBitmap& bitmap); - void SetMinSize(const wxSize& size) override; void SetMaxSize(const wxSize& size) override; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 5c2eb2d693..7817c9111a 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -182,7 +182,7 @@ void TabCtrl::SetItemBitmap(unsigned int item, const wxBitmap& bitmap) { if (item >= btns.size()) return; - btns[item]->SetBitmap(bitmap); + btns[item]->SetIcon(bitmap); relayout(); } diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index 5631eeb6a7..5374a32a73 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -64,6 +64,9 @@ public: int GetNextVisible(int item) const; bool IsVisible(unsigned int item) const; + // Width of the tab strip that keeps every button visible (used to size the Publish dialog). + int buttons_best_width() const; + private: virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); @@ -73,8 +76,6 @@ private: void relayout(); - int buttons_best_width() const; - void buttonClicked(wxCommandEvent & event); void keyDown(wxKeyEvent &event); From e1a79c41126870d9d4d510be2f9b193a510b7901 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 25 Aug 2026 17:37:04 +0800 Subject: [PATCH 049/208] Code cleanup and renamed published_* flags to orca_published_* flags to be less generic --- src/libslic3r/Format/bbs_3mf.cpp | 2 +- src/libslic3r/Format/bbs_3mf.hpp | 9 ++++ src/slic3r/GUI/Plater.cpp | 56 ++++++++++++------------ src/slic3r/GUI/PublishSettingsDialog.hpp | 3 +- tests/libslic3r/test_3mf.cpp | 48 ++++++++++---------- 5 files changed, 63 insertions(+), 55 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 6415f29413..4a7cac7055 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -1224,7 +1224,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Reads the parse-time metadata: the model XML carries it before its resources, while // m_model->model_info is only filled in after the whole XML has been parsed. bool _is_published_3mf() const { - return this->model_info.metadata_items.find("published") != this->model_info.metadata_items.end(); + return this->model_info.metadata_items.find(ORCA_PUBLISHED_TAG) != this->model_info.metadata_items.end(); } bool _is_svg_shape_file(const std::string &filename) const; diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 57a40c2012..647488ad55 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -154,6 +154,15 @@ enum class SaveStrategy Backup = 0x10000 | WithGcode | Silence | SkipStatic | SplitModel, }; +// Model metadata keys of a "published" 3MF (see MinimalPublished): the flag marks a minimal, +// tag-less publish export, the others carry the author-selected settings payload. Namespaced +// with the "orca_published" prefix because metadata_items round-trips verbatim through other +// slicers, where a bare "published" key could collide. +inline constexpr const char *ORCA_PUBLISHED_TAG = "orca_published"; +inline constexpr const char *ORCA_PUBLISHED_KEYS_TAG = "orca_published_keys"; +inline constexpr const char *ORCA_PUBLISHED_MATERIAL_TAG = "orca_published_material_keys"; +inline constexpr const char *ORCA_PUBLISHED_CONFIG_TAG = "orca_published_config"; + inline SaveStrategy operator | (SaveStrategy lhs, SaveStrategy rhs) { using T = std::underlying_type_t ; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index bdca6b7c77..dfeca24a19 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6920,11 +6920,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ // metadata payload, which must fill config_loaded before the chain decides // whether to import geometry only. if (model.model_info != nullptr) { - auto published_it = model.model_info->metadata_items.find("published"); + auto published_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_TAG); if (published_it != model.model_info->metadata_items.end() && (published_it->second == "true" || published_it->second == "1")) { published_config.published = true; - auto keys_it = model.model_info->metadata_items.find("published_keys"); + auto keys_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_KEYS_TAG); if (keys_it != model.model_info->metadata_items.end()) { try { auto j = nlohmann::json::parse(keys_it->second); @@ -6937,7 +6937,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - auto material_keys_it = model.model_info->metadata_items.find("published_material_keys"); + auto material_keys_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_MATERIAL_TAG); if (material_keys_it != model.model_info->metadata_items.end()) { try { auto jm = nlohmann::json::parse(material_keys_it->second); @@ -6995,7 +6995,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ // file carries no project_settings.config, so config_loaded is filled // from here; a missing or malformed payload leaves it empty and the // fallback chain below imports the geometry only. - auto payload_it = model.model_info->metadata_items.find("published_config"); + auto payload_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_CONFIG_TAG); if (payload_it != model.model_info->metadata_items.end()) { try { ConfigSubstitutions payload_substitutions = config_loaded.load_from_ini_string(payload_it->second, ForwardCompatibilitySubstitutionRule::Enable); @@ -7320,10 +7320,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (published_out != nullptr && published_config.published) *published_out = true; if (published_config.published && load_config && this->model.model_info != nullptr) { - this->model.model_info->metadata_items.erase("published"); - this->model.model_info->metadata_items.erase("published_keys"); - this->model.model_info->metadata_items.erase("published_material_keys"); - this->model.model_info->metadata_items.erase("published_config"); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_KEYS_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_MATERIAL_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_CONFIG_TAG); } if (load_config) { @@ -16289,19 +16289,19 @@ int Plater::export_published_3mf(const std::vector& published_keys, // Save the previous metadata so it can be restored after the export, keeping the in-memory // project pristine (the published flag lives only in the exported file). const bool had_model_info = (model.model_info != nullptr); - const bool had_published = had_model_info && (model.model_info->metadata_items.find("published") != model.model_info->metadata_items.end()); - const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find("published_keys") != model.model_info->metadata_items.end()); - const bool had_material_keys = had_model_info && (model.model_info->metadata_items.find("published_material_keys") != model.model_info->metadata_items.end()); - const bool had_payload = had_model_info && (model.model_info->metadata_items.find("published_config") != model.model_info->metadata_items.end()); - const std::string prev_published = had_published ? model.model_info->metadata_items.at("published") : std::string(); - const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at("published_keys") : std::string(); - const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at("published_material_keys") : std::string(); - const std::string prev_payload = had_payload ? model.model_info->metadata_items.at("published_config") : std::string(); + const bool had_published = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_TAG) != model.model_info->metadata_items.end()); + const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_KEYS_TAG) != model.model_info->metadata_items.end()); + const bool had_material_keys = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_MATERIAL_TAG) != model.model_info->metadata_items.end()); + const bool had_payload = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_CONFIG_TAG) != model.model_info->metadata_items.end()); + const std::string prev_published = had_published ? model.model_info->metadata_items.at(ORCA_PUBLISHED_TAG) : std::string(); + const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_KEYS_TAG) : std::string(); + const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_MATERIAL_TAG) : std::string(); + const std::string prev_payload = had_payload ? model.model_info->metadata_items.at(ORCA_PUBLISHED_CONFIG_TAG) : std::string(); if (model.model_info == nullptr) model.model_info = std::make_shared(); - model.model_info->metadata_items["published"] = "1"; - model.model_info->metadata_items["published_keys"] = j.dump(); - model.model_info->metadata_items["published_material_keys"] = jm.dump(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = j.dump(); + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = jm.dump(); // Minimal published export: filter full_config to the published keys, material keys, // identity fields and plate geometry keys, and omit the project config file, the @@ -16314,7 +16314,7 @@ int Plater::export_published_3mf(const std::vector& published_keys, std::string payload; for (const std::string &key : filtered_cfg.keys()) payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; - model.model_info->metadata_items["published_config"] = std::move(payload); + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = std::move(payload); // Same file layout as save_project(), plus Silence (so export_3mf does not set the project // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. @@ -16332,21 +16332,21 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info = nullptr; } else { if (had_published) - model.model_info->metadata_items["published"] = prev_published; + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = prev_published; else - model.model_info->metadata_items.erase("published"); + model.model_info->metadata_items.erase(ORCA_PUBLISHED_TAG); if (had_published_keys) - model.model_info->metadata_items["published_keys"] = prev_published_keys; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = prev_published_keys; else - model.model_info->metadata_items.erase("published_keys"); + model.model_info->metadata_items.erase(ORCA_PUBLISHED_KEYS_TAG); if (had_material_keys) - model.model_info->metadata_items["published_material_keys"] = prev_material_keys; + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = prev_material_keys; else - model.model_info->metadata_items.erase("published_material_keys"); + model.model_info->metadata_items.erase(ORCA_PUBLISHED_MATERIAL_TAG); if (had_payload) - model.model_info->metadata_items["published_config"] = prev_payload; + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = prev_payload; else - model.model_info->metadata_items.erase("published_config"); + model.model_info->metadata_items.erase(ORCA_PUBLISHED_CONFIG_TAG); } }; diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 2b094da75b..2cf49e7eb9 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -11,7 +11,6 @@ #include #include #include -#include // Forward declarations (all are global classes, see Widgets/TextInput.hpp and // Widgets/StaticLine.hpp). @@ -30,7 +29,7 @@ struct PublishMaterialIdentity // Dialog letting a model author select which settings get embedded in a 3MF. Nested tab layout // mirroring the Process settings (Printer / Filament / Process outer tabs, category or material // tabs inside each). Dirty settings are pre-checked and shown bold; on OK the print rows become -// "published_keys" and the material rows become "published_material_keys". +// "orca_published_keys" and the material rows become "orca_published_material_keys". class PublishSettingsDialog : public DPIDialog { public: diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 8898dae2fe..089cc7a40d 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -501,8 +501,8 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { } } -// Locks the serialization contract of the "Publish" metadata: the published flag and the -// published_keys JSON array in model.model_info->metadata_items must survive a store_bbs_3mf -> +// Locks the serialization contract of the "Publish" metadata: the orca_published flag and the +// orca_published_keys JSON array in model.model_info->metadata_items must survive a store_bbs_3mf -> // load_bbs_3mf round-trip unchanged. (The full preset-preservation behavior is exercised // headlessly in test_preset_bundle_loading.cpp.) SCENARIO("Published 3MF round-trips the published flag and published_keys metadata", "[3mf]") { @@ -513,8 +513,8 @@ SCENARIO("Published 3MF round-trips the published flag and published_keys metada model.add_default_instances(); model.model_info = std::make_shared(); - model.model_info->metadata_items["published"] = "1"; - model.model_info->metadata_items["published_keys"] = R"(["layer_height","wall_thickness"])"; + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = R"(["layer_height","wall_thickness"])"; // store_bbs_3mf stages project_settings.config through the model's backup path; point // it at a writable temp dir (the default lives under a read-only root in CI). @@ -546,12 +546,12 @@ SCENARIO("Published 3MF round-trips the published flag and published_keys metada THEN("the published metadata round-trips unchanged") { REQUIRE(loaded); REQUIRE(dst_model.model_info != nullptr); - REQUIRE(dst_model.model_info->metadata_items["published"] == "1"); - REQUIRE(dst_model.model_info->metadata_items["published_keys"] == R"(["layer_height","wall_thickness"])"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height","wall_thickness"])"); - // The published_keys value is a JSON array of setting keys; it must parse back to + // The orca_published_keys value is a JSON array of setting keys; it must parse back to // the same keys that were selected. - nlohmann::json keys = nlohmann::json::parse(dst_model.model_info->metadata_items["published_keys"]); + nlohmann::json keys = nlohmann::json::parse(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG]); REQUIRE(keys.is_array()); REQUIRE(keys.size() == 2); REQUIRE(keys[0] == "layer_height"); @@ -563,7 +563,7 @@ SCENARIO("Published 3MF round-trips the published flag and published_keys metada } // A normal 3MF (no Publish metadata) must load identically: the loader must not fabricate a -// "published" flag or published_keys for files that never carried them. +// "orca_published" flag or orca_published_keys for files that never carried them. SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { GIVEN("a model without any published metadata") { Model model; @@ -599,8 +599,8 @@ SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { THEN("no published key is fabricated") { REQUIRE(loaded); if (dst_model.model_info != nullptr) { - REQUIRE(dst_model.model_info->metadata_items.count("published") == 0); - REQUIRE(dst_model.model_info->metadata_items.count("published_keys") == 0); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_TAG) == 0); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_KEYS_TAG) == 0); } } release_PlateData_list(dst_plates); @@ -608,8 +608,8 @@ SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { } } -// Locks the serialization contract of the published_material_keys metadata: the per-entry JSON -// must survive a store_bbs_3mf -> load_bbs_3mf round-trip verbatim, exactly like published_keys. +// Locks the serialization contract of the orca_published_material_keys metadata: the per-entry JSON +// must survive a store_bbs_3mf -> load_bbs_3mf round-trip verbatim, exactly like orca_published_keys. SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf]") { GIVEN("a model carrying published material keys metadata") { Model model; @@ -621,7 +621,7 @@ SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99"},"slot":0,"keys":["filament_retraction_length","filament_z_hop"]}])"; model.model_info = std::make_shared(); - model.model_info->metadata_items["published_material_keys"] = material_keys_json; + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = material_keys_json; ScopedTemporaryDir backup_dir("orca_pub_mat"); model.set_backup_path(backup_dir.string()); @@ -651,7 +651,7 @@ SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf THEN("the published material keys metadata round-trips unchanged") { REQUIRE(loaded); REQUIRE(dst_model.model_info != nullptr); - REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] == material_keys_json); // The value must parse back to one material entry carrying the nested identity // object, the author slot ordinal and the key list. @@ -706,9 +706,9 @@ SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer ta payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; model.model_info = std::make_shared(); - model.model_info->metadata_items["published"] = "1"; - model.model_info->metadata_items["published_keys"] = R"(["layer_height","retraction_length"])"; - model.model_info->metadata_items["published_config"] = payload; + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = R"(["layer_height","retraction_length"])"; + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = payload; ScopedTemporaryDir backup_dir("orca_min_pub"); model.set_backup_path(backup_dir.string()); @@ -760,13 +760,13 @@ SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer ta } THEN("the published metadata and payload round-trip unchanged") { REQUIRE(dst_model.model_info != nullptr); - REQUIRE(dst_model.model_info->metadata_items["published"] == "1"); - REQUIRE(dst_model.model_info->metadata_items["published_keys"] == R"(["layer_height","retraction_length"])"); - REQUIRE(dst_model.model_info->metadata_items["published_config"] == payload); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height","retraction_length"])"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] == payload); } THEN("the payload parses back to the published values") { DynamicPrintConfig parsed_payload; - parsed_payload.load_from_ini_string(dst_model.model_info->metadata_items["published_config"], ForwardCompatibilitySubstitutionRule::Enable); + parsed_payload.load_from_ini_string(dst_model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG], ForwardCompatibilitySubstitutionRule::Enable); REQUIRE(parsed_payload.option("layer_height") != nullptr); REQUIRE_THAT(parsed_payload.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.24, 1e-6)); REQUIRE(parsed_payload.option("retraction_length") != nullptr); @@ -887,7 +887,7 @@ SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99","setting_id":"RFs9eCKYOMUSmvZf","name":"Generic PLA Matte @System"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; model.model_info = std::make_shared(); - model.model_info->metadata_items["published_material_keys"] = material_keys_json; + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = material_keys_json; ScopedTemporaryDir backup_dir("orca_pub_mat2"); model.set_backup_path(backup_dir.string()); @@ -917,7 +917,7 @@ SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { THEN("the extended material metadata round-trips unchanged") { REQUIRE(loaded); REQUIRE(dst_model.model_info != nullptr); - REQUIRE(dst_model.model_info->metadata_items["published_material_keys"] == material_keys_json); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] == material_keys_json); // The value must parse back with every extended field intact. nlohmann::json entries = nlohmann::json::parse(material_keys_json); From cc267055e1064d39a9f60d3d03ed4c04a0b450ca Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 26 Aug 2026 11:33:50 +0800 Subject: [PATCH 050/208] Use proper floating point comparison functions in publish unit test --- tests/libslic3r/test_3mf.cpp | 12 +- .../libslic3r/test_preset_bundle_loading.cpp | 116 ++++++++++-------- 2 files changed, 68 insertions(+), 60 deletions(-) diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 089cc7a40d..621b35a8c7 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -799,10 +799,10 @@ SCENARIO("Full-publish entries filter the whole slot and mask the other slots", THEN("the full key list is present with the author's slot value") { REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[1] == 0.98); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); } THEN("the non-published slot is masked to its default") { - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[0] == 1.0); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); } THEN("the identity keys stay present") { REQUIRE(filtered_cfg.option("filament_colour") != nullptr); @@ -829,10 +829,10 @@ SCENARIO("Partial-publish entries mask the other slots like full entries", "[3mf THEN("the partial key is present with the author's slot value") { REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[1] == 0.98); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); } THEN("the non-published slot is masked to its default") { - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[0] == 1.0); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); } THEN("the identity keys stay present") { REQUIRE(filtered_cfg.option("filament_colour") != nullptr); @@ -864,8 +864,8 @@ SCENARIO("Unmaskable keys are dropped from the published payload instead of leak } THEN("the maskable key is present, author slot kept, other slot masked") { REQUIRE(filtered_cfg.opt("filament_flow_ratio") != nullptr); - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[1] == 0.98); - REQUIRE(filtered_cfg.opt("filament_flow_ratio")->values[0] == 1.0); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); } THEN("the identity keys stay present") { REQUIRE(filtered_cfg.option("filament_colour") != nullptr); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index ba92f43943..34cbcfaf4e 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -9,6 +9,7 @@ #include "test_utils.hpp" #include +#include using namespace Slic3r; @@ -22,6 +23,14 @@ bool contains_key(const std::vector &keys, const std::string &key) return std::find(keys.begin(), keys.end(), key) != keys.end(); } +void check_double_vector(const std::vector &actual, std::initializer_list expected) +{ + REQUIRE(actual.size() == expected.size()); + size_t index = 0; + for (double value : expected) + REQUIRE_THAT(actual[index++], Catch::Matchers::WithinAbs(value, 1e-6)); +} + void write_print_preset(const DynamicPrintConfig &default_config, const fs::path &file, const std::string &name, const std::string &inherits = {}) { DynamicPrintConfig config(default_config); @@ -646,7 +655,7 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the // a) Process scalar overlaid; matching-size vector applied, mismatched one lands in // skipped_keys; applied keys are not reported. CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); - CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 140., 150. }); + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 140., 150. }); CHECK(bundle.prints.get_edited_preset().config.opt("post_process")->values == std::vector{ "existing-script" }); CHECK(contains_key(pub.skipped_keys, "post_process")); CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); @@ -665,7 +674,7 @@ TEST_CASE("Published 3MF overlays only the author-selected process keys onto the CHECK(bundle.project_config.opt("filament_colour")->values == seed_filament_colour); CHECK(bundle.project_config.opt("flush_multiplier")->values == seed_flush_multiplier); CHECK(bundle.project_config.option("curr_bed_type")->getInt() == seed_bed_type); - CHECK(bundle.project_config.opt("wipe_tower_x")->values == std::vector{ 100. }); + check_double_vector(bundle.project_config.opt("wipe_tower_x")->values, { 100. }); CHECK_THAT(bundle.project_config.opt("wipe_tower_rotation_angle")->value, Catch::Matchers::WithinAbs(45., 0.000001)); // e) The published path keeps the user's currently-selected presets: same preset, same size. @@ -716,8 +725,8 @@ TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys // Matching-size retraction vector applied; mismatched vector reported as skipped and the // receiver's own value survives. - CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 1.4 }); - CHECK(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values == std::vector{ 33. }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 1.4 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values, { 33. }); CHECK(contains_key(pub.skipped_keys, "retraction_speed")); // Contract-excluded printer key: silently ignored, absent from skipped_keys. CHECK(bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") == "G28 ; user"); @@ -784,9 +793,9 @@ TEST_CASE("Published 3MF applies positional material keys onto the receiver's ma bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); // The author's slot values are written onto the receiver's stored presets in place. - CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); - CHECK(bundle.filaments.find_preset("My PETG")->config.opt("filament_z_hop")->values == std::vector{ 0.3 }); + check_double_vector(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values, { 1.2 }); + check_double_vector(bundle.filaments.find_preset("My PETG")->config.opt("filament_z_hop")->values, { 0.3 }); // Structural keys inside a material entry are silently ignored: the receiver's own // filament_settings_id is untouched and nothing is reported for it. CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_settings_id")->values == std::vector{ "receiver-pla" }); @@ -847,8 +856,8 @@ TEST_CASE("Published 3MF full-published slots are imported as standalone detache CHECK(bundle.filament_presets[0] == "PLA"); Preset *copy = bundle.filaments.find_preset("PLA", false, true); REQUIRE(copy != nullptr); - CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PLA -> PLA (published material imported)"); @@ -877,9 +886,9 @@ TEST_CASE("Published 3MF full-published slots are imported as standalone detache CHECK(bundle.filament_presets[0] == "ABS"); Preset *copy = bundle.filaments.find_preset("ABS", false, true); REQUIRE(copy != nullptr); - CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.3 }); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values, { 0.3 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS (published material imported)"); @@ -914,12 +923,12 @@ TEST_CASE("Published 3MF full-published slots are imported as standalone detache CHECK(bundle.filament_presets[0] == "ABS"); Preset *copy = bundle.filaments.find_preset("ABS", false, true); REQUIRE(copy != nullptr); - CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); CHECK(copy->config.opt_string("filament_type", 0u) == "ABS"); CHECK(copy->config.opt_string("filament_vendor", 0u) == "Generic"); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt_string("filament_type", 0u) == "PLA"); - CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.7 }); + check_double_vector(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.7 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS (published material imported)"); @@ -984,9 +993,9 @@ TEST_CASE("Published 3MF imports a full material under the author's stripped nam // The copy is named after the stripped author name; the receiver's exact-name preset // keeps its own values. CHECK(bundle.filament_presets[0] == "Generic PLA"); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (published material imported)"); CHECK(pub.skipped_keys.empty()); @@ -1017,7 +1026,7 @@ TEST_CASE("Published 3MF imports a full material under the author's stripped nam bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); CHECK(bundle.filament_presets[0] == "Generic PLA"); - CHECK(bundle.filaments.find_preset("Bambu PLA Basic @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("Bambu PLA Basic @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (published material imported)"); CHECK(pub.skipped_keys.empty()); @@ -1065,8 +1074,8 @@ TEST_CASE("Published 3MF imports a full material under the author's stripped nam // The grown slot lands on a freshly created copy carrying the author's slot-1 value; // the library preset that seeded it stays untouched. CHECK(bundle.filament_presets[1] == "Generic PLA"); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.8 }); - CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.8 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 1: Generic PLA @System -> Generic PLA (published material imported)"); CHECK(pub.skipped_keys.empty()); @@ -1117,10 +1126,10 @@ TEST_CASE("Published 3MF uniquifies an imported full material name on collision" // The copy lands beside the collision, suffixed; every pre-existing preset keeps its own // values. CHECK(bundle.filament_presets[0] == "Generic PLA (Published)"); - CHECK(bundle.filaments.find_preset("Generic PLA (Published)", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(bundle.filaments.find_preset("Generic PLA @Qidi Q2 0.4 nozzle", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published)", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @Qidi Q2 0.4 nozzle", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (Published) (published material imported)"); CHECK(pub.skipped_keys.empty()); @@ -1178,13 +1187,13 @@ TEST_CASE("Published 3MF writes to the stored preset when the edited layer is re Preset *stored = bundle.filaments.find_preset("My PLA", false, true); REQUIRE(stored != nullptr); CHECK(stored->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(stored->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(stored->config.opt("filament_retraction_length")->values, { 0.9 }); // The load re-selected slot 0's material, mirroring a normal project load. CHECK(bundle.filaments.get_edited_preset().name == "My PETG"); // Selecting the slot's material afterwards surfaces the applied values. REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); CHECK(bundle.filaments.get_edited_preset().config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(bundle.filaments.get_edited_preset().config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(bundle.filaments.get_edited_preset().config.opt("filament_retraction_length")->values, { 0.9 }); CHECK(pub.skipped_keys.empty()); } @@ -1252,7 +1261,7 @@ TEST_CASE("Published 3MF imports a full material as a detached project-embedded CHECK(copy->filament_id == "AFL01"); CHECK(copy->config.opt("filament_settings_id")->values == std::vector{ "Author PLA" }); // The published values and colour live on the copy. - CHECK(copy->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); CHECK(copy->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); // Universally compatible: no printer/print restrictions survive the import. CHECK(copy->config.opt("compatible_printers")->values.empty()); @@ -1260,8 +1269,8 @@ TEST_CASE("Published 3MF imports a full material as a detached project-embedded CHECK(copy->config.opt("compatible_printers_condition")->value.empty()); CHECK(copy->config.opt("compatible_prints_condition")->value.empty()); // Nothing pre-existing was touched. - CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); - CHECK(bundle.filaments.find_preset("Spare PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.4 }); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); + check_double_vector(bundle.filaments.find_preset("Spare PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.4 }); CHECK(pub.skipped_keys.empty()); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA (published material imported)"); @@ -1364,13 +1373,13 @@ TEST_CASE("Published 3MF shares one imported copy between identical full slots", CHECK(bundle.filaments.find_preset("Author PLA", false, true) != nullptr); CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true) == nullptr); // The first entry's slot values won. - CHECK(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); // Both slots reported, same target; originals untouched. REQUIRE(pub.material_replacements.size() == 2); CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA (published material imported)"); CHECK(pub.material_replacements[1] == "slot 1: Other PETG -> Author PLA (published material imported)"); - CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.6 }); - CHECK(bundle.filaments.find_preset("Other PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.65 }); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); + check_double_vector(bundle.filaments.find_preset("Other PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.65 }); CHECK(pub.skipped_keys.empty()); } @@ -1490,8 +1499,8 @@ TEST_CASE("Re-importing a published full material uniquifies the second copy", " } else { // The second import uniquifies beside the first instead of touching it. CHECK(bundle.filament_presets[0] == "Author PLA (Published)"); - CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); - CHECK(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(bundle.filaments.find_preset("Author PLA (Published)", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0] == "slot 0: Author PLA -> Author PLA (Published) (published material imported)"); } @@ -1544,7 +1553,7 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish // Type matched: keys and colour applied onto the receiver's preset in place. Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); REQUIRE(pla_preset != nullptr); - CHECK(pla_preset->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(pla_preset->config.opt("filament_retraction_length")->values, { 0.9 }); CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(pub.skipped_keys.empty()); CHECK(pub.material_replacements.empty()); @@ -1578,7 +1587,7 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish CHECK(bundle.filament_presets[0] == "My PLA"); Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); REQUIRE(pla_preset != nullptr); - CHECK(pla_preset->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(pla_preset->config.opt("filament_retraction_length")->values, { 0.5 }); CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); CHECK(pub.material_replacements.empty()); @@ -1613,8 +1622,8 @@ TEST_CASE("Published 3MF partial slots apply colour and gate keys by the publish // then receives the author's values in place. REQUIRE(bundle.filament_presets.size() == 2); CHECK(bundle.filament_presets[1] == "My PETG"); - CHECK(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 1.2 }); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 1.2 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); } } @@ -1944,9 +1953,9 @@ TEST_CASE("Published 3MF refreshes the edited preset so the applied material val // visible as a modification while the stored preset stays untouched. CHECK(edited.name == "My PLA"); CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); // The overlay is a visible, revertible modification of the edited preset. CHECK(bundle.filaments.current_is_dirty()); CHECK(pub.skipped_keys.empty()); @@ -1978,7 +1987,7 @@ TEST_CASE("Published 3MF refreshes the edited preset so the applied material val const Preset &edited = bundle.filaments.get_edited_preset(); CHECK(edited.name == "My ABS"); CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); } } @@ -2018,15 +2027,15 @@ TEST_CASE("Published 3MF preserves unsaved edits on the edited filament preset", const Preset &edited = bundle.filaments.get_edited_preset(); CHECK(edited.name == "My PLA"); CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(edited.config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); // ...the user's unsaved edit on a non-published key survives... - CHECK(edited.config.opt("filament_z_hop")->values == std::vector{ 0.7 }); + check_double_vector(edited.config.opt("filament_z_hop")->values, { 0.7 }); // ...and the stored preset is untouched. Preset *stored = bundle.filaments.find_preset("My PLA", false, true); REQUIRE(stored != nullptr); CHECK(stored->config.opt("filament_colour")->values == std::vector{ "#123456" }); - CHECK(stored->config.opt("filament_retraction_length")->values == std::vector{ 0.5 }); - CHECK(stored->config.opt("filament_z_hop")->values == std::vector{ 0.1 }); + check_double_vector(stored->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(stored->config.opt("filament_z_hop")->values, { 0.1 }); // The overlay is a visible, revertible modification of the edited preset. CHECK(bundle.filaments.current_is_dirty()); CHECK(pub.skipped_keys.empty()); @@ -2056,7 +2065,7 @@ TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffix bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); // In-range variant applied element-wise; the out-of-range one did not resize the vector. - CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 10., 150. }); + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 10., 150. }); CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values.size() == 2); // Out-of-range variant, malformed variant and variant-suffixed scalar are reported as // skipped; the malformed one must not fall back to element 0. @@ -2096,7 +2105,7 @@ TEST_CASE("Published 3MF reports type-mismatched keys as skipped instead of abor // The load completes; the type-mismatched key is reported as skipped and the receiver's // value is untouched; the matching scalar key still applies. CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); - CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values == std::vector{ 10., 20. }); + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 10., 20. }); CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); } @@ -2230,7 +2239,7 @@ TEST_CASE("Published 3MF reloading does not compound values on the receiver's pr load(); // Each load re-applies the same values onto the (already mutated) preset: no accumulation. CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); } // A receiver with several slots aliasing the same preset (multi-extruder profile with one @@ -2293,7 +2302,7 @@ TEST_CASE("Published 3MF gives each published slot its own preset on an aliased for (size_t slot = 0; slot < 4; ++slot) { Preset *preset = bundle.filaments.find_preset(bundle.filament_presets[slot], false, true); REQUIRE(preset != nullptr); - CHECK(preset->config.opt("filament_retraction_length")->values == std::vector{ expected[slot] }); + check_double_vector(preset->config.opt("filament_retraction_length")->values, { expected[slot] }); } CHECK(pub.skipped_keys.empty()); } @@ -2345,7 +2354,7 @@ TEST_CASE("Published 3MF de-aliases an aliased slot by published identity withou // The published key was written onto the re-pointed slot's own preset. Preset *target = bundle.filaments.find_preset("Zzz PLA", false, true); REQUIRE(target != nullptr); - CHECK(target->config.opt("filament_retraction_length")->values == std::vector{ 0.9 }); + check_double_vector(target->config.opt("filament_retraction_length")->values, { 0.9 }); REQUIRE(pub.material_replacements.size() == 1); CHECK(pub.material_replacements[0].find("(de-aliased") != std::string::npos); CHECK(pub.skipped_keys.empty()); @@ -2375,7 +2384,7 @@ TEST_CASE("Published 3MF applies per-extruder printer keys across extruder-count DynamicPrintConfig config = make_file_config(); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 0.6 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6 }); CHECK(contains_key(pub.skipped_keys, "retraction_length#1")); CHECK(contains_key(pub.skipped_keys, "retraction_length#2")); CHECK(contains_key(pub.skipped_keys, "retraction_length#3")); @@ -2395,8 +2404,7 @@ TEST_CASE("Published 3MF applies per-extruder printer keys across extruder-count config.opt("retraction_length")->values = { 0.7 }; bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - CHECK(bundle.printers.get_edited_preset().config.opt("retraction_length")->values == std::vector{ 0.7, 0.8, 0.8, 0.8 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.7, 0.8, 0.8, 0.8 }); CHECK(pub.skipped_keys.empty()); } } - From 036c4004f7537b930ab55bbf7fe6e26e5c74e314 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 26 Aug 2026 12:33:31 +0800 Subject: [PATCH 051/208] Fixes publish dialog filtering issue --- src/slic3r/GUI/PublishSettingsDialog.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 0ebb784b01..70a6cc96ae 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -120,12 +120,9 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) m_filter_ctrl->SetHint(_L("Type to filter...")); m_filter_ctrl->Bind(wxEVT_TEXT, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); m_filter_ctrl->Bind(wxEVT_TEXT_ENTER, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); - m_filter_ctrl->Bind(wxEVT_SET_FOCUS, [this](auto& e) { - apply_filter(m_filter_ctrl->GetValue()); - e.Skip(); - }); - m_filter_ctrl->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { - apply_filter(m_filter_ctrl->GetValue()); + m_filter_ctrl->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (m_filter_mode != FilterMode::Text) + apply_filter(m_filter_ctrl->GetValue()); e.Skip(); }); f_sizer->Add(m_filter_box, 1, wxEXPAND); From feb0e479faaf4dc6cec635b60bf3f3b225697e4a Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 26 Aug 2026 13:06:24 +0800 Subject: [PATCH 052/208] Published flag hardening. Better error handling path for when publish fails (unlikely) --- src/libslic3r/Format/bbs_3mf.cpp | 8 +- src/libslic3r/Format/bbs_3mf.hpp | 4 + src/slic3r/GUI/Plater.cpp | 172 +++++++++++++++++-------------- 3 files changed, 108 insertions(+), 76 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 4a7cac7055..15f3f3c0f0 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -678,6 +678,11 @@ bool bbs_is_valid_object_type(const std::string& type) namespace Slic3r { +bool is_published_3mf_flag(const std::string &value) +{ + return value == "1"; +} + void PlateData::parse_filament_info(GCodeProcessorResult *result) { if (!result) return; @@ -1224,7 +1229,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Reads the parse-time metadata: the model XML carries it before its resources, while // m_model->model_info is only filled in after the whole XML has been parsed. bool _is_published_3mf() const { - return this->model_info.metadata_items.find(ORCA_PUBLISHED_TAG) != this->model_info.metadata_items.end(); + const auto it = this->model_info.metadata_items.find(ORCA_PUBLISHED_TAG); + return it != this->model_info.metadata_items.end() && is_published_3mf_flag(it->second); } bool _is_svg_shape_file(const std::string &filename) const; diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 647488ad55..46d06199fa 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -163,6 +163,10 @@ inline constexpr const char *ORCA_PUBLISHED_KEYS_TAG = "orca_published_keys" inline constexpr const char *ORCA_PUBLISHED_MATERIAL_TAG = "orca_published_material_keys"; inline constexpr const char *ORCA_PUBLISHED_CONFIG_TAG = "orca_published_config"; +// Published files are produced with "1". The importer and the GUI loader both gate on this +// exact value, so a "0"/"false"/unknown value is rejected consistently. +bool is_published_3mf_flag(const std::string &value); + inline SaveStrategy operator | (SaveStrategy lhs, SaveStrategy rhs) { using T = std::underlying_type_t ; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index dfeca24a19..c580f16c70 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6921,8 +6921,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ // whether to import geometry only. if (model.model_info != nullptr) { auto published_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_TAG); - if (published_it != model.model_info->metadata_items.end() && - (published_it->second == "true" || published_it->second == "1")) { + if (published_it != model.model_info->metadata_items.end() && is_published_3mf_flag(published_it->second)) { published_config.published = true; auto keys_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_KEYS_TAG); if (keys_it != model.model_info->metadata_items.end()) { @@ -6943,50 +6942,55 @@ std::vector Plater::priv::load_files(const std::vector& input_ auto jm = nlohmann::json::parse(material_keys_it->second); if (jm.is_array()) for (const auto &m : jm) { - // Malformed entries are skipped individually. - if (!m.is_object()) - continue; - PublishedMaterialEntry entry; - const auto mat_it = m.find("material"); - if (mat_it != m.end() && mat_it->is_object()) { - const auto &mat = *mat_it; - if (mat.contains("filament_type") && mat["filament_type"].is_string()) - entry.filament_type = mat["filament_type"].get(); - if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) - entry.filament_vendor = mat["filament_vendor"].get(); - if (mat.contains("filament_id") && mat["filament_id"].is_string()) - entry.filament_id = mat["filament_id"].get(); - if (mat.contains("setting_id") && mat["setting_id"].is_string()) - entry.setting_id = mat["setting_id"].get(); - if (mat.contains("name") && mat["name"].is_string()) - entry.preset_name = mat["name"].get(); + try { + // Malformed entries are isolated so one bad item + // cannot discard valid entries that follow it. + if (!m.is_object()) + continue; + PublishedMaterialEntry entry; + const auto mat_it = m.find("material"); + if (mat_it != m.end() && mat_it->is_object()) { + const auto &mat = *mat_it; + if (mat.contains("filament_type") && mat["filament_type"].is_string()) + entry.filament_type = mat["filament_type"].get(); + if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) + entry.filament_vendor = mat["filament_vendor"].get(); + if (mat.contains("filament_id") && mat["filament_id"].is_string()) + entry.filament_id = mat["filament_id"].get(); + if (mat.contains("setting_id") && mat["setting_id"].is_string()) + entry.setting_id = mat["setting_id"].get(); + if (mat.contains("name") && mat["name"].is_string()) + entry.preset_name = mat["name"].get(); + } + if (m.contains("slot") && m["slot"].is_number_integer()) + entry.slot = m["slot"].get(); + const auto entry_keys_it = m.find("keys"); + if (entry_keys_it != m.end() && entry_keys_it->is_array()) + for (const auto &k : *entry_keys_it) + if (k.is_string()) + entry.keys.emplace_back(k.get()); + // Fields always written by the current exporter. + if (m.contains("full") && m["full"].is_boolean()) + entry.full = m["full"].get(); + const auto entry_full_keys_it = m.find("full_keys"); + if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) + for (const auto &k : *entry_full_keys_it) + if (k.is_string()) + entry.full_keys.emplace_back(k.get()); + if (m.contains("publish_type") && m["publish_type"].is_boolean()) + entry.publish_type = m["publish_type"].get(); + if (m.contains("type") && m["type"].is_string()) + entry.publish_type_value = m["type"].get(); + if (m.contains("publish_color") && m["publish_color"].is_boolean()) + entry.publish_color = m["publish_color"].get(); + if (m.contains("color") && m["color"].is_string()) + entry.color = m["color"].get(); + published_config.material_keys.emplace_back(std::move(entry)); + } catch (const nlohmann::json::exception &) { + // Ignore only this malformed material entry. } - if (m.contains("slot") && m["slot"].is_number_integer()) - entry.slot = m["slot"].get(); - const auto entry_keys_it = m.find("keys"); - if (entry_keys_it != m.end() && entry_keys_it->is_array()) - for (const auto &k : *entry_keys_it) - if (k.is_string()) - entry.keys.emplace_back(k.get()); - // Fields always written by the current exporter. - if (m.contains("full") && m["full"].is_boolean()) - entry.full = m["full"].get(); - const auto entry_full_keys_it = m.find("full_keys"); - if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) - for (const auto &k : *entry_full_keys_it) - if (k.is_string()) - entry.full_keys.emplace_back(k.get()); - if (m.contains("publish_type") && m["publish_type"].is_boolean()) - entry.publish_type = m["publish_type"].get(); - if (m.contains("type") && m["type"].is_string()) - entry.publish_type_value = m["type"].get(); - if (m.contains("publish_color") && m["publish_color"].is_boolean()) - entry.publish_color = m["publish_color"].get(); - if (m.contains("color") && m["color"].is_string()) - entry.color = m["color"].get(); - published_config.material_keys.emplace_back(std::move(entry)); } - } catch (...) { + } catch (const nlohmann::json::exception &) { // Ignore malformed published_material_keys; the project still loads normally. } } @@ -16297,37 +16301,21 @@ int Plater::export_published_3mf(const std::vector& published_keys, const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_KEYS_TAG) : std::string(); const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_MATERIAL_TAG) : std::string(); const std::string prev_payload = had_payload ? model.model_info->metadata_items.at(ORCA_PUBLISHED_CONFIG_TAG) : std::string(); - if (model.model_info == nullptr) - model.model_info = std::make_shared(); - model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; - model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = j.dump(); - model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = jm.dump(); - // Minimal published export: filter full_config to the published keys, material keys, - // identity fields and plate geometry keys, and omit the project config file, the - // project-embedded preset dumps and the OrcaSlicer version tag from the archive. The - // filtered values are serialized into the published_config metadata payload instead, so - // OrcaSlicer versions without the publish feature fall back to importing the geometry only - // (keeping the receiver's presets) while new versions rebuild the config from the payload. - DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); - DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); - std::string payload; - for (const std::string &key : filtered_cfg.keys()) - payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; - model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = std::move(payload); + // export_3mf() assigns archive paths to previously unsaved SVGs. Preserve those fields too, + // otherwise a publish changes what a later normal project save writes. + std::vector> previous_svg_paths; + for (ModelObject *object : model.objects) + for (ModelVolume *volume : object->volumes) + if (volume != nullptr && volume->emboss_shape.has_value() && volume->emboss_shape->svg_file.has_value()) { + std::string *path_in_3mf = &volume->emboss_shape->svg_file->path_in_3mf; + previous_svg_paths.emplace_back(path_in_3mf, *path_in_3mf); + } - // Same file layout as save_project(), plus Silence (so export_3mf does not set the project - // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. - auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence | SaveStrategy::MinimalPublished; - bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); - if (full_pathnames) - save_strategy = save_strategy | SaveStrategy::FullPathSources; + auto restore_temporary_state = [&]() { + for (const auto &[path_in_3mf, previous_path] : previous_svg_paths) + *path_in_3mf = previous_path; - // Restore the previous metadata state (both on success and on failure): a thrown export - // must not leave the published metadata on the in-memory project, or a later Save Project - // would write a hybrid file (full config + slicer tags + published metadata) that receivers - // silently load in published mode, skipping the project's own presets. - auto restore_metadata = [&]() { if (!had_model_info) { model.model_info = nullptr; } else { @@ -16349,23 +16337,57 @@ int Plater::export_published_3mf(const std::vector& published_keys, model.model_info->metadata_items.erase(ORCA_PUBLISHED_CONFIG_TAG); } }; + bool state_restored = false; + auto restore_now = [&]() { + if (state_restored) + return; + restore_temporary_state(); + state_restored = true; + }; + ScopeGuard restore_guard(restore_now); - int ret; + if (model.model_info == nullptr) + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = j.dump(); + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = jm.dump(); + + int ret = -1; try { + // Minimal published export: filter full_config to the published keys, material keys, + // identity fields and plate geometry keys, and omit the project config file, the + // project-embedded preset dumps and the OrcaSlicer version tag from the archive. The + // filtered values are serialized into the published_config metadata payload instead, so + // OrcaSlicer versions without the publish feature fall back to importing the geometry only + // (keeping the receiver's presets) while new versions rebuild the config from the payload. + DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + std::string payload; + for (const std::string &key : filtered_cfg.keys()) + payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = std::move(payload); + + // Same file layout as save_project(), plus Silence (so export_3mf does not set the project + // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. + auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); + if (full_pathnames) + save_strategy = save_strategy | SaveStrategy::FullPathSources; ret = export_3mf(into_path(path), save_strategy, -1, nullptr); } catch (...) { - restore_metadata(); + restore_now(); MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), _L("Publish"), wxOK | wxICON_WARNING).ShowModal(); return wxID_CANCEL; } - restore_metadata(); if (ret < 0) { + restore_now(); MessageDialog(this, _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs have the file open."), _L("Publish"), wxOK | wxICON_WARNING).ShowModal(); return wxID_CANCEL; } + restore_now(); return wxID_YES; } From 76d9b8bac045afb8f9b89464a1da730df48c703c Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Thu, 27 Aug 2026 13:17:19 +0800 Subject: [PATCH 053/208] Publish 3MF: support mixed filaments and per-extruder slot selection - Publish mixed-filament slots as whole units: serialize the filament_mixed_* definition into project_config on import, grow the receiver's parallel arrays in lockstep, and report unappliable definitions as skipped instead of dropping them silently - Per-extruder printer selection: one inner tab per extruder, rows keyed by full "#N" ids; single-extruder receivers collapse variants onto their slot (first applied, rest skipped), multi-extruder receivers override element-wise - New per-slot "Enable" toggle gating what gets published; enabling a mix auto-enables + Full Publishes its components - Mixed page previews: fixed-size ratio bar, ternary triangle (3 components) and Material Ratio vs Model Height graph (gradients), always visible regardless of Enable - Tab strip shows full swatch compositions with adjustable spacing; barycentric helpers shared via FilamentBitmapUtils --- src/libslic3r/PresetBundle.cpp | 98 +- src/libslic3r/PublishSettings.cpp | 17 + src/libslic3r/PublishSettings.hpp | 7 + src/slic3r/GUI/FilamentBitmapUtils.cpp | 41 +- src/slic3r/GUI/FilamentBitmapUtils.hpp | 16 + src/slic3r/GUI/MixedFilamentDialog.cpp | 48 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 942 ++++++++++++++++-- src/slic3r/GUI/PublishSettingsDialog.hpp | 52 +- src/slic3r/GUI/Widgets/TabCtrl.cpp | 138 ++- src/slic3r/GUI/Widgets/TabCtrl.hpp | 50 +- tests/libslic3r/test_3mf.cpp | 52 + .../libslic3r/test_preset_bundle_loading.cpp | 249 +++++ 12 files changed, 1474 insertions(+), 236 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b66c0a8587..9157987b8a 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5291,6 +5291,11 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, const std::set printer_option_set(printer_options.begin(), printer_options.end()); std::set contract_excluded_keys; auto apply_published = [&](DynamicPrintConfig& target, const std::set* allowlist) { + // Single-extruder receivers collapse a base key's per-extruder "#N" variants onto + // their single slot: only the first serialized variant of a base key is applied + // (the author's "left or right" whichever came first), the rest are reported as + // skipped. Per-target, so the process and printer passes each track their own bases. + std::set collapsed_bases; for (const std::string& key : published_config->published_keys) { if (applied_keys.count(key) != 0) continue; // already applied @@ -5309,7 +5314,7 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, if (src_opt == nullptr) continue; // key not present in the loaded config; record later if (src_opt->is_vector()) { - const ConfigOption* dst_opt = target.option(base_key); + ConfigOption* dst_opt = target.option(base_key); if (dst_opt == nullptr || !dst_opt->is_vector()) continue; // cannot apply; will be reported as skipped // Type mismatch: ConfigOptionVector::set() throws ConfigurationError on a @@ -5321,7 +5326,7 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, if (dst_opt->type() != src_opt->type()) continue; // A '#N' variant key (e.g. per-extruder retraction_length#2) applies one - // element, so the index only needs to be in range on both sides - the + // element, so the index only needs to be in range on the author's side - the // receiver may have a different extruder count than the author. Out-of-range // indices are skipped (set_at would otherwise resize the receiver's vector). if (key.size() > base_key.size()) { @@ -5341,16 +5346,33 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, break; } } - if (!valid || idx >= static_cast(src_opt)->size() || - idx >= static_cast(dst_opt)->size()) - continue; // malformed or out-of-range variant: cannot apply; reported as skipped + const size_t src_size = static_cast(src_opt)->size(); + if (!valid || idx >= src_size) + continue; // malformed or out-of-range on the author's side: cannot apply; reported as skipped + const size_t dst_size = static_cast(dst_opt)->size(); + if (dst_size == 1) { + // Single-extruder receiver: collapse the author's per-extruder slots + // onto the receiver's single slot. Only the first serialized variant + // of a base key is applied (the author's "left or right" whichever was + // published first); later variants of the same base are reported as + // skipped, mirroring the receiver's single extruder. + if (collapsed_bases.count(base_key) != 0) + continue; + collapsed_bases.insert(base_key); + static_cast(dst_opt)->set_at(src_opt, 0, idx); + } else { + if (idx >= dst_size) + continue; // out-of-range variant: cannot apply; reported as skipped + target.apply_only(config, {key}, true); + } } else if (static_cast(src_opt)->size() != static_cast(dst_opt)->size()) { // Whole-vector base key: the receiver must have a matching vector size, // otherwise applying would overwrite a different number of elements. continue; // cannot apply; will be reported as skipped + } else { + target.apply_only(config, {key}, true); } - target.apply_only(config, {key}, true); applied_keys.insert(key); } else { // A scalar key cannot carry a '#N' suffix; a hand-crafted file listing one @@ -5688,6 +5710,30 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, proj_nozzle_map->values.resize(target_slots, 0); if (proj_volume_map && proj_volume_map->values.size() < target_slots) proj_volume_map->values.resize(target_slots, static_cast(NozzleVolumeType::nvtStandard)); + // The mixed-color project arrays are parallel per-slot like filament_colour; + // grow them in lockstep so a published mix slot has room for its definition. + // Defaults mirror set_num_filaments (false / empty string). + if (auto* opt = this->project_config.opt("filament_is_mixed")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); + if (auto* opt = this->project_config.opt("filament_mixed_components")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_sublayer_ratios")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_range")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_curve")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_per_part")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); if (this->ams_multi_color_filment.size() < target_slots) this->ams_multi_color_filment.resize(target_slots); for (size_t slot = old_colour_count; slot < target_slots; ++slot) { @@ -5995,7 +6041,13 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // Colour is slot-scoped and independent of the type gate; it is also synced // into project_config for GUI rendering. if (entry.publish_color && !entry.color.empty()) { - if (recv != nullptr) { + // A mixed-definition entry carries the mix's blended colour for the + // swatch only: never write it into the slot's (possibly shared) preset + // config, only into the project-level colour arrays. + const bool is_mixed_entry = std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { + return publish_mixed_keys().count(publish_base_key(key)) != 0; + }); + if (!is_mixed_entry && recv != nullptr) { // Create the key when the target preset lacks it: the colour is a // requirement, not an override. if (ConfigOptionStrings* colour = write_config.opt("filament_colour", true)) { @@ -6016,8 +6068,36 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, } } - if (apply_slot && recv != nullptr) - apply_slot_keys(write_config, entry.keys, entry.slot, material_label); + if (apply_slot && recv != nullptr) { + // Mixed-color definition keys live in project_config (parallel per-slot + // arrays), not in a filament preset; route them there. Normal keys keep + // the per-slot preset path below. + const std::set& mixed_keys = publish_mixed_keys(); + std::vector preset_keys; + for (const std::string& key : entry.keys) { + const std::string base_key = publish_base_key(key); + if (mixed_keys.count(base_key) != 0) { + const ConfigOption* src_opt = config.option(base_key); + if (src_opt != nullptr && src_opt->is_vector() && entry.slot >= 0 && + entry.slot < static_cast(static_cast(src_opt)->size())) { + if (ConfigOption* dst_opt = this->project_config.option(base_key)) { + if (dst_opt->is_vector() && dst_opt->type() == src_opt->type() && + slot < static_cast(dst_opt)->size()) { + static_cast(dst_opt)->set_at(src_opt, slot, entry.slot); + material_applied = true; + continue; + } + } + } + // The slot (or its arrays) could not be written: report rather + // than drop the mix silently. + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + preset_keys.emplace_back(key); + } + apply_slot_keys(write_config, preset_keys, entry.slot, material_label); + } } } } diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index 3a3d241e81..c4c71f9436 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -83,6 +83,23 @@ const std::set& publish_structural_keys() return structural_keys; } +const std::set& publish_mixed_keys() +{ + // Must match PresetBundle's s_project_options mixed-color group (PresetBundle.cpp): these + // are project-level parallel per-slot arrays, not filament-preset options, so the import + // material pass applies them into project_config instead of a filament preset config. + static const std::set mixed_keys = { + "filament_is_mixed", + "filament_mixed_components", + "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", + "filament_mixed_gradient_range", + "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" + }; + return mixed_keys; +} + // The printer tab's "Retraction" optgroup (TabPrinter::build_fff, Tab.cpp), in tab order. // KEEP IN SYNC with that optgroup: the published-3MF printer allowlist is built from these // lists, so any key shown there must be publishable here (and vice versa). diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index d10472ce71..038a6eca11 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -15,6 +15,13 @@ std::string publish_base_key(const std::string &key); // filter_published_config because 3MF validation needs it - exported, never applied. const std::set& publish_structural_keys(); +// The mixed-color filament project keys (parallel per-slot arrays, see PresetBundle's +// s_project_options): a mixed slot's full definition - which slots it blends, the sublayer +// ratios and the optional Z-gradient description. A published mixed slot always serializes +// these keys; on import they are applied into the receiver's project_config (not a filament +// preset), so the mix survives the round-trip. +const std::set& publish_mixed_keys(); + // One row of the printer tab's "Retraction" / "Z-Hop" optgroups (key + tab icon id), kept // together so the tab can later be migrated onto these lists. struct PublishablePrinterOption { diff --git a/src/slic3r/GUI/FilamentBitmapUtils.cpp b/src/slic3r/GUI/FilamentBitmapUtils.cpp index 1f51fc79b3..23b14c385b 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.cpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.cpp @@ -11,6 +11,45 @@ namespace Slic3r { namespace GUI { +// Barycentric utilities for a ternary (triangle) ratio picker. +double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c) +{ + return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y); +} + +bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) +{ + double total = tri_signed_area2(v0, v1, v2); + if (std::abs(total) < 1e-9) return false; + double s0 = tri_signed_area2(p, v1, v2) / total; + double s1 = tri_signed_area2(v0, p, v2) / total; + double s2 = 1.0 - s0 - s1; + return s0 >= -0.001 && s1 >= -0.001 && s2 >= -0.001; +} + +void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, + double& w0, double& w1, double& w2) +{ + double total = std::abs(tri_signed_area2(v0, v1, v2)); + if (total < 1e-9) { w0 = w1 = w2 = 1.0 / 3.0; return; } + w0 = std::abs(tri_signed_area2(p, v1, v2)) / total; + w1 = std::abs(tri_signed_area2(v0, p, v2)) / total; + w2 = 1.0 - w0 - w1; + w0 = std::clamp(w0, 0.0, 1.0); + w1 = std::clamp(w1, 0.0, 1.0); + w2 = std::clamp(w2, 0.0, 1.0); + double s = w0 + w1 + w2; + if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } +} + +TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) +{ + double w0, w1, w2; + tri_barycentric(p, v0, v1, v2, w0, w1, w2); + return {w0 * v0.x + w1 * v1.x + w2 * v2.x, + w0 * v0.y + w1 * v1.y + w2 * v2.y}; +} + void fill_gradient_rect_east(wxDC& dc, const wxRect& rect, const wxColour& from, const wxColour& to) { if (rect.width <= 0 || rect.height <= 0) return; @@ -73,7 +112,7 @@ std::vector sample_gradient_ramp(const wxColour& first, // Resolve the curve a gradient slot is sampled with, mirroring the slicer's fallback in // ToolOrdering: a custom curve wins, otherwise a straight line between gradient_range's // endpoints, otherwise the 0.10 -> 0.90 default. -static Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot) +Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot) { const auto* curve_opt = cfg.option("filament_mixed_gradient_curve"); if (curve_opt && slot < curve_opt->values.size() && !curve_opt->values[slot].empty()) { diff --git a/src/slic3r/GUI/FilamentBitmapUtils.hpp b/src/slic3r/GUI/FilamentBitmapUtils.hpp index 11696f3401..fc6eb1f9dd 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.hpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.hpp @@ -13,6 +13,16 @@ namespace Slic3r { class DynamicPrintConfig; struct GradientCurve; } namespace Slic3r { namespace GUI { +// Barycentric utilities for a ternary (triangle) ratio picker, shared by the mixed-filament +// editor and the Publish dialog's read-only definition preview. +struct TriPoint { double x, y; }; + +double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c); +bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2); +void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, + double& w0, double& w1, double& w2); +TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2); + // Fills a rect with a west->east linear gradient by drawing solid 1px columns. // Use instead of wxDC::GradientFillLinear, whose CoreGraphics (CGShading) backend // fails to render on some macOS builds; solid fills are unaffected. @@ -51,6 +61,12 @@ std::vector sample_gradient_ramp(const wxColour& first, // destination's height in pixels. std::vector mixed_gradient_ramp(const Slic3r::DynamicPrintConfig& cfg, size_t slot, int steps); +// Resolve the curve a gradient slot is sampled with: the custom curve wins when it has at +// least two points, otherwise a straight line between gradient_range's endpoints, otherwise +// the 0.10 -> 0.90 default. Mirrors the slicer's ToolOrdering fallback so every preview +// agrees with what gets sliced. Always returns a two-point curve. +Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot); + // Fill rect with a ramp, ramp.front() along the bottom edge. void fill_gradient_ramp_rect(wxDC& dc, const wxRect& rect, const std::vector& ramp); diff --git a/src/slic3r/GUI/MixedFilamentDialog.cpp b/src/slic3r/GUI/MixedFilamentDialog.cpp index 902c12d27b..c1cbcc7450 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.cpp +++ b/src/slic3r/GUI/MixedFilamentDialog.cpp @@ -919,52 +919,8 @@ wxBoxSizer* MixedFilamentDialog::create_ratio_slider() } // ---- Triangle (ternary) ratio picker ---- - -// Barycentric coordinate utilities -struct TriPoint { double x, y; }; - -static double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c) -{ - return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y); -} - -static bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) -{ - double total = tri_signed_area2(v0, v1, v2); - if (std::abs(total) < 1e-9) return false; - double s0 = tri_signed_area2(p, v1, v2) / total; - double s1 = tri_signed_area2(v0, p, v2) / total; - double s2 = 1.0 - s0 - s1; - return s0 >= -0.001 && s1 >= -0.001 && s2 >= -0.001; -} - -static void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, - double& w0, double& w1, double& w2) -{ - double total = std::abs(tri_signed_area2(v0, v1, v2)); - if (total < 1e-9) { w0 = w1 = w2 = 1.0 / 3.0; return; } - w0 = std::abs(tri_signed_area2(p, v1, v2)) / total; - w1 = std::abs(tri_signed_area2(v0, p, v2)) / total; - w2 = 1.0 - w0 - w1; - w0 = std::clamp(w0, 0.0, 1.0); - w1 = std::clamp(w1, 0.0, 1.0); - w2 = std::clamp(w2, 0.0, 1.0); - double s = w0 + w1 + w2; - if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } -} - -static TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) -{ - double w0, w1, w2; - tri_barycentric(p, v0, v1, v2, w0, w1, w2); - w0 = std::clamp(w0, 0.0, 1.0); - w1 = std::clamp(w1, 0.0, 1.0); - w2 = std::clamp(w2, 0.0, 1.0); - double s = w0 + w1 + w2; - if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } - return {w0 * v0.x + w1 * v1.x + w2 * v2.x, - w0 * v0.y + w1 * v1.y + w2 * v2.y}; -} +// The barycentric utilities (TriPoint, tri_contains, tri_barycentric, tri_clamp) live in +// FilamentBitmapUtils so the Publish dialog can mirror this picker read-only. wxBoxSizer* MixedFilamentDialog::create_triangle_picker() { diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 70a6cc96ae..262fdbe356 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -6,6 +6,7 @@ #include "I18N.hpp" #include "Tab.hpp" #include "ConfigValueFormatter.hpp" +#include "FilamentBitmapUtils.hpp" #include "Widgets/Label.hpp" #include "Widgets/TextInput.hpp" #include "Widgets/DialogButtons.hpp" @@ -15,11 +16,21 @@ #include "libslic3r/PrintConfig.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/PublishSettings.hpp" +#include "libslic3r/FilamentMixer.hpp" #include #include +#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include namespace Slic3r { namespace GUI { namespace { @@ -90,8 +101,230 @@ wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPr return _L("Material"); } +// The component slots of a mixed filament ("1,2,3"), 1-based, or empty when out of range. +std::vector mixed_slot_components(const DynamicPrintConfig& full, size_t slot) +{ + const auto* comp_opt = full.opt("filament_mixed_components"); + if (comp_opt == nullptr || slot >= comp_opt->size()) + return {}; + return parse_mixed_components(comp_opt->values[slot]); +} + +// Human-readable label of a mixed filament, mirroring the sidebar's mixed filament rows: the +// 1-based component slot numbers with their blend percentages (or a "->" gradient arrow), +// e.g. "1 (60%) + 2 (40%)". Used as the slot's tab/header title in place of a preset name. +wxString mixed_filament_label(const DynamicPrintConfig& full, size_t slot) +{ + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return _L("Mixed filament"); + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios"); + wxString label; + for (size_t i = 0; i < comps.size(); ++i) { + if (i > 0) + label += is_gradient ? wxString::FromUTF8(" \u2192 ") : wxString::FromUTF8(" + "); + label += wxString::Format("%u", comps[i]); + if (!is_gradient) { + double ratio = 100.0 / comps.size(); + if (ratios_opt != nullptr && slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + if (i < rs.size()) + ratio = rs[i] * 100.0; + } + label += wxString::Format(" (%d%%)", int(ratio + 0.5)); + } + } + return label; +} + +// Blended representative colour of a mixed slot, computed exactly like the sidebar's swatches +// (recompute_mixed_slot_colors): sublayer slots blend by their ratios, gradient slots by their +// two end colours, broken references fall back to grey. +wxColour mixed_filament_blend_color(const DynamicPrintConfig& full, size_t slot) +{ + std::vector colors; + if (const auto* colours = full.opt("filament_colour")) { + colors.reserve(colours->values.size()); + for (const std::string& hex : colours->values) { + const wxColour c(hex); + colors.push_back(c.IsOk() ? c : wxColour(0, 0, 0)); + } + } + while (colors.size() <= slot) + colors.push_back(wxColour("#D9D9D9")); + recompute_mixed_slot_colors(colors, full); + return slot < colors.size() ? colors[slot] : wxColour("#D9D9D9"); +} + +// Tab-strip bitmap for a mixed slot: the mix's own chip, then its component swatches each +// followed by their percent share (or a "->" arrow for gradients), mirroring the main GUI's +// sidebar rows - e.g. "[3 purple]: [1 red] 50% + [2 blue] 50%". The whole composition is one +// bitmap because a TabCtrl item cannot interleave images into its text; the tab's text is +// therefore empty. Transparent background like the other chips. +wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz) +{ + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return wxNullBitmap; + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios"); + std::vector ratio_pct(comps.size(), 100.0 / comps.size()); + if (!is_gradient && ratios_opt != nullptr && slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + for (size_t i = 0; i < rs.size() && i < comps.size(); ++i) + ratio_pct[i] = rs[i] * 100.0; + } + + const auto* colours = full.opt("filament_colour"); + const wxString lead_sep = wxString::FromUTF8(":"); + const wxString comp_sep = is_gradient ? wxString::FromUTF8("\u2192") : wxString::FromUTF8("+"); + + // Phase 1 (layout): render every swatch and measure every text piece so the composite + // width is known before drawing; the dummy bitmap keeps GetTextExtent reliable. + struct Piece + { + enum Kind { Swatch, Text } kind{Text}; + wxBitmap bmp; + wxString text; + }; + std::vector pieces; + bool has_lead = false; + wxBitmap dummy(1, 1); + wxMemoryDC measure_dc; + measure_dc.SelectObject(dummy); + measure_dc.SetFont(::Label::Body_12); + const int gap = wxWindow::FromDIP(4, nullptr); + + auto push_swatch = [&](const std::string& hex, const std::string& label) { + wxBitmap* icon = get_extruder_color_icon(hex, label, swatch_sz, swatch_sz); + if (icon == nullptr) + return; + pieces.push_back({Piece::Swatch, *icon, wxString()}); + }; + auto push_text = [&](const wxString& text) { pieces.push_back({Piece::Text, wxNullBitmap, text}); }; + + { + const wxColour blend = mixed_filament_blend_color(full, slot); + const std::string blend_hex = blend.IsOk() ? + std::string(wxString::Format("#%02X%02X%02X", blend.Red(), blend.Green(), blend.Blue()).ToUTF8()) : + std::string("#808080"); + const size_t before = pieces.size(); + push_swatch(blend_hex, std::to_string(slot + 1)); + has_lead = pieces.size() > before; + } + for (size_t ci = 0; ci < comps.size(); ++ci) { + if (pieces.empty()) + break; + push_text(has_lead && pieces.size() == 1 ? lead_sep : comp_sep); // lead chip may have failed to render + std::string hex = "#D9D9D9"; + if (colours != nullptr && comps[ci] >= 1 && comps[ci] <= colours->size()) + hex = colours->values[comps[ci] - 1]; + const size_t before = pieces.size(); + push_swatch(hex, std::to_string(comps[ci])); + if (pieces.size() == before) + break; // swatch failed: stop cleanly before an orphaned separator/percent pair + if (!is_gradient) { + push_text(wxString::Format("%d%%", int(ratio_pct[ci] + 0.5))); + } + } + if (pieces.empty()) + return wxNullBitmap; + + int width = 0; + for (const Piece& p : pieces) + width += (p.kind == Piece::Swatch ? swatch_sz : measure_dc.GetTextExtent(p.text).x + gap); + + // Phase 2 (draw): transparent background like the page-header chips. + wxBitmap composite(width, swatch_sz); + wxMemoryDC memdc; +#ifdef __WXOSX__ + composite.UseAlpha(); + memdc.SelectObject(composite); +#else + { + wxImage img(width, swatch_sz); + img.InitAlpha(); + memset(img.GetAlpha(), 0, width * swatch_sz); + composite = wxBitmap(std::move(img)); + } + memdc.SelectObject(composite); +#endif + { +#ifdef __WXMSW__ + wxGCDC dc(memdc); +#else + wxDC& dc = memdc; +#endif + dc.SetBackgroundMode(wxTRANSPARENT); + dc.SetFont(::Label::Body_12); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30"))); + int x = 0; + for (const Piece& p : pieces) { + if (p.kind == Piece::Swatch) { + dc.DrawBitmap(p.bmp, x, 0); + x += swatch_sz; + } else { + const wxSize tsz = measure_dc.GetTextExtent(p.text); + dc.DrawText(p.text, x + gap / 2, (swatch_sz - tsz.y) / 2); + x += tsz.x + gap; + } + } + } + memdc.SelectObject(wxNullBitmap); + return composite; +} + } // namespace +PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_spec(const DynamicPrintConfig& full, size_t slot) +{ + MixedVisualSpec spec; + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return spec; + + const auto* grad_opt = full.opt("filament_mixed_gradient"); + spec.is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + + const auto* colours = full.opt("filament_colour"); + for (unsigned int cid : comps) { + std::string hex = "#D9D9D9"; + if (colours != nullptr && cid >= 1 && cid <= colours->size()) + hex = colours->values[cid - 1]; + const wxColour c(hex); + spec.component_colours.push_back(c.IsOk() ? c : wxColour("#D9D9D9")); + } + + if (!spec.is_gradient) { + // Sublayer shares; parse_mixed_ratios already falls back to equal shares and + // normalizes to sum 1. + spec.ratios.assign(comps.size(), 1.0 / comps.size()); + if (const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios")) + if (slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + if (rs.size() == comps.size()) + spec.ratios = rs; + } + if (comps.size() == 3) + spec.tri_weights = spec.ratios; // the picker's barycentric shares + } else { + const Slic3r::GradientCurve curve = mixed_gradient_curve(full, slot); + constexpr int kSamples = 64; + for (int i = 0; i <= kSamples; ++i) { + const double t = double(i) / kSamples; + spec.gradient_samples.emplace_back(t, sample_gradient_curve(curve, t)); + } + for (const Slic3r::GradientAnchor& anchor : curve.points) + spec.gradient_anchors.emplace_back(anchor.x, anchor.y); + } + + spec.valid = true; + return spec; +} + PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), wxID_ANY, @@ -206,9 +439,12 @@ void PublishSettingsDialog::fit_to_content() static const wxSize BASE{600, 500}; static const wxSize CAP{1300, 850}; - int strip = m_outer_tabs->buttons_best_width(); - for (const SectionGroup& section : m_sections) - strip = std::max(strip, section.tabs->buttons_best_width()); + int strip = m_outer_tabs->GetFullSize(); + for (const SectionGroup& section : m_sections) { + strip = std::max(strip, section.tabs->GetFullSize()); + if (section.mixed_tabs != nullptr) + strip = std::max(strip, section.mixed_tabs->GetFullSize()); + } // Minimum width: whatever keeps every tab visible (never below the base). strip is device // pixels (Button min sizes); BASE/CAP are DIP and converted over. @@ -233,9 +469,9 @@ void PublishSettingsDialog::build_option_model() { // Structural / non-publishable keys, shared with the published-3MF overlay path. const std::set& denylist = publish_structural_keys(); - // Base keys already added in the print/printer sections. Printer rows share this set: - // per-extruder "#N" variants collapse to the first occurrence (acceptable MVP; the - // per-extruder context is lost in the UI). + // Base keys already added in the print section (dedup across pages/optgroups). The printer + // section keeps its own printer_added set keyed by the full per-extruder "#N" opt_id, so + // every extruder gets its own row (see Phase 1 below). std::set added; PresetBundle* bundle = wxGetApp().preset_bundle; @@ -244,6 +480,7 @@ void PublishSettingsDialog::build_option_model() m_info_nonsel = _L("No selected items..."); m_info_allsel = _L("All items selected..."); m_info_empty = _L("No matching items..."); + m_info_mix = _L("Mixed filament - published as a whole when \"Enable\" above is selected"); // Tab order differs from Section's enum order (Print, Printer, Material): the dialog // presents Printer, Filament, Process. @@ -272,16 +509,33 @@ void PublishSettingsDialog::build_option_model() }; // --- Phase 1: printer per-extruder retraction settings (first, mirroring the sidebar's - // Printer group), from the printer tab's "Extruder"/"Extruder N" pages. + // Printer group), from the printer tab's "Extruder"/"Extruder N" pages. One inner tab per + // extruder (e.g. "Left Extruder"/"Right Extruder" via Tab::translate_category), each holding + // that extruder's Retraction and Z-Hop rows with per-extruder "#N" values. { size_t g = section_group_for(Section::Printer); - category_index_for(_L("Extruder"), Section::Printer, g, 0); + std::set printer_added; for (Tab* tab : wxGetApp().tabs_list) { if (tab->m_type != Preset::TYPE_PRINTER) continue; for (const PageShp& page : tab->m_pages) { if (!page->title().StartsWith("Extruder")) continue; + // The extruder index of this page: its options are appended with the same + // "#N" opt_index (opt.second.second), so derive the tab's index from the first + // allowlisted option; skip the page when none is found (defensive). + int extruder_idx = -1; + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") + continue; + for (const auto& opt : optgroup->opt_map()) + if (extruder_idx < 0) + extruder_idx = opt.second.second; + if (extruder_idx >= 0) + break; + } + if (extruder_idx < 0) + continue; const wxString page_title = Tab::translate_category(page->title(), tab->m_type); for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { // Allowlist on the untranslated optgroup title; the "Retraction when @@ -292,17 +546,17 @@ void PublishSettingsDialog::build_option_model() for (const auto& opt : optgroup->opt_map()) { const std::string& opt_id = opt.first; const std::string& pure_key = opt.second.first; - // Per-extruder "#N" variants collapse to the first base key. The row - // stores the base key; GetPublishedKeys() later expands it back to one - // "#N" entry per extruder so the load side can apply per-extruder values. - if (!added.insert(pure_key).second) + // Rows are keyed by the full per-extruder "#N" opt_id so each extruder + // tab publishes its own value; GetPublishedKeys() emits the checked rows + // as-is. + if (!printer_added.insert(opt_id).second) continue; wxString label, value, unit; if (!option_text(opt_id, pure_key, label, value, unit)) continue; - size_t cat_index = category_index_for(_L("Extruder"), Section::Printer, g, 0); + size_t cat_index = category_index_for(page_title, Section::Printer, g, size_t(extruder_idx)); size_t sub_index = subcategory_index_for(cat_index, subcategory, optgroup->icon); - add_row_ui(pure_key, label, value, unit, cat_index, sub_index); + add_row_ui(opt_id, label, value, unit, cat_index, sub_index); } } } @@ -328,12 +582,28 @@ void PublishSettingsDialog::build_option_model() } if (overrides_page != nullptr) { + // Mixed-color slots are virtual: they carry no per-key Material/Retraction + // settings; their "Enable" toggle always embeds the mix definition (components, + // ratios, gradient). Detect them via the project-level flag. + const ConfigOptionBools* is_mixed_opt = full.opt("filament_is_mixed"); // One section per filament slot (a 4-slot printer shows 4 pages), each // disambiguated by its colour chip and slot identity while showing the bare name. for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { + const bool is_mixed = is_mixed_opt != nullptr && slot < is_mixed_opt->size() && is_mixed_opt->values[slot]; const PublishMaterialIdentity identity = material_identity(slot, full); - const wxString title = material_title(slot, bundle, full); - const size_t category_index = category_index_for(title, Section::Material, g, slot, identity); + // A mixed slot's title is its component composition (e.g. "1 (60%) + 2 + // (40%)"), not the cloned preset's name shown in the main GUI. + const wxString title = is_mixed ? mixed_filament_label(full, slot) : material_title(slot, bundle, full); + const size_t category_index = category_index_for(title, Section::Material, g, slot, identity, is_mixed); + + if (is_mixed) { + // A mixed slot publishes as one unit (its definition); nothing to select + // per-key. Its component filaments are auto-enabled + Full Published when + // "Enable" is checked (see on_enable_toggle). Its page still shows what + // would be published: a ratio bar, or the gradient graph. + add_mixed_visual(category_index, make_mixed_visual_spec(full, slot)); + continue; + } // Material requirement rows: an optional filament colour and/or a // vendor-agnostic material type for this slot, in their own optgroup so they @@ -414,25 +684,37 @@ void PublishSettingsDialog::build_option_model() } } - // Pre-check the dirty (modified) settings and mark them bold (base-key match, across all + // Pre-check the dirty (modified) settings and mark them bold (per-slot match, across all // sections; collect_dirty_settings_keys unions the prints, printers and filaments). - std::set dirty_base; + // Dirty keys carry a "#N" per-extruder/per-slot suffix (deep_diff), so the base key alone + // cannot distinguish which extruder/filament slot changed: match the row's exact key, and + // for material rows (base key + per-slot value) the base key plus the section's slot. + std::set dirty_keys; for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) - dirty_base.insert(publish_base_key(key)); + dirty_keys.insert(key); for (Row& row : m_rows) { // The Color/Type requirement rows are not "dirty overrides": never auto-checked. if (row.kind != RowKind::Setting) continue; - std::string base = publish_base_key(row.key); - row.dirty = dirty_base.count(base) > 0; + bool dirty = dirty_keys.count(row.key) != 0; + if (!dirty && row.section == Section::Material) + dirty = dirty_keys.count(publish_base_key(row.key) + "#" + std::to_string(m_categories[row.inner_index].filament_slot)) != 0; + row.dirty = dirty; if (row.dirty) { row.check->SetValue(true); set_row_bold(row, true); } } - // Wire the "Full Publish" checkboxes: toggling one disables/enables the material's rows. - // Bind by index so the lambda stays valid even if the vector is reallocated later. + // Wire the "Enable" checkboxes: toggling one reveals/hides the slot's settings below the + // header (and, for a mixed slot, auto-selects its components). Bind by index so the lambda + // stays valid even if the vector is reallocated later. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].enable_check != nullptr) + m_categories[c].enable_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_enable_toggle(c); }); + + // Wire the "Full Publish" checkboxes (physical slots): toggling one disables/enables the + // material's rows. for (size_t c = 0; c < m_categories.size(); ++c) if (m_categories[c].full_check != nullptr) m_categories[c].full_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_full_toggle(c); }); @@ -487,6 +769,18 @@ size_t PublishSettingsDialog::section_group_for(Section kind) section.tabs->SetFont(Label::Body_14); section.tabs->SetBackgroundColour(GetBackgroundColour()); page_sizer->Add(section.tabs, 0, wxEXPAND); + // Mixed-color filament slots get a second tab strip below the physical filament tabs; only + // the Material section has them. + if (kind == Section::Material) { + section.mixed_tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); + section.mixed_tabs->SetFont(Label::Body_14); + section.mixed_tabs->SetBackgroundColour(GetBackgroundColour()); + // The mixed tabs carry full swatch compositions: give them extra room to breathe so + // neighbouring compositions do not read as one long row (must precede AppendItem). + section.mixed_tabs->SetItemSpace(FromDIP(5)); + page_sizer->Add(section.mixed_tabs, 0, wxEXPAND | wxTOP, FromDIP(2)); + section.mixed_tabs->Hide(); + } section.page_host = new wxPanel(section.page, wxID_ANY); section.page_host->SetBackgroundColour(GetBackgroundColour()); section.page_host_sizer = new wxBoxSizer(wxVERTICAL); @@ -505,14 +799,20 @@ size_t PublishSettingsDialog::section_group_for(Section kind) } size_t PublishSettingsDialog::category_index_for( - const wxString& title, Section section, size_t group, size_t source_index, const PublishMaterialIdentity& identity) + const wxString& title, Section section, size_t group, size_t source_index, const PublishMaterialIdentity& identity, bool is_mixed) { - for (size_t i : m_sections[group].categories) { - Category& existing = m_categories[i]; - if (existing.title == title && existing.section == section && existing.source_index == source_index && - existing.filament_id == identity.id && existing.filament_type == identity.type && existing.filament_vendor == identity.vendor) + // Dedup across both tab rows (physical + mixed); mixed slots are never duplicated anyway. + auto match = [&](const Category& existing) { + return existing.title == title && existing.section == section && existing.source_index == source_index && + existing.filament_id == identity.id && existing.filament_type == identity.type && + existing.filament_vendor == identity.vendor; + }; + for (size_t i : m_sections[group].categories) + if (match(m_categories[i])) + return i; + for (size_t i : m_sections[group].mixed_categories) + if (match(m_categories[i])) return i; - } Category category; category.title = title; @@ -523,29 +823,58 @@ size_t PublishSettingsDialog::category_index_for( category.filament_vendor = identity.vendor; category.filament_id = identity.id; category.filament_slot = source_index; + category.is_mixed = is_mixed; category.page = new wxPanel(m_sections[group].page_host, wxID_ANY); category.page->SetBackgroundColour(GetBackgroundColour()); auto* page_sizer = new wxBoxSizer(wxVERTICAL); - // The slot's colour chip decorates both the section header and the inner tab. + // The physical slot's colour chip decorates the page header and the inner tab; it carries + // the 1-based slot number, mirroring the main GUI's filament swatches. A mixed slot has no + // header at all: its page is just the Enable toggle above the (always visible) definition + // preview - the identification lives in the tab strip's composition bitmap. std::string hex; - if (section == Section::Material) - hex = filament_color_hex(wxGetApp().preset_bundle->full_config(), source_index); + std::string chip_label; + if (section == Section::Material && !is_mixed) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + hex = filament_color_hex(full, source_index); + chip_label = std::to_string(source_index + 1); + } if (section == Section::Material) { - auto* header_sizer = new wxBoxSizer(wxHORIZONTAL); - if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) { - category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); - header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + if (is_mixed) { + // No chip/title: the lone "Enable" checkbox tops the page. + auto* enable_sizer = new wxBoxSizer(wxHORIZONTAL); + category.enable_check = new wxCheckBox(category.page, wxID_ANY, _L("Enable")); + category.enable_check->SetFont(Label::Body_13); + category.enable_check->SetToolTip(_L("Publish this mixed filament and enable + Full Publish its component filaments")); + enable_sizer->Add(category.enable_check, 0, wxALIGN_CENTER_VERTICAL); + page_sizer->Add(enable_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + } else { + // Line 1: [chip] [title] [Enable]. The Enable checkbox gates the whole slot: while + // it is unchecked nothing below the title is shown and nothing of it is published. + auto* header_sizer = new wxBoxSizer(wxHORIZONTAL); + if (wxBitmap* chip = get_extruder_color_icon(hex, chip_label, FromDIP(20), FromDIP(20))) { + category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); + header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + } + category.title_label = new wxStaticText(category.page, wxID_ANY, title); + category.title_label->SetFont(Label::Head_14); + header_sizer->Add(category.title_label, 0, wxALIGN_CENTER_VERTICAL); + category.enable_check = new wxCheckBox(category.page, wxID_ANY, _L("Enable")); + category.enable_check->SetFont(Label::Body_13); + category.enable_check->SetToolTip(_L("Publish this filament slot in the 3MF file")); + header_sizer->Add(category.enable_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(10)); + page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + + // Line 2: the "Full Publish" toggle, on its own line below the title (hidden until + // the slot is enabled). + auto* full_sizer = new wxBoxSizer(wxHORIZONTAL); + category.full_check = new wxCheckBox(category.page, wxID_ANY, _L("Full Publish")); + category.full_check->SetFont(Label::Body_13); + category.full_check->SetToolTip(_L("Embed the entire filament of this slot in the 3MF file")); + full_sizer->Add(category.full_check, 0, wxALIGN_CENTER_VERTICAL); + category.full_line_item = page_sizer->Add(full_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(2)); } - category.title_label = new wxStaticText(category.page, wxID_ANY, title); - category.title_label->SetFont(Label::Head_14); - header_sizer->Add(category.title_label, 0, wxALIGN_CENTER_VERTICAL); - category.full_check = new wxCheckBox(category.page, wxID_ANY, _L("Full Publish")); - category.full_check->SetFont(Label::Body_13); - category.full_check->SetToolTip(_L("Embed the entire filament of this slot in the 3MF file")); - header_sizer->Add(category.full_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(10)); - page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); } category.scroll = new wxScrolledWindow(category.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); @@ -555,28 +884,53 @@ size_t PublishSettingsDialog::category_index_for( category.scroll->SetSizer(category.list_sizer); category.scroll->DisableFocusFromKeyboard(); category.scroll->Bind(wxEVT_RIGHT_DOWN, &PublishSettingsDialog::show_menu, this); - category.info = new wxStaticText(category.scroll, wxID_ANY, m_info_empty); + category.info = new wxStaticText(category.scroll, wxID_ANY, is_mixed ? m_info_mix : m_info_empty); category.info->SetFont(Label::Body_13); category.list_sizer->Add(category.info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); category.info->Hide(); page_sizer->Add(category.scroll, 1, wxEXPAND | wxALL, FromDIP(4)); + // A material slot starts disabled: its rows (and its Full Publish line) stay hidden until + // "Enable" is checked. + if (section == Section::Material) + category.scroll->Hide(); category.page->SetSizer(page_sizer); category.page->Hide(); const size_t category_index = m_categories.size(); m_categories.push_back(std::move(category)); - m_sections[group].categories.push_back(category_index); + // Mixed slots live in a second tab row below the physical filament tabs. + if (is_mixed) + m_sections[group].mixed_categories.push_back(category_index); + else + m_sections[group].categories.push_back(category_index); if (section == Section::Material) { - if (wxBitmap* chip = get_extruder_color_icon(hex, "", FromDIP(12), FromDIP(12))) - m_sections[group].tabs->AppendItem(title, *chip); - else - m_sections[group].tabs->AppendItem(title); + TabCtrl* target = is_mixed ? m_sections[group].mixed_tabs : m_sections[group].tabs; + if (is_mixed) { + // The tab's whole composition (mix chip + components + percents) lives in one + // bitmap; the text is empty because a TabCtrl item cannot interleave images into + // its text. + const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20)); + if (tab_bmp.IsOk()) + target->AppendItem(wxString(), tab_bmp); + else + target->AppendItem(title); + } else if (wxBitmap* chip = get_extruder_color_icon(hex, chip_label, FromDIP(20), FromDIP(20))) { + target->AppendItem(title, *chip); + } else { + target->AppendItem(title); + } } else { m_sections[group].tabs->AppendItem(title); } m_sections[group].page_host_sizer->Add(m_categories[category_index].page, 1, wxEXPAND); - if (m_sections[group].selected_inner < 0) + if (is_mixed) { + if (m_sections[group].selected_mixed < 0) + m_sections[group].selected_mixed = 0; + m_sections[group].mixed_tabs->Show(); + } else if (m_sections[group].selected_inner < 0) { m_sections[group].selected_inner = 0; + } return category_index; } @@ -636,7 +990,9 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, current.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); current.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); if (kind == RowKind::Color && !value.IsEmpty()) { - if (wxBitmap* chip = get_extruder_color_icon(value.ToStdString(), "", FromDIP(12), FromDIP(12))) { + // The colour swatch carries this slot's 1-based number, like the main GUI swatches. + const std::string chip_label = std::to_string(category.filament_slot + 1); + if (wxBitmap* chip = get_extruder_color_icon(value.ToStdString(), chip_label, FromDIP(20), FromDIP(20))) { current.color_chip = new wxStaticBitmap(category.scroll, wxID_ANY, *chip); row_sizer->Add(current.color_chip, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); } @@ -661,6 +1017,320 @@ void PublishSettingsDialog::on_full_toggle(size_t category_index) m_rows[r].check->Enable(!full); } +void PublishSettingsDialog::on_enable_toggle(size_t category_index) +{ + Category& cat = m_categories[category_index]; + const bool enabled = cat.enable_check->GetValue(); + + // A published mixed filament needs its component filaments published too: mark the slots it + // uses as "Enable"d and Full Published so the mix's physical components always ship their + // identities. + if (cat.is_mixed && enabled) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + const std::vector components = mixed_slot_components(full, cat.filament_slot); + for (const unsigned int component : components) { + // Components are 1-based physical filament indices. + const size_t component_slot = size_t(component) - 1; + for (size_t c = 0; c < m_categories.size(); ++c) { + Category& comp_cat = m_categories[c]; + if (comp_cat.section != Section::Material || comp_cat.is_mixed || comp_cat.filament_slot != component_slot) + continue; + if (comp_cat.enable_check != nullptr) + comp_cat.enable_check->SetValue(true); + if (comp_cat.full_check != nullptr) + comp_cat.full_check->SetValue(true); + on_full_toggle(c); + } + } + } + + // Reveal/hide everything below the slot's header (rows, info, Full Publish line) and refresh + // the visibility of the auto-selected component slots. + apply_visibility(); + if (cat.page != nullptr) + cat.page->GetSizer()->Layout(); +} + +void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedVisualSpec& spec) +{ + if (category_index >= m_categories.size() || !spec.valid) + return; + Category& category = m_categories[category_index]; + if (category.page == nullptr || category.page->GetSizer() == nullptr || category.scroll == nullptr || spec.component_colours.empty()) + return; + + auto* viz = new wxPanel(category.page, wxID_ANY); + viz->SetBackgroundStyle(wxBG_STYLE_PAINT); + // Per-panel fill-bitmap cache for the ternary branch; rebuilt only when size or colours + // change (shared_ptr keeps the lifetime independent of this method's locals). + struct TriCache + { + wxBitmap bmp; + wxSize sz{0, 0}; + wxColour c0, c1, c2; + }; + auto tri_cache = std::make_shared(); + // Theme colours and DIP metrics are resolved inside the paint handler so dark-mode toggles + // and DPI changes are picked up on the next repaint without any explicit listener. + viz->Bind(wxEVT_PAINT, [this, panel = viz, spec, tri_cache](wxPaintEvent&) { + const wxColour bg = StateColor::darkModeColorFor(*wxWHITE); + wxBufferedPaintDC pdc(panel); + pdc.SetBackground(wxBrush(bg)); + pdc.Clear(); + const wxRect rc = panel->GetClientRect(); + if (rc.width <= 0 || rc.height <= 0) + return; + + const size_t n = spec.component_colours.size(); + + if (spec.tri_weights.size() == 3 && n == 3 && !spec.is_gradient) { + // Ternary mix: a read-only miniature of the MixedFilamentDialog's triangle picker. + // Per-pixel barycentric fill is cached into a bitmap keyed on size + colours; the + // marker and labels are redrawn on top every paint. + const wxColour tri_bg = StateColor::darkModeColorFor(*wxWHITE); + const wxColour outline = StateColor::darkModeColorFor(wxColour("#CECECE")); + const wxColour ring = StateColor::darkModeColorFor(wxColour("#262E30")); + const wxColour label_c = StateColor::darkModeColorFor(wxColour(107, 107, 107)); // grey 700 + const double margin_dip = 24.0; + auto& cache = *tri_cache; + + auto vertices_for = [&](const wxSize& sz) -> std::tuple { + const double pw = sz.GetWidth(), ph = sz.GetHeight(); + const int margin = FromDIP(int(margin_dip)); + const double avail = std::min(pw, ph) - 2.0 * margin; + const double side = avail; + const double tri_h = side * std::sqrt(3.0) / 2.0; + const double cx = pw / 2.0; + const double top_y = (ph - tri_h) / 2.0; + return {{cx, top_y}, {cx - side / 2.0, top_y + tri_h}, {cx + side / 2.0, top_y + tri_h}}; + }; + + pdc.SetFont(::Label::Body_12); + const wxColour& c0 = spec.component_colours[0]; + const wxColour& c1 = spec.component_colours[1]; + const wxColour& c2 = spec.component_colours[2]; + + if (!cache.bmp.IsOk() || cache.sz != rc.GetSize() || cache.c0 != c0 || cache.c1 != c1 || cache.c2 != c2) { + auto [v0, v1, v2] = vertices_for(rc.GetSize()); + cache.bmp = wxBitmap(rc.width, rc.height, 32); + wxMemoryDC mdc(cache.bmp); + mdc.SetBrush(wxBrush(tri_bg)); + mdc.SetPen(*wxTRANSPARENT_PEN); + mdc.DrawRectangle(0, 0, rc.width, rc.height); + + const int min_y = int(std::min({v0.y, v1.y, v2.y})); + const int max_y = int(std::max({v0.y, v1.y, v2.y})); + const int min_x = int(std::min({v0.x, v1.x, v2.x})); + const int max_x = int(std::max({v0.x, v1.x, v2.x})); + for (int py = min_y; py <= max_y; ++py) + for (int px = min_x; px <= max_x; ++px) { + const TriPoint p = {double(px), double(py)}; + if (!tri_contains(p, v0, v1, v2)) + continue; + double w0, w1, w2; + tri_barycentric(p, v0, v1, v2, w0, w1, w2); + unsigned char mr, mg, mb; + if (w0 + w1 > 1e-6) { + float t01 = static_cast(w1 / (w0 + w1)); + Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), c1.Red(), c1.Green(), c1.Blue(), t01, &mr, &mg, + &mb); + Slic3r::filament_mixer_lerp(mr, mg, mb, c2.Red(), c2.Green(), c2.Blue(), static_cast(w2), &mr, &mg, &mb); + } else { + mr = c2.Red(); + mg = c2.Green(); + mb = c2.Blue(); + } + mdc.SetPen(wxPen(wxColour(mr, mg, mb))); + mdc.DrawPoint(px, py); + } + + mdc.SetPen(wxPen(outline, 1)); + mdc.SetBrush(*wxTRANSPARENT_BRUSH); + const wxPoint pts[3] = {{int(v0.x), int(v0.y)}, {int(v1.x), int(v1.y)}, {int(v2.x), int(v2.y)}}; + mdc.DrawPolygon(3, pts); + mdc.SelectObject(wxNullBitmap); + + cache.sz = rc.GetSize(); + cache.c0 = c0; + cache.c1 = c1; + cache.c2 = c2; + } + pdc.DrawBitmap(cache.bmp, 0, 0); + + // Published-ratio marker (read-only twin of the editor's drag handle). + { + auto [v0, v1, v2] = vertices_for(rc.GetSize()); + const double w0 = spec.tri_weights[0], w1 = spec.tri_weights[1], w2 = spec.tri_weights[2]; + const int hx = int(w0 * v0.x + w1 * v1.x + w2 * v2.x); + const int hy = int(w0 * v0.y + w1 * v1.y + w2 * v2.y); + pdc.SetBrush(*wxWHITE_BRUSH); + pdc.SetPen(wxPen(ring, FromDIP(2))); + pdc.DrawCircle(hx, hy, FromDIP(5)); + + // Percent label beside each vertex. + for (int i = 0; i < 3; ++i) { + const wxString text = wxString::Format("%d%%", int(std::lround(spec.tri_weights[i] * 100.0))); + const wxSize tsz = pdc.GetTextExtent(text); + const TriPoint vtx = (i == 0) ? v0 : (i == 1) ? v1 : v2; + int lx = int(vtx.x - tsz.GetWidth() / 2.0); + int ly = (i == 0) ? int(vtx.y - tsz.GetHeight()) : int(vtx.y + FromDIP(3)); + ly = std::clamp(ly, 0, rc.height - tsz.GetHeight()); + lx = std::clamp(lx, 0, rc.width - tsz.GetWidth()); + pdc.SetTextForeground(label_c); + pdc.DrawText(text, lx, ly); + } + } + } else if (!spec.is_gradient) { + // Stacked ratio bar: one solid segment per component, widths proportional to the + // published shares. Integer widths accumulate left to right; the last segment takes + // the rounding remainder so the bar always fills exactly. + std::vector shares = spec.ratios; + double total = 0.0; + for (double r : shares) + total += r; + if (shares.size() != n || total <= 0.0) { + shares.assign(n, 1.0 / n); + total = 1.0; + } + auto share_to_px = [&](double share_sum) { return rc.x + int(std::lround(share_sum / total * double(rc.width))); }; + std::vector segs(n); + int x0 = rc.x; + for (size_t i = 0; i < n; ++i) { + int x1 = rc.x + rc.width; + if (i + 1 < n) + x1 = share_to_px(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0)); + segs[i] = wxRect(x0, rc.y, std::max(1, x1 - x0), rc.height); + x0 = segs[i].GetRight() + 1; + } + + for (size_t i = 0; i < n; ++i) { + pdc.SetPen(*wxTRANSPARENT_PEN); + pdc.SetBrush(wxBrush(spec.component_colours[i])); + pdc.DrawRectangle(segs[i]); + } + pdc.SetBrush(*wxTRANSPARENT_BRUSH); + pdc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#ACACAC")), 1)); + pdc.DrawRectangle(rc); + + // Percent label centred in each segment wide enough to hold it. + pdc.SetFont(::Label::Body_12); + for (size_t i = 0; i < n; ++i) { + const wxString text = wxString::Format("%d%%", int(std::lround(shares[i] / total * 100.0))); + const wxSize tsz = pdc.GetTextExtent(text); + if (tsz.GetWidth() + FromDIP(4) > segs[i].GetWidth()) + continue; + // Label contrast follows the swatch itself, not the theme. + const wxColour& c = spec.component_colours[i]; + const double lum = 0.299 * c.Red() + 0.587 * c.Green() + 0.114 * c.Blue(); + pdc.SetTextForeground(lum > 140 ? wxColour("#262E30") : *wxWHITE); + pdc.DrawText(text, segs[i].x + (segs[i].GetWidth() - tsz.GetWidth()) / 2, rc.y + (rc.height - tsz.GetHeight()) / 2); + } + } else { + // Gradient: compact "Material Ratio" over "Model Height" graph, a read-only + // miniature of the GradientCurveEditor plot. Component order matches the config; + // the second component's curve is the mirror of the first's. + const wxColour grid_color = StateColor::darkModeColorFor(wxColour(238, 238, 238)); // grey 300 + const wxColour axis_color = StateColor::darkModeColorFor(wxColour(107, 107, 107)); // grey 700 + const wxColour label_muted = StateColor::darkModeColorFor(wxColour(107, 107, 107)); + const wxColour point_fill = StateColor::darkModeColorFor(*wxWHITE); + + const int pad_left = FromDIP(34); + const int pad_right = FromDIP(10); + const int pad_top = FromDIP(18); + const int pad_bottom = FromDIP(16); + const wxRect plot(rc.x + pad_left, rc.y + pad_top, std::max(1, rc.width - pad_left - pad_right), + std::max(1, rc.height - pad_top - pad_bottom)); + + constexpr int kGridDivisions = 5; + pdc.SetPen(wxPen(grid_color, 1)); + for (int i = 0; i <= kGridDivisions; ++i) { + const int gx = plot.x + plot.width * i / kGridDivisions; + const int gy = plot.y + plot.height * i / kGridDivisions; + pdc.DrawLine(gx, plot.y, gx, plot.y + plot.height); + pdc.DrawLine(plot.x, gy, plot.x + plot.width, gy); + } + + // Axes with small filled arrowheads along the plot's left and bottom edges. + const int arrow_len = FromDIP(7); + const int arrow_half = FromDIP(3); + pdc.SetPen(wxPen(axis_color, 1)); + pdc.SetBrush(wxBrush(axis_color)); + pdc.DrawLine(plot.x, plot.y + plot.height, plot.x, plot.y); + { + wxPoint tri[3] = {wxPoint(plot.x, plot.y - arrow_len), wxPoint(plot.x - arrow_half, plot.y), + wxPoint(plot.x + arrow_half, plot.y)}; + pdc.DrawPolygon(3, tri); + } + pdc.DrawLine(plot.x, plot.y + plot.height, plot.x + plot.width, plot.y + plot.height); + { + wxPoint tri[3] = {wxPoint(plot.x + plot.width + arrow_len, plot.y + plot.height), + wxPoint(plot.x + plot.width, plot.y + plot.height - arrow_half), + wxPoint(plot.x + plot.width, plot.y + plot.height + arrow_half)}; + pdc.DrawPolygon(3, tri); + } + + wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); + pdc.SetFont(label_font); + pdc.SetTextForeground(label_muted); + pdc.DrawText(_L("Material Ratio"), plot.x + FromDIP(4), plot.y - pdc.GetTextExtent(_L("Material Ratio")).GetHeight()); + const wxString height_title = _L("Model Height"); + pdc.DrawText(height_title, plot.x + plot.width - pdc.GetTextExtent(height_title).GetWidth(), plot.y + plot.height + FromDIP(2)); + + if (spec.gradient_samples.size() >= 2 && n >= 2) { + auto curve_point = [&](double t, double ratio) { + return wxPoint(plot.x + int(std::lround(t * plot.width)), plot.y + int(std::lround((1.0 - ratio) * plot.height))); + }; + // First component's ratio solid, its mirror dashed-free twin for the other. + const wxColour& col_a = spec.component_colours[0]; + const wxColour& col_b = spec.component_colours[1]; + std::vector pts_a, pts_b; + pts_a.reserve(spec.gradient_samples.size()); + pts_b.reserve(spec.gradient_samples.size()); + for (const auto& [t, r] : spec.gradient_samples) { + pts_a.push_back(curve_point(t, r)); + pts_b.push_back(curve_point(t, 1.0 - r)); + } + pdc.SetPen(wxPen(col_b, 2)); + for (size_t i = 0; i + 1 < pts_b.size(); ++i) + pdc.DrawLine(pts_b[i], pts_b[i + 1]); + pdc.SetPen(wxPen(col_a, 2)); + for (size_t i = 0; i + 1 < pts_a.size(); ++i) + pdc.DrawLine(pts_a[i], pts_a[i + 1]); + + // Control-point anchors of the stored curve on the first component's line. + pdc.SetBrush(wxBrush(point_fill)); + pdc.SetPen(wxPen(col_a, 1)); + for (const auto& [t, r] : spec.gradient_anchors) { + const wxPoint c = curve_point(t, r); + pdc.DrawCircle(c, FromDIP(3)); + } + } + } + }); + + // Fixed DIP size, left-aligned: the visualization keeps its proportions no matter how the + // dialog is resized (the paint handler draws into whatever client rect the panel ends up + // with, so nothing else has to change). + const int viz_h = spec.is_gradient ? 150 : (spec.tri_weights.size() == 3 ? 180 : 30); + const wxSize viz_sz(FromDIP(240), FromDIP(viz_h)); + viz->SetMinSize(viz_sz); + viz->SetMaxSize(viz_sz); + // Parented to the page right above the scroll area, so it is always shown with the tab: + // the "Enable" toggle keeps gating only the rows/info below, never this preview. + wxSizer* page_sizer = category.page->GetSizer(); + int scroll_idx = -1; + for (size_t i = 0; i < page_sizer->GetChildren().size(); ++i) + if (page_sizer->GetChildren()[i]->GetWindow() == category.scroll) { + scroll_idx = int(i); + break; + } + if (scroll_idx < 0) + page_sizer->Add(viz, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(10)); // defensive: no scroll item + else + page_sizer->Insert(scroll_idx, viz, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(10)); +} + void PublishSettingsDialog::set_row_bold(Row& row, bool bold) { // Rebase on the dialog's body font so clearing bold restores the exact original font. @@ -681,13 +1351,18 @@ void PublishSettingsDialog::show_outer_page(size_t section_index) SectionGroup& old_section = m_sections[m_selected_outer]; if (old_section.selected_inner >= 0 && old_section.selected_inner < static_cast(old_section.categories.size())) save_scroll_position(m_categories[old_section.categories[old_section.selected_inner]]); + if (old_section.selected_mixed >= 0 && old_section.selected_mixed < static_cast(old_section.mixed_categories.size())) + save_scroll_position(m_categories[old_section.mixed_categories[old_section.selected_mixed]]); m_sections[m_selected_outer].page->Hide(); } m_selected_outer = static_cast(section_index); SectionGroup& section = m_sections[section_index]; section.page->Show(); + // Restore whichever tab row (physical or mixed) was active. if (section.selected_inner >= 0) show_inner_page(section_index, section.selected_inner); + else if (section.selected_mixed >= 0) + show_mixed_page(section_index, section.selected_mixed); m_outer_host_sizer->Layout(); } @@ -702,11 +1377,43 @@ void PublishSettingsDialog::show_inner_page(size_t section_index, int inner_inde save_scroll_position(m_categories[section.categories[section.selected_inner]]); m_categories[section.categories[section.selected_inner]].page->Hide(); } + if (section.selected_mixed >= 0 && section.selected_mixed < static_cast(section.mixed_categories.size())) { + save_scroll_position(m_categories[section.mixed_categories[section.selected_mixed]]); + m_categories[section.mixed_categories[section.selected_mixed]].page->Hide(); + section.selected_mixed = -1; + } section.selected_inner = inner_index; Category& category = m_categories[section.categories[inner_index]]; category.page->Show(); category.scroll->FitInside(); category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + if (section.mixed_tabs != nullptr) + section.mixed_tabs->Unselect(); + section.page_host_sizer->Layout(); +} + +void PublishSettingsDialog::show_mixed_page(size_t section_index, int mixed_index) +{ + if (section_index >= m_sections.size()) + return; + SectionGroup& section = m_sections[section_index]; + if (mixed_index < 0 || mixed_index >= static_cast(section.mixed_categories.size())) + return; + if (section.selected_mixed >= 0 && section.selected_mixed < static_cast(section.mixed_categories.size())) { + save_scroll_position(m_categories[section.mixed_categories[section.selected_mixed]]); + m_categories[section.mixed_categories[section.selected_mixed]].page->Hide(); + } + if (section.selected_inner >= 0 && section.selected_inner < static_cast(section.categories.size())) { + save_scroll_position(m_categories[section.categories[section.selected_inner]]); + m_categories[section.categories[section.selected_inner]].page->Hide(); + section.selected_inner = -1; + } + section.selected_mixed = mixed_index; + Category& category = m_categories[section.mixed_categories[mixed_index]]; + category.page->Show(); + category.scroll->FitInside(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + section.tabs->Unselect(); section.page_host_sizer->Layout(); } @@ -724,12 +1431,25 @@ void PublishSettingsDialog::on_inner_tab_changed(size_t section_index, wxCommand show_inner_page(section_index, selection); } +void PublishSettingsDialog::on_mixed_tab_changed(size_t section_index, wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (section_index < m_sections.size() && selection >= 0 && + selection < static_cast(m_sections[section_index].mixed_categories.size())) + show_mixed_page(section_index, selection); +} + void PublishSettingsDialog::bind_tab_events() { m_outer_tabs->Bind(wxEVT_TAB_SEL_CHANGED, &PublishSettingsDialog::on_outer_tab_changed, this); - for (size_t section_index = 0; section_index < m_sections.size(); ++section_index) + for (size_t section_index = 0; section_index < m_sections.size(); ++section_index) { m_sections[section_index].tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this, section_index](wxCommandEvent& event) { on_inner_tab_changed(section_index, event); }); + if (m_sections[section_index].mixed_tabs != nullptr) + m_sections[section_index].mixed_tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this, section_index](wxCommandEvent& event) { + on_mixed_tab_changed(section_index, event); + }); + } } void PublishSettingsDialog::apply_filter(const wxString& filter_text) @@ -781,7 +1501,9 @@ void PublishSettingsDialog::refresh_filter(const wxString& filter) has_match = has_match || m_rows[r].matches_filter; category.info->Show(!has_match); if (!has_match) - category.info->SetLabel(pseudo ? (want_checked ? m_info_nonsel : m_info_allsel) : m_info_empty); + // A mixed slot has no selectable rows: always explain it is published whole. + category.info->SetLabel(category.is_mixed ? m_info_mix : + (pseudo ? (want_checked ? m_info_nonsel : m_info_allsel) : m_info_empty)); if (has_match && first_inner < 0) { first_outer = s; first_inner = static_cast(inner); @@ -789,6 +1511,13 @@ void PublishSettingsDialog::refresh_filter(const wxString& filter) if (static_cast(s) == m_selected_outer && static_cast(inner) == m_sections[s].selected_inner) active_has_match = has_match; } + // Mixed slots have no rows: they can never match a filter, so they always fall back to + // their explanatory hint (shown once the slot is enabled). + for (size_t mixed : m_sections[s].mixed_categories) { + Category& category = m_categories[mixed]; + category.info->Show(true); + category.info->SetLabel(m_info_mix); + } } if (!active_has_match && first_inner >= 0 && (m_selected_outer != static_cast(first_outer) || m_sections[first_outer].selected_inner != first_inner)) { @@ -815,18 +1544,26 @@ void PublishSettingsDialog::apply_visibility() { Freeze(); for (Category& category : m_categories) { + // A disabled material slot hides everything below its header (rows, info and the Full + // Publish line); enable it first to reveal its settings. + const bool enabled = category.section != Section::Material || + (category.enable_check != nullptr && category.enable_check->GetValue()); + if (category.scroll != nullptr) + category.scroll->Show(enabled); + if (category.full_line_item != nullptr) + category.full_line_item->Show(enabled); bool category_any = false; for (size_t r : category.rows) category_any = category_any || m_rows[r].matches_filter; - category.info->Show(!category_any); + category.info->Show(enabled && !category_any); for (Subcategory& sub : category.subs) { bool sub_any = false; for (size_t r : sub.rows) sub_any = sub_any || m_rows[r].matches_filter; if (sub.header != nullptr) - sub.item->Show(sub_any); + sub.item->Show(enabled && sub_any); for (size_t r : sub.rows) - m_rows[r].item->Show(m_rows[r].matches_filter); + m_rows[r].item->Show(enabled && m_rows[r].matches_filter); } category.list_sizer->Layout(); category.scroll->FitInside(); @@ -840,6 +1577,17 @@ void PublishSettingsDialog::select_all(bool value) for (Row& row : m_rows) if (row.check->IsEnabled()) row.check->SetValue(value); + // "All" also enables every material slot (so its rows/Full Publish become visible and the + // selection is actually exported); "None" disables them all again. + for (Category& cat : m_categories) + if (cat.section == Section::Material && cat.enable_check != nullptr) + cat.enable_check->SetValue(value); + // wxCheckBox::SetValue does not emit wxEVT_CHECKBOX, so re-run the enable handlers to + // propagate mixed-slot components and refresh visibility as if the user had clicked. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].section == Section::Material) + on_enable_toggle(c); + apply_visibility(); } bool PublishSettingsDialog::row_is_visible(const Row& row) const @@ -936,28 +1684,13 @@ std::vector PublishSettingsDialog::GetPublishedKeys() const std::vector out; // Process and printer sections both travel through published_keys (the load-side overlay // applies process keys to the prints edited preset and the allowlisted printer keys to the - // printers edited preset); material keys use a separate API. - const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + // printers edited preset); material keys use a separate API. Printer rows carry the full + // per-extruder "#N" opt_id (built in Phase 1), so a checked row publishes exactly that + // extruder's value - per-extruder selection is independent. for (const Row& row : m_rows) { if ((row.section != Section::Print && row.section != Section::Printer) || !row.check->GetValue()) continue; - if (row.section == Section::Printer) { - // Printer rows store the base key (per-extruder "#N" variants collapsed during - // build). Publish every extruder element so the load side can apply per-extruder - // values even when the receiver has a different extruder count; a scalar printer - // key is published as-is. - const std::string base_key = publish_base_key(row.key); - if (const ConfigOption* opt = full.option(base_key)) { - if (const auto* vec = dynamic_cast(opt)) { - for (size_t i = 0; i < vec->size(); ++i) - out.push_back(base_key + "#" + std::to_string(i)); - } else { - out.push_back(base_key); - } - } - } else { - out.push_back(row.key); - } + out.push_back(row.key); } return out; } @@ -968,6 +1701,9 @@ std::vector PublishSettingsDialog::GetPublishedM for (const Category& cat : m_categories) { if (cat.section != Section::Material) continue; + // A slot that is not "Enable"d publishes nothing at all. + if (cat.enable_check != nullptr && !cat.enable_check->GetValue()) + continue; Slic3r::PublishedMaterialEntry entry; entry.filament_type = cat.filament_type; entry.filament_vendor = cat.filament_vendor; @@ -983,6 +1719,28 @@ std::vector PublishSettingsDialog::GetPublishedM entry.preset_name = preset->name; } } + // A mixed slot publishes as one unit: its definition (components, ratios, gradient) + // always travels (its Enable implies this), and the component filaments are enabled + + // Full Published by on_enable_toggle into their own entries. + if (cat.is_mixed) { + Slic3r::PublishedMaterialEntry mixed_entry; + mixed_entry.filament_type = cat.filament_type; + mixed_entry.filament_vendor = cat.filament_vendor; + mixed_entry.filament_id = cat.filament_id; + mixed_entry.slot = static_cast(cat.filament_slot); + // The mix's own colour (blended) is a property of the definition, not a + // requirement row; carry it so the receiver renders the swatch. + const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); + const std::string mix_color = filament_color_hex(full_cfg, cat.filament_slot); + if (!mix_color.empty()) { + mixed_entry.publish_color = true; + mixed_entry.color = mix_color; + } + for (const std::string& key : publish_mixed_keys()) + mixed_entry.keys.emplace_back(key); + out.push_back(std::move(mixed_entry)); + continue; + } // "Full Publish": the whole filament preset is embedded; type and colour are implicitly // published, and the per-key rows are disabled / their state ignored. if (cat.full_check != nullptr && cat.full_check->GetValue()) { @@ -1050,11 +1808,16 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) for (Category& cat : m_categories) { if (cat.full_check != nullptr) cat.full_check->Refresh(); + if (cat.enable_check != nullptr) + cat.enable_check->Refresh(); if (cat.title_label != nullptr) cat.title_label->Refresh(); if (cat.filament_color_chip != nullptr) { - if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, cat.filament_slot), "", FromDIP(12), FromDIP(12))) + // Mixed pages have no header chip; this only ever fires for physical slots. + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, cat.filament_slot), std::to_string(cat.filament_slot + 1), + FromDIP(20), FromDIP(20))) { cat.filament_color_chip->SetBitmap(*chip); + } } cat.scroll->FitInside(); cat.list_sizer->Layout(); @@ -1066,12 +1829,17 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) if (section.icon_bmp.bmp().IsOk()) m_outer_tabs->SetItemBitmap(s, section.icon_bmp.bmp()); section.tabs->Rescale(); + if (section.mixed_tabs != nullptr) + section.mixed_tabs->Rescale(); } - // Refresh the per-row Color chips at the new DPI. + // Refresh the per-row Color chips at the new DPI (they carry the slot number too). for (Row& row : m_rows) { if (row.color_chip != nullptr && !row.value.IsEmpty()) { - if (wxBitmap* chip = get_extruder_color_icon(row.value.ToStdString(), "", FromDIP(12), FromDIP(12))) + const std::string chip_label = (row.inner_index < m_categories.size()) ? + std::to_string(m_categories[row.inner_index].filament_slot + 1) : + ""; + if (wxBitmap* chip = get_extruder_color_icon(row.value.ToStdString(), chip_label, FromDIP(20), FromDIP(20))) row.color_chip->SetBitmap(*chip); } } @@ -1080,9 +1848,19 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) const Category& category = m_categories[category_index]; if (category.section != Section::Material) continue; - if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), "", FromDIP(12), FromDIP(12))) { - const SectionGroup& section = m_sections[category.group]; - const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); + const SectionGroup& section = m_sections[category.group]; + if (category.is_mixed) { + // The tab carries the full composition bitmap (mix chip + components + percents); + // the page header has no chip/title to refresh. + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full, category.filament_slot, FromDIP(20)); + if (tab_bmp.IsOk()) { + const auto iter = std::find(section.mixed_categories.begin(), section.mixed_categories.end(), category_index); + if (iter != section.mixed_categories.end() && section.mixed_tabs != nullptr) + section.mixed_tabs->SetItemBitmap(static_cast(iter - section.mixed_categories.begin()), tab_bmp); + } + } else if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), + std::to_string(category.filament_slot + 1), FromDIP(20), FromDIP(20))) { + const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); if (iter != section.categories.end()) m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); } diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 2cf49e7eb9..e00bec37fd 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -7,8 +7,10 @@ #include "libslic3r/PublishSettings.hpp" #include +#include #include #include +#include #include #include @@ -105,9 +107,18 @@ private: wxPoint scroll_pos{0, 0}; wxStaticBitmap* filament_color_chip{nullptr}; wxStaticText* title_label{nullptr}; // material title (static text; Full Publish carries the label elsewhere) + // "Enable": while unchecked nothing of this slot is exported and everything below the + // header row is hidden. For physical slots the Full Publish toggle sits on a second + // line (full_line_item) visible only when enabled; for mixed slots Enable alone implies + // publishing the mix definition, so no Full Publish widget exists at all. + wxCheckBox* enable_check{nullptr}; + wxSizerItem* full_line_item{nullptr}; // sizer item of the Full Publish line (physical slots only) // "Full Publish": while checked, the whole slot preset is serialized and its rows // (incl. Color/Type) are disabled. wxCheckBox* full_check{nullptr}; + // True for a mixed-color filament slot: no Material/Retraction rows; Enable publishes + // the slot's gradient/ratio definition as a whole. + bool is_mixed{false}; // Material identity, only for Section::Material categories. std::string filament_type; std::string filament_vendor; @@ -118,6 +129,21 @@ private: std::vector rows; // flattened rows of this category }; + // Frozen snapshot of a mixed filament slot's definition for the read-only visualization + // painted on the slot's page. Plain data only: the paint handler must never touch the + // config. For gradient slots the curve is pre-sampled (t, ratio) pairs, where ratio is the + // first component's share over model height; anchors carry the raw control points. + struct MixedVisualSpec + { + bool valid{false}; + bool is_gradient{false}; + std::vector component_colours; // colour per component, in config order + std::vector ratios; // sublayer shares summing to ~1 (non-gradient) + std::vector tri_weights; // 3-component mixes: barycentric shares + std::vector> gradient_samples; + std::vector> gradient_anchors; + }; + // One outer TabCtrl page. Category entries are its inner tabs. struct SectionGroup { @@ -127,13 +153,24 @@ private: ScalableBitmap icon_bmp; // tab icon next to the title; rescaled on DPI change wxPanel* page{nullptr}; TabCtrl* tabs{nullptr}; + // Second tab strip, below the main one, listing only the mixed-color filament slots. + // Present on the Material section only (null elsewhere). + TabCtrl* mixed_tabs{nullptr}; wxPanel* page_host{nullptr}; wxBoxSizer* page_host_sizer{nullptr}; int selected_inner{-1}; - std::vector categories; // indices into m_categories + // Selected mixed tab (index into mixed_categories), valid while a mixed slot page is shown. + int selected_mixed{-1}; + std::vector categories; // indices into m_categories (physical slots) + std::vector mixed_categories; // indices into m_categories (mixed slots) }; void build_option_model(); + // Frozen snapshot of a mixed slot's definition for the page visualization, resolved from + // the full config once at dialog-build time. Gradient slots pre-sample exactly what the + // slicer will print: the custom curve wins over the gradient_range endpoints over the + // 0.10 -> 0.90 default (the resolution FilamentBitmapUtils::mixed_gradient_curve mirrors). + static MixedVisualSpec make_mixed_visual_spec(const Slic3r::DynamicPrintConfig& full, size_t slot); void apply_filter(const wxString& filter_text); // Menu-only pseudo filters: show only the checked ("Filter selected") or only the // unchecked ("Filter non-selected") rows. The search box keeps the user's text. @@ -147,13 +184,21 @@ private: void set_row_bold(Row& row, bool bold); // "Full Publish" toggled: disables/enables the material's rows. void on_full_toggle(size_t category_index); + // "Enable" toggled on a material slot: reveals/hides everything below the header and, for a + // mixed slot, auto-selects its component filaments' "Enable" + "Full Publish" toggles. + void on_enable_toggle(size_t category_index); + // Read-only visualization of a mixed slot's definition (a stacked ratio bar, or the + // Material Ratio vs Model Height graph for a gradient), inserted above the info hint + // inside the category's scroll area. + void add_mixed_visual(size_t category_index, const MixedVisualSpec& spec); // Return/create the fixed outer page for a Section kind. size_t section_group_for(Section kind); size_t category_index_for(const wxString& title, Section section, size_t group, size_t source_index, - const PublishMaterialIdentity& identity = PublishMaterialIdentity()); + const PublishMaterialIdentity& identity = PublishMaterialIdentity(), + bool is_mixed = false); size_t subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon); void add_row_ui(const std::string& key, const wxString& label, @@ -167,8 +212,10 @@ private: void save_scroll_position(Category& category); void show_outer_page(size_t section_index); void show_inner_page(size_t section_index, int inner_index); + void show_mixed_page(size_t section_index, int mixed_index); void on_outer_tab_changed(wxCommandEvent& event); void on_inner_tab_changed(size_t section_index, wxCommandEvent& event); + void on_mixed_tab_changed(size_t section_index, wxCommandEvent& event); bool row_is_visible(const Row& row) const; void apply_visibility(); void bind_tab_events(); @@ -190,6 +237,7 @@ private: wxString m_info_nonsel; wxString m_info_allsel; wxString m_info_empty; + wxString m_info_mix; // body hint shown for a mixed slot (published as a whole) ScalableBitmap m_search; ScalableBitmap m_menu; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 7817c9111a..8fc432771e 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -2,8 +2,8 @@ #include -wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGING, wxCommandEvent ); -wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent ); +wxDEFINE_EVENT(wxEVT_TAB_SEL_CHANGING, wxCommandEvent); +wxDEFINE_EVENT(wxEVT_TAB_SEL_CHANGED, wxCommandEvent); BEGIN_EVENT_TABLE(TabCtrl, StaticBox) @@ -22,11 +22,7 @@ END_EVENT_TABLE() #define TAB_BUTTON_PADDING_Y 2 #define TAB_BUTTON_PADDING TAB_BUTTON_PADDING_X, TAB_BUTTON_PADDING_Y -TabCtrl::TabCtrl(wxWindow * parent, - wxWindowID id, - const wxPoint & pos, - const wxSize & size, - long style) +TabCtrl::TabCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : StaticBox(parent, id, pos, size, style) { #if 0 @@ -42,14 +38,11 @@ TabCtrl::TabCtrl(wxWindow * parent, hsizer->Add(sizer, 0, wxEXPAND | wxBOTTOM, border_width * 4); SetSizer(hsizer); Bind(wxEVT_COMMAND_BUTTON_CLICKED, &TabCtrl::buttonClicked, this); - //wxString reason; - //IsTransparentBackgroundSupported(&reason); + // wxString reason; + // IsTransparentBackgroundSupported(&reason); } -TabCtrl::~TabCtrl() -{ - delete images; -} +TabCtrl::~TabCtrl() { delete images; } int TabCtrl::GetSelection() const { return sel; } @@ -75,14 +68,11 @@ void TabCtrl::SelectItem(int item) Refresh(); } -void TabCtrl::Unselect() -{ - SelectItem(-1); -} +void TabCtrl::Unselect() { SelectItem(-1); } void TabCtrl::Rescale() { - for (auto & b : btns) + for (auto& b : btns) b->Rescale(); relayout(); } @@ -96,23 +86,20 @@ bool TabCtrl::SetFont(wxFont const& font) return true; } -int TabCtrl::AppendItem(const wxString &item, - int image, int selImage, - void * clientData) +int TabCtrl::AppendItem(const wxString& item, int image, int selImage, void* clientData) { - Button * btn = new Button(); + Button* btn = new Button(); btn->Create(this, item, "", wxBORDER_NONE); btn->SetFont(GetFont()); - btn->SetTextColor(StateColor( - std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), - std::make_pair(*wxLIGHT_GREY, (int) StateColor::Normal))); + btn->SetTextColor( + StateColor(std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), std::make_pair(*wxLIGHT_GREY, (int) StateColor::Normal))); btn->SetBackgroundColor(StateColor()); btn->SetCornerRadius(0); btn->SetPaddingSize({TAB_BUTTON_PADDING}); btns.push_back(btn); if (btns.size() > 1) sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0}); - sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, TAB_BUTTON_SPACE * 2); + sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, item_space * 2); sizer->AddStretchSpacer(1); relayout(); return btns.size() - 1; @@ -144,7 +131,7 @@ bool TabCtrl::DeleteItem(int item) sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0}); if (selection_changed) { - sel--; // `relayout()` uses `sel` so we need to update this before calling `relayout()` + sel--; // `relayout()` uses `sel` so we need to update this before calling `relayout()` } relayout(); if (selection_changed) { @@ -167,14 +154,12 @@ void TabCtrl::DeleteAllItems() unsigned int TabCtrl::GetCount() const { return btns.size(); } -wxString TabCtrl::GetItemText(unsigned int item) const -{ - return item < btns.size() ? btns[item]->GetLabel() : wxString{}; -} +wxString TabCtrl::GetItemText(unsigned int item) const { return item < btns.size() ? btns[item]->GetLabel() : wxString{}; } -void TabCtrl::SetItemText(unsigned int item, wxString const &value) +void TabCtrl::SetItemText(unsigned int item, wxString const& value) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetLabel(value); } @@ -188,61 +173,59 @@ void TabCtrl::SetItemBitmap(unsigned int item, const wxBitmap& bitmap) bool TabCtrl::GetItemBold(unsigned int item) const { - if (item >= btns.size()) return false; + if (item >= btns.size()) + return false; return btns[item]->GetFont() == bold; } void TabCtrl::SetItemBold(unsigned int item, bool bold) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetFont(bold ? this->bold : GetFont()); btns[item]->Rescale(); } void* TabCtrl::GetItemData(unsigned int item) const { - if (item >= btns.size()) return nullptr; + if (item >= btns.size()) + return nullptr; return btns[item]->GetClientData(); } void TabCtrl::SetItemData(unsigned int item, void* clientData) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetClientData(clientData); } void TabCtrl::AssignImageList(wxImageList* imageList) { - if (images == imageList) return; + if (images == imageList) + return; delete images; images = imageList; } -void TabCtrl::SetItemTextColour(unsigned int item, const StateColor &col) +void TabCtrl::SetItemTextColour(unsigned int item, const StateColor& col) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetTextColor(col); } -int TabCtrl::GetFirstVisibleItem() const -{ - return btns.size() == 0 ? -1 : 0; -} +int TabCtrl::GetFirstVisibleItem() const { return btns.size() == 0 ? -1 : 0; } -int TabCtrl::GetNextVisible(int item) const -{ - return ++item < btns.size() ? item : -1; -} +int TabCtrl::GetNextVisible(int item) const { return ++item < btns.size() ? item : -1; } -bool TabCtrl::IsVisible(unsigned int item) const -{ - return true; -} +bool TabCtrl::IsVisible(unsigned int item) const { return true; } void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) { wxWindow::DoSetSize(x, y, width, height, sizeFlags); - if (sizeFlags & wxSIZE_USE_EXISTING) return; + if (sizeFlags & wxSIZE_USE_EXISTING) + return; relayout(); } @@ -250,7 +233,9 @@ void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) WXLRESULT TabCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - if (nMsg == WM_GETDLGCODE) { return DLGC_WANTARROWS; } + if (nMsg == WM_GETDLGCODE) { + return DLGC_WANTARROWS; + } return wxWindow::MSWWindowProc(nMsg, wParam, lParam); } @@ -259,15 +244,15 @@ WXLRESULT TabCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) void TabCtrl::relayout() { int offset = 10; - int item = sel + 1; - int first = 0; + int item = sel + 1; + int first = 0; for (int i = 0; i < item; ++i) - offset += btns[i]->GetMinSize().x + TAB_BUTTON_SPACE * 2; + offset += btns[i]->GetMinSize().x + item_space * 2; if (item < btns.size()) - offset += btns[item]->GetMinSize().x + TAB_BUTTON_SPACE * 2; - int width = GetSize().x; + offset += btns[item]->GetMinSize().x + item_space * 2; + int width = GetSize().x; for (int i = 0; i < btns.size(); ++i) { - auto size = btns[i]->GetMinSize().x + TAB_BUTTON_SPACE * 2; + auto size = btns[i]->GetMinSize().x + item_space * 2; if (i < sel && offset > width) { sizer->Show(i * 2 + 1, false); sizer->Show(i * 2 + 2, false); @@ -288,23 +273,32 @@ void TabCtrl::relayout() sizer->GetItem(i * 2 + 2)->SetMinSize({0, 0}); } if (item >= btns.size()) - -- item; + --item; // Keep spacing 2 ~ 10 TAB_BUTTON_SPACE - int b = GetSize().x - offset - 10 - (item + 1 - first) * TAB_BUTTON_SPACE * 8; + int b = GetSize().x - offset - 10 - (item + 1 - first) * item_space * 8; sizer->GetItem(item * 2 + 2)->SetMinSize({b > 0 ? b : 0, 0}); Layout(); } -int TabCtrl::buttons_best_width() const +void TabCtrl::SetItemSpace(int space) +{ + if (space < 0 || space == item_space) + return; + item_space = space; + relayout(); + Refresh(); +} + +int TabCtrl::GetFullSize() const { // Mirrors relayout(): a 10px leading spacer plus every button's min width and spacing. int width = 10; - for (const Button *btn : btns) - width += btn->GetMinSize().x + TAB_BUTTON_SPACE * 2; + for (const Button* btn : btns) + width += btn->GetMinSize().x + item_space * 2; return width; } -void TabCtrl::buttonClicked(wxCommandEvent &event) +void TabCtrl::buttonClicked(wxCommandEvent& event) { SetFocus(); auto btn = event.GetEventObject(); @@ -312,7 +306,7 @@ void TabCtrl::buttonClicked(wxCommandEvent &event) SelectItem(iter == btns.end() ? -1 : iter - btns.begin()); } -void TabCtrl::keyDown(wxKeyEvent &event) +void TabCtrl::keyDown(wxKeyEvent& event) { switch (event.GetKeyCode()) { case WXK_UP: @@ -331,11 +325,13 @@ void TabCtrl::keyDown(wxKeyEvent &event) void TabCtrl::doRender(wxDC& dc) { wxSize size = GetSize(); - int states = state_handler.states(); - if (sel < 0) { return; } + int states = state_handler.states(); + if (sel < 0) { + return; + } - auto x1 = btns[sel]->GetPosition().x; - auto x2 = x1 + btns[sel]->GetSize().x; + auto x1 = btns[sel]->GetPosition().x; + auto x2 = x1 + btns[sel]->GetSize().x; const int BS2 = (1 + border_width) / 2; #if 0 const int BS = border_width / 2; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index e6a990243e..0d3606aca7 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -3,33 +3,30 @@ #include "Button.hpp" -wxDECLARE_EVENT( wxEVT_TAB_SEL_CHANGING, wxCommandEvent ); -wxDECLARE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent ); +wxDECLARE_EVENT(wxEVT_TAB_SEL_CHANGING, wxCommandEvent); +wxDECLARE_EVENT(wxEVT_TAB_SEL_CHANGED, wxCommandEvent); class TabCtrl : public StaticBox { std::vector btns; wxImageList* images = nullptr; - wxBoxSizer * sizer = nullptr; + wxBoxSizer* sizer = nullptr; int sel = -1; wxFont bold; + int item_space = 2; // space around each button, both sides (SetItemSpace) public: - TabCtrl(wxWindow * parent, - wxWindowID id, - const wxPoint & pos = wxDefaultPosition, - const wxSize & size = wxDefaultSize, - long style = 0); + TabCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); ~TabCtrl(); public: - virtual bool SetFont(wxFont const & font) override; + virtual bool SetFont(wxFont const& font) override; public: - int AppendItem(const wxString &item, int image = -1, int selImage = -1, void *clientData = nullptr); - int AppendItem(const wxString &item, const wxBitmap& bitmap, void *clientData = nullptr); + int AppendItem(const wxString& item, int image = -1, int selImage = -1, void* clientData = nullptr); + int AppendItem(const wxString& item, const wxBitmap& bitmap, void* clientData = nullptr); bool DeleteItem(int item); @@ -37,7 +34,7 @@ public: unsigned int GetCount() const; - int GetSelection() const; + int GetSelection() const; void SelectItem(int item); @@ -46,16 +43,16 @@ public: virtual void Rescale(); wxString GetItemText(unsigned int item) const; - void SetItemText(unsigned int item, wxString const &value); - void SetItemBitmap(unsigned int item, const wxBitmap& bitmap); + void SetItemText(unsigned int item, wxString const& value); + void SetItemBitmap(unsigned int item, const wxBitmap& bitmap); - bool GetItemBold(unsigned int item) const; - void SetItemBold(unsigned int item, bool bold); + bool GetItemBold(unsigned int item) const; + void SetItemBold(unsigned int item, bool bold); - void* GetItemData(unsigned int item) const; - void SetItemData(unsigned int item, void *clientData); - - void AssignImageList(wxImageList *imageList); + void* GetItemData(unsigned int item) const; + void SetItemData(unsigned int item, void* clientData); + + void AssignImageList(wxImageList* imageList); void SetItemTextColour(unsigned int item, const StateColor& col); @@ -64,8 +61,11 @@ public: int GetNextVisible(int item) const; bool IsVisible(unsigned int item) const; - // Width of the tab strip that keeps every button visible (used to size the Publish dialog). - int buttons_best_width() const; + // Extra space around each tab button (in px on both sides). Defaults to the control-wide + // standard; call before appending items so every button picks it up. + void SetItemSpace(int space); + + int GetFullSize() const; private: virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO) override; @@ -76,10 +76,10 @@ private: void relayout(); - void buttonClicked(wxCommandEvent & event); - void keyDown(wxKeyEvent &event); + void buttonClicked(wxCommandEvent& event); + void keyDown(wxKeyEvent& event); - void doRender(wxDC & dc) override; + void doRender(wxDC& dc) override; // some useful events bool sendTabCtrlEvent(bool changing = false); diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index a459bfa62d..37147b93b8 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -1024,3 +1024,55 @@ SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { } } } + +// A published mixed filament serializes its whole definition (components, ratios, gradient) +// masked to the author's slot: the mix slot's values survive, the non-published slots reset to +// their defaults, so a partial publish never leaks another slot's mix data. +SCENARIO("Published mixed-filament keys are masked to the author's slot", "[3mf]") { + GIVEN("a full print configuration with three slots, one of them mixed") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222", "#333333" }; + full_cfg.opt("filament_is_mixed")->values = { 0, 0, 1 }; + full_cfg.opt("filament_mixed_components")->values = { "", "", "1,2" }; + full_cfg.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + full_cfg.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + full_cfg.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + full_cfg.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + full_cfg.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + + PublishedMaterialEntry mix_entry; + mix_entry.slot = 2; + mix_entry.keys = { + "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" + }; + + WHEN("filtering with a mixed entry for slot 2") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { mix_entry }); + + THEN("the author's mixed slot keeps its definition") { + REQUIRE(filtered_cfg.option("filament_is_mixed") != nullptr); + REQUIRE(filtered_cfg.opt("filament_is_mixed")->values == std::vector{ 0, 0, 1 }); + const auto& components = filtered_cfg.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + CHECK(filtered_cfg.opt("filament_mixed_sublayer_ratios")->values[2] == "0.6,0.4"); + CHECK(filtered_cfg.opt("filament_mixed_gradient_curve")->values[2] == "0,0.1|1,0.9"); + CHECK(filtered_cfg.opt("filament_mixed_gradient")->values[2]); + CHECK(filtered_cfg.opt("filament_mixed_gradient_per_part")->values[2]); + } + THEN("the non-published slots are masked to their defaults") { + CHECK(filtered_cfg.opt("filament_mixed_components")->values[0] == ""); + CHECK(filtered_cfg.opt("filament_mixed_components")->values[1] == ""); + CHECK(filtered_cfg.opt("filament_is_mixed")->values[0] == 0); + CHECK(filtered_cfg.opt("filament_is_mixed")->values[1] == 0); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 01abba75bf..d4a1e04e0c 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -2545,3 +2545,252 @@ TEST_CASE("Published 3MF applies per-extruder printer keys across extruder-count CHECK(pub.skipped_keys.empty()); } } + +// A published mixed filament serializes its definition (components, ratios, gradient) into the +// receiver's project_config - the project-level parallel arrays, not a filament preset. The +// mix's own blended colour is carried as publish_color so the receiver renders the swatch. +TEST_CASE("Published 3MF applies a mixed filament definition onto the receiver's project config", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Three author slots: two physical PLA/PETG plus one virtual mixed slot (index 2) + // blending slots 1 and 2 at 60/40 with a gradient. + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99", "GFL99" }; + // The mixed slot's definition. These keys are project-level arrays in the full config; + // on export they are masked so only the published slot's entry survives. + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + return config; + }; + + // A receiver that already carries the mix slot at index 2 (e.g. a two-physical-plus-one-mix + // project with the same layout). + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + bundle.filament_presets = { "My PLA", "My PETG", "My PLA" }; + + // Grow the receiver's project arrays to 3 slots first, as set_num_filaments would. + bundle.set_num_filaments(3); + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition landed in project_config's parallel arrays at the author slot. + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 3); + CHECK(ratios[2] == "0.6,0.4"); + const auto &gradient = bundle.project_config.opt("filament_mixed_gradient")->values; + CHECK(gradient[2]); + const auto &range = bundle.project_config.opt("filament_mixed_gradient_range")->values; + CHECK(range[2] == "0.9,0.1"); + const auto &curve = bundle.project_config.opt("filament_mixed_gradient_curve")->values; + CHECK(curve[2] == "0,0.1|1,0.9"); + const auto &per_part = bundle.project_config.opt("filament_mixed_gradient_per_part")->values; + CHECK(per_part[2]); + // The mix's blended colour crossed into project_config for the swatch. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 3); + CHECK(colour[2] == "#800080"); + // The other slots were not overwritten by the mask. + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + // Nothing skipped: every serialized mixed key was applied. + CHECK(pub.skipped_keys.empty()); + } + + // A receiver with fewer slots: the slot is grown and seeded before the definition applies. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry mix; + mix.slot = 2; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + CHECK(pub.skipped_keys.empty()); + } +} + +// A published mixed filament whose definition cannot be applied is reported as skipped instead +// of aborting the load: the entry lists a mixed key that the file's payload does not carry. +TEST_CASE("Published 3MF reports an unappliable mixed filament definition as skipped", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + // Two author slots (so slot 1 is in range) but the payload omits the mixed arrays: the + // entry lists them, the file config does not. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + + PublishedMaterialEntry mix; + mix.slot = 1; + mix.keys = { "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grows to two slots; the missing payload keys are reported as skipped rather + // than dropped silently (material_label is empty for this entry). + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(contains_key(pub.skipped_keys, "material: (filament_mixed_components)")); + CHECK(contains_key(pub.skipped_keys, "material: (filament_mixed_sublayer_ratios)")); +} + +// A single-extruder receiver collapses the author's per-extruder printer slots onto its single +// slot: the first serialized variant of a base key is applied, the remaining variants of that +// base key are reported as skipped. +TEST_CASE("Published 3MF collapses a multi-extruder publish onto a single-extruder receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Author has two extruders. + config.opt("retraction_length")->values = { 0.6, 0.9 }; + config.opt("retraction_speed")->values = { 30.0, 40.0 }; + Preset::normalize(config); + return config; + }; + + // Both extruders published: the first serialized variant (#0, left) lands on the receiver's + // single slot; the second variant (#1) is reported as skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + bundle.printers.get_edited_preset().config.opt("retraction_speed")->values = { 25.0 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1", "retraction_speed#0", "retraction_speed#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values, { 30.0 }); + CHECK(contains_key(pub.skipped_keys, "retraction_length#1")); + CHECK(contains_key(pub.skipped_keys, "retraction_speed#1")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_length#0")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_speed#0")); + } + + // Only the second extruder published: the single-extruder receiver still applies it (the + // author's "right" is the only serialized slot) and reports nothing skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.9 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// A multi-extruder "similar setup" receiver overrides each published extruder slot element-wise +// (no collapsing): each '#N' variant applies to the matching receiver slot, out-of-range ones are +// reported as skipped. +TEST_CASE("Published 3MF overrides each extruder slot on a similar multi-extruder receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + // Author has two extruders. + config.opt("retraction_length")->values = { 0.6, 0.9 }; + Preset::normalize(config); + return config; + }; + + // Receiver with two extruders: both published slots override element-wise. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6, 0.9 }); + CHECK(pub.skipped_keys.empty()); + } + + // Receiver with three extruders: slots 0 and 1 override, slot 2 keeps its own value. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8, 0.7 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6, 0.9, 0.7 }); + CHECK(pub.skipped_keys.empty()); + } +} + From 23b98e2ca56ccd0adb0bca2d12a5a5ee503a5c16 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Thu, 27 Aug 2026 17:04:27 +0800 Subject: [PATCH 054/208] Initial commit for warning popup when required filaments are not selected for mixed filaments --- src/slic3r/GUI/PublishSettingsDialog.cpp | 66 +++++++++++++++++++++++- src/slic3r/GUI/PublishSettingsDialog.hpp | 5 ++ 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 262fdbe356..be28ae7499 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -416,7 +416,24 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { - // Publish is always allowed: no settings selected means no settings override. + // Publish is always allowed: no settings selected means no settings override. Warn only + // when an enabled mixed filament would ship without the identity of one of its + // components; "Proceed" accepts that and publishes anyway. + if (const std::vector missing = unpublished_mixed_components(); !missing.empty()) { + wxString missing_list; + for (size_t i = 0; i < missing.size(); ++i) { + if (i > 0) + missing_list += ", "; + missing_list += wxString::Format(_L("Filament %d"), int(missing[i] + 1)); + } + const wxString msg = _L("The following filaments are used by published mixed filaments but will not carry their material identity:") + + wxString(" ") + missing_list; + MessageDialog warn(this, msg, _L("Warning"), wxICON_WARNING); + warn.AddButton(wxID_CANCEL, _L("Cancel"), true); // safe choice gets the focus + warn.AddButton(wxID_OK, _L("Proceed"), false); + if (warn.ShowModal() != wxID_OK) + return; // Cancel: dismiss the warning and stay in this dialog + } EndModal(wxID_OK); }); dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); @@ -1695,6 +1712,53 @@ std::vector PublishSettingsDialog::GetPublishedKeys() const return out; } +std::vector PublishSettingsDialog::unpublished_mixed_components() const +{ + std::set missing; + for (const Category& cat : m_categories) { + if (!cat.is_mixed || cat.section != Section::Material) + continue; + // Only enabled mixed slots depend on their components being published. + if (cat.enable_check == nullptr || !cat.enable_check->GetValue()) + continue; + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + // Components are 1-based physical filament indices. + for (const unsigned int component : mixed_slot_components(full, cat.filament_slot)) { + const size_t component_slot = size_t(component) - 1; + // Find the component slot's material category (one exists per physical slot). + const Category* comp_cat = nullptr; + for (const Category& other : m_categories) { + if (other.section == Section::Material && !other.is_mixed && other.filament_slot == component_slot) { + comp_cat = &other; + break; + } + } + if (comp_cat == nullptr || comp_cat->enable_check == nullptr) + continue; + // Missing when the component's "Enable" is off, or it is enabled with neither + // "Full Publish" nor the "Type" requirement row checked. Colour never counts: + // the receiver renders the mix from its own components' colours. + if (!comp_cat->enable_check->GetValue()) { + missing.insert(component_slot); + continue; + } + if (comp_cat->full_check != nullptr && comp_cat->full_check->GetValue()) + continue; + bool type_checked = false; + for (const size_t r : comp_cat->rows) { + const Row& row = m_rows[r]; + if (row.kind == RowKind::Type && row.check->GetValue()) { + type_checked = true; + break; + } + } + if (!type_checked) + missing.insert(component_slot); + } + } + return std::vector(missing.begin(), missing.end()); +} + std::vector PublishSettingsDialog::GetPublishedMaterialKeys() const { std::vector out; diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index e00bec37fd..60c33e5a2d 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -187,6 +187,11 @@ private: // "Enable" toggled on a material slot: reveals/hides everything below the header and, for a // mixed slot, auto-selects its component filaments' "Enable" + "Full Publish" toggles. void on_enable_toggle(size_t category_index); + // 0-based material slots required by enabled mixed-filament slots that would ship without + // their identity: "Enable" not checked, or enabled with neither "Full Publish" nor the + // "Type" requirement row checked. Colour is deliberately ignored (the receiver renders the + // mix from its own components' colours). Sorted, deduplicated. + std::vector unpublished_mixed_components() const; // Read-only visualization of a mixed slot's definition (a stacked ratio bar, or the // Material Ratio vs Model Height graph for a gradient), inserted above the info hint // inside the category's scroll area. From 28b325805bf21c9a494040adeccbc10053a121d6 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 28 Aug 2026 10:37:54 +0800 Subject: [PATCH 055/208] Fixed issues with remapping mixed filaments when importing published 3MF --- src/libslic3r/Model.cpp | 46 +++ src/libslic3r/Model.hpp | 11 + src/libslic3r/PresetBundle.cpp | 127 +++++++- src/libslic3r/PresetBundle.hpp | 6 + src/slic3r/GUI/Plater.cpp | 11 + .../libslic3r/test_preset_bundle_loading.cpp | 305 +++++++++++++++++- 6 files changed, 498 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 600c46e7f5..995302e220 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -3598,6 +3598,15 @@ void FacetsAnnotation::shift_states_above(const ModelVolume &mv, EnforcerBlocker this->set(selector); } +void FacetsAnnotation::remap_states(const ModelVolume &mv, const EnforcerBlockerStateMap &state_map) +{ + if (empty()) return; + TriangleSelector selector(mv.mesh()); + selector.deserialize(m_data, false); + selector.remap_triangle_state(state_map); + this->set(selector); +} + void FacetsAnnotation::set_enforcer_block_type_limit(const ModelVolume &mv, EnforcerBlockerType max_type, EnforcerBlockerType to_delete_filament, @@ -3862,6 +3871,43 @@ bool model_has_advanced_features(const Model &model) return false; } +void remap_model_filament_slots(Model &model, const std::map &slot_relocations) +{ + if (slot_relocations.empty()) + return; + + // Paint states and the object/volume "extruder" configs store one-based slot numbers + // (see Sidebar::on_action_add_filament's insertion remap for the same encoding). + std::map one_based_slots; + for (const auto &[from, to] : slot_relocations) + one_based_slots.emplace(from + 1, to + 1); + + EnforcerBlockerStateMap paint_state_map; + for (size_t state = 0; state < paint_state_map.size(); ++state) + paint_state_map[state] = EnforcerBlockerType(state); + for (const auto &[one_based_from, one_based_to] : one_based_slots) { + assert(one_based_from >= 0 && size_t(one_based_from) < paint_state_map.size()); + assert(one_based_to > 0 && size_t(one_based_to) < paint_state_map.size()); + paint_state_map[size_t(one_based_from)] = EnforcerBlockerType(one_based_to); + } + + auto remap_extruder_config = [&one_based_slots](ModelConfig &config) -> bool { + const auto it = config.has("extruder") ? one_based_slots.find(config.extruder()) : one_based_slots.end(); + if (it == one_based_slots.end()) + return false; + config.set("extruder", it->second); + return true; + }; + + for (ModelObject *object : model.objects) { + remap_extruder_config(object->config); + for (ModelVolume *volume : object->volumes) { + remap_extruder_config(volume->config); + volume->mmu_segmentation_facets.remap_states(*volume, paint_state_map); + } + } +} + #ifndef NDEBUG // Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique. void check_model_ids_validity(const Model &model) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 6834c7a59b..8da1340fa9 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -745,6 +745,10 @@ public: // Shift painted filament indices >= threshold by delta. Used when a physical filament is // inserted ahead of existing slots (mixed-color slots are kept at the end of the list). void shift_states_above(const ModelVolume &mv, EnforcerBlockerType threshold, int delta); + // Relabel painted filament indices according to state_map (old state value -> new state + // value; untouched states keep their identity). Used when published-3MF import relocates + // mixed-filament definitions onto new slot numbers. + void remap_states(const ModelVolume &mv, const EnforcerBlockerStateMap &state_map); indexed_triangle_set get_facets_strict(const ModelVolume& mv, EnforcerBlockerType type) const; bool has_facets(const ModelVolume& mv, EnforcerBlockerType type) const; bool empty() const { return m_data.triangles_to_split.empty(); } @@ -1790,6 +1794,13 @@ bool model_has_multi_part_objects(const Model &model); // If the model has advanced features, then it cannot be processed in simple mode. bool model_has_advanced_features(const Model &model); +// Remap the model's filament-slot references after a published-3MF import relocated +// mixed-filament definitions onto new slot numbers: object/volume "extruder" configs and +// multi-material color-painting states (paint state stores the one-based slot number). +// slot_relocations maps the author's zero-based slot number to its final zero-based slot; +// entries are applied simultaneously (no chained lookups), untouched slots keep everything. +void remap_model_filament_slots(Model &model, const std::map &slot_relocations); + #ifndef NDEBUG // Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique. void check_model_ids_validity(const Model &model); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 855aea9e0c..b6b816b587 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -14,6 +14,7 @@ #include "Utils.hpp" #include "LocalesUtils.hpp" #include "Model.hpp" +#include "TriangleSelector.hpp" #include "libslic3r_version.h" #include @@ -4871,6 +4872,49 @@ static std::map> filament_preset {{"Bambu PETG HF @BBL H2D 0.6 nozzle", "Bambu PETG HF @BBL H2D 0.8 nozzle"}, {"Bambu ASA @BBL H2D 0.6 nozzle", "Bambu ASA @BBL H2D 0.8 nozzle"}}}}; +// Relocate the per-slot cells of one mixed-filament project vector inside the imported +// config, applying every authored-slot -> destination move at once. Each move reads its +// source cell from a frozen snapshot of the config's current cells, so relocations never +// cross-contaminate when an earlier destination overlaps a later source (adjacent published +// tail mixes relocate onto consecutive slots). Cells the snapshot lacks degrade to +// empty/false defaults - the missing-data handling in the material pass reports them +// downstream. Left-behind source cells stay as-is: nothing else consumes the imported config +// at those indices in published mode. +static void apply_mixed_config_relocations(DynamicPrintConfig& config, + const std::string& key, + const std::vector>& moves) +{ + ConfigOption* opt = config.optptr(key); + if (opt == nullptr || moves.empty()) + return; + std::unique_ptr snapshot(opt->clone()); + switch (opt->type()) { + case coBools: { + auto* live = static_cast(opt); + const auto* frozen = static_cast(snapshot.get()); + for (const auto [from, to] : moves) { + const unsigned char cell = from < frozen->values.size() ? frozen->values[from] : 0; + if (live->values.size() <= to) + live->values.resize(to + 1, 0); + live->values[to] = cell; + } + break; + } + case coStrings: { + auto* live = static_cast(opt); + const auto* frozen = static_cast(snapshot.get()); + for (const auto [from, to] : moves) { + const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); + if (live->values.size() <= to) + live->values.resize(to + 1, std::string{}); + live->values[to] = cell; + } + break; + } + default: break; + } +} + // convert the old filament preset to new one after split static void convert_filament_preset_name(std::string& machine_name, std::string& filament_name) { @@ -5379,12 +5423,87 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, if (entry.slot >= 0) grow_target = std::max(grow_target, size_t(entry.slot) + 1); } + // Mixed-filament definitions live in project-level virtual slots, so applying one + // positionally onto a receiver slot that holds a real, physical filament would + // silently convert hardware-backed state into a virtual mix. Compute each mixed + // entry's destination before anything consumes entry.slot (growth, seeding, + // de-aliasing, the overlay below): + // - a definition landing on a receiver slot that already carries a mixed + // definition keeps its place (a like-for-like override of a virtual slot); + // - everything else goes through one monotone append counter preserving author + // order: dest = max(authored, next_free). With a receiver shorter than the + // publish this keeps the authored positions intact; past them (or around a + // collision with a real filament) the mixes pack onto consecutive fresh slots + // AFTER every positional (real-filament) territory. The definition's cells are + // shifted inside the file-side per-slot mixed arrays so they stay readable + // from the new index. No existing slot changes meaning. + // - destinations are also capped: appends past the extruder limit are dropped + // and reported instead of being forced onto a physical filament. + const std::set& mixed_definitions = publish_mixed_keys(); + auto is_mixed_definition = [&mixed_definitions](const PublishedMaterialEntry& entry) { + return std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { + return mixed_definitions.count(publish_base_key(key)) != 0; + }); + }; + size_t next_free_slot = this->filament_presets.size(); + bool any_mixed_relocated = false; + // All authored-slot -> destination moves decided by this pass, applied to the + // incoming config in one batched snapshot step below (an earlier move's + // destination can overlap a later move's source: adjacent tail mixes relocate + // onto consecutive slots, so incremental in-place shifts would overwrite a + // definition that has not been moved yet). + std::vector> mixed_moves; + for (auto entry_it = published_config->material_keys.begin(); entry_it != published_config->material_keys.end();) { + PublishedMaterialEntry& entry = *entry_it; + if (entry.slot < 0 || !is_mixed_definition(entry) || + // Like-for-like override of a virtual receiver slot (bounds-checked). + this->is_mixed_filament(size_t(entry.slot))) { + ++entry_it; + continue; + } + if (std::max(size_t(entry.slot), next_free_slot) >= size_t(EnforcerBlockerType::ExtruderMax)) { + // No free virtual slot left: report instead of destroying a real filament. + const std::string material_label = !entry.filament_id.empty() ? entry.filament_id : + !entry.publish_type_value.empty() ? entry.publish_type_value : + entry.filament_type; + published_config->skipped_keys.emplace_back("material:" + material_label + + " (mixed filament definition: filament slot limit reached)"); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot + << " could not be placed: all " << next_free_slot << " slots exhausted"; + entry_it = published_config->material_keys.erase(entry_it); + continue; + } + const int authored_slot = entry.slot; + const int dest_slot = int(std::max(size_t(authored_slot), next_free_slot)); + next_free_slot = size_t(dest_slot) + 1; + if (dest_slot == authored_slot) + // Uncontended fresh tail slot: the definition is already readable there. + ++entry_it; + else { + entry.slot = dest_slot; + any_mixed_relocated = true; + mixed_moves.emplace_back(size_t(authored_slot), size_t(entry.slot)); + published_config->mixed_slot_relocations.emplace(authored_slot, entry.slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(authored_slot) + " -> slot " + + std::to_string(entry.slot) + + ": mixed filament relocated (would have replaced a physical filament)"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated mixed filament slot " << authored_slot + << " -> " << entry.slot; + ++entry_it; + } + } + if (!mixed_moves.empty()) + for (const std::string& mixed_key : mixed_definitions) + apply_mixed_config_relocations(config, mixed_key, mixed_moves); if (has_published_entries) { // Defensive cap: growth never exceeds the file's own filament count. The // receiver's current slot count is a floor: neither the preset list nor the // project vectors are ever shrunk, even when the file carries fewer filaments - // than the receiver has slots. - const size_t target_slots = std::max(this->filament_presets.size(), std::min(grow_target, num_filaments)); + // than the receiver has slots. Relocated mixed entries legitimately land past + // the file's own slot count (virtual slots consume no nozzle or tray), so + // their destinations lift the ceiling explicitly. + const size_t target_slots = std::max({this->filament_presets.size(), std::min(grow_target, num_filaments), + any_mixed_relocated ? next_free_slot : size_t(0)}); // Slots carrying published content, steering the initial preset selection of // newly grown slots. std::set published_slots; @@ -5999,9 +6118,7 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // A mixed-definition entry carries the mix's blended colour for the // swatch only: never write it into the slot's (possibly shared) preset // config, only into the project-level colour arrays. - const bool is_mixed_entry = std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { - return publish_mixed_keys().count(publish_base_key(key)) != 0; - }); + const bool is_mixed_entry = is_mixed_definition(entry); if (!is_mixed_entry && recv != nullptr) { // Create the key when the target preset lacks it: the colour is a // requirement, not an override. diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 67ff28b81e..c85b96a92a 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -8,6 +8,7 @@ #include "enum_bitmask.hpp" #include +#include #include #include #include @@ -186,6 +187,11 @@ struct PublishedConfig // Human-readable notices of the slot material replacements performed while loading a // published project, for the load notification. std::vector material_replacements; + // Mixed-filament entries that had to be moved off their authored slot on load (a real, + // physical filament occupied it): maps the author's zero-based slot number to its final + // zero-based slot. Consumers (e.g. model extruder/color-painting remapping) use this to + // keep geometry references pointing at the relocated definitions. + std::map mixed_slot_relocations; }; // Bundle of Print + Filament + Printer presets. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fee75dee67..3cadcae4b9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9053,6 +9053,17 @@ std::vector Plater::priv::load_files(const std::vector& input_ preset_bundle->load_config_model(filename.string(), std::move(config), file_version, &published_config); + // Mixed-filament definitions that collided with one of the + // receiver's real slots were relocated during the preset load. + // Re-point the freshly parsed model's extruder references and + // color painting from the author's slot numbers to where each + // definition landed, so volumes colored with a mix follow it. + // Runs before the objects are handed over to the plater below. + if (load_model && !published_config.mixed_slot_relocations.empty()) + Slic3r::remap_model_filament_slots(model, published_config.mixed_slot_relocations); + + // BBS: notify the user about published settings that could not be applied. + // BBS: notify the user about published settings that could not be applied. if (!published_config.skipped_keys.empty()) { NotificationManager* notify_manager = q->get_notification_manager(); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 53a40764d5..931f9e96c3 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -5,6 +5,8 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/AppConfig.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/TriangleMesh.hpp" #include "test_utils.hpp" @@ -2577,8 +2579,9 @@ TEST_CASE("Published 3MF applies a mixed filament definition onto the receiver's return config; }; - // A receiver that already carries the mix slot at index 2 (e.g. a two-physical-plus-one-mix - // project with the same layout). + // A receiver that already carries the mix slot at index 2 as an actual mixed slot (e.g. a + // two-physical-plus-one-mix project with the same layout): the incoming definition is a + // like-for-like override of the virtual slot and applies in place without relocation. { PresetBundle bundle; Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); @@ -2587,8 +2590,12 @@ TEST_CASE("Published 3MF applies a mixed filament definition onto the receiver's petg.config.opt_string("filament_type", 0u) = "PETG"; bundle.filament_presets = { "My PLA", "My PETG", "My PLA" }; - // Grow the receiver's project arrays to 3 slots first, as set_num_filaments would. + // Grow the receiver's project arrays to 3 slots first, as set_num_filaments would, + // then mark the third slot as the receiver's own mixed filament. bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.5,0.5"; PublishedMaterialEntry mix; mix.filament_type = "PLA"; @@ -2636,6 +2643,8 @@ TEST_CASE("Published 3MF applies a mixed filament definition onto the receiver's CHECK_FALSE(is_mixed[1]); // Nothing skipped: every serialized mixed key was applied. CHECK(pub.skipped_keys.empty()); + // Like-for-like override: no slot was relocated. + CHECK(pub.material_replacements.empty()); } // A receiver with fewer slots: the slot is grown and seeded before the definition applies. @@ -2701,6 +2710,228 @@ TEST_CASE("Published 3MF reports an unappliable mixed filament definition as ski CHECK(contains_key(pub.skipped_keys, "material: (filament_mixed_sublayer_ratios)")); } +// A published mixed filament must never convert one of the receiver's real, physical slots +// into a virtual mix: definitions that collide with a physical slot are relocated past every +// positional (real-filament) destination, while ones colliding with an existing mixed slot +// override it in place. +TEST_CASE("Published 3MF relocates a mixed filament instead of overwriting a physical slot", "[Preset][Bundle][Published]") +{ + // An author project with slots whose last slot is a mixed filament. + auto make_file_config = [](size_t num_author_slots, size_t num_tail_mixes = 1) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + std::vector diameters(num_author_slots, 1.75); + std::vector self_index; + std::vector variants; + std::vector types; + for (size_t i = 0; i < num_author_slots; ++i) { + self_index.push_back(int(i + 1)); + variants.emplace_back("Direct Drive Standard"); + types.push_back(i % 2 == 0 ? "PLA" : "PETG"); + } + config.opt("filament_diameter")->values = diameters; + config.opt("filament_self_index")->values = self_index; + config.opt("filament_extruder_variant")->values = variants; + config.opt("filament_colour")->values = { "#FF0000", "#00AA00", "#0000FF", "#FFFF00", "#800080" }; + config.opt("filament_colour")->values.resize(num_author_slots, "#808080"); + config.opt("filament_type")->values = types; + config.opt("filament_vendor")->values.assign(num_author_slots, "Generic"); + config.opt("filament_ids")->values.resize(num_author_slots); + // The last author slots are mixed ones (components differ per slot so + // the definitions are distinguishable after relocation). + const size_t first_mix_slot = num_author_slots - num_tail_mixes; + config.opt("filament_is_mixed")->values.assign(num_author_slots, 0); + config.opt("filament_mixed_components")->values.assign(num_author_slots, ""); + config.opt("filament_mixed_sublayer_ratios")->values.assign(num_author_slots, ""); + for (size_t i = first_mix_slot; i < num_author_slots; ++i) { + config.opt("filament_is_mixed")->values[i] = 1; + config.opt("filament_mixed_components")->values[i] = + i % 2 == 0 ? std::string("1,2") : std::string("1,3"); + config.opt("filament_mixed_sublayer_ratios")->values[i] = + i % 2 == 0 ? std::string("0.6,0.4") : std::string("0.3,0.7"); + } + return config; + }; + + // The reported bug: an author publishes with physical filaments on slots 1-2 and a mixed + // filament on slot 5; the receiver runs five real filaments of his own. Slot 5 must stay + // untouched and the mix lands as a newly appended virtual slot 6. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.slot = 4; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew by exactly one extra virtual slot. + REQUIRE(bundle.filament_presets.size() == 6); + // All five physical slots kept their meaning: no mixed flag, untouched names/colours. + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 6); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK_FALSE(is_mixed[2]); + CHECK_FALSE(is_mixed[3]); + CHECK_FALSE(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[4] == "My PLA"); + // The definition itself is readable at the new index. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 6); + CHECK(components[5] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 6); + CHECK(ratios[5] == "0.6,0.4"); + // The blended colour seeds the swatch of the new slot only. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 6); + CHECK(colour[5] == "#800080"); + // The relocation is surfaced to the user through the post-import notice (the de-alias + // pass may contribute further messages, so presence is asserted, not the count). + bool relocated_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 4 -> slot 5") != std::string::npos) + relocated_reported = true; + CHECK(relocated_reported); + CHECK(pub.skipped_keys.empty()); + } + + // A definition colliding with the receiver's own mixed filament is overridden in place: + // nothing grows, nothing is reported as moved. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.9,0.1"; + + PublishedMaterialEntry mix; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(3); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 3); + CHECK(ratios[2] == "0.6,0.4"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); + } + + // Author publishes four physical filaments plus two mixed ones on slots 5 and 6; the + // receiver runs five real filaments. Both mixes relocate onto consecutive fresh slots, + // preserving their author order (slot 5 -> slot 6, slot 6 -> slot 7); no receiver slot is + // converted into a virtual mix. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + auto make_mix_entry = [](int authored_slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = authored_slot; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + return entry; + }; + PublishedMaterialEntry mix_a = make_mix_entry(4, "#800080"); + PublishedMaterialEntry mix_b = make_mix_entry(5, "#FF69B4"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix_a, mix_b }; + DynamicPrintConfig config = make_file_config(6, 2); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Two fresh virtual slots were appended. + REQUIRE(bundle.filament_presets.size() == 7); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 7); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[5]); + CHECK(is_mixed[6]); + // The definitions follow their author order. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 7); + CHECK(components[5] == "1,2"); + CHECK(components[6] == "1,3"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 7); + CHECK(ratios[5] == "0.6,0.4"); + CHECK(ratios[6] == "0.3,0.7"); + // The five real slots kept their colours; each mix's blended colour seeded its new slot. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 7); + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), colour.begin())); + CHECK(colour[5] == "#800080"); + CHECK(colour[6] == "#FF69B4"); + // Both relocations are reported with the correct mapping. + bool a_reported = false, b_reported = false; + for (const std::string &message : pub.material_replacements) { + if (message.find("slot 4 -> slot 5") != std::string::npos) + a_reported = true; + if (message.find("slot 5 -> slot 6") != std::string::npos) + b_reported = true; + } + CHECK(a_reported); + CHECK(b_reported); + CHECK(pub.skipped_keys.empty()); + // The relocation table is exposed for the model-reference remapping. + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(4) == 5); + CHECK(pub.mixed_slot_relocations.at(5) == 6); + } +} + // A single-extruder receiver collapses the author's per-extruder printer slots onto its single // slot: the first serialized variant of a base key is applied, the remaining variants of that // base key are reported as skipped. @@ -2980,3 +3211,71 @@ TEST_CASE("Sizing down to the nozzle count plus mixes is what eats the mixed tai CHECK(bundle.project_config.option("filament_mixed_components")->values[5] == "1,2"); } } + +// After a published-3MF import relocated mixed-filament definitions, the freshly loaded +// model's slot references must follow: object/volume "extruder" configs and multi-material +// color-painting states (which store the one-based slot number) are re-pointed to where each +// definition landed; everything else keeps its state. +TEST_CASE("remap_model_filament_slots repoints extruder configs and color painting", "[Preset][Bundle][Published]") +{ + auto make_model = [] { + Model model; + ModelObject *object_a = model.add_object(); + object_a->name = "relocated mix"; + ModelVolume *vol_a = object_a->add_volume(make_cube(10., 10., 10.)); + vol_a->config.set_key_value("extruder", new ConfigOptionInt(5)); // author slot 5 (0-based 4) + // Author painted one facet with the mix (slot 5) and another with a physical (slot 2). + { + TriangleSelector selector(vol_a->mesh()); + selector.set_facet(0, EnforcerBlockerType(5)); + selector.set_facet(1, EnforcerBlockerType(2)); + vol_a->mmu_segmentation_facets.set_data(selector.serialize()); + } + // A second object that does not reference the relocated slot at all. Painted with a + // real, non-relocated state (NONE is never serialized: an unsplit triangle without a + // state is the unpainted default and is skipped by TriangleSelector::serialize()). + ModelObject *object_b = model.add_object(); + object_b->name = "untouched"; + object_b->config.set_key_value("extruder", new ConfigOptionInt(1)); + ModelVolume *vol_b = object_b->add_volume(make_cube(5., 5., 5.)); + vol_b->config.set_key_value("extruder", new ConfigOptionInt(2)); + { + TriangleSelector selector(vol_b->mesh()); + selector.set_facet(0, EnforcerBlockerType(2)); + vol_b->mmu_segmentation_facets.set_data(selector.serialize()); + } + return model; + }; + + const std::map relocations = {{4, 5}}; + + Model model = make_model(); + Slic3r::remap_model_filament_slots(model, relocations); + + const ModelVolume *vol_a = model.objects[0]->volumes.front(); + CHECK(vol_a->config.extruder() == 6); // author slot 5 -> final slot 6 + // Painted states follow: the mix facet moved 5 -> 6, the physical one is untouched. + REQUIRE(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(6))); + REQUIRE_FALSE(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(5))); + CHECK(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(2))); + + const ModelVolume *vol_b = model.objects[1]->volumes.front(); + CHECK(vol_b->config.extruder() == 2); + // The untouched volume's paint (a non-relocated state) survives as-is. + CHECK(TriangleSelector::has_facets(vol_b->mmu_segmentation_facets.get_data(), EnforcerBlockerType(2))); + + // The mapping is applied simultaneously: each entry reads the original slot number, so + // relocating onto another relocated-from slot number must not chase chains. With the + // 0-based relocations {3->4, 4->6} the 1-based config map is {4->5, 5->7}: a volume on + // 1-based slot 4 lands on 5 and does NOT continue to 7. + Model chained = make_model(); + chained.objects[0]->volumes.front()->config.set_key_value("extruder", new ConfigOptionInt(4)); + Slic3r::remap_model_filament_slots(chained, std::map{{3, 4}, {4, 6}}); + CHECK(chained.objects[0]->volumes.front()->config.extruder() == 5); + // The chained model's paint follows its own single-step mapping: painted state 5 -> 7, + // and nothing lands back on 5. + CHECK(TriangleSelector::has_facets(chained.objects[0]->volumes.front()->mmu_segmentation_facets.get_data(), + EnforcerBlockerType(7))); + CHECK_FALSE(TriangleSelector::has_facets(chained.objects[0]->volumes.front()->mmu_segmentation_facets.get_data(), + EnforcerBlockerType(5))); +} From 1c09ef14a55c60abd996e5ce3c269f75dbbdd6d6 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 28 Aug 2026 12:57:00 +0800 Subject: [PATCH 056/208] Update translations. Update warning messages to be more user friendly. Update gradient color chips in publish dialog --- localization/i18n/OrcaSlicer.pot | 153 ++++++++++++++++++- localization/i18n/ca/OrcaSlicer_ca.po | 153 ++++++++++++++++++- localization/i18n/cs/OrcaSlicer_cs.po | 153 ++++++++++++++++++- localization/i18n/de/OrcaSlicer_de.po | 153 ++++++++++++++++++- localization/i18n/en/OrcaSlicer_en.po | 153 ++++++++++++++++++- localization/i18n/es/OrcaSlicer_es.po | 153 ++++++++++++++++++- localization/i18n/eu/OrcaSlicer_eu.po | 153 ++++++++++++++++++- localization/i18n/fr/OrcaSlicer_fr.po | 153 ++++++++++++++++++- localization/i18n/hu/OrcaSlicer_hu.po | 153 ++++++++++++++++++- localization/i18n/it/OrcaSlicer_it.po | 153 ++++++++++++++++++- localization/i18n/ja/OrcaSlicer_ja.po | 153 ++++++++++++++++++- localization/i18n/ko/OrcaSlicer_ko.po | 153 ++++++++++++++++++- localization/i18n/lt/OrcaSlicer_lt.po | 153 ++++++++++++++++++- localization/i18n/nl/OrcaSlicer_nl.po | 153 ++++++++++++++++++- localization/i18n/pl/OrcaSlicer_pl.po | 153 ++++++++++++++++++- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 153 ++++++++++++++++++- localization/i18n/ru/OrcaSlicer_ru.po | 153 ++++++++++++++++++- localization/i18n/sv/OrcaSlicer_sv.po | 153 ++++++++++++++++++- localization/i18n/th/OrcaSlicer_th.po | 153 ++++++++++++++++++- localization/i18n/tr/OrcaSlicer_tr.po | 153 ++++++++++++++++++- localization/i18n/uk/OrcaSlicer_uk.po | 153 ++++++++++++++++++- localization/i18n/vi/OrcaSlicer_vi.po | 153 ++++++++++++++++++- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 153 ++++++++++++++++++- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 153 ++++++++++++++++++- src/slic3r/GUI/PublishSettingsDialog.cpp | 159 ++++++++++++++++---- src/slic3r/GUI/PublishSettingsDialog.hpp | 19 ++- 26 files changed, 3796 insertions(+), 54 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index c1dc798ff3..b9da59451f 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2762,6 +2762,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3039,6 +3042,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -7409,6 +7415,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, possible-boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7529,12 +7538,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, possible-c-format, possible-boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7712,6 +7745,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7906,6 +7945,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -9066,6 +9117,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -9111,18 +9165,58 @@ msgstr "" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -11548,6 +11642,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11584,6 +11681,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -13289,6 +13389,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -15872,6 +16014,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16899,6 +17047,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 7070c885be..74ed04532c 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -3015,6 +3015,9 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusiona amb" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Elimina aquest filament" @@ -3316,6 +3319,9 @@ msgstr "Muntatge" msgid "Merge parts to an object" msgstr "Fusionar les peces en un objecte" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Afegir capes" @@ -7962,6 +7968,9 @@ msgstr "Personalitzar la placa actual" msgid "The %s nozzle can not print %s." msgstr "El broquet %s no pot imprimir %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No es recomana barrejar %1% amb %2% en la impressió.\n" @@ -8087,6 +8096,21 @@ msgstr "Sincronitzar la llista de filaments des d'AMS" msgid "Set filaments to use" msgstr "Configurar els filaments a utilitzar" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Cercar placa, objecte i peça." @@ -8094,6 +8118,15 @@ msgstr "Cercar placa, objecte i peça." msgid "Pellets" msgstr "Pèl·lets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "En completar l'operació, el projecte %s es tancarà i es crearà un nou projecte." @@ -8287,6 +8320,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objecte de múltiples peces detectat" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar aquests fitxers com un sol objecte amb diverses peces?\n" @@ -8500,6 +8539,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronitza ara" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Podeu mantenir els perfils modificats al projecte nou o descartar-los" @@ -9803,6 +9854,9 @@ msgstr "Gerro en Espiral" msgid "First layer filament sequence" msgstr "Seqüència d'impressió de la primera capa" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Per Capa" @@ -9849,18 +9903,58 @@ msgstr "Anar a la pàgina web" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12503,6 +12597,9 @@ msgstr "Si tot i així voleu imprimir, podeu activar l'opció a Preferències / msgid "No extrusions under current settings." msgstr "No hi ha extrusions a la configuració actual." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "El mode suau de timelapse no està permès quan la seqüència \"Per objecte\" està habilitada." @@ -12539,6 +12636,9 @@ msgstr "Potser voleu reduir la mida del model o canviar la configuració d'impre msgid "Variable layer height is not supported with Organic supports." msgstr "Alçada de Capa Variable no és compatible amb suports Orgànics." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "És possible que els diferents diàmetres de broquet i els diferents diàmetres de filament no funcionin bé quan la torre principal està activada. És molt experimental, així que si us plau, procediu amb precaució." @@ -14610,6 +14710,48 @@ msgstr "Material de suport" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de suport s'utilitza habitualment per imprimir interfície de suport i suport" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament imprimible" @@ -17520,6 +17662,12 @@ msgstr "" "\n" "L'establiment d'un valor en la quantitat de retractació abans de l'esborrat es realitzarà qualsevol retracció en excés abans de la neteja, sinó es realitzarà després." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La Torre de Purga es pot utilitzar per netejar els residus al broquet i estabilitzar la pressió de la cambra dins del broquet, per tal d'evitar defectes d'aparença en imprimir objectes." @@ -18611,6 +18759,9 @@ msgstr "La generació de malla del fitxer del model ha fallat o la forma no és msgid "The supplied file couldn't be read because it's empty." msgstr "El fitxer subministrat no s'ha pogut llegir perquè està buit" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fitxer desconegut. El fitxer d'entrada ha de tenir extensió .stl, .obj, .amf( .xml )." diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 889b659a0b..28396811c5 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -2977,6 +2977,9 @@ msgstr "Upravit" msgid "Merge with" msgstr "Sloučit s" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Smazat tento filament" @@ -3279,6 +3282,9 @@ msgstr "Sestava" msgid "Merge parts to an object" msgstr "Sloučit části do objektu" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Přidat vrstvy" @@ -7927,6 +7933,9 @@ msgstr "Přizpůsobit aktuální desku" msgid "The %s nozzle can not print %s." msgstr "Tryska %s nemůže tisknout %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Míchání %1% s %2% při tisku není doporučeno.\n" @@ -8056,12 +8065,36 @@ msgstr "Synchronizovat seznam filamentů z AMS" msgid "Set filaments to use" msgstr "Nastavit používané filamenty" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Hledat desku, objekt a díl." msgid "Pellets" msgstr "Pelety" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po dokončení operace bude projekt %s uzavřen a bude vytvořen nový projekt." @@ -8249,6 +8282,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Detekován vícedílný objekt" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Načíst tyto soubory jako jeden objekt s více částmi?\n" @@ -8459,6 +8498,18 @@ msgstr "" msgid "Sync now" msgstr "Synchronizovat nyní" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Upravené předvolby můžete ponechat v novém projektu nebo je zahodit" @@ -9751,6 +9802,9 @@ msgstr "Spirálová váza" msgid "First layer filament sequence" msgstr "Pořadí filamentů v první vrstvě" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Podle vrstvy" @@ -9797,18 +9851,58 @@ msgstr "Přejít na webovou stránku" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12484,6 +12578,9 @@ msgstr "Pokud chcete přesto tisknout, můžete povolit možnost v Nastavení / msgid "No extrusions under current settings." msgstr "Při aktuálním nastavení nejsou žádné extruze." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Plynulý režim časosběru není podporován, pokud je povoleno pořadí tisku „podle objektu“." @@ -12520,6 +12617,9 @@ msgstr "Možná budete chtít zmenšit velikost modelu nebo změnit aktuální n msgid "Variable layer height is not supported with Organic supports." msgstr "Proměnná výška vrstvy není podporována s organickými podporami." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Různé průměry trysek a filamentu nemusí správně fungovat, pokud je povolena základní věž. Jedná se o velmi experimentální funkci, proto pokračujte opatrně." @@ -14578,6 +14678,48 @@ msgstr "Podpůrný materiál" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Podpůrný materiál se běžně používá pro tisk podpěr a rozhraní podpěr." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Tisknutelný filament" @@ -17465,6 +17607,12 @@ msgstr "" "\n" "Nastavení hodnoty v parametru množství retrakce před očištěním níže provede případnou dodatečnou retrakci před očištěním, jinak bude provedena po něm." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Čistící věž lze použít k odstranění zbytků materiálu na trysce a ke stabilizaci tlaku v komoře trysky, aby se předešlo vizuálním vadám při tisku objektů." @@ -18538,6 +18686,9 @@ msgstr "Síťování modelového souboru selhalo nebo nebyl nalezen platný tvar msgid "The supplied file couldn't be read because it's empty." msgstr "Zadaný soubor nelze načíst, protože je prázdný." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Neznámý formát souboru. Vstupní soubor musí mít příponu .stl, .obj nebo .amf(.xml)." diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index fe17251f32..0e3fc99a39 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -2917,6 +2917,9 @@ msgstr "Bearbeiten" msgid "Merge with" msgstr "Zusammenführen mit" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Diesen Filament löschen" @@ -3216,6 +3219,9 @@ msgstr "Zusammenbau" msgid "Merge parts to an object" msgstr "Teile zu einem Objekt zusammenführen" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Schichten hinzufügen" @@ -7797,6 +7803,9 @@ msgstr "Aktuelle Platte anpassen" msgid "The %s nozzle can not print %s." msgstr "Die %s Düse kann %s nicht drucken." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mischen von %1% mit %2% im Druck wird nicht empfohlen.\n" @@ -7922,6 +7931,21 @@ msgstr "Filamentliste von AMS synchronisieren" msgid "Set filaments to use" msgstr "Zu verwendende Filamente einstellen" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Suche Platte, Objekt und Teil." @@ -7929,6 +7953,15 @@ msgstr "Suche Platte, Objekt und Teil." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Nach Abschluss Ihrer Operation wird das %s-Projekt geschlossen und ein neues Projekt erstellt." @@ -8118,6 +8151,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Mehrteiliges Objekt erkannt" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Diese Dateien als ein einziges Objekt mit mehreren Teilen laden?\n" @@ -8331,6 +8370,18 @@ msgstr "" msgid "Sync now" msgstr "Jetzt synchronisieren" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + # AI Translated msgid "You can keep the modified presets for the new project or discard them" msgstr "Sie können die geänderten Profile für das neue Projekt beibehalten oder sie verwerfen" @@ -9586,6 +9637,9 @@ msgstr "Vasenmodus" msgid "First layer filament sequence" msgstr "Erste Filament-Schichtsequenz" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Nach Schicht" @@ -9631,18 +9685,58 @@ msgstr "Zu einer Website springen" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12223,6 +12317,9 @@ msgstr "Wenn Sie trotzdem drucken möchten, können Sie die Option in Einstellun msgid "No extrusions under current settings." msgstr "Keine Extrusion unter den aktuellen Einstellungen." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Der gewählte Zeitraffermodus wird nicht unterstützt, wenn die Sequenz \"nach Objekt\" aktiviert ist." @@ -12259,6 +12356,9 @@ msgstr "Sie möchten möglicherweise die Größe Ihres Modells reduzieren oder d msgid "Variable layer height is not supported with Organic supports." msgstr "Variable Schichthöhe wird nicht mit organischen Stützstrukturen unterstützt." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Unterschiedliche Düsendurchmesser und unterschiedliche Filamentdurchmesser funktionieren möglicherweise nicht gut, wenn der Reinigungsturm aktiviert ist. Es ist sehr experimentell, also gehen Sie bitte vorsichtig vor." @@ -14276,6 +14376,48 @@ msgstr "Stützmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Stützmaterial wird üblicherweise zum Drucken von Stützen und Stütz-Schnittstellen verwendet." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament druckbar" @@ -17108,6 +17250,12 @@ msgstr "" "\n" "Wenn ein Wert in der Einstellung \"Rückzugsmenge vor dem Wischen\" unten angegeben ist, wird ein überschüssiger Rückzug vor dem Wischen ausgeführt, ansonsten wird er danach ausgeführt." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Der Reinigungsturm kann verwendet werden, um Rückstände auf der Düse zu entfernen und den Kammerdruck im Inneren der Düse zu stabilisieren, um Erscheinungsdefekte beim Drucken von Objekten zu vermeiden." @@ -18178,6 +18326,9 @@ msgstr "Das Erstellen eines Netzes aus der Modelldatei ist fehlgeschlagen oder e msgid "The supplied file couldn't be read because it's empty." msgstr "Die angegebene Datei konnte nicht gelesen werden, weil sie leer ist." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Unbekanntes Dateiformat: Die Eingabedatei muss die Endung .stl, .obj oder .amf(.xml) haben." diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0da5e9d2b5..8a679894fa 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -2758,6 +2758,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3035,6 +3038,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -7405,6 +7411,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7525,12 +7534,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7708,6 +7741,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7902,6 +7941,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -9062,6 +9113,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -9107,18 +9161,58 @@ msgstr "" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -11544,6 +11638,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11580,6 +11677,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -13285,6 +13385,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -15868,6 +16010,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16895,6 +17043,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index ded492a284..8a435af73e 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -2832,6 +2832,9 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusionar con" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Eliminar este filamento" @@ -3113,6 +3116,9 @@ msgstr "Ensamblaje" msgid "Merge parts to an object" msgstr "Fusionar piezas en un objeto" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "Añadir capas" @@ -7619,6 +7625,9 @@ msgstr "Personalizar cama actual" msgid "The %s nozzle can not print %s." msgstr "La boquilla %s no puede imprimir %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No se recomienda mezclar %1% con %2% en la impresión.\n" @@ -7741,12 +7750,36 @@ msgstr "Sicronizar filamentos de la lista AMS" msgid "Set filaments to use" msgstr "Elegir filamentos para usar" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Buscar cama, objeto y parte." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completar la operación, el proyecto %s se cerrará y se creará un nuevo proyecto." @@ -7931,6 +7964,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multipieza detectado" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "¿Cargar estos archivos como un objeto único con múltiples piezas?\n" @@ -8135,6 +8174,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar ahora" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Puedes mantener los perfiles modificados en el nuevo proyecto o descartarlos" @@ -9361,6 +9412,9 @@ msgstr "Vaso en espiral" msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Por Capa" @@ -9406,18 +9460,58 @@ msgstr "Ir a la página web" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -11929,6 +12023,9 @@ msgstr "Si aún así quieres imprimir, puedes activar la opción en Preferencias msgid "No extrusions under current settings." msgstr "No hay extrusiones con los ajustes actuales." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Modo de timelapse suave no está soportado cuando la secuencia \"por objeto\" está activada." @@ -11965,6 +12062,9 @@ msgstr "Es posible que desee reducir el tamaño de su modelo o cambiar la config msgid "Variable layer height is not supported with Organic supports." msgstr "La altura de capa adaptativa no es compatible con los soportes orgánicos." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diámetros de boquillas y diámetros de filamento diferentes pueden no funcionar correctamente cuando la torre de purga está activada. Esta función es experimental, así que proceda con cautela." @@ -13954,6 +14054,48 @@ msgstr "Material de soporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de soporte se utiliza habitualmente para imprimir soportes y la interfaz de los soportes." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filamento imprimible" @@ -16753,6 +16895,12 @@ msgstr "" "\n" "Fijando un valor en la cantidad de retracción antes del purgado se realizará cualquier exceso de retracción antes del purgado, de lo contrario se realizará después." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre de purga puede utilizarse para limpiar los residuos de la boquilla y estabilizar la presión de la recámara en el interior de la boquilla, con el fin de evitar defectos visuales al imprimir objetos." @@ -17809,6 +17957,9 @@ msgstr "La generación de la malla del archivo del modelo falló o no hay una fo msgid "The supplied file couldn't be read because it's empty." msgstr "No se ha podido leer el archivo proporcionado porque está vacío." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de archivo desconocido: el archivo de entrada debe tener extensión .STL, .obj o .amf (.xml)." diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index e950ea3d2e..b0aadc66e4 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -2869,6 +2869,9 @@ msgstr "Editatu" msgid "Merge with" msgstr "Batu honekin" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Ezabatu filamentu hau" @@ -3150,6 +3153,9 @@ msgstr "Multzoa" msgid "Merge parts to an object" msgstr "Batu piezak objektu batean" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "Geruzak gehitu" @@ -7686,6 +7692,9 @@ msgstr "Pertsonalizatu uneko plaka" msgid "The %s nozzle can not print %s." msgstr "%s pitak ezin du %s inprimatu." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Ez da gomendatzen inprimatzean %1% eta %2% nahastea.\n" @@ -7808,12 +7817,36 @@ msgstr "Sinkronizatu filamentuen zerrenda AMSarekin" msgid "Set filaments to use" msgstr "Ezarri erabili beharreko filamentuak" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Bilatu plaka, objektua eta pieza." msgid "Pellets" msgstr "Pelletak" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Eragiketa amaitzean, %s proiektua itxi eta proiektu berri bat sortuko da." @@ -7998,6 +8031,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Pieza anitzeko objektua detektatu da" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Kargatu fitxategi hauek pieza anitzeko objektu bakar gisa?\n" @@ -8202,6 +8241,18 @@ msgstr "" msgid "Sync now" msgstr "Sinkronizatu orain" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Aldatutako aurrezarpenak proiektu berrirako gorde edo baztertu ditzakezu" @@ -9430,6 +9481,9 @@ msgstr "Espiral formako loreontzia" msgid "First layer filament sequence" msgstr "Lehen geruzako filamentuen sekuentzia" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Geruzaren arabera" @@ -9475,18 +9529,58 @@ msgstr "Joan web-orrira" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12032,6 +12126,9 @@ msgstr "Hala ere inprimatu nahi baduzu, aukera hau gaitu dezakezu: Hobespenak / msgid "No extrusions under current settings." msgstr "Uneko ezarpenekin ez dago estrusiorik." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Timelapsearen modu leuna ez da onartzen \"objektuka\" sekuentzia gaituta dagoenean." @@ -12068,6 +12165,9 @@ msgstr "Modeloaren tamaina txikitu edo uneko inprimatze-ezarpenak aldatu eta ber msgid "Variable layer height is not supported with Organic supports." msgstr "Geruza-altuera aldakorra ez da onartzen euskarri organikoekin." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Pitaren diametro eta filamentu-diametro desberdinek agian ez dute ondo funtzionatuko purgatze-dorrea gaituta dagoenean. Oso esperimentala da; jarraitu kontuz." @@ -14073,6 +14173,48 @@ msgstr "Euskarri-materiala" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Euskarri-materiala euskarriak eta euskarri-interfazeak inprimatzeko erabiltzen da normalean." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filamentua inprimagarria" @@ -16898,6 +17040,12 @@ msgstr "" "\n" "Beheko garbitu aurreko atzera-egite kantitatearen ezarpenean balio batezarriz gero, gehiegizko atzera-egitea garbiketa baino lehen egingo da; bestela, ondoren egingo da." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Purgatze-dorrea pitaren hondarrak garbitzeko eta pitaren barruko ganbera-presioa egonkortzeko erabil daiteke, objektuetan itxura-akatsak saihesteko." @@ -17956,6 +18104,9 @@ msgstr "Modelo-fitxategiaren sareztatzeak huts egin du edo ez dago baliozko form msgid "The supplied file couldn't be read because it's empty." msgstr "Emandako fitxategia ezin izan da irakurri hutsik dagoelako." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Fitxategi-formatu ezezaguna: sarrerako fitxategiak .stl, .obj edo .amf(.xml) luzapena izan behar du." diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 5bd15b57cd..f0085ff16d 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -2896,6 +2896,9 @@ msgstr "Éditer" msgid "Merge with" msgstr "Fusionner avec" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Supprimer ce filament" @@ -3178,6 +3181,9 @@ msgstr "Assemblé" msgid "Merge parts to an object" msgstr "Fusionner les pièces en un objet" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "Ajouter des couches" @@ -7739,6 +7745,9 @@ msgstr "Personnaliser le plateau actuel" msgid "The %s nozzle can not print %s." msgstr "La buse %s ne peut pas imprimer %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Le mélange de %1% avec %2% lors de l'impression n'est pas recommandé.\n" @@ -7864,12 +7873,36 @@ msgstr "Synchroniser la liste des filaments depuis l'AMS" msgid "Set filaments to use" msgstr "Définir les filaments à utiliser" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Recherche de plaque, d'objet et de pièce." msgid "Pellets" msgstr "Granulés" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Une fois votre opération terminée, le projet %s sera fermé et un nouveau projet sera créé." @@ -8054,6 +8087,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objet en plusieurs pièces détecté" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Charger ces fichiers en tant qu'objet unique avec plusieurs parties ?\n" @@ -8258,6 +8297,18 @@ msgstr "" msgid "Sync now" msgstr "Synchroniser maintenant" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Vous pouvez conserver les préréglages modifiés dans le nouveau projet ou les supprimer" @@ -9500,6 +9551,9 @@ msgstr "Vase spirale" msgid "First layer filament sequence" msgstr "Séquence d’impression de la première couche" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Par Couche" @@ -9545,18 +9599,58 @@ msgstr "Ouvrir la page internet" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12130,6 +12224,9 @@ msgstr "Si vous souhaitez tout de même imprimer, vous pouvez activer l’option msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Le mode fluide du timelapse n'est pas pris en charge lorsque le mode d'impression « par objet » est activé." @@ -12166,6 +12263,9 @@ msgstr "Vous devez réduire la taille de votre modèle ou modifier les paramètr msgid "Variable layer height is not supported with Organic supports." msgstr "La hauteur de couche variable n’est pas prise en charge avec les supports organiques." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Différents diamètres de buses et de filaments peuvent ne pas fonctionner correctement lorsque la tour d’amorçage est activée. Il s’agit d’un projet très expérimental, il convient donc de procéder avec prudence." @@ -14175,6 +14275,48 @@ msgstr "Supports" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Le matériau de support est généralement utilisé pour imprimer le support et les interfaces de support" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament imprimable" @@ -17003,6 +17145,12 @@ msgstr "" "\n" "Le réglage d’une valeur dans le paramètre de quantité de rétraction avant essuyage ci-dessous permet d’effectuer toute rétraction excédentaire avant l’essuyage, sinon elle sera effectuée après l’essuyage." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La tour de purge peut être utilisée pour nettoyer les résidus sur la buse et stabiliser la pression du caisson à l'intérieur de la buse afin d'éviter les défauts d'apparence lors de l'impression d'objets." @@ -18069,6 +18217,9 @@ msgstr "Le maillage d'un fichier modèle a échoué ou la forme n'est pas valide msgid "The supplied file couldn't be read because it's empty." msgstr "Le fichier fourni n'a pas pu être lu car il est vide" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fichier inconnu : le fichier d'entrée doit porter l'extension .stl, .obj ou .amf (.xml)." diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 1f8c1022bb..e6dc44afcb 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2948,6 +2948,9 @@ msgstr "Szerkesztés" msgid "Merge with" msgstr "Egyesítés ezzel" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Filament törlése" @@ -3247,6 +3250,9 @@ msgstr "Összeállítás" msgid "Merge parts to an object" msgstr "Tárgyak egyesítése egy objektummá" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Rétegek hozzáadása" @@ -7853,6 +7859,9 @@ msgstr "Aktuális tálca testreszabása" msgid "The %s nozzle can not print %s." msgstr "A(z) %s fúvóka nem tudja nyomtatni ezt: %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "A(z) %1% és %2% keverése nyomtatás közben nem ajánlott.\n" @@ -7978,12 +7987,36 @@ msgstr "Filamentlista szinkronizálása az AMS-ből" msgid "Set filaments to use" msgstr "Használni kívánt filament beállítása" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Tálca, objektum és tárgy keresése." msgid "Pellets" msgstr "Pelletek" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "A művelet befejezésekor a(z) %s projekt bezárul, majd új projekt jön létre." @@ -8172,6 +8205,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Több részből álló objektum észlelve" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Betöltöd ezeket a fájlokat több részből álló egyetlen objektumként?\n" @@ -8383,6 +8422,18 @@ msgstr "" msgid "Sync now" msgstr "Szinkronizálás most" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Megtarthatod az új projekt módosított beállításait, vagy elvetheted őket" @@ -9656,6 +9707,9 @@ msgstr "Spirál (váza)" msgid "First layer filament sequence" msgstr "Kezdőréteg filament sorrendje" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + # AI Translated msgid "By Layer" msgstr "Rétegenként" @@ -9705,18 +9759,58 @@ msgstr "Ugrás a weboldalra" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12320,6 +12414,9 @@ msgstr "Ha továbbra is szeretnél nyomtatni, engedélyezheted az opciót itt: B msgid "No extrusions under current settings." msgstr "A jelenlegi beállításokkal nincsenek extrudálások." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "A sima Timelapse nem használható, ha a nyomtatási sorrend \"Tárgyanként\"." @@ -12356,6 +12453,9 @@ msgstr "Próbáld meg csökkenteni a modell méretét vagy módosítani a jelenl msgid "Variable layer height is not supported with Organic supports." msgstr "A változó rétegmagasság nem működik az organikus támaszokkal." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Eltérő fúvókaátmérők és eltérő filamentátmérők mellett a törlőtorony nem biztos, hogy megfelelően működik. Ez nagyon kísérleti funkció, ezért körültekintően használd." @@ -14408,6 +14508,48 @@ msgstr "Támaszanyag" msgid "Support material is commonly used to print supports and support interfaces." msgstr "A támaszanyagot általában a támaszok és azok érintkező felületeinek nyomtatására használják." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament nyomtatható" @@ -17271,6 +17413,12 @@ msgstr "" "\n" "Ha az alábbi \"visszahúzási mennyiség törlés előtt\" beállításban értéket adsz meg, akkor az esetleges többletvisszahúzás a törlés előtt történik meg, különben utána." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A törlőtorony a fúvókán lévő maradék eltávolítására és a fúvóka belsejében lévő nyomás stabilizálására szolgál, hogy elkerülhetők legyenek a megjelenésbeli hibák az objektumok nyomtatásakor." @@ -18344,6 +18492,9 @@ msgstr "A modellfájl hálósítása sikertelen volt, vagy nincs érvényes alak msgid "The supplied file couldn't be read because it's empty." msgstr "A megadott fájl nem olvasható be, mert üres" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Ismeretlen fájlformátum. A bemeneti fájlnak .stl, .obj vagy .amf(.xml) kiterjesztésűnek kell lennie." diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index ac9d5531e5..9c6edebbb7 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2953,6 +2953,9 @@ msgstr "Modifica" msgid "Merge with" msgstr "Unisci con" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Elimina questo filamento" @@ -3252,6 +3255,9 @@ msgstr "Assemblaggio" msgid "Merge parts to an object" msgstr "Unisci parti in un oggetto" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Aggiungi strati" @@ -7857,6 +7863,9 @@ msgstr "Personalizza il piatto corrente" msgid "The %s nozzle can not print %s." msgstr "L'ugello %s non può stampare %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Non è consigliato miscelare %1% con %2% nella stampa.\n" @@ -7982,12 +7991,36 @@ msgstr "Sincronizza l'elenco filamenti dall'AMS" msgid "Set filaments to use" msgstr "Imposta filamenti da usare" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Cerca piatto, oggetto e parte." msgid "Pellets" msgstr "Granuli" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completamento dell'operazione, il progetto %s verrà chiuso e ne verrà creato uno nuovo." @@ -8173,6 +8206,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Rilevato oggetto in più parti" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Caricare questi file come un singolo oggetto con più parti?\n" @@ -8383,6 +8422,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronizza ora" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "È possibile conservare i profili modificati per il nuovo progetto o scartarli" @@ -9677,6 +9728,9 @@ msgstr "Vaso a spirale" msgid "First layer filament sequence" msgstr "Sequenza filamenti primo strato" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Per strato" @@ -9723,18 +9777,58 @@ msgstr "Vai alla pagina web" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12341,6 +12435,9 @@ msgstr "Se desideri comunque stampare, puoi abilitare l'opzione in Preferenze / msgid "No extrusions under current settings." msgstr "Nessuna estrusione con le impostazioni attuali." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "La modalità fluida del timelapse non è supportata quando è abilitata la sequenza \"Per oggetto\"." @@ -12377,6 +12474,9 @@ msgstr "È possibile ridurre le dimensioni del modello o modificare le impostazi msgid "Variable layer height is not supported with Organic supports." msgstr "Altezza strato adattiva non è compatibile con i Supporti organici." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Ugelli e filamenti di diverso diametro potrebbero non funzionare correttamente quando è abilitata la torre di spurgo. Questa funzione è sperimentale, quindi procedere con cautela." @@ -14426,6 +14526,48 @@ msgstr "Materiale di supporto" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Il materiale di supporto viene comunemente utilizzato per stampare supporti e interfacce di supporto." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filamento stampabile" @@ -17296,6 +17438,12 @@ msgstr "" "\n" "Impostando un valore di quantità di retrazione prima dell'impostazione di spurgo di seguito, verra eseguita qualsiasi retrazione in eccesso prima dello spurgo. Altrimenti verrà eseguita dopo." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre di spurgo può essere utilizzata per pulire i residui presenti sull'ugello e stabilizzare la pressione della camera all'interno dell'ugello, al fine di evitare difetti estetici durante la stampa." @@ -18367,6 +18515,9 @@ msgstr "La generazione della mesh del file del modello è fallita o la forma non msgid "The supplied file couldn't be read because it's empty." msgstr "Impossibile leggere il file fornito perché è vuoto" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato file sconosciuto: il file di input deve avere un'estensione .stl, .obj o .amf(.xml)." diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 55ad80089b..25d81e9ccc 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2969,6 +2969,9 @@ msgstr "編集" msgid "Merge with" msgstr "結合" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "このフィラメントを削除" @@ -3266,6 +3269,9 @@ msgstr "アセンブリ" msgid "Merge parts to an object" msgstr "パーツをオブジェクトに結合" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "積層を追加" @@ -7865,6 +7871,9 @@ msgstr "現在のプレートをカスタマイズ" msgid "The %s nozzle can not print %s." msgstr "%sノズルは%sを印刷できません。" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%と%2%を混合して印刷することは推奨されません。\n" @@ -7990,12 +7999,36 @@ msgstr "AMSと素材を同期" msgid "Set filaments to use" msgstr "フィラメントを選択" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "プレート、オブジェクト、パーツを検索。" msgid "Pellets" msgstr "ペレット" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "操作完了後、%sプロジェクトが閉じられ、新しいプロジェクトが作成されます。" @@ -8188,6 +8221,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "マルチパーツ検出" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "これらのファイルを一つのオブジェクトとしてロードしますか?\n" @@ -8401,6 +8440,18 @@ msgstr "" msgid "Sync now" msgstr "今すぐ同期" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "変更したプリセットをプロジェクト内に保存するか、破棄もできます" @@ -9699,6 +9750,9 @@ msgstr "スパイラル" msgid "First layer filament sequence" msgstr "初期レイヤーフィラメント順序" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "レイヤー別" @@ -9745,18 +9799,58 @@ msgstr "ウェブページに移動" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12381,6 +12475,9 @@ msgstr "それでも印刷する場合は、環境設定 / 制御 / スライス msgid "No extrusions under current settings." msgstr "現在の設定では造形しません" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "オブジェクト順で造形するでは、この機能を使用できません。" @@ -12417,6 +12514,9 @@ msgstr "モデルのサイズを小さくするか、現在のプリント設定 msgid "Variable layer height is not supported with Organic supports." msgstr "可変レイヤー高さはオーガニックサポートではサポートされていません。" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "ノズル径やフィラメント径が異なる場合、プライムタワーを有効にすると正しく動作しないことがあります。非常に実験的な機能ですので、慎重にお進みください。" @@ -14556,6 +14656,48 @@ msgstr "サポート材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "サポート素材は、サポート又はサポート接触面の造形によく使われます。" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "フィラメント印刷可能" @@ -17671,6 +17813,12 @@ msgstr "" "\n" "下の「ワイプ前のリトラクション量」設定に値を設定すると、超過分のリトラクションはワイプの前に行われます。それ以外の場合はワイプの後に行われます。" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "ワイプタワーは、ノズルに残った樹脂を除去し、ノズル内のチャンバー圧力を安定させることで、オブジェクト印刷時の外観不良を防ぐために使用できます。" @@ -18842,6 +18990,9 @@ msgstr "モデルファイルのメッシュ処理に失敗したか、有効な msgid "The supplied file couldn't be read because it's empty." msgstr "提供されたファイルは空であるため読み込めませんでした。" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "ファイル形式が不明です。入力ファイルの拡張子は .stl、.obj、.amf(.xml)である必要があります。" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 66ce7b49a1..3c2a65c4e7 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -2970,6 +2970,9 @@ msgstr "편집" msgid "Merge with" msgstr "병합" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "이 필라멘트 삭제" @@ -3266,6 +3269,9 @@ msgstr "조립" msgid "Merge parts to an object" msgstr "부품을 하나의 객체로 병합" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "레이어 추가" @@ -7877,6 +7883,9 @@ msgstr "사용자 정의 플레이트" msgid "The %s nozzle can not print %s." msgstr "%s 노즐은 %s 을 인쇄할 수 없습니다." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%와 %2% 혼합 출력을 권장하지 않습니다.\n" @@ -8003,12 +8012,36 @@ msgstr "AMS에서 필라멘트 목록 동기화" msgid "Set filaments to use" msgstr "사용할 필라멘트 설정" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "플레이트, 객체 및 부품을 검색합니다." msgid "Pellets" msgstr "펠릿" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "작업을 완료하면 %s 프로젝트가 닫히고 새 프로젝트가 만들어집니다." @@ -8207,6 +8240,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "여러 부품으로 구성된 객체 감지됨" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "이 파일을 여러 부품이 있는 단일 객체로 로드하시겠습니까?\n" @@ -8435,6 +8474,18 @@ msgstr "" msgid "Sync now" msgstr "지금 동기화" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "수정된 사전 설정을 새 프로젝트에 유지하거나 삭제할 수 있습니다" @@ -9789,6 +9840,9 @@ msgstr "나선형 꽃병 모드" msgid "First layer filament sequence" msgstr "첫 번째 레이어 필라멘트 순서" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "레이어별" @@ -9835,18 +9889,58 @@ msgstr "웹 페이지로 이동" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12513,6 +12607,9 @@ msgstr "그래도 출력하려면 기본 설정 / 제어 / 슬라이싱 / 혼합 msgid "No extrusions under current settings." msgstr "현재 설정에 압출기가 없습니다." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "타임랩스의 유연 모드는 \"객체별\" 출력순서가 활성화된 경우 지원되지 않습니다." @@ -12551,6 +12648,9 @@ msgstr "모델 크기를 줄이거나 현재 출력 설정을 변경하고 다 msgid "Variable layer height is not supported with Organic supports." msgstr "유기체 서포트에서는 가변 레이어 높이가 지원되지 않습니다." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "프라임 타워를 활성화하면 노즐 직경과 필라멘트 직경이 다르면 제대로 작동하지 않을 수 있습니다. 매우 실험적인 기능이므로 주의해서 사용하시기 바랍니다." @@ -14658,6 +14758,48 @@ msgstr "서포트 재료" msgid "Support material is commonly used to print supports and support interfaces." msgstr "서포트 재료는 일반적으로 서포트 및 서포트 접점을 출력하는 데 사용됩니다" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "필라멘트 출력 가능" @@ -17617,6 +17759,12 @@ msgstr "" "\n" "아래의 와이프 전 후퇴량 설정에서 값을 설정하면 와이프 전에 초과 후퇴가 수행되고, 그렇지 않으면 와이프 후에 수행됩니다." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "프라임 타워는 객체를 출력할 때 외관 결함을 방지하기 위해 노즐의 잔류물을 청소하고 노즐 내부의 압력을 안정화하는 데 사용할 수 있습니다." @@ -18720,6 +18868,9 @@ msgstr "모델 파일의 메싱이 실패했거나 유효한 형태가 없습니 msgid "The supplied file couldn't be read because it's empty." msgstr "제공된 파일이 비어 있어 읽을 수 없습니다" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "알 수 없는 파일 형식: 입력 파일의 확장자는 .stl, .obj 또는 .amf(.xml)여야 합니다." diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 866f5fa3f6..e6fdc28d40 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -2937,6 +2937,9 @@ msgstr "Redaguoti" msgid "Merge with" msgstr "Sujungti su" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Ištrinti šią giją" @@ -3238,6 +3241,9 @@ msgstr "Surinkimas" msgid "Merge parts to an object" msgstr "Sujungti dalis į objektą" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Pridėti sluoksnių" @@ -7841,6 +7847,9 @@ msgstr "Individualizuoti esamą plokštę" msgid "The %s nozzle can not print %s." msgstr "%s purkštukas negali spausdinti %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7974,12 +7983,36 @@ msgstr "Sinchronizuoti gijų sąrašą iš AMS" msgid "Set filaments to use" msgstr "Nustatyti gijas naudojimui" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Plokštės, objekto ir dalies paieška." msgid "Pellets" msgstr "Granulės" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Baigus šią operaciją, projektas „%s“ bus uždarytas ir bus sukurtas naujas projektas." @@ -8164,6 +8197,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Aptiktas kelių dalių objektas" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ar įkelti šiuos failus kaip vieną objektą su keliomis detalėmis?\n" @@ -8378,6 +8417,18 @@ msgstr "" msgid "Sync now" msgstr "Sinchronizuoti dabar" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Pakeistus profilius galite išsaugoti naujam projektui arba juos atmesti" @@ -9618,6 +9669,9 @@ msgstr "Spiralinė vaza" msgid "First layer filament sequence" msgstr "Pirmojo sluoksnio gijos eiga" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Pagal sluoksnį" @@ -9663,18 +9717,58 @@ msgstr "Pereiti į interneto puslapį" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12264,6 +12358,9 @@ msgstr "Jei vis tiek norite spausdinti, galite įjungti šią parinktį skiltyje msgid "No extrusions under current settings." msgstr "Pagal dabartinius nustatymus nėra išspaudimų." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Sklandus pakadrinio filmavimo (timelapse) režimas nepalaikomas, kai įjungta spausdinimo seka „pagal objektą“." @@ -12300,6 +12397,9 @@ msgstr "Galbūt norėsite sumažinti modelio dydį arba pakeisti esamus spausdin msgid "Variable layer height is not supported with Organic supports." msgstr "Kintamas sluoksnio aukštis nepalaikomas su \" Organinėmis atramomis\"." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Skirtingo skersmens purkštukai ir skirtingo skersmens gijos gali neveikti gerai, kai įjungtas valymo bokštas. Tai labai eksperimentinė priemonė, todėl elkitės atsargiai." @@ -14307,6 +14407,48 @@ msgstr "Atramų gija" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Atramų gija paprastai naudojama atramoms ir atramų skiriamiesiems sluoksniams spausdinti." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Gija tinkama spausdinti" @@ -17137,6 +17279,12 @@ msgstr "" "\n" "Jei žemiau esančiame nustatyme „Įtraukimo kiekis prieš nuvalymą“ nurodysite reikšmę, perteklinis gijos įtraukimas bus atliktas prieš nuvalymą, kitu atveju – po jo." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Valymo bokštelis (angl. \"wiping tower\") gali būti naudojamas likučiams nuo purkštuko nuvalyti ir purkštuko viduje esančiam slėgiui stabilizuoti, siekiant išvengti išvaizdos defektų spausdinant objektus." @@ -18220,6 +18368,9 @@ msgstr "Nepavyko suformuoti modelio failo poligonažo arba jame nėra tinkamos g msgid "The supplied file couldn't be read because it's empty." msgstr "Pateikto failo nepavyko nuskaityti, nes jis yra tuščias." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nežinomas failo formatas: įvesties failas privalo turėti .stl, .obj arba .amf(.xml) plėtinį." diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 470aa9fa86..fd1aec7c3f 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -3197,6 +3197,9 @@ msgstr "Bewerken" msgid "Merge with" msgstr "Samenvoegen met" +msgid "Decompose Color" +msgstr "" + # AI Translated msgid "Delete this filament" msgstr "Dit filament verwijderen" @@ -3519,6 +3522,9 @@ msgstr "Montage" msgid "Merge parts to an object" msgstr "Onderdelen samenvoegen tot een object" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Lagen toevoegen" @@ -8558,6 +8564,9 @@ msgstr "Huidig printbed aanpassen" msgid "The %s nozzle can not print %s." msgstr "Het %s-mondstuk kan %s niet printen." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8701,6 +8710,21 @@ msgstr "Synchroniseer filamentlijst vanuit AMS" msgid "Set filaments to use" msgstr "Stel filamenten in om te gebruiken" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Zoek plaat, object en onderdeel." @@ -8708,6 +8732,15 @@ msgstr "Zoek plaat, object en onderdeel." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8915,6 +8948,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Object met meerdere onderdelen gedetecteerd" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Wilt u deze bestanden laden als een enkel object bestaande uit meerdere onderdelen?\n" @@ -9146,6 +9185,18 @@ msgstr "" msgid "Sync now" msgstr "Nu synchroniseren" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project of ze laten vervallen" @@ -10550,6 +10601,9 @@ msgstr "Spiraalvaas" msgid "First layer filament sequence" msgstr "Eerste laag filamentvolgorde" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Op laag" @@ -10596,18 +10650,58 @@ msgstr "Ga naar de website" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -13448,6 +13542,9 @@ msgstr "Als u toch wilt printen, kunt u de optie inschakelen via Voorkeuren / Be msgid "No extrusions under current settings." msgstr "Geen extrusion onder de huidige instellingen" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Vloeiende modus van timelapse wordt niet ondersteund wanneer \"per object\" sequentie is ingeschakeld." @@ -13490,6 +13587,9 @@ msgstr "Verklein eventueel uw model of wijzig de huidige printinstellingen en pr msgid "Variable layer height is not supported with Organic supports." msgstr "Variabele laaghoogte wordt niet ondersteund met organische steunen." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Verschillende mondstukdiameters en verschillende filamentdiameters werken mogelijk niet goed wanneer de prime toren is ingeschakeld. Dit is zeer experimenteel; ga daarom voorzichtig te werk." @@ -15762,6 +15862,48 @@ msgstr "Support materiaal" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support materiaal wordt vaak gebruikt om support en support interfaces af te drukken." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + # AI Translated msgid "Filament printable" msgstr "Filament printbaar" @@ -18985,6 +19127,12 @@ msgstr "" "\n" "Als u hieronder een waarde instelt bij de terugtrekhoeveelheid vóór het vegen, wordt de overtollige terugtrekking vóór het vegen uitgevoerd; anders gebeurt dat erna." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "De veegtoren kan worden gebruikt om resten op het mondstuk te verwijderen en de druk in het mondstuk te stabiliseren om uiterlijke gebreken bij het printen van objecten te voorkomen." @@ -20251,6 +20399,9 @@ msgstr "Het meshen van een modelbestand is mislukt of er is geen geldige vorm." msgid "The supplied file couldn't be read because it's empty." msgstr "Het opgegeven bestand kon niet worden gelezen omdat het leeg is." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + # AI Translated msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Onbekende bestandsindeling: het invoerbestand moet de extensie .stl, .obj of .amf(.xml) hebben." diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 4adcf037ca..7fa43e8993 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -3012,6 +3012,9 @@ msgstr "Edytuj" msgid "Merge with" msgstr "Scal z" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Usuń ten filament" @@ -3319,6 +3322,9 @@ msgstr "Złożenie" msgid "Merge parts to an object" msgstr "Scal części w obiekt" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Dodaj warstwy" @@ -8036,6 +8042,9 @@ msgstr "Dostosuj bieżący stół" msgid "The %s nozzle can not print %s." msgstr "Dysza %s nie może drukować %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mieszanie %1% z %2% podczas druku nie jest zalecane.\n" @@ -8162,12 +8171,36 @@ msgstr "Synchronizuj listę filamentów z AMS" msgid "Set filaments to use" msgstr "Wybierz filamenty do użycia" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Szukaj stołu, obiektu i części." msgid "Pellets" msgstr "Granulat" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po zakończeniu operacji projekt %s zostanie zamknięty i zostanie utworzony nowy projekt." @@ -8363,6 +8396,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Wykryto obiekt składający się z wielu części" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Czy wczytać te pliki jako pojedynczy obiekt składający się z wielu części?\n" @@ -8591,6 +8630,18 @@ msgstr "" msgid "Sync now" msgstr "Synchronizuj teraz" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Można zachować zmodyfikowane profile w nowym projekcie lub je odrzucić." @@ -9945,6 +9996,9 @@ msgstr "Tryb wazy" msgid "First layer filament sequence" msgstr "Sekwencja koloru pierwszej warstwy" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Wg warstwy" @@ -9991,18 +10045,58 @@ msgstr "Przejdź na stronę" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12684,6 +12778,9 @@ msgstr "Jeśli mimo to chcesz drukować, możesz włączyć opcję w Preferencje msgid "No extrusions under current settings." msgstr "Brak ekstruzji przy obecnych ustawieniach." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Tryb „Wygładzony” timelapse nie jest obsługiwany, gdy włączona jest sekwencja druku „według obiektu”." @@ -12722,6 +12819,9 @@ msgstr "Może być konieczne zmniejszenie rozmiaru modelu lub zmiana bieżących msgid "Variable layer height is not supported with Organic supports." msgstr "Zmienna wysokość warstwy nie jest dostępna w przypadku podpór organicznych." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Różne średnice dysz i filamentu mogą nie działać poprawnie, gdy włączona jest wieża czyszcząca. Jest to mocno eksperymentalna funkcja, więc zaleca się ostrożność." @@ -14825,6 +14925,48 @@ msgstr "Materiał podporowy" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Materiał podporowy jest powszechnie używany do drukowania podpór i warstw łączących podpory z modelem" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament do druku" @@ -17795,6 +17937,12 @@ msgstr "" "\n" "Ustawienie wartości w ilości cofania przed ustawieniem czyszczenia poniżej spowoduje wykonanie nadmiernego cofania przed czyszczeniem, w przeciwnym razie zostanie wykonane po nim." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wieża czyszcząca może być używana do czyszczenia resztek na dyszy i stabilizacji ciśnienia w komorze wewnątrz dyszy, aby uniknąć defektów wyglądu podczas drukowania obiektów." @@ -18896,6 +19044,9 @@ msgstr "Siatkowanie pliku modelu nie powiodło się lub nie ma prawidłowego ksz msgid "The supplied file couldn't be read because it's empty." msgstr "Dostarczony plik nie mógł być odczytany, ponieważ jest pusty" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .stl, .obj, .amf(.xml)." diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 0e1e34c7d7..ceb095306d 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -2836,6 +2836,9 @@ msgstr "Editar" msgid "Merge with" msgstr "Mesclar com" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Apagar este filamento" @@ -3118,6 +3121,9 @@ msgstr "Montagem" msgid "Merge parts to an object" msgstr "Mesclar peças com um objeto" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "Adicionar camadas" @@ -7637,6 +7643,9 @@ msgstr "Personalizar a placa atual" msgid "The %s nozzle can not print %s." msgstr "O bico %s não pode imprimir %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Misturar %1% com %2% na impressão não é recomendado.\n" @@ -7761,12 +7770,36 @@ msgstr "Sincronizar lista de filamentos do AMS" msgid "Set filaments to use" msgstr "Definir filamentos para usar" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Pesquisar placa, objeto e peça." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Após a conclusão da sua operação, o projeto %s será encerrado e um novo projeto será criado." @@ -7951,6 +7984,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multi-peça detectado" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar esses arquivos como um único objeto com múltiplas peças?\n" @@ -8158,6 +8197,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar agora" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Você pode manter as predefinições modificadas no novo projeto ou descartá-las" @@ -9402,6 +9453,9 @@ msgstr "Vaso espiral" msgid "First layer filament sequence" msgstr "Sequência de filamento da primeira camada" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Por Camada" @@ -9447,18 +9501,58 @@ msgstr "Ir para a página web" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12011,6 +12105,9 @@ msgstr "Se ainda assim desejar imprimir, você pode ativar a opção em Preferê msgid "No extrusions under current settings." msgstr "Nenhuma extrusão com as configurações atuais." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "O modo suave do timelapse não é suportado quando a sequência \"por objeto\" está ativada." @@ -12047,6 +12144,9 @@ msgstr "Você pode querer reduzir o tamanho do seu modelo ou alterar as configur msgid "Variable layer height is not supported with Organic supports." msgstr "A altura de camada variável não é suportada com suportes Orgânicos." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diferentes diâmetros de bico e diferentes diâmetros de filamento podem não funcionar bem quando a torre de purga estiver habilitada. É muito experimental, então prossiga com cautela." @@ -14045,6 +14145,48 @@ msgstr "Material de suporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "O material de suporte é comumente usado para imprimir suportes e interfaces de suporte." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filamento imprimível" @@ -16846,6 +16988,12 @@ msgstr "" "\n" "Definir um valor na configuração de quantidade de retração antes da limpeza abaixo executará qualquer retração em excesso antes da limpeza, caso contrário, será realizada após." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A torre de purga pode ser usada para limpar o resíduo no bico e estabilizar a pressão na câmara dentro do bico, a fim de evitar defeitos de aparência ao imprimir objetos." @@ -17902,6 +18050,9 @@ msgstr "A geração da malha do arquivo do modelo falhou ou não há forma váli msgid "The supplied file couldn't be read because it's empty." msgstr "O arquivo fornecido não pôde ser lido porque está vazio." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .stl, .obj, .amf(.xml)." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index debec4f832..fc26e99615 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -2911,6 +2911,9 @@ msgstr "Правка" msgid "Merge with" msgstr "Объединить с" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Удалить материал" @@ -3222,6 +3225,9 @@ msgstr "Сборка" msgid "Merge parts to an object" msgstr "Сборка моделей" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # Запись в истории действий msgid "Add layers" msgstr "Добавление слоёв" @@ -7897,6 +7903,9 @@ msgstr "Настроить стол" msgid "The %s nozzle can not print %s." msgstr "Внимание: «%s» экструдер не может печатать %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Совмещение %1% с %2% при печати не рекомендуется.\n" @@ -8027,12 +8036,36 @@ msgstr "Синхронизировать материалы" msgid "Set filaments to use" msgstr "Выбрать материал" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Поиск стола, модели или части..." msgid "Pellets" msgstr "Гранулы" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + # Порядок слов сильно зависит от контекста; не могу воспроизвести в интерфейсе. По идее, выводится при bool Sidebar::is_new_project_in_gcode3mf(), но что-либо менять в нарезанном .gcode.3mf вообще нельзя #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8223,6 +8256,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Обнаружена модель, состоящая из нескольких частей" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Загрузить эти файлы как единую модель, состоящую из нескольких частей?\n" @@ -8437,6 +8476,18 @@ msgstr "" msgid "Sync now" msgstr "Синхронизировать" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Вы можете перенести сделанные изменения в новый проект или отказаться от их сохранения" @@ -9694,6 +9745,9 @@ msgstr "Режим вазы" msgid "First layer filament sequence" msgstr "Очерёдность материалов на первом слое" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Послойно" @@ -9739,18 +9793,58 @@ msgstr "Перейти на страницу" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12341,6 +12435,9 @@ msgstr "Если вас это не пугает, эту проверку мож msgid "No extrusions under current settings." msgstr "При текущих настройках экструзия отсутствует." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавный режим таймлапса не поддерживается, когда включена последовательность печати моделей по очереди." @@ -12379,6 +12476,9 @@ msgstr "Попробуйте уменьшить размер модели или msgid "Variable layer height is not supported with Organic supports." msgstr "Функция переменной высоты слоя несовместима с органическим стилем древовидных поддержек." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Совместное использование черновой башни с разными диаметрами сопел и прутков может привести к некорректной нарезке при включённой черновой башне. Этот метод работы экспериментальный, поэтому будьте осторожны при использовании." @@ -14526,6 +14626,48 @@ msgstr "Материал поддержки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Обычно используется для печати поддержки и связующего слоя (интерфейса)." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + # ??? Настройка в режиме разработчика. Должна отображаться где-то в настройках # профиля, но поиском не ищется. msgid "Filament printable" @@ -17698,6 +17840,12 @@ msgstr "" "\n" "Внимание: процент первичного отката будет увеличен, если длины очистки окажется недостаточно при текущей скорости отката (или из-за иных ограничений)." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Черновая башня – специальная структура, которая используется для прочистки сопла от остатков материала и стабилизации давления внутри сопла при смене экструдера, чтобы избежать дефектов на поверхности печатаемой модели." @@ -18856,6 +19004,9 @@ msgstr "Не удалось обнаружить форму или создат msgid "The supplied file couldn't be read because it's empty." msgstr "Невозможно прочитать файл, так как он пуст." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Неизвестный формат файла: входной файл должен иметь расширение *.stl, *.obj или *.amf(.xml)." diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 7add432a60..0e42c18f84 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -3289,6 +3289,9 @@ msgstr "Redigera" msgid "Merge with" msgstr "Slå ihop med" +msgid "Decompose Color" +msgstr "" + # AI Translated msgid "Delete this filament" msgstr "Radera detta filament" @@ -3610,6 +3613,9 @@ msgstr "Montering" msgid "Merge parts to an object" msgstr "Slå ihop delar till ett objekt" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Lägg till lager" @@ -8650,6 +8656,9 @@ msgstr "Anpassa aktuell platta" msgid "The %s nozzle can not print %s." msgstr "Nozzeln %s kan inte skriva ut %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8793,6 +8802,21 @@ msgstr "Synkronisera filament listan från AMS" msgid "Set filaments to use" msgstr "Ställ in filament som ska användas" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Sök platta, objekt och del." @@ -8800,6 +8824,15 @@ msgstr "Sök platta, objekt och del." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -9006,6 +9039,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objekt i flera delar har upptäckts" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ladda dessa filer som ett enkelt objekt med multipla delar?\n" @@ -9235,6 +9274,18 @@ msgstr "" msgid "Sync now" msgstr "Synkronisera nu" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Fortsätt med redigerings inställningarna till nytt projekt eller avfärda dem" @@ -10664,6 +10715,9 @@ msgstr "Spiral vas" msgid "First layer filament sequence" msgstr "Första lagrets filament sekvens" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Per lager" @@ -10710,18 +10764,58 @@ msgstr "Växla till hemsidan" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -13610,6 +13704,9 @@ msgstr "Om du ändå vill skriva ut kan du aktivera alternativet i Inställninga msgid "No extrusions under current settings." msgstr "Nuvarande inställning har ingen extrudering." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Smooth läge för timelapse stöds inte när ”per objekt” -sekvens är aktiverad." @@ -13652,6 +13749,9 @@ msgstr "Du kan behöva minska modellens storlek eller ändra de aktuella utskrif msgid "Variable layer height is not supported with Organic supports." msgstr "Variabel lagerhöjd stöds inte med organiska support." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Olika nozzeldiametrar och olika filamentdiametrar kanske inte fungerar bra när prime tornet är aktiverat. Det är mycket experimentellt, så var försiktig." @@ -15950,6 +16050,48 @@ msgstr "Supportmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support material används ofta för att skriva ut support och stödja gränssnittet" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + # AI Translated msgid "Filament printable" msgstr "Filament utskrivbart" @@ -19206,6 +19348,12 @@ msgstr "" "\n" "Om du anger ett värde i inställningen reduktionsmängd före avtorkning nedan utförs eventuell överskjutande reduktion före avtorkningen, annars utförs den efteråt." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Avstryknings tornet kan användas för att avlägsna rester på munstycket och stabilisera kammartrycket inuti munstycket för att undvika utseendefel vid utskrift av objekt." @@ -20479,6 +20627,9 @@ msgstr "Det gick inte att skapa mesh från modellfilen, eller så saknas en gilt msgid "The supplied file couldn't be read because it's empty." msgstr "Den medföljande filen kunde inte läsas eftersom den är tom." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Okänt filformat: indata filen måste ha tillägget .stl, .obj eller .amf(.xml)." diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 60163fe29b..ec74d28213 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -2942,6 +2942,9 @@ msgstr "แก้ไข" msgid "Merge with" msgstr "รวมกับ" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "ลบเส้นพลาสติกนี้" @@ -3237,6 +3240,9 @@ msgstr "การประกอบ" msgid "Merge parts to an object" msgstr "รวมชิ้นส่วนเป็นวัตถุเดียว" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "เพิ่มเลเยอร์" @@ -7813,6 +7819,9 @@ msgstr "ปรับแต่งแผ่นปัจจุบัน" msgid "The %s nozzle can not print %s." msgstr "หัวฉีด %s ไม่สามารถพิมพ์ %s ได้" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "ไม่แนะนำให้ผสม %1% กับ %2% ในการพิมพ์\n" @@ -7938,12 +7947,36 @@ msgstr "ประสานรายการเส้นพลาสติกจ msgid "Set filaments to use" msgstr "ตั้งค่าเส้นพลาสติกที่จะใช้" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "ค้นหาจาน วัตถุ และชิ้นส่วน" msgid "Pellets" msgstr "เม็ด" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "หลังจากเสร็จสิ้นการดำเนินการของคุณ โครงการ %s จะถูกปิดและสร้างโครงการใหม่" @@ -8128,6 +8161,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "ตรวจพบวัตถุที่มีหลายส่วน" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "โหลดไฟล์เหล่านี้เป็นออบเจ็กต์เดียวที่มีหลายส่วนใช่ไหม\n" @@ -8338,6 +8377,18 @@ msgstr "" msgid "Sync now" msgstr "ซิงค์เลย" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "คุณสามารถเก็บค่าที่ตั้งไว้ล่วงหน้าที่แก้ไขแล้วไว้ในโปรเจ็กต์ใหม่หรือทิ้งก็ได้" @@ -9591,6 +9642,9 @@ msgstr "แจกันเกลียว" msgid "First layer filament sequence" msgstr "ลำดับเส้นพลาสติกชั้นแรก" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "โดยเลเยอร์" @@ -9636,18 +9690,58 @@ msgstr "ข้ามไปที่หน้าเว็บ" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12231,6 +12325,9 @@ msgstr "หากคุณยังต้องการพิมพ์ คุ msgid "No extrusions under current settings." msgstr "ไม่มีการอัดขึ้นรูปภายใต้การตั้งค่าปัจจุบัน" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "ไม่รองรับโหมดไทม์แลปส์แบบราบรื่นเมื่อเปิดใช้งานลำดับ \"ตามวัตถุ\"" @@ -12267,6 +12364,9 @@ msgstr "คุณอาจต้องการลดขนาดแบบจำ msgid "Variable layer height is not supported with Organic supports." msgstr "ไม่รองรับความสูงของเลเยอร์ที่แปรผันได้ด้วยการรองรับแบบออร์แกนิก" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "เส้นผ่านศูนย์กลางของหัวฉีดที่แตกต่างกันและเส้นผ่านศูนย์กลางของเส้นพลาสติกที่แตกต่างกันอาจทำงานได้ไม่ดีนักเมื่อเปิดใช้งาน Prime Tower ยังเป็นการทดลองอยู่มาก ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง" @@ -14286,6 +14386,48 @@ msgstr "วัสดุส่วนรองรับ" msgid "Support material is commonly used to print supports and support interfaces." msgstr "วัสดุรองรับมักใช้ในการพิมพ์ส่วนรองรับและอินเทอร์เฟซรองรับ" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "พิมพ์เส้นพลาสติกได้" @@ -17126,6 +17268,12 @@ msgstr "" "\n" "การตั้งค่าในจำนวนการถอนก่อนการล้างการตั้งค่าด้านล่างจะทำการถอนส่วนที่เกินก่อนการล้าง มิฉะนั้นจะดำเนินการหลังจากนั้น" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe Tower สามารถใช้เพื่อทำความสะอาดสิ่งตกค้างบนหัวฉีด และทำให้แรงดันในห้องภายในหัวฉีดคงที่ เพื่อหลีกเลี่ยงข้อบกพร่องในลักษณะที่ปรากฏเมื่อพิมพ์วัตถุ" @@ -18209,6 +18357,9 @@ msgstr "การประสานไฟล์โมเดลล้มเหล msgid "The supplied file couldn't be read because it's empty." msgstr "ไม่สามารถอ่านไฟล์ที่ให้มาได้เนื่องจากไฟล์ว่างเปล่า" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "รูปแบบไฟล์ที่ไม่รู้จัก ไฟล์อินพุตต้องมีนามสกุล .stl, .obj, .amf(.xml)" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index c0126ec8fd..c3812dd93f 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -2969,6 +2969,9 @@ msgstr "Düzenle" msgid "Merge with" msgstr "Şununla birleştir" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Bu filamenti sil" @@ -3269,6 +3272,9 @@ msgstr "Birleştir" msgid "Merge parts to an object" msgstr "Parçaları bir nesnede birleştir" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Katman ekle" @@ -7903,6 +7909,9 @@ msgstr "Mevcut plakayı özelleştir" msgid "The %s nozzle can not print %s." msgstr "%s püskürtme ucu %s'yi yazdıramıyor." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Yazdırmada %1% ile %2%'nin karıştırılması önerilmez.\n" @@ -8028,12 +8037,36 @@ msgstr "Filament listesini AMS'den senkronize edin" msgid "Set filaments to use" msgstr "Kullanılacak filamentleri ayarla" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Arama plakası, nesne ve parça." msgid "Pellets" msgstr "Peletler" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "İşleminizi tamamladıktan sonra %s projesi kapatılacak ve yeni bir proje oluşturulacak." @@ -8226,6 +8259,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Çok parçalı nesne algılandı" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Bu dosyalar birden fazla parçadan oluşan tek bir nesne olarak mı yüklensin?\n" @@ -8437,6 +8476,18 @@ msgstr "" msgid "Sync now" msgstr "Şimdi senkronize et" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Değiştirilen ön ayarları yeni projede tutabilir veya silebilirsiniz" @@ -9735,6 +9786,9 @@ msgstr "Spiral vazo" msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Katmana göre" @@ -9780,18 +9834,58 @@ msgstr "Web sayfasına atla" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12439,6 +12533,9 @@ msgstr "Yine de yazdırmak istiyorsanız Tercihler / Denetim / Dilimleme / Karı msgid "No extrusions under current settings." msgstr "Mevcut ayarlarda ekstrüzyon yok." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "\"Nesneye göre\" dizisi etkinleştirildiğinde, hızlandırılmış çekimin yumuşak modu desteklenmez." @@ -12475,6 +12572,9 @@ msgstr "Modelinizin boyutunu küçültmek veya mevcut yazdırma ayarlarını de msgid "Variable layer height is not supported with Organic supports." msgstr "Değişken katman yüksekliği Organik desteklerle desteklenmez." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Farklı püskürtme ucu çapları ve farklı filament çapları, ana kule etkinleştirildiğinde iyi çalışmayabilir. Oldukça deneysel olduğundan lütfen dikkatli ilerleyin." @@ -14540,6 +14640,48 @@ msgstr "Destek malzemesi" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için kullanılır." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Filament yazdırılabilir" @@ -17455,6 +17597,12 @@ msgstr "" "\n" "Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi takdirde silme işleminden sonra gerçekleştirilecektir." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Temizleme kulesi, nesneleri yazdırırken görünüm kusurlarını önlemek amacıyla nozul üzerindeki kalıntıları temizlemek ve nozul içindeki oda basıncını dengelemek için kullanılabilir." @@ -18543,6 +18691,9 @@ msgstr "Bir model dosyasının meshlenmesi başarısız oldu veya geçerli bir msgid "The supplied file couldn't be read because it's empty." msgstr "Seçilen dosya boş olduğundan okunamıyor." +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Bilinmeyen dosya formatı. Giriş dosyası .stl, .obj, .amf(.xml) uzantılı olmalıdır." diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 2a8fb00b3e..e8dd6dde4b 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -2906,6 +2906,9 @@ msgstr "Змінити" msgid "Merge with" msgstr "Обʼєднати з" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "Видалити цей філамент" @@ -3197,6 +3200,9 @@ msgstr "Збірка" msgid "Merge parts to an object" msgstr "Обʼєднати частини в обʼєкт" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "Додати шари" @@ -7897,6 +7903,9 @@ msgstr "Пристосувати поточну пластину" msgid "The %s nozzle can not print %s." msgstr "Сопло %s не може друкувати %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Змішування %1% з %2% в друці не рекомендується.\n" @@ -8025,12 +8034,36 @@ msgstr "Синхронізувати список ниток з AMS" msgid "Set filaments to use" msgstr "Встановити філаменти для використання" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Пошук пластини, об’єкта і деталі." msgid "Pellets" msgstr "Гранули" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8235,6 +8268,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Виявлено обʼєкт, що складається з кількох частин" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Завантажити ці файли як єдиний обʼєкт з кількома частинами?\n" @@ -8445,6 +8484,18 @@ msgstr "" msgid "Sync now" msgstr "Синхронізувати зараз" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Ви можете зберегти змінені пресети у новому проекті або відмовитися від них" @@ -9737,6 +9788,9 @@ msgstr "Спіральна ваза" msgid "First layer filament sequence" msgstr "Послідовність філаменту першого шару" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "По шарах" @@ -9783,18 +9837,58 @@ msgstr "Перейти на вебсторінку" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12500,6 +12594,9 @@ msgstr "Якщо ви все одно хочете друкувати, може msgid "No extrusions under current settings." msgstr "Немає екструзій під час поточних налаштувань." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавний режим таймлапсу не підтримується, коли послідовність \"по обʼєкт\" увімкнено." @@ -12540,6 +12637,9 @@ msgstr "Можливо, ви захочете зменшити розмір мо msgid "Variable layer height is not supported with Organic supports." msgstr "Змінна висота шару не підтримується з Органічними підтримками." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Різні діаметри сопел та різні діаметри філаменту можуть працювати некоректно коли ввімкнена підготовча вежа. Це експериментальна функція, тому використовуйте її з обережністю." @@ -14665,6 +14765,48 @@ msgstr "Матеріал підтримки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Допоміжний матеріал зазвичай використовується для друку підтримки" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "Філамент придатний для друку" @@ -17660,6 +17802,12 @@ msgstr "" "\n" "Якщо встановити значення у параметрі \"Кількість втягування перед витиранням\" нижче, надлишкове втягування буде виконано перед витиранням, інакше воно буде виконано після нього." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Вежа протирання може використовуватися для очищення залишків на соплі та стабілізації тиску в камері всередині сопла, щоб уникнути дефектів зовнішнього вигляду під час друку обʼєктів." @@ -18766,6 +18914,9 @@ msgstr "Не вдалося побудувати сітку файлу моде msgid "The supplied file couldn't be read because it's empty." msgstr "Наданий файл не вдалося прочитати, оскільки він порожній" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Невідомий формат файлу: вхідний файл повинен мати розширення .stl, .obj або .amf (.xml)." diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 519a6c3b25..b5e5a5dc5f 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -3077,6 +3077,9 @@ msgstr "Chỉnh sửa" msgid "Merge with" msgstr "Gộp với" +msgid "Decompose Color" +msgstr "" + # AI Translated msgid "Delete this filament" msgstr "Xóa filament này" @@ -3389,6 +3392,9 @@ msgstr "Lắp ráp" msgid "Merge parts to an object" msgstr "Gộp các phần thành một vật thể" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "Thêm lớp" @@ -8294,6 +8300,9 @@ msgstr "Tùy chỉnh bản hiện tại" msgid "The %s nozzle can not print %s." msgstr "Đầu phun %s không thể in %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8436,12 +8445,36 @@ msgstr "Đồng bộ danh sách filament từ AMS" msgid "Set filaments to use" msgstr "Đặt filament để sử dụng" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "Tìm kiếm bản, đối tượng và phần." msgid "Pellets" msgstr "Viên" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8640,6 +8673,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Phát hiện đối tượng nhiều phần" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Tải các file này như một đối tượng đơn với nhiều phần?\n" @@ -8869,6 +8908,18 @@ msgstr "" msgid "Sync now" msgstr "Đồng bộ ngay" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "Bạn có thể giữ các preset đã chỉnh sửa cho dự án mới hoặc loại bỏ chúng" @@ -10250,6 +10301,9 @@ msgstr "Bình xoắn ốc" msgid "First layer filament sequence" msgstr "Trình tự filament lớp đầu tiên" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "Theo lớp" @@ -10296,18 +10350,58 @@ msgstr "Chuyển đến trang web" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -13075,6 +13169,9 @@ msgstr "Nếu bạn vẫn muốn in, bạn có thể bật tùy chọn trong Tù msgid "No extrusions under current settings." msgstr "Không có đùn dưới cài đặt hiện tại." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Chế độ mượt của timelapse không được hỗ trợ khi trình tự \"theo đối tượng\" được bật." @@ -13113,6 +13210,9 @@ msgstr "Bạn có thể muốn giảm kích thước model của mình hoặc th msgid "Variable layer height is not supported with Organic supports." msgstr "Chiều cao lớp thay đổi không được hỗ trợ với support hữu cơ." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Đường kính đầu phun khác nhau và đường kính filament khác nhau có thể không hoạt động tốt khi prime tower được bật. Nó rất thử nghiệm, vì vậy vui lòng tiến hành thận trọng." @@ -15234,6 +15334,48 @@ msgstr "Vật liệu support" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Vật liệu support thường được sử dụng để in support và giao diện support." +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + # AI Translated msgid "Filament printable" msgstr "Filament in được" @@ -18178,6 +18320,12 @@ msgstr "" "\n" "Đặt giá trị trong cài đặt lượng rút trước khi lau bên dưới sẽ thực hiện bất kỳ rút dư nào trước khi lau, nếu không nó sẽ được thực hiện sau." +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe tower có thể được sử dụng để làm sạch cặn trên đầu phun và ổn định áp suất buồng bên trong đầu phun, để tránh khuyết điểm bề ngoài khi in đối tượng." @@ -19298,6 +19446,9 @@ msgstr "Tạo lưới cho file mô hình thất bại hoặc không có hình d msgid "The supplied file couldn't be read because it's empty." msgstr "File được cung cấp không thể đọc được vì nó trống" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Định dạng file không xác định. File đầu vào phải có phần mở rộng .stl, .obj, .amf(.xml)." diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 2abe2fc5d2..4787976785 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -2843,6 +2843,9 @@ msgstr "编辑" msgid "Merge with" msgstr "与其合并" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "移除此耗材" @@ -3124,6 +3127,9 @@ msgstr "组合体" msgid "Merge parts to an object" msgstr "合并零件到对象" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "添加层" @@ -7644,6 +7650,9 @@ msgstr "自定义当前盘" msgid "The %s nozzle can not print %s." msgstr "%s 喷嘴无法打印 %s。" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建议在打印时将 %1% 与 %2% 混合。\n" @@ -7769,12 +7778,36 @@ msgstr "从AMS同步材料列表" msgid "Set filaments to use" msgstr "配置可选择的材料" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "搜索盘、模型和零件。" msgid "Pellets" msgstr "颗粒" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作后,%s 项目将关闭并创建一个新项目。" @@ -7961,6 +7994,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "检测到多部分对象" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "将这些文件加载为一个多零件对象?\n" @@ -8166,6 +8205,18 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以保留修改的预设到新项目中或者忽略这些修改" @@ -9412,6 +9463,9 @@ msgstr "旋转花瓶" msgid "First layer filament sequence" msgstr "首层耗材打印顺序" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "逐层" @@ -9458,18 +9512,58 @@ msgstr "跳转到网页" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12029,6 +12123,9 @@ msgstr "如果您仍要打印,可以在 偏好设置 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根据当前设置,不会生成任何打印。" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "平滑模式的延时摄影不支持在逐件打印模式下使用。" @@ -12065,6 +12162,9 @@ msgstr "或许您想要缩小模型的尺寸,或者更改当前打印设置, msgid "Variable layer height is not supported with Organic supports." msgstr "Organic支撑不支持可变层高。" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "当启用擦拭塔时,不同的喷嘴直径和不同的耗材丝直径可能无法很好地工作。这是非常实验性的,所以请谨慎操作。" @@ -14051,6 +14151,48 @@ msgstr "支撑材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撑材料通常用于打印支撑体和支撑接触面" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "可打印耗材" @@ -16885,6 +17027,12 @@ msgstr "" "\n" "在下方的擦拭前回抽量设置中输入一个数值,将在擦拭动作之前执行任何超出部分的回抽,否则超出部分的回抽将在擦拭之后执行。" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "擦拭塔可以用来清理喷嘴上的残留料和让喷嘴内部的腔压达到稳定状态,以避免打印物体时出现外观瑕疵。" @@ -17960,6 +18108,9 @@ msgstr "模型文件的网格划分失败,或缺少有效的形状。" msgid "The supplied file couldn't be read because it's empty." msgstr "无法读取提供的文件,因为该文件内容为空。" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "未知的文件格式。输入文件的扩展名必须为 .stl、.obj 或 .amf(.xml)。" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 839e7cdb2b..f9287d0886 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-21 14:25+0800\n" +"POT-Creation-Date: 2026-08-28 12:15+0800\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -2913,6 +2913,9 @@ msgstr "編輯" msgid "Merge with" msgstr "合併到" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "刪除此線材" @@ -3209,6 +3212,9 @@ msgstr "組合體" msgid "Merge parts to an object" msgstr "合併零件為物件" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + # AI Translated msgid "Add layers" msgstr "新增層" @@ -7805,6 +7811,9 @@ msgstr "自訂列印板參數" msgid "The %s nozzle can not print %s." msgstr "%s 噴嘴無法列印 %s。" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建議在列印時混用 %1% 和 %2%。\n" @@ -7930,12 +7939,36 @@ msgstr "從 AMS 同步線材清單" msgid "Set filaments to use" msgstr "設定可選擇的線材" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "搜尋列印板、物件和零件。" msgid "Pellets" msgstr "顆粒" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作後,%s 專案將關閉並建立新專案。" @@ -8122,6 +8155,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "偵測到多部分物件" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "將這些檔案載入為一個多零件物件?\n" @@ -8332,6 +8371,18 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以將修改後的預設檔保留到新專案中或者忽略這些修改" @@ -9586,6 +9637,9 @@ msgstr "螺旋花瓶模式" msgid "First layer filament sequence" msgstr "首層線材列印順序" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "逐層" @@ -9631,18 +9685,58 @@ msgstr "跳至網頁" msgid "Material" msgstr "" +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +msgid "needs" +msgstr "" + +msgid "not enabled" +msgstr "" + +msgid "material not published" +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + msgid "Publish 3MF..." msgstr "" msgid "Select which settings to embed in the 3MF file" msgstr "" +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + msgid "Full Publish" msgstr "" msgid "Embed the entire filament of this slot in the 3MF file" msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + msgid "Filter non-selected" msgstr "" @@ -12233,6 +12327,9 @@ msgstr "如果您仍想列印,可以在「偏好設定 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根據目前設定,不會進行任何列印。" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "逐件列印模式下不支援使用平滑模式的縮時錄影。" @@ -12269,6 +12366,9 @@ msgstr "您可能想要減小模型的尺寸或更改目前的列印設定並重 msgid "Variable layer height is not supported with Organic supports." msgstr "有機樹支撐不支持可變層高。" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "當啟用換料時,不同的噴嘴直徑和線材直徑可能無法正常配合。此功能屬於實驗性階段,請小心使用。" @@ -14251,6 +14351,48 @@ msgstr "支撐材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撐材料通常用於列印支撐體和支撐接觸面" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "線材可列印" @@ -17079,6 +17221,12 @@ msgstr "" "\n" "在以下的『擦拭前的回抽量』設定中設定一個值,將在擦拭之前執行任何額外的回抽操作;否則,將在擦拭之後執行。" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "換料塔的功能是用於清除噴嘴上的殘留物,同時穩定噴嘴內的壓力,從而避免列印物件時出現外觀瑕疵。" @@ -18148,6 +18296,9 @@ msgstr "模型檔案網格化失敗或沒有有效形狀" msgid "The supplied file couldn't be read because it's empty." msgstr "無法讀取提供的檔案,因為該檔案為空" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "檔案格式未知。輸入的檔案必須是 .stl、.obj 或 .amf(.xml) 格式。" diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index be28ae7499..1a8a860301 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -158,6 +158,43 @@ wxColour mixed_filament_blend_color(const DynamicPrintConfig& full, size_t slot) return slot < colors.size() ? colors[slot] : wxColour("#D9D9D9"); } +// The slot's own chip as the main GUI renders it: a curve-sampled gradient swatch for a +// gradient mixed slot, the static blended colour otherwise. Returns wxNullBitmap when nothing +// could be rendered (the caller falls back to a plain label). +wxBitmap mixed_filament_chip_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz) +{ + const std::string label = std::to_string(slot + 1); + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + wxBitmap* icon = nullptr; + if (is_gradient) { + // The same curve-sampled ramp the sidebar chips use; an empty ramp (broken definition) + // degrades to a plain fade between the slot's two component colours. + const std::vector ramp = mixed_gradient_ramp(full, slot, swatch_sz); + if (!ramp.empty()) { + icon = get_extruder_color_icon(std::vector(), true, label, swatch_sz, swatch_sz, &ramp); + } else { + std::vector hexes; + for (const unsigned int comp : mixed_slot_components(full, slot)) { + std::string hex = filament_color_hex(full, size_t(comp) - 1); + if (hex.empty()) + hex = "#D9D9D9"; + hexes.push_back(std::move(hex)); + } + if (hexes.size() >= 2) + icon = get_extruder_color_icon(std::move(hexes), true, label, swatch_sz, swatch_sz); + } + } + if (icon == nullptr) { + const wxColour blend = mixed_filament_blend_color(full, slot); + const std::string blend_hex = blend.IsOk() ? + std::string(wxString::Format("#%02X%02X%02X", blend.Red(), blend.Green(), blend.Blue()).ToUTF8()) : + std::string("#808080"); + icon = get_extruder_color_icon(blend_hex, label, swatch_sz, swatch_sz); + } + return icon != nullptr ? *icon : wxNullBitmap; +} + // Tab-strip bitmap for a mixed slot: the mix's own chip, then its component swatches each // followed by their percent share (or a "->" arrow for gradients), mirroring the main GUI's // sidebar rows - e.g. "[3 purple]: [1 red] 50% + [2 blue] 50%". The whole composition is one @@ -207,13 +244,10 @@ wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, auto push_text = [&](const wxString& text) { pieces.push_back({Piece::Text, wxNullBitmap, text}); }; { - const wxColour blend = mixed_filament_blend_color(full, slot); - const std::string blend_hex = blend.IsOk() ? - std::string(wxString::Format("#%02X%02X%02X", blend.Red(), blend.Green(), blend.Blue()).ToUTF8()) : - std::string("#808080"); - const size_t before = pieces.size(); - push_swatch(blend_hex, std::to_string(slot + 1)); - has_lead = pieces.size() > before; + const wxBitmap chip = mixed_filament_chip_bitmap(full, slot, swatch_sz); + has_lead = chip.IsOk(); + if (has_lead) + pieces.push_back({Piece::Swatch, chip, wxString()}); } for (size_t ci = 0; ci < comps.size(); ++ci) { if (pieces.empty()) @@ -279,6 +313,83 @@ wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, } // namespace +// Warning shown on OK when an enabled mixed-filament slot relies on a filament that would ship +// without its material. One row per unmet dependency: the mixed slot's colour chip, the +// component filament's colour chip, and the reason. "Cancel" is the safe choice and keeps the +// dialog open; "Publish anyway" continues. +class MixedFilamentWarningDialog : public MsgDialog +{ +public: + MixedFilamentWarningDialog(wxWindow* parent, const DynamicPrintConfig& full, const std::vector& issues) + : MsgDialog(parent, _L("Warning"), wxEmptyString, wxOK | wxCANCEL | wxICON_WARNING) + { + auto* content = new wxBoxSizer(wxVERTICAL); + + auto* intro = new wxStaticText(this, wxID_ANY, _L("Some mixed filaments rely on filaments that will not be published:")); + intro->SetFont(Label::Body_13); + intro->Wrap(FromDIP(400)); + content->Add(intro, 0, wxEXPAND); + content->AddSpacer(FromDIP(10)); + + const int swatch = FromDIP(20); + for (const MixedDependencyIssue& issue : issues) { + auto* row = new wxBoxSizer(wxHORIZONTAL); + + // The mixed slot as just its own chip (gradient-aware, numbered like its tab); + // falls back to a plain label when the chip cannot be built. + const wxString mix_label = wxString::Format(_L("Filament %d (mixed)"), int(issue.mixed_slot) + 1); + const wxBitmap mix_bmp = mixed_filament_chip_bitmap(full, issue.mixed_slot, swatch); + if (mix_bmp.IsOk()) { + auto* bmp = new wxStaticBitmap(this, wxID_ANY, mix_bmp); + bmp->SetToolTip(mix_label); + row->Add(bmp, 0, wxALIGN_CENTER_VERTICAL); + } else { + auto* label = new wxStaticText(this, wxID_ANY, mix_label); + label->SetFont(Label::Body_12); + row->Add(label, 0, wxALIGN_CENTER_VERTICAL); + } + + auto* needs = new wxStaticText(this, wxID_ANY, _L("needs")); + needs->SetFont(Label::Body_12); + needs->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); + row->Add(needs, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, FromDIP(6)); + + // The component filament's colour chip, numbered like the tab strips; the slot + // name stays on hover to keep the row itself short. + std::string hex = filament_color_hex(full, issue.component_slot); + if (hex.empty()) + hex = "#D9D9D9"; + if (wxBitmap* chip = get_extruder_color_icon(hex, std::to_string(issue.component_slot + 1), swatch, swatch)) { + auto* comp_bmp = new wxStaticBitmap(this, wxID_ANY, *chip); + comp_bmp->SetToolTip(wxString::Format(_L("Filament %d"), int(issue.component_slot) + 1)); + row->Add(comp_bmp, 0, wxALIGN_CENTER_VERTICAL); + } + + auto* reason = new wxStaticText(this, wxID_ANY, + issue.reason == MixedDependencyIssue::Reason::Disabled ? _L("not enabled") : _L("material not published")); + reason->SetFont(Label::Body_12); + reason->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#989898"))); + row->Add(reason, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + + content->Add(row, 0, wxLEFT, FromDIP(10)); + content->AddSpacer(FromDIP(6)); + } + + auto* hint = new wxStaticText(this, wxID_ANY, + _L("To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement.")); + hint->SetFont(Label::Body_12); + hint->Wrap(FromDIP(380)); + content->Add(hint, 0, wxEXPAND | wxTOP, FromDIP(4)); + + content_sizer->Add(content, 0, wxEXPAND); + + SetButtonLabel(wxID_OK, _L("Publish anyway")); + SetButtonLabel(wxID_CANCEL, _L("Cancel"), true); // safe choice gets the focus + + finalize(); + } +}; + PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_spec(const DynamicPrintConfig& full, size_t slot) { MixedVisualSpec spec; @@ -417,20 +528,11 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { // Publish is always allowed: no settings selected means no settings override. Warn only - // when an enabled mixed filament would ship without the identity of one of its - // components; "Proceed" accepts that and publishes anyway. - if (const std::vector missing = unpublished_mixed_components(); !missing.empty()) { - wxString missing_list; - for (size_t i = 0; i < missing.size(); ++i) { - if (i > 0) - missing_list += ", "; - missing_list += wxString::Format(_L("Filament %d"), int(missing[i] + 1)); - } - const wxString msg = _L("The following filaments are used by published mixed filaments but will not carry their material identity:") - + wxString(" ") + missing_list; - MessageDialog warn(this, msg, _L("Warning"), wxICON_WARNING); - warn.AddButton(wxID_CANCEL, _L("Cancel"), true); // safe choice gets the focus - warn.AddButton(wxID_OK, _L("Proceed"), false); + // when an enabled mixed filament would ship without the material of one of its + // components; "Publish anyway" accepts that and publishes anyway. + if (const std::vector issues = unpublished_mixed_components(); !issues.empty()) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + MixedFilamentWarningDialog warn(this, full, issues); if (warn.ShowModal() != wxID_OK) return; // Cancel: dismiss the warning and stay in this dialog } @@ -1712,9 +1814,9 @@ std::vector PublishSettingsDialog::GetPublishedKeys() const return out; } -std::vector PublishSettingsDialog::unpublished_mixed_components() const +std::vector PublishSettingsDialog::unpublished_mixed_components() const { - std::set missing; + std::vector out; for (const Category& cat : m_categories) { if (!cat.is_mixed || cat.section != Section::Material) continue; @@ -1739,7 +1841,7 @@ std::vector PublishSettingsDialog::unpublished_mixed_components() const // "Full Publish" nor the "Type" requirement row checked. Colour never counts: // the receiver renders the mix from its own components' colours. if (!comp_cat->enable_check->GetValue()) { - missing.insert(component_slot); + out.push_back({cat.filament_slot, component_slot, MixedDependencyIssue::Reason::Disabled}); continue; } if (comp_cat->full_check != nullptr && comp_cat->full_check->GetValue()) @@ -1753,10 +1855,15 @@ std::vector PublishSettingsDialog::unpublished_mixed_components() const } } if (!type_checked) - missing.insert(component_slot); + out.push_back({cat.filament_slot, component_slot, MixedDependencyIssue::Reason::MaterialNotPublished}); } } - return std::vector(missing.begin(), missing.end()); + // Deterministic order for the warning rows: by mixed slot, then component slot. The same + // (mix, component) pair cannot repeat: each mix's components come from a config list. + std::sort(out.begin(), out.end(), [](const MixedDependencyIssue& a, const MixedDependencyIssue& b) { + return std::tie(a.mixed_slot, a.component_slot) < std::tie(b.mixed_slot, b.component_slot); + }); + return out; } std::vector PublishSettingsDialog::GetPublishedMaterialKeys() const diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 60c33e5a2d..8d59192309 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -28,6 +28,17 @@ struct PublishMaterialIdentity std::string id; }; +// One unmet dependency of an enabled mixed-filament slot: the component filament the mix uses +// would ship without its material (either the component slot is not enabled at all, or it is +// enabled with neither "Full Publish" nor the "Type" requirement checked). Slots are 0-based. +struct MixedDependencyIssue +{ + enum class Reason { Disabled, MaterialNotPublished }; + size_t mixed_slot{0}; + size_t component_slot{0}; + Reason reason{Reason::Disabled}; +}; + // Dialog letting a model author select which settings get embedded in a 3MF. Nested tab layout // mirroring the Process settings (Printer / Filament / Process outer tabs, category or material // tabs inside each). Dirty settings are pre-checked and shown bold; on OK the print rows become @@ -187,11 +198,11 @@ private: // "Enable" toggled on a material slot: reveals/hides everything below the header and, for a // mixed slot, auto-selects its component filaments' "Enable" + "Full Publish" toggles. void on_enable_toggle(size_t category_index); - // 0-based material slots required by enabled mixed-filament slots that would ship without - // their identity: "Enable" not checked, or enabled with neither "Full Publish" nor the + // Unmet dependencies of enabled mixed-filament slots, one record per (mix, component) pair: + // "Enable" not checked on the component, or enabled with neither "Full Publish" nor the // "Type" requirement row checked. Colour is deliberately ignored (the receiver renders the - // mix from its own components' colours). Sorted, deduplicated. - std::vector unpublished_mixed_components() const; + // mix from its own components' colours). Sorted by mixed slot, then component slot. + std::vector unpublished_mixed_components() const; // Read-only visualization of a mixed slot's definition (a stacked ratio bar, or the // Material Ratio vs Model Height graph for a gradient), inserted above the info hint // inside the category's scroll area. From a62db72e023c6c85adadd2d175637087f8d9ad81 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 28 Aug 2026 15:24:03 +0800 Subject: [PATCH 057/208] Publish 3MF: import-side hardening and test coverage Validate mixed-filament definitions during the published material pass: definitions whose components reference slots that do not exist or hold other mixed filaments, or that carry fewer than two components, are reported through the shared skipped_keys channel instead of shipping a mix the GUI integrity check would only flag later. Fix the slot-limit exhaustion report being silently dropped: it wrote to published_config->skipped_keys, which the pass's final move-assignment from the local vector clobbers. All rejections now go through the local. Remove the unreachable persist branch from add_detached_preset: no caller passes save_to_project=false, so the parameter is gone and the copy is always project-embedded. Tests: cover the exhaustion path, the new definition validation, the identity-tier matching matrix (including substitute reporting), the structural-key denylist, whole-vector size-mismatch skips, relocation payload degradation, the "(Published 2)" uniquify chain, mixed blend colours staying out of shared preset configs, and duplicate-slot last-wins. Also fix the legacy-3mf scenario passing vacuously behind an if-guarded assertion. All existing published/3mf tests pass unchanged. --- src/libslic3r/Preset.cpp | 20 +- src/libslic3r/Preset.hpp | 12 +- src/libslic3r/PresetBundle.cpp | 53 +- tests/libslic3r/test_3mf.cpp | 7 +- .../libslic3r/test_preset_bundle_loading.cpp | 517 ++++++++++++++++++ 5 files changed, 582 insertions(+), 27 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 908bdec2b3..6646d98e71 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -3064,14 +3064,14 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det // diff against a parent; the caller decides whether to select it. // The published entry's filament_id is forwarded so user bases keep their stable // material grouping (get_filament_presets() groups user bases by filament_id). -// save_to_project=true (the Full Publish default) creates a project-embedded preset: -// it lives inside the loaded project only (serialized into the saved .3mf, restored by -// load_project_embedded_presets) and never touches the user's library directory; -// Preset::save() early-returns for embedded presets, so persistence is skipped here too. +// The copy is a project-embedded preset: it lives inside the loaded project only +// (serialized into the saved .3mf, restored by load_project_embedded_presets) and +// never touches the user's library directory; Preset::save() early-returns for +// embedded presets, so persistence is skipped here too. // Returns the final (uniquified) name; on collision "" -> " (Published)" -> // " (Published 2)" ... std::string PresetCollection::add_detached_preset(const std::string &name_base, DynamicPrintConfig config, - const std::string &filament_id, bool save_to_project) + const std::string &filament_id) { if (name_base.empty()) return std::string(); @@ -3111,7 +3111,7 @@ std::string PresetCollection::add_detached_preset(const std::string &name_base, preset.bundle_id.clear(); preset.file = this->path_for_preset(preset); preset.is_visible = true; - preset.is_project_embedded = save_to_project; + preset.is_project_embedded = true; if (m_type == Preset::TYPE_PRINT) preset.config.option("print_settings_id", true)->value = final_name; else if (m_type == Preset::TYPE_FILAMENT) @@ -3120,14 +3120,6 @@ std::string PresetCollection::add_detached_preset(const std::string &name_base, preset.config.option("printer_settings_id", true)->value = final_name; unlock(); - if (!save_to_project) { - // Persist the full resolved config (no parent). Project-embedded presets are - // serialized into the .3mf instead; Preset::save() would early-return anyway. - // find by final_name — m_presets may have reallocated, so don't keep a raw ref. - auto persist_it = this->find_preset_internal(final_name); - if (persist_it != m_presets.end() && persist_it->name == final_name) - persist_it->save(nullptr); - } return final_name; } diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index e904851a1d..85908b95a5 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -639,16 +639,14 @@ public: // preset's stable material grouping (get_filament_presets groups user bases by // filament_id); the published entry's filament_id is forwarded so the copy keeps // the author's grouping. - // With save_to_project=true (default) the copy is a project-embedded preset - // ("Preset Inside Project"): it lives inside the loaded project only, is serialized - // into the saved .3mf via get_current_project_embedded_presets(), and is never - // written to the user's library directory. With false it persists as a normal - // user preset file. + // The copy is a project-embedded preset ("Preset Inside Project"): it lives inside + // the loaded project only, is serialized into the saved .3mf via + // get_current_project_embedded_presets(), and is never written to the user's + // library directory. // Returns the final (uniquified) name; on collision the suffix rule is: // "" -> " (Published)" -> " (Published 2)" ... std::string add_detached_preset(const std::string &name_base, DynamicPrintConfig config, - const std::string &filament_id = std::string(), - bool save_to_project = true); + const std::string &filament_id = std::string()); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b6b816b587..3219dec6d8 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5466,8 +5466,10 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, const std::string material_label = !entry.filament_id.empty() ? entry.filament_id : !entry.publish_type_value.empty() ? entry.publish_type_value : entry.filament_type; - published_config->skipped_keys.emplace_back("material:" + material_label + - " (mixed filament definition: filament slot limit reached)"); + // The local skipped_keys is published wholesale at the end of the pass; + // writing published_config->skipped_keys here would be clobbered by it. + skipped_keys.emplace_back("material:" + material_label + + " (mixed filament definition: filament slot limit reached)"); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot << " could not be placed: all " << next_free_slot << " slots exhausted"; entry_it = published_config->material_keys.erase(entry_it); @@ -5880,6 +5882,19 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // slots wrote to it; that compound case is not chased.) const bool edited_survives_load = this->filament_presets.empty() || this->filament_presets.front() == this->filaments.get_edited_preset().name; + // Final layout for mix-definition validation: every slot that will hold a + // mixed definition once this load completes - the receiver's own virtual + // slots plus each published mixed entry's final (possibly relocated) slot. + // Mix components are 1-based slot numbers, so a component is valid only + // when the slot it names exists and does not itself hold a mixed filament. + std::set mixed_final_slots; + for (const PublishedMaterialEntry& mix_entry : published_config->material_keys) + if (mix_entry.slot >= 0 && is_mixed_definition(mix_entry)) + mixed_final_slots.insert(mix_entry.slot); + for (size_t i = 0; i < this->filament_presets.size(); ++i) + if (this->is_mixed_filament(i)) + mixed_final_slots.insert(int(i)); + const size_t mixed_final_slot_count = this->filament_presets.size(); // Full Publish within-load dedup: identical Full materials (same setting_id // + preset_name identity) share one created instance, so an author who // pointed two slots at one preset yields one standalone copy here. @@ -5900,6 +5915,40 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, entry.publish_type_value) : entry.filament_id; + // Import-side validation of a mixed-filament definition: the publish + // dialog cannot produce a definition whose components reference slots + // that do not exist or hold other mixed filaments, so a broken one here + // means the payload itself is broken (hand-crafted or corrupt file). + // Report it through the same channel as every other rejected input and + // skip the entry, instead of shipping a mix the GUI integrity check + // (check_mixed_filament_integrity) would only flag later. A payload + // that omits the mixed arrays entirely is not an error here: the key + // routing below reports those per key as usual. + if (is_mixed_definition(entry)) { + std::string mix_error; + if (const ConfigOptionStrings* comp_opt = config.opt("filament_mixed_components"); + comp_opt != nullptr && entry.slot < static_cast(comp_opt->values.size())) { + const std::vector comps = parse_mixed_components(comp_opt->values[entry.slot]); + if (comps.size() < 2) + // An empty definition cell counts as broken too: applying it + // would ship a mix the sidebar would only flag later. + mix_error = "needs at least two components"; + else + for (unsigned int comp : comps) + if (comp < 1 || size_t(comp) > mixed_final_slot_count || + mixed_final_slots.count(int(comp) - 1) != 0) { + mix_error = "components reference missing slots"; + break; + } + } + if (!mix_error.empty()) { + skipped_keys.emplace_back("material:" + material_label + " (mixed filament definition: " + mix_error + ")"); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot + << " rejected: " << mix_error; + continue; + } + } + // Full Publish: always create a standalone detached copy (even on exact // identity match) as a "Preset Inside Project" (project-embedded: lives // in this project only, never written to the library), universally diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 37147b93b8..f595926699 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -688,10 +688,9 @@ SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { LoadStrategy::LoadModel | LoadStrategy::LoadConfig); THEN("no published key is fabricated") { REQUIRE(loaded); - if (dst_model.model_info != nullptr) { - REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_TAG) == 0); - REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_KEYS_TAG) == 0); - } + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_TAG) == 0); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_KEYS_TAG) == 0); } release_PlateData_list(dst_plates); } diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 931f9e96c3..356645d06c 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -3279,3 +3279,520 @@ TEST_CASE("remap_model_filament_slots repoints extruder configs and color painti CHECK_FALSE(TriangleSelector::has_facets(chained.objects[0]->volumes.front()->mmu_segmentation_facets.get_data(), EnforcerBlockerType(5))); } + +// The slot ceiling (EnforcerBlockerType::ExtruderMax) is what the color-painting encoding can +// address, so a mixed filament that does not fit must be dropped and reported instead of being +// forced onto one of the receiver's physical filaments. +TEST_CASE("Published 3MF drops a mixed filament that does not fit the slot limit and reports it", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + // A receiver already at the format's slot ceiling. + bundle.set_num_filaments(unsigned(EnforcerBlockerType::ExtruderMax), "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.slot = int(EnforcerBlockerType::ExtruderMax) + 6; // beyond the ceiling + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Nothing grew and no slot became a virtual mix. + REQUIRE(bundle.filament_presets.size() == size_t(EnforcerBlockerType::ExtruderMax)); + for (size_t i = 0; i < bundle.filament_presets.size(); ++i) + CHECK_FALSE(bundle.is_mixed_filament(i)); + // The receiver's colours were not touched. + CHECK(bundle.project_config.opt("filament_colour")->values == receiver_colours); + // The mix was reported instead of being applied. + REQUIRE(contains_key(pub.skipped_keys, "material:PLA (mixed filament definition: filament slot limit reached)")); + CHECK(pub.material_replacements.empty()); +} + +// The publish dialog can only produce definitions whose components reference existing physical +// slots, so a payload whose components point at slots that do not exist (or at another mixed +// slot) or that carries fewer than two components is broken. The load reports it through the +// same channel as every other rejected input instead of shipping a mix the GUI integrity check +// would only flag later. +TEST_CASE("Published 3MF rejects a mixed filament definition with impossible components", "[Preset][Bundle][Published]") +{ + // A two-physical-plus-one-mix author file; the definition under test sits on slot 2. + auto make_file_config = [](const std::string &components) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", components }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + return config; + }; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + for (const char *components : { "1,4", "1,3", "1" }) { + // The claimed components: "1,4" names a slot past the final count, "1,3" names the mix + // slot itself (1-based), "1" is not enough components to blend. + INFO("components = " << components); + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(components); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition was rejected, not applied: the slot stays a plain (grown) slot. + REQUIRE(bundle.filament_presets.size() == 3); + CHECK_FALSE(bundle.is_mixed_filament(2)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[2].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2].empty()); + // Reported through the shared rejection channel. + if (std::string(components) == "1") + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); + else + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: components reference missing slots)")); + // The blended colour was not written into the (shared) slot preset either. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#123456" }); + CHECK(pub.material_replacements.empty()); + } +} + +// The relocation shifts cells inside the file's per-slot mixed arrays; a payload too short to +// actually carry the definition degrades to empty cells, which the definition validation then +// reports - an empty mix must not ship as a virtual slot. +TEST_CASE("Published 3MF reports a relocated mixed filament whose payload cells are missing", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 3; // authored slot 3; the receiver's five real slots occupy 0-4 + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + // The file's mixed arrays only cover its single physical slot: the definition data for + // slot 3 does not exist in the payload. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_is_mixed")->values = { 0 }; + config.opt("filament_mixed_components")->values = { "" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The mix was relocated past the physical territory... + REQUIRE(pub.mixed_slot_relocations.size() == 1); + CHECK(pub.mixed_slot_relocations.at(3) == 5); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0].find("slot 3 -> slot 5") != std::string::npos); + // ...and the receiver grew to hold the destination slot, but the definition itself was + // rejected: the relocated cells degraded to empty defaults and were reported. + REQUIRE(bundle.filament_presets.size() == 6); + CHECK_FALSE(bundle.is_mixed_filament(5)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[5].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[5].empty()); + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); + // The five real slots kept their colours. + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); +} + +// A grown slot's material is chosen by identity tiers: exact preset name, then the bare +// name/alias form, then exact setting_id, then exact filament_id, then vendor+type, then type +// only. Each section pits two adjacent tiers against each other. +TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + PublishedMaterialEntry entry; + entry.slot = 2; + entry.filament_type = "PLA"; + + SECTION("an exact preset name outranks the bare-name form") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &bare = add_inmemory_preset(bundle.filaments, "Authored PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + Preset &exact = add_inmemory_preset(bundle.filaments, "Authored PLA @Vendor"); + exact.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Authored PLA @Vendor"); + CHECK(pub.material_replacements.empty()); + } + + SECTION("a bare name outranks an exact setting_id") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &bare = add_inmemory_preset(bundle.filaments, "Authored PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + Preset &sid = add_inmemory_preset(bundle.filaments, "Bbb PLA"); + sid.config.opt_string("filament_type", 0u) = "PLA"; + sid.setting_id = "SID123"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name + entry.setting_id = "SID123"; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Authored PLA"); + } + + SECTION("an exact setting_id outranks an exact filament_id") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &sid = add_inmemory_preset(bundle.filaments, "Bbb PLA"); + sid.config.opt_string("filament_type", 0u) = "PLA"; + sid.setting_id = "SID123"; + Preset &fid = add_inmemory_preset(bundle.filaments, "Ccc PLA"); + fid.config.opt_string("filament_type", 0u) = "PLA"; + fid.filament_id = "GFA00"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name + entry.setting_id = "SID123"; + entry.filament_id = "GFA00"; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Bbb PLA"); + } + + SECTION("a vendor+type match is reported as a substitute") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &exact_vendor = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + exact_vendor.config.opt_string("filament_type", 0u) = "PLA"; + exact_vendor.config.opt_string("filament_vendor", 0u) = "Generic"; + Preset &other_vendor = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + other_vendor.config.opt_string("filament_type", 0u) = "PLA"; + other_vendor.config.opt_string("filament_vendor", 0u) = "Other"; + bundle.filament_presets = { "My PLA" }; + + entry.filament_vendor = "Generic"; // no name or id identity: the family tiers decide + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + // The same-vendor PLA outranks the type-only candidate... + CHECK(bundle.filament_presets[2] == "Aaa PLA"); + // ...and since it is not an exact material match, the load says so. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: Aaa PLA (substitute: no exact material match)"); + } +} + +// Structural keys (identity links like filament_ids / inherits / printer_settings_id) are +// never applied onto the receiver and never reported: a hand-crafted file listing them must +// not trigger the "could not be applied" warning, while unknown keys still do. +TEST_CASE("Published 3MF silently ignores structural keys in published_keys", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt_float("layer_height") = 0.28; + Preset::normalize(config); + + PresetBundle bundle; + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + const std::vector ids_before = + bundle.filaments.get_edited_preset().config.opt("filament_settings_id")->values; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "filament_ids", "inherits", "printer_settings_id", "layer_height", "not_a_setting" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The real setting applied... + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 1e-6)); + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + // ...the structural keys were neither applied nor reported... + CHECK_FALSE(contains_key(pub.skipped_keys, "filament_ids")); + CHECK_FALSE(contains_key(pub.skipped_keys, "inherits")); + CHECK_FALSE(contains_key(pub.skipped_keys, "printer_settings_id")); + CHECK(bundle.filaments.get_edited_preset().config.opt("filament_settings_id")->values == ids_before); + // ...while an unknown key still reports. + CHECK(contains_key(pub.skipped_keys, "not_a_setting")); +} + +// A whole-vector key requires the receiver's vector to have the same number of elements as the +// author's: pasting a 3-extruder list into a 2-extruder machine would overwrite the wrong +// elements, so the key is reported as skipped and the receiver keeps its own values. +TEST_CASE("Published 3MF skips a whole-vector key whose size does not match the receiver", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt_float("layer_height") = 0.28; + // Author's wiping matrix sized for three extruders. + config.set_key_value("wiping_volumes_extruders", new ConfigOptionFloats({ 10., 20., 30. })); + Preset::normalize(config); + + PresetBundle bundle; + // Receiver sized for two extruders. + bundle.prints.get_edited_preset().config.set_key_value("wiping_volumes_extruders", new ConfigOptionFloats({ 40., 50. })); + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "wiping_volumes_extruders", "layer_height" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, + { 40., 50. }); + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); + // The matching scalar key still applied. + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 1e-6)); +} + +// The uniquify chain continues past the first suffix: with both "X" and "X (Published)" already +// present, the next imported copy of "X" lands as "X (Published 2)" and leaves the others alone. +TEST_CASE("Published 3MF uniquifies a second imported full material as (Published 2)", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + bare.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &pub1 = add_inmemory_preset(bundle.filaments, "Generic PLA (Published)"); + pub1.config.opt_string("filament_type", 0u) = "PLA"; + pub1.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @Qidi Q2 0.4 nozzle"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA (Published 2)"); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published 2)", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published)", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (Published 2) (published material imported)"); + CHECK(pub.skipped_keys.empty()); +} + +// A mixed filament's blended colour is a swatch for the project's colour strip only: it must +// never be written into the slot's (possibly shared) preset config, or every slot referencing +// that preset would turn into the blend colour. +TEST_CASE("Published 3MF never writes a mixed filament's blended colour into the slot's preset", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.5,0.5"; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition applied like-for-like onto the virtual slot... + CHECK(bundle.filament_presets.size() == 3); + CHECK(bundle.is_mixed_filament(2)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[2] == "1,2"); + // ...the blend colour landed in the project strip only... + CHECK(bundle.project_config.opt("filament_colour")->values[2] == "#800080"); + // ...and the shared preset kept its own colour: slots 0 and 1 render unchanged. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#123456" }); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); +} + +// Duplicate entries for the same authored slot only occur in hand-crafted files (the dialog +// emits one entry per slot); the load's contract under that input is deterministic last-wins, +// not corruption. +TEST_CASE("Published 3MF applies duplicate entries for one slot last-wins", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#000000" }; + bundle.filament_presets = { "My PLA" }; + + auto make_entry = [](const char *color) { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry("#AA0000"), make_entry("#BB0000") }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The second entry won both the project strip and the slot's preset. + CHECK(bundle.project_config.opt("filament_colour")->values[0] == "#BB0000"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#BB0000" }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.9 }); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); +} From d9fa43f1d7e867cc315beecef2eeb06604a5118e Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Fri, 28 Aug 2026 19:40:31 +0800 Subject: [PATCH 058/208] fix: add opc support for ota workflow --- src/slic3r/Utils/PresetUpdater.cpp | 159 ++++++++++++++++++----------- 1 file changed, 100 insertions(+), 59 deletions(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 56a2b66b49..db29c7abf7 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -29,6 +29,7 @@ #include "libslic3r/format.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PresetCacheFormat.hpp" #include "libslic3r_version.h" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -96,6 +97,8 @@ struct Update bool forced_update; //BBS: add directory support bool is_directory {false}; + // Orca: a vendor update may be the cache-only form. + bool is_opc {false}; Update() {} //BBS: add directory support @@ -131,6 +134,18 @@ struct Update } else { copy_file_fix(source, target); + + // A vendor must be installed in exactly one form. Remove the + // representation that would otherwise be stale or shadow this one. + boost::system::error_code ec; + if (is_opc) { + fs::remove(target.parent_path() / (vendor + ".json"), ec); + ec.clear(); + fs::remove_all(target.parent_path() / vendor, ec); + } + else { + fs::remove(target.parent_path() / (vendor + ".opc"), ec); + } } } @@ -708,6 +723,7 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) fs::remove_all(cache_profile_path / vendor_id, ec); fs::remove(cache_profile_path / (vendor_id + ".json"), ec); fs::remove(cache_profile_path / (vendor_id + ".changelog"), ec); + fs::remove(cache_profile_path / (vendor_id + ".opc"), ec); // Download the zip BOOST_LOG_TRIVIAL(info) << "[Orca Updater] downloading update for " << vendor_id @@ -735,7 +751,7 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) if (!download_ok || cancel || vendor_check_cancel) return; // Extract vendor profile bundles under ota/profiles. The downloaded zip contains - // the vendor json/folder at its root. + // either the vendor json/folder or the vendor cache at its root. BOOST_LOG_TRIVIAL(info) << "[Orca Updater] extracting update for " << vendor_id; if (!extract_file(download_file, cache_profile_path)) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] extraction failed for " << vendor_id; @@ -1147,68 +1163,93 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version if (!fs::exists(cache_profile_path)) return updates; - for (auto &dir_entry : boost::filesystem::directory_iterator(cache_profile_path)) { - const auto &path = dir_entry.path(); - std::string file_path = path.string(); - if (is_json_file(file_path)) { - const auto path_in_vendor = vendor_path / path.filename(); - std::string vendor_name = path.filename().string(); - // Remove the .json suffix. - vendor_name.erase(vendor_name.size() - 5); - auto print_in_cache = (cache_profile_path / vendor_name / PRESET_PRINT_NAME); - auto filament_in_cache = (cache_profile_path / vendor_name / PRESET_FILAMENT_NAME); - auto machine_in_cache = (cache_profile_path / vendor_name / PRESET_PRINTER_NAME); + for (auto &dir_entry : boost::filesystem::directory_iterator(cache_profile_path)) { + const auto &path = dir_entry.path(); + std::string file_path = path.string(); + const bool is_opc_file = boost::iequals(path.extension().string(), ".opc"); + if (!is_json_file(file_path) && !is_opc_file) + continue; - if (is_vendor_installed(vendor_name) - || fs::exists(print_in_cache) - || fs::exists(filament_in_cache) - || fs::exists(machine_in_cache)) { - // Orca: a vendor installed as a preset cache carries its version there. - Semver vendor_ver = installed_vendor_version(vendor_name); + const std::string vendor_name = path.stem().string(); + auto print_in_cache = (cache_profile_path / vendor_name / PRESET_PRINT_NAME); + auto filament_in_cache = (cache_profile_path / vendor_name / PRESET_FILAMENT_NAME); + auto machine_in_cache = (cache_profile_path / vendor_name / PRESET_PRINTER_NAME); - std::map key_values; - std::vector keys(3); - Semver cache_ver; - keys[0] = BBL_JSON_KEY_VERSION; - keys[1] = BBL_JSON_KEY_DESCRIPTION; - keys[2] = BBL_JSON_KEY_FORCE_UPDATE; - get_values_from_json(file_path, keys, key_values); - std::string description = key_values[BBL_JSON_KEY_DESCRIPTION]; - bool force_update = false; - if (key_values.find(BBL_JSON_KEY_FORCE_UPDATE) != key_values.end()) - force_update = (key_values[BBL_JSON_KEY_FORCE_UPDATE] == "1")?true:false; - auto config_version = Semver::parse(key_values[BBL_JSON_KEY_VERSION]); - if (config_version) - cache_ver = *config_version; + if (is_vendor_installed(vendor_name) + || is_opc_file + || fs::exists(print_in_cache) + || fs::exists(filament_in_cache) + || fs::exists(machine_in_cache)) { + // Orca: a vendor installed as a preset cache carries its version there. + Semver vendor_ver = installed_vendor_version(vendor_name); - std::string changelog; - std::string changelog_file = (cache_profile_path / (vendor_name + ".changelog")).string(); - boost::nowide::ifstream ifs(changelog_file); - if (ifs) { - std::ostringstream oss; - oss<< ifs.rdbuf(); - changelog = oss.str(); - ifs.close(); - } + Semver cache_ver; + std::string description; + bool force_update = false; + if (is_opc_file) { + cache_ver = VendorCacheFile::usable_version(file_path, vendor_name); + if (!cache_ver.valid()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater]:ignoring unreadable vendor cache " << file_path; + continue; + } + } + else { + std::map key_values; + std::vector keys(3); + keys[0] = BBL_JSON_KEY_VERSION; + keys[1] = BBL_JSON_KEY_DESCRIPTION; + keys[2] = BBL_JSON_KEY_FORCE_UPDATE; + get_values_from_json(file_path, keys, key_values); + description = key_values[BBL_JSON_KEY_DESCRIPTION]; + if (key_values.find(BBL_JSON_KEY_FORCE_UPDATE) != key_values.end()) + force_update = (key_values[BBL_JSON_KEY_FORCE_UPDATE] == "1")?true:false; + auto config_version = Semver::parse(key_values[BBL_JSON_KEY_VERSION]); + if (config_version) + cache_ver = *config_version; + } - if (vendor_ver < cache_ver) { - BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:need to update settings from " << vendor_ver.to_string() - << " to newer version " << cache_ver.to_string() << ", app version " << SLIC3R_VERSION; - Version version; - version.config_version = cache_ver; - version.comment = description; - // Orca: update vendor.json - updates.updates.emplace_back(std::move(file_path), path_in_vendor.string(), std::move(version), vendor_name, changelog, "", force_update, false); - //Orca: update vendor folder - updates.updates.emplace_back(cache_profile_path / vendor_name, vendor_path / vendor_name, Version(), vendor_name, "", "", force_update, true); - } else { - BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:cached settings for " << vendor_name - << " are not newer than installed version, installed " << vendor_ver.to_string() - << ", cached " << cache_ver.to_string(); - } - } - } - } + std::string changelog; + std::string changelog_file = (cache_profile_path / (vendor_name + ".changelog")).string(); + boost::nowide::ifstream ifs(changelog_file); + if (ifs) { + std::ostringstream oss; + oss<< ifs.rdbuf(); + changelog = oss.str(); + ifs.close(); + } + + if (vendor_ver < cache_ver) { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:need to update settings from " << vendor_ver.to_string() + << " to newer version " << cache_ver.to_string() << ", app version " << SLIC3R_VERSION; + Version version; + version.config_version = cache_ver; + version.comment = description; + if (is_opc_file) { + // A cache contains the vendor profile and all presets. + // Install it directly; Update::install removes any + // superseded JSON representation. + auto &update = updates.updates.emplace_back( + std::move(file_path), vendor_path / (vendor_name + ".opc"), + std::move(version), vendor_name, changelog, "", force_update, false); + update.is_opc = true; + } + else { + // JSON profile and its preset directory are installed + // separately, as before. + updates.updates.emplace_back(std::move(file_path), + vendor_path / (vendor_name + ".json"), std::move(version), + vendor_name, changelog, "", force_update, false); + updates.updates.emplace_back(cache_profile_path / vendor_name, + vendor_path / vendor_name, Version(), vendor_name, + "", "", force_update, true); + } + } else { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:cached settings for " << vendor_name + << " are not newer than installed version, installed " << vendor_ver.to_string() + << ", cached " << cache_ver.to_string(); + } + } + } return updates; } From 8994ab9f98f8bf5ba4ab14a59d7a48e58997c997 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 30 Aug 2026 20:56:12 +0800 Subject: [PATCH 059/208] make the script executable --- scripts/assign_filament_ids.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/assign_filament_ids.py diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py old mode 100644 new mode 100755 From 06517e623f0bcd61518dfe9409d77eac2b73ada2 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 31 Aug 2026 10:46:23 +0800 Subject: [PATCH 060/208] Fixes issue where user imports a 3MF file where filament slots exceeds the maximum number of slots that user has on its printer --- src/libslic3r/PresetBundle.cpp | 183 ++++++++--- src/libslic3r/PublishSettings.hpp | 7 + .../libslic3r/test_preset_bundle_loading.cpp | 296 ++++++++++++++++++ 3 files changed, 446 insertions(+), 40 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 3219dec6d8..0e82046ce9 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5407,6 +5407,11 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // preset no other slot references wins on equal scores; with no replacement // available the receiver's material is kept and the keys are reported as skipped; // - colour: applied to the slot regardless of the type gate. + // - capacity: on a non-SEMM receiver whose printer has fewer nozzles than the + // authored slot needs, the entry becomes an empty mixed-filament placeholder + // appended at the tail (the GUI flags it; the user assigns components from their + // own filaments); on a single-physical-slot receiver it is dropped and reported + // instead, since an empty mix could never be edited there. // Applied partial values land on the collection's edited layer when the slot references // it and that layer survives the load (visible as a modification, revertible, the user's // unsaved edits preserved), otherwise on the stored preset in place. @@ -5417,11 +5422,38 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // Grow the receiver's slots only as far as the highest published slot (never // shrink, never pull filler materials for unpublished slots). bool has_published_entries = false; - size_t grow_target = 0; + // Physical filament capacity of the receiver's printer: a non-SEMM tool-changer + // feeds filament N from nozzle N, so the nozzle count is the hard limit; a SEMM + // printer (single_extruder_multi_material) sizes its slot list by hand, so only + // the global slot limit applies (same condition as GUI_App::load_current_presets). + // Published entries that would need a NEW physical slot past this capacity are + // appended as empty mixed-filament placeholders instead of growing the list. + size_t physical_capacity = size_t(EnforcerBlockerType::ExtruderMax); + { + const Preset& receiver_printer = this->printers.get_edited_preset(); + if (receiver_printer.printer_technology() == ptFFF && + !receiver_printer.config.opt_bool("single_extruder_multi_material")) { + if (const auto* nozzle_diameter = receiver_printer.config.option("nozzle_diameter"); + nozzle_diameter != nullptr && !nozzle_diameter->values.empty()) + physical_capacity = nozzle_diameter->values.size(); + } + } + const std::set& mixed_definitions = publish_mixed_keys(); + auto is_mixed_definition = [&mixed_definitions](const PublishedMaterialEntry& entry) { + return std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { + return mixed_definitions.count(publish_base_key(key)) != 0; + }); + }; + size_t grow_target = 0; for (const PublishedMaterialEntry& entry : published_config->material_keys) { has_published_entries = true; - if (entry.slot >= 0) - grow_target = std::max(grow_target, size_t(entry.slot) + 1); + if (entry.slot < 0) + continue; + // A physical entry past the capacity becomes a tail placeholder below; its + // growth is covered by the append counter, not the positional target. + if (!is_mixed_definition(entry) && size_t(entry.slot) >= physical_capacity) + continue; + grow_target = std::max(grow_target, size_t(entry.slot) + 1); } // Mixed-filament definitions live in project-level virtual slots, so applying one // positionally onto a receiver slot that holds a real, physical filament would @@ -5439,13 +5471,12 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // from the new index. No existing slot changes meaning. // - destinations are also capped: appends past the extruder limit are dropped // and reported instead of being forced onto a physical filament. - const std::set& mixed_definitions = publish_mixed_keys(); - auto is_mixed_definition = [&mixed_definitions](const PublishedMaterialEntry& entry) { - return std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { - return mixed_definitions.count(publish_base_key(key)) != 0; - }); - }; - size_t next_free_slot = this->filament_presets.size(); + // Physical entries past the printer's capacity join the same append counter + // (dest = next_free, packed consecutively at the tail - never max(authored, + // next_free), which would grow filler physical slots past the capacity) and are + // flagged mixed_placeholder: they become empty mixed-filament placeholders the + // GUI flags for the user to assign components to. + size_t next_free_slot = this->filament_presets.size(); bool any_mixed_relocated = false; // All authored-slot -> destination moves decided by this pass, applied to the // incoming config in one batched snapshot step below (an earlier move's @@ -5455,42 +5486,95 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, std::vector> mixed_moves; for (auto entry_it = published_config->material_keys.begin(); entry_it != published_config->material_keys.end();) { PublishedMaterialEntry& entry = *entry_it; - if (entry.slot < 0 || !is_mixed_definition(entry) || - // Like-for-like override of a virtual receiver slot (bounds-checked). - this->is_mixed_filament(size_t(entry.slot))) { + if (entry.slot < 0) { ++entry_it; continue; } + const bool is_payload_mix = is_mixed_definition(entry); + // Does this entry need a tail slot at all? A payload mixed definition does, + // except when it like-for-like overrides a receiver slot that is already a + // mix (bounds-checked). A physical entry only becomes a placeholder when it + // would need a NEW physical slot: an authored position the receiver's list + // already covers is applied positionally as before, even when that list sits + // above the printer's capacity (pre-existing state is never shrunk). + bool keep_place = false; + if (is_payload_mix) + keep_place = this->is_mixed_filament(size_t(entry.slot)); + else + keep_place = size_t(entry.slot) < this->filament_presets.size() || + size_t(entry.slot) < physical_capacity; + if (keep_place) { + ++entry_it; + continue; + } + const std::string material_label = !entry.filament_id.empty() ? entry.filament_id : + !entry.publish_type_value.empty() ? entry.publish_type_value : + entry.filament_type; if (std::max(size_t(entry.slot), next_free_slot) >= size_t(EnforcerBlockerType::ExtruderMax)) { // No free virtual slot left: report instead of destroying a real filament. - const std::string material_label = !entry.filament_id.empty() ? entry.filament_id : - !entry.publish_type_value.empty() ? entry.publish_type_value : - entry.filament_type; // The local skipped_keys is published wholesale at the end of the pass; // writing published_config->skipped_keys here would be clobbered by it. - skipped_keys.emplace_back("material:" + material_label + - " (mixed filament definition: filament slot limit reached)"); - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot - << " could not be placed: all " << next_free_slot << " slots exhausted"; + skipped_keys.emplace_back("material:" + material_label + (is_payload_mix ? + " (mixed filament definition: filament slot limit reached)" : + " (filament slot limit reached)")); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF " << (is_payload_mix ? "mixed filament definition" : "material") + << " from slot " << entry.slot << " could not be placed: all " << next_free_slot + << " slots exhausted"; + entry_it = published_config->material_keys.erase(entry_it); + continue; + } + if (!is_payload_mix && physical_capacity < 2) { + // A single physical slot can never host a mixed-filament editor (the + // sidebar's mixed section needs two physical filaments to mix), so a + // placeholder would be invisible and unfixable: drop the entry and + // report it like any other unappliable input. + skipped_keys.emplace_back("material:" + material_label + " (printer supports only " + + std::to_string(physical_capacity) + " filament)"); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF material from slot " << entry.slot + << " dropped: printer supports only " << physical_capacity << " filament"; entry_it = published_config->material_keys.erase(entry_it); continue; } const int authored_slot = entry.slot; - const int dest_slot = int(std::max(size_t(authored_slot), next_free_slot)); + const int dest_slot = is_payload_mix ? int(std::max(size_t(authored_slot), next_free_slot)) : int(next_free_slot); next_free_slot = size_t(dest_slot) + 1; - if (dest_slot == authored_slot) - // Uncontended fresh tail slot: the definition is already readable there. - ++entry_it; - else { - entry.slot = dest_slot; + if (is_payload_mix) { + if (dest_slot == authored_slot) + // Uncontended fresh tail slot: the definition is already readable there. + ++entry_it; + else { + entry.slot = dest_slot; + any_mixed_relocated = true; + mixed_moves.emplace_back(size_t(authored_slot), size_t(entry.slot)); + published_config->mixed_slot_relocations.emplace(authored_slot, entry.slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(authored_slot) + " -> slot " + + std::to_string(entry.slot) + + ": mixed filament relocated (would have replaced a physical filament)"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated mixed filament slot " << authored_slot + << " -> " << entry.slot; + ++entry_it; + } + } else { + // Surplus published material beyond the printer's capacity: become an + // empty mixed-filament placeholder at the next free tail slot. The flag + // routes the entry to the placeholder finalize below; the slot's + // definition stays empty until the user assigns components. + entry.mixed_placeholder = true; any_mixed_relocated = true; - mixed_moves.emplace_back(size_t(authored_slot), size_t(entry.slot)); - published_config->mixed_slot_relocations.emplace(authored_slot, entry.slot); - published_config->material_replacements.emplace_back("slot " + std::to_string(authored_slot) + " -> slot " + - std::to_string(entry.slot) + - ": mixed filament relocated (would have replaced a physical filament)"); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated mixed filament slot " << authored_slot - << " -> " << entry.slot; + if (dest_slot != authored_slot) { + entry.slot = dest_slot; + mixed_moves.emplace_back(size_t(authored_slot), size_t(dest_slot)); + published_config->mixed_slot_relocations.emplace(authored_slot, dest_slot); + } + published_config->material_replacements.emplace_back( + (dest_slot != authored_slot ? + "slot " + std::to_string(authored_slot) + " -> slot " + std::to_string(dest_slot) : + "slot " + std::to_string(dest_slot)) + + ": " + material_label + " placed as an unassigned mixed filament (printer supports only " + + std::to_string(physical_capacity) + " filaments)"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF material from slot " << authored_slot + << " placed as an unassigned mixed filament at slot " << dest_slot + << " (printer supports only " << physical_capacity << " filaments)"; ++entry_it; } } @@ -5501,9 +5585,10 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // Defensive cap: growth never exceeds the file's own filament count. The // receiver's current slot count is a floor: neither the preset list nor the // project vectors are ever shrunk, even when the file carries fewer filaments - // than the receiver has slots. Relocated mixed entries legitimately land past - // the file's own slot count (virtual slots consume no nozzle or tray), so - // their destinations lift the ceiling explicitly. + // than the receiver has slots. Relocated mixed entries and capacity + // placeholders legitimately land past the file's own slot count (virtual + // slots consume no nozzle or tray), so their append destinations lift the + // ceiling explicitly. const size_t target_slots = std::max({this->filament_presets.size(), std::min(grow_target, num_filaments), any_mixed_relocated ? next_free_slot : size_t(0)}); // Slots carrying published content, steering the initial preset selection of @@ -5884,12 +5969,14 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, this->filament_presets.front() == this->filaments.get_edited_preset().name; // Final layout for mix-definition validation: every slot that will hold a // mixed definition once this load completes - the receiver's own virtual - // slots plus each published mixed entry's final (possibly relocated) slot. - // Mix components are 1-based slot numbers, so a component is valid only - // when the slot it names exists and does not itself hold a mixed filament. + // slots, each published mixed entry's final (possibly relocated) slot, and + // each capacity placeholder (they become mixes in the finalize below, before + // this loop's is_mixed_filament scan would see them). Mix components are + // 1-based slot numbers, so a component is valid only when the slot it names + // exists and does not itself hold a mixed filament. std::set mixed_final_slots; for (const PublishedMaterialEntry& mix_entry : published_config->material_keys) - if (mix_entry.slot >= 0 && is_mixed_definition(mix_entry)) + if (mix_entry.slot >= 0 && (is_mixed_definition(mix_entry) || mix_entry.mixed_placeholder)) mixed_final_slots.insert(mix_entry.slot); for (size_t i = 0; i < this->filament_presets.size(); ++i) if (this->is_mixed_filament(i)) @@ -5903,6 +5990,22 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, if (entry.slot < 0 || size_t(entry.slot) >= this->filament_presets.size()) continue; // out of range: nothing to do for this slot const size_t slot = size_t(entry.slot); + + // Surplus published material beyond the printer's capacity: finalize the + // tail placeholder - mark the slot virtual with an intentionally empty + // definition. The GUI flags the empty mix (check_mixed_filament_integrity) + // and blocks slicing until the user assigns components from their own + // filaments. The entry's keys are deliberately not applied and no preset + // is detached: the placeholder carries no material of its own. The colour + // was already seeded into the project arrays by the growth pass above. + if (entry.mixed_placeholder) { + if (ConfigOptionBools* is_mixed_opt = this->project_config.opt("filament_is_mixed"); + is_mixed_opt != nullptr && slot < is_mixed_opt->values.size()) + is_mixed_opt->values[slot] = true; + material_applied = true; + continue; + } + // Resolve the stored preset itself (real=true), never the edited snapshot: // find_preset would return &m_edited_preset for the selected slot. The // overlay target below decides between the edited layer and this preset. diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index 038a6eca11..d7f2c13c5f 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -80,6 +80,13 @@ struct PublishedMaterialEntry { // Required filament colour, applied on load regardless of the type match. bool publish_color{false}; std::string color; + // Import-side only, never serialized: the entry's authored slot sits past the receiver + // printer's physical filament capacity, so instead of growing a physical slot the entry + // is appended as an empty mixed-filament placeholder (virtual tail slot; the GUI flags + // it and the user assigns components from their own filaments). The flag also keeps the + // entry out of the payload mixed-definition validation and the value-apply passes, + // which only make sense for a slot that carries a real material. + bool mixed_placeholder{false}; }; // "PLA High Speed" -> "PLA" (strip a space modifier); dash types like "PA-CF" are kept intact. diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 356645d06c..069d40b8e5 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -2932,6 +2932,302 @@ TEST_CASE("Published 3MF relocates a mixed filament instead of overwriting a phy } } +// The receiver's printer gates how many PHYSICAL filament slots a published 3MF may add: a +// non-SEMM tool-changer feeds filament N from nozzle N, so a published slot past the nozzle +// count cannot become a physical filament. It becomes an empty mixed-filament placeholder +// instead - a virtual tail slot the GUI flags (broken mix) and the user fills with components +// from their own filaments. SEMM receivers keep the ungated behaviour. +TEST_CASE("Published 3MF turns a surplus slot past the printer's filament capacity into an empty mixed placeholder", "[Preset][Bundle][Published]") +{ + // An author project with physical slots, no mixed ones. + auto make_file_config = [](size_t num_author_slots) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + std::vector diameters(num_author_slots, 1.75); + std::vector self_index; + std::vector variants; + for (size_t i = 0; i < num_author_slots; ++i) { + self_index.push_back(int(i + 1)); + variants.emplace_back("Direct Drive Standard"); + } + config.opt("filament_diameter")->values = diameters; + config.opt("filament_self_index")->values = self_index; + config.opt("filament_extruder_variant")->values = variants; + config.opt("filament_colour")->values.resize(num_author_slots, "#808080"); + config.opt("filament_type")->values.assign(num_author_slots, "PLA"); + config.opt("filament_vendor")->values.assign(num_author_slots, "Generic"); + config.opt("filament_ids")->values.resize(num_author_slots); + return config; + }; + // A non-SEMM receiver with nozzles running copies of one preset. + auto make_receiver = [](PresetBundle &bundle, size_t nozzles, size_t slots) { + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(slots, "My PLA"); + bundle.set_num_filaments(slots, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(nozzles, 0.4); + }; + auto make_physical_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + + // The reported case: an author publishes with a filament on slot 5; the receiver is a + // 4-filament tool-changer. The receiver keeps its four physical slots and the surplus + // material lands as an empty mixed placeholder at the tail. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew by exactly one virtual slot, not a fifth physical one. + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + // The placeholder carries no definition: the GUI's integrity check flags it and + // blocks slicing until the user assigns components. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4].empty()); + // The four physical slots kept their meaning and colours. + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[3] == "My PLA"); + // The published colour seeds the placeholder's swatch. + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + // The conversion is surfaced through the post-import notice. + bool placeholder_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("unassigned mixed filament") != std::string::npos) + placeholder_reported = true; + CHECK(placeholder_reported); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.mixed_slot_relocations.empty()); + } + + // Two surplus slots (5 and 6) become two consecutive empty placeholders. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF"), make_physical_entry(5, "#F0F0F0") }; + DynamicPrintConfig config = make_file_config(6); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 6); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 6); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 6); + CHECK(components[4].empty()); + CHECK(components[5].empty()); + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 6); + CHECK(colour[4] == "#ABCDEF"); + CHECK(colour[5] == "#F0F0F0"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.mixed_slot_relocations.empty()); + } + + // A surplus slot past both the receiver's list and the capacity packs onto the next free + // tail slot (never max(authored, next_free), which would grow filler physical slots past + // the capacity), and the relocation is recorded for the model-reference remapping. + { + PresetBundle bundle; + make_receiver(bundle, 2, 2); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(3, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(4); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2].empty()); + REQUIRE(pub.mixed_slot_relocations.size() == 1); + CHECK(pub.mixed_slot_relocations.at(3) == 2); + bool relocation_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 3 -> slot 2") != std::string::npos && + message.find("unassigned mixed filament") != std::string::npos) + relocation_reported = true; + CHECK(relocation_reported); + CHECK(pub.skipped_keys.empty()); + } + + // A Full Publish entry past the capacity becomes a placeholder too: no standalone + // detached copy is created for a material that got no physical slot. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedMaterialEntry entry = make_physical_entry(4, "#ABCDEF"); + entry.full = true; + entry.preset_name = "Generic PLA @System"; + entry.filament_id = "GFL99"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK(is_mixed[4]); + // No detached copy under the stripped name or its uniquified forms. + CHECK(bundle.filaments.find_preset("Generic PLA", false, true) == nullptr); + CHECK(bundle.filaments.find_preset("Generic PLA (Published)", false, true) == nullptr); + CHECK(pub.skipped_keys.empty()); + } + + // A SEMM receiver (the default printer preset) sizes its slot list by hand: the published + // slot past the nozzle count still grows physically, as before the capacity gate. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(4, "#123456"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + CHECK(pub.skipped_keys.empty()); + } + + // A pre-existing oversized slot list is never shrunk: a published entry pointing at one + // of its slots is applied positionally even though the list exceeds the nozzle count. + { + PresetBundle bundle; + make_receiver(bundle, 4, 5); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + // The published colour reached the addressed slot's (shared) preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#ABCDEF" }); + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + CHECK(pub.skipped_keys.empty()); + } + + // On a single-physical-slot receiver an empty mix could never be edited (the sidebar's + // mixed section needs two physical filaments), so the surplus entry is dropped and + // reported instead of becoming an unfixable placeholder. + { + PresetBundle bundle; + make_receiver(bundle, 1, 1); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(1, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(2); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 1); + CHECK_FALSE(is_mixed[0]); + REQUIRE(pub.skipped_keys.size() == 1); + CHECK(pub.skipped_keys.front().find("printer supports only 1") != std::string::npos); + } + + // A payload mixed definition is exempt from the capacity gate: mixes are virtual slots + // that consume no nozzle, so a published mix past the nozzle count still lands. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedMaterialEntry mix; + mix.slot = 4; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(5); + config.opt("filament_is_mixed")->values.assign(5, 0); + config.opt("filament_mixed_components")->values.assign(5, ""); + config.opt("filament_mixed_sublayer_ratios")->values.assign(5, ""); + config.opt("filament_is_mixed")->values[4] = 1; + config.opt("filament_mixed_components")->values[4] = "1,2"; + config.opt("filament_mixed_sublayer_ratios")->values[4] = "0.6,0.4"; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK(is_mixed[4]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 5); + CHECK(ratios[4] == "0.6,0.4"); + CHECK(pub.skipped_keys.empty()); + } +} + // A single-extruder receiver collapses the author's per-extruder printer slots onto its single // slot: the first serialized variant of a base key is applied, the remaining variants of that // base key are reported as skipped. From fff0efdb275003cf19d2c04b9605f3af6270a37e Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 31 Aug 2026 13:57:21 +0800 Subject: [PATCH 061/208] Fixes filament import bug --- src/libslic3r/PresetBundle.cpp | 61 ++++++++- .../libslic3r/test_preset_bundle_loading.cpp | 123 +++++++++++++++++- 2 files changed, 173 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 2a7e97a34e..688d2b90b0 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5979,6 +5979,22 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, if (this->is_mixed_filament(i)) mixed_final_slots.insert(int(i)); const size_t mixed_final_slot_count = this->filament_presets.size(); + // Finalize a slot as an empty mixed-filament placeholder: mark it virtual with + // an intentionally empty definition, and add it to the final-layout set so a + // later entry's components validate against the new state. Used by the capacity + // placeholders and by any mixed definition that has to be rejected after its + // slot was already grown and seeded - without it such a slot would keep the + // seeded preset and masquerade as a real filament. No definition is written: + // the placeholder carries no material of its own (the GUI flags the empty mix + // via check_mixed_filament_integrity and blocks slicing until components are + // assigned). The slot's colour was already seeded by the growth pass above. + auto finalize_mixed_placeholder = [&](size_t slot_idx) { + if (ConfigOptionBools* is_mixed_opt = this->project_config.opt("filament_is_mixed"); + is_mixed_opt != nullptr && slot_idx < is_mixed_opt->values.size()) + is_mixed_opt->values[slot_idx] = true; + mixed_final_slots.insert(int(slot_idx)); + material_applied = true; + }; // Full Publish within-load dedup: identical Full materials (same setting_id // + preset_name identity) share one created instance, so an author who // pointed two slots at one preset yields one standalone copy here. @@ -5996,10 +6012,7 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // is detached: the placeholder carries no material of its own. The colour // was already seeded into the project arrays by the growth pass above. if (entry.mixed_placeholder) { - if (ConfigOptionBools* is_mixed_opt = this->project_config.opt("filament_is_mixed"); - is_mixed_opt != nullptr && slot < is_mixed_opt->values.size()) - is_mixed_opt->values[slot] = true; - material_applied = true; + finalize_mixed_placeholder(slot); continue; } @@ -6007,8 +6020,19 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // find_preset would return &m_edited_preset for the selected slot. The // overlay target below decides between the edited layer and this preset. Preset* recv = this->filaments.find_preset(this->filament_presets[slot], false, true); - if (recv == nullptr) + if (recv == nullptr) { + // Defensive: the slot exists (grown and seeded above) but its preset + // could not be resolved. A mixed definition left unapplied on such a + // slot would keep the seeded preset and look like a real filament: + // finalize it as an empty placeholder instead, like a rejected + // definition below. + if (is_mixed_definition(entry) && !this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported"); + } continue; + } const std::string material_label = entry.filament_id.empty() ? (entry.publish_type_value.empty() ? entry.filament_type : @@ -6045,6 +6069,23 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, skipped_keys.emplace_back("material:" + material_label + " (mixed filament definition: " + mix_error + ")"); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot << " rejected: " << mix_error; + // Degradation, not silent corruption: the slot was already grown and + // seeded by the pass above, so skipping the definition alone would + // leave it holding the seeded preset and looking like a real + // filament that carries the mix identity but no mix. + // - a slot that was NOT already a receiver mix is finalized as an + // empty mixed placeholder (consistent with the capacity + // placeholders; the user assigns components there); + // - a like-for-like override of the receiver's own mix leaves that + // valid definition untouched: nothing was applied, so the + // receiver's cells are intact and only the author's definition + // is reported as skipped above. + if (!this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported (" + + mix_error + ")"); + } continue; } } @@ -6247,6 +6288,16 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, for (const std::string& key : entry.keys) skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); apply_slot = false; + // A mixed definition left unapplied here would keep the grown + // slot's seeded preset and masquerade as a real filament: + // finalize it as an empty placeholder like a rejected + // definition (a like-for-like override of the receiver's own + // mix is left untouched). + if (is_mixed_definition(entry) && !this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported"); + } } } } diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index a493ea9b7b..17e33f3320 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -11,6 +11,7 @@ #include "test_utils.hpp" #include +#include #include using namespace Slic3r; @@ -3671,9 +3672,11 @@ TEST_CASE("Published 3MF rejects a mixed filament definition with impossible com Preset::normalize(config); bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); - // The definition was rejected, not applied: the slot stays a plain (grown) slot. + // The definition was rejected, not applied: the grown slot is finalized as an empty + // mixed placeholder instead of keeping the seeded preset and masquerading as a real + // filament. REQUIRE(bundle.filament_presets.size() == 3); - CHECK_FALSE(bundle.is_mixed_filament(2)); + CHECK(bundle.is_mixed_filament(2)); CHECK(bundle.project_config.opt("filament_mixed_components")->values[2].empty()); CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2].empty()); // Reported through the shared rejection channel. @@ -3681,13 +3684,119 @@ TEST_CASE("Published 3MF rejects a mixed filament definition with impossible com CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); else CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: components reference missing slots)")); + // The slot change was surfaced like the other slot adaptations. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0].find("slot 2: mixed filament definition could not be imported") != std::string::npos); // The blended colour was not written into the (shared) slot preset either. CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); - CHECK(pub.material_replacements.empty()); } } +// The reported scenario: an author publishes two mixed filaments whose components are +// full-published physical slots; the receiver is a smaller tool-changer, so some of those +// component slots become empty mixed placeholders. A mix whose component turned into a +// placeholder can never be valid (mixes cannot reference mixes): it is rejected, and its +// grown slot must be finalized as an empty mixed placeholder too - not keep the seeded +// preset and masquerade as a real filament carrying the mix identity. +TEST_CASE("Published 3MF finalizes a mixed filament rejected over a placeholder component as an empty placeholder", "[Preset][Bundle][Published]") +{ + // An author project: six physical slots plus two tail mixes, the second referencing the + // sixth physical slot (H2C-style: slot 7 = 1+2, slot 8 = 2+6). + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = std::vector(8, 1.75); + config.opt("filament_self_index")->values = { 1, 2, 3, 4, 5, 6, 7, 8 }; + config.opt("filament_extruder_variant")->values = std::vector(8, "Direct Drive Standard"); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00", + "#FF00FF", "#00FFFF", "#800080", "#804000" }; + config.opt("filament_type")->values.assign(8, "PLA"); + config.opt("filament_vendor")->values.assign(8, "Generic"); + config.opt("filament_is_mixed")->values = { 0, 0, 0, 0, 0, 0, 1, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "", "", "", "1,2", "2,6" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "", "", "", "0.6,0.4", "0.5,0.5" }; + // The export always serializes all seven masked mixed arrays, not just the ones in + // use; the unused gradient arrays ride along as defaults. + config.opt("filament_mixed_gradient")->values = { 0, 0, 0, 0, 0, 0, 0, 0 }; + config.opt("filament_mixed_gradient_range")->values.assign(8, ""); + config.opt("filament_mixed_gradient_curve")->values.assign(8, ""); + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 0, 0, 0, 0, 0, 0 }; + return config; + }; + // A non-SEMM receiver with four nozzles and four slots (tool-changer style). + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(4, "My PLA"); + bundle.set_num_filaments(4, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(4, 0.4); + + auto make_full_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.full = true; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + auto make_mix_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + return entry; + }; + + // The dialog's emit order: the full-published physical slots (1, 2, 5, 6) and both mixes. + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_entry(0), make_full_entry(1), make_full_entry(4), make_full_entry(5), + make_mix_entry(6, "#800080"), make_mix_entry(7, "#804000") }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew to the author's slot count, all virtual territory at the tail. + REQUIRE(bundle.filament_presets.size() == 8); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 8); + // Slots 0-3 stayed physical; authored slots 5 and 6 (0-based 4 and 5) became capacity + // placeholders. + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[4].empty()); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[5].empty()); + // The first mix applied onto its uncontended tail slot. + CHECK(is_mixed[6]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[6] == "1,2"); + // The second mix was rejected - its second component (authored slot 6) turned into a + // placeholder - and its slot was finalized as an empty mixed placeholder instead of + // keeping the seeded preset as a phantom real filament. + CHECK(is_mixed[7]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[7].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[7].empty()); + REQUIRE(pub.skipped_keys.size() == 1); + CHECK(pub.skipped_keys[0] == "material:PLA (mixed filament definition: components reference missing slots)"); + // Two Full Publish detach lines (slots 0-1), two capacity placeholder lines (slots 4-5), + // and the rejected mix's finalization line (slot 7). + REQUIRE(pub.material_replacements.size() == 5); + CHECK(std::any_of(pub.material_replacements.begin(), pub.material_replacements.end(), + [](const std::string &line) { + return line.find("slot 7: mixed filament definition could not be imported") != std::string::npos; + })); +} + // The relocation shifts cells inside the file's per-slot mixed arrays; a payload too short to // actually carry the definition degrades to empty cells, which the definition validation then // reports - an empty mix must not ship as a virtual slot. @@ -3734,15 +3843,17 @@ TEST_CASE("Published 3MF reports a relocated mixed filament whose payload cells // The mix was relocated past the physical territory... REQUIRE(pub.mixed_slot_relocations.size() == 1); CHECK(pub.mixed_slot_relocations.at(3) == 5); - REQUIRE(pub.material_replacements.size() == 1); + REQUIRE(pub.material_replacements.size() == 2); CHECK(pub.material_replacements[0].find("slot 3 -> slot 5") != std::string::npos); // ...and the receiver grew to hold the destination slot, but the definition itself was - // rejected: the relocated cells degraded to empty defaults and were reported. + // rejected: the relocated cells degraded to empty defaults, the slot was finalized as an + // empty mixed placeholder (not a real filament), and both facts were reported. REQUIRE(bundle.filament_presets.size() == 6); - CHECK_FALSE(bundle.is_mixed_filament(5)); + CHECK(bundle.is_mixed_filament(5)); CHECK(bundle.project_config.opt("filament_mixed_components")->values[5].empty()); CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[5].empty()); CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); + CHECK(pub.material_replacements[1].find("slot 5: mixed filament definition could not be imported") != std::string::npos); // The five real slots kept their colours. CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), bundle.project_config.opt("filament_colour")->values.begin())); From a6483e79b241ce2b9ee79841913422f7a5a726dc Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 31 Aug 2026 14:50:15 +0800 Subject: [PATCH 062/208] Fix ImGui crash --- src/slic3r/GUI/NotificationManager.cpp | 6 +++++- src/slic3r/GUI/NotificationManager.hpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index bfb9f50130..044771bf7c 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -3083,7 +3083,7 @@ bool NotificationManager::push_notification_data(std::unique_ptractivate_existing(notification.get())) { - if (m_initialized) { // ignore update action - it cant be initialized if canvas and imgui context is not ready + if (m_initialized && m_imgui_ready) { if (notification->get_type() == NotificationType::SlicingWarning) { m_pop_notifications.back()->append(notification->get_data().ori_text); } else { @@ -3129,6 +3129,10 @@ void NotificationManager::stop_delayed_notifications_of_type(const NotificationT void NotificationManager::render_notifications(GLCanvas3D &canvas, float overlay_width, float bottom_margin, float right_margin) { + // Notifications render inside an ImGui frame, so the font atlas is built from this point on + // and pushed notifications may safely measure their text. + m_imgui_ready = true; + sort_notifications(); float bottom_up_last_y = bottom_margin; // ORCA dont scale margins diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index d7a5d49977..55d10dd95c 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -1054,6 +1054,11 @@ private: bool m_is_dark = false; // set by init(), until false notifications are only added not updated and frame is not requested after push bool m_initialized{ false }; + // set by render_notifications() on the first rendered frame. m_initialized only proves the + // manager exists, not that the ImGui context can measure text: the font atlas is built lazily + // in ImGuiWrapper::new_frame() on the first GL render, so updating a notification before that + // (PopNotification::init -> count_spaces -> ImGui::CalcTextSize) dereferences a null font. + bool m_imgui_ready{ false }; // Target for wxWidgets events sent by clicking on the hyperlink available at some notifications. wxEvtHandler* m_evt_handler; // Cache of IDs to identify and reuse ImGUI windows. From c4fea8ad2477259fa4c50541407ebb4398f8d755 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Mon, 31 Aug 2026 15:48:13 +0800 Subject: [PATCH 063/208] gate workflow with enable_ota flag in app config --- src/slic3r/Utils/PresetUpdater.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index db29c7abf7..2de8716f47 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -283,7 +283,7 @@ void PresetUpdater::priv::set_download_prefs(AppConfig *app_config) version_check_url = app_config->version_check_url(); auto profile_update_url = app_config->profile_update_url(); - if (!profile_update_url.empty()) + if (!profile_update_url.empty() && app_config->get_bool("enable_ota")) enabled_config_update = true; else enabled_config_update = false; @@ -1055,6 +1055,10 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer"; AppConfig *app_config = GUI::wxGetApp().app_config; + + if (!app_config->get_bool("enable_ota")) + return; + const auto enabled_vendors = app_config->vendors(); std::set bundles; From 21c0bf795ad25ed55000d2bf6c923d88a5ba888e Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 31 Aug 2026 16:19:10 +0800 Subject: [PATCH 064/208] Fixes indentation on the Full Publish toggle --- src/slic3r/GUI/PublishSettingsDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 1a8a860301..455a318935 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -986,13 +986,13 @@ size_t PublishSettingsDialog::category_index_for( page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); // Line 2: the "Full Publish" toggle, on its own line below the title (hidden until - // the slot is enabled). + // the slot is enabled), aligned with the colour chip above it. auto* full_sizer = new wxBoxSizer(wxHORIZONTAL); category.full_check = new wxCheckBox(category.page, wxID_ANY, _L("Full Publish")); category.full_check->SetFont(Label::Body_13); category.full_check->SetToolTip(_L("Embed the entire filament of this slot in the 3MF file")); full_sizer->Add(category.full_check, 0, wxALIGN_CENTER_VERTICAL); - category.full_line_item = page_sizer->Add(full_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(2)); + category.full_line_item = page_sizer->Add(full_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); } } From 5add7a5062beba3c71201a2cdb80cd36ac8f8772 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 31 Aug 2026 16:25:59 +0800 Subject: [PATCH 065/208] Show Orca Filament Library filaments in AMS and calibration dialogs These dialogs treated a filament with no compatible_printers as compatible with nothing, while the rest of the app treats it as compatible with everything, so the entire Orca Filament Library was missing from the AMS material and calibration filament lists. They now resolve compatibility the same way the plater does, and a vendor profile still supersedes the library generic of the same name. --- src/libslic3r/PresetBundle.cpp | 37 ++++ src/libslic3r/PresetBundle.hpp | 7 + src/slic3r/GUI/AMSDryControl.cpp | 42 ++-- src/slic3r/GUI/AMSMaterialsSetting.cpp | 186 +++++++----------- src/slic3r/GUI/CaliHistoryDialog.cpp | 71 ++----- src/slic3r/GUI/ExtrusionCalibration.cpp | 60 +++--- .../libslic3r/test_preset_bundle_loading.cpp | 83 ++++++++ 7 files changed, 251 insertions(+), 235 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 02c61b8181..c4895a5af7 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4054,6 +4054,9 @@ std::vector> PresetBundle::get_extruder_filament return filament_infos; } +// ORCA TODO: currently, this function assumes the printer name follows the pattern of " ", e.g. +// printer_type: "Bambu Lab X2D", nozzle_diameter_str: "0.4 nozzle" => printer_name: "Bambu Lab X2D 0.4 nozzle". If the printer name does +// not follow this pattern, the function may not work correctly. std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only) { std::set printer_names; @@ -4084,6 +4087,40 @@ std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle return printer_names; } +std::vector PresetBundle::get_filament_presets_for_machine(const std::string &printer_type, + const std::string &nozzle_diameter_str, + bool include_user_presets) +{ + // Printer model plus nozzle diameter is expected to resolve to a single system printer preset; + // get_printer_names_by_printer_type_and_nozzle asserts as much in debug builds. + const std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); + const Preset *printer = printer_names.empty() ? nullptr : printers.find_preset(*printer_names.begin()); + if (printer == nullptr) + return {}; + + // Preset::is_visible is deliberately not consulted: it tracks what the Configuration Wizard + // installed, while the caller identifies a physically connected machine the user may never + // have installed - gating on it would empty the list for exactly those machines. + const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(*printer); + // Loop invariant - the two argument is_compatible_with_printer() would rebuild it per preset. + DynamicPrintConfig printer_config; + printer_config.set_key_value("printer_preset", new ConfigOptionString(printer->name)); + if (const ConfigOption *opt = printer->config.option("nozzle_diameter")) + printer_config.set_key_value("num_extruders", new ConfigOptionInt((int) static_cast(opt)->values.size())); + + std::vector compatible; + for (Preset &preset : filaments) { + /* The situation where the preset is not offered is as follows: + 1. Not a root preset + 2. Not a system preset and the printer firmware does not support user presets */ + if (filaments.get_preset_base(preset) != &preset || (!preset.is_system && !include_user_presets)) + continue; + if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(preset), active_printer, &printer_config)) + compatible.push_back(&preset); + } + return compatible; +} + bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( const std::string &printer_type, std::string& nozzle_diameter_str, std::string &setting_id, std::string &tag_uid, std::string &nozzle_temp_min, std::string &nozzle_temp_max, std::string& preset_setting_id) { diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 6e7e07b26e..b927c5ee6f 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -350,6 +350,13 @@ public: std::vector> get_extruder_filament_info() const; std::set get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only = true); + // Orca: the root filament presets a connected machine can use, resolved with the rule the rest + // of the app applies (is_compatible_with_printer): an empty compatible_printers means every + // printer, minus the alias shadowing exclusions the Orca Filament Library records in + // Preset::m_excluded_from. + std::vector get_filament_presets_for_machine(const std::string &printer_type, + const std::string &nozzle_diameter_str, + bool include_user_presets); bool check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray(const std::string &printer_type, std::string & nozzle_diameter_str, std::string & setting_id, diff --git a/src/slic3r/GUI/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index ddd3380975..dae84cda71 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -1594,39 +1594,21 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj) } stream << std::fixed << std::setprecision(1) << obj->GetExtderSystem()->GetNozzleDiameter(extruder_id); std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle( - DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str); - for (auto filament_it = filaments.begin(); filament_it != filaments.end(); ++filament_it) { - Preset& preset = *filament_it; - // Filter by system preset: root preset and (system preset or user preset is supported) - if (filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && !obj->is_support_user_preset)) { + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string filament_alias = filaments.get_preset_alias(*filament_it, true); + if (filament_alias.empty()) + continue; + auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id); + if (!opt_info.has_value()) continue; - } - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - if (!printer_strs) continue; - - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } - - filament_id_set.insert(filament_it->filament_id); - auto filament_alias = filaments.get_preset_alias(*filament_it, true); - if (!filament_alias.empty()) { - auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id); - if (opt_info.has_value()) { - auto real_info = opt_info.value(); - real_info.filament_name = filament_alias; - m_tray_ids.push_back(std::move(real_info)); - m_trays_combo->Append(wxString::FromUTF8(filament_alias)); - } - } - } - } + opt_info->filament_name = filament_alias; + m_tray_ids.push_back(std::move(*opt_info)); + m_trays_combo->Append(wxString::FromUTF8(filament_alias)); } if (m_tray_ids.empty()) { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 2e436e8462..a2adf3ea5b 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -932,7 +932,6 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); - int idx = 0; wxArrayString filament_items; wxString bambu_filament_name; wxString hint_filament_name; // the hint type to be selected @@ -940,6 +939,9 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi std::unordered_map query_filament_types; // std::set filament_id_set; + // The alias keyed map has to start empty: it is a member, so a stale alias left by an earlier + // popup (a different printer, a different nozzle) would resolve to that printer's filament_id. + map_filament_items.clear(); PresetBundle * preset_bundle = wxGetApp().preset_bundle; std::ostringstream stream; // Defensive: this dialog is opened only from StatusPanel (BBL-only) today, so the fallback fires @@ -952,83 +954,48 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi } stream << std::fixed << std::setprecision(1) << machine_diameter; std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str); if (preset_bundle) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - //filter by system preset - Preset& preset = *filament_it; - /*The situation where the user preset is not displayed is as follows: - 1. Not a root preset - 2. Not system preset and the printer firmware does not support user preset */ - if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && !obj->is_support_user_preset)) { + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true); + if (alias.empty()) continue; - } - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } else { - filament_id_set.insert(filament_it->filament_id); - // name matched - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); - _collect_filament_info(filament_it->alias, preset, query_filament_vendors, query_filament_types); + filament_items.push_back(alias); + _collect_filament_info(alias, *filament_it, query_filament_vendors, query_filament_types); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; - } else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos - 1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[alias] = filament_infos; - filament_items.push_back(user_preset_alias); - _collect_filament_info(user_preset_alias, preset, query_filament_vendors, query_filament_types); - - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - } - - if (filament_it->filament_id == ams_filament_id) { - hint_filament_name = from_u8(filament_it->alias); - bambu_filament_name = from_u8(filament_it->alias); + if (filament_it->filament_id == ams_filament_id) { + hint_filament_name = from_u8(alias); + bambu_filament_name = from_u8(alias); - // update if nozzle_temperature_range is found - ConfigOption *opt_min = filament_it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } - } - } - idx++; + // update if nozzle_temperature_range is found + ConfigOption *opt_min = filament_it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); + } + } + ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); } } } - } } @@ -1251,56 +1218,47 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) stream << std::fixed << std::setprecision(1) << machine_diameter; } std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), - nozzle_diameter_str); - for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - if (!m_comboBox_filament->GetValue().IsEmpty()) { - auto filament_item = map_filament_items[m_comboBox_filament->GetValue().ToStdString()]; - std::string filament_id = filament_item.filament_id; - if (it->filament_id.compare(filament_id) == 0) { - ConfigOption * printer_opt = it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - bool has_compatible_printer = false; - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - has_compatible_printer = true; - break; - } + // Resolve the selection against the same list Popup() built the dropdown from, so the two + // halves of the dialog cannot disagree about which filaments this machine can use. + const std::string selected = m_comboBox_filament->GetValue().ToStdString(); + if (!selected.empty()) { + const std::string filament_id = map_filament_items[selected].filament_id; + for (Preset *it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (it->filament_id != filament_id) + continue; + // ) if nozzle_temperature_range is found + ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); } - if (!it->is_system && !has_compatible_printer) continue; - // ) if nozzle_temperature_range is found - ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } - } - ConfigOption* opt_type = it->config.option("filament_type"); - bool found_filament_type = false; - if (opt_type) { - ConfigOptionStrings* opt_type_strs = dynamic_cast(opt_type); - if (opt_type_strs) { - found_filament_type = true; - //m_filament_type = opt_type_strs->get_at(0); - std::string display_filament_type; - m_filament_type = it->config.get_filament_type(display_filament_type); - } - } - if (!found_filament_type) - m_filament_type = ""; - - break; } + ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); + } + } + ConfigOption* opt_type = it->config.option("filament_type"); + bool found_filament_type = false; + if (opt_type) { + ConfigOptionStrings* opt_type_strs = dynamic_cast(opt_type); + if (opt_type_strs) { + found_filament_type = true; + //m_filament_type = opt_type_strs->get_at(0); + std::string display_filament_type; + m_filament_type = it->config.get_filament_type(display_filament_type); + } + } + if (!found_filament_type) + m_filament_type = ""; + + break; } } } diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index 297a70018d..3668d76929 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -708,7 +708,6 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject wxArrayString filament_items; std::set filament_id_set; - std::set printer_names; std::ostringstream stream; // If the machine didn't report a nozzle diameter (0.0 = unknown), fall back to the currently // selected printer preset so the filament list isn't empty. @@ -720,67 +719,21 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject stream << std::fixed << std::setprecision(1) << machine_diameter; std::string nozzle_diameter_str = stream.str(); - for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { - // filter by system preset - if (!printer_it->is_system) - continue; - // get printer_model - ConfigOption * printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString *printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str) - continue; - - // use printer_model as printer type - if (printer_model_str->value != DevPrinterConfigUtil::get_printer_display_name(obj->printer_type)) - continue; - - if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) - printer_names.insert(printer_it->name); - } - if (preset_bundle) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - // filter by system preset - Preset &preset = *filament_it; - /*The situation where the user preset is not displayed is as follows: - 1. Not a root preset - 2. Not system preset and the printer firmware does not support user preset */ - if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && ! obj->is_support_user_preset)) { continue; } + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true); + if (alias.empty()) + continue; - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } else { - filament_id_set.insert(filament_it->filament_id); - // name matched - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; - } else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos - 1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); - - filament_items.push_back(user_preset_alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - } - } - } - } + filament_items.push_back(alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[alias] = filament_infos; } } return filament_items; diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index cd7f5990a7..933e2ac211 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -2,6 +2,7 @@ #include "GUI_App.hpp" #include "MsgDialog.hpp" #include "libslic3r/Preset.hpp" +#include #include "I18N.hpp" #include #include @@ -599,8 +600,10 @@ void ExtrusionCalibration::update_combobox_filaments() PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle && obj) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - std::string printer_type = obj->printer_type; - std::set printer_preset_list; + double nozzle_value = 0.4; + m_comboBox_nozzle_dia->GetValue().ToDouble(&nozzle_value); + + std::vector printer_profiles; for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { // only use system printer preset if (!printer_it->is_system) continue; @@ -610,49 +613,42 @@ void ExtrusionCalibration::update_combobox_filaments() ConfigOptionFloats* printer_nozzle_vals = nullptr; if (printer_nozzle_opt) printer_nozzle_vals = dynamic_cast(printer_nozzle_opt); - double nozzle_value = 0.4; - wxString nozzle_value_str = m_comboBox_nozzle_dia->GetValue(); - try { - nozzle_value_str.ToDouble(&nozzle_value); - } catch(...) { - ; - } if (!model_id.empty() && model_id.compare(obj->printer_type) == 0 && printer_nozzle_vals && abs(printer_nozzle_vals->get_at(0) - nozzle_value) < 1e-3) { - printer_preset_list.insert(printer_it->name); + printer_profiles.push_back(preset_bundle->printers.get_preset_with_vendor_profile(*printer_it)); BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: printer_model = " << model_id; } else { BOOST_LOG_TRIVIAL(error) << "extrusion_cali: printer_model = " << model_id; } } + // Unlike the AMS dialogs this one offers every matching preset by full name rather than one + // root preset per alias, so it filters the collection itself instead of calling + // PresetBundle::get_filament_presets_for_machine(). for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_preset_list.find(printer_str) != printer_preset_list.end()) { - user_filaments.push_back(&(*filament_it)); + const PresetWithVendorProfile filament = preset_bundle->filaments.get_preset_with_vendor_profile(*filament_it); + if (std::none_of(printer_profiles.begin(), printer_profiles.end(), + [&filament](const PresetWithVendorProfile &printer) { return is_compatible_with_printer(filament, printer); })) + continue; - // set default filament id - filament_index++; - if (filament_it->is_system - && !ams_filament_id.empty() - && filament_it->filament_id == ams_filament_id - ) { - curr_selection = filament_index; - } + user_filaments.push_back(&(*filament_it)); - if (filament_it->name == obj->extrusion_cali_filament_name && !obj->extrusion_cali_filament_name.empty()) - { - curr_selection = filament_index; - } - - wxString filament_name = wxString::FromUTF8(filament_it->name); - filament_items.Add(filament_name); - break; - } + // set default filament id + filament_index++; + if (filament_it->is_system + && !ams_filament_id.empty() + && filament_it->filament_id == ams_filament_id + ) { + curr_selection = filament_index; } + + if (filament_it->name == obj->extrusion_cali_filament_name && !obj->extrusion_cali_filament_name.empty()) + { + curr_selection = filament_index; + } + + filament_items.Add(wxString::FromUTF8(filament_it->name)); } m_comboBox_filament->Set(filament_items); m_comboBox_filament->SetSelection(curr_selection); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 55c18bfa9e..09f89eb9eb 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1,5 +1,6 @@ #include +#include #include #include @@ -567,6 +568,88 @@ TEST_CASE("A printer specific filament supersedes the generic library filament w } +namespace { + +// One system printer plus the filament presets a machine facing dialog has to choose between: +// an Orca Filament Library generic with no compatible_printers, a same alias vendor filament +// that names the printer, a library filament with no vendor twin, and a vendor filament that +// belongs to a different printer. +struct MachineFilaments +{ + PresetBundle bundle; + VendorProfile library{PresetBundle::ORCA_FILAMENT_LIBRARY}; + VendorProfile vendor{"Vendor"}; + + MachineFilaments() + { + // VendorProfile's constructor takes an id; the library rule keys off the name. + library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + vendor.name = "Vendor"; + + Preset &printer = add_inmemory_preset(bundle.printers, "Printer A 0.4 nozzle"); + printer.is_system = true; + printer.vendor = &vendor; + printer.config.option("printer_model", true)->value = "Printer A"; + + add_filament(library, "Generic ABS @System", "Generic ABS", {}); + add_filament(vendor, "Generic ABS @Printer A", "Generic ABS", { "Printer A 0.4 nozzle" }); + add_filament(library, "FilAr ABS @System", "FilAr ABS", {}); + add_filament(vendor, "Vendor PLA @Printer B", "Vendor PLA", { "Printer B 0.4 nozzle" }); + + // update_library_profile_excluded_from() is protected and has its own test above; record + // the exclusion it derives from the same alias vendor filament. + Preset *shadowed = bundle.filaments.find_preset("Generic ABS @System"); + REQUIRE(shadowed != nullptr); + shadowed->m_excluded_from.insert("Printer A 0.4 nozzle"); + } + + void add_filament(const VendorProfile &owner, const std::string &name, const std::string &alias, + std::vector compatible_printers) + { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.is_system = true; + preset.alias = alias; + preset.vendor = &owner; + compatible_list(bundle.filaments, name, "compatible_printers") = std::move(compatible_printers); + } + + bool offers(const std::string &preset_name, bool include_user_presets = false) + { + const std::vector offered = + bundle.get_filament_presets_for_machine("Printer A", "0.4", include_user_presets); + return std::any_of(offered.begin(), offered.end(), + [&preset_name](const Preset *p) { return p->name == preset_name; }); + } +}; + +} // namespace + +TEST_CASE("Filaments offered for a machine follow the app's compatibility rule", "[Preset][Bundle]") +{ + MachineFilaments f; + + SECTION("a library filament with no compatible_printers is offered") { + CHECK(f.offers("FilAr ABS @System")); + } + + SECTION("a same alias vendor filament shadows the library generic") { + CHECK(f.offers("Generic ABS @Printer A")); + CHECK_FALSE(f.offers("Generic ABS @System")); + } + + SECTION("a filament naming a different printer is not offered") { + CHECK_FALSE(f.offers("Vendor PLA @Printer B")); + } + + SECTION("a user filament is offered only when the printer supports user presets") { + add_inmemory_preset(f.bundle.filaments, "My PLA"); + + CHECK_FALSE(f.offers("My PLA", /*include_user_presets=*/false)); + CHECK(f.offers("My PLA", /*include_user_presets=*/true)); + } +} + + namespace { const char *kMixedKeys[] = { From b585d9f3d96b511eaf65011061959b60b990c73b Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Mon, 31 Aug 2026 17:45:29 +0800 Subject: [PATCH 066/208] feat: add new profiles over ota & updater url via app config --- resources/web/guide/21/common.css | 10 +- resources/web/guide/21/common.js | 37 ++- resources/web/guide/24/24.js | 16 ++ resources/web/guide/24/index.html | 3 +- src/libslic3r/AppConfig.cpp | 8 +- src/slic3r/GUI/WebGuideDialog.cpp | 87 ++++++- src/slic3r/Utils/PresetUpdater.cpp | 381 +++++++++++++++++++++++++++-- src/slic3r/Utils/PresetUpdater.hpp | 8 + 8 files changed, 523 insertions(+), 27 deletions(-) diff --git a/resources/web/guide/21/common.css b/resources/web/guide/21/common.css index e7cd57a32f..992c55d7a1 100644 --- a/resources/web/guide/21/common.css +++ b/resources/web/guide/21/common.css @@ -415,7 +415,9 @@ img.ModelThumbnail { border-width: 1px; border-style: solid; border-radius: 4px; - background-color: inherit; + border-color: var(--border-color); + background-color: var(--bg-color); + color: var(--fg-color-text); position: absolute; left: 50%; top: 200px; @@ -423,13 +425,17 @@ img.ModelThumbnail { } #NoticeBar { - background-color:#00f0d8; + background-color: var(--main-color); height: 40px; line-height: 40px; color: #fff; text-align: center; } +#NoticeBar.notice-error { + background-color: var(--button-bg-alert); +} + #NoticeContent { padding: 4mm 10mm; } diff --git a/resources/web/guide/21/common.js b/resources/web/guide/21/common.js index f7e8b1d409..9a3c76c248 100644 --- a/resources/web/guide/21/common.js +++ b/resources/web/guide/21/common.js @@ -37,6 +37,34 @@ function HandleStudio( pVal ) { HandleModelList(pVal['response']); } + else if(strCmd=='check_new_printers_result') + { + let button = document.getElementById("CheckNewPrintersBtn"); + if (button) { + button.style.pointerEvents = "auto"; + button.style.opacity = "1"; + } + + let noticeBar = document.getElementById("NoticeBar"); + let noticeText = document.getElementById("NoticeText"); + let hasError = pVal.hasOwnProperty("error"); + noticeBar.classList.toggle("notice-error", hasError); + if (hasError) { + noticeBar.textContent = "Error"; + noticeText.textContent = pVal["error"]; + } else if (pVal["vendors"] && pVal["vendors"].length > 0) { + noticeBar.textContent = "New printers found"; + noticeText.textContent = "New printer vendors installed: " + pVal["vendors"].join(", "); + } else if (pVal["declined"]) { + noticeBar.textContent = "Information"; + noticeText.textContent = "New printer vendors were found, but installation was cancelled."; + } else { + noticeBar.textContent = "Information"; + noticeText.textContent = "No new printers found."; + } + + ShowNotice(1); + } } function HandleModelList( pVal ) @@ -78,9 +106,13 @@ function HandleModelList( pVal ) } //Update Nozzel Html Append + // ORCA: HandleModelList can now be called more than once per dialog (e.g. after a new vendor + // is installed via "check for new printers"). pModel always holds the full, current list, so + // clear each vendor's printer area before repopulating instead of appending on top of a + // previous render. for( let key in ModelHtml ) { - $(".OneVendorBlock[vendor='"+key+"'] .PrinterArea").append( ModelHtml[key] ); + $(".OneVendorBlock[vendor='"+key+"'] .PrinterArea").empty().append( ModelHtml[key] ); } //Update Checkbox @@ -343,6 +375,9 @@ function OnExit() let nTotal=ModelSelect.length; if( nTotal==0 ) { + let noticeBar = document.getElementById("NoticeBar"); + noticeBar.classList.add("notice-error"); + noticeBar.textContent = "Error"; ShowNotice(1); return 0; } diff --git a/resources/web/guide/24/24.js b/resources/web/guide/24/24.js index 74a03db7b9..19ccb892c6 100644 --- a/resources/web/guide/24/24.js +++ b/resources/web/guide/24/24.js @@ -36,6 +36,22 @@ function ConfirmSelect() } } +function CheckForNewPrinters() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="check_for_new_printers"; + tSend['data']={}; + + var button = document.getElementById("CheckNewPrintersBtn"); + if (button) { + button.style.pointerEvents = "none"; + button.style.opacity = "0.6"; + } + + SendWXMessage( JSON.stringify(tSend) ); +} + function CreateNewPrinter() { var tSend={}; diff --git a/resources/web/guide/24/index.html b/resources/web/guide/24/index.html index efb6148e0d..5f0a2407cc 100644 --- a/resources/web/guide/24/index.html +++ b/resources/web/guide/24/index.html @@ -82,7 +82,8 @@
Create
-
Confirm
+
Check for new printers
+
Confirm
Cancel
diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 2d0c6a5d8d..020fc0662d 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -42,6 +42,9 @@ namespace Slic3r { static const std::string VERSION_CHECK_URL = "https://check-version.orcaslicer.com/latest"; static const std::string PROFILE_UPDATE_URL = "https://check-version.orcaslicer.com/profile"; + +constexpr const char* CONFIG_ORCA_UPDATER_URL = "orca_updater_url"; + static const std::string MODELS_STR = "models"; const std::string AppConfig::SECTION_FILAMENTS = "filaments"; @@ -1814,7 +1817,10 @@ std::string AppConfig::version_check_url() const std::string AppConfig::profile_update_url() const { - return PROFILE_UPDATE_URL; + std::string orca_updater_url = get(CONFIG_ORCA_UPDATER_URL); + if (orca_updater_url.empty()) + return PROFILE_UPDATE_URL; + return orca_updater_url; } bool AppConfig::exists() diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 6b58fffead..0820f7181b 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -562,6 +563,78 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) m_ProfileJson["filament"][fName]["selected"] = 1; } } + else if (strCmd == "check_for_new_printers") { + json response = json::object(); + response["command"] = "check_new_printers_result"; + // Guide pages currently send sequence_id as a number, while older + // pages may send it as a string. Preserve the value without + // forcing either representation. + if (j.contains("sequence_id")) + response["sequence_id"] = j["sequence_id"]; + else + response["sequence_id"] = ""; + + if (!m_MainPtr->preset_updater) { + response["error"] = "Printer update service is unavailable."; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + wxGetApp().CallAfter([this, strJS] { RunScript(strJS); }); + } else { + // Orca: enumerate vendors directly from disk rather than from m_ProfileJson["model"] + // — a vendor with no machine models (e.g. a filament-only bundle, or a test fixture + // like "test123" with an empty machine_model_list) never gets a "vendor" entry + // pushed into "model" by LoadProfileFamily(), so it would be invisible to the + // request body and get endlessly re-offered by the server. Scan both the system dir + // (already-installed vendors) and the bundled resources dir (shipped-but-not-yet- + // installed vendors), same as LoadProfileData() does when building loaded_vendors. + std::set system_vendors; + for (const auto& dir : {vendor_dir, rsrc_vendor_dir}) { + if (!boost::filesystem::exists(dir)) + continue; + for (const auto& entry : boost::filesystem::directory_iterator(dir)) { + if (!boost::filesystem::is_directory(entry) && boost::iequals(entry.path().extension().string(), ".json")) + system_vendors.insert(entry.path().stem().string()); + } + } + // Orca: check_new_vendors() is async (network + confirmation dialog + download + // all happen off the calling thread apart from the dialog itself); guard against + // this dialog being closed before the callback fires. + wxWeakRef weak_this(this); + try { + m_MainPtr->preset_updater->check_new_vendors( + system_vendors, [weak_this, response](std::vector installed_vendors, bool declined) mutable { + if (!weak_this) + return; + + // Orca: append the newly installed vendor(s) into the in-memory + // profile data (instead of a full LoadProfileData() rescan of every + // vendor) and push the refreshed list to the webview, the same way + // request_userguide_profile does, so the printer list picks them up + // without needing to reopen the guide. + for (const auto& vendor_id : installed_vendors) { + weak_this->LoadProfileFamily(vendor_id, (weak_this->vendor_dir / (vendor_id + ".json")).string()); + } + if (!installed_vendors.empty()) { + json profile_response = json::object(); + profile_response["command"] = "response_userguide_profile"; + profile_response["sequence_id"] = "10001"; + profile_response["response"] = weak_this->m_ProfileJson; + wxString profileJS = wxString::Format("HandleStudio(%s)", profile_response.dump(-1, ' ', true)); + weak_this->RunScript(profileJS); + } + + response["vendors"] = installed_vendors; + response["declined"] = declined; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + weak_this->RunScript(strJS); + }); + } catch (const std::exception &e) { + BOOST_LOG_TRIVIAL(warning) << "Failed to check for new printers: " << e.what(); + response["error"] = "Failed to check for new printers."; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + wxGetApp().CallAfter([this, strJS] { RunScript(strJS); }); + } + } + } else if (strCmd == "user_guide_finish") { SaveProfile(); @@ -1644,13 +1717,15 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath OneModel["materials"] = pm["default_materials"]; // wxString strCoverPath = wxString::Format("%s\\%s\\%s_cover.png", strFolder, strVendor, std::string(s1.mb_str())); - std::string cover_file = s1 + "_cover.png"; - boost::filesystem::path cover_path = boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/profiles/" / strVendor / cover_file).make_preferred(); + std::string cover_file = s1 + "_cover.png"; + boost::filesystem::path cover_path = boost::filesystem::absolute(vendor_dir / cover_file).make_preferred(); + BOOST_LOG_TRIVIAL(info) << "[WebGuideDialog] " << cover_path; if (!boost::filesystem::exists(cover_path)) { - cover_path = - (boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/web/image/printer/") / - cover_file) - .make_preferred(); + cover_path = boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/profiles/" / strVendor / cover_file) + .make_preferred(); + if (!boost::filesystem::exists(cover_path)) + cover_path = (boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/web/image/printer/") / cover_file) + .make_preferred(); } OneModel["cover"] = cover_path.string(); diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 2de8716f47..42bd346222 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -129,10 +130,9 @@ struct Update //BBS: add directory support void install() const { - if (is_directory) { + if (is_directory) { copy_directory_recursively(source, target, file_filter); - } - else { + } else { copy_file_fix(source, target); // A vendor must be installed in exactly one form. Remove the @@ -147,7 +147,7 @@ struct Update fs::remove(target.parent_path() / (vendor + ".opc"), ec); } } - } + } friend std::ostream& operator<<(std::ostream& os, const Update &self) { @@ -195,6 +195,8 @@ struct Updates std::vector updates; }; +static bool reload_configs_update_gui(); + wxDEFINE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); wxDEFINE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); @@ -222,6 +224,10 @@ struct PresetUpdater::priv // Per-vendor update checking std::set checked_vendors; + // Orca (PR #130): changelog text for each vendor, captured in memory during + // sync_vendor_config()/check_new_vendors() instead of written beside the cache. + std::unordered_map vendor_changelogs; + mutable std::mutex vendor_changelogs_mutex; std::vector vendor_check_threads; std::atomic vendor_check_cancel{false}; @@ -246,6 +252,8 @@ struct PresetUpdater::priv void parse_version_string(const std::string& body) const; void sync_resources(std::string http_url, std::map &resources, bool check_patch = false, std::string current_version="", std::string changelog_file=""); void sync_vendor_config(const std::string& vendor_id); + void check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback); void sync_tooltip(std::string http_url, std::string language); void sync_plugins(std::string http_url, std::string plugin_version); void sync_printer_config(std::string http_url); @@ -686,6 +694,9 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) std::string online_version_str; // this represents the PROFILE VERSION, not ORCA VERSION std::string download_url_str; + std::string changelog; + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] fetching vendor update status from " << url; Http::get(url) .timeout_connect(5) @@ -698,9 +709,12 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) if (http_status != 200) return; try { json j = json::parse(body); + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] url: " << url << " returned:" << body; + if (j.contains("vendor_version") && j.contains("download_url")) { online_version_str = j["vendor_version"].get(); download_url_str = j["download_url"].get(); + changelog = j.value("changelog", std::string()); } } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] vendor check JSON parse failed: " << e.what(); @@ -722,8 +736,11 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) boost::system::error_code ec; fs::remove_all(cache_profile_path / vendor_id, ec); fs::remove(cache_profile_path / (vendor_id + ".json"), ec); - fs::remove(cache_profile_path / (vendor_id + ".changelog"), ec); + // Orca: the OPC cache is the vendor's whole installation in one file; clear it too. fs::remove(cache_profile_path / (vendor_id + ".opc"), ec); + // Best-effort cleanup of the legacy on-disk changelog written by older builds + // (changelogs are now kept in memory - see vendor_changelogs). + fs::remove(cache_profile_path / (vendor_id + ".changelog"), ec); // Download the zip BOOST_LOG_TRIVIAL(info) << "[Orca Updater] downloading update for " << vendor_id @@ -761,6 +778,23 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) if (cancel || vendor_check_cancel) return; + const fs::path cached_vendor_json = cache_profile_path / (vendor_id + ".json"); + const fs::path cached_vendor_folder = cache_profile_path / vendor_id; + if (!fs::is_regular_file(cached_vendor_json) || !fs::is_directory(cached_vendor_folder) || + fs::is_empty(cached_vendor_folder)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] rejected update for " << vendor_id + << ": expected " << vendor_id << ".json and a non-empty " + << vendor_id << " directory"; + fs::remove_all(cached_vendor_folder, ec); + fs::remove(cached_vendor_json, ec); + return; + } + + { + std::lock_guard lock(vendor_changelogs_mutex); + vendor_changelogs[vendor_id] = std::move(changelog); + } + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] vendor " << vendor_id << " update cached, notifying UI"; GUI::wxGetApp().CallAfter([] { GUI::wxGetApp().check_config_updates_from_updater(); @@ -1167,6 +1201,14 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version if (!fs::exists(cache_profile_path)) return updates; + // Orca (PR #130): vendor changelogs are captured in memory during + // sync_vendor_config()/check_new_vendors(), not written beside the cache. + std::unordered_map changelogs; + { + std::lock_guard lock(vendor_changelogs_mutex); + changelogs = vendor_changelogs; + } + for (auto &dir_entry : boost::filesystem::directory_iterator(cache_profile_path)) { const auto &path = dir_entry.path(); std::string file_path = path.string(); @@ -1179,6 +1221,21 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version auto filament_in_cache = (cache_profile_path / vendor_name / PRESET_FILAMENT_NAME); auto machine_in_cache = (cache_profile_path / vendor_name / PRESET_PRINTER_NAME); + // Orca (PR #130): a JSON cache entry is only meaningful next to a non-empty + // / preset directory; a stray or half-downloaded .json is + // skipped. An .opc cache is a single self-contained file (validated below), + // so this check does not apply to it. + if (!is_opc_file) { + const auto vendor_folder_in_cache = cache_profile_path / vendor_name; + if (!fs::is_regular_file(path) || !fs::is_directory(vendor_folder_in_cache) || + fs::is_empty(vendor_folder_in_cache)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater]:ignoring invalid cached update for " + << vendor_name << ": expected " << vendor_name + << ".json and a non-empty " << vendor_name << " directory"; + continue; + } + } + if (is_vendor_installed(vendor_name) || is_opc_file || fs::exists(print_in_cache) @@ -1212,15 +1269,9 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version cache_ver = *config_version; } - std::string changelog; - std::string changelog_file = (cache_profile_path / (vendor_name + ".changelog")).string(); - boost::nowide::ifstream ifs(changelog_file); - if (ifs) { - std::ostringstream oss; - oss<< ifs.rdbuf(); - changelog = oss.str(); - ifs.close(); - } + // Orca (PR #130): changelog for this vendor was captured in memory at sync time. + const auto changelog_it = changelogs.find(vendor_name); + std::string changelog = changelog_it != changelogs.end() ? changelog_it->second : std::string(); if (vendor_ver < cache_ver) { BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:need to update settings from " << vendor_ver.to_string() @@ -1362,6 +1413,9 @@ void PresetUpdater::sync(std::string http_url, std::string language, std::string // after the startup printer preset has been restored. this->p->sync_plugins(http_url, plugin_version); this->p->sync_printer_config(http_url); + // Orca (PR #130): the filament library is always installed, so refresh it + // from the updater on every startup sync rather than deferring to check_vendor_update(). + this->p->sync_vendor_config(PresetBundle::ORCA_FILAMENT_LIBRARY); //if (p->cancel) // return; //remove the tooltip currently @@ -1394,6 +1448,302 @@ void PresetUpdater::check_vendor_update(const std::string& vendor_id) }); } +// Orca: ask the server which vendors from `system_vendors` have a profile bundle available that +// isn't installed yet (or is newer than what's installed). Request body maps vendor id -> currently +// installed profile version (unknown/not-yet-installed vendors report "0.0.0"). Response maps +// vendor id -> {version, download_url, changelog} for each vendor the server has an update for. +// Any such vendor is downloaded and cached under ota/profiles the same way sync_vendor_config() +// does; the caller's check_config_updates_from_updater() -> get_config_updates()/perform_updates() +// flow then installs the cached profiles into data_dir()/system. +// +// Mirrors check_vendor_update()/sync_vendor_config(): the network query and the download/extract +// work run on a background thread (vendor_check_threads), never on the calling (UI) thread. Only +// the confirmation dialog (which must run on the UI thread) and the final callback are marshaled +// back via CallAfter(). +void PresetUpdater::priv::check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback) +{ + vendor_check_threads.emplace_back([this, system_vendors, callback]() { + AppConfig* app_config = GUI::wxGetApp().app_config; + std::string url = app_config->profile_update_url() + "/new?orcaslicer_version=" + Http::url_encode(SoftFever_VERSION); + + auto check_cancel = [this](Http::Progress, bool& cancel_http) { + if (cancel || vendor_check_cancel) + cancel_http = true; + }; + + json request_body = json::object(); + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] checking new vendors for:"; + for (const auto& vendor_id : system_vendors) { + // Orca: installed_vendor_version() reads whichever form the vendor is + // installed as - the .json profile or the .opc preset cache stamp - + // so a cache-only vendor is not reported as version 0.0.0 and then + // endlessly re-offered by the server. + Semver installed_ver = installed_vendor_version(vendor_id); + request_body[vendor_id] = installed_ver.to_string(); + BOOST_LOG_TRIVIAL(info) << vendor_id << " (installed version " << installed_ver.to_string() << ")"; + } + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendor check request url: " << url; + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendor check request body: " << request_body.dump(2); + + json response_json; + bool got_response = false; + + auto post = Http::post(url); + + post.timeout_connect(5); + post.on_progress(check_cancel); + post.header("Content-Type", "application/json"); + post.on_error([](std::string body, std::string error, unsigned http_status) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendor check HTTP error: " << error; + }) + .on_complete([&response_json, &got_response](std::string body, unsigned http_status) { + if (http_status != 200) + return; + try { + json j = json::parse(body); + if (j.is_object()) { + response_json = std::move(j); + got_response = true; + } + } catch (const std::exception& e) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendor check JSON parse failed: " << e.what(); + } + }); + + post.set_post_body(request_body.dump()); + post.perform_sync(); + + if (cancel || vendor_check_cancel) + return; + + if (!got_response) { + GUI::wxGetApp().CallAfter([callback]() { callback({}, false); }); + return; + } + + // Collect candidates before touching the filesystem or network again. + struct NewVendorCandidate + { + std::string vendor_id; + Semver version; + std::string download_url; + std::string changelog; + }; + std::vector candidates; + for (auto it = response_json.begin(); it != response_json.end(); ++it) { + const json& entry = it.value(); + if (!entry.is_object()) + continue; + std::string download_url_str = entry.value("download_url", std::string()); + if (download_url_str.empty()) + continue; + + NewVendorCandidate candidate; + candidate.vendor_id = it.key(); + auto parsed_ver = Semver::parse(entry.value("version", std::string())); + candidate.version = parsed_ver ? *parsed_ver : Semver(); + candidate.download_url = std::move(download_url_str); + candidate.changelog = entry.value("changelog", std::string()); + candidates.push_back(std::move(candidate)); + } + + if (candidates.empty()) { + GUI::wxGetApp().CallAfter([callback]() { callback({}, false); }); + return; + } + + // Orca: the confirmation dialog must run on the UI thread; if confirmed, the actual + // download/install work is dispatched back onto a new background thread from there, + // same as check_vendor_update() does for a single vendor. + GUI::wxGetApp().CallAfter([this, candidates, callback]() { + std::vector updates_msg; + for (const auto& candidate : candidates) + updates_msg.emplace_back(candidate.vendor_id, candidate.version, std::string(), candidate.changelog); + + GUI::MsgUpdateConfig dlg(updates_msg); + if (dlg.ShowModal() != wxID_OK) { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] user declined installing new vendors"; + callback({}, true); + return; + } + + // Orca: the actual download runs on a background thread below (so it doesn't block the + // UI), but that also means nothing visibly happens for the several seconds it can take + // (longer still if a retry kicks in) — push a notification so it's clear work is + // ongoing rather than looking hung. + { + std::string vendor_list; + for (const auto& candidate : candidates) { + if (!vendor_list.empty()) + vendor_list += ", "; + vendor_list += candidate.vendor_id; + } + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + _u8L("Downloading new vendor profile(s): ") + vendor_list + _u8L("...")); + } + + vendor_check_threads.emplace_back([this, candidates, callback]() { + auto check_cancel = [this](Http::Progress, bool& cancel_http) { + if (cancel || vendor_check_cancel) + cancel_http = true; + }; + + std::vector new_vendor_ids; + std::vector failed_vendor_ids; + auto cache_profile_path = cache_path / "profiles"; + fs::create_directories(cache_profile_path); + boost::system::error_code ec; + + for (const auto& candidate : candidates) { + if (cancel || vendor_check_cancel) + break; + + const std::string& vendor_id = candidate.vendor_id; + const std::string& download_url_str = candidate.download_url; + std::string changelog = candidate.changelog; + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] downloading new vendor " << vendor_id << " version " << candidate.version.to_string(); + + // Clear only this vendor's cached data, same as sync_vendor_config(). + fs::remove_all(cache_profile_path / vendor_id, ec); + fs::remove(cache_profile_path / (vendor_id + ".json"), ec); + + fs::path download_file = cache_path / (vendor_id + TMP_EXTENSION); + bool download_ok = false; + + // Orca: same retry pattern as Plater.cpp's project download — a single-shot + // 5s connect timeout against GitHub's redirect chain is prone to transient + // failures (DNS/connect hiccups) that succeed a moment later, so retry a few + // times before giving up rather than failing the whole vendor on one blip. + int retry_count = 0; + const int max_retries = 3; + bool keep_trying = true; + while (keep_trying && retry_count < max_retries) { + retry_count++; + Http::get(download_url_str) + .timeout_connect(5) + .on_progress(check_cancel) + .on_error([&vendor_id, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] download failed for new vendor " << vendor_id + << " (attempt " << retry_count << "/" << max_retries << "): " << error; + }) + .on_complete([&](std::string body, unsigned http_status) { + if (http_status != 200) + return; + fs::fstream file(download_file, std::ios::out | std::ios::binary | std::ios::trunc); + if (!file.good()) + return; + file.write(body.c_str(), body.size()); + file.close(); + if (file.good()) + download_ok = true; + }) + .perform_sync(); + + keep_trying = !download_ok && !(cancel || vendor_check_cancel); + } + + if (!download_ok || cancel || vendor_check_cancel) { + if (!download_ok) + failed_vendor_ids.push_back(vendor_id); + continue; + } + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] extracting new vendor " << vendor_id; + if (!extract_file(download_file, cache_profile_path)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] extraction failed for new vendor " << vendor_id; + fs::remove(download_file, ec); + failed_vendor_ids.push_back(vendor_id); + continue; + } + fs::remove(download_file, ec); + + const fs::path cached_vendor_json = cache_profile_path / (vendor_id + ".json"); + const fs::path cached_vendor_folder = cache_profile_path / vendor_id; + if (!fs::is_regular_file(cached_vendor_json) || !fs::is_directory(cached_vendor_folder) || + fs::is_empty(cached_vendor_folder)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] rejected new vendor " << vendor_id << ": expected " << vendor_id + << ".json and a non-empty " << vendor_id << " directory"; + fs::remove_all(cached_vendor_folder, ec); + fs::remove(cached_vendor_json, ec); + failed_vendor_ids.push_back(vendor_id); + continue; + } + + { + std::lock_guard lock(vendor_changelogs_mutex); + vendor_changelogs[vendor_id] = std::move(changelog); + } + + new_vendor_ids.push_back(vendor_id); + } + + if (!new_vendor_ids.empty()) { + // Orca: the user already confirmed via the dialog above, so install right away + // instead of routing through check_config_updates_from_updater(), which only + // queues a passive notification (meant for the silent background per-vendor + // check) requiring yet another click + confirmation before anything is copied + // into data_dir()/system. + GUI::wxGetApp().CallAfter([this, new_vendor_ids] { + AppConfig* app_config = GUI::wxGetApp().app_config; + Updates updates = get_config_updates(app_config->orig_version()); + + // Only install the vendors just confirmed; leave any other unrelated + // pending cached update (from a background sync_vendor_config()) alone, + // still gated behind its own notification/confirmation. + std::set confirmed(new_vendor_ids.begin(), new_vendor_ids.end()); + Updates filtered; + for (auto& update : updates.updates) + if (confirmed.count(update.vendor)) + filtered.updates.push_back(std::move(update)); + + if (filtered.updates.empty()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendors cached but no updates detected"; + return; + } + + if (!perform_updates(std::move(filtered)) || !reload_configs_update_gui()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] failed to install new vendors"; + return; + } + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendors installed"; + for (const auto& vendor_id : new_vendor_ids) { + Semver cur_ver = GUI::wxGetApp().preset_bundle->get_vendor_profile_version(vendor_id); + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + GUI::NotificationType::PresetUpdateFinished, + GUI::NotificationManager::NotificationLevel::ImportantNotificationLevel, + _u8L("Configuration package: ") + vendor_id + _u8L(" updated to ") + cur_ver.to_string()); + } + }); + } + + if (!failed_vendor_ids.empty()) { + GUI::wxGetApp().CallAfter([failed_vendor_ids] { + std::string vendor_list; + for (const auto& vendor_id : failed_vendor_ids) { + if (!vendor_list.empty()) + vendor_list += ", "; + vendor_list += vendor_id; + } + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + _u8L("Failed to download vendor profile(s): ") + vendor_list); + }); + } + + GUI::wxGetApp().CallAfter([callback, new_vendor_ids]() { callback(new_vendor_ids, false); }); + }); + }); + }); +} + +void PresetUpdater::check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback) +{ + p->check_new_vendors(system_vendors, std::move(callback)); +} + void PresetUpdater::slic3r_update_notify() { if (! p->enabled_version_check) @@ -1415,10 +1765,9 @@ static bool reload_configs_update_gui() GUI::wxGetApp().load_current_presets(); GUI::wxGetApp().plater()->set_bed_shape(); - return true; + return true; } - PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, UpdateParams params) const { if (! p->enabled_config_update) { return R_NOOP; } diff --git a/src/slic3r/Utils/PresetUpdater.hpp b/src/slic3r/Utils/PresetUpdater.hpp index 27ec6748f2..ccb0902fd5 100644 --- a/src/slic3r/Utils/PresetUpdater.hpp +++ b/src/slic3r/Utils/PresetUpdater.hpp @@ -1,7 +1,9 @@ #ifndef slic3r_PresetUpdate_hpp_ #define slic3r_PresetUpdate_hpp_ +#include #include +#include #include #include @@ -59,6 +61,12 @@ public: void on_update_notification_confirm(); void do_printer_config_update(); void check_vendor_update(const std::string& vendor_id); + // Orca: async, mirrors check_vendor_update()/sync_vendor_config() — the network query and any + // download/install work happen on a background thread; only the confirmation dialog runs on + // the UI thread. `callback` is invoked on the UI thread with the ids of vendors that were + // installed (empty if none were found, or the user declined) and whether the user declined. + void check_new_vendors(const std::set& system_vendors, + std::function installed_vendors, bool declined)> callback); bool version_check_enabled() const; From 684cd37f8dd94e451d9013f065764b007ef6cd12 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Mon, 31 Aug 2026 18:01:15 +0800 Subject: [PATCH 067/208] UI Fixes and Polish --- src/slic3r/GUI/FilamentBitmapUtils.cpp | 385 +++++++++++++++++++++++ src/slic3r/GUI/FilamentBitmapUtils.hpp | 78 +++++ src/slic3r/GUI/GradientCurveEditor.cpp | 231 +++----------- src/slic3r/GUI/MixedFilamentDialog.cpp | 94 +----- src/slic3r/GUI/MixedFilamentDialog.hpp | 4 - src/slic3r/GUI/PublishSettingsDialog.cpp | 330 ++++++------------- src/slic3r/GUI/Widgets/TabCtrl.cpp | 2 +- 7 files changed, 622 insertions(+), 502 deletions(-) diff --git a/src/slic3r/GUI/FilamentBitmapUtils.cpp b/src/slic3r/GUI/FilamentBitmapUtils.cpp index 23b14c385b..3af3d1ad01 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.cpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.cpp @@ -1,11 +1,22 @@ #include +#include #include +#include +#include #include #include +#include +#include +#include +#include #include "EncodedFilament.hpp" #include "FilamentBitmapUtils.hpp" #include "GUI_App.hpp" +#include "GuiColor.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/StateColor.hpp" #include "libslic3r/FilamentMixer.hpp" #include "libslic3r/PrintConfig.hpp" @@ -488,4 +499,378 @@ void recompute_mixed_slot_colors(std::vector& colors, } } +namespace { + +// Layout ratios of the gradient plot rect, copied from GradientCurveEditor so the read-only +// preview and the interactive editor stay pixel-identical. Plot rect is square 1:1; the +// right/bottom margins host the axis arrows and labels. +constexpr double kPlotLeftRatio = 0.0316; +constexpr double kPlotRightRatio = 0.6766; +constexpr double kPlotTopRatio = 0.1529; +constexpr double kPlotBottomRatio = 0.8474; +constexpr int kGridDivisions = 9; // 10 grid lines including the outer borders. +constexpr int kStrokeAxis = 2; // axis line width (px, no DPI scaling) +constexpr int kAxisArrowHalf = 5; // half-base of the axis arrow triangle (DIP) +constexpr int kAxisArrowLen = 10; // length of the axis arrow triangle (DIP) +constexpr int kPointRadius = 4; // anchor outer radius (DIP) +constexpr float kBgSimilarThreshold = 15.0f; +constexpr int kOutlineExtraDip = 2; +constexpr double kTriangleMarginDip = 20.0; + +// Quadratic blend that never goes out of gamut, matching MixedFilamentDialog::blend_colors. +wxColour lerp_blend(const wxColour& a, const wxColour& b, double ratio_a) +{ + unsigned char r, g, bl; + Slic3r::filament_mixer_lerp(a.Red(), a.Green(), a.Blue(), + b.Red(), b.Green(), b.Blue(), + static_cast(1.0 - ratio_a), &r, &g, &bl); + return wxColour(r, g, bl); +} + +// DIP conversion for these free functions: unlike the wxWindow member FromDIP, it needs the +// window parameter explicitly; nullptr picks the app's default DPI like the Publish dialog does. +int dip_px(int v) { return wxWindow::FromDIP(v, nullptr); } + +} // namespace + +wxRect mixed_gradient_plot_rect(const wxSize& sz) +{ + const int x = static_cast(std::lround(sz.x * kPlotLeftRatio)); + const int y = static_cast(std::lround(sz.y * kPlotTopRatio)); + const int x2 = static_cast(std::lround(sz.x * kPlotRightRatio)); + const int y2 = static_cast(std::lround(sz.y * kPlotBottomRatio)); + const int side = std::max(1, std::min(x2 - x, y2 - y)); + return wxRect(x, y, side, side); +} + +void draw_mixed_gradient_plot(wxDC& raw_dc, const wxSize& canvas, + const std::vector& curves, + const std::vector& anchors, + const MixedGradientTheme& theme) +{ + // Draw into an internal opaque buffer so wxGCDC text/curves anti-alias against a solid + // background (never a transparent one), then blit the finished image onto the caller's + // buffered paint DC. wxGCDC cannot wrap a generic wxDC&, so the buffer is always a + // wxMemoryDC -- the one type wxGCDC accepts on every platform. + if (canvas.x <= 0 || canvas.y <= 0) + return; + const wxRect rc = mixed_gradient_plot_rect(canvas); + if (rc.width <= 0 || rc.height <= 0) + return; + + wxBitmap buf(canvas); + wxMemoryDC memdc(buf); + memdc.SetBackground(wxBrush(theme.background)); + memdc.Clear(); + wxGCDC dc(memdc); + wxGraphicsContext* gc = dc.GetGraphicsContext(); + + // 10x10 light grid (10 lines including outer borders, 9 equal divisions). + dc.SetPen(wxPen(theme.grid, 1)); + for (int i = 0; i <= kGridDivisions; ++i) { + const int x = rc.x + rc.width * i / kGridDivisions; + const int y = rc.y + rc.height * i / kGridDivisions; + dc.DrawLine(x, rc.y, x, rc.y + rc.height); + dc.DrawLine(rc.x, y, rc.x + rc.width, y); + } + + // Set the label font first so text width measurements drive arrow / label placement. + wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); + dc.SetFont(label_font); + + const wxString axis_y_title = _L("Material Ratio"); + const wxString axis_x_title = _L("Model Height"); + const wxString pct_text = wxT("100%"); + const wxSize x_title_sz = dc.GetTextExtent(axis_x_title); + const wxSize y_title_sz = dc.GetTextExtent(axis_y_title); + + wxFont strong_font = label_font; + strong_font.SetWeight(wxFONTWEIGHT_SEMIBOLD); + dc.SetFont(strong_font); + const wxSize pct_text_sz = dc.GetTextExtent(pct_text); + dc.SetFont(label_font); + + // Axes (grey 700) with filled triangle arrows. Y-axis extends above the plot top to the + // canvas top edge; X-axis extends past the plot right toward the canvas right edge. + const int arrow_half = dip_px(kAxisArrowHalf); + const int arrow_len = dip_px(kAxisArrowLen); + dc.SetPen(wxPen(theme.axis, kStrokeAxis)); + dc.SetBrush(wxBrush(theme.axis)); + + const int y_axis_x = rc.x; + const int y_title_pct_gap = dip_px(1); + const int y_title_bottom_pad = dip_px(2); + const int y_title_y = std::max(0, rc.y - y_title_sz.y - y_title_pct_gap - pct_text_sz.y - y_title_bottom_pad); + const int y_arrow_tip_y = y_title_y; + const int y_arrow_ty = y_arrow_tip_y + arrow_len; + dc.DrawLine(y_axis_x, y_arrow_ty, y_axis_x, rc.y + rc.height); + { + wxPoint tri[3] = { + wxPoint(y_axis_x, y_arrow_tip_y), + wxPoint(y_axis_x - arrow_half, y_arrow_ty), + wxPoint(y_axis_x + arrow_half, y_arrow_ty), + }; + dc.DrawPolygon(3, tri); + } + + const int x_axis_y = rc.y + rc.height; + const int x_label_gap = dip_px(4); + const int x_edge_pad = dip_px(6); + const int x_arrow_ideal = rc.x + rc.width + dip_px(10); + const int x_arrow_max = canvas.x - x_title_sz.x - x_label_gap - x_edge_pad - arrow_len; + const int x_arrow_tx = std::max(rc.x + rc.width + arrow_len, std::min(x_arrow_ideal, x_arrow_max)); + const int x_arrow_tip_x = x_arrow_tx + arrow_len; + const int x_title_x = x_arrow_tip_x + x_label_gap; + dc.DrawLine(rc.x, x_axis_y, x_arrow_tx, x_axis_y); + { + wxPoint tri[3] = { + wxPoint(x_arrow_tip_x, x_axis_y), + wxPoint(x_arrow_tx, x_axis_y - arrow_half), + wxPoint(x_arrow_tx, x_axis_y + arrow_half), + }; + dc.DrawPolygon(3, tri); + } + + // Labels: "Material Ratio" and the leading "100%" share the same left x; the trailing + // "Model Height" follows the X-axis arrow tip (already clamped to make room). + const int label_left_x = y_axis_x + dip_px(10); + dc.SetTextForeground(theme.label); + dc.DrawText(axis_y_title, label_left_x, y_title_y); + + dc.SetFont(strong_font); + dc.SetTextForeground(theme.label_strong); + dc.DrawText(pct_text, label_left_x, y_title_y + y_title_sz.y + y_title_pct_gap); + + dc.DrawText(pct_text, rc.x + rc.width - pct_text_sz.x, x_axis_y); + dc.SetFont(label_font); + dc.SetTextForeground(theme.label); + dc.DrawText(axis_x_title, x_title_x, x_axis_y - x_title_sz.y / 2); + + if (!gc) + return; + + // Outline only when the curve colour is perceptually close to the background; otherwise the + // plain filament colour reads fine and the extra stroke would look heavy. + auto needs_outline = [&](const wxColour& c) { + return calc_color_distance(c, theme.background) < kBgSimilarThreshold; + }; + + // Only the geometry goes through the graphics context: dc.DrawLines() takes integer wxPoint + // and would quantize the curve back to whole pixels. The pen is still set on the dc, which + // forwards it here while keeping its own cached state in sync for later dc drawing. + auto draw_polyline = [&](const MixedGradientCurve& curve) { + if (curve.points.size() < 2) + return; + dc.SetPen(wxPen(curve.colour, dip_px(curve.stroke_dip))); + gc->StrokeLines(curve.points.size(), curve.points.data()); + }; + + for (const MixedGradientCurve& curve : curves) { + if (needs_outline(curve.colour)) + draw_polyline({curve.points, theme.outline, curve.stroke_dip + kOutlineExtraDip}); + draw_polyline(curve); + } + + // Control points: hollow circle with axis-colour border, theme-aware fill, drawn with a + // sub-pixel centre so the ring stays centred on the curve. + if (!anchors.empty()) { + const double r = dip_px(kPointRadius); + dc.SetPen(wxPen(theme.axis, 1)); + dc.SetBrush(wxBrush(theme.point_fill)); + for (const wxPoint2DDouble& p : anchors) + gc->DrawEllipse(p.m_x - r, p.m_y - r, r * 2, r * 2); + } + + memdc.SelectObject(wxNullBitmap); + raw_dc.DrawBitmap(buf, 0, 0); +} + +void draw_mixed_ratio_blend_bar(wxDC& dc, const wxRect& rect, const wxColour& first, + const wxColour& second, double second_fraction) +{ + if (rect.width <= 0 || rect.height <= 0) + return; + for (int x = 0; x < rect.width; ++x) { + const double t = rect.width > 1 ? double(x) / rect.width : 0.0; + const wxColour c = lerp_blend(first, second, 1.0 - t); + dc.SetPen(wxPen(c)); + dc.DrawLine(rect.x + x, rect.y, rect.x + x, rect.y + rect.height); + } + + // Fixed in both themes, like the triangle picker's drag handle: the divider is drawn over + // blended filament colour, so it has to keep its contrast against data rather than chrome. + const int div_x = rect.x + static_cast(second_fraction * rect.width); + dc.SetPen(wxPen(wxColour(80, 80, 80), dip_px(4))); + dc.DrawLine(div_x, rect.y, div_x, rect.y + rect.height); + dc.SetPen(wxPen(*wxWHITE, dip_px(2))); + dc.DrawLine(div_x, rect.y, div_x, rect.y + rect.height); +} + +void draw_mixed_ratio_segments(wxDC& dc, const wxRect& rect, const std::vector& colours, + const std::vector& shares) +{ + const size_t n = std::min(colours.size(), shares.size()); + if (n == 0 || rect.width <= 0 || rect.height <= 0) + return; + std::vector norm = shares; + double total = 0.0; + for (double s : norm) + total += s; + if (total <= 0.0) { + norm.assign(n, 1.0 / n); + total = 1.0; + } + auto share_to_px = [&](double share_sum) { return rect.x + int(std::lround(share_sum / total * double(rect.width))); }; + int x0 = rect.x; + std::vector segs(n); + for (size_t i = 0; i < n; ++i) { + int x1 = rect.x + rect.width; + if (i + 1 < n) + x1 = share_to_px(std::accumulate(norm.begin(), norm.begin() + i + 1, 0.0)); + segs[i] = wxRect(x0, rect.y, std::max(1, x1 - x0), rect.height); + x0 = segs[i].GetRight() + 1; + } + for (size_t i = 0; i < n; ++i) { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(colours[i])); + dc.DrawRectangle(segs[i]); + } + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#ACACAC")), 1)); + dc.DrawRectangle(rect); +} + +namespace { + +struct TriCacheKey +{ + int w, h; + int c0r, c0g, c0b, c1r, c1g, c1b, c2r, c2g, c2b; + int bg_r, bg_g, bg_b, ol_r, ol_g, ol_b; + bool operator<(const TriCacheKey& o) const + { + return std::tie(w, h, c0r, c0g, c0b, c1r, c1g, c1b, c2r, c2g, c2b, bg_r, bg_g, bg_b, ol_r, ol_g, ol_b) < + std::tie(o.w, o.h, o.c0r, o.c0g, o.c0b, o.c1r, o.c1g, o.c1b, o.c2r, o.c2g, o.c2b, o.bg_r, o.bg_g, o.bg_b, o.ol_r, o.ol_g, o.ol_b); + } +}; + +std::map& tri_cache() +{ + static std::map cache; + return cache; +} + +} // namespace + +std::array mixed_triangle_vertices(const wxSize& size, double margin_dip) +{ + const double pw = size.GetWidth(), ph = size.GetHeight(); + const double margin = dip_px(int(margin_dip)); + const double avail = std::min(pw, ph) - 2.0 * margin; + const double side = avail; + const double tri_h = side * std::sqrt(3.0) / 2.0; + const double cx = pw / 2.0; + const double top_y = (ph - tri_h) / 2.0; + return {{{cx, top_y}, {cx - side / 2.0, top_y + tri_h}, {cx + side / 2.0, top_y + tri_h}}}; +} + +void draw_mixed_triangle_picker(wxDC& dc, const wxSize& size, const std::array& colours, + const std::array& weights, const MixedTriangleTheme& theme) +{ + if (size.GetWidth() <= 0 || size.GetHeight() <= 0) + return; + const std::array v = mixed_triangle_vertices(size, kTriangleMarginDip); + + dc.SetBrush(wxBrush(theme.background)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight()); + + const wxColour& c0 = colours[0]; + const wxColour& c1 = colours[1]; + const wxColour& c2 = colours[2]; + const TriCacheKey key{size.GetWidth(), size.GetHeight(), + c0.Red(), c0.Green(), c0.Blue(), + c1.Red(), c1.Green(), c1.Blue(), + c2.Red(), c2.Green(), c2.Blue(), + theme.background.Red(), theme.background.Green(), theme.background.Blue(), + theme.outline.Red(), theme.outline.Green(), theme.outline.Blue()}; + + wxBitmap& bmp = tri_cache()[key]; + if (!bmp.IsOk()) { + bmp = wxBitmap(size.GetWidth(), size.GetHeight(), 24); + wxMemoryDC mdc(bmp); + mdc.SetBrush(wxBrush(theme.background)); + mdc.SetPen(*wxTRANSPARENT_PEN); + mdc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight()); + + const int min_y = int(std::min({v[0].y, v[1].y, v[2].y})); + const int max_y = int(std::max({v[0].y, v[1].y, v[2].y})); + const int min_x = int(std::min({v[0].x, v[1].x, v[2].x})); + const int max_x = int(std::max({v[0].x, v[1].x, v[2].x})); + for (int py = min_y; py <= max_y; ++py) { + for (int px = min_x; px <= max_x; ++px) { + const TriPoint p = {double(px), double(py)}; + if (!tri_contains(p, v[0], v[1], v[2])) + continue; + double w0, w1, w2; + tri_barycentric(p, v[0], v[1], v[2], w0, w1, w2); + unsigned char mr, mg, mb; + if (w0 + w1 > 1e-6) { + float t01 = float(w1 / (w0 + w1)); + Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), c1.Red(), c1.Green(), c1.Blue(), t01, &mr, &mg, &mb); + Slic3r::filament_mixer_lerp(mr, mg, mb, c2.Red(), c2.Green(), c2.Blue(), float(w2), &mr, &mg, &mb); + } else { + mr = c2.Red(); mg = c2.Green(); mb = c2.Blue(); + } + mdc.SetPen(wxPen(wxColour(mr, mg, mb))); + mdc.DrawPoint(px, py); + } + } + + mdc.SetPen(wxPen(theme.outline, 1)); + mdc.SetBrush(*wxTRANSPARENT_BRUSH); + const wxPoint pts[3] = {{int(v[0].x), int(v[0].y)}, {int(v[1].x), int(v[1].y)}, {int(v[2].x), int(v[2].y)}}; + mdc.DrawPolygon(3, pts); + mdc.SelectObject(wxNullBitmap); + + // Keep the cache from growing without bound across DPI/size changes. + if (tri_cache().size() > 6) { + auto& cache = tri_cache(); + cache.erase(cache.begin()); + } + } + dc.DrawBitmap(bmp, 0, 0); + + // Published-ratio marker (read-only twin of the editor's drag handle). + const double w0 = weights[0], w1 = weights[1], w2 = weights[2]; + const int hx = int(w0 * v[0].x + w1 * v[1].x + w2 * v[2].x); + const int hy = int(w0 * v[0].y + w1 * v[1].y + w2 * v[2].y); + dc.SetBrush(*wxWHITE_BRUSH); + dc.SetPen(wxPen(theme.ring, dip_px(2))); + dc.DrawCircle(hx, hy, dip_px(5)); +} + +void draw_mixed_triangle_labels(wxDC& dc, const wxSize& size, const std::array& weights, + const MixedTriangleTheme& theme) +{ + const std::array v = mixed_triangle_vertices(size, kTriangleMarginDip); + dc.SetFont(::Label::Body_12); + dc.SetTextForeground(theme.label); + + // "Ratio" title, sitting above the top vertex. + const wxString title = _L("Ratio"); + dc.DrawText(title, dip_px(2), std::max(0, int(v[0].y - dc.GetTextExtent(title).GetHeight() - dip_px(4)))); + + for (int i = 0; i < 3; ++i) { + const wxString text = wxString::Format("%d%%", int(std::lround(weights[i] * 100.0))); + const wxSize tsz = dc.GetTextExtent(text); + int lx = int(v[i].x - tsz.GetWidth() / 2.0); + int ly = (i == 0) ? int(v[i].y - tsz.GetHeight() - dip_px(4)) : int(v[i].y + dip_px(3)); + ly = std::clamp(ly, 0, size.GetHeight() - tsz.GetHeight()); + lx = std::clamp(lx, 0, size.GetWidth() - tsz.GetWidth()); + dc.DrawText(text, lx, ly); + } +} + }} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/FilamentBitmapUtils.hpp b/src/slic3r/GUI/FilamentBitmapUtils.hpp index fc6eb1f9dd..687d34a825 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.hpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.hpp @@ -5,6 +5,9 @@ #include #include #include +#include +#include +#include #include // Orca: forward-declare so the header is self-contained outside libslic3r_gui's @@ -79,6 +82,81 @@ wxBitmap create_gradient_ramp_bitmap(const std::vector& ramp, const wx void recompute_mixed_slot_colors(std::vector& colors, const Slic3r::DynamicPrintConfig& cfg); +// --- Gradient plot (shared by GradientCurveEditor and the Publish dialog's read-only +// preview). The plot is a square 1:1 rect laid out with the editor's ratios so both +// render identically; curves are drawn as sub-pixel anti-aliased polylines through +// wxGCDC so they never quantize to whole pixels. + +// One curve of the plot: screen-space sub-pixel points already mapped into the plot +// rect, the stroke colour and the stroke width in DIP. +struct MixedGradientCurve +{ + std::vector points; + wxColour colour; + int stroke_dip; +}; + +// Theme tokens, resolved by the caller through StateColor::darkModeColorFor. +struct MixedGradientTheme +{ + wxColour background; // for near-background outline detection + wxColour grid; // grid line + wxColour axis; // axis + arrow fill + wxColour label; // "Material Ratio" / "Model Height" + wxColour label_strong; // "100%" + wxColour outline; // near-background curve lift + wxColour point_fill; // anchor fill +}; + +// Square 1:1 plot rect inside `canvas`, using the editor's plot ratios. +wxRect mixed_gradient_plot_rect(const wxSize& canvas); + +// Draw the whole plot (grid, axes + arrowheads, axis labels, each curve with an optional +// near-background outline, and anchor circles). `anchors` are empty when the caller has +// none to show. `dc` is the caller's buffered paint DC; a wxGCDC is created inside so the +// geometry gets anti-aliased. +void draw_mixed_gradient_plot(wxDC& dc, const wxSize& canvas, + const std::vector& curves, + const std::vector& anchors, + const MixedGradientTheme& theme); + +// --- Ratio bar (2-component continuous blend + divider, matching MixedFilamentDialog). +// Colours blend first->second across the rect; the divider marks `second_fraction` of the +// rect's width (the second component's share, 0..1). +void draw_mixed_ratio_blend_bar(wxDC& dc, const wxRect& rect, const wxColour& first, + const wxColour& second, double second_fraction); + +// Fallback ratio bar for N>2 non-gradient slots: one solid segment per component, +// widths proportional to shares. Label text (the "NN%" inside wide-enough segments) is +// the caller's concern. +void draw_mixed_ratio_segments(wxDC& dc, const wxRect& rect, const std::vector& colours, + const std::vector& shares); + +// --- Triangle picker (3-component), shared by MixedFilamentDialog and the Publish preview. +struct MixedTriangleTheme +{ + wxColour background; + wxColour outline; // triangle border + wxColour ring; // drag-handle ring + wxColour label; // "Ratio" title + per-vertex labels +}; + +// The three vertices of the read-only/miniature triangle inside a `size` square panel, +// with `margin_dip` inset. Order: top, bottom-left, bottom-right. +std::array mixed_triangle_vertices(const wxSize& size, double margin_dip = 20.0); + +// Draw background, the cached barycentric fill, the outline and the drag-handle marker. +// `weights` are the three barycentric shares (sum 1). The "Ratio" title and per-vertex +// percentage labels are drawn by the caller so the interactive editor can keep its own +// live child labels while the read-only preview draws them as text. +void draw_mixed_triangle_picker(wxDC& dc, const wxSize& size, const std::array& colours, + const std::array& weights, const MixedTriangleTheme& theme); + +// Draw the "Ratio" title plus one "NN%" label per vertex (used by the read-only preview; +// the interactive editor positions its own live labels instead). +void draw_mixed_triangle_labels(wxDC& dc, const wxSize& size, const std::array& weights, + const MixedTriangleTheme& theme); + }} // namespace Slic3r::GUI #endif // slic3r_GUI_FilamentBitmapUtils_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/GradientCurveEditor.cpp b/src/slic3r/GUI/GradientCurveEditor.cpp index 5b1073d231..6d38ef81a5 100644 --- a/src/slic3r/GUI/GradientCurveEditor.cpp +++ b/src/slic3r/GUI/GradientCurveEditor.cpp @@ -1,4 +1,5 @@ #include "GradientCurveEditor.hpp" +#include "FilamentBitmapUtils.hpp" #include "GUI_App.hpp" #include "GuiColor.hpp" #include "I18N.hpp" @@ -19,23 +20,13 @@ namespace GUI { wxDEFINE_EVENT(wxEVT_GRADIENT_CURVE_CHANGED, wxCommandEvent); namespace { -// Layout ratios of the plot rect within the widget, taken from a 214 x 180 px reference drawing. -// Plot rect occupies the upper-left region; right + bottom margins host axis arrows / labels. -constexpr double kPlotLeftRatio = 0.0316; -constexpr double kPlotRightRatio = 0.6766; -constexpr double kPlotTopRatio = 0.1529; -constexpr double kPlotBottomRatio = 0.8474; -constexpr int kGridDivisions = 9; // 10 grid lines including the outer borders. - -// Hit / stroke (DIP). +// Hit / stroke (DIP). The plot-rect ratios, grid divisions, axis/arrow geometry and the +// near-background outline threshold now live in FilamentBitmapUtils so the read-only Publish +// preview and this editor stay pixel-identical. constexpr int kHitRadius = 6; constexpr int kCurveHitRadius = 5; -constexpr int kPointRadius = 4; // anchor outer radius (DIP) constexpr int kStrokeUnselected = 2; constexpr int kStrokeSelected = 4; -constexpr int kStrokeAxis = 2; // axis line width (px, no DPI scaling - matches kGridColor pen and 2DBed convention) -constexpr int kAxisArrowHalf = 5; // half-base of the axis arrow triangle (DIP) -constexpr int kAxisArrowLen = 10; // length of the axis arrow triangle (DIP) // Light-mode design tokens. Resolved through StateColor::darkModeColorFor() // at paint time so the editor follows the app theme (#EEEEEE -> #4C4C55, #6B6B6B -> @@ -46,12 +37,6 @@ const wxColour kAxisColor (107, 107, 107); // #6B6B6B grey 700 const wxColour kLabelMuted (107, 107, 107); // #6B6B6B grey 700 const wxColour kLabelStrong ( 38, 46, 48); // #262E30 grey 900 const wxColour kOutlineColor(172, 172, 172); // #ACACAC dimmed elements - -// LAB (DeltaE76) threshold for "curve color is too close to the background": below it the curve -// gets a subtle outline so it does not visually vanish, otherwise it is drawn plain. Looser than -// the 5.0 of FlushPredict::is_similar_color, so a pastel pink on white still gets an outline. -constexpr float kBgSimilarThreshold = 15.0f; -constexpr int kOutlineExtraDip = 2; } // namespace GradientCurveEditor::GradientCurveEditor(wxWindow* parent, @@ -177,15 +162,8 @@ void GradientCurveEditor::emit_changed() wxRect GradientCurveEditor::plot_rect() const { - const wxSize sz = GetClientSize(); - const int x = static_cast(std::lround(sz.x * kPlotLeftRatio)); - const int y = static_cast(std::lround(sz.y * kPlotTopRatio)); - const int x2 = static_cast(std::lround(sz.x * kPlotRightRatio)); - const int y2 = static_cast(std::lround(sz.y * kPlotBottomRatio)); - // Force square 1:1 so X/Y axes share the same scale and grid cells stay square. Anchor at - // the top-left so the "100%" labels on the bottom/right still align with the plot edges. - const int side = std::max(1, std::min(x2 - x, y2 - y)); - return wxRect(x, y, side, side); + // Square 1:1 plot, shared with the Publish dialog's read-only preview. + return mixed_gradient_plot_rect(GetClientSize()); } wxPoint2DDouble GradientCurveEditor::data_to_px_f(double x, double y) const @@ -330,171 +308,52 @@ void GradientCurveEditor::on_paint(wxPaintEvent& /*evt*/) raw_dc.SetBackground(wxBrush(bg)); raw_dc.Clear(); - // Render through wxGCDC so curves, arrows and anchor circles get anti-aliased; the buffered - // DC is the actual back buffer that gets blitted to the window. - wxGCDC dc(raw_dc); - // The curve and its anchors are drawn straight on the graphics context so their - // coordinates stay sub-pixel accurate (see data_to_px_f). - wxGraphicsContext* gc = dc.GetGraphicsContext(); - - const wxRect rc = plot_rect(); - if (rc.width <= 0 || rc.height <= 0) - return; - - // 10x10 light grid (10 lines including outer borders, 9 equal divisions). - dc.SetPen(wxPen(grid_color, 1)); - for (int i = 0; i <= kGridDivisions; ++i) { - const int x = rc.x + rc.width * i / kGridDivisions; - const int y = rc.y + rc.height * i / kGridDivisions; - dc.DrawLine(x, rc.y, x, rc.y + rc.height); - dc.DrawLine(rc.x, y, rc.x + rc.width, y); - } - - // Set the label font first so text width measurements drive arrow / label placement. - wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); - dc.SetFont(label_font); - - const wxString axis_y_title = _L("Material Ratio"); - const wxString axis_x_title = _L("Model Height"); - const wxString pct_text = wxT("100%"); - const wxSize x_title_sz = dc.GetTextExtent(axis_x_title); - const wxSize y_title_sz = dc.GetTextExtent(axis_y_title); - - wxFont strong_font = label_font; - strong_font.SetWeight(wxFONTWEIGHT_SEMIBOLD); - dc.SetFont(strong_font); - const wxSize pct_text_sz = dc.GetTextExtent(pct_text); - dc.SetFont(label_font); - - // Axes (grey 700) with filled triangle arrows. Y-axis extends above the plot top to the - // canvas top edge; X-axis extends past the plot right toward the canvas right edge. - const int arrow_half = FromDIP(kAxisArrowHalf); - const int arrow_len = FromDIP(kAxisArrowLen); - const wxSize sz = GetClientSize(); - dc.SetPen(wxPen(axis_color, kStrokeAxis)); - dc.SetBrush(wxBrush(axis_color)); - - // Y-axis: vertical line at plot_left, from arrow tip near canvas top down to plot bottom. - const int y_axis_x = rc.x; - const int y_title_pct_gap = FromDIP(1); - const int y_title_bottom_pad = FromDIP(2); - const int y_title_y = std::max(0, rc.y - y_title_sz.y - y_title_pct_gap - pct_text_sz.y - y_title_bottom_pad); - const int y_arrow_tip_y = y_title_y; - const int y_arrow_ty = y_arrow_tip_y + arrow_len; - dc.DrawLine(y_axis_x, y_arrow_ty, y_axis_x, rc.y + rc.height); - { - wxPoint tri[3] = { - wxPoint(y_axis_x, y_arrow_tip_y), - wxPoint(y_axis_x - arrow_half, y_arrow_ty), - wxPoint(y_axis_x + arrow_half, y_arrow_ty), + // Render the plot (grid, axes, labels, curves, anchors) through the shared painter so the + // interactive editor and the Publish dialog's read-only preview stay pixel-identical. The + // curves are handed over as sub-pixel polylines and anti-alias inside the helper. + std::vector curves; + std::vector anchors; + if (m_points.size() >= 2) { + auto color_for_curve = [&](int curve_idx) -> wxColour { + wxColour c = (curve_idx == 0) ? m_color_low : m_color_high; + // Transparent filaments (alpha == 0, e.g. #FFFFFF00) would be invisible. + if (c.Alpha() == 0) + c.Set(c.Red(), c.Green(), c.Blue(), 150); + return c; }; - dc.DrawPolygon(3, tri); - } - // X-axis arrow tip: stays just past the plot ideally, but is clamped so the trailing - // "Material Ratio" label still fits inside the canvas without overlapping the arrow. - const int x_axis_y = rc.y + rc.height; - const int x_label_gap = FromDIP(4); - const int x_edge_pad = FromDIP(6); - const int x_arrow_ideal = rc.x + rc.width + FromDIP(10); - const int x_arrow_max = sz.x - x_title_sz.x - x_label_gap - x_edge_pad - arrow_len; - const int x_arrow_tx = std::max(rc.x + rc.width + arrow_len, - std::min(x_arrow_ideal, x_arrow_max)); - const int x_arrow_tip_x = x_arrow_tx + arrow_len; - const int x_title_x = x_arrow_tip_x + x_label_gap; - dc.DrawLine(rc.x, x_axis_y, x_arrow_tx, x_axis_y); - { - wxPoint tri[3] = { - wxPoint(x_arrow_tip_x, x_axis_y), - wxPoint(x_arrow_tx, x_axis_y - arrow_half), - wxPoint(x_arrow_tx, x_axis_y + arrow_half), + auto build_polyline = [&](int curve_idx) -> std::vector { + const int samples = std::max(128, plot_rect().width * 2); + std::vector poly; + poly.reserve(samples + 1); + for (int s = 0; s <= samples; ++s) { + const double x = double(s) / samples; + const double y0 = sample_curve_y(x); + const double vy = to_visual_y(curve_idx, y0); + poly.push_back(data_to_px_f(x, vy)); + } + return poly; }; - dc.DrawPolygon(3, tri); - } - // Labels. - // "Model Height" and "100%" share the same left x; the gap is larger than the - // axis-arrow half-base so the text never visually touches the Y-axis arrow. - const int label_left_x = y_axis_x + FromDIP(10); - dc.SetTextForeground(label_muted); - dc.DrawText(axis_y_title, label_left_x, y_title_y); - - dc.SetFont(strong_font); - dc.SetTextForeground(label_strong); - dc.DrawText(pct_text, label_left_x, y_title_y + y_title_sz.y + y_title_pct_gap); - - // Bottom-right "100%" sits under the right end of the plot; "Material Ratio" follows the - // X-axis arrow tip (placement was already clamped above to leave room). - dc.DrawText(pct_text, rc.x + rc.width - pct_text_sz.x, x_axis_y); - dc.SetFont(label_font); - dc.SetTextForeground(label_muted); - dc.DrawText(axis_x_title, x_title_x, x_axis_y - x_title_sz.y / 2); - - if (m_points.size() < 2 || !gc) - return; - - auto color_for_curve = [&](int curve_idx) -> wxColour { - wxColour c = (curve_idx == 0) ? m_color_low : m_color_high; - // Transparent filaments (alpha == 0, e.g. #FFFFFF00) would be invisible. - // Lift alpha so the curve stays visible while still hinting at transparency. - if (c.Alpha() == 0) - c.Set(c.Red(), c.Green(), c.Blue(), 150); - return c; - }; - - auto build_polyline = [&](int curve_idx) -> std::vector { - const int samples = std::max(128, rc.width * 2); - std::vector poly; - poly.reserve(samples + 1); - for (int s = 0; s <= samples; ++s) { - const double x = double(s) / samples; - const double y0 = sample_curve_y(x); - const double vy = to_visual_y(curve_idx, y0); - poly.push_back(data_to_px_f(x, vy)); + // Draw unselected first so the selected curve sits on top. + const int other = 1 - m_selected_curve; + for (const int idx : {other, m_selected_curve}) { + std::vector pts = build_polyline(idx); + if (pts.empty()) + continue; + curves.push_back({std::move(pts), color_for_curve(idx), idx == m_selected_curve ? kStrokeSelected : kStrokeUnselected}); } - return poly; - }; - // Only the geometry goes through the graphics context: dc.DrawLines() takes integer wxPoint - // and would quantize the curve back to whole pixels. The pen is still set on the dc, which - // forwards it here while keeping its own cached state in sync for later dc drawing. - auto draw_polyline = [&](const std::vector& poly, const wxColour& col, int stroke_dip) { - dc.SetPen(wxPen(col, FromDIP(stroke_dip))); - gc->StrokeLines(poly.size(), poly.data()); - }; - - // Outline only when the curve color is perceptually close to the background; otherwise - // the plain filament color reads fine and the extra stroke would look heavy. - auto needs_outline = [&](const wxColour& c) { - return calc_color_distance(c, bg) < kBgSimilarThreshold; - }; - - auto draw_one = [&](int curve_idx, int stroke_dip) { - const auto poly = build_polyline(curve_idx); - const wxColour col = color_for_curve(curve_idx); - if (needs_outline(col)) - draw_polyline(poly, outline_color, stroke_dip + kOutlineExtraDip); - draw_polyline(poly, col, stroke_dip); - }; - - // Draw unselected first so the selected curve sits on top. - const int other = 1 - m_selected_curve; - draw_one(other, kStrokeUnselected); - draw_one(m_selected_curve, kStrokeSelected); - - // Control points (selected curve only): hollow circle with axis-color border, theme-aware fill. - // Drawn on the graphics context with a sub-pixel center so the ring stays centered on the - // curve instead of drifting up to half a pixel off it; pen and brush go through the dc for - // the same reason as in draw_polyline above. - const double r = FromDIP(kPointRadius); - dc.SetPen(wxPen(axis_color, 1)); - dc.SetBrush(wxBrush(point_fill)); - for (size_t i = 0; i < m_points.size(); ++i) { - const double vy = to_visual_y(m_selected_curve, m_points[i].y); - const wxPoint2DDouble p = data_to_px_f(m_points[i].x, vy); - gc->DrawEllipse(p.m_x - r, p.m_y - r, r * 2, r * 2); + // Control points (selected curve only). + anchors.reserve(m_points.size()); + for (size_t i = 0; i < m_points.size(); ++i) { + const double vy = to_visual_y(m_selected_curve, m_points[i].y); + anchors.push_back(data_to_px_f(m_points[i].x, vy)); + } } + + const MixedGradientTheme theme{bg, grid_color, axis_color, label_muted, label_strong, outline_color, point_fill}; + draw_mixed_gradient_plot(raw_dc, GetClientSize(), curves, anchors, theme); } void GradientCurveEditor::on_left_down(wxMouseEvent& evt) diff --git a/src/slic3r/GUI/MixedFilamentDialog.cpp b/src/slic3r/GUI/MixedFilamentDialog.cpp index c1cbcc7450..a3047aad34 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.cpp +++ b/src/slic3r/GUI/MixedFilamentDialog.cpp @@ -847,23 +847,8 @@ wxBoxSizer* MixedFilamentDialog::create_ratio_slider() m_ratio_bar->Bind(wxEVT_PAINT, [this](wxPaintEvent&) { wxBufferedPaintDC dc(m_ratio_bar); wxSize sz = m_ratio_bar->GetClientSize(); - - wxColour col_a = comp_colour(0), col_b = comp_colour(1); - - for (int x = 0; x < sz.GetWidth(); ++x) { - double t = (double)x / sz.GetWidth(); - wxColour c = blend_colors(col_a, col_b, 1.0 - t); - dc.SetPen(wxPen(c)); - dc.DrawLine(x, 0, x, sz.GetHeight()); - } - - int div_x = (int)(ratio(1) / 100.0 * sz.GetWidth()); - // Fixed in both themes, like the triangle picker's drag handle: the divider is drawn over - // blended filament colour, so it has to keep its contrast against data rather than chrome. - dc.SetPen(wxPen(wxColour(80, 80, 80), FromDIP(4))); - dc.DrawLine(div_x, 0, div_x, sz.GetHeight()); - dc.SetPen(wxPen(*wxWHITE, FromDIP(2))); - dc.DrawLine(div_x, 0, div_x, sz.GetHeight()); + draw_mixed_ratio_blend_bar(dc, wxRect(0, 0, sz.GetWidth(), sz.GetHeight()), + comp_colour(0), comp_colour(1), ratio(1) / 100.0); }); m_ratio_bar->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { @@ -954,72 +939,15 @@ wxBoxSizer* MixedFilamentDialog::create_triangle_picker() wxSize sz = m_triangle_panel->GetClientSize(); auto [v0, v1, v2] = get_vertices(); - wxColour tri_bg = StateColor::darkModeColorFor(*wxWHITE); - dc.SetBrush(wxBrush(tri_bg)); - dc.SetPen(*wxTRANSPARENT_PEN); - dc.DrawRectangle(0, 0, sz.GetWidth(), sz.GetHeight()); - - wxColour c0 = comp_colour(0), c1 = comp_colour(1), c2 = comp_colour(2); - - const bool cache_valid = m_tri_cache_bmp.IsOk() && - m_tri_cache_size == sz && - m_tri_cache_c0 == c0 && m_tri_cache_c1 == c1 && m_tri_cache_c2 == c2; - - if (!cache_valid) { - int min_y = (int)std::min({v0.y, v1.y, v2.y}); - int max_y = (int)std::max({v0.y, v1.y, v2.y}); - int min_x = (int)std::min({v0.x, v1.x, v2.x}); - int max_x = (int)std::max({v0.x, v1.x, v2.x}); - - m_tri_cache_bmp = wxBitmap(sz.GetWidth(), sz.GetHeight(), 24); - wxMemoryDC mdc(m_tri_cache_bmp); - mdc.SetBrush(wxBrush(tri_bg)); - mdc.SetPen(*wxTRANSPARENT_PEN); - mdc.DrawRectangle(0, 0, sz.GetWidth(), sz.GetHeight()); - - for (int py = min_y; py <= max_y; ++py) { - for (int px = min_x; px <= max_x; ++px) { - TriPoint p = {(double)px, (double)py}; - if (!tri_contains(p, v0, v1, v2)) continue; - double w0, w1, w2; - tri_barycentric(p, v0, v1, v2, w0, w1, w2); - unsigned char mr, mg, mb; - if (w0 + w1 > 1e-6) { - float t01 = static_cast(w1 / (w0 + w1)); - Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), - c1.Red(), c1.Green(), c1.Blue(), - t01, &mr, &mg, &mb); - float t2 = static_cast(w2); - Slic3r::filament_mixer_lerp(mr, mg, mb, - c2.Red(), c2.Green(), c2.Blue(), - t2, &mr, &mg, &mb); - } else { - mr = c2.Red(); mg = c2.Green(); mb = c2.Blue(); - } - mdc.SetPen(wxPen(wxColour(mr, mg, mb))); - mdc.DrawPoint(px, py); - } - } - - mdc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#CECECE")), 1)); - mdc.SetBrush(*wxTRANSPARENT_BRUSH); - wxPoint pts[3] = {{(int)v0.x, (int)v0.y}, {(int)v1.x, (int)v1.y}, {(int)v2.x, (int)v2.y}}; - mdc.DrawPolygon(3, pts); - - mdc.SelectObject(wxNullBitmap); - m_tri_cache_c0 = c0; m_tri_cache_c1 = c1; m_tri_cache_c2 = c2; - m_tri_cache_size = sz; - } - - dc.DrawBitmap(m_tri_cache_bmp, 0, 0); - - // Drag handle (always redrawn on top of cached bitmap) - double hx = m_tri_wx * v0.x + m_tri_wy * v1.x + m_tri_wz * v2.x; - double hy = m_tri_wx * v0.y + m_tri_wy * v1.y + m_tri_wz * v2.y; - int handle_r = FromDIP(5); - dc.SetBrush(*wxWHITE_BRUSH); - dc.SetPen(wxPen(wxColour("#262E30"), FromDIP(2))); - dc.DrawCircle((int)hx, (int)hy, handle_r); + // Draw the background, cached barycentric fill, outline and drag-handle marker through the + // shared picker painter (same geometry the read-only Publish preview uses). + draw_mixed_triangle_picker(dc, sz, + {comp_colour(0), comp_colour(1), comp_colour(2)}, + {m_tri_wx, m_tri_wy, m_tri_wz}, + {StateColor::darkModeColorFor(*wxWHITE), + StateColor::darkModeColorFor(wxColour("#CECECE")), + StateColor::darkModeColorFor(wxColour("#262E30")), + StateColor::darkModeColorFor(COLOR_LABEL_MUTED)}); if (m_result.ratios.size() >= 3) { dc.SetFont(::Label::Body_10); diff --git a/src/slic3r/GUI/MixedFilamentDialog.hpp b/src/slic3r/GUI/MixedFilamentDialog.hpp index ea8ac5ad16..274eac1f92 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.hpp +++ b/src/slic3r/GUI/MixedFilamentDialog.hpp @@ -170,10 +170,6 @@ private: // Triangle picker drag point (barycentric weights) double m_tri_wx{0.333}, m_tri_wy{0.333}, m_tri_wz{0.334}; - // Cached triangle color bitmap (invalidated when colors or size change) - wxBitmap m_tri_cache_bmp; - wxColour m_tri_cache_c0, m_tri_cache_c1, m_tri_cache_c2; - wxSize m_tri_cache_size; std::array m_triangle_ratio_labels{nullptr, nullptr, nullptr}; }; diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 455a318935..73016f4902 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -31,6 +31,7 @@ #include #include #include +#include namespace Slic3r { namespace GUI { namespace { @@ -423,7 +424,7 @@ PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_ spec.tri_weights = spec.ratios; // the picker's barycentric shares } else { const Slic3r::GradientCurve curve = mixed_gradient_curve(full, slot); - constexpr int kSamples = 64; + constexpr int kSamples = 256; for (int i = 0; i <= kSamples; ++i) { const double t = double(i) / kSamples; spec.gradient_samples.emplace_back(t, sample_gradient_curve(curve, t)); @@ -894,9 +895,9 @@ size_t PublishSettingsDialog::section_group_for(Section kind) section.mixed_tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); section.mixed_tabs->SetFont(Label::Body_14); section.mixed_tabs->SetBackgroundColour(GetBackgroundColour()); - // The mixed tabs carry full swatch compositions: give them extra room to breathe so - // neighbouring compositions do not read as one long row (must precede AppendItem). - section.mixed_tabs->SetItemSpace(FromDIP(5)); + // The mixed tabs carry full swatch compositions: give them a touch more room than the + // filament tabs so neighbouring compositions stay distinguishable (must precede AppendItem). + section.mixed_tabs->SetItemSpace(FromDIP(3)); page_sizer->Add(section.mixed_tabs, 0, wxEXPAND | wxTOP, FromDIP(2)); section.mixed_tabs->Hide(); } @@ -1180,18 +1181,10 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV auto* viz = new wxPanel(category.page, wxID_ANY); viz->SetBackgroundStyle(wxBG_STYLE_PAINT); - // Per-panel fill-bitmap cache for the ternary branch; rebuilt only when size or colours - // change (shared_ptr keeps the lifetime independent of this method's locals). - struct TriCache - { - wxBitmap bmp; - wxSize sz{0, 0}; - wxColour c0, c1, c2; - }; - auto tri_cache = std::make_shared(); // Theme colours and DIP metrics are resolved inside the paint handler so dark-mode toggles - // and DPI changes are picked up on the next repaint without any explicit listener. - viz->Bind(wxEVT_PAINT, [this, panel = viz, spec, tri_cache](wxPaintEvent&) { + // and DPI changes are picked up on the next repaint without any explicit listener. The + // ternary fill cache lives inside the shared triangle painter (FilamentBitmapUtils). + viz->Bind(wxEVT_PAINT, [this, panel = viz, spec](wxPaintEvent&) { const wxColour bg = StateColor::darkModeColorFor(*wxWHITE); wxBufferedPaintDC pdc(panel); pdc.SetBackground(wxBrush(bg)); @@ -1203,236 +1196,117 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV const size_t n = spec.component_colours.size(); if (spec.tri_weights.size() == 3 && n == 3 && !spec.is_gradient) { - // Ternary mix: a read-only miniature of the MixedFilamentDialog's triangle picker. - // Per-pixel barycentric fill is cached into a bitmap keyed on size + colours; the - // marker and labels are redrawn on top every paint. - const wxColour tri_bg = StateColor::darkModeColorFor(*wxWHITE); - const wxColour outline = StateColor::darkModeColorFor(wxColour("#CECECE")); - const wxColour ring = StateColor::darkModeColorFor(wxColour("#262E30")); - const wxColour label_c = StateColor::darkModeColorFor(wxColour(107, 107, 107)); // grey 700 - const double margin_dip = 24.0; - auto& cache = *tri_cache; - - auto vertices_for = [&](const wxSize& sz) -> std::tuple { - const double pw = sz.GetWidth(), ph = sz.GetHeight(); - const int margin = FromDIP(int(margin_dip)); - const double avail = std::min(pw, ph) - 2.0 * margin; - const double side = avail; - const double tri_h = side * std::sqrt(3.0) / 2.0; - const double cx = pw / 2.0; - const double top_y = (ph - tri_h) / 2.0; - return {{cx, top_y}, {cx - side / 2.0, top_y + tri_h}, {cx + side / 2.0, top_y + tri_h}}; - }; - - pdc.SetFont(::Label::Body_12); - const wxColour& c0 = spec.component_colours[0]; - const wxColour& c1 = spec.component_colours[1]; - const wxColour& c2 = spec.component_colours[2]; - - if (!cache.bmp.IsOk() || cache.sz != rc.GetSize() || cache.c0 != c0 || cache.c1 != c1 || cache.c2 != c2) { - auto [v0, v1, v2] = vertices_for(rc.GetSize()); - cache.bmp = wxBitmap(rc.width, rc.height, 32); - wxMemoryDC mdc(cache.bmp); - mdc.SetBrush(wxBrush(tri_bg)); - mdc.SetPen(*wxTRANSPARENT_PEN); - mdc.DrawRectangle(0, 0, rc.width, rc.height); - - const int min_y = int(std::min({v0.y, v1.y, v2.y})); - const int max_y = int(std::max({v0.y, v1.y, v2.y})); - const int min_x = int(std::min({v0.x, v1.x, v2.x})); - const int max_x = int(std::max({v0.x, v1.x, v2.x})); - for (int py = min_y; py <= max_y; ++py) - for (int px = min_x; px <= max_x; ++px) { - const TriPoint p = {double(px), double(py)}; - if (!tri_contains(p, v0, v1, v2)) - continue; - double w0, w1, w2; - tri_barycentric(p, v0, v1, v2, w0, w1, w2); - unsigned char mr, mg, mb; - if (w0 + w1 > 1e-6) { - float t01 = static_cast(w1 / (w0 + w1)); - Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), c1.Red(), c1.Green(), c1.Blue(), t01, &mr, &mg, - &mb); - Slic3r::filament_mixer_lerp(mr, mg, mb, c2.Red(), c2.Green(), c2.Blue(), static_cast(w2), &mr, &mg, &mb); - } else { - mr = c2.Red(); - mg = c2.Green(); - mb = c2.Blue(); - } - mdc.SetPen(wxPen(wxColour(mr, mg, mb))); - mdc.DrawPoint(px, py); - } - - mdc.SetPen(wxPen(outline, 1)); - mdc.SetBrush(*wxTRANSPARENT_BRUSH); - const wxPoint pts[3] = {{int(v0.x), int(v0.y)}, {int(v1.x), int(v1.y)}, {int(v2.x), int(v2.y)}}; - mdc.DrawPolygon(3, pts); - mdc.SelectObject(wxNullBitmap); - - cache.sz = rc.GetSize(); - cache.c0 = c0; - cache.c1 = c1; - cache.c2 = c2; - } - pdc.DrawBitmap(cache.bmp, 0, 0); - - // Published-ratio marker (read-only twin of the editor's drag handle). - { - auto [v0, v1, v2] = vertices_for(rc.GetSize()); - const double w0 = spec.tri_weights[0], w1 = spec.tri_weights[1], w2 = spec.tri_weights[2]; - const int hx = int(w0 * v0.x + w1 * v1.x + w2 * v2.x); - const int hy = int(w0 * v0.y + w1 * v1.y + w2 * v2.y); - pdc.SetBrush(*wxWHITE_BRUSH); - pdc.SetPen(wxPen(ring, FromDIP(2))); - pdc.DrawCircle(hx, hy, FromDIP(5)); - - // Percent label beside each vertex. - for (int i = 0; i < 3; ++i) { - const wxString text = wxString::Format("%d%%", int(std::lround(spec.tri_weights[i] * 100.0))); + // Ternary mix: read-only miniature of the MixedFilamentDialog's triangle picker. + const MixedTriangleTheme tri_theme{StateColor::darkModeColorFor(*wxWHITE), + StateColor::darkModeColorFor(wxColour("#CECECE")), + StateColor::darkModeColorFor(wxColour("#262E30")), + StateColor::darkModeColorFor(wxColour(107, 107, 107))}; + draw_mixed_triangle_picker(pdc, rc.GetSize(), {spec.component_colours[0], spec.component_colours[1], spec.component_colours[2]}, + {spec.tri_weights[0], spec.tri_weights[1], spec.tri_weights[2]}, tri_theme); + draw_mixed_triangle_labels(pdc, rc.GetSize(), {spec.tri_weights[0], spec.tri_weights[1], spec.tri_weights[2]}, tri_theme); + } else if (!spec.is_gradient) { + // Ratio bar. A 2-component slot matches the MixedFilamentDialog's continuous blend + + // divider (with its two end labels); wider non-gradient mixes (rare) fall back to one + // solid segment per component. + if (n == 2) { + const int bar_h = FromDIP(27); + draw_mixed_ratio_blend_bar(pdc, wxRect(rc.x, rc.y, rc.width, bar_h), spec.component_colours[0], + spec.component_colours[1], spec.ratios[1]); + // Read-only twin of the dialog's left/right percentage labels. + pdc.SetFont(::Label::Body_12); + pdc.SetTextForeground(StateColor::darkModeColorFor(wxColour(107, 107, 107))); + const wxString la = wxString::Format("%d%%", int(std::lround(spec.ratios[0] * 100.0))); + const wxString lb = wxString::Format("%d%%", int(std::lround(spec.ratios[1] * 100.0))); + const int lab_y = rc.y + bar_h + FromDIP(2); + pdc.DrawText(la, rc.x, lab_y); + pdc.DrawText(lb, rc.x + rc.width - pdc.GetTextExtent(lb).GetWidth(), lab_y); + } else { + draw_mixed_ratio_segments(pdc, rc, spec.component_colours, spec.ratios); + // Percent label centred in each segment wide enough to hold it. + std::vector shares = spec.ratios; + double total = 0.0; + for (double r : shares) + total += r; + if (total <= 0.0) { + shares.assign(n, 1.0 / n); + total = 1.0; + } + pdc.SetFont(::Label::Body_12); + int x0 = rc.x; + for (size_t i = 0; i < n; ++i) { + const int x1 = (i + 1 < n) + ? rc.x + int(std::lround(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0) / total * double(rc.width))) + : rc.x + rc.width; + const int w = std::max(1, x1 - x0); + const wxString text = wxString::Format("%d%%", int(std::lround(shares[i] / total * 100.0))); const wxSize tsz = pdc.GetTextExtent(text); - const TriPoint vtx = (i == 0) ? v0 : (i == 1) ? v1 : v2; - int lx = int(vtx.x - tsz.GetWidth() / 2.0); - int ly = (i == 0) ? int(vtx.y - tsz.GetHeight()) : int(vtx.y + FromDIP(3)); - ly = std::clamp(ly, 0, rc.height - tsz.GetHeight()); - lx = std::clamp(lx, 0, rc.width - tsz.GetWidth()); - pdc.SetTextForeground(label_c); - pdc.DrawText(text, lx, ly); + if (tsz.GetWidth() + FromDIP(4) <= w) { + const wxColour& c = spec.component_colours[i]; + const double lum = 0.299 * c.Red() + 0.587 * c.Green() + 0.114 * c.Blue(); + pdc.SetTextForeground(lum > 140 ? wxColour("#262E30") : *wxWHITE); + pdc.DrawText(text, x0 + (w - tsz.GetWidth()) / 2, rc.y + (rc.height - tsz.GetHeight()) / 2); + } + x0 = x1; } } - } else if (!spec.is_gradient) { - // Stacked ratio bar: one solid segment per component, widths proportional to the - // published shares. Integer widths accumulate left to right; the last segment takes - // the rounding remainder so the bar always fills exactly. - std::vector shares = spec.ratios; - double total = 0.0; - for (double r : shares) - total += r; - if (shares.size() != n || total <= 0.0) { - shares.assign(n, 1.0 / n); - total = 1.0; - } - auto share_to_px = [&](double share_sum) { return rc.x + int(std::lround(share_sum / total * double(rc.width))); }; - std::vector segs(n); - int x0 = rc.x; - for (size_t i = 0; i < n; ++i) { - int x1 = rc.x + rc.width; - if (i + 1 < n) - x1 = share_to_px(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0)); - segs[i] = wxRect(x0, rc.y, std::max(1, x1 - x0), rc.height); - x0 = segs[i].GetRight() + 1; - } - - for (size_t i = 0; i < n; ++i) { - pdc.SetPen(*wxTRANSPARENT_PEN); - pdc.SetBrush(wxBrush(spec.component_colours[i])); - pdc.DrawRectangle(segs[i]); - } - pdc.SetBrush(*wxTRANSPARENT_BRUSH); - pdc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#ACACAC")), 1)); - pdc.DrawRectangle(rc); - - // Percent label centred in each segment wide enough to hold it. - pdc.SetFont(::Label::Body_12); - for (size_t i = 0; i < n; ++i) { - const wxString text = wxString::Format("%d%%", int(std::lround(shares[i] / total * 100.0))); - const wxSize tsz = pdc.GetTextExtent(text); - if (tsz.GetWidth() + FromDIP(4) > segs[i].GetWidth()) - continue; - // Label contrast follows the swatch itself, not the theme. - const wxColour& c = spec.component_colours[i]; - const double lum = 0.299 * c.Red() + 0.587 * c.Green() + 0.114 * c.Blue(); - pdc.SetTextForeground(lum > 140 ? wxColour("#262E30") : *wxWHITE); - pdc.DrawText(text, segs[i].x + (segs[i].GetWidth() - tsz.GetWidth()) / 2, rc.y + (rc.height - tsz.GetHeight()) / 2); - } } else { - // Gradient: compact "Material Ratio" over "Model Height" graph, a read-only - // miniature of the GradientCurveEditor plot. Component order matches the config; - // the second component's curve is the mirror of the first's. - const wxColour grid_color = StateColor::darkModeColorFor(wxColour(238, 238, 238)); // grey 300 - const wxColour axis_color = StateColor::darkModeColorFor(wxColour(107, 107, 107)); // grey 700 - const wxColour label_muted = StateColor::darkModeColorFor(wxColour(107, 107, 107)); - const wxColour point_fill = StateColor::darkModeColorFor(*wxWHITE); - - const int pad_left = FromDIP(34); - const int pad_right = FromDIP(10); - const int pad_top = FromDIP(18); - const int pad_bottom = FromDIP(16); - const wxRect plot(rc.x + pad_left, rc.y + pad_top, std::max(1, rc.width - pad_left - pad_right), - std::max(1, rc.height - pad_top - pad_bottom)); - - constexpr int kGridDivisions = 5; - pdc.SetPen(wxPen(grid_color, 1)); - for (int i = 0; i <= kGridDivisions; ++i) { - const int gx = plot.x + plot.width * i / kGridDivisions; - const int gy = plot.y + plot.height * i / kGridDivisions; - pdc.DrawLine(gx, plot.y, gx, plot.y + plot.height); - pdc.DrawLine(plot.x, gy, plot.x + plot.width, gy); - } - - // Axes with small filled arrowheads along the plot's left and bottom edges. - const int arrow_len = FromDIP(7); - const int arrow_half = FromDIP(3); - pdc.SetPen(wxPen(axis_color, 1)); - pdc.SetBrush(wxBrush(axis_color)); - pdc.DrawLine(plot.x, plot.y + plot.height, plot.x, plot.y); - { - wxPoint tri[3] = {wxPoint(plot.x, plot.y - arrow_len), wxPoint(plot.x - arrow_half, plot.y), - wxPoint(plot.x + arrow_half, plot.y)}; - pdc.DrawPolygon(3, tri); - } - pdc.DrawLine(plot.x, plot.y + plot.height, plot.x + plot.width, plot.y + plot.height); - { - wxPoint tri[3] = {wxPoint(plot.x + plot.width + arrow_len, plot.y + plot.height), - wxPoint(plot.x + plot.width, plot.y + plot.height - arrow_half), - wxPoint(plot.x + plot.width, plot.y + plot.height + arrow_half)}; - pdc.DrawPolygon(3, tri); - } - - wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); - pdc.SetFont(label_font); - pdc.SetTextForeground(label_muted); - pdc.DrawText(_L("Material Ratio"), plot.x + FromDIP(4), plot.y - pdc.GetTextExtent(_L("Material Ratio")).GetHeight()); - const wxString height_title = _L("Model Height"); - pdc.DrawText(height_title, plot.x + plot.width - pdc.GetTextExtent(height_title).GetWidth(), plot.y + plot.height + FromDIP(2)); - + // Gradient: read-only miniature of the GradientCurveEditor plot, drawn through the + // shared painter so it anti-aliases and keeps the square proportions and labels. + const MixedGradientTheme grad_theme{StateColor::darkModeColorFor(*wxWHITE), + StateColor::darkModeColorFor(wxColour(238, 238, 238)), + StateColor::darkModeColorFor(wxColour(107, 107, 107)), + StateColor::darkModeColorFor(wxColour(107, 107, 107)), + StateColor::darkModeColorFor(wxColour(38, 46, 48)), + StateColor::darkModeColorFor(wxColour(172, 172, 172)), + StateColor::darkModeColorFor(*wxWHITE)}; + std::vector curves; + std::vector anchors; if (spec.gradient_samples.size() >= 2 && n >= 2) { - auto curve_point = [&](double t, double ratio) { - return wxPoint(plot.x + int(std::lround(t * plot.width)), plot.y + int(std::lround((1.0 - ratio) * plot.height))); + const wxRect plot = mixed_gradient_plot_rect(rc.GetSize()); + auto lift_alpha = [](wxColour c) { + if (c.Alpha() == 0) + c.Set(c.Red(), c.Green(), c.Blue(), 150); + return c; }; - // First component's ratio solid, its mirror dashed-free twin for the other. - const wxColour& col_a = spec.component_colours[0]; - const wxColour& col_b = spec.component_colours[1]; - std::vector pts_a, pts_b; + // First component's ratio solid, its mirror twin for the other. + const wxColour col_a = lift_alpha(spec.component_colours[0]); + const wxColour col_b = lift_alpha(spec.component_colours[1]); + std::vector pts_a, pts_b; pts_a.reserve(spec.gradient_samples.size()); pts_b.reserve(spec.gradient_samples.size()); for (const auto& [t, r] : spec.gradient_samples) { - pts_a.push_back(curve_point(t, r)); - pts_b.push_back(curve_point(t, 1.0 - r)); + pts_a.push_back({plot.x + t * plot.width, plot.y + (1.0 - r) * plot.height}); + pts_b.push_back({plot.x + t * plot.width, plot.y + r * plot.height}); } - pdc.SetPen(wxPen(col_b, 2)); - for (size_t i = 0; i + 1 < pts_b.size(); ++i) - pdc.DrawLine(pts_b[i], pts_b[i + 1]); - pdc.SetPen(wxPen(col_a, 2)); - for (size_t i = 0; i + 1 < pts_a.size(); ++i) - pdc.DrawLine(pts_a[i], pts_a[i + 1]); - // Control-point anchors of the stored curve on the first component's line. - pdc.SetBrush(wxBrush(point_fill)); - pdc.SetPen(wxPen(col_a, 1)); - for (const auto& [t, r] : spec.gradient_anchors) { - const wxPoint c = curve_point(t, r); - pdc.DrawCircle(c, FromDIP(3)); - } + anchors.reserve(spec.gradient_anchors.size()); + for (const auto& [t, r] : spec.gradient_anchors) + anchors.push_back({plot.x + t * plot.width, plot.y + (1.0 - r) * plot.height}); + curves.push_back({std::move(pts_a), col_a, 4}); + curves.push_back({std::move(pts_b), col_b, 2}); } + draw_mixed_gradient_plot(pdc, rc.GetSize(), curves, anchors, grad_theme); } }); // Fixed DIP size, left-aligned: the visualization keeps its proportions no matter how the // dialog is resized (the paint handler draws into whatever client rect the panel ends up - // with, so nothing else has to change). - const int viz_h = spec.is_gradient ? 150 : (spec.tri_weights.size() == 3 ? 180 : 30); - const wxSize viz_sz(FromDIP(240), FromDIP(viz_h)); + // with, so nothing else has to change). Sizes mirror the MixedFilamentDialog controls: the + // gradient plot and triangle picker match the editor's 260x200 / 160x160, the ratio bar is + // the dialog's 27px bar plus its label line. + int viz_h; + int viz_w; + if (spec.is_gradient) { + viz_w = 260; + viz_h = 200; + } else if (spec.tri_weights.size() == 3 && spec.component_colours.size() == 3) { + viz_w = 160; + viz_h = 160; + } else { + viz_w = 240; + viz_h = spec.component_colours.size() == 2 ? 50 : 30; + } + const wxSize viz_sz(FromDIP(viz_w), FromDIP(viz_h)); viz->SetMinSize(viz_sz); viz->SetMaxSize(viz_sz); // Parented to the page right above the scroll area, so it is always shown with the tab: diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 7e1f748e36..4090bf9c1b 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -92,7 +92,7 @@ int TabCtrl::AppendItem(const wxString& item, int image, int selImage, void* cli btn->Create(this, item, "", wxBORDER_NONE); btn->SetFont(GetFont()); btn->SetTextColor( - StateColor(std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), std::make_pair(*wxLIGHT_GREY, (int) StateColor::Normal))); + StateColor(std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), std::make_pair(wxColour("#262E30"), (int) StateColor::Normal))); btn->SetBackgroundColor(StateColor()); btn->SetCornerRadius(0); btn->SetPaddingSize({TAB_BUTTON_PADDING}); From 4d67159ea2463dc662e00555b0203b9210c9e6bb Mon Sep 17 00:00:00 2001 From: raistlin7447 Date: Mon, 31 Aug 2026 08:20:26 -0500 Subject: [PATCH 068/208] fix: scope the CRLF override to the git apply invocation git config wrote core.autocrlf into the repository git init creates in the extracted CPython source. Nothing outside deps/build reads that repository, so the setting was already contained. -c applies the override to the one invocation instead, so no repository config is written at all. It cannot reuse PATCH_CMD, so the shared flags are spelled out here. --- deps/python3/python3.cmake | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/deps/python3/python3.cmake b/deps/python3/python3.cmake index 936d75f488..78eb6e72b2 100644 --- a/deps/python3/python3.cmake +++ b/deps/python3/python3.cmake @@ -16,11 +16,12 @@ if(WIN32) # Patch from https://github.com/python/cpython/pull/153608 # This patch has not been merged to 3.12 yet so we need to apply it manually # - # The config lands on the CPython repo git init just made, not OrcaSlicer. Without - # it the patched find_python.bat comes out LF and cmd.exe cannot find its goto labels. + # Without core.autocrlf=false the patched find_python.bat comes out LF and + # cmd.exe cannot find its goto labels. set(_patch_cmd git init - && git config core.autocrlf false - && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) + && ${GIT_EXECUTABLE} -c core.autocrlf=false apply --verbose + --ignore-space-change --whitespace=fix + ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) if(MSVC_VERSION EQUAL 1800) set(_python_platform_toolset v120) From 261cc19c592a9aa721e345798a89a84681ffc5b3 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 31 Aug 2026 23:14:03 +0800 Subject: [PATCH 069/208] update doc update doc --- doc/developer-reference/filament_id.md | 211 ----- docs/HLSD/filament_id.md | 383 +++++++++ filament_id_plan.html | 1029 ------------------------ filament_id_plan.md | 397 --------- filament_id_plan_v2.md | 314 -------- filament_id_plan_v3.md | 213 ----- filament_id_plan_v4.md | 224 ------ 7 files changed, 383 insertions(+), 2388 deletions(-) delete mode 100644 doc/developer-reference/filament_id.md create mode 100644 docs/HLSD/filament_id.md delete mode 100644 filament_id_plan.html delete mode 100644 filament_id_plan.md delete mode 100644 filament_id_plan_v2.md delete mode 100644 filament_id_plan_v3.md delete mode 100644 filament_id_plan_v4.md diff --git a/doc/developer-reference/filament_id.md b/doc/developer-reference/filament_id.md deleted file mode 100644 index c17e4e44e4..0000000000 --- a/doc/developer-reference/filament_id.md +++ /dev/null @@ -1,211 +0,0 @@ -# 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 follow the product identity.** The id is a pure function of the product triple - `(filament_vendor, filament_type, family name)` — correcting any of them re-mints the id - **by design**, and `--update-snapshot` records the old id in the shipped succession ledger - with its successor so device trays, calibration records, and user presets keep resolving - (`renamed_from` still gates preset-*name* compatibility as before). A shipped id is never - recycled for a different material: retired ids are blocked forever. - -## 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_product///") ) -``` - -`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. The triple -comes from the family root's *flattened* config: `` is the filament -**manufacturer** (`"Polymaker"`, or `"Generic"` for generics — never the printer brand), -`` the material type, `` the root's base name; the two config -values are inheritable list options and the first element counts. The key contains no bundle -name, so the same product mints the same id in every bundle — hoisting a family into -OrcaFilamentLibrary never changes its id. 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: `Polymaker/PLA/PolyLite PLA` mints `OF5CgdDq`. - -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 "filament_vendor/filament_type/family_name"` prints the id a triple would mint without -touching anything. The default run is idempotent and never rewrites a valid existing id. -Maintenance modes (normally only used by id migrations): `--remint VENDOR` re-derives a -vendor's declared ids from their triples (a declaration already equal to a salt iteration -of its own triple is conformant and left alone — deliberate salt splits keeping two -presets of one product apart for per-printer AMS matching survive), -`--drop-redundant-ids VENDOR` deletes declarations -that merely re-declare an inherited OFL id, `--add-hint "OLD=NEW"` records a cross-island -succession hint, and `--retire "OLD=NEW"` records succession for a shipped non-island id -that vanished while another declarer kept it alive (lineage the automatic claim vote can no -longer see). - -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 | `resources/profiles/retired_filament_ids.json` | never used again, for anything | - -## The succession ledger - -`resources/profiles/retired_filament_ids.json` ships with the app. Each retired id maps to -`{"claims": [...], "successor": }` — successor chains are followed to the live end — -and a `hints` map carries the same forwarding for ids Orca cannot retire because another -island owns them (e.g. a `GF*` id whose material also exists as an OFL family). The client -consults the ledger **only on resolution miss** (AMS tray sync, tray-id type lookup, -calibration history, filament-id preset lookup): a live preset always wins first, so BBL -installs resolve `GF*` natively and behavior is unchanged wherever the raw id still exists. -This is what makes identity-driven re-mints (structure rule 5) safe: the old id keeps -resolving to the family's current preset instead of degrading to a `Generic ` fallback. -The file is append-only and maintained exclusively by `--update-snapshot` / `--add-hint` / -`--retire`. - -## 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 **and** tree triples == snapshot - triples, both directions: any `filament_vendor`/`filament_type`/family-name change surfaces - as a snapshot diff. -- **Mint conformance** — a non-grandfathered `OF*` id must equal the mint (or a salt - iteration) of its declarer's product triple; the error prints the expected id. -- **Retired reuse** — any tree id present in `resources/profiles/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** — any vendor preset riding an OFL family id must keep the library - preset's base name, a non-empty `compatible_printers`, and no own id key (structure rule 4); - the error names the rename as the cause. -- **Triple integrity** — every declarer outside the BBL/`QD_*` islands must resolve a - non-empty `filament_vendor` and `filament_type` (generics use `"Generic"`), and all - declarers of one family within a bundle must agree on the triple. -- **Succession integrity** — retired successor chains terminate at a live id (or null) with - no cycles; `hints` keys are live, island-owned ids. -- **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 (or fix its `filament_vendor`/`filament_type`).** Add - `renamed_from` for the name, run `--remint ` then `--update-snapshot`: the id - re-derives from the corrected identity and the old id lands in the succession ledger - pointing at the new one. Commit the profile, snapshot, and ledger diffs together. -- **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/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md new file mode 100644 index 0000000000..0dfc5471b0 --- /dev/null +++ b/docs/HLSD/filament_id.md @@ -0,0 +1,383 @@ +# 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, in every profile bundle that ships it. +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`), and it is never +per-bundle either — PolyLite PLA carries the same id whether the preset lives in the +OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. + +**How it is generated:** an id is computed, never invented. `scripts/assign_filament_ids.py` +mints it as a deterministic hash of the product's identity — the triple +`(filament_vendor, filament_type, family name)`, where the family name is the preset name +with its `@...` variant suffix stripped — producing an 8-character `OF*` code that is the +same for that product in every bundle, in every PR, on every machine. For example, Polymaker's +PolyLite PLA presets (`PolyLite PLA @base`, `PolyLite PLA@Q2-Series`, …) resolve +`filament_vendor` `Polymaker`, `filament_type` `PLA`, and family name `PolyLite PLA`; hashing +`filament_product/Polymaker/PLA/PolyLite PLA` yields `OF5CgdDq`, and that is the id the +OrcaFilamentLibrary, OrcaArena, Qidi, and Snapmaker bundles all arrive at independently +(derivation details in the Minting section). + +**How it is used:** at runtime the id is the join key between hardware and profiles. +When a printer reports what a tray holds (Bambu AMS, Qidi box, Creality CFS, +Klipper, Snapmaker), OrcaSlicer matches the reported id against the filament presets +compatible with that printer to select the right profile; other features — tray display +names, support-material detection, vitrification warnings, multi-nozzle filament grouping — +look up material properties by id alone. When an id has been retired, a shipped succession +ledger forwards it to its successor so old trays and records keep resolving. + +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. + +## The design, in three pieces + +Because several consumers match **globally by id alone, first hit wins** (see the next +section), any two materials sharing one id feed wrong data somewhere — a wrong tray name, a +wrong support-material flag, a wrong nozzle grouping — and inside one printer a duplicated id +makes AMS spool matching a coin toss. Hand-written ids produce such collisions constantly, so +the system is built to make them impossible and to make identity corrections safe: + +1. **Deterministic minting.** An id is a pure hash of the product's identity — no registry to + maintain, no next-free-number ceremony, no way for two concurrent PRs to race for the same + number, and no way to get it wrong by hand, because you never write it by hand. +2. **A sanctioned snapshot.** The complete id landscape derived from the tree must equal + `scripts/filament_id_snapshot.json` exactly, so every change to ids, claims (which bundles + ship which id, and for which family), or product identity surfaces as a reviewable diff to + one file — the maintainer gate. +3. **A shipped succession ledger.** Ids live outside the tree too — on device trays, in + calibration records, in user presets, in project files. When an id is retired, the ledger + forwards it to its successor so none of those references degrade to a generic fallback. + +## Who consumes the id + +The canonical consumer is tray-to-preset matching: a device reports a tray material id +(`tray_info_idx`), and the shared matching pipeline (`PresetBundle::sync_ams_list` and +friends) resolves it to a preset. The matcher is printer-scoped and first-match-wins: +scanning only compatible family roots — system roots plus user-made custom filaments, which +are user roots carrying their own `P*` ids; a preset derived from another resolves through +its root and never matches directly — it picks the first one whose `filament_id` equals the +tray's and retries once through the succession ledger on a miss. Only then does it fall back +by filament type: a system `Generic ` preset (matched by name, then by type +similarity), else the slot's previous selection, else any compatible system generic or, +failing that, any compatible system preset, else the slot is skipped — every fallback +selection surfaces a user-visible notice. + +Today only the Bambu AMS integration follows this pattern end to end — the device itself +reports the id, and the pipeline does all the matching. The other device integrations still +synthesize a preset id client-side in their agents (by type, brand, or color lookups against +the loaded presets) before the pipeline runs; they are intended to converge on the same +pattern, with the device-reported tray material id flowing through the shared matcher. + +| Ecosystem | Where the tray id comes from today | +| --- | --- | +| Bambu AMS | the device itself (RFID / user tray setting) — the `GF*` catalog | +| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name — then translated through the succession ledger to the family's minted id (the `QD_*` values themselves no longer exist as preset ids — see the reserved-namespaces section) | +| Creality CFS | runtime brand/type scoring returns the winning 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 (`FilamentGroup::try_merge_filaments` +merges plate slots sharing one `(filament_id, color)` pair, with matching +extruder-printability, onto one nozzle group; the engine is implemented but no grouping path +calls it yet). +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 break AMS matching: +the matcher picks whichever preset loads first (it now logs an "Ambiguous AMS filament match" +warning, but the pick is still arbitrary) and the tray-edit dialog, which lists one entry per +id, hides the second preset entirely. The profile validator's `-f` check +(`check_filament_subtypes` → `PresetBundle::check_duplicate_filament_subtypes`) rejects this +per printer, and CI runs it tree-wide. + +Two more consumer-side facts worth knowing: + +- The machine-facing dialogs (AMS tray edit, AMS dry control, calibration history, extrusion + calibration) offer the filaments a connected printer can use by the same compatibility rule + the plater uses (an empty `compatible_printers` means *every* printer). Alias shadowing + still applies: a vendor's same-name profile supersedes the library generic. That is what + puts Orca Filament Library materials in those lists — deduplicated to one entry per + `filament_id` in the AMS and calibration-history dialogs, while extrusion calibration + deliberately lists every matching preset by full name. +- The id is load-bearing at startup: an instantiated system filament (one marked + `"instantiation": "true"` — see the structure rules) that resolves **no** + `filament_id` anywhere in its `inherits` chain is a hard load error in the C++ loader + (`Can not find filament_id for `) that discards the entire vendor bundle (for the + OrcaFilamentLibrary itself the failure is messier: library presets loaded before the + failing one survive, and every vendor bundle whose filaments inherit from the library is + then discarded for want of a base). CI's structure check catches this before it ships. + +## 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 of the same product (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 — Qidi's PolyLite PLA has four per-series roots + (`PolyLite PLA@Q2-Series`, `@Q2C-Series`, `@X-Max 4-Series`, `@X-Plus 5-Series`) — and all + of them must declare the *identical* id. This is the authoring rule for new work; a large + grandfathered tail of older presets breaks it in two ways — keys written on instantiated + presets (frozen in the snapshot's `instantiated_with_id` list) and keys that override the + id the preset would inherit from its family (frozen in `id_overrides`) — and CI ratchets + so no new preset joins either tail. +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, + at most one compatible instantiated preset per id, or AMS matching turns ambiguous. The + C++ validator's `-f` check 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 — + e.g. `Generic PLA @Sovol SV08 MAX` inherits `Generic PLA @System` and lists three Sovol + nozzles. A vendor-*branded* filament never rides a generic family id. +5. **Ids follow the product identity.** The id is a pure function of the product triple + `(filament_vendor, filament_type, family name)` — correcting any of them re-mints the id + **by design** (via `--remint `; the exact sequence is in the FAQ), and + `--update-snapshot` records the old id in the shipped succession ledger with its successor + so device trays, calibration records, and user presets keep resolving (`renamed_from` + still gates preset-*name* compatibility as before). A shipped id is never recycled for a + different material: retired ids are blocked forever. + +## 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_product///") ) +``` + +`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; with the `OF` prefix the full id is 8 chars, within the +AMS length limit. The triple comes from the family root's *flattened* config: +`` is the filament +**manufacturer** (`"Polymaker"`, or `"Generic"` for generics — never the printer brand), +`` the material type, `` the root's base name; the two config +values are inheritable list options and the first element counts. + +Content-addressing on that triple is what makes the whole system converge. The key contains no +bundle name, so the same product mints the same id in every bundle — hoisting a family into +OrcaFilamentLibrary never changes its id, and two vendors independently shipping the same +product arrive at the same id without coordinating. `Polymaker/PLA/PolyLite PLA` mints +`OF5CgdDq`, and that one id is declared by the OrcaFilamentLibrary, OrcaArena, Qidi, and +Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrzZ8`, claimed +by ten bundles — most by independent declarations converging on the same mint, the rest +purely through inheritance from the OFL family. + +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 profile file. Salting is also used +deliberately: a *salt split* keeps two presets of one product on distinct ids where a single +id would be AMS-ambiguous on the same printer — the "selectable alongside" situation from the +table above, resolved without inventing a second family name. The tooling recognizes salt +iterations of a triple as conformant and preserves such splits across re-mints. + +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 snapshot +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. +``` + +The default run is idempotent and never rewrites a valid existing id; it edits profile files +byte-preservingly (indentation, BOM, and line endings intact) and re-parses them to fail +loudly. `--mint "filament_vendor/filament_type/family_name"` prints the id a **new** mint of +that triple would get, without touching anything — note that for a triple whose id already +exists it prints the next *free* salt iteration, not the live id (asking for +`Polymaker/PLA/PolyLite PLA` today prints the salt-1 id, because `OF5CgdDq` is taken). + +Maintenance modes (`--remint` is also the step for identity fixes — see the FAQ; the rest are +normally only used by id migrations): + +- `--remint VENDOR` re-derives a vendor's declared ids from their triples. A declaration + already equal to a salt iteration of its own triple is conformant and left alone, so + deliberate salt splits survive; convergence onto an id another bundle already uses for the + *same* triple is legal by design — that is the point. +- `--drop-redundant-ids VENDOR` deletes declarations that merely re-declare an inherited + OrcaFilamentLibrary id. +- `--add-hint "OLD=NEW"` records a succession hint for an id a foreign catalog owns + (`GF*` only — see the ledger section). +- `--retire "OLD=NEW"` records succession for a shipped id that vanished while another + declarer kept it alive — lineage the automatic claim vote (see the succession-ledger + section) can no longer see. +- `--forget-never-shipped FILE` (with `--update-snapshot`) — given a JSON list of ids that + never shipped in any release, drops them from the lineage entirely (no retirement entry) + and splices succession chains that pointed through them. +- `--profiles DIR` points the tooling at a different profile tree (default + `resources/profiles`). + +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`; once the id is minted, the +snapshot checks likewise point at `--update-snapshot` and tell you to commit the resulting +diff. + +## Reserved namespaces — never mint or hand-write into + +An **island** is a frozen id namespace exempt from the mint rule because an external catalog +or device contract owns it. + +| Space | Status | Rule | +| --- | --- | --- | +| `GF*` | Bambu AMS/RFID catalog — the one remaining *island* | BBL vendor only; a claim by anyone else is refused unless the snapshot sanctions that exact claim (via `--allow-shared-catalog` — see the CI section) | +| `QD_*` | Qidi device protocol — *dissolved island* | declarable by **nobody**, Qidi included; every shipped `QD_*` id is retired in the ledger with a live successor | +| `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | +| every already-shipped id | frozen in the snapshot (grandfathered) | frozen as-is; new claims need maintainer sign-off | +| every retired id | `resources/profiles/retired_filament_ids.json` | never used again, for anything | + +The two device namespaces, in detail: + +- **BBL (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, so BBL + declarations are frozen as-is and never re-minted. BBL also carries several dozen + grandfathered legacy codes that are neither `GF*` nor `OF*` (the `BETA` family's `B*` ids, + plus `Generic SBS`'s legacy `BFLSBS99`) — frozen the same way, via the snapshot. +- **Qidi (`QD_*`) — dissolved.** `QD_*` is a device-*protocol* namespace, not a preset id + space: the Qidi box path composes `QD___` ids at runtime (slot + vendor and type indices reported by the device, the series digit inferred client-side + from the printer model/name), and the Qidi agent translates a composed id through the + succession ledger to the family's minted id. Qidi presets themselves carry ordinary minted + `OF*` ids (generics share the OFL ids), and all 204 `QD_*` ids that ever shipped sit in + the ledger as retired entries with live successors — which is also what makes CI refuse + any future `QD_*` occurrence permanently. The alternative — treating per-series protocol ids + as preset ids — would put one product under five ids (`QIDI PLA Rapido` would be `QD_0_1_1` + through `QD_4_1_1`), exactly the fragmentation the mint rule removes. + +## The succession ledger + +`resources/profiles/retired_filament_ids.json` ships with the app and has two maps: + +- **`retired`** — ids Orca owned and withdrew. Each maps to + `{"claims": [...], "successor": }`; successor chains are followed to the live end. + When `--update-snapshot` retires a vanished id, it picks the successor by an automatic + *claim vote*: every old claim whose family still exists votes for that family's current id, + most votes wins. Alongside the deliberate re-mints, this map carries the whole pre-rule + legacy — old ad-hoc vendor codes, Creality's and Snapmaker's numeric ids, and the 204 + `QD_*` protocol ids. +- **`hints`** — the same forwarding for ids Orca *cannot* retire because a foreign island owns + them and may legitimately keep shipping them. That means `GF*` only: e.g. + `GFL99 → OFDSrzZ8` forwards Bambu's Generic PLA catalog id to the OFL generic family on + installs where no live preset carries `GFL99`. + +The client consults the ledger **only on resolution miss** — AMS tray sync and the sync-AMS +dialog's filament listing, the sidebar AMS dropdown, tray-id type lookup, calibration +history, the global filament-id preset lookup, and the Qidi box path. A live preset always +wins first, so BBL installs resolve `GF*` natively and behavior is unchanged wherever the +raw id still exists. This on-miss rule is what makes +identity-driven re-mints (structure rule 5) safe: the old id keeps resolving to the family's +current preset instead of degrading to a `Generic ` fallback. The file is append-only in +its keys — entries are never removed and a retired id never returns — and maintained +exclusively by `--update-snapshot` / `--add-hint` / `--retire` (`--forget-never-shipped`, an +`--update-snapshot` mode, may rewrite an existing entry's successor when splicing chains). + +## How CI enforces this + +Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via +`scripts/orca_extra_profile_check.py`. 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). Besides the live `ids` and `triples` +maps, the snapshot carries grandfather lists (`instantiated_with_id`, `id_overrides`, +`alias_exceptions`, `triple_exceptions`) that freeze pre-existing structure debt while the +checks ratchet all new profiles to the clean rules. + +The checks, in brief: + +- **Format** — every id is either in the snapshot, `OF` + 6 base62 chars, or BBL's. +- **Snapshot equality** — tree claims == snapshot claims **and** tree triples == snapshot + triples, both directions: any `filament_vendor`/`filament_type`/family-name change surfaces + as a snapshot diff. +- **Mint conformance** — a non-grandfathered `OF*` id must equal the mint (or a low salt + iteration) of its declarer's product triple; the error prints the expected id to paste into + the family root. +- **Retired reuse** — any tree id present in the `retired` map of + `resources/profiles/retired_filament_ids.json` is an error, with no grandfathering (keys in + the same file's `hints` map may legitimately stay live — BBL still ships them). Ids that + fully vanish from the tree are appended to the `retired` map by `--update-snapshot`; ids + are only ever added there, never removed or reused. +- **Alias hygiene** — a vendor preset riding an OFL family id must keep the library preset's + base name (a rename re-exposes the library preset, since alias shadowing is name-based), + a non-empty `compatible_printers` (an empty one shadows nothing), and no own id key + (structure rule 4). +- **Triple integrity** — every declarer outside the BBL island must resolve a non-empty + `filament_vendor` and `filament_type` (generics use `"Generic"`), and all declarers of one + family within a bundle must agree on the triple. +- **Succession integrity** — retired successor chains terminate at a live id (or null) with + no cycles; `hints` keys stay in the island namespace (`GF*`), are never also retired, and + their chains end at a live tree id. +- **Reserved namespaces** — `GF*` outside BBL, `P<7-hex>` or `"null"` anywhere, unless that + exact claim is grandfathered in the snapshot; `QD_*` anywhere, with no exception (all are + retired). +- **Structure** — no `filament_id` key on newly instantiated presets; no new + declared-vs-inherited id drift; every instantiated system filament must resolve an + effective id through its `inherits` chain (recall: 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 via a *declared* id is caught by the mint-conformance +check; sharing through inheritance carries no declaration to check and surfaces only as a new +claim in the snapshot diff — which is exactly why that diff is the gate. + +Complementing the Python checks, CI also runs the C++ profile validator with `-f` +(`check_filament_subtypes`): it loads the bundle exactly as the app does and flags any printer +for which two or more compatible filament presets share one `filament_id` — the runtime-shaped +ambiguity check behind structure rule 3. + +## 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 fix a family's `filament_vendor` or `filament_type`.** Fix the config, run + `--remint ` then `--update-snapshot`: the id re-derives from the corrected identity + and the old id lands in the succession ledger pointing at the new one. Commit the profile, + snapshot, and ledger diffs together. +- **I need to rename a family.** Renames need one extra step, because the succession vote + follows family names (`renamed_from` gates preset-name compatibility but is not read by the + id tooling): rename the presets (adding `renamed_from`), run `--update-snapshot` once to + sanction the renamed claims on the old id, then `--remint `, then `--update-snapshot` + again — the old id now lands in the ledger pointing at the new one. Re-minting first would + retire the old id *heirless* (successor `null`), which cannot be repaired afterwards. +- **Can I reuse a `QD_*` id for a Qidi profile?** No — nobody can. The namespace is a + dissolved island: the device still composes those ids at runtime, and the succession ledger + translates them to the families' minted ids. Author Qidi filaments like any other vendor's. +- **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/filament_id_plan.html b/filament_id_plan.html deleted file mode 100644 index 08f4a06b74..0000000000 --- a/filament_id_plan.html +++ /dev/null @@ -1,1029 +0,0 @@ - - - - - -filament_id — design & migration plan · OrcaSlicer - - - - - - -
- - -
-
DESIGN REVIEW resources/profiles · filament_id
-

One id, one material — on every printer, exactly once.

-

A filament_id names a material family: one commercial product line, shared by all of its - per-printer variants. Devices match spools by filament_id + printer compatibility. - That only works if, for any one printer, at most one compatible preset carries a given id. Bambu keeps this - invariant; the other 64 vendor bundles broke it 1,256 times.

- -
- id anatomy — Bambu's grammar - - - - GF - A - 00 - - - - - - - - - - - - prefix — Bambu's namespace - frozen: AMS RFID tags carry these bytes - family letter — A: Bambu PLA - B ABS/ASA · C PC · G PETG · L generic/3rd-party PLA - N PA · P PP/PE · S support · T PET/PPS · U TPU - tier number - 00–49 branded · 50–59 fiber-filled - 60–70 partners · 95–99 generic, desc. - - - - shared by every variant: - - - Bambu PLA Basic @BBL X1C - - Bambu PLA Basic @BBL P1P - - Bambu PLA Basic @BBL X1C 0.2 nozzle - - - -
- -
-
1,256
printer-level ambiguity errors (validator -f, tree-wide)
-
356
logical collision groups after de-duplication
-
30 / 65
vendor bundles affected / total
-
0
violations in BBL — cleaned in PR #14459, CI-gated
-
-

Every number in this document is reproducible: an independent loader-faithful audit re-derives the - validator's output exactly (1256 = 1256), and every code claim carries a file:line reference.

-
- - -
-
§0 overview
-

The plan in one screen

-

Two deliverables: a generation rule so ids can never become ambiguous again (goal 1), and a - migration that fixes the 356 existing collisions without breaking users (goal 2).

- -
- the whole plan - - - - - - - - - TODAY - 7+ ad-hoc id schemes - 356 collision groups - zero written rules - CI covers BBL only - - - RULE + TOOLING §3 §6 - deterministic OF* mint - id lives on @base only - CI ratchets + snapshot - no profile changes yet - - - MIGRATION §5 - fresh ids only, ever - OFL first, then per vendor - names never change - one reviewable PR each - - - DONE - invariant holds - tree-wide, - by construction - - - - - - - BBL profiles are never touched · Qidi QD_* device ids are never touched · no preset is renamed or deleted - -
- -
- Why migration is safe — verified in code: user presets re-derive filament_id from their parent on - every load Preset.cpp:1658-1682; 3mf projects resolve presets by name + config, not id - Preset.cpp:2490-2576; Klipper, Creality and Snapmaker derive tray ids at runtime from the - installed bundle. Fresh, never-reused ids on non-BBL system presets break nothing. -
-
- - -
-
§1 how matching works
-

Every ecosystem funnels through this one id

-

Not just Bambu. Five device ecosystems put a filament_id into the same pipeline; the slicer then - picks the single preset that matches the id and is compatible with the active printer.

- -
- runtime — device → preset - - - - - - - - - - BBL AMS - from device RFID — frozen - - Qidi box - QD_<series>_<v>_<t> — frozen - - Creality CFS - scored at runtime — safe - - Klipper AFC/HH - by filament type — safe - - Snapmaker - color/type match — safe - - - - - - - - - - - - tray_info_idx (MQTT / agent) - - filament_ams_list["filament_id"] - - find_if( f.is_compatible && base(f)==f && f.filament_id == id ) - - - - - - - - Plater.cpp:3440 - PresetBundle.cpp:3132/3233 - - - → the ONE matching preset - two matches? find_if silently returns whichever sorts first — no log, no warning; the AMS edit dialog even hides the second preset - -
- -

The invariant, drawn

-
- per printer × per id -
-
-

✓ Correct — Bambu PLA Basic, id GFA00

- - - - - -
printer presetcompatible presets with GFA00
X1C…@BBL X1C 1
X1C 0.2 nozzle…@BBL X1C 0.2 nozzle 1
P1P…@BBL P1P 1
-

Variants share the id; their compatible_printers are disjoint. Each printer sees the id exactly once.

-
-
-

✗ Broken — Qidi, id GFB99 (real case)

- - - -
printer presetcompatible presets with GFB99
X-Max 3 0.4 nozzleBambu ABS · HATCHBOX ABS · Overture ABS · PolyLite ABS · QIDI ABS Rapido · QIDI ABS-GF · QIDI ASA · ASA-Aero · PC-ABS-FR · Generic ABS … 16
-

Sixteen different materials answer to one id on one printer. A spool tagged “generic ABS” matches - whichever preset sorts first — and GFB99 was stamped into 317 Qidi files.

-
-
-
- -

Two consumers you can't see from the profiles

-

Most matching is printer-scoped, but several code paths match globally, by id alone — tray display name, - temperature_vitrification warnings, calibration history, and the multi-nozzle grouping key - FilamentGroup.cpp:513. So two different materials must never share an id even across - vendors: the first preset in the whole installed collection supplies the name, type and temperature data.

-
Two identity systems. The library (OFL) hides its global presets per printer by - alias (name before  @) — Preset.cpp:3684 — while devices match by - filament_id. When a vendor tunes Generic PLA but renames it - Flashforge PLA Basic, the alias no longer matches, shadowing fails, and both presets are - visible with the same id. The rule in §3 aligns the two systems: one family = one alias = one id.
-
- - -
-
§2 the landscape today
-

Seven schemes, zero rules, one epidemic

-

The only guidance that ever existed was “≤ 8 characters”, checked for BBL only. Every other - convention was one contributor's invention, merged without comment, then imitated.

- -
- who uses which id shape — 5,866 instantiated presets - - - GF<letter><NN> (Bambu classic, mass-copied) - 2,921 - free-form ("GFPLA Silk", "LHF_pla", 36-char names…) - 2,241 - GF<BRAND><NNN> (Bambu partner ids) - 395 - O-prefixed (OGF* — OrcaFilamentLibrary mirrors) - 211 - GF<x>##_## (Afinia/Tiertime suffix) + other GF-shaped - 43 + 55 - - -
- Bambu's space, used outside Bambu - invented, unowned - deliberate Orca convention -
-
- -

How it got here

-
- convention timeline - - - - - - - - - - 2025-01 - OrcaFilamentLibrary - created - - 2025-03 - OGF* prefix born - direct commit, no rationale - - 2025-05 - “≤ 8 chars” check - BBL-only · PR #9574 - - 2025-06 - _## suffix invented - PR #9739, imitated since - - 2025-11 - profile wiki removed - its example taught copy-paste - - 2026-06 - validator -f · BBL → 0 - PR #14459 - - now - this plan - - -
- -

Beyond the validator's reach

-

The -f check compares a printer only against its own vendor's filaments. Three further ledgers exist:

-
-
16
OFL-internal ids covering several materials — visible on every printer (e.g. OEPLAB00 = 14 Elegoo PLA products)
-
42
OFL×vendor same-id pairs — 32 already neutralized by alias shadowing, 10 live
-
67
ids meaning different materials in different vendors (GFU99 also covers a PEBA; Anycubic's GFL95 “Matte” ≠ Bambu's GFL95 “High Speed”)
-
-
- - -
-
§3 the rule
-

Nobody invents ids. Structure carries the rest.

-

Chosen by a 3-design → 2-judge → 3-attacker adversarial process. Deterministic minting won on - ambiguity-prevention, contributor simplicity and enforceability; every “breaks” finding from the attack pass is - folded in below.

- -

The one-question test

-
- decision — same id or new id? - - - - - - - - Would a user call this a different spool product - than anything already in the tree? - - - - - - - YES — polymer, sub-brand, - fiber-filled, 2nd diameter - NO — same spool, tuned for - another printer / nozzle - it's a GENERIC - material - - - NEW FAMILY - create «Family @base», not instantiated - write NO filament_id anywhere - run the mint script — or paste the id - that CI prints for you - - JOIN THE FAMILY - inherit the existing @base - never write the filament_id key - keep compatible_printers disjoint - from the other variants - - JOIN THE OFL FAMILY - inherit «Generic X @System» - KEEP the «Generic X» name/alias - (alias shadowing then hides the OFL - preset on your printers) · no id key - color → never a new id · “high-speed” for a different printer → same family - “high-speed” selectable alongside the normal preset on one printer → new family - second selectable diameter on the same printer → sibling family with its own id - -
- -

Minted ids — the setting_id precedent, applied to families

-
- id anatomy — the new namespace - - - OF - q3xT9k - - - - - - - - - OF — Orca Family namespace - disjoint from GF · QD_ · P· at two chars - base62_6( uuid5( NS, "filament_family/<Vendor>/<Family>" ) ) - e.g. filament_family/Elegoo/Elegoo PLA Matte → OFq3xT9k - same derivation as setting_id · 8 chars total (AMS limit) - - - same input → same id: - no “next number” races · a fork mints the id upstream expects · CI recomputes and verifies - renamed family? - the id does not change — immutable once shipped; renamed_from covers the name - - -
-

Author workflow is two lines: commit the family with no id anywhere; run - python scripts/assign_filament_ids.py (or read the id CI prints in its failure message and paste it). - A --mint "<Vendor>/<Family>" one-shot prints an id without touching the tree.

- -

Structure: the id lives in exactly one place

-
- family shape - - - Elegoo PLA Matte @base - instantiation:false · filament_id: "OFq3xT9k" ← only here - - - - - - …@Centauri Carbon - inherits @base · no id key - compat: {CC 0.4} - - …@CC 0.2 nozzle - inherits @base · no id key - compat: {CC 0.2} - - …@Neptune 4 - inherits @base · no id key - compat: {N4, N4 Pro} - - disjoint compatible_printers = the PR #14459 invariant, by construction - family identity is DECLARED — an optional "filament_family" key on the root overrides name derivation - multi-root families are legal (Qidi's per-series bases) — every root must declare the identical id - -
- -

Reserved namespaces — never mint or hand-write into

-
- the id space, partitioned - - - - - - - - - GF* - Bambu AMS / RFID — frozen - - QD_* - Qidi device — frozen - - P[0-9A-Fa-f]{7} · "null" - user-custom presets - - OGF* + legacy shapes - grandfathered, closed - - OF[0-9A-Za-z]{6} - open — minted only - - Byte-copies of authentic Bambu ids stay legal where the checked-in shared_catalog sanctions the family (BBL, OFL, Fiberon). - Everything already shipped and unambiguous is snapshot-frozen exactly as-is — the migration touches only colliding families. - -
-
Accepted trade-off: minted ids are opaque — OFq3xT9k doesn't say “PLA”. - The family name sits in the same file; in exchange there is no registry, no “next free number” ceremony, no PR races, - and forks mint the same id upstream expects. The mnemonic registry-grammar runner-up is preserved in §8 if you prefer it — - everything else in this plan works under either format.
-
- - -
-
§4 error taxonomy — goal 2
-

Eleven patterns explain all 356 groups

-

Classified group-by-group against the actual profile files, then independently spot-checked - (1 substantive disagreement in 14 samples, corrected). The task's two known patterns cover about half; the rest - are new findings.

- -
- what's actually wrong — classified groups - - - P1 copy_paste_id — different materials share an id verbatim - 167 - P2 wrong_inherits / id-less product line - ~87 - P3 generic_family_overlap — branded preset rides a generic id - 68 - P4 overclaim_compat — broader variant claims a dedicated printer - 24 - other — deliberate coexistence, hygiene, one true duplicate - 21 - - -

Fixes across all groups: 319 × mint a fresh id · 21 × trim compatible_printers · - 21 × split compat-or-id · 5 × re-point inherits · 1 × merge. Which preset keeps a contested id follows a - mechanical precedence: Bambu-catalog material → OFL generic family → historical first owner.

-
- -
-
P1copy_paste_id~167
-

The id came along when a profile was copied. Qidi stamped GFB99 into 317 files; - Peopoly put PLA-Silk's id on ABS.

-
fix — impostor families get minted ids on their roots; the owner keeps the id.
-
P2wrong_inherits / no root~87
-

A product line never got its own @base — every variant inherits another family's id. - Flashforge's umbrella collapses ~140 presets into one id.

-
fix — create per-family roots with minted ids; re-point inherits. Never delete the old - shadow files — convert them (they carry real config).
-
P3generic_family_overlap~68
-

A vendor-branded filament rides a generic family id via inheritance, colliding with the true generic - on the same printer.

-
fix — branded → minted id. True generic tunings instead join the OFL family with matching alias. - Sovol is the elegant case: just delete its wrong id lines and inherit OFL's.
-
P4overclaim_compat~24
-

Same material; the broad variant claims a printer that a dedicated variant covers — the BBL H2DP pattern - from PR #14459.

-
fix — trim the broader preset's compatible_printers. Ids untouched.
-
P5template-carried idin P1/P2
-

The id sits on a shared settings template (fdm_filament_*), so every family that inherits - the template collapses onto it (Prusa, Ginger Additive).

-
fix — move ids off templates onto family roots.
-
P6OFL-internal collision16 ids
-

One OFL id spans several materials — and OFL presets are visible on every printer. - OGFL06 = eSUN PLA-Marble and Fiberon PETG-ESD.

-
fix — fix OFL first: it's the base bundle every vendor resolves against.
-
P7alias-mismatch re-exposure10 live
-

A vendor tunes a generic but renames it; alias shadowing fails and the OFL preset resurfaces beside it - (Snapmaker PolyTerra J1 PLA).

-
fix — rename-to-alias where it's genuinely the same family, else mint.
-
P8per-variant ids~210 presets
-

The opposite failure: every nozzle variant has its own id (Prusa, SeeMeCNC, Afinia _##). - No ambiguity — but devices can't recognize the material across nozzles.

-
fix — grandfather (they're unambiguous); converge opportunistically; document as anti-pattern.
-
P9format violationshygiene
-

Ids with spaces ("GFPLA Silk"), 11-char ids, invented GF-shaped ids colliding with - Bambu's real allocations.

-
fix — disappears as a byproduct of re-minting; the unambiguous rest is snapshot-frozen.
-
P10cross-vendor semantic67 ids
-

Same id, different material, different vendors — feeds wrong name/type/temperature data to the globally-matching - consumers (§1).

-
fix — mostly eliminated by P1–P3 re-minting; benign same-material generic sharing is legalized - by the snapshot.
-
P11deliberate coexistence4
-

Snapmaker “Benchy” demo presets coexist on purpose (gated by compatible_prints, which the id check - can't see); one preset lists the same printer three times.

-
fix — mint ids for demo presets; de-duplicate list entries; add a lint.
-
-
- - -
-
§5 migration plan
-

Fresh ids only, family-atomic, names never change

-

The persistence analysis makes one strategy provably safe — and everything else forbidden.

- -

What survives an id change

- - - - - - - - - - -
surfacebehavior across releasesverdict
User presets that inherit a system presetfilament_id re-derived from the parent on every load Preset.cpp:1658-1682safe
Saved 3mf projectspresets resolve by name + config equality, never by id Preset.cpp:2490-2576safe
Klipper / Creality / Snapmaker synctray ids derived at runtime from the installed bundlesafe
User root custom presetscopied a system id at creation and persist it forever — AMS auto-match falls back to generic-by-typelow residue
Qidi QD_* idsencode the device protocol QidiPrinterAgent.cpp:146 — an exact-match contractfrozen
BBL GF* idslive on RFID tags and printer-side records; hardcoded k-values in C++frozen
Recycling an old id for a different materialstale ids in user roots / old 3mfs would silently match the wrong materialforbidden, forever
Renaming / deleting preset namesuser presets whose inherits no longer resolves are dropped at load Preset.cpp:1687-1691forbidden (use renamed_from if unavoidable)
- -

Phases

-
-
0
-

Tooling + snapshot — no profile changes

-

Land scripts/assign_filament_ids.py, the extended CI checks in ratchet mode, the validator OFL - cross-check and the runtime warning. Generate filament_id_snapshot.json (id→families multimap over main) - and an empty retired_ids.json; both are checked in and append-only.

-
-
1
-

OrcaFilamentLibrary first

-

OFL is the base bundle every vendor resolves against. Fix its 16 internal collisions and give - Generic PETG HF/PETG-CF/PP-CF/… @System their own family roots instead of collapsing into their - parent generic. Unambiguous ids stay byte-identical.

-
-
2
-

Per-vendor PRs, worst first — each widens the CI ratchet

-

Qidi → Flashforge → Elegoo → Prusa → Cubicon → Anycubic → InfiMech → Snapmaker → long tail (22 vendors, - mostly 1–8 one-line fixes). Each merged PR appends its vendor to the workflow's -f -v scope - (today: -v BBL -f); when all are in, drop -v and run tree-wide.

-
-
3
-

Delete the allowlists

-

Once tree-wide zero holds, the ratchet allowlists disappear and every check becomes a hard rule for anything - born after the snapshot.

-
-
- -
- where the work is — collision groups per vendor - - - Qidi97 - Flashforge69 - Elegoo37 - Prusa31 - Cubicon17 - Anycubic14 - InfiMech14 - Snapmaker11 - Artillery8 - Creality8 - FlyingBear8 - Sovol6 - 18 more40 total (Volumic 6 · Ratrig 5 · Chuanying 4 · Dremel 3 · 4×2 · 10×1) - - -

Vendor observations show these are systematic mistakes, not hundreds of independent bugs: Qidi is one - blanket-stamp in three profile generations; Elegoo is a single inherit-the-class-base habit; Sovol is fixed by deleting - six wrong lines.

-
- -

The migration script's contract (hardened by the adversarial pass)

- - - - - - - -
rulewhy
Re-mint everything — id literals in analysis notes are ignored; only group membership, fix category and keep-id precedence are consumed. Assert no emitted id matches ^(GF|QD_|P[0-9A-Fa-f]{7}$).~40% of classification notes suggested ids in the old invented-GF culture; CI would reject them.
Family-atomic — re-idding any preset re-ids every same-family sibling in the same commit, even outside the collision group.Otherwise a family splits across two ids (FlyingBear GFB99 @S1 vs @Ghost7) — worse than the bug being fixed.
Bounded diff — a vendor PR may only touch collision-group files + same-family siblings; every id that is unambiguous today stays byte-identical.Makes each PR mechanically auditable.
Config-equivalence gate — flattened effective config of every preset must be identical before/after, except the prescribed id/inherits/compat edits.Makes structural conversions provably behavior-neutral (Flashforge's id-less shadow files become named family roots carrying their config byte-for-byte).
No deletions, no renames — redundant twins are re-minted, not dropped; consolidation via renamed_from is a separate human-reviewed cleanup.Deleting a name silently drops users' derived presets at load.
-
- - -
-
§6 enforcement
-

Ratchets, not absolutes

-

The grandfathered landscape keeps today's benign sharing legal; the checks forbid anything new. - All checks import the same mint function — the setting_id precedent.

- - - - - - - - - - - -
#checkwhere
1Format — valid iff OF[0-9A-Za-z]{6} or in the snapshot or vendor==BBL or QD_* in Qidi. The legacy set is closed.orca_extra_profile_check.py
drop BBL-only gate :292, OFL skip :601
2Uniqueness ratchet — tree-wide id→families multimap; no id may gain a family claim not recorded in the snapshot (shared_catalog is the sanctioned exception).
3Structure ratchet — id key only on roots; every instantiated preset resolves an effective id (simulated loader walk); all family members resolve identically; no preset may override its inherited id (the Generic SBS drift class).
4Mint conformance — a new id must equal the mint (or a salt iteration); the failure message prints the expected value so hand-editors can paste it.
5Stability — an (id, family) pair on main may not change or vanish, following renamed_from chains, unless listed in a maintainer-gated migrations file. Retired ids go to an append-only ledger and are never redefined.
6Alias hygiene — a preset inheriting an OFL Generic * @System (no own id in its chain) must keep the OFL base name and non-empty compatible_printers; the error names the rename as the cause.
7OFL cross-check — extend check_duplicate_filament_subtypes to include OFL presets in every vendor's per-printer check, minus alias-excluded ones. m_excluded_from is already populated in validator context, so the 32 shadowed pairs won't false-positive and the 10 live ones are caught. Widen CI's -f per vendor.C++ validator
PresetBundle.cpp:5654 · :2302
8Runtime backstop — log a warning when the AMS-sync find_if sees 2+ compatible presets for one id. The only layer that can see side-loaded and forked bundles. One line.runtime
PresetBundle.cpp:3132/3233
- -

Plus: the rule document ships in-repo (doc/developer-reference/filament_id.md) so CI messages - have a stable link, and the profile-PR template gets one checkbox: “new materials: no filament_id key anywhere — - CI prints the minted id.”

-
- - -
-
§7 evidence
-

How this was verified

-

The analysis was run as a 52-agent pipeline over the real tree and real git history, with an - adversarial design phase — findings were attacked before being adopted.

- -
- methodology - - - - - - - - - 5 code analysts - runtime · persistence · loader - Bambu grammar · git history - - 38 classifiers - every collision group, read - from the actual profile files - - ground truth - audit script = validator - 1256 = 1256 · exact - - - 3 designs - deterministic mint - registry grammar - structure-only - - - 2 judges - both chose the mint - 58 / 50 / 56 - 60 / 54 / 56 - - - 3 attackers - 35 scenarios - authors · runtime · - migration mechanics - every “breaks” → - an amendment §3–§5 - spot-check: 1/14 - - - - - - - - - -

Amendments that came out of the attack pass: family identity declared on roots (not name-derived — - Afinia PLA@HS has no space before @); multi-root families legalized; checks 2–3 as - ratchets, not absolutes; the no-deletion rule; shadow-file conversion instead of deletion; classification id - literals quarantined; diameter siblings; case-insensitive reservation of the user id space.

-
- -
- Key discoveries that reshaped the design (with sources) -
-

· The “26 Flashforge presets with no id” were a false alarm — the loader resolves them through the OFL base-bundle - fallback to OGFL99/OGFG99 PresetBundle.cpp:4904-4909. The real bug is - ~10 different Flashforge PLA products sharing one id.

-

· A missing id can never ship: it's a hard load error that discards the whole vendor bundle - PresetBundle.cpp:5072, :5141.

-

· Qidi's QD_* ids are a device-protocol contract, discovered in - QidiPrinterAgent.cpp:146-152 — a second frozen namespace nobody had documented.

-

· User-custom ids occupy P + 7 hex CreatePresetsDialog.cpp:533, and - "null" is a sentinel — both reserved.

-

· OFL shadowing is keyed by alias, not id Preset.cpp:3684-3714, and is already active in - validator context PresetBundle.cpp:2302 — which is what makes check #7 precise.

-
-
-
- - -
-
§8 open decisions
-

Five calls that are yours to make

-

Everything else in the plan holds under any of these answers. marks the recommendation.

- -
-
D1id format
-
Opaque deterministic mint OFq3xT9k — no registry, no races, fork-friendly; judges 2/2.
-
Mnemonic registry grammar <NS><FAM><SEQ> — readable ids, but someone allocates numbers forever.
-
D2multi-vendor brands
-
shared_catalog list — sanction authentic Bambu ids for byte-matching families (Snapmaker's Fiberon), low churn.
-
Hoist those families into OFL — cleaner long-term, more restructuring now.
-
D3demo presets
-
Mint ids for Benchy-style presets — simple, keeps the validator strict.
-
Teach the validator compatible_prints gating — more machinery for 3 presets.
-
D4the 10 live OFL duplicates
-
Rename-to-alias where it's truly the same family (with renamed_from) — restores shadowing.
-
Mint vendor ids everywhere — safer mechanically, more ids in the world.
-
D5where the rule doc lives
-
In-repo doc/developer-reference/filament_id.md — CI messages need a stable link.
-
Wiki-only — discoverable, but drifts from the checks that enforce it.
-
- -
- Suggested first step: land phase 0 (tooling + snapshot, zero profile changes). It is entirely additive, - makes every later PR mechanically checkable, and turns the 356-group backlog into a shrinking allowlist that CI - reports on every profile PR. -
-
- -
- - - - diff --git a/filament_id_plan.md b/filament_id_plan.md deleted file mode 100644 index 7dc4b43d04..0000000000 --- a/filament_id_plan.md +++ /dev/null @@ -1,397 +0,0 @@ -# filament_id: generation rule + system-profile fix plan - -Follow-up to PR #14459 (commit `c2e91cb8`, validator `-f` / `check_duplicate_filament_subtypes`). -Goal 1: a filament_id generation rule for all vendors. Goal 2: an error-pattern taxonomy and a -migration plan that removes every ambiguous filament_id, without touching Bambu (BBL) profiles. - -All numbers below are reproducible: a loader-faithful audit script re-derives the validator's -output **exactly** (1256/1256 printer-level errors, 356 logical collision groups, 30 vendors). -Every code claim was verified against source with `file:line` references. - ---- - -## 0. Executive summary - -- `filament_id` is a **material-family id**: one id per commercial product line, shared by all - of that material's per-printer/per-nozzle variants. Matching is always `(filament_id + - printer compatibility)`; the invariant from PR #14459 is *per printer preset, at most one - compatible instantiated filament preset per id*. -- Every modern device ecosystem funnels through this id — not just Bambu AMS: Qidi box, - Creality CFS, Klipper AFC/Happy Hare, Snapmaker all emit/consume `tray_info_idx` - (see §1). Several consumers match **globally, without printer scoping**, so two *different - materials* sharing one id is unsafe even across vendors. -- **Proposed rule (§3):** deterministic, script-minted ids — `OF` + 6 base62 chars from - `uuid5(vendor + family)`, declared **only on family-root (`@base`) presets**; variants inherit. - Nobody ever invents an id by hand; CI prints the expected id when one is missing. Existing - unambiguous ids are grandfathered and frozen; `GF*` (Bambu), `QD_*` (Qidi device protocol), - and `P<7-hex>` (user custom presets) are reserved namespaces that must never be minted into. - This was selected by an adversarial design/judge process over a registry-grammar alternative - and a structure-only alternative, then stress-tested; amendments from that stress test are - folded in below. -- **Migration (§5):** fresh-never-reused ids only, family-atomic, names never changed. This is - provably safe: user presets re-derive `filament_id` from their parent on every load - (`Preset.cpp:1658-1682`), 3mf resolves presets by name+config (`Preset.cpp:2490-2576`), and - Klipper/Creality/Snapmaker derive tray ids at runtime. One PR per vendor; CI's `-f` scope - ratchets per vendor until tree-wide. - ---- - -## 1. How filament_id actually works (verified) - -### Consumers and scoping - -All device integrations converge on one pipeline: device/agent sets `tray_info_idx` → -`DevAmsTray.setting_id` → `Sidebar::build_filament_ams_list` (`Plater.cpp:3423-3493`) → -`PresetBundle::sync_ams_list` / `get_ams_cobox_infos` (`PresetBundle.cpp:3112-3308`) match it -against filament presets. - -| Ecosystem | Where the id comes from | Effect of changing a system id | -|---|---|---| -| BBL AMS | device-side (RFID / user tray setting), `DeviceManager.cpp:3823+` | breaks matching — **frozen by mandate** | -| Qidi box | built from device enums: `"QD_" + series + "_" + vendor + "_" + type_idx`, `QidiPrinterAgent.cpp:146-152`; needs an exactly-matching visible preset | breaks matching — **`QD_*` ids are a frozen device contract** | -| Creality CFS | runtime brand/type scoring returns current preset's id (`CrealityPrintAgent.cpp:46-118`) | invisible | -| Klipper (AFC / Happy Hare) | runtime `filament_id_by_type` (`MoonrakerPrinterAgent.cpp:808,936`) | invisible | -| Snapmaker | runtime color/vendor/type match (`SnapmakerPrinterAgent.cpp:22-64`) | invisible | - -Matching is printer-scoped (`is_compatible`) in the AMS sync paths and all printer agents — this -is what makes the per-printer invariant sufficient there. But several consumers match -**globally by id alone**, first match wins: - -- `get_filament_by_filament_id("")` — tray display name, `filament_is_support`, - `temperature_vitrification` warnings (`PresetBundle.cpp:690-733`; callers - `DevFilaBlackList.cpp:70`, `Plater.cpp:3453`, `SelectMachine.cpp:3560,4623`). The code - comment at `:695` states the assumption outright: an id maps to ONE material globally. -- `MachineObject::setting_id_to_type` (`DeviceManager.cpp:2538`), calibration-history name - lookup (`CaliHistoryDialog.cpp:62`), custom-filament cloud grouping (`Preset.cpp:2839`). -- The slicing pipeline itself: multi-nozzle filament grouping merges project filaments whose - `(filament_id, color)` match (`FilamentGroup.cpp:513-528` via `ToolOrdering.cpp:1164`). - -**Consequence:** within one printer, duplicate ids break AMS matching (silent first-wins, -`find_if` at `PresetBundle.cpp:3132/3233`; the AMS tray-edit dialog even *hides* the second -preset, `AMSMaterialsSetting.cpp:894-897`). Across vendors, the same id on *different -materials* feeds wrong name/type/vitrification data to the global consumers and can merge -different materials into one nozzle group. Same id on the *same* material (e.g. `GFL99` = -Generic PLA in 29 vendors) is comparatively benign — those attributes agree. - -### Identity machinery - -- **Effective id resolution** (`PresetBundle.cpp:4842-5080`): own `filament_id` key → vendor - `filament_id_maps[inherits]` (file order in the vendor index is load-bearing) → - OrcaFilamentLibrary base-bundle map. An instantiated system filament that resolves *no* id is - a hard load error that discards the whole vendor bundle (`:5072`, throw at `:5141-5147`) — - so "missing id" cannot ship; what looked like 26 id-less Flashforge presets actually resolve - to OFL's `OGFL99`/`OGFG99` through the base-bundle fallback. -- **Two family-identity systems exist**: `filament_id` (device matching) and `alias` (name - before `" @"`). OFL shadowing is keyed on **alias**: `update_library_profile_excluded_from` - (`Preset.cpp:3684-3714`) hides an OFL preset (empty `compatible_printers` = compatible with - everything, `Preset.cpp:837`) on printers claimed by a same-alias vendor preset. There is - **no id-based shadowing**. A vendor preset that tunes an OFL generic but renames it - re-exposes the OFL preset and creates a live duplicate. The rule below aligns the two - systems: one family = one alias = one id. -- **User-custom id space**: user-created filaments get `"P" + md5(name)[0:7]` (8 chars, - `CreatePresetsDialog.cpp:533`), or *reuse a system id* when the base name matches an existing - preset (`:510-528`). `"null"` is used as a sentinel. Root user presets persist their id - forever; inheriting user presets re-derive it on every load. - -## 2. The id landscape today - -**Bambu's grammar** (derived from all 1970 BBL instantiated presets; BBL is internally clean — -181 id definitions, 0 duplicates): - -- Classic `GF`: letter = family (A Bambu-PLA, B ABS/ASA, C PC, G PETG/PCTG, - L third-party+generic PLA, N PA/PPA, P PP/PE, R misc, S support, T PET/PPS, U TPU). - Numbers: 00-49 branded ascending, 50-59 fiber-filled, 60-70 partner block, **95-99 generic - tier descending** (99 = the family's plain generic). -- Brand partners `GF`: GFPM Polymaker, GFOT Overture, GFSNL SUNLU, GFNMK - Numakers. One id per product line; never per color, never per printer/nozzle/diameter. -- Structural rule: the id lives on the material's `@base`; every variant inherits it. -- Hardcoded in C++: `GFS00/GFS01` support check (`DeviceManager.cpp:4739`), per-family PA - defaults `GFU01/03/04` (`CalibUtils.cpp:54-75`) — `GF*` is Bambu's space, byte-frozen. - -**Everything else is ad-hoc, invented by individual contributors and imitated** (full history -in §7): OFL's `O`-prefix mirrors (`OGFA00`; introduced 2025-03-31, commit `8c4a65e3e1`), -Tiertime/Afinia `GFx##_##` per-printer-line suffixes, SeeMeCNC per-nozzle ids, LH `LHF_pla`, -LONGER 11-char pseudo-GF ids, Anycubic ids **with spaces** (`"GFPLA Silk"`), Prusa ids that are -entire preset names (36 chars), and mass copy-paste of `GFL99/GFB99/GFG99` onto everything -(Qidi alone stamped `GFB99` into **317 files** across all materials). The only guidance that -ever existed was "≤ 8 chars" — enforced for BBL only (`orca_extra_profile_check.py:292,320`), -and the (now removed) profile wiki's own examples *taught* id copy-pasting. - -**The damage, quantified** (audit reproduces validator 1256/1256): - -| Ledger | Count | -|---|---| -| Within-vendor logical collision groups (validator `-f`) | **356** across 30 vendors (1256 printer-level errors) | -| OFL×vendor same-id groups (validator blind spot) | 42 — of which **10 are live** (alias mismatch defeats shadowing); 32 already neutralized by alias shadowing | -| OFL-internal: one id, several materials, visible on every printer | **16 ids** (e.g. `OEPLAB00` = 14 distinct Elegoo PLA products; `OGFL06` = eSUN PLA-Marble *and* Fiberon PETG-ESD) | -| Cross-vendor semantic collisions (same id, different materials) | **67 ids** (e.g. `GFU99` also covers a PEBA; Anycubic minted `GFL95` "Matte" ≠ Bambu `GFL95` "High Speed") | - -Worst vendors by groups: Qidi 97, Flashforge 69, Elegoo 37, Prusa 31, Cubicon 17, -Anycubic 14, InfiMech 14, Snapmaker 11, Artillery 8, Creality 8, FlyingBear 8. - ---- - -## 3. The rule (proposal) - -Selected by a 3-design / 2-judge adversarial process (deterministic-mint won over -registry-grammar and structure-only on ambiguity-prevention, contributor simplicity, and -enforceability), then hardened by three adversarial review passes. This section is written as -the future authoring doc. - -### 3.1 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`, no id key). Tuning a -> generic material → **join the OFL family** (inherit the `Generic X @System` preset, keep the -> `Generic X` base name, add no id). - -Same id / new id at a glance: - -| 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's a printer variant) | -| "High-speed" selectable *alongside* the normal preset on one printer | new id (it's a product line) | - -### 3.2 Structure - -1. **One family = one root.** Each material family has root preset(s) (`instantiation:false`, - typically ` @base`) and only roots carry the `filament_id` key. Instantiated - variants inherit a root and never write `filament_id`. (A family MAY have several roots — - e.g. Qidi's per-series bases — but they must all declare the *identical* id.) -2. **Family identity is declared, not name-derived.** Default: the family name is the - instantiated presets' base name (name with `/\s?@.*$/` stripped — note *optional* space, - because `Afinia PLA@HS`-style names exist). When vendor naming makes that ambiguous, the - root declares an explicit `"filament_family"` key that overrides derivation; tooling errors - loudly when a root's derived family differs from its children's. -3. **Within a family, variants' `compatible_printers` are pairwise disjoint** — that *is* the - PR #14459 invariant, enforced by the validator. -4. **Generics belong to OFL.** A vendor tuning `Generic PLA` inherits - `Generic PLA @System`, keeps the `Generic PLA` base name/alias (so alias shadowing excludes - the OFL preset on those printers, `Preset.cpp:3684`), sets non-empty `compatible_printers`, - and writes no id. 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`). No id is ever recycled for a different material — stale ids live on in - user root presets and old 3mfs, and a recycled id would silently match the wrong material. - -### 3.3 Minting — nobody invents ids - -New family ids are computed, exactly like the `setting_id` precedent -(`scripts/assign_vendor_setting_ids.py` / `Slic3r::generate_preset_setting_id`): - -``` -filament_id = "OF" + base62_6( uuid5( NAMESPACE, "filament_family//" ) ) -``` - -8 chars total (satisfies the AMS length limit), same base62 derivation and a dedicated -namespace constant. On the astronomically rare collision with an existing id, the minter salts -the input (`.../1`, `/2`, …) until free; the result is simply frozen in the file. - -- **Script path:** author commits the family with *no id anywhere*; - `python scripts/assign_filament_ids.py` inserts the minted id into the root(s). Idempotent; - never rewrites a valid existing id. A `--mint "/"` one-shot prints the id - without touching the tree. -- **No-script path:** CI fails with the exact line to paste: - `family "MyBrand PLA" (vendor X) needs filament_id "OFq3xT9k" in "MyBrand PLA @base.json"`. - -**Reserved namespaces — never mint or hand-write into:** - -| Space | Owner | Status | -|---|---|---| -| `GF*` | Bambu AMS/RFID catalog | byte-copies of authentic Bambu ids only, and only where a checked-in `shared_catalog` list sanctions the family (BBL bundle; OFL mirrors; byte-matching families in other vendors, e.g. Snapmaker's Fiberon) | -| `QD_*` | Qidi device protocol | frozen; Qidi-only; exempt from family-shape checks | -| `P[0-9A-Fa-f]{7}`, `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp:533`) | never emitted for system presets (reserve case-insensitively) | -| everything already shipped | grandfather snapshot | frozen as-is (§5) | - -Trade-off accepted: minted ids are opaque (`OFq3xT9k` carries no "PLA" mnemonic — the family -name in the same file provides that). The judges preferred this over a Bambu-style extended -grammar because it removes the "who allocates the next number" ceremony, cannot race between -concurrent PRs, and needs no registry maintenance. If mnemonic ids are strongly preferred, the -runner-up design (`` + registry file) is documented in the workflow -records; everything else in this plan is unchanged under either format. - -### 3.4 What CI enforces (all vendors, ratcheted) - -Extend `scripts/orca_extra_profile_check.py` (it imports the same mint function; setting_id -precedent) and the C++ validator: - -1. **Format**: an id is valid iff `OF[0-9A-Za-z]{6}` **or** in the grandfather snapshot **or** - vendor==BBL **or** `QD_*` in Qidi. No whitespace/ASCII/length checks needed outside the - grandfather set — new ids are minted, and the grandfather set is closed. -2. **Uniqueness ratchet**: id→families multimap computed tree-wide; no id may acquire a family - claim not recorded in the snapshot (snapshot legalizes today's benign `GFL99`-style sharing; - new multi-claims are errors; `shared_catalog` entries are the sanctioned exception). -3. **Structure ratchet**: `filament_id` key only on roots; every instantiated filament must - resolve an effective id via the simulated loader walk; all members of one family resolve the - same id; **a preset may not declare an id different from its inherited effective id** (the - `Generic SBS` drift bug class). Pre-existing violations are snapshot-frozen; new ones error. -4. **Mint conformance**: an id new relative to the snapshot must equal the mint (or a salt - iteration); the error message prints the expected value. -5. **Stability**: an `(id, family)` pair on main may not change or vanish, *following - `renamed_from` chains* (so an honest rename passes), unless listed in a maintainer-gated - migrations file. Retired ids go to an append-only `retired_ids` ledger; a retired id may - never be defined again for any family. -6. **Alias hygiene for tuned generics**: a preset inheriting an OFL `Generic * @System` (with - no own id anywhere in its vendor chain) must keep the OFL base name and have non-empty - `compatible_printers` — error message names the rename as the cause. -7. **C++ validator**: extend `check_duplicate_filament_subtypes` (`PresetBundle.cpp:5654`) to - include OFL presets in every vendor's per-printer check, *minus* alias-excluded ones — - `m_excluded_from` is already populated in the validator context (`update_system_maps` at - `PresetBundle.cpp:2302`), so the 32 shadowed pairs won't false-positive and the 10 live ones - will be caught. Run `-f` per vendor in CI, widening as vendors are cleaned (§5). -8. **Runtime backstop** (one-line change): log a warning when the AMS-sync `find_if` - (`PresetBundle.cpp:3132/3233`) finds 2+ compatible presets for one id — the only layer that - can see side-loaded/forked bundles. - ---- - -## 4. Error-pattern taxonomy (goal 2) — with counts and fixes - -356 groups were classified by 37 agents reading the actual profiles, spot-checked -independently (1 substantive disagreement in 14 samples). Counts below fold the spot-check -corrections in. **Fix rule for all patterns: replacement id values are always freshly minted -`OF*`; the "which preset keeps the id" decision uses the precedence _Bambu-catalog material > -OFL generic family > family that historically introduced the id_.** - -| # | Pattern | Groups | Fix | -|---|---|---|---| -| P1 | `copy_paste_id` — different materials share an id verbatim (task's error 1). Qidi's `GFB99`×317-files epidemic; Anycubic's three id "eras"; Peopoly `GFSL99` on ABS | ~167 | impostor families get minted ids on their roots; owner keeps the id | -| P2 | `wrong_inherits` / id-less product lines — a variant inherits another family's root (PR #14459's Panchroma case) or a product line never got its own root (Prusa HF; Flashforge's ~140-preset `FFG01` umbrella) | ~87 | create per-family roots with minted ids; re-point `inherits`; **never** delete the id-less shadow/base files — convert them (they carry real config: Flashforge `fdm_filament_pla` differs materially from OFL's) | -| P3 | `generic_family_overlap` — vendor-*branded* preset rides a generic family id via inheritance (task's error 2, generalized). Includes the 10 live OFL duplicates | ~68 | branded presets get minted family ids; true generic tunings instead adopt the OFL family *with matching alias* (rule 3.2.4); Sovol is the elegant case — just **delete** its wrong own-id lines and let OFL ids flow through inheritance | -| P4 | `overclaim_compat` — same material, broader variant claims a printer that a dedicated variant covers (the BBL H2DP pattern fixed in #14459) | ~24 | trim `compatible_printers` of the broader preset (Dremel, Cubicon `@base`s that are also instantiated, Wanhao France Bowden/Direct) | -| P5 | template-carried id — id declared on a shared settings template (`fdm_filament_*`, `fdm_filament_common`) so every family inheriting it collapses (Prusa, Ginger Additive, Snapmaker TPU base) | inside P1/P2 counts | move ids off templates onto family roots | -| P6 | OFL-internal collisions — 16 ids spanning several materials, visible on every printer (Elegoo blocks, Elas `OGFA00`×3, `OGFL06` polymer mismatch, `Generic PETG HF/PETG-CF @System` missing own ids) | 16 ids | fix inside OFL first (it's the base bundle every vendor resolves against) | -| P7 | alias-mismatch re-exposure — vendor tunes a generic under a different name, OFL preset resurfaces (Snapmaker `PolyTerra J1 PLA` vs OFL `PolyTerra PLA`) | 10 live | rename-to-alias where it's genuinely the same family, else mint | -| P8 | per-variant ids — no ambiguity, but family semantics broken: every variant has its own id (Prusa name-ids, SeeMeCNC nozzle suffixes, Afinia/Tiertime `_##`, iQ) so device matching can't identify the material across nozzles | ~210 presets | grandfather (they're unambiguous); converge opportunistically; document as anti-pattern | -| P9 | format violations — spaces (`"GFPLA Silk"`), >8 chars (LONGER, SeeMeCNC, LH), GF-shaped inventions (Anycubic `GFL93-97`, CoLiDo `GFA99`) | in the above | fixed as a byproduct of re-minting; snapshot freezes the unambiguous rest | -| P10 | cross-vendor semantic collisions — 67 ids meaning different materials in different vendors (dangerous via the global unscoped consumers, §1) | 67 ids | mostly eliminated by P1-P3 re-minting; the remaining same-material generic sharing is legalized by the snapshot | -| P11 | deliberate coexistence & data hygiene — Snapmaker "Benchy" demo presets (gated by `compatible_prints`, which the id check can't see) and a self-collision from duplicate `compatible_printers` entries | 4 | give demo presets own minted ids; dedupe list entries; add a lint for duplicate array entries | - -New patterns beyond the two in the task (goal 2.3): P5-P11. - ---- - -## 5. Migration plan - -### Safety foundation (verified, §1/§7) - -Safe: fresh never-used ids, family-consistent; trims of `compatible_printers`; inherits -re-pointing; OFL id changes (children re-derive). Unsafe: touching `BBL`/`QD_*`; recycling or -swapping ids; splitting a family's id; **deleting or renaming preset names** (user presets -whose `inherits` no longer resolves are dropped at load, `Preset.cpp:1687-1691`) — if a name -must go, `renamed_from` coverage is mandatory. - -### Phases - -0. **Land the rule + tooling first** (no profile changes): `scripts/assign_filament_ids.py` - (mint + insert + `--mint`), the extended `orca_extra_profile_check.py` checks in - snapshot-ratchet mode, the C++ validator OFL cross-check, the runtime warning, the rule doc. - Generate `filament_id_snapshot.json` (id→families multimap over main) and empty - `retired_ids.json` — both checked in. -1. **OFL first** (it's the base bundle every vendor resolves against): fix the 16 internal - collisions (Elas/eSUN/DREMC copy-pastes get mints; `Generic PETG HF/PETG-CF/PP-CF/PP-GF/ - PE-CF/PLA Matte @System` get their own family roots+ids instead of collapsing into their - parent generic), keeping every current effective id that is unambiguous. -2. **Per-vendor PRs, worst-first**: Qidi → Flashforge → Elegoo → Prusa → Cubicon → Anycubic → - InfiMech → Snapmaker → the long tail (22 vendors, mostly 1-8 one-line fixes). Each PR flips - that vendor into CI's `-f` scope (`check_profiles.yml` currently `-v BBL -f`; append - vendors as they reach zero; when all are in, drop `-v` and run tree-wide). -3. **Delete the ratchet allowlists** once tree-wide zero holds; checks become hard rules for - everything born after the snapshot. - -### Migration-script contract (from the adversarial pass — important) - -- Consumes from the classification only: group membership, fix category, keep-id precedence, - inherits-repoint targets. **All replacement id values are recomputed via the mint** — id - literals in analysis notes (e.g. `GFA00_02`, `GFS98`, `GFG96`) are legacy-culture artifacts - and are ignored with a warning; assert no emitted id matches `^(GF|QD_|P[0-9A-Fa-f]{7}$)`. -- **Family-atomic**: re-idding any preset re-ids every same-family sibling in the same commit, - even siblings outside the collision group (FlyingBear `GFB99 @S1` vs `@Ghost7`); Prusa is - family-atomic per material (its HF/CF families span frozen `_N`-suffix ids — freeze what's - unambiguous, mint once per family for the colliding members). -- **Diff bound**: a vendor migration PR may only touch collision-group files + same-family - siblings of re-idded presets; every id that is per-printer-unambiguous today stays - byte-identical. -- **Config-equivalence gate**: dump every instantiated preset's flattened effective config on - main and on the PR head; the diff must be empty except `filament_id`/`inherits`/ - `compatible_printers` edits the plan prescribes (this is what makes the Flashforge - shadow-file conversions safe: each id-less `fdm_filament_*` shadow becomes a named vendor - family root carrying its config byte-for-byte, children re-pointed, then the shadow name - retired). -- **No deletions**: redundant presets (Flashforge's byte-identical `Generic X`/`Flashforge X` - twins) are re-minted, not dropped; consolidation with `renamed_from` is a separate, - human-reviewed cleanup. -- Expected user impact: none for inheriting user presets, 3mfs, Klipper/Creality/Snapmaker - sync. Residue: user *root* presets that copied an old system id keep it forever - (AMS auto-match falls back to generic-by-type — low severity, unavoidable from the repo). - -### Vendor-specific notes (from classification) - -- **Qidi (97)**: three profile generations. `QD_*` generics are correct and frozen; the fix is - the brand families (Bambu/HATCHBOX/Overture/PolyLite/Tinmorry/QIDI-brand) that all carry - `GFB99/GFG99/GFL99`. Multi-root families are the norm (`...@Q2-Series` / `@Q2C-Series` / - `@X-Max 4-Series` bases) — same mint lands in every series root of one family. -- **Flashforge (69)**: two umbrellas (`FFG01` ~140 presets; `GFB99/GFG99/GFL99` G3U-era) + - OFL-riding branded presets + shadow-file conversion (above). -- **Elegoo (37)**: single mistake — every commercial variant inherits the material-class - `@base` (`EB00`); mint one id per product line (Silk/Matte/PRO/Rapid/…), roots exist. -- **Prusa (31)**: HF product lines need their own roots; ids move off `fdm_filament_*` - templates; frozen name-shaped and `_N` ids stay. -- **Sovol (6)**: delete the wrong own-id lines; correct ids flow from OFL by inheritance. -- **Cubicon (17)**: `@base` presets are themselves instantiated + over-claiming; 9 file edits. - ---- - -## 6. Concrete work items (PR-sized) - -1. `scripts/assign_filament_ids.py` + mint function + tests (incl. the 14-group regression set - from the adversarial pass). *(new)* -2. `orca_extra_profile_check.py`: checks §3.4-1..6 in ratchet mode + snapshot/ledger files; - drop the BBL/OFL-only gate at `:292` and the OFL skip at `:601`. *(extend)* -3. C++ validator: OFL-aware `check_duplicate_filament_subtypes`; runtime ambiguity warning at - the two `find_if` sites. *(small)* -4. Rule documentation: `doc/developer-reference/filament_id.md` (recreate the path; wiki - cross-link) + profile-PR template checkbox ("new materials: no filament_id key anywhere; CI - prints the minted id"). *(new)* -5. OFL migration PR (phase 1). -6. Per-vendor migration PRs (phase 2), each widening CI `-f` scope. - -The audit tooling from this analysis (loader-faithful resolver; reproduces the validator -1256/1256) is in this session's scratchpad (`audit_filament_ids.py`) and is the natural seed -for items 1-2. - -## 7. Evidence & methodology - -- Validator ground truth: `OrcaSlicer_profile_validator -f` tree-wide → 1256 errors; audit - script reproduces exactly (356 logical groups after dedup by (vendor, id, preset-set)). -- Code analysis: 5 parallel agents over runtime consumers, persistence/migration surface, - loader semantics, Bambu grammar, and convention history — all claims carry `file:line`. -- Classification: 37 agents (one per vendor chunk) reading actual profile JSONs; 14-sample - independent re-derivation found 1 substantive error (a Flashforge group mislabeled - `missing_id`; corrected — the loader resolves those ids from OFL). -- Design: 3 independent designs → 2 judges (both chose the deterministic mint; scores 58/50/56 - and 60/54/56) → 3 adversarial attackers (35 scenarios; every `breaks` finding is folded into - §3.2-3.4/§5 as an amendment: declared families, multi-root support, ratchet-not-absolute - checks, no-deletion rule, shadow-file conversion, classification-id-literal quarantine, - diameter siblings, case-insensitive P-hex reservation, fork guidance). -- Key history: `OGF*` born 2025-03-31 (`8c4a65e3e1`, no PR); `_##` suffix born PR #9739; - 8-char check born PR #9574; wiki (with the id-copy-paste example) removed 2025-11-24 - (`f0d79b99eb`). - -## 8. Open decisions for maintainers - -1. **Id format**: opaque deterministic `OF*` mint (recommended, judges 2/2) vs mnemonic - registry grammar (runner-up). Everything else in the plan is format-agnostic. -2. **Multi-vendor brands** (Snapmaker ships Fiberon with authentic `GF*` ids): sanction via - `shared_catalog` (recommended, low churn) vs hoisting those families into OFL. -3. **Benchy-style demo presets**: mint ids per demo preset (recommended) vs teaching the - validator `compatible_prints` gating. -4. **Alias alignment**: fix the 10 live alias-mismatch OFL duplicates by rename-to-alias - (better long-term, needs `renamed_from`) vs minting vendor ids (safer, more ids). -5. **Where the rule doc lives**: in-repo `doc/` (recommended — CI messages need a stable link) - vs wiki-only. diff --git a/filament_id_plan_v2.md b/filament_id_plan_v2.md deleted file mode 100644 index b5bf0f1c65..0000000000 --- a/filament_id_plan_v2.md +++ /dev/null @@ -1,314 +0,0 @@ -# filament_id plan v2: the `get_filament_id` (P+md5) proposal, validated - -> **Status note:** the verdict in §0-§4 and §7-§8 stands. The work items in §5 are -> superseded by `filament_id_plan_v3.md` (OFL-as-catalog, content-addressed triple key, -> succession ledger): W1/W3 are carried into v3.0, W2/W5 carry unchanged, W4 is dropped. - -Follow-up to `filament_id_plan.md` (v1, implemented on `feature/filament_id`: deterministic -`OF*` mint + snapshot ledger + 30-vendor migration, tree-wide validator `-f` = 0). - -**Proposal under review:** mint system `filament_id`s with the scheme of -`static std::string get_filament_id(std::string vendor_typr_serial)` -(`src/slic3r/GUI/CreatePresetsDialog.cpp:487-552`) — Bambu's user-custom-filament id -allocator — so system ids are "compatible with Bambu AMS sync". - -Every claim below was verified in source (`file:line`), against upstream BambuStudio, or in -primary online sources (URLs in §8). Verdict first, evidence after. - ---- - -## 0. Executive summary — the verdict - -**Do not re-mint system ids as `P+md5(name)`. Keep the v1 `OF*` mint.** Three facts decide it: - -1. **The AMS/device path never validates id *shape*.** `tray_info_idx` is an opaque string - end-to-end: sent verbatim (`DeviceManager.cpp:1642`), parsed verbatim - (`DevFilaSystem.cpp:512-514`), and firmware persists arbitrary bytes — an A1 stored and - echoed a *corrupted* id `Pde2\xea58c` (bambulab/BambuStudio#5436). A P-shaped system id - is not "more acceptable" to the device than an `OF*` one. -2. **P-shape buys zero recognition.** The printer resolves tray ids only against its built-in - `GF*` catalog plus the *account's* cloud custom-filament cache (official Bambu wiki); ids - it cannot resolve round-trip as `?`. Orca can never upload system presets into that cache - (`Preset.cpp:2071` gates cloud upload on `is_user()`), so an Orca system `P` id shows `?` - exactly like an `OF` id. The public catalog id space is 100% `GF*` (ha-bambulab - `filaments.json`: 86/86 ids). -3. **P-shape is the one shape the codebase punishes.** The *only* id-shape dispatch in the - entire tree is `MachineObject::check_ams_filament_valid` + `update_filament_list` - (`DeviceManager.cpp:5335/5352/5395/5410`, gate `setting_id.size()==8 && [0]=='P'`), a - user-custom lifecycle reconciler that **remotely wipes an AMS tray** - (`command_ams_filament_settings(..., "", "", white, "", 0, 0)` at `:5345`) or rewrites its - temps (`:5361-5367`) when a P-shaped tray id drops out of the user-root preset list - (`:5219`, armed at `:5268`). Name-keyed minting makes system id == user-custom id *by - design* (same name → same id), so "user deletes their now-redundant custom after the - system preset ships" becomes a remote tray wipe. `GF*` (wrong length) and `OF*` (wrong - first char) are structurally immune. - -The proposal's *real* value lives in two places, and v2 captures both without the re-mint: - -- **The adopt step** (the function's first branch, `:509-511/:526-528`): same base name → - same id. In-app, this already gives Orca-local convergence today — a user custom named - like a system family adopts the system id *whatever its shape*. At authoring time, the - same semantics = the v1 `shared_catalog` mechanism; §5/W4 extends it (curated, optional) - to let byte-authentic Bambu-catalog families carry authentic `GF*` ids. -- **The hash step belongs to user space.** `P+md5(name)` is Bambu's allocator for *user* - presets; the community is already asking for it there (OrcaSlicer PR #13315, unique ids - for inherited user presets). §5/W5 endorses that lane. System profiles stay out of the - `P` namespace — and v2 adds client hardening (W1) because ten *already-shipped* system - P-hex ids (Cubicon `P510cf**`×8, Ginger `P510eff9`, Artillery `Pfcf9c4c`) sit inside the - wipe-gate's shape match today. - -Judge panel (3 independent lenses over 4 variants; §7): keep-`OF*` won 23/40 aggregate -(device-ecosystem 6, identity-semantics 8, migration-enforceability 9) vs full Bambu -emulation 11, hash-only name-keyed 12, vendor-scoped P-hash 12. The single dissent -(device-ecosystem, favoring adoption) is honored by W4; its own verdict on the shape was -"adopt the semantics, not the costume". - ---- - -## 1. What the proposed generator actually is (verified) - -`get_filament_id(vendor_typr_serial)` (`CreatePresetsDialog.cpp:487-552`), called with -`" "` (`:1128`, `PLA-AERO`→`"PLA Aero"`), and per-preset with the -display base name when cloning presets for a user-created printer -(`Preset.cpp:2785-2803` → `:2798-2800`): - -1. **Adopt:** scan a temp bundle of *every* vendor bundle on disk - (`PresetBundle::load_system_filaments_json`, `PresetBundle.cpp:2342-2391`) plus the - user's presets, then the live bundle (`Preset.cpp:2831-2842`); if any preset's base name - (`name.substr(0, first('@') - 1)`) equals the input and its id ≠ `"null"`, **return that - id** — which can be `GF*`, `QD_*`, `OF*`, or another user's P-hex. -2. **Mint:** `"P" + md5(input)[0:7]`, lowercase hex over the raw UTF-8 bytes (`:533`, - `:480`). -3. **Collide:** if the id is held by a *different* name, re-hash with a local wall-clock - salt (`md5(input + get_curr_time())`, `:547`) — non-deterministic by construction. - -Upstream parity: the function and its caller input construction are **byte-identical** in -BambuStudio master (`CreatePresetsDialog.cpp` L434-499 / L1061; diff empty, fetched -2026-07-03). So identical dialog inputs in BBS and Orca yield identical ids — the kernel of -the proposal's compatibility claim. - -Reproduction limits (why "exactly the approach" cannot be ported to system minting anyway): - -- The base-name parser truncates names lacking a space before `@` (`"Afinia PLA@HS"` → - `"Afinia PL"`); 48 shipped presets hit this, and the *clone* path parses differently - (`" @"` two-char, `Preset.cpp:2792`), so the app itself is internally inconsistent. -- 597 presets (361 whole families, e.g. all of Anker) contain no `@` and are invisible to - the adopt scan and its collision map (`:505-508`). -- The collision salt is wall-clock time — unreproducible across machines, so id values - cannot be CI-verified from names; a ledger would still be the sole source of truth. -- Shipped P-hex ids don't round-trip from names today: Cubicon `P510cfb0` ≠ - `P+md5("Cubicon ABS")` = `Pc624b68` (verified) — so even Bambu-lineage P ids are not - name-derivable in practice. - -## 2. What Bambu AMS sync actually consumes (verified) - -- Send: `command_ams_filament_settings` puts the preset's `filament_id` verbatim into - `tray_info_idx` (`DeviceManager.cpp:1642`); cloud vs LAN differ only in transport - (`:2502-2536`). No client- or firmware-side rejection path exists; the ack parse stores - whatever the printer echoes (`:3808-3860`). -- Resolve (slicer side): tray id → first compatible root preset with equal `filament_id` — - system *and* user roots, no shape filter (`PresetBundle.cpp:3151`, `:3252-3254`); misses - fall back by `"Generic "` name, then similarity, then keep-previous - (`:3157-3169`, `:3260-3305`). `setting_id_to_type` resolves against `is_system` presets - only (`DeviceManager.cpp:2538-2559`) — a system preset resolves *because it is system*, - never because of its id shape. -- Resolve (device side): built-in `GF*` catalog + the account's cloud custom cache; - custom-filament sync is **cloud-only** (not LAN), and an id the printer has no data for - displays `?` until opened once on the printer screen (official wiki, §8). Third-party - consumers see customs as "unknown" (ha-bambulab #466/#540). -- Since Jan 2025, AMS configuration is gated behind Bambu-signed clients on new firmware - (Developer Mode / older firmware exempt) — any AMS-sync benefit for Orca is conditional - on that regardless of id scheme (Bambu authorization blog, §8). -- Orca already ships non-`GF`/non-`P` shapes to Bambu trays in the field: OFL presets are - compatible with every printer (`PresetBundle.cpp:5681-5684`) and carry `OGF*`/`OFL*` ids - (e.g. `OFLSBS99`, hardcoded in `MoonrakerPrinterAgent.cpp:654`). The premise "the - ecosystem has only ever seen `GF*`/P-hex" is already false, with no observed rejection. - -**Cross-client reality check.** The name-keyed benefit ("a BBS-created custom named like an -Orca system preset lands on the same id, so Orca's sync matches the system preset") is -mechanically true but narrow: it needs byte-exact names (including the `PLA Aero` mapping -and single spacing), the unsalted hash path, cloud mode, and permissive firmware. The -symmetric case already works in Orca *without* any re-mint: an Orca user creating a custom -named like a system family **adopts the system id** via the in-app adopt branch, so local -custom ↔ system ↔ tray matching is shape-independent today. - -## 3. The disqualifying finding, in mechanism form - -`update_filament_list` (`DeviceManager.cpp:5208-5272`) snapshots `{filament_id → temps}` -over **user root presets only** (`preset.is_user() && preset.inherits() == ""`, `:5219`); -ids that vanish or change temps between snapshots are armed into `checked_filament` -(`:5268`). `check_ams_filament_valid` (`:5311-5445`) then, for every AMS/virtual tray whose -`setting_id` matches `size()==8 && [0]=='P'`: - -- id armed and **not** in the current user-root list → remotely **clears the tray** - (`:5335-5349`, `:5395-5408`); -- id armed and in the list with unequal temps → **rewrites tray temps from the user - preset**, ignoring same-id system presets (`:5352-5374`; `PresetBundle.cpp:3719` skips - non-user presets; unguarded `find()->second` at `:3717`). - -Failure scenario under the proposal: system `"PolyLite PLA"` ships with -`P+md5("PolyLite PLA")`. A user's same-named custom (BBS- or Orca-created — same id by -design) is on an AMS tray. The user deletes the now-redundant custom. Next status refresh: -the id is armed, absent from user roots → Orca wipes the tray, even though the system -preset still resolves that id perfectly. Runs continuously (`StatusPanel.cpp:3275-3277`). - -Two corollaries independent of the proposal (→ W1): - -- The ten shipped P-hex **system** ids (Cubicon/Ginger/Artillery) already pass the shape - gate; only the "id must transit a user root" arming condition protects them, and the - in-app adopt branch can create exactly that transit today. -- `assert(it->first.size() == 8 && it->first[0] == 'P')` (`:5252`) is violable today: a - user custom named `"Bambu PLA Basic"` adopts `GFA00` onto a user root and aborts debug - builds. - -## 4. Identity costs the re-mint would add (quantified, tree dry-run) - -- 1148 distinct family base names; **198** appear in 2+ vendors; **159** groups carry ≥2 - distinct ids today and would silently merge under name-keying (Generic PETG alone: 15 - ids today). 112 involve BBL; 82 are `GF↔OGF` mirror pairs. -- **4** cross-vendor groups share a name across materially different `filament_type` - (Generic PLA Silk, Generic PETG-CF, Generic PA6-CF, Generic PE-CF) — one merged id would - feed wrong type/name/vitrification to the global unscoped consumers - (`PresetBundle.cpp:690-733`; `DeviceManager.cpp:2538`; `FilamentGroup.cpp:513-519`) (→ W3). -- 33 deliberately-split families on the branch would re-merge (25 Elegoo-vs-OFL pairs, 7 - FlyingBear-vs-InfiMech "Other *" pairs, the salted Cubicon PC pair) — undoing v1 - decisions that the fixture gate forced. -- Renames become id migrations: name-keyed ids re-key on any marketing rename; the ledger - can freeze them, but then name-derivability — the scheme's selling point — dies family - by family. The `OF*` key (`vendor/family`) survives display-name churn. -- Entropy drops 35.7 → 28 bits (still 0 collisions at today's 1148 names; ~0.75 expected - at 20k). Re-mint surface: 391 unshipped ids across 1327 files, 13 hardcoded tests, the - reserved-namespace policy inversion, and a retired-ledger rebuild. - -## 5. Work items (delta from `feature/filament_id` HEAD) - -**W1 — client hardening (C++, small, ships with the migration PR train).** - a. Skip the tray-reset and temp-rewrite in `check_ams_filament_valid` when **any - `is_system` filament preset carries the tray's id** — no compatibility filter, - mirroring the semantics of the global consumers (`get_filament_by_filament_id`, - `setting_id_to_type`). This protects the ten shipped P-hex system ids and any BBS - custom colliding with them, while ids resolving only to user presets (or to nothing) - keep today's cleanup behavior. - b. Relax the debug assert `DeviceManager.cpp:5252` to a log (user roots legitimately - carry adopted `GF*`/`OF*` ids). - c. Guard `PresetBundle.cpp:3717` (`find()` unchecked before `->second`). - d. Regression-check that AMS sync never clears trays whose id it merely cannot resolve - (OrcaSlicer#4431 class): the keep-previous fallbacks at `PresetBundle.cpp:3163-3169`, - `:3296-3305` must cover the UI paths. - -**W2 — tooling + doc guardrails.** - a. Document `^OF[0-9A-Za-z]{6}$` as the system-mint namespace. **Do not add it to - `reserved_space_owner`** (`scripts/assign_filament_ids.py:394-402`): check 6 exempts - only snapshot-grandfathered claims and the `--update-snapshot` refusal gate - (`:596-621`) would then reject every *future* mint. The space is already enforced — - check 3 (mint conformance, `:488-509`) errors on any OF-shaped id that does not equal - its own family's mint (covered by `test_check3_of_id_must_match_mint`), and the - snapshot diff is the human gate. Add one doc paragraph + a test asserting a foreign - vendor claiming another family's OF id fails check 3. - b. `doc/developer-reference/filament_id.md`: add a "why not P-hex" section citing the - `DeviceManager.cpp:5335` gate and the account-cache resolution model — community - pressure toward `P+md5` exists (PR #13315) and will recur. - c. Document that user roots may legitimately hold adopted system ids (incl. what that - means for cloud upload, `Preset.cpp:1874-1876`), matching BBS behavior. - -**W3 — data hygiene: the 4 same-name-different-type groups.** Audit each (they confuse - name-based fallback matching and any future interop even under vendor-scoped ids): - verify whether the divergent `filament_type` is a data bug (e.g. OFL `Generic PETG-CF` - resolving `PETG`, OFL `Generic PE-CF` resolving `PE`, Flashforge `Generic PLA Silk` - mixing `SILK`+`PLA`, Creality-vs-Elegoo `Generic PA6-CF` as `PA-CF`/`PA6-CF`) or - intentional; fix by type alignment or rename with evidence, gated by - config-equivalence (only `filament_type` diffs as prescribed) + full validator suite. - -**W4 — optional, curated GF adoption (the proposal's adopt step, done safely).** Extend the - v1 `--allow-shared-catalog` mechanism into an explicit per-family adoption worksheet: a - family may carry a byte-authentic Bambu catalog id iff (i) it is verifiably the same - commercial product as the BBL family (vendor evidence + equal `filament_type`), (ii) - validator `-f` stays 0 tree-wide (alias shadowing covers BBL/OFL overlaps), (iii) the - fixture gate passes, (iv) the snapshot diff records the adoption. Candidates: the 13 - actionable BBL-overlapping families minted `OF*` in v1 (e.g. Qidi `Bambu ABS`→`GFB00`, - `PolyLite PLA`→`GFL00`, `Overture PLA`→`GFL04`, `PolyLite ABS`→`GFB60`; `OFLSBS99` is - shipped and frozen; the two type-hazard OFL families are excluded until W3 lands). - **Honest benefit statement:** these presets are compatible only with non-Bambu printers, - so no Bambu device resolves their ids today; the payoff is one-product-one-id coherence - for the global consumers, project portability, and readiness for W6. Recommended seed: - the four Qidi brand families; generics deferred. - -**W5 — user-preset lane (where the proposal's hash belongs).** Support unique ids for - inherited user presets (the PR #13315 pain: children share the parent's id, so AMS always - resolves the generic parent). `P + md5(preset name)` matching - `CreatePresetsDialog::get_filament_id` is correct *in user space*: adopt-first against - existing ids, then hash; ids frozen per preset after mint. Constraints: never emitted - into system profiles (W2a makes that mechanical); W1 must land first so shared-id - lifecycles can't wipe trays. - -**W6 — recorded future option:** SoftFever's "upload OrcaSlicer's filament database - (especially the filament ID) to the printer" (PR #12724 comment). If pursued, Orca ids - become first-class device-visible artifacts and the P-mimicry question is permanently - moot; the `OF*` scheme is the *better* citizen there (collision-free vendor-scoped ids, - no user-custom masquerade). - -Unchanged from v1: mint rule, snapshot/retired ledgers (no OF retirement — nothing is -re-minted), CI wiring, migration commits. `filament_id_plan.md` remains the implemented -baseline; this document records the v2 decision and its follow-on work. - -## 6. Gates (per work item) - -Same battery as v1, all local: `python scripts/orca_extra_profile_check.py` exit 0; -`assign_filament_ids.py --check` exit 0 (46+ unit tests green; new tests for W2a -reservation and, when implemented, W4 adoption sanctioning); validator `-l 2` exit 0, -`-f` tree-wide exit 0, `-r` BBL+Qidi exit 0; custom-preset fixture overlays (the W1/W4 -changes touch exactly the preset-visibility machinery the fixtures exist to protect); -config-equivalence: flattened effective configs differ only in prescribed keys -(`filament_id` for W4, `filament_type` for W3, none for W1/W2). W1 additionally needs a -manual AMS smoke test on a live Bambu printer (tray set/clear round-trip) — a release -checklist item, not CI (the workflows have no hardware runners). - -## 7. Scheme comparison (judge panel record) - -| Variant | Device lens | Identity lens | Migration lens | Σ | -|---|---|---|---|---| -| V1 full Bambu emulation (adopt incl. `GF*` + P+md5 + salt) | 7 | 2 | 2 | 11 | -| V2 hash-only name-keyed `P+md5(base name)` | 4 | 4 | 4 | 12 | -| V3 vendor-scoped P-hash (`P+md5(vendor/family)`) | 2 | 5 | 5 | 12 | -| **V4 keep `OF*` uuid5 vendor-scoped (chosen)** | 6 | 8 | 9 | **23** | - -All three judges answered the pivotal question the same way: the P-hex **shape** confers no -device/cloud benefit (resolution is by value against catalog + account cache; the path is -otherwise shape-agnostic) and is the only shape with a destructive client-side gate. V3 is -strictly dominated (all of the re-mint cost, none of the name-keyed benefit). V1's genuine -half — GF adoption — is captured by W4 at zero re-mint cost. - -## 8. Evidence index - -Code (this branch): `CreatePresetsDialog.cpp:487-552,1128,2798-2800` (generator + callers); -`DeviceManager.cpp:1642` (verbatim send), `:2538-2559` (system-only type resolve), -`:5208-5272` (user-root snapshot, `:5219`, `:5252` assert, `:5268` arming), `:5311-5445` -(P-shape gate + tray wipe `:5335/:5345`, temp rewrite `:5352-5374`, virtual tray -`:5395-5435`); `DevFilaSystem.cpp:512-524`; `PresetBundle.cpp:690-733,3116-3128,3151, -3252-3254,3709-3767,5674-5753`; `Preset.cpp:1874-1876,2071,2785-2842`; -`AMSMaterialsSetting.cpp:886,894-897`; `WebGuideDialog.cpp:67`; -`PresetComboBoxes.cpp:1952-1966`; `MoonrakerPrinterAgent.cpp:654`; -`scripts/assign_filament_ids.py:69,71-72,118-144,394-402,596-621`. - -Online (fetched 2026-07-03): BambuStudio master `CreatePresetsDialog.cpp` L434-499 -(byte-identical generator); wiki.bambulab.com `create-filament` (custom filaments AMS-able -from firmware 1.6.6; only dialog-created presets sync) and `custom-filament-issue` -(cloud-only sync; unknown ids show `?`); blog.bambulab.com authorization-control (Jan-2025 -AMS-config gating); bambulab/BambuStudio#5436 (firmware persists corrupted id); -OrcaSlicer #4431 (tray clobber to `?`), #3874 (cloud-only confirmation), PR #14459 -(the `-f` invariant), PR #14423 + PR #12724 + PR #13315 (maintainer statements / community -P+md5 pressure); greghesp/ha-bambulab `filaments.json` (86/86 `GF*`) + #466/#540. - -Method: 6 parallel evidence agents (generator semantics; AMS/device path; exhaustive -shape-dispatch sweep; upstream/online; tree-wide dry-run over 5892 presets / 1455 families; -branch change inventory) → 3-judge panel (device-ecosystem, identity-semantics, -migration-enforceability lenses). Dry-run artifacts: session scratchpad -`phex_dryrun_{summary,details,followup}.json`. - -## 9. Open decisions for maintainers - -1. **W4 scope**: none / 4 Qidi brand families (recommended) / + generic-tier re-adoption. -2. **W5 timing**: implement in-repo vs review upstream PR #13315 with the W1 hardening as a - prerequisite either way. -3. **W6**: pursue the filament-database-upload design (makes Orca ids device-visible and - ends the mimicry debate for good). diff --git a/filament_id_plan_v3.md b/filament_id_plan_v3.md deleted file mode 100644 index 14b547600f..0000000000 --- a/filament_id_plan_v3.md +++ /dev/null @@ -1,213 +0,0 @@ -# filament_id plan v3: OFL as the catalog, content-addressed product ids - -Supersedes §5 of `filament_id_plan_v2.md` (whose P+md5 verdict stands unchanged) and -revises the mint rule of `filament_id_plan.md` (v1, implemented on `feature/filament_id`). -Decision driver: v1's mint key scoped families to the *profile bundle* (printer brand), so -one commercial product tuned in N bundles carries N ids — e.g. PolyLite PLA ships in five -bundles (`BBL`, `OrcaFilamentLibrary`, `OrcaArena`, `Qidi`, `Snapmaker`), all with -`filament_vendor: "Polymaker"`, under up to five different ids (`GFL00`, `OFceJcLf`, …). -That contradicts what `filament_id` means: one id per commercial product line. - -## 0. The architecture - -Three tiers, two frozen islands: - -1. **BBL island — untouched.** Bambu profiles keep their `GF*` catalog ids byte-for-byte - (device/RFID/cloud contract). No convergence between GF and OFL ids is attempted: the - same product may permanently carry `GFL00` on the BBL side and an `OF*` id everywhere - else. This is a deliberate trade for simplicity; v2's curated-GF-adoption (old W4) is - dropped. -2. **`QD_*` island — untouched.** Qidi's box builds `QD___` from - device enums and requires exactly-matching presets (`QidiPrinterAgent.cpp:146-152`). - Qidi presets carrying `QD_*` are exempt from re-minting, forever. -3. **Everything else converges on OrcaFilamentLibrary.** OFL is the product catalog: a - material family's id is declared once, on its OFL family root. Vendor bundles carry - only per-printer *specializations* of OFL families — same base name, non-empty - `compatible_printers`, **no `filament_id` key** — which (a) alias-shadow the OFL preset - on the printers they claim (`Preset.cpp:3684-3714`: "Generic PLA @Qidi Q2 0.4mm nozzle" - hides "Generic PLA @System" on that machine) and (b) resolve the OFL family's id - through the loader's inherits/base-bundle walk (`PresetBundle.cpp:4842-5080`). Products - OFL does not (yet) carry mint their id in the vendor bundle **with the same rule**; - because the key is bundle-independent (§1), later hoisting the family into OFL never - changes its id. - -Convergence therefore happens by *single declaration point*, not by copying ids across -bundles — no adoption registry, no cross-bundle id claims to curate. - -## 1. The mint rule - -``` -triple = (filament_vendor, filament_type, family_name) # from the family ROOT's flattened config -key = "filament_product///" -id = "OF" + base62_6( uuid5( FILAMENT_ID_NAMESPACE, key ) ) # namespace unchanged: - # c4d3ff49-4c32-5534-a3e3-00894157ab97 -``` - -- **Triple resolution.** All three values come from the family root preset's *flattened - effective config* (`filament_vendor` and `filament_type` are inheritable list options — - take the first element; family_name = the root's base name, `\s?@.*` stripped once). - For own-key-layout families (no root), each declaring preset's flattened config is used - and CI requires all declarers of one family to agree on the triple. A root that resolves - an empty `filament_vendor` or `filament_type` is a CI error (generics use `"Generic"`). - Values enter the key verbatim (UTF-8, no case folding). -- **Bundle-independent by design.** The key contains no bundle name, so the same product - yields the same id whether minted in OFL or in a vendor bundle; migrating a family into - OFL (§0.3) is id-stable. Two bundles independently adding the same triple converge - automatically — and that is correct, because equal (vendor, type, name) *is* the - definition of "same product" here. The known look-alike hazards stay separated by the - type component: the 4 same-name-different-type groups (Flashforge `Generic PLA Silk` as - SILK, OFL `Generic PETG-CF` as PETG, `Generic PA6-CF`, `Generic PE-CF`) hash apart until - their type bugs are fixed (§5, W3) and converge automatically after — self-healing that - pure name-keying (rejected in v2) could not provide. -- **Format and salt unchanged from v1**: 8 chars, `OF` + 6 base62; deterministic `/1`, - `/2`… salt past any taken or retired id (the O+7 widening was evaluated and rejected: - 62⁶ expects 1.9×10⁻⁵ collisions at today's 1,455 families, and `^O.{7}$` would sweep 35 - legacy ids into the conformance gate vs. one today). -- **Content-addressed, deliberately.** If any triple component changes — a family rename, - a `filament_vendor` correction, a `filament_type` fix — the id changes with it. This - *replaces* v1's "ids are immutable once shipped" with "ids are derivable from the - product identity, and identity changes are migrations" — made safe by the succession - ledger (§2). `renamed_from` still gates preset-name compatibility as before. -- CLI: `--mint "Polymaker/PLA/PolyLite PLA"` prints without touching the tree; running - the script plain inserts missing ids; CI errors print the expected id. - -## 2. The succession ledger (the amendment that makes this safe) - -Shipped ids are referenced outside the tree: AFC/Klipper lane data, Bambu AMS trays -holding OFL-only materials, on-device PA-calibration records, user-root preset copies, -3mf `slice_info`. Retiring an id without a forwarding pointer downgrades all of those to -`Generic ` fallbacks. Therefore: - -- **Schema.** `scripts/retired_filament_ids.json` entries become objects: - `{"retired": {"OGFL99": {"claims": [...], "successor": "OFxxxxxx"}}}`. Append-only as - before; a successor may itself be retired later (chains allowed, cycle-checked, and - followed to the live end). A retired id may never be minted again (check 4 unchanged). - Cross-island *hint* entries are permitted for ids Orca cannot retire because another - island owns them (e.g. `GFL99 → `): consulted only when no live - preset matches, so BBL installs still resolve `GFL99` natively first. By the same - principle, an id in a foreign island's space (`GF*`/`QD_*`) that vanishes from the tree - is **released with a hint, never retired** — the island's catalog owns it and may - legitimately (re)ship it later, which check 4 must never block. (Implementation - amendment, v3.0: `--update-snapshot` routes such ids to `hints` automatically; hint - keys may be absent from the tree.) -- **Shipped and consulted at runtime.** The ledger ships in `resources/`; a small helper - (`resolve_filament_id_succession(id)`) follows the chain and is consulted **only on - resolution miss**, before the `Generic ` name fallback, in: - `PresetBundle::get_filament_by_filament_id` (covers `DevFilaBlackList`, `SelectMachine` - warnings, `Plater` tray configs in one place), the AMS sync match predicates - (`PresetBundle.cpp:3151`, `:3252-3254` miss paths at `:3157-3169`/`:3260-3305`), - `PresetComboBoxes::add_ams_filaments`, `MachineObject::setting_id_to_type` - (`DeviceManager.cpp:2545` miss branch), calibration-history name lookup - (`CaliHistoryDialog.cpp:62`), and the #14423 Moonraker lane matching when it lands. - With this in place the OFL re-mint is near-residue-free and every future - content-addressed rename stays safe. -- **Kill the hardcoded generic map.** `MoonrakerPrinterAgent::map_filament_type_to_generic_id` - (`MoonrakerPrinterAgent.cpp:608-658`) hardcodes 23 OFL ids (`OGFL99`… `OFLSBS99`). - Replace it with a runtime lookup of the OFL generic preset by name ("Generic PLA - @System" → its current id), removing the code↔profile lockstep permanently. (This also - releases `OFLSBS99`, v2's one frozen OF-shaped legacy id, for normal re-minting.) - -## 3. Validation rule changes - -- **Check 3 (mint conformance)** becomes a pure function of the root's triple: a non-BBL, - non-`QD_*` id must equal `mint(triple)` ± salt, or be snapshot-grandfathered (the - grandfather set shrinks to ≈ nothing for non-BBL once migration completes). -- **Check 5 (alias hygiene) generalizes and becomes load-bearing.** For *every* - OFL-carried family (not just `Generic * @System`): a vendor specialization must keep the - OFL base name (else the OFL preset un-shadows and creates a live per-printer duplicate — - v1's P7 pattern) and non-empty `compatible_printers`, and must not declare an id. The - C++ validator's OFL-aware `-f` (`PresetBundle.cpp:5674-5753`) already enforces the - runtime consequence; the script check names the rename as the cause. -- **New check 8 (triple integrity):** every id-declaring family resolves a complete, - family-consistent triple; roots missing `filament_vendor`/`filament_type` error. -- **New check 9 (succession integrity):** every retired entry's successor chain ends at a - live tree id (or a documented cross-island hint target); no cycles; retired ids absent - from the tree. -- Snapshot mechanism, reserved spaces (`GF*`→BBL, `QD_*`→Qidi, `P`-hex/`null`→user-custom; - v2's do-not-reserve-`OF*` note stands), and check 1/2/4/7 are unchanged. - -## 4. Migration phases - -**v3.0 — tooling + prerequisites (no profile changes).** New mint + triple resolver -(reuse the flatten machinery), succession schema migration + C++ lookup helper wired into -the §2 miss paths, Moonraker map → runtime lookup, checks 3/5/8/9, tests. Carry v2's W1 -client hardening (skip tray-wipe/temp-rewrite when a system preset holds the id; relax -the `DeviceManager.cpp:5252` assert; guard the `PresetBundle.cpp:3717` deref) — it ships -first regardless. **W3 type fixes land here**, *before* any re-mint: type is now a key -component, so minting before fixing OFL `Generic PETG-CF`/`Generic PE-CF` would re-id -those families twice. - -**v3.1 — OFL re-mint.** Every OFL-declared id re-derives from its triple (mirrors like -`OGFA00`, generics like `OGFL99`, blocks like `OEPLAB00` — all of it); each old shipped id -gains a succession entry pointing at its replacement; the 26 GF-shaped ids OFL declares -(measured at v3.0: only one of them, `GFOT001`, is also declared by BBL) are released to -the BBL island space with hints at the re-minted families — two-island purity. Snapshot -regenerated; full gate battery + fixture overlays (this phase touches preset-visibility -machinery only via ids, but the fixtures are cheap insurance). Implementation notes -(v3.1, executed): OFL generic ids relocate from the fdm_filament_* template bases onto -the product-named "Generic X @System" presets first, so their triples carry the product -name; `fdm_filament_pc` keeps a (transitional) declaration because 7 Prusa presets -inherit it directly — the v3.2 Prusa worksheet re-homes them and deletes it. - -**v3.2 — vendor bundles, worksheet-per-vendor (v1 machinery).** Three sub-cases: - (a) the **391 unshipped v1 `OF*` mints** re-derive under the triple key — no succession - entries (they never shipped; a documented one-time `--forget-never-shipped ` drops - them from the ledger lineage instead of retiring them, since the ledger's rationale — - ids live on in user presets and 3mfs — cannot apply to unreleased ids); - (b) **true generic tunings** riding copied legacy ids (`GFL99`-class) drop their own id - and re-point to the OFL generic family (the v1 Sovol pattern) — their old ids get - cross-island hints where BBL owns them, succession entries otherwise; - (c) remaining **shipped legacy ids** (numeric, name-shaped, pseudo-GF, the 57 - multi-vendor GF residue, the 10 P-hex — everything non-BBL/non-`QD_*`, ~800 ids) - re-mint with succession entries. Retiring the 10 P-hex system ids also removes the last - system ids from `check_ams_filament_valid`'s destructive P-gate. - -**v3.3 — ongoing consolidation (optional, per-vendor, id-stable).** Hoist vendor-unique -products into OFL where a family is genuinely multi-vendor material; thanks to the -bundle-independent key this never changes ids, so it can proceed opportunistically. - -## 5. Gates (every phase) - -`python scripts/orca_extra_profile_check.py` exit 0; `assign_filament_ids.py --check` -exit 0; unit tests green (existing 46 + new triple/succession/adoption tests); validator -`-l 2` exit 0, `-f` tree-wide exit 0, `-r` BBL+Qidi exit 0; custom-preset fixture -archives; config-equivalence — flattened effective configs differ only in `filament_id` -(re-mints), `inherits`/`compatible_printers` (re-points, as prescribed per worksheet), and -the W3 `filament_type` corrections. New for v3: a C++ test that a retired id resolves -through the succession chain in the sync miss path, and a Moonraker test that the generic -map lookup matches the shipped OFL presets. Manual AMS smoke test (tray set → old-id -resolve → clear) stays a release-checklist item. - -## 6. Accepted costs (explicit) - -- **GF ↔ OFL divergence is permanent** for products in both catalogs (PolyLite PLA ≠ - `GFL00` outside BBL). The forward-looking fix is PR #12724-style filament-database - upload, where Orca ids become first-class device artifacts. -- **Renames/type-fixes re-id families** (by design); the succession ledger absorbs the - device/user residue, but each one is still a ledger entry and a snapshot diff to review. -- **User roots** keep whatever id they copied at creation; with succession lookup in - `get_filament_by_filament_id` they now *resolve* instead of dangling — strictly better - than v1's accepted residue. -- **One-time field transition**: devices holding pre-v3 ids (AFC lanes, AMS trays, cali - records) resolve via succession on updated clients; *older* Orca versions and - BambuStudio never resolved OFL-only ids anyway (`?`/generic fallback — unchanged for - them). - -## 7. Open decisions - -1. Whether v3.2(b)'s cross-island hints (`GFL99` → OFL generic) are wanted at launch or - deferred (pure-miss-path feature; zero risk to BBL installs, small review surface). -2. v3.3 pacing: per-vendor PRs opportunistically vs. a dedicated consolidation train. -3. Whether to fold v2's W5 (P+md5 ids for inherited *user* presets, PR #13315) into v3.0's - C++ work or keep it a separate PR (recommended: separate; W1 is its only prerequisite). - -## 8. Evidence - -Carried from v2 §8 (all re-verified this session), plus: `filament_vendor` audit — 49 -distinct strings tree-wide, `"Polymaker"` byte-consistent across all five PolyLite-PLA -bundles; multi-vendor different-family GF residue = 57 ids; `MoonrakerPrinterAgent.cpp: -608-658` = 23 hardcoded OFL ids; mint examples verified live (`Qidi/PolyLite PLA` → -`OFceJcLf` under the v1 key — the fragmentation this plan removes; salt determinism -`OF8afiMO`). Alias shadowing and the OFL id fallback verified at `Preset.cpp:3684-3714` -and `PresetBundle.cpp:4842-5080` during the v1 audit; per-printer `-f` semantics at -`PresetBundle.cpp:5674-5753`. diff --git a/filament_id_plan_v4.md b/filament_id_plan_v4.md deleted file mode 100644 index 046a7cae1c..0000000000 --- a/filament_id_plan_v4.md +++ /dev/null @@ -1,224 +0,0 @@ -# filament_id plan v4: dissolve the Qidi `QD_*` island - -Supersedes §0.2 of `filament_id_plan_v3.md` (the "`QD_*` island — untouched, forever" -decision) and amends every v3 section that carved out `QD_*`. Everything else in v3 — -the mint rule, the succession ledger, the BBL island, checks 1–9 — stands as -implemented (v3.0–v3.2, all gates green at commit `f7c1b290fd`). - -Decision driver: the island contradicts the catalog architecture v3 built. Qidi presets -carry 204 `QD___` ids over 264 declarations (49 families, -measured 2026-08-21) — one commercial product carries up to *five* ids (one per printer -series: `QIDI PLA Rapido` = `QD_0_1_1` … `QD_4_1_1`), which is exactly the -fragmentation v3 exists to remove. The island was frozen because Qidi's filament box -composes these ids from device enums and requires exactly-matching presets -(`QidiPrinterAgent.cpp:146-152`). But v3.0 shipped the machinery that makes freezing -unnecessary: the succession ledger already translates retired ids on resolution miss. -`QD_*` stops being a *preset id space* and becomes a *device protocol namespace*, -translated once at the agent edge. - -## 0. The architecture change - -Two tiers, **one** frozen island: - -1. **BBL island — untouched, unchanged.** All v3 reasoning holds (device/RFID/cloud - contract is external and opaque). -2. **Everything else converges on OFL product ids — now including Qidi.** All 204 - `QD_*` ids re-mint from their family triples and gain **retired** ledger entries - (not cross-island hints: after dissolution there is no island to own them, and - check 4's "never again" is exactly the guard we want against upstream re-adding - them). The box keeps working because `QidiPrinterAgent` resolves its composed - `QD_*` id through `resolve_filament_id_succession()` on miss — the same mechanism - every other retired id already uses. - -Why retire rather than hint (the one real design choice here): hints exist for ids a -*foreign catalog* owns and may legitimately re-ship (`GF*`). Post-dissolution, nothing -may ever re-ship a `QD_*` id in the profile tree — the device composes them at -runtime, the tree translates them. Retired entries make CI enforce that permanently -(`--update-snapshot` refuses resurrections, check 4 refuses occurrences); hints would -permit re-shipping, which is now always a regression. The QD→family mapping is -strictly 1:1 (verified: no `QD_*` id is claimed by more than one family), so the -mode-rule successor is unambiguous for every entry. - -## 1. What the dissolution consists of - -Three independent work packages, ordered for bisectability: - -- **(A) Re-converge the drifted tree** — prerequisite, not Qidi-specific. The - 2026-07 main merge (`f3fa3a34bd`) brought upstream vendor updates in pre-v3 style: - `--check` currently exits with **243 errors** (123 unsanctioned new ids, 46 new - instantiated own-key presets, 31 override drifts, 18 reserved-space claims, 5 - hint-keys re-declared — Qidi re-added `GFB99`/`GFG99`/`GFL99`, Snapmaker re-added - `GFG96`/`GFU99` and even four *retired* ids incl. `OGFL99`, plus Snapmaker U1 - triple errors and a GreenGate3D rename). This is the standing WF-B maintenance - pass; the dissolution's gates cannot go green on a red base. -- **(B) C++ succession hook in the Qidi agent** — safe to land before any data - changes (pure miss-path: while `QD_*` presets still exist, the hook never fires). -- **(C) The dissolution proper** — tooling flip + Qidi data fixes + re-mint + - snapshot/ledger regeneration, one vendor worksheet in the v3.2 mold. - -## 2. Runtime translation (work package B) - -`QidiPrinterAgent.cpp:183-192` currently: compose `setting_id` → keep it if a visible -base preset declares it → else degrade to `filament_id_by_type(tray_type)` (i.e. every -QIDI-brand box slot silently becomes Generic once the ids re-mint). Insert the -succession walk between those two steps: - -```cpp -} else if (!setting_id.empty() && has_visible_base_preset(bundle->filaments, setting_id)) { - tray.tray_info_idx = setting_id; -} else { - // Retired QD_* protocol ids forward to their minted successors via the shipped ledger. - const std::string successor = setting_id.empty() ? std::string() - : resolve_filament_id_succession(setting_id); - if (!successor.empty() && has_visible_base_preset(bundle->filaments, successor)) - tray.tray_info_idx = successor; - else - tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); -} -``` - -`resolve_filament_id_succession` is `Preset.hpp:119` (loads once, cycle-guarded, -empty-safe) — no new includes needed beyond what the file already reaches through -`PresetBundle`. This one hook covers both composition paths: the numeric-series -`build_setting_id` lambda *and* the non-numeric fallback -`map_filament_type_to_setting_id` (`:325-342`), whose four hardcoded returns -(`QD_1_0_1`/`_11`/`_41`/`_50` = Generic PLA/ABS/PETG/TPU 95A) become ledger keys in -package C. Keep that function as-is but extend its comment: the returned ids are -retired ledger keys by design, and `scripts/tests/test_filament_id.py` parses the -initializer (see §4 tests) — the Moonraker treatment (`MoonrakerPrinterAgent.cpp: -619-627`) of replacing the table with name lookups was considered and not taken: the -table already routes through the same ledger as the composed ids, and two translation -mechanisms in one agent is worse than one. - -Tests (same commit): - -- `tests/libslic3r/test_filament_id_succession.cpp`: add a section asserting a - `QD_`-shaped key forwards like any other (`{"QD_2_1_11", "OFnew001"}` resolves to - `"OFnew001"`) — pins that the walk is prefix-agnostic. -- `scripts/tests/test_filament_id.py`: new test parsing the four `QD_` literals out of - `QidiPrinterAgent.cpp::map_filament_type_to_setting_id` (mirror the parser in - `scripts/test_moonraker_lane_data.py`) and asserting each is a ledger key whose - chain terminates at a live tree id. **Add it marked expected-fail/skipped until - package C lands, then flip it on** — it is the permanent code↔ledger lockstep guard. - -## 3. Tooling and validation flip (work package C, first commit) - -All in `scripts/assign_filament_ids.py`; every touched line measured 2026-08-21: - -- `is_island_declaration` (`:327-329`) → `return vendor == "BBL"`. This single change - pulls every `QD_*` declarer into the triple bookkeeping (`:385`) and thus into - checks 3 and 8, into `--remint`'s domain (`:1464`), and out of the hint-key - tolerances (`:877`, `:1100`). -- `reserved_space_owner` (`:596-604`): `QD_*` returns `(True, None)` — reserved, - ownerless, exactly like the P-hex/user-custom space. Consequences, all wanted: - check 6 refuses any future vendor claim; the `--update-snapshot` sanction gate - (`:938-963`) refuses new `QD_*` ids outright; the vanish path (`:994`) routes - `QD_*` to **retired** (owner `None` ≠ island), not released-with-hint. Update the - two message sites that render `owner is None` as "reserved for user-custom presets" - (`:628` docstring, `:958`, and check 6's copy) to name the space generically or - special-case `QD_*` ("Qidi device protocol; dissolved island — retired, never - declarable"). -- Check 1 (`:667-668`): delete the `vendor == "Qidi" and fid.startswith("QD_")` - exemption. -- Module docstring (`:27-45`): rewrite the `QD_*` bullet — reserved space stays - listed, but as "device protocol namespace, translated via the succession ledger; - dissolved as a catalog island in v4, may never be declared". -- `scripts/tests/test_filament_id.py`: update the three island assertions — - `reserved_space_owner("QD_X4_PLA")` → `(True, None)` (`:403`), - `is_island_declaration("Qidi", "QD_X4_PLA")` → `False` (`:413`), and the - reserved-space message case (`:570`). - -No changes to the ledger schema, the C++ checks, `--retire` (post-flip it accepts -`QD_*` olds automatically — they are non-island now), or the validator: check 3's -"non-BBL, non-`QD_*`" phrasing in v3 §3 was always implemented as "non-island", so the -flip *is* the spec change. - -## 4. Migration phases - -**v4.0 — re-converge the drifted tree (package A).** Per-vendor WF-B worksheets over -the 243 errors: Snapmaker U1 (triple divergence `Generic|Snapmaker|snapmaker`, empty -vendors, four resurrected retired ids — these force re-mints since retirement is -permanent), BBL/addnorth `GF_AN*` overrides (BBL island: grandfather via snapshot, -they are BBL-internal), Qidi/Snapmaker re-declared hint keys (re-mint those declarers, -the check's own prescription), GreenGate3D rename, then `--update-snapshot` (new -upstream `QD_*` ids sanction cleanly — the island is still intact in this phase) and -the full v3 §5 gate battery. Bump `version` in every touched -`resources/profiles/.json`. **Do not start v4.2 until `--check` exits 0.** - -**v4.1 — the agent hook (package B).** §2 as written; `libslic3r_tests` + -`scripts/tests/test_filament_id.py` green; behavior-neutral by construction (no `QD_*` -ledger entries exist yet). - -**v4.2 — the dissolution (package C).** One Qidi worksheet, v3.2 machinery: - -1. Tooling flip commit (§3). `--check` now reports the Qidi island as - non-conformant — expected, red only between commits of this phase. -2. Data fixes, before any re-mint (the v3 "W3 lands first" lesson — type/vendor are - key components): add `filament_vendor: ["QIDI"]` at each QIDI-brand family's - inheritance apex so all declarers resolve it (39 of 49 families currently resolve - none — check 8a would refuse the mint). Verify the six Generic families - (`Generic PLA/ABS/PETG/PC/TPU 95A/PLA Silk`) resolve triples identical to their - OFL counterparts (vendor `Generic`, OFL's `filament_type`) so they *converge onto - the OFL ids* by triple math — the whole point; any mismatch is a W3-style data fix - here, not a fork. No `inherits`/`compatible_printers` re-pointing anywhere: the - series intermediates (`Generic PLA@Q2-Series` etc., all `instantiation: false`) - simply keep declarations whose values become the OFL ids. -3. `python scripts/assign_filament_ids.py --remint Qidi` — rewrites all 264 - declarations in place to their family mints (same triple ⇒ same id across a - family's series intermediates and per-nozzle declarers; convergence with OFL ids - is legal by design, `want_id` already permits same-triple collisions `:1447`). -4. `--update-snapshot` — retires every vanished `QD_*` id with its mode-rule - successor. **Audit the ledger diff: all ~204 new entries must be `QD_*`→non-null.** - A null successor (possible only for a declared-only id with zero instantiated - claims) gets an explicit `--retire "QD_x=OFy"` with the family's minted id. -5. Un-skip the §2 lockstep test. Bump `resources/profiles/Qidi.json` version. Full - gate battery (§5). - -Known residue, accepted: `QIDI PC-ABS-FR` (series 1–2) vs `QIDI PC/ABS-FR` -(series 3–4) are two preset-name families for one product → two ids. Renames were -ruled out in v3 (`renamed_from` rejected for migrations); if upstream ever unifies the -name, content-addressing re-ids and the ledger absorbs it — self-healing, no action -now. - -**v4.3 — OFL consolidation (unchanged).** v3.3 stays optional and id-stable; QIDI-brand -families are vendor-unique and stay in the Qidi bundle. - -## 5. Gates (per phase, delta from v3 §5) - -Unchanged battery: `orca_extra_profile_check.py` exit 0, `assign_filament_ids.py ---check` exit 0, `scripts/tests/test_filament_id.py` all green, `libslic3r_tests` -green, validator `-l 2` tree-wide + `-f` tree-wide + `-v Qidi` exit 0, custom-preset -fixture archives (v4.2 touches no preset visibility, but they are cheap insurance — -run them for v4.0, which touches instantiation-adjacent upstream drift), flatten -config-equivalence. New for v4.2: equivalence diff may contain **only** `filament_id` -value changes (QD→OF) and the added `filament_vendor` keys on QIDI-brand families; -ledger diff audit per §4.4; the map-literal lockstep test. Manual release-checklist -item: Qidi box smoke test — slot holding a QIDI-brand material must surface the brand -preset (not Generic) on an updated client, via the memory-documented local Klipper -test rig. - -## 6. Accepted costs (explicit, new relative to v3) - -- **Every Qidi box slot resolves through the ledger miss-path forever** (one hash-map - walk per slot per status poll — negligible, and structurally identical to how - every retired id already resolves). The QD→OF translation table is maintained by - the retirement machinery, not by hand. -- **Older Orca clients** (pre-v4 profiles) paired with re-minted profile trees lose - QIDI-brand slot matching (they look up `QD_*` and fall back generic-by-type — the - degradation the hook removes for updated clients). Same one-time field-transition - shape v3 §6 already accepted for AMS/AFC ids. -- **Two ids for PC-ABS-FR** until upstream unifies the family name (§4 residue). - -## 7. Evidence - -Measured on this tree 2026-08-21 unless cited to v3: 204 distinct `QD_*` ids / 264 -declaring presets / 49 families, QD→family strictly 1:1, per-series id sets -(`QD_0..4_1_1` = `QIDI PLA Rapido` etc.); 39 families resolve no `filament_vendor`; -declarations live on `instantiation:false` series intermediates (Q2/Q2C/X5/X4) and -per-nozzle X-Plus-4 presets; composition + miss-fallback at -`QidiPrinterAgent.cpp:146-152, 183-192`, hardcoded fallback table `:325-342`; -succession helpers `Preset.hpp:109-119`; ledger = 575 retired + 194 hints, zero `QD_*` -entries; snapshot holds 160 of the 204 (the 44 newcomers are post-merge drift); -`--check` = 243 errors, categorized in §1(A); island exemption mechanics at -`assign_filament_ids.py:327-329, 385, 596-604, 667, 877, 994, 1464, 1514`; `--remint` -same-triple convergence guard `:1447-1453`; retirement-permanence gate `:965-976`. From 417a6d7c30068c2c3e8b48037b20015fb93c41c4 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 1 Sep 2026 11:41:53 +0800 Subject: [PATCH 070/208] add log --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index a2adf3ea5b..ed532e91a8 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -681,6 +681,19 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } + // Orca: log the tray payload this dialog hands the printer, so the filament_id resolved from the + // dropdown selection can be checked against the tray_info_idx the AMS actually receives. A + // BBL-tagged (RFID) tray is read-only here, so nothing is published for it. + BOOST_LOG_TRIVIAL(info) << "ams_materials_setting: " << (m_is_third ? "sending" : "NOT sending (BBL RFID tray, read-only)") + << ", ams_id = " << ams_id << ", slot_id = " << slot_id + << ", selected = " << m_comboBox_filament->GetValue().ToStdString() + << ", tray_info_idx (filament_id) = " << ams_filament_id + << ", setting_id = " << ams_setting_id + << ", tray_type = " << m_filament_type + << ", tray_color = " << col_buf + << ", nozzle_temp_min = " << nozzle_temp_min_int + << ", nozzle_temp_max = " << nozzle_temp_max_int; + // set filament if (m_is_third) { obj->command_ams_filament_settings(ams_id, slot_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); From 174d23e22fc82a511fd95199750e9440a583cb15 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 12:40:41 +0800 Subject: [PATCH 071/208] Fixes windows light mode text issues --- src/slic3r/GUI/PublishSettingsDialog.cpp | 106 +++++++++++++---------- src/slic3r/GUI/PublishSettingsDialog.hpp | 2 + 2 files changed, 61 insertions(+), 47 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 73016f4902..26ed31dfc3 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -200,8 +200,12 @@ wxBitmap mixed_filament_chip_bitmap(const DynamicPrintConfig& full, size_t slot, // followed by their percent share (or a "->" arrow for gradients), mirroring the main GUI's // sidebar rows - e.g. "[3 purple]: [1 red] 50% + [2 blue] 50%". The whole composition is one // bitmap because a TabCtrl item cannot interleave images into its text; the tab's text is -// therefore empty. Transparent background like the other chips. -wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz) +// therefore empty. The bitmap is opaque and bakes tab_bg (the tab strip's background colour): +// its texts are rasterized with plain GDI on that solid ground, like the sidebar rows and the +// color chips. Text on a transparent bitmap has to go through the graphics-context route, and +// on MSW that degrades into jagged ClearType-fallback glyphs with fringe halos - the same +// reason draw_mixed_gradient_plot renders into an opaque buffer (FilamentBitmapUtils.cpp). +wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz, const wxColour& tab_bg) { const std::vector comps = mixed_slot_components(full, slot); if (comps.empty()) @@ -272,40 +276,26 @@ wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, for (const Piece& p : pieces) width += (p.kind == Piece::Swatch ? swatch_sz : measure_dc.GetTextExtent(p.text).x + gap); - // Phase 2 (draw): transparent background like the page-header chips. + // Phase 2 (draw): opaque, filled with the tab strip's background colour. Text goes through + // the plain DC on every platform (see the function comment for why the alpha route is + // avoided); chip bitmaps keep their own alpha and composite cleanly onto the fill. wxBitmap composite(width, swatch_sz); wxMemoryDC memdc; -#ifdef __WXOSX__ - composite.UseAlpha(); memdc.SelectObject(composite); -#else - { - wxImage img(width, swatch_sz); - img.InitAlpha(); - memset(img.GetAlpha(), 0, width * swatch_sz); - composite = wxBitmap(std::move(img)); - } - memdc.SelectObject(composite); -#endif - { -#ifdef __WXMSW__ - wxGCDC dc(memdc); -#else - wxDC& dc = memdc; -#endif - dc.SetBackgroundMode(wxTRANSPARENT); - dc.SetFont(::Label::Body_12); - dc.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30"))); - int x = 0; - for (const Piece& p : pieces) { - if (p.kind == Piece::Swatch) { - dc.DrawBitmap(p.bmp, x, 0); - x += swatch_sz; - } else { - const wxSize tsz = measure_dc.GetTextExtent(p.text); - dc.DrawText(p.text, x + gap / 2, (swatch_sz - tsz.y) / 2); - x += tsz.x + gap; - } + memdc.SetBackground(wxBrush(tab_bg)); + memdc.Clear(); + memdc.SetBackgroundMode(wxTRANSPARENT); + memdc.SetFont(::Label::Body_12); + memdc.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30"))); + int x = 0; + for (const Piece& p : pieces) { + if (p.kind == Piece::Swatch) { + memdc.DrawBitmap(p.bmp, x, 0, true); + x += swatch_sz; + } else { + const wxSize tsz = measure_dc.GetTextExtent(p.text); + memdc.DrawText(p.text, x + gap / 2, (swatch_sz - tsz.y) / 2); + x += tsz.x + gap; } } memdc.SelectObject(wxNullBitmap); @@ -546,6 +536,10 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) SetSizerAndFit(w_sizer); fit_to_content(); // initial size only; the dialog is resizable wxGetApp().UpdateDlgDarkUI(this); + // The dark-UI walk re-colours the tab strips after the compositions were baked; rebuild so + // they carry the theme-resolved background (the sidebar resolves its colours at paint time, + // this dialog bakes, so the bake has to happen after the walk). + refresh_mixed_tab_bitmaps(); } // Size the window to its content: width follows the widest tab strip so no filament tab is @@ -1030,7 +1024,7 @@ size_t PublishSettingsDialog::category_index_for( // bitmap; the text is empty because a TabCtrl item cannot interleave images into // its text. const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); - const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20)); + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20), target->GetBackgroundColour()); if (tab_bmp.IsOk()) target->AppendItem(wxString(), tab_bmp); else @@ -1891,28 +1885,46 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) for (size_t category_index = 0; category_index < m_categories.size(); ++category_index) { const Category& category = m_categories[category_index]; - if (category.section != Section::Material) + if (category.section != Section::Material || category.is_mixed) continue; - const SectionGroup& section = m_sections[category.group]; - if (category.is_mixed) { - // The tab carries the full composition bitmap (mix chip + components + percents); - // the page header has no chip/title to refresh. - const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full, category.filament_slot, FromDIP(20)); - if (tab_bmp.IsOk()) { - const auto iter = std::find(section.mixed_categories.begin(), section.mixed_categories.end(), category_index); - if (iter != section.mixed_categories.end() && section.mixed_tabs != nullptr) - section.mixed_tabs->SetItemBitmap(static_cast(iter - section.mixed_categories.begin()), tab_bmp); - } - } else if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), - std::to_string(category.filament_slot + 1), FromDIP(20), FromDIP(20))) { + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), + std::to_string(category.filament_slot + 1), FromDIP(20), FromDIP(20))) { + const SectionGroup& section = m_sections[category.group]; const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); if (iter != section.categories.end()) m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); } } + refresh_mixed_tab_bitmaps(); fit_to_content(); // tab buttons' min widths grew with the DPI: re-fit (incl. resize floor) Refresh(); } +void PublishSettingsDialog::refresh_mixed_tab_bitmaps() +{ + // The mixed-tab composition bitmaps bake the tab strip's background colour and DPI-scaled + // text, so both a theme flip and a DPI change have to rebuild them. + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + for (SectionGroup& section : m_sections) { + if (section.mixed_tabs == nullptr) + continue; + const wxColour tab_bg = section.mixed_tabs->GetBackgroundColour(); + for (size_t i = 0; i < section.mixed_categories.size(); ++i) { + const Category& category = m_categories[section.mixed_categories[i]]; + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full, category.filament_slot, FromDIP(20), tab_bg); + if (tab_bmp.IsOk()) + section.mixed_tabs->SetItemBitmap(static_cast(i), tab_bmp); + } + } +} + +void PublishSettingsDialog::on_sys_color_changed() +{ + // The mixed-tab compositions bake the tab strip's background colour: rebuild them when the + // theme changes (on_dpi_changed covers rescales). + refresh_mixed_tab_bitmaps(); + Refresh(); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 8d59192309..f2dcf70bba 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -58,9 +58,11 @@ public: protected: void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override; private: void fit_to_content(); + void refresh_mixed_tab_bitmaps(); // Which part of the settings the row/category came from. enum class Section { Print, Printer, Material }; From 49c4b09db62dae4d478d15edb21b9181de5ba194 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 14:56:03 +0800 Subject: [PATCH 072/208] Show alias instead of full name in publish dialog --- src/slic3r/GUI/PublishSettingsDialog.cpp | 47 +++++++++++++----------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 26ed31dfc3..fcc2816b06 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -93,8 +93,12 @@ wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPr { if (slot < bundle->filament_presets.size()) { const Preset* preset = bundle->filaments.find_preset(bundle->filament_presets[slot]); - if (preset != nullptr && !preset->name.empty()) - return from_u8(material_display_name(preset->name)); + if (preset != nullptr && !preset->name.empty()) { + // Display the name the sidebar does: the alias (already bare-name + variant-tail + // stripped for root filament presets). + const std::string& display = preset->alias.empty() ? get_preset_bare_name(preset->name) : preset->alias; + return from_u8(material_display_name(display)); + } } const PublishMaterialIdentity identity = material_identity(slot, full); if (!identity.type.empty()) @@ -250,7 +254,7 @@ wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, { const wxBitmap chip = mixed_filament_chip_bitmap(full, slot, swatch_sz); - has_lead = chip.IsOk(); + has_lead = chip.IsOk(); if (has_lead) pieces.push_back({Piece::Swatch, chip, wxString()}); } @@ -357,7 +361,8 @@ public: } auto* reason = new wxStaticText(this, wxID_ANY, - issue.reason == MixedDependencyIssue::Reason::Disabled ? _L("not enabled") : _L("material not published")); + issue.reason == MixedDependencyIssue::Reason::Disabled ? _L("not enabled") : + _L("material not published")); reason->SetFont(Label::Body_12); reason->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#989898"))); row->Add(reason, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); @@ -366,7 +371,8 @@ public: content->AddSpacer(FromDIP(6)); } - auto* hint = new wxStaticText(this, wxID_ANY, + auto* hint = new wxStaticText( + this, wxID_ANY, _L("To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement.")); hint->SetFont(Label::Body_12); hint->Wrap(FromDIP(380)); @@ -1024,7 +1030,7 @@ size_t PublishSettingsDialog::category_index_for( // bitmap; the text is empty because a TabCtrl item cannot interleave images into // its text. const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); - const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20), target->GetBackgroundColour()); + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20), target->GetBackgroundColour()); if (tab_bmp.IsOk()) target->AppendItem(wxString(), tab_bmp); else @@ -1191,8 +1197,7 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV if (spec.tri_weights.size() == 3 && n == 3 && !spec.is_gradient) { // Ternary mix: read-only miniature of the MixedFilamentDialog's triangle picker. - const MixedTriangleTheme tri_theme{StateColor::darkModeColorFor(*wxWHITE), - StateColor::darkModeColorFor(wxColour("#CECECE")), + const MixedTriangleTheme tri_theme{StateColor::darkModeColorFor(*wxWHITE), StateColor::darkModeColorFor(wxColour("#CECECE")), StateColor::darkModeColorFor(wxColour("#262E30")), StateColor::darkModeColorFor(wxColour(107, 107, 107))}; draw_mixed_triangle_picker(pdc, rc.GetSize(), {spec.component_colours[0], spec.component_colours[1], spec.component_colours[2]}, @@ -1204,21 +1209,21 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV // solid segment per component. if (n == 2) { const int bar_h = FromDIP(27); - draw_mixed_ratio_blend_bar(pdc, wxRect(rc.x, rc.y, rc.width, bar_h), spec.component_colours[0], - spec.component_colours[1], spec.ratios[1]); + draw_mixed_ratio_blend_bar(pdc, wxRect(rc.x, rc.y, rc.width, bar_h), spec.component_colours[0], spec.component_colours[1], + spec.ratios[1]); // Read-only twin of the dialog's left/right percentage labels. pdc.SetFont(::Label::Body_12); pdc.SetTextForeground(StateColor::darkModeColorFor(wxColour(107, 107, 107))); const wxString la = wxString::Format("%d%%", int(std::lround(spec.ratios[0] * 100.0))); const wxString lb = wxString::Format("%d%%", int(std::lround(spec.ratios[1] * 100.0))); - const int lab_y = rc.y + bar_h + FromDIP(2); + const int lab_y = rc.y + bar_h + FromDIP(2); pdc.DrawText(la, rc.x, lab_y); pdc.DrawText(lb, rc.x + rc.width - pdc.GetTextExtent(lb).GetWidth(), lab_y); } else { draw_mixed_ratio_segments(pdc, rc, spec.component_colours, spec.ratios); // Percent label centred in each segment wide enough to hold it. std::vector shares = spec.ratios; - double total = 0.0; + double total = 0.0; for (double r : shares) total += r; if (total <= 0.0) { @@ -1228,10 +1233,10 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV pdc.SetFont(::Label::Body_12); int x0 = rc.x; for (size_t i = 0; i < n; ++i) { - const int x1 = (i + 1 < n) - ? rc.x + int(std::lround(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0) / total * double(rc.width))) - : rc.x + rc.width; - const int w = std::max(1, x1 - x0); + const int x1 = (i + 1 < n) ? rc.x + int(std::lround(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0) / + total * double(rc.width))) : + rc.x + rc.width; + const int w = std::max(1, x1 - x0); const wxString text = wxString::Format("%d%%", int(std::lround(shares[i] / total * 100.0))); const wxSize tsz = pdc.GetTextExtent(text); if (tsz.GetWidth() + FromDIP(4) <= w) { @@ -1254,10 +1259,10 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV StateColor::darkModeColorFor(wxColour(172, 172, 172)), StateColor::darkModeColorFor(*wxWHITE)}; std::vector curves; - std::vector anchors; + std::vector anchors; if (spec.gradient_samples.size() >= 2 && n >= 2) { const wxRect plot = mixed_gradient_plot_rect(rc.GetSize()); - auto lift_alpha = [](wxColour c) { + auto lift_alpha = [](wxColour c) { if (c.Alpha() == 0) c.Set(c.Red(), c.Green(), c.Blue(), 150); return c; @@ -1288,8 +1293,8 @@ void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedV // with, so nothing else has to change). Sizes mirror the MixedFilamentDialog controls: the // gradient plot and triangle picker match the editor's 260x200 / 160x160, the ratio bar is // the dialog's 27px bar plus its label line. - int viz_h; - int viz_w; + int viz_h; + int viz_w; if (spec.is_gradient) { viz_w = 260; viz_h = 200; @@ -1890,7 +1895,7 @@ void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), std::to_string(category.filament_slot + 1), FromDIP(20), FromDIP(20))) { const SectionGroup& section = m_sections[category.group]; - const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); + const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); if (iter != section.categories.end()) m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); } From 7133d6b22557b7ba664c8b9005388867df4980f2 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 16:59:25 +0800 Subject: [PATCH 073/208] Added wiki and youtube guide link as placeholders. Add to recently opened in home screen after publishing. Show PUB badge. Add .published as a file save name hint. --- resources/web/homepage/css/home.css | 29 ++++++++++++++ resources/web/homepage/js/home.js | 5 ++- src/libslic3r/Format/bbs_3mf.cpp | 50 ++++++++++++++++++++++++ src/libslic3r/Format/bbs_3mf.hpp | 3 ++ src/slic3r/GUI/MainFrame.cpp | 15 ++++++- src/slic3r/GUI/MainFrame.hpp | 2 + src/slic3r/GUI/Plater.cpp | 39 +++++++++++------- src/slic3r/GUI/PublishSettingsDialog.cpp | 19 +++++++++ 8 files changed, 145 insertions(+), 17 deletions(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index e99d22ec64..395dcc9356 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -572,6 +572,35 @@ body word-break: break-all; } +.FileNamePack +{ + display: flex; + align-items: center; + min-width: 0; + overflow: hidden; +} + +.FileNamePack .FileName +{ + flex: 1 1 auto; + min-width: 0; +} + +.FilePublishedBadge +{ + flex: 0 0 auto; + margin-right: 4px; + padding: 0 4px; + height: 16px; + line-height: 16px; + font-size: 10px; + font-weight: 600; + color: #FFFFFF; + background-color: #00AE42; + border-radius: 2px; + white-space: nowrap; +} + .FileDate { color: #A8A8A8; diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index f522c44bed..3cb5ff4fb3 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -219,15 +219,18 @@ function ShowRecentFileList( pList ) let sImg=OneFile["image"] || sImages[sPath]; let sTime=OneFile['time']; let sName=OneFile['project_name']; + let sPublished=OneFile['published'] == '1'; sImages[sPath] = sImg; //let index=sPath.lastIndexOf('\\')>0?sPath.lastIndexOf('\\'):sPath.lastIndexOf('\/'); //let sShortName=sPath.substring(index+1,sPath.length); + let sBadge=sPublished? 'PUB':''; + let TmpHtml='
'+ ''+ '
No Image
'+ - '
'+sName+'
'+ + '
'+sBadge+'
'+sName+'
'+ '
'+sTime+'
'+ '
'; diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index ed88511d9c..3a3ee20e6f 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -9205,6 +9205,56 @@ std::string bbs_3mf_get_thumbnail(const char *path) return data; } +bool bbs_3mf_is_published(const std::string &path) +{ + mz_zip_archive archive; + mz_zip_zero_struct(&archive); + + struct close_lock + { + mz_zip_archive *archive; + void close() + { + if (archive) { + close_zip_reader(archive); + archive = nullptr; + } + } + ~close_lock() { close(); } + } lock{&archive}; + + if (!open_zip_reader(&archive, path)) + return false; + + // Read just the model XML and locate the published metadata node; no geometry parsing. + int index = mz_zip_reader_locate_file(&archive, MODEL_FILE.c_str(), nullptr, 0); + if (index < 0) + return false; + mz_zip_archive_file_stat stat; + if (!mz_zip_reader_file_stat(&archive, index, &stat)) + return false; + std::string xml(stat.m_uncomp_size, '\0'); + if (!mz_zip_reader_extract_to_mem(&archive, index, xml.data(), xml.size(), 0)) + return false; + + const std::string needle = std::string(""; + size_t pos = xml.find(needle); + if (pos == std::string::npos) + return false; + pos += needle.size(); + size_t end = xml.find("", pos); + if (end == std::string::npos) + return false; + + size_t value_begin = pos, value_end = end; + while (value_begin < value_end && (xml[value_begin] == ' ' || xml[value_begin] == '\t' || xml[value_begin] == '\n' || xml[value_begin] == '\r')) + ++value_begin; + while (value_end > value_begin && (xml[value_end - 1] == ' ' || xml[value_end - 1] == '\t' || xml[value_end - 1] == '\n' || xml[value_end - 1] == '\r')) + --value_end; + + return is_published_3mf_flag(xml.substr(value_begin, value_end - value_begin)); +} + bool load_gcode_3mf_from_stream(std::istream &data, DynamicPrintConfig *config, Model *model, PlateDataPtrs *plate_data_list, Semver *file_version) { CNumericLocalesSetter locales_setter; diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 2e1600737b..768ae7bcfe 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -293,6 +293,9 @@ extern bool load_bbs_3mf(const char* path, DynamicPrintConfig* config, ConfigSub extern std::string bbs_3mf_get_thumbnail(const char * path); +// Lightweight check: does this 3mf carry the "published" (orca_published == "1") marker? Only reads the 3D/3dmodel.model metadata node +extern bool bbs_3mf_is_published(const std::string &path); + extern bool load_gcode_3mf_from_stream(std::istream & data, DynamicPrintConfig* config, Model* model, PlateDataPtrs* plate_data_list, Semver* file_version); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 3eb36154fc..7d73d884b0 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -4237,15 +4237,23 @@ std::wstring MainFrame::FileHistory::GetThumbnailUrl(int index) const return wss.str(); } +bool MainFrame::FileHistory::GetPublished(int index) const +{ + return index >= 0 && index < static_cast(m_published_files.size()) && m_published_files[index]; +} + void MainFrame::FileHistory::AddFileToHistory(const wxString &file) { if (this->m_fileMaxFiles == 0) return; wxFileHistory::AddFileToHistory(file); - if (m_load_called) + if (m_load_called) { m_thumbnails.push_front(bbs_3mf_get_thumbnail(into_u8(file).c_str())); - else + m_published_files.push_front(bbs_3mf_is_published(into_u8(file))); + } else { m_thumbnails.push_front(""); + m_published_files.push_front(false); + } } void MainFrame::FileHistory::RemoveFileFromHistory(size_t i) @@ -4254,6 +4262,7 @@ void MainFrame::FileHistory::RemoveFileFromHistory(size_t i) return; wxFileHistory::RemoveFileFromHistory(i); m_thumbnails.erase(m_thumbnails.begin() + i); + m_published_files.erase(m_published_files.begin() + i); } size_t MainFrame::FileHistory::FindFileInHistory(const wxString & file) @@ -4269,6 +4278,7 @@ void MainFrame::FileHistory::LoadThumbnails() if (!thumbnail.empty()) { m_thumbnails[i] = thumbnail; } + m_published_files[i] = bbs_3mf_is_published(into_u8(GetHistoryFile(i))); } }); m_load_called = true; @@ -4289,6 +4299,7 @@ void MainFrame::get_recent_projects(boost::property_tree::wptree &tree, int imag std::wstring proj = m_recent_projects.GetHistoryFile(i).ToStdWstring(); item.put(L"project_name", proj.substr(proj.find_last_of(L"/\\") + 1)); item.put(L"path", proj); + item.put(L"published", m_recent_projects.GetPublished(i) ? L"1" : L"0"); boost::system::error_code ec; std::time_t t = boost::filesystem::last_write_time(proj, ec); if (!ec) { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index c09a29abb3..278c7e7f30 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -179,6 +179,7 @@ class MainFrame : public DPIFrame { FileHistory(int max) : wxFileHistory(max) {} std::wstring GetThumbnailUrl(int index) const; + bool GetPublished(int index) const; virtual void AddFileToHistory(const wxString &file); virtual void RemoveFileFromHistory(size_t i); @@ -189,6 +190,7 @@ class MainFrame : public DPIFrame void SetMaxFiles(int max); private: std::deque m_thumbnails; + std::deque m_published_files; // parallel to m_thumbnails: is it a published 3mf? bool m_load_called = false; }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d2c9c3589f..7a3789bc96 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5596,11 +5596,11 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na // Count off filament_is_mixed, not filament_presets or the combos: the extruder-count spinner // reaches this before the sidebar has rebuilt, and update_multi_material_filament_presets() // can have grown filament_presets alone. - auto *bundle = wxGetApp().preset_bundle; - size_t insert_pos = bundle->num_physical_filaments(); - size_t total = insert_pos + bundle->num_mixed_filaments(); - int filament_count = (int)(total + 1); - std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + auto* bundle = wxGetApp().preset_bundle; + size_t insert_pos = bundle->num_physical_filaments(); + size_t total = insert_pos + bundle->num_mixed_filaments(); + int filament_count = (int) (total + 1); + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); bundle->set_num_filaments(filament_count, new_color); // Maintain physical-first ordering: rotate the new slot from end to insert_pos. @@ -7018,7 +7018,7 @@ struct Plater::priv void handle_textured_mesh_import(Slic3r::Model& model, const std::vector& obj_idxs, std::function cancel_callback = {}); fs::path get_export_file_path(GUI::FileType file_type); - wxString get_export_file(GUI::FileType file_type, const wxString& title = {}); + wxString get_export_file(GUI::FileType file_type, const wxString& title = {}, bool published = false); // BBS void load_auxiliary_files(); @@ -9069,7 +9069,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (const std::string& key : published_config.skipped_keys) message += "\n-" + key; // Informational: the load succeeded, these keys were skipped. - notify_manager->bbl_show_3mf_warn_notification(message, NotificationManager::NotificationLevel::WarningNotificationLevel); + notify_manager + ->bbl_show_3mf_warn_notification(message, + NotificationManager::NotificationLevel::WarningNotificationLevel); } // BBS: notify the user about slot materials that were replaced while @@ -9080,7 +9082,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ for (const std::string& replacement : published_config.material_replacements) message += "\n-" + replacement; // Informational: the load succeeded, the slots were adapted. - notify_manager->bbl_show_3mf_warn_notification(message, NotificationManager::NotificationLevel::WarningNotificationLevel); + notify_manager + ->bbl_show_3mf_warn_notification(message, + NotificationManager::NotificationLevel::WarningNotificationLevel); } ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); @@ -10026,7 +10030,7 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) return output_file; } -wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& title) +wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& title, bool published) { wxString wildcard; switch (file_type) { @@ -10060,7 +10064,10 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& break; } case FT_3MF: { - output_file.replace_extension("3mf"); + // A published export is suggested as ".published.3mf" so the role is visible in the + // dialog and in the recent-files list. This is only a pre-filled suggestion; the user's + // typed filename wins, keeping a plain ".3mf" output fully valid. + output_file.replace_extension(published ? "published.3mf" : "3mf"); dlg_title = title.empty() ? _L("Save file as") : title; break; } @@ -18262,7 +18269,7 @@ void Plater::export_core_3mf() int Plater::export_published_3mf(const std::vector& published_keys, const std::vector& material_keys) { - wxString path = p->get_export_file(FT_3MF, _L("Publish 3MF file as:")); + wxString path = p->get_export_file(FT_3MF, _L("Publish 3MF file as:"), true); if (path.empty() || path == "") return wxID_CANCEL; @@ -18397,6 +18404,10 @@ int Plater::export_published_3mf(const std::vector& published_keys, return wxID_CANCEL; } restore_now(); + + // Register the exported file in the "Recently opened" list + wxGetApp().mainframe->add_to_recent_projects(path); + return wxID_YES; } @@ -21869,9 +21880,9 @@ void Plater::show_object_info() int non_manifold_edges = 0; auto mesh_errors = p->sidebar->obj_list()->get_mesh_errors_info(&info_manifold, &non_manifold_edges); - if (non_manifold_edges > 0) { - info_manifold += "\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh."); - } + if (non_manifold_edges > 0) { + info_manifold += "\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh."); + } info_manifold = "" + info_manifold + ""; info_text += into_u8(info_manifold); diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index fcc2816b06..6b641e34da 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -515,6 +516,24 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) msg->Wrap(-1); w_sizer->Add(msg, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); + // Guide link: opens the (still WIP) Publish 3MF docs in a new window/tab, keeping the dialog open. + wxStaticText* guide_link = new wxStaticText(this, wxID_ANY, _L("Publish 3MF Wiki Guide")); + guide_link->SetFont(Label::Body_13); + guide_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); + guide_link->SetCursor(wxCURSOR_HAND); + guide_link->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { + wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html", wxBROWSER_NEW_WINDOW); + }); + w_sizer->Add(guide_link, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); + + // Placeholder guide link: a Publish 3MF video URL, right below the wiki guide link. + wxStaticText* video_link = new wxStaticText(this, wxID_ANY, _L("Publish 3MF YouTube Video (Placeholder)")); + video_link->SetFont(Label::Body_13); + video_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); + video_link->SetCursor(wxCURSOR_HAND); + video_link->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { wxLaunchDefaultBrowser("https://www.youtube.com", wxBROWSER_NEW_WINDOW); }); + w_sizer->Add(video_link, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); + w_sizer->Add(f_bar, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); w_sizer->Add(m_outer_tabs, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); w_sizer->Add(m_outer_host, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); From 6ec904074b1630b2571e493ea2829acbd27b6837 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 1 Sep 2026 16:24:33 +0800 Subject: [PATCH 074/208] Give generic filaments one name and one identity across every vendor --- resources/profiles/Anker.json | 170 +- .../Anker Generic PLA Silk 0.2 nozzle.json | 16 - .../Anker Generic PLA Silk 0.25 nozzle.json | 16 - .../filament/Anker Generic PLA Silk.json | 16 - .../Anker Generic PLA+ 0.2 nozzle.json | 16 - .../Anker Generic PLA+ 0.25 nozzle.json | 16 - .../Anker/filament/Anker Generic PLA+.json | 16 - .../Anker/filament/Anker Generic PLA-CF.json | 16 - .../Anker/filament/Anker Generic PLA.json | 16 - .../Anker/filament/Anker Generic PVA.json | 16 - .../Anker/filament/Anker Generic TPU.json | 16 - ...son => Generic ABS @Anker 0.2 nozzle.json} | 7 +- ...on => Generic ABS @Anker 0.25 nozzle.json} | 7 +- .../filament/Generic ABS @Anker base.json} | 4 +- ...neric ASA.json => Generic ABS @Anker.json} | 7 +- ...son => Generic ASA @Anker 0.2 nozzle.json} | 7 +- ...on => Generic ASA @Anker 0.25 nozzle.json} | 7 +- ...base.json => Generic ASA @Anker base.json} | 4 +- ...c PETG-CF.json => Generic ASA @Anker.json} | 7 +- ...json => Generic PA @Anker 0.2 nozzle.json} | 7 +- ...son => Generic PA @Anker 0.25 nozzle.json} | 7 +- .../filament/Generic PA @Anker base.json} | 4 +- ...Generic PC.json => Generic PA @Anker.json} | 7 +- ...se.json => Generic PA-CF @Anker base.json} | 4 +- ...eric PA.json => Generic PA-CF @Anker.json} | 7 +- ...json => Generic PC @Anker 0.2 nozzle.json} | 7 +- ...son => Generic PC @Anker 0.25 nozzle.json} | 7 +- ...@base.json => Generic PC @Anker base.json} | 4 +- ...eric PA-CF.json => Generic PC @Anker.json} | 7 +- ...on => Generic PETG @Anker 0.2 nozzle.json} | 7 +- ...n => Generic PETG @Anker 0.25 nozzle.json} | 7 +- ...ase.json => Generic PETG @Anker base.json} | 4 +- .../Anker/filament/Generic PETG @Anker.json | 17 + ....json => Generic PETG-CF @Anker base.json} | 4 +- .../filament/Generic PETG-CF @Anker.json | 17 + ...son => Generic PLA @Anker 0.2 nozzle.json} | 7 +- ...on => Generic PLA @Anker 0.25 nozzle.json} | 7 +- ...base.json => Generic PLA @Anker base.json} | 4 +- ...eric PETG.json => Generic PLA @Anker.json} | 7 +- .../Generic PLA Silk @Anker 0.2 nozzle.json | 17 + .../Generic PLA Silk @Anker 0.25 nozzle.json | 17 + ...json => Generic PLA Silk @Anker base.json} | 4 +- .../filament/Generic PLA Silk @Anker.json | 17 + .../Generic PLA+ @Anker 0.2 nozzle.json | 17 + .../Generic PLA+ @Anker 0.25 nozzle.json | 17 + ...ase.json => Generic PLA+ @Anker base.json} | 4 +- .../Anker/filament/Generic PLA+ @Anker.json | 17 + ...e.json => Generic PLA-CF @Anker base.json} | 4 +- .../Anker/filament/Generic PLA-CF @Anker.json | 17 + ...base.json => Generic PVA @Anker base.json} | 4 +- ...neric ABS.json => Generic PVA @Anker.json} | 7 +- ...base.json => Generic TPU @Anker base.json} | 4 +- .../Anker/filament/Generic TPU @Anker.json | 17 + .../Anker/machine/Anker M5 0.2 nozzle.json | 2 +- .../Anker/machine/Anker M5 0.25 nozzle.json | 2 +- .../Anker/machine/Anker M5 0.4 nozzle.json | 2 +- .../Anker/machine/Anker M5 0.6 nozzle.json | 2 +- .../Anker M5 All-Metal 0.2 nozzle.json | 2 +- .../Anker M5 All-Metal 0.25 nozzle.json | 2 +- .../Anker M5 All-Metal 0.4 nozzle.json | 2 +- .../Anker M5 All-Metal 0.6 nozzle.json | 2 +- .../machine/Anker M5 All-Metal Hot End.json | 2 +- .../profiles/Anker/machine/Anker M5.json | 2 +- .../Anker/machine/Anker M5C 0.2 nozzle.json | 2 +- .../Anker/machine/Anker M5C 0.25 nozzle.json | 2 +- .../Anker/machine/Anker M5C 0.4 nozzle.json | 2 +- .../Anker/machine/Anker M5C 0.6 nozzle.json | 2 +- .../profiles/Anker/machine/Anker M5C.json | 2 +- resources/profiles/Anycubic.json | 2468 +++++----- ...ubic ASA @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...bic PETG @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Max 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json | 2 +- ...PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json | 2 +- ... PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.2 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.6 nozzle.json | 2 +- ...ubic PLA @Anycubic Kobra 3 0.8 nozzle.json | 2 +- ...ic PLA @Anycubic Kobra Neo 0.4 nozzle.json | 2 +- ...PLA Glow @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...low @Anycubic Kobra S1 Max 0.4 nozzle.json | 678 +-- ...low @Anycubic Kobra S1 Max 0.6 nozzle.json | 702 +-- ...low @Anycubic Kobra S1 Max 0.8 nozzle.json | 702 +-- ...gh Speed @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...LA Matte @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...c PLA SE @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...PLA Slik @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...bic PLA+ @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 672 +-- ...-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 702 +-- ...-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 702 +-- ...eric ABS @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ic ABS.json => Generic ABS @Anycubic.json} | 8 +- ...ic ASA.json => Generic ASA @Anycubic.json} | 7 +- ...eric PA.json => Generic PA @Anycubic.json} | 7 +- ...A-CF.json => Generic PA-CF @Anycubic.json} | 7 +- ...eric PC.json => Generic PC @Anycubic.json} | 7 +- ... PETG.json => Generic PETG @Anycubic.json} | 7 +- ...ic PLA.json => Generic PLA @Anycubic.json} | 7 +- ...-CF.json => Generic PLA-CF @Anycubic.json} | 7 +- ...ic PVA.json => Generic PVA @Anycubic.json} | 7 +- ...eric TPU @Anycubic Kobra 3 0.4 nozzle.json | 2 +- ...ic TPU.json => Generic TPU @Anycubic.json} | 8 +- .../Anycubic 4Max Pro 2 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic 4Max Pro 2.json | 2 +- .../Anycubic/machine/Anycubic 4Max Pro.json | 2 +- .../machine/Anycubic Chiron 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Chiron.json | 2 +- .../machine/Anycubic Kobra 0.4 nozzle.json | 2 +- .../machine/Anycubic Kobra 2 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Kobra 2.json | 2 +- .../Anycubic Kobra Max 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Kobra Max.json | 2 +- .../Anycubic Kobra Neo 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Kobra Neo.json | 2 +- .../Anycubic Kobra Plus 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Kobra Plus.json | 2 +- .../Anycubic/machine/Anycubic Kobra.json | 2 +- .../Anycubic/machine/Anycubic Predator.json | 2 +- .../machine/Anycubic Vyper 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic Vyper.json | 2 +- .../Anycubic i3 Mega S 0.4 nozzle.json | 2 +- .../Anycubic/machine/Anycubic i3 Mega S.json | 2 +- resources/profiles/Artillery.json | 26 +- ...lery ABS @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../Artillery/filament/Artillery ABS.json | 2 +- ...lery ASA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...llery PA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...ry PA-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...llery PC @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PET @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...ery PETG @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...TG Basic @Artillery M1 Pro 0.4 nozzle.json | 2 +- ... PETG-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../Artillery/filament/Artillery PETG.json | 2 +- ...LA Basic @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...A Basic+ @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../filament/Artillery PLA Basic.json | 2 +- ...LA Matte @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../filament/Artillery PLA Matte.json | 2 +- ...PLA Silk @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../filament/Artillery PLA Silk.json | 2 +- .../filament/Artillery PLA Tough.json | 2 +- ...y PLA-CF @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery PVA @Artillery M1 Pro 0.4 nozzle.json | 2 +- ...lery TPU @Artillery M1 Pro 0.4 nozzle.json | 2 +- .../Artillery/filament/Artillery TPU.json | 2 +- ...c ABS.json => Generic ABS @Artillery.json} | 7 +- ...c ASA.json => Generic ASA @Artillery.json} | 7 +- ...PETG.json => Generic PETG @Artillery.json} | 7 +- ...c PLA.json => Generic PLA @Artillery.json} | 7 +- ...CF.json => Generic PLA-CF @Artillery.json} | 7 +- ...c TPU.json => Generic TPU @Artillery.json} | 7 +- .../machine/Artillery Genius 0.4 nozzle.json | 2 +- .../Artillery Genius Pro 0.4 nozzle.json | 2 +- .../machine/Artillery Genius Pro.json | 2 +- .../Artillery/machine/Artillery Genius.json | 2 +- .../machine/Artillery Hornet 0.4 nozzle.json | 2 +- .../Artillery/machine/Artillery Hornet.json | 2 +- .../Artillery Sidewinder X1 0.4 nozzle.json | 2 +- .../machine/Artillery Sidewinder X1.json | 2 +- .../Artillery Sidewinder X2 0.4 nozzle.json | 2 +- .../machine/Artillery Sidewinder X2.json | 2 +- resources/profiles/Blocks.json | 46 +- ...eric ABS.json => Generic ABS @Blocks.json} | 7 +- ...eric ASA.json => Generic ASA @Blocks.json} | 7 +- ...SA-CF.json => Generic ASA-CF @Blocks.json} | 10 +- ...eneric PA.json => Generic PA @Blocks.json} | 7 +- ... PA-CF.json => Generic PA-CF @Blocks.json} | 7 +- ...eneric PC.json => Generic PC @Blocks.json} | 7 +- ...ic PETG.json => Generic PETG @Blocks.json} | 7 +- ...eric PLA.json => Generic PLA @Blocks.json} | 7 +- ...LA-CF.json => Generic PLA-CF @Blocks.json} | 7 +- ...eric PVA.json => Generic PVA @Blocks.json} | 7 +- ...eric TPU.json => Generic TPU @Blocks.json} | 7 +- .../Blocks/machine/BLOCKS Pro S100.json | 2 +- .../Blocks/machine/BLOCKS RD50 V2.json | 2 +- .../profiles/Blocks/machine/BLOCKS RF50.json | 2 +- .../Blocks/machine/fdm_klipper_common.json | 2 +- resources/profiles/CONSTRUCT3D.json | 14 +- ...G.json => Generic High Flow PETG @C1.json} | 7 +- ...eneric PETG.json => Generic PETG @C1.json} | 7 +- ... Generic PLA.json => Generic PLA @C1.json} | 7 +- .../CONSTRUCT3D/machine/Construct 1 XL.json | 2 +- .../CONSTRUCT3D/machine/Construct 1.json | 2 +- resources/profiles/Chuanying.json | 46 +- ...uanying ABS @Chuanying X1 0.25 Nozzle.json | 2 +- ...uanying ASA @Chuanying X1 0.25 Nozzle.json | 2 +- ...ying HS PLA @Chuanying X1 0.25 Nozzle.json | 2 +- ...anying PETG @Chuanying X1 0.25 Nozzle.json | 2 +- ...uanying PLA @Chuanying X1 0.25 Nozzle.json | 2 +- ...ng PLA-SILK @Chuanying X1 0.25 Nozzle.json | 2 +- ...c ABS.json => Generic ABS @Chuanying.json} | 7 +- ...c ASA.json => Generic ASA @Chuanying.json} | 7 +- ...HIPS.json => Generic HIPS @Chuanying.json} | 11 +- ...LA.json => Generic HS PLA @Chuanying.json} | 7 +- ...PETG.json => Generic PETG @Chuanying.json} | 7 +- ...json => Generic PETG-CF10 @Chuanying.json} | 7 +- ...c PLA.json => Generic PLA @Chuanying.json} | 7 +- ....json => Generic PLA-CF10 @Chuanying.json} | 7 +- ....json => Generic PLA-Silk @Chuanying.json} | 7 +- ...c PVA.json => Generic PVA @Chuanying.json} | 11 +- ...c TPU.json => Generic TPU @Chuanying.json} | 7 +- .../Chuanying/machine/Chuanying X1.json | 2 +- .../machine/fdm_chuanying_common.json | 2 +- .../Chuanying/machine/fdm_klipper_common.json | 2 +- .../Chuanying/machine/fdm_x1_common.json | 2 +- resources/profiles/Co Print.json | 18 +- ...ric ABS.json => Generic ABS @CoPrint.json} | 9 +- ...c PETG.json => Generic PETG @CoPrint.json} | 9 +- ...ric PLA.json => Generic PLA @CoPrint.json} | 10 +- ...ric TPU.json => Generic TPU @CoPrint.json} | 9 +- ...hromaSet 0.4 nozzle - Ender-3 V3 Plus.json | 2 +- ...int ChromaSet 0.4 nozzle - Ender-3 V3.json | 2 +- .../Co Print ChromaSet 0.4 nozzle fast.json | 2 +- .../Co Print ChromaSet 0.4 nozzle.json | 2 +- .../Co Print/machine/Co Print ChromaSet.json | 2 +- .../Co Print/machine/fdm_coprint_common.json | 2 +- resources/profiles/CoLiDo.json | 34 +- ....json => Generic ABS @CoLiDo DIY 4.0.json} | 9 +- ... X16.json => Generic ABS @CoLiDo X16.json} | 9 +- ...json => Generic PETG @CoLiDo DIY 4.0.json} | 9 +- ...X16.json => Generic PETG @CoLiDo X16.json} | 9 +- ....json => Generic PLA @CoLiDo DIY 4.0.json} | 9 +- ... X16.json => Generic PLA @CoLiDo X16.json} | 9 +- ....json => Generic TPU @CoLiDo DIY 4.0.json} | 9 +- ... X16.json => Generic TPU @CoLiDo X16.json} | 9 +- .../machine/CoLiDo 160 V2 0.4 nozzle.json | 2 +- .../CoLiDo/machine/CoLiDo 160 V2.json | 2 +- .../machine/CoLiDo DIY 4.0 0.4 nozzle.json | 2 +- .../CoLiDo/machine/CoLiDo DIY 4.0.json | 2 +- .../CoLiDo/machine/CoLiDo X16 0.4 nozzle.json | 2 +- .../profiles/CoLiDo/machine/CoLiDo X16.json | 2 +- resources/profiles/Comgrow.json | 14 +- .../Comgrow/filament/Comgrow T300 PLA.json | 2 +- ...ric ABS.json => Generic ABS @Comgrow.json} | 7 +- ...c PETG.json => Generic PETG @Comgrow.json} | 7 +- ...ric PLA.json => Generic PLA @Comgrow.json} | 7 +- .../Comgrow/machine/Comgrow T500.json | 2 +- .../Comgrow/machine/fdm_comgrow_common.json | 2 +- resources/profiles/Creality.json | 230 +- .../Creality Generic ASA-CF @Hi-all.json | 19 - .../Creality Generic PETG-CF @Hi-all.json | 19 - .../Creality Generic PLA @Hi-all.json | 2 +- .../Creality Generic PLA-CF @Hi-all.json | 15 - ... Generic ABS @Creality Ender-3V3-all.json} | 7 +- ...Generic ABS @Creality Ender-5Max-all.json} | 7 +- ...json => Generic ABS @Creality Hi-all.json} | 8 +- ...json => Generic ABS @Creality K1-all.json} | 11 +- ...json => Generic ABS @Creality K2-all.json} | 12 +- ...ic ABS.json => Generic ABS @Creality.json} | 7 +- ... Generic ASA @Creality Ender-3V3-all.json} | 7 +- ...Generic ASA @Creality Ender-5Max-all.json} | 7 +- ...json => Generic ASA @Creality Hi-all.json} | 7 +- ...json => Generic ASA @Creality K1-all.json} | 11 +- ...json => Generic ASA @Creality K2-all.json} | 10 +- ...ic ASA.json => Generic ASA @Creality.json} | 7 +- .../Generic ASA-CF @Creality Hi-all.json | 23 + ... Generic PA @Creality Ender-5Max-all.json} | 7 +- ...eneric PA-CF @Creality Ender-3V3-all.json} | 7 +- ...on => Generic PA-CF @Creality K1-all.json} | 8 +- ...on => Generic PA-CF @Creality K2-all.json} | 10 +- ...A-CF.json => Generic PA-CF @Creality.json} | 7 +- ....json => Generic PC @Creality K1-all.json} | 8 +- ...eric PC.json => Generic PC @Creality.json} | 4 +- ...Generic PETG @Creality Ender-3V3-all.json} | 7 +- ...eneric PETG @Creality Ender-5Max-all.json} | 7 +- ...son => Generic PETG @Creality Hi-all.json} | 8 +- ...son => Generic PETG @Creality K1-all.json} | 11 +- ...son => Generic PETG @Creality K2-all.json} | 12 +- ... PETG.json => Generic PETG @Creality.json} | 7 +- .../Generic PETG-CF @Creality Hi-all.json | 23 + ... Generic PLA @Creality Ender-3V3-all.json} | 7 +- ...Generic PLA @Creality Ender-5Max-all.json} | 7 +- ...json => Generic PLA @Creality K1-all.json} | 11 +- ...json => Generic PLA @Creality K2-all.json} | 12 +- ...ic PLA.json => Generic PLA @Creality.json} | 7 +- ...PLA.json => Generic PLA HF @Creality.json} | 7 +- ...A High Speed @Creality Ender-3V3-all.json} | 9 +- ...eric PLA High Speed @Creality Hi-all.json} | 7 +- ...eric PLA High Speed @Creality K1-all.json} | 9 +- ...eric PLA High Speed @Creality K2-all.json} | 9 +- ...ic PLA Matte @Creality Ender-3V3-all.json} | 9 +- ...> Generic PLA Matte @Creality Hi-all.json} | 7 +- ...> Generic PLA Matte @Creality K1-all.json} | 9 +- ...> Generic PLA Matte @Creality K2-all.json} | 9 +- ...ric PLA Silk @Creality Ender-3V3-all.json} | 9 +- ...=> Generic PLA Silk @Creality Hi-all.json} | 7 +- ...=> Generic PLA Silk @Creality K1-all.json} | 9 +- ...=> Generic PLA Silk @Creality K2-all.json} | 9 +- ...=> Generic PLA Wood @Creality Hi-all.json} | 7 +- .../Generic PLA-CF @Creality Hi-all.json | 16 + ...n => Generic PLA-CF @Creality K1-all.json} | 9 +- ...n => Generic PLA-CF @Creality K2-all.json} | 10 +- ...-CF.json => Generic PLA-CF @Creality.json} | 7 +- ...on => Generic Speed PLA @Creality HF.json} | 7 +- ... Generic TPU @Creality Ender-3V3-all.json} | 7 +- ...Generic TPU @Creality Ender-5Max-all.json} | 7 +- ...json => Generic TPU @Creality Hi-all.json} | 7 +- ...json => Generic TPU @Creality K1-all.json} | 11 +- ...json => Generic TPU @Creality K2-all.json} | 10 +- ...ic TPU.json => Generic TPU @Creality.json} | 7 +- .../Creality CR-10 Max 0.4 nozzle.json | 2 +- .../Creality/machine/Creality CR-10 Max.json | 2 +- .../machine/Creality CR-10 SE 0.2 nozzle.json | 2 +- .../machine/Creality CR-10 SE 0.4 nozzle.json | 2 +- .../machine/Creality CR-10 SE 0.6 nozzle.json | 2 +- .../machine/Creality CR-10 SE 0.8 nozzle.json | 2 +- .../Creality/machine/Creality CR-10 SE.json | 2 +- .../machine/Creality CR-10 V2 0.4 nozzle.json | 2 +- .../Creality/machine/Creality CR-10 V2.json | 2 +- .../machine/Creality CR-10 V3 0.4 nozzle.json | 2 +- .../machine/Creality CR-10 V3 0.6 nozzle.json | 2 +- .../Creality/machine/Creality CR-10 V3.json | 2 +- .../machine/Creality CR-6 Max 0.2 nozzle.json | 2 +- .../machine/Creality CR-6 Max 0.4 nozzle.json | 2 +- .../machine/Creality CR-6 Max 0.6 nozzle.json | 2 +- .../machine/Creality CR-6 Max 0.8 nozzle.json | 2 +- .../Creality/machine/Creality CR-6 Max.json | 2 +- .../machine/Creality CR-6 SE 0.2 nozzle.json | 2 +- .../machine/Creality CR-6 SE 0.4 nozzle.json | 2 +- .../machine/Creality CR-6 SE 0.6 nozzle.json | 2 +- .../machine/Creality CR-6 SE 0.8 nozzle.json | 2 +- .../Creality/machine/Creality CR-6 SE.json | 2 +- .../machine/Creality CR-M4 0.4 nozzle.json | 2 +- .../Creality/machine/Creality CR-M4.json | 2 +- .../machine/Creality Ender-3 0.2 nozzle.json | 2 +- .../machine/Creality Ender-3 0.4 nozzle.json | 2 +- .../machine/Creality Ender-3 0.6 nozzle.json | 2 +- .../machine/Creality Ender-3 0.8 nozzle.json | 2 +- .../Creality Ender-3 Pro 0.2 nozzle.json | 2 +- .../Creality Ender-3 Pro 0.4 nozzle.json | 2 +- .../Creality Ender-3 Pro 0.6 nozzle.json | 2 +- .../Creality Ender-3 Pro 0.8 nozzle.json | 2 +- .../machine/Creality Ender-3 Pro.json | 2 +- .../Creality Ender-3 S1 0.4 nozzle.json | 2 +- .../Creality Ender-3 S1 Plus 0.2 nozzle.json | 2 +- .../Creality Ender-3 S1 Plus 0.4 nozzle.json | 2 +- .../Creality Ender-3 S1 Plus 0.6 nozzle.json | 2 +- .../Creality Ender-3 S1 Plus 0.8 nozzle.json | 2 +- .../machine/Creality Ender-3 S1 Plus.json | 2 +- .../Creality Ender-3 S1 Pro 0.4 nozzle.json | 2 +- .../machine/Creality Ender-3 S1 Pro.json | 2 +- .../Creality/machine/Creality Ender-3 S1.json | 2 +- .../Creality Ender-3 V2 0.4 nozzle.json | 2 +- .../Creality Ender-3 V2 Neo 0.4 nozzle.json | 2 +- .../machine/Creality Ender-3 V2 Neo.json | 2 +- .../Creality/machine/Creality Ender-3 V2.json | 2 +- .../Creality Ender-3 V3 0.4 nozzle.json | 2 +- .../Creality Ender-3 V3 0.6 nozzle.json | 2 +- .../Creality Ender-3 V3 KE 0.2 nozzle.json | 2 +- .../Creality Ender-3 V3 KE 0.4 nozzle.json | 2 +- .../Creality Ender-3 V3 KE 0.6 nozzle.json | 2 +- .../Creality Ender-3 V3 KE 0.8 nozzle.json | 2 +- .../machine/Creality Ender-3 V3 KE.json | 2 +- .../Creality Ender-3 V3 Plus 0.4 nozzle.json | 2 +- .../Creality Ender-3 V3 Plus 0.6 nozzle.json | 2 +- .../machine/Creality Ender-3 V3 Plus.json | 2 +- .../Creality Ender-3 V3 SE 0.2 nozzle.json | 2 +- .../Creality Ender-3 V3 SE 0.4 nozzle.json | 2 +- .../Creality Ender-3 V3 SE 0.6 nozzle.json | 2 +- .../Creality Ender-3 V3 SE 0.8 nozzle.json | 2 +- .../machine/Creality Ender-3 V3 SE.json | 2 +- .../Creality/machine/Creality Ender-3 V3.json | 2 +- .../Creality/machine/Creality Ender-3.json | 2 +- .../machine/Creality Ender-5 0.4 nozzle.json | 2 +- .../machine/Creality Ender-5 Max.json | 2 +- .../Creality Ender-5 Plus 0.4 nozzle.json | 2 +- .../machine/Creality Ender-5 Plus.json | 2 +- ...reality Ender-5 Pro (2019) 0.2 nozzle.json | 2 +- ...eality Ender-5 Pro (2019) 0.25 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 0.3 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 0.4 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 0.5 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 0.6 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 0.8 nozzle.json | 2 +- ...reality Ender-5 Pro (2019) 1.0 nozzle.json | 2 +- .../machine/Creality Ender-5 Pro (2019).json | 2 +- .../Creality Ender-5 S1 0.4 nozzle.json | 2 +- .../Creality/machine/Creality Ender-5 S1.json | 2 +- .../Creality/machine/Creality Ender-5.json | 2 +- .../machine/Creality Ender-5S 0.4 nozzle.json | 2 +- .../Creality/machine/Creality Ender-5S.json | 2 +- .../machine/Creality Ender-6 0.4 nozzle.json | 2 +- .../Creality/machine/Creality Ender-6.json | 2 +- .../Creality/machine/Creality Hi.json | 2 +- .../machine/Creality K1 (0.4 nozzle).json | 2 +- .../machine/Creality K1 (0.6 nozzle).json | 2 +- .../machine/Creality K1 (0.8 nozzle).json | 2 +- .../machine/Creality K1 Max (0.4 nozzle).json | 2 +- .../machine/Creality K1 Max (0.6 nozzle).json | 2 +- .../machine/Creality K1 Max (0.8 nozzle).json | 2 +- .../Creality/machine/Creality K1 Max.json | 2 +- .../Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../machine/Creality K1 Max_CFS-C.json | 2 +- .../machine/Creality K1 SE 0.4 nozzle.json | 2 +- .../machine/Creality K1 SE 0.6 nozzle.json | 2 +- .../machine/Creality K1 SE 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K1 SE.json | 2 +- .../Creality K1 SE_CFS-C 0.4 nozzle.json | 2 +- .../machine/Creality K1 SE_CFS-C.json | 2 +- .../Creality/machine/Creality K1.json | 2 +- .../machine/Creality K1C 0.4 nozzle.json | 2 +- .../machine/Creality K1C 0.6 nozzle.json | 2 +- .../machine/Creality K1C 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K1C.json | 2 +- .../Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../Creality/machine/Creality K1C_CFS-C.json | 2 +- .../machine/Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../Creality/machine/Creality K1_CFS-C.json | 2 +- .../machine/Creality K2 0.2 nozzle.json | 2 +- .../machine/Creality K2 0.4 nozzle.json | 2 +- .../machine/Creality K2 0.6 nozzle.json | 2 +- .../machine/Creality K2 0.8 nozzle.json | 2 +- .../machine/Creality K2 Plus 0.2 nozzle.json | 2 +- .../machine/Creality K2 Plus 0.4 nozzle.json | 2 +- .../machine/Creality K2 Plus 0.6 nozzle.json | 2 +- .../machine/Creality K2 Plus 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K2 Plus.json | 2 +- .../machine/Creality K2 Pro 0.2 nozzle.json | 2 +- .../machine/Creality K2 Pro 0.4 nozzle.json | 2 +- .../machine/Creality K2 Pro 0.6 nozzle.json | 2 +- .../machine/Creality K2 Pro 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K2 Pro.json | 2 +- .../machine/Creality K2 SE 0.4 nozzle.json | 2 +- .../Creality/machine/Creality K2 SE.json | 2 +- .../Creality/machine/Creality K2.json | 2 +- .../Creality Sermoon V1 0.4 nozzle.json | 2 +- .../Creality/machine/Creality Sermoon V1.json | 2 +- .../Creality/machine/fdm_creality_common.json | 2 +- resources/profiles/DeltaMaker.json | 14 +- ...ETG.json => Generic PETG @DeltaMaker.json} | 7 +- ... PLA.json => Generic PLA @DeltaMaker.json} | 7 +- ... TPU.json => Generic TPU @DeltaMaker.json} | 7 +- .../machine/DeltaMaker 2 0.35 nozzle.json | 2 +- .../DeltaMaker/machine/DeltaMaker 2.json | 2 +- .../machine/DeltaMaker 2T 0.5 nozzle.json | 2 +- .../DeltaMaker/machine/DeltaMaker 2T.json | 2 +- .../machine/DeltaMaker 2XT 0.5 nozzle.json | 2 +- .../DeltaMaker/machine/DeltaMaker 2XT.json | 2 +- .../machine/fdm_klipper_common.json | 2 +- resources/profiles/Dremel.json | 18 +- ...json => Generic PLA @Dremel 3D20 all.json} | 9 +- ...json => Generic PLA @Dremel 3D40 all.json} | 9 +- ...json => Generic PLA @Dremel 3D45 all.json} | 9 +- ...eric PLA.json => Generic PLA @Dremel.json} | 7 +- .../machine/Dremel 3D20 0.4 nozzle.json | 2 +- .../profiles/Dremel/machine/Dremel 3D20.json | 2 +- .../machine/Dremel 3D40 0.4 nozzle.json | 2 +- .../profiles/Dremel/machine/Dremel 3D40.json | 2 +- .../machine/Dremel 3D45 0.4 nozzle.json | 2 +- .../profiles/Dremel/machine/Dremel 3D45.json | 2 +- .../Dremel/machine/fdm_dremel_common.json | 2 +- resources/profiles/FLSun.json | 50 +- .../profiles/FLSun/filament/FLSun S1 ABS.json | 2 +- .../profiles/FLSun/filament/FLSun S1 ASA.json | 2 +- .../FLSun/filament/FLSun S1 PETG.json | 2 +- .../filament/FLSun S1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun S1 PLA Silk.json | 2 +- .../profiles/FLSun/filament/FLSun S1 TPU.json | 2 +- .../profiles/FLSun/filament/FLSun T1 ABS.json | 2 +- .../profiles/FLSun/filament/FLSun T1 ASA.json | 2 +- .../FLSun/filament/FLSun T1 PETG.json | 2 +- .../filament/FLSun T1 PLA High Speed.json | 2 +- .../FLSun/filament/FLSun T1 PLA Silk.json | 2 +- .../profiles/FLSun/filament/FLSun T1 TPU.json | 2 +- ...neric ABS.json => Generic ABS @FLSun.json} | 7 +- ...neric ASA.json => Generic ASA @FLSun.json} | 7 +- ...Generic PA.json => Generic PA @FLSun.json} | 7 +- ...c PA-CF.json => Generic PA-CF @FLSun.json} | 7 +- ...Generic PC.json => Generic PC @FLSun.json} | 7 +- ...ric PETG.json => Generic PETG @FLSun.json} | 7 +- ...eneric.json => Generic PLA @FLSun S1.json} | 9 +- ...eneric.json => Generic PLA @FLSun T1.json} | 9 +- ...neric PLA.json => Generic PLA @FLSun.json} | 7 +- ...PLA-CF.json => Generic PLA-CF @FLSun.json} | 7 +- ...neric PVA.json => Generic PVA @FLSun.json} | 7 +- ...neric TPU.json => Generic TPU @FLSun.json} | 7 +- .../FLSun/machine/FLSun Q5 0.4 nozzle.json | 2 +- .../profiles/FLSun/machine/FLSun Q5.json | 2 +- .../machine/FLSun QQ-S Pro 0.4 nozzle.json | 2 +- .../FLSun/machine/FLSun QQ-S Pro.json | 2 +- .../profiles/FLSun/machine/FLSun S1.json | 2 +- .../FLSun/machine/FLSun SR 0.4 nozzle.json | 2 +- .../profiles/FLSun/machine/FLSun SR.json | 2 +- .../profiles/FLSun/machine/FLSun T1.json | 2 +- .../profiles/FLSun/machine/FLSun V400.json | 2 +- resources/profiles/Flashforge.json | 190 +- .../FlashForge PC @FF G4 0.6 HF nozzle.json | 5 +- .../FlashForge PC @FF G4 0.6 nozzle.json | 5 +- .../FlashForge PC @FF G4 0.8 HF nozzle.json | 5 +- .../FlashForge PC @FF G4P 0.6 HF nozzle.json | 5 +- .../FlashForge PC @FF G4P 0.6 nozzle.json | 5 +- .../FlashForge PC @FF G4P 0.8 HF nozzle.json | 5 +- .../FlashForge PPS @FF G4 0.6 HF nozzle.json | 5 +- .../FlashForge PPS @FF G4 0.6 nozzle.json | 5 +- .../FlashForge PPS @FF G4 0.8 HF nozzle.json | 5 +- .../FlashForge PPS @FF G4P 0.6 HF nozzle.json | 5 +- .../FlashForge PPS @FF G4P 0.6 nozzle.json | 5 +- .../FlashForge PPS @FF G4P 0.8 HF nozzle.json | 5 +- .../FlashForge PPS-CF @FF G4 0.6 nozzle.json | 5 +- .../FlashForge PPS-CF @FF G4P 0.6 nozzle.json | 5 +- .../Flashforge ABS @FF AD5M 0.25 Nozzle.json | 2 +- ...shforge ABS Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge ABS Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge ABS Basic @FF AD5X.json | 2 +- ...hforge ABS Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge ABS Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge ABS Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge ABS Basic @FF G4 HF.json | 2 +- .../filament/Flashforge ABS Basic @FF G4.json | 2 +- ...forge ABS Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge ABS Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge ABS Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge ABS Basic @FF G4P HF.json | 2 +- .../Flashforge ABS Basic @FF G4P.json | 2 +- .../filament/Flashforge ABS Basic.json | 2 +- .../Flashforge ABS-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge ABS-CF @FF G4.json | 2 +- .../Flashforge ABS-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge ABS-CF @FF G4P.json | 2 +- .../Flashforge ASA @FF AD5M 0.25 Nozzle.json | 2 +- ...shforge ASA Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge ASA Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge ASA Basic @FF AD5X.json | 2 +- ...hforge ASA Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge ASA Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge ASA Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge ASA Basic @FF G4 HF.json | 2 +- .../filament/Flashforge ASA Basic @FF G4.json | 2 +- ...forge ASA Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge ASA Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge ASA Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge ASA Basic @FF G4P HF.json | 2 +- .../Flashforge ASA Basic @FF G4P.json | 2 +- .../filament/Flashforge ASA Basic.json | 2 +- .../filament/Flashforge ASA-CF @FF G4.json | 2 +- .../filament/Flashforge ASA-CF @FF G4P.json | 2 +- .../filament/Flashforge ASA-CF.json | 2 +- .../Flashforge HIPS @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HIPS @FF G4 0.6 nozzle.json | 2 +- .../Flashforge HIPS @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HIPS @FF G4 HF.json | 2 +- .../filament/Flashforge HIPS @FF G4.json | 2 +- ...Flashforge HIPS @FF G4P 0.6 HF nozzle.json | 2 +- .../Flashforge HIPS @FF G4P 0.6 nozzle.json | 2 +- ...Flashforge HIPS @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HIPS @FF G4P HF.json | 2 +- .../filament/Flashforge HIPS @FF G4P.json | 2 +- ...lashforge HS PETG @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge HS PETG @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge HS PETG @FF AD5X.json | 2 +- ...ashforge HS PETG @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4 0.6 nozzle.json | 2 +- ...ashforge HS PETG @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4 HF.json | 2 +- .../filament/Flashforge HS PETG @FF G4.json | 2 +- ...shforge HS PETG @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge HS PETG @FF G4P 0.6 nozzle.json | 2 +- ...shforge HS PETG @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge HS PETG @FF G4P HF.json | 2 +- .../filament/Flashforge HS PETG @FF G4P.json | 2 +- .../filament/Flashforge HS PETG.json | 2 +- ...lashforge HS PLA @FF AD5M 0.25 Nozzle.json | 2 +- ...Flashforge HS PLA @FF AD5X 0.6 nozzle.json | 2 +- ...Flashforge HS PLA @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge HS PLA @FF AD5X.json | 2 +- ...lashforge HS PLA @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4 0.6 nozzle.json | 2 +- ...lashforge HS PLA @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HS PLA @FF G4 HF.json | 2 +- .../filament/Flashforge HS PLA @FF G4.json | 2 +- ...ashforge HS PLA @FF G4P 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4P 0.6 nozzle.json | 2 +- ...ashforge HS PLA @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge HS PLA @FF G4P HF.json | 2 +- .../filament/Flashforge HS PLA @FF G4P.json | 2 +- ... HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge HS PLA Burnt Ti @FF G4 HF.json | 2 +- ...HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge HS PLA Burnt Ti @FF G4P HF.json | 2 +- ...orge HS PLA Burnt Ti@FF G4 0.6 nozzle.json | 2 +- ...e HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json | 2 +- ...rge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json | 2 +- ... HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge HS PLA.json | 2 +- .../Flashforge PA @FF G4 0.6 HF nozzle.json | 2 +- .../filament/Flashforge PA @FF G4 HF.json | 2 +- .../filament/Flashforge PA @FF G4.json | 2 +- .../Flashforge PA @FF G4P 0.6 HF nozzle.json | 2 +- .../filament/Flashforge PA @FF G4P HF.json | 2 +- .../filament/Flashforge PA @FF G4P.json | 2 +- .../filament/Flashforge PA-CF @FF G4.json | 2 +- .../filament/Flashforge PA-CF @FF G4P.json | 2 +- .../filament/Flashforge PA12-CF.json | 2 +- .../filament/Flashforge PA6-CF.json | 2 +- .../filament/Flashforge PA66-CF.json | 2 +- .../filament/Flashforge PAHT-CF @FF G4.json | 2 +- .../filament/Flashforge PAHT-CF @FF G4P.json | 2 +- .../filament/Flashforge PET-CF.json | 2 +- .../Flashforge PETG @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge PETG Basic.json | 2 +- ...ashforge PETG Pro @FF AD5X 0.6 nozzle.json | 2 +- ...ashforge PETG Pro @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PETG Pro @FF AD5X.json | 2 +- ...shforge PETG Pro @FF G4 0.6 HF nozzle.json | 2 +- ...Flashforge PETG Pro @FF G4 0.6 nozzle.json | 2 +- ...shforge PETG Pro @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PETG Pro @FF G4 HF.json | 2 +- .../filament/Flashforge PETG Pro @FF G4.json | 2 +- ...hforge PETG Pro @FF G4P 0.6 HF nozzle.json | 2 +- ...lashforge PETG Pro @FF G4P 0.6 nozzle.json | 2 +- ...hforge PETG Pro @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PETG Pro @FF G4P HF.json | 2 +- .../filament/Flashforge PETG Pro @FF G4P.json | 2 +- .../filament/Flashforge PETG Pro.json | 2 +- ... PETG Transparent @FF AD5X 0.6 nozzle.json | 2 +- ... PETG Transparent @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PETG Transparent @FF AD5X.json | 2 +- ...PETG Transparent @FF G4 0.6 HF nozzle.json | 2 +- ...ge PETG Transparent @FF G4 0.6 nozzle.json | 2 +- ...PETG Transparent @FF G4 0.8 HF nozzle.json | 2 +- ...Flashforge PETG Transparent @FF G4 HF.json | 2 +- .../Flashforge PETG Transparent @FF G4.json | 2 +- ...ETG Transparent @FF G4P 0.6 HF nozzle.json | 2 +- ...e PETG Transparent @FF G4P 0.6 nozzle.json | 2 +- ...ETG Transparent @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge PETG Transparent @FF G4P HF.json | 2 +- .../Flashforge PETG Transparent @FF G4P.json | 2 +- .../filament/Flashforge PETG Transparent.json | 2 +- ...lashforge PETG-CF @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge PETG-CF @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF AD5X.json | 2 +- .../Flashforge PETG-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF G4.json | 2 +- ...Flashforge PETG-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge PETG-CF @FF G4P.json | 2 +- .../filament/Flashforge PETG-CF.json | 2 +- .../Flashforge PLA @FF AD5M 0.25 Nozzle.json | 2 +- ...shforge PLA Basic @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Basic @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Basic @FF AD5X.json | 2 +- ...hforge PLA Basic @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Basic @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Basic @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Basic @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Basic @FF G4.json | 2 +- ...forge PLA Basic @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Basic @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Basic @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Basic @FF G4P HF.json | 2 +- .../Flashforge PLA Basic @FF G4P.json | 2 +- .../filament/Flashforge PLA Basic.json | 2 +- ...hforge PLA Buint Ti @FF G4 0.8 nozzle.json | 2 +- ...forge PLA Buint Ti @FF G4P 0.8 nozzle.json | 2 +- ... PLA Color Change @FF AD5X 0.6 nozzle.json | 2 +- ... PLA Color Change @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Color Change @FF AD5X.json | 2 +- ...PLA Color Change @FF G4 0.6 HF nozzle.json | 2 +- ...ge PLA Color Change @FF G4 0.6 nozzle.json | 2 +- ...PLA Color Change @FF G4 0.8 HF nozzle.json | 2 +- ...Flashforge PLA Color Change @FF G4 HF.json | 2 +- .../Flashforge PLA Color Change @FF G4.json | 2 +- ...LA Color Change @FF G4P 0.6 HF nozzle.json | 2 +- ...e PLA Color Change @FF G4P 0.6 nozzle.json | 2 +- ...LA Color Change @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge PLA Color Change @FF G4P HF.json | 2 +- .../Flashforge PLA Color Change @FF G4P.json | 2 +- .../filament/Flashforge PLA Color Change.json | 2 +- ...hforge PLA Galaxy @FF AD5X 0.6 nozzle.json | 2 +- ...hforge PLA Galaxy @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF AD5X.json | 2 +- ...forge PLA Galaxy @FF G4 0.6 HF nozzle.json | 2 +- ...ashforge PLA Galaxy @FF G4 0.6 nozzle.json | 2 +- ...forge PLA Galaxy @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF G4 HF.json | 2 +- .../Flashforge PLA Galaxy @FF G4.json | 2 +- ...orge PLA Galaxy @FF G4P 0.6 HF nozzle.json | 2 +- ...shforge PLA Galaxy @FF G4P 0.6 nozzle.json | 2 +- ...orge PLA Galaxy @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Galaxy @FF G4P HF.json | 2 +- .../Flashforge PLA Galaxy @FF G4P.json | 2 +- .../filament/Flashforge PLA Galaxy.json | 2 +- ...orge PLA Luminous @FF AD5X 0.6 nozzle.json | 2 +- ...orge PLA Luminous @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Luminous @FF AD5X.json | 2 +- ...rge PLA Luminous @FF G4 0.6 HF nozzle.json | 2 +- ...rge PLA Luminous @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Luminous @FF G4 HF.json | 2 +- .../Flashforge PLA Luminous @FF G4.json | 2 +- ...ge PLA Luminous @FF G4P 0.6 HF nozzle.json | 2 +- ...ge PLA Luminous @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Luminous @FF G4P HF.json | 2 +- .../Flashforge PLA Luminous @FF G4P.json | 2 +- .../filament/Flashforge PLA Luminous.json | 2 +- ...shforge PLA Matte @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Matte @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Matte @FF AD5X.json | 2 +- ...hforge PLA Matte @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Matte @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Matte @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Matte @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Matte @FF G4.json | 2 +- ...forge PLA Matte @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Matte @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Matte @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Matte @FF G4P HF.json | 2 +- .../Flashforge PLA Matte @FF G4P.json | 2 +- .../filament/Flashforge PLA Matte.json | 2 +- ...shforge PLA Metal @FF AD5X 0.6 nozzle.json | 2 +- ...shforge PLA Metal @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Metal @FF AD5X.json | 2 +- ...hforge PLA Metal @FF G4 0.6 HF nozzle.json | 2 +- ...lashforge PLA Metal @FF G4 0.6 nozzle.json | 2 +- ...hforge PLA Metal @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Metal @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Metal @FF G4.json | 2 +- ...forge PLA Metal @FF G4P 0.6 HF nozzle.json | 2 +- ...ashforge PLA Metal @FF G4P 0.6 nozzle.json | 2 +- ...forge PLA Metal @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Metal @FF G4P HF.json | 2 +- .../Flashforge PLA Metal @FF G4P.json | 2 +- .../filament/Flashforge PLA Metal.json | 2 +- ...lashforge PLA Pro @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge PLA Pro @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PLA Pro @FF AD5X.json | 2 +- ...ashforge PLA Pro @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4 0.6 nozzle.json | 2 +- ...ashforge PLA Pro @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Pro @FF G4.json | 2 +- ...shforge PLA Pro @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge PLA Pro @FF G4P 0.6 nozzle.json | 2 +- ...shforge PLA Pro @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Pro @FF G4P HF.json | 2 +- .../filament/Flashforge PLA Pro @FF G4P.json | 2 +- .../filament/Flashforge PLA Pro.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.6 nozzle.json | 2 +- ...ashforge PLA Silk @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Silk @FF AD5X.json | 2 +- ...shforge PLA Silk @FF G4 0.6 HF nozzle.json | 2 +- ...Flashforge PLA Silk @FF G4 0.6 nozzle.json | 2 +- ...shforge PLA Silk @FF G4 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Silk @FF G4 HF.json | 2 +- .../filament/Flashforge PLA Silk @FF G4.json | 2 +- ...hforge PLA Silk @FF G4P 0.6 HF nozzle.json | 2 +- ...lashforge PLA Silk @FF G4P 0.6 nozzle.json | 2 +- ...hforge PLA Silk @FF G4P 0.8 HF nozzle.json | 2 +- .../Flashforge PLA Silk @FF G4P HF.json | 2 +- .../filament/Flashforge PLA Silk @FF G4P.json | 2 +- .../filament/Flashforge PLA Silk.json | 2 +- ...forge PLA Sparkle @FF AD5X 0.6 nozzle.json | 2 +- ...forge PLA Sparkle @FF AD5X 0.8 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF AD5X.json | 2 +- ...orge PLA Sparkle @FF G4 0.6 HF nozzle.json | 2 +- ...shforge PLA Sparkle @FF G4 0.6 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF G4 HF.json | 2 +- .../Flashforge PLA Sparkle @FF G4.json | 2 +- ...rge PLA Sparkle @FF G4P 0.6 HF nozzle.json | 2 +- ...hforge PLA Sparkle @FF G4P 0.6 nozzle.json | 2 +- .../Flashforge PLA Sparkle @FF G4P HF.json | 2 +- .../Flashforge PLA Sparkle @FF G4P.json | 2 +- .../filament/Flashforge PLA Sparkle.json | 2 +- ...Flashforge PLA-CF @FF AD5X 0.6 nozzle.json | 2 +- ...Flashforge PLA-CF @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF AD5X.json | 2 +- .../Flashforge PLA-CF @FF G4 0.6 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF G4.json | 2 +- .../Flashforge PLA-CF @FF G4P 0.6 nozzle.json | 2 +- .../filament/Flashforge PLA-CF @FF G4P.json | 2 +- .../filament/Flashforge PLA-CF.json | 2 +- ...shforge PLA-SILK @FF AD5M 0.25 Nozzle.json | 2 +- .../filament/Flashforge PPA-CF.json | 2 +- .../filament/Flashforge PPA-GF.json | 2 +- .../filament/Flashforge PPS @FF G4.json | 2 +- .../filament/Flashforge PPS @FF G4P.json | 2 +- .../filament/Flashforge PPS-CF @FF G4.json | 2 +- .../filament/Flashforge PPS-CF @FF G4P.json | 2 +- .../filament/Flashforge PPS-CF.json | 2 +- ...ashforge TPU 65D @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge TPU 65D @FF G4 0.6 nozzle.json | 2 +- ...ashforge TPU 65D @FF G4 0.8 HF nozzle.json | 2 +- ...shforge TPU 65D @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge TPU 65D @FF G4P 0.6 nozzle.json | 2 +- ...shforge TPU 65D @FF G4P 0.8 HF nozzle.json | 2 +- ...lashforge TPU 95A @FF AD5X 0.6 nozzle.json | 2 +- ...lashforge TPU 95A @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF AD5X.json | 2 +- ...ashforge TPU 95A @FF G4 0.6 HF nozzle.json | 2 +- .../Flashforge TPU 95A @FF G4 0.6 nozzle.json | 2 +- ...ashforge TPU 95A @FF G4 0.8 HF nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF G4.json | 2 +- ...shforge TPU 95A @FF G4P 0.6 HF nozzle.json | 2 +- ...Flashforge TPU 95A @FF G4P 0.6 nozzle.json | 2 +- ...shforge TPU 95A @FF G4P 0.8 HF nozzle.json | 2 +- .../filament/Flashforge TPU 95A @FF G4P.json | 2 +- .../filament/Flashforge TPU 95A.json | 2 +- .../FusRock PAHT @FF G4 0.6 HF nozzle.json | 4 +- .../FusRock PAHT @FF G4 0.6 nozzle.json | 4 +- .../FusRock PAHT @FF G4 0.8 HF nozzle.json | 4 +- .../FusRock PAHT @FF G4P 0.6 HF nozzle.json | 4 +- .../FusRock PAHT @FF G4P 0.6 nozzle.json | 4 +- .../FusRock PAHT @FF G4P 0.8 HF nozzle.json | 4 +- .../filament/FusRock PAHT-CF @FF C5.json | 5 +- .../filament/FusRock PAHT-CF @FF C5P.json | 5 +- .../FusRock PAHT-CF @FF G4 0.6 nozzle.json | 4 +- .../filament/FusRock PAHT-CF @FF G4.json | 7 +- .../FusRock PAHT-CF @FF G4P 0.6 nozzle.json | 4 +- .../filament/FusRock PAHT-CF @FF G4P.json | 7 +- .../FusRock PET @FF G4P 0.8 HF nozzle.json | 4 +- .../FusRock PET-CF @FF G4 0.6 nozzle.json | 4 +- .../filament/FusRock PET-CF @FF G4.json | 7 +- .../FusRock PET-CF @FF G4P 0.6 nozzle.json | 4 +- .../filament/FusRock PET-CF @FF G4P.json | 7 +- .../filament/FusRock S-Multi @FF C5.json | 7 +- .../filament/FusRock S-Multi @FF C5P.json | 7 +- .../filament/FusRock S-PAHT @FF C5.json | 7 +- .../filament/FusRock S-PAHT @FF C5P.json | 7 +- ...exPA-CF25.json => FusRock NexPA-CF25.json} | 11 +- ...n => FusRock PAHT-CF @G3U 0.6 Nozzle.json} | 14 +- ...eric PAHT-CF.json => FusRock PAHT-CF.json} | 13 +- ...eric PAHT-GF.json => FusRock PAHT-GF.json} | 11 +- ...on => FusRock PET-CF @G3U 0.6 Nozzle.json} | 14 +- ...eneric PET-CF.json => FusRock PET-CF.json} | 13 +- ...eneric PET-GF.json => FusRock PET-GF.json} | 11 +- ...n => FusRock S-Multi @G3U 0.6 Nozzle.json} | 14 +- ...eric S-Multi.json => FusRock S-Multi.json} | 13 +- ...on => FusRock S-PAHT @G3U 0.6 Nozzle.json} | 14 +- ...eneric S-PAHT.json => FusRock S-PAHT.json} | 13 +- ... => Generic ABS @FF AD5M 0.25 Nozzle.json} | 12 +- .../filament/Generic ABS @Flashforge AD4.json | 2 +- ...neric ABS @Flashforge G3U 0.6 Nozzle.json} | 11 +- ....json => Generic ABS @Flashforge G3U.json} | 11 +- ... ABS.json => Generic ABS @Flashforge.json} | 7 +- ... => Generic ASA @FF AD5M 0.25 Nozzle.json} | 12 +- .../filament/Generic ASA @Flashforge AD4.json | 2 +- ...neric ASA @Flashforge G3U 0.6 Nozzle.json} | 11 +- ....json => Generic ASA @Flashforge G3U.json} | 11 +- ... ASA.json => Generic ASA @Flashforge.json} | 7 +- ...eric HIPS @Flashforge G3U 0.6 Nozzle.json} | 11 +- ...IPS.json => Generic HIPS @Flashforge.json} | 11 +- ... Generic HS PLA @FF AD5M 0.25 Nozzle.json} | 12 +- ...A.json => Generic HS PLA @Flashforge.json} | 7 +- .../Generic PET @FF G4 0.6 HF nozzle.json | 5 +- .../Generic PET @FF G4 0.6 nozzle.json | 5 +- .../Generic PET @FF G4 0.8 HF nozzle.json | 5 +- .../filament/Generic PET @FF G4.json | 2 +- .../Generic PET @FF G4P 0.6 HF nozzle.json | 5 +- .../Generic PET @FF G4P 0.6 nozzle.json | 5 +- .../Generic PET @FF G4P 0.8 HF nozzle.json | 5 +- .../filament/Generic PET @FF G4P.json | 2 +- ...=> Generic PETG @FF AD5M 0.25 Nozzle.json} | 12 +- .../Generic PETG @Flashforge AD4.json | 2 +- ...eric PETG @Flashforge G3U 0.6 Nozzle.json} | 11 +- ...eric PETG @Flashforge G3U 0.8 Nozzle.json} | 11 +- ...json => Generic PETG @Flashforge G3U.json} | 11 +- ...ETG.json => Generic PETG @Flashforge.json} | 7 +- ...c PETG-CF @Flashforge G3U 0.6 Nozzle.json} | 11 +- ...c PETG-CF @Flashforge G3U 0.8 Nozzle.json} | 11 +- ...n => Generic PETG-CF @Flashforge G3U.json} | 11 +- .../Generic PETG-CF10 @Flashforge AD4.json | 2 +- ...son => Generic PETG-CF10 @Flashforge.json} | 7 +- ... => Generic PLA @FF AD5M 0.25 Nozzle.json} | 10 +- .../filament/Generic PLA @Flashforge AD4.json | 2 +- ...neric PLA @Flashforge G3U 0.6 Nozzle.json} | 6 +- ...neric PLA @Flashforge G3U 0.8 Nozzle.json} | 6 +- ....json => Generic PLA @Flashforge G3U.json} | 11 +- ... PLA.json => Generic PLA @Flashforge.json} | 7 +- ...eneric PLA High Speed @Flashforge AD4.json | 2 +- .../Generic PLA Silk @Flashforge AD4.json | 2 +- ...ic PLA-CF @Flashforge G3U 0.6 Nozzle.json} | 11 +- ...ic PLA-CF @Flashforge G3U 0.8 Nozzle.json} | 11 +- ...on => Generic PLA-CF @Flashforge G3U.json} | 11 +- .../Generic PLA-CF10 @Flashforge AD4.json | 2 +- ...json => Generic PLA-CF10 @Flashforge.json} | 7 +- ...eneric PLA-SILK @FF AD5M 0.25 Nozzle.json} | 12 +- ...json => Generic PLA-Silk @Flashforge.json} | 7 +- ... PVA.json => Generic PVA @Flashforge.json} | 11 +- .../Generic TPU 85A @FF AD5X 0.6 nozzle.json | 2 +- .../Generic TPU 85A @FF AD5X 0.8 nozzle.json | 2 +- .../filament/Generic TPU 85A @FF AD5X.json | 2 +- .../filament/Generic TPU @Flashforge AD4.json | 2 +- ... TPU.json => Generic TPU @Flashforge.json} | 7 +- .../Polymaker CoPA @FF G4 0.6 HF nozzle.json | 7 +- .../Polymaker CoPA @FF G4 0.6 nozzle.json | 7 +- .../Polymaker CoPA @FF G4 0.8 HF nozzle.json | 7 +- .../Polymaker CoPA @FF G4P 0.6 HF nozzle.json | 7 +- .../Polymaker CoPA @FF G4P 0.6 nozzle.json | 7 +- .../Polymaker CoPA @FF G4P 0.8 HF nozzle.json | 7 +- ... Generic CoPA.json => Polymaker CoPA.json} | 11 +- ...aker Generic S1.json => Polymaker S1.json} | 11 +- .../SUNLU/SUNLU PLA Marble @base.json | 1 - .../machine/FlashForge AD5X 0.25 nozzle.json | 2 +- .../machine/Flashforge AD5X 0.4 nozzle.json | 2 +- .../machine/Flashforge AD5X 0.6 nozzle.json | 2 +- .../machine/Flashforge AD5X 0.8 nozzle.json | 2 +- .../Flashforge/machine/Flashforge AD5X.json | 2 +- .../machine/Flashforge Adventurer 5M Pro.json | 2 +- .../machine/Flashforge Adventurer 5M.json | 2 +- .../machine/Flashforge Artemis.json | 2 +- .../Flashforge Creator 5 0.4 nozzle.json | 2 +- .../Flashforge Creator 5 0.6 nozzle.json | 2 +- .../Flashforge Creator 5 0.8 nozzle.json | 2 +- .../Flashforge Creator 5 Pro 0.4 nozzle.json | 2 +- .../Flashforge Creator 5 Pro 0.6 nozzle.json | 2 +- .../Flashforge Creator 5 Pro 0.8 nozzle.json | 2 +- .../Flashforge Guider 2s 0.4 nozzle.json | 2 +- .../machine/Flashforge Guider 2s.json | 2 +- .../Flashforge Guider 3 Ultra 0.4 Nozzle.json | 2 +- .../Flashforge Guider 3 Ultra 0.6 Nozzle.json | 2 +- .../Flashforge Guider 3 Ultra 0.8 Nozzle.json | 2 +- .../machine/Flashforge Guider 3 Ultra.json | 2 +- .../Flashforge Guider4 0.25 nozzle.json | 2 +- .../Flashforge Guider4 0.4 HF nozzle.json | 2 +- .../Flashforge Guider4 0.4 nozzle.json | 2 +- .../Flashforge Guider4 0.6 HF nozzle.json | 2 +- .../Flashforge Guider4 0.6 nozzle.json | 2 +- .../Flashforge Guider4 0.8 HF nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.25 nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.4 HF nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.4 nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.6 HF nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.6 nozzle.json | 2 +- .../Flashforge Guider4 Pro 0.8 HF nozzle.json | 2 +- .../machine/Flashforge Guider4 Pro.json | 2 +- .../machine/Flashforge Guider4.json | 2 +- .../machine/fdm_adventurer5m_common.json | 2 +- .../machine/fdm_flashforge_common.json | 2 +- .../machine/fdm_klipper_common.json | 2 +- resources/profiles/FlyingBear.json | 26 +- ... ABS.json => Generic ABS @FlyingBear.json} | 10 +- ...CF.json => Generic PA-CF @FlyingBear.json} | 10 +- ...ic PC.json => Generic PC @FlyingBear.json} | 10 +- ...ETG.json => Generic PETG @FlyingBear.json} | 10 +- ... PLA.json => Generic PLA @FlyingBear.json} | 10 +- ... TPU.json => Generic TPU @FlyingBear.json} | 10 +- .../FlyingBear Ghost 6 0.4 nozzle.json | 2 +- .../machine/FlyingBear Ghost 6.json | 2 +- .../machine/FlyingBear Reborn3.json | 2 +- .../machine/Ghost7/FlyingBear Ghost7.json | 2 +- .../FlyingBear/machine/S1/FlyingBear S1.json | 2 +- .../machine/fdm_klipper_common.json | 2 +- .../machine/fdm_machine_common.json | 2 +- resources/profiles/Ginger Additive.json | 10 +- ...ic PETG.json => Generic PETG @Ginger.json} | 8 +- ...eric PLA.json => Generic PLA @Ginger.json} | 8 +- .../Ginger Additive/machine/Ginger G1.json | 2 +- .../machine/Ginger_G1_common.json | 3 +- resources/profiles/InfiMech.json | 26 +- ...ic ABS.json => Generic ABS @InfiMech.json} | 10 +- ...A-CF.json => Generic PA-CF @InfiMech.json} | 10 +- ...eric PC.json => Generic PC @InfiMech.json} | 10 +- ... PETG.json => Generic PETG @InfiMech.json} | 10 +- ...ic PLA.json => Generic PLA @InfiMech.json} | 10 +- ...ic TPU.json => Generic TPU @InfiMech.json} | 10 +- .../InfiMech TX Hardened Steel Nozzle.json | 2 +- .../machine/HSN/fdm_klipper_common.json | 2 +- .../machine/HSN/fdm_machine_common.json | 2 +- .../InfiMech/machine/InfiMech TX.json | 2 +- .../InfiMech/machine/fdm_klipper_common.json | 2 +- .../InfiMech/machine/fdm_machine_common.json | 2 +- resources/profiles/MagicMaker.json | 6 +- ...eneric PEEK.json => Generic PEEK @MM.json} | 7 +- .../MagicMaker/machine/MM BoneKing.json | 2 +- resources/profiles/OrcaArena.json | 110 +- .../Generic ABS @OrcaArena 0.2 nozzle.json | 15 + ....json => Generic ABS @OrcaArena base.json} | 4 +- ...c ASA.json => Generic ABS @OrcaArena.json} | 7 +- .../Generic ASA @OrcaArena 0.2 nozzle.json | 15 + ....json => Generic ASA @OrcaArena base.json} | 4 +- ...ic PC.json => Generic ASA @OrcaArena.json} | 7 +- ...ric PA.json => Generic PA @OrcaArena.json} | 7 +- ...-CF.json => Generic PA-CF @OrcaArena.json} | 7 +- .../Generic PC @OrcaArena 0.2 nozzle.json | 15 + ...e.json => Generic PC @OrcaArena base.json} | 4 +- ...ic ABS.json => Generic PC @OrcaArena.json} | 7 +- .../Generic PETG @OrcaArena 0.2 nozzle.json | 15 + ...json => Generic PETG @OrcaArena base.json} | 4 +- .../filament/Generic PETG @OrcaArena.json | 14 + .../filament/Generic PETG-CF @Arena X1C.json | 14 + ...n => Generic PETG-CF @OrcaArena base.json} | 6 +- ...=> Generic PLA @OrcaArena 0.2 nozzle.json} | 7 +- ....json => Generic PLA @OrcaArena base.json} | 4 +- ...a X1C.json => Generic PLA @OrcaArena.json} | 7 +- ... => Generic PLA Silk @OrcaArena base.json} | 4 +- ....json => Generic PLA Silk @OrcaArena.json} | 7 +- ...on => Generic PLA-CF @OrcaArena base.json} | 4 +- .../filament/Generic PLA-CF @OrcaArena.json | 14 + .../Generic PVA @OrcaArena 0.2 nozzle.json | 15 + ....json => Generic PVA @OrcaArena base.json} | 4 +- .../filament/Generic PVA @OrcaArena.json | 14 + ...c TPU.json => Generic TPU @OrcaArena.json} | 7 +- .../OrcaArena Generic ABS @0.2 nozzle.json | 14 - .../OrcaArena Generic ASA @0.2 nozzle.json | 14 - .../OrcaArena Generic PC @0.2 nozzle.json | 14 - .../OrcaArena Generic PETG @0.2 nozzle.json | 14 - .../filament/OrcaArena Generic PETG.json | 13 - .../filament/OrcaArena Generic PLA-CF.json | 13 - .../filament/OrcaArena Generic PLA.json | 13 - .../OrcaArena Generic PVA @0.2 nozzle.json | 14 - .../filament/OrcaArena Generic PVA.json | 13 - .../machine/Orca Arena X1 Carbon.json | 2 +- resources/profiles/OrcaFilamentLibrary.json | 2 +- .../filament/Generic PP-GF @base.json | 7 +- .../Polymaker/Panchroma PLA Satin @base.json | 1 - resources/profiles/Peopoly.json | 14 +- ...ric ABS.json => Generic ABS @Peopoly.json} | 7 +- ...c PETG.json => Generic PETG @Peopoly.json} | 7 +- ...ric PLA.json => Generic PLA @Peopoly.json} | 8 +- .../Peopoly/machine/Peopoly Magneto X.json | 2 +- .../Peopoly/machine/fdm_klipper_common.json | 2 +- resources/profiles/Prusa.json | 874 ++-- .../Generic ABS @Prusa CORE One 0.6.json | 13 + .../Generic ABS @Prusa CORE One 0.8.json | 16 + ...> Generic ABS @Prusa CORE One HF 0.4.json} | 9 +- ...> Generic ABS @Prusa CORE One HF 0.5.json} | 9 +- ...> Generic ABS @Prusa CORE One HF 0.6.json} | 9 +- ...> Generic ABS @Prusa CORE One HF 0.8.json} | 9 +- ....json => Generic ABS @Prusa CORE One.json} | 7 +- ...on => Generic ABS @Prusa MINIIS 0.25.json} | 7 +- ...son => Generic ABS @Prusa MINIIS 0.6.json} | 7 +- ...son => Generic ABS @Prusa MINIIS 0.8.json} | 7 +- ...IS.json => Generic ABS @Prusa MINIIS.json} | 7 +- ...son => Generic ABS @Prusa MK3.5 0.25.json} | 7 +- ...json => Generic ABS @Prusa MK3.5 0.6.json} | 7 +- ...json => Generic ABS @Prusa MK3.5 0.8.json} | 7 +- ...3.5.json => Generic ABS @Prusa MK3.5.json} | 7 +- ... @MK4.json => Generic ABS @Prusa MK4.json} | 7 +- .../filament/Generic ABS @Prusa MK4S 0.6.json | 13 + .../filament/Generic ABS @Prusa MK4S 0.8.json | 13 + ...son => Generic ABS @Prusa MK4S HF0.4.json} | 9 +- .../Generic ABS @Prusa MK4S HF0.5.json | 16 + .../Generic ABS @Prusa MK4S HF0.6.json | 16 + .../Generic ABS @Prusa MK4S HF0.8.json | 18 + ...MK4S.json => Generic ABS @Prusa MK4S.json} | 7 +- ... 5T.json => Generic ABS @Prusa XL 5T.json} | 7 +- ...BS @XL.json => Generic ABS @Prusa XL.json} | 7 +- .../filament/Generic ABS @Prusa base.json} | 4 +- ...neric ABS.json => Generic ABS @Prusa.json} | 7 +- ... => Generic ABS HF @Prusa MINIIS 0.6.json} | 7 +- ... => Generic ABS HF @Prusa MINIIS 0.8.json} | 7 +- ...json => Generic ABS HF @Prusa MINIIS.json} | 7 +- ...n => Generic ABS HF @Prusa MK3.5 0.6.json} | 7 +- ...n => Generic ABS HF @Prusa MK3.5 0.8.json} | 7 +- ....json => Generic ABS HF @Prusa MK3.5.json} | 7 +- ...e.json => Generic ABS HF @Prusa base.json} | 4 +- .../Generic ASA @Prusa CORE One 0.6.json | 19 + ...n => Generic ASA @Prusa CORE One 0.8.json} | 9 +- ...> Generic ASA @Prusa CORE One HF 0.4.json} | 9 +- ...> Generic ASA @Prusa CORE One HF 0.5.json} | 9 +- ...> Generic ASA @Prusa CORE One HF 0.6.json} | 9 +- ...> Generic ASA @Prusa CORE One HF 0.8.json} | 9 +- ....json => Generic ASA @Prusa CORE One.json} | 7 +- ...on => Generic ASA @Prusa MINIIS 0.25.json} | 7 +- ...son => Generic ASA @Prusa MINIIS 0.6.json} | 7 +- ...son => Generic ASA @Prusa MINIIS 0.8.json} | 7 +- ...IS.json => Generic ASA @Prusa MINIIS.json} | 7 +- ...son => Generic ASA @Prusa MK3.5 0.25.json} | 7 +- ...json => Generic ASA @Prusa MK3.5 0.6.json} | 7 +- ...json => Generic ASA @Prusa MK3.5 0.8.json} | 7 +- ...3.5.json => Generic ASA @Prusa MK3.5.json} | 7 +- ... @MK4.json => Generic ASA @Prusa MK4.json} | 7 +- .../filament/Generic ASA @Prusa MK4S 0.6.json | 15 + .../filament/Generic ASA @Prusa MK4S 0.8.json | 16 + ...son => Generic ASA @Prusa MK4S HF0.4.json} | 9 +- .../Generic ASA @Prusa MK4S HF0.5.json | 16 + .../Generic ASA @Prusa MK4S HF0.6.json | 18 + ...son => Generic ASA @Prusa MK4S HF0.8.json} | 9 +- ...MK4S.json => Generic ASA @Prusa MK4S.json} | 7 +- ...neric ASA.json => Generic ASA @Prusa.json} | 7 +- ... => Generic ASA HF @Prusa MINIIS 0.6.json} | 7 +- ... => Generic ASA HF @Prusa MINIIS 0.8.json} | 7 +- ...json => Generic ASA HF @Prusa MINIIS.json} | 7 +- ...n => Generic ASA HF @Prusa MK3.5 0.6.json} | 7 +- ...n => Generic ASA HF @Prusa MK3.5 0.8.json} | 7 +- ....json => Generic ASA HF @Prusa MK3.5.json} | 7 +- ...e.json => Generic ASA HF @Prusa base.json} | 4 +- ...5T.json => Generic FLEX @Prusa XL 5T.json} | 7 +- ...X @XL.json => Generic FLEX @Prusa XL.json} | 7 +- ...son => Generic PA @Prusa MINIIS 0.25.json} | 7 +- ...json => Generic PA @Prusa MINIIS 0.6.json} | 7 +- ...json => Generic PA @Prusa MINIIS 0.8.json} | 7 +- ...IIS.json => Generic PA @Prusa MINIIS.json} | 7 +- ...json => Generic PA @Prusa MK3.5 0.25.json} | 7 +- ....json => Generic PA @Prusa MK3.5 0.6.json} | 7 +- ....json => Generic PA @Prusa MK3.5 0.8.json} | 7 +- ...K3.5.json => Generic PA @Prusa MK3.5.json} | 7 +- .../filament/Generic PA @Prusa base.json} | 4 +- ...Generic PA.json => Generic PA @Prusa.json} | 7 +- ... => Generic PA-CF @Prusa MINIIS 0.25.json} | 7 +- ...n => Generic PA-CF @Prusa MINIIS 0.6.json} | 7 +- ...n => Generic PA-CF @Prusa MINIIS 0.8.json} | 7 +- ....json => Generic PA-CF @Prusa MINIIS.json} | 7 +- ...n => Generic PA-CF @Prusa MK3.5 0.25.json} | 7 +- ...on => Generic PA-CF @Prusa MK3.5 0.6.json} | 7 +- ...on => Generic PA-CF @Prusa MK3.5 0.8.json} | 7 +- ...5.json => Generic PA-CF @Prusa MK3.5.json} | 7 +- ...se.json => Generic PA-CF @Prusa base.json} | 4 +- ...c PA-CF.json => Generic PA-CF @Prusa.json} | 7 +- ...son => Generic PC @Prusa MINIIS 0.25.json} | 7 +- ...json => Generic PC @Prusa MINIIS 0.6.json} | 7 +- ...json => Generic PC @Prusa MINIIS 0.8.json} | 7 +- ...IIS.json => Generic PC @Prusa MINIIS.json} | 7 +- ...json => Generic PC @Prusa MK3.5 0.25.json} | 7 +- ....json => Generic PC @Prusa MK3.5 0.6.json} | 7 +- ....json => Generic PC @Prusa MK3.5 0.8.json} | 7 +- ...K3.5.json => Generic PC @Prusa MK3.5.json} | 7 +- ...Generic PC.json => Generic PC @Prusa.json} | 7 +- ...n => Generic PC HF @Prusa MINIIS 0.6.json} | 7 +- ...n => Generic PC HF @Prusa MINIIS 0.8.json} | 7 +- ....json => Generic PC HF @Prusa MINIIS.json} | 7 +- ...on => Generic PC HF @Prusa MK3.5 0.6.json} | 7 +- ...on => Generic PC HF @Prusa MK3.5 0.8.json} | 7 +- ...5.json => Generic PC HF @Prusa MK3.5.json} | 7 +- ...se.json => Generic PC HF @Prusa base.json} | 4 +- ... => Generic PETG @Prusa CORE One 0.6.json} | 9 +- ... => Generic PETG @Prusa CORE One 0.8.json} | 9 +- ... Generic PETG @Prusa CORE One HF 0.4.json} | 9 +- ... Generic PETG @Prusa CORE One HF 0.5.json} | 9 +- ... Generic PETG @Prusa CORE One HF 0.6.json} | 9 +- ... Generic PETG @Prusa CORE One HF 0.8.json} | 9 +- ...json => Generic PETG @Prusa CORE One.json} | 7 +- ...n => Generic PETG @Prusa MINIIS 0.25.json} | 7 +- ...on => Generic PETG @Prusa MINIIS 0.6.json} | 7 +- ...on => Generic PETG @Prusa MINIIS 0.8.json} | 7 +- ...S.json => Generic PETG @Prusa MINIIS.json} | 9 +- ...on => Generic PETG @Prusa MK3.5 0.25.json} | 7 +- ...son => Generic PETG @Prusa MK3.5 0.6.json} | 7 +- ...son => Generic PETG @Prusa MK3.5 0.8.json} | 7 +- ....5.json => Generic PETG @Prusa MK3.5.json} | 7 +- ...@MK4.json => Generic PETG @Prusa MK4.json} | 7 +- ...json => Generic PETG @Prusa MK4S 0.6.json} | 9 +- ...json => Generic PETG @Prusa MK4S 0.8.json} | 9 +- ...on => Generic PETG @Prusa MK4S HF0.4.json} | 9 +- .../Generic PETG @Prusa MK4S HF0.5.json | 16 + ...on => Generic PETG @Prusa MK4S HF0.6.json} | 9 +- ...on => Generic PETG @Prusa MK4S HF0.8.json} | 9 +- ...K4S.json => Generic PETG @Prusa MK4S.json} | 7 +- ...5T.json => Generic PETG @Prusa XL 5T.json} | 7 +- ...G @XL.json => Generic PETG @Prusa XL.json} | 7 +- ...ase.json => Generic PETG @Prusa base.json} | 4 +- ...ric PETG.json => Generic PETG @Prusa.json} | 7 +- ...=> Generic PETG HF @Prusa MINIIS 0.6.json} | 7 +- ...=> Generic PETG HF @Prusa MINIIS 0.8.json} | 7 +- ...son => Generic PETG HF @Prusa MINIIS.json} | 9 +- ... => Generic PETG HF @Prusa MK3.5 0.6.json} | 7 +- ... => Generic PETG HF @Prusa MK3.5 0.8.json} | 7 +- ...json => Generic PETG HF @Prusa MK3.5.json} | 7 +- ....json => Generic PETG HF @Prusa base.json} | 4 +- .../Generic PLA @Prusa CORE One 0.6.json | 19 + ...n => Generic PLA @Prusa CORE One 0.8.json} | 9 +- ...> Generic PLA @Prusa CORE One HF 0.4.json} | 9 +- ...> Generic PLA @Prusa CORE One HF 0.5.json} | 9 +- ...> Generic PLA @Prusa CORE One HF 0.6.json} | 9 +- ...> Generic PLA @Prusa CORE One HF 0.8.json} | 9 +- ....json => Generic PLA @Prusa CORE One.json} | 7 +- ...on => Generic PLA @Prusa MINIIS 0.25.json} | 7 +- ...son => Generic PLA @Prusa MINIIS 0.6.json} | 7 +- ...son => Generic PLA @Prusa MINIIS 0.8.json} | 7 +- ...IS.json => Generic PLA @Prusa MINIIS.json} | 7 +- ...son => Generic PLA @Prusa MK3.5 0.25.json} | 7 +- ...json => Generic PLA @Prusa MK3.5 0.6.json} | 7 +- ...json => Generic PLA @Prusa MK3.5 0.8.json} | 7 +- ...3.5.json => Generic PLA @Prusa MK3.5.json} | 7 +- ... @MK4.json => Generic PLA @Prusa MK4.json} | 7 +- ....json => Generic PLA @Prusa MK4S 0.6.json} | 9 +- ....json => Generic PLA @Prusa MK4S 0.8.json} | 9 +- ...son => Generic PLA @Prusa MK4S HF0.4.json} | 9 +- ...son => Generic PLA @Prusa MK4S HF0.5.json} | 9 +- ...son => Generic PLA @Prusa MK4S HF0.6.json} | 9 +- ...son => Generic PLA @Prusa MK4S HF0.8.json} | 9 +- ...MK4S.json => Generic PLA @Prusa MK4S.json} | 7 +- ... 5T.json => Generic PLA @Prusa XL 5T.json} | 7 +- ...LA @XL.json => Generic PLA @Prusa XL.json} | 7 +- ...base.json => Generic PLA @Prusa base.json} | 4 +- ...neric PLA.json => Generic PLA @Prusa.json} | 7 +- ... => Generic PLA HF @Prusa MINIIS 0.6.json} | 7 +- ... => Generic PLA HF @Prusa MINIIS 0.8.json} | 7 +- ...json => Generic PLA HF @Prusa MINIIS.json} | 7 +- ...n => Generic PLA HF @Prusa MK3.5 0.6.json} | 7 +- ...n => Generic PLA HF @Prusa MK3.5 0.8.json} | 7 +- ....json => Generic PLA HF @Prusa MK3.5.json} | 7 +- ...e.json => Generic PLA HF @Prusa base.json} | 4 +- ...Generic PLA Silk @Prusa CORE One 0.6.json} | 9 +- .../Generic PLA Silk @Prusa CORE One 0.8.json | 20 + ... => Generic PLA Silk @Prusa CORE One.json} | 7 +- ... => Generic PLA Silk @Prusa MK4S 0.6.json} | 9 +- ... => Generic PLA Silk @Prusa MK4S 0.8.json} | 9 +- ...json => Generic PLA Silk @Prusa MK4S.json} | 9 +- ...=> Generic PLA-CF @Prusa MINIIS 0.25.json} | 7 +- ... => Generic PLA-CF @Prusa MINIIS 0.6.json} | 7 +- ... => Generic PLA-CF @Prusa MINIIS 0.8.json} | 7 +- ...json => Generic PLA-CF @Prusa MINIIS.json} | 7 +- ... => Generic PLA-CF @Prusa MK3.5 0.25.json} | 7 +- ...n => Generic PLA-CF @Prusa MK3.5 0.6.json} | 7 +- ...n => Generic PLA-CF @Prusa MK3.5 0.8.json} | 7 +- ....json => Generic PLA-CF @Prusa MK3.5.json} | 7 +- ...e.json => Generic PLA-CF @Prusa base.json} | 4 +- ...PLA-CF.json => Generic PLA-CF @Prusa.json} | 7 +- ...on => Generic PVA @Prusa MINIIS 0.25.json} | 7 +- ...son => Generic PVA @Prusa MINIIS 0.6.json} | 7 +- ...son => Generic PVA @Prusa MINIIS 0.8.json} | 7 +- ...IS.json => Generic PVA @Prusa MINIIS.json} | 7 +- ...son => Generic PVA @Prusa MK3.5 0.25.json} | 7 +- ...json => Generic PVA @Prusa MK3.5 0.6.json} | 7 +- ...json => Generic PVA @Prusa MK3.5 0.8.json} | 7 +- ...3.5.json => Generic PVA @Prusa MK3.5.json} | 7 +- ...base.json => Generic PVA @Prusa base.json} | 4 +- ...neric PVA.json => Generic PVA @Prusa.json} | 7 +- ... => Generic PVA HF @Prusa MINIIS 0.6.json} | 7 +- ... => Generic PVA HF @Prusa MINIIS 0.8.json} | 7 +- ...json => Generic PVA HF @Prusa MINIIS.json} | 7 +- ...n => Generic PVA HF @Prusa MK3.5 0.6.json} | 7 +- ...n => Generic PVA HF @Prusa MK3.5 0.8.json} | 7 +- ....json => Generic PVA HF @Prusa MK3.5.json} | 7 +- ...e.json => Generic PVA HF @Prusa base.json} | 4 +- ...n => Generic TPU @Prusa CORE One 0.6.json} | 9 +- ...n => Generic TPU @Prusa CORE One 0.8.json} | 9 +- ....json => Generic TPU @Prusa CORE One.json} | 7 +- ...IS.json => Generic TPU @Prusa MINIIS.json} | 7 +- ...3.5.json => Generic TPU @Prusa MK3.5.json} | 7 +- ... @MK4.json => Generic TPU @Prusa MK4.json} | 7 +- .../filament/Generic TPU @Prusa MK4S 0.6.json | 17 + .../filament/Generic TPU @Prusa MK4S 0.8.json | 17 + ...MK4S.json => Generic TPU @Prusa MK4S.json} | 7 +- ...base.json => Generic TPU @Prusa base.json} | 4 +- ...neric TPU.json => Generic TPU @Prusa.json} | 7 +- ...json => Generic TPU HF @Prusa MINIIS.json} | 7 +- ....json => Generic TPU HF @Prusa MK3.5.json} | 7 +- ...e.json => Generic TPU HF @Prusa base.json} | 4 +- .../Prusa Generic ABS @CORE One 0.6.json | 12 - .../Prusa Generic ABS @CORE One 0.8.json | 15 - .../filament/Prusa Generic ABS @MK4S 0.6.json | 12 - .../filament/Prusa Generic ABS @MK4S 0.8.json | 12 - .../Prusa Generic ABS @MK4S HF0.5.json | 15 - .../Prusa Generic ABS @MK4S HF0.6.json | 15 - .../Prusa Generic ABS @MK4S HF0.8.json | 17 - .../Prusa Generic ASA @CORE One 0.6.json | 18 - .../filament/Prusa Generic ASA @MK4S 0.6.json | 14 - .../filament/Prusa Generic ASA @MK4S 0.8.json | 15 - .../Prusa Generic ASA @MK4S HF0.5.json | 15 - .../Prusa Generic ASA @MK4S HF0.6.json | 17 - .../Prusa Generic PETG @MK4S HF0.5.json | 15 - .../Prusa Generic PLA @CORE One 0.6.json | 18 - .../Prusa Generic PLA Silk @CORE One 0.8.json | 19 - .../filament/Prusa Generic TPU @MK4S 0.6.json | 16 - .../filament/Prusa Generic TPU @MK4S 0.8.json | 16 - .../Prusa/machine/Prusa CORE One HF.json | 2 +- .../Prusa/machine/Prusa CORE One L HF.json | 2 +- .../Prusa/machine/Prusa CORE One L.json | 2 +- .../Prusa/machine/Prusa CORE One.json | 2 +- .../Prusa/machine/Prusa MINI 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa MINI 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa MINI 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa MINI 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MINI.json | 2 +- .../machine/Prusa MINIIS 0.25 nozzle.json | 2 +- .../machine/Prusa MINIIS 0.4 nozzle.json | 2 +- .../machine/Prusa MINIIS 0.6 nozzle.json | 2 +- .../machine/Prusa MINIIS 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MINIIS.json | 2 +- .../machine/Prusa MK3.5 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3.5 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3.5 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3.5 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MK3.5.json | 2 +- .../Prusa/machine/Prusa MK3S 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3S 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3S 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa MK3S 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MK3S.json | 2 +- .../Prusa/machine/Prusa MK4 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa MK4 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa MK4 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa MK4 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MK4.json | 2 +- .../Prusa/machine/Prusa MK4S 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa MK4S 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa MK4S 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MK4S HF.json | 2 +- .../machine/Prusa MK4S HF0.4 nozzle.json | 2 +- .../machine/Prusa MK4S HF0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa MK4S.json | 2 +- .../Prusa/machine/Prusa XL 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 0.3 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 0.5 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 0.8 nozzle.json | 2 +- .../machine/Prusa XL 5T 0.25 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 5T 0.3 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 5T 0.4 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 5T 0.5 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 5T 0.6 nozzle.json | 2 +- .../Prusa/machine/Prusa XL 5T 0.8 nozzle.json | 2 +- .../profiles/Prusa/machine/Prusa XL 5T.json | 2 +- .../profiles/Prusa/machine/Prusa XL.json | 2 +- .../machine/fdm_machine_common_mk4s.json | 2 +- resources/profiles/Qidi.json | 406 +- ... Generic ABS @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ... Generic ABS @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ... Generic ABS @Qidi Q1 Pro 0.6 nozzle.json} | 9 +- ... Generic ABS @Qidi Q1 Pro 0.8 nozzle.json} | 9 +- ...Generic ABS @Qidi X-Max 3 0.2 nozzle.json} | 9 +- ...eneric ABS @Qidi X-Plus 3 0.2 nozzle.json} | 9 +- ...eneric ABS @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...eneric ABS @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...eneric ABS @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...eneric ABS @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ...neric ABS @Qidi X-Smart 3 0.2 nozzle.json} | 9 +- ...eneric ABS.json => Generic ABS @Qidi.json} | 7 +- ... Generic ASA @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ... Generic ASA @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ... Generic ASA @Qidi Q1 Pro 0.6 nozzle.json} | 11 +- ... Generic ASA @Qidi Q1 Pro 0.8 nozzle.json} | 11 +- ...Generic ASA @Qidi X-Max 3 0.2 nozzle.json} | 9 +- ...eneric ASA @Qidi X-Plus 3 0.2 nozzle.json} | 9 +- ...eneric ASA @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...eneric ASA @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...eneric ASA @Qidi X-Plus 4 0.6 nozzle.json} | 11 +- ...eneric ASA @Qidi X-Plus 4 0.8 nozzle.json} | 11 +- ...neric ASA @Qidi X-Smart 3 0.2 nozzle.json} | 9 +- ...eneric ASA.json => Generic ASA @Qidi.json} | 7 +- ... Generic PA.json => Generic PA @Qidi.json} | 7 +- ...ic PA-CF.json => Generic PA-CF @Qidi.json} | 7 +- ....json => Generic PC @Qidi 0.2 nozzle.json} | 9 +- ....json => Generic PC @Qidi 0.8 nozzle.json} | 9 +- ...> Generic PC @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ...> Generic PC @Qidi Q1 Pro 0.4 nozzle.json} | 9 +- ...> Generic PC @Qidi Q1 Pro 0.6 nozzle.json} | 9 +- ...> Generic PC @Qidi Q1 Pro 0.8 nozzle.json} | 9 +- ...Generic PC @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...Generic PC @Qidi X-Plus 4 0.4 nozzle.json} | 9 +- ...Generic PC @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...Generic PC @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ... Generic PC.json => Generic PC @Qidi.json} | 7 +- ...Generic PETG @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ...Generic PETG @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ...Generic PETG @Qidi Q1 Pro 0.6 nozzle.json} | 9 +- ...Generic PETG @Qidi Q1 Pro 0.8 nozzle.json} | 9 +- ...eneric PETG @Qidi X-Max 3 0.2 nozzle.json} | 9 +- ...neric PETG @Qidi X-Plus 3 0.2 nozzle.json} | 9 +- ...neric PETG @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...neric PETG @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...neric PETG @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...neric PETG @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ...eric PETG @Qidi X-Smart 3 0.2 nozzle.json} | 9 +- ...eric PETG.json => Generic PETG @Qidi.json} | 7 +- ...ETG-CF.json => Generic PETG-CF @Qidi.json} | 7 +- ... Generic PLA @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ... Generic PLA @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ... Generic PLA @Qidi Q1 Pro 0.6 nozzle.json} | 9 +- ... Generic PLA @Qidi Q1 Pro 0.8 nozzle.json} | 9 +- ...Generic PLA @Qidi X-Max 3 0.2 nozzle.json} | 9 +- .../Generic PLA @Qidi X-Max 3 0.6 nozzle.json | 16 + .../Generic PLA @Qidi X-Max 3 0.8 nozzle.json | 16 + ...eneric PLA @Qidi X-Plus 3 0.2 nozzle.json} | 9 +- ...Generic PLA @Qidi X-Plus 3 0.6 nozzle.json | 16 + ...Generic PLA @Qidi X-Plus 3 0.8 nozzle.json | 16 + ...eneric PLA @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...eneric PLA @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...eneric PLA @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...eneric PLA @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ...neric PLA @Qidi X-Smart 3 0.2 nozzle.json} | 9 +- ...eneric PLA @Qidi X-Smart 3 0.6 nozzle.json | 16 + ...eneric PLA @Qidi X-Smart 3 0.8 nozzle.json | 16 + ...eneric PLA.json => Generic PLA @Qidi.json} | 7 +- ... High Speed @Qidi X-Plus 4 0.2 nozzle.json | 25 + ... High Speed @Qidi X-Plus 4 0.4 nozzle.json | 25 + ...High Speed @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...High Speed @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ...ric PLA Silk @Qidi Q1 Pro 0.4 nozzle.json} | 9 +- ...c PLA Silk @Qidi X-Plus 4 0.4 nozzle.json} | 9 +- ... Silk.json => Generic PLA Silk @Qidi.json} | 7 +- ...Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json} | 9 +- ...Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ...Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json} | 9 +- ...Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json} | 9 +- ...eneric PLA+ @Qidi X-Max 3 0.2 nozzle.json} | 9 +- ...Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json | 16 + ...Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json | 16 + ...neric PLA+ @Qidi X-Plus 3 0.2 nozzle.json} | 9 +- ...eneric PLA+ @Qidi X-Plus 3 0.6 nozzle.json | 16 + ...eneric PLA+ @Qidi X-Plus 3 0.8 nozzle.json | 16 + ...neric PLA+ @Qidi X-Plus 4 0.2 nozzle.json} | 9 +- ...neric PLA+ @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...neric PLA+ @Qidi X-Plus 4 0.6 nozzle.json} | 9 +- ...neric PLA+ @Qidi X-Plus 4 0.8 nozzle.json} | 9 +- ...eric PLA+ @Qidi X-Smart 3 0.2 nozzle.json} | 9 +- ...neric PLA+ @Qidi X-Smart 3 0.6 nozzle.json | 16 + ...neric PLA+ @Qidi X-Smart 3 0.8 nozzle.json | 16 + ...eric PLA+.json => Generic PLA+ @Qidi.json} | 7 +- ... PLA-CF.json => Generic PLA-CF @Qidi.json} | 7 +- ...eneric PVA.json => Generic PVA @Qidi.json} | 7 +- ...eric TPU 95A @Qidi Q1 Pro 0.8 nozzle.json} | 11 +- ...ic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json} | 11 +- ...PU 95A.json => Generic TPU 95A @Qidi.json} | 7 +- ... Generic TPU @Qidi Q1 Pro 0.4 nozzle.json} | 11 +- ...eneric TPU @Qidi X-Plus 4 0.4 nozzle.json} | 11 +- ...eneric TPU.json => Generic TPU @Qidi.json} | 7 +- .../QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json | 2 +- ... Generic PLA @Qidi X-Max 3 0.6 nozzle.json | 15 - ... Generic PLA @Qidi X-Max 3 0.8 nozzle.json | 15 - ...Generic PLA @Qidi X-Plus 3 0.6 nozzle.json | 15 - ...Generic PLA @Qidi X-Plus 3 0.8 nozzle.json | 15 - ...eneric PLA @Qidi X-Smart 3 0.6 nozzle.json | 15 - ...eneric PLA @Qidi X-Smart 3 0.8 nozzle.json | 15 - ... High Speed @Qidi X-Plus 4 0.2 nozzle.json | 24 - ... High Speed @Qidi X-Plus 4 0.4 nozzle.json | 24 - ...Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json | 15 - ...Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json | 15 - ...eneric PLA+ @Qidi X-Plus 3 0.6 nozzle.json | 15 - ...eneric PLA+ @Qidi X-Plus 3 0.8 nozzle.json | 15 - ...neric PLA+ @Qidi X-Smart 3 0.6 nozzle.json | 15 - ...neric PLA+ @Qidi X-Smart 3 0.8 nozzle.json | 15 - .../Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json | 2 +- .../Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json | 2 +- .../Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi Q1 Pro.json | 2 +- .../machine/Qidi X-CF Pro 0.4 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi X-CF Pro.json | 2 +- .../Qidi/machine/Qidi X-Max 0.4 nozzle.json | 2 +- .../Qidi/machine/Qidi X-Max 3 0.2 nozzle.json | 2 +- .../Qidi/machine/Qidi X-Max 3 0.4 nozzle.json | 2 +- .../Qidi/machine/Qidi X-Max 3 0.6 nozzle.json | 2 +- .../Qidi/machine/Qidi X-Max 3 0.8 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi X-Max 3.json | 2 +- .../profiles/Qidi/machine/Qidi X-Max.json | 2 +- .../Qidi/machine/Qidi X-Plus 0.4 nozzle.json | 2 +- .../machine/Qidi X-Plus 3 0.2 nozzle.json | 2 +- .../machine/Qidi X-Plus 3 0.4 nozzle.json | 2 +- .../machine/Qidi X-Plus 3 0.6 nozzle.json | 2 +- .../machine/Qidi X-Plus 3 0.8 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi X-Plus 3.json | 2 +- .../machine/Qidi X-Plus 4 0.2 nozzle.json | 2 +- .../machine/Qidi X-Plus 4 0.4 nozzle.json | 2 +- .../machine/Qidi X-Plus 4 0.6 nozzle.json | 2 +- .../machine/Qidi X-Plus 4 0.8 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi X-Plus 4.json | 2 +- .../profiles/Qidi/machine/Qidi X-Plus.json | 2 +- .../machine/Qidi X-Smart 3 0.2 nozzle.json | 2 +- .../machine/Qidi X-Smart 3 0.4 nozzle.json | 2 +- .../machine/Qidi X-Smart 3 0.6 nozzle.json | 2 +- .../machine/Qidi X-Smart 3 0.8 nozzle.json | 2 +- .../profiles/Qidi/machine/Qidi X-Smart 3.json | 2 +- .../Qidi/machine/fdm_qidi_common.json | 2 +- resources/profiles/Ratrig.json | 46 +- ...eric ABS.json => Generic ABS @RatRig.json} | 7 +- ...eric ASA.json => Generic ASA @RatRig.json} | 7 +- ...eneric PA.json => Generic PA @RatRig.json} | 7 +- ... PA-CF.json => Generic PA-CF @RatRig.json} | 7 +- ...eneric PC.json => Generic PC @RatRig.json} | 7 +- ...ic PCTG.json => Generic PCTG @RatRig.json} | 10 +- ...ic PETG.json => Generic PETG @RatRig.json} | 7 +- ...eric PLA.json => Generic PLA @RatRig.json} | 7 +- ...LA-CF.json => Generic PLA-CF @RatRig.json} | 7 +- ...eric PVA.json => Generic PVA @RatRig.json} | 7 +- ...eric TPU.json => Generic TPU @RatRig.json} | 7 +- .../Ratrig/machine/RatRig V-Cast.json | 2 +- .../Ratrig/machine/RatRig V-Core 3 200.json | 2 +- .../Ratrig/machine/RatRig V-Core 3 300.json | 2 +- .../Ratrig/machine/RatRig V-Core 3 400.json | 2 +- .../Ratrig/machine/RatRig V-Core 3 500.json | 2 +- .../Ratrig/machine/RatRig V-Core 4 300.json | 2 +- .../Ratrig/machine/RatRig V-Core 4 400.json | 2 +- .../Ratrig/machine/RatRig V-Core 4 500.json | 2 +- .../machine/RatRig V-Core 4 HYBRID 300.json | 2 +- .../machine/RatRig V-Core 4 HYBRID 400.json | 2 +- .../machine/RatRig V-Core 4 HYBRID 500.json | 2 +- .../RatRig V-Core 4 IDEX 300 COPY MODE.json | 2 +- .../RatRig V-Core 4 IDEX 300 MIRROR MODE.json | 2 +- .../machine/RatRig V-Core 4 IDEX 300.json | 2 +- .../RatRig V-Core 4 IDEX 400 COPY MODE.json | 2 +- .../RatRig V-Core 4 IDEX 400 MIRROR MODE.json | 2 +- .../machine/RatRig V-Core 4 IDEX 400.json | 2 +- .../RatRig V-Core 4 IDEX 500 COPY MODE.json | 2 +- .../RatRig V-Core 4 IDEX 500 MIRROR MODE.json | 2 +- .../machine/RatRig V-Core 4 IDEX 500.json | 2 +- .../Ratrig/machine/RatRig V-Minion.json | 2 +- .../Ratrig/machine/fdm_klipper_common.json | 2 +- resources/profiles/SecKit.json | 42 +- ...eric ABS.json => Generic ABS @SecKit.json} | 7 +- ...eric ASA.json => Generic ASA @SecKit.json} | 7 +- ...eneric PA.json => Generic PA @SecKit.json} | 7 +- ... PA-CF.json => Generic PA-CF @SecKit.json} | 7 +- ...eneric PC.json => Generic PC @SecKit.json} | 7 +- ...ic PETG.json => Generic PETG @SecKit.json} | 7 +- ...eric PLA.json => Generic PLA @SecKit.json} | 7 +- ...LA-CF.json => Generic PLA-CF @SecKit.json} | 7 +- ...eric PVA.json => Generic PVA @SecKit.json} | 7 +- ...eric TPU.json => Generic TPU @SecKit.json} | 7 +- .../SecKit/machine/SecKit SK-Tank.json | 2 +- .../profiles/SecKit/machine/Seckit Go3.json | 2 +- .../SecKit/machine/fdm_klipper_common.json | 2 +- resources/profiles/Tiertime.json | 226 +- ....json => Generic ABS @Tiertime 300HS.json} | 7 +- ...ic ABS.json => Generic ABS @Tiertime.json} | 7 +- ....json => Generic ASA @Tiertime 300HS.json} | 7 +- ...ic ASA.json => Generic ASA @Tiertime.json} | 7 +- ...json => Generic BVOH @Tiertime 300HS.json} | 7 +- ... BVOH.json => Generic BVOH @Tiertime.json} | 7 +- ....json => Generic EVA @Tiertime 300HS.json} | 7 +- ...ic EVA.json => Generic EVA @Tiertime.json} | 7 +- ...json => Generic HIPS @Tiertime 300HS.json} | 7 +- ... HIPS.json => Generic HIPS @Tiertime.json} | 7 +- ...S.json => Generic PA @Tiertime 300HS.json} | 7 +- ...eric PA.json => Generic PA @Tiertime.json} | 7 +- ...son => Generic PA-CF @Tiertime 300HS.json} | 7 +- ...A-CF.json => Generic PA-CF @Tiertime.json} | 7 +- ...S.json => Generic PC @Tiertime 300HS.json} | 7 +- ...eric PC.json => Generic PC @Tiertime.json} | 7 +- ...json => Generic PCTG @Tiertime 300HS.json} | 7 +- ... PCTG.json => Generic PCTG @Tiertime.json} | 7 +- ...S.json => Generic PE @Tiertime 300HS.json} | 7 +- ...eric PE.json => Generic PE @Tiertime.json} | 7 +- ...son => Generic PE-CF @Tiertime 300HS.json} | 7 +- ...E-CF.json => Generic PE-CF @Tiertime.json} | 7 +- ...json => Generic PETG @Tiertime 300HS.json} | 7 +- ... PETG.json => Generic PETG @Tiertime.json} | 7 +- ...n => Generic PETG-CF @Tiertime 300HS.json} | 7 +- ...CF.json => Generic PETG-CF @Tiertime.json} | 7 +- ....json => Generic PHA @Tiertime 300HS.json} | 7 +- ...ic PHA.json => Generic PHA @Tiertime.json} | 7 +- ....json => Generic PLA @Tiertime 300HS.json} | 7 +- ...ic PLA.json => Generic PLA @Tiertime.json} | 7 +- ...neric PLA High Speed @Tiertime 300HS.json} | 7 +- ... => Generic PLA High Speed @Tiertime.json} | 7 +- ... => Generic PLA Silk @Tiertime 300HS.json} | 7 +- ...k.json => Generic PLA Silk @Tiertime.json} | 7 +- ...on => Generic PLA-CF @Tiertime 300HS.json} | 7 +- ...-CF.json => Generic PLA-CF @Tiertime.json} | 7 +- ...S.json => Generic PP @Tiertime 300HS.json} | 7 +- ...eric PP.json => Generic PP @Tiertime.json} | 7 +- ...son => Generic PP-CF @Tiertime 300HS.json} | 7 +- ...P-CF.json => Generic PP-CF @Tiertime.json} | 7 +- ...son => Generic PP-GF @Tiertime 300HS.json} | 7 +- ...P-GF.json => Generic PP-GF @Tiertime.json} | 7 +- ...on => Generic PPA-CF @Tiertime 300HS.json} | 7 +- ...-CF.json => Generic PPA-CF @Tiertime.json} | 7 +- ...on => Generic PPA-GF @Tiertime 300HS.json} | 7 +- ...-GF.json => Generic PPA-GF @Tiertime.json} | 7 +- ....json => Generic PPS @Tiertime 300HS.json} | 7 +- ...ic PPS.json => Generic PPS @Tiertime.json} | 7 +- ...on => Generic PPS-CF @Tiertime 300HS.json} | 7 +- ...-CF.json => Generic PPS-CF @Tiertime.json} | 7 +- ....json => Generic PVA @Tiertime 300HS.json} | 7 +- ...ic PVA.json => Generic PVA @Tiertime.json} | 7 +- ....json => Generic SBS @Tiertime 300HS.json} | 7 +- ...ic SBS.json => Generic SBS @Tiertime.json} | 7 +- ....json => Generic TPU @Tiertime 300HS.json} | 7 +- ...ic TPU.json => Generic TPU @Tiertime.json} | 7 +- resources/profiles/TwoTrees.json | 10 +- ...son => Generic 95A TPU @TwoTrees SK1.json} | 7 +- ...json => Generic HS PLA @TwoTrees SK1.json} | 7 +- .../TwoTrees/machine/TwoTrees SK1.json | 2 +- resources/profiles/Vzbot.json | 42 +- ...neric ABS.json => Generic ABS @Vzbot.json} | 7 +- ...neric ASA.json => Generic ASA @Vzbot.json} | 7 +- ...Generic PA.json => Generic PA @Vzbot.json} | 7 +- ...c PA-CF.json => Generic PA-CF @Vzbot.json} | 7 +- ...Generic PC.json => Generic PC @Vzbot.json} | 7 +- ...ric PETG.json => Generic PETG @Vzbot.json} | 7 +- ...neric PLA.json => Generic PLA @Vzbot.json} | 7 +- ...PLA-CF.json => Generic PLA-CF @Vzbot.json} | 7 +- ...neric PVA.json => Generic PVA @Vzbot.json} | 7 +- ...neric TPU.json => Generic TPU @Vzbot.json} | 7 +- .../profiles/Vzbot/machine/Vzbot 235 AWD.json | 2 +- .../profiles/Vzbot/machine/Vzbot 330 AWD.json | 2 +- .../Vzbot/machine/fdm_klipper_common.json | 2 +- resources/profiles/Wanhao France.json | 10 +- ...eric PETG.json => Generic PETG @Yumi.json} | 4 +- ...eneric PLA.json => Generic PLA @Yumi.json} | 4 +- .../Wanhao France/filament/YUMI PETG.json | 2 +- .../filament/YUMI PLA Bowden.json | 2 +- .../filament/YUMI PLA Direct Drive.json | 2 +- .../filament/Generic ABS @Z-Bolt Base.json | 1 - .../filament/Generic ABS HT @Z-Bolt Base.json | 1 - .../filament/Generic PA @Z-Bolt Base.json | 1 - .../filament/Generic PETG @Z-Bolt Base.json | 1 - .../filament/Generic PLA @Z-Bolt Base.json | 1 - resources/profiles/retired_filament_ids.json | 1570 +++++++ scripts/filament_id_snapshot.json | 4128 ++++------------- 1585 files changed, 11776 insertions(+), 11606 deletions(-) delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA Silk.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA+.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA-CF.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PLA.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic PVA.json delete mode 100644 resources/profiles/Anker/filament/Anker Generic TPU.json rename resources/profiles/Anker/filament/{Anker Generic ABS 0.2 nozzle.json => Generic ABS @Anker 0.2 nozzle.json} (58%) rename resources/profiles/Anker/filament/{Anker Generic PETG 0.25 nozzle.json => Generic ABS @Anker 0.25 nozzle.json} (58%) rename resources/profiles/{Prusa/filament/Prusa Generic ABS @base.json => Anker/filament/Generic ABS @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic ASA.json => Generic ABS @Anker.json} (65%) rename resources/profiles/Anker/filament/{Anker Generic PETG 0.2 nozzle.json => Generic ASA @Anker 0.2 nozzle.json} (58%) rename resources/profiles/Anker/filament/{Anker Generic ABS 0.25 nozzle.json => Generic ASA @Anker 0.25 nozzle.json} (58%) rename resources/profiles/Anker/filament/{Anker Generic ASA @base.json => Generic ASA @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic PETG-CF.json => Generic ASA @Anker.json} (65%) rename resources/profiles/Anker/filament/{Anker Generic PA 0.2 nozzle.json => Generic PA @Anker 0.2 nozzle.json} (55%) rename resources/profiles/Anker/filament/{Anker Generic PA 0.25 nozzle.json => Generic PA @Anker 0.25 nozzle.json} (55%) rename resources/profiles/{Prusa/filament/Prusa Generic PA @base.json => Anker/filament/Generic PA @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic PC.json => Generic PA @Anker.json} (60%) rename resources/profiles/Anker/filament/{Anker Generic PA-CF @base.json => Generic PA-CF @Anker base.json} (79%) rename resources/profiles/Anker/filament/{Anker Generic PA.json => Generic PA-CF @Anker.json} (59%) rename resources/profiles/Anker/filament/{Anker Generic PC 0.2 nozzle.json => Generic PC @Anker 0.2 nozzle.json} (55%) rename resources/profiles/Anker/filament/{Anker Generic PC 0.25 nozzle.json => Generic PC @Anker 0.25 nozzle.json} (55%) rename resources/profiles/Anker/filament/{Anker Generic PC @base.json => Generic PC @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic PA-CF.json => Generic PC @Anker.json} (60%) rename resources/profiles/Anker/filament/{Anker Generic PLA 0.2 nozzle.json => Generic PETG @Anker 0.2 nozzle.json} (57%) rename resources/profiles/Anker/filament/{Anker Generic ASA 0.25 nozzle.json => Generic PETG @Anker 0.25 nozzle.json} (57%) rename resources/profiles/Anker/filament/{Anker Generic PETG @base.json => Generic PETG @Anker base.json} (83%) create mode 100644 resources/profiles/Anker/filament/Generic PETG @Anker.json rename resources/profiles/Anker/filament/{Anker Generic PETG-CF @base.json => Generic PETG-CF @Anker base.json} (86%) create mode 100644 resources/profiles/Anker/filament/Generic PETG-CF @Anker.json rename resources/profiles/Anker/filament/{Anker Generic ASA 0.2 nozzle.json => Generic PLA @Anker 0.2 nozzle.json} (58%) rename resources/profiles/Anker/filament/{Anker Generic PLA 0.25 nozzle.json => Generic PLA @Anker 0.25 nozzle.json} (58%) rename resources/profiles/Anker/filament/{Anker Generic PLA @base.json => Generic PLA @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic PETG.json => Generic PLA @Anker.json} (65%) create mode 100644 resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json create mode 100644 resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json rename resources/profiles/Anker/filament/{Anker Generic PLA Silk @base.json => Generic PLA Silk @Anker base.json} (87%) create mode 100644 resources/profiles/Anker/filament/Generic PLA Silk @Anker.json create mode 100644 resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json create mode 100644 resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json rename resources/profiles/Anker/filament/{Anker Generic PLA+ @base.json => Generic PLA+ @Anker base.json} (82%) create mode 100644 resources/profiles/Anker/filament/Generic PLA+ @Anker.json rename resources/profiles/Anker/filament/{Anker Generic PLA-CF @base.json => Generic PLA-CF @Anker base.json} (88%) create mode 100644 resources/profiles/Anker/filament/Generic PLA-CF @Anker.json rename resources/profiles/Anker/filament/{Anker Generic PVA @base.json => Generic PVA @Anker base.json} (61%) rename resources/profiles/Anker/filament/{Anker Generic ABS.json => Generic PVA @Anker.json} (65%) rename resources/profiles/Anker/filament/{Anker Generic TPU @base.json => Generic TPU @Anker base.json} (81%) create mode 100644 resources/profiles/Anker/filament/Generic TPU @Anker.json rename resources/profiles/Anycubic/filament/{Anycubic Generic ABS.json => Generic ABS @Anycubic.json} (80%) rename resources/profiles/Anycubic/filament/{Anycubic Generic ASA.json => Generic ASA @Anycubic.json} (81%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PA.json => Generic PA @Anycubic.json} (80%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PA-CF.json => Generic PA-CF @Anycubic.json} (80%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PC.json => Generic PC @Anycubic.json} (79%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PETG.json => Generic PETG @Anycubic.json} (87%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PLA.json => Generic PLA @Anycubic.json} (84%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PLA-CF.json => Generic PLA-CF @Anycubic.json} (80%) rename resources/profiles/Anycubic/filament/{Anycubic Generic PVA.json => Generic PVA @Anycubic.json} (81%) rename resources/profiles/Anycubic/filament/{Anycubic Generic TPU.json => Generic TPU @Anycubic.json} (78%) rename resources/profiles/Artillery/filament/{Artillery Generic ABS.json => Generic ABS @Artillery.json} (74%) rename resources/profiles/Artillery/filament/{Artillery Generic ASA.json => Generic ASA @Artillery.json} (74%) rename resources/profiles/Artillery/filament/{Artillery Generic PETG.json => Generic PETG @Artillery.json} (84%) rename resources/profiles/Artillery/filament/{Artillery Generic PLA.json => Generic PLA @Artillery.json} (81%) rename resources/profiles/Artillery/filament/{Artillery Generic PLA-CF.json => Generic PLA-CF @Artillery.json} (81%) rename resources/profiles/Artillery/filament/{Artillery Generic TPU.json => Generic TPU @Artillery.json} (72%) rename resources/profiles/Blocks/filament/{Blocks Generic ABS.json => Generic ABS @Blocks.json} (90%) rename resources/profiles/Blocks/filament/{Blocks Generic ASA.json => Generic ASA @Blocks.json} (90%) rename resources/profiles/Blocks/filament/{Blocks Generic ASA-CF.json => Generic ASA-CF @Blocks.json} (88%) rename resources/profiles/Blocks/filament/{Blocks Generic PA.json => Generic PA @Blocks.json} (74%) rename resources/profiles/Blocks/filament/{Blocks Generic PA-CF.json => Generic PA-CF @Blocks.json} (91%) rename resources/profiles/Blocks/filament/{Blocks Generic PC.json => Generic PC @Blocks.json} (74%) rename resources/profiles/Blocks/filament/{Blocks Generic PETG.json => Generic PETG @Blocks.json} (91%) rename resources/profiles/Blocks/filament/{Blocks Generic PLA.json => Generic PLA @Blocks.json} (87%) rename resources/profiles/Blocks/filament/{Blocks Generic PLA-CF.json => Generic PLA-CF @Blocks.json} (76%) rename resources/profiles/Blocks/filament/{Blocks Generic PVA.json => Generic PVA @Blocks.json} (74%) rename resources/profiles/Blocks/filament/{Blocks Generic TPU.json => Generic TPU @Blocks.json} (89%) rename resources/profiles/CONSTRUCT3D/filament/{C1 Generic High Flow PETG.json => Generic High Flow PETG @C1.json} (84%) rename resources/profiles/CONSTRUCT3D/filament/{C1 Generic PETG.json => Generic PETG @C1.json} (83%) rename resources/profiles/CONSTRUCT3D/filament/{C1 Generic PLA.json => Generic PLA @C1.json} (75%) rename resources/profiles/Chuanying/filament/{Chuanying Generic ABS.json => Generic ABS @Chuanying.json} (85%) rename resources/profiles/Chuanying/filament/{Chuanying Generic ASA.json => Generic ASA @Chuanying.json} (95%) rename resources/profiles/Chuanying/filament/{Chuanying Generic HIPS.json => Generic HIPS @Chuanying.json} (94%) rename resources/profiles/Chuanying/filament/{Chuanying Generic HS PLA.json => Generic HS PLA @Chuanying.json} (96%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PETG.json => Generic PETG @Chuanying.json} (90%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PETG-CF10.json => Generic PETG-CF10 @Chuanying.json} (94%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PLA.json => Generic PLA @Chuanying.json} (87%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PLA-CF10.json => Generic PLA-CF10 @Chuanying.json} (96%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PLA-Silk.json => Generic PLA-Silk @Chuanying.json} (87%) rename resources/profiles/Chuanying/filament/{Chuanying Generic PVA.json => Generic PVA @Chuanying.json} (94%) rename resources/profiles/Chuanying/filament/{Chuanying Generic TPU.json => Generic TPU @Chuanying.json} (95%) rename resources/profiles/Co Print/filament/{CoPrint Generic ABS.json => Generic ABS @CoPrint.json} (86%) rename resources/profiles/Co Print/filament/{CoPrint Generic PETG.json => Generic PETG @CoPrint.json} (79%) rename resources/profiles/Co Print/filament/{CoPrint Generic PLA.json => Generic PLA @CoPrint.json} (68%) rename resources/profiles/Co Print/filament/{CoPrint Generic TPU.json => Generic TPU @CoPrint.json} (81%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic ABS @CoLiDo DIY 4.0.json => Generic ABS @CoLiDo DIY 4.0.json} (73%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic ABS @CoLiDo X16.json => Generic ABS @CoLiDo X16.json} (75%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic PETG @CoLiDo DIY 4.0.json => Generic PETG @CoLiDo DIY 4.0.json} (84%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic PETG @CoLiDo X16.json => Generic PETG @CoLiDo X16.json} (85%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic PLA @CoLiDo DIY 4.0.json => Generic PLA @CoLiDo DIY 4.0.json} (77%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic PLA @CoLiDo X16.json => Generic PLA @CoLiDo X16.json} (78%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic TPU @CoLiDo DIY 4.0.json => Generic TPU @CoLiDo DIY 4.0.json} (74%) rename resources/profiles/CoLiDo/filament/{CoLiDo Generic TPU @CoLiDo X16.json => Generic TPU @CoLiDo X16.json} (76%) rename resources/profiles/Comgrow/filament/{Comgrow Generic ABS.json => Generic ABS @Comgrow.json} (72%) rename resources/profiles/Comgrow/filament/{Comgrow Generic PETG.json => Generic PETG @Comgrow.json} (85%) rename resources/profiles/Comgrow/filament/{Comgrow Generic PLA.json => Generic PLA @Comgrow.json} (73%) delete mode 100644 resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json delete mode 100644 resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json delete mode 100644 resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json rename resources/profiles/Creality/filament/{Creality Generic ABS @Ender-3V3-all.json => Generic ABS @Creality Ender-3V3-all.json} (71%) rename resources/profiles/Creality/filament/{Creality Generic ABS @Ender-5Max-all.json => Generic ABS @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic ABS @Hi-all.json => Generic ABS @Creality Hi-all.json} (67%) rename resources/profiles/Creality/filament/{Creality Generic ABS @K1-all.json => Generic ABS @Creality K1-all.json} (53%) rename resources/profiles/Creality/filament/{Creality Generic ABS @K2-all.json => Generic ABS @Creality K2-all.json} (70%) rename resources/profiles/Creality/filament/{Creality Generic ABS.json => Generic ABS @Creality.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic ASA @Ender-3V3-all.json => Generic ASA @Creality Ender-3V3-all.json} (71%) rename resources/profiles/Creality/filament/{Creality Generic ASA @Ender-5Max-all.json => Generic ASA @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic ASA @Hi-all.json => Generic ASA @Creality Hi-all.json} (68%) rename resources/profiles/Creality/filament/{Creality Generic ASA @K1-all.json => Generic ASA @Creality K1-all.json} (53%) rename resources/profiles/Creality/filament/{Creality Generic ASA @K2-all.json => Generic ASA @Creality K2-all.json} (77%) rename resources/profiles/Creality/filament/{Creality Generic ASA.json => Generic ASA @Creality.json} (92%) create mode 100644 resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json rename resources/profiles/Creality/filament/{Creality Generic PA @Ender-5Max-all.json => Generic PA @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic PA-CF @Ender-3V3-all.json => Generic PA-CF @Creality Ender-3V3-all.json} (53%) rename resources/profiles/Creality/filament/{Creality Generic PA-CF @K1-all.json => Generic PA-CF @Creality K1-all.json} (65%) rename resources/profiles/Creality/filament/{Creality Generic PA-CF @K2-all.json => Generic PA-CF @Creality K2-all.json} (75%) rename resources/profiles/Creality/filament/{Creality Generic PA-CF.json => Generic PA-CF @Creality.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic PC @K1-all.json => Generic PC @Creality K1-all.json} (69%) rename resources/profiles/Creality/filament/{Creality Generic PC.json => Generic PC @Creality.json} (75%) rename resources/profiles/Creality/filament/{Creality Generic PETG @Ender-3V3-all.json => Generic PETG @Creality Ender-3V3-all.json} (81%) rename resources/profiles/Creality/filament/{Creality Generic PETG @Ender-5Max-all.json => Generic PETG @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic PETG @Hi-all.json => Generic PETG @Creality Hi-all.json} (80%) rename resources/profiles/Creality/filament/{Creality Generic PETG @K1-all.json => Generic PETG @Creality K1-all.json} (75%) rename resources/profiles/Creality/filament/{Creality Generic PETG @K2-all.json => Generic PETG @Creality K2-all.json} (79%) rename resources/profiles/Creality/filament/{Creality Generic PETG.json => Generic PETG @Creality.json} (94%) create mode 100644 resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json rename resources/profiles/Creality/filament/{Creality Generic PLA @Ender-3V3-all.json => Generic PLA @Creality Ender-3V3-all.json} (80%) rename resources/profiles/Creality/filament/{Creality Generic PLA @Ender-5Max-all.json => Generic PLA @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic PLA @K1-all.json => Generic PLA @Creality K1-all.json} (72%) rename resources/profiles/Creality/filament/{Creality Generic PLA @K2-all.json => Generic PLA @Creality K2-all.json} (78%) rename resources/profiles/Creality/filament/{Creality Generic PLA.json => Generic PLA @Creality.json} (94%) rename resources/profiles/Creality/filament/{Creality HF Generic PLA.json => Generic PLA HF @Creality.json} (81%) rename resources/profiles/Creality/filament/{Creality Generic PLA High Speed @Ender-3V3-all.json => Generic PLA High Speed @Creality Ender-3V3-all.json} (63%) rename resources/profiles/Creality/filament/{Creality Generic PLA High Speed @Hi-all.json => Generic PLA High Speed @Creality Hi-all.json} (57%) rename resources/profiles/Creality/filament/{Creality Generic PLA High Speed @K1-all.json => Generic PLA High Speed @Creality K1-all.json} (63%) rename resources/profiles/Creality/filament/{Creality Generic PLA High Speed @K2-all.json => Generic PLA High Speed @Creality K2-all.json} (66%) rename resources/profiles/Creality/filament/{Creality Generic PLA Matte @Ender-3V3-all.json => Generic PLA Matte @Creality Ender-3V3-all.json} (64%) rename resources/profiles/Creality/filament/{Creality Generic PLA Matte @Hi-all.json => Generic PLA Matte @Creality Hi-all.json} (55%) rename resources/profiles/Creality/filament/{Creality Generic PLA Matte @K1-all.json => Generic PLA Matte @Creality K1-all.json} (65%) rename resources/profiles/Creality/filament/{Creality Generic PLA Matte @K2-all.json => Generic PLA Matte @Creality K2-all.json} (67%) rename resources/profiles/Creality/filament/{Creality Generic PLA Silk @Ender-3V3-all.json => Generic PLA Silk @Creality Ender-3V3-all.json} (64%) rename resources/profiles/Creality/filament/{Creality Generic PLA Silk @Hi-all.json => Generic PLA Silk @Creality Hi-all.json} (59%) rename resources/profiles/Creality/filament/{Creality Generic PLA Silk @K1-all.json => Generic PLA Silk @Creality K1-all.json} (65%) rename resources/profiles/Creality/filament/{Creality Generic PLA Silk @K2-all.json => Generic PLA Silk @Creality K2-all.json} (68%) rename resources/profiles/Creality/filament/{Creality Generic PLA Wood @Hi-all.json => Generic PLA Wood @Creality Hi-all.json} (59%) create mode 100644 resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json rename resources/profiles/Creality/filament/{Creality Generic PLA-CF @K1-all.json => Generic PLA-CF @Creality K1-all.json} (65%) rename resources/profiles/Creality/filament/{Creality Generic PLA-CF @K2-all.json => Generic PLA-CF @Creality K2-all.json} (70%) rename resources/profiles/Creality/filament/{Creality Generic PLA-CF.json => Generic PLA-CF @Creality.json} (92%) rename resources/profiles/Creality/filament/{Creality HF Generic Speed PLA.json => Generic Speed PLA @Creality HF.json} (79%) rename resources/profiles/Creality/filament/{Creality Generic TPU @Ender-3V3-all.json => Generic TPU @Creality Ender-3V3-all.json} (78%) rename resources/profiles/Creality/filament/{Creality Generic TPU @Ender-5Max-all.json => Generic TPU @Creality Ender-5Max-all.json} (93%) rename resources/profiles/Creality/filament/{Creality Generic TPU @Hi-all.json => Generic TPU @Creality Hi-all.json} (77%) rename resources/profiles/Creality/filament/{Creality Generic TPU @K1-all.json => Generic TPU @Creality K1-all.json} (69%) rename resources/profiles/Creality/filament/{Creality Generic TPU @K2-all.json => Generic TPU @Creality K2-all.json} (81%) rename resources/profiles/Creality/filament/{Creality Generic TPU.json => Generic TPU @Creality.json} (83%) rename resources/profiles/DeltaMaker/filament/{DeltaMaker Generic PETG.json => Generic PETG @DeltaMaker.json} (82%) rename resources/profiles/DeltaMaker/filament/{DeltaMaker Generic PLA.json => Generic PLA @DeltaMaker.json} (70%) rename resources/profiles/DeltaMaker/filament/{DeltaMaker Generic TPU.json => Generic TPU @DeltaMaker.json} (68%) rename resources/profiles/Dremel/filament/{Dremel Generic PLA @3D20 all.json => Generic PLA @Dremel 3D20 all.json} (66%) rename resources/profiles/Dremel/filament/{Dremel Generic PLA @3D40 all.json => Generic PLA @Dremel 3D40 all.json} (70%) rename resources/profiles/Dremel/filament/{Dremel Generic PLA @3D45 all.json => Generic PLA @Dremel 3D45 all.json} (74%) rename resources/profiles/Dremel/filament/{Dremel Generic PLA.json => Generic PLA @Dremel.json} (71%) rename resources/profiles/FLSun/filament/{FLSun Generic ABS.json => Generic ABS @FLSun.json} (71%) rename resources/profiles/FLSun/filament/{FLSun Generic ASA.json => Generic ASA @FLSun.json} (71%) rename resources/profiles/FLSun/filament/{FLSun Generic PA.json => Generic PA @FLSun.json} (74%) rename resources/profiles/FLSun/filament/{FLSun Generic PA-CF.json => Generic PA-CF @FLSun.json} (75%) rename resources/profiles/FLSun/filament/{FLSun Generic PC.json => Generic PC @FLSun.json} (71%) rename resources/profiles/FLSun/filament/{FLSun Generic PETG.json => Generic PETG @FLSun.json} (84%) rename resources/profiles/FLSun/filament/{FLSun S1 PLA Generic.json => Generic PLA @FLSun S1.json} (83%) rename resources/profiles/FLSun/filament/{FLSun T1 PLA Generic.json => Generic PLA @FLSun T1.json} (83%) rename resources/profiles/FLSun/filament/{FLSun Generic PLA.json => Generic PLA @FLSun.json} (73%) rename resources/profiles/FLSun/filament/{FLSun Generic PLA-CF.json => Generic PLA-CF @FLSun.json} (74%) rename resources/profiles/FLSun/filament/{FLSun Generic PVA.json => Generic PVA @FLSun.json} (75%) rename resources/profiles/FLSun/filament/{FLSun Generic TPU.json => Generic TPU @FLSun.json} (69%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic NexPA-CF25.json => FusRock NexPA-CF25.json} (94%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json => FusRock PAHT-CF @G3U 0.6 Nozzle.json} (78%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PAHT-CF.json => FusRock PAHT-CF.json} (94%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PAHT-GF.json => FusRock PAHT-GF.json} (72%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PET-CF @G3U 0.6 Nozzle.json => FusRock PET-CF @G3U 0.6 Nozzle.json} (78%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PET-CF.json => FusRock PET-CF.json} (94%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic PET-GF.json => FusRock PET-GF.json} (69%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic S-Multi @G3U 0.6 Nozzle.json => FusRock S-Multi @G3U 0.6 Nozzle.json} (77%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic S-Multi.json => FusRock S-Multi.json} (94%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic S-PAHT @G3U 0.6 Nozzle.json => FusRock S-PAHT @G3U 0.6 Nozzle.json} (77%) rename resources/profiles/Flashforge/filament/FusRock/{FusRock Generic S-PAHT.json => FusRock S-PAHT.json} (94%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json => Generic ABS @FF AD5M 0.25 Nozzle.json} (60%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ABS @G3U 0.6 Nozzle.json => Generic ABS @Flashforge G3U 0.6 Nozzle.json} (73%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ABS @G3U.json => Generic ABS @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ABS.json => Generic ABS @Flashforge.json} (88%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json => Generic ASA @FF AD5M 0.25 Nozzle.json} (64%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ASA @G3U 0.6 Nozzle.json => Generic ASA @Flashforge G3U 0.6 Nozzle.json} (76%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ASA @G3U.json => Generic ASA @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic ASA.json => Generic ASA @Flashforge.json} (95%) rename resources/profiles/Flashforge/filament/{Flashforge Generic HIPS @G3U 0.6 Nozzle.json => Generic HIPS @Flashforge G3U 0.6 Nozzle.json} (75%) rename resources/profiles/Flashforge/filament/{Flashforge Generic HIPS.json => Generic HIPS @Flashforge.json} (94%) rename resources/profiles/Flashforge/filament/{Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json => Generic HS PLA @FF AD5M 0.25 Nozzle.json} (71%) rename resources/profiles/Flashforge/filament/{Flashforge Generic HS PLA.json => Generic HS PLA @Flashforge.json} (96%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json => Generic PETG @FF AD5M 0.25 Nozzle.json} (58%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG @G3U 0.6 Nozzle.json => Generic PETG @Flashforge G3U 0.6 Nozzle.json} (72%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG @G3U 0.8 Nozzle.json => Generic PETG @Flashforge G3U 0.8 Nozzle.json} (73%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG @G3U.json => Generic PETG @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG.json => Generic PETG @Flashforge.json} (91%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json => Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json} (74%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json => Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json} (74%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG-CF @G3U.json => Generic PETG-CF @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PETG-CF10.json => Generic PETG-CF10 @Flashforge.json} (95%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json => Generic PLA @FF AD5M 0.25 Nozzle.json} (73%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA @G3U 0.6 Nozzle.json => Generic PLA @Flashforge G3U 0.6 Nozzle.json} (84%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA @G3U 0.8 Nozzle.json => Generic PLA @Flashforge G3U 0.8 Nozzle.json} (86%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA @G3U.json => Generic PLA @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA.json => Generic PLA @Flashforge.json} (89%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json => Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json} (73%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json => Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json} (73%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-CF @G3U.json => Generic PLA-CF @Flashforge G3U.json} (93%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-CF10.json => Generic PLA-CF10 @Flashforge.json} (96%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json => Generic PLA-SILK @FF AD5M 0.25 Nozzle.json} (71%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PLA-Silk.json => Generic PLA-Silk @Flashforge.json} (89%) rename resources/profiles/Flashforge/filament/{Flashforge Generic PVA.json => Generic PVA @Flashforge.json} (94%) rename resources/profiles/Flashforge/filament/{Flashforge Generic TPU.json => Generic TPU @Flashforge.json} (95%) rename resources/profiles/Flashforge/filament/Polymaker/{Polymaker Generic CoPA.json => Polymaker CoPA.json} (95%) rename resources/profiles/Flashforge/filament/Polymaker/{Polymaker Generic S1.json => Polymaker S1.json} (95%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic ABS.json => Generic ABS @FlyingBear.json} (69%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic PA-CF.json => Generic PA-CF @FlyingBear.json} (72%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic PC.json => Generic PC @FlyingBear.json} (67%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic PETG.json => Generic PETG @FlyingBear.json} (80%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic PLA.json => Generic PLA @FlyingBear.json} (69%) rename resources/profiles/FlyingBear/filament/{FlyingBear Generic TPU.json => Generic TPU @FlyingBear.json} (66%) rename resources/profiles/Ginger Additive/filament/{Ginger Generic PETG.json => Generic PETG @Ginger.json} (92%) rename resources/profiles/Ginger Additive/filament/{Ginger Generic PLA.json => Generic PLA @Ginger.json} (92%) rename resources/profiles/InfiMech/filament/{InfiMech Generic ABS.json => Generic ABS @InfiMech.json} (67%) rename resources/profiles/InfiMech/filament/{InfiMech Generic PA-CF.json => Generic PA-CF @InfiMech.json} (70%) rename resources/profiles/InfiMech/filament/{InfiMech Generic PC.json => Generic PC @InfiMech.json} (64%) rename resources/profiles/InfiMech/filament/{InfiMech Generic PETG.json => Generic PETG @InfiMech.json} (80%) rename resources/profiles/InfiMech/filament/{InfiMech Generic PLA.json => Generic PLA @InfiMech.json} (67%) rename resources/profiles/InfiMech/filament/{InfiMech Generic TPU.json => Generic TPU @InfiMech.json} (64%) rename resources/profiles/MagicMaker/filament/{MM Generic PEEK.json => Generic PEEK @MM.json} (84%) create mode 100644 resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic ABS @base.json => Generic ABS @OrcaArena base.json} (73%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic ASA.json => Generic ABS @OrcaArena.json} (57%) create mode 100644 resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic ASA @base.json => Generic ASA @OrcaArena base.json} (73%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PC.json => Generic ASA @OrcaArena.json} (57%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PA.json => Generic PA @OrcaArena.json} (74%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PA-CF.json => Generic PA-CF @OrcaArena.json} (81%) create mode 100644 resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PC @base.json => Generic PC @OrcaArena base.json} (73%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic ABS.json => Generic PC @OrcaArena.json} (57%) create mode 100644 resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PETG @base.json => Generic PETG @OrcaArena base.json} (94%) create mode 100644 resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json create mode 100644 resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PETG-CF @base.json => Generic PETG-CF @OrcaArena base.json} (92%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PLA @0.2 nozzle.json => Generic PLA @OrcaArena 0.2 nozzle.json} (69%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PLA @base.json => Generic PLA @OrcaArena base.json} (88%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PETG-CF @Arena X1C.json => Generic PLA @OrcaArena.json} (57%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PLA Silk @base.json => Generic PLA Silk @OrcaArena base.json} (88%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PLA Silk.json => Generic PLA Silk @OrcaArena.json} (63%) rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PLA-CF @base.json => Generic PLA-CF @OrcaArena base.json} (92%) create mode 100644 resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json create mode 100644 resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic PVA @base.json => Generic PVA @OrcaArena base.json} (79%) create mode 100644 resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json rename resources/profiles/OrcaArena/filament/{OrcaArena Generic TPU.json => Generic TPU @OrcaArena.json} (80%) delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json delete mode 100644 resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json rename resources/profiles/Peopoly/filament/{Peopoly Generic ABS.json => Generic ABS @Peopoly.json} (73%) rename resources/profiles/Peopoly/filament/{Peopoly Generic PETG.json => Generic PETG @Peopoly.json} (80%) rename resources/profiles/Peopoly/filament/{Peopoly Generic PLA.json => Generic PLA @Peopoly.json} (79%) create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic ABS @CORE One HF 0.4.json => Generic ABS @Prusa CORE One HF 0.4.json} (71%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @CORE One HF 0.5.json => Generic ABS @Prusa CORE One HF 0.5.json} (71%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @CORE One HF 0.6.json => Generic ABS @Prusa CORE One HF 0.6.json} (71%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @CORE One HF 0.8.json => Generic ABS @Prusa CORE One HF 0.8.json} (74%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @CORE One.json => Generic ABS @Prusa CORE One.json} (92%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MINIIS 0.25.json => Generic ABS @Prusa MINIIS 0.25.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MINIIS 0.6.json => Generic ABS @Prusa MINIIS 0.6.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MINIIS 0.8.json => Generic ABS @Prusa MINIIS 0.8.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MINIIS.json => Generic ABS @Prusa MINIIS.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK3.5 0.25.json => Generic ABS @Prusa MK3.5 0.25.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK3.5 0.6.json => Generic ABS @Prusa MK3.5 0.6.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK3.5 0.8.json => Generic ABS @Prusa MK3.5 0.8.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK3.5.json => Generic ABS @Prusa MK3.5.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK4.json => Generic ABS @Prusa MK4.json} (86%) create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK4S HF0.4.json => Generic ABS @Prusa MK4S HF0.4.json} (75%) create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json create mode 100644 resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic ABS @MK4S.json => Generic ABS @Prusa MK4S.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @XL 5T.json => Generic ABS @Prusa XL 5T.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS @XL.json => Generic ABS @Prusa XL.json} (90%) rename resources/profiles/{Anker/filament/Anker Generic ABS @base.json => Prusa/filament/Generic ABS @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS.json => Generic ABS @Prusa.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MINIIS 0.6.json => Generic ABS HF @Prusa MINIIS 0.6.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MINIIS 0.8.json => Generic ABS HF @Prusa MINIIS 0.8.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MINIIS.json => Generic ABS HF @Prusa MINIIS.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MK3.5 0.6.json => Generic ABS HF @Prusa MK3.5 0.6.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MK3.5 0.8.json => Generic ABS HF @Prusa MK3.5 0.8.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @MK3.5.json => Generic ABS HF @Prusa MK3.5.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ABS HF @base.json => Generic ABS HF @Prusa base.json} (60%) create mode 100644 resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One 0.8.json => Generic ASA @Prusa CORE One 0.8.json} (50%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One HF 0.4.json => Generic ASA @Prusa CORE One HF 0.4.json} (74%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One HF 0.5.json => Generic ASA @Prusa CORE One HF 0.5.json} (74%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One HF 0.6.json => Generic ASA @Prusa CORE One HF 0.6.json} (75%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One HF 0.8.json => Generic ASA @Prusa CORE One HF 0.8.json} (76%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @CORE One.json => Generic ASA @Prusa CORE One.json} (92%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MINIIS 0.25.json => Generic ASA @Prusa MINIIS 0.25.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MINIIS 0.6.json => Generic ASA @Prusa MINIIS 0.6.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MINIIS 0.8.json => Generic ASA @Prusa MINIIS 0.8.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MINIIS.json => Generic ASA @Prusa MINIIS.json} (80%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK3.5 0.25.json => Generic ASA @Prusa MK3.5 0.25.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK3.5 0.6.json => Generic ASA @Prusa MK3.5 0.6.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK3.5 0.8.json => Generic ASA @Prusa MK3.5 0.8.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK3.5.json => Generic ASA @Prusa MK3.5.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK4.json => Generic ASA @Prusa MK4.json} (86%) create mode 100644 resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json create mode 100644 resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK4S HF0.4.json => Generic ASA @Prusa MK4S HF0.4.json} (72%) create mode 100644 resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json create mode 100644 resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK4S HF0.8.json => Generic ASA @Prusa MK4S HF0.8.json} (58%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA @MK4S.json => Generic ASA @Prusa MK4S.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA.json => Generic ASA @Prusa.json} (88%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MINIIS 0.6.json => Generic ASA HF @Prusa MINIIS 0.6.json} (76%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MINIIS 0.8.json => Generic ASA HF @Prusa MINIIS 0.8.json} (76%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MINIIS.json => Generic ASA HF @Prusa MINIIS.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MK3.5 0.6.json => Generic ASA HF @Prusa MK3.5 0.6.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MK3.5 0.8.json => Generic ASA HF @Prusa MK3.5 0.8.json} (77%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @MK3.5.json => Generic ASA HF @Prusa MK3.5.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic ASA HF @base.json => Generic ASA HF @Prusa base.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic FLEX @XL 5T.json => Generic FLEX @Prusa XL 5T.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic FLEX @XL.json => Generic FLEX @Prusa XL.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MINIIS 0.25.json => Generic PA @Prusa MINIIS 0.25.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MINIIS 0.6.json => Generic PA @Prusa MINIIS 0.6.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MINIIS 0.8.json => Generic PA @Prusa MINIIS 0.8.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MINIIS.json => Generic PA @Prusa MINIIS.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MK3.5 0.25.json => Generic PA @Prusa MK3.5 0.25.json} (69%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MK3.5 0.6.json => Generic PA @Prusa MK3.5 0.6.json} (69%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MK3.5 0.8.json => Generic PA @Prusa MK3.5 0.8.json} (69%) rename resources/profiles/Prusa/filament/{Prusa Generic PA @MK3.5.json => Generic PA @Prusa MK3.5.json} (70%) rename resources/profiles/{Anker/filament/Anker Generic PA @base.json => Prusa/filament/Generic PA @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic PA.json => Generic PA @Prusa.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MINIIS 0.25.json => Generic PA-CF @Prusa MINIIS 0.25.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MINIIS 0.6.json => Generic PA-CF @Prusa MINIIS 0.6.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MINIIS 0.8.json => Generic PA-CF @Prusa MINIIS 0.8.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MINIIS.json => Generic PA-CF @Prusa MINIIS.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MK3.5 0.25.json => Generic PA-CF @Prusa MK3.5 0.25.json} (69%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MK3.5 0.6.json => Generic PA-CF @Prusa MK3.5 0.6.json} (70%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MK3.5 0.8.json => Generic PA-CF @Prusa MK3.5 0.8.json} (70%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @MK3.5.json => Generic PA-CF @Prusa MK3.5.json} (71%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF @base.json => Generic PA-CF @Prusa base.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PA-CF.json => Generic PA-CF @Prusa.json} (79%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MINIIS 0.25.json => Generic PC @Prusa MINIIS 0.25.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MINIIS 0.6.json => Generic PC @Prusa MINIIS 0.6.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MINIIS 0.8.json => Generic PC @Prusa MINIIS 0.8.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MINIIS.json => Generic PC @Prusa MINIIS.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MK3.5 0.25.json => Generic PC @Prusa MK3.5 0.25.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MK3.5 0.6.json => Generic PC @Prusa MK3.5 0.6.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MK3.5 0.8.json => Generic PC @Prusa MK3.5 0.8.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PC @MK3.5.json => Generic PC @Prusa MK3.5.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PC.json => Generic PC @Prusa.json} (85%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MINIIS 0.6.json => Generic PC HF @Prusa MINIIS 0.6.json} (58%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MINIIS 0.8.json => Generic PC HF @Prusa MINIIS 0.8.json} (58%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MINIIS.json => Generic PC HF @Prusa MINIIS.json} (59%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MK3.5 0.6.json => Generic PC HF @Prusa MK3.5 0.6.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MK3.5 0.8.json => Generic PC HF @Prusa MK3.5 0.8.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @MK3.5.json => Generic PC HF @Prusa MK3.5.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PC HF @base.json => Generic PC HF @Prusa base.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One 0.6.json => Generic PETG @Prusa CORE One 0.6.json} (51%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One 0.8.json => Generic PETG @Prusa CORE One 0.8.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One HF 0.4.json => Generic PETG @Prusa CORE One HF 0.4.json} (74%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One HF 0.5.json => Generic PETG @Prusa CORE One HF 0.5.json} (75%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One HF 0.6.json => Generic PETG @Prusa CORE One HF 0.6.json} (73%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One HF 0.8.json => Generic PETG @Prusa CORE One HF 0.8.json} (78%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @CORE One.json => Generic PETG @Prusa CORE One.json} (92%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MINIIS 0.25.json => Generic PETG @Prusa MINIIS 0.25.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MINIIS 0.6.json => Generic PETG @Prusa MINIIS 0.6.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MINIIS 0.8.json => Generic PETG @Prusa MINIIS 0.8.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MINIIS.json => Generic PETG @Prusa MINIIS.json} (85%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK3.5 0.25.json => Generic PETG @Prusa MK3.5 0.25.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK3.5 0.6.json => Generic PETG @Prusa MK3.5 0.6.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK3.5 0.8.json => Generic PETG @Prusa MK3.5 0.8.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK3.5.json => Generic PETG @Prusa MK3.5.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4.json => Generic PETG @Prusa MK4.json} (89%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S 0.6.json => Generic PETG @Prusa MK4S 0.6.json} (54%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S 0.8.json => Generic PETG @Prusa MK4S 0.8.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S HF0.4.json => Generic PETG @Prusa MK4S HF0.4.json} (76%) create mode 100644 resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S HF0.6.json => Generic PETG @Prusa MK4S HF0.6.json} (59%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S HF0.8.json => Generic PETG @Prusa MK4S HF0.8.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MK4S.json => Generic PETG @Prusa MK4S.json} (92%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @XL 5T.json => Generic PETG @Prusa XL 5T.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @XL.json => Generic PETG @Prusa XL.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @base.json => Generic PETG @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG.json => Generic PETG @Prusa.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MINIIS 0.6.json => Generic PETG HF @Prusa MINIIS 0.6.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MINIIS 0.8.json => Generic PETG HF @Prusa MINIIS 0.8.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG @MINIIS.json => Generic PETG HF @Prusa MINIIS.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MK3.5 0.6.json => Generic PETG HF @Prusa MK3.5 0.6.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MK3.5 0.8.json => Generic PETG HF @Prusa MK3.5 0.8.json} (81%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @MK3.5.json => Generic PETG HF @Prusa MK3.5.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PETG HF @base.json => Generic PETG HF @Prusa base.json} (60%) create mode 100644 resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One 0.8.json => Generic PLA @Prusa CORE One 0.8.json} (51%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One HF 0.4.json => Generic PLA @Prusa CORE One HF 0.4.json} (73%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One HF 0.5.json => Generic PLA @Prusa CORE One HF 0.5.json} (74%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One HF 0.6.json => Generic PLA @Prusa CORE One HF 0.6.json} (75%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One HF 0.8.json => Generic PLA @Prusa CORE One HF 0.8.json} (75%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @CORE One.json => Generic PLA @Prusa CORE One.json} (92%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MINIIS 0.25.json => Generic PLA @Prusa MINIIS 0.25.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MINIIS 0.6.json => Generic PLA @Prusa MINIIS 0.6.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MINIIS 0.8.json => Generic PLA @Prusa MINIIS 0.8.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MINIIS.json => Generic PLA @Prusa MINIIS.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK3.5 0.25.json => Generic PLA @Prusa MK3.5 0.25.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK3.5 0.6.json => Generic PLA @Prusa MK3.5 0.6.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK3.5 0.8.json => Generic PLA @Prusa MK3.5 0.8.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK3.5.json => Generic PLA @Prusa MK3.5.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4.json => Generic PLA @Prusa MK4.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S 0.6.json => Generic PLA @Prusa MK4S 0.6.json} (50%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S 0.8.json => Generic PLA @Prusa MK4S 0.8.json} (57%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S HF0.4.json => Generic PLA @Prusa MK4S HF0.4.json} (75%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S HF0.5.json => Generic PLA @Prusa MK4S HF0.5.json} (50%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S HF0.6.json => Generic PLA @Prusa MK4S HF0.6.json} (53%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S HF0.8.json => Generic PLA @Prusa MK4S HF0.8.json} (55%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @MK4S.json => Generic PLA @Prusa MK4S.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @XL 5T.json => Generic PLA @Prusa XL 5T.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @XL.json => Generic PLA @Prusa XL.json} (90%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA @base.json => Generic PLA @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA.json => Generic PLA @Prusa.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MINIIS 0.6.json => Generic PLA HF @Prusa MINIIS 0.6.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MINIIS 0.8.json => Generic PLA HF @Prusa MINIIS 0.8.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MINIIS.json => Generic PLA HF @Prusa MINIIS.json} (62%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MK3.5 0.6.json => Generic PLA HF @Prusa MK3.5 0.6.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MK3.5 0.8.json => Generic PLA HF @Prusa MK3.5 0.8.json} (65%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @MK3.5.json => Generic PLA HF @Prusa MK3.5.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA HF @base.json => Generic PLA HF @Prusa base.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA Silk @CORE One 0.6.json => Generic PLA Silk @Prusa CORE One 0.6.json} (52%) create mode 100644 resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic PLA Silk @CORE One.json => Generic PLA Silk @Prusa CORE One.json} (91%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA Silk @MK4S 0.6.json => Generic PLA Silk @Prusa MK4S 0.6.json} (55%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA Silk @MK4S 0.8.json => Generic PLA Silk @Prusa MK4S 0.8.json} (54%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA Silk @MK4S.json => Generic PLA Silk @Prusa MK4S.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MINIIS 0.25.json => Generic PLA-CF @Prusa MINIIS 0.25.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MINIIS 0.6.json => Generic PLA-CF @Prusa MINIIS 0.6.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MINIIS 0.8.json => Generic PLA-CF @Prusa MINIIS 0.8.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MINIIS.json => Generic PLA-CF @Prusa MINIIS.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MK3.5 0.25.json => Generic PLA-CF @Prusa MK3.5 0.25.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MK3.5 0.6.json => Generic PLA-CF @Prusa MK3.5 0.6.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MK3.5 0.8.json => Generic PLA-CF @Prusa MK3.5 0.8.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @MK3.5.json => Generic PLA-CF @Prusa MK3.5.json} (68%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF @base.json => Generic PLA-CF @Prusa base.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PLA-CF.json => Generic PLA-CF @Prusa.json} (82%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MINIIS 0.25.json => Generic PVA @Prusa MINIIS 0.25.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MINIIS 0.6.json => Generic PVA @Prusa MINIIS 0.6.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MINIIS 0.8.json => Generic PVA @Prusa MINIIS 0.8.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MINIIS.json => Generic PVA @Prusa MINIIS.json} (66%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MK3.5 0.25.json => Generic PVA @Prusa MK3.5 0.25.json} (68%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MK3.5 0.6.json => Generic PVA @Prusa MK3.5 0.6.json} (68%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MK3.5 0.8.json => Generic PVA @Prusa MK3.5 0.8.json} (68%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MK3.5.json => Generic PVA @Prusa MK3.5.json} (69%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @base.json => Generic PVA @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA.json => Generic PVA @Prusa.json} (80%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MINIIS 0.6.json => Generic PVA HF @Prusa MINIIS 0.6.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MINIIS 0.8.json => Generic PVA HF @Prusa MINIIS 0.8.json} (63%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MINIIS.json => Generic PVA HF @Prusa MINIIS.json} (64%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MK3.5 0.6.json => Generic PVA HF @Prusa MK3.5 0.6.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @MK3.5 0.8.json => Generic PVA HF @Prusa MK3.5 0.8.json} (67%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA @MK3.5.json => Generic PVA HF @Prusa MK3.5.json} (68%) rename resources/profiles/Prusa/filament/{Prusa Generic PVA HF @base.json => Generic PVA HF @Prusa base.json} (60%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @CORE One 0.6.json => Generic TPU @Prusa CORE One 0.6.json} (51%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @CORE One 0.8.json => Generic TPU @Prusa CORE One 0.8.json} (51%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @CORE One.json => Generic TPU @Prusa CORE One.json} (90%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @MINIIS.json => Generic TPU @Prusa MINIIS.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @MK3.5.json => Generic TPU @Prusa MK3.5.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @MK4.json => Generic TPU @Prusa MK4.json} (62%) create mode 100644 resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json create mode 100644 resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json rename resources/profiles/Prusa/filament/{Prusa Generic TPU @MK4S.json => Generic TPU @Prusa MK4S.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU @base.json => Generic TPU @Prusa base.json} (61%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU.json => Generic TPU @Prusa.json} (71%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU HF @MINIIS.json => Generic TPU HF @Prusa MINIIS.json} (86%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU HF @MK3.5.json => Generic TPU HF @Prusa MK3.5.json} (87%) rename resources/profiles/Prusa/filament/{Prusa Generic TPU HF @base.json => Generic TPU HF @Prusa base.json} (60%) delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json delete mode 100644 resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json => Generic ABS @Qidi Q1 Pro 0.2 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json => Generic ABS @Qidi Q1 Pro 0.4 nozzle.json} (63%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json => Generic ABS @Qidi Q1 Pro 0.6 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json => Generic ABS @Qidi Q1 Pro 0.8 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json => Generic ABS @Qidi X-Max 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json => Generic ABS @Qidi X-Plus 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json => Generic ABS @Qidi X-Plus 4 0.2 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json => Generic ABS @Qidi X-Plus 4 0.4 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json => Generic ABS @Qidi X-Plus 4 0.6 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json => Generic ABS @Qidi X-Plus 4 0.8 nozzle.json} (62%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json => Generic ABS @Qidi X-Smart 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ABS.json => Generic ABS @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json => Generic ASA @Qidi Q1 Pro 0.2 nozzle.json} (60%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json => Generic ASA @Qidi Q1 Pro 0.4 nozzle.json} (68%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json => Generic ASA @Qidi Q1 Pro 0.6 nozzle.json} (68%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json => Generic ASA @Qidi Q1 Pro 0.8 nozzle.json} (68%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json => Generic ASA @Qidi X-Max 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json => Generic ASA @Qidi X-Plus 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json => Generic ASA @Qidi X-Plus 4 0.2 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json => Generic ASA @Qidi X-Plus 4 0.4 nozzle.json} (67%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json => Generic ASA @Qidi X-Plus 4 0.6 nozzle.json} (67%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json => Generic ASA @Qidi X-Plus 4 0.8 nozzle.json} (67%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json => Generic ASA @Qidi X-Smart 3 0.2 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic ASA.json => Generic ASA @Qidi.json} (87%) rename resources/profiles/Qidi/filament/{Qidi Generic PA.json => Generic PA @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic PA-CF.json => Generic PA-CF @Qidi.json} (90%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @0.2 nozzle.json => Generic PC @Qidi 0.2 nozzle.json} (56%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @0.8 nozzle.json => Generic PC @Qidi 0.8 nozzle.json} (51%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json => Generic PC @Qidi Q1 Pro 0.2 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json => Generic PC @Qidi Q1 Pro 0.4 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json => Generic PC @Qidi Q1 Pro 0.6 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json => Generic PC @Qidi Q1 Pro 0.8 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json => Generic PC @Qidi X-Plus 4 0.2 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json => Generic PC @Qidi X-Plus 4 0.4 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json => Generic PC @Qidi X-Plus 4 0.6 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json => Generic PC @Qidi X-Plus 4 0.8 nozzle.json} (50%) rename resources/profiles/Qidi/filament/{Qidi Generic PC.json => Generic PC @Qidi.json} (88%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json => Generic PETG @Qidi Q1 Pro 0.2 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json => Generic PETG @Qidi Q1 Pro 0.4 nozzle.json} (68%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json => Generic PETG @Qidi Q1 Pro 0.6 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json => Generic PETG @Qidi Q1 Pro 0.8 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json => Generic PETG @Qidi X-Max 3 0.2 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json => Generic PETG @Qidi X-Plus 3 0.2 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json => Generic PETG @Qidi X-Plus 4 0.2 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json => Generic PETG @Qidi X-Plus 4 0.4 nozzle.json} (68%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json => Generic PETG @Qidi X-Plus 4 0.6 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json => Generic PETG @Qidi X-Plus 4 0.8 nozzle.json} (71%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json => Generic PETG @Qidi X-Smart 3 0.2 nozzle.json} (70%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG.json => Generic PETG @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic PETG-CF.json => Generic PETG-CF @Qidi.json} (92%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json => Generic PLA @Qidi Q1 Pro 0.2 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json => Generic PLA @Qidi Q1 Pro 0.4 nozzle.json} (55%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json => Generic PLA @Qidi Q1 Pro 0.6 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json => Generic PLA @Qidi Q1 Pro 0.8 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json => Generic PLA @Qidi X-Max 3 0.2 nozzle.json} (56%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json => Generic PLA @Qidi X-Plus 3 0.2 nozzle.json} (56%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json => Generic PLA @Qidi X-Plus 4 0.2 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json => Generic PLA @Qidi X-Plus 4 0.4 nozzle.json} (54%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json => Generic PLA @Qidi X-Plus 4 0.6 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json => Generic PLA @Qidi X-Plus 4 0.8 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json => Generic PLA @Qidi X-Smart 3 0.2 nozzle.json} (56%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA.json => Generic PLA @Qidi.json} (81%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json => Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json} (51%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json => Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json} (51%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json => Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json} (60%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json => Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json} (60%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA Silk.json => Generic PLA Silk @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json => Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json} (55%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json => Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json} (51%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json => Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json} (55%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json => Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json} (55%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json => Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json} (56%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json => Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json} (56%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json => Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json} (59%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json => Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json} (51%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json => Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json} (56%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json => Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json} (56%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json => Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json} (55%) create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json rename resources/profiles/Qidi/filament/{Qidi Generic PLA+.json => Generic PLA+ @Qidi.json} (83%) rename resources/profiles/Qidi/filament/{Qidi Generic PLA-CF.json => Generic PLA-CF @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic PVA.json => Generic PVA @Qidi.json} (89%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json => Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json} (57%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json => Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json} (56%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU 95A.json => Generic TPU 95A @Qidi.json} (87%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json => Generic TPU @Qidi Q1 Pro 0.4 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json => Generic TPU @Qidi X-Plus 4 0.4 nozzle.json} (53%) rename resources/profiles/Qidi/filament/{Qidi Generic TPU.json => Generic TPU @Qidi.json} (87%) delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json delete mode 100644 resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json rename resources/profiles/Ratrig/filament/{RatRig Generic ABS.json => Generic ABS @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic ASA.json => Generic ASA @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic PA.json => Generic PA @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic PA-CF.json => Generic PA-CF @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic PC.json => Generic PC @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic PCTG.json => Generic PCTG @RatRig.json} (92%) rename resources/profiles/Ratrig/filament/{RatRig Generic PETG.json => Generic PETG @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig Generic PLA.json => Generic PLA @RatRig.json} (92%) rename resources/profiles/Ratrig/filament/{RatRig Generic PLA-CF.json => Generic PLA-CF @RatRig.json} (92%) rename resources/profiles/Ratrig/filament/{RatRig Generic PVA.json => Generic PVA @RatRig.json} (92%) rename resources/profiles/Ratrig/filament/{RatRig Generic TPU.json => Generic TPU @RatRig.json} (92%) rename resources/profiles/SecKit/filament/{SecKit Generic ABS.json => Generic ABS @SecKit.json} (83%) rename resources/profiles/SecKit/filament/{SecKit Generic ASA.json => Generic ASA @SecKit.json} (81%) rename resources/profiles/SecKit/filament/{SecKit Generic PA.json => Generic PA @SecKit.json} (81%) rename resources/profiles/SecKit/filament/{SecKit Generic PA-CF.json => Generic PA-CF @SecKit.json} (81%) rename resources/profiles/SecKit/filament/{SecKit Generic PC.json => Generic PC @SecKit.json} (80%) rename resources/profiles/SecKit/filament/{SecKit Generic PETG.json => Generic PETG @SecKit.json} (86%) rename resources/profiles/SecKit/filament/{SecKit Generic PLA.json => Generic PLA @SecKit.json} (79%) rename resources/profiles/SecKit/filament/{SecKit Generic PLA-CF.json => Generic PLA-CF @SecKit.json} (79%) rename resources/profiles/SecKit/filament/{SecKit Generic PVA.json => Generic PVA @SecKit.json} (77%) rename resources/profiles/SecKit/filament/{SecKit Generic TPU.json => Generic TPU @SecKit.json} (76%) rename resources/profiles/Tiertime/filament/{Tiertime Generic ABS@300HS.json => Generic ABS @Tiertime 300HS.json} (77%) rename resources/profiles/Tiertime/filament/{Tiertime Generic ABS.json => Generic ABS @Tiertime.json} (81%) rename resources/profiles/Tiertime/filament/{Tiertime Generic ASA@300HS.json => Generic ASA @Tiertime 300HS.json} (74%) rename resources/profiles/Tiertime/filament/{Tiertime Generic ASA.json => Generic ASA @Tiertime.json} (79%) rename resources/profiles/Tiertime/filament/{Tiertime Generic BVOH@300HS.json => Generic BVOH @Tiertime 300HS.json} (59%) rename resources/profiles/Tiertime/filament/{Tiertime Generic BVOH.json => Generic BVOH @Tiertime.json} (66%) rename resources/profiles/Tiertime/filament/{Tiertime Generic EVA@300HS.json => Generic EVA @Tiertime 300HS.json} (91%) rename resources/profiles/Tiertime/filament/{Tiertime Generic EVA.json => Generic EVA @Tiertime.json} (93%) rename resources/profiles/Tiertime/filament/{Tiertime Generic HIPS@300HS.json => Generic HIPS @Tiertime 300HS.json} (62%) rename resources/profiles/Tiertime/filament/{Tiertime Generic HIPS.json => Generic HIPS @Tiertime.json} (68%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PA@300HS.json => Generic PA @Tiertime 300HS.json} (82%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PA.json => Generic PA @Tiertime.json} (85%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PA-CF@300HS.json => Generic PA-CF @Tiertime 300HS.json} (75%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PA-CF.json => Generic PA-CF @Tiertime.json} (79%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PC@300HS.json => Generic PC @Tiertime 300HS.json} (67%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PC.json => Generic PC @Tiertime.json} (72%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PCTG@300HS.json => Generic PCTG @Tiertime 300HS.json} (89%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PCTG.json => Generic PCTG @Tiertime.json} (91%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PE@300HS.json => Generic PE @Tiertime 300HS.json} (87%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PE.json => Generic PE @Tiertime.json} (89%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PE-CF@300HS.json => Generic PE-CF @Tiertime 300HS.json} (86%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PE-CF.json => Generic PE-CF @Tiertime.json} (89%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PETG@300HS.json => Generic PETG @Tiertime 300HS.json} (88%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PETG.json => Generic PETG @Tiertime.json} (91%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PETG-CF@300HS.json => Generic PETG-CF @Tiertime 300HS.json} (89%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PETG-CF.json => Generic PETG-CF @Tiertime.json} (91%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PHA@300HS.json => Generic PHA @Tiertime 300HS.json} (60%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PHA.json => Generic PHA @Tiertime.json} (66%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA@300HS.json => Generic PLA @Tiertime 300HS.json} (82%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA.json => Generic PLA @Tiertime.json} (85%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA High Speed@300HS.json => Generic PLA High Speed @Tiertime 300HS.json} (65%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA High Speed.json => Generic PLA High Speed @Tiertime.json} (71%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA Silk@300HS.json => Generic PLA Silk @Tiertime 300HS.json} (82%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA Silk.json => Generic PLA Silk @Tiertime.json} (86%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA-CF@300HS.json => Generic PLA-CF @Tiertime 300HS.json} (88%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PLA-CF.json => Generic PLA-CF @Tiertime.json} (90%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP@300HS.json => Generic PP @Tiertime 300HS.json} (60%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP.json => Generic PP @Tiertime.json} (66%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP-CF@300HS.json => Generic PP-CF @Tiertime 300HS.json} (69%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP-CF.json => Generic PP-CF @Tiertime.json} (74%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP-GF@300HS.json => Generic PP-GF @Tiertime 300HS.json} (69%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PP-GF.json => Generic PP-GF @Tiertime.json} (74%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPA-CF@300HS.json => Generic PPA-CF @Tiertime 300HS.json} (69%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPA-CF.json => Generic PPA-CF @Tiertime.json} (74%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPA-GF@300HS.json => Generic PPA-GF @Tiertime 300HS.json} (65%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPA-GF.json => Generic PPA-GF @Tiertime.json} (70%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPS@300HS.json => Generic PPS @Tiertime 300HS.json} (60%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPS.json => Generic PPS @Tiertime.json} (66%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPS-CF@300HS.json => Generic PPS-CF @Tiertime 300HS.json} (74%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PPS-CF.json => Generic PPS-CF @Tiertime.json} (79%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PVA@300HS.json => Generic PVA @Tiertime 300HS.json} (70%) rename resources/profiles/Tiertime/filament/{Tiertime Generic PVA.json => Generic PVA @Tiertime.json} (75%) rename resources/profiles/Tiertime/filament/{Tiertime Generic SBS@300HS.json => Generic SBS @Tiertime 300HS.json} (82%) rename resources/profiles/Tiertime/filament/{Tiertime Generic SBS.json => Generic SBS @Tiertime.json} (85%) rename resources/profiles/Tiertime/filament/{Tiertime Generic TPU@300HS.json => Generic TPU @Tiertime 300HS.json} (81%) rename resources/profiles/Tiertime/filament/{Tiertime Generic TPU.json => Generic TPU @Tiertime.json} (84%) rename resources/profiles/TwoTrees/filament/{TwoTrees Generic 95A TPU @SK1.json => Generic 95A TPU @TwoTrees SK1.json} (74%) rename resources/profiles/TwoTrees/filament/{TwoTrees Generic HS PLA @SK1.json => Generic HS PLA @TwoTrees SK1.json} (83%) rename resources/profiles/Vzbot/filament/{Vzbot Generic ABS.json => Generic ABS @Vzbot.json} (75%) rename resources/profiles/Vzbot/filament/{Vzbot Generic ASA.json => Generic ASA @Vzbot.json} (75%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PA.json => Generic PA @Vzbot.json} (77%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PA-CF.json => Generic PA-CF @Vzbot.json} (77%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PC.json => Generic PC @Vzbot.json} (75%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PETG.json => Generic PETG @Vzbot.json} (85%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PLA.json => Generic PLA @Vzbot.json} (76%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PLA-CF.json => Generic PLA-CF @Vzbot.json} (77%) rename resources/profiles/Vzbot/filament/{Vzbot Generic PVA.json => Generic PVA @Vzbot.json} (78%) rename resources/profiles/Vzbot/filament/{Vzbot Generic TPU.json => Generic TPU @Vzbot.json} (73%) rename resources/profiles/Wanhao France/filament/{Yumi Generic PETG.json => Generic PETG @Yumi.json} (91%) rename resources/profiles/Wanhao France/filament/{Yumi Generic PLA.json => Generic PLA @Yumi.json} (81%) diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index 544d889b4f..098b1df003 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ @@ -161,172 +161,172 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Anker Generic ABS @base", - "sub_path": "filament/Anker Generic ABS @base.json" + "name": "Generic ABS @Anker base", + "sub_path": "filament/Generic ABS @Anker base.json" }, { - "name": "Anker Generic ASA @base", - "sub_path": "filament/Anker Generic ASA @base.json" + "name": "Generic ASA @Anker base", + "sub_path": "filament/Generic ASA @Anker base.json" }, { - "name": "Anker Generic PA @base", - "sub_path": "filament/Anker Generic PA @base.json" + "name": "Generic PA @Anker base", + "sub_path": "filament/Generic PA @Anker base.json" }, { - "name": "Anker Generic PA-CF @base", - "sub_path": "filament/Anker Generic PA-CF @base.json" + "name": "Generic PA-CF @Anker base", + "sub_path": "filament/Generic PA-CF @Anker base.json" }, { - "name": "Anker Generic PC @base", - "sub_path": "filament/Anker Generic PC @base.json" + "name": "Generic PC @Anker base", + "sub_path": "filament/Generic PC @Anker base.json" }, { - "name": "Anker Generic PETG @base", - "sub_path": "filament/Anker Generic PETG @base.json" + "name": "Generic PETG @Anker base", + "sub_path": "filament/Generic PETG @Anker base.json" }, { - "name": "Anker Generic PETG-CF @base", - "sub_path": "filament/Anker Generic PETG-CF @base.json" + "name": "Generic PETG-CF @Anker base", + "sub_path": "filament/Generic PETG-CF @Anker base.json" }, { - "name": "Anker Generic PLA @base", - "sub_path": "filament/Anker Generic PLA @base.json" + "name": "Generic PLA @Anker base", + "sub_path": "filament/Generic PLA @Anker base.json" }, { - "name": "Anker Generic PLA Silk @base", - "sub_path": "filament/Anker Generic PLA Silk @base.json" + "name": "Generic PLA Silk @Anker base", + "sub_path": "filament/Generic PLA Silk @Anker base.json" }, { - "name": "Anker Generic PLA+ @base", - "sub_path": "filament/Anker Generic PLA+ @base.json" + "name": "Generic PLA+ @Anker base", + "sub_path": "filament/Generic PLA+ @Anker base.json" }, { - "name": "Anker Generic PLA-CF @base", - "sub_path": "filament/Anker Generic PLA-CF @base.json" + "name": "Generic PLA-CF @Anker base", + "sub_path": "filament/Generic PLA-CF @Anker base.json" }, { - "name": "Anker Generic PVA @base", - "sub_path": "filament/Anker Generic PVA @base.json" + "name": "Generic PVA @Anker base", + "sub_path": "filament/Generic PVA @Anker base.json" }, { - "name": "Anker Generic TPU @base", - "sub_path": "filament/Anker Generic TPU @base.json" + "name": "Generic TPU @Anker base", + "sub_path": "filament/Generic TPU @Anker base.json" }, { - "name": "Anker Generic ABS", - "sub_path": "filament/Anker Generic ABS.json" + "name": "Generic ABS @Anker", + "sub_path": "filament/Generic ABS @Anker.json" }, { - "name": "Anker Generic ABS 0.2 nozzle", - "sub_path": "filament/Anker Generic ABS 0.2 nozzle.json" + "name": "Generic ABS @Anker 0.2 nozzle", + "sub_path": "filament/Generic ABS @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic ABS 0.25 nozzle", - "sub_path": "filament/Anker Generic ABS 0.25 nozzle.json" + "name": "Generic ABS @Anker 0.25 nozzle", + "sub_path": "filament/Generic ABS @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic ASA", - "sub_path": "filament/Anker Generic ASA.json" + "name": "Generic ASA @Anker", + "sub_path": "filament/Generic ASA @Anker.json" }, { - "name": "Anker Generic ASA 0.2 nozzle", - "sub_path": "filament/Anker Generic ASA 0.2 nozzle.json" + "name": "Generic ASA @Anker 0.2 nozzle", + "sub_path": "filament/Generic ASA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic ASA 0.25 nozzle", - "sub_path": "filament/Anker Generic ASA 0.25 nozzle.json" + "name": "Generic ASA @Anker 0.25 nozzle", + "sub_path": "filament/Generic ASA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PA", - "sub_path": "filament/Anker Generic PA.json" + "name": "Generic PA @Anker", + "sub_path": "filament/Generic PA @Anker.json" }, { - "name": "Anker Generic PA 0.2 nozzle", - "sub_path": "filament/Anker Generic PA 0.2 nozzle.json" + "name": "Generic PA @Anker 0.2 nozzle", + "sub_path": "filament/Generic PA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PA 0.25 nozzle", - "sub_path": "filament/Anker Generic PA 0.25 nozzle.json" + "name": "Generic PA @Anker 0.25 nozzle", + "sub_path": "filament/Generic PA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PA-CF", - "sub_path": "filament/Anker Generic PA-CF.json" + "name": "Generic PA-CF @Anker", + "sub_path": "filament/Generic PA-CF @Anker.json" }, { - "name": "Anker Generic PC", - "sub_path": "filament/Anker Generic PC.json" + "name": "Generic PC @Anker", + "sub_path": "filament/Generic PC @Anker.json" }, { - "name": "Anker Generic PC 0.2 nozzle", - "sub_path": "filament/Anker Generic PC 0.2 nozzle.json" + "name": "Generic PC @Anker 0.2 nozzle", + "sub_path": "filament/Generic PC @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PC 0.25 nozzle", - "sub_path": "filament/Anker Generic PC 0.25 nozzle.json" + "name": "Generic PC @Anker 0.25 nozzle", + "sub_path": "filament/Generic PC @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PETG", - "sub_path": "filament/Anker Generic PETG.json" + "name": "Generic PETG @Anker", + "sub_path": "filament/Generic PETG @Anker.json" }, { - "name": "Anker Generic PETG 0.2 nozzle", - "sub_path": "filament/Anker Generic PETG 0.2 nozzle.json" + "name": "Generic PETG @Anker 0.2 nozzle", + "sub_path": "filament/Generic PETG @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PETG 0.25 nozzle", - "sub_path": "filament/Anker Generic PETG 0.25 nozzle.json" + "name": "Generic PETG @Anker 0.25 nozzle", + "sub_path": "filament/Generic PETG @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PETG-CF", - "sub_path": "filament/Anker Generic PETG-CF.json" + "name": "Generic PETG-CF @Anker", + "sub_path": "filament/Generic PETG-CF @Anker.json" }, { - "name": "Anker Generic PLA", - "sub_path": "filament/Anker Generic PLA.json" + "name": "Generic PLA @Anker", + "sub_path": "filament/Generic PLA @Anker.json" }, { - "name": "Anker Generic PLA 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA 0.2 nozzle.json" + "name": "Generic PLA @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA 0.25 nozzle.json" + "name": "Generic PLA @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA Silk", - "sub_path": "filament/Anker Generic PLA Silk.json" + "name": "Generic PLA Silk @Anker", + "sub_path": "filament/Generic PLA Silk @Anker.json" }, { - "name": "Anker Generic PLA Silk 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA Silk 0.2 nozzle.json" + "name": "Generic PLA Silk @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA Silk @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA Silk 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA Silk 0.25 nozzle.json" + "name": "Generic PLA Silk @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA Silk @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA+", - "sub_path": "filament/Anker Generic PLA+.json" + "name": "Generic PLA+ @Anker", + "sub_path": "filament/Generic PLA+ @Anker.json" }, { - "name": "Anker Generic PLA+ 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA+ 0.2 nozzle.json" + "name": "Generic PLA+ @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA+ 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA+ 0.25 nozzle.json" + "name": "Generic PLA+ @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA+ @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA-CF", - "sub_path": "filament/Anker Generic PLA-CF.json" + "name": "Generic PLA-CF @Anker", + "sub_path": "filament/Generic PLA-CF @Anker.json" }, { - "name": "Anker Generic PVA", - "sub_path": "filament/Anker Generic PVA.json" + "name": "Generic PVA @Anker", + "sub_path": "filament/Generic PVA @Anker.json" }, { - "name": "Anker Generic TPU", - "sub_path": "filament/Anker Generic TPU.json" + "name": "Generic TPU @Anker", + "sub_path": "filament/Generic TPU @Anker.json" } ], "machine_list": [ diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json deleted file mode 100644 index 90c78475bd..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk 0.2 nozzle", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "A1l6NiwRrasdV556", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json deleted file mode 100644 index 45032d46c3..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk 0.25 nozzle", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "yzHmKTOtA9JamlNf", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk.json deleted file mode 100644 index df8b1d7cdb..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "BGttYO9m2rGcnrEG", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json deleted file mode 100644 index 9923efcd6f..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+ 0.2 nozzle", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "6IcMSjyxt0szdUuY", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json deleted file mode 100644 index 809b57ef69..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+ 0.25 nozzle", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "a2Rf07ZUhpTPONN1", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+.json b/resources/profiles/Anker/filament/Anker Generic PLA+.json deleted file mode 100644 index 4c4ded7c11..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "0yQN44WNvLVjQu2b", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA-CF.json b/resources/profiles/Anker/filament/Anker Generic PLA-CF.json deleted file mode 100644 index 7a2d6d5e97..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA-CF.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA-CF", - "inherits": "Anker Generic PLA-CF @base", - "from": "system", - "setting_id": "diNUVM7UcHLnOr9J", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA.json b/resources/profiles/Anker/filament/Anker Generic PLA.json deleted file mode 100644 index 1c4b7bc5fb..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA", - "inherits": "Anker Generic PLA @base", - "from": "system", - "setting_id": "qfKC91VAAFZSExhm", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PVA.json b/resources/profiles/Anker/filament/Anker Generic PVA.json deleted file mode 100644 index 97039a12d6..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PVA.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PVA", - "inherits": "Anker Generic PVA @base", - "from": "system", - "setting_id": "GRtdOKUkQfZ5eDH4", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic TPU.json b/resources/profiles/Anker/filament/Anker Generic TPU.json deleted file mode 100644 index fb99d95f0d..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic TPU.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic TPU", - "inherits": "Anker Generic TPU @base", - "from": "system", - "setting_id": "YyTaPGGiEyAzmh9A", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json index aaa175bacd..c3e47c80a3 100644 --- a/resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ABS 0.2 nozzle", - "inherits": "Anker Generic ABS @base", + "name": "Generic ABS @Anker 0.2 nozzle", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS 0.2 nozzle", "from": "system", - "setting_id": "BD5ODYVM90Ig44C5", + "setting_id": "iOCt7x95XbWYMe5q", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json index 689836eae3..64fd62eb64 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PETG 0.25 nozzle", - "inherits": "Anker Generic PETG @base", + "name": "Generic ABS @Anker 0.25 nozzle", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS 0.25 nozzle", "from": "system", - "setting_id": "UgKfPuleh1xnoJLT", + "setting_id": "7Q2pr70SpSjK7v7Y", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json b/resources/profiles/Anker/filament/Generic ABS @Anker base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @base.json rename to resources/profiles/Anker/filament/Generic ABS @Anker base.json index c64feecc6d..fe24d081e4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @base.json +++ b/resources/profiles/Anker/filament/Generic ABS @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic ABS @base", + "name": "Generic ABS @Anker base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OFvGc67v", + "filament_id": "OFY9muEs", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic ASA.json b/resources/profiles/Anker/filament/Generic ABS @Anker.json similarity index 65% rename from resources/profiles/Anker/filament/Anker Generic ASA.json rename to resources/profiles/Anker/filament/Generic ABS @Anker.json index 66041c0463..978bc00e31 100644 --- a/resources/profiles/Anker/filament/Anker Generic ASA.json +++ b/resources/profiles/Anker/filament/Generic ABS @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ASA", - "inherits": "Anker Generic ASA @base", + "name": "Generic ABS @Anker", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS", "from": "system", - "setting_id": "QiFoBW5WuDUJGmFZ", + "setting_id": "x3IBYtgKBx6Mszzk", "instantiation": "true", "compatible_printers": [ "Anker M5 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json index 18686402e1..1a40e93730 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PETG 0.2 nozzle", - "inherits": "Anker Generic PETG @base", + "name": "Generic ASA @Anker 0.2 nozzle", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA 0.2 nozzle", "from": "system", - "setting_id": "VItvDP6zmenWXwPO", + "setting_id": "lTR8QLbuttyVs5UW", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json index 76c10b1018..0b85eef27c 100644 --- a/resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ABS 0.25 nozzle", - "inherits": "Anker Generic ABS @base", + "name": "Generic ASA @Anker 0.25 nozzle", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA 0.25 nozzle", "from": "system", - "setting_id": "WS5wXckNuiQqSVwO", + "setting_id": "FU4BiMydEyo7zxq5", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Anker/filament/Anker Generic ASA @base.json b/resources/profiles/Anker/filament/Generic ASA @Anker base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic ASA @base.json rename to resources/profiles/Anker/filament/Generic ASA @Anker base.json index 585c1d0079..f2349d13ab 100644 --- a/resources/profiles/Anker/filament/Anker Generic ASA @base.json +++ b/resources/profiles/Anker/filament/Generic ASA @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic ASA @base", + "name": "Generic ASA @Anker base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OFRiyes1", + "filament_id": "OFLPAxz3", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PETG-CF.json b/resources/profiles/Anker/filament/Generic ASA @Anker.json similarity index 65% rename from resources/profiles/Anker/filament/Anker Generic PETG-CF.json rename to resources/profiles/Anker/filament/Generic ASA @Anker.json index 3f0dd59e94..53b84223df 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG-CF.json +++ b/resources/profiles/Anker/filament/Generic ASA @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PETG-CF", - "inherits": "Anker Generic PETG-CF @base", + "name": "Generic ASA @Anker", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA", "from": "system", - "setting_id": "j8PLF6AZD0R0oVs8", + "setting_id": "aDADuxiEKt2dVKOJ", "instantiation": "true", "compatible_printers": [ "Anker M5 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json similarity index 55% rename from resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json index 3e7a0b85d1..6460721e2f 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PA 0.2 nozzle", - "inherits": "Anker Generic PA @base", + "name": "Generic PA @Anker 0.2 nozzle", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA 0.2 nozzle", "from": "system", - "setting_id": "NZB26MSD9WbOeY2S", + "setting_id": "tYAT7xnNFD6gY84A", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json similarity index 55% rename from resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json index 8c0233d67e..ee2514e92c 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PA 0.25 nozzle", - "inherits": "Anker Generic PA @base", + "name": "Generic PA @Anker 0.25 nozzle", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA 0.25 nozzle", "from": "system", - "setting_id": "Wj7oXTGUxo8lie1B", + "setting_id": "Zlv65wLA94PbevRG", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @base.json b/resources/profiles/Anker/filament/Generic PA @Anker base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic PA @base.json rename to resources/profiles/Anker/filament/Generic PA @Anker base.json index 08528488af..b4a45b1e66 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @base.json +++ b/resources/profiles/Anker/filament/Generic PA @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PA @base", + "name": "Generic PA @Anker base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OFIy3kLw", + "filament_id": "OFg8ndtj", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PC.json b/resources/profiles/Anker/filament/Generic PA @Anker.json similarity index 60% rename from resources/profiles/Anker/filament/Anker Generic PC.json rename to resources/profiles/Anker/filament/Generic PA @Anker.json index 3be5d34b71..e9acc2d7f6 100644 --- a/resources/profiles/Anker/filament/Anker Generic PC.json +++ b/resources/profiles/Anker/filament/Generic PA @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PC", - "inherits": "Anker Generic PC @base", + "name": "Generic PA @Anker", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA", "from": "system", - "setting_id": "xY25QcIsR9pWai3n", + "setting_id": "sLWVtBxpAC53eUwo", "instantiation": "true", "compatible_printers": [ "Anker M5 All-Metal 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json b/resources/profiles/Anker/filament/Generic PA-CF @Anker base.json similarity index 79% rename from resources/profiles/Anker/filament/Anker Generic PA-CF @base.json rename to resources/profiles/Anker/filament/Generic PA-CF @Anker base.json index ef1343cd5a..fc0740ee53 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json +++ b/resources/profiles/Anker/filament/Generic PA-CF @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PA-CF @base", + "name": "Generic PA-CF @Anker base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OF7uE5KB", + "filament_id": "OFQLcbps", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Anker/filament/Anker Generic PA.json b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json similarity index 59% rename from resources/profiles/Anker/filament/Anker Generic PA.json rename to resources/profiles/Anker/filament/Generic PA-CF @Anker.json index 43f3724ea9..6c3b2d1860 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA.json +++ b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PA", - "inherits": "Anker Generic PA @base", + "name": "Generic PA-CF @Anker", + "inherits": "Generic PA-CF @Anker base", + "renamed_from": "Anker Generic PA-CF", "from": "system", - "setting_id": "QbIiX554Yee6vb32", + "setting_id": "K4LcpR0zBp5klSpb", "instantiation": "true", "compatible_printers": [ "Anker M5 All-Metal 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json similarity index 55% rename from resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json index 87f09622b9..0126f9f893 100644 --- a/resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PC 0.2 nozzle", - "inherits": "Anker Generic PC @base", + "name": "Generic PC @Anker 0.2 nozzle", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC 0.2 nozzle", "from": "system", - "setting_id": "GhIOAidtgDkzh9Aj", + "setting_id": "2sSOgctcnVh9bGbQ", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json similarity index 55% rename from resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json index 38794a6a44..50aca840aa 100644 --- a/resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PC 0.25 nozzle", - "inherits": "Anker Generic PC @base", + "name": "Generic PC @Anker 0.25 nozzle", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC 0.25 nozzle", "from": "system", - "setting_id": "TQm9EPdenyGJMvgP", + "setting_id": "h7IRuq5uekjNw4vg", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Anker/filament/Anker Generic PC @base.json b/resources/profiles/Anker/filament/Generic PC @Anker base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic PC @base.json rename to resources/profiles/Anker/filament/Generic PC @Anker base.json index 85eb21469c..90ded72d2f 100644 --- a/resources/profiles/Anker/filament/Anker Generic PC @base.json +++ b/resources/profiles/Anker/filament/Generic PC @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic PC @base", + "name": "Generic PC @Anker base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OFGPJxnt", + "filament_id": "OFLakOUI", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PA-CF.json b/resources/profiles/Anker/filament/Generic PC @Anker.json similarity index 60% rename from resources/profiles/Anker/filament/Anker Generic PA-CF.json rename to resources/profiles/Anker/filament/Generic PC @Anker.json index b821bede88..5433518c5a 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA-CF.json +++ b/resources/profiles/Anker/filament/Generic PC @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PA-CF", - "inherits": "Anker Generic PA-CF @base", + "name": "Generic PC @Anker", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC", "from": "system", - "setting_id": "qdsEps11ugFHJkn7", + "setting_id": "ffufXVvW95sunH1B", "instantiation": "true", "compatible_printers": [ "Anker M5 All-Metal 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json similarity index 57% rename from resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json index 6c31b3949c..2ff7eca4d1 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PLA 0.2 nozzle", - "inherits": "Anker Generic PLA @base", + "name": "Generic PETG @Anker 0.2 nozzle", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG 0.2 nozzle", "from": "system", - "setting_id": "j6QmCITPJoP7bWHq", + "setting_id": "67ZHuiXPyCP6Tdtr", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json similarity index 57% rename from resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json index fad3cb2a20..9f9ae2da35 100644 --- a/resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ASA 0.25 nozzle", - "inherits": "Anker Generic ASA @base", + "name": "Generic PETG @Anker 0.25 nozzle", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG 0.25 nozzle", "from": "system", - "setting_id": "ErUUDTQ7h1wNHAKT", + "setting_id": "aLuRALDt0Otbd2So", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Anker/filament/Anker Generic PETG @base.json b/resources/profiles/Anker/filament/Generic PETG @Anker base.json similarity index 83% rename from resources/profiles/Anker/filament/Anker Generic PETG @base.json rename to resources/profiles/Anker/filament/Generic PETG @Anker base.json index 8bd93439b8..9a0ccc2fe4 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG @base.json +++ b/resources/profiles/Anker/filament/Generic PETG @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PETG @base", + "name": "Generic PETG @Anker base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFgvOmM2", + "filament_id": "OFYPdQJh", "instantiation": "false", "filament_type": [ "PETG" diff --git a/resources/profiles/Anker/filament/Generic PETG @Anker.json b/resources/profiles/Anker/filament/Generic PETG @Anker.json new file mode 100644 index 0000000000..cdb08f8671 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG @Anker", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG", + "from": "system", + "setting_id": "hvV0rmnzRHJk9sMz", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json b/resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json similarity index 86% rename from resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json rename to resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json index c39b36f841..3c0f59949a 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json +++ b/resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PETG-CF @base", + "name": "Generic PETG-CF @Anker base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OF1daEUW", + "filament_id": "OFoYSJKi", "instantiation": "false", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json b/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json new file mode 100644 index 0000000000..e5a265c40f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Anker", + "inherits": "Generic PETG-CF @Anker base", + "renamed_from": "Anker Generic PETG-CF", + "from": "system", + "setting_id": "vCAuQeQLoXUk28ph", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json rename to resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json index b13a09de2a..e8ffdb8c57 100644 --- a/resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ASA 0.2 nozzle", - "inherits": "Anker Generic ASA @base", + "name": "Generic PLA @Anker 0.2 nozzle", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA 0.2 nozzle", "from": "system", - "setting_id": "G7pzEyyhPFDnae3R", + "setting_id": "rCvmCzPgi4KA6nmI", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json similarity index 58% rename from resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json rename to resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json index d3775b07e2..5e4e3e0f0b 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json +++ b/resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PLA 0.25 nozzle", - "inherits": "Anker Generic PLA @base", + "name": "Generic PLA @Anker 0.25 nozzle", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA 0.25 nozzle", "from": "system", - "setting_id": "uKfcnPWdXxAGB5Ls", + "setting_id": "C0hNEbEueKrcYojS", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/Anker/filament/Anker Generic PLA @base.json b/resources/profiles/Anker/filament/Generic PLA @Anker base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic PLA @base.json rename to resources/profiles/Anker/filament/Generic PLA @Anker base.json index bfe79d7ec5..d9cc2b2641 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA @base.json +++ b/resources/profiles/Anker/filament/Generic PLA @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic PLA @base", + "name": "Generic PLA @Anker base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFndmfJ1", + "filament_id": "OFDSrzZ8", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic PETG.json b/resources/profiles/Anker/filament/Generic PLA @Anker.json similarity index 65% rename from resources/profiles/Anker/filament/Anker Generic PETG.json rename to resources/profiles/Anker/filament/Generic PLA @Anker.json index ed70b54983..5049571bcb 100644 --- a/resources/profiles/Anker/filament/Anker Generic PETG.json +++ b/resources/profiles/Anker/filament/Generic PLA @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic PETG", - "inherits": "Anker Generic PETG @base", + "name": "Generic PLA @Anker", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA", "from": "system", - "setting_id": "FMnK9qOMiqDcGqhd", + "setting_id": "GfVhcxRmt6mHSemI", "instantiation": "true", "compatible_printers": [ "Anker M5 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..e28ab1c79a --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker 0.2 nozzle", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk 0.2 nozzle", + "from": "system", + "setting_id": "NWGiPWYmLVktDMJt", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..2699cb1aea --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker 0.25 nozzle", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk 0.25 nozzle", + "from": "system", + "setting_id": "4thKBCnYgDtnAtF5", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json similarity index 87% rename from resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json rename to resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json index aa3c69e034..2db35d21c1 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PLA Silk @base", + "name": "Generic PLA Silk @Anker base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFXyyfX6", + "filament_id": "OFesA6rF", "instantiation": "false", "filament_cost": [ "20" diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json new file mode 100644 index 0000000000..9629ba4f0b --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk", + "from": "system", + "setting_id": "URRIeNXIiIPjxbKL", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..f32fb75a92 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker 0.2 nozzle", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+ 0.2 nozzle", + "from": "system", + "setting_id": "5m3xLxdReqLlE2Jp", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..291773e546 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker 0.25 nozzle", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+ 0.25 nozzle", + "from": "system", + "setting_id": "wwkWVDsg6SoeCS0F", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker base.json similarity index 82% rename from resources/profiles/Anker/filament/Anker Generic PLA+ @base.json rename to resources/profiles/Anker/filament/Generic PLA+ @Anker base.json index 23906759c9..0ec8e81392 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PLA+ @base", + "name": "Generic PLA+ @Anker base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFIYTy8S", + "filament_id": "OFEWYR89", "instantiation": "false", "filament_cost": [ "25" diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker.json new file mode 100644 index 0000000000..1381c839da --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+", + "from": "system", + "setting_id": "MDb4CH02FxbgPNjS", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json b/resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json similarity index 88% rename from resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json rename to resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json index cd7b72c3af..d1faf47a16 100644 --- a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json +++ b/resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic PLA-CF @base", + "name": "Generic PLA-CF @Anker base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFB0a3hT", + "filament_id": "OFWbdGsC", "instantiation": "false", "filament_type": [ "PLA-CF" diff --git a/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json new file mode 100644 index 0000000000..7be034702f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Anker", + "inherits": "Generic PLA-CF @Anker base", + "renamed_from": "Anker Generic PLA-CF", + "from": "system", + "setting_id": "5AdjHUxRi8LCU4E9", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Anker Generic PVA @base.json b/resources/profiles/Anker/filament/Generic PVA @Anker base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic PVA @base.json rename to resources/profiles/Anker/filament/Generic PVA @Anker base.json index 68c9fce25b..d52cd9b729 100644 --- a/resources/profiles/Anker/filament/Anker Generic PVA @base.json +++ b/resources/profiles/Anker/filament/Generic PVA @Anker base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic PVA @base", + "name": "Generic PVA @Anker base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OFsCbVbN", + "filament_id": "OFDvXujf", "instantiation": "false" } diff --git a/resources/profiles/Anker/filament/Anker Generic ABS.json b/resources/profiles/Anker/filament/Generic PVA @Anker.json similarity index 65% rename from resources/profiles/Anker/filament/Anker Generic ABS.json rename to resources/profiles/Anker/filament/Generic PVA @Anker.json index 5588d39ff3..35a7dd456a 100644 --- a/resources/profiles/Anker/filament/Anker Generic ABS.json +++ b/resources/profiles/Anker/filament/Generic PVA @Anker.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Anker Generic ABS", - "inherits": "Anker Generic ABS @base", + "name": "Generic PVA @Anker", + "inherits": "Generic PVA @Anker base", + "renamed_from": "Anker Generic PVA", "from": "system", - "setting_id": "axEspGzFJnrnidm4", + "setting_id": "HXERDaP3AgzWtmiu", "instantiation": "true", "compatible_printers": [ "Anker M5 0.4 nozzle", diff --git a/resources/profiles/Anker/filament/Anker Generic TPU @base.json b/resources/profiles/Anker/filament/Generic TPU @Anker base.json similarity index 81% rename from resources/profiles/Anker/filament/Anker Generic TPU @base.json rename to resources/profiles/Anker/filament/Generic TPU @Anker base.json index 1399cfa459..233d7c8bc6 100644 --- a/resources/profiles/Anker/filament/Anker Generic TPU @base.json +++ b/resources/profiles/Anker/filament/Generic TPU @Anker base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Anker Generic TPU @base", + "name": "Generic TPU @Anker base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OF6tKa1Z", + "filament_id": "OFgbpcy9", "instantiation": "false", "filament_retraction_speed": "90", "filament_deretraction_speed": "50", diff --git a/resources/profiles/Anker/filament/Generic TPU @Anker.json b/resources/profiles/Anker/filament/Generic TPU @Anker.json new file mode 100644 index 0000000000..44204f1113 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic TPU @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Anker", + "inherits": "Generic TPU @Anker base", + "renamed_from": "Anker Generic TPU", + "from": "system", + "setting_id": "5YigkBBSP2RM1MbK", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json index e4543fa084..6389fba7bc 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json index 88662e7bab..3feda012a3 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json index 42810014ea..593cc53888 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json index 11d8b3cf62..3e3dc25c62 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json index 0240748426..ba4083b2be 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json index 8a5600df05..21201c4147 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json index 6434e3c76b..948cc7a3b8 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json index 4c5c7a82ef..2dcb107d93 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json b/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json index e6944177ad..7fade72381 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V8111v2", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" } diff --git a/resources/profiles/Anker/machine/Anker M5.json b/resources/profiles/Anker/machine/Anker M5.json index 489151a669..5c9839d1ff 100644 --- a/resources/profiles/Anker/machine/Anker M5.json +++ b/resources/profiles/Anker/machine/Anker M5.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V8111", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" } diff --git a/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json index b88d21dae3..a5db1517a7 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json index 7aec134ac4..fd5c40ea05 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json index 573784f2f3..7dd6f8036b 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json index d6d1212b63..5323967ae2 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C.json b/resources/profiles/Anker/machine/Anker M5C.json index d709bfc4c3..cf539851e5 100644 --- a/resources/profiles/Anker/machine/Anker M5C.json +++ b/resources/profiles/Anker/machine/Anker M5C.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V81101C3", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker" } diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index d0a5ad0852..205fd359d8 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,1234 +1,1234 @@ -{ - "name": "Anycubic", - "version": "02.04.00.02", - "force_update": "0", - "description": "Anycubic configurations", - "machine_model_list": [ - { - "name": "Anycubic 4Max Pro", - "sub_path": "machine/Anycubic 4Max Pro.json" - }, - { - "name": "Anycubic 4Max Pro 2", - "sub_path": "machine/Anycubic 4Max Pro 2.json" - }, - { - "name": "Anycubic Chiron", - "sub_path": "machine/Anycubic Chiron.json" - }, - { - "name": "Anycubic Kobra", - "sub_path": "machine/Anycubic Kobra.json" - }, - { - "name": "Anycubic Kobra 2", - "sub_path": "machine/Anycubic Kobra 2.json" - }, - { - "name": "Anycubic Kobra 2 Max", - "sub_path": "machine/Anycubic Kobra 2 Max.json" - }, - { - "name": "Anycubic Kobra 2 Neo", - "sub_path": "machine/Anycubic Kobra 2 Neo.json" - }, - { - "name": "Anycubic Kobra 2 Plus", - "sub_path": "machine/Anycubic Kobra 2 Plus.json" - }, - { - "name": "Anycubic Kobra 2 Pro", - "sub_path": "machine/Anycubic Kobra 2 Pro.json" - }, - { - "name": "Anycubic Kobra 3", - "sub_path": "machine/Anycubic Kobra 3.json" - }, - { - "name": "Anycubic Kobra 3 Max", - "sub_path": "machine/Anycubic Kobra 3 Max.json" - }, - { - "name": "Anycubic Kobra Max", - "sub_path": "machine/Anycubic Kobra Max.json" - }, - { - "name": "Anycubic Kobra Neo", - "sub_path": "machine/Anycubic Kobra Neo.json" - }, - { - "name": "Anycubic Kobra Plus", - "sub_path": "machine/Anycubic Kobra Plus.json" - }, - { - "name": "Anycubic Kobra S1", - "sub_path": "machine/Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Kobra S1 Max", - "sub_path": "machine/Anycubic Kobra S1 Max.json" - }, - { - "name": "Anycubic Kobra X", - "sub_path": "machine/Anycubic Kobra X.json" - }, - { - "name": "Anycubic Predator", - "sub_path": "machine/Anycubic Predator.json" - }, - { - "name": "Anycubic Vyper", - "sub_path": "machine/Anycubic Vyper.json" - }, - { - "name": "Anycubic i3 Mega S", - "sub_path": "machine/Anycubic i3 Mega S.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra X", - "sub_path": "process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.10mm Detail @Anycubic Kobra 3 0.2 nozzle", - "sub_path": "process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.12mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra X", - "sub_path": "process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.15mm Optimal @Anycubic 4MaxPro2", - "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" - }, - { - "name": "0.15mm Optimal @Anycubic Chiron", - "sub_path": "process/0.15mm Optimal @Anycubic Chiron.json" - }, - { - "name": "0.15mm Optimal @Anycubic Kobra", - "sub_path": "process/0.15mm Optimal @Anycubic Kobra.json" - }, - { - "name": "0.15mm Optimal @Anycubic Kobra2", - "sub_path": "process/0.15mm Optimal @Anycubic Kobra2.json" - }, - { - "name": "0.15mm Optimal @Anycubic KobraMax", - "sub_path": "process/0.15mm Optimal @Anycubic KobraMax.json" - }, - { - "name": "0.15mm Optimal @Anycubic KobraPlus", - "sub_path": "process/0.15mm Optimal @Anycubic KobraPlus.json" - }, - { - "name": "0.15mm Optimal @Anycubic Vyper", - "sub_path": "process/0.15mm Optimal @Anycubic Vyper.json" - }, - { - "name": "0.15mm Optimal @Anycubic i3MegaS", - "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.json" - }, - { - "name": "0.16mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra X", - "sub_path": "process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.20mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic 4MaxPro", - "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro.json" - }, - { - "name": "0.20mm Standard @Anycubic 4MaxPro2", - "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro2.json" - }, - { - "name": "0.20mm Standard @Anycubic Chiron", - "sub_path": "process/0.20mm Standard @Anycubic Chiron.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra", - "sub_path": "process/0.20mm Standard @Anycubic Kobra.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra X", - "sub_path": "process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra2", - "sub_path": "process/0.20mm Standard @Anycubic Kobra2.json" - }, - { - "name": "0.20mm Standard @Anycubic KobraMax", - "sub_path": "process/0.20mm Standard @Anycubic KobraMax.json" - }, - { - "name": "0.20mm Standard @Anycubic KobraPlus", - "sub_path": "process/0.20mm Standard @Anycubic KobraPlus.json" - }, - { - "name": "0.20mm Standard @Anycubic Predator", - "sub_path": "process/0.20mm Standard @Anycubic Predator.json" - }, - { - "name": "0.20mm Standard @Anycubic Vyper", - "sub_path": "process/0.20mm Standard @Anycubic Vyper.json" - }, - { - "name": "0.20mm Standard @Anycubic i3MegaS", - "sub_path": "process/0.20mm Standard @Anycubic i3MegaS.json" - }, - { - "name": "0.24mm Draft @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra X", - "sub_path": "process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra X", - "sub_path": "process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.30mm Draft @Anycubic 4MaxPro2", - "sub_path": "process/0.30mm Draft @Anycubic 4MaxPro2.json" - }, - { - "name": "0.30mm Draft @Anycubic Chiron", - "sub_path": "process/0.30mm Draft @Anycubic Chiron.json" - }, - { - "name": "0.30mm Draft @Anycubic Kobra", - "sub_path": "process/0.30mm Draft @Anycubic Kobra.json" - }, - { - "name": "0.30mm Draft @Anycubic Kobra2", - "sub_path": "process/0.30mm Draft @Anycubic Kobra2.json" - }, - { - "name": "0.30mm Draft @Anycubic KobraMax", - "sub_path": "process/0.30mm Draft @Anycubic KobraMax.json" - }, - { - "name": "0.30mm Draft @Anycubic KobraPlus", - "sub_path": "process/0.30mm Draft @Anycubic KobraPlus.json" - }, - { - "name": "0.30mm Draft @Anycubic Vyper", - "sub_path": "process/0.30mm Draft @Anycubic Vyper.json" - }, - { - "name": "0.30mm Draft @Anycubic i3MegaS", - "sub_path": "process/0.30mm Draft @Anycubic i3MegaS.json" - }, - { - "name": "0.30mm Standard @Anycubic Kobra 3 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Anycubic Kobra 3 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - - { - "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - - { - "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - - { - "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - } - - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic ABS", - "sub_path": "filament/Anycubic Generic ABS.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic ASA", - "sub_path": "filament/Anycubic Generic ASA.json" - }, - { - "name": "Anycubic Generic PA", - "sub_path": "filament/Anycubic Generic PA.json" - }, - { - "name": "Anycubic Generic PA-CF", - "sub_path": "filament/Anycubic Generic PA-CF.json" - }, - { - "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Generic PC", - "sub_path": "filament/Anycubic Generic PC.json" - }, - { - "name": "Anycubic Generic PETG", - "sub_path": "filament/Anycubic Generic PETG.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic PLA", - "sub_path": "filament/Anycubic Generic PLA.json" - }, - { - "name": "Anycubic Generic PLA-CF", - "sub_path": "filament/Anycubic Generic PLA-CF.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Panchroma PLA @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json" - }, - { - "name": "Polymaker PLA Pro @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json" - }, - { - "name": "Polymaker PLA Pro Metallic @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Generic PVA", - "sub_path": "filament/Anycubic Generic PVA.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic TPU", - "sub_path": "filament/Anycubic Generic TPU.json" - }, - { - "name": "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json" - } - - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "Anycubic 4Max Pro 0.4 nozzle", - "sub_path": "machine/Anycubic 4Max Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic 4Max Pro 2 0.4 nozzle", - "sub_path": "machine/Anycubic 4Max Pro 2 0.4 nozzle.json" - }, - { - "name": "Anycubic Chiron 0.4 nozzle", - "sub_path": "machine/Anycubic Chiron 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.2 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra Plus 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra X 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Predator 0.4 nozzle", - "sub_path": "machine/Anycubic Predator 0.4 nozzle.json" - }, - { - "name": "Anycubic Vyper 0.4 nozzle", - "sub_path": "machine/Anycubic Vyper 0.4 nozzle.json" - }, - { - "name": "Anycubic i3 Mega S 0.4 nozzle", - "sub_path": "machine/Anycubic i3 Mega S 0.4 nozzle.json" - } - ] -} +{ + "name": "Anycubic", + "version": "02.04.00.03", + "force_update": "0", + "description": "Anycubic configurations", + "machine_model_list": [ + { + "name": "Anycubic 4Max Pro", + "sub_path": "machine/Anycubic 4Max Pro.json" + }, + { + "name": "Anycubic 4Max Pro 2", + "sub_path": "machine/Anycubic 4Max Pro 2.json" + }, + { + "name": "Anycubic Chiron", + "sub_path": "machine/Anycubic Chiron.json" + }, + { + "name": "Anycubic Kobra", + "sub_path": "machine/Anycubic Kobra.json" + }, + { + "name": "Anycubic Kobra 2", + "sub_path": "machine/Anycubic Kobra 2.json" + }, + { + "name": "Anycubic Kobra 2 Max", + "sub_path": "machine/Anycubic Kobra 2 Max.json" + }, + { + "name": "Anycubic Kobra 2 Neo", + "sub_path": "machine/Anycubic Kobra 2 Neo.json" + }, + { + "name": "Anycubic Kobra 2 Plus", + "sub_path": "machine/Anycubic Kobra 2 Plus.json" + }, + { + "name": "Anycubic Kobra 2 Pro", + "sub_path": "machine/Anycubic Kobra 2 Pro.json" + }, + { + "name": "Anycubic Kobra 3", + "sub_path": "machine/Anycubic Kobra 3.json" + }, + { + "name": "Anycubic Kobra 3 Max", + "sub_path": "machine/Anycubic Kobra 3 Max.json" + }, + { + "name": "Anycubic Kobra Max", + "sub_path": "machine/Anycubic Kobra Max.json" + }, + { + "name": "Anycubic Kobra Neo", + "sub_path": "machine/Anycubic Kobra Neo.json" + }, + { + "name": "Anycubic Kobra Plus", + "sub_path": "machine/Anycubic Kobra Plus.json" + }, + { + "name": "Anycubic Kobra S1", + "sub_path": "machine/Anycubic Kobra S1.json" + }, + { + "name": "Anycubic Kobra S1 Max", + "sub_path": "machine/Anycubic Kobra S1 Max.json" + }, + { + "name": "Anycubic Kobra X", + "sub_path": "machine/Anycubic Kobra X.json" + }, + { + "name": "Anycubic Predator", + "sub_path": "machine/Anycubic Predator.json" + }, + { + "name": "Anycubic Vyper", + "sub_path": "machine/Anycubic Vyper.json" + }, + { + "name": "Anycubic i3 Mega S", + "sub_path": "machine/Anycubic i3 Mega S.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra X", + "sub_path": "process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.10mm Detail @Anycubic Kobra 3 0.2 nozzle", + "sub_path": "process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.12mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra X", + "sub_path": "process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.15mm Optimal @Anycubic 4MaxPro2", + "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" + }, + { + "name": "0.15mm Optimal @Anycubic Chiron", + "sub_path": "process/0.15mm Optimal @Anycubic Chiron.json" + }, + { + "name": "0.15mm Optimal @Anycubic Kobra", + "sub_path": "process/0.15mm Optimal @Anycubic Kobra.json" + }, + { + "name": "0.15mm Optimal @Anycubic Kobra2", + "sub_path": "process/0.15mm Optimal @Anycubic Kobra2.json" + }, + { + "name": "0.15mm Optimal @Anycubic KobraMax", + "sub_path": "process/0.15mm Optimal @Anycubic KobraMax.json" + }, + { + "name": "0.15mm Optimal @Anycubic KobraPlus", + "sub_path": "process/0.15mm Optimal @Anycubic KobraPlus.json" + }, + { + "name": "0.15mm Optimal @Anycubic Vyper", + "sub_path": "process/0.15mm Optimal @Anycubic Vyper.json" + }, + { + "name": "0.15mm Optimal @Anycubic i3MegaS", + "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.json" + }, + { + "name": "0.16mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra X", + "sub_path": "process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.20mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic 4MaxPro", + "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro.json" + }, + { + "name": "0.20mm Standard @Anycubic 4MaxPro2", + "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro2.json" + }, + { + "name": "0.20mm Standard @Anycubic Chiron", + "sub_path": "process/0.20mm Standard @Anycubic Chiron.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra", + "sub_path": "process/0.20mm Standard @Anycubic Kobra.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra X", + "sub_path": "process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra2", + "sub_path": "process/0.20mm Standard @Anycubic Kobra2.json" + }, + { + "name": "0.20mm Standard @Anycubic KobraMax", + "sub_path": "process/0.20mm Standard @Anycubic KobraMax.json" + }, + { + "name": "0.20mm Standard @Anycubic KobraPlus", + "sub_path": "process/0.20mm Standard @Anycubic KobraPlus.json" + }, + { + "name": "0.20mm Standard @Anycubic Predator", + "sub_path": "process/0.20mm Standard @Anycubic Predator.json" + }, + { + "name": "0.20mm Standard @Anycubic Vyper", + "sub_path": "process/0.20mm Standard @Anycubic Vyper.json" + }, + { + "name": "0.20mm Standard @Anycubic i3MegaS", + "sub_path": "process/0.20mm Standard @Anycubic i3MegaS.json" + }, + { + "name": "0.24mm Draft @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra X", + "sub_path": "process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra X", + "sub_path": "process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.30mm Draft @Anycubic 4MaxPro2", + "sub_path": "process/0.30mm Draft @Anycubic 4MaxPro2.json" + }, + { + "name": "0.30mm Draft @Anycubic Chiron", + "sub_path": "process/0.30mm Draft @Anycubic Chiron.json" + }, + { + "name": "0.30mm Draft @Anycubic Kobra", + "sub_path": "process/0.30mm Draft @Anycubic Kobra.json" + }, + { + "name": "0.30mm Draft @Anycubic Kobra2", + "sub_path": "process/0.30mm Draft @Anycubic Kobra2.json" + }, + { + "name": "0.30mm Draft @Anycubic KobraMax", + "sub_path": "process/0.30mm Draft @Anycubic KobraMax.json" + }, + { + "name": "0.30mm Draft @Anycubic KobraPlus", + "sub_path": "process/0.30mm Draft @Anycubic KobraPlus.json" + }, + { + "name": "0.30mm Draft @Anycubic Vyper", + "sub_path": "process/0.30mm Draft @Anycubic Vyper.json" + }, + { + "name": "0.30mm Draft @Anycubic i3MegaS", + "sub_path": "process/0.30mm Draft @Anycubic i3MegaS.json" + }, + { + "name": "0.30mm Standard @Anycubic Kobra 3 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Anycubic Kobra 3 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + + { + "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + + { + "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + + { + "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + } + + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Anycubic", + "sub_path": "filament/Generic ABS @Anycubic.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic ASA @Anycubic", + "sub_path": "filament/Generic ASA @Anycubic.json" + }, + { + "name": "Generic PA @Anycubic", + "sub_path": "filament/Generic PA @Anycubic.json" + }, + { + "name": "Generic PA-CF @Anycubic", + "sub_path": "filament/Generic PA-CF @Anycubic.json" + }, + { + "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json" + }, + { + "name": "Generic PC @Anycubic", + "sub_path": "filament/Generic PC @Anycubic.json" + }, + { + "name": "Generic PETG @Anycubic", + "sub_path": "filament/Generic PETG @Anycubic.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Anycubic", + "sub_path": "filament/Generic PLA @Anycubic.json" + }, + { + "name": "Generic PLA-CF @Anycubic", + "sub_path": "filament/Generic PLA-CF @Anycubic.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Panchroma PLA @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json" + }, + { + "name": "Polymaker PLA Pro @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json" + }, + { + "name": "Polymaker PLA Pro Metallic @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json" + }, + { + "name": "Generic PVA @Anycubic", + "sub_path": "filament/Generic PVA @Anycubic.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic TPU @Anycubic", + "sub_path": "filament/Generic TPU @Anycubic.json" + }, + { + "name": "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json" + } + + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "Anycubic 4Max Pro 0.4 nozzle", + "sub_path": "machine/Anycubic 4Max Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic 4Max Pro 2 0.4 nozzle", + "sub_path": "machine/Anycubic 4Max Pro 2 0.4 nozzle.json" + }, + { + "name": "Anycubic Chiron 0.4 nozzle", + "sub_path": "machine/Anycubic Chiron 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.2 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra Plus 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra X 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic Predator 0.4 nozzle", + "sub_path": "machine/Anycubic Predator 0.4 nozzle.json" + }, + { + "name": "Anycubic Vyper 0.4 nozzle", + "sub_path": "machine/Anycubic Vyper 0.4 nozzle.json" + }, + { + "name": "Anycubic i3 Mega S 0.4 nozzle", + "sub_path": "machine/Anycubic i3 Mega S 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json index c726bbcca0..790d365ee5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic ASA", + "inherits": "Generic ASA @Anycubic", "from": "system", "setting_id": "U66DGcpZeZ24VfPe", "filament_id": "OF0yFLkY", diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index d44a266643..213ee1ce70 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PETG", + "inherits": "Generic PETG @Anycubic", "from": "system", "setting_id": "qe2wYLf7CEMjmfxj", "filament_id": "OFo6n2pB", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json index 30589ac8d1..7faa84782c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "XIq1GeZdHqOl9Gtr", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json index 5b11a287e2..583473ed30 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "EaVdXQHAyocYUCez", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json index 8dd7f867ec..8e531b88a4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "UpC1Qut0kjYRD9po", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json index de37d66f03..01b3d45f23 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "ELCOJflyY3DfpPAH", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json index 6110cf1fe4..2898403b36 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "enkHPcq0yYHsRk7g", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json index 81f8dbb4dd..a4e34756ec 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "qw4uL96miCLTNE7b", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json index f03141136c..af7e374dc7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "KrlWgkC2kVdSRNUx", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json index 02b0a7f46b..5c8936316f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "gK0NhTnxz1VBNHbu", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json index f63d778029..80c120870e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "GblA3LvgCL63V7Qx", "filament_id": "OFmjN2bc", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json index ca56418084..9cb1eef59f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "m7o0ek6sbOavVUpG", "filament_id": "OF5PtjTp", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json index d4805c6bde..968eba0ec4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,339 +1,339 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "NVrxrFGYkHRyzrFq", - "filament_id": "OF5PtjTp", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "1" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0,0,0\n0,0,0" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "85" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "30" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "fan_p2_speed_before_x_layers": [ - "50" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode " - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "-1" - ], - "nozzle_temperature": [ - "190" - ], - "nozzle_temperature_BRASS": [ - "220" - ], - "nozzle_temperature_HS": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "NVrxrFGYkHRyzrFq", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "85" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "30" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "fan_p2_speed_before_x_layers": [ + "50" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode " + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "nozzle_temperature": [ + "190" + ], + "nozzle_temperature_BRASS": [ + "220" + ], + "nozzle_temperature_HS": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json index 16034c2b27..7d8be15657 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "swLSkqq7X3PhbRiQ", - "filament_id": "OF5PtjTp", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "210" - ], - "nozzle_temperature_HS": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "swLSkqq7X3PhbRiQ", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "210" + ], + "nozzle_temperature_HS": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json index 64832c85ab..26181302ec 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "rsOyKXt6G37Ze51l", - "filament_id": "OF5PtjTp", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "210" - ], - "nozzle_temperature_HS": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "210" - ], - "nozzle_temperature_initial_layer_HS": [ - "210" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "rsOyKXt6G37Ze51l", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "210" + ], + "nozzle_temperature_HS": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "210" + ], + "nozzle_temperature_initial_layer_HS": [ + "210" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json index 725a9d3f90..5b069135b3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "Sio4qE22N2krNjx1", "filament_id": "OFjVOWfJ", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json index 2c25648b80..474deb3deb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "kVOaVF3YyfGrXTdW", "filament_id": "OFIE3vOf", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json index 99b2c3672d..d7832ced4c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "1EID0A7FceyLzja5", "filament_id": "OFCp3Bgo", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json index 8365eee514..0ea21e81ed 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "zAUNjIY9cGOO3Np5", "filament_id": "OFrGJ4tR", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json index 1733e1c10a..59fd701496 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "1va1bLu3J0b5GQt3", "filament_id": "OFnmp6rt", diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 149b3da021..bbee6ae226 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,336 +1,336 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "Y9mFng36B2vAnP19", - "filament_id": "OFZ0mR5b", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0,0,0\n0,0,0" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "85" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "0%" - ], - "filament_retract_lift_above": [ - "0" - ], - "filament_retract_lift_below": [ - "349" - ], - "filament_retract_lift_enforce": [ - "All Surfaces" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Auto Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "-1" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_BRASS": [ - "230" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "240" - ], - "nozzle_temperature_initial_layer_HS": [ - "240" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "Y9mFng36B2vAnP19", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "85" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_lift_above": [ + "0" + ], + "filament_retract_lift_below": [ + "349" + ], + "filament_retract_lift_enforce": [ + "All Surfaces" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Auto Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_BRASS": [ + "230" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "240" + ], + "nozzle_temperature_initial_layer_HS": [ + "240" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 26753fc994..ab96e9fca8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "9XGVjrGzNa4Br8kB", - "filament_id": "OFZ0mR5b", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "230" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "230" - ], - "nozzle_temperature_initial_layer_HS": [ - "230" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "9XGVjrGzNa4Br8kB", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "230" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "230" + ], + "nozzle_temperature_initial_layer_HS": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index ee21e1359e..b1db8876da 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "vPSse40nqlQ0xBnp", - "filament_id": "OFZ0mR5b", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "0" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "220" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "230" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "vPSse40nqlQ0xBnp", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "220" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json index dcc4102b46..988340c1eb 100644 --- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic ABS", + "inherits": "Generic ABS @Anycubic", "from": "system", "setting_id": "W3GiC5YLzxbbjXLY", "filament_id": "OFY9muEs", diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json similarity index 80% rename from resources/profiles/Anycubic/filament/Anycubic Generic ABS.json rename to resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json index d4495f172c..cc7334fa34 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic ABS", + "name": "Generic ABS @Anycubic", "inherits": "fdm_filament_abs", + "renamed_from": "Anycubic Generic ABS", "from": "system", - "setting_id": "az6wmXeWSCKcUEsK", - "filament_id": "OF5Zk4e1", + "setting_id": "jKvjWU6rcHvWblWC", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.926" @@ -22,7 +23,6 @@ "Anycubic 4Max Pro 0.4 nozzle", "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle", "Anycubic Kobra 3 Max 0.4 nozzle" ] } diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json similarity index 81% rename from resources/profiles/Anycubic/filament/Anycubic Generic ASA.json rename to resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json index d352fde30a..282f590739 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json +++ b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic ASA", + "name": "Generic ASA @Anycubic", "inherits": "fdm_filament_asa", + "renamed_from": "Anycubic Generic ASA", "from": "system", - "setting_id": "qKcef8t7nj8nBjPu", - "filament_id": "OFI80Hct", + "setting_id": "o2Cr8cBtE4OKsTqm", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json similarity index 80% rename from resources/profiles/Anycubic/filament/Anycubic Generic PA.json rename to resources/profiles/Anycubic/filament/Generic PA @Anycubic.json index 761cfb146b..da5d2424e2 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json +++ b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PA", + "name": "Generic PA @Anycubic", "inherits": "fdm_filament_pa", + "renamed_from": "Anycubic Generic PA", "from": "system", - "setting_id": "xzI6EgoKa3DFYyoZ", - "filament_id": "OFB1Tv1E", + "setting_id": "5MJsYpJIimshIDZm", + "filament_id": "OFg8ndtj", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json similarity index 80% rename from resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json rename to resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json index 44984af3bf..a360cfea1a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json +++ b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PA-CF", + "name": "Generic PA-CF @Anycubic", "inherits": "fdm_filament_pa", + "renamed_from": "Anycubic Generic PA-CF", "from": "system", - "setting_id": "j2PXsJyI9YyoE8lc", - "filament_id": "OFPdhDlK", + "setting_id": "j1uioy0lCnm4AKrm", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json similarity index 79% rename from resources/profiles/Anycubic/filament/Anycubic Generic PC.json rename to resources/profiles/Anycubic/filament/Generic PC @Anycubic.json index 766455b1ad..e2da18b155 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json +++ b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PC", + "name": "Generic PC @Anycubic", "inherits": "fdm_filament_pc", + "renamed_from": "Anycubic Generic PC", "from": "system", - "setting_id": "3zgBtEkj1fQpDkxO", - "filament_id": "OFWY6vBh", + "setting_id": "3jP8aWkWw2dT2fNM", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json similarity index 87% rename from resources/profiles/Anycubic/filament/Anycubic Generic PETG.json rename to resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json index 1ca3b27d9c..697caad9d7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PETG", + "name": "Generic PETG @Anycubic", "inherits": "fdm_filament_pet", + "renamed_from": "Anycubic Generic PETG", "from": "system", - "setting_id": "CEd987NP90bPdkW7", - "filament_id": "OFWzr7m0", + "setting_id": "ddafY4oOvEc6L6Ej", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json similarity index 84% rename from resources/profiles/Anycubic/filament/Anycubic Generic PLA.json rename to resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json index 76852ec8aa..e7fe864b7e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json +++ b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PLA", + "name": "Generic PLA @Anycubic", "inherits": "fdm_filament_pla", + "renamed_from": "Anycubic Generic PLA", "from": "system", - "setting_id": "2MiX54GMiZjFzwBI", - "filament_id": "OFKyCgaK", + "setting_id": "qoYfeBQCSt15O9ye", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json similarity index 80% rename from resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json rename to resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json index ff449f9c86..0f0bd4462a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json +++ b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PLA-CF", + "name": "Generic PLA-CF @Anycubic", "inherits": "fdm_filament_pla", + "renamed_from": "Anycubic Generic PLA-CF", "from": "system", - "setting_id": "9gFgyEJelaCIVwAH", - "filament_id": "OFNcdCrm", + "setting_id": "mLENUT39vBcQiLpm", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json similarity index 81% rename from resources/profiles/Anycubic/filament/Anycubic Generic PVA.json rename to resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json index f583d7776a..7f6603b6db 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json +++ b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic PVA", + "name": "Generic PVA @Anycubic", "inherits": "fdm_filament_pva", + "renamed_from": "Anycubic Generic PVA", "from": "system", - "setting_id": "I1GMbOsMYktU7EbM", - "filament_id": "OFSGbf2I", + "setting_id": "ae5ljmDsW7uauLz8", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index d701c6243d..369198b146 100644 --- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic TPU", + "inherits": "Generic TPU @Anycubic", "from": "system", "setting_id": "kHB2rrxkyz4Clu3N", "filament_id": "OFgbpcy9", diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json similarity index 78% rename from resources/profiles/Anycubic/filament/Anycubic Generic TPU.json rename to resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json index 0cd40e9b50..d52428e4e5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Anycubic Generic TPU", + "name": "Generic TPU @Anycubic", "inherits": "fdm_filament_tpu", + "renamed_from": "Anycubic Generic TPU", "from": "system", - "setting_id": "xrbLc7y1AInpumtv", - "filament_id": "OFGKLoUm", + "setting_id": "z0FSikhD8ZHv2UYt", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" @@ -19,7 +20,6 @@ "Anycubic 4Max Pro 0.4 nozzle", "Anycubic 4Max Pro 2 0.4 nozzle", "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle", "Anycubic Kobra 3 Max 0.4 nozzle" ] } diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json index 40b4613eb8..fde1113344 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 X0 Y0 ; home X and Y\nG28 Z0 ; home Z\nG1 Z30 F{machine_max_speed_z[0]*60} ; move Z a bit down to not blow on the bed edge while heating\nG1 X10 F3900 ; let some space on x to prevent the filament cooling exhaust from beeing blocked by the servo motor\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM106 S80 ; turn on fan to prevent air nozzle melt while heating up\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nM107 ; start with the fan off\nG28 X0 ; goto X home again\nG92 E0 ; zero the extruded length\nG1 Z0.2 F360 ; move plattform upwards\n; extrude material next to the plattform (comment or remove following lines to disable)\nG1 F180 E20 ; extrude some material next to the plattform\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG92 E0 ; zero the extruded length again\nG1 X5 F3900 ; move sideways to get rid of that string\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\nG92 E0 ; zero the extruded length again\n; draw intro line (comment or remove following lines to disable)\nG1 X30 E5 F700 ; draw intro line\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG1 X40 Z2.0 ; move away from the introline\nG92 E0 ; zero the extruded length again\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\n; end of intro line code\nM117 Printing...\nG5", "machine_end_gcode": "M104 S0 ; turn off extruder heating\nM140 S0 ; turn off bed heating\nM107 ; turn off fans\nG91 ; relative positioning\nG0 Z+0.5 ; move Z up a tiny bit\nG90 ; absolute positioning\nG0 X135 Y105 F{machine_max_speed_x[0]*60} ; move extruder to center position\nG0 Z190.5 F{machine_max_speed_z[0]*60} ; lower the plattform to Z min\nM84 ; steppers off\nG90 ; absolute positioning\n", diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json index e54851b41c..56f6c5332d 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro2_buildplate_model.stl", "bed_texture": "anycubic_4maxpro2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json index 95144dab59..54ee3a238d 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro_buildplate_model.stl", "bed_texture": "anycubic_4maxpro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json index d79bebdf71..9222ef6619 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107 ;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single]; set wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z15.0 F3600 ;move the platform down 15mm\nG92 E0;zero the extruded length\nG1 F200 E40;extrude 40mm of feed stock\nG92 E0;zero the extruded length again\nG1 F3600", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91;relative positioning\nG1 E-4 F300;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X-10 F3000; get the head off the bed\nG1 F3000 Y400;kick the bed out\nM84;steppers off", diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron.json b/resources/profiles/Anycubic/machine/Anycubic Chiron.json index 2772464526..d7b1303de6 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_chiron_buildplate_model.stl", "bed_texture": "anycubic_chiron_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json index e32ed5b2fb..d529794295 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index cadcce6d5a..a804761c28 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ;Use absolute coordinates\nM83 ;Extruder relative mode\nM104 S[first_layer_temperature] ;Set extruder temp\nM140 S[first_layer_bed_temperature] ;Set bed temp\nM190 S[first_layer_bed_temperature] ;Wait for bed temp\nM109 S[first_layer_temperature] ;Wait for extruder temp\nG28 ;Move X/Y/Z to min endstops\nG1 Z0.28 ;Lift nozzle a bit\nG92 E0 ;Specify current extruder position as zero\nG1 Y3 F1800 ;Move Y to purge point\nG1 X60 E25 F500 ;Extrude 25mm of filament in a 5cm line\nG92 E0 ;Zero the extruded length again\nG1 E-2 F500 ;Retract a little\nG1 X70 F4000 ;Quickly wipe away from the filament line\nM117", "machine_end_gcode": "M104 S0 ;Extruder off\nM140 S0 ;Heatbed off\nM107 ;Fan off\nG91 ;Relative positioning\nG1 E-5 F3000 ;Retract filament\nG1 Z+0.3 F3000 ;Lift print head\nG28 X0 F3000 ;Home X axis\nM84 ;Disable stepper motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json index 545ea61e1d..9f2e29a0d9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobra2_buildplate_model.stl", "bed_texture": "anycubic_kobra2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json index 58ce426f05..36033222d7 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single] ; set wait for bed temp\nM355 S1;turn on the case light\nM109 S[nozzle_temperature_initial_layer]; wait for extruder temp\nG1 Z15.0 F1000 ;move the nozzle up 15mm\nG92 E0;zero the extruded length\nG1 F100 E60;extrude 60mm of feed stock\nG92 E0;zero the extruded length again", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0;heated bed heater off (if you have it)\nG91;relative positioning\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X10 F3000; get the head off the bed\nG1 F3000 Y400 ;kick the bed out\nM84;steppers off\nM355 S0;turn off the case light", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json index fd3939620e..b4b0c4f17b 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobramax_buildplate_model.stl", "bed_texture": "anycubic_kobramax_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json index ab8a4a0e2b..41b6e7b3e1 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json @@ -14,7 +14,7 @@ ], "default_print_profile": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "disable_m73": "1", "gcode_flavor": "marlin2", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json index 80effe6e8b..25a16805e1 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra Neo_buildplate_model.stl", "bed_texture": "Anycubic Kobra Neo_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic PLA" + "default_materials": "Generic PLA @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json index 9b700b7a5f..1ab26d5c8c 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single] ; set wait for bed temp\nM355 S1;turn on the case light\nM109 S[nozzle_temperature_initial_layer]; wait for extruder temp\nG1 Z15.0 F1000 ;move the nozzle up 15mm\nG92 E0;zero the extruded length\nG1 F100 E60;extrude 60mm of feed stock\nG92 E0;zero the extruded length again", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0;heated bed heater off (if you have it)\nG91;relative positioning\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X10 F3000; get the head off the bed\nG1 F3000 Y400 ;kick the bed out\nM84;steppers off\nM355 S0;turn off the case light", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json index 6a30264849..cf90e73021 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobraplus_buildplate_model.stl", "bed_texture": "anycubic_kobraplus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra.json b/resources/profiles/Anycubic/machine/Anycubic Kobra.json index bbc1f460c3..6309b569e0 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobra_buildplate_model.stl", "bed_texture": "anycubic_kobra_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Predator.json b/resources/profiles/Anycubic/machine/Anycubic Predator.json index 4b6076ee89..a3b100c166 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Predator.json +++ b/resources/profiles/Anycubic/machine/Anycubic Predator.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Predator_buildplate_model.stl", "bed_texture": "Anycubic Predator_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json index 5bcd1fd942..03da852642 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG0 Z0.2 F1800 ; move nozzle to print position\nG92 E0 ; specify current extruder position as zero\nG1 Y10 X180 E50 F1200 ; extrude a line in front of the printer\nG92 E0 ; specify current extruder position as zero\nG0 Z20 F6000 ; move head up\nG1 E-7 F2400 ; retract\nG04 S2 ; wait 2s\nG0 X0 F6000 ; wipe from oozed filament\nG1 E-1 F2400 ; undo some of the retraction to avoid oozing\nG1 F6000 ; set travel speed to move to start printing point\nM117", "machine_end_gcode": "G4 ; wait\nG92 E0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} ; move print head up\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper.json b/resources/profiles/Anycubic/machine/Anycubic Vyper.json index 862af26c4a..75a16dbca5 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_vyper_buildplate_model.stl", "bed_texture": "anycubic_vyper_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json index 9d35099001..d3b14b475c 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json index 76192d1e21..a98cd9ac46 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_i3megas_buildplate_model.stl", "bed_texture": "anycubic_i3megas_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index a610fdbaf6..66a3a05247 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ @@ -389,28 +389,28 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Artillery Generic ABS", - "sub_path": "filament/Artillery Generic ABS.json" + "name": "Generic ABS @Artillery", + "sub_path": "filament/Generic ABS @Artillery.json" }, { - "name": "Artillery Generic ASA", - "sub_path": "filament/Artillery Generic ASA.json" + "name": "Generic ASA @Artillery", + "sub_path": "filament/Generic ASA @Artillery.json" }, { - "name": "Artillery Generic PETG", - "sub_path": "filament/Artillery Generic PETG.json" + "name": "Generic PETG @Artillery", + "sub_path": "filament/Generic PETG @Artillery.json" }, { - "name": "Artillery Generic PLA", - "sub_path": "filament/Artillery Generic PLA.json" + "name": "Generic PLA @Artillery", + "sub_path": "filament/Generic PLA @Artillery.json" }, { - "name": "Artillery Generic PLA-CF", - "sub_path": "filament/Artillery Generic PLA-CF.json" + "name": "Generic PLA-CF @Artillery", + "sub_path": "filament/Generic PLA-CF @Artillery.json" }, { - "name": "Artillery Generic TPU", - "sub_path": "filament/Artillery Generic TPU.json" + "name": "Generic TPU @Artillery", + "sub_path": "filament/Generic TPU @Artillery.json" }, { "name": "Artillery ABS", diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json index 1a3a7e4834..2c9940db39 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery ABS @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "QGbNWGw8rqvq025W", "filament_id": "OFgXgt98", diff --git a/resources/profiles/Artillery/filament/Artillery ABS.json b/resources/profiles/Artillery/filament/Artillery ABS.json index 8ad00f3bde..006b37ca31 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS.json +++ b/resources/profiles/Artillery/filament/Artillery ABS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery ABS", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "fsbfMiamVemzRxkG", "filament_id": "OFgXgt98", diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json index 634a2f46c8..3f353f3784 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery ASA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "eSwM3ZfSBWqR8Gcf", "filament_id": "OF5YVJXH", diff --git a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json index 2910031a1d..18c889b939 100644 --- a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "lOsH1teHe8Pgzx2g", "filament_id": "OFMSvS8z", diff --git a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json index d12faf0b94..abef802ea7 100644 --- a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "b4BKJMUxArvLuEOh", "filament_id": "OFtGC1ye", diff --git a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json index 8c726cb639..24fd12b55c 100644 --- a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PC @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "WawbnfhWn4MT6Hz7", "filament_id": "OFfb10SK", diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json index 1c56ccb925..078786ed5f 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PET @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "QeiSAakfMW7HyhJ7", "filament_id": "OFb5EEM3", diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json index cb62e565ee..9cc9fa81ac 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PETG @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "g7UIfJTOPzMQzfrH", "filament_id": "OFilnglt", diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json index 470b5e89f1..8ae5612c31 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "RTQvSwJBWnut5aBo", "filament_id": "OF8wE5l7", diff --git a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json index a917f9551b..8321236cb4 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "JvmeW29kHCp7HiA6", "filament_id": "OFOnSNt3", diff --git a/resources/profiles/Artillery/filament/Artillery PETG.json b/resources/profiles/Artillery/filament/Artillery PETG.json index 11bc5b0831..bb2227c04a 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG.json +++ b/resources/profiles/Artillery/filament/Artillery PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PETG", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "1MyhYGMxJCmZnJRP", "filament_id": "OFilnglt", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json index 18c8c42d76..b892fd3101 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "zBUD1JyuZF9MOncA", "filament_id": "OFXk1emJ", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json index cb20dc9405..0544a27107 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "2VIrSoq3kufjHMXj", "filament_id": "OF4Nhggz", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic.json b/resources/profiles/Artillery/filament/Artillery PLA Basic.json index 5e777a701b..1a54f28da4 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Basic", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "DcGBMRjdcgLx6pWG", "filament_id": "OFXk1emJ", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json index 77fbb84757..cee07d65d7 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "9zqAIfywiv9zm77X", "filament_id": "OFAC7Wyu", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte.json b/resources/profiles/Artillery/filament/Artillery PLA Matte.json index 4ef84538fb..c74c1d0717 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Matte", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "kt8uKXpMqxrFrHaG", "filament_id": "OFAC7Wyu", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json index ed36227a9e..f0a8424a18 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "BWMjPUWXwumQoY5H", "filament_id": "OFLbXwoL", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk.json b/resources/profiles/Artillery/filament/Artillery PLA Silk.json index 897e98f45c..024d9b885f 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Silk", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "rd0U4uP6mM8S8lDg", "filament_id": "OFLbXwoL", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Tough.json b/resources/profiles/Artillery/filament/Artillery PLA Tough.json index cce5b7fc0a..9fc7df83be 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Tough.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Tough.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA Tough", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "hLFvQXsyyUrguGEp", "filament_id": "OF0R5Wc7", diff --git a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json index 33aea1f4fc..10df36a947 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "oT12s9CEV1CTD6eB", "filament_id": "OFAZllAN", diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json index 00b7642e7c..5fb34feb1f 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery PVA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "r2q4QIlfTUCIz43f", "filament_id": "OFkx5MEe", diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json index 09c0c766ad..730690bba2 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "p6vnCneuwtM0PzL7", "filament_id": "OFcJDtTx", diff --git a/resources/profiles/Artillery/filament/Artillery TPU.json b/resources/profiles/Artillery/filament/Artillery TPU.json index 5d71a93448..407051c138 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU.json +++ b/resources/profiles/Artillery/filament/Artillery TPU.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Artillery TPU", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "IcV1jLJaS5rmdNOY", "filament_id": "OFcJDtTx", diff --git a/resources/profiles/Artillery/filament/Artillery Generic ABS.json b/resources/profiles/Artillery/filament/Generic ABS @Artillery.json similarity index 74% rename from resources/profiles/Artillery/filament/Artillery Generic ABS.json rename to resources/profiles/Artillery/filament/Generic ABS @Artillery.json index 6db4ca98bc..caf687b95e 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic ABS.json +++ b/resources/profiles/Artillery/filament/Generic ABS @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OFwMFLAm", - "setting_id": "C4oiu2SBLwfTEcXu", - "name": "Artillery Generic ABS", + "filament_id": "OFY9muEs", + "setting_id": "DNgTEZpEz8bJoobJ", + "name": "Generic ABS @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_abs", + "renamed_from": "Artillery Generic ABS", "filament_flow_ratio": [ "0.926" ], diff --git a/resources/profiles/Artillery/filament/Artillery Generic ASA.json b/resources/profiles/Artillery/filament/Generic ASA @Artillery.json similarity index 74% rename from resources/profiles/Artillery/filament/Artillery Generic ASA.json rename to resources/profiles/Artillery/filament/Generic ASA @Artillery.json index 5acf3d49f2..74ef4c775f 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic ASA.json +++ b/resources/profiles/Artillery/filament/Generic ASA @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OF6vKLaU", - "setting_id": "1gls4zCclgN68Hlc", - "name": "Artillery Generic ASA", + "filament_id": "OFLPAxz3", + "setting_id": "xWHuScm0fPJCqjVx", + "name": "Generic ASA @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_asa", + "renamed_from": "Artillery Generic ASA", "filament_flow_ratio": [ "0.93" ], diff --git a/resources/profiles/Artillery/filament/Artillery Generic PETG.json b/resources/profiles/Artillery/filament/Generic PETG @Artillery.json similarity index 84% rename from resources/profiles/Artillery/filament/Artillery Generic PETG.json rename to resources/profiles/Artillery/filament/Generic PETG @Artillery.json index d1bafe2688..aa354e517d 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PETG.json +++ b/resources/profiles/Artillery/filament/Generic PETG @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OFyK5Lt9", - "setting_id": "Ou4NR5DVvalg5kCe", - "name": "Artillery Generic PETG", + "filament_id": "OFYPdQJh", + "setting_id": "6wZKfV2XvuJSUSwl", + "name": "Generic PETG @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", + "renamed_from": "Artillery Generic PETG", "reduce_fan_stop_start_freq": [ "1" ], diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA.json b/resources/profiles/Artillery/filament/Generic PLA @Artillery.json similarity index 81% rename from resources/profiles/Artillery/filament/Artillery Generic PLA.json rename to resources/profiles/Artillery/filament/Generic PLA @Artillery.json index 4133075578..d691a9b470 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA.json +++ b/resources/profiles/Artillery/filament/Generic PLA @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OFnfBvn5", - "setting_id": "Bpy4tAvspysDWosL", - "name": "Artillery Generic PLA", + "filament_id": "OFDSrzZ8", + "setting_id": "T0sW3uMBr94Y1X1G", + "name": "Generic PLA @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", + "renamed_from": "Artillery Generic PLA", "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json b/resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json similarity index 81% rename from resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json rename to resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json index 2324bd6ae2..08fd583e18 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json +++ b/resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OFUtGagr", - "setting_id": "h23GL00BFCliLh9N", - "name": "Artillery Generic PLA-CF", + "filament_id": "OFWbdGsC", + "setting_id": "Gxafdb0zYnf9kPwa", + "name": "Generic PLA-CF @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", + "renamed_from": "Artillery Generic PLA-CF", "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Artillery/filament/Artillery Generic TPU.json b/resources/profiles/Artillery/filament/Generic TPU @Artillery.json similarity index 72% rename from resources/profiles/Artillery/filament/Artillery Generic TPU.json rename to resources/profiles/Artillery/filament/Generic TPU @Artillery.json index 522cc0fbfb..f1270d0afb 100644 --- a/resources/profiles/Artillery/filament/Artillery Generic TPU.json +++ b/resources/profiles/Artillery/filament/Generic TPU @Artillery.json @@ -1,11 +1,12 @@ { "type": "filament", - "filament_id": "OFEE1Dld", - "setting_id": "u8YE6r4sGJ0jvqBn", - "name": "Artillery Generic TPU", + "filament_id": "OFgbpcy9", + "setting_id": "dWhysRiE5GrAGyME", + "name": "Generic TPU @Artillery", "from": "system", "instantiation": "true", "inherits": "fdm_filament_tpu", + "renamed_from": "Artillery Generic TPU", "filament_max_volumetric_speed": [ "3.2" ], diff --git a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json index d9b85067a1..fec7ef73d3 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "M83; extruder relative mode\nG28; home all axes\nM109 S[nozzle_temperature_initial_layer]; hotend temperature\nM140 S[bed_temperature_initial_layer_single]; heatbed temperature\nM190 S[bed_temperature_initial_layer_single]; wait for the bed to heat up\nM109 S[nozzle_temperature_initial_layer]; wait for the extruder to heat up\nG92 E0; reset extruder\nG1 X20 Y5 Z0.3 F5000.0; move to start-line position\nG1 Z0.3 F1000; print height\nG1 X200 Y5 F1500.0 E15; draw 1st line\nG1 X200 Y5.3 Z0.3 F5000.0; move to side a little\nG1 X5.3 Y5.3 Z0.3 F1500.0 E30; draw 2nd line\nG1 Z3 F3000; move z up little to prevent scratching of surface", "machine_end_gcode": "G91; Relative positionning\nG1 E-2 Z0.2 F2400; Retract and raise Z\nG1 X5 Y5 F3000; Wipe out\nG1 Z10; Raise Z more\nG90; Absolute positionning\nG1 X0 Y100; Present print\nM106 S0; Turn-off fan\nM104 S0; Turn-off hotend\nM140 S0; Turn-off bed\nM84 X Y E; Disable all steppers but Z", diff --git a/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json index 07beadf546..abac060832 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "M83; extruder relative mode\nG28; home all axes\nG29 S12000; bed mesh leveling\nM104 S[nozzle_temperature_initial_layer]; set hotend temperature\nM140 S[bed_temperature_initial_layer_single]; set heatbed temperature\nG90; Absolute Positioning\nG1 Y0 F5000; Move to front\nG1 X0 F5000; Move to origin\nM190 S[bed_temperature_initial_layer_single]; wait for the bed to heat up\nM109 S[nozzle_temperature_initial_layer]; wait for the extruder to heat up\nG92 E0; reset extruder\nG1 X20 Y5 Z0.3 F5000.0; move to start-line position\nG1 Z0.3 F1000; print height\nG1 X200 Y5 F1500.0 E15; draw 1st line\nG1 X200 Y5.3 Z0.3 F5000.0; move to side a little\nG1 X5.3 Y5.3 Z0.3 F1500.0 E30; draw 2nd line\nG1 Z3 F3000; move z up little to prevent scratching of surface", "machine_end_gcode": "G91; Relative positionning\nG1 E-2 Z0.2 F2400; Retract and raise Z\nG1 X5 Y5 F3000; Wipe out\nG1 Z10; Raise Z more\nG90; Absolute positionning\nG1 X0 Y100; Present print\nM106 S0; Turn-off fan\nM104 S0; Turn-off hotend\nM140 S0; Turn-off bed\nM84 X Y E; Disable all steppers but Z", diff --git a/resources/profiles/Artillery/machine/Artillery Genius Pro.json b/resources/profiles/Artillery/machine/Artillery Genius Pro.json index 6af35f73a6..6581266380 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius Pro.json +++ b/resources/profiles/Artillery/machine/Artillery Genius Pro.json @@ -8,5 +8,5 @@ "bed_model": "artillery_geniuspro_buildplate_model.stl", "bed_texture": "artillery_geniuspro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Genius.json b/resources/profiles/Artillery/machine/Artillery Genius.json index 31c021230b..27fe494d24 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius.json +++ b/resources/profiles/Artillery/machine/Artillery Genius.json @@ -8,5 +8,5 @@ "bed_model": "artillery_genius_buildplate_model.stl", "bed_texture": "artillery_genius_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json index 4aa9f9d9a4..232b68d62e 100644 --- a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{hot_plate_temp_initial_layer[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{nozzle_temperature_initial_layer[0]} ; set final nozzle temp\nM190 S{hot_plate_temp_initial_layer[0]} ; wait for bed temp to stabilize\nM109 S{nozzle_temperature_initial_layer[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Artillery/machine/Artillery Hornet.json b/resources/profiles/Artillery/machine/Artillery Hornet.json index c0e680e039..79e48b3487 100644 --- a/resources/profiles/Artillery/machine/Artillery Hornet.json +++ b/resources/profiles/Artillery/machine/Artillery Hornet.json @@ -8,5 +8,5 @@ "bed_model": "artillery_hornet_buildplate_model.stl", "bed_texture": "artillery_hornet_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json index 81e96a2593..ab83e7d429 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "; Initial setups\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Set the heating\nM190 S[bed_temperature_initial_layer_single] ; wait for bed to heat up\nM104 S[nozzle_temperature_initial_layer] ; start nozzle heating but don't wait\n\n; Home\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG28 ; home all axes\nG1 X3 Y3 F5000 ; move to corner of the bed to avoid ooze over centre\n\n; Wait for final heating\nM109 S[nozzle_temperature_initial_layer] ; wait for the nozzle to heat up\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed to heat up\n\n; Return to prime position, Prime line routine\nG92 E0 ; Reset Extruder\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG1 X10 Y.5 Z0.25 F5000.0 ; Move to start position\nG1 X100 Y.5 Z0.25 F1500.0 E15 ; Draw the first line\nG1 X100 Y.2 Z0.25 F5000.0 ; Move to side a little\nG1 X10 Y.2 Z0.25 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nM221 S{if layer_height<0.075}100{else}95{endif}", "machine_end_gcode": "G4 ; wait\nG92 E0 ; prepare to retract\nG1 E-0.5 F3000; retract to avoid stringing\n\n; Anti-stringing end wiggle\nG91 ; use relative coordinates\nG1 X1 Y1 F1200\n\n; Raise nozzle and present bed\n{if layer_z < printable_height}G1 Z{z_offset+min(layer_z+120, printable_height)}{endif} ; Move print head up\nG90 ; use absolute coordinates\n\n; Reset print setting overrides\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Shut down printer\nM106 S0 ; turn-off fan\nM104 S0 ; turn-off hotend\nM140 S0 ; turn-off bed\nM150 P0 ; turn off led\nM85 S0 ; deactivate idle timeout\nM84 ; disable motors\n", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json index 5d5f13f511..195b01f873 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json @@ -8,5 +8,5 @@ "bed_model": "artillery_sidewinderx1_buildplate_model.stl", "bed_texture": "artillery_sidewinderx1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json index b3100851fb..416ddfb056 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "; Initial setups\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM900 K0.12 ; K factor\nM900 W[line_width] H[layer_height] D[filament_diameter]\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Set the heating\nM190 S[bed_temperature_initial_layer_single] ; wait for bed to heat up\nM104 S[nozzle_temperature_initial_layer] ; start nozzle heating but don't wait\n\n; Home\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG28 ; home all axes\nG1 X3 Y3 F5000 ; move to corner of the bed to avoid ooze over centre\n\n; Wait for final heating\nM109 S[nozzle_temperature_initial_layer] ; wait for the nozzle to heat up\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed to heat up\n\n;Auto bed Leveling\n@BEDLEVELVISUALIZER\nG29 ; ABL T\nM420 S1 Z3 ; reload and fade mesh bed leveling until it reach 3mm Z\n\n; Return to prime position, Prime line routine\nG92 E0 ; Reset Extruder\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG1 X10 Y.5 Z0.25 F5000.0 ; Move to start position\nG1 X100 Y.5 Z0.25 F1500.0 E15 ; Draw the first line\nG1 X100 Y.2 Z0.25 F5000.0 ; Move to side a little\nG1 X10 Y.2 Z0.25 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nM221 S{if layer_height<0.075}100{else}95{endif}", "machine_end_gcode": "G4 ; wait\nG92 E0 ; prepare to retract\nG1 E-0.5 F3000; retract to avoid stringing\n\n; Anti-stringing end wiggle\nG91 ; use relative coordinates\nG1 X1 Y1 F1200\n\n; Raise nozzle and present bed\n{if layer_z < printable_height}G1 Z{z_offset+min(layer_z+120, printable_height)}{endif} ; Move print head up\nG90 ; use absolute coordinates\n\n; Reset print setting overrides\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Shut down printer\nM106 S0 ; turn-off fan\nM104 S0 ; turn-off hotend\nM140 S0 ; turn-off bed\nM150 P0 ; turn off led\nM85 S0 ; deactivate idle timeout\nM84 ; disable motors\n", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json index 79922cfe8b..2009958308 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json @@ -8,5 +8,5 @@ "bed_model": "artillery_sidewinderx2_buildplate_model.stl", "bed_texture": "artillery_sidewinderx2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Blocks.json b/resources/profiles/Blocks.json index 269391c4c3..f8243c252d 100644 --- a/resources/profiles/Blocks.json +++ b/resources/profiles/Blocks.json @@ -1,6 +1,6 @@ { "name": "Blocks", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Blocks configurations", "machine_model_list": [ @@ -249,48 +249,48 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Blocks Generic ABS", - "sub_path": "filament/Blocks Generic ABS.json" + "name": "Generic ABS @Blocks", + "sub_path": "filament/Generic ABS @Blocks.json" }, { - "name": "Blocks Generic ASA", - "sub_path": "filament/Blocks Generic ASA.json" + "name": "Generic ASA @Blocks", + "sub_path": "filament/Generic ASA @Blocks.json" }, { - "name": "Blocks Generic ASA-CF", - "sub_path": "filament/Blocks Generic ASA-CF.json" + "name": "Generic ASA-CF @Blocks", + "sub_path": "filament/Generic ASA-CF @Blocks.json" }, { - "name": "Blocks Generic PA", - "sub_path": "filament/Blocks Generic PA.json" + "name": "Generic PA @Blocks", + "sub_path": "filament/Generic PA @Blocks.json" }, { - "name": "Blocks Generic PA-CF", - "sub_path": "filament/Blocks Generic PA-CF.json" + "name": "Generic PA-CF @Blocks", + "sub_path": "filament/Generic PA-CF @Blocks.json" }, { - "name": "Blocks Generic PC", - "sub_path": "filament/Blocks Generic PC.json" + "name": "Generic PC @Blocks", + "sub_path": "filament/Generic PC @Blocks.json" }, { - "name": "Blocks Generic PETG", - "sub_path": "filament/Blocks Generic PETG.json" + "name": "Generic PETG @Blocks", + "sub_path": "filament/Generic PETG @Blocks.json" }, { - "name": "Blocks Generic PLA", - "sub_path": "filament/Blocks Generic PLA.json" + "name": "Generic PLA @Blocks", + "sub_path": "filament/Generic PLA @Blocks.json" }, { - "name": "Blocks Generic PLA-CF", - "sub_path": "filament/Blocks Generic PLA-CF.json" + "name": "Generic PLA-CF @Blocks", + "sub_path": "filament/Generic PLA-CF @Blocks.json" }, { - "name": "Blocks Generic PVA", - "sub_path": "filament/Blocks Generic PVA.json" + "name": "Generic PVA @Blocks", + "sub_path": "filament/Generic PVA @Blocks.json" }, { - "name": "Blocks Generic TPU", - "sub_path": "filament/Blocks Generic TPU.json" + "name": "Generic TPU @Blocks", + "sub_path": "filament/Generic TPU @Blocks.json" } ], "machine_list": [ diff --git a/resources/profiles/Blocks/filament/Blocks Generic ABS.json b/resources/profiles/Blocks/filament/Generic ABS @Blocks.json similarity index 90% rename from resources/profiles/Blocks/filament/Blocks Generic ABS.json rename to resources/profiles/Blocks/filament/Generic ABS @Blocks.json index 122469f7f5..c3d09cfd18 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ABS.json +++ b/resources/profiles/Blocks/filament/Generic ABS @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic ABS", + "name": "Generic ABS @Blocks", "inherits": "fdm_filament_abs", + "renamed_from": "Blocks Generic ABS", "from": "system", - "setting_id": "QhLaLEkxhvIMa3Ik", - "filament_id": "OFma52eS", + "setting_id": "TL1Q1kA4t36GGObG", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA.json b/resources/profiles/Blocks/filament/Generic ASA @Blocks.json similarity index 90% rename from resources/profiles/Blocks/filament/Blocks Generic ASA.json rename to resources/profiles/Blocks/filament/Generic ASA @Blocks.json index ed190d385b..0c1ee32085 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA.json +++ b/resources/profiles/Blocks/filament/Generic ASA @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic ASA", + "name": "Generic ASA @Blocks", "inherits": "fdm_filament_asa", + "renamed_from": "Blocks Generic ASA", "from": "system", - "setting_id": "DcgqA071S6MRVbKI", - "filament_id": "OFB9dx27", + "setting_id": "xP7cB4RHgbm4cYDD", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json b/resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json similarity index 88% rename from resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json rename to resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json index a7fa66375d..0d9f0aa862 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json +++ b/resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "Blocks Generic ASA-CF", + "name": "Generic ASA-CF @Blocks", "inherits": "fdm_filament_asa", + "renamed_from": "Blocks Generic ASA-CF", "from": "system", - "setting_id": "FF6D7i492XTrb8AO", - "filament_id": "OFctbSkL", + "setting_id": "ju4ue7yJoz3ujny6", + "filament_id": "OF53eLVD", "instantiation": "true", + "filament_type": [ + "ASA-CF" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA.json b/resources/profiles/Blocks/filament/Generic PA @Blocks.json similarity index 74% rename from resources/profiles/Blocks/filament/Blocks Generic PA.json rename to resources/profiles/Blocks/filament/Generic PA @Blocks.json index a25c3e2b13..e624226ded 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PA.json +++ b/resources/profiles/Blocks/filament/Generic PA @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PA", + "name": "Generic PA @Blocks", "inherits": "fdm_filament_pa", + "renamed_from": "Blocks Generic PA", "from": "system", - "setting_id": "3L5IYVTlkt8V0EiW", - "filament_id": "OFiUSDih", + "setting_id": "hL3p8gAeciwDkjNK", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json b/resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json similarity index 91% rename from resources/profiles/Blocks/filament/Blocks Generic PA-CF.json rename to resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json index b527976973..7ec957f6d1 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json +++ b/resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PA-CF", + "name": "Generic PA-CF @Blocks", "inherits": "fdm_filament_pa", + "renamed_from": "Blocks Generic PA-CF", "from": "system", - "setting_id": "B254XDRQzysz7YUd", - "filament_id": "OF8bLDu7", + "setting_id": "T6SO0WRdnG6wcyG8", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PC.json b/resources/profiles/Blocks/filament/Generic PC @Blocks.json similarity index 74% rename from resources/profiles/Blocks/filament/Blocks Generic PC.json rename to resources/profiles/Blocks/filament/Generic PC @Blocks.json index 2a0500e435..7b5df77bc5 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PC.json +++ b/resources/profiles/Blocks/filament/Generic PC @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PC", + "name": "Generic PC @Blocks", "inherits": "fdm_filament_pc", + "renamed_from": "Blocks Generic PC", "from": "system", - "setting_id": "VUPeelf61TmTQrun", - "filament_id": "OFahE7HP", + "setting_id": "Xhs8PjtmwwVj0ksE", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PETG.json b/resources/profiles/Blocks/filament/Generic PETG @Blocks.json similarity index 91% rename from resources/profiles/Blocks/filament/Blocks Generic PETG.json rename to resources/profiles/Blocks/filament/Generic PETG @Blocks.json index 068fc32774..45a2a13e9b 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PETG.json +++ b/resources/profiles/Blocks/filament/Generic PETG @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PETG", + "name": "Generic PETG @Blocks", "inherits": "fdm_filament_petg", + "renamed_from": "Blocks Generic PETG", "from": "system", - "setting_id": "FKkbjL1V4ZEjXB0H", - "filament_id": "OFrgGex8", + "setting_id": "NgzPlYItKHbmGgv3", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA.json b/resources/profiles/Blocks/filament/Generic PLA @Blocks.json similarity index 87% rename from resources/profiles/Blocks/filament/Blocks Generic PLA.json rename to resources/profiles/Blocks/filament/Generic PLA @Blocks.json index f900b91225..3a5c942899 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA.json +++ b/resources/profiles/Blocks/filament/Generic PLA @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PLA", + "name": "Generic PLA @Blocks", "inherits": "fdm_filament_pla", + "renamed_from": "Blocks Generic PLA", "from": "system", - "setting_id": "N3wDUqmBETfelOoG", - "filament_id": "OFNYewRS", + "setting_id": "kjhuttx4T8OtTNmV", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json b/resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json similarity index 76% rename from resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json rename to resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json index af0f0c80b9..3a3ac5daba 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json +++ b/resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PLA-CF", + "name": "Generic PLA-CF @Blocks", "inherits": "fdm_filament_pla", + "renamed_from": "Blocks Generic PLA-CF", "from": "system", - "setting_id": "RHKPeXZiv4E2p4lP", - "filament_id": "OFupq0tY", + "setting_id": "oKUqzwAWMrpiyGLf", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Blocks/filament/Blocks Generic PVA.json b/resources/profiles/Blocks/filament/Generic PVA @Blocks.json similarity index 74% rename from resources/profiles/Blocks/filament/Blocks Generic PVA.json rename to resources/profiles/Blocks/filament/Generic PVA @Blocks.json index 850a5cd246..5b6a3ad368 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic PVA.json +++ b/resources/profiles/Blocks/filament/Generic PVA @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic PVA", + "name": "Generic PVA @Blocks", "inherits": "fdm_filament_pva", + "renamed_from": "Blocks Generic PVA", "from": "system", - "setting_id": "J74KgdSzf503Tk9p", - "filament_id": "OFiorRtJ", + "setting_id": "tNw3oe7VovLkgUbB", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Blocks/filament/Blocks Generic TPU.json b/resources/profiles/Blocks/filament/Generic TPU @Blocks.json similarity index 89% rename from resources/profiles/Blocks/filament/Blocks Generic TPU.json rename to resources/profiles/Blocks/filament/Generic TPU @Blocks.json index e8e043b174..8b5873a745 100644 --- a/resources/profiles/Blocks/filament/Blocks Generic TPU.json +++ b/resources/profiles/Blocks/filament/Generic TPU @Blocks.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Blocks Generic TPU", + "name": "Generic TPU @Blocks", "inherits": "fdm_filament_tpu", + "renamed_from": "Blocks Generic TPU", "from": "system", - "setting_id": "xFRwN8ZEwEGlLFwo", - "filament_id": "OFMEbuBE", + "setting_id": "6iVYOCZo8ugs4JA0", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "4" diff --git a/resources/profiles/Blocks/machine/BLOCKS Pro S100.json b/resources/profiles/Blocks/machine/BLOCKS Pro S100.json index abd474d3f1..de9ea3756c 100644 --- a/resources/profiles/Blocks/machine/BLOCKS Pro S100.json +++ b/resources/profiles/Blocks/machine/BLOCKS Pro S100.json @@ -8,5 +8,5 @@ "bed_model": "PRO S100 HotBed model.stl", "bed_texture": "PRO S100 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json b/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json index b3b82c876c..76dafd429e 100644 --- a/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json +++ b/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json @@ -8,5 +8,5 @@ "bed_model": "RD50 V2 HotBed model.stl", "bed_texture": "RD50 V2 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/BLOCKS RF50.json b/resources/profiles/Blocks/machine/BLOCKS RF50.json index acc4e95f63..14ae8bc5f4 100644 --- a/resources/profiles/Blocks/machine/BLOCKS RF50.json +++ b/resources/profiles/Blocks/machine/BLOCKS RF50.json @@ -8,5 +8,5 @@ "bed_model": "RF50 HotBed model.stl", "bed_texture": "RF50 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/fdm_klipper_common.json b/resources/profiles/Blocks/machine/fdm_klipper_common.json index 7415366d39..1756ac178a 100644 --- a/resources/profiles/Blocks/machine/fdm_klipper_common.json +++ b/resources/profiles/Blocks/machine/fdm_klipper_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "Blocks Generic PLA" + "Generic PLA @Blocks" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/CONSTRUCT3D.json b/resources/profiles/CONSTRUCT3D.json index ba2652f724..efc7c78972 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ @@ -65,16 +65,16 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "C1 Generic High Flow PETG", - "sub_path": "filament/C1 Generic High Flow PETG.json" + "name": "Generic High Flow PETG @C1", + "sub_path": "filament/Generic High Flow PETG @C1.json" }, { - "name": "C1 Generic PETG", - "sub_path": "filament/C1 Generic PETG.json" + "name": "Generic PETG @C1", + "sub_path": "filament/Generic PETG @C1.json" }, { - "name": "C1 Generic PLA", - "sub_path": "filament/C1 Generic PLA.json" + "name": "Generic PLA @C1", + "sub_path": "filament/Generic PLA @C1.json" } ], "machine_list": [ diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json b/resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json similarity index 84% rename from resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json rename to resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json index 1a1f01b3d9..11a7df0903 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json +++ b/resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "C1 Generic High Flow PETG", + "name": "Generic High Flow PETG @C1", "inherits": "fdm_filament_pet", + "renamed_from": "C1 Generic High Flow PETG", "from": "system", - "setting_id": "3IxBZSWFfFGmKAQ7", - "filament_id": "OFZ4fTO8", + "setting_id": "STRDBlNRWBGfRctE", + "filament_id": "OFNjku08", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json b/resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json similarity index 83% rename from resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json rename to resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json index fc011cc9bc..dfb510e993 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json +++ b/resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "C1 Generic PETG", + "name": "Generic PETG @C1", "inherits": "fdm_filament_pet", + "renamed_from": "C1 Generic PETG", "from": "system", - "setting_id": "jZBfhlf6VX5r3KHb", - "filament_id": "OFz3q5Xz", + "setting_id": "v0b4nWyzRw5z5EfK", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json b/resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json similarity index 75% rename from resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json rename to resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json index 4b2cd9bbea..4c8a90b1de 100644 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json +++ b/resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "C1 Generic PLA", + "name": "Generic PLA @C1", "inherits": "fdm_filament_pla", + "renamed_from": "C1 Generic PLA", "from": "system", - "setting_id": "Uv3kcMO5qNwkrMPV", - "filament_id": "OF51XQar", + "setting_id": "mCKOBqN6Y92a9nHV", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json index bee8ab1e73..7d6ad32ce1 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "CONSTRUCT3D", "bed_model": "construct_1_xl_buildplate_model.stl", - "default_materials": "C1 Generic PLA;C1 Generic PETG;C1 Generic High Flow PETG" + "default_materials": "Generic PLA @C1;Generic PETG @C1;Generic High Flow PETG @C1" } diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1.json index 152a1e5bb2..4839166da6 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "CONSTRUCT3D", "bed_model": "construct_1_buildplate_model.stl", - "default_materials": "C1 Generic PLA;C1 Generic PETG;C1 Generic High Flow PETG" + "default_materials": "Generic PLA @C1;Generic PETG @C1;Generic High Flow PETG @C1" } diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index 19d5c9b7b5..746a31e334 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ @@ -46,36 +46,36 @@ ], "filament_list": [ { - "name": "Chuanying Generic ABS", - "sub_path": "filament/Chuanying Generic ABS.json" + "name": "Generic ABS @Chuanying", + "sub_path": "filament/Generic ABS @Chuanying.json" }, { - "name": "Chuanying Generic ASA", - "sub_path": "filament/Chuanying Generic ASA.json" + "name": "Generic ASA @Chuanying", + "sub_path": "filament/Generic ASA @Chuanying.json" }, { - "name": "Chuanying Generic HS PLA", - "sub_path": "filament/Chuanying Generic HS PLA.json" + "name": "Generic HS PLA @Chuanying", + "sub_path": "filament/Generic HS PLA @Chuanying.json" }, { - "name": "Chuanying Generic PETG", - "sub_path": "filament/Chuanying Generic PETG.json" + "name": "Generic PETG @Chuanying", + "sub_path": "filament/Generic PETG @Chuanying.json" }, { - "name": "Chuanying Generic PLA", - "sub_path": "filament/Chuanying Generic PLA.json" + "name": "Generic PLA @Chuanying", + "sub_path": "filament/Generic PLA @Chuanying.json" }, { - "name": "Chuanying Generic PLA-Silk", - "sub_path": "filament/Chuanying Generic PLA-Silk.json" + "name": "Generic PLA-Silk @Chuanying", + "sub_path": "filament/Generic PLA-Silk @Chuanying.json" }, { "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", "sub_path": "filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic HIPS", - "sub_path": "filament/Chuanying Generic HIPS.json" + "name": "Generic HIPS @Chuanying", + "sub_path": "filament/Generic HIPS @Chuanying.json" }, { "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", @@ -90,8 +90,8 @@ "sub_path": "filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic PVA", - "sub_path": "filament/Chuanying Generic PVA.json" + "name": "Generic PVA @Chuanying", + "sub_path": "filament/Generic PVA @Chuanying.json" }, { "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", @@ -102,16 +102,16 @@ "sub_path": "filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic PETG-CF10", - "sub_path": "filament/Chuanying Generic PETG-CF10.json" + "name": "Generic PETG-CF10 @Chuanying", + "sub_path": "filament/Generic PETG-CF10 @Chuanying.json" }, { - "name": "Chuanying Generic PLA-CF10", - "sub_path": "filament/Chuanying Generic PLA-CF10.json" + "name": "Generic PLA-CF10 @Chuanying", + "sub_path": "filament/Generic PLA-CF10 @Chuanying.json" }, { - "name": "Chuanying Generic TPU", - "sub_path": "filament/Chuanying Generic TPU.json" + "name": "Generic TPU @Chuanying", + "sub_path": "filament/Generic TPU @Chuanying.json" } ], "machine_list": [ diff --git a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json index f6df5c7924..8a2a02e2f6 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic ABS", + "inherits": "Generic ABS @Chuanying", "from": "system", "setting_id": "VkCgo0e4KR24DX28", "filament_id": "OFs1sNLz", diff --git a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json index e7f023b4a2..018b418f50 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic ASA", + "inherits": "Generic ASA @Chuanying", "from": "system", "setting_id": "px1EPCDgOG8eE81V", "instantiation": "true", diff --git a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json index fb874cdb9f..2cf18e831f 100644 --- a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic HS PLA", + "inherits": "Generic HS PLA @Chuanying", "from": "system", "setting_id": "CAdli5S8JIFafvRG", "instantiation": "true", diff --git a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json index a1ca25e1a7..e41bc4221b 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying PETG @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PETG", + "inherits": "Generic PETG @Chuanying", "from": "system", "setting_id": "9xxP8YWj4hnWQoVZ", "filament_id": "OFlXJxX1", diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json index c8ba7cc5e6..7bdab64af6 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PLA", + "inherits": "Generic PLA @Chuanying", "from": "system", "setting_id": "3WDFe1uKTOTiRtPE", "instantiation": "true", diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json index 4e3a0391dc..d04fcc6f38 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Chuanying", "from": "system", "setting_id": "kph5feBjhPi0oo0G", "instantiation": "true", diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json similarity index 85% rename from resources/profiles/Chuanying/filament/Chuanying Generic ABS.json rename to resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json index c98af61d3d..570cd814df 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json +++ b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic ABS", + "name": "Generic ABS @Chuanying", "inherits": "fdm_filament_abs", + "renamed_from": "Chuanying Generic ABS", "from": "system", - "setting_id": "XslWGeEo1Okicu28", - "filament_id": "OFZPlCck", + "setting_id": "iOgVkaYF0sixbb9x", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json similarity index 95% rename from resources/profiles/Chuanying/filament/Chuanying Generic ASA.json rename to resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json index 6c3dd293d6..f5cc9c8419 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json +++ b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic ASA", + "name": "Generic ASA @Chuanying", "inherits": "fdm_filament_asa", + "renamed_from": "Chuanying Generic ASA", "from": "system", - "setting_id": "wBBQiy8JV2LrnIav", - "filament_id": "OFBIadjM", + "setting_id": "39OBrSE3RugtTPPR", + "filament_id": "OFLPAxz3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json similarity index 94% rename from resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json rename to resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json index f0dcbdaf77..4d8edd7298 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json +++ b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic HIPS", - "inherits": "Chuanying Generic ABS", + "name": "Generic HIPS @Chuanying", + "inherits": "Generic ABS @Chuanying", + "renamed_from": "Chuanying Generic HIPS", "from": "system", - "setting_id": "bBNozld07rP6mV3d", - "filament_id": "OFDeTsJw", + "setting_id": "TV3UktlnP0aTLsOZ", + "filament_id": "OFsFon5l", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "Chuanying Generic HIPS" + "Generic HIPS @Chuanying" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json similarity index 96% rename from resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json rename to resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json index a5d4cab7eb..8b0529814e 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json +++ b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic HS PLA", + "name": "Generic HS PLA @Chuanying", "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic HS PLA", "from": "system", - "setting_id": "YZT1Uv73b8ArVoX3", - "filament_id": "OFdXgp2K", + "setting_id": "uw7SQpFnhFiO8i1N", + "filament_id": "OFvxghTE", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json similarity index 90% rename from resources/profiles/Chuanying/filament/Chuanying Generic PETG.json rename to resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json index c4dad7d095..ae84fb2982 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json +++ b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PETG", + "name": "Generic PETG @Chuanying", "inherits": "fdm_filament_pet", + "renamed_from": "Chuanying Generic PETG", "from": "system", - "setting_id": "judDupafROrSnVv8", - "filament_id": "OFfxFQf9", + "setting_id": "Mq3uwHDMub81SuRG", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json similarity index 94% rename from resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json rename to resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json index 42865bb8af..85d42dad84 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json +++ b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PETG-CF10", + "name": "Generic PETG-CF10 @Chuanying", "inherits": "fdm_filament_pet", + "renamed_from": "Chuanying Generic PETG-CF10", "from": "system", - "setting_id": "S2vCGI7sqN8FwodT", - "filament_id": "OFXXUHSG", + "setting_id": "Pr70SnbXDjOF9EvU", + "filament_id": "OFO5djrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json similarity index 87% rename from resources/profiles/Chuanying/filament/Chuanying Generic PLA.json rename to resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json index bf0db17fb4..3fcf7cf873 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json +++ b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PLA", + "name": "Generic PLA @Chuanying", "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic PLA", "from": "system", - "setting_id": "nnyBm7dlrz3OsVQz", - "filament_id": "OF5vzBhb", + "setting_id": "PRk8NAihEzwi5Dqd", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json similarity index 96% rename from resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json rename to resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json index cf2993ee62..c76c4de977 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json +++ b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PLA-CF10", + "name": "Generic PLA-CF10 @Chuanying", "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic PLA-CF10", "from": "system", - "setting_id": "EZA59VPwew1cpyUJ", - "filament_id": "OFFxZ7hZ", + "setting_id": "I4FjaXNkWl8Mr4ie", + "filament_id": "OFX2zcrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json similarity index 87% rename from resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json rename to resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json index 90409c864e..0739646658 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json +++ b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PLA-Silk", + "name": "Generic PLA-Silk @Chuanying", "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic PLA-Silk", "from": "system", - "setting_id": "M9wzNVOPRQlayQH1", - "filament_id": "OFeK2vkS", + "setting_id": "tSCou6bWg8eY1TFn", + "filament_id": "OFi6PfUM", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json similarity index 94% rename from resources/profiles/Chuanying/filament/Chuanying Generic PVA.json rename to resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json index 3e89ad7c6b..a38af95d65 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json +++ b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic PVA", - "inherits": "Chuanying Generic PLA", + "name": "Generic PVA @Chuanying", + "inherits": "Generic PLA @Chuanying", + "renamed_from": "Chuanying Generic PVA", "from": "system", - "setting_id": "ePZFnkgBiyFuKvji", - "filament_id": "OFRusgEn", + "setting_id": "UTutnObeQqlZxe0B", + "filament_id": "OFDvXujf", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "Chuanying Generic PVA" + "Generic PVA @Chuanying" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json similarity index 95% rename from resources/profiles/Chuanying/filament/Chuanying Generic TPU.json rename to resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json index 719fbec4d8..9bea6c388d 100644 --- a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json +++ b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Chuanying Generic TPU", + "name": "Generic TPU @Chuanying", "inherits": "fdm_filament_tpu", + "renamed_from": "Chuanying Generic TPU", "from": "system", - "setting_id": "HYciEf4160uMYGnH", - "filament_id": "OFYlZMmy", + "setting_id": "gYsq1HqkgyfmVpvz", + "filament_id": "OFgbpcy9", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Chuanying/machine/Chuanying X1.json b/resources/profiles/Chuanying/machine/Chuanying X1.json index c3debcfa76..9e9c3f015d 100644 --- a/resources/profiles/Chuanying/machine/Chuanying X1.json +++ b/resources/profiles/Chuanying/machine/Chuanying X1.json @@ -8,5 +8,5 @@ "bed_model": "chuanying_x1_buildplate_model.STL", "bed_texture": "chuanying_x1_buildplate_texture.svg", "hotend_model": "chuanying_x1_hotend.STL", - "default_materials": "Chuanying Generic PETG;Chuanying Generic PLA" + "default_materials": "Generic PETG @Chuanying;Generic PLA @Chuanying" } diff --git a/resources/profiles/Chuanying/machine/fdm_chuanying_common.json b/resources/profiles/Chuanying/machine/fdm_chuanying_common.json index 7e6cf041bd..41d7339cf0 100644 --- a/resources/profiles/Chuanying/machine/fdm_chuanying_common.json +++ b/resources/profiles/Chuanying/machine/fdm_chuanying_common.json @@ -124,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Chuanying Generic PLA" + "Generic PLA @Chuanying" ], "default_print_profile": "0.20mm Standard @Chuanying X1", "bed_exclude_area": [ diff --git a/resources/profiles/Chuanying/machine/fdm_klipper_common.json b/resources/profiles/Chuanying/machine/fdm_klipper_common.json index fc879d8977..16fb20b900 100644 --- a/resources/profiles/Chuanying/machine/fdm_klipper_common.json +++ b/resources/profiles/Chuanying/machine/fdm_klipper_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "Chuanying Generic ABS" + "Generic ABS @Chuanying" ], "default_print_profile": "0.20mm Standard @Chuanying X1", "bed_exclude_area": [ diff --git a/resources/profiles/Chuanying/machine/fdm_x1_common.json b/resources/profiles/Chuanying/machine/fdm_x1_common.json index 0d2b163b3b..a32177b1d2 100644 --- a/resources/profiles/Chuanying/machine/fdm_x1_common.json +++ b/resources/profiles/Chuanying/machine/fdm_x1_common.json @@ -93,7 +93,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Chuanying Generic PLA" + "Generic PLA @Chuanying" ], "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", diff --git a/resources/profiles/Co Print.json b/resources/profiles/Co Print.json index 8e7d9ec990..e6f9fe967c 100644 --- a/resources/profiles/Co Print.json +++ b/resources/profiles/Co Print.json @@ -1,6 +1,6 @@ { "name": "Co Print", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "CoPrint configurations", "machine_model_list": [ @@ -37,20 +37,20 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "CoPrint Generic PLA", - "sub_path": "filament/CoPrint Generic PLA.json" + "name": "Generic PLA @CoPrint", + "sub_path": "filament/Generic PLA @CoPrint.json" }, { - "name": "CoPrint Generic ABS", - "sub_path": "filament/CoPrint Generic ABS.json" + "name": "Generic ABS @CoPrint", + "sub_path": "filament/Generic ABS @CoPrint.json" }, { - "name": "CoPrint Generic PETG", - "sub_path": "filament/CoPrint Generic PETG.json" + "name": "Generic PETG @CoPrint", + "sub_path": "filament/Generic PETG @CoPrint.json" }, { - "name": "CoPrint Generic TPU", - "sub_path": "filament/CoPrint Generic TPU.json" + "name": "Generic TPU @CoPrint", + "sub_path": "filament/Generic TPU @CoPrint.json" } ], "machine_list": [ diff --git a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json b/resources/profiles/Co Print/filament/Generic ABS @CoPrint.json similarity index 86% rename from resources/profiles/Co Print/filament/CoPrint Generic ABS.json rename to resources/profiles/Co Print/filament/Generic ABS @CoPrint.json index 9b8e5c7995..f047afc265 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json +++ b/resources/profiles/Co Print/filament/Generic ABS @CoPrint.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoPrint Generic ABS", - "inherits": "CoPrint Generic PLA", + "name": "Generic ABS @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic ABS", "from": "system", - "setting_id": "xW2rHuxT9o7MG8qB", - "filament_id": "OFU6fjbi", + "setting_id": "T6mJwfI7n1YDmDzv", + "filament_id": "OFY9muEs", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json b/resources/profiles/Co Print/filament/Generic PETG @CoPrint.json similarity index 79% rename from resources/profiles/Co Print/filament/CoPrint Generic PETG.json rename to resources/profiles/Co Print/filament/Generic PETG @CoPrint.json index 51dcfb2fff..dd2d03af04 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json +++ b/resources/profiles/Co Print/filament/Generic PETG @CoPrint.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoPrint Generic PETG", - "inherits": "CoPrint Generic PLA", + "name": "Generic PETG @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic PETG", "from": "system", - "setting_id": "k4m484S1samBGEVb", - "filament_id": "OFXuwtnq", + "setting_id": "99zIrGIXC9RUGDlM", + "filament_id": "OFYPdQJh", "instantiation": "true", "fan_max_speed": [ "90" diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json similarity index 68% rename from resources/profiles/Co Print/filament/CoPrint Generic PLA.json rename to resources/profiles/Co Print/filament/Generic PLA @CoPrint.json index 265f8ba442..2a8510b3ab 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json +++ b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "CoPrint Generic PLA", + "name": "Generic PLA @CoPrint", "inherits": "fdm_filament_pla", + "renamed_from": "CoPrint Generic PLA", "from": "system", - "setting_id": "Hv40GsmNozxOJ38T", - "filament_id": "OF6KELDx", + "setting_id": "9tNsM3FhIDgKJ05R", + "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_load_time": [ "9.75" ], diff --git a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json b/resources/profiles/Co Print/filament/Generic TPU @CoPrint.json similarity index 81% rename from resources/profiles/Co Print/filament/CoPrint Generic TPU.json rename to resources/profiles/Co Print/filament/Generic TPU @CoPrint.json index fc2fc69008..c25896fe55 100644 --- a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json +++ b/resources/profiles/Co Print/filament/Generic TPU @CoPrint.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoPrint Generic TPU", - "inherits": "CoPrint Generic PLA", + "name": "Generic TPU @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic TPU", "from": "system", - "setting_id": "2mWqeih012I5D2CK", - "filament_id": "OF7g2vYQ", + "setting_id": "0V6UoaCfNUIwYwah", + "filament_id": "OFgbpcy9", "instantiation": "true", "fan_max_speed": [ "80" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json index 355ba1eca8..f032c9bf6e 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json index 52fa36bc5d..a36e231d94 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json index 57f2e507c4..2d206c1734 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json index efa52a34f4..72116fcd70 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet.json b/resources/profiles/Co Print/machine/Co Print ChromaSet.json index 883ee91c93..5ce0287757 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "Co_Print_ChromaSet_buildplate_texture.svg", "hotend_model": "", - "default_materials": "CoPrint Generic PLA" + "default_materials": "Generic PLA @CoPrint" } diff --git a/resources/profiles/Co Print/machine/fdm_coprint_common.json b/resources/profiles/Co Print/machine/fdm_coprint_common.json index f7911c2a94..ecb6bd1ac2 100644 --- a/resources/profiles/Co Print/machine/fdm_coprint_common.json +++ b/resources/profiles/Co Print/machine/fdm_coprint_common.json @@ -100,7 +100,7 @@ "machine_start_gcode": "start_print EXTRUDER=[initial_extruder] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "end_print", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/CoLiDo.json b/resources/profiles/CoLiDo.json index 972ffd396b..d0c395b348 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -1,6 +1,6 @@ { "name": "CoLiDo", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "CoLiDo configurations", "machine_model_list": [ @@ -189,32 +189,32 @@ "sub_path": "filament/CoLiDo ABS @CoLiDo SR1.json" }, { - "name": "CoLiDo Generic ABS @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json" + "name": "Generic ABS @CoLiDo DIY 4.0", + "sub_path": "filament/Generic ABS @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic ABS @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic ABS @CoLiDo X16.json" + "name": "Generic ABS @CoLiDo X16", + "sub_path": "filament/Generic ABS @CoLiDo X16.json" }, { - "name": "CoLiDo Generic PETG @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json" + "name": "Generic PETG @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PETG @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic PETG @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic PETG @CoLiDo X16.json" + "name": "Generic PETG @CoLiDo X16", + "sub_path": "filament/Generic PETG @CoLiDo X16.json" }, { "name": "CoLiDo PETG @CoLiDo SR1", "sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json" }, { - "name": "CoLiDo Generic PLA @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json" + "name": "Generic PLA @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic PLA @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic PLA @CoLiDo X16.json" + "name": "Generic PLA @CoLiDo X16", + "sub_path": "filament/Generic PLA @CoLiDo X16.json" }, { "name": "CoLiDo PLA @CoLiDo SR1", @@ -229,12 +229,12 @@ "sub_path": "filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json" }, { - "name": "CoLiDo Generic TPU @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json" + "name": "Generic TPU @CoLiDo DIY 4.0", + "sub_path": "filament/Generic TPU @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic TPU @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic TPU @CoLiDo X16.json" + "name": "Generic TPU @CoLiDo X16", + "sub_path": "filament/Generic TPU @CoLiDo X16.json" } ], "machine_list": [ diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json similarity index 73% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json rename to resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json index 84469a0d15..acb6033883 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic ABS @CoLiDo DIY 4.0", + "name": "Generic ABS @CoLiDo DIY 4.0", "inherits": "fdm_filament_abs", + "renamed_from": "CoLiDo Generic ABS @CoLiDo DIY 4.0;CoLiDo Generic ABS CoLiDo DIY 4.0", "from": "system", - "setting_id": "acWqrAFyi2SIkNwa", - "filament_id": "OFWIr7ZE", + "setting_id": "XLTLGUPGcCZnX5XA", + "filament_id": "OFY9muEs", "instantiation": "true", "fan_max_speed": [ "80" @@ -16,7 +17,7 @@ "16" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "100" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json similarity index 75% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json rename to resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json index 3ee0390bfd..aa567b7ba8 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic ABS @CoLiDo X16", + "name": "Generic ABS @CoLiDo X16", "inherits": "fdm_filament_abs", + "renamed_from": "CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic ABS CoLiDo X16", "from": "system", - "setting_id": "l44ioMidpUECbGYF", - "filament_id": "OFWIr7ZE", + "setting_id": "LE7jeYUNsBZEKQpJ", + "filament_id": "OFY9muEs", "instantiation": "true", "fan_max_speed": [ "20" @@ -16,7 +17,7 @@ "16" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "95" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json similarity index 84% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json rename to resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json index 1a3839374a..d70dd4d511 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic PETG @CoLiDo DIY 4.0", + "name": "Generic PETG @CoLiDo DIY 4.0", "inherits": "fdm_filament_pet", + "renamed_from": "CoLiDo Generic PETG @CoLiDo DIY 4.0;CoLiDo Generic PETG CoLiDo DIY 4.0", "from": "system", - "setting_id": "IBtIS8bwcIWhiCow", - "filament_id": "OF3wxlw9", + "setting_id": "FV2MjDSWlg3kolp3", + "filament_id": "OFYPdQJh", "instantiation": "true", "cool_plate_temp": [ "0" @@ -40,7 +41,7 @@ "; filament start gcode\n" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json similarity index 85% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json rename to resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json index 7b532e7dfa..5f68b5600b 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic PETG @CoLiDo X16", + "name": "Generic PETG @CoLiDo X16", "inherits": "fdm_filament_pet", + "renamed_from": "CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic PETG CoLiDo X16", "from": "system", - "setting_id": "AovAvrEzGiZqFRpc", - "filament_id": "OF3wxlw9", + "setting_id": "eX4i0rDwO3rAlQ2y", + "filament_id": "OFYPdQJh", "instantiation": "true", "cool_plate_temp": [ "0" @@ -40,7 +41,7 @@ "; filament start gcode\n" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json similarity index 77% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json rename to resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json index bb5c3d8dc7..9bd8db3357 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic PLA @CoLiDo DIY 4.0", + "name": "Generic PLA @CoLiDo DIY 4.0", "inherits": "fdm_filament_pla", + "renamed_from": "CoLiDo Generic PLA @CoLiDo DIY 4.0;CoLiDo Generic PLA CoLiDo DIY 4.0", "from": "system", - "setting_id": "foEeUk6PK78QXleQ", - "filament_id": "OFeDfaCh", + "setting_id": "POF6nKughZF8OsBF", + "filament_id": "OFDSrzZ8", "instantiation": "true", "fan_cooling_layer_time": [ "80" @@ -22,7 +23,7 @@ "19.5" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "60" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json similarity index 78% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json rename to resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json index d0e36e8146..f437702111 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic PLA @CoLiDo X16", + "name": "Generic PLA @CoLiDo X16", "inherits": "fdm_filament_pla", + "renamed_from": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic PLA CoLiDo X16", "from": "system", - "setting_id": "HY8RFWOKRptC2YVt", - "filament_id": "OFeDfaCh", + "setting_id": "38SFNLJEVBeAVL3B", + "filament_id": "OFDSrzZ8", "instantiation": "true", "fan_cooling_layer_time": [ "80" @@ -22,7 +23,7 @@ "12" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "60" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json similarity index 74% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json rename to resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json index e4fd40ea60..0422f6b4c6 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic TPU @CoLiDo DIY 4.0", + "name": "Generic TPU @CoLiDo DIY 4.0", "inherits": "fdm_filament_tpu", + "renamed_from": "CoLiDo Generic TPU @CoLiDo DIY 4.0;CoLiDo Generic TPU CoLiDo DIY 4.0", "from": "system", - "setting_id": "ZgbaHhRSK8AW38MB", - "filament_id": "OFdlGycb", + "setting_id": "5tJNn6c6RXqJUT2z", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_density": [ "1.22" @@ -16,7 +17,7 @@ "; filament start gcode\n" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "45" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json similarity index 76% rename from resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json rename to resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json index 9fb7c570e9..ccf0d405b1 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json +++ b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "CoLiDo Generic TPU @CoLiDo X16", + "name": "Generic TPU @CoLiDo X16", "inherits": "fdm_filament_tpu", + "renamed_from": "CoLiDo Generic TPU @CoLiDo X16;CoLiDo Generic TPU CoLiDo X16", "from": "system", - "setting_id": "f6yTiUiYYLckJBTQ", - "filament_id": "OFdlGycb", + "setting_id": "wylEuYSIKlzSVnoQ", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_density": [ "1.22" @@ -16,7 +17,7 @@ "; filament start gcode\n" ], "filament_vendor": [ - "CoLiDo" + "Generic" ], "hot_plate_temp": [ "40" diff --git a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json index 65f2db78eb..8e9b4b34c5 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo X16" + "Generic PLA @CoLiDo X16" ], "default_print_profile": "0.20mm Standard @CoLiDo X16", "deretraction_speed": [ diff --git a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json index 4c18236e07..6f6985d46e 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic TPU @CoLiDo X16" + "default_materials": "Generic PLA @CoLiDo X16;Generic ABS @CoLiDo X16;Generic PETG @CoLiDo X16;Generic TPU @CoLiDo X16" } diff --git a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json index d0e1a2abc6..bbecec1d48 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo DIY 4.0" + "Generic PLA @CoLiDo DIY 4.0" ], "default_print_profile": "0.20mm Standard @CoLiDo DIY 4.0", "deretraction_speed": [ diff --git a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json index f774672974..693937a8cb 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo DIY 4.0;CoLiDo Generic ABS @CoLiDo DIY 4.0;CoLiDo Generic PETG @CoLiDo DIY 4.0;CoLiDo Generic TPU @CoLiDo DIY 4.0" + "default_materials": "Generic PLA @CoLiDo DIY 4.0;Generic ABS @CoLiDo DIY 4.0;Generic PETG @CoLiDo DIY 4.0;Generic TPU @CoLiDo DIY 4.0" } diff --git a/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json index cfdfd38571..228580eece 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo X16" + "Generic PLA @CoLiDo X16" ], "default_print_profile": "0.20mm Standard @CoLiDo X16", "deretraction_speed": [ diff --git a/resources/profiles/CoLiDo/machine/CoLiDo X16.json b/resources/profiles/CoLiDo/machine/CoLiDo X16.json index e95b6ea56b..e1633e083f 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo X16.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo X16.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic TPU @CoLiDo X16" + "default_materials": "Generic PLA @CoLiDo X16;Generic ABS @CoLiDo X16;Generic PETG @CoLiDo X16;Generic TPU @CoLiDo X16" } diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index da7d0e29f6..107ef2b3ba 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ @@ -105,16 +105,16 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Comgrow Generic ABS", - "sub_path": "filament/Comgrow Generic ABS.json" + "name": "Generic ABS @Comgrow", + "sub_path": "filament/Generic ABS @Comgrow.json" }, { - "name": "Comgrow Generic PETG", - "sub_path": "filament/Comgrow Generic PETG.json" + "name": "Generic PETG @Comgrow", + "sub_path": "filament/Generic PETG @Comgrow.json" }, { - "name": "Comgrow Generic PLA", - "sub_path": "filament/Comgrow Generic PLA.json" + "name": "Generic PLA @Comgrow", + "sub_path": "filament/Generic PLA @Comgrow.json" }, { "name": "Comgrow T300 PLA", diff --git a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json b/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json index a88573aa26..965e2985ee 100644 --- a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json +++ b/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Comgrow T300 PLA", - "inherits": "Comgrow Generic PLA", + "inherits": "Generic PLA @Comgrow", "from": "system", "setting_id": "TnHaf2TSHVfuwbVg", "filament_id": "OFNWcJsM", diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json b/resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json similarity index 72% rename from resources/profiles/Comgrow/filament/Comgrow Generic ABS.json rename to resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json index 6a1ff9248e..0494418d88 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json +++ b/resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Comgrow Generic ABS", + "name": "Generic ABS @Comgrow", "inherits": "fdm_filament_abs", + "renamed_from": "Comgrow Generic ABS", "from": "system", - "setting_id": "7xmGiJHgiD5KKTXt", - "filament_id": "OFsoQ12i", + "setting_id": "jprGDn9oZEZu4N97", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json b/resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json similarity index 85% rename from resources/profiles/Comgrow/filament/Comgrow Generic PETG.json rename to resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json index 44dad83ceb..12b29d0b1d 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json +++ b/resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Comgrow Generic PETG", + "name": "Generic PETG @Comgrow", "inherits": "fdm_filament_pet", + "renamed_from": "Comgrow Generic PETG", "from": "system", - "setting_id": "FJjkU2RhAZD10Cw8", - "filament_id": "OF6Fpw1E", + "setting_id": "xi0S7KdXD7lwr3H8", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json similarity index 73% rename from resources/profiles/Comgrow/filament/Comgrow Generic PLA.json rename to resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json index 4674b2b60a..21b8e19d42 100644 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json +++ b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Comgrow Generic PLA", + "name": "Generic PLA @Comgrow", "inherits": "fdm_filament_pla", + "renamed_from": "Comgrow Generic PLA", "from": "system", - "setting_id": "sGAn6RP69saYSqcY", - "filament_id": "OFVKADz5", + "setting_id": "oxIMSlkJ8C40mJIv", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Comgrow/machine/Comgrow T500.json b/resources/profiles/Comgrow/machine/Comgrow T500.json index e7945de67a..6714a5a4b0 100644 --- a/resources/profiles/Comgrow/machine/Comgrow T500.json +++ b/resources/profiles/Comgrow/machine/Comgrow T500.json @@ -8,5 +8,5 @@ "bed_model": "comgrow_t500_buildplate_model.stl", "bed_texture": "comgrow_t500_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Comgrow Generic PLA;Comgrow Generic PETG;Comgrow Generic ABS" + "default_materials": "Generic PLA @Comgrow;Generic PETG @Comgrow;Generic ABS @Comgrow" } diff --git a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json index b256b09306..ef8ce3ba93 100644 --- a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json +++ b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json @@ -131,7 +131,7 @@ "thumbnails_format": "PNG", "nozzle_type": "hardened_steel", "default_filament_profile": [ - "Comgrow Generic PETG" + "Generic PETG @Comgrow" ], "default_print_profile": "0.20mm Standard @Comgrow T500", "bed_exclude_area": [ diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 077ee827e5..29399dcade 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.76", + "version": "02.03.02.77", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ @@ -1633,28 +1633,28 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Creality Generic ABS @Ender-5Max-all", - "sub_path": "filament/Creality Generic ABS @Ender-5Max-all.json" + "name": "Generic ABS @Creality Ender-5Max-all", + "sub_path": "filament/Generic ABS @Creality Ender-5Max-all.json" }, { - "name": "Creality Generic ASA @Ender-5Max-all", - "sub_path": "filament/Creality Generic ASA @Ender-5Max-all.json" + "name": "Generic ASA @Creality Ender-5Max-all", + "sub_path": "filament/Generic ASA @Creality Ender-5Max-all.json" }, { - "name": "Creality Generic PA @Ender-5Max-all", - "sub_path": "filament/Creality Generic PA @Ender-5Max-all.json" + "name": "Generic PA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PA @Creality Ender-5Max-all.json" }, { - "name": "Creality Generic PETG @Ender-5Max-all", - "sub_path": "filament/Creality Generic PETG @Ender-5Max-all.json" + "name": "Generic PETG @Creality Ender-5Max-all", + "sub_path": "filament/Generic PETG @Creality Ender-5Max-all.json" }, { - "name": "Creality Generic PLA @Ender-5Max-all", - "sub_path": "filament/Creality Generic PLA @Ender-5Max-all.json" + "name": "Generic PLA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PLA @Creality Ender-5Max-all.json" }, { - "name": "Creality Generic TPU @Ender-5Max-all", - "sub_path": "filament/Creality Generic TPU @Ender-5Max-all.json" + "name": "Generic TPU @Creality Ender-5Max-all", + "sub_path": "filament/Generic TPU @Creality Ender-5Max-all.json" }, { "name": "Creality Hyper ABS @Ender-5Max-all", @@ -1701,212 +1701,212 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" + "name": "Generic ABS @Creality", + "sub_path": "filament/Generic ABS @Creality.json" }, { - "name": "Creality Generic ASA", - "sub_path": "filament/Creality Generic ASA.json" + "name": "Generic ASA @Creality", + "sub_path": "filament/Generic ASA @Creality.json" }, { - "name": "Creality Generic PA-CF", - "sub_path": "filament/Creality Generic PA-CF.json" + "name": "Generic PA-CF @Creality", + "sub_path": "filament/Generic PA-CF @Creality.json" }, { - "name": "Creality Generic PC", - "sub_path": "filament/Creality Generic PC.json" + "name": "Generic PC @Creality", + "sub_path": "filament/Generic PC @Creality.json" }, { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" + "name": "Generic PETG @Creality", + "sub_path": "filament/Generic PETG @Creality.json" }, { - "name": "Creality Generic PLA", - "sub_path": "filament/Creality Generic PLA.json" + "name": "Generic PLA @Creality", + "sub_path": "filament/Generic PLA @Creality.json" }, { - "name": "Creality Generic PLA-CF", - "sub_path": "filament/Creality Generic PLA-CF.json" + "name": "Generic PLA-CF @Creality", + "sub_path": "filament/Generic PLA-CF @Creality.json" }, { - "name": "Creality HF Generic PLA", - "sub_path": "filament/Creality HF Generic PLA.json" + "name": "Generic PLA HF @Creality", + "sub_path": "filament/Generic PLA HF @Creality.json" }, { - "name": "Creality HF Generic Speed PLA", - "sub_path": "filament/Creality HF Generic Speed PLA.json" + "name": "Generic Speed PLA @Creality HF", + "sub_path": "filament/Generic Speed PLA @Creality HF.json" }, { - "name": "Creality Generic TPU", - "sub_path": "filament/Creality Generic TPU.json" + "name": "Generic TPU @Creality", + "sub_path": "filament/Generic TPU @Creality.json" }, { - "name": "Creality Generic ABS @Ender-3V3-all", - "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" + "name": "Generic ABS @Creality Ender-3V3-all", + "sub_path": "filament/Generic ABS @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic ABS @Hi-all", - "sub_path": "filament/Creality Generic ABS @Hi-all.json" + "name": "Generic ABS @Creality Hi-all", + "sub_path": "filament/Generic ABS @Creality Hi-all.json" }, { - "name": "Creality Generic ABS @K1-all", - "sub_path": "filament/Creality Generic ABS @K1-all.json" + "name": "Generic ABS @Creality K1-all", + "sub_path": "filament/Generic ABS @Creality K1-all.json" }, { - "name": "Creality Generic ABS @K2-all", - "sub_path": "filament/Creality Generic ABS @K2-all.json" + "name": "Generic ABS @Creality K2-all", + "sub_path": "filament/Generic ABS @Creality K2-all.json" }, { - "name": "Creality Generic ASA @Ender-3V3-all", - "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" + "name": "Generic ASA @Creality Ender-3V3-all", + "sub_path": "filament/Generic ASA @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic ASA @Hi-all", - "sub_path": "filament/Creality Generic ASA @Hi-all.json" + "name": "Generic ASA @Creality Hi-all", + "sub_path": "filament/Generic ASA @Creality Hi-all.json" }, { - "name": "Creality Generic ASA @K1-all", - "sub_path": "filament/Creality Generic ASA @K1-all.json" + "name": "Generic ASA @Creality K1-all", + "sub_path": "filament/Generic ASA @Creality K1-all.json" }, { - "name": "Creality Generic ASA @K2-all", - "sub_path": "filament/Creality Generic ASA @K2-all.json" + "name": "Generic ASA @Creality K2-all", + "sub_path": "filament/Generic ASA @Creality K2-all.json" }, { - "name": "Creality Generic PA-CF @Ender-3V3-all", - "sub_path": "filament/Creality Generic PA-CF @Ender-3V3-all.json" + "name": "Generic PA-CF @Creality Ender-3V3-all", + "sub_path": "filament/Generic PA-CF @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PA-CF @K1-all", - "sub_path": "filament/Creality Generic PA-CF @K1-all.json" + "name": "Generic PA-CF @Creality K1-all", + "sub_path": "filament/Generic PA-CF @Creality K1-all.json" }, { - "name": "Creality Generic PA-CF @K2-all", - "sub_path": "filament/Creality Generic PA-CF @K2-all.json" + "name": "Generic PA-CF @Creality K2-all", + "sub_path": "filament/Generic PA-CF @Creality K2-all.json" }, { - "name": "Creality Generic PC @K1-all", - "sub_path": "filament/Creality Generic PC @K1-all.json" + "name": "Generic PC @Creality K1-all", + "sub_path": "filament/Generic PC @Creality K1-all.json" }, { - "name": "Creality Generic PETG @Ender-3V3-all", - "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" + "name": "Generic PETG @Creality Ender-3V3-all", + "sub_path": "filament/Generic PETG @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PETG @Hi-all", - "sub_path": "filament/Creality Generic PETG @Hi-all.json" + "name": "Generic PETG @Creality Hi-all", + "sub_path": "filament/Generic PETG @Creality Hi-all.json" }, { - "name": "Creality Generic PETG @K1-all", - "sub_path": "filament/Creality Generic PETG @K1-all.json" + "name": "Generic PETG @Creality K1-all", + "sub_path": "filament/Generic PETG @Creality K1-all.json" }, { - "name": "Creality Generic PETG @K2-all", - "sub_path": "filament/Creality Generic PETG @K2-all.json" + "name": "Generic PETG @Creality K2-all", + "sub_path": "filament/Generic PETG @Creality K2-all.json" }, { - "name": "Creality Generic PLA @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" + "name": "Generic PLA @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA @Creality Ender-3V3-all.json" }, { "name": "Creality Generic PLA @Hi-all", "sub_path": "filament/Creality Generic PLA @Hi-all.json" }, { - "name": "Creality Generic PLA @K1-all", - "sub_path": "filament/Creality Generic PLA @K1-all.json" + "name": "Generic PLA @Creality K1-all", + "sub_path": "filament/Generic PLA @Creality K1-all.json" }, { - "name": "Creality Generic PLA @K2-all", - "sub_path": "filament/Creality Generic PLA @K2-all.json" + "name": "Generic PLA @Creality K2-all", + "sub_path": "filament/Generic PLA @Creality K2-all.json" }, { - "name": "Creality Generic PLA-CF @Hi-all", - "sub_path": "filament/Creality Generic PLA-CF @Hi-all.json" + "name": "Generic PLA-CF @Creality Hi-all", + "sub_path": "filament/Generic PLA-CF @Creality Hi-all.json" }, { - "name": "Creality Generic PLA-CF @K1-all", - "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" + "name": "Generic PLA-CF @Creality K1-all", + "sub_path": "filament/Generic PLA-CF @Creality K1-all.json" }, { - "name": "Creality Generic PLA-CF @K2-all", - "sub_path": "filament/Creality Generic PLA-CF @K2-all.json" + "name": "Generic PLA-CF @Creality K2-all", + "sub_path": "filament/Generic PLA-CF @Creality K2-all.json" }, { - "name": "Creality Generic TPU @Ender-3V3-all", - "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" + "name": "Generic TPU @Creality Ender-3V3-all", + "sub_path": "filament/Generic TPU @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic TPU @Hi-all", - "sub_path": "filament/Creality Generic TPU @Hi-all.json" + "name": "Generic TPU @Creality Hi-all", + "sub_path": "filament/Generic TPU @Creality Hi-all.json" }, { - "name": "Creality Generic TPU @K1-all", - "sub_path": "filament/Creality Generic TPU @K1-all.json" + "name": "Generic TPU @Creality K1-all", + "sub_path": "filament/Generic TPU @Creality K1-all.json" }, { - "name": "Creality Generic TPU @K2-all", - "sub_path": "filament/Creality Generic TPU @K2-all.json" + "name": "Generic TPU @Creality K2-all", + "sub_path": "filament/Generic TPU @Creality K2-all.json" }, { - "name": "Creality Generic ASA-CF @Hi-all", - "sub_path": "filament/Creality Generic ASA-CF @Hi-all.json" + "name": "Generic ASA-CF @Creality Hi-all", + "sub_path": "filament/Generic ASA-CF @Creality Hi-all.json" }, { - "name": "Creality Generic PETG-CF @Hi-all", - "sub_path": "filament/Creality Generic PETG-CF @Hi-all.json" + "name": "Generic PETG-CF @Creality Hi-all", + "sub_path": "filament/Generic PETG-CF @Creality Hi-all.json" }, { - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" + "name": "Generic PLA High Speed @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA High Speed @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" + "name": "Generic PLA Matte @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Matte @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" + "name": "Generic PLA Silk @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Silk @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PLA High Speed @Hi-all", - "sub_path": "filament/Creality Generic PLA High Speed @Hi-all.json" + "name": "Generic PLA High Speed @Creality Hi-all", + "sub_path": "filament/Generic PLA High Speed @Creality Hi-all.json" }, { - "name": "Creality Generic PLA Matte @Hi-all", - "sub_path": "filament/Creality Generic PLA Matte @Hi-all.json" + "name": "Generic PLA Matte @Creality Hi-all", + "sub_path": "filament/Generic PLA Matte @Creality Hi-all.json" }, { - "name": "Creality Generic PLA Silk @Hi-all", - "sub_path": "filament/Creality Generic PLA Silk @Hi-all.json" + "name": "Generic PLA Silk @Creality Hi-all", + "sub_path": "filament/Generic PLA Silk @Creality Hi-all.json" }, { - "name": "Creality Generic PLA Wood @Hi-all", - "sub_path": "filament/Creality Generic PLA Wood @Hi-all.json" + "name": "Generic PLA Wood @Creality Hi-all", + "sub_path": "filament/Generic PLA Wood @Creality Hi-all.json" }, { - "name": "Creality Generic PLA High Speed @K1-all", - "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" + "name": "Generic PLA High Speed @Creality K1-all", + "sub_path": "filament/Generic PLA High Speed @Creality K1-all.json" }, { - "name": "Creality Generic PLA Matte @K1-all", - "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" + "name": "Generic PLA Matte @Creality K1-all", + "sub_path": "filament/Generic PLA Matte @Creality K1-all.json" }, { - "name": "Creality Generic PLA Silk @K1-all", - "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" + "name": "Generic PLA Silk @Creality K1-all", + "sub_path": "filament/Generic PLA Silk @Creality K1-all.json" }, { - "name": "Creality Generic PLA High Speed @K2-all", - "sub_path": "filament/Creality Generic PLA High Speed @K2-all.json" + "name": "Generic PLA High Speed @Creality K2-all", + "sub_path": "filament/Generic PLA High Speed @Creality K2-all.json" }, { - "name": "Creality Generic PLA Matte @K2-all", - "sub_path": "filament/Creality Generic PLA Matte @K2-all.json" + "name": "Generic PLA Matte @Creality K2-all", + "sub_path": "filament/Generic PLA Matte @Creality K2-all.json" }, { - "name": "Creality Generic PLA Silk @K2-all", - "sub_path": "filament/Creality Generic PLA Silk @K2-all.json" + "name": "Generic PLA Silk @Creality K2-all", + "sub_path": "filament/Generic PLA Silk @Creality K2-all.json" }, { "name": "fdm_filament_pp", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json deleted file mode 100644 index ff2a1eb68c..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA-CF @Hi-all", - "inherits": "Creality Generic ASA @Hi-all", - "from": "system", - "setting_id": "C7IB6HSJxW598zFA", - "filament_id": "OFLuczRG", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json deleted file mode 100644 index d914f2eb4b..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG-CF @Hi-all", - "inherits": "Creality Generic PETG @Hi-all", - "from": "system", - "setting_id": "G4ZIJDNOpQvutOfs", - "filament_id": "OFqKmLJe", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "filament_flow_ratio": [ - "0.95" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json index 3247f38500..63f51623a0 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Creality Generic PLA @Hi-all", - "inherits": "Creality Generic PLA", + "inherits": "Generic PLA @Creality", "from": "system", "setting_id": "3gf0CImK4nJwfXrB", "instantiation": "true", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json deleted file mode 100644 index 42eaf2c36c..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA-CF @Hi-all", - "inherits": "Creality Generic PLA-CF", - "from": "system", - "setting_id": "9nAovlPz0SEUcovr", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json similarity index 71% rename from resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json index ef6884e069..fcd8548620 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ABS @Ender-3V3-all", - "inherits": "Creality Generic ABS", + "name": "Generic ABS @Creality Ender-3V3-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @Ender-3V3-all;Creality Generic ABS Ender-3V3-all", "from": "system", - "setting_id": "Jvnq628y3IlGGHK6", + "setting_id": "RqMPGyaU3l17zFrA", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json index fb07f6a231..5a6f7a93c9 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic ABS @Ender-5Max-all", + "name": "Generic ABS @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic ABS @Ender-5Max-all;Creality Generic ABS Ender-5Max-all", "from": "system", - "setting_id": "mriWPwWZUKmr7ws0", - "filament_id": "OFYPdJ7t", + "setting_id": "qurtvw5OhkVfgpaC", + "filament_id": "OFY9muEs", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json similarity index 67% rename from resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json rename to resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json index 10fe49d23e..aba8475a20 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ABS @Hi-all", - "inherits": "Creality Generic ABS", + "name": "Generic ABS @Creality Hi-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @Hi-all;Creality Generic ABS Hi-all", "from": "system", - "setting_id": "mKgdNahVCaxQLMJE", + "setting_id": "W2NhLx7Lw4NxWJY6", "instantiation": "true", "filament_max_volumetric_speed": [ "9" @@ -15,7 +16,6 @@ "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" ], "compatible_printers": [ - "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json similarity index 53% rename from resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json rename to resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json index 369b92c304..0ea7629f24 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ABS @K1-all", - "inherits": "Creality Generic ABS", + "name": "Generic ABS @Creality K1-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @K1-all;Creality Generic ABS K1-all", "from": "system", - "setting_id": "lbMWwEM2Rb9ylrkA", + "setting_id": "9hr2XywDT7lTehYd", "instantiation": "true", "filament_max_volumetric_speed": [ "14" @@ -15,9 +16,7 @@ "20" ], "compatible_printers": [ - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" + "Creality K1C 0.8 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json similarity index 70% rename from resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json rename to resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json index 15229ac4eb..4aab7d7d0d 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ABS @K2-all", - "inherits": "Creality Generic ABS", + "name": "Generic ABS @Creality K2-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @K2-all;Creality Generic ABS K2-all", "from": "system", - "setting_id": "jl0usGdbqac1xcGN", + "setting_id": "39krWtacUjDnf03V", "instantiation": "true", "filament_flow_ratio": [ "0.95" @@ -22,15 +23,10 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic ABS.json b/resources/profiles/Creality/filament/Generic ABS @Creality.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic ABS.json rename to resources/profiles/Creality/filament/Generic ABS @Creality.json index 00bcd95e19..cb2c1a6f9c 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS.json +++ b/resources/profiles/Creality/filament/Generic ABS @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic ABS", + "name": "Generic ABS @Creality", "inherits": "fdm_filament_abs", + "renamed_from": "Creality Generic ABS", "from": "system", - "setting_id": "fv5g33ofjgyjVexC", - "filament_id": "OFYPdJ7t", + "setting_id": "My3UvJeg30wW7hLq", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json similarity index 71% rename from resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json index 3da4bd0531..27ee572384 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ASA @Ender-3V3-all", - "inherits": "Creality Generic ASA", + "name": "Generic ASA @Creality Ender-3V3-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @Ender-3V3-all;Creality Generic ASA Ender-3V3-all", "from": "system", - "setting_id": "3KXcINpeRKqx9Hhw", + "setting_id": "LXPKRyWzBzo9nU8k", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json index fa85c2a3ec..0fa424b522 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic ASA @Ender-5Max-all", + "name": "Generic ASA @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic ASA @Ender-5Max-all;Creality Generic ASA Ender-5Max-all", "from": "system", - "setting_id": "4muzPKAzy8FJKM5D", - "filament_id": "OFpAaY6w", + "setting_id": "7qyRWm8KXa1YUPpl", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json similarity index 68% rename from resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json rename to resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json index aff57be93d..e706078d18 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ASA @Hi-all", - "inherits": "Creality Generic ASA", + "name": "Generic ASA @Creality Hi-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @Hi-all;Creality Generic ASA Hi-all", "from": "system", - "setting_id": "DaPUW1rMtWyZLo3H", + "setting_id": "kcMcMJUiRgTRFe8P", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json similarity index 53% rename from resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json rename to resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json index 2248ac6818..91feecf436 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ASA @K1-all", - "inherits": "Creality Generic ASA", + "name": "Generic ASA @Creality K1-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @K1-all;Creality Generic ASA K1-all", "from": "system", - "setting_id": "nq4sPDBNWLOnU5pD", + "setting_id": "GQVdb7ZBWA55Ld0m", "instantiation": "true", "filament_max_volumetric_speed": [ "12" @@ -15,9 +16,7 @@ "20" ], "compatible_printers": [ - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" + "Creality K1C 0.8 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json similarity index 77% rename from resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json rename to resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json index 5e1f0c9a18..510e1d7660 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic ASA @K2-all", - "inherits": "Creality Generic ASA", + "name": "Generic ASA @Creality K2-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @K2-all;Creality Generic ASA K2-all", "from": "system", - "setting_id": "OAYGhucg52H8nPIF", + "setting_id": "XJKLmHYbW2ReKSKs", "instantiation": "true", "filament_flow_ratio": [ "0.95" @@ -22,15 +23,12 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic ASA.json b/resources/profiles/Creality/filament/Generic ASA @Creality.json similarity index 92% rename from resources/profiles/Creality/filament/Creality Generic ASA.json rename to resources/profiles/Creality/filament/Generic ASA @Creality.json index 53ca8f06df..0ef5d15433 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA.json +++ b/resources/profiles/Creality/filament/Generic ASA @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic ASA", + "name": "Generic ASA @Creality", "inherits": "fdm_filament_asa", + "renamed_from": "Creality Generic ASA", "from": "system", - "setting_id": "jHgcISP1UXOPsGH0", - "filament_id": "OFpAaY6w", + "setting_id": "dCUxfG2JXDg56zTK", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json new file mode 100644 index 0000000000..7a462cc250 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic ASA-CF @Creality Hi-all", + "inherits": "Generic ASA @Creality Hi-all", + "renamed_from": "Creality Generic ASA-CF @Hi-all;Creality Generic ASA-CF Hi-all", + "from": "system", + "setting_id": "MwKV8Lh4XzvMUVYA", + "filament_id": "OF53eLVD", + "instantiation": "true", + "filament_type": [ + "ASA-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json index 53b1a95c72..500722f1e9 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PA @Ender-5Max-all", + "name": "Generic PA @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic PA @Ender-5Max-all;Creality Generic PA Ender-5Max-all", "from": "system", - "setting_id": "8caHexyoeQW9p1NF", - "filament_id": "OFMqYusc", + "setting_id": "ChQOX6JlKujFwFcB", + "filament_id": "OFg8ndtj", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json similarity index 53% rename from resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json index f7990f9e99..a73077a6e9 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PA-CF @Ender-3V3-all", - "inherits": "Creality Generic PA-CF", + "name": "Generic PA-CF @Creality Ender-3V3-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @Ender-3V3-all;Creality Generic PA-CF Ender-3V3-all", "from": "system", - "setting_id": "PxYQg8A9aHBV0wKU", + "setting_id": "L9lg0gKfwuz9xcs4", "instantiation": "true", "compatible_printers": [ "Creality Ender-3 V3 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json similarity index 65% rename from resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json rename to resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json index 80ff499716..72519b07f2 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json @@ -1,15 +1,15 @@ { "type": "filament", - "name": "Creality Generic PA-CF @K1-all", - "inherits": "Creality Generic PA-CF", + "name": "Generic PA-CF @Creality K1-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @K1-all;Creality Generic PA-CF K1-all", "from": "system", - "setting_id": "3j6MMw59d8UigcH7", + "setting_id": "BkM0CVxYrvFPAbpQ", "instantiation": "true", "compatible_printers": [ "Creality K1 (0.4 nozzle)", "Creality K1 (0.6 nozzle)", "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle", "Creality K1 SE 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json similarity index 75% rename from resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json rename to resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json index 04ace3d4f4..932c37b2a2 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PA-CF @K2-all", - "inherits": "Creality Generic PA-CF", + "name": "Generic PA-CF @Creality K2-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @K2-all;Creality Generic PA-CF K2-all", "from": "system", - "setting_id": "08QXVyyDDpDPhOoJ", + "setting_id": "jCFh6dGbNQt7YHNB", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" @@ -23,9 +24,6 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic PA-CF.json rename to resources/profiles/Creality/filament/Generic PA-CF @Creality.json index c9aee7e056..964672343a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PA-CF", + "name": "Generic PA-CF @Creality", "inherits": "fdm_filament_pa", + "renamed_from": "Creality Generic PA-CF", "from": "system", - "setting_id": "hBNsuwMzm7ZZn15D", - "filament_id": "OFUWRqwb", + "setting_id": "JDbda1VeHrPKR0NN", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Creality/filament/Creality Generic PC @K1-all.json b/resources/profiles/Creality/filament/Generic PC @Creality K1-all.json similarity index 69% rename from resources/profiles/Creality/filament/Creality Generic PC @K1-all.json rename to resources/profiles/Creality/filament/Generic PC @Creality K1-all.json index 9098360594..a73499e2e9 100644 --- a/resources/profiles/Creality/filament/Creality Generic PC @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PC @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PC @K1-all", - "inherits": "Creality Generic PC", + "name": "Generic PC @Creality K1-all", + "inherits": "Generic PC @Creality", + "renamed_from": "Creality Generic PC @K1-all;Creality Generic PC K1-all", "from": "system", - "setting_id": "NZ93pDkjFnCyAVZW", + "setting_id": "Jk9yNMEqu4M92edj", "instantiation": "true", "chamber_temperatures": [ "60" @@ -12,7 +13,6 @@ "Creality K1 (0.4 nozzle)", "Creality K1 (0.6 nozzle)", "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle", "Creality K1 SE 0.4 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PC.json b/resources/profiles/Creality/filament/Generic PC @Creality.json similarity index 75% rename from resources/profiles/Creality/filament/Creality Generic PC.json rename to resources/profiles/Creality/filament/Generic PC @Creality.json index 9297344a75..5212f6c052 100644 --- a/resources/profiles/Creality/filament/Creality Generic PC.json +++ b/resources/profiles/Creality/filament/Generic PC @Creality.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Creality Generic PC", + "name": "Generic PC @Creality", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OFe8UJXH", + "filament_id": "OFLakOUI", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json similarity index 81% rename from resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json index b1e47e12c9..9d2c3a5529 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PETG @Ender-3V3-all", - "inherits": "Creality Generic PETG", + "name": "Generic PETG @Creality Ender-3V3-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @Ender-3V3-all;Creality Generic PETG Ender-3V3-all", "from": "system", - "setting_id": "VsfDu1bl3N1EaXrw", + "setting_id": "sX2aMXNynDp6VKSR", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json index 6aeba98a01..df6509395f 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PETG @Ender-5Max-all", + "name": "Generic PETG @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic PETG @Ender-5Max-all;Creality Generic PETG Ender-5Max-all", "from": "system", - "setting_id": "vRVsTatkrE46rzRB", - "filament_id": "OF4Mf5Gz", + "setting_id": "TFS4Fi1PuE7WgnPr", + "filament_id": "OFYPdQJh", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json similarity index 80% rename from resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json rename to resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json index 6889cf3cf3..0092cf5d12 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PETG @Hi-all", - "inherits": "Creality Generic PETG", + "name": "Generic PETG @Creality Hi-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @Hi-all;Creality Generic PETG Hi-all", "from": "system", - "setting_id": "ZGI0yhD4lB10uUOd", + "setting_id": "QcMkrViYBKh4oISG", "instantiation": "true", "filament_max_volumetric_speed": [ "9" @@ -45,7 +46,6 @@ "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" ], "compatible_printers": [ - "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json similarity index 75% rename from resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json rename to resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json index 67a901d8db..06fb485fd0 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PETG @K1-all", - "inherits": "Creality Generic PETG", + "name": "Generic PETG @Creality K1-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @K1-all;Creality Generic PETG K1-all", "from": "system", - "setting_id": "zk1Typ98hZMZLn68", + "setting_id": "YEB1keha4rhCSmq8", "instantiation": "true", "filament_max_volumetric_speed": [ "9" @@ -48,9 +49,7 @@ "0" ], "compatible_printers": [ - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" + "Creality K1C 0.8 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json similarity index 79% rename from resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json rename to resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json index 55ab9051b4..87e82d3eb5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PETG @K2-all", - "inherits": "Creality Generic PETG", + "name": "Generic PETG @Creality K2-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @K2-all;Creality Generic PETG K2-all", "from": "system", - "setting_id": "FhtlimihjuAe2pbs", + "setting_id": "IrbPRxkyhiUXaPEu", "instantiation": "true", "filament_max_volumetric_speed": [ "18" @@ -55,15 +56,10 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic PETG.json b/resources/profiles/Creality/filament/Generic PETG @Creality.json similarity index 94% rename from resources/profiles/Creality/filament/Creality Generic PETG.json rename to resources/profiles/Creality/filament/Generic PETG @Creality.json index e09d44758c..7bd45cd910 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG.json +++ b/resources/profiles/Creality/filament/Generic PETG @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PETG", + "name": "Generic PETG @Creality", "inherits": "fdm_filament_pet", + "renamed_from": "Creality Generic PETG", "from": "system", - "setting_id": "ixhOwyMvBCpI8nQs", - "filament_id": "OF4Mf5Gz", + "setting_id": "B8lWG3jJQ4ar4j70", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json new file mode 100644 index 0000000000..5049c12c57 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Creality Hi-all", + "inherits": "Generic PETG @Creality Hi-all", + "renamed_from": "Creality Generic PETG-CF @Hi-all;Creality Generic PETG-CF Hi-all", + "from": "system", + "setting_id": "dWEGZoSVFzj7e9m1", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "filament_type": [ + "PETG-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_flow_ratio": [ + "0.95" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json similarity index 80% rename from resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json index 5e28b48844..4bc29d5df2 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA @Ender-3V3-all", - "inherits": "Creality Generic PLA", + "name": "Generic PLA @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @Ender-3V3-all;Creality Generic PLA Ender-3V3-all", "from": "system", - "setting_id": "d9awwT21ZLo1iXoh", + "setting_id": "uGq3aWYUI2sLJORU", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json index 8198b078e4..ff55c41e81 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA @Ender-5Max-all", + "name": "Generic PLA @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic PLA @Ender-5Max-all;Creality Generic PLA Ender-5Max-all", "from": "system", - "setting_id": "zQiwnlxGlX4pFOHR", - "filament_id": "OFACSw9O", + "setting_id": "xGTd14Qwc0JbI6kg", + "filament_id": "OFDSrzZ8", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json similarity index 72% rename from resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json rename to resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json index d5ea668c68..ac6f727f02 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA @K1-all", - "inherits": "Creality Generic PLA", + "name": "Generic PLA @Creality K1-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @K1-all;Creality Generic PLA K1-all", "from": "system", - "setting_id": "c5ArCv3qjuKjBwEQ", + "setting_id": "oO2HaneRPfqxNQsP", "instantiation": "true", "filament_max_volumetric_speed": [ "18" @@ -39,9 +40,7 @@ "0" ], "compatible_printers": [ - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" + "Creality K1C 0.8 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json similarity index 78% rename from resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json rename to resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json index 2c6000111f..bf98b76c5a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA @K2-all", - "inherits": "Creality Generic PLA", + "name": "Generic PLA @Creality K2-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @K2-all;Creality Generic PLA K2-all", "from": "system", - "setting_id": "bnqvzgmJYbLraBWC", + "setting_id": "EC0PPocMp0c4O0dK", "instantiation": "true", "filament_flow_ratio": [ "0.95" @@ -49,15 +50,10 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic PLA.json b/resources/profiles/Creality/filament/Generic PLA @Creality.json similarity index 94% rename from resources/profiles/Creality/filament/Creality Generic PLA.json rename to resources/profiles/Creality/filament/Generic PLA @Creality.json index fe82530a7c..f3d807d76b 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA", + "name": "Generic PLA @Creality", "inherits": "fdm_filament_pla", + "renamed_from": "Creality Generic PLA", "from": "system", - "setting_id": "rUYYpB3GkiNCVyfY", - "filament_id": "OFACSw9O", + "setting_id": "UNUCEjCpe1e4ICT9", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality HF Generic PLA.json b/resources/profiles/Creality/filament/Generic PLA HF @Creality.json similarity index 81% rename from resources/profiles/Creality/filament/Creality HF Generic PLA.json rename to resources/profiles/Creality/filament/Generic PLA HF @Creality.json index 7b2558d207..235e113a59 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic PLA.json +++ b/resources/profiles/Creality/filament/Generic PLA HF @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality HF Generic PLA", + "name": "Generic PLA HF @Creality", "inherits": "fdm_filament_pla", + "renamed_from": "Creality HF Generic PLA", "from": "system", - "setting_id": "p07b7w0HDxavGLdd", - "filament_id": "OFmhWhEf", + "setting_id": "YXqIFmq63jGbN8aZ", + "filament_id": "OFZr862X", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json similarity index 63% rename from resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json index 513d2bd088..21d1029a5d 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", + "name": "Generic PLA High Speed @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA High Speed Ender-3V3-all", "from": "system", - "setting_id": "4F3dZWvsniH9QHtr", - "filament_id": "OFrO2zyn", + "setting_id": "MOH1B7U4Ipv8jw0s", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json similarity index 57% rename from resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json rename to resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json index 50305f2dd2..0e64943dd5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA High Speed @Hi-all", + "name": "Generic PLA High Speed @Creality Hi-all", "inherits": "Creality Generic PLA @Hi-all", + "renamed_from": "Creality Generic PLA High Speed @Hi-all;Creality Generic PLA High Speed Hi-all", "from": "system", - "setting_id": "KzaopZGQPw5OJFFD", - "filament_id": "OFrO2zyn", + "setting_id": "KJZ1ztg3jL2Cg4fi", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json similarity index 63% rename from resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json rename to resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json index f5f509897a..c7b2bbb03a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA High Speed @K1-all", - "inherits": "Creality Generic PLA @K1-all", + "name": "Generic PLA High Speed @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA High Speed @K1-all;Creality Generic PLA High Speed K1-all", "from": "system", - "setting_id": "ptxV78rC6wevH916", - "filament_id": "OFrO2zyn", + "setting_id": "5HgGIzGuma2z6vD8", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json similarity index 66% rename from resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json rename to resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json index 8a0f79495f..9df651b17d 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA High Speed @K2-all", - "inherits": "Creality Generic PLA @K2-all", + "name": "Generic PLA High Speed @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA High Speed @K2-all;Creality Generic PLA High Speed K2-all", "from": "system", - "setting_id": "ozHstwkc3N5LGWLV", - "filament_id": "OFrO2zyn", + "setting_id": "Lxp4EwuEZKFHZXWR", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_max_volumetric_speed": [ "23" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json similarity index 64% rename from resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json index 3aa8f60c48..2e561af6b5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", + "name": "Generic PLA Matte @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Matte Ender-3V3-all", "from": "system", - "setting_id": "xF1B593frol5PWVw", - "filament_id": "OFpSYJLI", + "setting_id": "JlvUB8GxzpAOlgkz", + "filament_id": "OFmY0l6t", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json similarity index 55% rename from resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json rename to resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json index 05b1d2afc7..c657630c40 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Matte @Hi-all", + "name": "Generic PLA Matte @Creality Hi-all", "inherits": "Creality Generic PLA @Hi-all", + "renamed_from": "Creality Generic PLA Matte @Hi-all;Creality Generic PLA Matte Hi-all", "from": "system", - "setting_id": "R7Jo7NhjsR1iU2Fd", - "filament_id": "OFpSYJLI", + "setting_id": "pFxJgjam0WAeSKqf", + "filament_id": "OFmY0l6t", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json similarity index 65% rename from resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json rename to resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json index 3d3c0276dc..2a584450f8 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Matte @K1-all", - "inherits": "Creality Generic PLA @K1-all", + "name": "Generic PLA Matte @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA Matte @K1-all;Creality Generic PLA Matte K1-all", "from": "system", - "setting_id": "3hreTG3DjcgmwZC2", - "filament_id": "OFpSYJLI", + "setting_id": "JJRpJQcHUhelwD02", + "filament_id": "OFmY0l6t", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json similarity index 67% rename from resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json rename to resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json index d1723b25ba..27607938a5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Matte @K2-all", - "inherits": "Creality Generic PLA @K2-all", + "name": "Generic PLA Matte @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA Matte @K2-all;Creality Generic PLA Matte K2-all", "from": "system", - "setting_id": "fxZf5E6IHWWq3dsu", - "filament_id": "OFpSYJLI", + "setting_id": "VVcXNl0Y6B0mLlrb", + "filament_id": "OFmY0l6t", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json similarity index 64% rename from resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json index 1942508586..1f528f79fb 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", + "name": "Generic PLA Silk @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA Silk @Ender-3V3-all;Creality Generic PLA Silk Ender-3V3-all", "from": "system", - "setting_id": "uPFnSMh7WoXmMAoy", - "filament_id": "OFp8gtPH", + "setting_id": "vPrmBiuBCC8843Jb", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json similarity index 59% rename from resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json rename to resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json index c79ddb8933..bd41fff189 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Silk @Hi-all", + "name": "Generic PLA Silk @Creality Hi-all", "inherits": "Creality Generic PLA @Hi-all", + "renamed_from": "Creality Generic PLA Silk @Hi-all;Creality Generic PLA Silk Hi-all", "from": "system", - "setting_id": "RPDVqZcn8EZizd1U", - "filament_id": "OFp8gtPH", + "setting_id": "k1ofgUXqhHGSPDPY", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_flow_ratio": [ "0.97" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json similarity index 65% rename from resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json rename to resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json index b9be0b8f93..4e8adb2b35 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Silk @K1-all", - "inherits": "Creality Generic PLA @K1-all", + "name": "Generic PLA Silk @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA Silk @K1-all;Creality Generic PLA Silk K1-all", "from": "system", - "setting_id": "pxvc0ICvqc0M3wYV", - "filament_id": "OFp8gtPH", + "setting_id": "JcSq9nar8x5BjFss", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json similarity index 68% rename from resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json rename to resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json index ed5b560d12..850ea2704b 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Silk @K2-all", - "inherits": "Creality Generic PLA @K2-all", + "name": "Generic PLA Silk @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA Silk @K2-all;Creality Generic PLA Silk K2-all", "from": "system", - "setting_id": "qS0Mlt24iz1k4P7n", - "filament_id": "OFp8gtPH", + "setting_id": "fRyhLWAQiCOaAxKA", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json similarity index 59% rename from resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json rename to resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json index 8381e376bb..b272cb185a 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA Wood @Hi-all", + "name": "Generic PLA Wood @Creality Hi-all", "inherits": "Creality Generic PLA @Hi-all", + "renamed_from": "Creality Generic PLA Wood @Hi-all;Creality Generic PLA Wood Hi-all", "from": "system", - "setting_id": "OEc7Bc7WG99tuO5D", - "filament_id": "OFNW4ZTC", + "setting_id": "PNqfF5ecYqqpobdh", + "filament_id": "OFIKZxPF", "instantiation": "true", "filament_flow_ratio": [ "0.88" diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json new file mode 100644 index 0000000000..9bbc7a4433 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Creality Hi-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @Hi-all;Creality Generic PLA-CF Hi-all", + "from": "system", + "setting_id": "MH2pm9wTHLgX9fyq", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json similarity index 65% rename from resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json rename to resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json index 7eca9d5dc0..2e3ed94cb7 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA-CF @K1-all", - "inherits": "Creality Generic PLA-CF", + "name": "Generic PLA-CF @Creality K1-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @K1-all;Creality Generic PLA-CF K1-all", "from": "system", - "setting_id": "zCnOLIfwhfZIDYLC", + "setting_id": "DoyvqW51z3o1vBSa", "instantiation": "true", "additional_cooling_fan_speed": [ "0" @@ -12,10 +13,8 @@ "Creality K1 (0.4 nozzle)", "Creality K1 (0.6 nozzle)", "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", "Creality K1 Max (0.4 nozzle)", "Creality K1 Max (0.6 nozzle)", "Creality K1 Max (0.8 nozzle)" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json similarity index 70% rename from resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json rename to resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json index 7b2b7212e8..4cc99c0ff5 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA-CF @K2-all", - "inherits": "Creality Generic PLA-CF", + "name": "Generic PLA-CF @Creality K2-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @K2-all;Creality Generic PLA-CF K2-all", "from": "system", - "setting_id": "wfZgLrH8dafxsNyZ", + "setting_id": "6KqkLBBYBA59h5TA", "instantiation": "true", "filament_max_volumetric_speed": [ "18" @@ -16,15 +17,12 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality.json similarity index 92% rename from resources/profiles/Creality/filament/Creality Generic PLA-CF.json rename to resources/profiles/Creality/filament/Generic PLA-CF @Creality.json index 7c09aa8e4e..e35a839035 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic PLA-CF", + "name": "Generic PLA-CF @Creality", "inherits": "fdm_filament_pla", + "renamed_from": "Creality Generic PLA-CF", "from": "system", - "setting_id": "DCCWPQGMsvDOucwx", - "filament_id": "OFSDFYs4", + "setting_id": "Fn5Z3ccrrRYFkiwT", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json b/resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json similarity index 79% rename from resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json rename to resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json index 9090224d19..80e07cfff0 100644 --- a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json +++ b/resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality HF Generic Speed PLA", + "name": "Generic Speed PLA @Creality HF", "inherits": "fdm_filament_pla", + "renamed_from": "Creality HF Generic Speed PLA", "from": "system", - "setting_id": "Jp93uqYennsWVAKe", - "filament_id": "OFMIurFh", + "setting_id": "pklu1YSwmDOj6gRq", + "filament_id": "OFXmv5p0", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json similarity index 78% rename from resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json rename to resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json index 11b24086b2..89fa6b290b 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic TPU @Ender-3V3-all", - "inherits": "Creality Generic TPU", + "name": "Generic TPU @Creality Ender-3V3-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @Ender-3V3-all;Creality Generic TPU Ender-3V3-all", "from": "system", - "setting_id": "0fDkYNB91MiqbAS0", + "setting_id": "ZufJdJseoFNQC66B", "instantiation": "true", "hot_plate_temp": [ "30" diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json similarity index 93% rename from resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json rename to resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json index 2787b4e7ea..62f4916a99 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic TPU @Ender-5Max-all", + "name": "Generic TPU @Creality Ender-5Max-all", "inherits": "fdm_filament_common", + "renamed_from": "Creality Generic TPU @Ender-5Max-all;Creality Generic TPU Ender-5Max-all", "from": "system", - "setting_id": "aaiFHjbveXabDAMr", - "filament_id": "OFhcrFw9", + "setting_id": "XqW2iYrRTVlXuCwD", + "filament_id": "OFgbpcy9", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json similarity index 77% rename from resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json rename to resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json index c3b5905d96..1a46bfc0b5 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic TPU @Hi-all", - "inherits": "Creality Generic TPU", + "name": "Generic TPU @Creality Hi-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @Hi-all;Creality Generic TPU Hi-all", "from": "system", - "setting_id": "aF2isnhJKc3hoq8r", + "setting_id": "P42mcGCETNdcZchS", "instantiation": "true", "hot_plate_temp": [ "30" diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json similarity index 69% rename from resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json rename to resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json index c8d4b63a69..d2cd19bb7c 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic TPU @K1-all", - "inherits": "Creality Generic TPU", + "name": "Generic TPU @Creality K1-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @K1-all;Creality Generic TPU K1-all", "from": "system", - "setting_id": "isJCGG1B672xyX4l", + "setting_id": "7zTgnS8bIEkkhqtB", "instantiation": "true", "hot_plate_temp": [ "30" @@ -33,9 +34,7 @@ "0" ], "compatible_printers": [ - "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" + "Creality K1C 0.8 nozzle" ] } diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json similarity index 81% rename from resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json rename to resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json index db2138db73..9a8896ea23 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic TPU @K2-all", - "inherits": "Creality Generic TPU", + "name": "Generic TPU @Creality K2-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @K2-all;Creality Generic TPU K2-all", "from": "system", - "setting_id": "60PiyJbkRFDzr7b5", + "setting_id": "C9PAmCIDhCAthMuK", "instantiation": "true", "hot_plate_temp": [ "40" @@ -37,15 +38,12 @@ ], "compatible_printers": [ "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle", "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle", "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Creality/filament/Creality Generic TPU.json b/resources/profiles/Creality/filament/Generic TPU @Creality.json similarity index 83% rename from resources/profiles/Creality/filament/Creality Generic TPU.json rename to resources/profiles/Creality/filament/Generic TPU @Creality.json index 13fc25d3a7..0277d14563 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU.json +++ b/resources/profiles/Creality/filament/Generic TPU @Creality.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Creality Generic TPU", + "name": "Generic TPU @Creality", "inherits": "fdm_filament_tpu", + "renamed_from": "Creality Generic TPU", "from": "system", - "setting_id": "mKCynAMC7cjY03c0", - "filament_id": "OFhcrFw9", + "setting_id": "eCzlxPg3piTZEui4", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json index 73687d8be7..e9cadc9124 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-10 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR10Max", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max.json b/resources/profiles/Creality/machine/Creality CR-10 Max.json index 5922576073..82a5d1d760 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10max_buildplate_model.stl", "bed_texture": "creality_cr10max_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json index 34ae5f05e3..9dc1ae8962 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json index 99ddf4e2e2..12805d5e86 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json index 32bec9dd85..60ae6d2db8 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json index 25d0d2a2df..1ae4e24163 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE.json b/resources/profiles/Creality/machine/Creality CR-10 SE.json index 6e57e38c0c..bd39ea5ff1 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10se_buildplate_model.stl", "bed_texture": "creality_cr10se_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PETG;Creality Generic TPU;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PETG @Creality;Generic TPU @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json index af449cd705..7b70121bef 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json @@ -106,7 +106,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2.json b/resources/profiles/Creality/machine/Creality CR-10 V2.json index a709fe2309..6098003c41 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10v2_buildplate_model.stl", "bed_texture": "creality_cr10v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json index 10837d9271..6eee0b7357 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json @@ -109,7 +109,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 X2 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json index 6b518c35a5..8ec571442d 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 X2 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3.json b/resources/profiles/Creality/machine/Creality CR-10 V3.json index 37cfe67f05..39958036b8 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10v3_buildplate_model.stl", "bed_texture": "creality_cr10v3_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json index 1a91139859..db3d5f8ac1 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality CR-6 0.2", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json index 0c8ce148a6..5f0d68af0c 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-6 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json index aeea306f78..eb2b0bfb2a 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality CR-6 0.6", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json index 417eba9589..fc9adbc8b6 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.32mm Standard @Creality CR-6 0.8", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max.json b/resources/profiles/Creality/machine/Creality CR-6 Max.json index aa1925da6e..af7f785051 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_CR_6_Max", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json index 757ee910bf..d738e8569c 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality CR-6 0.2", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json index 8c862ad0c1..8ad215b2f5 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-6 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json index d5f40f373f..f5f19131b8 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality CR-6 0.6", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json index a38fa30329..8afdf0d906 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.32mm Standard @Creality CR-6 0.8", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE.json b/resources/profiles/Creality/machine/Creality CR-6 SE.json index 2d7026c31d..63fc2fc19b 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_CR_6_SE", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json index 165a332297..9d1de682c3 100644 --- a/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json @@ -9,7 +9,7 @@ "gcode_flavor": "marlin", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-M4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-M4.json b/resources/profiles/Creality/machine/Creality CR-M4.json index 0cb519eec9..d4df994d2c 100644 --- a/resources/profiles/Creality/machine/Creality CR-M4.json +++ b/resources/profiles/Creality/machine/Creality CR-M4.json @@ -8,5 +8,5 @@ "bed_model": "creality_crm4_buildplate_model.stl", "bed_texture": "creality_crm4_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json index 29762960b6..ce445321ed 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json index 59497d500b..7e6a63ab18 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json index a33329652b..5becaffc5d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json index d77ba1063f..03beab016f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json index d6715bb636..d7305a3b9e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json index ac1a04a609..a2bf0df0ad 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json index f0377efa29..66c1f038ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json index b8371d1770..f42b8f288d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro.json index 982a2256bf..407f2d9833 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json index c8ee1f7a0f..72e1aeb855 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json @@ -106,7 +106,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json index 66d9161841..6f61fc3c0b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling \nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json index a871bc6d03..08579e0a00 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json index 53d5923358..9b688aae93 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json index 29735d253d..73f2340b40 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json index 134df7200d..68badab1c3 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1plus_buildplate_model.stl", "bed_texture": "creality_ender3s1plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json index fa9f815d66..d7cbb9292d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json @@ -109,7 +109,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json index 2ce3d35e19..e47e3ab7ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1pro_buildplate_model.stl", "bed_texture": "creality_ender3s1pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1.json b/resources/profiles/Creality/machine/Creality Ender-3 S1.json index aec61a4289..fb405f39f4 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1_buildplate_model.stl", "bed_texture": "creality_ender3s1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json index 2e7787e04e..47e5f72147 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-3 V2", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender3V2", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json index e07ac17f02..7cddabe415 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality Ender-3 V2 Neo", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender3V2 Neo", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json index 827ae40bc3..b22add48ea 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2neo_buildplate_model.stl", "bed_texture": "creality_ender3v2neo_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PLA;Creality Generic PETG" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PLA @Creality;Generic PETG @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2.json b/resources/profiles/Creality/machine/Creality Ender-3 V2.json index 88665f5892..a5ef1d123d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json index 4bc5a8a963..de3c4286dc 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json @@ -126,7 +126,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json index 317b7b3499..75ceca6c79 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json @@ -126,7 +126,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json index 9b1fa97ba2..e27b0b3c54 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json index a0a2f1fe1b..1607a8bd4e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json index 7141b3088f..cbc3d0cc58 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json index da6689b46d..d4eadbf772 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json index 63ac65eec6..1911d1f0d0 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3ke_buildplate_model.stl", "bed_texture": "creality_ender3v3ke_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json index ac9f51f5cb..f9b91395ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json @@ -123,7 +123,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json index 52db2b831d..d0c4bee18a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json @@ -123,7 +123,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json index b471a9ab08..919076763b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3plus_buildplate_model.stl", "bed_texture": "creality_ender3v3plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json index e75a79ce23..dc04436c04 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json index 59c207b62a..22df39dd1d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json index 713e8e7332..881a46fc3a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json index b904c4b7f3..44e9b97afb 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json index 2ceb56c108..71786a500d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3se_buildplate_model.stl", "bed_texture": "creality_ender3v3se_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3.json b/resources/profiles/Creality/machine/Creality Ender-3 V3.json index 74f5c275fc..5650e068aa 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3_buildplate_model.stl", "bed_texture": "creality_ender3v3_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3.json b/resources/profiles/Creality/machine/Creality Ender-3.json index 66a234e378..70bdb03d55 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3.json +++ b/resources/profiles/Creality/machine/Creality Ender-3.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json index c04de58097..44434bbf93 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Max.json b/resources/profiles/Creality/machine/Creality Ender-5 Max.json index 8c5354fea2..9c10f97f05 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Max.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Max.json @@ -9,5 +9,5 @@ "bed_texture": "creality_ender5max_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Hyper PLA-CF @Ender-5Max-all;Creality Hyper PLA @Ender-5Max-all;Creality Hyper ABS @Ender-5Max-all;Creality Generic TPU @Ender-5Max-all;Creality Generic ASA @Ender-5Max-all;Creality Silk PLA @Ender-5Max-all;Creality Generic PLA @Ender-5Max-all;Creality Generic PETG @Ender-5Max-all;Creality Generic ABS @Ender-5Max-all;Creality Generic PA @Ender-5Max-all" + "default_materials": "Creality Hyper PLA-CF @Ender-5Max-all;Creality Hyper PLA @Ender-5Max-all;Creality Hyper ABS @Ender-5Max-all;Generic TPU @Creality Ender-5Max-all;Generic ASA @Creality Ender-5Max-all;Creality Silk PLA @Ender-5Max-all;Generic PLA @Creality Ender-5Max-all;Generic PETG @Creality Ender-5Max-all;Generic ABS @Creality Ender-5Max-all;Generic PA @Creality Ender-5Max-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json index bcca726c1b..66fea8f254 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json index 2950cdacf5..f672b4db0a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5plus_buildplate_model.stl", "bed_texture": "creality_ender5plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json index 285297c0df..435b89d3c9 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality Ender5Pro (2019) 0.2", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json index 375ad54f20..a2bffd1951 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.25", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.25", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json index fc273af47e..62c133018f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.3", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json index 860e1dcc05..87e58181e4 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019)", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json index 47ad87824a..e46303cd0b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.5", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json index 11a71495b2..ca4875c1eb 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json index 45332a9788..d3597d37af 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json index 5d5230f5af..841bab4eab 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "1.0", "default_print_profile": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json index 1863dd03c6..e8185a0458 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5pro_buildplate_model.stl", "bed_texture": "creality_ender5pro_buildplate_texture.svg", "hotend_model": "hotend.stl", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json index 6ef5e99e94..58a98c2064 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1.json b/resources/profiles/Creality/machine/Creality Ender-5 S1.json index 23ec29b299..8ef8baed2f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s1_buildplate_model.stl", "bed_texture": "creality_ender5s1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5.json b/resources/profiles/Creality/machine/Creality Ender-5.json index f43c00b81b..72f2f30680 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5.json +++ b/resources/profiles/Creality/machine/Creality Ender-5.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5_buildplate_model.stl", "bed_texture": "creality_ender5_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json index 5b9fbe6a66..c6068c5e24 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json @@ -101,7 +101,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5S.json b/resources/profiles/Creality/machine/Creality Ender-5S.json index ff1f2633fa..a3dfb27ff6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s_buildplate_model.stl", "bed_texture": "creality_ender5s_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json index 3e8b6f1216..d61f549c7f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-6.json b/resources/profiles/Creality/machine/Creality Ender-6.json index f327bd97b0..9f3b5e2cc8 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6.json +++ b/resources/profiles/Creality/machine/Creality Ender-6.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender6_buildplate_model.stl", "bed_texture": "creality_ender6_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Hi.json b/resources/profiles/Creality/machine/Creality Hi.json index c1b5173f32..107d587cc5 100644 --- a/resources/profiles/Creality/machine/Creality Hi.json +++ b/resources/profiles/Creality/machine/Creality Hi.json @@ -9,5 +9,5 @@ "bed_texture": "creality_hi_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Creality Generic ABS @Hi-all;Creality Generic ASA @Hi-all;Creality Generic ASA-CF @Hi-all;Creality Generic PETG @Hi-all;Creality Generic PETG-CF @Hi-all;Creality Generic PLA @Hi-all;Creality Generic PLA High Speed @Hi-all;Creality Generic PLA Matte @Hi-all;Creality Generic PLA Silk @Hi-all;Creality Generic PLA-CF @Hi-all;Creality Generic PLA Wood @Hi-all;Creality Generic TPU @Hi-all" + "default_materials": "Generic ABS @Creality Hi-all;Generic ASA @Creality Hi-all;Generic ASA-CF @Creality Hi-all;Generic PETG @Creality Hi-all;Generic PETG-CF @Creality Hi-all;Generic PLA @Creality Hi-all;Generic PLA High Speed @Creality Hi-all;Generic PLA Matte @Creality Hi-all;Generic PLA Silk @Creality Hi-all;Generic PLA-CF @Creality Hi-all;Generic PLA Wood @Creality Hi-all;Generic TPU @Creality Hi-all" } diff --git a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json index 4b1fad646b..4cde2d1f5e 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json index 1a849f15d9..afaa516e7e 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json index efc77b1623..417c088cb7 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index d41f4b8ec9..c3978a05eb 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 8c0f630a43..2ebe0a97c2 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index 2593be039b..b59c1f54a4 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 Max.json b/resources/profiles/Creality/machine/Creality K1 Max.json index af8379ad83..3acfd1ec99 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max.json +++ b/resources/profiles/Creality/machine/Creality K1 Max.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1max_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json index 0ffbbb8fc2..992ae60a0f 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json index 426f93e8be..3016f2de6c 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_Max_CFS_C", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json index fc50432dd0..95db217016 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json @@ -121,7 +121,7 @@ "manual_filament_change": "0", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json index 93a4641702..b78cf80658 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json index aa98cb2b00..175ff1da66 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1 SE.json b/resources/profiles/Creality/machine/Creality K1 SE.json index 82a8d97b63..9f6806ee46 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE.json +++ b/resources/profiles/Creality/machine/Creality K1 SE.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1se_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" } diff --git a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json index 14077b6693..510e17ecf5 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json @@ -82,7 +82,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json index 7c41c72dff..835c133338 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_SE_CFS_C", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" } diff --git a/resources/profiles/Creality/machine/Creality K1.json b/resources/profiles/Creality/machine/Creality K1.json index 4892cfbaca..60cd9142f1 100644 --- a/resources/profiles/Creality/machine/Creality K1.json +++ b/resources/profiles/Creality/machine/Creality K1.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index 87ccb311bf..5d8154c1f1 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json index b00db3d173..73328c69f4 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json index 069b665e5f..2c59727abf 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality K1C.json b/resources/profiles/Creality/machine/Creality K1C.json index 7db363a7d7..4283aabfd4 100644 --- a/resources/profiles/Creality/machine/Creality K1C.json +++ b/resources/profiles/Creality/machine/Creality K1C.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1c_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" } diff --git a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json index 225b760c9c..b3221b0dd5 100644 --- a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1C_CFS-C.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C.json index 9cf7839332..6e80f1fbd4 100644 --- a/resources/profiles/Creality/machine/Creality K1C_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1C_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1C_CFS_C", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" } diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json index d4a7d9e913..04cb946b94 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C.json b/resources/profiles/Creality/machine/Creality K1_CFS-C.json index 268a48e994..d0d7124dd2 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_CFS_C", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json index a0a342d406..c75b9d04f1 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json @@ -122,7 +122,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "40" diff --git a/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json index c3d6488839..1c28315013 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json @@ -118,7 +118,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "40" diff --git a/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json index b17c6f479a..8eb0c83877 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json @@ -120,7 +120,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "30" diff --git a/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json index 9d13607569..1281d5934d 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json @@ -120,7 +120,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "30" diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json index 52e7d360e9..356e6f571a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json index 93472b4dea..e74b47a143 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json index 3b9009eb0c..9faca356d9 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json index 285613858f..df47686765 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus.json b/resources/profiles/Creality/machine/Creality K2 Plus.json index 68cde06cfe..d70e5e517a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2plus_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json index 08249a6136..c8c34d0b39 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json index c9d74994d7..e55e947fac 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json index b364acf29f..9ca340c779 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json index 207c059d24..4cadba6946 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro.json b/resources/profiles/Creality/machine/Creality K2 Pro.json index d50ec5384a..3df797399b 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2pro_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json index ebe24f655f..4b0e4754fc 100644 --- a/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json @@ -83,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", diff --git a/resources/profiles/Creality/machine/Creality K2 SE.json b/resources/profiles/Creality/machine/Creality K2 SE.json index 701d32c06e..5b7ec27ea0 100644 --- a/resources/profiles/Creality/machine/Creality K2 SE.json +++ b/resources/profiles/Creality/machine/Creality K2 SE.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K2_SE", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2.json b/resources/profiles/Creality/machine/Creality K2.json index 3baf9e4126..3ea29942b7 100644 --- a/resources/profiles/Creality/machine/Creality K2.json +++ b/resources/profiles/Creality/machine/Creality K2.json @@ -9,5 +9,5 @@ "default_bed_type": "Textured PEI Plate", "bed_texture": "creality_k2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json index a3a6bfbfb1..2d7f0a63d8 100644 --- a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Sermoon V1", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Sermoon V1", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1.json b/resources/profiles/Creality/machine/Creality Sermoon V1.json index 1f7f26c390..7b14e8256e 100644 --- a/resources/profiles/Creality/machine/Creality Sermoon V1.json +++ b/resources/profiles/Creality/machine/Creality Sermoon V1.json @@ -11,5 +11,5 @@ "Spiral Lift" ], "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS;Creality Generic TPU" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/fdm_creality_common.json b/resources/profiles/Creality/machine/fdm_creality_common.json index f3021ae1ed..1818e8b54b 100644 --- a/resources/profiles/Creality/machine/fdm_creality_common.json +++ b/resources/profiles/Creality/machine/fdm_creality_common.json @@ -124,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality", "bed_exclude_area": [ diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json index c583fa9a16..c7209bdf2b 100755 --- a/resources/profiles/DeltaMaker.json +++ b/resources/profiles/DeltaMaker.json @@ -1,7 +1,7 @@ { "name": "DeltaMaker", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "DeltaMaker configurations", "machine_model_list": [ @@ -58,20 +58,20 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "DeltaMaker Generic PETG", - "sub_path": "filament/DeltaMaker Generic PETG.json" + "name": "Generic PETG @DeltaMaker", + "sub_path": "filament/Generic PETG @DeltaMaker.json" }, { "name": "DeltaMaker Brand PLA", "sub_path": "filament/DeltaMaker Brand PLA.json" }, { - "name": "DeltaMaker Generic PLA", - "sub_path": "filament/DeltaMaker Generic PLA.json" + "name": "Generic PLA @DeltaMaker", + "sub_path": "filament/Generic PLA @DeltaMaker.json" }, { - "name": "DeltaMaker Generic TPU", - "sub_path": "filament/DeltaMaker Generic TPU.json" + "name": "Generic TPU @DeltaMaker", + "sub_path": "filament/Generic TPU @DeltaMaker.json" } ], "machine_list": [ diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json similarity index 82% rename from resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json rename to resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json index 94a2707c85..a31ad9aec5 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json +++ b/resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "DeltaMaker Generic PETG", + "name": "Generic PETG @DeltaMaker", "inherits": "fdm_filament_pet", + "renamed_from": "DeltaMaker Generic PETG", "from": "system", - "setting_id": "qlQo6a93esZv2l9a", - "filament_id": "OF4oCRKe", + "setting_id": "XmKr3I3RjeI3hm6F", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json similarity index 70% rename from resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json rename to resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json index 5a130f9040..2e2b626feb 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json +++ b/resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "DeltaMaker Generic PLA", + "name": "Generic PLA @DeltaMaker", "inherits": "fdm_filament_pla", + "renamed_from": "DeltaMaker Generic PLA", "from": "system", - "setting_id": "gfxr3MiE4uI2Xxy7", - "filament_id": "OFifxPW1", + "setting_id": "ITJo0Cig9myqk1uB", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.987" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json similarity index 68% rename from resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json rename to resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json index 3d02e90708..edfc8a1cd2 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json +++ b/resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "DeltaMaker Generic TPU", + "name": "Generic TPU @DeltaMaker", "inherits": "fdm_filament_tpu", + "renamed_from": "DeltaMaker Generic TPU", "from": "system", - "setting_id": "2L1U33wC0LofrMWs", - "filament_id": "OFbt04e0", + "setting_id": "uWHBbbhFzvWq0qUP", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json index f28c54eedc..8e7f98c81d 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json index e7693bc7ce..7b57c1956b 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json index 4f83ddb32e..2b622e3c68 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json index 37b989997b..88846595bf 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json index 5ce9d45438..1767cda770 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json index 9d10697dd8..0b3870e4ac 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json index 1033551ca9..ecfe431ef6 100755 --- a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json +++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json @@ -124,7 +124,7 @@ "1" ], "default_filament_profile": [ - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ], "default_print_profile": "0.20mm Standard @DeltaMaker 2 0.35 nozzle", "bed_exclude_area": [ diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index c8462f0414..951763b563 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ @@ -89,20 +89,20 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Dremel Generic PLA", - "sub_path": "filament/Dremel Generic PLA.json" + "name": "Generic PLA @Dremel", + "sub_path": "filament/Generic PLA @Dremel.json" }, { - "name": "Dremel Generic PLA @3D20 all", - "sub_path": "filament/Dremel Generic PLA @3D20 all.json" + "name": "Generic PLA @Dremel 3D20 all", + "sub_path": "filament/Generic PLA @Dremel 3D20 all.json" }, { - "name": "Dremel Generic PLA @3D40 all", - "sub_path": "filament/Dremel Generic PLA @3D40 all.json" + "name": "Generic PLA @Dremel 3D40 all", + "sub_path": "filament/Generic PLA @Dremel 3D40 all.json" }, { - "name": "Dremel Generic PLA @3D45 all", - "sub_path": "filament/Dremel Generic PLA @3D45 all.json" + "name": "Generic PLA @Dremel 3D45 all", + "sub_path": "filament/Generic PLA @Dremel 3D45 all.json" } ], "machine_list": [ diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json similarity index 66% rename from resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json rename to resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json index 90d7a3e8af..e38769a288 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Dremel Generic PLA @3D20 all", - "inherits": "Dremel Generic PLA", + "name": "Generic PLA @Dremel 3D20 all", + "inherits": "Generic PLA @Dremel", + "renamed_from": "Dremel Generic PLA @3D20 all;Dremel Generic PLA 3D20 all", "from": "system", - "setting_id": "weKWPiNIe3TmOXRn", - "filament_id": "OFD2JNS1", + "setting_id": "UggXEvCig0b6S8Vx", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json similarity index 70% rename from resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json rename to resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json index 3fbcaefaa1..4c7afbe819 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Dremel Generic PLA @3D40 all", - "inherits": "Dremel Generic PLA", + "name": "Generic PLA @Dremel 3D40 all", + "inherits": "Generic PLA @Dremel", + "renamed_from": "Dremel Generic PLA @3D40 all;Dremel Generic PLA 3D40 all", "from": "system", - "setting_id": "kZAEjhLS29WQeyf1", - "filament_id": "OFD2JNS1", + "setting_id": "VUOtsWfy46cvAyBT", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "9" diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json similarity index 74% rename from resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json rename to resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json index 0b0f6b155f..a40cebf06d 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Dremel Generic PLA @3D45 all", - "inherits": "Dremel Generic PLA", + "name": "Generic PLA @Dremel 3D45 all", + "inherits": "Generic PLA @Dremel", + "renamed_from": "Dremel Generic PLA @3D45 all;Dremel Generic PLA 3D45 all", "from": "system", - "setting_id": "pIlkZjNrXnHJDszp", - "filament_id": "OFD2JNS1", + "setting_id": "qEeBb3Pix2iDT3SD", + "filament_id": "OFDSrzZ8", "instantiation": "true", "slow_down_min_speed": "10", "close_fan_the_first_x_layers": "3", diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel.json similarity index 71% rename from resources/profiles/Dremel/filament/Dremel Generic PLA.json rename to resources/profiles/Dremel/filament/Generic PLA @Dremel.json index d46a8cebfa..9cf4e162f0 100644 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Dremel Generic PLA", + "name": "Generic PLA @Dremel", "inherits": "fdm_filament_pla", + "renamed_from": "Dremel Generic PLA", "from": "system", - "setting_id": "blJERdJqaaRmRdD4", - "filament_id": "OFaU2JxD", + "setting_id": "jYydSWbyE3JzoKnQ", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json index ea9490971a..02d513000c 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_structure": "hbot", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D20 all" + "Generic PLA @Dremel 3D20 all" ], "default_print_profile": ".20mm Standard @Dremel 3D20 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D20.json b/resources/profiles/Dremel/machine/Dremel 3D20.json index ec37c0d8df..8aa43be862 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D20.json +++ b/resources/profiles/Dremel/machine/Dremel 3D20.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D20", - "default_materials": "Dremel Generic PLA @3D20 all" + "default_materials": "Generic PLA @Dremel 3D20 all" } diff --git a/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json index d37a785099..db8a20003a 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_structure": "hbot", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D40 all" + "Generic PLA @Dremel 3D40 all" ], "default_print_profile": ".20mm Standard @Dremel 3D40 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D40.json b/resources/profiles/Dremel/machine/Dremel 3D40.json index 3e3a003f2a..0223ced4d8 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D40.json +++ b/resources/profiles/Dremel/machine/Dremel 3D40.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D40", - "default_materials": "Dremel Generic PLA @3D40 all" + "default_materials": "Generic PLA @Dremel 3D40 all" } diff --git a/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json index 8d6b26f34b..c8cf0666d0 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_settings_id": "Dremel", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D45 all" + "Generic PLA @Dremel 3D45 all" ], "default_print_profile": ".20mm Standard @Dremel 3D45 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D45.json b/resources/profiles/Dremel/machine/Dremel 3D45.json index d32aac4977..f701b83188 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D45.json +++ b/resources/profiles/Dremel/machine/Dremel 3D45.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D45", - "default_materials": "Dremel Generic PLA @3D45 all" + "default_materials": "Generic PLA @Dremel 3D45 all" } diff --git a/resources/profiles/Dremel/machine/fdm_dremel_common.json b/resources/profiles/Dremel/machine/fdm_dremel_common.json index 194559cdcf..6f7504f9fa 100644 --- a/resources/profiles/Dremel/machine/fdm_dremel_common.json +++ b/resources/profiles/Dremel/machine/fdm_dremel_common.json @@ -124,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Dremel Generic PLA" + "Generic PLA @Dremel" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 8e234dffca..364b3cf521 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ @@ -177,44 +177,44 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "FLSun Generic ABS", - "sub_path": "filament/FLSun Generic ABS.json" + "name": "Generic ABS @FLSun", + "sub_path": "filament/Generic ABS @FLSun.json" }, { - "name": "FLSun Generic ASA", - "sub_path": "filament/FLSun Generic ASA.json" + "name": "Generic ASA @FLSun", + "sub_path": "filament/Generic ASA @FLSun.json" }, { - "name": "FLSun Generic PA", - "sub_path": "filament/FLSun Generic PA.json" + "name": "Generic PA @FLSun", + "sub_path": "filament/Generic PA @FLSun.json" }, { - "name": "FLSun Generic PA-CF", - "sub_path": "filament/FLSun Generic PA-CF.json" + "name": "Generic PA-CF @FLSun", + "sub_path": "filament/Generic PA-CF @FLSun.json" }, { - "name": "FLSun Generic PC", - "sub_path": "filament/FLSun Generic PC.json" + "name": "Generic PC @FLSun", + "sub_path": "filament/Generic PC @FLSun.json" }, { - "name": "FLSun Generic PETG", - "sub_path": "filament/FLSun Generic PETG.json" + "name": "Generic PETG @FLSun", + "sub_path": "filament/Generic PETG @FLSun.json" }, { - "name": "FLSun Generic PLA", - "sub_path": "filament/FLSun Generic PLA.json" + "name": "Generic PLA @FLSun", + "sub_path": "filament/Generic PLA @FLSun.json" }, { - "name": "FLSun Generic PLA-CF", - "sub_path": "filament/FLSun Generic PLA-CF.json" + "name": "Generic PLA-CF @FLSun", + "sub_path": "filament/Generic PLA-CF @FLSun.json" }, { - "name": "FLSun Generic PVA", - "sub_path": "filament/FLSun Generic PVA.json" + "name": "Generic PVA @FLSun", + "sub_path": "filament/Generic PVA @FLSun.json" }, { - "name": "FLSun Generic TPU", - "sub_path": "filament/FLSun Generic TPU.json" + "name": "Generic TPU @FLSun", + "sub_path": "filament/Generic TPU @FLSun.json" }, { "name": "FLSun S1 ABS", @@ -241,8 +241,8 @@ "sub_path": "filament/FLSun T1 PETG.json" }, { - "name": "FLSun S1 PLA Generic", - "sub_path": "filament/FLSun S1 PLA Generic.json" + "name": "Generic PLA @FLSun S1", + "sub_path": "filament/Generic PLA @FLSun S1.json" }, { "name": "FLSun S1 PLA High Speed", @@ -253,8 +253,8 @@ "sub_path": "filament/FLSun S1 PLA Silk.json" }, { - "name": "FLSun T1 PLA Generic", - "sub_path": "filament/FLSun T1 PLA Generic.json" + "name": "Generic PLA @FLSun T1", + "sub_path": "filament/Generic PLA @FLSun T1.json" }, { "name": "FLSun T1 PLA High Speed", diff --git a/resources/profiles/FLSun/filament/FLSun S1 ABS.json b/resources/profiles/FLSun/filament/FLSun S1 ABS.json index f796202c3e..d097e75200 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ABS.json +++ b/resources/profiles/FLSun/filament/FLSun S1 ABS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 ABS", - "inherits": "FLSun Generic ABS", + "inherits": "Generic ABS @FLSun", "from": "system", "setting_id": "tvpZ28Oe4Al7hlgj", "filament_id": "OFzzmK2Q", diff --git a/resources/profiles/FLSun/filament/FLSun S1 ASA.json b/resources/profiles/FLSun/filament/FLSun S1 ASA.json index fed430ca63..79d37b5e30 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ASA.json +++ b/resources/profiles/FLSun/filament/FLSun S1 ASA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 ASA", - "inherits": "FLSun Generic ASA", + "inherits": "Generic ASA @FLSun", "from": "system", "setting_id": "C5oyaWw3YVEz0CgE", "filament_id": "OFIK0xFa", diff --git a/resources/profiles/FLSun/filament/FLSun S1 PETG.json b/resources/profiles/FLSun/filament/FLSun S1 PETG.json index cf6a506da0..33e14b08a1 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PETG.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 PETG", - "inherits": "FLSun Generic PETG", + "inherits": "Generic PETG @FLSun", "from": "system", "setting_id": "Ac6q0FtMFMLesFdU", "filament_id": "OF9z5LZ9", diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json index 8d9d662dda..f1cd779e91 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 PLA High Speed", - "inherits": "FLSun Generic PLA", + "inherits": "Generic PLA @FLSun", "from": "system", "setting_id": "v2clpNXXo8m6dV33", "filament_id": "OFoqrHTw", diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json index 70946da40c..2d4a65f157 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 PLA Silk", - "inherits": "FLSun Generic PLA", + "inherits": "Generic PLA @FLSun", "from": "system", "setting_id": "164Bn4YchxJAaLsa", "filament_id": "OFSStjay", diff --git a/resources/profiles/FLSun/filament/FLSun S1 TPU.json b/resources/profiles/FLSun/filament/FLSun S1 TPU.json index 0b3e6a00ee..1a495c4a0b 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 TPU.json +++ b/resources/profiles/FLSun/filament/FLSun S1 TPU.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun S1 TPU", - "inherits": "FLSun Generic TPU", + "inherits": "Generic TPU @FLSun", "from": "system", "setting_id": "yzPvNqIo7mfWAwNS", "filament_id": "OF6ooviO", diff --git a/resources/profiles/FLSun/filament/FLSun T1 ABS.json b/resources/profiles/FLSun/filament/FLSun T1 ABS.json index fe7c8c15c8..8514ed0ecd 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ABS.json +++ b/resources/profiles/FLSun/filament/FLSun T1 ABS.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 ABS", - "inherits": "FLSun Generic ABS", + "inherits": "Generic ABS @FLSun", "from": "system", "setting_id": "GP8VqRfidKOdj0ZJ", "filament_id": "OFV0KrAG", diff --git a/resources/profiles/FLSun/filament/FLSun T1 ASA.json b/resources/profiles/FLSun/filament/FLSun T1 ASA.json index 4633c41271..862fde6c6e 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ASA.json +++ b/resources/profiles/FLSun/filament/FLSun T1 ASA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 ASA", - "inherits": "FLSun Generic ASA", + "inherits": "Generic ASA @FLSun", "from": "system", "setting_id": "YmJbWfCQpNk9nxB7", "filament_id": "OFbjtPQy", diff --git a/resources/profiles/FLSun/filament/FLSun T1 PETG.json b/resources/profiles/FLSun/filament/FLSun T1 PETG.json index 869df6e538..5b2e6e471c 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PETG.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 PETG", - "inherits": "FLSun Generic PETG", + "inherits": "Generic PETG @FLSun", "from": "system", "setting_id": "A2aA7xcmqgz8ERyY", "filament_id": "OFJ80y1e", diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json index 2d612ce865..814aa5b47c 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 PLA High Speed", - "inherits": "FLSun Generic PLA", + "inherits": "Generic PLA @FLSun", "from": "system", "setting_id": "E4lpSLLlAxUW04ik", "filament_id": "OFQ9qnkd", diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json index e2a7bbeca2..f7b4b22751 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 PLA Silk", - "inherits": "FLSun Generic PLA", + "inherits": "Generic PLA @FLSun", "from": "system", "setting_id": "gElUb4GnCoEfVlEd", "filament_id": "OFuUJyRx", diff --git a/resources/profiles/FLSun/filament/FLSun T1 TPU.json b/resources/profiles/FLSun/filament/FLSun T1 TPU.json index 63813ae149..3b25d65229 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 TPU.json +++ b/resources/profiles/FLSun/filament/FLSun T1 TPU.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "FLSun T1 TPU", - "inherits": "FLSun Generic TPU", + "inherits": "Generic TPU @FLSun", "from": "system", "setting_id": "34Ux18VB4d6R6G40", "filament_id": "OFENzGSm", diff --git a/resources/profiles/FLSun/filament/FLSun Generic ABS.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun.json similarity index 71% rename from resources/profiles/FLSun/filament/FLSun Generic ABS.json rename to resources/profiles/FLSun/filament/Generic ABS @FLSun.json index 848034b3e1..2daf007fe9 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ABS.json +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic ABS", + "name": "Generic ABS @FLSun", "inherits": "fdm_filament_abs", + "renamed_from": "FLSun Generic ABS", "from": "system", - "setting_id": "2f9nYaR0PUMkGvDD", - "filament_id": "OFWof1Ap", + "setting_id": "1lPapSrZbKMLBx6k", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/FLSun/filament/FLSun Generic ASA.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun.json similarity index 71% rename from resources/profiles/FLSun/filament/FLSun Generic ASA.json rename to resources/profiles/FLSun/filament/Generic ASA @FLSun.json index bbea739d1d..e86f82f441 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic ASA.json +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic ASA", + "name": "Generic ASA @FLSun", "inherits": "fdm_filament_asa", + "renamed_from": "FLSun Generic ASA", "from": "system", - "setting_id": "9GPCRihSQTBRxkm3", - "filament_id": "OFCcsYtf", + "setting_id": "22OH64Yfg5sdyEmz", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA.json b/resources/profiles/FLSun/filament/Generic PA @FLSun.json similarity index 74% rename from resources/profiles/FLSun/filament/FLSun Generic PA.json rename to resources/profiles/FLSun/filament/Generic PA @FLSun.json index 8f9908acbc..49fe8c01fc 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA.json +++ b/resources/profiles/FLSun/filament/Generic PA @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PA", + "name": "Generic PA @FLSun", "inherits": "fdm_filament_pa", + "renamed_from": "FLSun Generic PA", "from": "system", - "setting_id": "ek14AgskfJXeZ84u", - "filament_id": "OFeJjoKF", + "setting_id": "hlHGTLqHjaRfMkqC", + "filament_id": "OFg8ndtj", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json b/resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json similarity index 75% rename from resources/profiles/FLSun/filament/FLSun Generic PA-CF.json rename to resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json index 65f3c06b99..b6dc311dcf 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json +++ b/resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PA-CF", + "name": "Generic PA-CF @FLSun", "inherits": "fdm_filament_pa", + "renamed_from": "FLSun Generic PA-CF", "from": "system", - "setting_id": "2JOA0YeYZHj0lFmA", - "filament_id": "OFHQUAoZ", + "setting_id": "xiLUY07SM81i1pPs", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PC.json b/resources/profiles/FLSun/filament/Generic PC @FLSun.json similarity index 71% rename from resources/profiles/FLSun/filament/FLSun Generic PC.json rename to resources/profiles/FLSun/filament/Generic PC @FLSun.json index 4a111e609f..e4d81857d3 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PC.json +++ b/resources/profiles/FLSun/filament/Generic PC @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PC", + "name": "Generic PC @FLSun", "inherits": "fdm_filament_pc", + "renamed_from": "FLSun Generic PC", "from": "system", - "setting_id": "wluYSRtaCqajFCYT", - "filament_id": "OFVqZ2H0", + "setting_id": "Ok08F2LxNjxor6ph", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PETG.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun.json similarity index 84% rename from resources/profiles/FLSun/filament/FLSun Generic PETG.json rename to resources/profiles/FLSun/filament/Generic PETG @FLSun.json index f0cf97956e..84eaee1c7c 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PETG.json +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PETG", + "name": "Generic PETG @FLSun", "inherits": "fdm_filament_pet", + "renamed_from": "FLSun Generic PETG", "from": "system", - "setting_id": "FCjlzoLFYn3IVxxD", - "filament_id": "OFJJpaLS", + "setting_id": "pWuJLjWhYMutD92n", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json similarity index 83% rename from resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json rename to resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json index 8115a9cec6..5674ba8c27 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun S1 PLA Generic", - "inherits": "FLSun Generic PLA", + "name": "Generic PLA @FLSun S1", + "inherits": "Generic PLA @FLSun", + "renamed_from": "FLSun S1 PLA Generic", "from": "system", - "setting_id": "z0Y9rQVZairHqwbi", - "filament_id": "OFoDgVnY", + "setting_id": "4f9vGTYsHDbZoVjs", + "filament_id": "OFDSrzZ8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json similarity index 83% rename from resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json rename to resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json index 16e048d536..93b9ac08d4 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun T1 PLA Generic", - "inherits": "FLSun Generic PLA", + "name": "Generic PLA @FLSun T1", + "inherits": "Generic PLA @FLSun", + "renamed_from": "FLSun T1 PLA Generic", "from": "system", - "setting_id": "aUMHmlsPMYDicnPp", - "filament_id": "OFU0n0zW", + "setting_id": "5aJUZ6r6jtnvck19", + "filament_id": "OFDSrzZ8", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun.json similarity index 73% rename from resources/profiles/FLSun/filament/FLSun Generic PLA.json rename to resources/profiles/FLSun/filament/Generic PLA @FLSun.json index abc2303137..a4f8655ff9 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA.json +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PLA", + "name": "Generic PLA @FLSun", "inherits": "fdm_filament_pla", + "renamed_from": "FLSun Generic PLA", "from": "system", - "setting_id": "ltWBfkc84nszWS19", - "filament_id": "OFJSksUs", + "setting_id": "JcpwaJCVC9MoJrPB", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json b/resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json similarity index 74% rename from resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json rename to resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json index 3aefb8ea4a..87b301513e 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json +++ b/resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PLA-CF", + "name": "Generic PLA-CF @FLSun", "inherits": "fdm_filament_pla", + "renamed_from": "FLSun Generic PLA-CF", "from": "system", - "setting_id": "FEdplifUKOSUA4XX", - "filament_id": "OFsF96Gt", + "setting_id": "teBJEScAMecyn3JU", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FLSun/filament/FLSun Generic PVA.json b/resources/profiles/FLSun/filament/Generic PVA @FLSun.json similarity index 75% rename from resources/profiles/FLSun/filament/FLSun Generic PVA.json rename to resources/profiles/FLSun/filament/Generic PVA @FLSun.json index 30defb2258..9279ece682 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic PVA.json +++ b/resources/profiles/FLSun/filament/Generic PVA @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic PVA", + "name": "Generic PVA @FLSun", "inherits": "fdm_filament_pva", + "renamed_from": "FLSun Generic PVA", "from": "system", - "setting_id": "IohayLPyRIsZJ0GY", - "filament_id": "OFtP1rqJ", + "setting_id": "hyVWJBubfQl497iO", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FLSun/filament/FLSun Generic TPU.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun.json similarity index 69% rename from resources/profiles/FLSun/filament/FLSun Generic TPU.json rename to resources/profiles/FLSun/filament/Generic TPU @FLSun.json index 63e0826eef..70d1b8c42a 100644 --- a/resources/profiles/FLSun/filament/FLSun Generic TPU.json +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FLSun Generic TPU", + "name": "Generic TPU @FLSun", "inherits": "fdm_filament_tpu", + "renamed_from": "FLSun Generic TPU", "from": "system", - "setting_id": "hewisceC8FmSwzF4", - "filament_id": "OFMoLF46", + "setting_id": "gJ3UZr4n4K8DPdBz", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json index 66fb95ccc6..3642cce4fb 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json @@ -180,7 +180,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM107\nG28 ;Home\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG92 E0\nG1 X-98 Y0 Z0.2 F4000 ; move to arc start\nG3 X0 Y-98 I98 Z0.2 E40 F400 ; lay arc stripe 90deg\nG0 Z1 \nG92 E0.0\n", "machine_end_gcode": "M107\nM104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\n;M84\nM18 S180 ;disable motors after 180s\n", diff --git a/resources/profiles/FLSun/machine/FLSun Q5.json b/resources/profiles/FLSun/machine/FLSun Q5.json index f7825cb4fa..001c4cb149 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5.json +++ b/resources/profiles/FLSun/machine/FLSun Q5.json @@ -8,5 +8,5 @@ "bed_model": "flsun_q5_buildplate_model.stl", "bed_texture": "flsun_q5_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json index ef1dd22c15..e2444d404c 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json @@ -180,7 +180,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[nozzle_temperature_initial_layer] ; set extruder final temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder final temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S440 P200; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250; wait between dual beep\nM300 S440 P200; 2nd beep for printer ready\nG4 S10; wait to clean the nozzle\nM300 S440 P200; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename_base]; Display: Printing started...", "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json index 3b3cf86676..f360405471 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json @@ -8,5 +8,5 @@ "bed_model": "flsun_qqspro_buildplate_model.stl", "bed_texture": "flsun_qqspro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun S1.json b/resources/profiles/FLSun/machine/FLSun S1.json index 5b730f3c3b..597480c25f 100644 --- a/resources/profiles/FLSun/machine/FLSun S1.json +++ b/resources/profiles/FLSun/machine/FLSun S1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_s1_buildplate_model.stl", "bed_texture": "FLSun_S1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun S1 PLA High Speed;FLSun S1 PLA Silk;FLSun S1 PLA Generic;FLSun S1 PETG;FLSun S1 ASA;FLSun S1 TPU;FLSun S1 ABS" + "default_materials": "FLSun S1 PLA High Speed;FLSun S1 PLA Silk;Generic PLA @FLSun S1;FLSun S1 PETG;FLSun S1 ASA;FLSun S1 TPU;FLSun S1 ABS" } diff --git a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json index b6fac6caa7..78731a1481 100644 --- a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json @@ -13,7 +13,7 @@ ], "nozzle_type": "brass", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/FLSun/machine/FLSun SR.json b/resources/profiles/FLSun/machine/FLSun SR.json index 54e40302e2..6a26773ece 100644 --- a/resources/profiles/FLSun/machine/FLSun SR.json +++ b/resources/profiles/FLSun/machine/FLSun SR.json @@ -8,5 +8,5 @@ "bed_model": "flsun_SR_buildplate_model.stl", "bed_texture": "flsun_SR_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun T1.json b/resources/profiles/FLSun/machine/FLSun T1.json index 8fda638772..45a7a290b1 100644 --- a/resources/profiles/FLSun/machine/FLSun T1.json +++ b/resources/profiles/FLSun/machine/FLSun T1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_T1_buildplate_model.stl", "bed_texture": "FLSun_T1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun T1 PLA High Speed;FLSun T1 PLA Silk;FLSun T1 PLA Generic;FLSun T1 PETG;FLSun T1 ASA;FLSun T1 TPU;FLSun T1 ABS" + "default_materials": "FLSun T1 PLA High Speed;FLSun T1 PLA Silk;Generic PLA @FLSun T1;FLSun T1 PETG;FLSun T1 ASA;FLSun T1 TPU;FLSun T1 ABS" } diff --git a/resources/profiles/FLSun/machine/FLSun V400.json b/resources/profiles/FLSun/machine/FLSun V400.json index 605e51e229..33fc9981ed 100644 --- a/resources/profiles/FLSun/machine/FLSun V400.json +++ b/resources/profiles/FLSun/machine/FLSun V400.json @@ -8,5 +8,5 @@ "bed_model": "flsun_v400_buildplate_model.stl", "bed_texture": "flsun_v400_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 661d171771..63c09f65af 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -550,20 +550,20 @@ "sub_path": "filament/Flashforge/Flashforge ABS @FF AD3.json" }, { - "name": "Flashforge Generic ABS", - "sub_path": "filament/Flashforge Generic ABS.json" + "name": "Generic ABS @Flashforge", + "sub_path": "filament/Generic ABS @Flashforge.json" }, { - "name": "Flashforge Generic ASA", - "sub_path": "filament/Flashforge Generic ASA.json" + "name": "Generic ASA @Flashforge", + "sub_path": "filament/Generic ASA @Flashforge.json" }, { - "name": "Flashforge Generic PETG", - "sub_path": "filament/Flashforge Generic PETG.json" + "name": "Generic PETG @Flashforge", + "sub_path": "filament/Generic PETG @Flashforge.json" }, { - "name": "Flashforge Generic PETG-CF10", - "sub_path": "filament/Flashforge Generic PETG-CF10.json" + "name": "Generic PETG-CF10 @Flashforge", + "sub_path": "filament/Generic PETG-CF10 @Flashforge.json" }, { "name": "Flashforge PETG", @@ -578,20 +578,20 @@ "sub_path": "filament/SUNLU/SUNLU PETG @base.json" }, { - "name": "Flashforge Generic HS PLA", - "sub_path": "filament/Flashforge Generic HS PLA.json" + "name": "Generic HS PLA @Flashforge", + "sub_path": "filament/Generic HS PLA @Flashforge.json" }, { - "name": "Flashforge Generic PLA", - "sub_path": "filament/Flashforge Generic PLA.json" + "name": "Generic PLA @Flashforge", + "sub_path": "filament/Generic PLA @Flashforge.json" }, { - "name": "Flashforge Generic PLA-CF10", - "sub_path": "filament/Flashforge Generic PLA-CF10.json" + "name": "Generic PLA-CF10 @Flashforge", + "sub_path": "filament/Generic PLA-CF10 @Flashforge.json" }, { - "name": "Flashforge Generic PLA-Silk", - "sub_path": "filament/Flashforge Generic PLA-Silk.json" + "name": "Generic PLA-Silk @Flashforge", + "sub_path": "filament/Generic PLA-Silk @Flashforge.json" }, { "name": "Flashforge PLA", @@ -622,8 +622,8 @@ "sub_path": "filament/SUNLU/SUNLU Wood PLA @base.json" }, { - "name": "Flashforge Generic TPU", - "sub_path": "filament/Flashforge Generic TPU.json" + "name": "Generic TPU @Flashforge", + "sub_path": "filament/Generic TPU @Flashforge.json" }, { "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", @@ -690,28 +690,28 @@ "sub_path": "filament/Flashforge ASA-CF @FF G4P.json" }, { - "name": "Flashforge Generic ABS @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json" + "name": "Generic ABS @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic ABS @FF AD5M 0.25 Nozzle.json" }, { - "name": "Flashforge Generic ABS @G3U", - "sub_path": "filament/Flashforge Generic ABS @G3U.json" + "name": "Generic ABS @Flashforge G3U", + "sub_path": "filament/Generic ABS @Flashforge G3U.json" }, { - "name": "Flashforge Generic ABS @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json" + "name": "Generic ABS @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json" }, { - "name": "Flashforge Generic ASA @G3U", - "sub_path": "filament/Flashforge Generic ASA @G3U.json" + "name": "Generic ASA @Flashforge G3U", + "sub_path": "filament/Generic ASA @Flashforge G3U.json" }, { - "name": "Flashforge Generic HIPS", - "sub_path": "filament/Flashforge Generic HIPS.json" + "name": "Generic HIPS @Flashforge", + "sub_path": "filament/Generic HIPS @Flashforge.json" }, { - "name": "Flashforge Generic HIPS @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json" + "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json" }, { "name": "Generic ABS @Flashforge AD4", @@ -726,44 +726,44 @@ "sub_path": "filament/Flashforge ASA Basic.json" }, { - "name": "Flashforge Generic ASA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json" + "name": "Generic ASA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic ASA @FF AD5M 0.25 Nozzle.json" }, { - "name": "Flashforge Generic ASA @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json" + "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json" }, { "name": "Generic ASA @Flashforge AD4", "sub_path": "filament/Generic ASA @Flashforge AD4.json" }, { - "name": "Flashforge Generic PETG @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json" + "name": "Generic PETG @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json" }, { - "name": "Flashforge Generic PETG @G3U", - "sub_path": "filament/Flashforge Generic PETG @G3U.json" + "name": "Generic PETG @Flashforge G3U", + "sub_path": "filament/Generic PETG @Flashforge G3U.json" }, { - "name": "Flashforge Generic PETG @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json" + "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json" }, { - "name": "Flashforge Generic PETG @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json" + "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json" }, { - "name": "Flashforge Generic PETG-CF @G3U", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U.json" + "name": "Generic PETG-CF @Flashforge G3U", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U.json" }, { - "name": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json" + "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json" }, { - "name": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json" + "name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json" }, { "name": "Flashforge HS PETG", @@ -854,40 +854,40 @@ "sub_path": "filament/Flashforge PETG-CF @FF G4P.json" }, { - "name": "FusRock Generic NexPA-CF25", - "sub_path": "filament/FusRock/FusRock Generic NexPA-CF25.json" + "name": "FusRock NexPA-CF25", + "sub_path": "filament/FusRock/FusRock NexPA-CF25.json" }, { - "name": "FusRock Generic PAHT-CF", - "sub_path": "filament/FusRock/FusRock Generic PAHT-CF.json" + "name": "FusRock PAHT-CF", + "sub_path": "filament/FusRock/FusRock PAHT-CF.json" }, { - "name": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json" + "name": "FusRock PAHT-CF @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic PET-CF", - "sub_path": "filament/FusRock/FusRock Generic PET-CF.json" + "name": "FusRock PET-CF", + "sub_path": "filament/FusRock/FusRock PET-CF.json" }, { - "name": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json" + "name": "FusRock PET-CF @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic S-Multi", - "sub_path": "filament/FusRock/FusRock Generic S-Multi.json" + "name": "FusRock S-Multi", + "sub_path": "filament/FusRock/FusRock S-Multi.json" }, { - "name": "FusRock Generic S-Multi @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json" + "name": "FusRock S-Multi @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic S-PAHT", - "sub_path": "filament/FusRock/FusRock Generic S-PAHT.json" + "name": "FusRock S-PAHT", + "sub_path": "filament/FusRock/FusRock S-PAHT.json" }, { - "name": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json" + "name": "FusRock S-PAHT @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json" }, { "name": "Generic PETG @Flashforge AD4", @@ -930,8 +930,8 @@ "sub_path": "filament/SUNLU/SUNLU PETG @FF AD5M 0.8 nozzle.json" }, { - "name": "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json" + "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json" }, { "name": "Flashforge HIPS @FF G4", @@ -1038,36 +1038,36 @@ "sub_path": "filament/Generic PLA High Speed @Flashforge AD4.json" }, { - "name": "Flashforge Generic PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json" + "name": "Generic PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" }, { - "name": "Flashforge Generic PLA @G3U", - "sub_path": "filament/Flashforge Generic PLA @G3U.json" + "name": "Generic PLA @Flashforge G3U", + "sub_path": "filament/Generic PLA @Flashforge G3U.json" }, { - "name": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json" + "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json" }, { - "name": "Flashforge Generic PLA @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json" + "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json" }, { - "name": "Flashforge Generic PLA-CF @G3U", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U.json" + "name": "Generic PLA-CF @Flashforge G3U", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U.json" }, { - "name": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json" + "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json" }, { - "name": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json" + "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json" }, { - "name": "Flashforge Generic PVA", - "sub_path": "filament/Flashforge Generic PVA.json" + "name": "Generic PVA @Flashforge", + "sub_path": "filament/Generic PVA @Flashforge.json" }, { "name": "Flashforge HS PLA", @@ -1222,12 +1222,12 @@ "sub_path": "filament/Generic PLA @Flashforge AD4.json" }, { - "name": "Polymaker Generic CoPA", - "sub_path": "filament/Polymaker/Polymaker Generic CoPA.json" + "name": "Polymaker CoPA", + "sub_path": "filament/Polymaker/Polymaker CoPA.json" }, { - "name": "Polymaker Generic S1", - "sub_path": "filament/Polymaker/Polymaker Generic S1.json" + "name": "Polymaker S1", + "sub_path": "filament/Polymaker/Polymaker S1.json" }, { "name": "Flashforge PA-CF @FF G4", @@ -1290,8 +1290,8 @@ "sub_path": "filament/Generic PLA-CF10 @Flashforge AD4.json" }, { - "name": "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json" + "name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json" }, { "name": "Flashforge PLA Silk", @@ -1866,8 +1866,8 @@ "sub_path": "filament/Flashforge PPS-CF.json" }, { - "name": "FusRock Generic PAHT-GF", - "sub_path": "filament/FusRock/FusRock Generic PAHT-GF.json" + "name": "FusRock PAHT-GF", + "sub_path": "filament/FusRock/FusRock PAHT-GF.json" }, { "name": "FusRock PAHT-CF @FF G4 0.6 nozzle", @@ -1894,8 +1894,8 @@ "sub_path": "filament/Flashforge PET-CF.json" }, { - "name": "FusRock Generic PET-GF", - "sub_path": "filament/FusRock/FusRock Generic PET-GF.json" + "name": "FusRock PET-GF", + "sub_path": "filament/FusRock/FusRock PET-GF.json" }, { "name": "FlashForge PPS @FF G4 0.6 HF nozzle", diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json index 76629e1a35..bd7ef806a7 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "M9HM8tihJzV4crs8", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json index e9a09ff347..1bbc7d1e11 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "08VjBSha6gjhJYgk", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json index 1572171a0b..9e7ebbdc89 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "JqgkmxnjlnQ3uw1u", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json index 5613453b3a..5e6b9ca06c 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "vvLLPvSeb5PYbT1R", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json index 13e5f089fd..74fb0b79e2 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "mPJMPfFCyfWdKzMO", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json index 35dc675173..81ee3e9c95 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PC @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HTgqTUTznOlfCRAd", "filament_id": "OFe6sfXS", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json index 2dfa04cea8..e8de847c00 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "3w8fnDjkoFaJ6Nhw", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json index 2fbb2e4ceb..993a4dbf92 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "owHbDqY55rFtSegz", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json index 50e2e88ee4..ff65c08991 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "eFK1zzT1JY9ZnEl9", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json index 667e3e9b01..0f6fa82220 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "E8CcstoHzax78ZJY", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json index 673304a79c..581d855fe0 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "xa22FD8bRVGsLiPJ", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json index dd2d7b107b..dee62ada5b 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "bZ9dbA8dIu9mjWyN", "filament_id": "OFUCpLaL", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json index 34d7bfb528..218d8add21 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "4w0oK3F50O1DUqsu", "filament_id": "OFogbnCb", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json index 14a76bbdae..1213313096 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FlashForge PPS-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "94vPnztRcpnbfAKx", "filament_id": "OFogbnCb", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json index cd32fec949..faa456baad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "filament_id": "OF5SJ3jz", "instantiation": "false", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json index dcf7ef2ea3..8ce05c7f1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "fgEYZ1Mgyp1AvtwU", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json index c77a70a68c..b3f51e2b63 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "cIxbQMVdG5K85rJr", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json index 421b590ffd..7457627179 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "9GXBeuCUrScJfmJB", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json index 9cb888633d..136856bf4a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NttDJCrfB01uwMDl", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json index 37946c87cd..79ecbbdf9e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJd6dG6OdEffEFC7", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json index 853695c79f..dcc92a46c8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8yFCuCnEuI3dUvQy", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json index 40d28d88ed..a824989281 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "np4fP5kghRlczOTT", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json index bfc919b8a4..050606e773 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "8o2maTFOXq0XR6Dm", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json index 108219a5e8..6055001320 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vCsjC0UnKenzIR0O", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json index b477796207..c4295d0a31 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xhxVdlmh5r7meoHo", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json index 85bd777649..30a2cdf399 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "6dlQN4Xhd6kGZ0Qn", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json index ae87f2228c..ea68716e21 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "r8WVFPozL8f5oLVJ", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json index 4486a2e487..95bc121e93 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "xw0pZNmhw1K4tPQ1", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json index d14e7a563f..b4b539a756 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS Basic", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "m6QLC2UaS3fW298i", "filament_id": "OFShw1X8", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json index e5c075681b..95fab6bbc4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nx3Px0Zu356IKShT", "filament_id": "OFi7Bf0F", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index 9fd47a1c35..92ed5ff1cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "d4EGsmMeEDCOUBF2", "filament_id": "OFi7Bf0F", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json index 802dfebe5e..4e5016999f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9ziPFKsjESbw1pXL", "filament_id": "OFi7Bf0F", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index 37f8d3d731..dceedb6fc5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "NzJJs6yrSik5xuyX", "filament_id": "OFi7Bf0F", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json index dd3efcaef3..1fe1013580 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", "filament_id": "OFtTYl9Q", "instantiation": "false", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index 19b021358e..4cd916c615 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "vaOyXUcrJ97KE7ZW", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index 1f0bc87211..c98dc7b59f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "iLWq5pJ3ox9EAM1Z", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index 37be38511c..8b80a1d1c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "i7PUPYxy0Z9weyyA", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json index 34a50c950e..012911ba4a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "w8O6oenp0NymzCqf", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json index 1abb8bb623..dc42f97981 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "thhmWRzNYLYJOeR2", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json index c75ee648aa..9cccf05b75 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g5jiz6Q6or23BIo7", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json index fd012e0f33..2b405b1fb6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "7xmWlHHNMvXBKdYS", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json index d6f71b0a72..ae0e3d9222 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "r0B8KfZ1mNWMvGqE", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json index 82cbd340b7..01a5604125 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CBLZqLhkwf5XKO12", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json index ec26d6d236..48e7d01b94 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Df3anJxiRXLVO9hw", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json index 016a57fd14..6c8441ee9f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nu4WvBWuEhazZfh5", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json index d24743172c..e30b784bfb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "hF0h4ye3hMDtEba1", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json index a523291c0e..ce18c5a69f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "3isZCWr4CBjFtGDX", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json index 5fb5d976eb..613efc2502 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA Basic", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", "setting_id": "SU6r879TbQMUFCij", "filament_id": "OFaBwRvT", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index 3645546f16..fed88f120e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA-CF @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "ap7X4nWKfFR53NT0", "filament_id": "OFq0TY7C", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index f001e6d54c..ddd4c96ba2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA-CF @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "kZXg6odPm5iW79Qn", "filament_id": "OFq0TY7C", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index af262a6497..9a37c4c7d1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge ASA-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "CI5dvVrCNk2XTU82", "filament_id": "OFq0TY7C", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index 0370e2b2ce..ae01f84a4b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "jUNUZhE0BJyB64fC", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index 44753a6a08..6658adabab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "0qMEqo9YMDLSVafs", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 2a0a4d7898..4e2fd50066 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ek749gIdUAPq6WxT", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json index 30704efe75..ed9d2cb9e4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "tEohTtyHofD6l6o3", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json index cd95f618c3..10127abb22 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "oLeLrIjFJzoZha3E", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index a495959b82..f050371f1f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HXGUlYY4X5IHhL3R", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 6e87c12697..02d5c02b8c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g22Cv3zy3h5BhJYK", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index 8c4e3c633a..a99c168faf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aDzBXuvN7IuSP5sa", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json index 3349b2ec63..436a4cba60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CIj24REX7BA8zPHQ", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json index 8afa83e8f4..3b2a22ccbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "yAGyGjF6uDrjfjLn", "filament_id": "OFaz8VoR", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json index 52d7d0ee40..081ede7bc4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "vOqAGzaYLz0XdRvC", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json index 84d7492956..8ea4960a88 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "KSuxZ3fpQz0khDSz", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json index fc78000e54..577b175cbe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "o4B1kAToVny7jw0M", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json index 2bd44a8bb0..30ccd1a277 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q9UbakUmZPzG3xU0", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json index 9bb1244b29..6e2c0ca19c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IL18Lu0qHx1RVqKD", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json index a1ca0f6985..33696f6366 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2FQib7fZjcwfCnm2", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index f21520aa0b..2b3722dd0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CtwOm90WWD4S7U6j", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json index a76d35fb6d..83ebdfa2b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "kvULpm0WhKiSPj8V", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json index 4bb3402cb1..cf4731f584 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CUU7knzm4cbe1giE", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json index a847ff25f3..78a554fec2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "gcYvL572cumWZdnl", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json index 84c3e94acc..b00acd32da 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "cx99AH0C575XxAj9", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index 23a73b4ad5..613a806f5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "RrrKoR7MVD8IFQlq", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json index c331466dab..aa7bf4a40f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "7VEPGuR16wNukAX2", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json index 5558ea98f9..8908833f96 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PETG", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "H9uwlPw6m6Nf7qH5", "filament_id": "OF5w29Kq", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json index dba18c4bed..d8dfd92fc6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5M 0.25 nozzle", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OmDped3weZ4uHAtY", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json index d10ef1e3e9..1f37c091d2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oD592bif4ra0ADco", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json index f83591bf3c..a8cf1c5bdc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ldhMY6F7v6nK8wwf", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json index 619b9e8767..ada09e1c19 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5vzOmbjHbkJXrgYM", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json index e8200e41e2..42f009212d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hzxRPyH1fqarsMuN", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json index 0b46b5fa31..fcb55d2400 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oJsLlIIpxwGSoJTv", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json index 5940d7d272..80c9e422d0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJbNZ381ERkZ0KUB", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json index dddf486229..5072e86227 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "BqavrNpwhXDXcZ3r", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json index 598d3c6cab..25a9130d9d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "cgf4Qk4iHZh7zHN5", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json index 2282b67e93..a1e58886d3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "p31K69Srld6o4sQ2", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json index 137f78fcd6..7217ec8854 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MwbYvnRIzlNmH81h", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json index 4506cf1d91..fcf7f8a8c7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rKhHmkqXYD2xN4K9", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json index 45e42ed61c..c6d61c696b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Dshsi3O7NvYYjXJt", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json index 1ee62a8bd4..a7fb05e8d6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mfnL6QEevCmTmOL0", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json index 1731aafb85..117fe724a9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AGLHrHKWye0YTtNK", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json index 986f32690e..806f9e4ed7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px8qzmB2yFLoNl83", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json index fc20600185..fecd582701 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "mwuIEsBz5bXEV68w", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json index 17b706989a..4ae6a84762 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "TielygFT88owWg4J", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json index d4832e08ae..f391f26c3a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "It2NI6OFhNEUvulz", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index bc73b031b3..a554fc2a59 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Qt3huWxoYpMEqEN6", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json index 5737b18c7d..f32d4697c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y3XuavnnOMoHLGHA", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index 5316d2b8b4..7eddf0b7b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2HUxAWeolJIlxPs1", "filament_id": "OFmQkb3c", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json index fcba520ff6..120d8b317e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge HS PLA", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vdaZBnDsmUC1fhDp", "filament_id": "OFnMv3W5", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json index b108289976..af9159b1b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "u7rolQaTQz9U6veH", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json index 44783f007a..14e5f098ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qTGTwiliWj3dSo9y", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json index dba15949a2..2f7836790f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "wAkuJRTLWxGyBU0b", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json index d2d2a93575..dd3a5801f6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "dbs29hQSQl9zuWis", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json index ac63380352..dbbb88d9ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "XGNPvS2ps7Xn2fpx", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json index e88fbf5126..6d34858446 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "h33iEGZ7wPeBYKYQ", "filament_id": "OFgf4gZa", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json index b4a40e769a..d0589f6b1a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "C4DfYuQgDXIgK7mk", "filament_id": "OFuGRMNV", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json index e2ab91aa24..6225424dc7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "Yu7hL4izNsgDVqMT", "filament_id": "OFuGRMNV", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json index 8f1f04ffdc..3fe0018654 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA12-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "1CevPV960sQWT3NF", "filament_id": "OFgeM7nD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json index 129ad8d648..8364fc4f3b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA6-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "NGbZ8pQVTRKw28kp", "filament_id": "OFZtOQtl", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json index 6654b78212..f3c1a27c16 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PA66-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "5pVoGBvbiUlrJSwR", "filament_id": "OFuV79ru", diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json index addb373157..19abc27d75 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PAHT-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "ZlpBAM9uaS01sWAJ", "filament_id": "OFuFqYyG", diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json index 764d274e76..dff2e68ddd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PAHT-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "9DaSYBA2OI7Jj5zS", "filament_id": "OFuFqYyG", diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json index f6899ad2e2..bc5485875b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PET-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "vflpXTS9GwnODQDH", "filament_id": "OFrjacXf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json index 6c5928993d..978245b58c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "filament_id": "OFMpxamb", "instantiation": "false", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json index f3fed78ca0..0d325d1c1a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Basic", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "YLLJ4xZI704GReej", "filament_id": "OFEMfQsX", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json index 7009c5a076..d685b38547 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "dFZ1MmHjj1AAIaMm", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json index d092644658..1a279d0591 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ro3rt7IAJrA5aZD6", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json index 17626d81ba..4f839ae1b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "cTxrnqzr2wVt4Nj7", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json index 9919a54140..5c41866971 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8x6yU2U8d5f67N73", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json index 30bbb96fab..df04115fd9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W0nfaSSZdg2HQkh", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json index f66c490c96..00878236df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AJcugKx4qHPJ3JAT", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index cbebb6da3e..b73e951307 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "R0nZuLXEo5qA6Mt8", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json index 1a3ee02fed..ccb1dd2f50 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ql2BBBymzqEG7GKk", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json index 7d48ccda00..c4f944cfc2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "KU5tDHAKja1sCoHm", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json index a83ba63b92..93664c46e2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "sb6jD3UZmb0DNIsC", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json index ab7bd22340..da54d45f51 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4BB1wJLtsXus5eyY", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index ac25f05323..b2f8087db9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "m7oJx47UMlFctMkX", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json index adc38f6d91..be118c9e69 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ozD2wU5UiORTtJsa", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json index 5940c47fe1..00fffab83a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Pro", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "IQfUoy7gTmVmBDL5", "filament_id": "OFPQfNAf", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json index 03bb077a25..fdc9c427d3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ht7wzk8l0b1kv5tZ", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json index d799a1dc69..bbe03ece1f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "NJFHpa5HFHIyHSWu", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json index 1a64752952..4e0de85100 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "UaObrRNSTwitC6jr", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json index df04fca6df..5c9ccb693f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "K8WkJmFy2V1zhYQO", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json index 31169455a5..7676d966b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LLK1hwKZhDU8SaGJ", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json index 776d9d1df4..63c046558f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LaUF2HJtBnpZF7Cd", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 1eda391a72..6adfb18f16 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "OUToXk8ddS1RPPUK", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json index df79bc8fdf..c8e5141713 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ywff8rI39XKjcocY", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json index 6dc5df0088..4ede8cb506 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "kuCvwo6Phr6Ywhm4", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json index 2ed7597e91..74d4250de0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Z2E69w9AevYg15tl", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json index 22c2061b81..d345b35e9f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RkQaxwTjhJK0A3zr", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index 22b4912e99..3d6abe6ff3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "YBQTMes2S9iJjKDf", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json index 315afb5acc..bf76cf5bfa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "lCngVWG3q0FWsnrG", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json index ac03de5fb2..450c5f33d7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG Transparent", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "3Gv6MJ3RRja5pbOM", "filament_id": "OFMyLYV8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json index 758901ff5a..d746b5348d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "bcqYod61blJRzhK2", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json index 6eb1aba29f..1b5c706120 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "CnFKOi7fFyS8QlKK", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json index 4143582646..0fbd657de5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "eKWJW36I5fVHwjWD", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json index 3d85ed39ac..c0145120d7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4EgMPzlVo1rTeQ1e", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json index f88e49c07a..fb095064f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "K9ME1F4oJkPi8jRu", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json index cb8e888fb0..76d459de35 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9jCp0gTjB3Mt95Mj", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json index 3341e1dd03..14be746810 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "d5OleuNNZBJK9vxH", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json index f8c30e4f18..c92b4aa162 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PETG-CF", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "MpG61mwVUtJ7t602", "filament_id": "OFBK6zAi", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json index 5fe939a7b7..2db42a7b5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "instantiation": "false", "filament_vendor": [ diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json index e280847ff0..6248751055 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "gMmhMDqjmJfAYcbV", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json index a61f208b0f..d9041d25b7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "0OsrtqfIxrEJMwac", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json index 949a7ab6a0..110048dba4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "fuzWVrfZqekMETLK", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json index f7b96331ac..d0b03d8959 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R54l7TcwsjdPHvNB", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json index b748b785aa..a898615cfc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MELEwYupDkT2DPxL", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json index 0e01a20dcf..8a98aa4445 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uGLvOoPAfksLO43M", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json index 58b72386e8..c9cb6c8711 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "gGpKvk3rnLuTjOwo", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json index f4c16daaf0..94fee218f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Yopqnj4b5ZVwigGx", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json index 1af3c298cf..0714764c1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QEfQrqMwApuSMqih", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json index c42a17fc29..afa79d4382 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "BAPIn3eJAPGpscRJ", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json index 7a7344c225..1b7bd7a1dc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "44BmRNRb6vlPq8qe", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json index 36a89b5dba..8f77560323 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "ltJbhoAeAec9gxrS", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json index 3d13adcc0c..6cf9a832ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "GxdZiXdqns72ibQl", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json index 7640ec0834..8582b545c9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Basic", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5XKGaHUjxHECbnHO", "filament_id": "OFIxitiU", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json index b58b98fdd8..2728623e2e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "H8IStdO8zEfSLYVE", "filament_id": "OFQZeyZv", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json index 29dedf8f7a..538d1415f1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4wlkoKnU2bA7xhYO", "filament_id": "OFQZeyZv", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json index d0df8cd605..45e7ed6a32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "TF6BeOl0patjpPaa", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json index 105291c048..ed65db080c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "nkYeEBo8NdkJulAP", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json index c8650a1a1c..70991dff2d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "yEDfsOsogfZbNBVX", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json index 99a720a226..9c64cff73b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "G2Et7kPHptMESzQ0", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json index 0fb2690255..f57fbdc47d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zsOdmFGBSF9UySMN", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json index bceeaba05a..963bd8152d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oxRMuvBMu9qdQWUQ", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json index 3887ded589..608ef77d24 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "5hwNJvvLtb75XBBg", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json index d0fba1bec2..78d56a62a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mGj8VEyOnnogpkmF", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json index 29ada76335..9070fa4762 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "JDcRA6apekWLXPvH", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json index dc01f07d81..01b3800053 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "b5GJpvKYktP4vZpj", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json index 6dbe02b473..78aa762193 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RjUpQV6iQxTircwj", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json index 0e2690d93c..0241ed5dba 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "9DEZ6SmFdgfluhsR", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json index a3696383cf..7d3aa644c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "girTMkusNTfY04rz", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json index 030d4d1ff4..75e3bc1a3f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Color Change", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "pCQ2qmeXUyJzP7kS", "filament_id": "OFkwIWwc", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json index 4928bc3891..d48f2944b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "y8TNaRebTrmFem10", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json index 2a7e7616ba..17a2bd1120 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "qju0AMvvq0B5Glny", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json index 97cd5bb9be..06e76b0a60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8gGBOEcNvlbZxGW", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json index d3cc825ed6..aa3a164d86 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "koEC7DteUoXHUd2z", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json index f684c8b47b..0517355c72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "D69fWcXioFcpoUjC", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json index 5cb479f1a4..2982fcfe42 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rfiQUncdSExEaK0U", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json index 6018aad13d..ef995df080 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "WX8lK8efXIVcpjFf", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json index 8588d194f0..a301208f82 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Tzvo3oILQJc4SQko", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json index c4785481f0..9b00f47fc6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y5gm20O4yCCDIoC0", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json index b2a142d9bd..c92d0c95c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "80vSQxnHfd5ZUy5h", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json index 0137ac7348..fc02069f65 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UZi7T5VoasmXWyH5", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json index 96aa6babdf..c86fa47d2f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "6UlSb4fqHIMdMxkO", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json index bb1e1d9513..22b40f77bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "H2Cr4B5VUaxyYsN0", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json index 99727f9217..ffff2b3523 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Galaxy", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "NJrc0UZ54Fq8MaqF", "filament_id": "OF5NQFKI", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json index 58ef1320d5..5898b4c1c2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "GdvXL8SrKrYHxSgZ", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json index a58b30c6fe..227d392df3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SLYD2YcQTQgbSjIF", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json index 9f8bbf2127..0b7704be7b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "kOobFSlqEG9Qe0d1", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json index 6be800cba6..1dd346734f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xPPSRmadqfqCtRF2", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json index 7b49141fd8..19db33c12b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aWVXIk1xVa9URR1D", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json index 1063943964..85732db257 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "KhBF7hHHVPzqiAca", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json index 34929db7ab..4a47c2e41d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "sTplnj3gMAzwtLWE", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json index 2944c6ba8e..aab7e584c9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vXPXOKD8vNJlujM1", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json index 883241624e..01c99d30bd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "purqxjmWiflDrnik", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json index 1daf6897b9..e11842c15a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qraQ97uusigB63hv", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json index d8735d275c..049325af4d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Z1NCX8XMyIVlOlWn", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json index f1ab00b390..e8f02f10a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Luminous", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "s620OFLTgFT4Ds2A", "filament_id": "OFMIma8C", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json index 1f7bd2b1da..9788577dc8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "BVmVfNCuy8HDhcEI", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json index 8b85ad1f7e..b044ecd47f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "WRMePGzDGdEGiqNv", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json index 4f7b782d7f..1cdea005e4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "thnbuaLDDlGrkrdY", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json index 0a5772910a..28809dc1c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8b9q1FfVljPmKoEt", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json index 7ac6952363..2a2ac35fa8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o9dOrLgL6efF19O1", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json index 3154dfabc1..d3d9ac763a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QoRmDvhoeGi6Z2xv", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json index ec55501821..2cc4d75091 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "dHyuoORAUGLtlGkJ", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json index 892a8d513c..bc2daed905 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OgqVyIHfy3U8Dc6d", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json index c5338f91fa..fa2c6322ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "feXpVbDM5ON5mwg0", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json index 589fc96f12..8ae39f5623 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XMnZQ1AxXPJqpqRX", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json index 8a2cc0815b..e8a01ae3e0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Ke0bRKPNKSsVMO1Y", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json index 14ee3d9ad6..55571d70e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IRC2n4GaofxvvyTt", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json index c19e58a5df..75b6007012 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RN4wdTL0qccM4huZ", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json index 989bed63b3..60488f6338 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Matte", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ipMevDMORKqZYdvD", "filament_id": "OF1bQyX2", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json index 45b9d0d7d4..231e4cf895 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "uusF7Vz94HOwoQF0", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json index 3f595ba93f..92a867b768 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "sHZWzrZO8PP0QYZR", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json index 4dc8a9d226..22abaf206a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "bxwjEFI8HmNY8JI6", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json index 1c40ec5691..682889ba46 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "5xqdqoj2l50FegPF", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json index 035d431419..da2e664b20 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R79SbWA9i2OAu2ee", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json index df92bc3004..56b51fbb39 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zjIN4KzIOwI1VwOc", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json index 7828b38822..aa615d6c52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "UxMNNil2KnWvAJ4q", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json index d9e6e0ec27..18240ff4ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "57i6iKrVYUS5UiBT", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json index 6b8014dff1..a8eea524f7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IYPw8a9tkpuf95uH", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json index 84429816a4..eebeaeb9d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "I0bULoVAbtVfQoCy", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json index 057c05a51f..48206bc4e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "DbPo3ay2e4a002AB", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json index d9f64c3634..8d50a6ad0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "uztv4hhm2O3T93zZ", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json index 9323d094ef..cd239560be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "UFWWrhfgS7N36Y8W", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json index 3a28540dbf..368782f0fd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Metal", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "UD5i0ijsirfieUvb", "filament_id": "OFvVxvzZ", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json index 6a24a22501..b25c6b56ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "t9lPSFnwLDk0ARIp", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json index 14fcccf62b..d0a7d88e4f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SBSlOEwZSvZHeX4r", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json index d26813d36c..f276a6e671 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "DbWTm2H71izMWmpx", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json index c7913ee0a9..e7b16bb162 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YcXuvz3qYHtVoWxv", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json index 8747bf9e8f..400fb84d2e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "prItyXNphhuPCAce", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json index 63b0c9a162..f044a481b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "83zDmjaAgxxIt7KU", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json index 1b1a3c059c..c40c210005 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px3O28Olb9LExqfT", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json index 2d5f18b2c4..71ad06d85a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "QYgsCCHP3Khqrzh3", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json index 730a9ee7d9..aaab161802 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1ro9wHPYhuMHNiYe", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json index 24afad6fd5..20ee4d7163 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W4a7c9ugUVwvvmn", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json index c8dc7de4cb..804c28cfe1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CloRo3qxvzxHZuIP", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json index e677dfe51b..b0f9655605 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "QgUbP07tIXmFysEb", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json index 3edd253b70..50db881fc0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "6mvGOtkPZT6ROboo", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json index 880e0e1ff1..2924f05d13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Pro", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vI875WYbMyQeMwlh", "filament_id": "OFK74HJD", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index a5bdb3ae12..c39e501f5c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "YH9IHXOFMKwcTLyA", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index 6541cbefb5..58d57b30c2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "IfAieG0OAG807xlu", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index a98c508f95..dc7fb68745 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "N6J7QqQ7TIgM3MyW", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json index 4e99c711c1..0f6d8e0bbe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2GZp8yjrY1OioFDi", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json index 1e92e0d029..284128710c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "U0XtCVUhIMnidhbR", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json index cb7dc03904..72d48ebb9b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8j9kaYy3ghkF81Cu", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json index 6eff5673c5..00ddedabc1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "E0LeJwSxaniDkB0b", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json index 3f6a7428ea..536a4ac8ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "8rggqgJ9kg9yLE28", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json index 2cc8db6387..96cc519bb4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uY4OWhIytHMz4rWq", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json index d77fc03f37..de21757695 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YSkkXd9EhhEHvGpf", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json index 9f890d3ae4..7a3f814c62 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XlxXZj9Wi1D6IwCE", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json index 030ea7370f..2723288b7d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IPyXBSnMCAikjI9V", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json index 16f980a35a..7837f5d704 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "f3gJsovSmDKoA7BP", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json index 7be8b80605..16a44d9bf2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Silk", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "vZb7BvbyVWkZv3rR", "filament_id": "OFLYDIb8", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json index 4c0cf846e9..96d39efa5d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8lsEnMIiHHorJhb", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json index 173557e7cd..ee4824a8dd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oXlxQJY0K6Dnri7e", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json index 0bed0a94ad..06c4d3fb57 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "XKpFulrvvrfE56va", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json index 94ef846a7e..296b827e39 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "yeh5cd0tAHtHzdoQ", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json index 1ce68966df..9dbe7d7af0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q2Zi0YluaYpG3Ktf", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json index 6d95754110..1eafaf0b40 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "1qXV6AJqPpAwX1YK", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json index 70c9c99c7a..1d93c10b5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "YsyGGOGqUVkEqkIr", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json index 685625a28b..6459a6f8a8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UVvd018dTbygqTgy", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json index e9714994cc..410394cbce 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "F0k8kkgWM5FkLAzo", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json index 964a187d38..7ecddf5859 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Oapl8InwbkwNSIDl", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json index 34a5114484..0554f047e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "NiB6Yb4b0auyn9KQ", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json index 659909085f..ca024d690b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA Sparkle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "LYtdPgec1hBLhoQA", "filament_id": "OFec7Qiw", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json index 8367f7e01b..8bb0d6980f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "QRyISvTy06kCwxKo", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json index 60f17b2196..f63829709e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "rmnF24E3SuwzRscH", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json index f719c895cd..2939f9ee4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "BXPI5Pkp7a6pLrCh", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json index 3d493c1bf7..e441facb7d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9PgjgxU7pLl2Dfpe", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json index 011065f34f..f2b5662c13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RuNKzuIsw7F1ogmG", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json index ee56dde5d4..62dd7a9ee9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YPuMCHNGDWh0FpIB", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json index 3baeeccc60..7958393b2b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "3uC056Y171ZjnQE6", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json index 85527a625a..5466774689 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-CF", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "JxNlb64lTODaaQhU", "filament_id": "OF2bZtyg", diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json index 67c45b439d..07744f726a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "filament_id": "OFGc282l", "instantiation": "false", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json index f05cbff817..51578f824a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPA-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "MFItX51zZO0KYjdk", "filament_id": "OFLC1oRH", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json index 140f6c5dea..e6f3519e1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPA-GF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "KITjZXcyM4N8cVyu", "filament_id": "OF5BN24W", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json index b543ea7215..c8a1c2d800 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPS @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "6NjEQ6RJKUAOrSLw", "filament_id": "OFxMGIPt", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json index 10ebf9f302..76257267fe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPS @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "vFMKqNjQjlNxwvDI", "filament_id": "OFxMGIPt", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json index 0b1139bf47..e4ee9e483e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPS-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "oSGlx5mtGh07BnOz", "filament_id": "OFTSXxzE", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json index e7fac74763..dce01c64a7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPS-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "i5DllSvYjVPO04Su", "filament_id": "OFTSXxzE", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json index 19630dac6a..ba10c3fadc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge PPS-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "l3dYtVM52X0UMRix", "filament_id": "OFTSXxzE", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json index 4e2a345147..f3625e4bea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "f75oElm4zB0hukIj", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json index a90c599c43..c08ad7948b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o4KYTpJF6KksX2mg", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json index 8c9d19de43..e0d6448c72 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HUSkDZL6rCpz0lRk", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json index 43d235a9ba..a37ab23204 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8xgu0AnMuKbPWyVd", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json index 23e2cd0e23..a9ceca338a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Rgqt3MjxOye5EaFt", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json index 6d8d7ce10d..df74375b18 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "PBFsW5qhVbQteYh5", "filament_id": "OFKpQTJI", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json index 952b10fa12..6eca69f2b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "TPbHmcFyPyjvoERv", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json index 626c5891bc..c0e5b624e4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "zLMgsyDmdoXHhqFv", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json index d084aa4b46..06a632a6c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "ThakVhjfpgnAlEVH", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json index 262c9c9e47..676484711e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "M0ozqaD3jSKoD6fm", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json index 649ef446ef..01fd9f2752 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ob8IkvzNt9CWCzbk", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json index 8eb722c51f..9f72e9eaca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NzxX1lyRJ7wLUihV", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json index 08a4033ee3..ecd3bbb764 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "4FIGiheSGvSJPw3s", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json index 9dc4916ba9..bcfe2516a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1GNqSBaQitzhYSx7", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json index 8a0c8edacd..22373250ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "eOhMygyxaccdov7o", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json index 1e35a008af..7d393a9b9d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LxooKiOkRncktNLf", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json index bca2a33ba0..cdcee7c997 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "HdoJfbQr0uwQ6Vwb", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json index 6352a73829..c3042b14b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Flashforge TPU 95A", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "J4EaFhnpkLDcl5wH", "filament_id": "OFAf9pJF", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json index a9a3418254..8aadbbd478 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "2JQjReK012FHpHIt", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json index 18df8ac124..08fd04115d 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "3SCkpXXK8VcQBMQn", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json index 0f1754ae6c..093175981e 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "dgpcOrf7282LTh1d", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json index d6a0d3bd5d..0fd54aa769 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "e85SCr6SV9kQD2hm", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json index c6970afe6a..b3f46d40f3 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "eGXsHN5B9BZViVNe", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json index 70d29c3c5d..1b4848c0d8 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "8JSb4JqZ7zLi8uPI", - "filament_id": "OF42ZDpN", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json index e7647aff3f..4b212a6283 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json @@ -4,8 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "gZqAGVOlWR79n7hN", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json index a8dc9a771b..a9e1bce236 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json @@ -4,8 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "nJF1lCOavNNh4yHs", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json index 4bb5bfff69..5e18b7b64c 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "TZ0nKqxoIYk2mPh8", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index 4ae7d696a8..f8595f254b 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "nH6pwFYsPyBzL1EB", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json index d359420582..adc2063edd 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "yok12IOGZzGot5Ll", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 8ef405d524..8634877859 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "wmWMf3MfmbfZx2o8", - "filament_id": "OFYtS9zg", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json index 4befc54c32..c1d48bf1ff 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PET @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Xqb0GQluin2jUQyL", - "filament_id": "OFBC32Wb", + "filament_id": "OFKTGKJU", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json index 0d57937da9..97aaccc69f 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "A8PDgw1jZE2m3bem", - "filament_id": "OFB8wSps", + "filament_id": "OFDu1qE7", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json index c9eb3cafd7..3e7c8023ad 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "Iy5lHY4ihEKPgJ5x", - "filament_id": "OFB8wSps", + "filament_id": "OFDu1qE7", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json index 7f07f612f6..c88a329872 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Kdeg55RzLMYhqYMC", - "filament_id": "OFB8wSps", + "filament_id": "OFDu1qE7", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json index a3c7a4372e..d2e10d6c41 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "JXf7KCy4KY65xuzO", - "filament_id": "OFB8wSps", + "filament_id": "OFDu1qE7", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json index dfdd46fb57..c5d429456d 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json @@ -4,8 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "O3tz36NNMoagELL0", - "filament_id": "OFUScM0D", + "filament_id": "OF0AquDh", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", @@ -57,7 +60,7 @@ "; filament start gcode" ], "filament_type": [ - "S-Multi" + "PA" ], "nozzle_temperature": [ "280" diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json index d84fd5aeb0..bb1ccc7292 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json @@ -4,8 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "Gg9H6I32fOqoLSqE", - "filament_id": "OFUScM0D", + "filament_id": "OF0AquDh", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], @@ -63,7 +66,7 @@ "; filament start gcode" ], "filament_type": [ - "S-Multi" + "PA" ], "nozzle_temperature": [ "280" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json index 248fbb5ce1..b895fd4370 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json @@ -4,8 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "pV5QERvRuROIZTOa", - "filament_id": "OF6WddJ1", + "filament_id": "OFCn83wF", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", @@ -51,7 +54,7 @@ "; filament start gcode" ], "filament_type": [ - "S-PAHT" + "PAHT" ], "hot_plate_temp": [ "80" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json index 538d1e5c0f..6845961090 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json @@ -4,8 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "0i7VkquM4n0uFaXH", - "filament_id": "OF6WddJ1", + "filament_id": "OFCn83wF", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], @@ -57,7 +60,7 @@ "; filament start gcode" ], "filament_type": [ - "S-PAHT" + "PAHT" ], "hot_plate_temp": [ "80" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json similarity index 94% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json index 088e4ac1b7..249060ab5c 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FusRock Generic NexPA-CF25", - "inherits": "Flashforge Generic PETG", + "name": "FusRock NexPA-CF25", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic NexPA-CF25", "from": "system", - "setting_id": "TZDKsooodaGVkM4m", - "filament_id": "OFZ1hANN", + "setting_id": "sVoga8454H2oKuKI", + "filament_id": "OFjt8dDO", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "FusRock Generic NexPA-CF25" + "FusRock NexPA-CF25" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json similarity index 78% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json index ebd0a01ed4..b1112d508d 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "FusRock PAHT-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle;FusRock Generic PAHT-CF G3U 0.6 Nozzle", "from": "system", - "setting_id": "NdNRNhmsHgHRnz1Z", - "filament_id": "OFPjOUtz", + "setting_id": "axB3SEA3AC7rmxiZ", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" ], @@ -37,7 +41,7 @@ "5" ], "filament_settings_id": [ - "FusRock Generic PAHT-CF @G3U 0.6 Nozzle" + "FusRock PAHT-CF @G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json similarity index 94% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json index 5b959efeae..d47b7f865c 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FusRock Generic PAHT-CF", - "inherits": "Flashforge Generic PETG", + "name": "FusRock PAHT-CF", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PAHT-CF", "from": "system", - "setting_id": "fR7maJwWmteJ7bWY", - "filament_id": "OFPjOUtz", + "setting_id": "OGhhxVvR4O4VYuCK", + "filament_id": "OFKW5hEW", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "FusRock Generic PAHT-CF" + "FusRock PAHT-CF" ], "filament_shrink": [ "100%" @@ -180,7 +181,7 @@ "40" ], "filament_vendor": [ - "Generic" + "FusRock" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json similarity index 72% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json index c35726f024..0e29324831 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json @@ -1,16 +1,17 @@ { "type": "filament", - "name": "FusRock Generic PAHT-GF", - "inherits": "FusRock Generic PAHT-CF", + "name": "FusRock PAHT-GF", + "inherits": "FusRock PAHT-CF", + "renamed_from": "FusRock Generic PAHT-GF", "from": "system", - "setting_id": "gLG1R5gtdliSlnZJ", - "filament_id": "OF2RjrWH", + "setting_id": "yJJEULB0ra4GAS8Q", + "filament_id": "OFcVLpNA", "instantiation": "true", "filament_max_volumetric_speed": [ "15" ], "filament_settings_id": [ - "FusRock Generic PAHT-GF" + "FusRock PAHT-GF" ], "filament_type": [ "PAHT-GF" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json similarity index 78% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json index acb65a33dc..b82f7ef4a9 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "FusRock PET-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PET-CF @G3U 0.6 Nozzle;FusRock Generic PET-CF G3U 0.6 Nozzle", "from": "system", - "setting_id": "AaGdNgYaIIZyZBiW", - "filament_id": "OFRujL0v", + "setting_id": "Gyw0XH6UtYQqtgx9", + "filament_id": "OFDu1qE7", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" ], @@ -37,7 +41,7 @@ "5" ], "filament_settings_id": [ - "FusRock Generic PET-CF @G3U 0.6 Nozzle" + "FusRock PET-CF @G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json similarity index 94% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json index a526ad1e0c..4dee20a476 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FusRock Generic PET-CF", - "inherits": "Flashforge Generic PETG", + "name": "FusRock PET-CF", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PET-CF", "from": "system", - "setting_id": "jJVDAlGTt1QJlbn8", - "filament_id": "OFRujL0v", + "setting_id": "nGtsrswmS2Fj4Uev", + "filament_id": "OFDu1qE7", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "FusRock Generic PET-CF" + "FusRock PET-CF" ], "filament_shrink": [ "100%" @@ -180,7 +181,7 @@ "40" ], "filament_vendor": [ - "Generic" + "FusRock" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json similarity index 69% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json index e80c963649..6a224aded2 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json @@ -1,16 +1,17 @@ { "type": "filament", - "name": "FusRock Generic PET-GF", - "inherits": "FusRock Generic PET-CF", + "name": "FusRock PET-GF", + "inherits": "FusRock PET-CF", + "renamed_from": "FusRock Generic PET-GF", "from": "system", - "setting_id": "IEpmsltdjoCu2txJ", - "filament_id": "OF4zzGwp", + "setting_id": "ZFIkUVZOklX8jUrT", + "filament_id": "OFzwA5Z9", "instantiation": "true", "filament_max_volumetric_speed": [ "15" ], "filament_settings_id": [ - "FusRock Generic PET-GF" + "FusRock PET-GF" ], "filament_type": [ "PET-GF" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json similarity index 77% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json index 963d3ab54d..80f5577529 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FusRock Generic S-Multi @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "FusRock S-Multi @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-Multi @G3U 0.6 Nozzle;FusRock Generic S-Multi G3U 0.6 Nozzle", "from": "system", - "setting_id": "foH2sa61cDy12TzH", - "filament_id": "OF6rMr3U", + "setting_id": "HvimUHzfNcDRrUBq", + "filament_id": "OF0AquDh", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" ], @@ -31,7 +35,7 @@ "5" ], "filament_settings_id": [ - "FusRock Generic S-Multi @G3U 0.6 Nozzle" + "FusRock S-Multi @G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json similarity index 94% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json index 9ebf2fcdad..895d10aa12 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FusRock Generic S-Multi", - "inherits": "Flashforge Generic PETG", + "name": "FusRock S-Multi", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-Multi", "from": "system", - "setting_id": "gQLoSJ7xGEdOd8kr", - "filament_id": "OF6rMr3U", + "setting_id": "zAqGdmTsz4Z0qbaa", + "filament_id": "OF0AquDh", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "FusRock Generic S-Multi" + "FusRock S-Multi" ], "filament_shrink": [ "100%" @@ -179,7 +180,7 @@ "40" ], "filament_vendor": [ - "Generic" + "FusRock" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json similarity index 77% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json index b3b537bfb3..858da9c1bb 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "FusRock S-PAHT @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-PAHT @G3U 0.6 Nozzle;FusRock Generic S-PAHT G3U 0.6 Nozzle", "from": "system", - "setting_id": "6Z5vce5YKlCGox8v", - "filament_id": "OFCaJHAA", + "setting_id": "JUiz70mbp7RRSPia", + "filament_id": "OFCn83wF", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" ], @@ -31,7 +35,7 @@ "5" ], "filament_settings_id": [ - "FusRock Generic S-PAHT @G3U 0.6 Nozzle" + "FusRock S-PAHT @G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json similarity index 94% rename from resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json rename to resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json index 66c208d2d3..792b12c949 100644 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "FusRock Generic S-PAHT", - "inherits": "Flashforge Generic PETG", + "name": "FusRock S-PAHT", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-PAHT", "from": "system", - "setting_id": "kMYDFSwivzTjFo2L", - "filament_id": "OFCaJHAA", + "setting_id": "mBQzgKKsV8Qo3gAr", + "filament_id": "OFCn83wF", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "FusRock Generic S-PAHT" + "FusRock S-PAHT" ], "filament_shrink": [ "100%" @@ -179,7 +180,7 @@ "40" ], "filament_vendor": [ - "Generic" + "FusRock" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json similarity index 60% rename from resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json index b290e46444..cae13c67c1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ABS @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge ABS @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ABS", + "name": "Generic ABS @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge ABS @FF AD5M 0.25 Nozzle;Flashforge Generic ABS @FF AD5M 0.25 Nozzle", + "inherits": "Generic ABS @Flashforge", "from": "system", - "setting_id": "NWEY6ZxkUS8jqNU2", - "filament_id": "OFLDSqqi", + "setting_id": "1ourI1GmgyKWFsnl", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", @@ -13,7 +13,7 @@ "Flashforge AD5X 0.25 nozzle" ], "filament_settings_id": [ - "Flashforge Generic ABS @FF AD5M 0.25 Nozzle" + "Generic ABS @FF AD5M 0.25 Nozzle" ], "fan_max_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json index d4947b14fb..3af6c25d2b 100644 --- a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic ABS @Flashforge AD4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "lS237JRDRMQgJFzd", "filament_id": "OFY9muEs", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json similarity index 73% rename from resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json index c49638eda5..0176ef471f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ABS @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ABS", + "name": "Generic ABS @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic ABS @G3U 0.6 Nozzle;Flashforge Generic ABS G3U 0.6 Nozzle", "from": "system", - "setting_id": "OaXiy7DI5bOAiaYb", - "filament_id": "OFLDSqqi", + "setting_id": "tzuKCtXYbGw6WB2c", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -25,7 +26,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic ABS @G3U 0.6 Nozzle" + "Generic ABS @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json rename to resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json index 7e53c24675..8422875984 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ABS @G3U", - "inherits": "Flashforge Generic ABS", + "name": "Generic ABS @Flashforge G3U", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic ABS @G3U;Flashforge Generic ABS G3U", "from": "system", - "setting_id": "Cfd7Q1nGwqxI5Ngh", - "filament_id": "OFLDSqqi", + "setting_id": "dxCNYDhcaJqAfDpR", + "filament_id": "OFY9muEs", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic ABS @G3U" + "Generic ABS @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json similarity index 88% rename from resources/profiles/Flashforge/filament/Flashforge Generic ABS.json rename to resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json index e93a8a294d..a7cfc16967 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ABS", + "name": "Generic ABS @Flashforge", "inherits": "fdm_filament_abs", + "renamed_from": "Flashforge Generic ABS", "from": "system", - "setting_id": "uygAzLWRQiCIJ8jh", - "filament_id": "OFLDSqqi", + "setting_id": "CJXM3PoVEjf4kYnz", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json similarity index 64% rename from resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json index a661419618..863936bc35 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ASA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge ASA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ASA", + "name": "Generic ASA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge ASA @FF AD5M 0.25 Nozzle;Flashforge Generic ASA @FF AD5M 0.25 Nozzle", + "inherits": "Generic ASA @Flashforge", "from": "system", - "setting_id": "spSRbidSN2yeZLhD", - "filament_id": "OFRPEs5o", + "setting_id": "aVpIQgRllsYZKRg0", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", @@ -13,7 +13,7 @@ "Flashforge AD5X 0.25 nozzle" ], "filament_settings_id": [ - "Flashforge Generic ASA @FF AD5M 0.25 Nozzle" + "Generic ASA @FF AD5M 0.25 Nozzle" ], "fan_max_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json index f823512bcf..42f9b00a60 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Generic ASA @Flashforge AD4", "renamed_from": "Generic ASA @AD4", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", "setting_id": "tq7YmJohYaNiPplE", "filament_id": "OFLPAxz3", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json similarity index 76% rename from resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json index dab6446048..3ecb1b1c67 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ASA @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ASA", + "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ASA @Flashforge", + "renamed_from": "Flashforge Generic ASA @G3U 0.6 Nozzle;Flashforge Generic ASA G3U 0.6 Nozzle", "from": "system", - "setting_id": "gVLGkoCoyrWL4DQr", - "filament_id": "OFRPEs5o", + "setting_id": "9wfcw1ifKVGOXx5G", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -31,7 +32,7 @@ "10" ], "filament_settings_id": [ - "Flashforge Generic ASA @G3U 0.6 Nozzle" + "Generic ASA @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json rename to resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json index e1f8b58fcf..20a3e61da2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ASA @G3U", - "inherits": "Flashforge Generic ABS", + "name": "Generic ASA @Flashforge G3U", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic ASA @G3U;Flashforge Generic ASA G3U", "from": "system", - "setting_id": "c6IMgUyqOeS2HFWw", - "filament_id": "OFRPEs5o", + "setting_id": "N1vm5hhMHdSNvUwk", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic ASA @G3U" + "Generic ASA @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json similarity index 95% rename from resources/profiles/Flashforge/filament/Flashforge Generic ASA.json rename to resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json index 0466c5af9a..b80ad322c3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic ASA", + "name": "Generic ASA @Flashforge", "inherits": "fdm_filament_asa", + "renamed_from": "Flashforge Generic ASA", "from": "system", - "setting_id": "jMCunppmYOH5QIra", - "filament_id": "OFRPEs5o", + "setting_id": "tzs0HcyEZow99A2J", + "filament_id": "OFLPAxz3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json similarity index 75% rename from resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json index c5097dca7c..84c43def44 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic HIPS @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ABS", + "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic HIPS @G3U 0.6 Nozzle;Flashforge Generic HIPS G3U 0.6 Nozzle", "from": "system", - "setting_id": "b3CFhGGnZLzpyAWa", - "filament_id": "OFYl0c8v", + "setting_id": "wsAmSziSQ4UEHucg", + "filament_id": "OFsFon5l", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -31,7 +32,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic HIPS @G3U 0.6 Nozzle" + "Generic HIPS @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json similarity index 94% rename from resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json rename to resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json index 31dbe0e60f..3012161923 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic HIPS", - "inherits": "Flashforge Generic ABS", + "name": "Generic HIPS @Flashforge", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic HIPS", "from": "system", - "setting_id": "n68nw5tzKZ0rq43O", - "filament_id": "OFYl0c8v", + "setting_id": "zMQa7Squ3p3jKYwB", + "filament_id": "OFsFon5l", "instantiation": "true", "activate_air_filtration": [ "0" @@ -153,7 +154,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic HIPS" + "Generic HIPS @Flashforge" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json similarity index 71% rename from resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json index 4b4a6224bd..558a420640 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge HS PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic HS PLA", + "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge HS PLA @FF AD5M 0.25 Nozzle;Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", + "inherits": "Generic HS PLA @Flashforge", "from": "system", - "setting_id": "1cvcaoBFNbg2GucE", - "filament_id": "OFLrdHse", + "setting_id": "DWsED5ish5gru5mt", + "filament_id": "OFvxghTE", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", @@ -13,7 +13,7 @@ "Flashforge AD5X 0.25 nozzle" ], "filament_settings_id": [ - "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle" + "Generic HS PLA @FF AD5M 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json similarity index 96% rename from resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json rename to resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json index 48b701953d..b6b4f26221 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic HS PLA", + "name": "Generic HS PLA @Flashforge", "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic HS PLA", "from": "system", - "setting_id": "foG37d7HZKgt6l43", - "filament_id": "OFLrdHse", + "setting_id": "GTqLzBcGP2Rmmc9X", + "filament_id": "OFvxghTE", "instantiation": "true", "bed_temperature_difference": [ "10" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json index 906b5af508..366dd8ec5a 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "cvJIaPzb0uJLipX1", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json index 83744365bd..7e4f3adacc 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "wguPruY9M7GcMt6q", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json index 0e279cd8cb..33a832c216 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "EhobwmFIEg5Cs5Ki", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json index 77114b937f..82ddf2067c 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PET @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "JvdxJyy7xCm3F0xH", "filament_id": "OF6MOPWx", diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json index 68d26b5ff5..6075390527 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "FtwGLcPMQqKw5uKW", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json index 9a6a079a2e..c26ba6d204 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "lrnsjoh8DtnTcT7g", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json index 222c3f3085..731a8b0a27 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Th8rzyWoINHBwgcw", "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json index 346c467bd6..f1d33a0d09 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PET @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "1Lyq9gOfcZ5hPIdW", "filament_id": "OF6MOPWx", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json similarity index 58% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json index 9d4acd8d24..0a54e7aeff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PETG @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PETG @FF AD5M 0.25 Nozzle;Flashforge Generic PETG @FF AD5M 0.25 Nozzle", + "inherits": "Generic PETG @Flashforge", "from": "system", - "setting_id": "KerUxwPsSEKDO6jL", - "filament_id": "OFZHgTVI", + "setting_id": "RyssSqtvE99XGdpZ", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", @@ -13,7 +13,7 @@ "Flashforge AD5X 0.25 nozzle" ], "filament_settings_id": [ - "Flashforge Generic PETG @FF AD5M 0.25 Nozzle" + "Generic PETG @FF AD5M 0.25 Nozzle" ], "fan_max_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json index d18f7bc5c4..3308abfa38 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG @Flashforge AD4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "6vtyYCWYY10OPMbz", "filament_id": "OFYPdQJh", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json similarity index 72% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json index 8b452d3759..77095049c2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG @G3U 0.6 Nozzle;Flashforge Generic PETG G3U 0.6 Nozzle", "from": "system", - "setting_id": "W7pWKQ2EWAB5viV1", - "filament_id": "OFZHgTVI", + "setting_id": "ptfqxSWRVMFXRqzD", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -25,7 +26,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PETG @G3U 0.6 Nozzle" + "Generic PETG @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json similarity index 73% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json index 288f028eac..f0ebbde186 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG @G3U 0.8 Nozzle;Flashforge Generic PETG G3U 0.8 Nozzle", "from": "system", - "setting_id": "eDQb2WfDsUTvj2Nf", - "filament_id": "OFZHgTVI", + "setting_id": "UhrHMgzzppLirT8M", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" @@ -28,7 +29,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PETG @G3U 0.8 Nozzle" + "Generic PETG @Flashforge G3U 0.8 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json rename to resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json index 85e54ec1a6..119b9e3349 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG @G3U", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG @Flashforge G3U", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG @G3U;Flashforge Generic PETG G3U", "from": "system", - "setting_id": "yo4uc7TxQbqnlRUY", - "filament_id": "OFZHgTVI", + "setting_id": "umrO2bL7ihLROx0B", + "filament_id": "OFYPdQJh", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic PETG @G3U" + "Generic PETG @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json similarity index 91% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG.json rename to resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json index 916c392f08..b53946e06c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG", + "name": "Generic PETG @Flashforge", "inherits": "fdm_filament_pet", + "renamed_from": "Flashforge Generic PETG", "from": "system", - "setting_id": "YqiSgA018CdflfT9", - "filament_id": "OFZHgTVI", + "setting_id": "pd9YWgt8IGXdiiUV", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json similarity index 74% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json index 5e5c8ebf79..a44330253e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle;Flashforge Generic PETG-CF G3U 0.6 Nozzle", "from": "system", - "setting_id": "u2OzNKIQIKUrOT9k", - "filament_id": "OFQC8Vna", + "setting_id": "xYtwo7Ddkfh5PLIz", + "filament_id": "OFoYSJKi", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -25,7 +26,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U 0.6 Nozzle" + "Generic PETG-CF @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json similarity index 74% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json index 2a52b92e70..3f5f92e8bc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle;Flashforge Generic PETG-CF G3U 0.8 Nozzle", "from": "system", - "setting_id": "7Qq8eY1kcFHTgzW3", - "filament_id": "OFQC8Vna", + "setting_id": "v3HCxK10mQARiRTZ", + "filament_id": "OFoYSJKi", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" @@ -28,7 +29,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U 0.8 Nozzle" + "Generic PETG-CF @Flashforge G3U 0.8 Nozzle" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json rename to resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json index 3a6f44f5ff..d298fa5b12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U", - "inherits": "Flashforge Generic PETG", + "name": "Generic PETG-CF @Flashforge G3U", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG-CF G3U", "from": "system", - "setting_id": "gLrecba33jDI9PeI", - "filament_id": "OFQC8Vna", + "setting_id": "XXoNSerT8aqG5dlL", + "filament_id": "OFoYSJKi", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U" + "Generic PETG-CF @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json index a405594914..bcf3f0926c 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG-CF10 @Flashforge AD4", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "fWM9WLGV9mUQOtHh", "filament_id": "OFO5djrM", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json similarity index 95% rename from resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json rename to resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json index c94cdfff56..ca45c4fe25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PETG-CF10", + "name": "Generic PETG-CF10 @Flashforge", "inherits": "fdm_filament_pet", + "renamed_from": "Flashforge Generic PETG-CF10", "from": "system", - "setting_id": "PlC4Ek7d09ytYZqJ", - "filament_id": "OFlNWVr5", + "setting_id": "0oCfWHsyqpBCbD62", + "filament_id": "OFO5djrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json similarity index 73% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json index 769d2f16d5..d0cf9d305f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Flashforge Generic PLA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PLA @FF AD5M 0.25 Nozzle;Flashforge Generic PLA @FF AD5M 0.25 Nozzle", + "inherits": "Generic PLA @Flashforge", "from": "system", - "setting_id": "o1CHzasJ7x3CKjue", + "setting_id": "tPulq0o2HEsicj3g", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", @@ -12,7 +12,7 @@ "Flashforge AD5X 0.25 nozzle" ], "filament_settings_id": [ - "Flashforge Generic PLA @FF AD5M 0.25 Nozzle" + "Generic PLA @FF AD5M 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json index e8d34603f3..5de4a77e3c 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA @Flashforge AD4", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "48NJ34G6Uo7VgzD4", "filament_id": "OFDSrzZ8", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json similarity index 84% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json index 72add60440..b0c0ce9597 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", - "name": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge", "from": "system", "instantiation": "false", "compatible_printers": [ @@ -23,7 +23,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n\n\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json similarity index 86% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json index ccc07ccec3..49aa73c7eb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", - "name": "Flashforge Generic PLA @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PLA @Flashforge", "from": "system", "instantiation": "false", "compatible_printers": [ @@ -23,7 +23,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PLA @G3U 0.8 Nozzle" + "Generic PLA @Flashforge G3U 0.8 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n\n\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json rename to resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json index 9f2a18971a..48b66814ca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA @G3U", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA @Flashforge G3U", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA @G3U;Flashforge Generic PLA G3U", "from": "system", - "setting_id": "gjIdhPTLOr17mz5B", - "filament_id": "OFtTHNTj", + "setting_id": "8ZlELnZzCa3UsztB", + "filament_id": "OFDSrzZ8", "instantiation": "true", "activate_air_filtration": [ "0" @@ -154,7 +155,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic PLA @G3U" + "Generic PLA @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json similarity index 89% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA.json rename to resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json index 8e2d4c90c3..2a7b642470 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA", + "name": "Generic PLA @Flashforge", "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic PLA", "from": "system", - "setting_id": "DwAgYHepesazDUjN", - "filament_id": "OFtTHNTj", + "setting_id": "keWbSonGBWos68ag", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json index 73ed3cbbaa..85741e007d 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA High Speed @Flashforge AD4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "B4EWBUa9G36lZUd7", "filament_id": "OFmpMwxS", diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json index d10e6d527c..39a2a4cfe8 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Generic PLA Silk @Flashforge AD4", "renamed_from": "PLA Silk @Flashforge AD4", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "9FrKIXABj3yedXri", "filament_id": "OFesA6rF", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json similarity index 73% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json index ad76d07bac..af864f7f8e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle;Flashforge Generic PLA-CF G3U 0.6 Nozzle", "from": "system", - "setting_id": "KR0LUSD7wd55oNI6", - "filament_id": "OFYlthXI", + "setting_id": "3vXm1hn43igE1xww", + "filament_id": "OFWbdGsC", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.6 Nozzle" @@ -28,7 +29,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U 0.6 Nozzle" + "Generic PLA-CF @Flashforge G3U 0.6 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json similarity index 73% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json index d0f628a2bb..798dff9458 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle;Flashforge Generic PLA-CF G3U 0.8 Nozzle", "from": "system", - "setting_id": "rQSFNxuuqUVzsSV2", - "filament_id": "OFYlthXI", + "setting_id": "f1rqvqunGS94fw7q", + "filament_id": "OFWbdGsC", "instantiation": "true", "compatible_printers": [ "Flashforge Guider 3 Ultra 0.8 Nozzle" @@ -28,7 +29,7 @@ "5" ], "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U 0.8 Nozzle" + "Generic PLA-CF @Flashforge G3U 0.8 Nozzle" ], "filament_start_gcode": [ "; filament start gcode\n" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json similarity index 93% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json rename to resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json index 9ef92ee7ee..7f79c0753e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U", - "inherits": "Flashforge Generic PLA", + "name": "Generic PLA-CF @Flashforge G3U", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA-CF G3U", "from": "system", - "setting_id": "S1UTm2oMRoQ4yM4R", - "filament_id": "OFYlthXI", + "setting_id": "J2zu45Q3zu7Tor3W", + "filament_id": "OFWbdGsC", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U" + "Generic PLA-CF @Flashforge G3U" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json index 1867ff0281..c03c616a0e 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA-CF10 @Flashforge AD4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "F8r0b3G228QEK53U", "filament_id": "OFX2zcrM", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json similarity index 96% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json rename to resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json index 9fe47dcd87..8b2e1efb14 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA-CF10", + "name": "Generic PLA-CF10 @Flashforge", "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic PLA-CF10", "from": "system", - "setting_id": "qH3l3p0yvZHqHnwG", - "filament_id": "OFdEIwxy", + "setting_id": "cckB4CXjFwZKC0l0", + "filament_id": "OFX2zcrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json similarity index 71% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json rename to resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json index a0317d1b97..c2e5210f3a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -1,18 +1,18 @@ { "type": "filament", - "name": "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle;Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", - "setting_id": "WOl0JsKxAQFo2WnW", - "filament_id": "OFrrMLDw", + "setting_id": "gsOqWqaxtcrTm9JE", + "filament_id": "OFkf1HHw", "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" ], "filament_settings_id": [ - "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle" + "Generic PLA-SILK @FF AD5M 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json similarity index 89% rename from resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json rename to resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json index e9ac388665..d8eabacaa0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PLA-Silk", + "name": "Generic PLA-Silk @Flashforge", "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic PLA-Silk", "from": "system", - "setting_id": "NryK9oIg8wMDKVHW", - "filament_id": "OFYvSO1W", + "setting_id": "TPRkxgDXxVhPC1ws", + "filament_id": "OFi6PfUM", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json similarity index 94% rename from resources/profiles/Flashforge/filament/Flashforge Generic PVA.json rename to resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json index 52bc8adcb9..6c76493158 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic PVA", - "inherits": "Flashforge Generic PLA", + "name": "Generic PVA @Flashforge", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PVA", "from": "system", - "setting_id": "NA0PhaTNDvEH38lF", - "filament_id": "OF1OZujR", + "setting_id": "yiCXuEb87vNMhytL", + "filament_id": "OFDvXujf", "instantiation": "true", "activate_air_filtration": [ "0" @@ -154,7 +155,7 @@ "nil" ], "filament_settings_id": [ - "Flashforge Generic PVA" + "Generic PVA @Flashforge" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json index b46926fe5e..320aa2ad8d 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "WQyJHZpkl9Dz6Yo3", "filament_id": "OFulOdT2", diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json index 01b1fbe328..0731ca82a6 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "qRqhbOYn5TMfccem", "filament_id": "OFulOdT2", diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json index f1d682cfca..a93bdb8c2e 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "LTZCFxkzkGCnUMAR", "filament_id": "OFulOdT2", diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json index 685e0dce0f..610777d347 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic TPU @Flashforge AD4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "DW9Ck6xMK00Ry2iE", "filament_id": "OFgbpcy9", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json similarity index 95% rename from resources/profiles/Flashforge/filament/Flashforge Generic TPU.json rename to resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json index 4ffd4a3aee..45a6b2e6f9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Flashforge Generic TPU", + "name": "Generic TPU @Flashforge", "inherits": "fdm_filament_tpu", + "renamed_from": "Flashforge Generic TPU", "from": "system", - "setting_id": "zQEeIIKWSgsDqlpI", - "filament_id": "OFC20UMj", + "setting_id": "luh9xN4STlD0sTyt", + "filament_id": "OFgbpcy9", "instantiation": "true", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json index 5b9131d949..73d0c5de35 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "lALS0WwvUo5AYOq3", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json index e6267540fb..3f1f866e13 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "tgRrYwnp5nr1yr9w", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json index 9f844651fa..58a29d1466 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "yom6iIUUwU1MsZwF", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json index 5117416c0a..9d896b6896 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "ysj5nD1op08U8rUT", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json index 1d6ac1b4c2..153456f8da 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HBtkC3BfEpBGEWc5", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json index f284af6a29..cd5d838b69 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json @@ -1,11 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsW4MCpeL5qfzNfg", - "filament_id": "OFIieIka", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json similarity index 95% rename from resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json rename to resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json index 352f419c5e..533af6688b 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Polymaker Generic CoPA", - "inherits": "Flashforge Generic PLA", + "name": "Polymaker CoPA", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Polymaker Generic CoPA", "from": "system", - "setting_id": "t6CWYU3ZSddIjwhS", - "filament_id": "OFwxpmHM", + "setting_id": "5Dt1APJ8qd5pzmzK", + "filament_id": "OFQyyO0l", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "Polymaker Generic CoPA" + "Polymaker CoPA" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json similarity index 95% rename from resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json rename to resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json index d55ea01f1d..c7eb2fb58c 100644 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Polymaker Generic S1", - "inherits": "Flashforge Generic PLA", + "name": "Polymaker S1", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Polymaker Generic S1", "from": "system", - "setting_id": "NXQtHvtO4tyQ1ueu", - "filament_id": "OFfegVpA", + "setting_id": "auChFegT1xViXxGe", + "filament_id": "OFaDsTE0", "instantiation": "true", "activate_air_filtration": [ "0" @@ -152,7 +153,7 @@ "nil" ], "filament_settings_id": [ - "Polymaker Generic S1" + "Polymaker S1" ], "filament_shrink": [ "100%" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json index 994468c54d..c74353803b 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json @@ -1,7 +1,6 @@ { "type": "filament", "name": "SUNLU PLA Marble @base", - "renamed_from": "SUNLU Marble PLA @base", "inherits": "fdm_filament_pla", "from": "system", "filament_id": "OFxUwUeW", diff --git a/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json index ba5fc5f554..50a7d88ff5 100644 --- a/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json index 8db76b0cd5..9dcd0f86dd 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json index 4955930d7c..a88cbb9e80 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json index ef7b50bbdb..47ac21c2ec 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X.json b/resources/profiles/Flashforge/machine/Flashforge AD5X.json index 3ed31ba385..42cfac7967 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_ad5x_buildplate_texture.svg", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "url": "", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json index fbc164e0e0..476d036a95 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_adventurer5m_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index c0822d3d73..b69dc12126 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_adventurer5m_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Artemis.json b/resources/profiles/Flashforge/machine/Flashforge Artemis.json index 7bab45b82a..22e9963a24 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Artemis.json +++ b/resources/profiles/Flashforge/machine/Flashforge Artemis.json @@ -9,5 +9,5 @@ "bed_model": "flashforge_artemis_buildplate_model.stl", "bed_texture": "flashforge_artemis_buildplate_texture.svg", "hotend_model": "", - "default_filament_profile": "Flashforge Generic PETG; Flashforge Generic PLA" + "default_filament_profile": "Generic PETG @Flashforge; Generic PLA @Flashforge" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json index 59c227c431..5ffbd6a7fc 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json index 9af2bb705b..ce7727209f 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json index e25ed9f229..e747961d1e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json index fb960b8d27..620fb3dec3 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json index b9343cf430..43c07989c6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json index 7111452aa9..71d101c355 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json index 4456789cce..54e03d72fe 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "machine_start_gcode": "M118 X10 Y10 Z10\nM140 S[bed_temperature_initial_layer_single]; set initial bed temp\nM104 S[nozzle_temperature_initial_layer] T0; set initial extruder temp\nM107; disable cooling fan\nG90; set to absolute positioning\nG28; home axes\nM132 X Y A B; recall home offsets from EPROM\nG1 Z50.0 F420; adjust Z\nG161 X Y F3300\nM7; wait for bed to stabilize\nM6 T0; wait for extruder to stabilize\nM651 S255; start case fan\nG1 Z0.3 F3600; move down to purge\nG92 E0; zero extruders\nG1 X120 Y-125 E20 F2000; extrude a line of filament across the front edge of the bed\nG1 X130 Y-125 F180; wait for ooze\nG1 X140 Y-125 F5000; fast wipe\nG1 Z1 F100; lift\nG92 E0; zero extruders again\nG1 E-1.0000 F1800", "machine_end_gcode": "M104 S0 T0; cool down extruder\nM140 S0 T0; cool down bed\nG162 Z F1800\nG28 X Y; home axes\nM132 X Y A B; recall home offsets from EPROM\nM652; turn off rear fan\nG91; set to relative positioning\nM18; disable stepper motors", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json index 38c0f3c667..4c99585c03 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g2s_buildplate_model.stl", "bed_texture": "flashforge_g2s_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json index b8388ba7c4..dcde8504e9 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json @@ -18,7 +18,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Generic PLA @Flashforge G3U" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json index f2b89e3585..2736b59737 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json @@ -12,7 +12,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json index 1076239de4..684474af9d 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json @@ -12,7 +12,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.8 Nozzle" + "Generic PLA @Flashforge G3U 0.8 Nozzle" ], "default_print_profile": "0.40mm Standard @Flashforge G3U 0.8 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json index a3bc7d0b68..c95215a762 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g3u_buildplate_model.stl", "bed_texture": "flashforge_g3u_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json index 2ee3538c7a..b7a7d5f6ba 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json index b20d6ce763..f13d0aa125 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Generic PLA @Flashforge G3U" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json index 452673eb55..22148f62db 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json index 92bee1b7dc..4eb27093aa 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json index 3570045562..56a63623fd 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json index f61d3d7e77..64853e95fa 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json index 3eee06cb24..4fbf0d684e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json index 35e7f5b067..9c0b57c05c 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Generic PLA @Flashforge G3U" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json index e355db941c..58daabb444 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json index 5ea36cfca8..49756682ba 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json index 21ae8e77fa..8c1a60781b 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json index 660d3c342b..1140b773e3 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json index 14ce7cead3..4bcdc78d4a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g4pro_buildplate_model.stl", "bed_texture": "flashforge_g4pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4.json b/resources/profiles/Flashforge/machine/Flashforge Guider4.json index 7b5248e14b..0cd89727d1 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g4pro_buildplate_model.stl", "bed_texture": "flashforge_g4pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json index 6002dfb72e..2808e866e3 100644 --- a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json +++ b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json @@ -94,7 +94,7 @@ "machine_pause_gcode": "M25", "support_multi_bed_types": "1", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", diff --git a/resources/profiles/Flashforge/machine/fdm_flashforge_common.json b/resources/profiles/Flashforge/machine/fdm_flashforge_common.json index ea865c4387..7e2e700885 100644 --- a/resources/profiles/Flashforge/machine/fdm_flashforge_common.json +++ b/resources/profiles/Flashforge/machine/fdm_flashforge_common.json @@ -124,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M", "bed_exclude_area": [ diff --git a/resources/profiles/Flashforge/machine/fdm_klipper_common.json b/resources/profiles/Flashforge/machine/fdm_klipper_common.json index 237f4b54c7..3126f70c76 100644 --- a/resources/profiles/Flashforge/machine/fdm_klipper_common.json +++ b/resources/profiles/Flashforge/machine/fdm_klipper_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "Flashforge Generic ABS" + "Generic ABS @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M", "bed_exclude_area": [ diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index d93bc00e57..5be5a8d4a3 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ @@ -245,32 +245,32 @@ "sub_path": "filament/S1/fdm_filament_tpu_other @S1.json" }, { - "name": "FlyingBear Generic ABS", - "sub_path": "filament/FlyingBear Generic ABS.json" + "name": "Generic ABS @FlyingBear", + "sub_path": "filament/Generic ABS @FlyingBear.json" }, { - "name": "FlyingBear Generic PA-CF", - "sub_path": "filament/FlyingBear Generic PA-CF.json" + "name": "Generic PA-CF @FlyingBear", + "sub_path": "filament/Generic PA-CF @FlyingBear.json" }, { - "name": "FlyingBear Generic PC", - "sub_path": "filament/FlyingBear Generic PC.json" + "name": "Generic PC @FlyingBear", + "sub_path": "filament/Generic PC @FlyingBear.json" }, { - "name": "FlyingBear Generic PETG", - "sub_path": "filament/FlyingBear Generic PETG.json" + "name": "Generic PETG @FlyingBear", + "sub_path": "filament/Generic PETG @FlyingBear.json" }, { - "name": "FlyingBear Generic PLA", - "sub_path": "filament/FlyingBear Generic PLA.json" + "name": "Generic PLA @FlyingBear", + "sub_path": "filament/Generic PLA @FlyingBear.json" }, { "name": "FlyingBear PLA Hyper", "sub_path": "filament/FlyingBear PLA Hyper.json" }, { - "name": "FlyingBear Generic TPU", - "sub_path": "filament/FlyingBear Generic TPU.json" + "name": "Generic TPU @FlyingBear", + "sub_path": "filament/Generic TPU @FlyingBear.json" }, { "name": "FlyingBear ABS @Ghost7", diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json b/resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json similarity index 69% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json rename to resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json index 1bccf6a208..b0de37a64b 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json +++ b/resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic ABS", + "name": "Generic ABS @FlyingBear", "inherits": "fdm_filament_abs", + "renamed_from": "FlyingBear Generic ABS", "from": "system", - "setting_id": "TDBNmmGSexhJjBVm", - "filament_id": "OFBtlI8M", + "setting_id": "2aW5bka7pvQhHGqF", + "filament_id": "OFY9muEs", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_flow_ratio": [ "0.94" ], diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json b/resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json similarity index 72% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json rename to resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json index 4ed339e5cc..37448910ed 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json +++ b/resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic PA-CF", + "name": "Generic PA-CF @FlyingBear", "inherits": "fdm_filament_pa", + "renamed_from": "FlyingBear Generic PA-CF", "from": "system", - "setting_id": "lpa58hsu9IB697v8", - "filament_id": "OFjoIVZ6", + "setting_id": "5hw49IVGTMbie2Zr", + "filament_id": "OFQLcbps", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_type": [ "PA-CF" ], diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json b/resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json similarity index 67% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json rename to resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json index 6dd3af11ba..926494718b 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json +++ b/resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic PC", + "name": "Generic PC @FlyingBear", "inherits": "fdm_filament_pc", + "renamed_from": "FlyingBear Generic PC", "from": "system", - "setting_id": "MkIN95sonzI0vNXT", - "filament_id": "OFxTMg1d", + "setting_id": "HU6kkNtEXGubYV0U", + "filament_id": "OFLakOUI", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_max_volumetric_speed": [ "12" ], diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json b/resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json similarity index 80% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json rename to resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json index b8a96a8154..77079afc33 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json +++ b/resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic PETG", + "name": "Generic PETG @FlyingBear", "inherits": "fdm_filament_pet", + "renamed_from": "FlyingBear Generic PETG", "from": "system", - "setting_id": "id0y4kfJciWjOwh6", - "filament_id": "OFzXURfo", + "setting_id": "D5Zk6ykY8TX3gs0Z", + "filament_id": "OFYPdQJh", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "reduce_fan_stop_start_freq": [ "1" ], diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json b/resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json similarity index 69% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json rename to resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json index 87c72dc870..159f3da22b 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json +++ b/resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic PLA", + "name": "Generic PLA @FlyingBear", "inherits": "fdm_filament_pla", + "renamed_from": "FlyingBear Generic PLA", "from": "system", - "setting_id": "yCGisctQQwASw8kc", - "filament_id": "OFFZ0BBL", + "setting_id": "g7zPgD6P3bbwm5gv", + "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_flow_ratio": [ "0.94" ], diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json b/resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json similarity index 66% rename from resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json rename to resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json index 5c97c06efb..c33b3757be 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json +++ b/resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "FlyingBear Generic TPU", + "name": "Generic TPU @FlyingBear", "inherits": "fdm_filament_tpu", + "renamed_from": "FlyingBear Generic TPU", "from": "system", - "setting_id": "84YwyW2C94NdN1zl", - "filament_id": "OFRzsaDK", + "setting_id": "Xdx2FIIQiqSz7DpN", + "filament_id": "OFgbpcy9", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_max_volumetric_speed": [ "3" ], diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json index 633e17dd93..c5ac0140a5 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "machine_start_gcode": "M220 S100 ;reset feedrate\nM221 S100 ;reset flowrate\nG21 ;set units to millimeters\nG90 ;use absolute coordinates\nM82 ;absolute extrusion mode\nM107 ;turn off colling fan\n\nM140 S[bed_temperature_initial_layer] ;set bed temperature continue without waiting\nM104 S[nozzle_temperature_initial_layer] ;set hotend temperature continue without waiting\n\nG28 ;home\nG1 Z2 F1500 ;raise z\nG92 E0 ;reset extruder\n\nM190 S[bed_temperature_initial_layer] ;wait for bed temperature\nM109 S[nozzle_temperature_initial_layer] ;wait for hotend temperature\n\nG1 X20 Y20 F5000 ;start position \nG1 Z0.28 F1500 ;lower z\nG1 E4 F500 ;prime the filament\n\nG1 X20 Y20.0 Z0.28 F3000.0 ;start position \nG1 X20 Y170.0 Z0.28 F1500.0 E12 ;1st line\nG1 X20.3 F1500\nG1 X20.3 Y20.0 Z0.28 F1500.0 E18 ;2nd line\n\nG92 E0 ;reset extruder\nG1 Z2 F1500 ;raise z\nG92 E0 ;reset extruder\n", "machine_end_gcode": "G91 ;use relative coordinates\nG1 E-4 F1500 ;retract the filament\nG1 X5 Y5 Z0.2 F5000 ;wipe\nG1 Z5 F1500 ;raise z\nG90 ;use absolute coordinates\nG1 X10 Y210 F5000 ;park print head\n\nM107 ;turn off fan\nM104 S0 ;turn off hotend\nM140 S0 ;turn off heatbed\nM84 ;disable motors", diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json index 3b1968c724..18a5c27f14 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Ghost 6-bed.stl", "bed_texture": "FlyingBear Ghost 6-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json b/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json index e75b8d0697..43dd2de3d4 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Reborn3-bed.stl", "bed_texture": "FlyingBear Reborn3-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json index 959a8f1193..795743dc1f 100644 --- a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Ghost7-bed.stl", "bed_texture": "FlyingBear Ghost7-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json index 2063aab681..53ca3accb9 100644 --- a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json +++ b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear S1-bed.stl", "bed_texture": "FlyingBear S1-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/fdm_klipper_common.json b/resources/profiles/FlyingBear/machine/fdm_klipper_common.json index 8053ff22d0..d9170b7fec 100644 --- a/resources/profiles/FlyingBear/machine/fdm_klipper_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_klipper_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "default_print_profile": "0.20mm Standard @FlyingBear Reborn3", "deretraction_speed": [ diff --git a/resources/profiles/FlyingBear/machine/fdm_machine_common.json b/resources/profiles/FlyingBear/machine/fdm_machine_common.json index 28e9665346..9b3574e7de 100644 --- a/resources/profiles/FlyingBear/machine/fdm_machine_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_machine_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "default_print_profile": "0.20mm Standard @FlyingBear Reborn3", "deretraction_speed": [ diff --git a/resources/profiles/Ginger Additive.json b/resources/profiles/Ginger Additive.json index ff4c3bec09..249c3e9906 100644 --- a/resources/profiles/Ginger Additive.json +++ b/resources/profiles/Ginger Additive.json @@ -1,6 +1,6 @@ { "name": "Ginger Additive", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "1", "description": "Ginger configuration", "machine_model_list": [ @@ -67,12 +67,12 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Ginger Generic PETG", - "sub_path": "filament/Ginger Generic PETG.json" + "name": "Generic PETG @Ginger", + "sub_path": "filament/Generic PETG @Ginger.json" }, { - "name": "Ginger Generic PLA", - "sub_path": "filament/Ginger Generic PLA.json" + "name": "Generic PLA @Ginger", + "sub_path": "filament/Generic PLA @Ginger.json" } ] } diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json b/resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json similarity index 92% rename from resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json rename to resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json index 15266aab2b..b9e6ce122c 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json +++ b/resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Ginger Generic PETG", - "renamed_from": "Ginger Generic rPETG", + "name": "Generic PETG @Ginger", + "renamed_from": "Ginger Generic rPETG;Ginger Generic PETG", "inherits": "fdm_filament_common", "from": "system", - "setting_id": "ue95N2e65rdp5K6c", - "filament_id": "OFsGqI4y", + "setting_id": "rogjLzHbtvooz2lw", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json b/resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json similarity index 92% rename from resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json rename to resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json index 55e699954a..61e91d1f1e 100644 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json +++ b/resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Ginger Generic PLA", - "renamed_from": "Ginger Generic rPLA", + "name": "Generic PLA @Ginger", + "renamed_from": "Ginger Generic rPLA;Ginger Generic PLA", "inherits": "fdm_filament_common", "from": "system", - "setting_id": "Z1scjKDBFoDaTa2C", - "filament_id": "OFlLmUeV", + "setting_id": "tu6pOYYSBlZCvmbH", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Ginger Additive/machine/Ginger G1.json b/resources/profiles/Ginger Additive/machine/Ginger G1.json index 54756fd549..e379f536e4 100644 --- a/resources/profiles/Ginger Additive/machine/Ginger G1.json +++ b/resources/profiles/Ginger Additive/machine/Ginger G1.json @@ -8,5 +8,5 @@ "family": "Ginger", "bed_model": "Ginger_G1.stl", "bed_texture": "Ginger_One_texture.svg", - "default_materials": "Ginger Generic PETG;Ginger Generic PLA" + "default_materials": "Generic PETG @Ginger;Generic PLA @Ginger" } diff --git a/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json b/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json index 8b218915d1..a6fcccb284 100644 --- a/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json +++ b/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json @@ -1,13 +1,12 @@ { "type": "machine", "name": "Ginger_G1_common", - "renamed_from": "ginger_one_common", "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", "printer_settings_id": "Ginger_G1_common", "default_filament_profile": [ - "Ginger Generic PLA" + "Generic PLA @Ginger" ], "default_print_profile": "1.50mm Standard @Ginger G1", "deretraction_speed": [ diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 7ae4c46fb4..06d0629ffc 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ @@ -305,40 +305,40 @@ "sub_path": "filament/HSN/fdm_filament_tpu_other @HSN.json" }, { - "name": "InfiMech Generic ABS", - "sub_path": "filament/InfiMech Generic ABS.json" + "name": "Generic ABS @InfiMech", + "sub_path": "filament/Generic ABS @InfiMech.json" }, { "name": "Other ABS", "sub_path": "filament/Other ABS.json" }, { - "name": "InfiMech Generic PA-CF", - "sub_path": "filament/InfiMech Generic PA-CF.json" + "name": "Generic PA-CF @InfiMech", + "sub_path": "filament/Generic PA-CF @InfiMech.json" }, { "name": "Other PA-CF", "sub_path": "filament/Other PA-CF.json" }, { - "name": "InfiMech Generic PC", - "sub_path": "filament/InfiMech Generic PC.json" + "name": "Generic PC @InfiMech", + "sub_path": "filament/Generic PC @InfiMech.json" }, { "name": "Other PC", "sub_path": "filament/Other PC.json" }, { - "name": "InfiMech Generic PETG", - "sub_path": "filament/InfiMech Generic PETG.json" + "name": "Generic PETG @InfiMech", + "sub_path": "filament/Generic PETG @InfiMech.json" }, { "name": "Other PETG", "sub_path": "filament/Other PETG.json" }, { - "name": "InfiMech Generic PLA", - "sub_path": "filament/InfiMech Generic PLA.json" + "name": "Generic PLA @InfiMech", + "sub_path": "filament/Generic PLA @InfiMech.json" }, { "name": "InfiMech PLA Hyper", @@ -353,8 +353,8 @@ "sub_path": "filament/Other PLA.json" }, { - "name": "InfiMech Generic TPU", - "sub_path": "filament/InfiMech Generic TPU.json" + "name": "Generic TPU @InfiMech", + "sub_path": "filament/Generic TPU @InfiMech.json" }, { "name": "Other TPU", diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json b/resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json similarity index 67% rename from resources/profiles/InfiMech/filament/InfiMech Generic ABS.json rename to resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json index 2b2223aec5..80b479de75 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json +++ b/resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic ABS", + "name": "Generic ABS @InfiMech", "inherits": "fdm_filament_abs", + "renamed_from": "InfiMech Generic ABS", "from": "system", - "setting_id": "gtJ2ZoV8fxqqOXuv", - "filament_id": "OFWbbuRY", + "setting_id": "HRLECASD9Ko4Xxof", + "filament_id": "OFY9muEs", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_flow_ratio": [ "0.94" ], diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json b/resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json similarity index 70% rename from resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json rename to resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json index cfd3b187ce..0c202c609c 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json +++ b/resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic PA-CF", + "name": "Generic PA-CF @InfiMech", "inherits": "fdm_filament_pa", + "renamed_from": "InfiMech Generic PA-CF", "from": "system", - "setting_id": "k2NSIB3vVUoXGW9F", - "filament_id": "OF6K467o", + "setting_id": "IRYJpvGGjpF4ofY1", + "filament_id": "OFQLcbps", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_type": [ "PA-CF" ], diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json b/resources/profiles/InfiMech/filament/Generic PC @InfiMech.json similarity index 64% rename from resources/profiles/InfiMech/filament/InfiMech Generic PC.json rename to resources/profiles/InfiMech/filament/Generic PC @InfiMech.json index 11d0153e01..a37d5db2b7 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json +++ b/resources/profiles/InfiMech/filament/Generic PC @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic PC", + "name": "Generic PC @InfiMech", "inherits": "fdm_filament_pc", + "renamed_from": "InfiMech Generic PC", "from": "system", - "setting_id": "emj9YLXtmKmeoYJa", - "filament_id": "OF6xLvYg", + "setting_id": "W0oujcCps06G6yNB", + "filament_id": "OFLakOUI", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_max_volumetric_speed": [ "12" ], diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json b/resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json similarity index 80% rename from resources/profiles/InfiMech/filament/InfiMech Generic PETG.json rename to resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json index 7b5f094764..55162d9852 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json +++ b/resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic PETG", + "name": "Generic PETG @InfiMech", "inherits": "fdm_filament_pet", + "renamed_from": "InfiMech Generic PETG", "from": "system", - "setting_id": "rhXq50q3u2YxNRcE", - "filament_id": "OFs2ReMr", + "setting_id": "sAi8oKez7NGKo1wy", + "filament_id": "OFYPdQJh", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "reduce_fan_stop_start_freq": [ "1" ], diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json b/resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json similarity index 67% rename from resources/profiles/InfiMech/filament/InfiMech Generic PLA.json rename to resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json index cdb8dc6563..4d2d7dc402 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json +++ b/resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic PLA", + "name": "Generic PLA @InfiMech", "inherits": "fdm_filament_pla", + "renamed_from": "InfiMech Generic PLA", "from": "system", - "setting_id": "BHNIPk7Nbl7hXZY1", - "filament_id": "OFrQqCwL", + "setting_id": "tdnlzJyNB6zpQS8w", + "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_flow_ratio": [ "0.94" ], diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json b/resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json similarity index 64% rename from resources/profiles/InfiMech/filament/InfiMech Generic TPU.json rename to resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json index be76c39b21..bc2b0c37a8 100644 --- a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json +++ b/resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "InfiMech Generic TPU", + "name": "Generic TPU @InfiMech", "inherits": "fdm_filament_tpu", + "renamed_from": "InfiMech Generic TPU", "from": "system", - "setting_id": "pHS9IcwvsPCnkpaO", - "filament_id": "OFc0xiCz", + "setting_id": "kK1S7YP8vgTJeFPO", + "filament_id": "OFgbpcy9", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "filament_max_volumetric_speed": [ "3" ], diff --git a/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json b/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json index fff3371aba..8b8fd4e586 100644 --- a/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json +++ b/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json @@ -8,5 +8,5 @@ "bed_model": "InfiMech TX-bed.stl", "bed_texture": "InfiMech TX-texture.svg", "hotend_model": "", - "default_materials": "InfiMech Generic ABS;InfiMech Generic PA-CF;InfiMech Generic PC;InfiMech Generic PETG;InfiMech Generic PLA;InfiMech Generic TPU" + "default_materials": "Generic ABS @InfiMech;Generic PA-CF @InfiMech;Generic PC @InfiMech;Generic PETG @InfiMech;Generic PLA @InfiMech;Generic TPU @InfiMech" } diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json index 68b3b30e45..a95fea09c0 100644 --- a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json index 570a6aaf2f..35501555bb 100644 --- a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ diff --git a/resources/profiles/InfiMech/machine/InfiMech TX.json b/resources/profiles/InfiMech/machine/InfiMech TX.json index abb93dfe09..c040efcfbb 100644 --- a/resources/profiles/InfiMech/machine/InfiMech TX.json +++ b/resources/profiles/InfiMech/machine/InfiMech TX.json @@ -8,5 +8,5 @@ "bed_model": "InfiMech TX-bed.stl", "bed_texture": "InfiMech TX-texture.svg", "hotend_model": "", - "default_materials": "InfiMech Generic ABS;InfiMech Generic PA-CF;InfiMech Generic PC;InfiMech Generic PETG;InfiMech Generic PLA;InfiMech Generic TPU" + "default_materials": "Generic ABS @InfiMech;Generic PA-CF @InfiMech;Generic PC @InfiMech;Generic PETG @InfiMech;Generic PLA @InfiMech;Generic TPU @InfiMech" } diff --git a/resources/profiles/InfiMech/machine/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/fdm_klipper_common.json index adcb60145f..bbcd27a966 100644 --- a/resources/profiles/InfiMech/machine/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/fdm_klipper_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ diff --git a/resources/profiles/InfiMech/machine/fdm_machine_common.json b/resources/profiles/InfiMech/machine/fdm_machine_common.json index 2462c8f803..c329e930cb 100644 --- a/resources/profiles/InfiMech/machine/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/fdm_machine_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json index ede555b66c..cfb4c10ac2 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ @@ -141,8 +141,8 @@ "sub_path": "filament/fdm_filament_peek.json" }, { - "name": "MM Generic PEEK", - "sub_path": "filament/MM Generic PEEK.json" + "name": "Generic PEEK @MM", + "sub_path": "filament/Generic PEEK @MM.json" } ], "machine_list": [ diff --git a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json b/resources/profiles/MagicMaker/filament/Generic PEEK @MM.json similarity index 84% rename from resources/profiles/MagicMaker/filament/MM Generic PEEK.json rename to resources/profiles/MagicMaker/filament/Generic PEEK @MM.json index cfa53426f6..6915058856 100644 --- a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json +++ b/resources/profiles/MagicMaker/filament/Generic PEEK @MM.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "MM Generic PEEK", + "name": "Generic PEEK @MM", "inherits": "fdm_filament_peek", + "renamed_from": "MM Generic PEEK", "from": "system", - "setting_id": "iznBAOK0m6dO7SCh", - "filament_id": "OFgSPtDn", + "setting_id": "2xiVNAQTwBaiLjJn", + "filament_id": "OFz5oHgf", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/MagicMaker/machine/MM BoneKing.json b/resources/profiles/MagicMaker/machine/MM BoneKing.json index a7b80100be..ab257957a6 100644 --- a/resources/profiles/MagicMaker/machine/MM BoneKing.json +++ b/resources/profiles/MagicMaker/machine/MM BoneKing.json @@ -8,5 +8,5 @@ "bed_model": "310_buildplate_model.stl", "bed_texture": "MM_buildplate_texture.svg", "hotend_model": "MM_hotend.stl", - "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System;Generic TPU @System;Generic PC @System;Generic PA @System;MM Generic PEEK" + "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System;Generic TPU @System;Generic PC @System;Generic PA @System;Generic PEEK @MM" } diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index c649cf3e6b..866b720b78 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ @@ -242,12 +242,12 @@ "sub_path": "filament/Arena ABS @base.json" }, { - "name": "OrcaArena Generic ABS @base", - "sub_path": "filament/OrcaArena Generic ABS @base.json" + "name": "Generic ABS @OrcaArena base", + "sub_path": "filament/Generic ABS @OrcaArena base.json" }, { - "name": "OrcaArena Generic ASA @base", - "sub_path": "filament/OrcaArena Generic ASA @base.json" + "name": "Generic ASA @OrcaArena base", + "sub_path": "filament/Generic ASA @OrcaArena base.json" }, { "name": "Arena PA-CF @base", @@ -262,20 +262,20 @@ "sub_path": "filament/Arena Support G @base.json" }, { - "name": "OrcaArena Generic PA", - "sub_path": "filament/OrcaArena Generic PA.json" + "name": "Generic PA @OrcaArena", + "sub_path": "filament/Generic PA @OrcaArena.json" }, { - "name": "OrcaArena Generic PA-CF", - "sub_path": "filament/OrcaArena Generic PA-CF.json" + "name": "Generic PA-CF @OrcaArena", + "sub_path": "filament/Generic PA-CF @OrcaArena.json" }, { "name": "Arena PC @base", "sub_path": "filament/Arena PC @base.json" }, { - "name": "OrcaArena Generic PC @base", - "sub_path": "filament/OrcaArena Generic PC @base.json" + "name": "Generic PC @OrcaArena base", + "sub_path": "filament/Generic PC @OrcaArena base.json" }, { "name": "Arena PET-CF @base", @@ -290,12 +290,12 @@ "sub_path": "filament/Arena PETG-CF @base.json" }, { - "name": "OrcaArena Generic PETG @base", - "sub_path": "filament/OrcaArena Generic PETG @base.json" + "name": "Generic PETG @OrcaArena base", + "sub_path": "filament/Generic PETG @OrcaArena base.json" }, { - "name": "OrcaArena Generic PETG-CF @base", - "sub_path": "filament/OrcaArena Generic PETG-CF @base.json" + "name": "Generic PETG-CF @OrcaArena base", + "sub_path": "filament/Generic PETG-CF @OrcaArena base.json" }, { "name": "Arena PLA Basic @base", @@ -338,16 +338,16 @@ "sub_path": "filament/Arena Support W @base.json" }, { - "name": "OrcaArena Generic PLA @base", - "sub_path": "filament/OrcaArena Generic PLA @base.json" + "name": "Generic PLA @OrcaArena base", + "sub_path": "filament/Generic PLA @OrcaArena base.json" }, { - "name": "OrcaArena Generic PLA Silk @base", - "sub_path": "filament/OrcaArena Generic PLA Silk @base.json" + "name": "Generic PLA Silk @OrcaArena base", + "sub_path": "filament/Generic PLA Silk @OrcaArena base.json" }, { - "name": "OrcaArena Generic PLA-CF @base", - "sub_path": "filament/OrcaArena Generic PLA-CF @base.json" + "name": "Generic PLA-CF @OrcaArena base", + "sub_path": "filament/Generic PLA-CF @OrcaArena base.json" }, { "name": "PolyLite PLA @base", @@ -358,16 +358,16 @@ "sub_path": "filament/PolyTerra PLA @base.json" }, { - "name": "OrcaArena Generic PVA @base", - "sub_path": "filament/OrcaArena Generic PVA @base.json" + "name": "Generic PVA @OrcaArena base", + "sub_path": "filament/Generic PVA @OrcaArena base.json" }, { "name": "Arena TPU 95A @base", "sub_path": "filament/Arena TPU 95A @base.json" }, { - "name": "OrcaArena Generic TPU", - "sub_path": "filament/OrcaArena Generic TPU.json" + "name": "Generic TPU @OrcaArena", + "sub_path": "filament/Generic TPU @OrcaArena.json" }, { "name": "Arena ABS @Arena X1C", @@ -382,20 +382,20 @@ "sub_path": "filament/Arena ABS @Arena X1C 0.8 nozzle.json" }, { - "name": "OrcaArena Generic ABS", - "sub_path": "filament/OrcaArena Generic ABS.json" + "name": "Generic ABS @OrcaArena", + "sub_path": "filament/Generic ABS @OrcaArena.json" }, { - "name": "OrcaArena Generic ABS @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic ABS @0.2 nozzle.json" + "name": "Generic ABS @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic ABS @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic ASA", - "sub_path": "filament/OrcaArena Generic ASA.json" + "name": "Generic ASA @OrcaArena", + "sub_path": "filament/Generic ASA @OrcaArena.json" }, { - "name": "OrcaArena Generic ASA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic ASA @0.2 nozzle.json" + "name": "Generic ASA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic ASA @OrcaArena 0.2 nozzle.json" }, { "name": "Arena PA-CF @Arena X1C", @@ -426,12 +426,12 @@ "sub_path": "filament/Arena PC @Arena X1C 0.8 nozzle.json" }, { - "name": "OrcaArena Generic PC", - "sub_path": "filament/OrcaArena Generic PC.json" + "name": "Generic PC @OrcaArena", + "sub_path": "filament/Generic PC @OrcaArena.json" }, { - "name": "OrcaArena Generic PC @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PC @0.2 nozzle.json" + "name": "Generic PC @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PC @OrcaArena 0.2 nozzle.json" }, { "name": "Arena PET-CF @Arena X1C", @@ -454,16 +454,16 @@ "sub_path": "filament/Arena PETG-CF @Arena X1C.json" }, { - "name": "OrcaArena Generic PETG", - "sub_path": "filament/OrcaArena Generic PETG.json" + "name": "Generic PETG @OrcaArena", + "sub_path": "filament/Generic PETG @OrcaArena.json" }, { - "name": "OrcaArena Generic PETG @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PETG @0.2 nozzle.json" + "name": "Generic PETG @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PETG @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PETG-CF @Arena X1C", - "sub_path": "filament/OrcaArena Generic PETG-CF @Arena X1C.json" + "name": "Generic PETG-CF @Arena X1C", + "sub_path": "filament/Generic PETG-CF @Arena X1C.json" }, { "name": "Arena PLA Basic @Arena X1C", @@ -542,20 +542,20 @@ "sub_path": "filament/Arena Support W @Arena X1C 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PLA", - "sub_path": "filament/OrcaArena Generic PLA.json" + "name": "Generic PLA @OrcaArena", + "sub_path": "filament/Generic PLA @OrcaArena.json" }, { - "name": "OrcaArena Generic PLA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PLA @0.2 nozzle.json" + "name": "Generic PLA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PLA @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PLA Silk", - "sub_path": "filament/OrcaArena Generic PLA Silk.json" + "name": "Generic PLA Silk @OrcaArena", + "sub_path": "filament/Generic PLA Silk @OrcaArena.json" }, { - "name": "OrcaArena Generic PLA-CF", - "sub_path": "filament/OrcaArena Generic PLA-CF.json" + "name": "Generic PLA-CF @OrcaArena", + "sub_path": "filament/Generic PLA-CF @OrcaArena.json" }, { "name": "PolyLite PLA @Arena X1C", @@ -566,12 +566,12 @@ "sub_path": "filament/PolyTerra PLA @Arena X1C.json" }, { - "name": "OrcaArena Generic PVA", - "sub_path": "filament/OrcaArena Generic PVA.json" + "name": "Generic PVA @OrcaArena", + "sub_path": "filament/Generic PVA @OrcaArena.json" }, { - "name": "OrcaArena Generic PVA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PVA @0.2 nozzle.json" + "name": "Generic PVA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PVA @OrcaArena 0.2 nozzle.json" }, { "name": "Arena TPU 95A @Arena X1C", diff --git a/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..f98408fe0f --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ABS @OrcaArena 0.2 nozzle", + "inherits": "Generic ABS @OrcaArena base", + "renamed_from": "OrcaArena Generic ABS @0.2 nozzle;OrcaArena Generic ABS 0.2 nozzle", + "from": "system", + "setting_id": "mzx0hG9Xe9fIrkrW", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json similarity index 73% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json rename to resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json index 8a635421ee..f2cd5abbf4 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic ABS @base", + "name": "Generic ABS @OrcaArena base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OFetENFF", + "filament_id": "OFY9muEs", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json similarity index 57% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json rename to resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json index d092b1f64d..2a505d7ca1 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic ASA", - "inherits": "OrcaArena Generic ASA @base", + "name": "Generic ABS @OrcaArena", + "inherits": "Generic ABS @OrcaArena base", + "renamed_from": "OrcaArena Generic ABS", "from": "system", - "setting_id": "8KdojTD3bygYDxwh", + "setting_id": "ftTPQmVmsaD0n1GF", "instantiation": "true", "compatible_printers": [ "Orca Arena X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..77bd051b4e --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ASA @OrcaArena 0.2 nozzle", + "inherits": "Generic ASA @OrcaArena base", + "renamed_from": "OrcaArena Generic ASA @0.2 nozzle;OrcaArena Generic ASA 0.2 nozzle", + "from": "system", + "setting_id": "rtFj6gFceWHdzTmO", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json similarity index 73% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json rename to resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json index 26032a7d85..772c708dd8 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic ASA @base", + "name": "Generic ASA @OrcaArena base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OFmzftED", + "filament_id": "OFLPAxz3", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json similarity index 57% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json rename to resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json index 024e76e0bc..0ee8d6cc20 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic PC", - "inherits": "OrcaArena Generic PC @base", + "name": "Generic ASA @OrcaArena", + "inherits": "Generic ASA @OrcaArena base", + "renamed_from": "OrcaArena Generic ASA", "from": "system", - "setting_id": "WCiW1Yi88MEZIO2h", + "setting_id": "V2Z1rxHqIqIuwP5O", "instantiation": "true", "compatible_printers": [ "Orca Arena X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json b/resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json similarity index 74% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json rename to resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json index a95e022740..87b0a67ed8 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json +++ b/resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "OrcaArena Generic PA", + "name": "Generic PA @OrcaArena", "inherits": "fdm_filament_pa", + "renamed_from": "OrcaArena Generic PA", "from": "system", - "setting_id": "IintLqJOecQcKmA8", - "filament_id": "OFmnJNqY", + "setting_id": "KScdeqdB3UR6uvxs", + "filament_id": "OFg8ndtj", "instantiation": "true", "required_nozzle_HRC": [ "3" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json b/resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json similarity index 81% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json rename to resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json index 2621b3cf05..2d928201b7 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json +++ b/resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "OrcaArena Generic PA-CF", + "name": "Generic PA-CF @OrcaArena", "inherits": "fdm_filament_pa", + "renamed_from": "OrcaArena Generic PA-CF", "from": "system", - "setting_id": "XHOpI9EFQmYoJ3Sy", - "filament_id": "OF4xhTuK", + "setting_id": "xANIesGhsXwbTn3J", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..ad15f49a69 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PC @OrcaArena 0.2 nozzle", + "inherits": "Generic PC @OrcaArena base", + "renamed_from": "OrcaArena Generic PC @0.2 nozzle;OrcaArena Generic PC 0.2 nozzle", + "from": "system", + "setting_id": "AEKvB4RVBo2zOkdg", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json similarity index 73% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json rename to resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json index 97bdbe2df1..3ea8fd8bd4 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PC @base", + "name": "Generic PC @OrcaArena base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OFXhZ3uY", + "filament_id": "OFLakOUI", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json similarity index 57% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json rename to resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json index 773f58289e..b4302c3c47 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic ABS", - "inherits": "OrcaArena Generic ABS @base", + "name": "Generic PC @OrcaArena", + "inherits": "Generic PC @OrcaArena base", + "renamed_from": "OrcaArena Generic PC", "from": "system", - "setting_id": "5aN0QkAneu6yEWZh", + "setting_id": "He4O4h8oEFsySDIJ", "instantiation": "true", "compatible_printers": [ "Orca Arena X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..1be2988356 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PETG @OrcaArena 0.2 nozzle", + "inherits": "Generic PETG @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG @0.2 nozzle;OrcaArena Generic PETG 0.2 nozzle", + "from": "system", + "setting_id": "ZstQ3h8DGCpRWQJN", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json similarity index 94% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json rename to resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json index a68c25c24a..4ec26aae2b 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PETG @base", + "name": "Generic PETG @OrcaArena base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFgSEwOZ", + "filament_id": "OFYPdQJh", "instantiation": "false", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json new file mode 100644 index 0000000000..ad3260fe1c --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PETG @OrcaArena", + "inherits": "Generic PETG @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG", + "from": "system", + "setting_id": "3puaC0EwFLvEnGH2", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json b/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json new file mode 100644 index 0000000000..f8741a22a9 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Arena X1C", + "inherits": "Generic PETG-CF @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG-CF @Arena X1C;OrcaArena Generic PETG-CF Arena X1C", + "from": "system", + "setting_id": "MeIL8qLFZytjvYrF", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json b/resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json similarity index 92% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json rename to resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json index ba3364a5c4..754407c32a 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PETG-CF @base", + "name": "Generic PETG-CF @OrcaArena base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFwpkvqf", + "filament_id": "OFoYSJKi", "instantiation": "false", "filament_flow_ratio": [ "0.95" @@ -45,7 +45,7 @@ "40" ], "filament_vendor": [ - "Orca Arena" + "Generic" ], "filament_type": [ "PETG-CF" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json similarity index 69% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json rename to resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json index 261cd931f6..074732db01 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic PLA @0.2 nozzle", - "inherits": "OrcaArena Generic PLA @base", + "name": "Generic PLA @OrcaArena 0.2 nozzle", + "inherits": "Generic PLA @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA @0.2 nozzle;OrcaArena Generic PLA 0.2 nozzle", "from": "system", - "setting_id": "V1TMYgbxBLgciFa2", + "setting_id": "HjJH9JT9x9sFtVES", "instantiation": "true", "filament_max_volumetric_speed": [ "2" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json similarity index 88% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json rename to resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json index ade5634118..cec0b9cd19 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PLA @base", + "name": "Generic PLA @OrcaArena base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFD6kN7F", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json similarity index 57% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json rename to resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json index 0a6e9a9dbc..9018f24583 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic PETG-CF @Arena X1C", - "inherits": "OrcaArena Generic PETG-CF @base", + "name": "Generic PLA @OrcaArena", + "inherits": "Generic PLA @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA", "from": "system", - "setting_id": "2OI2L2q50nSxam2z", + "setting_id": "TfkkCc6rILxDiZhR", "instantiation": "true", "compatible_printers": [ "Orca Arena X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json similarity index 88% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json rename to resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json index 9a0dc73322..f73d037385 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PLA Silk @base", + "name": "Generic PLA Silk @OrcaArena base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFbeeFkl", + "filament_id": "OFesA6rF", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json similarity index 63% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json rename to resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json index 3b6b96bb72..6afb0e48a2 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "OrcaArena Generic PLA Silk", - "inherits": "OrcaArena Generic PLA Silk @base", + "name": "Generic PLA Silk @OrcaArena", + "inherits": "Generic PLA Silk @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA Silk", "from": "system", - "setting_id": "WRy8oYxZ542SX6jO", + "setting_id": "rvJjX9QsHM1O1CGD", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json similarity index 92% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json rename to resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json index c73b9fc480..79a2b7ba88 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PLA-CF @base", + "name": "Generic PLA-CF @OrcaArena base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFx0ZzFV", + "filament_id": "OFWbdGsC", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json new file mode 100644 index 0000000000..ced9245904 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @OrcaArena", + "inherits": "Generic PLA-CF @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA-CF", + "from": "system", + "setting_id": "vexlQFuvVzpsYT0Z", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..417ef65683 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PVA @OrcaArena 0.2 nozzle", + "inherits": "Generic PVA @OrcaArena base", + "renamed_from": "OrcaArena Generic PVA @0.2 nozzle;OrcaArena Generic PVA 0.2 nozzle", + "from": "system", + "setting_id": "jX00tEZaqsJvpoBT", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "0.5" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json similarity index 79% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json rename to resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json index 53da039f09..f44bc7f46c 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "OrcaArena Generic PVA @base", + "name": "Generic PVA @OrcaArena base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OFdLdGgJ", + "filament_id": "OFDvXujf", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json new file mode 100644 index 0000000000..bf9cbcda7a --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PVA @OrcaArena", + "inherits": "Generic PVA @OrcaArena base", + "renamed_from": "OrcaArena Generic PVA", + "from": "system", + "setting_id": "S9TMm0n7t54fKHoM", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json b/resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json similarity index 80% rename from resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json rename to resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json index 8593c5c779..75fcc13a79 100644 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json +++ b/resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "OrcaArena Generic TPU", + "name": "Generic TPU @OrcaArena", "inherits": "fdm_filament_tpu", + "renamed_from": "OrcaArena Generic TPU", "from": "system", - "setting_id": "uPHnZUr5Sb16uKZm", - "filament_id": "OFU5N9jI", + "setting_id": "GBRnBtqYf9H8pQKU", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json deleted file mode 100644 index 37062950e4..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ABS @0.2 nozzle", - "inherits": "OrcaArena Generic ABS @base", - "from": "system", - "setting_id": "o9UpKuDWgaJT7sM5", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json deleted file mode 100644 index 2d3f9a5026..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ASA @0.2 nozzle", - "inherits": "OrcaArena Generic ASA @base", - "from": "system", - "setting_id": "rV2Uymwz7aoouqiN", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json deleted file mode 100644 index 0a26869776..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PC @0.2 nozzle", - "inherits": "OrcaArena Generic PC @base", - "from": "system", - "setting_id": "THS8jolD0RsYaFzY", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json deleted file mode 100644 index 375031f137..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG @0.2 nozzle", - "inherits": "OrcaArena Generic PETG @base", - "from": "system", - "setting_id": "jcoeFJFmDil7U667", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json deleted file mode 100644 index 8771a7b609..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG", - "inherits": "OrcaArena Generic PETG @base", - "from": "system", - "setting_id": "1hFOFT9YOdnKBw1d", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json deleted file mode 100644 index 4a04e96360..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA-CF", - "inherits": "OrcaArena Generic PLA-CF @base", - "from": "system", - "setting_id": "qHV6B5JvmdtAQeNs", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json deleted file mode 100644 index 2a3aef423c..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA", - "inherits": "OrcaArena Generic PLA @base", - "from": "system", - "setting_id": "jGG0BiyRGgPDP8rB", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json deleted file mode 100644 index 8892aac57f..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PVA @0.2 nozzle", - "inherits": "OrcaArena Generic PVA @base", - "from": "system", - "setting_id": "N6p6wvNCjR4Lv0WC", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "0.5" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json deleted file mode 100644 index 42a68b5fee..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PVA", - "inherits": "OrcaArena Generic PVA @base", - "from": "system", - "setting_id": "Qh5TOtrBfOFul0OC", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json index 362496ba28..e375904da2 100644 --- a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json +++ b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "OrcaArena Generic PLA Silk;OrcaArena Generic PLA;Arena PLA Matte @Arena X1C;Arena PLA Basic @Arena X1C;Arena ABS @Arena X1C;Arena PC @Arena X1C;Arena Support W @Arena X1C;Arena TPU 95A @Arena X1C;PolyTerra PLA @Arena X1C;PolyLite PLA @Arena X1C;" + "default_materials": "Generic PLA Silk @OrcaArena;Generic PLA @OrcaArena;Arena PLA Matte @Arena X1C;Arena PLA Basic @Arena X1C;Arena ABS @Arena X1C;Arena PC @Arena X1C;Arena Support W @Arena X1C;Arena TPU 95A @Arena X1C;PolyTerra PLA @Arena X1C;PolyLite PLA @Arena X1C;" } diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index e7f658a844..2f9e6a7f02 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json index 08a8158d91..958fbc75a6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json @@ -3,6 +3,9 @@ "name": "Generic PP-GF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "OFNiSLfL", - "instantiation": "false" + "filament_id": "OFsijjtH", + "instantiation": "false", + "filament_type": [ + "PP-GF" + ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json index 52d96d24d1..ad1c0ef27e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json @@ -1,7 +1,6 @@ { "type": "filament", "name": "Panchroma PLA Satin @base", - "renamed_from": "Panchroma PLA Stain @base", "inherits": "fdm_filament_pla", "from": "system", "filament_id": "OFPkCJKE", diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index ca6b59fb2b..2a73d251f1 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ @@ -105,8 +105,8 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Peopoly Generic ABS", - "sub_path": "filament/Peopoly Generic ABS.json" + "name": "Generic ABS @Peopoly", + "sub_path": "filament/Generic ABS @Peopoly.json" }, { "name": "Peopoly Lancer ABS-GF", @@ -117,16 +117,16 @@ "sub_path": "filament/Peopoly Lancer PET-CF.json" }, { - "name": "Peopoly Generic PETG", - "sub_path": "filament/Peopoly Generic PETG.json" + "name": "Generic PETG @Peopoly", + "sub_path": "filament/Generic PETG @Peopoly.json" }, { "name": "Peopoly Lancer PETG-C", "sub_path": "filament/Peopoly Lancer PETG-C.json" }, { - "name": "Peopoly Generic PLA", - "sub_path": "filament/Peopoly Generic PLA.json" + "name": "Generic PLA @Peopoly", + "sub_path": "filament/Generic PLA @Peopoly.json" }, { "name": "Peopoly Lancer PLA-C", diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json b/resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json similarity index 73% rename from resources/profiles/Peopoly/filament/Peopoly Generic ABS.json rename to resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json index ce0711b7e9..d9e2ae777c 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json +++ b/resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Peopoly Generic ABS", + "name": "Generic ABS @Peopoly", "inherits": "fdm_filament_abs", + "renamed_from": "Peopoly Generic ABS", "from": "system", - "setting_id": "ICnZH4LkPD7c6Lmm", - "filament_id": "OFqOk9Ww", + "setting_id": "HLq9urLhPLW0du6x", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json b/resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json similarity index 80% rename from resources/profiles/Peopoly/filament/Peopoly Generic PETG.json rename to resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json index 2d0b34240a..fc4501866a 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json +++ b/resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Peopoly Generic PETG", + "name": "Generic PETG @Peopoly", "inherits": "fdm_filament_petg", + "renamed_from": "Peopoly Generic PETG", "from": "system", - "setting_id": "7LVGx2lNqhBDdYiJ", - "filament_id": "OFIeCuXj", + "setting_id": "dgMXFTyLovrMR56j", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json b/resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json similarity index 79% rename from resources/profiles/Peopoly/filament/Peopoly Generic PLA.json rename to resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json index 3a24fb3bc7..42cc687493 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json +++ b/resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Peopoly Generic PLA", - "renamed_from": "Peopoly Generic PLA 0.8 nozzle", + "name": "Generic PLA @Peopoly", + "renamed_from": "Peopoly Generic PLA 0.8 nozzle;Peopoly Generic PLA", "inherits": "fdm_filament_pla", "from": "system", - "setting_id": "KNsVV4dvEWAAkzDE", - "filament_id": "OFRDLNM9", + "setting_id": "OVbRqCpU0SXiZmot", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json index 031c3b2484..02553f502d 100644 --- a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json @@ -8,5 +8,5 @@ "bed_model": "magnetox_model.stl", "bed_texture": "magnetox_model_texture.svg", "hotend_model": "", - "default_materials": "Peopoly Generic PLA" + "default_materials": "Generic PLA @Peopoly" } diff --git a/resources/profiles/Peopoly/machine/fdm_klipper_common.json b/resources/profiles/Peopoly/machine/fdm_klipper_common.json index f89d97d9a6..e9a5185767 100644 --- a/resources/profiles/Peopoly/machine/fdm_klipper_common.json +++ b/resources/profiles/Peopoly/machine/fdm_klipper_common.json @@ -127,7 +127,7 @@ "1" ], "default_filament_profile": [ - "Peopoly Generic PLA" + "Generic PLA @Peopoly" ], "default_print_profile": "fdm_process_peopoly_common_0_2", "bed_exclude_area": [ diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 91e26a9fe9..ecbbe179e7 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -1449,168 +1449,168 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Prusa Generic ABS @base", - "sub_path": "filament/Prusa Generic ABS @base.json" + "name": "Generic ABS @Prusa base", + "sub_path": "filament/Generic ABS @Prusa base.json" }, { - "name": "Prusa Generic ABS", - "sub_path": "filament/Prusa Generic ABS.json" + "name": "Generic ABS @Prusa", + "sub_path": "filament/Generic ABS @Prusa.json" }, { - "name": "Prusa Generic ABS @CORE One", - "sub_path": "filament/Prusa Generic ABS @CORE One.json" + "name": "Generic ABS @Prusa CORE One", + "sub_path": "filament/Generic ABS @Prusa CORE One.json" }, { - "name": "Prusa Generic ABS @MINIIS", - "sub_path": "filament/Prusa Generic ABS @MINIIS.json" + "name": "Generic ABS @Prusa MINIIS", + "sub_path": "filament/Generic ABS @Prusa MINIIS.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.25", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.25.json" + "name": "Generic ABS @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.6.json" + "name": "Generic ABS @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.8.json" + "name": "Generic ABS @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ABS @MK3.5", - "sub_path": "filament/Prusa Generic ABS @MK3.5.json" + "name": "Generic ABS @Prusa MK3.5", + "sub_path": "filament/Generic ABS @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.25", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.25.json" + "name": "Generic ABS @Prusa MK3.5 0.25", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.6.json" + "name": "Generic ABS @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.8.json" + "name": "Generic ABS @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ABS @MK4", - "sub_path": "filament/Prusa Generic ABS @MK4.json" + "name": "Generic ABS @Prusa MK4", + "sub_path": "filament/Generic ABS @Prusa MK4.json" }, { - "name": "Prusa Generic ABS @MK4S", - "sub_path": "filament/Prusa Generic ABS @MK4S.json" + "name": "Generic ABS @Prusa MK4S", + "sub_path": "filament/Generic ABS @Prusa MK4S.json" }, { - "name": "Prusa Generic ABS @XL", - "sub_path": "filament/Prusa Generic ABS @XL.json" + "name": "Generic ABS @Prusa XL", + "sub_path": "filament/Generic ABS @Prusa XL.json" }, { - "name": "Prusa Generic ABS @XL 5T", - "sub_path": "filament/Prusa Generic ABS @XL 5T.json" + "name": "Generic ABS @Prusa XL 5T", + "sub_path": "filament/Generic ABS @Prusa XL 5T.json" }, { - "name": "Prusa Generic ABS HF @base", - "sub_path": "filament/Prusa Generic ABS HF @base.json" + "name": "Generic ABS HF @Prusa base", + "sub_path": "filament/Generic ABS HF @Prusa base.json" }, { - "name": "Prusa Generic ABS HF @MINIIS", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS.json" + "name": "Generic ABS HF @Prusa MINIIS", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic ABS HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS 0.6.json" + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ABS HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS 0.8.json" + "name": "Generic ABS HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ABS HF @MK3.5", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5.json" + "name": "Generic ABS HF @Prusa MK3.5", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5 0.6.json" + "name": "Generic ABS HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ABS HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5 0.8.json" + "name": "Generic ABS HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ASA", - "sub_path": "filament/Prusa Generic ASA.json" + "name": "Generic ASA @Prusa", + "sub_path": "filament/Generic ASA @Prusa.json" }, { - "name": "Prusa Generic ASA @CORE One", - "sub_path": "filament/Prusa Generic ASA @CORE One.json" + "name": "Generic ASA @Prusa CORE One", + "sub_path": "filament/Generic ASA @Prusa CORE One.json" }, { - "name": "Prusa Generic ASA @MINIIS", - "sub_path": "filament/Prusa Generic ASA @MINIIS.json" + "name": "Generic ASA @Prusa MINIIS", + "sub_path": "filament/Generic ASA @Prusa MINIIS.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.25.json" + "name": "Generic ASA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.6.json" + "name": "Generic ASA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.8.json" + "name": "Generic ASA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ASA @MK3.5", - "sub_path": "filament/Prusa Generic ASA @MK3.5.json" + "name": "Generic ASA @Prusa MK3.5", + "sub_path": "filament/Generic ASA @Prusa MK3.5.json" }, { - "name": "Prusa Generic ASA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.25.json" + "name": "Generic ASA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic ASA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.6.json" + "name": "Generic ASA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ASA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.8.json" + "name": "Generic ASA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ASA @MK4", - "sub_path": "filament/Prusa Generic ASA @MK4.json" + "name": "Generic ASA @Prusa MK4", + "sub_path": "filament/Generic ASA @Prusa MK4.json" }, { - "name": "Prusa Generic ASA @MK4S", - "sub_path": "filament/Prusa Generic ASA @MK4S.json" + "name": "Generic ASA @Prusa MK4S", + "sub_path": "filament/Generic ASA @Prusa MK4S.json" }, { - "name": "Prusa Generic ASA HF @base", - "sub_path": "filament/Prusa Generic ASA HF @base.json" + "name": "Generic ASA HF @Prusa base", + "sub_path": "filament/Generic ASA HF @Prusa base.json" }, { - "name": "Prusa Generic ASA HF @MINIIS", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS.json" + "name": "Generic ASA HF @Prusa MINIIS", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic ASA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS 0.6.json" + "name": "Generic ASA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ASA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS 0.8.json" + "name": "Generic ASA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ASA HF @MK3.5", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5.json" + "name": "Generic ASA HF @Prusa MK3.5", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic ASA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5 0.6.json" + "name": "Generic ASA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ASA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5 0.8.json" + "name": "Generic ASA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5 0.8.json" }, { "name": "Prusament ASA @CORE One", @@ -1625,96 +1625,96 @@ "sub_path": "filament/Prusament ASA @XL 5T.json" }, { - "name": "Prusa Generic FLEX @XL", - "sub_path": "filament/Prusa Generic FLEX @XL.json" + "name": "Generic FLEX @Prusa XL", + "sub_path": "filament/Generic FLEX @Prusa XL.json" }, { - "name": "Prusa Generic FLEX @XL 5T", - "sub_path": "filament/Prusa Generic FLEX @XL 5T.json" + "name": "Generic FLEX @Prusa XL 5T", + "sub_path": "filament/Generic FLEX @Prusa XL 5T.json" }, { - "name": "Prusa Generic TPU @CORE One", - "sub_path": "filament/Prusa Generic TPU @CORE One.json" + "name": "Generic TPU @Prusa CORE One", + "sub_path": "filament/Generic TPU @Prusa CORE One.json" }, { - "name": "Prusa Generic PA @base", - "sub_path": "filament/Prusa Generic PA @base.json" + "name": "Generic PA @Prusa base", + "sub_path": "filament/Generic PA @Prusa base.json" }, { - "name": "Prusa Generic PA", - "sub_path": "filament/Prusa Generic PA.json" + "name": "Generic PA @Prusa", + "sub_path": "filament/Generic PA @Prusa.json" }, { - "name": "Prusa Generic PA @MINIIS", - "sub_path": "filament/Prusa Generic PA @MINIIS.json" + "name": "Generic PA @Prusa MINIIS", + "sub_path": "filament/Generic PA @Prusa MINIIS.json" }, { - "name": "Prusa Generic PA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.25.json" + "name": "Generic PA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.6.json" + "name": "Generic PA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.8.json" + "name": "Generic PA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PA @MK3.5", - "sub_path": "filament/Prusa Generic PA @MK3.5.json" + "name": "Generic PA @Prusa MK3.5", + "sub_path": "filament/Generic PA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.25.json" + "name": "Generic PA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.6.json" + "name": "Generic PA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.8.json" + "name": "Generic PA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PA-CF @base", - "sub_path": "filament/Prusa Generic PA-CF @base.json" + "name": "Generic PA-CF @Prusa base", + "sub_path": "filament/Generic PA-CF @Prusa base.json" }, { - "name": "Prusa Generic PA-CF", - "sub_path": "filament/Prusa Generic PA-CF.json" + "name": "Generic PA-CF @Prusa", + "sub_path": "filament/Generic PA-CF @Prusa.json" }, { - "name": "Prusa Generic PA-CF @MINIIS", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS.json" + "name": "Generic PA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PA-CF @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.25.json" + "name": "Generic PA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PA-CF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.6.json" + "name": "Generic PA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PA-CF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.8.json" + "name": "Generic PA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PA-CF @MK3.5", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5.json" + "name": "Generic PA-CF @Prusa MK3.5", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PA-CF @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.25.json" + "name": "Generic PA-CF @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PA-CF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.6.json" + "name": "Generic PA-CF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PA-CF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.8.json" + "name": "Generic PA-CF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.8.json" }, { "name": "Prusament PA-CF @CORE One", @@ -1729,68 +1729,68 @@ "sub_path": "filament/Prusament PA-CF @XL 5T.json" }, { - "name": "Prusa Generic PC", - "sub_path": "filament/Prusa Generic PC.json" + "name": "Generic PC @Prusa", + "sub_path": "filament/Generic PC @Prusa.json" }, { - "name": "Prusa Generic PC @MINIIS", - "sub_path": "filament/Prusa Generic PC @MINIIS.json" + "name": "Generic PC @Prusa MINIIS", + "sub_path": "filament/Generic PC @Prusa MINIIS.json" }, { - "name": "Prusa Generic PC @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.25.json" + "name": "Generic PC @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PC @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.6.json" + "name": "Generic PC @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PC @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.8.json" + "name": "Generic PC @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PC @MK3.5", - "sub_path": "filament/Prusa Generic PC @MK3.5.json" + "name": "Generic PC @Prusa MK3.5", + "sub_path": "filament/Generic PC @Prusa MK3.5.json" }, { - "name": "Prusa Generic PC @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.25.json" + "name": "Generic PC @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PC @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.6.json" + "name": "Generic PC @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PC @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.8.json" + "name": "Generic PC @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PC HF @base", - "sub_path": "filament/Prusa Generic PC HF @base.json" + "name": "Generic PC HF @Prusa base", + "sub_path": "filament/Generic PC HF @Prusa base.json" }, { - "name": "Prusa Generic PC HF @MINIIS", - "sub_path": "filament/Prusa Generic PC HF @MINIIS.json" + "name": "Generic PC HF @Prusa MINIIS", + "sub_path": "filament/Generic PC HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PC HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PC HF @MINIIS 0.6.json" + "name": "Generic PC HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PC HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PC HF @MINIIS 0.8.json" + "name": "Generic PC HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PC HF @MK3.5", - "sub_path": "filament/Prusa Generic PC HF @MK3.5.json" + "name": "Generic PC HF @Prusa MK3.5", + "sub_path": "filament/Generic PC HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PC HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PC HF @MK3.5 0.6.json" + "name": "Generic PC HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PC HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PC HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PC HF @MK3.5 0.8.json" + "name": "Generic PC HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PC HF @Prusa MK3.5 0.8.json" }, { "name": "Prusament PC Blend @CORE One", @@ -1817,92 +1817,92 @@ "sub_path": "filament/Prusament PC-CF @XL 5T.json" }, { - "name": "Prusa Generic PETG @base", - "sub_path": "filament/Prusa Generic PETG @base.json" + "name": "Generic PETG @Prusa base", + "sub_path": "filament/Generic PETG @Prusa base.json" }, { - "name": "Prusa Generic PETG", - "sub_path": "filament/Prusa Generic PETG.json" + "name": "Generic PETG @Prusa", + "sub_path": "filament/Generic PETG @Prusa.json" }, { - "name": "Prusa Generic PETG @CORE One", - "sub_path": "filament/Prusa Generic PETG @CORE One.json" + "name": "Generic PETG @Prusa CORE One", + "sub_path": "filament/Generic PETG @Prusa CORE One.json" }, { - "name": "Prusa Generic PETG @MINIIS", - "sub_path": "filament/Prusa Generic PETG @MINIIS.json" + "name": "Generic PETG @Prusa MINIIS", + "sub_path": "filament/Generic PETG @Prusa MINIIS.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.25.json" + "name": "Generic PETG @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.6.json" + "name": "Generic PETG @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.8.json" + "name": "Generic PETG @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PETG @MK3.5", - "sub_path": "filament/Prusa Generic PETG @MK3.5.json" + "name": "Generic PETG @Prusa MK3.5", + "sub_path": "filament/Generic PETG @Prusa MK3.5.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.25.json" + "name": "Generic PETG @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.6.json" + "name": "Generic PETG @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.8.json" + "name": "Generic PETG @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PETG @MK4", - "sub_path": "filament/Prusa Generic PETG @MK4.json" + "name": "Generic PETG @Prusa MK4", + "sub_path": "filament/Generic PETG @Prusa MK4.json" }, { - "name": "Prusa Generic PETG @MK4S", - "sub_path": "filament/Prusa Generic PETG @MK4S.json" + "name": "Generic PETG @Prusa MK4S", + "sub_path": "filament/Generic PETG @Prusa MK4S.json" }, { - "name": "Prusa Generic PETG @XL", - "sub_path": "filament/Prusa Generic PETG @XL.json" + "name": "Generic PETG @Prusa XL", + "sub_path": "filament/Generic PETG @Prusa XL.json" }, { - "name": "Prusa Generic PETG @XL 5T", - "sub_path": "filament/Prusa Generic PETG @XL 5T.json" + "name": "Generic PETG @Prusa XL 5T", + "sub_path": "filament/Generic PETG @Prusa XL 5T.json" }, { - "name": "Prusa Generic PETG HF @base", - "sub_path": "filament/Prusa Generic PETG HF @base.json" + "name": "Generic PETG HF @Prusa base", + "sub_path": "filament/Generic PETG HF @Prusa base.json" }, { - "name": "Prusa Generic PETG HF @MINIIS", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS.json" + "name": "Generic PETG HF @Prusa MINIIS", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PETG HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS 0.6.json" + "name": "Generic PETG HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PETG HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS 0.8.json" + "name": "Generic PETG HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PETG HF @MK3.5", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5.json" + "name": "Generic PETG HF @Prusa MK3.5", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PETG HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5 0.6.json" + "name": "Generic PETG HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PETG HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5 0.8.json" + "name": "Generic PETG HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5 0.8.json" }, { "name": "Prusament PETG @CORE One", @@ -1921,136 +1921,136 @@ "sub_path": "filament/Prusament PETG @XL 5T.json" }, { - "name": "Prusa Generic PLA @base", - "sub_path": "filament/Prusa Generic PLA @base.json" + "name": "Generic PLA @Prusa base", + "sub_path": "filament/Generic PLA @Prusa base.json" }, { - "name": "Prusa Generic PLA", - "sub_path": "filament/Prusa Generic PLA.json" + "name": "Generic PLA @Prusa", + "sub_path": "filament/Generic PLA @Prusa.json" }, { - "name": "Prusa Generic PLA @CORE One", - "sub_path": "filament/Prusa Generic PLA @CORE One.json" + "name": "Generic PLA @Prusa CORE One", + "sub_path": "filament/Generic PLA @Prusa CORE One.json" }, { - "name": "Prusa Generic PLA @MINIIS", - "sub_path": "filament/Prusa Generic PLA @MINIIS.json" + "name": "Generic PLA @Prusa MINIIS", + "sub_path": "filament/Generic PLA @Prusa MINIIS.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.25.json" + "name": "Generic PLA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.6.json" + "name": "Generic PLA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.8.json" + "name": "Generic PLA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PLA @MK3.5", - "sub_path": "filament/Prusa Generic PLA @MK3.5.json" + "name": "Generic PLA @Prusa MK3.5", + "sub_path": "filament/Generic PLA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.25.json" + "name": "Generic PLA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.6.json" + "name": "Generic PLA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.8.json" + "name": "Generic PLA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PLA @MK4", - "sub_path": "filament/Prusa Generic PLA @MK4.json" + "name": "Generic PLA @Prusa MK4", + "sub_path": "filament/Generic PLA @Prusa MK4.json" }, { - "name": "Prusa Generic PLA @MK4S", - "sub_path": "filament/Prusa Generic PLA @MK4S.json" + "name": "Generic PLA @Prusa MK4S", + "sub_path": "filament/Generic PLA @Prusa MK4S.json" }, { - "name": "Prusa Generic PLA @XL", - "sub_path": "filament/Prusa Generic PLA @XL.json" + "name": "Generic PLA @Prusa XL", + "sub_path": "filament/Generic PLA @Prusa XL.json" }, { - "name": "Prusa Generic PLA @XL 5T", - "sub_path": "filament/Prusa Generic PLA @XL 5T.json" + "name": "Generic PLA @Prusa XL 5T", + "sub_path": "filament/Generic PLA @Prusa XL 5T.json" }, { - "name": "Prusa Generic PLA HF @base", - "sub_path": "filament/Prusa Generic PLA HF @base.json" + "name": "Generic PLA HF @Prusa base", + "sub_path": "filament/Generic PLA HF @Prusa base.json" }, { - "name": "Prusa Generic PLA HF @MINIIS", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS.json" + "name": "Generic PLA HF @Prusa MINIIS", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PLA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS 0.6.json" + "name": "Generic PLA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PLA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS 0.8.json" + "name": "Generic PLA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PLA HF @MK3.5", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5.json" + "name": "Generic PLA HF @Prusa MK3.5", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5 0.6.json" + "name": "Generic PLA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5 0.8.json" + "name": "Generic PLA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PLA Silk @CORE One", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One.json" + "name": "Generic PLA Silk @Prusa CORE One", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" }, { - "name": "Prusa Generic PLA-CF @base", - "sub_path": "filament/Prusa Generic PLA-CF @base.json" + "name": "Generic PLA-CF @Prusa base", + "sub_path": "filament/Generic PLA-CF @Prusa base.json" }, { - "name": "Prusa Generic PLA-CF", - "sub_path": "filament/Prusa Generic PLA-CF.json" + "name": "Generic PLA-CF @Prusa", + "sub_path": "filament/Generic PLA-CF @Prusa.json" }, { - "name": "Prusa Generic PLA-CF @MINIIS", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS.json" + "name": "Generic PLA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PLA-CF @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.25.json" + "name": "Generic PLA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PLA-CF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.6.json" + "name": "Generic PLA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PLA-CF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.8.json" + "name": "Generic PLA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PLA-CF @MK3.5", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5.json" + "name": "Generic PLA-CF @Prusa MK3.5", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA-CF @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.25.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PLA-CF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.6.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA-CF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.8.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.8.json" }, { "name": "Prusament PLA @CORE One", @@ -2085,72 +2085,72 @@ "sub_path": "filament/Prusament rPLA @XL 5T.json" }, { - "name": "Prusa Generic PVA @base", - "sub_path": "filament/Prusa Generic PVA @base.json" + "name": "Generic PVA @Prusa base", + "sub_path": "filament/Generic PVA @Prusa base.json" }, { - "name": "Prusa Generic PVA", - "sub_path": "filament/Prusa Generic PVA.json" + "name": "Generic PVA @Prusa", + "sub_path": "filament/Generic PVA @Prusa.json" }, { - "name": "Prusa Generic PVA @MINIIS", - "sub_path": "filament/Prusa Generic PVA @MINIIS.json" + "name": "Generic PVA @Prusa MINIIS", + "sub_path": "filament/Generic PVA @Prusa MINIIS.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.25.json" + "name": "Generic PVA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.6.json" + "name": "Generic PVA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.8.json" + "name": "Generic PVA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PVA @MK3.5", - "sub_path": "filament/Prusa Generic PVA @MK3.5.json" + "name": "Generic PVA @Prusa MK3.5", + "sub_path": "filament/Generic PVA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PVA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.25.json" + "name": "Generic PVA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PVA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.6.json" + "name": "Generic PVA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PVA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.8.json" + "name": "Generic PVA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PVA HF @base", - "sub_path": "filament/Prusa Generic PVA HF @base.json" + "name": "Generic PVA HF @Prusa base", + "sub_path": "filament/Generic PVA HF @Prusa base.json" }, { - "name": "Prusa Generic PVA HF @MINIIS", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS.json" + "name": "Generic PVA HF @Prusa MINIIS", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic PVA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS 0.6.json" + "name": "Generic PVA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PVA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS 0.8.json" + "name": "Generic PVA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PVA HF @MK3.5", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5.json" + "name": "Generic PVA HF @Prusa MK3.5", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PVA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5 0.6.json" + "name": "Generic PVA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PVA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5 0.8.json" + "name": "Generic PVA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5 0.8.json" }, { "name": "Prusament PVB @CORE One", @@ -2165,112 +2165,112 @@ "sub_path": "filament/Prusament PVB @XL 5T.json" }, { - "name": "Prusa Generic TPU @base", - "sub_path": "filament/Prusa Generic TPU @base.json" + "name": "Generic TPU @Prusa base", + "sub_path": "filament/Generic TPU @Prusa base.json" }, { - "name": "Prusa Generic TPU", - "sub_path": "filament/Prusa Generic TPU.json" + "name": "Generic TPU @Prusa", + "sub_path": "filament/Generic TPU @Prusa.json" }, { - "name": "Prusa Generic TPU @MINIIS", - "sub_path": "filament/Prusa Generic TPU @MINIIS.json" + "name": "Generic TPU @Prusa MINIIS", + "sub_path": "filament/Generic TPU @Prusa MINIIS.json" }, { - "name": "Prusa Generic TPU @MK3.5", - "sub_path": "filament/Prusa Generic TPU @MK3.5.json" + "name": "Generic TPU @Prusa MK3.5", + "sub_path": "filament/Generic TPU @Prusa MK3.5.json" }, { - "name": "Prusa Generic TPU @MK4", - "sub_path": "filament/Prusa Generic TPU @MK4.json" + "name": "Generic TPU @Prusa MK4", + "sub_path": "filament/Generic TPU @Prusa MK4.json" }, { - "name": "Prusa Generic TPU @MK4S", - "sub_path": "filament/Prusa Generic TPU @MK4S.json" + "name": "Generic TPU @Prusa MK4S", + "sub_path": "filament/Generic TPU @Prusa MK4S.json" }, { - "name": "Prusa Generic TPU HF @base", - "sub_path": "filament/Prusa Generic TPU HF @base.json" + "name": "Generic TPU HF @Prusa base", + "sub_path": "filament/Generic TPU HF @Prusa base.json" }, { - "name": "Prusa Generic TPU HF @MINIIS", - "sub_path": "filament/Prusa Generic TPU HF @MINIIS.json" + "name": "Generic TPU HF @Prusa MINIIS", + "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic TPU HF @MK3.5", - "sub_path": "filament/Prusa Generic TPU HF @MK3.5.json" + "name": "Generic TPU HF @Prusa MK3.5", + "sub_path": "filament/Generic TPU HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS @CORE One 0.6", - "sub_path": "filament/Prusa Generic ABS @CORE One 0.6.json" + "name": "Generic ABS @Prusa CORE One 0.6", + "sub_path": "filament/Generic ABS @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic ABS @CORE One 0.8", - "sub_path": "filament/Prusa Generic ABS @CORE One 0.8.json" + "name": "Generic ABS @Prusa CORE One 0.8", + "sub_path": "filament/Generic ABS @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.4.json" + "name": "Generic ABS @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.5.json" + "name": "Generic ABS @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.6.json" + "name": "Generic ABS @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.8.json" + "name": "Generic ABS @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic ABS @MK4S 0.6", - "sub_path": "filament/Prusa Generic ABS @MK4S 0.6.json" + "name": "Generic ABS @Prusa MK4S 0.6", + "sub_path": "filament/Generic ABS @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic ABS @MK4S 0.8", - "sub_path": "filament/Prusa Generic ABS @MK4S 0.8.json" + "name": "Generic ABS @Prusa MK4S 0.8", + "sub_path": "filament/Generic ABS @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.4", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.4.json" + "name": "Generic ABS @Prusa MK4S HF0.4", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json" }, { - "name": "Prusa Generic ASA @CORE One 0.6", - "sub_path": "filament/Prusa Generic ASA @CORE One 0.6.json" + "name": "Generic ASA @Prusa CORE One 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic ASA @CORE One 0.8", - "sub_path": "filament/Prusa Generic ASA @CORE One 0.8.json" + "name": "Generic ASA @Prusa CORE One 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.4.json" + "name": "Generic ASA @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.5.json" + "name": "Generic ASA @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.6.json" + "name": "Generic ASA @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.8.json" + "name": "Generic ASA @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic ASA @MK4S 0.6", - "sub_path": "filament/Prusa Generic ASA @MK4S 0.6.json" + "name": "Generic ASA @Prusa MK4S 0.6", + "sub_path": "filament/Generic ASA @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic ASA @MK4S 0.8", - "sub_path": "filament/Prusa Generic ASA @MK4S 0.8.json" + "name": "Generic ASA @Prusa MK4S 0.8", + "sub_path": "filament/Generic ASA @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.4", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.4.json" + "name": "Generic ASA @Prusa MK4S HF0.4", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.4.json" }, { "name": "Prusament ASA @CORE One 0.6", @@ -2297,12 +2297,12 @@ "sub_path": "filament/Prusament ASA @CORE One HF 0.8.json" }, { - "name": "Prusa Generic TPU @CORE One 0.6", - "sub_path": "filament/Prusa Generic TPU @CORE One 0.6.json" + "name": "Generic TPU @Prusa CORE One 0.6", + "sub_path": "filament/Generic TPU @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic TPU @CORE One 0.8", - "sub_path": "filament/Prusa Generic TPU @CORE One 0.8.json" + "name": "Generic TPU @Prusa CORE One 0.8", + "sub_path": "filament/Generic TPU @Prusa CORE One 0.8.json" }, { "name": "Prusament PA-CF @CORE One 0.6", @@ -2345,40 +2345,40 @@ "sub_path": "filament/Prusament PC-CF @CORE One 0.8.json" }, { - "name": "Prusa Generic PETG @CORE One 0.6", - "sub_path": "filament/Prusa Generic PETG @CORE One 0.6.json" + "name": "Generic PETG @Prusa CORE One 0.6", + "sub_path": "filament/Generic PETG @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic PETG @CORE One 0.8", - "sub_path": "filament/Prusa Generic PETG @CORE One 0.8.json" + "name": "Generic PETG @Prusa CORE One 0.8", + "sub_path": "filament/Generic PETG @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.4.json" + "name": "Generic PETG @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.5.json" + "name": "Generic PETG @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.6.json" + "name": "Generic PETG @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.8.json" + "name": "Generic PETG @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic PETG @MK4S 0.6", - "sub_path": "filament/Prusa Generic PETG @MK4S 0.6.json" + "name": "Generic PETG @Prusa MK4S 0.6", + "sub_path": "filament/Generic PETG @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic PETG @MK4S 0.8", - "sub_path": "filament/Prusa Generic PETG @MK4S 0.8.json" + "name": "Generic PETG @Prusa MK4S 0.8", + "sub_path": "filament/Generic PETG @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.4", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.4.json" + "name": "Generic PETG @Prusa MK4S HF0.4", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.4.json" }, { "name": "Prusament PETG @CORE One 0.6", @@ -2405,52 +2405,52 @@ "sub_path": "filament/Prusament PETG @CORE One HF 0.8.json" }, { - "name": "Prusa Generic PLA @CORE One 0.6", - "sub_path": "filament/Prusa Generic PLA @CORE One 0.6.json" + "name": "Generic PLA @Prusa CORE One 0.6", + "sub_path": "filament/Generic PLA @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic PLA @CORE One 0.8", - "sub_path": "filament/Prusa Generic PLA @CORE One 0.8.json" + "name": "Generic PLA @Prusa CORE One 0.8", + "sub_path": "filament/Generic PLA @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.4.json" + "name": "Generic PLA @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.5.json" + "name": "Generic PLA @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.6.json" + "name": "Generic PLA @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.8.json" + "name": "Generic PLA @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic PLA @MK4S 0.6", - "sub_path": "filament/Prusa Generic PLA @MK4S 0.6.json" + "name": "Generic PLA @Prusa MK4S 0.6", + "sub_path": "filament/Generic PLA @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic PLA @MK4S 0.8", - "sub_path": "filament/Prusa Generic PLA @MK4S 0.8.json" + "name": "Generic PLA @Prusa MK4S 0.8", + "sub_path": "filament/Generic PLA @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.4", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.4.json" + "name": "Generic PLA @Prusa MK4S HF0.4", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.4.json" }, { - "name": "Prusa Generic PLA Silk @MK4S", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S.json" + "name": "Generic PLA Silk @Prusa MK4S", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S.json" }, { - "name": "Prusa Generic PLA Silk @CORE One 0.6", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One 0.6.json" + "name": "Generic PLA Silk @Prusa CORE One 0.6", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic PLA Silk @CORE One 0.8", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One 0.8.json" + "name": "Generic PLA Silk @Prusa CORE One 0.8", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json" }, { "name": "Prusament PLA @CORE One 0.6", @@ -2493,68 +2493,68 @@ "sub_path": "filament/Prusament PVB @CORE One 0.8.json" }, { - "name": "Prusa Generic TPU @MK4S 0.6", - "sub_path": "filament/Prusa Generic TPU @MK4S 0.6.json" + "name": "Generic TPU @Prusa MK4S 0.6", + "sub_path": "filament/Generic TPU @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic TPU @MK4S 0.8", - "sub_path": "filament/Prusa Generic TPU @MK4S 0.8.json" + "name": "Generic TPU @Prusa MK4S 0.8", + "sub_path": "filament/Generic TPU @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.5", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.5.json" + "name": "Generic ABS @Prusa MK4S HF0.5", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.6", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.6.json" + "name": "Generic ABS @Prusa MK4S HF0.6", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.8", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.8.json" + "name": "Generic ABS @Prusa MK4S HF0.8", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.5", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.5.json" + "name": "Generic ASA @Prusa MK4S HF0.5", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.6", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.6.json" + "name": "Generic ASA @Prusa MK4S HF0.6", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.8", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.8.json" + "name": "Generic ASA @Prusa MK4S HF0.8", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.5", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.5.json" + "name": "Generic PETG @Prusa MK4S HF0.5", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.6", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.6.json" + "name": "Generic PETG @Prusa MK4S HF0.6", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.8", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.8.json" + "name": "Generic PETG @Prusa MK4S HF0.8", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.5", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.5.json" + "name": "Generic PLA @Prusa MK4S HF0.5", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.6", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.6.json" + "name": "Generic PLA @Prusa MK4S HF0.6", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.8", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.8.json" + "name": "Generic PLA @Prusa MK4S HF0.8", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PLA Silk @MK4S 0.6", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S 0.6.json" + "name": "Generic PLA Silk @Prusa MK4S 0.6", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic PLA Silk @MK4S 0.8", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S 0.8.json" + "name": "Generic PLA Silk @Prusa MK4S 0.8", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S 0.8.json" } ], "machine_list": [ diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..8ba18e9dde --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One 0.6", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One 0.6;Prusa Generic ABS CORE One 0.6", + "from": "system", + "setting_id": "PYQhstNvKFJ7qsxe", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..2981c2ef63 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One 0.8", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One 0.8;Prusa Generic ABS CORE One 0.8", + "from": "system", + "setting_id": "ExG49agessyLCVpW", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "40" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json similarity index 71% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json index 84d2ed8ea6..f2e61055ab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.4", - "inherits": "Prusa Generic ABS @CORE One", + "name": "Generic ABS @Prusa CORE One HF 0.4", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.4;Prusa Generic ABS CORE One HF 0.4", "from": "system", - "setting_id": "Sp0sbcvt0EqZ59NT", - "filament_id": "OFvGc67v", + "setting_id": "ASYz8yASE82tQDII", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json similarity index 71% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json index 568f8468e5..14782a747a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.5", - "inherits": "Prusa Generic ABS @CORE One", + "name": "Generic ABS @Prusa CORE One HF 0.5", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.5;Prusa Generic ABS CORE One HF 0.5", "from": "system", - "setting_id": "U1ih5tnkViqI3vya", - "filament_id": "OFvGc67v", + "setting_id": "mzZCm8XDmAR23YR6", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json similarity index 71% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json index debed7aed6..be46455a73 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.6", - "inherits": "Prusa Generic ABS @CORE One", + "name": "Generic ABS @Prusa CORE One HF 0.6", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.6;Prusa Generic ABS CORE One HF 0.6", "from": "system", - "setting_id": "MuqHvIoTlM1Pbs8j", - "filament_id": "OFvGc67v", + "setting_id": "gJhX2KBpk4wfXIj0", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json similarity index 74% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json index 66655ce8e8..f4d2954ad7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.8", - "inherits": "Prusa Generic ABS @CORE One", + "name": "Generic ABS @Prusa CORE One HF 0.8", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.8;Prusa Generic ABS CORE One HF 0.8", "from": "system", - "setting_id": "Wbpc2Ddzc3zPnQVr", - "filament_id": "OFvGc67v", + "setting_id": "JbGYSVdZTeFJXaVk", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json similarity index 92% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json index 784eb0ef4d..7339d20a7c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @CORE One", + "name": "Generic ABS @Prusa CORE One", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @CORE One;Prusa Generic ABS CORE One", "from": "system", - "setting_id": "NajoyXhNAiyJyaRq", - "filament_id": "OFvGc67v", + "setting_id": "0k31oXq1pLQsHvrj", + "filament_id": "OFY9muEs", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json index ca834afe43..0fe673d854 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.25", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa MINIIS 0.25", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.25;Prusa Generic ABS MINIIS 0.25", "from": "system", - "setting_id": "NdGEi7BdP59bqz53", + "setting_id": "T7U23i3I3ALV2oEd", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json index b4c5c636bf..3b9fa495e3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.6", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa MINIIS 0.6", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.6;Prusa Generic ABS MINIIS 0.6", "from": "system", - "setting_id": "f8RXAaEZ13jSgN9u", + "setting_id": "iZdNxczgKBs0zIiI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json index 7b847c26b0..e9d5d7554b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.8", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa MINIIS 0.8", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.8;Prusa Generic ABS MINIIS 0.8", "from": "system", - "setting_id": "0QdQCdtcKqM9HhpD", + "setting_id": "f6fZt6LNgXSHjInj", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json index 35bf33de08..9f6569d6e9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @MINIIS", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa MINIIS", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS;Prusa Generic ABS MINIIS", "from": "system", - "setting_id": "LmdcShjNmbZ8E5fo", + "setting_id": "ZqiVOVIYGAbB1SPk", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json index aacddbfd2d..0a36c04f02 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.25", + "name": "Generic ABS @Prusa MK3.5 0.25", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.25;Prusa Generic ABS MK3.5 0.25", "from": "system", - "setting_id": "bQgom9OdLzHf862f", - "filament_id": "OFvGc67v", + "setting_id": "IjZS8VJrGg6fRiI2", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json index 1b45ec65e7..04626e6ad8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.6", + "name": "Generic ABS @Prusa MK3.5 0.6", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.6;Prusa Generic ABS MK3.5 0.6", "from": "system", - "setting_id": "juio4SnE9x7bcYdO", - "filament_id": "OFvGc67v", + "setting_id": "iJ2u6LgWCZd2zaPJ", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json index dfc5fbc984..4e65b7e329 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.8", + "name": "Generic ABS @Prusa MK3.5 0.8", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.8;Prusa Generic ABS MK3.5 0.8", "from": "system", - "setting_id": "dRt2nKkJ0saWba5s", - "filament_id": "OFvGc67v", + "setting_id": "m8neIe1dfWt5Klbq", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json index d0cc74cc63..075e055e72 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK3.5", + "name": "Generic ABS @Prusa MK3.5", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5;Prusa Generic ABS MK3.5", "from": "system", - "setting_id": "etTLu2Uk95XriBxT", - "filament_id": "OFvGc67v", + "setting_id": "EEc6F9uzIkv6nFib", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json similarity index 86% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json index 6b4f8d9fdf..9ab147b678 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK4", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa MK4", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MK4;Prusa Generic ABS MK4", "from": "system", - "setting_id": "Yeqfgyq1l0b1tCaT", + "setting_id": "MVcRPldYJo5fnXh8", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..7371c1f2f9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S 0.6", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S 0.6;Prusa Generic ABS MK4S 0.6", + "from": "system", + "setting_id": "aNRfxkoYTEG3NPV1", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..bf0e8419cf --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S 0.8", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S 0.8;Prusa Generic ABS MK4S 0.8", + "from": "system", + "setting_id": "sL7NL7GOf52fzxnj", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json index ecd8ec0872..84aca85d1a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.4", - "inherits": "Prusa Generic ABS @MK4S", + "name": "Generic ABS @Prusa MK4S HF0.4", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S HF0.4;Prusa Generic ABS MK4S HF0.4", "from": "system", - "setting_id": "8iqhyZkLiVCvZYLa", - "filament_id": "OFvGc67v", + "setting_id": "usm5Dycg7z1b1o1v", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..cb9f3ccebc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.5", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.5;Prusa Generic ABS MK4S HF0.5", + "from": "system", + "setting_id": "EdrmoUsReFVn5EWW", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..2327e2d1cc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.6", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.6;Prusa Generic ABS MK4S HF0.6", + "from": "system", + "setting_id": "lcxvk4AN6z8NGdKv", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "34" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json new file mode 100644 index 0000000000..81bf85e41c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.8", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.8;Prusa Generic ABS MK4S HF0.8", + "from": "system", + "setting_id": "VTSZGauVB9yGzOJD", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.8 nozzle" + ], + "fan_min_speed": "15", + "filament_max_volumetric_speed": [ + "36" + ], + "slow_down_layer_time": "25" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json index 37762490e5..c454e1d79b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS @MK4S", + "name": "Generic ABS @Prusa MK4S", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK4S;Prusa Generic ABS MK4S", "from": "system", - "setting_id": "mDDX6Hdt6Ee00Iqb", - "filament_id": "OFvGc67v", + "setting_id": "6xkFvOyWtTQNXYAm", + "filament_id": "OFY9muEs", "instantiation": "true", "close_fan_the_first_x_layers": "4", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json index 38559e4b26..7d53f66645 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @XL 5T", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa XL 5T", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @XL 5T;Prusa Generic ABS XL 5T", "from": "system", - "setting_id": "BVYagI9PtDtO1Jhu", + "setting_id": "XfavDzEzzrXDQVUC", "instantiation": "true", "nozzle_temperature_intial_layer": "255", "nozzle_temperature": "255", diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json similarity index 90% rename from resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json index e40a10cbeb..abf7986c12 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS @XL", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa XL", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @XL;Prusa Generic ABS XL", "from": "system", - "setting_id": "fN9NUlg8l5DWy4LN", + "setting_id": "HYHkGEjr6Kid2Xg2", "instantiation": "true", "nozzle_temperature_intial_layer": "255", "nozzle_temperature": "255", diff --git a/resources/profiles/Anker/filament/Anker Generic ABS @base.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic ABS @base.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa base.json index c4982fcfb4..265216328f 100644 --- a/resources/profiles/Anker/filament/Anker Generic ABS @base.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic ABS @base", + "name": "Generic ABS @Prusa base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OF3P0BQA", + "filament_id": "OFY9muEs", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic ABS.json rename to resources/profiles/Prusa/filament/Generic ABS @Prusa.json index 9fef1f871c..0c10f8f297 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS.json +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS", - "inherits": "Prusa Generic ABS @base", + "name": "Generic ABS @Prusa", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS", "from": "system", - "setting_id": "pqQMpMgbSN3XvTdK", + "setting_id": "RBSSZVt1NCAz4x3V", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json index f8959a77b2..071e689280 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS 0.6", - "inherits": "Prusa Generic ABS HF @base", + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS 0.6;Prusa Generic ABS HF MINIIS 0.6", "from": "system", - "setting_id": "86pFdkE3ly08xst7", + "setting_id": "L6copDR26trR0D8B", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json index 63c1207fd9..ca0b250240 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS 0.8", - "inherits": "Prusa Generic ABS HF @base", + "name": "Generic ABS HF @Prusa MINIIS 0.8", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS 0.8;Prusa Generic ABS HF MINIIS 0.8", "from": "system", - "setting_id": "yn9imamHaXlFDsPr", + "setting_id": "oxiwspATW960u3eZ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json index 358aa57b6d..6acc1844e7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS", - "inherits": "Prusa Generic ABS HF @base", + "name": "Generic ABS HF @Prusa MINIIS", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS;Prusa Generic ABS HF MINIIS", "from": "system", - "setting_id": "KFoCfgUW9k9Yglwj", + "setting_id": "KcRRWqB7hrovzBng", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json index 10b456d822..5e446b1507 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5 0.6", + "name": "Generic ABS HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5 0.6;Prusa Generic ABS HF MK3.5 0.6", "from": "system", - "setting_id": "IF0vGesJrPxKZhhP", - "filament_id": "OFyeSq8A", + "setting_id": "ELwxwCcaOKeCUqoB", + "filament_id": "OF55jHAJ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json index abd3a2fc9e..e5f48f3390 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5 0.8", + "name": "Generic ABS HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5 0.8;Prusa Generic ABS HF MK3.5 0.8", "from": "system", - "setting_id": "Bl3iXBs56hdXM9SE", - "filament_id": "OFyeSq8A", + "setting_id": "xWMzscdlR6llxFKQ", + "filament_id": "OF55jHAJ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json index 02c86e018b..9c1f224149 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5", + "name": "Generic ABS HF @Prusa MK3.5", "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5;Prusa Generic ABS HF MK3.5", "from": "system", - "setting_id": "0luFxwjErjX80SXh", - "filament_id": "OFyeSq8A", + "setting_id": "n9Xu8L69l5rs6VZF", + "filament_id": "OF55jHAJ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json rename to resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json index a1745176f2..adeb00182e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @base.json +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic ABS HF @base", + "name": "Generic ABS HF @Prusa base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OFyeSq8A", + "filament_id": "OF55jHAJ", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..0fa54a9d21 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One 0.6", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One 0.6;Prusa Generic ASA CORE One 0.6", + "from": "system", + "setting_id": "WJzGT568OrlSqxjt", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json similarity index 50% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json index c112241e63..db78ff7eeb 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One 0.8", - "inherits": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One 0.8", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One 0.8;Prusa Generic ASA CORE One 0.8", "from": "system", - "setting_id": "jwPZBZ4B116kCVu9", - "filament_id": "OFoJcr46", + "setting_id": "VtxVQIuWVkP6W3aN", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json similarity index 74% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json index 04bf35f2e7..18a1b68fb3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.4", - "inherits": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One HF 0.4", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.4;Prusa Generic ASA CORE One HF 0.4", "from": "system", - "setting_id": "3SHxmODIq9SCK4Kd", - "filament_id": "OFoJcr46", + "setting_id": "eKDfiVRE59itoppm", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json similarity index 74% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json index dfe8fec3fe..dd7c08b25f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.5", - "inherits": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One HF 0.5", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.5;Prusa Generic ASA CORE One HF 0.5", "from": "system", - "setting_id": "RBSMuMnrcTyregVJ", - "filament_id": "OFoJcr46", + "setting_id": "ZjHf5Vvtf4ESNnWb", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json index f74efb4310..7ca03b1c37 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.6", - "inherits": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One HF 0.6", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.6;Prusa Generic ASA CORE One HF 0.6", "from": "system", - "setting_id": "5ezNirZa3m7Oi1Ts", - "filament_id": "OFoJcr46", + "setting_id": "aRDgUgQJWdNDJx5c", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json similarity index 76% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json index 8d6bb1a685..7fe2a7d8bf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.8", - "inherits": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One HF 0.8", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.8;Prusa Generic ASA CORE One HF 0.8", "from": "system", - "setting_id": "EtHBkeDF0LvudfBi", - "filament_id": "OFoJcr46", + "setting_id": "UQYl8pGvqg2D9zJX", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json similarity index 92% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json index e00a4d7ca8..84fe0fa3d9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @CORE One", + "name": "Generic ASA @Prusa CORE One", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @CORE One;Prusa Generic ASA CORE One", "from": "system", - "setting_id": "Pg9KDqFB63PFJo3Q", - "filament_id": "OFoJcr46", + "setting_id": "Q7fgojkHRZI0floy", + "filament_id": "OFLPAxz3", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json index 088221b03a..8aeaefd5c8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.25", + "name": "Generic ASA @Prusa MINIIS 0.25", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.25;Prusa Generic ASA MINIIS 0.25", "from": "system", - "setting_id": "oLhpDGV7BIMFqZZq", - "filament_id": "OFoJcr46", + "setting_id": "3k53bfrhLAnuxHQo", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json index d11f2f2dd6..46cf4ee835 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.6", + "name": "Generic ASA @Prusa MINIIS 0.6", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.6;Prusa Generic ASA MINIIS 0.6", "from": "system", - "setting_id": "CN91PnsqqI5CTRhd", - "filament_id": "OFoJcr46", + "setting_id": "NMILNvvq88zkz2Lf", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json index 2eae500425..2e96b0d886 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.8", + "name": "Generic ASA @Prusa MINIIS 0.8", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.8;Prusa Generic ASA MINIIS 0.8", "from": "system", - "setting_id": "Mg0Sh8QULakXYt0m", - "filament_id": "OFoJcr46", + "setting_id": "lnjqcRttOW0XRGe2", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json similarity index 80% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json index 2d969f15be..add2390249 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MINIIS", + "name": "Generic ASA @Prusa MINIIS", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS;Prusa Generic ASA MINIIS", "from": "system", - "setting_id": "StIz1ZclM5WV6MCC", - "filament_id": "OFoJcr46", + "setting_id": "53FptNgFYqTPZfkV", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json index 5888bf67d4..ddf9c2d380 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.25", + "name": "Generic ASA @Prusa MK3.5 0.25", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.25;Prusa Generic ASA MK3.5 0.25", "from": "system", - "setting_id": "EVFkOOWqYWkUZRQG", - "filament_id": "OFoJcr46", + "setting_id": "zyUCfzPlsqRZiUvj", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json index b467748041..0bcbf559e4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.6", + "name": "Generic ASA @Prusa MK3.5 0.6", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.6;Prusa Generic ASA MK3.5 0.6", "from": "system", - "setting_id": "LW2yi7y86rJ59LMi", - "filament_id": "OFoJcr46", + "setting_id": "AjpsLZCJaPLfpGdv", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json index 7330692d37..2ca5decddd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.8", + "name": "Generic ASA @Prusa MK3.5 0.8", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.8;Prusa Generic ASA MK3.5 0.8", "from": "system", - "setting_id": "5iwLdW6pq5Y4Aziw", - "filament_id": "OFoJcr46", + "setting_id": "UwiRVbIWfsSjXcwV", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json index 4f1717860a..61eed484a1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK3.5", + "name": "Generic ASA @Prusa MK3.5", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5;Prusa Generic ASA MK3.5", "from": "system", - "setting_id": "UaLDui75hljyKAkI", - "filament_id": "OFoJcr46", + "setting_id": "BA46zZsxlvH5bdbC", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json similarity index 86% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json index f3d8a91378..bf6998903d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK4", + "name": "Generic ASA @Prusa MK4", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK4;Prusa Generic ASA MK4", "from": "system", - "setting_id": "ubNQKQ8Ex6khEWaI", - "filament_id": "OFoJcr46", + "setting_id": "3HdBZTnRTu6aKN1e", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..15d5cb17a8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S 0.6", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S 0.6;Prusa Generic ASA MK4S 0.6", + "from": "system", + "setting_id": "gtPmGmeYUKi7hwVI", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ], + "nozzle_temperature": "255", + "slow_down_layer_time": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..5af8faecb8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S 0.8", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S 0.8;Prusa Generic ASA MK4S 0.8", + "from": "system", + "setting_id": "a0IXdYic1FVnKaJg", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ], + "fan_max_speed": "15", + "fan_min_speed": "15", + "slow_down_layer_time": "18" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json similarity index 72% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json index a9a784f496..033ca2b942 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.4", - "inherits": "Prusa Generic ASA @MK4S", + "name": "Generic ASA @Prusa MK4S HF0.4", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S HF0.4;Prusa Generic ASA MK4S HF0.4", "from": "system", - "setting_id": "na3FnleO5uhDF7Yr", - "filament_id": "OFoJcr46", + "setting_id": "INXVBsLNAkRQUlPU", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..fe96876ce6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.5", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.5;Prusa Generic ASA MK4S HF0.5", + "from": "system", + "setting_id": "g7VYJJrBS9mmbJOi", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..56c2ff76e0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.6", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.6;Prusa Generic ASA MK4S HF0.6", + "from": "system", + "setting_id": "yDj1rzyRIOYJM4Pp", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "fan_max_speed": "15", + "fan_min_speed": "15", + "filament_max_volumetric_speed": [ + "34" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json similarity index 58% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json index f0b377c8d1..be3eeb1fe4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.8", - "inherits": "Prusa Generic ASA @MK4S HF0.4", + "name": "Generic ASA @Prusa MK4S HF0.8", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.8;Prusa Generic ASA MK4S HF0.8", "from": "system", - "setting_id": "VDDgOXq5iphlyQ5U", - "filament_id": "OFoJcr46", + "setting_id": "HF59RnyQo2wt5act", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json index 75c3dcc399..80ba2d523b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA @MK4S", + "name": "Generic ASA @Prusa MK4S", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK4S;Prusa Generic ASA MK4S", "from": "system", - "setting_id": "5BZ0OsiwFPYGCcBg", - "filament_id": "OFoJcr46", + "setting_id": "THc7WYsGi7nwc5wv", + "filament_id": "OFLPAxz3", "instantiation": "true", "close_fan_the_first_x_layers": "4", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json similarity index 88% rename from resources/profiles/Prusa/filament/Prusa Generic ASA.json rename to resources/profiles/Prusa/filament/Generic ASA @Prusa.json index 3bc0c0fd69..19d7553977 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA.json +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA", + "name": "Generic ASA @Prusa", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA", "from": "system", - "setting_id": "i5Zm7qbFAtsgG4mF", - "filament_id": "OFoJcr46", + "setting_id": "Uff8hd9OkoS2Yly7", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json similarity index 76% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json index 1dda0e52e2..a8806ff0c6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS 0.6", - "inherits": "Prusa Generic ASA HF @base", + "name": "Generic ASA HF @Prusa MINIIS 0.6", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS 0.6;Prusa Generic ASA HF MINIIS 0.6", "from": "system", - "setting_id": "uf2mhiPodkiOu8Ui", + "setting_id": "Xswtt3GpBabtxN4h", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json similarity index 76% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json index b3d9bad889..cceae0087a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS 0.8", - "inherits": "Prusa Generic ASA HF @base", + "name": "Generic ASA HF @Prusa MINIIS 0.8", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS 0.8;Prusa Generic ASA HF MINIIS 0.8", "from": "system", - "setting_id": "GMfOVAhKgKoiGZH5", + "setting_id": "z13Q2CqpzsnazYwI", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json index 68ade52513..4a9bb2b877 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS", - "inherits": "Prusa Generic ASA HF @base", + "name": "Generic ASA HF @Prusa MINIIS", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS;Prusa Generic ASA HF MINIIS", "from": "system", - "setting_id": "o8mGAPApXYWIvPhm", + "setting_id": "zzMFtHrjmImnj77f", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json index 3a6e047baa..e62013867c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5 0.6", + "name": "Generic ASA HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5 0.6;Prusa Generic ASA HF MK3.5 0.6", "from": "system", - "setting_id": "TwgQePxtpUic69Yw", - "filament_id": "OFK4LdYI", + "setting_id": "lhsnnKDQp3U8enP3", + "filament_id": "OFzRtFM9", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json similarity index 77% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json index 9d2bce435d..74d0b8a4dc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5 0.8", + "name": "Generic ASA HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5 0.8;Prusa Generic ASA HF MK3.5 0.8", "from": "system", - "setting_id": "TC1QAhU8v7mruXHK", - "filament_id": "OFK4LdYI", + "setting_id": "Qb9bphdgmmLKHgnC", + "filament_id": "OFzRtFM9", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json index f0d0395d78..b5675c32a0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5", + "name": "Generic ASA HF @Prusa MK3.5", "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5;Prusa Generic ASA HF MK3.5", "from": "system", - "setting_id": "1s3xgWuvTP6UvMG7", - "filament_id": "OFK4LdYI", + "setting_id": "C9YvhnKeHonpemK8", + "filament_id": "OFzRtFM9", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json rename to resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json index 6dc6096675..8b6262282d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @base.json +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic ASA HF @base", + "name": "Generic ASA HF @Prusa base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OFK4LdYI", + "filament_id": "OFzRtFM9", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json rename to resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json index dcf3793661..c0501006d2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic FLEX @XL 5T", + "name": "Generic FLEX @Prusa XL 5T", "inherits": "fdm_filament_flex", + "renamed_from": "Prusa Generic FLEX @XL 5T;Prusa Generic FLEX XL 5T", "from": "system", - "setting_id": "PaXKTb31IFVovWiK", - "filament_id": "OFl2SXmv", + "setting_id": "ef8fSryRYselyr4G", + "filament_id": "OFbPuPKY", "instantiation": "true", "filament_loading_speed_start": "3", "filament_loading_speed": "28", diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json rename to resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json index 7231531ee2..ea56f3a8b5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic FLEX @XL", + "name": "Generic FLEX @Prusa XL", "inherits": "fdm_filament_flex", + "renamed_from": "Prusa Generic FLEX @XL;Prusa Generic FLEX XL", "from": "system", - "setting_id": "b5AA45MlL14moY71", - "filament_id": "OFl2SXmv", + "setting_id": "qrFWrwgQSXgU7oCb", + "filament_id": "OFbPuPKY", "instantiation": "true", "filament_loading_speed_start": "3", "filament_loading_speed": "28", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json index a74492d2aa..f887a7caca 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.25", - "inherits": "Prusa Generic PA @base", + "name": "Generic PA @Prusa MINIIS 0.25", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.25;Prusa Generic PA MINIIS 0.25", "from": "system", - "setting_id": "tGSqS5YX8FXkVAKa", + "setting_id": "zONIDmAy6bC6rkBd", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json index a28f3eedf0..fce5c4f837 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.6", - "inherits": "Prusa Generic PA @base", + "name": "Generic PA @Prusa MINIIS 0.6", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.6;Prusa Generic PA MINIIS 0.6", "from": "system", - "setting_id": "u3ZeKEiAwme06ioU", + "setting_id": "Ib0bThHzZ0GXWgXv", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json index cbf0faa16a..35c7df7919 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.8", - "inherits": "Prusa Generic PA @base", + "name": "Generic PA @Prusa MINIIS 0.8", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.8;Prusa Generic PA MINIIS 0.8", "from": "system", - "setting_id": "nE90oPuU8lRFVBCl", + "setting_id": "WSCkyvdqYKalsLHg", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json index c8ff9bf5cb..67e59c92d9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA @MINIIS", - "inherits": "Prusa Generic PA @base", + "name": "Generic PA @Prusa MINIIS", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS;Prusa Generic PA MINIIS", "from": "system", - "setting_id": "hda5VGcBTJOFu6B0", + "setting_id": "06VxUw37OfEzaSka", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json similarity index 69% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json index 1a2065a58d..eebbafe187 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.25", + "name": "Generic PA @Prusa MK3.5 0.25", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.25;Prusa Generic PA MK3.5 0.25", "from": "system", - "setting_id": "4LeqziiUcsZFvsqn", - "filament_id": "OFIy3kLw", + "setting_id": "htgSl4rIQ1smRBy4", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json similarity index 69% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json index 8e67d973c4..6405d18e56 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.6", + "name": "Generic PA @Prusa MK3.5 0.6", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.6;Prusa Generic PA MK3.5 0.6", "from": "system", - "setting_id": "FoUTZTxQNZRSUZqi", - "filament_id": "OFIy3kLw", + "setting_id": "LPzPJN0XdHVQDEsd", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json similarity index 69% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json index 8a026c1c90..d85d70d810 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.8", + "name": "Generic PA @Prusa MK3.5 0.8", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.8;Prusa Generic PA MK3.5 0.8", "from": "system", - "setting_id": "7Qe2dHRqSOhsuoPn", - "filament_id": "OFIy3kLw", + "setting_id": "WiO6dm6LbzJxOC9j", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json similarity index 70% rename from resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json index cdea8133e3..f3309fd275 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA @MK3.5", + "name": "Generic PA @Prusa MK3.5", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5;Prusa Generic PA MK3.5", "from": "system", - "setting_id": "HIOtwj2ImWrlXkld", - "filament_id": "OFIy3kLw", + "setting_id": "YfGmmjqpxHcDcRsk", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Anker/filament/Anker Generic PA @base.json b/resources/profiles/Prusa/filament/Generic PA @Prusa base.json similarity index 61% rename from resources/profiles/Anker/filament/Anker Generic PA @base.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa base.json index f95b038b25..c74dce0514 100644 --- a/resources/profiles/Anker/filament/Anker Generic PA @base.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Anker Generic PA @base", + "name": "Generic PA @Prusa base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OFMgJQCZ", + "filament_id": "OFg8ndtj", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Generic PA @Prusa.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic PA.json rename to resources/profiles/Prusa/filament/Generic PA @Prusa.json index b50c329fab..1ebaec2fe2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA", - "inherits": "Prusa Generic PA @base", + "name": "Generic PA @Prusa", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA", "from": "system", - "setting_id": "lWO6oNoV0wjzRVja", + "setting_id": "zTnz1NYXoXxIHhRv", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json index cc78a91ff9..85ae694018 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.25", - "inherits": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa MINIIS 0.25", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.25;Prusa Generic PA-CF MINIIS 0.25", "from": "system", - "setting_id": "R9H0mIGTEh4rxRag", + "setting_id": "5OyMl43GFDPQHrx3", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json index 9cca375d20..e986346eee 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.6", - "inherits": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa MINIIS 0.6", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.6;Prusa Generic PA-CF MINIIS 0.6", "from": "system", - "setting_id": "qy8b2cQmrhmxfUfm", + "setting_id": "lvYPxwHzVnW29IKZ", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json index 930599ddf8..1e3dd13b49 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.8", - "inherits": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa MINIIS 0.8", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.8;Prusa Generic PA-CF MINIIS 0.8", "from": "system", - "setting_id": "PNdZVpjyekMxgAWx", + "setting_id": "LlGpiQAvrrd5bMCs", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json index 320eaaccd5..6c59be3227 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS", - "inherits": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa MINIIS", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS;Prusa Generic PA-CF MINIIS", "from": "system", - "setting_id": "B2SFfVrYjPnN9rw3", + "setting_id": "AfQLoOulI6zwAZDg", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json similarity index 69% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json index 16fd70bc82..8f0622e2cc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.25", + "name": "Generic PA-CF @Prusa MK3.5 0.25", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.25;Prusa Generic PA-CF MK3.5 0.25", "from": "system", - "setting_id": "BjLde5wICEYFSlu1", - "filament_id": "OFfznI0Q", + "setting_id": "15pNQLVuXkSI3zjU", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json similarity index 70% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json index 193dcfe35c..bb6fc654ad 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.6", + "name": "Generic PA-CF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.6;Prusa Generic PA-CF MK3.5 0.6", "from": "system", - "setting_id": "XgIsgzltjlTU8ixC", - "filament_id": "OFfznI0Q", + "setting_id": "3ZKi2gcV6LgJwidS", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json similarity index 70% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json index 9cbde53ee4..2ad7d45932 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.8", + "name": "Generic PA-CF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.8;Prusa Generic PA-CF MK3.5 0.8", "from": "system", - "setting_id": "b2fjpGuYwbeo7O9K", - "filament_id": "OFfznI0Q", + "setting_id": "Ilehw0Za73eW1Z9v", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json similarity index 71% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json index b13ab2ddb0..4150a3f625 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5", + "name": "Generic PA-CF @Prusa MK3.5", "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5;Prusa Generic PA-CF MK3.5", "from": "system", - "setting_id": "ko8pHTrnZTzz6LyX", - "filament_id": "OFfznI0Q", + "setting_id": "yy2FgYPLARliAAmZ", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json index 28733da65c..1e5c1936d4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @base.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OFfznI0Q", + "filament_id": "OFQLcbps", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json similarity index 79% rename from resources/profiles/Prusa/filament/Prusa Generic PA-CF.json rename to resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json index ac15c94417..f60463913f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PA-CF", - "inherits": "Prusa Generic PA-CF @base", + "name": "Generic PA-CF @Prusa", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF", "from": "system", - "setting_id": "bptwthfCtglFSoMw", + "setting_id": "R2WthJ8gqw8xdajn", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json index 37520ad405..4c50bdca0c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.25", + "name": "Generic PC @Prusa MINIIS 0.25", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.25;Prusa Generic PC MINIIS 0.25", "from": "system", - "setting_id": "P9dO2M6dPICX7rhQ", - "filament_id": "OF97ru74", + "setting_id": "v5LHPemQZ8fEQJrX", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json index 2642930cc1..f6e67d5d5e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.6", + "name": "Generic PC @Prusa MINIIS 0.6", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.6;Prusa Generic PC MINIIS 0.6", "from": "system", - "setting_id": "uAzPBVsMr6eS1XXS", - "filament_id": "OF97ru74", + "setting_id": "MOLOCn9YKfvHMmOu", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json index 2a3fe6485b..ecfa0c6fea 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.8", + "name": "Generic PC @Prusa MINIIS 0.8", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.8;Prusa Generic PC MINIIS 0.8", "from": "system", - "setting_id": "MZd6zhq1pvhDj6yz", - "filament_id": "OF97ru74", + "setting_id": "eJ9SwUbq1VyHBciM", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json index 4a3bb29282..088f2be363 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MINIIS", + "name": "Generic PC @Prusa MINIIS", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS;Prusa Generic PC MINIIS", "from": "system", - "setting_id": "H7HoG0RfPLMTnCEo", - "filament_id": "OF97ru74", + "setting_id": "2QWF3WdcbA7ArFgt", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "7" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json index 8dfcd4ac73..dd823e700d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.25", + "name": "Generic PC @Prusa MK3.5 0.25", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.25;Prusa Generic PC MK3.5 0.25", "from": "system", - "setting_id": "365PSnHIwQoBabi7", - "filament_id": "OF97ru74", + "setting_id": "MWiCzFnPAeMCWxHz", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json index b9ac2b8114..b33d32e71d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.6", + "name": "Generic PC @Prusa MK3.5 0.6", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.6;Prusa Generic PC MK3.5 0.6", "from": "system", - "setting_id": "zullllDHKByF2PMu", - "filament_id": "OF97ru74", + "setting_id": "KEgDSg0oQi1SQlst", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json index 7edc6d5a05..a6fa27ed6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.8", + "name": "Generic PC @Prusa MK3.5 0.8", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.8;Prusa Generic PC MK3.5 0.8", "from": "system", - "setting_id": "TTIxalWBM5b6YTJ0", - "filament_id": "OF97ru74", + "setting_id": "LHNmoFsylIuepyww", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json index d63eaee60b..1891e65703 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC @MK3.5", + "name": "Generic PC @Prusa MK3.5", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5;Prusa Generic PC MK3.5", "from": "system", - "setting_id": "2h9EbPiUgE3BIHVb", - "filament_id": "OF97ru74", + "setting_id": "awF5u8ojSKhvSYud", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Generic PC @Prusa.json similarity index 85% rename from resources/profiles/Prusa/filament/Prusa Generic PC.json rename to resources/profiles/Prusa/filament/Generic PC @Prusa.json index fed8a0bb7b..59b97e22e5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC", + "name": "Generic PC @Prusa", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC", "from": "system", - "setting_id": "51vavWbGjxnBwH7e", - "filament_id": "OF97ru74", + "setting_id": "UJ5KpqIb5mpcNXzl", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json similarity index 58% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json index e3d400892f..dbd6cb209f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MINIIS 0.6", - "inherits": "Prusa Generic PC HF @base", + "name": "Generic PC HF @Prusa MINIIS 0.6", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS 0.6;Prusa Generic PC HF MINIIS 0.6", "from": "system", - "setting_id": "oj7iq8Bsz8lYyoG8", + "setting_id": "W3G94E0IQo6Kaq8G", "instantiation": "true", "filament_max_volumetric_speed": [ "35" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json similarity index 58% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json index 5965ff9d5d..53bc9b96bd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MINIIS 0.8", - "inherits": "Prusa Generic PC HF @base", + "name": "Generic PC HF @Prusa MINIIS 0.8", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS 0.8;Prusa Generic PC HF MINIIS 0.8", "from": "system", - "setting_id": "SK8h5tE5di3YWaJp", + "setting_id": "Fjwchj1gB62f7CUF", "instantiation": "true", "filament_max_volumetric_speed": [ "29" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json similarity index 59% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json index b198ed3af4..4d0785504f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MINIIS", - "inherits": "Prusa Generic PC HF @base", + "name": "Generic PC HF @Prusa MINIIS", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS;Prusa Generic PC HF MINIIS", "from": "system", - "setting_id": "onMXXnQNjbSimzbW", + "setting_id": "Wodqshgvx38zWaE2", "instantiation": "true", "filament_max_volumetric_speed": [ "24" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json index 4b5d973cdd..cb2ad5f37c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MK3.5 0.6", + "name": "Generic PC HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5 0.6;Prusa Generic PC HF MK3.5 0.6", "from": "system", - "setting_id": "MAtF0WCx6uLte1Bq", - "filament_id": "OFq5QANf", + "setting_id": "Rm7U967jnpk74lPA", + "filament_id": "OFwwAQnA", "instantiation": "true", "filament_max_volumetric_speed": [ "30" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json index b7729e451f..0f684bcca8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MK3.5 0.8", + "name": "Generic PC HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5 0.8;Prusa Generic PC HF MK3.5 0.8", "from": "system", - "setting_id": "Om8P3dn8wY6CbdQg", - "filament_id": "OFq5QANf", + "setting_id": "zFkWWW3PTBvuUWqs", + "filament_id": "OFwwAQnA", "instantiation": "true", "filament_max_volumetric_speed": [ "36" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json index 7fdec94c49..aa007446ce 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PC HF @MK3.5", + "name": "Generic PC HF @Prusa MK3.5", "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5;Prusa Generic PC HF MK3.5", "from": "system", - "setting_id": "uGi7QoODY99zHuCt", - "filament_id": "OFq5QANf", + "setting_id": "lvbcRP0xEru9jmms", + "filament_id": "OFwwAQnA", "instantiation": "true", "filament_max_volumetric_speed": [ "24" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json rename to resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json index ffce8990b7..131b45ea55 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @base.json +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PC HF @base", + "name": "Generic PC HF @Prusa base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OFq5QANf", + "filament_id": "OFwwAQnA", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json similarity index 51% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json index e776e17543..a2f899e88f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One 0.6", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One 0.6", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One 0.6;Prusa Generic PETG CORE One 0.6", "from": "system", - "setting_id": "plb6gY1isTp10Unr", - "filament_id": "OF1Id239", + "setting_id": "oPWpCDB3p6hQeY2F", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json index a0b3bc4299..669cf219fc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One 0.8", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One 0.8", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One 0.8;Prusa Generic PETG CORE One 0.8", "from": "system", - "setting_id": "WISyN9WbqoZW5bBy", - "filament_id": "OF1Id239", + "setting_id": "OmaayFCLuRLadur0", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json similarity index 74% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json index d3354152df..6c9ff68c89 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.4", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One HF 0.4", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.4;Prusa Generic PETG CORE One HF 0.4", "from": "system", - "setting_id": "hMxEpxx9ERuIq28Z", - "filament_id": "OF1Id239", + "setting_id": "7oUyjvRHLH4bJyX0", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json index 69c4158297..8784e403ab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.5", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One HF 0.5", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.5;Prusa Generic PETG CORE One HF 0.5", "from": "system", - "setting_id": "HtW04UsVx5VpeLc9", - "filament_id": "OF1Id239", + "setting_id": "6HiIOGURZWwman1l", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json similarity index 73% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json index c50d2b1cd0..c0eb6a594f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.6", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One HF 0.6", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.6;Prusa Generic PETG CORE One HF 0.6", "from": "system", - "setting_id": "29TFTfss7xVear5j", - "filament_id": "OF1Id239", + "setting_id": "KKiug7A9NOQPe1m7", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json similarity index 78% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json index 91d6a29a9a..99748978bf 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.8", - "inherits": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One HF 0.8", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.8;Prusa Generic PETG CORE One HF 0.8", "from": "system", - "setting_id": "N91ct2U3Y3jOat0g", - "filament_id": "OF1Id239", + "setting_id": "vtiAC44hrmtap0Ou", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json similarity index 92% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json index fa5a8d2cd8..a086fb9336 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @CORE One", + "name": "Generic PETG @Prusa CORE One", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @CORE One;Prusa Generic PETG CORE One", "from": "system", - "setting_id": "VbFWb2QCAMxcrTAW", - "filament_id": "OF1Id239", + "setting_id": "W71PW5bpf7CV16D4", + "filament_id": "OFYPdQJh", "instantiation": "true", "chamber_temperature": [ "35" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json index 1254f1aede..282048f6a3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.25", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa MINIIS 0.25", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.25;Prusa Generic PETG MINIIS 0.25", "from": "system", - "setting_id": "u4zA4rasW1vfwG1o", + "setting_id": "lKegAyiWytPNEXH0", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json index 7e849e01af..40f6d0c685 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.6", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa MINIIS 0.6", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.6;Prusa Generic PETG MINIIS 0.6", "from": "system", - "setting_id": "QJQIAwmRSZW3hNI4", + "setting_id": "7QT1EXl4qKoNBuqz", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json index 2a943198aa..a578482dc0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.8", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa MINIIS 0.8", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.8;Prusa Generic PETG MINIIS 0.8", "from": "system", - "setting_id": "nXFZVAKBc3hkxbRt", + "setting_id": "zl2HOUtcoIR2dFQH", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json similarity index 85% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json index dcb87593dc..5a135dfd2d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS", - "inherits": "Prusa Generic PETG HF @base", + "name": "Generic PETG @Prusa MINIIS", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS;Prusa Generic PETG MINIIS", "from": "system", - "setting_id": "SHIhEzb8wJonmulf", + "setting_id": "COQ9qpnYRGAFRBoq", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +49,7 @@ "85" ], "filament_max_volumetric_speed": [ - "24" + "9" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json index 940f308232..e338514096 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.25", + "name": "Generic PETG @Prusa MK3.5 0.25", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.25;Prusa Generic PETG MK3.5 0.25", "from": "system", - "setting_id": "g5YTLp0ZhzbpCD2h", - "filament_id": "OF1Id239", + "setting_id": "M0vmzxmP3IVIUTuv", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json index f049544d2f..d57e0fdb3f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.6", + "name": "Generic PETG @Prusa MK3.5 0.6", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.6;Prusa Generic PETG MK3.5 0.6", "from": "system", - "setting_id": "6FATkctkE3RaWnWQ", - "filament_id": "OF1Id239", + "setting_id": "OvkhxGhjjRMjwb4C", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json index ba45f70c00..59e45d94f6 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.8", + "name": "Generic PETG @Prusa MK3.5 0.8", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.8;Prusa Generic PETG MK3.5 0.8", "from": "system", - "setting_id": "ITT0YpAms3lzeSBk", - "filament_id": "OF1Id239", + "setting_id": "kZSlkCTdghAi8LFG", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json index e456955aae..7d63599c7a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK3.5", + "name": "Generic PETG @Prusa MK3.5", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5;Prusa Generic PETG MK3.5", "from": "system", - "setting_id": "71gokqKp7e6fhhf4", - "filament_id": "OF1Id239", + "setting_id": "6PUbXHNUBfWjVvse", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json similarity index 89% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json index f4d8216caa..68f627daa4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa MK4", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MK4;Prusa Generic PETG MK4", "from": "system", - "setting_id": "Xk2dCGMzSaT73Gq5", + "setting_id": "ieo6hcpwnV0j76eo", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json similarity index 54% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json index 9b59b93ccf..ddfbb665be 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S 0.6", - "inherits": "Prusa Generic PETG @MK4S", + "name": "Generic PETG @Prusa MK4S 0.6", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S 0.6;Prusa Generic PETG MK4S 0.6", "from": "system", - "setting_id": "Pci5FyYkl7E87APR", - "filament_id": "OF1Id239", + "setting_id": "z5Ys1AU5ujQF9D5U", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json index 8024185152..8e8fee1973 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S 0.8", - "inherits": "Prusa Generic PETG @MK4S", + "name": "Generic PETG @Prusa MK4S 0.8", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S 0.8;Prusa Generic PETG MK4S 0.8", "from": "system", - "setting_id": "gBfDSTXrnY1HRyw7", - "filament_id": "OF1Id239", + "setting_id": "LKUzA7cbyYL6kxar", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json similarity index 76% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json index 4267889359..ebbdb73717 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.4", - "inherits": "Prusa Generic PETG @MK4S", + "name": "Generic PETG @Prusa MK4S HF0.4", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S HF0.4;Prusa Generic PETG MK4S HF0.4", "from": "system", - "setting_id": "4pbIJVV1D2h5O3WZ", - "filament_id": "OF1Id239", + "setting_id": "lLapCyweW6Svj7cV", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..e424f13c82 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S HF0.5", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.5;Prusa Generic PETG MK4S HF0.5", + "from": "system", + "setting_id": "lu9twhsjDkBT1kyn", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "29" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json similarity index 59% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json index 83a96f3a40..c0d46b3ca1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.6", - "inherits": "Prusa Generic PETG @MK4S HF0.4", + "name": "Generic PETG @Prusa MK4S HF0.6", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.6;Prusa Generic PETG MK4S HF0.6", "from": "system", - "setting_id": "tv7OUJ7pSPHTkE89", - "filament_id": "OF1Id239", + "setting_id": "d7ocKzA4YSAit63Z", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json index 85c388ab7d..237c3f116a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.8", - "inherits": "Prusa Generic PETG @MK4S HF0.4", + "name": "Generic PETG @Prusa MK4S HF0.8", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.8;Prusa Generic PETG MK4S HF0.8", "from": "system", - "setting_id": "wHfH0a2TgTYr9rWF", - "filament_id": "OF1Id239", + "setting_id": "HSBSswxwznxDClK5", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json similarity index 92% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json index ff70f3d63e..b7bbc6094e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG @MK4S", + "name": "Generic PETG @Prusa MK4S", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK4S;Prusa Generic PETG MK4S", "from": "system", - "setting_id": "IGfvc0jGdG6evRj8", - "filament_id": "OF1Id239", + "setting_id": "t3ZCKWVct5d69cb8", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json index 4babb91e3f..9f70295142 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @XL 5T", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa XL 5T", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @XL 5T;Prusa Generic PETG XL 5T", "from": "system", - "setting_id": "FbtB9og6yXm2ZktD", + "setting_id": "DNJECSjW6zKYALxE", "instantiation": "true", "nozzle_temperature_intial_layer": "230", "nozzle_temperature": "240", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json index 793b97e290..0cdcbfc1c4 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @XL", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa XL", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @XL;Prusa Generic PETG XL", "from": "system", - "setting_id": "SQKcHBt6A4D8PwFZ", + "setting_id": "8vcNv4b4H7aYA01G", "instantiation": "true", "nozzle_temperature_intial_layer": "230", "nozzle_temperature": "240", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @base.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa base.json index 5ed73792e2..c5b0abf34f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @base.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OF1Id239", + "filament_id": "OFYPdQJh", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PETG.json rename to resources/profiles/Prusa/filament/Generic PETG @Prusa.json index db17c39162..6881507204 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG.json +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG @Prusa", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG", "from": "system", - "setting_id": "b55Rd5kKGP1A3BM2", + "setting_id": "Vwc0owmwoEYrLhuU", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json index da8b0f68e5..e8de400490 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS 0.6", - "inherits": "Prusa Generic PETG HF @base", + "name": "Generic PETG HF @Prusa MINIIS 0.6", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS 0.6;Prusa Generic PETG HF MINIIS 0.6", "from": "system", - "setting_id": "tt7C6k90F51Q17NL", + "setting_id": "nF8YzRMvaT4D8LBD", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json index c8eb08ef87..adc5401268 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS 0.8", - "inherits": "Prusa Generic PETG HF @base", + "name": "Generic PETG HF @Prusa MINIIS 0.8", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS 0.8;Prusa Generic PETG HF MINIIS 0.8", "from": "system", - "setting_id": "hivI3u5bpGKEJuPR", + "setting_id": "7itUjrAu9Oj9hxiU", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json index 49d8e83444..9148f5e849 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PETG @MINIIS", - "inherits": "Prusa Generic PETG @base", + "name": "Generic PETG HF @Prusa MINIIS", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS;Prusa Generic PETG HF MINIIS", "from": "system", - "setting_id": "nXB864FJ4Dbz5oXc", + "setting_id": "dPNOryBcrviemefo", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +49,7 @@ "85" ], "filament_max_volumetric_speed": [ - "9" + "24" ], "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json index 63f9742402..71481537b1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5 0.6", + "name": "Generic PETG HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5 0.6;Prusa Generic PETG HF MK3.5 0.6", "from": "system", - "setting_id": "Hw54qxSSdBrcOr4r", - "filament_id": "OFOKYhi6", + "setting_id": "YqVidH7m1HXR3hHZ", + "filament_id": "OF7lOgYF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json similarity index 81% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json index e3401a666b..5dffe82d0b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5 0.8", + "name": "Generic PETG HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5 0.8;Prusa Generic PETG HF MK3.5 0.8", "from": "system", - "setting_id": "txhzOPQmzVqkcdnP", - "filament_id": "OFOKYhi6", + "setting_id": "vfR067tK5WsrE4pw", + "filament_id": "OF7lOgYF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json index 1f63b82d0b..e343519efd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5", + "name": "Generic PETG HF @Prusa MK3.5", "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5;Prusa Generic PETG HF MK3.5", "from": "system", - "setting_id": "OjIQqC3uJdpcLqlG", - "filament_id": "OFOKYhi6", + "setting_id": "grvZIUU79fxDOa3O", + "filament_id": "OF7lOgYF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json rename to resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json index 002c80fe6d..c15595a97c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @base.json +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PETG HF @base", + "name": "Generic PETG HF @Prusa base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFOKYhi6", + "filament_id": "OF7lOgYF", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..2e2f9275d4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One 0.6", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One 0.6;Prusa Generic PLA CORE One 0.6", + "from": "system", + "setting_id": "IkmLxDwrdRkacHWw", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ], + "nozzle_temperature": [ + "210" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json similarity index 51% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json index c710474420..cfe88119de 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One 0.8", - "inherits": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One 0.8", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One 0.8;Prusa Generic PLA CORE One 0.8", "from": "system", - "setting_id": "qlG6J2sXs80HpkCl", - "filament_id": "OFiCHnso", + "setting_id": "aBengWdqRXg9i2sx", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json similarity index 73% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json index 5a38ba93f3..c0969904c7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.4", - "inherits": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One HF 0.4", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.4;Prusa Generic PLA CORE One HF 0.4", "from": "system", - "setting_id": "KzpBU6cAAqm7z0Sg", - "filament_id": "OFiCHnso", + "setting_id": "vniEPaoyABoAfLFa", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json similarity index 74% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json index 1935f27062..5d6e9fcba2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.5", - "inherits": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One HF 0.5", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.5;Prusa Generic PLA CORE One HF 0.5", "from": "system", - "setting_id": "2G99enCGyOVjrOlt", - "filament_id": "OFiCHnso", + "setting_id": "NPEs4gtBlKWupYZX", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json index b47613e7d1..6575aebf8d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.6", - "inherits": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One HF 0.6", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.6;Prusa Generic PLA CORE One HF 0.6", "from": "system", - "setting_id": "iNQhrPrIj4GphWxI", - "filament_id": "OFiCHnso", + "setting_id": "SnfULjrWGCiA7ljq", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json index a3b5df42d8..64471ba72b 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.8", - "inherits": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One HF 0.8", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.8;Prusa Generic PLA CORE One HF 0.8", "from": "system", - "setting_id": "YIm5w8btcXZqnNFB", - "filament_id": "OFiCHnso", + "setting_id": "ZsIuxJUaBzoeWPDv", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json similarity index 92% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json index 1f65998039..9bc9e086b0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @CORE One", + "name": "Generic PLA @Prusa CORE One", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @CORE One;Prusa Generic PLA CORE One", "from": "system", - "setting_id": "NDBqFGNNvKxlmo3V", - "filament_id": "OFiCHnso", + "setting_id": "r2i4c7DsYXYIMVCX", + "filament_id": "OFDSrzZ8", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json index 73ce7b1606..3682a6fcb0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.25", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa MINIIS 0.25", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.25;Prusa Generic PLA MINIIS 0.25", "from": "system", - "setting_id": "GOomDjqbF1CGAy8O", + "setting_id": "t7jm6WSfRqsdSZfz", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json index 437eeeb6b8..ae982f46bc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.6", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa MINIIS 0.6", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.6;Prusa Generic PLA MINIIS 0.6", "from": "system", - "setting_id": "rKRRhdLk0Heg3slz", + "setting_id": "hWk01xYl6gu41B4w", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json index cd95805fb3..8a5897d741 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.8", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa MINIIS 0.8", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.8;Prusa Generic PLA MINIIS 0.8", "from": "system", - "setting_id": "XC2NBSQXjiKIXnTi", + "setting_id": "6A9NivZl5nMpNfsz", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json index 5f3c8f9bb4..cf2adda390 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @MINIIS", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa MINIIS", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS;Prusa Generic PLA MINIIS", "from": "system", - "setting_id": "GUG6Ug0cZt0gs2Z2", + "setting_id": "3bPlO5U5udlu8eVv", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json index ab3b9413ae..b3f84dc4e1 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.25", + "name": "Generic PLA @Prusa MK3.5 0.25", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.25;Prusa Generic PLA MK3.5 0.25", "from": "system", - "setting_id": "mQtIWbOJ2a4TMYxU", - "filament_id": "OFiCHnso", + "setting_id": "IJsZsvdG7N8uwobX", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json index 9d239a47fd..49d75d5e31 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.6", + "name": "Generic PLA @Prusa MK3.5 0.6", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.6;Prusa Generic PLA MK3.5 0.6", "from": "system", - "setting_id": "lSbYoT83cp2tQjk3", - "filament_id": "OFiCHnso", + "setting_id": "YLx95teMRy5UQWKN", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json index e77aa1edf0..6590e43c17 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.8", + "name": "Generic PLA @Prusa MK3.5 0.8", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.8;Prusa Generic PLA MK3.5 0.8", "from": "system", - "setting_id": "kZuzkEvYEluqlAfM", - "filament_id": "OFiCHnso", + "setting_id": "bZ42VSqIaJlri1VH", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json index d211b1fed2..058e05e99e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK3.5", + "name": "Generic PLA @Prusa MK3.5", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5;Prusa Generic PLA MK3.5", "from": "system", - "setting_id": "ojwcK3bKU2Jyosws", - "filament_id": "OFiCHnso", + "setting_id": "5tDjTVPzE0lIEReK", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json index 22f8bb274c..e7cc5df0d8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa MK4", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MK4;Prusa Generic PLA MK4", "from": "system", - "setting_id": "1aLBPgVpr7XZmmX6", + "setting_id": "cBqjSJcxcXvS8sY0", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json similarity index 50% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json index d6915f476d..bcc0847385 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S 0.6", - "inherits": "Prusa Generic PLA @MK4S", + "name": "Generic PLA @Prusa MK4S 0.6", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S 0.6;Prusa Generic PLA MK4S 0.6", "from": "system", - "setting_id": "6pZohvVY1eUGi2k8", - "filament_id": "OFiCHnso", + "setting_id": "vLeTzdoXExkeNSdX", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json similarity index 57% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json index 07b15552df..e574ce49a5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S 0.8", - "inherits": "Prusa Generic PLA @MK4S", + "name": "Generic PLA @Prusa MK4S 0.8", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S 0.8;Prusa Generic PLA MK4S 0.8", "from": "system", - "setting_id": "8z66T4ABcY8PLJMB", - "filament_id": "OFiCHnso", + "setting_id": "6fyFsevbPLYfgZRb", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json similarity index 75% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json index 39f7d1b020..10e37500a8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.4", - "inherits": "Prusa Generic PLA @MK4S", + "name": "Generic PLA @Prusa MK4S HF0.4", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S HF0.4;Prusa Generic PLA MK4S HF0.4", "from": "system", - "setting_id": "LV8qQ1t2CmhHaRSA", - "filament_id": "OFiCHnso", + "setting_id": "BFvt90DhCobphEF9", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json similarity index 50% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json index 97235be213..ec1efb5aad 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.5", - "inherits": "Prusa Generic PLA @MK4S HF0.4", + "name": "Generic PLA @Prusa MK4S HF0.5", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.5;Prusa Generic PLA MK4S HF0.5", "from": "system", - "setting_id": "WH3bJGQGSliMx6ta", - "filament_id": "OFiCHnso", + "setting_id": "IDv2UUR8EH7AVUIA", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json similarity index 53% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json index a90a033338..8ce85314dd 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.6", - "inherits": "Prusa Generic PLA @MK4S HF0.4", + "name": "Generic PLA @Prusa MK4S HF0.6", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.6;Prusa Generic PLA MK4S HF0.6", "from": "system", - "setting_id": "du6Gy8TCxk5z7hPx", - "filament_id": "OFiCHnso", + "setting_id": "t7cAPFNPWmeHBeuD", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json similarity index 55% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json index 4d381eab0a..968bf56356 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.8", - "inherits": "Prusa Generic PLA @MK4S HF0.4", + "name": "Generic PLA @Prusa MK4S HF0.8", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.8;Prusa Generic PLA MK4S HF0.8", "from": "system", - "setting_id": "aLcAkl8Zt2D5lOTp", - "filament_id": "OFiCHnso", + "setting_id": "t1a58q4l6Xo6kKCC", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S HF0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json index 9d35c362fa..a847cf8334 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA @MK4S", + "name": "Generic PLA @Prusa MK4S", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK4S;Prusa Generic PLA MK4S", "from": "system", - "setting_id": "CqlMmArE8Llbji7t", - "filament_id": "OFiCHnso", + "setting_id": "lsjHMlvwZzImWgek", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json index 2d149b8b7b..6dbefec6be 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @XL 5T", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa XL 5T", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @XL 5T;Prusa Generic PLA XL 5T", "from": "system", - "setting_id": "orBUSq1sDBeMGMON", + "setting_id": "wDxtZLt5J2JODMBq", "instantiation": "true", "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "210", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json similarity index 90% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json index 3206f6f3c5..ff8f343b41 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA @XL", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa XL", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @XL;Prusa Generic PLA XL", "from": "system", - "setting_id": "tGG7egsphB0I1i6Z", + "setting_id": "27u5AiklUhmExsys", "instantiation": "true", "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "210", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic PLA @base.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa base.json index 4aaa66dd9e..7246d710ab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @base.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFiCHnso", + "filament_id": "OFDSrzZ8", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic PLA.json rename to resources/profiles/Prusa/filament/Generic PLA @Prusa.json index a2f1521fec..83951fb4ab 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA.json +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA", - "inherits": "Prusa Generic PLA @base", + "name": "Generic PLA @Prusa", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA", "from": "system", - "setting_id": "pKHhR3Hx6AUoyIO3", + "setting_id": "SBviEhhXcdsIwj0y", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json index 6b9f364da7..56c2e823b0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS 0.6", - "inherits": "Prusa Generic PLA HF @base", + "name": "Generic PLA HF @Prusa MINIIS 0.6", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS 0.6;Prusa Generic PLA HF MINIIS 0.6", "from": "system", - "setting_id": "A6tgkt5mCN7hFzoU", + "setting_id": "eqBN6ykUB4csEMCR", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json index b4a25d21a1..be0722c134 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS 0.8", - "inherits": "Prusa Generic PLA HF @base", + "name": "Generic PLA HF @Prusa MINIIS 0.8", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS 0.8;Prusa Generic PLA HF MINIIS 0.8", "from": "system", - "setting_id": "3MSF1ZEw3D7bVhEI", + "setting_id": "FuCHQFBuP9yLUzT0", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json index 243b69a393..656c756e6d 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS", - "inherits": "Prusa Generic PLA HF @base", + "name": "Generic PLA HF @Prusa MINIIS", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS;Prusa Generic PLA HF MINIIS", "from": "system", - "setting_id": "eVuV41lUXe9SEmeh", + "setting_id": "cQJUt7LR5hkKT0Za", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json index a75d98c47f..41dce0b5ed 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5 0.6", + "name": "Generic PLA HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5 0.6;Prusa Generic PLA HF MK3.5 0.6", "from": "system", - "setting_id": "IHOsyOhMvOcpHGtG", - "filament_id": "OFl4ItvQ", + "setting_id": "5vgrugarZSgMZ6FT", + "filament_id": "OFZr862X", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json similarity index 65% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json index c7f2c480be..b6af02d8fb 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5 0.8", + "name": "Generic PLA HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5 0.8;Prusa Generic PLA HF MK3.5 0.8", "from": "system", - "setting_id": "GYne0LPI8ooQJe08", - "filament_id": "OFl4ItvQ", + "setting_id": "CM3EYkpRcWwsw7KB", + "filament_id": "OFZr862X", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json index c1366194ec..46ed4d0752 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5", + "name": "Generic PLA HF @Prusa MK3.5", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5;Prusa Generic PLA HF MK3.5", "from": "system", - "setting_id": "Bq51JVrGGEktAqIh", - "filament_id": "OFl4ItvQ", + "setting_id": "4N82rUxi9Bbm2Cdd", + "filament_id": "OFZr862X", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json rename to resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json index fffecfd0e1..aaf85ff4a7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @base.json +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PLA HF @base", + "name": "Generic PLA HF @Prusa base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFl4ItvQ", + "filament_id": "OFZr862X", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json similarity index 52% rename from resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json index b974aa2fec..aeeba4d5ee 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One 0.6", - "inherits": "Prusa Generic PLA Silk @CORE One", + "name": "Generic PLA Silk @Prusa CORE One 0.6", + "inherits": "Generic PLA Silk @Prusa CORE One", + "renamed_from": "Prusa Generic PLA Silk @CORE One 0.6;Prusa Generic PLA Silk CORE One 0.6", "from": "system", - "setting_id": "QUaunbCOoBxA8fyJ", - "filament_id": "OFHFZ1Te", + "setting_id": "nBWqKjSKw2UEAmkv", + "filament_id": "OFesA6rF", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..82e3840d37 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa CORE One 0.8", + "inherits": "Generic PLA Silk @Prusa CORE One", + "renamed_from": "Prusa Generic PLA Silk @CORE One 0.8;Prusa Generic PLA Silk CORE One 0.8", + "from": "system", + "setting_id": "a2KWbhOMQrFTkAZh", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle", + "Prusa CORE One HF 0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "17" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json similarity index 91% rename from resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json rename to resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json index 1d39e71aaa..c11965fc72 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One", + "name": "Generic PLA Silk @Prusa CORE One", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA Silk @CORE One;Prusa Generic PLA Silk CORE One", "from": "system", - "setting_id": "CYztrVFVOPD3RHJx", - "filament_id": "OFHFZ1Te", + "setting_id": "F9lNHyhZwZi7aD74", + "filament_id": "OFesA6rF", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json similarity index 55% rename from resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json index 506f82f3ea..82413605dc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S 0.6", - "inherits": "Prusa Generic PLA Silk @MK4S", + "name": "Generic PLA Silk @Prusa MK4S 0.6", + "inherits": "Generic PLA Silk @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S 0.6;Prusa Generic PLA Silk MK4S 0.6", "from": "system", - "setting_id": "e1pUu3Y5pDr7LzNu", - "filament_id": "OFHFZ1Te", + "setting_id": "lWYrhnu1MUizrdOB", + "filament_id": "OFesA6rF", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json similarity index 54% rename from resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json index 6c57e0486e..e94cbdf57a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S 0.8", - "inherits": "Prusa Generic PLA Silk @MK4S", + "name": "Generic PLA Silk @Prusa MK4S 0.8", + "inherits": "Generic PLA Silk @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S 0.8;Prusa Generic PLA Silk MK4S 0.8", "from": "system", - "setting_id": "Yw5uZEeqmR9elIn6", - "filament_id": "OFHFZ1Te", + "setting_id": "cyBdMwJ5sAZcQ7wP", + "filament_id": "OFesA6rF", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json rename to resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json index 3585355a12..9a3830fd4a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S", - "inherits": "Prusa Generic PLA @MK4S", + "name": "Generic PLA Silk @Prusa MK4S", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S;Prusa Generic PLA Silk MK4S", "from": "system", - "setting_id": "ngtF8hwv8cSubcR1", - "filament_id": "OFHFZ1Te", + "setting_id": "9VQ1YVv9EZexIUoF", + "filament_id": "OFesA6rF", "instantiation": "true", "compatible_printers": [ "Prusa MK4S 0.25 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json index 1e95879fdf..9432c36087 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.25", - "inherits": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa MINIIS 0.25", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.25;Prusa Generic PLA-CF MINIIS 0.25", "from": "system", - "setting_id": "Sv0IcpOJBk95F94d", + "setting_id": "uQJghHEl91slhmEP", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json index 3736da09d7..7900e25ab2 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.6", - "inherits": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa MINIIS 0.6", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.6;Prusa Generic PLA-CF MINIIS 0.6", "from": "system", - "setting_id": "tKAu2YX7WADQuJqv", + "setting_id": "nZEIrx6XaOFsNyHS", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json index 83c781352d..97db4345c8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.8", - "inherits": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa MINIIS 0.8", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.8;Prusa Generic PLA-CF MINIIS 0.8", "from": "system", - "setting_id": "dHVVnfZSJ6xEgzdQ", + "setting_id": "A3VUqeRysd3c5Txq", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json index 4cb69a99ec..4c08a4b23c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS", - "inherits": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa MINIIS", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS;Prusa Generic PLA-CF MINIIS", "from": "system", - "setting_id": "VESr5xWPvPIlhyKh", + "setting_id": "cNZereL1ltFYG5FZ", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json index 5a660705a7..436bf22209 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.25", + "name": "Generic PLA-CF @Prusa MK3.5 0.25", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.25;Prusa Generic PLA-CF MK3.5 0.25", "from": "system", - "setting_id": "Pi3x8Wj5sdB7TDDK", - "filament_id": "OFQ7I5vC", + "setting_id": "eID2rl5MlHlkerrQ", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json index 1b9b06f8f9..db1973c5c8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.6", + "name": "Generic PLA-CF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.6;Prusa Generic PLA-CF MK3.5 0.6", "from": "system", - "setting_id": "vtxoJOj2lc1qxV3H", - "filament_id": "OFQ7I5vC", + "setting_id": "FGXPEP83zLoINOZy", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json index 5f0619c66c..bfcbcf2dbc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.8", + "name": "Generic PLA-CF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.8;Prusa Generic PLA-CF MK3.5 0.8", "from": "system", - "setting_id": "9gYj4jTP6y4UmR9s", - "filament_id": "OFQ7I5vC", + "setting_id": "TM5JPaNUTlZTiuCe", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json similarity index 68% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json index 9f8546a1ae..677bbc0d27 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5", + "name": "Generic PLA-CF @Prusa MK3.5", "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5;Prusa Generic PLA-CF MK3.5", "from": "system", - "setting_id": "yQASt4Ej55vgeZAN", - "filament_id": "OFQ7I5vC", + "setting_id": "3qImFrQCon7iUj4c", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json index 98cb90bcac..552a9139c5 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @base.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFQ7I5vC", + "filament_id": "OFWbdGsC", "instantiation": "false", "filament_type": [ "PLA-CF" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json similarity index 82% rename from resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json rename to resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json index d156be1004..c572b9f67c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PLA-CF", - "inherits": "Prusa Generic PLA-CF @base", + "name": "Generic PLA-CF @Prusa", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF", "from": "system", - "setting_id": "NqmFeHNZtfNefmvd", + "setting_id": "LIL5n1PzMoaNoJ84", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json index 4357a8eb1f..f74228304a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.25", - "inherits": "Prusa Generic PVA @base", + "name": "Generic PVA @Prusa MINIIS 0.25", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.25;Prusa Generic PVA MINIIS 0.25", "from": "system", - "setting_id": "B0Dmo1DvtrwBwM7U", + "setting_id": "2TecWVXOXcxW37EN", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json index bd810e4933..f25c70a70c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS 0.6", - "inherits": "Prusa Generic PVA HF @base", + "name": "Generic PVA @Prusa MINIIS 0.6", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.6;Prusa Generic PVA MINIIS 0.6", "from": "system", - "setting_id": "4C7OAcG8LVPSTJsh", + "setting_id": "3UTClbjiwrQUCXsV", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json index a2557cd576..90c4fc2256 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS 0.8", - "inherits": "Prusa Generic PVA HF @base", + "name": "Generic PVA @Prusa MINIIS 0.8", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.8;Prusa Generic PVA MINIIS 0.8", "from": "system", - "setting_id": "xj6xYUYJ0tAnfgao", + "setting_id": "RKxewqskgDD2DQTk", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json similarity index 66% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json index 467f0822bd..99014f18a3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS", - "inherits": "Prusa Generic PVA HF @base", + "name": "Generic PVA @Prusa MINIIS", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS;Prusa Generic PVA MINIIS", "from": "system", - "setting_id": "9MNzR7N4A1k64jne", + "setting_id": "XfJmxNhCJiWTWB9i", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json similarity index 68% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json index b0febd6c30..a13990f6c7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.25", + "name": "Generic PVA @Prusa MK3.5 0.25", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.25;Prusa Generic PVA MK3.5 0.25", "from": "system", - "setting_id": "ciRHVEjYNqjT5EsD", - "filament_id": "OFcCzEkS", + "setting_id": "P9y77rdSQsCFcFwr", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json similarity index 68% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json index e6956d6b8f..8854a19282 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.6", + "name": "Generic PVA @Prusa MK3.5 0.6", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.6;Prusa Generic PVA MK3.5 0.6", "from": "system", - "setting_id": "G8TFM51vPvMbGSbX", - "filament_id": "OFcCzEkS", + "setting_id": "rvSzvHZL6FIiOQV1", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json similarity index 68% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json index af962c0fec..718845dc9a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.8", + "name": "Generic PVA @Prusa MK3.5 0.8", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.8;Prusa Generic PVA MK3.5 0.8", "from": "system", - "setting_id": "hueUgJutZ71scT6F", - "filament_id": "OFcCzEkS", + "setting_id": "E2sA3y3Cyp0UsQD4", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json similarity index 69% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json index 36d34b4946..6e1e1c9381 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5", + "name": "Generic PVA @Prusa MK3.5", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5;Prusa Generic PVA MK3.5", "from": "system", - "setting_id": "X2k0n055aaG1zc0u", - "filament_id": "OFoT8F7Y", + "setting_id": "UTyXSJox9HVdwfXR", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @base.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa base.json index 3da3125629..8f442bc5b0 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @base.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PVA @base", + "name": "Generic PVA @Prusa base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OFcCzEkS", + "filament_id": "OFDvXujf", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json similarity index 80% rename from resources/profiles/Prusa/filament/Prusa Generic PVA.json rename to resources/profiles/Prusa/filament/Generic PVA @Prusa.json index 260dfb5d01..3ad6ba8337 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA", - "inherits": "Prusa Generic PVA @base", + "name": "Generic PVA @Prusa", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA", "from": "system", - "setting_id": "yLrgUDS7cr4AkOed", + "setting_id": "uVzUlzHkXz6rH1ml", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json index 1a4d7c6aa5..f4e03d791f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.6", - "inherits": "Prusa Generic PVA @base", + "name": "Generic PVA HF @Prusa MINIIS 0.6", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS 0.6;Prusa Generic PVA HF MINIIS 0.6", "from": "system", - "setting_id": "yGTFSZeo1sUdCpeO", + "setting_id": "qeWFOMhrKa1yezHw", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json similarity index 63% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json index 7c3a77c52d..e8935f9172 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.8", - "inherits": "Prusa Generic PVA @base", + "name": "Generic PVA HF @Prusa MINIIS 0.8", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS 0.8;Prusa Generic PVA HF MINIIS 0.8", "from": "system", - "setting_id": "ISdXFzAcVUj3ZIfQ", + "setting_id": "h0RQ3XME0UFEeZVA", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json similarity index 64% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json index f6eecea619..a4a131da97 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic PVA @MINIIS", - "inherits": "Prusa Generic PVA @base", + "name": "Generic PVA HF @Prusa MINIIS", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS;Prusa Generic PVA HF MINIIS", "from": "system", - "setting_id": "rhZNRY8BNI1TskG2", + "setting_id": "VZcvmjCAtivpMepD", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json index 6c1843c3ba..1b78b6b0bc 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5 0.6", + "name": "Generic PVA HF @Prusa MK3.5 0.6", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5 0.6;Prusa Generic PVA HF MK3.5 0.6", "from": "system", - "setting_id": "NfhvtCbeYlQ3el2O", - "filament_id": "OFoT8F7Y", + "setting_id": "8R3yU9OjRFBIp1nU", + "filament_id": "OFDwBwO5", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json similarity index 67% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json index 9271b3051d..94f635382e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5 0.8", + "name": "Generic PVA HF @Prusa MK3.5 0.8", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5 0.8;Prusa Generic PVA HF MK3.5 0.8", "from": "system", - "setting_id": "J5PBEm3LvfpztfXU", - "filament_id": "OFoT8F7Y", + "setting_id": "OOUVHHPIB95wqeTB", + "filament_id": "OFDwBwO5", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json similarity index 68% rename from resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json index aee4bf78bc..c3749316e9 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic PVA @MK3.5", + "name": "Generic PVA HF @Prusa MK3.5", "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5;Prusa Generic PVA HF MK3.5", "from": "system", - "setting_id": "yaPlNuxryIpkxiOe", - "filament_id": "OFcCzEkS", + "setting_id": "gTh9PfBYkibWdknz", + "filament_id": "OFDwBwO5", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json rename to resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json index 8a768f844a..bd599d74b3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @base.json +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic PVA HF @base", + "name": "Generic PVA HF @Prusa base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OFoT8F7Y", + "filament_id": "OFDwBwO5", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json similarity index 51% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json index 896518c23c..dc68ea318c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU @CORE One 0.6", - "inherits": "Prusa Generic TPU @CORE One", + "name": "Generic TPU @Prusa CORE One 0.6", + "inherits": "Generic TPU @Prusa CORE One", + "renamed_from": "Prusa Generic TPU @CORE One 0.6;Prusa Generic TPU CORE One 0.6", "from": "system", - "setting_id": "OulnL3bWrEpRJbgJ", - "filament_id": "OFbenYUK", + "setting_id": "VvvSk3OsXXxyerAX", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json similarity index 51% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json index 8b270846d0..93b68e0afa 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU @CORE One 0.8", - "inherits": "Prusa Generic TPU @CORE One", + "name": "Generic TPU @Prusa CORE One 0.8", + "inherits": "Generic TPU @Prusa CORE One", + "renamed_from": "Prusa Generic TPU @CORE One 0.8;Prusa Generic TPU CORE One 0.8", "from": "system", - "setting_id": "9fAhdX2hOAnUDn1I", - "filament_id": "OFbenYUK", + "setting_id": "LUUEXi6UUk0Zs5Pf", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json similarity index 90% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json index 9b212dd17a..3717f8586a 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU @CORE One", + "name": "Generic TPU @Prusa CORE One", "inherits": "fdm_filament_flex", + "renamed_from": "Prusa Generic TPU @CORE One;Prusa Generic TPU CORE One", "from": "system", - "setting_id": "VR2WfERGWPIWTRha", - "filament_id": "OFbenYUK", + "setting_id": "jsXqf9CeaXCvsrWM", + "filament_id": "OFgbpcy9", "instantiation": "true", "chamber_temperature": [ "30" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json index e6d596aa4e..85c60e64a8 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic TPU @MINIIS", - "inherits": "Prusa Generic TPU @base", + "name": "Generic TPU @Prusa MINIIS", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU @MINIIS;Prusa Generic TPU MINIIS", "from": "system", - "setting_id": "TUqkAb8i9HpFdiCy", + "setting_id": "bOai5Ib1dggl5Qlc", "instantiation": "true", "filament_max_volumetric_speed": [ "1.35" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json index b3b017de67..3e72481ea7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU @MK3.5", + "name": "Generic TPU @Prusa MK3.5", "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU @MK3.5;Prusa Generic TPU MK3.5", "from": "system", - "setting_id": "wfxLtrIAOgG7TKib", - "filament_id": "OFbenYUK", + "setting_id": "j6bDPJnwtsB16yBu", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "1.8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json similarity index 62% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json index 11753a6232..52c7ebf182 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic TPU @MK4", - "inherits": "Prusa Generic TPU @base", + "name": "Generic TPU @Prusa MK4", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU @MK4;Prusa Generic TPU MK4", "from": "system", - "setting_id": "9KjaEcwnQA8CsnVy", + "setting_id": "9wL3LAJZ7PyqBVEb", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..4b5399bd89 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4S 0.6", + "inherits": "Generic TPU @Prusa MK4S", + "renamed_from": "Prusa Generic TPU @MK4S 0.6;Prusa Generic TPU MK4S 0.6", + "from": "system", + "setting_id": "XM427EDbbCgt2wNZ", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle", + "Prusa MK4S HF0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..3a663958f1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4S 0.8", + "inherits": "Generic TPU @Prusa MK4S", + "renamed_from": "Prusa Generic TPU @MK4S 0.8;Prusa Generic TPU MK4S 0.8", + "from": "system", + "setting_id": "2UPIZFNertdlZ4o2", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle", + "Prusa MK4S HF0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "9" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json index 7f0ac852ee..75f1895c87 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU @MK4S", + "name": "Generic TPU @Prusa MK4S", "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU @MK4S;Prusa Generic TPU MK4S", "from": "system", - "setting_id": "JxNaZsG7Y2rQKATV", - "filament_id": "OFbenYUK", + "setting_id": "wdopbtHBnMKC2rhj", + "filament_id": "OFgbpcy9", "instantiation": "true", "close_fan_the_first_x_layers": "3", "compatible_printers": [ diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa base.json similarity index 61% rename from resources/profiles/Prusa/filament/Prusa Generic TPU @base.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa base.json index c0c1bccbb3..7b5668bfff 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @base.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic TPU @base", + "name": "Generic TPU @Prusa base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OFbenYUK", + "filament_id": "OFgbpcy9", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json similarity index 71% rename from resources/profiles/Prusa/filament/Prusa Generic TPU.json rename to resources/profiles/Prusa/filament/Generic TPU @Prusa.json index 5f1b953a7c..95048f947c 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU.json +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic TPU", - "inherits": "Prusa Generic TPU @base", + "name": "Generic TPU @Prusa", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU", "from": "system", - "setting_id": "l9s40Rloq4urv3Y0", + "setting_id": "bmtq13tfalfSTRrO", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json similarity index 86% rename from resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json rename to resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json index 2295816502..4c4ab81b42 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Prusa Generic TPU HF @MINIIS", - "inherits": "Prusa Generic TPU HF @base", + "name": "Generic TPU HF @Prusa MINIIS", + "inherits": "Generic TPU HF @Prusa base", + "renamed_from": "Prusa Generic TPU HF @MINIIS;Prusa Generic TPU HF MINIIS", "from": "system", - "setting_id": "a9fmPCI24EJoJ5OH", + "setting_id": "Jw1UjgrXtYG5rMDt", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json similarity index 87% rename from resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json rename to resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json index b2ac07402c..f958cac588 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Prusa Generic TPU HF @MK3.5", + "name": "Generic TPU HF @Prusa MK3.5", "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU HF @MK3.5;Prusa Generic TPU HF MK3.5", "from": "system", - "setting_id": "Gfuy9ZSCpJw3Usa6", - "filament_id": "OFU3zwPc", + "setting_id": "W8pYAV5JMW70PKlw", + "filament_id": "OFnT7Qpb", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json similarity index 60% rename from resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json rename to resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json index e08a83c0e6..47b1b82c77 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @base.json +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json @@ -1,8 +1,8 @@ { "type": "filament", - "name": "Prusa Generic TPU HF @base", + "name": "Generic TPU HF @Prusa base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OFU3zwPc", + "filament_id": "OFnT7Qpb", "instantiation": "false" } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json deleted file mode 100644 index ade8efad81..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One 0.6", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "AADElwBWs9fzeAKC", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json deleted file mode 100644 index c6c30a2c6b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One 0.8", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "QLaQiU2tF5ZFTVjP", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle" - ], - "fan_cooling_layer_time": [ - "40" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json deleted file mode 100644 index dd33eedfa7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S 0.6", - "inherits": "Prusa Generic ABS @MK4S", - "from": "system", - "setting_id": "VVzzIN41B5ADTIeQ", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json deleted file mode 100644 index 66b27bd6c3..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S 0.8", - "inherits": "Prusa Generic ABS @MK4S", - "from": "system", - "setting_id": "4705fRqWWP2GZOK8", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json deleted file mode 100644 index 74f774bd11..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.5", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "bf8ANklVcC0xW1rT", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json deleted file mode 100644 index 3c461880c7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.6", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "ZB9vO7AnRqMDCrOy", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "34" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json deleted file mode 100644 index 4d2d4631d5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.8", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "7cx9gZh2vUCR0ELG", - "filament_id": "OFvGc67v", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.8 nozzle" - ], - "fan_min_speed": "15", - "filament_max_volumetric_speed": [ - "36" - ], - "slow_down_layer_time": "25" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json deleted file mode 100644 index ce22974fd1..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One 0.6", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "GB4mI21wSfo3jfnQ", - "filament_id": "OFoJcr46", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json deleted file mode 100644 index cb1eb8f267..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S 0.6", - "inherits": "Prusa Generic ASA @MK4S", - "from": "system", - "setting_id": "j5YvdepMw4z29kzr", - "filament_id": "OFoJcr46", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ], - "nozzle_temperature": "255", - "slow_down_layer_time": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json deleted file mode 100644 index cbacb6e747..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S 0.8", - "inherits": "Prusa Generic ASA @MK4S", - "from": "system", - "setting_id": "FtVjP8q0MzM0vr2J", - "filament_id": "OFoJcr46", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ], - "fan_max_speed": "15", - "fan_min_speed": "15", - "slow_down_layer_time": "18" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json deleted file mode 100644 index 47055f18aa..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.5", - "inherits": "Prusa Generic ASA @MK4S HF0.4", - "from": "system", - "setting_id": "meEXtenGq7N4dWf3", - "filament_id": "OFoJcr46", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json deleted file mode 100644 index 414315ad65..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.6", - "inherits": "Prusa Generic ASA @MK4S HF0.4", - "from": "system", - "setting_id": "o0UhIK80Y28KX3AK", - "filament_id": "OFoJcr46", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "fan_max_speed": "15", - "fan_min_speed": "15", - "filament_max_volumetric_speed": [ - "34" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json deleted file mode 100644 index 6129d321b2..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.5", - "inherits": "Prusa Generic PETG @MK4S HF0.4", - "from": "system", - "setting_id": "vO26JgugJEsX5z6a", - "filament_id": "OF1Id239", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "29" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json deleted file mode 100644 index a205ac7e71..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One 0.6", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "8kSIJx0dpaelcAos", - "filament_id": "OFiCHnso", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ], - "nozzle_temperature": [ - "210" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json deleted file mode 100644 index e877f0f0b4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One 0.8", - "inherits": "Prusa Generic PLA Silk @CORE One", - "from": "system", - "setting_id": "y2IZMYPduRS1mEFL", - "filament_id": "OFHFZ1Te", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle", - "Prusa CORE One HF 0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "17" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json deleted file mode 100644 index 2c0e48d6a5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4S 0.6", - "inherits": "Prusa Generic TPU @MK4S", - "from": "system", - "setting_id": "3zJSkjnxFgeAbkhY", - "filament_id": "OFbenYUK", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle", - "Prusa MK4S HF0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "6" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json deleted file mode 100644 index e78a2768d0..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4S 0.8", - "inherits": "Prusa Generic TPU @MK4S", - "from": "system", - "setting_id": "tRRHfIUwFo1C8Q3B", - "filament_id": "OFbenYUK", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle", - "Prusa MK4S HF0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "9" - ] -} diff --git a/resources/profiles/Prusa/machine/Prusa CORE One HF.json b/resources/profiles/Prusa/machine/Prusa CORE One HF.json index cabd5b0cb4..027ef3e2d0 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One HF.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One HF.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One HF", "bed_model": "coreone_bed.stl", "bed_texture": "coreone.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One L HF.json b/resources/profiles/Prusa/machine/Prusa CORE One L HF.json index c176e5961b..57287f0380 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One L HF.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One L HF.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One L HF", "bed_model": "coreonel_bed.stl", "bed_texture": "coreonel.svg", - "default_materials": "Prusa Generic PLA @CORE One", + "default_materials": "Generic PLA @Prusa CORE One", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One L.json b/resources/profiles/Prusa/machine/Prusa CORE One L.json index 4ba199b10f..87bc587830 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One L.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One L.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One L", "bed_model": "coreonel_bed.stl", "bed_texture": "coreonel.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One.json b/resources/profiles/Prusa/machine/Prusa CORE One.json index 7fbe05d11d..b9907aca2e 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One", "bed_model": "coreone_bed.stl", "bed_texture": "coreone.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json index b5f9d8392b..dbfa34e816 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json index 488734582c..4bc7af6bab 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json index ea851b9dcf..6eed0480a6 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json index 30394e8eef..8168f195fa 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI.json b/resources/profiles/Prusa/machine/Prusa MINI.json index 367b75a727..a7ce538229 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI.json +++ b/resources/profiles/Prusa/machine/Prusa MINI.json @@ -8,5 +8,5 @@ "bed_model": "mini_bed.stl", "bed_texture": "mini.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json index c800a8a409..06b10cc244 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.25" + "Generic PLA @Prusa MINIIS 0.25" ], "default_print_profile": "0.12mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json index d2d6c18f39..18fe72ef3f 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS" + "Generic PLA @Prusa MINIIS" ], "default_print_profile": "0.20mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json index c7ebd42263..7dc21fb981 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.6" + "Generic PLA @Prusa MINIIS 0.6" ], "default_print_profile": "0.25mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json index 0ae5a7bbbd..4ab6daa76d 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.8" + "Generic PLA @Prusa MINIIS 0.8" ], "default_print_profile": "0.40mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS.json b/resources/profiles/Prusa/machine/Prusa MINIIS.json index 123f0a3665..ae5282a129 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS.json @@ -8,5 +8,5 @@ "bed_model": "miniis_bed.stl", "bed_texture": "miniis.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF @MINIIS;Prusa Generic PC @MINIIS;Prusa Generic PVA @MINIIS;Prusa Generic PA @MINIIS;Prusa Generic PA-CF @MINIIS;Prusa Generic ABS @MINIIS;Prusa Generic PLA @MINIIS;Prusa Generic PLA @MINIIS 0.6;Prusa Generic PLA @MINIIS 0.8;Prusa Generic PETG @MINIIS;Prusa Generic PETG @MINIIS 0.6;Prusa Generic PETG @MINIIS 0.8;Prusa Generic TPU @MINIIS;Prusa Generic ASA @MINIIS;" + "default_materials": "Generic PLA-CF @Prusa MINIIS;Generic PC @Prusa MINIIS;Generic PVA @Prusa MINIIS;Generic PA @Prusa MINIIS;Generic PA-CF @Prusa MINIIS;Generic ABS @Prusa MINIIS;Generic PLA @Prusa MINIIS;Generic PLA @Prusa MINIIS 0.6;Generic PLA @Prusa MINIIS 0.8;Generic PETG @Prusa MINIIS;Generic PETG @Prusa MINIIS 0.6;Generic PETG @Prusa MINIIS 0.8;Generic TPU @Prusa MINIIS;Generic ASA @Prusa MINIIS;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json index d2fefedc6f..77ca6aa9e3 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.25" + "Generic PLA @Prusa MK3.5 0.25" ], "default_print_profile": "0.12mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json index 6d473ce765..ae7df2e583 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5" + "Generic PLA @Prusa MK3.5" ], "default_print_profile": "0.20mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json index 3631749c53..742b172254 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.6" + "Generic PLA @Prusa MK3.5 0.6" ], "default_print_profile": "0.25mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json index 1dd7d455d4..c67665fefa 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.8" + "Generic PLA @Prusa MK3.5 0.8" ], "default_print_profile": "0.40mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5.json b/resources/profiles/Prusa/machine/Prusa MK3.5.json index 4438d3d478..2893862789 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5.json @@ -8,5 +8,5 @@ "bed_model": "mk3.5_bed.stl", "bed_texture": "mk3.5.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF @MK3.5;Prusa Generic PC @MK3.5;Prusa Generic PVA @MK3.5;Prusa Generic PA @MK3.5;Prusa Generic PA-CF @MK3.5;Prusa Generic ABS @MK3.5;Prusa Generic PLA @MK3.5;Prusa Generic PLA @MK3.5 0.6;Prusa Generic PLA @MK3.5 0.8;Prusa Generic PETG @MK3.5;Prusa Generic PETG @MK3.5 0.6;Prusa Generic PETG @MK3.5 0.8;Prusa Generic TPU @MK3.5;Prusa Generic ASA @MK3.5;" + "default_materials": "Generic PLA-CF @Prusa MK3.5;Generic PC @Prusa MK3.5;Generic PVA @Prusa MK3.5;Generic PA @Prusa MK3.5;Generic PA-CF @Prusa MK3.5;Generic ABS @Prusa MK3.5;Generic PLA @Prusa MK3.5;Generic PLA @Prusa MK3.5 0.6;Generic PLA @Prusa MK3.5 0.8;Generic PETG @Prusa MK3.5;Generic PETG @Prusa MK3.5 0.6;Generic PETG @Prusa MK3.5 0.8;Generic TPU @Prusa MK3.5;Generic ASA @Prusa MK3.5;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json index 28333578ff..31fd34848a 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Speed @MK3S 0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json index 5b86474541..036b901121 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Speed @MK3S 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json index d94d5a0306..c3be2666b8 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.30mm Quality @MK3S 0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json index 92450e95fe..ac85e1db4c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.15mm Detail @MK3S 0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S.json b/resources/profiles/Prusa/machine/Prusa MK3S.json index d5323b5f1f..ad27bb59f6 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S.json @@ -8,5 +8,5 @@ "bed_model": "mk3_bed.stl", "bed_texture": "mk3.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json index 81b75a5098..ad8bdc7676 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.08mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json index 89aa893547..417a953aaa 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.20mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json index f5991e42a9..af4b985d28 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.32mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json index 91e64bdbb1..f6a151581c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.40mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4.json b/resources/profiles/Prusa/machine/Prusa MK4.json index dc14d1477c..a5a01b2f2e 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4.json +++ b/resources/profiles/Prusa/machine/Prusa MK4.json @@ -8,5 +8,5 @@ "bed_model": "mk4_bed.stl", "bed_texture": "mk4is.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF;Prusa Generic ABS @MK4;Prusa Generic PLA @MK4;Prusa Generic PETG @MK4;Prusa Generic TPU @MK4;Prusa Generic ASA @MK4;" + "default_materials": "Generic PLA-CF @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa;Generic ABS @Prusa MK4;Generic PLA @Prusa MK4;Generic PETG @Prusa MK4;Generic TPU @Prusa MK4;Generic ASA @Prusa MK4;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json index e9824d1ed6..4f0a79173a 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "8tL4SMT6bHqG2Ql1", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S", + "default_filament_profile": "Generic PLA @Prusa MK4S", "default_print_profile": "0.20mm SPEED @MK4S 0.4", "nozzle_diameter": [ "0.4" diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json index 0f454ca38f..22acff8dbe 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "m0ALiNI26ncFxsY2", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S 0.6", + "default_filament_profile": "Generic PLA @Prusa MK4S 0.6", "default_print_profile": "0.25mm SPEED @MK4S 0.6", "max_layer_height": "0.40", "min_layer_height": "0.15", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json index d460517983..8799a148b4 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "rMzjWvSpqLsRK0gP", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S 0.8", + "default_filament_profile": "Generic PLA @Prusa MK4S 0.8", "default_print_profile": "0.40mm QUALITY @MK4S 0.8", "deretraction_speed": "15", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF.json b/resources/profiles/Prusa/machine/Prusa MK4S HF.json index b49fde2dde..088715b835 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF.json @@ -3,7 +3,7 @@ "name": "Prusa MK4S HF", "bed_model": "mk4_bed.stl", "bed_texture": "mk4s.svg", - "default_materials": "Prusa Generic ABS @MK4S;Prusa Generic ASA @MK4S;Prusa Generic PETG @MK4S;Prusa Generic PLA @MK4S;Prusa Generic PLA Silk @MK4S;Prusa Generic TPU @MK4S", + "default_materials": "Generic ABS @Prusa MK4S;Generic ASA @Prusa MK4S;Generic PETG @Prusa MK4S;Generic PLA @Prusa MK4S;Generic PLA Silk @Prusa MK4S;Generic TPU @Prusa MK4S", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json index abc0f71d50..f417814bbd 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "zMYcZUEYGqFVXcPo", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S HF0.4", + "default_filament_profile": "Generic PLA @Prusa MK4S HF0.4", "default_print_profile": "0.20mm SPEED @MK4S HF0.4", "machine_start_gcode": [ "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle check\nM862.3 P \"MK4S\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.1.3+7898\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X42 Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X48 Z0.05 F8000 ; wipe, move close to the bed\nG0 X51 Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%" diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json index dd6cf098d4..37ea0e1f7c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "UygX2hdbWqKzY6Nn", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S HF0.8", + "default_filament_profile": "Generic PLA @Prusa MK4S HF0.8", "default_print_profile": "0.40mm STRUCTURAL @MK4S HF0.8", "deretraction_speed": "15", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S.json b/resources/profiles/Prusa/machine/Prusa MK4S.json index 18f669594a..2f6bd3e45f 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S.json @@ -3,7 +3,7 @@ "name": "Prusa MK4S", "bed_model": "mk4_bed.stl", "bed_texture": "mk4s.svg", - "default_materials": "Prusa Generic ABS @MK4S;Prusa Generic ASA @MK4S;Prusa Generic PETG @MK4S;Prusa Generic PLA @MK4S;Prusa Generic PLA Silk @MK4S;Prusa Generic TPU @MK4S", + "default_materials": "Generic ABS @Prusa MK4S;Generic ASA @Prusa MK4S;Generic PETG @Prusa MK4S;Generic PLA @Prusa MK4S;Generic PLA Silk @Prusa MK4S;Generic TPU @Prusa MK4S", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json index 8a2ef4ecbb..e259346b94 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.15mm Speed @Prusa XL 0.25", "printer_variant": "0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json index 7b6192e64c..afbd0b421c 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.20mm Speed @Prusa XL 0.3", "printer_variant": "0.3", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json index ae5add4f6a..20e8694545 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.20mm Speed @Prusa XL 0.4", "printer_variant": "0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json index 5d470138ca..d4dafc32a1 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.25mm Speed @Prusa XL 0.5", "printer_variant": "0.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json index 050b6b5106..4e43982b7d 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.32mm Speed @Prusa XL 0.6", "printer_variant": "0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json index 3d64a2420d..2594b57060 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.40mm Quality @Prusa XL 0.8", "printer_variant": "0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json index 42916b3a27..8a29e7dadf 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.15mm Speed @Prusa XL 5T 0.25", "printer_variant": "0.25", "max_layer_height": "0.15", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json index 7a07b277e2..d380fe5434 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.3", "printer_variant": "0.3", "max_layer_height": "0.22", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json index 8642ac9ac7..3b29778f29 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.4", "printer_variant": "0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json index fe51f7f4f8..e795d8f8b0 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.25mm Speed @Prusa XL 5T 0.5", "printer_variant": "0.5", "max_layer_height": "0.32", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json index 1492cf6a6d..76569ca735 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.32mm Speed @Prusa XL 5T 0.6", "printer_variant": "0.6", "max_layer_height": "0.4", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json index 14277e59fe..d72bfeccad 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.40mm Quality @Prusa XL 5T 0.8", "printer_variant": "0.8", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T.json b/resources/profiles/Prusa/machine/Prusa XL 5T.json index 20dfce5046..02e93a78b5 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T.json @@ -8,5 +8,5 @@ "bed_model": "Prusa XL_bed.stl", "bed_texture": "Prusa XL.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA @XL 5T;Prusament PLA @XL 5T;Prusament rPLA @XL 5T;Prusa Generic PETG @XL 5T;Prusament PETG @XL 5T;Prusa Generic ABS @XL 5T;Prusament ASA @XL 5T;Prusament PC Blend @XL 5T;Prusament PC-CF @XL 5T;Prusament PVB @XL 5T;Prusament PA-CF @XL 5T;Prusa Generic FLEX @XL 5T" + "default_materials": "Generic PLA @Prusa XL 5T;Prusament PLA @XL 5T;Prusament rPLA @XL 5T;Generic PETG @Prusa XL 5T;Prusament PETG @XL 5T;Generic ABS @Prusa XL 5T;Prusament ASA @XL 5T;Prusament PC Blend @XL 5T;Prusament PC-CF @XL 5T;Prusament PVB @XL 5T;Prusament PA-CF @XL 5T;Generic FLEX @Prusa XL 5T" } diff --git a/resources/profiles/Prusa/machine/Prusa XL.json b/resources/profiles/Prusa/machine/Prusa XL.json index 9a7ba66066..17cc16e486 100644 --- a/resources/profiles/Prusa/machine/Prusa XL.json +++ b/resources/profiles/Prusa/machine/Prusa XL.json @@ -8,5 +8,5 @@ "bed_model": "Prusa XL_bed.stl", "bed_texture": "Prusa XL.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA @XL;Prusament PLA @XL;Prusament rPLA @XL;Prusa Generic PETG @XL;Prusament PETG @XL;Prusa Generic ABS @XL;Prusament ASA @XL;Prusament PC Blend @XL;Prusament PC-CF @XL;Prusament PVB @XL;Prusament PA-CF @XL;Prusa Generic FLEX @XL" + "default_materials": "Generic PLA @Prusa XL;Prusament PLA @XL;Prusament rPLA @XL;Generic PETG @Prusa XL;Prusament PETG @XL;Generic ABS @Prusa XL;Prusament ASA @XL;Prusament PC Blend @XL;Prusament PC-CF @XL;Prusament PVB @XL;Prusament PA-CF @XL;Generic FLEX @Prusa XL" } diff --git a/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json b/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json index daec78bc4e..0cbde13d89 100644 --- a/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json +++ b/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json @@ -10,7 +10,7 @@ "change_filament_gcode": [ "" ], - "default_filament_profile": "Prusa Generic PLA @MK4S", + "default_filament_profile": "Generic PLA @Prusa MK4S", "default_print_profile": "0.20mm SPEED @MK4IS 0.4", "deretraction_speed": "25", "extruder_clearance_height_to_lid": "220", diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 98f157c9a3..c3babbc4a5 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.12", + "version": "02.04.00.13", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ @@ -1753,8 +1753,8 @@ "sub_path": "filament/QIDI ABS-GF25.json" }, { - "name": "Qidi Generic ABS", - "sub_path": "filament/Qidi Generic ABS.json" + "name": "Generic ABS @Qidi", + "sub_path": "filament/Generic ABS @Qidi.json" }, { "name": "Qidi PC-ABS-FR", @@ -1769,8 +1769,8 @@ "sub_path": "filament/Qidi ASA-Aero.json" }, { - "name": "Qidi Generic ASA", - "sub_path": "filament/Qidi Generic ASA.json" + "name": "Generic ASA @Qidi", + "sub_path": "filament/Generic ASA @Qidi.json" }, { "name": "QIDI PA-Ultra", @@ -1817,16 +1817,16 @@ "sub_path": "filament/QIDI UltraPA-CF25.json" }, { - "name": "Qidi Generic PA", - "sub_path": "filament/Qidi Generic PA.json" + "name": "Generic PA @Qidi", + "sub_path": "filament/Generic PA @Qidi.json" }, { - "name": "Qidi Generic PA-CF", - "sub_path": "filament/Qidi Generic PA-CF.json" + "name": "Generic PA-CF @Qidi", + "sub_path": "filament/Generic PA-CF @Qidi.json" }, { - "name": "Qidi Generic PC", - "sub_path": "filament/Qidi Generic PC.json" + "name": "Generic PC @Qidi", + "sub_path": "filament/Generic PC @Qidi.json" }, { "name": "Bambu PETG", @@ -1861,12 +1861,12 @@ "sub_path": "filament/QIDI PETG-GF.json" }, { - "name": "Qidi Generic PETG", - "sub_path": "filament/Qidi Generic PETG.json" + "name": "Generic PETG @Qidi", + "sub_path": "filament/Generic PETG @Qidi.json" }, { - "name": "Qidi Generic PETG-CF", - "sub_path": "filament/Qidi Generic PETG-CF.json" + "name": "Generic PETG-CF @Qidi", + "sub_path": "filament/Generic PETG-CF @Qidi.json" }, { "name": "Tinmorry PETG-ECO", @@ -1917,28 +1917,28 @@ "sub_path": "filament/QIDI WOOD Rapido.json" }, { - "name": "Qidi Generic PLA", - "sub_path": "filament/Qidi Generic PLA.json" + "name": "Generic PLA @Qidi", + "sub_path": "filament/Generic PLA @Qidi.json" }, { - "name": "Qidi Generic PLA Silk", - "sub_path": "filament/Qidi Generic PLA Silk.json" + "name": "Generic PLA Silk @Qidi", + "sub_path": "filament/Generic PLA Silk @Qidi.json" }, { - "name": "Qidi Generic PLA+", - "sub_path": "filament/Qidi Generic PLA+.json" + "name": "Generic PLA+ @Qidi", + "sub_path": "filament/Generic PLA+ @Qidi.json" }, { - "name": "Qidi Generic PLA-CF", - "sub_path": "filament/Qidi Generic PLA-CF.json" + "name": "Generic PLA-CF @Qidi", + "sub_path": "filament/Generic PLA-CF @Qidi.json" }, { "name": "Qidi PLA-CF", "sub_path": "filament/Qidi PLA-CF.json" }, { - "name": "Qidi Generic PVA", - "sub_path": "filament/Qidi Generic PVA.json" + "name": "Generic PVA @Qidi", + "sub_path": "filament/Generic PVA @Qidi.json" }, { "name": "QIDI PEBA 95A", @@ -1953,12 +1953,12 @@ "sub_path": "filament/QIDI TPU-GF.json" }, { - "name": "Qidi Generic TPU", - "sub_path": "filament/Qidi Generic TPU.json" + "name": "Generic TPU @Qidi", + "sub_path": "filament/Generic TPU @Qidi.json" }, { - "name": "Qidi Generic TPU 95A", - "sub_path": "filament/Qidi Generic TPU 95A.json" + "name": "Generic TPU 95A @Qidi", + "sub_path": "filament/Generic TPU 95A @Qidi.json" }, { "name": "Qidi TPU 95A-HF", @@ -4553,48 +4553,48 @@ "sub_path": "filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json" + "name": "Generic ABS @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" }, { "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle", @@ -4673,48 +4673,48 @@ "sub_path": "filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json" + "name": "Generic ASA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" }, { "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle", @@ -4981,44 +4981,44 @@ "sub_path": "filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @0.2 nozzle.json" + "name": "Generic PC @Qidi 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @0.8 nozzle.json" + "name": "Generic PC @Qidi 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json" }, { "name": "Bambu PETG @0.2 nozzle", @@ -5333,48 +5333,48 @@ "sub_path": "filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json" + "name": "Generic PETG @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" }, { "name": "Bambu PLA @0.2 nozzle", @@ -5825,148 +5825,148 @@ "sub_path": "filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json" + "name": "Generic PLA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json" + "name": "Generic PLA @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json" + "name": "Generic PLA @Qidi X-Max 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json" + "name": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json" + "name": "Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json" + "name": "Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json" + "name": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json" + "name": "Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json" + "name": "Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json" + "name": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json" + "name": "Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json" }, { "name": "QIDI PLA-CF @0.6 nozzle", @@ -6057,20 +6057,20 @@ "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json" }, { "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", @@ -6089,20 +6089,20 @@ "sub_path": "filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" }, { "name": "fdm_filament_x5_common", diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json index b14283c761..2ca51212e7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "BNOS859dmAw7GIZp", - "filament_id": "OFv4VZCd", + "setting_id": "IQDYfIQsv6WlnA3z", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json similarity index 63% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json index 7dd600cc44..7c22168a8e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "XfuwzYZzTauK0ADk", - "filament_id": "OFv4VZCd", + "setting_id": "YS0ov4dEWAJhRRvk", + "filament_id": "OFY9muEs", "instantiation": "true", "fan_max_speed": [ "80" @@ -13,7 +14,7 @@ "10" ], "filament_settings_id": [ - "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle" + "Generic ABS @Qidi Q1 Pro 0.4 nozzle" ], "nozzle_temperature": [ "250" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json index 0411a7a366..b16d7783b2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "ziWmRGMYOpjc7Hpo", - "filament_id": "OFv4VZCd", + "setting_id": "LQTfTgV2MBEm6DDD", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json index 39cca2e3bb..61f33e870a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "lLXYczQE4YfPiyDO", - "filament_id": "OFv4VZCd", + "setting_id": "ZWOlrWQQwvsDV8xa", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json index e24fd6df8f..fcb9b9f547 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle;Qidi Generic ABS Qidi X-Max 3 0.2 nozzle", "from": "system", - "setting_id": "o62pcRmFnj2mIXhf", - "filament_id": "OFv4VZCd", + "setting_id": "v7w2dLJ1MtUjvy1l", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json index 6b67afc3a6..c52716ea4b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle;Qidi Generic ABS Qidi X-Plus 3 0.2 nozzle", "from": "system", - "setting_id": "UBWjZCCGQrpgmlpa", - "filament_id": "OFv4VZCd", + "setting_id": "vH2jlch11zfDBUPP", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json index f04c392d36..521521c0fe 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "qB4eDc7UuoKv5m2U", - "filament_id": "OFv4VZCd", + "setting_id": "0bwmAx9OQYm5MwVE", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json index 0ba51d1d97..b5bbbdbf47 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "N3Ca9PN8nDnvhmak", - "filament_id": "OFv4VZCd", + "setting_id": "Y3yAythmKXxr76Pg", + "filament_id": "OFY9muEs", "instantiation": "true", "fan_max_speed": [ "80" @@ -13,7 +14,7 @@ "10" ], "filament_settings_id": [ - "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle" + "Generic ABS @Qidi X-Plus 4 0.4 nozzle" ], "pressure_advance": [ "0.03" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json index c614b1b214..27ef9809e8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "UkNcVB3bJZqLN3fu", - "filament_id": "OFv4VZCd", + "setting_id": "Bt8ySpZn6WFWC00A", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json similarity index 62% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json index 1a25e73239..3dcc3d5889 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "uK0zY0a6MpcFTZWr", - "filament_id": "OFv4VZCd", + "setting_id": "7j3bweJutseUaoZQ", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json index fdfdb04794..7503ba737d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", + "name": "Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle;Qidi Generic ABS Qidi X-Smart 3 0.2 nozzle", "from": "system", - "setting_id": "veNBpzcNYa6TAMry", - "filament_id": "OFv4VZCd", + "setting_id": "StJpaMQKORYm7i94", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic ABS.json rename to resources/profiles/Qidi/filament/Generic ABS @Qidi.json index fd469656b7..76a01a3fa6 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ABS", + "name": "Generic ABS @Qidi", "inherits": "fdm_filament_abs", + "renamed_from": "Qidi Generic ABS", "from": "system", - "setting_id": "wcv9ZpNwvZ0ZcWKw", - "filament_id": "OFv4VZCd", + "setting_id": "iO5utPsBKAo7cHop", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json similarity index 60% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json index b1dc3929af..749dddc689 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "OLkg128vxsk27w03", - "filament_id": "OFsxlLdo", + "setting_id": "3LUibDTlv799Gy6r", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json similarity index 68% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json index c76c3b7bf4..f8ef61a4aa 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "pGOT3C5eREsHRylS", - "filament_id": "OFsxlLdo", + "setting_id": "EtjXhHzpmShNgIqj", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" + "Generic ASA @Qidi Q1 Pro 0.4 nozzle" ], "nozzle_temperature": [ "270" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json similarity index 68% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json index b2e93f6042..cef5172ed5 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "QRlzPtO4mqLKcdws", - "filament_id": "OFsxlLdo", + "setting_id": "5hlUjx0YAFTR9TYr", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "13" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle" + "Generic ASA @Qidi Q1 Pro 0.6 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json similarity index 68% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json index e31053553a..93b389d444 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "vLLCDxhI2GR76M1p", - "filament_id": "OFsxlLdo", + "setting_id": "oArSgOFOlXLGkueW", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "13" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle" + "Generic ASA @Qidi Q1 Pro 0.8 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json index 67919c260e..38b0088adb 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle;Qidi Generic ASA Qidi X-Max 3 0.2 nozzle", "from": "system", - "setting_id": "6pY4I5kAFdSYPOte", - "filament_id": "OFsxlLdo", + "setting_id": "LfT1OaNir4KZevUP", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json index 8205a3e728..c0e92e8f7c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle;Qidi Generic ASA Qidi X-Plus 3 0.2 nozzle", "from": "system", - "setting_id": "A85OmyjS63OgZa0V", - "filament_id": "OFsxlLdo", + "setting_id": "S2aFIcoyiIsZ5TR8", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json index f7d7fadfa0..1f7ec6918c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "1CBWjstSdMJLJWuv", - "filament_id": "OFsxlLdo", + "setting_id": "aYowi3jA3nUcr5e8", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json similarity index 67% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json index 0a0da5a68f..1a42a6d075 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "UIsup1TGWKg0Fq72", - "filament_id": "OFsxlLdo", + "setting_id": "Qaogxqa5Zw7i7n0a", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle" + "Generic ASA @Qidi X-Plus 4 0.4 nozzle" ], "nozzle_temperature": [ "270" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json similarity index 67% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json index bf2fbce6c2..6700a02c94 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "HQupWXd5yKceVrm4", - "filament_id": "OFsxlLdo", + "setting_id": "aP2WrJLkjpGFtt8I", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "13" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle" + "Generic ASA @Qidi X-Plus 4 0.6 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json similarity index 67% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json index 70f2dca93b..3a1c923505 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "R6FcpVRhnSp0i8bK", - "filament_id": "OFsxlLdo", + "setting_id": "mx6C1Q73i0B7gpag", + "filament_id": "OFLPAxz3", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +20,7 @@ "13" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle" + "Generic ASA @Qidi X-Plus 4 0.8 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json index 8fa1b77e26..437ed6c7d8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", + "name": "Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle;Qidi Generic ASA Qidi X-Smart 3 0.2 nozzle", "from": "system", - "setting_id": "sE2DGjOmcjRuuh0z", - "filament_id": "OFsxlLdo", + "setting_id": "6jbwOYmS2ypqTshH", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json similarity index 87% rename from resources/profiles/Qidi/filament/Qidi Generic ASA.json rename to resources/profiles/Qidi/filament/Generic ASA @Qidi.json index 5c955f6322..6057fbea4a 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic ASA", + "name": "Generic ASA @Qidi", "inherits": "fdm_filament_asa", + "renamed_from": "Qidi Generic ASA", "from": "system", - "setting_id": "WTOEo36YTIFcXDaI", - "filament_id": "OFsxlLdo", + "setting_id": "IO7E03K3t2sySCAM", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA.json b/resources/profiles/Qidi/filament/Generic PA @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic PA.json rename to resources/profiles/Qidi/filament/Generic PA @Qidi.json index 640faa445f..c27771e405 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA.json +++ b/resources/profiles/Qidi/filament/Generic PA @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PA", + "name": "Generic PA @Qidi", "inherits": "fdm_filament_pa", + "renamed_from": "Qidi Generic PA", "from": "system", - "setting_id": "S6S5nM9zZbNCyhya", - "filament_id": "OFQbqeN7", + "setting_id": "la9e4F5ns9eWv7Lg", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_type": [ "PA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json similarity index 90% rename from resources/profiles/Qidi/filament/Qidi Generic PA-CF.json rename to resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json index ee5c5b3206..bdf39e1630 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json +++ b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PA-CF", + "name": "Generic PA-CF @Qidi", "inherits": "fdm_filament_pa", + "renamed_from": "Qidi Generic PA-CF", "from": "system", - "setting_id": "aOVEazsct9L3eD2u", - "filament_id": "OFPy0Ogq", + "setting_id": "qLuGt33iENH6QTjv", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json index 80e7acafbe..8573598189 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @0.2 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @0.2 nozzle;Qidi Generic PC 0.2 nozzle", "from": "system", - "setting_id": "i4Nt0riiDwptxOIe", - "filament_id": "OFK01afJ", + "setting_id": "Ei2Izb38mh4A4wgw", + "filament_id": "OFLakOUI", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json similarity index 51% rename from resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json index 774e1deed8..491f5917d3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @0.8 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @0.8 nozzle;Qidi Generic PC 0.8 nozzle", "from": "system", - "setting_id": "8mJysYABmQTBlWLw", - "filament_id": "OFK01afJ", + "setting_id": "marM5nqtpl08NP9b", + "filament_id": "OFLakOUI", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json index b869e3db14..fb85345598 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PC Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "be2KpgVjm4APQtrt", - "filament_id": "OFK01afJ", + "setting_id": "5sAcMTaVI41PCs3n", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json index edcb7070ad..b7057b6c2f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PC Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "9aGpKzNCjXDcfmqr", - "filament_id": "OFK01afJ", + "setting_id": "QmaeYzkbcmKJCJSv", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json index 4e018cf7e0..56a5a8e132 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PC Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "1BjBpSDoLs6nTHeo", - "filament_id": "OFK01afJ", + "setting_id": "heIlhCMIZ9MXeDHE", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json index 33ef6fa1b2..13f13ea759 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PC Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "8ptIGtXeMSwVqkVB", - "filament_id": "OFK01afJ", + "setting_id": "JlztE3hk1LB23o4h", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json index bb41002e5a..29c7c1658b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PC Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "IQCYG5yZFPsvTuHY", - "filament_id": "OFK01afJ", + "setting_id": "2eI2cXfCN6vlk6UV", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json index 1eb5bf3ae6..ba52effd22 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PC Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "TPbG7zlsPowdKEVw", - "filament_id": "OFK01afJ", + "setting_id": "kGhUT0TAXku3by9D", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json index ef7aadea0b..e3f9c180ba 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PC Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "mzsetSq0CzwqbGnP", - "filament_id": "OFK01afJ", + "setting_id": "HzAwEYvedOi3GRMY", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json similarity index 50% rename from resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json index 4cc95f36fe..e6c8d1586d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PC", + "name": "Generic PC @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PC Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "wlnm88gEKcNzvx7W", - "filament_id": "OFK01afJ", + "setting_id": "iq1u1nPMi9GT31p9", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC.json b/resources/profiles/Qidi/filament/Generic PC @Qidi.json similarity index 88% rename from resources/profiles/Qidi/filament/Qidi Generic PC.json rename to resources/profiles/Qidi/filament/Generic PC @Qidi.json index 8d17246464..c69f050f5c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PC.json +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PC", + "name": "Generic PC @Qidi", "inherits": "fdm_filament_pc", + "renamed_from": "Qidi Generic PC", "from": "system", - "setting_id": "wd4PrqXE2um46ueW", - "filament_id": "OFK01afJ", + "setting_id": "m1fBauBqqvKdIAAr", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_type": [ "PC" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json index 4dc4f79a35..02004cab28 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "GfDMSO3DjLxfMnUc", - "filament_id": "OFKNAhls", + "setting_id": "D2QwO7VczuscejBF", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json similarity index 68% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json index 8cc579f330..10a2b2f080 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "SzQLWO8poDxEU0ez", - "filament_id": "OFKNAhls", + "setting_id": "GeV4szn47hD1UedT", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -22,7 +23,7 @@ "10" ], "filament_settings_id": [ - "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle" + "Generic PETG @Qidi Q1 Pro 0.4 nozzle" ], "overhang_fan_speed": [ "90" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json index f3006cef44..995b79eb68 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "yyfoSMlQsvkmUGR5", - "filament_id": "OFKNAhls", + "setting_id": "hwVzOmBJL0wnhzVj", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json index 6ba08141b2..f1d1298d8d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "ogHITGUcn1r2bHXc", - "filament_id": "OFKNAhls", + "setting_id": "QKyHd7rHutldls1y", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json index 6ca659d410..9eb15c7a9c 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle;Qidi Generic PETG Qidi X-Max 3 0.2 nozzle", "from": "system", - "setting_id": "CVyv3PHeZaSGmD6E", - "filament_id": "OFKNAhls", + "setting_id": "afJiGzHpK1vEgb0S", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json index f3a451fa22..7994ab710f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PETG Qidi X-Plus 3 0.2 nozzle", "from": "system", - "setting_id": "tNl6q6MadSoFZ3EH", - "filament_id": "OFKNAhls", + "setting_id": "grlFOKGDoAo075zz", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json index c30b0b9c48..f8de246245 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "1xGw8fYiSf6YzBnk", - "filament_id": "OFKNAhls", + "setting_id": "hb1v0ytZ8KFm0KeO", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json similarity index 68% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json index 19eee209c1..0419f9669d 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "MMSCic1l0b3e5qe3", - "filament_id": "OFKNAhls", + "setting_id": "V8YvTFXnlItPw97m", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -25,7 +26,7 @@ "10" ], "filament_settings_id": [ - "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle" + "Generic PETG @Qidi X-Plus 4 0.4 nozzle" ], "overhang_fan_speed": [ "90" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json index 320522f3b2..f4a3448c63 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "KD0ABMKuQunww07p", - "filament_id": "OFKNAhls", + "setting_id": "X9FiUfQBLABTKIKO", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json similarity index 71% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json index df1d833154..6bc15f85a2 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "ZFkH9oLkRWDVovLu", - "filament_id": "OFKNAhls", + "setting_id": "5XdW6h65aMPX61o9", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json similarity index 70% rename from resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json index 7a659abfe5..ac5c820791 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", + "name": "Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PETG Qidi X-Smart 3 0.2 nozzle", "from": "system", - "setting_id": "ixR5wIrehSmn8Inz", - "filament_id": "OFKNAhls", + "setting_id": "MynfKhfKlXwFaVOJ", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic PETG.json rename to resources/profiles/Qidi/filament/Generic PETG @Qidi.json index a46451b4b2..b4747dc9df 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG.json +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG", + "name": "Generic PETG @Qidi", "inherits": "fdm_filament_pet", + "renamed_from": "Qidi Generic PETG", "from": "system", - "setting_id": "Yk3w834THlnAS3jr", - "filament_id": "OFKNAhls", + "setting_id": "zRfo4sbJ3auEJtiC", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json similarity index 92% rename from resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json rename to resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json index 41a8a19505..fbe5386405 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json +++ b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PETG-CF", + "name": "Generic PETG-CF @Qidi", "inherits": "fdm_filament_pet", + "renamed_from": "Qidi Generic PETG-CF", "from": "system", - "setting_id": "kjmXKWCMonhYhy8U", - "filament_id": "OFfZ0lTS", + "setting_id": "1ehKRzcekplfoFdJ", + "filament_id": "OFoYSJKi", "instantiation": "true", "temperature_vitrification": [ "75" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json index c4ee570822..4c0c00e6ba 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "6e0DHBzRkQvU0419", - "filament_id": "OFu79SUH", + "setting_id": "2TNFziuyxg2X4zgY", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json similarity index 55% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json index b8dc934bf9..5b49e8560e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -1,16 +1,17 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "eCR3lbTRdkYcMZgl", - "filament_id": "OFu79SUH", + "setting_id": "PNCPMC8uMY9h5SZr", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "14" ], "filament_settings_id": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" + "Generic PLA @Qidi Q1 Pro 0.4 nozzle" ], "full_fan_speed_layer": [ "3" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json index 9cb96bf501..442f46e559 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "JSQupeTNYtzE8l6q", - "filament_id": "OFu79SUH", + "setting_id": "23t94qXoDPSdi7fS", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json index 88954db351..d915ed03a8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "n4rp1Pooux07hwx1", - "filament_id": "OFu79SUH", + "setting_id": "aWIicFWyadhnYKfF", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json index 8784aa33ac..52ee24c470 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle;Qidi Generic PLA Qidi X-Max 3 0.2 nozzle", "from": "system", - "setting_id": "P57Nm7E7KTnHMov0", - "filament_id": "OFu79SUH", + "setting_id": "VhP4JYzAah2X1Kr3", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json new file mode 100644 index 0000000000..76521556dd --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Max 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle;Qidi Generic PLA Qidi X-Max 3 0.6 nozzle", + "from": "system", + "setting_id": "uhzFvazl2rWd0YN3", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json new file mode 100644 index 0000000000..4246b7fc19 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Max 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle;Qidi Generic PLA Qidi X-Max 3 0.8 nozzle", + "from": "system", + "setting_id": "t7bkbAgWCK7ObiK4", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json index aed12c1545..7508b21dc3 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.2 nozzle", "from": "system", - "setting_id": "WwUGv09h9thWkzMf", - "filament_id": "OFsXOMoX", + "setting_id": "1iUDRQmhNsb4Tlag", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json new file mode 100644 index 0000000000..fcdcb48de7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.6 nozzle", + "from": "system", + "setting_id": "qbT3T9cRjqK7aO4M", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json new file mode 100644 index 0000000000..d42c838771 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.8 nozzle", + "from": "system", + "setting_id": "dMVLTDJInWMo2fMP", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json index d59bd63cc0..8124fb26b0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "M0JCDyI7icGyqs43", - "filament_id": "OFu79SUH", + "setting_id": "4OyCs9habQtGhoot", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json similarity index 54% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json index a940104863..90d822953f 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "tRztgu06hBi9IxSE", - "filament_id": "OFu79SUH", + "setting_id": "SU5XqpfPO5g87dfL", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "14" @@ -13,7 +14,7 @@ "0.034" ], "filament_settings_id": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle" + "Generic PLA @Qidi X-Plus 4 0.4 nozzle" ], "full_fan_speed_layer": [ "3" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json index 1581dfb47e..2cc9b574c1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "8XzQCGoYi01mIjNY", - "filament_id": "OFu79SUH", + "setting_id": "7ALKguzkoK6KLHVv", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json index d39b789104..2f0ab0b4c7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "hkeictJYR1KDX7kB", - "filament_id": "OFu79SUH", + "setting_id": "jzfMNZP4WaNcNixD", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json index a2359aff5e..c9af562ff6 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.2 nozzle", "from": "system", - "setting_id": "KTkq14RsduGBSdMZ", - "filament_id": "OFsXOMoX", + "setting_id": "gNbvzCkxedrQ7nQe", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json new file mode 100644 index 0000000000..497283dd4c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.6 nozzle", + "from": "system", + "setting_id": "t8uPl9peXZRJbdLj", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json new file mode 100644 index 0000000000..6b125ee3aa --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.8 nozzle", + "from": "system", + "setting_id": "VsoBEmU35N8eW3CO", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json similarity index 81% rename from resources/profiles/Qidi/filament/Qidi Generic PLA.json rename to resources/profiles/Qidi/filament/Generic PLA @Qidi.json index dd060727ed..e3e1f6eb48 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA.json +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA", + "name": "Generic PLA @Qidi", "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA", "from": "system", - "setting_id": "tmrmjsN8vDKGlNpX", - "filament_id": "OFu79SUH", + "setting_id": "illxClFj0LphvnHh", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..75f9a19364 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "ktWvoEzkA0mJ0Q5T", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..7067954ef5 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "lBa0yfqPsQgr4U3m", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json similarity index 51% rename from resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json index 73b241ea48..d4bd50b020 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "VqVyXnU77CZCKsNy", - "filament_id": "OFS8JF3S", + "setting_id": "Ls5CQx5Yf8QuC4T3", + "filament_id": "OFmpMwxS", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json similarity index 51% rename from resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json index 47fe217eb7..dd77278778 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "0504CZkoYLx6NMI0", - "filament_id": "OFS8JF3S", + "setting_id": "VyCsuptxJnVw1KqD", + "filament_id": "OFmpMwxS", "instantiation": "true", "slow_down_layer_time": [ "6" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json similarity index 60% rename from resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json index 9088564556..fbf48ad575 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA Silk", + "name": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA Silk @Qidi", + "renamed_from": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA Silk Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "lRRlOS4Xd1pGLIEq", - "filament_id": "OFy4ajVZ", + "setting_id": "VusYzaMdLpjravVc", + "filament_id": "OFesA6rF", "instantiation": "true", "enable_pressure_advance": "1", "pressure_advance": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json similarity index 60% rename from resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json index 19d91f0f9c..bbfd984880 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA Silk", + "name": "Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA Silk @Qidi", + "renamed_from": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA Silk Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "DaBZGfcdheWjNdgr", - "filament_id": "OFy4ajVZ", + "setting_id": "9GVORPqwLq0s3mlY", + "filament_id": "OFesA6rF", "instantiation": "true", "enable_pressure_advance": "1", "pressure_advance": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json rename to resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json index 8f195626d2..c9fed29f60 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA Silk", + "name": "Generic PLA Silk @Qidi", "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA Silk", "from": "system", - "setting_id": "OATeG6kIIRyViXbn", - "filament_id": "OFy4ajVZ", + "setting_id": "qmNmFB6yN23u389x", + "filament_id": "OFesA6rF", "instantiation": "true", "enable_pressure_advance": "1", "filament_type": [ diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json similarity index 55% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json index 5639be330a..e61e507c68 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.2 nozzle", "from": "system", - "setting_id": "dmKDk6Yb4zQFCWIe", - "filament_id": "OFsXOMoX", + "setting_id": "S5IihmYwqdoEXiOT", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json similarity index 51% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json index d78cdb3490..842010a166 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "vwFHzxD2MrRieUIw", - "filament_id": "OFsXOMoX", + "setting_id": "iZYrNv7L15yrfAPR", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_settings_id": [ - "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" + "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" ], "full_fan_speed_layer": [ "3" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json similarity index 55% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json index cef91d9faa..1b48ab6b10 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.6 nozzle", "from": "system", - "setting_id": "wlXNWvECV8ylNVFF", - "filament_id": "OFsXOMoX", + "setting_id": "zDYfWdaJGDL64gzD", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json similarity index 55% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json index 9d0b6428cc..677620b7b7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "gR4NZ8mgTNVxxjhh", - "filament_id": "OFsXOMoX", + "setting_id": "eAtbANg8BCzaurOY", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json index c21f2a31df..f3fa9ec4b4 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.2 nozzle", "from": "system", - "setting_id": "wCdBhg6B4tQZw7dp", - "filament_id": "OFsXOMoX", + "setting_id": "ak1iDHwta1iV5CXw", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json new file mode 100644 index 0000000000..2e151c9e14 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.6 nozzle", + "from": "system", + "setting_id": "JwpYPwMfRZtymarF", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json new file mode 100644 index 0000000000..b829c40c1a --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.8 nozzle", + "from": "system", + "setting_id": "ZOuRUZf07g43ZV9u", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json index ca0eeb74ba..2a761a1946 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.2 nozzle", "from": "system", - "setting_id": "JJmzlY5XOz9eGO8n", - "filament_id": "OFu79SUH", + "setting_id": "DujfIhzIsPDdHZlg", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json new file mode 100644 index 0000000000..657b16a6a4 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.6 nozzle", + "from": "system", + "setting_id": "BA46FjbkAt4dhdfQ", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json new file mode 100644 index 0000000000..9455380809 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.8 nozzle", + "from": "system", + "setting_id": "TEqTy5MhYC1CLkrr", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json similarity index 59% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json index 4e5928cf60..ecfb501bb0 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.2 nozzle", "from": "system", - "setting_id": "XUhGdonOGCUI34EH", - "filament_id": "OFsXOMoX", + "setting_id": "TO1cgOHqLFnimX9m", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json similarity index 51% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json index 53d4d543ae..c0ff54ee65 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json @@ -1,16 +1,17 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "yvokLiCctDUmcDCR", - "filament_id": "OFsXOMoX", + "setting_id": "Dyf2Y7pDd4UWIIJ5", + "filament_id": "OFEWYR89", "instantiation": "true", "pressure_advance": [ "0.034" ], "filament_settings_id": [ - "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle" + "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle" ], "full_fan_speed_layer": [ "3" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json index 72afba15b9..5ddca086f7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.6 nozzle", "from": "system", - "setting_id": "gZxafcPwX1hqI7Dm", - "filament_id": "OFsXOMoX", + "setting_id": "ty1M4Mik83FlDWKj", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json index 4eced792ff..937e85aff4 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "j6fJ7L02mVcZ01fO", - "filament_id": "OFsXOMoX", + "setting_id": "Wyo0NeD4dPzA365C", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json similarity index 55% rename from resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json index eeb8a443ef..a32c884550 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", + "name": "Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.2 nozzle", "from": "system", - "setting_id": "4YnRWwYLWMODUHXq", - "filament_id": "OFu79SUH", + "setting_id": "lypNmywVe3qfhs2q", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json new file mode 100644 index 0000000000..fe84ef4f8c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.6 nozzle", + "from": "system", + "setting_id": "Hxpe6y8Xo37WmcQr", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json new file mode 100644 index 0000000000..59a6efb166 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.8 nozzle", + "from": "system", + "setting_id": "2jjI8l22cAXTuxMl", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json similarity index 83% rename from resources/profiles/Qidi/filament/Qidi Generic PLA+.json rename to resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json index 9ed1642e89..2c1e136f6b 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA+", + "name": "Generic PLA+ @Qidi", "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA+", "from": "system", - "setting_id": "LNjBixpjLg5i8P1d", - "filament_id": "OFsXOMoX", + "setting_id": "JhZ9hP9n1gBNGwBq", + "filament_id": "OFEWYR89", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json rename to resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json index b3e70b1a47..1381442943 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json +++ b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PLA-CF", + "name": "Generic PLA-CF @Qidi", "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA-CF", "from": "system", - "setting_id": "bJKgxsU0tR1NDtoN", - "filament_id": "OFQTrLXB", + "setting_id": "XspRlBSqR3DsiFBM", + "filament_id": "OFWbdGsC", "instantiation": "true", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PVA.json b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json similarity index 89% rename from resources/profiles/Qidi/filament/Qidi Generic PVA.json rename to resources/profiles/Qidi/filament/Generic PVA @Qidi.json index 23d6c89d40..ffd25855a1 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic PVA.json +++ b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic PVA", + "name": "Generic PVA @Qidi", "inherits": "fdm_filament_pva", + "renamed_from": "Qidi Generic PVA", "from": "system", - "setting_id": "8450opPMJm6GG5Cq", - "filament_id": "OFNZYgLA", + "setting_id": "dmGcoGkH9lvmgsJL", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_type": [ "PVA" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json similarity index 57% rename from resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json index 19b01dbf26..3fab5170d7 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic TPU 95A", + "name": "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic TPU 95A @Qidi", + "renamed_from": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle;Qidi Generic TPU 95A Qidi Q1 Pro 0.8 nozzle", "from": "system", - "setting_id": "0gGSrFIulk4gPLSp", - "filament_id": "OFWukXja", + "setting_id": "lwRnIxnWLYp1Hww4", + "filament_id": "OFjiXpyf", "instantiation": "true", "fan_cooling_layer_time": [ "60" @@ -13,7 +14,7 @@ "4" ], "filament_settings_id": [ - "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle" + "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle" ], "nozzle_temperature": [ "220" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json similarity index 56% rename from resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json rename to resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json index ee19db18a9..7e964fd0b8 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic TPU 95A", + "name": "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic TPU 95A @Qidi", + "renamed_from": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle;Qidi Generic TPU 95A Qidi X-Plus 4 0.8 nozzle", "from": "system", - "setting_id": "5fkE2aGkghsMdZ1W", - "filament_id": "OFWukXja", + "setting_id": "BPUUHxYPhHcPIWs9", + "filament_id": "OFjiXpyf", "instantiation": "true", "fan_cooling_layer_time": [ "60" @@ -13,7 +14,7 @@ "4" ], "filament_settings_id": [ - "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle" + "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle" ], "nozzle_temperature": [ "220" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json similarity index 87% rename from resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json rename to resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json index 04e75b3633..2c9602ee2e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU 95A", + "name": "Generic TPU 95A @Qidi", "inherits": "fdm_filament_tpu", + "renamed_from": "Qidi Generic TPU 95A", "from": "system", - "setting_id": "JWZrlYnOOlGpTEg6", - "filament_id": "OFWukXja", + "setting_id": "nXjylLuhXqtlLGEv", + "filament_id": "OFjiXpyf", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json index f54208a542..93793f8d8e 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic TPU", + "name": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic TPU @Qidi", + "renamed_from": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle;Qidi Generic TPU Qidi Q1 Pro 0.4 nozzle", "from": "system", - "setting_id": "s0MMbJlTt9Cbh8FQ", - "filament_id": "OFZsChIG", + "setting_id": "ToMKfKFZDCHyEHw9", + "filament_id": "OFgbpcy9", "instantiation": "true", "fan_cooling_layer_time": [ "60" @@ -13,7 +14,7 @@ "4" ], "filament_settings_id": [ - "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle" + "Generic TPU @Qidi Q1 Pro 0.4 nozzle" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json similarity index 53% rename from resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json rename to resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json index 67d47da272..f1c8117c47 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic TPU", + "name": "Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic TPU @Qidi", + "renamed_from": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle;Qidi Generic TPU Qidi X-Plus 4 0.4 nozzle", "from": "system", - "setting_id": "KqdGTkLW1x7oZpvj", - "filament_id": "OFZsChIG", + "setting_id": "AACIHxmLhuNAGo6d", + "filament_id": "OFgbpcy9", "instantiation": "true", "fan_cooling_layer_time": [ "60" @@ -13,7 +14,7 @@ "4" ], "filament_settings_id": [ - "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle" + "Generic TPU @Qidi X-Plus 4 0.4 nozzle" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json similarity index 87% rename from resources/profiles/Qidi/filament/Qidi Generic TPU.json rename to resources/profiles/Qidi/filament/Generic TPU @Qidi.json index bf4d662d62..a525b49520 100644 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU.json +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Qidi Generic TPU", + "name": "Generic TPU @Qidi", "inherits": "fdm_filament_tpu", + "renamed_from": "Qidi Generic TPU", "from": "system", - "setting_id": "qvJXA6V5mxiOguUj", - "filament_id": "OFZsChIG", + "setting_id": "0jwJs0mTFs0904VK", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json index e199e58998..fc2d6d8ba6 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -19,7 +19,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" + "Generic ASA @Qidi Q1 Pro 0.4 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json index 39b0b7be70..f9dfff9d99 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -19,7 +19,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle" + "Generic ASA @Qidi X-Plus 4 0.4 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json deleted file mode 100644 index c66a485d3b..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "DWfVtYimjZxqyDzM", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json deleted file mode 100644 index 004bd0cda5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "ausfQ4SuKLMuruFb", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json deleted file mode 100644 index ea5c6e5f2a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "EpYu1ME5tSsFYirK", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json deleted file mode 100644 index 9b99d1a90f..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "wZ8U1Ga1bQXbd2nN", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json deleted file mode 100644 index 683f582678..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "bKi57zeQX7mAw7kl", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json deleted file mode 100644 index d4836a5f3d..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "lscOLQTFf4Y3Ax1f", - "filament_id": "OFu79SUH", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index 2c20544437..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "from": "system", - "setting_id": "HaE0HFgjT8wysrVT", - "filament_id": "OFS8JF3S", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "pressure_advance": [ - "0.034" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index e4c16f3697..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "from": "system", - "setting_id": "vxXEJP3C4k5Zjvsx", - "filament_id": "OFS8JF3S", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "pressure_advance": [ - "0.034" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json deleted file mode 100644 index 29c72ccfe5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "7Bxn8OUT1MJbNvxC", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json deleted file mode 100644 index b034072cbb..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "miQxMqjI3odS4V1O", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json deleted file mode 100644 index 4e3df63a29..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "oAIJyTMV5EnXTJDF", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json deleted file mode 100644 index 4d1ec90cb1..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "Ya2viE6yXmdshs75", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json deleted file mode 100644 index e2d3c6b536..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "xiomvJqo2HAwsxT0", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json deleted file mode 100644 index f438b1f7c0..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "3SemJWSvKeN7OXVy", - "filament_id": "OFsXOMoX", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json index 8b4274e094..a097f39bab 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle" + "Generic PLA @Qidi Q1 Pro 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi Q1 Pro 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json index a97a66730b..a085ce6cfe 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json @@ -82,6 +82,6 @@ "machine_start_gcode": "PRINT_START BED=[hot_plate_temp_initial_layer] HOTEND=[nozzle_temperature_initial_layer] CHAMBER=[chamber_temperature]\nM83\nM140 S[hot_plate_temp_initial_layer]\nM104 S[nozzle_temperature_initial_layer]\nG4 P3000\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0)} Z5 F6000\nG0 Z[initial_layer_print_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0)} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 85} E{83 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 3} E{82 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 6}\nG1 Z1 F600\n", "thumbnails_format": "PNG", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" + "Generic PLA @Qidi Q1 Pro 0.4 nozzle" ] } diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json index 3e2e07d54f..fb2d73df60 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle" + "Generic PLA @Qidi Q1 Pro 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Qidi Q1 Pro 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json index 5dea524660..4d99e1a77d 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle" + "Generic PLA @Qidi Q1 Pro 0.8 nozzle" ], "default_print_profile": "0.40mm Standard @Qidi Q1 Pro 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro.json index d6102cf61f..ef9803cbd9 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro.json @@ -8,5 +8,5 @@ "bed_model": "qidi_Q1Pro_buildplate_model.stl", "bed_texture": "qidi_Q1Pro_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle;QIDI ASA @Qidi Q1 Pro 0.4 nozzle;QIDI ASA @Qidi Q1 Pro 0.2 nozzle;QIDI ASA @Qidi Q1 Pro 0.6 nozzle;QIDI ASA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle" + "default_materials": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle;QIDI ASA @Qidi Q1 Pro 0.4 nozzle;QIDI ASA @Qidi Q1 Pro 0.2 nozzle;QIDI ASA @Qidi Q1 Pro 0.6 nozzle;QIDI ASA @Qidi Q1 Pro 0.8 nozzle;Generic PETG @Qidi Q1 Pro 0.4 nozzle;Generic PETG @Qidi Q1 Pro 0.2 nozzle;Generic PETG @Qidi Q1 Pro 0.6 nozzle;Generic PETG @Qidi Q1 Pro 0.8 nozzle;Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Generic PLA @Qidi Q1 Pro 0.4 nozzle;Generic PLA @Qidi Q1 Pro 0.2 nozzle;Generic PLA @Qidi Q1 Pro 0.6 nozzle;Generic PLA @Qidi Q1 Pro 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json index c82db4969e..a41e2b6a11 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nM140 S[hot_plate_temp_initial_layer]\nM190 S[hot_plate_temp_initial_layer]\nM109 S[nozzle_temperature_initial_layer]\nG92 E-19\nG0 Y5 Z0.3 F3600\nG1 X5 E0 F2400\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json index b70c4bc480..7729b8612d 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xcfpro_buildplate_model.stl", "bed_texture": "qidi_xcfpro_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU 95A" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU 95A @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 76577d5f38..b1196c0e70 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nG92 E0\nG0 X300 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-19\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json index d6b10d422d..84ae0879fe 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle" + "Generic PLA @Qidi X-Max 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XMax3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index 655b4e32c8..d9ba740281 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -46,6 +46,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json index d0d5ac6e04..c10a1c0254 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XMax3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json index c8042e7e3a..4d04574c15 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XMax3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3.json b/resources/profiles/Qidi/machine/Qidi X-Max 3.json index 56fc955601..99888a8acf 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xmax3_buildplate_model.stl", "bed_texture": "qidi_xmax3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max.json b/resources/profiles/Qidi/machine/Qidi X-Max.json index ac917aa5b7..26b0ad47d7 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xmax_buildplate_model.stl", "bed_texture": "qidi_xmax_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU 95A" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU 95A @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index ed7f0c24a1..d4e1daee9e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nG92 E0\nG0 X270 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-16\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json index 382cd364fd..c6a98fc3de 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle" + "Generic PLA @Qidi X-Plus 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XPlus3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index 03159944f0..5d39065f8c 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -42,6 +42,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json index 5af64f9934..959f8013e8 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XPlus3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json index 43aa1a2a2b..93aa435c52 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XPlus3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json index 535fc25aef..84df7f37be 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus3_buildplate_model.stl", "bed_texture": "qidi_xplus3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json index b16849ea80..fe66c4fc60 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle" + "Generic PLA @Qidi X-Plus 4 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XPlus4 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json index 82e9da78cb..a7d2f09195 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json @@ -97,7 +97,7 @@ "machine_start_gcode": "PRINT_START BED=[bed_temperature_initial_layer_single] HOTEND=[nozzle_temperature_initial_layer] CHAMBER=[chamber_temperature] EXTRUDER=[initial_no_support_extruder]\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG4 P3000\nT[initial_tool]\nG0 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0)} Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0)} Z5 F6000\nG0 Z[initial_layer_print_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0] - 12, first_layer_print_min[0] + 80))} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0)} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 85} E{83 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 3} E{82 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 3} Z0\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 6}\nG1 Z1 F600\nSET_PRINT_STATS_INFO CURRENT_LAYER=1", "thumbnails_format": "PNG", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle" + "Generic PLA @Qidi X-Plus 4 0.4 nozzle" ], "printer_agent": "qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json index f33fbeb5dc..116c754002 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle" + "Generic PLA @Qidi X-Plus 4 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Qidi XPlus4 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json index e66c252d0f..d232221c5d 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle" + "Generic PLA @Qidi X-Plus 4 0.8 nozzle" ], "default_print_profile": "0.40mm Standard @Qidi XPlus4 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json index 82702cb7dc..ac34a73e34 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus4_buildplate_model.stl", "bed_texture": "qidi_xplus4_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;Qidi Generic PETG" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;Generic PETG @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus.json b/resources/profiles/Qidi/machine/Qidi X-Plus.json index 5aa0917d5e..bf30d976ac 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus_buildplate_model.stl", "bed_texture": "qidi_xplus_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json index bd5d6b5bba..e3bc48c8ed 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle" + "Generic PLA @Qidi X-Smart 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XSmart3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index d224dbf971..f76a264423 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -48,6 +48,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json index 255f4d67db..97e5afc5d2 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XSmart3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json index ef62543341..a3192db8a5 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XSmart3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json index 78cd91d3e4..75b3d2e252 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xsmart3_buildplate_model.stl", "bed_texture": "qidi_xsmart3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi" } diff --git a/resources/profiles/Qidi/machine/fdm_qidi_common.json b/resources/profiles/Qidi/machine/fdm_qidi_common.json index 99149558f9..38b39c4591 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.20mm Standard @QIDI", "bed_exclude_area": [ diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 969794f578..128926c992 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -317,8 +317,8 @@ "sub_path": "filament/RatRig BigNozzle ABS.json" }, { - "name": "RatRig Generic ABS", - "sub_path": "filament/RatRig Generic ABS.json" + "name": "Generic ABS @RatRig", + "sub_path": "filament/Generic ABS @RatRig.json" }, { "name": "RatRig PunkFil ABS", @@ -329,20 +329,20 @@ "sub_path": "filament/RatRig BigNozzle ASA.json" }, { - "name": "RatRig Generic ASA", - "sub_path": "filament/RatRig Generic ASA.json" + "name": "Generic ASA @RatRig", + "sub_path": "filament/Generic ASA @RatRig.json" }, { - "name": "RatRig Generic PA", - "sub_path": "filament/RatRig Generic PA.json" + "name": "Generic PA @RatRig", + "sub_path": "filament/Generic PA @RatRig.json" }, { - "name": "RatRig Generic PA-CF", - "sub_path": "filament/RatRig Generic PA-CF.json" + "name": "Generic PA-CF @RatRig", + "sub_path": "filament/Generic PA-CF @RatRig.json" }, { - "name": "RatRig Generic PC", - "sub_path": "filament/RatRig Generic PC.json" + "name": "Generic PC @RatRig", + "sub_path": "filament/Generic PC @RatRig.json" }, { "name": "RatRig BigNozzle PCTG", @@ -353,12 +353,12 @@ "sub_path": "filament/RatRig BigNozzle PETG.json" }, { - "name": "RatRig Generic PCTG", - "sub_path": "filament/RatRig Generic PCTG.json" + "name": "Generic PCTG @RatRig", + "sub_path": "filament/Generic PCTG @RatRig.json" }, { - "name": "RatRig Generic PETG", - "sub_path": "filament/RatRig Generic PETG.json" + "name": "Generic PETG @RatRig", + "sub_path": "filament/Generic PETG @RatRig.json" }, { "name": "RatRig PunkFil PETG", @@ -373,24 +373,24 @@ "sub_path": "filament/RatRig BigNozzle PLA.json" }, { - "name": "RatRig Generic PLA", - "sub_path": "filament/RatRig Generic PLA.json" + "name": "Generic PLA @RatRig", + "sub_path": "filament/Generic PLA @RatRig.json" }, { - "name": "RatRig Generic PLA-CF", - "sub_path": "filament/RatRig Generic PLA-CF.json" + "name": "Generic PLA-CF @RatRig", + "sub_path": "filament/Generic PLA-CF @RatRig.json" }, { - "name": "RatRig Generic PVA", - "sub_path": "filament/RatRig Generic PVA.json" + "name": "Generic PVA @RatRig", + "sub_path": "filament/Generic PVA @RatRig.json" }, { "name": "RatRig BigNozzle TPU", "sub_path": "filament/RatRig BigNozzle TPU.json" }, { - "name": "RatRig Generic TPU", - "sub_path": "filament/RatRig Generic TPU.json" + "name": "Generic TPU @RatRig", + "sub_path": "filament/Generic TPU @RatRig.json" } ], "machine_list": [ diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json b/resources/profiles/Ratrig/filament/Generic ABS @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic ABS.json rename to resources/profiles/Ratrig/filament/Generic ABS @RatRig.json index ed76ab9524..d45720cf60 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json +++ b/resources/profiles/Ratrig/filament/Generic ABS @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic ABS", + "name": "Generic ABS @RatRig", "inherits": "fdm_filament_abs", + "renamed_from": "RatRig Generic ABS", "from": "system", - "setting_id": "ovLAzbygn6JHqGk0", - "filament_id": "OFyFRojy", + "setting_id": "0BepsauXBs5bxPYO", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.980" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json b/resources/profiles/Ratrig/filament/Generic ASA @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic ASA.json rename to resources/profiles/Ratrig/filament/Generic ASA @RatRig.json index 6cc52605f5..9b70da5bab 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json +++ b/resources/profiles/Ratrig/filament/Generic ASA @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic ASA", + "name": "Generic ASA @RatRig", "inherits": "fdm_filament_asa", + "renamed_from": "RatRig Generic ASA", "from": "system", - "setting_id": "pmxazFQdx5Oa7Pke", - "filament_id": "OF48L671", + "setting_id": "cogJbKPAXzyCQgvf", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA.json b/resources/profiles/Ratrig/filament/Generic PA @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic PA.json rename to resources/profiles/Ratrig/filament/Generic PA @RatRig.json index 17a29f6fe5..58d6757d78 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA.json +++ b/resources/profiles/Ratrig/filament/Generic PA @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PA", + "name": "Generic PA @RatRig", "inherits": "fdm_filament_pa", + "renamed_from": "RatRig Generic PA", "from": "system", - "setting_id": "fVGEV9t4w06LODgD", - "filament_id": "OFEZNNw1", + "setting_id": "5rpTzhFjS6Ar4Xy8", + "filament_id": "OFg8ndtj", "instantiation": "true", "nozzle_temperature_initial_layer": [ "270" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json b/resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json rename to resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json index 4fa73713e1..5b0ea38d75 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json +++ b/resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PA-CF", + "name": "Generic PA-CF @RatRig", "inherits": "fdm_filament_pa", + "renamed_from": "RatRig Generic PA-CF", "from": "system", - "setting_id": "ZRrsXKPk8pY4yrwd", - "filament_id": "OFNOxcYl", + "setting_id": "ps7duiwT8adNshEO", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PC.json b/resources/profiles/Ratrig/filament/Generic PC @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic PC.json rename to resources/profiles/Ratrig/filament/Generic PC @RatRig.json index 3eab266588..c6dc89cce5 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PC.json +++ b/resources/profiles/Ratrig/filament/Generic PC @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PC", + "name": "Generic PC @RatRig", "inherits": "fdm_filament_pc", + "renamed_from": "RatRig Generic PC", "from": "system", - "setting_id": "XQ5VEJXu5X0L3Lbn", - "filament_id": "OFdOWhCa", + "setting_id": "7x5VtUIevdAmBqqA", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json b/resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig Generic PCTG.json rename to resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json index 1bc6658211..d3e06685b5 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json +++ b/resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json @@ -1,11 +1,15 @@ { "type": "filament", - "name": "RatRig Generic PCTG", + "name": "Generic PCTG @RatRig", "inherits": "fdm_filament_pet", + "renamed_from": "RatRig Generic PCTG", "from": "system", - "setting_id": "SG4Gt87iS1ql3s8S", - "filament_id": "OFUrStd6", + "setting_id": "JMTUqdhoQzCb6ZxJ", + "filament_id": "OFu1evlr", "instantiation": "true", + "filament_type": [ + "PCTG" + ], "reduce_fan_stop_start_freq": [ "1" ], diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json b/resources/profiles/Ratrig/filament/Generic PETG @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig Generic PETG.json rename to resources/profiles/Ratrig/filament/Generic PETG @RatRig.json index ab649e81b3..b0182712b1 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json +++ b/resources/profiles/Ratrig/filament/Generic PETG @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PETG", + "name": "Generic PETG @RatRig", "inherits": "fdm_filament_pet", + "renamed_from": "RatRig Generic PETG", "from": "system", - "setting_id": "u6diBMbHW2nnKKTm", - "filament_id": "OFxg7n2G", + "setting_id": "6p3FfhhSIAOQGEzT", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json b/resources/profiles/Ratrig/filament/Generic PLA @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig Generic PLA.json rename to resources/profiles/Ratrig/filament/Generic PLA @RatRig.json index 1e99ec6398..b8a33f4da4 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json +++ b/resources/profiles/Ratrig/filament/Generic PLA @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PLA", + "name": "Generic PLA @RatRig", "inherits": "fdm_filament_pla", + "renamed_from": "RatRig Generic PLA", "from": "system", - "setting_id": "IY6qXVoQqhsKuMzP", - "filament_id": "OFd10YeG", + "setting_id": "BsQA6ChWHTDUSlii", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json b/resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json rename to resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json index e8278cb1ab..288c892f09 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json +++ b/resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PLA-CF", + "name": "Generic PLA-CF @RatRig", "inherits": "fdm_filament_pla", + "renamed_from": "RatRig Generic PLA-CF", "from": "system", - "setting_id": "Vwn22LQBChxWysmU", - "filament_id": "OFlx52rn", + "setting_id": "ai3I13fL5giqq5LW", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json b/resources/profiles/Ratrig/filament/Generic PVA @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig Generic PVA.json rename to resources/profiles/Ratrig/filament/Generic PVA @RatRig.json index 5035285a77..016b146181 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json +++ b/resources/profiles/Ratrig/filament/Generic PVA @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic PVA", + "name": "Generic PVA @RatRig", "inherits": "fdm_filament_pva", + "renamed_from": "RatRig Generic PVA", "from": "system", - "setting_id": "9uJ3Rr6kn9jZZxPO", - "filament_id": "OFsxRSwr", + "setting_id": "y6DJYhqAmxMng8Kf", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json b/resources/profiles/Ratrig/filament/Generic TPU @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig Generic TPU.json rename to resources/profiles/Ratrig/filament/Generic TPU @RatRig.json index 8e69cce08f..e8ea6176b7 100644 --- a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json +++ b/resources/profiles/Ratrig/filament/Generic TPU @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig Generic TPU", + "name": "Generic TPU @RatRig", "inherits": "fdm_filament_tpu", + "renamed_from": "RatRig Generic TPU", "from": "system", - "setting_id": "zWOn983v5s2ujssj", - "filament_id": "OFB09fpe", + "setting_id": "dAIGKmZctSRhP1Lu", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/Ratrig/machine/RatRig V-Cast.json b/resources/profiles/Ratrig/machine/RatRig V-Cast.json index d4d2d51ce4..259a8fff94 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Cast.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Cast.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcast-bed.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json index 07e3e95a9c..1d0b05e4f5 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-200.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json index 830b0bded9..a82c91482c 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json index 5fb1292b86..97713f4417 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json index 4bce2ed0fe..08b6b2e59a 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json index 09a867b6e9..3b43d60a23 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json index 7cc76b3323..71eb9724f9 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json index 1664aff7e3..47cd8fba2f 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json index 6d0e891a12..4731e90901 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json index 9aa253bdea..86963d7e73 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json index bafe6879cf..7b61ebe531 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json index 961e647009..f2831e5919 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json index 5efa6aea9f..a14770104f 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json index e2549c0416..1a477fb750 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json index a8710f8aaa..327c56d036 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json index cb5eb6f526..2e72109e25 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json index d3e08811f8..e6c7405f9a 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json index 3e56953833..bc27a53e94 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json index 336ed1ddd8..3518748830 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json index 5766fb3953..59ff011a82 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Minion.json b/resources/profiles/Ratrig/machine/RatRig V-Minion.json index 974a3aaa59..4134cadbf2 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Minion.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Minion.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vminion-bed.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/fdm_klipper_common.json b/resources/profiles/Ratrig/machine/fdm_klipper_common.json index 8915fc1d4a..28ad9ce02c 100644 --- a/resources/profiles/Ratrig/machine/fdm_klipper_common.json +++ b/resources/profiles/Ratrig/machine/fdm_klipper_common.json @@ -126,7 +126,7 @@ "1" ], "default_filament_profile": [ - "RatRig Generic ABS" + "Generic ABS @RatRig" ], "default_print_profile": "0.20mm Standard @RatRig", "bed_exclude_area": [ diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index 85d373fbc9..42ac381eb6 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ @@ -89,44 +89,44 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "SecKit Generic ABS", - "sub_path": "filament/SecKit Generic ABS.json" + "name": "Generic ABS @SecKit", + "sub_path": "filament/Generic ABS @SecKit.json" }, { - "name": "SecKit Generic ASA", - "sub_path": "filament/SecKit Generic ASA.json" + "name": "Generic ASA @SecKit", + "sub_path": "filament/Generic ASA @SecKit.json" }, { - "name": "SecKit Generic PA", - "sub_path": "filament/SecKit Generic PA.json" + "name": "Generic PA @SecKit", + "sub_path": "filament/Generic PA @SecKit.json" }, { - "name": "SecKit Generic PA-CF", - "sub_path": "filament/SecKit Generic PA-CF.json" + "name": "Generic PA-CF @SecKit", + "sub_path": "filament/Generic PA-CF @SecKit.json" }, { - "name": "SecKit Generic PC", - "sub_path": "filament/SecKit Generic PC.json" + "name": "Generic PC @SecKit", + "sub_path": "filament/Generic PC @SecKit.json" }, { - "name": "SecKit Generic PETG", - "sub_path": "filament/SecKit Generic PETG.json" + "name": "Generic PETG @SecKit", + "sub_path": "filament/Generic PETG @SecKit.json" }, { - "name": "SecKit Generic PLA", - "sub_path": "filament/SecKit Generic PLA.json" + "name": "Generic PLA @SecKit", + "sub_path": "filament/Generic PLA @SecKit.json" }, { - "name": "SecKit Generic PLA-CF", - "sub_path": "filament/SecKit Generic PLA-CF.json" + "name": "Generic PLA-CF @SecKit", + "sub_path": "filament/Generic PLA-CF @SecKit.json" }, { - "name": "SecKit Generic PVA", - "sub_path": "filament/SecKit Generic PVA.json" + "name": "Generic PVA @SecKit", + "sub_path": "filament/Generic PVA @SecKit.json" }, { - "name": "SecKit Generic TPU", - "sub_path": "filament/SecKit Generic TPU.json" + "name": "Generic TPU @SecKit", + "sub_path": "filament/Generic TPU @SecKit.json" } ], "machine_list": [ diff --git a/resources/profiles/SecKit/filament/SecKit Generic ABS.json b/resources/profiles/SecKit/filament/Generic ABS @SecKit.json similarity index 83% rename from resources/profiles/SecKit/filament/SecKit Generic ABS.json rename to resources/profiles/SecKit/filament/Generic ABS @SecKit.json index ed9be1c69a..cdd9ce2f62 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic ABS.json +++ b/resources/profiles/SecKit/filament/Generic ABS @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic ABS", + "name": "Generic ABS @SecKit", "inherits": "fdm_filament_abs", + "renamed_from": "SecKit Generic ABS", "from": "system", - "setting_id": "gUrHIkj9GExYWVjh", - "filament_id": "OFnh79eM", + "setting_id": "VSrXBQUNBQMwUc08", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.980" diff --git a/resources/profiles/SecKit/filament/SecKit Generic ASA.json b/resources/profiles/SecKit/filament/Generic ASA @SecKit.json similarity index 81% rename from resources/profiles/SecKit/filament/SecKit Generic ASA.json rename to resources/profiles/SecKit/filament/Generic ASA @SecKit.json index 6688efd51f..366b20172b 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic ASA.json +++ b/resources/profiles/SecKit/filament/Generic ASA @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic ASA", + "name": "Generic ASA @SecKit", "inherits": "fdm_filament_asa", + "renamed_from": "SecKit Generic ASA", "from": "system", - "setting_id": "UwVF6VlxRg0IW9hB", - "filament_id": "OFrh4bBH", + "setting_id": "usCYRq4VuLqXvb0T", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA.json b/resources/profiles/SecKit/filament/Generic PA @SecKit.json similarity index 81% rename from resources/profiles/SecKit/filament/SecKit Generic PA.json rename to resources/profiles/SecKit/filament/Generic PA @SecKit.json index 38a275a6f2..7746d8628a 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PA.json +++ b/resources/profiles/SecKit/filament/Generic PA @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PA", + "name": "Generic PA @SecKit", "inherits": "fdm_filament_pa", + "renamed_from": "SecKit Generic PA", "from": "system", - "setting_id": "GlgeZsK719DDjaPo", - "filament_id": "OF8CXrvm", + "setting_id": "uAuptETLwGxTsthC", + "filament_id": "OFg8ndtj", "instantiation": "true", "nozzle_temperature_initial_layer": [ "270" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json b/resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json similarity index 81% rename from resources/profiles/SecKit/filament/SecKit Generic PA-CF.json rename to resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json index 46ad248815..52c0bae450 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json +++ b/resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PA-CF", + "name": "Generic PA-CF @SecKit", "inherits": "fdm_filament_pa", + "renamed_from": "SecKit Generic PA-CF", "from": "system", - "setting_id": "0K4eQ2fbaasNdvsP", - "filament_id": "OFtsVp4v", + "setting_id": "P6G8DjjyfAFgGaj2", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PC.json b/resources/profiles/SecKit/filament/Generic PC @SecKit.json similarity index 80% rename from resources/profiles/SecKit/filament/SecKit Generic PC.json rename to resources/profiles/SecKit/filament/Generic PC @SecKit.json index 2244729859..689f3ea553 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PC.json +++ b/resources/profiles/SecKit/filament/Generic PC @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PC", + "name": "Generic PC @SecKit", "inherits": "fdm_filament_pc", + "renamed_from": "SecKit Generic PC", "from": "system", - "setting_id": "8DHToBaqE7g5VNvN", - "filament_id": "OF5E5KNA", + "setting_id": "PxmBHXsdhZGR9bYv", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PETG.json b/resources/profiles/SecKit/filament/Generic PETG @SecKit.json similarity index 86% rename from resources/profiles/SecKit/filament/SecKit Generic PETG.json rename to resources/profiles/SecKit/filament/Generic PETG @SecKit.json index 07af417aae..05c5c753c6 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PETG.json +++ b/resources/profiles/SecKit/filament/Generic PETG @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PETG", + "name": "Generic PETG @SecKit", "inherits": "fdm_filament_pet", + "renamed_from": "SecKit Generic PETG", "from": "system", - "setting_id": "mx45AbmzGkqYMSsW", - "filament_id": "OFqS8fzK", + "setting_id": "Qt4oXABB5Fukbz46", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA.json b/resources/profiles/SecKit/filament/Generic PLA @SecKit.json similarity index 79% rename from resources/profiles/SecKit/filament/SecKit Generic PLA.json rename to resources/profiles/SecKit/filament/Generic PLA @SecKit.json index 2c85460be0..b3cd1c2ffc 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA.json +++ b/resources/profiles/SecKit/filament/Generic PLA @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PLA", + "name": "Generic PLA @SecKit", "inherits": "fdm_filament_pla", + "renamed_from": "SecKit Generic PLA", "from": "system", - "setting_id": "7cpNIx6GWUp95tLN", - "filament_id": "OFETFWx7", + "setting_id": "uWvI4RDQiYLFN7pp", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json b/resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json similarity index 79% rename from resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json rename to resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json index 5ac681d9d7..507716caee 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json +++ b/resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PLA-CF", + "name": "Generic PLA-CF @SecKit", "inherits": "fdm_filament_pla", + "renamed_from": "SecKit Generic PLA-CF", "from": "system", - "setting_id": "dPLE2CXMpmdtyiZK", - "filament_id": "OFF73Bvp", + "setting_id": "znagqvEsDcHYse9M", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/SecKit/filament/SecKit Generic PVA.json b/resources/profiles/SecKit/filament/Generic PVA @SecKit.json similarity index 77% rename from resources/profiles/SecKit/filament/SecKit Generic PVA.json rename to resources/profiles/SecKit/filament/Generic PVA @SecKit.json index 67312ed658..13f7d50673 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic PVA.json +++ b/resources/profiles/SecKit/filament/Generic PVA @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic PVA", + "name": "Generic PVA @SecKit", "inherits": "fdm_filament_pva", + "renamed_from": "SecKit Generic PVA", "from": "system", - "setting_id": "jiHEC4uCmPQLINlO", - "filament_id": "OFyySVby", + "setting_id": "DIUaGXpIF3fUfxqg", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/SecKit/filament/SecKit Generic TPU.json b/resources/profiles/SecKit/filament/Generic TPU @SecKit.json similarity index 76% rename from resources/profiles/SecKit/filament/SecKit Generic TPU.json rename to resources/profiles/SecKit/filament/Generic TPU @SecKit.json index dab7cf4bf5..96d9c38a60 100644 --- a/resources/profiles/SecKit/filament/SecKit Generic TPU.json +++ b/resources/profiles/SecKit/filament/Generic TPU @SecKit.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "SecKit Generic TPU", + "name": "Generic TPU @SecKit", "inherits": "fdm_filament_tpu", + "renamed_from": "SecKit Generic TPU", "from": "system", - "setting_id": "b5GGHwZlR5oOx4eH", - "filament_id": "OFoVZg32", + "setting_id": "agKm2K9w4ZOmZN8c", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/SecKit/machine/SecKit SK-Tank.json b/resources/profiles/SecKit/machine/SecKit SK-Tank.json index 88cd516037..171d979074 100644 --- a/resources/profiles/SecKit/machine/SecKit SK-Tank.json +++ b/resources/profiles/SecKit/machine/SecKit SK-Tank.json @@ -9,5 +9,5 @@ "bed_model": "SK-Tank_Bed.stl", "bed_texture": "seckit_logo.svg", "hotend_model": "hotend.stl", - "default_materials": "SecKit Generic ABS;SecKit Generic PLA;SecKit Generic PLA-CF;SecKit Generic PETG;SecKit Generic TPU;SecKit Generic ASA;SecKit Generic PC;SecKit Generic PVA;SecKit Generic PA;SecKit Generic PA-CF" + "default_materials": "Generic ABS @SecKit;Generic PLA @SecKit;Generic PLA-CF @SecKit;Generic PETG @SecKit;Generic TPU @SecKit;Generic ASA @SecKit;Generic PC @SecKit;Generic PVA @SecKit;Generic PA @SecKit;Generic PA-CF @SecKit" } diff --git a/resources/profiles/SecKit/machine/Seckit Go3.json b/resources/profiles/SecKit/machine/Seckit Go3.json index 9b5169b017..9882f8783e 100644 --- a/resources/profiles/SecKit/machine/Seckit Go3.json +++ b/resources/profiles/SecKit/machine/Seckit Go3.json @@ -9,5 +9,5 @@ "bed_model": "SK-Go3_Bed.stl", "bed_texture": "seckit_logo.svg", "hotend_model": "seckit-hotend.stl", - "default_materials": "SecKit Generic ABS;SecKit Generic PLA;SecKit Generic PLA-CF;SecKit Generic PETG;SecKit Generic TPU;SecKit Generic ASA;SecKit Generic PC;SecKit Generic PVA;SecKit Generic PA;SecKit Generic PA-CF" + "default_materials": "Generic ABS @SecKit;Generic PLA @SecKit;Generic PLA-CF @SecKit;Generic PETG @SecKit;Generic TPU @SecKit;Generic ASA @SecKit;Generic PC @SecKit;Generic PVA @SecKit;Generic PA @SecKit;Generic PA-CF @SecKit" } diff --git a/resources/profiles/SecKit/machine/fdm_klipper_common.json b/resources/profiles/SecKit/machine/fdm_klipper_common.json index 8b9cbf6efe..4bb08f7367 100644 --- a/resources/profiles/SecKit/machine/fdm_klipper_common.json +++ b/resources/profiles/SecKit/machine/fdm_klipper_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "SecKit Generic PETG" + "Generic PETG @SecKit" ], "default_print_profile": "0.20mm Standard @SecKit", "bed_exclude_area": [ diff --git a/resources/profiles/Tiertime.json b/resources/profiles/Tiertime.json index 0742e8bce6..8134d621df 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -1,6 +1,6 @@ { "name": "Tiertime", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Tiertime configurations", "machine_model_list": [ @@ -369,12 +369,12 @@ "sub_path": "filament/Tiertime ABS@300HS.json" }, { - "name": "Tiertime Generic ABS", - "sub_path": "filament/Tiertime Generic ABS.json" + "name": "Generic ABS @Tiertime", + "sub_path": "filament/Generic ABS @Tiertime.json" }, { - "name": "Tiertime Generic ABS@300HS", - "sub_path": "filament/Tiertime Generic ABS@300HS.json" + "name": "Generic ABS @Tiertime 300HS", + "sub_path": "filament/Generic ABS @Tiertime 300HS.json" }, { "name": "Tiertime ASA", @@ -385,52 +385,52 @@ "sub_path": "filament/Tiertime ASA@300HS.json" }, { - "name": "Tiertime Generic ASA", - "sub_path": "filament/Tiertime Generic ASA.json" + "name": "Generic ASA @Tiertime", + "sub_path": "filament/Generic ASA @Tiertime.json" }, { - "name": "Tiertime Generic ASA@300HS", - "sub_path": "filament/Tiertime Generic ASA@300HS.json" + "name": "Generic ASA @Tiertime 300HS", + "sub_path": "filament/Generic ASA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic BVOH", - "sub_path": "filament/Tiertime Generic BVOH.json" + "name": "Generic BVOH @Tiertime", + "sub_path": "filament/Generic BVOH @Tiertime.json" }, { - "name": "Tiertime Generic BVOH@300HS", - "sub_path": "filament/Tiertime Generic BVOH@300HS.json" + "name": "Generic BVOH @Tiertime 300HS", + "sub_path": "filament/Generic BVOH @Tiertime 300HS.json" }, { - "name": "Tiertime Generic EVA", - "sub_path": "filament/Tiertime Generic EVA.json" + "name": "Generic EVA @Tiertime", + "sub_path": "filament/Generic EVA @Tiertime.json" }, { - "name": "Tiertime Generic EVA@300HS", - "sub_path": "filament/Tiertime Generic EVA@300HS.json" + "name": "Generic EVA @Tiertime 300HS", + "sub_path": "filament/Generic EVA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic HIPS", - "sub_path": "filament/Tiertime Generic HIPS.json" + "name": "Generic HIPS @Tiertime", + "sub_path": "filament/Generic HIPS @Tiertime.json" }, { - "name": "Tiertime Generic HIPS@300HS", - "sub_path": "filament/Tiertime Generic HIPS@300HS.json" + "name": "Generic HIPS @Tiertime 300HS", + "sub_path": "filament/Generic HIPS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PA", - "sub_path": "filament/Tiertime Generic PA.json" + "name": "Generic PA @Tiertime", + "sub_path": "filament/Generic PA @Tiertime.json" }, { - "name": "Tiertime Generic PA-CF", - "sub_path": "filament/Tiertime Generic PA-CF.json" + "name": "Generic PA-CF @Tiertime", + "sub_path": "filament/Generic PA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PA-CF@300HS", - "sub_path": "filament/Tiertime Generic PA-CF@300HS.json" + "name": "Generic PA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PA-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PA@300HS", - "sub_path": "filament/Tiertime Generic PA@300HS.json" + "name": "Generic PA @Tiertime 300HS", + "sub_path": "filament/Generic PA @Tiertime 300HS.json" }, { "name": "Tiertime PA6-CF", @@ -441,12 +441,12 @@ "sub_path": "filament/Tiertime PA6-CF@300HS.json" }, { - "name": "Tiertime Generic PC", - "sub_path": "filament/Tiertime Generic PC.json" + "name": "Generic PC @Tiertime", + "sub_path": "filament/Generic PC @Tiertime.json" }, { - "name": "Tiertime Generic PC@300HS", - "sub_path": "filament/Tiertime Generic PC@300HS.json" + "name": "Generic PC @Tiertime 300HS", + "sub_path": "filament/Generic PC @Tiertime 300HS.json" }, { "name": "Tiertime PC", @@ -457,44 +457,44 @@ "sub_path": "filament/Tiertime PC@300HS.json" }, { - "name": "Tiertime Generic PCTG", - "sub_path": "filament/Tiertime Generic PCTG.json" + "name": "Generic PCTG @Tiertime", + "sub_path": "filament/Generic PCTG @Tiertime.json" }, { - "name": "Tiertime Generic PCTG@300HS", - "sub_path": "filament/Tiertime Generic PCTG@300HS.json" + "name": "Generic PCTG @Tiertime 300HS", + "sub_path": "filament/Generic PCTG @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PE", - "sub_path": "filament/Tiertime Generic PE.json" + "name": "Generic PE @Tiertime", + "sub_path": "filament/Generic PE @Tiertime.json" }, { - "name": "Tiertime Generic PE-CF", - "sub_path": "filament/Tiertime Generic PE-CF.json" + "name": "Generic PE-CF @Tiertime", + "sub_path": "filament/Generic PE-CF @Tiertime.json" }, { - "name": "Tiertime Generic PE-CF@300HS", - "sub_path": "filament/Tiertime Generic PE-CF@300HS.json" + "name": "Generic PE-CF @Tiertime 300HS", + "sub_path": "filament/Generic PE-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PE@300HS", - "sub_path": "filament/Tiertime Generic PE@300HS.json" + "name": "Generic PE @Tiertime 300HS", + "sub_path": "filament/Generic PE @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PETG", - "sub_path": "filament/Tiertime Generic PETG.json" + "name": "Generic PETG @Tiertime", + "sub_path": "filament/Generic PETG @Tiertime.json" }, { - "name": "Tiertime Generic PETG-CF", - "sub_path": "filament/Tiertime Generic PETG-CF.json" + "name": "Generic PETG-CF @Tiertime", + "sub_path": "filament/Generic PETG-CF @Tiertime.json" }, { - "name": "Tiertime Generic PETG-CF@300HS", - "sub_path": "filament/Tiertime Generic PETG-CF@300HS.json" + "name": "Generic PETG-CF @Tiertime 300HS", + "sub_path": "filament/Generic PETG-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PETG@300HS", - "sub_path": "filament/Tiertime Generic PETG@300HS.json" + "name": "Generic PETG @Tiertime 300HS", + "sub_path": "filament/Generic PETG @Tiertime 300HS.json" }, { "name": "Tiertime PET-CF", @@ -513,44 +513,44 @@ "sub_path": "filament/Tiertime PETG@300HS.json" }, { - "name": "Tiertime Generic PHA", - "sub_path": "filament/Tiertime Generic PHA.json" + "name": "Generic PHA @Tiertime", + "sub_path": "filament/Generic PHA @Tiertime.json" }, { - "name": "Tiertime Generic PHA@300HS", - "sub_path": "filament/Tiertime Generic PHA@300HS.json" + "name": "Generic PHA @Tiertime 300HS", + "sub_path": "filament/Generic PHA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA", - "sub_path": "filament/Tiertime Generic PLA.json" + "name": "Generic PLA @Tiertime", + "sub_path": "filament/Generic PLA @Tiertime.json" }, { - "name": "Tiertime Generic PLA High Speed", - "sub_path": "filament/Tiertime Generic PLA High Speed.json" + "name": "Generic PLA High Speed @Tiertime", + "sub_path": "filament/Generic PLA High Speed @Tiertime.json" }, { - "name": "Tiertime Generic PLA High Speed@300HS", - "sub_path": "filament/Tiertime Generic PLA High Speed@300HS.json" + "name": "Generic PLA High Speed @Tiertime 300HS", + "sub_path": "filament/Generic PLA High Speed @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA Silk", - "sub_path": "filament/Tiertime Generic PLA Silk.json" + "name": "Generic PLA Silk @Tiertime", + "sub_path": "filament/Generic PLA Silk @Tiertime.json" }, { - "name": "Tiertime Generic PLA Silk@300HS", - "sub_path": "filament/Tiertime Generic PLA Silk@300HS.json" + "name": "Generic PLA Silk @Tiertime 300HS", + "sub_path": "filament/Generic PLA Silk @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA-CF", - "sub_path": "filament/Tiertime Generic PLA-CF.json" + "name": "Generic PLA-CF @Tiertime", + "sub_path": "filament/Generic PLA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PLA-CF@300HS", - "sub_path": "filament/Tiertime Generic PLA-CF@300HS.json" + "name": "Generic PLA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PLA-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA@300HS", - "sub_path": "filament/Tiertime Generic PLA@300HS.json" + "name": "Generic PLA @Tiertime 300HS", + "sub_path": "filament/Generic PLA @Tiertime 300HS.json" }, { "name": "Tiertime PLA", @@ -569,68 +569,68 @@ "sub_path": "filament/Tiertime PLA@300HS.json" }, { - "name": "Tiertime Generic PP", - "sub_path": "filament/Tiertime Generic PP.json" + "name": "Generic PP @Tiertime", + "sub_path": "filament/Generic PP @Tiertime.json" }, { - "name": "Tiertime Generic PP-CF", - "sub_path": "filament/Tiertime Generic PP-CF.json" + "name": "Generic PP-CF @Tiertime", + "sub_path": "filament/Generic PP-CF @Tiertime.json" }, { - "name": "Tiertime Generic PP-CF@300HS", - "sub_path": "filament/Tiertime Generic PP-CF@300HS.json" + "name": "Generic PP-CF @Tiertime 300HS", + "sub_path": "filament/Generic PP-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PP-GF", - "sub_path": "filament/Tiertime Generic PP-GF.json" + "name": "Generic PP-GF @Tiertime", + "sub_path": "filament/Generic PP-GF @Tiertime.json" }, { - "name": "Tiertime Generic PP-GF@300HS", - "sub_path": "filament/Tiertime Generic PP-GF@300HS.json" + "name": "Generic PP-GF @Tiertime 300HS", + "sub_path": "filament/Generic PP-GF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PP@300HS", - "sub_path": "filament/Tiertime Generic PP@300HS.json" + "name": "Generic PP @Tiertime 300HS", + "sub_path": "filament/Generic PP @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPA-CF", - "sub_path": "filament/Tiertime Generic PPA-CF.json" + "name": "Generic PPA-CF @Tiertime", + "sub_path": "filament/Generic PPA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PPA-CF@300HS", - "sub_path": "filament/Tiertime Generic PPA-CF@300HS.json" + "name": "Generic PPA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PPA-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPA-GF", - "sub_path": "filament/Tiertime Generic PPA-GF.json" + "name": "Generic PPA-GF @Tiertime", + "sub_path": "filament/Generic PPA-GF @Tiertime.json" }, { - "name": "Tiertime Generic PPA-GF@300HS", - "sub_path": "filament/Tiertime Generic PPA-GF@300HS.json" + "name": "Generic PPA-GF @Tiertime 300HS", + "sub_path": "filament/Generic PPA-GF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPS", - "sub_path": "filament/Tiertime Generic PPS.json" + "name": "Generic PPS @Tiertime", + "sub_path": "filament/Generic PPS @Tiertime.json" }, { - "name": "Tiertime Generic PPS-CF", - "sub_path": "filament/Tiertime Generic PPS-CF.json" + "name": "Generic PPS-CF @Tiertime", + "sub_path": "filament/Generic PPS-CF @Tiertime.json" }, { - "name": "Tiertime Generic PPS-CF@300HS", - "sub_path": "filament/Tiertime Generic PPS-CF@300HS.json" + "name": "Generic PPS-CF @Tiertime 300HS", + "sub_path": "filament/Generic PPS-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPS@300HS", - "sub_path": "filament/Tiertime Generic PPS@300HS.json" + "name": "Generic PPS @Tiertime 300HS", + "sub_path": "filament/Generic PPS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PVA", - "sub_path": "filament/Tiertime Generic PVA.json" + "name": "Generic PVA @Tiertime", + "sub_path": "filament/Generic PVA @Tiertime.json" }, { - "name": "Tiertime Generic PVA@300HS", - "sub_path": "filament/Tiertime Generic PVA@300HS.json" + "name": "Generic PVA @Tiertime 300HS", + "sub_path": "filament/Generic PVA @Tiertime 300HS.json" }, { "name": "Tiertime PVA", @@ -641,20 +641,20 @@ "sub_path": "filament/Tiertime PVA@300HS.json" }, { - "name": "Tiertime Generic SBS", - "sub_path": "filament/Tiertime Generic SBS.json" + "name": "Generic SBS @Tiertime", + "sub_path": "filament/Generic SBS @Tiertime.json" }, { - "name": "Tiertime Generic SBS@300HS", - "sub_path": "filament/Tiertime Generic SBS@300HS.json" + "name": "Generic SBS @Tiertime 300HS", + "sub_path": "filament/Generic SBS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic TPU", - "sub_path": "filament/Tiertime Generic TPU.json" + "name": "Generic TPU @Tiertime", + "sub_path": "filament/Generic TPU @Tiertime.json" }, { - "name": "Tiertime Generic TPU@300HS", - "sub_path": "filament/Tiertime Generic TPU@300HS.json" + "name": "Generic TPU @Tiertime 300HS", + "sub_path": "filament/Generic TPU @Tiertime 300HS.json" }, { "name": "Tiertime TPU 95A", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json similarity index 77% rename from resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json rename to resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json index efd49d6b20..e9d7aca6fc 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic ABS@300HS", + "name": "Generic ABS @Tiertime 300HS", "inherits": "fdm_filament_abs", + "renamed_from": "Tiertime Generic ABS@300HS;Tiertime Generic ABS300HS", "from": "system", - "setting_id": "tCw1f7MxFjxPr7Ci", - "filament_id": "OFNLXV8X", + "setting_id": "CDku986CRCZQpwu4", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json similarity index 81% rename from resources/profiles/Tiertime/filament/Tiertime Generic ABS.json rename to resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json index 32cd14a523..7e8f606a6e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json +++ b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic ABS", + "name": "Generic ABS @Tiertime", "inherits": "fdm_filament_abs", + "renamed_from": "Tiertime Generic ABS", "from": "system", - "setting_id": "ImJ3Urgk3VVtwceI", - "filament_id": "OFNLXV8X", + "setting_id": "mDRlI9biZBn9sNlS", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json similarity index 74% rename from resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json rename to resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json index 4962cc3046..adffa21725 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic ASA@300HS", + "name": "Generic ASA @Tiertime 300HS", "inherits": "fdm_filament_asa", + "renamed_from": "Tiertime Generic ASA@300HS;Tiertime Generic ASA300HS", "from": "system", - "setting_id": "7C5PjCg1vmTQFXWO", - "filament_id": "OFUaVAdj", + "setting_id": "HLh2XxQuVOa86efy", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json similarity index 79% rename from resources/profiles/Tiertime/filament/Tiertime Generic ASA.json rename to resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json index 614b3b3c19..1529e0f702 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json +++ b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic ASA", + "name": "Generic ASA @Tiertime", "inherits": "fdm_filament_asa", + "renamed_from": "Tiertime Generic ASA", "from": "system", - "setting_id": "T1AzUXSewNk5Bj3x", - "filament_id": "OFUaVAdj", + "setting_id": "kGrTR0sC37w9Qi3b", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json similarity index 59% rename from resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json rename to resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json index 124749396e..9db52386cb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic BVOH@300HS", + "name": "Generic BVOH @Tiertime 300HS", "inherits": "fdm_filament_bvoh", + "renamed_from": "Tiertime Generic BVOH@300HS;Tiertime Generic BVOH300HS", "from": "system", - "setting_id": "xfFXVyGfmXiu508N", - "filament_id": "OFGDaEHO", + "setting_id": "aCtg07TUbh6I9XPo", + "filament_id": "OFo2UF2C", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json similarity index 66% rename from resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json rename to resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json index 76918d2c91..fd6e2a529f 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json +++ b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic BVOH", + "name": "Generic BVOH @Tiertime", "inherits": "fdm_filament_bvoh", + "renamed_from": "Tiertime Generic BVOH", "from": "system", - "setting_id": "dhrpnirMnet0hJZl", - "filament_id": "OFGDaEHO", + "setting_id": "b642QISGuDZ18fQ8", + "filament_id": "OFo2UF2C", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json similarity index 91% rename from resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json rename to resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json index ff107a65fb..f066563e4c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic EVA@300HS", + "name": "Generic EVA @Tiertime 300HS", "inherits": "fdm_filament_eva", + "renamed_from": "Tiertime Generic EVA@300HS;Tiertime Generic EVA300HS", "from": "system", - "setting_id": "pXuh92Zf1zPiaDXg", - "filament_id": "OFrnJJEa", + "setting_id": "q5f3UKuj7KOtiNkH", + "filament_id": "OFCD8qiU", "instantiation": "true", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json similarity index 93% rename from resources/profiles/Tiertime/filament/Tiertime Generic EVA.json rename to resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json index 6d9851fb73..ec49722cae 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json +++ b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic EVA", + "name": "Generic EVA @Tiertime", "inherits": "fdm_filament_eva", + "renamed_from": "Tiertime Generic EVA", "from": "system", - "setting_id": "ev5w69eBuTCYXB2d", - "filament_id": "OFrnJJEa", + "setting_id": "NTY4MeZtxt16HNAV", + "filament_id": "OFCD8qiU", "instantiation": "true", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json similarity index 62% rename from resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json rename to resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json index 932b1e3239..8eaa300930 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic HIPS@300HS", + "name": "Generic HIPS @Tiertime 300HS", "inherits": "fdm_filament_hips", + "renamed_from": "Tiertime Generic HIPS@300HS;Tiertime Generic HIPS300HS", "from": "system", - "setting_id": "9epHDviPNHRB5bPD", - "filament_id": "OFW9uIkE", + "setting_id": "ee157A7VEkDzMh61", + "filament_id": "OFsFon5l", "instantiation": "true", "filament_is_support": [ "1" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json similarity index 68% rename from resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json rename to resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json index 54e9d60fbd..519e690ed6 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json +++ b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic HIPS", + "name": "Generic HIPS @Tiertime", "inherits": "fdm_filament_hips", + "renamed_from": "Tiertime Generic HIPS", "from": "system", - "setting_id": "sFY2AyXFzAFuj6sv", - "filament_id": "OFW9uIkE", + "setting_id": "3Vm99hmTMTFPKNGk", + "filament_id": "OFsFon5l", "instantiation": "true", "filament_is_support": [ "1" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json b/resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json similarity index 82% rename from resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json rename to resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json index 7ef4871120..3c97aa11a7 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PA@300HS", + "name": "Generic PA @Tiertime 300HS", "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA@300HS;Tiertime Generic PA300HS", "from": "system", - "filament_id": "OFQswlnF", - "setting_id": "ERn1WYMiSjs6a82N", + "filament_id": "OFg8ndtj", + "setting_id": "yGD1puWjH2QFacXJ", "instantiation": "true", "chamber_temperatures": [ "60" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json b/resources/profiles/Tiertime/filament/Generic PA @Tiertime.json similarity index 85% rename from resources/profiles/Tiertime/filament/Tiertime Generic PA.json rename to resources/profiles/Tiertime/filament/Generic PA @Tiertime.json index 4f9e45d05e..1ff338b317 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json +++ b/resources/profiles/Tiertime/filament/Generic PA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PA", + "name": "Generic PA @Tiertime", "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA", "from": "system", - "filament_id": "OFQswlnF", - "setting_id": "DmP33sDwKcBDRmDK", + "filament_id": "OFg8ndtj", + "setting_id": "u37BwUzY2vt6zqjd", "instantiation": "true", "chamber_temperatures": [ "60" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json similarity index 75% rename from resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json index b49c63ab92..3feade702d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PA-CF@300HS", + "name": "Generic PA-CF @Tiertime 300HS", "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA-CF@300HS;Tiertime Generic PA-CF300HS", "from": "system", - "filament_id": "OFHa3RZT", - "setting_id": "nRxvUKo1YXE8daoX", + "filament_id": "OFQLcbps", + "setting_id": "nZprcLHiLIAKvqtu", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json similarity index 79% rename from resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json rename to resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json index 22b8edb633..fe57cb7806 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PA-CF", + "name": "Generic PA-CF @Tiertime", "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA-CF", "from": "system", - "filament_id": "OFHa3RZT", - "setting_id": "DOWYicvaXaTMfzBU", + "filament_id": "OFQLcbps", + "setting_id": "1oq9XQtCUcV9wGYV", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json b/resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json similarity index 67% rename from resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json rename to resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json index 86c506902c..591d1c9208 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PC@300HS", + "name": "Generic PC @Tiertime 300HS", "inherits": "fdm_filament_pc", + "renamed_from": "Tiertime Generic PC@300HS;Tiertime Generic PC300HS", "from": "system", - "setting_id": "i2ShskYbiq61UJ1B", - "filament_id": "OFN7aNHe", + "setting_id": "cqm5YuWHhzXdvE0M", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json b/resources/profiles/Tiertime/filament/Generic PC @Tiertime.json similarity index 72% rename from resources/profiles/Tiertime/filament/Tiertime Generic PC.json rename to resources/profiles/Tiertime/filament/Generic PC @Tiertime.json index 264fe0fc03..8c36c18828 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json +++ b/resources/profiles/Tiertime/filament/Generic PC @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PC", + "name": "Generic PC @Tiertime", "inherits": "fdm_filament_pc", + "renamed_from": "Tiertime Generic PC", "from": "system", - "setting_id": "5wzlA0sFj2xElixU", - "filament_id": "OFN7aNHe", + "setting_id": "ILOqHUkf5W9fcRic", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json similarity index 89% rename from resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json rename to resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json index 86d034aa24..25eb1b1b76 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PCTG@300HS", + "name": "Generic PCTG @Tiertime 300HS", "inherits": "fdm_filament_pctg", + "renamed_from": "Tiertime Generic PCTG@300HS;Tiertime Generic PCTG300HS", "from": "system", - "setting_id": "2Qbbi90zWBoo9dBl", - "filament_id": "OFTKFAZ4", + "setting_id": "1VNFGuUO3KSO6Yfr", + "filament_id": "OFu1evlr", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json similarity index 91% rename from resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json rename to resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json index 49c71cc115..4d091cde32 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json +++ b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PCTG", + "name": "Generic PCTG @Tiertime", "inherits": "fdm_filament_pctg", + "renamed_from": "Tiertime Generic PCTG", "from": "system", - "setting_id": "UDqS8gFlHvPIysFk", - "filament_id": "OFTKFAZ4", + "setting_id": "tJIMGMxg0hRSfL95", + "filament_id": "OFu1evlr", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json b/resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json similarity index 87% rename from resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json rename to resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json index 4e6aab9e87..a1fa9c5859 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PE@300HS", + "name": "Generic PE @Tiertime 300HS", "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE@300HS;Tiertime Generic PE300HS", "from": "system", - "setting_id": "ZbU3Ov0P5wtbudQ0", - "filament_id": "OFKuTr12", + "setting_id": "CO9KWZrfkTYBnB4X", + "filament_id": "OFPklMI1", "instantiation": "true", "filament_cost": [ "40.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json b/resources/profiles/Tiertime/filament/Generic PE @Tiertime.json similarity index 89% rename from resources/profiles/Tiertime/filament/Tiertime Generic PE.json rename to resources/profiles/Tiertime/filament/Generic PE @Tiertime.json index 0c9504212c..0684af67d8 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json +++ b/resources/profiles/Tiertime/filament/Generic PE @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PE", + "name": "Generic PE @Tiertime", "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE", "from": "system", - "setting_id": "bYC8MPsm3VIgwaSt", - "filament_id": "OFKuTr12", + "setting_id": "2U06Qrlxin8nLr9s", + "filament_id": "OFPklMI1", "instantiation": "true", "filament_cost": [ "40.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json similarity index 86% rename from resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json index 94686b9139..11a6680550 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PE-CF@300HS", + "name": "Generic PE-CF @Tiertime 300HS", "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE-CF@300HS;Tiertime Generic PE-CF300HS", "from": "system", - "setting_id": "5ChSjqNjRn8QArJP", - "filament_id": "OFkUaDnU", + "setting_id": "512vfRIxs8uwOBpP", + "filament_id": "OFd0Fv0k", "instantiation": "true", "filament_cost": [ "65.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json similarity index 89% rename from resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json rename to resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json index dc20a657b0..ecc5a74d8c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PE-CF", + "name": "Generic PE-CF @Tiertime", "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE-CF", "from": "system", - "setting_id": "jzT1pay155tbaY9M", - "filament_id": "OFkUaDnU", + "setting_id": "QWIMNxCCZ9URxMjo", + "filament_id": "OFd0Fv0k", "instantiation": "true", "filament_cost": [ "65.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json similarity index 88% rename from resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json rename to resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json index 56157be9e7..e65d53bc71 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PETG@300HS", + "name": "Generic PETG @Tiertime 300HS", "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG@300HS;Tiertime Generic PETG300HS", "from": "system", - "setting_id": "ZZmmVicb1p0wb5r1", - "filament_id": "OF1uR1t2", + "setting_id": "btlSAAZFdFgnfIqh", + "filament_id": "OFYPdQJh", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json similarity index 91% rename from resources/profiles/Tiertime/filament/Tiertime Generic PETG.json rename to resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json index 6d15c90d59..cdf4a2ba88 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json +++ b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PETG", + "name": "Generic PETG @Tiertime", "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG", "from": "system", - "setting_id": "UevLlG43knAdcET2", - "filament_id": "OF1uR1t2", + "setting_id": "JwdH78YQ3v5XxsIq", + "filament_id": "OFYPdQJh", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json similarity index 89% rename from resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json index ed4c4d9347..2193ee85fe 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PETG-CF@300HS", + "name": "Generic PETG-CF @Tiertime 300HS", "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG-CF@300HS;Tiertime Generic PETG-CF300HS", "from": "system", - "setting_id": "jBUy8xUDg53e51kz", - "filament_id": "OFWadebJ", + "setting_id": "pnBek08LG30iqOmr", + "filament_id": "OFoYSJKi", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json similarity index 91% rename from resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json rename to resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json index 32ab191cc2..42b67f2c6d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PETG-CF", + "name": "Generic PETG-CF @Tiertime", "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG-CF", "from": "system", - "setting_id": "zA6nHgNkxBxGKw0w", - "filament_id": "OFWadebJ", + "setting_id": "97ZKNZS7uHaNzgLJ", + "filament_id": "OFoYSJKi", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json similarity index 60% rename from resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json rename to resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json index 7c2deb0b12..d7d10eedfc 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PHA@300HS", + "name": "Generic PHA @Tiertime 300HS", "inherits": "fdm_filament_pha", + "renamed_from": "Tiertime Generic PHA@300HS;Tiertime Generic PHA300HS", "from": "system", - "setting_id": "de5eveMr3bI3OCtF", - "filament_id": "OFxvKuYW", + "setting_id": "cdIDNHr9YR5p1gQx", + "filament_id": "OF74KeQR", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json similarity index 66% rename from resources/profiles/Tiertime/filament/Tiertime Generic PHA.json rename to resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json index d924c5d28b..f0565e38a2 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json +++ b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PHA", + "name": "Generic PHA @Tiertime", "inherits": "fdm_filament_pha", + "renamed_from": "Tiertime Generic PHA", "from": "system", - "setting_id": "tFuE7IEbeGEhCNnz", - "filament_id": "OFxvKuYW", + "setting_id": "GvzA9Y6mP5a767Qb", + "filament_id": "OF74KeQR", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json similarity index 82% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json rename to resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json index 3fe56ea2e0..58c56fee5d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA@300HS", + "name": "Generic PLA @Tiertime 300HS", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA@300HS;Tiertime Generic PLA300HS", "from": "system", - "setting_id": "jTSVVOuHuQqETOpe", - "filament_id": "OFuSwKgm", + "setting_id": "VdXotPCaBzW0DswJ", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json similarity index 85% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA.json rename to resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json index ea77ef41e3..5f8aaf4229 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json +++ b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA", + "name": "Generic PLA @Tiertime", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA", "from": "system", - "setting_id": "q9W1goEbw6UUrNY3", - "filament_id": "OFuSwKgm", + "setting_id": "RuyaWPyP41WHbU7p", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json similarity index 65% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json rename to resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json index 5814210aee..779cc6ca4e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA High Speed@300HS", + "name": "Generic PLA High Speed @Tiertime 300HS", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA High Speed@300HS;Tiertime Generic PLA High Speed300HS", "from": "system", - "setting_id": "e0vVCCT6Tw4061is", - "filament_id": "OFodPDxO", + "setting_id": "cDQTrE11kyvmtj6l", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json similarity index 71% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json rename to resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json index bda1527d04..c88496b0e6 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json +++ b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA High Speed", + "name": "Generic PLA High Speed @Tiertime", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA High Speed", "from": "system", - "setting_id": "Ms3c6DePE0cjBeQ4", - "filament_id": "OFodPDxO", + "setting_id": "HFwoDRXx0L72uTKc", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json similarity index 82% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json rename to resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json index b4fafb3019..ba4745b50c 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA Silk@300HS", + "name": "Generic PLA Silk @Tiertime 300HS", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA Silk@300HS;Tiertime Generic PLA Silk300HS", "from": "system", - "setting_id": "yV358AeiALOn6xVr", - "filament_id": "OF0GIkJm", + "setting_id": "pXFxVcPY3aVixOKU", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json similarity index 86% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json rename to resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json index 88b0e6a700..a2cbb3f4c4 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json +++ b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA Silk", + "name": "Generic PLA Silk @Tiertime", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA Silk", "from": "system", - "setting_id": "RgKM4PxtAasidTe5", - "filament_id": "OF0GIkJm", + "setting_id": "5R7nTGblzuEWfdog", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json similarity index 88% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json index 4cb7802847..d4ceebf2db 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA-CF@300HS", + "name": "Generic PLA-CF @Tiertime 300HS", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA-CF@300HS;Tiertime Generic PLA-CF300HS", "from": "system", - "setting_id": "3QSGv6pAz9ihFVuD", - "filament_id": "OFgVJhVt", + "setting_id": "CVks3a5cABQw38Ia", + "filament_id": "OFWbdGsC", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json similarity index 90% rename from resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json rename to resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json index ff1c8b14ee..306ff427aa 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PLA-CF", + "name": "Generic PLA-CF @Tiertime", "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA-CF", "from": "system", - "setting_id": "maM4lXic0F10faAb", - "filament_id": "OFgVJhVt", + "setting_id": "SSHFL8Wbk46BaTYF", + "filament_id": "OFWbdGsC", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json b/resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json similarity index 60% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json rename to resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json index b908fe1011..b79c34b466 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP@300HS", + "name": "Generic PP @Tiertime 300HS", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP@300HS;Tiertime Generic PP300HS", "from": "system", - "setting_id": "lx9zoOh3ALDlLasf", - "filament_id": "OF3s929u", + "setting_id": "BmIuSlyYKMw76mqs", + "filament_id": "OF1UNk9P", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json b/resources/profiles/Tiertime/filament/Generic PP @Tiertime.json similarity index 66% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP.json rename to resources/profiles/Tiertime/filament/Generic PP @Tiertime.json index bef2a0ee16..0b7361dc78 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json +++ b/resources/profiles/Tiertime/filament/Generic PP @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP", + "name": "Generic PP @Tiertime", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP", "from": "system", - "setting_id": "3ZYx92CbNBiocyXx", - "filament_id": "OF3s929u", + "setting_id": "hbt3RXCxomod1cBQ", + "filament_id": "OF1UNk9P", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json similarity index 69% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json index 15c4591f98..e5a08307fa 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP-CF@300HS", + "name": "Generic PP-CF @Tiertime 300HS", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-CF@300HS;Tiertime Generic PP-CF300HS", "from": "system", - "setting_id": "3TZu7e58qrjP4F4u", - "filament_id": "OFMTBcnz", + "setting_id": "u1Sqh9bCLFQvJxoS", + "filament_id": "OFXkm8q1", "instantiation": "true", "filament_cost": [ "77.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json similarity index 74% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json rename to resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json index 22cd19292d..4c8abaa8ce 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP-CF", + "name": "Generic PP-CF @Tiertime", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-CF", "from": "system", - "setting_id": "O5VvyfY5CV6IfMPQ", - "filament_id": "OFMTBcnz", + "setting_id": "2giqoHCbRKiAuTyB", + "filament_id": "OFXkm8q1", "instantiation": "true", "filament_cost": [ "77.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json similarity index 69% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json index bac285fef0..820f415b25 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP-GF@300HS", + "name": "Generic PP-GF @Tiertime 300HS", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-GF@300HS;Tiertime Generic PP-GF300HS", "from": "system", - "setting_id": "WKwUmsEhhYFyGAP5", - "filament_id": "OFkYkQGO", + "setting_id": "Aiw0kkL0EFLNZ0zB", + "filament_id": "OFsijjtH", "instantiation": "true", "filament_cost": [ "59.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json similarity index 74% rename from resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json rename to resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json index 44557aed47..930f2d7870 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json +++ b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PP-GF", + "name": "Generic PP-GF @Tiertime", "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-GF", "from": "system", - "setting_id": "ZQnzXtnTMVMVMNaS", - "filament_id": "OFkYkQGO", + "setting_id": "HQaX19e4JViPTQn0", + "filament_id": "OFsijjtH", "instantiation": "true", "filament_cost": [ "59.99" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json similarity index 69% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json index 918b4cf1a8..6402b8a7c9 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPA-CF@300HS", + "name": "Generic PPA-CF @Tiertime 300HS", "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-CF@300HS;Tiertime Generic PPA-CF300HS", "from": "system", - "setting_id": "wLH8aGr4ZNiHazwA", - "filament_id": "OFSPdsuW", + "setting_id": "yEjRoG6UAmEBAsTg", + "filament_id": "OF8tPByX", "instantiation": "true", "filament_type": [ "PPA-CF" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json similarity index 74% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json rename to resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json index 924f324eb4..845cd1f1f3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPA-CF", + "name": "Generic PPA-CF @Tiertime", "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-CF", "from": "system", - "setting_id": "2zYiuKYR7bESaCnd", - "filament_id": "OFSPdsuW", + "setting_id": "C3VjtPXIQ9CikaQH", + "filament_id": "OF8tPByX", "instantiation": "true", "filament_type": [ "PPA-CF" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json similarity index 65% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json index dbc3c9ebf3..75a81d0aff 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPA-GF@300HS", + "name": "Generic PPA-GF @Tiertime 300HS", "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-GF@300HS;Tiertime Generic PPA-GF300HS", "from": "system", - "setting_id": "1zAhSxsuv3wxgBtQ", - "filament_id": "OFptvi3F", + "setting_id": "9088HrpGRDIqqxTs", + "filament_id": "OF8Tlg47", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json similarity index 70% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json rename to resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json index e84a1c4bb9..7ec50bd2f4 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json +++ b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPA-GF", + "name": "Generic PPA-GF @Tiertime", "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-GF", "from": "system", - "setting_id": "hYkZEmk1B8X9EcF8", - "filament_id": "OFptvi3F", + "setting_id": "jGP0en9vTFNmj5AJ", + "filament_id": "OF8Tlg47", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json similarity index 60% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json rename to resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json index 047117502e..bd804b9ffc 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPS@300HS", + "name": "Generic PPS @Tiertime 300HS", "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS@300HS;Tiertime Generic PPS300HS", "from": "system", - "setting_id": "5TZhbLxtLq6kSJJY", - "filament_id": "OFvPomQf", + "setting_id": "KIspUdArMQzvDtcX", + "filament_id": "OFq9svOz", "instantiation": "true", "compatible_printers": [ "Tiertime UP300 HS 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json similarity index 66% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPS.json rename to resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json index 77fe993cdb..dbb381012e 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json +++ b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPS", + "name": "Generic PPS @Tiertime", "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS", "from": "system", - "setting_id": "2L1eOtxSeCJxW3RV", - "filament_id": "OFvPomQf", + "setting_id": "NCTW11dGCzTxasjU", + "filament_id": "OFq9svOz", "instantiation": "true", "compatible_printers": [ "Tiertime UP400 Pro 0.4 nozzle", diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json similarity index 74% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json rename to resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json index cd3e802975..f53a77c9c6 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPS-CF@300HS", + "name": "Generic PPS-CF @Tiertime 300HS", "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS-CF@300HS;Tiertime Generic PPS-CF300HS", "from": "system", - "setting_id": "6UHEejfZvhQGA4vB", - "filament_id": "OFGzUNbm", + "setting_id": "E7mVBEFECdf1mhXE", + "filament_id": "OF6rdQ6M", "instantiation": "true", "fan_max_speed": [ "30" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json similarity index 79% rename from resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json rename to resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json index 8a8485843c..3e4e15da7d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json +++ b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PPS-CF", + "name": "Generic PPS-CF @Tiertime", "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS-CF", "from": "system", - "setting_id": "E0gbADj0OHkGSOxt", - "filament_id": "OFGzUNbm", + "setting_id": "QUPOb7dBkg6bPul2", + "filament_id": "OF6rdQ6M", "instantiation": "true", "fan_max_speed": [ "30" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json similarity index 70% rename from resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json rename to resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json index d1a5b62d7d..2efe590fb6 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PVA@300HS", + "name": "Generic PVA @Tiertime 300HS", "inherits": "fdm_filament_pva", + "renamed_from": "Tiertime Generic PVA@300HS;Tiertime Generic PVA300HS", "from": "system", - "setting_id": "BQ6G75c9eLQQ7ULg", - "filament_id": "OFMZAoqa", + "setting_id": "E8fgXFvjTnIpqdrg", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json similarity index 75% rename from resources/profiles/Tiertime/filament/Tiertime Generic PVA.json rename to resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json index db73f4b947..588648b8b0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json +++ b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic PVA", + "name": "Generic PVA @Tiertime", "inherits": "fdm_filament_pva", + "renamed_from": "Tiertime Generic PVA", "from": "system", - "setting_id": "bTkxwDd1TU8TUqVC", - "filament_id": "OFMZAoqa", + "setting_id": "6R2BduAh4ASmGbDd", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json similarity index 82% rename from resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json rename to resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json index df8a4d7cbe..f3860b4e64 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic SBS@300HS", + "name": "Generic SBS @Tiertime 300HS", "inherits": "fdm_filament_sbs", + "renamed_from": "Tiertime Generic SBS@300HS;Tiertime Generic SBS300HS", "from": "system", - "setting_id": "neqjohDEPRiOa6ut", - "filament_id": "OFM87w9T", + "setting_id": "nS6aGQgepNoAjumo", + "filament_id": "OFhQfUQY", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json similarity index 85% rename from resources/profiles/Tiertime/filament/Tiertime Generic SBS.json rename to resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json index ab91c462d0..7c4751aa34 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json +++ b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic SBS", + "name": "Generic SBS @Tiertime", "inherits": "fdm_filament_sbs", + "renamed_from": "Tiertime Generic SBS", "from": "system", - "setting_id": "tHfCQJdD7qiIF4uT", - "filament_id": "OFM87w9T", + "setting_id": "nyv523sDXK9fDbtb", + "filament_id": "OFhQfUQY", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json similarity index 81% rename from resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json rename to resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json index d1c8e5ba35..2d52d479d3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json +++ b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic TPU@300HS", + "name": "Generic TPU @Tiertime 300HS", "inherits": "fdm_filament_tpu", + "renamed_from": "Tiertime Generic TPU@300HS;Tiertime Generic TPU300HS", "from": "system", - "filament_id": "OFCVUEaV", - "setting_id": "wgOtq6REuUQmNe5R", + "filament_id": "OFgbpcy9", + "setting_id": "99UYNDy3zV3bChRG", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json similarity index 84% rename from resources/profiles/Tiertime/filament/Tiertime Generic TPU.json rename to resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json index 0ecd0d9636..a32f1173dc 100644 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json +++ b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Tiertime Generic TPU", + "name": "Generic TPU @Tiertime", "inherits": "fdm_filament_tpu", + "renamed_from": "Tiertime Generic TPU", "from": "system", - "filament_id": "OFCVUEaV", - "setting_id": "Viy3kUE0cTV2rMiC", + "filament_id": "OFgbpcy9", + "setting_id": "UCowa7X5TZwXBJWe", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index 7484f27416..5c8349181f 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ @@ -81,12 +81,12 @@ ], "filament_list": [ { - "name": "TwoTrees Generic 95A TPU @SK1", - "sub_path": "filament/TwoTrees Generic 95A TPU @SK1.json" + "name": "Generic 95A TPU @TwoTrees SK1", + "sub_path": "filament/Generic 95A TPU @TwoTrees SK1.json" }, { - "name": "TwoTrees Generic HS PLA @SK1", - "sub_path": "filament/TwoTrees Generic HS PLA @SK1.json" + "name": "Generic HS PLA @TwoTrees SK1", + "sub_path": "filament/Generic HS PLA @TwoTrees SK1.json" } ], "machine_list": [ diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json b/resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json similarity index 74% rename from resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json rename to resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json index 72564df29b..46b9d1f100 100644 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json +++ b/resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "TwoTrees Generic 95A TPU @SK1", + "name": "Generic 95A TPU @TwoTrees SK1", "inherits": "fdm_filament_tpu", + "renamed_from": "TwoTrees Generic 95A TPU @SK1;TwoTrees Generic 95A TPU SK1", "from": "system", - "setting_id": "YqQSUrG195dCz67L", - "filament_id": "OFdHsxB4", + "setting_id": "LR7ufBEnGhieNdB7", + "filament_id": "OF6MMR8P", "instantiation": "true", "compatible_printers": [ "TwoTrees SK1 0.4 nozzle" diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json b/resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json similarity index 83% rename from resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json rename to resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json index 1a7cef302e..fd22e6417a 100644 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json +++ b/resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "TwoTrees Generic HS PLA @SK1", + "name": "Generic HS PLA @TwoTrees SK1", "inherits": "fdm_filament_pla", + "renamed_from": "TwoTrees Generic HS PLA @SK1;TwoTrees Generic HS PLA SK1", "from": "system", - "setting_id": "k7bLC5us9mGJzznW", - "filament_id": "OFBpcB0a", + "setting_id": "uRS2QA3xad1lBZJR", + "filament_id": "OFvxghTE", "instantiation": "true", "compatible_printers": [ "TwoTrees SK1 0.4 nozzle" diff --git a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json index fd32c01dcf..964d47c813 100644 --- a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json +++ b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json @@ -8,5 +8,5 @@ "bed_model": "TwoTrees SK1_buildplate_model.stl", "bed_texture": "TwoTrees SK1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "TwoTrees Generic 95A TPU @SK1;TwoTrees Generic PETG @SK1;TwoTrees Generic HS PLA @SK1;TwoTrees Generic PLA @SK1;TwoTrees Generic PLA-CF @SK1;TwoTrees Generic PLA Matte @SK1;TwoTrees Generic PLA Silk @SK1" + "default_materials": "Generic 95A TPU @TwoTrees SK1;TwoTrees Generic PETG @SK1;Generic HS PLA @TwoTrees SK1;TwoTrees Generic PLA @SK1;TwoTrees Generic PLA-CF @SK1;TwoTrees Generic PLA Matte @SK1;TwoTrees Generic PLA Silk @SK1" } diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index 12ec13402b..bcefdaf26c 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ @@ -149,44 +149,44 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Vzbot Generic ABS", - "sub_path": "filament/Vzbot Generic ABS.json" + "name": "Generic ABS @Vzbot", + "sub_path": "filament/Generic ABS @Vzbot.json" }, { - "name": "Vzbot Generic ASA", - "sub_path": "filament/Vzbot Generic ASA.json" + "name": "Generic ASA @Vzbot", + "sub_path": "filament/Generic ASA @Vzbot.json" }, { - "name": "Vzbot Generic PA", - "sub_path": "filament/Vzbot Generic PA.json" + "name": "Generic PA @Vzbot", + "sub_path": "filament/Generic PA @Vzbot.json" }, { - "name": "Vzbot Generic PA-CF", - "sub_path": "filament/Vzbot Generic PA-CF.json" + "name": "Generic PA-CF @Vzbot", + "sub_path": "filament/Generic PA-CF @Vzbot.json" }, { - "name": "Vzbot Generic PC", - "sub_path": "filament/Vzbot Generic PC.json" + "name": "Generic PC @Vzbot", + "sub_path": "filament/Generic PC @Vzbot.json" }, { - "name": "Vzbot Generic PETG", - "sub_path": "filament/Vzbot Generic PETG.json" + "name": "Generic PETG @Vzbot", + "sub_path": "filament/Generic PETG @Vzbot.json" }, { - "name": "Vzbot Generic PLA", - "sub_path": "filament/Vzbot Generic PLA.json" + "name": "Generic PLA @Vzbot", + "sub_path": "filament/Generic PLA @Vzbot.json" }, { - "name": "Vzbot Generic PLA-CF", - "sub_path": "filament/Vzbot Generic PLA-CF.json" + "name": "Generic PLA-CF @Vzbot", + "sub_path": "filament/Generic PLA-CF @Vzbot.json" }, { - "name": "Vzbot Generic PVA", - "sub_path": "filament/Vzbot Generic PVA.json" + "name": "Generic PVA @Vzbot", + "sub_path": "filament/Generic PVA @Vzbot.json" }, { - "name": "Vzbot Generic TPU", - "sub_path": "filament/Vzbot Generic TPU.json" + "name": "Generic TPU @Vzbot", + "sub_path": "filament/Generic TPU @Vzbot.json" } ], "machine_list": [ diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json b/resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json similarity index 75% rename from resources/profiles/Vzbot/filament/Vzbot Generic ABS.json rename to resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json index 0ab07b4387..bc59bdfea7 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json +++ b/resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic ABS", + "name": "Generic ABS @Vzbot", "inherits": "fdm_filament_abs", + "renamed_from": "Vzbot Generic ABS", "from": "system", - "setting_id": "nRFPlbSKRMb0UpSI", - "filament_id": "OFLBUkwC", + "setting_id": "0gr3MwdhoGW44mbr", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "0.926" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json b/resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json similarity index 75% rename from resources/profiles/Vzbot/filament/Vzbot Generic ASA.json rename to resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json index 69ba1b7b5b..9495f5cb1e 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json +++ b/resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic ASA", + "name": "Generic ASA @Vzbot", "inherits": "fdm_filament_asa", + "renamed_from": "Vzbot Generic ASA", "from": "system", - "setting_id": "rP4Qul9OY7lUhPgO", - "filament_id": "OF4XAUnp", + "setting_id": "0MutZpaR9XVzUGGS", + "filament_id": "OFLPAxz3", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json b/resources/profiles/Vzbot/filament/Generic PA @Vzbot.json similarity index 77% rename from resources/profiles/Vzbot/filament/Vzbot Generic PA.json rename to resources/profiles/Vzbot/filament/Generic PA @Vzbot.json index 46184d8018..a5e39c829c 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json +++ b/resources/profiles/Vzbot/filament/Generic PA @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PA", + "name": "Generic PA @Vzbot", "inherits": "fdm_filament_pa", + "renamed_from": "Vzbot Generic PA", "from": "system", - "setting_id": "4CBO5MnUk8Smhs3q", - "filament_id": "OF0zx94L", + "setting_id": "fwiU6RaIAOV38A9B", + "filament_id": "OFg8ndtj", "instantiation": "true", "nozzle_temperature_initial_layer": [ "280" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json b/resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json similarity index 77% rename from resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json rename to resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json index 75ca6d6b52..30a13910e0 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json +++ b/resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PA-CF", + "name": "Generic PA-CF @Vzbot", "inherits": "fdm_filament_pa", + "renamed_from": "Vzbot Generic PA-CF", "from": "system", - "setting_id": "AKO1twNgFO67N5GK", - "filament_id": "OFNn21yM", + "setting_id": "q8DtJmdJUN3KFV3E", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json b/resources/profiles/Vzbot/filament/Generic PC @Vzbot.json similarity index 75% rename from resources/profiles/Vzbot/filament/Vzbot Generic PC.json rename to resources/profiles/Vzbot/filament/Generic PC @Vzbot.json index 9731fbbe07..e2fecd6301 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json +++ b/resources/profiles/Vzbot/filament/Generic PC @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PC", + "name": "Generic PC @Vzbot", "inherits": "fdm_filament_pc", + "renamed_from": "Vzbot Generic PC", "from": "system", - "setting_id": "wUe99Mr4HqzSNxgO", - "filament_id": "OF9fOPpd", + "setting_id": "crcoB7BvhVnnHNaF", + "filament_id": "OFLakOUI", "instantiation": "true", "filament_max_volumetric_speed": [ "50" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json b/resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json similarity index 85% rename from resources/profiles/Vzbot/filament/Vzbot Generic PETG.json rename to resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json index 0f585fbb8c..bfb1f5af81 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json +++ b/resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PETG", + "name": "Generic PETG @Vzbot", "inherits": "fdm_filament_pet", + "renamed_from": "Vzbot Generic PETG", "from": "system", - "setting_id": "C8LMRvN350POVqC2", - "filament_id": "OFHUnLY2", + "setting_id": "NInr0jEJnziZ1poM", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json b/resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json similarity index 76% rename from resources/profiles/Vzbot/filament/Vzbot Generic PLA.json rename to resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json index b0e447e66c..ee77c2fd61 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json +++ b/resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PLA", + "name": "Generic PLA @Vzbot", "inherits": "fdm_filament_pla", + "renamed_from": "Vzbot Generic PLA", "from": "system", - "setting_id": "4JMiuJbl1gNrBipT", - "filament_id": "OF2mgDsI", + "setting_id": "Skn1ODpcSXd2NFcH", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json b/resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json similarity index 77% rename from resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json rename to resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json index 2b73cddba8..2fd8b03ee5 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json +++ b/resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PLA-CF", + "name": "Generic PLA-CF @Vzbot", "inherits": "fdm_filament_pla", + "renamed_from": "Vzbot Generic PLA-CF", "from": "system", - "setting_id": "nt1egZD1dQEVXp0v", - "filament_id": "OFYHzKyS", + "setting_id": "FETpZHhHj60hztGS", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json b/resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json similarity index 78% rename from resources/profiles/Vzbot/filament/Vzbot Generic PVA.json rename to resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json index 23a748046e..f8b6793e74 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json +++ b/resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic PVA", + "name": "Generic PVA @Vzbot", "inherits": "fdm_filament_pva", + "renamed_from": "Vzbot Generic PVA", "from": "system", - "setting_id": "DX4eZb2tlNVqeUrn", - "filament_id": "OFIda816", + "setting_id": "3xgrPw1nCEUaKQwQ", + "filament_id": "OFDvXujf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json b/resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json similarity index 73% rename from resources/profiles/Vzbot/filament/Vzbot Generic TPU.json rename to resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json index 60901cb86e..6ba3a3e9e4 100644 --- a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json +++ b/resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "Vzbot Generic TPU", + "name": "Generic TPU @Vzbot", "inherits": "fdm_filament_tpu", + "renamed_from": "Vzbot Generic TPU", "from": "system", - "setting_id": "YlhTF1F3OA2qj6o2", - "filament_id": "OFGGyAgJ", + "setting_id": "eC3Pgdpbwi2amDbk", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_max_volumetric_speed": [ "50" diff --git a/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json b/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json index a29123add7..760c478b42 100644 --- a/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json +++ b/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json @@ -8,5 +8,5 @@ "bed_model": "Vz235SlicerBedModel-cnc.stl", "bed_texture": "VzBot_PS_bed_235.svg", "hotend_model": "Goliath.stl", - "default_materials": "Vzbot Generic ABS;Vzbot Generic PLA;Vzbot Generic PLA-CF;Vzbot Generic PETG;Vzbot Generic TPU;Vzbot Generic ASA;Vzbot Generic PC;Vzbot Generic PVA;Vzbot Generic PA;Vzbot Generic PA-CF" + "default_materials": "Generic ABS @Vzbot;Generic PLA @Vzbot;Generic PLA-CF @Vzbot;Generic PETG @Vzbot;Generic TPU @Vzbot;Generic ASA @Vzbot;Generic PC @Vzbot;Generic PVA @Vzbot;Generic PA @Vzbot;Generic PA-CF @Vzbot" } diff --git a/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json b/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json index 71561ce630..b30f6639fd 100644 --- a/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json +++ b/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json @@ -8,5 +8,5 @@ "bed_model": "Vz330SlicerBedModel-cnc.stl", "bed_texture": "VzBot_PS_bed_330.svg", "hotend_model": "Goliath.stl", - "default_materials": "Vzbot Generic ABS;Vzbot Generic PLA;Vzbot Generic PLA-CF;Vzbot Generic PETG;Vzbot Generic TPU;Vzbot Generic ASA;Vzbot Generic PC;Vzbot Generic PVA;Vzbot Generic PA;Vzbot Generic PA-CF" + "default_materials": "Generic ABS @Vzbot;Generic PLA @Vzbot;Generic PLA-CF @Vzbot;Generic PETG @Vzbot;Generic TPU @Vzbot;Generic ASA @Vzbot;Generic PC @Vzbot;Generic PVA @Vzbot;Generic PA @Vzbot;Generic PA-CF @Vzbot" } diff --git a/resources/profiles/Vzbot/machine/fdm_klipper_common.json b/resources/profiles/Vzbot/machine/fdm_klipper_common.json index 617015864c..97e546f272 100644 --- a/resources/profiles/Vzbot/machine/fdm_klipper_common.json +++ b/resources/profiles/Vzbot/machine/fdm_klipper_common.json @@ -125,7 +125,7 @@ "1" ], "default_filament_profile": [ - "Vzbot Generic ABS" + "Generic ABS @Vzbot" ], "default_print_profile": "0.20mm Standard @Vzbot", "bed_exclude_area": [ diff --git a/resources/profiles/Wanhao France.json b/resources/profiles/Wanhao France.json index 92694fe476..ce18d5c5d0 100644 --- a/resources/profiles/Wanhao France.json +++ b/resources/profiles/Wanhao France.json @@ -1,6 +1,6 @@ { "name": "Wanhao France", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Wanhao France D12 configurations", "machine_model_list": [ @@ -177,12 +177,12 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Yumi Generic PETG", - "sub_path": "filament/Yumi Generic PETG.json" + "name": "Generic PETG @Yumi", + "sub_path": "filament/Generic PETG @Yumi.json" }, { - "name": "Yumi Generic PLA", - "sub_path": "filament/Yumi Generic PLA.json" + "name": "Generic PLA @Yumi", + "sub_path": "filament/Generic PLA @Yumi.json" }, { "name": "YUMI PETG", diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json b/resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json similarity index 91% rename from resources/profiles/Wanhao France/filament/Yumi Generic PETG.json rename to resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json index af50f6f8b0..945df6cb10 100644 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json +++ b/resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Yumi Generic PETG", + "name": "Generic PETG @Yumi", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OFCu3jES", + "filament_id": "OFYPdQJh", "instantiation": "false", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json b/resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json similarity index 81% rename from resources/profiles/Wanhao France/filament/Yumi Generic PLA.json rename to resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json index 0ef9bfdad2..1bcd4923a8 100644 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json +++ b/resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Yumi Generic PLA", + "name": "Generic PLA @Yumi", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OFGLeiNL", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Wanhao France/filament/YUMI PETG.json b/resources/profiles/Wanhao France/filament/YUMI PETG.json index d315c359f5..9d1bf0288a 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PETG.json +++ b/resources/profiles/Wanhao France/filament/YUMI PETG.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "YUMI PETG", - "inherits": "Yumi Generic PETG", + "inherits": "Generic PETG @Yumi", "from": "system", "setting_id": "PFFm20QNgwqyuglH", "filament_id": "OF5NqBfC", diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json index 5655743ca6..6636fe680d 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "YUMI PLA Bowden", - "inherits": "Yumi Generic PLA", + "inherits": "Generic PLA @Yumi", "from": "system", "setting_id": "zQSSA2QZi27ESyQK", "filament_id": "OFZ2LuAi", diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json index 52360e2d5b..050e003e77 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "YUMI PLA Direct Drive", - "inherits": "Yumi Generic PLA", + "inherits": "Generic PLA @Yumi", "from": "system", "setting_id": "v2p0ooSxHnvVkn57", "filament_id": "OFJxSqO4", diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json index 609e9f6106..26374ba05c 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json @@ -2,7 +2,6 @@ "type": "filament", "name": "Generic ABS @Z-Bolt Base", "inherits": "fdm_filament_abs", - "renamed_from": "Z-Bolt ABS;Generic ABS @Z-Bolt", "from": "system", "filament_id": "OFY9muEs", "instantiation": "false", diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json index 0448f04bed..7bacdfde2e 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json @@ -2,7 +2,6 @@ "type": "filament", "name": "Generic ABS HT @Z-Bolt Base", "inherits": "Generic ABS @Z-Bolt Base", - "renamed_from": "Z-Bolt ABS HT;Generic ABS HT @Z-Bolt", "from": "system", "filament_id": "OFsP8PKH", "instantiation": "false", diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json index f593385ea7..07416a8d81 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json @@ -2,7 +2,6 @@ "type": "filament", "name": "Generic PA @Z-Bolt Base", "inherits": "fdm_filament_pa", - "renamed_from": "Z-Bolt PA;Generic PA @Z-Bolt", "from": "system", "filament_id": "OFg8ndtj", "instantiation": "false", diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json index 4c8d8dc6a7..18f2530d8a 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json @@ -2,7 +2,6 @@ "type": "filament", "name": "Generic PETG @Z-Bolt Base", "inherits": "fdm_filament_pet", - "renamed_from": "Z-Bolt PETG;Generic PETG @Z-Bolt", "from": "system", "filament_id": "OFYPdQJh", "instantiation": "false", diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json index df2c3259e1..2b64f307ac 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json @@ -2,7 +2,6 @@ "type": "filament", "name": "Generic PLA @Z-Bolt Base", "inherits": "fdm_filament_pla", - "renamed_from": "Z-Bolt PLA;Generic PLA @Z-Bolt", "from": "system", "filament_id": "OFDSrzZ8", "instantiation": "false", diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index 795fa4f768..336f48ac15 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -2322,18 +2322,1588 @@ ], "successor": "OFmhJs5V" }, + "OF0GIkJm": { + "claims": [ + "Tiertime/Tiertime Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OF0zx94L": { + "claims": [ + "Vzbot/Vzbot Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OF1Id239": { + "claims": [ + "Prusa/Prusa Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF1OZujR": { + "claims": [ + "Flashforge/Flashforge Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OF1daEUW": { + "claims": [ + "Anker/Anker Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OF1uR1t2": { + "claims": [ + "Tiertime/Tiertime Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF2RjrWH": { + "claims": [ + "Flashforge/FusRock Generic PAHT-GF" + ], + "successor": "OFcVLpNA" + }, + "OF2mgDsI": { + "claims": [ + "Vzbot/Vzbot Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OF3P0BQA": { + "claims": [ + "Anker/Anker Generic ABS", + "Anker/Anker Generic ABS 0.2 nozzle", + "Anker/Anker Generic ABS 0.25 nozzle" + ], + "successor": "OFY9muEs" + }, + "OF3s929u": { + "claims": [ + "Tiertime/Tiertime Generic PP" + ], + "successor": "OF1UNk9P" + }, + "OF3wxlw9": { + "claims": [ + "CoLiDo/CoLiDo Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF42ZDpN": { + "claims": [ + "Flashforge/FusRock PAHT" + ], + "successor": "OF7pjCsO" + }, + "OF48L671": { + "claims": [ + "Ratrig/RatRig Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OF4Mf5Gz": { + "claims": [ + "Creality/Creality Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF4XAUnp": { + "claims": [ + "Vzbot/Vzbot Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OF4oCRKe": { + "claims": [ + "DeltaMaker/DeltaMaker Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF4xhTuK": { + "claims": [ + "OrcaArena/OrcaArena Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OF4zzGwp": { + "claims": [ + "Flashforge/FusRock Generic PET-GF" + ], + "successor": "OFzwA5Z9" + }, + "OF51XQar": { + "claims": [ + "CONSTRUCT3D/C1 Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OF5E5KNA": { + "claims": [ + "SecKit/SecKit Generic PC" + ], + "successor": "OFLakOUI" + }, + "OF5Zk4e1": { + "claims": [ + "Anycubic/Anycubic Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OF5vzBhb": { + "claims": [ + "Chuanying/Chuanying Generic PLA", + "Chuanying/Chuanying PLA" + ], + "successor": "OFDSrzZ8" + }, + "OF6Fpw1E": { + "claims": [ + "Comgrow/Comgrow Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OF6K467o": { + "claims": [ + "InfiMech/InfiMech Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OF6KELDx": { + "claims": [ + "Co Print/CoPrint Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OF6WddJ1": { + "claims": [ + "Flashforge/FusRock S-PAHT" + ], + "successor": "OFCn83wF" + }, + "OF6rMr3U": { + "claims": [ + "Flashforge/FusRock Generic S-Multi" + ], + "successor": "OF0AquDh" + }, + "OF6tKa1Z": { + "claims": [ + "Anker/Anker Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OF6vKLaU": { + "claims": [ + "Artillery/Artillery Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OF6xLvYg": { + "claims": [ + "InfiMech/InfiMech Generic PC" + ], + "successor": "OFLakOUI" + }, + "OF7g2vYQ": { + "claims": [ + "Co Print/CoPrint Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OF7uE5KB": { + "claims": [ + "Anker/Anker Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OF8CXrvm": { + "claims": [ + "SecKit/SecKit Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OF8bLDu7": { + "claims": [ + "Blocks/Blocks Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OF97ru74": { + "claims": [ + "Prusa/Prusa Generic PC" + ], + "successor": "OFLakOUI" + }, + "OF9fOPpd": { + "claims": [ + "Vzbot/Vzbot Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFACSw9O": { + "claims": [ + "Creality/Creality Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFB09fpe": { + "claims": [ + "Ratrig/RatRig Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFB0a3hT": { + "claims": [ + "Anker/Anker Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFB1Tv1E": { + "claims": [ + "Anycubic/Anycubic Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFB8wSps": { + "claims": [ + "Flashforge/FusRock PET-CF" + ], + "successor": "OFDu1qE7" + }, + "OFB9dx27": { + "claims": [ + "Blocks/Blocks Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFBC32Wb": { + "claims": [ + "Flashforge/FusRock PET" + ], + "successor": "OFKTGKJU" + }, + "OFBIadjM": { + "claims": [ + "Chuanying/Chuanying ASA", + "Chuanying/Chuanying Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFBpcB0a": { + "claims": [ + "TwoTrees/TwoTrees Generic HS PLA" + ], + "successor": "OFvxghTE" + }, + "OFBtlI8M": { + "claims": [ + "FlyingBear/FlyingBear Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFC20UMj": { + "claims": [ + "Flashforge/Flashforge Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFCVUEaV": { + "claims": [ + "Tiertime/Tiertime Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFCaJHAA": { + "claims": [ + "Flashforge/FusRock Generic S-PAHT" + ], + "successor": "OFCn83wF" + }, + "OFCcsYtf": { + "claims": [ + "FLSun/FLSun Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFCu3jES": { + "claims": [], + "successor": null + }, + "OFD2JNS1": { + "claims": [ + "Dremel/Dremel Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFD6kN7F": { + "claims": [ + "OrcaArena/OrcaArena Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFDeTsJw": { + "claims": [ + "Chuanying/Chuanying Generic HIPS" + ], + "successor": "OFsFon5l" + }, + "OFEE1Dld": { + "claims": [ + "Artillery/Artillery Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFETFWx7": { + "claims": [ + "SecKit/SecKit Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFEZNNw1": { + "claims": [ + "Ratrig/RatRig Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFF73Bvp": { + "claims": [ + "SecKit/SecKit Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFFZ0BBL": { + "claims": [ + "FlyingBear/FlyingBear Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFFxZ7hZ": { + "claims": [ + "Chuanying/Chuanying Generic PLA-CF10" + ], + "successor": "OFX2zcrM" + }, + "OFGDaEHO": { + "claims": [ + "Tiertime/Tiertime Generic BVOH" + ], + "successor": "OFo2UF2C" + }, + "OFGGyAgJ": { + "claims": [ + "Vzbot/Vzbot Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFGKLoUm": { + "claims": [ + "Anycubic/Anycubic Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFGLeiNL": { + "claims": [], + "successor": null + }, + "OFGPJxnt": { + "claims": [ + "Anker/Anker Generic PC", + "Anker/Anker Generic PC 0.2 nozzle", + "Anker/Anker Generic PC 0.25 nozzle" + ], + "successor": "OFLakOUI" + }, + "OFGzUNbm": { + "claims": [ + "Tiertime/Tiertime Generic PPS-CF" + ], + "successor": "OF6rdQ6M" + }, + "OFHFZ1Te": { + "claims": [ + "Prusa/Prusa Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OFHQUAoZ": { + "claims": [ + "FLSun/FLSun Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFHUnLY2": { + "claims": [ + "Vzbot/Vzbot Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFHa3RZT": { + "claims": [ + "Tiertime/Tiertime Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFI80Hct": { + "claims": [ + "Anycubic/Anycubic Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFIYTy8S": { + "claims": [ + "Anker/Anker Generic PLA+", + "Anker/Anker Generic PLA+ 0.2 nozzle", + "Anker/Anker Generic PLA+ 0.25 nozzle" + ], + "successor": "OFEWYR89" + }, + "OFIda816": { + "claims": [ + "Vzbot/Vzbot Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFIeCuXj": { + "claims": [ + "Peopoly/Peopoly Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFIieIka": { + "claims": [ + "Flashforge/Polymaker CoPA" + ], + "successor": "OFQyyO0l" + }, + "OFIy3kLw": { + "claims": [ + "Prusa/Prusa Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFJJpaLS": { + "claims": [ + "FLSun/FLSun Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFJSksUs": { + "claims": [ + "FLSun/FLSun Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFK01afJ": { + "claims": [ + "Qidi/Qidi Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFK4LdYI": { + "claims": [ + "Prusa/Prusa Generic ASA HF" + ], + "successor": "OFzRtFM9" + }, + "OFKNAhls": { + "claims": [ + "Qidi/Qidi Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFKuTr12": { + "claims": [ + "Tiertime/Tiertime Generic PE" + ], + "successor": "OFPklMI1" + }, + "OFKyCgaK": { + "claims": [ + "Anycubic/Anycubic Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFLBUkwC": { + "claims": [ + "Vzbot/Vzbot Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFLDSqqi": { + "claims": [ + "Flashforge/Flashforge Generic ABS" + ], + "successor": "OFY9muEs" + }, "OFLSBS99": { "claims": [ "OrcaFilamentLibrary/Generic SBS" ], "successor": "OFhQfUQY" }, + "OFLrdHse": { + "claims": [ + "Flashforge/Flashforge Generic HS PLA" + ], + "successor": "OFvxghTE" + }, + "OFLuczRG": { + "claims": [ + "Creality/Creality Generic ASA-CF" + ], + "successor": "OF53eLVD" + }, + "OFM87w9T": { + "claims": [ + "Tiertime/Tiertime Generic SBS" + ], + "successor": "OFhQfUQY" + }, + "OFMEbuBE": { + "claims": [ + "Blocks/Blocks Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFMIurFh": { + "claims": [ + "Creality/Creality HF Generic Speed PLA" + ], + "successor": "OFXmv5p0" + }, + "OFMTBcnz": { + "claims": [ + "Tiertime/Tiertime Generic PP-CF" + ], + "successor": "OFXkm8q1" + }, + "OFMZAoqa": { + "claims": [ + "Tiertime/Tiertime Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFMgJQCZ": { + "claims": [ + "Anker/Anker Generic PA", + "Anker/Anker Generic PA 0.2 nozzle", + "Anker/Anker Generic PA 0.25 nozzle" + ], + "successor": "OFg8ndtj" + }, + "OFMoLF46": { + "claims": [ + "FLSun/FLSun Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFMqYusc": { + "claims": [ + "Creality/Creality Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFN7aNHe": { + "claims": [ + "Tiertime/Tiertime Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFNLXV8X": { + "claims": [ + "Tiertime/Tiertime Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFNOxcYl": { + "claims": [ + "Ratrig/RatRig Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFNW4ZTC": { + "claims": [ + "Creality/Creality Generic PLA Wood" + ], + "successor": "OFIKZxPF" + }, + "OFNYewRS": { + "claims": [ + "Blocks/Blocks Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFNZYgLA": { + "claims": [ + "Qidi/Qidi Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFNcdCrm": { + "claims": [ + "Anycubic/Anycubic Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFNiSLfL": { + "claims": [ + "OrcaFilamentLibrary/Generic PP-GF" + ], + "successor": "OFsijjtH" + }, + "OFNn21yM": { + "claims": [ + "Vzbot/Vzbot Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFOKYhi6": { + "claims": [ + "Prusa/Prusa Generic PETG HF" + ], + "successor": "OF7lOgYF" + }, + "OFPdhDlK": { + "claims": [ + "Anycubic/Anycubic Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFPjOUtz": { + "claims": [ + "Flashforge/FusRock Generic PAHT-CF" + ], + "successor": "OFKW5hEW" + }, + "OFPy0Ogq": { + "claims": [ + "Qidi/Qidi Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFQ7I5vC": { + "claims": [ + "Prusa/Prusa Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFQC8Vna": { + "claims": [ + "Flashforge/Flashforge Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OFQTrLXB": { + "claims": [ + "Qidi/Qidi Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFQbqeN7": { + "claims": [ + "Qidi/Qidi Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFQswlnF": { + "claims": [ + "Tiertime/Tiertime Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFRDLNM9": { + "claims": [ + "Peopoly/Peopoly Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFRPEs5o": { + "claims": [ + "Flashforge/Flashforge Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFRiyes1": { + "claims": [ + "Anker/Anker Generic ASA", + "Anker/Anker Generic ASA 0.2 nozzle", + "Anker/Anker Generic ASA 0.25 nozzle" + ], + "successor": "OFLPAxz3" + }, + "OFRujL0v": { + "claims": [ + "Flashforge/FusRock Generic PET-CF" + ], + "successor": "OFDu1qE7" + }, + "OFRusgEn": { + "claims": [ + "Chuanying/Chuanying Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFRzsaDK": { + "claims": [ + "FlyingBear/FlyingBear Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFS8JF3S": { + "claims": [ + "Qidi/Qidi Generic PLA High Speed" + ], + "successor": "OFmpMwxS" + }, + "OFSDFYs4": { + "claims": [ + "Creality/Creality Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFSGbf2I": { + "claims": [ + "Anycubic/Anycubic Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFSPdsuW": { + "claims": [ + "Tiertime/Tiertime Generic PPA-CF" + ], + "successor": "OF8tPByX" + }, "OFSTCno1": { "claims": [ "re3D/re3D Greengate rPETG" ], "successor": "OFmCOW2Y" }, + "OFTKFAZ4": { + "claims": [ + "Tiertime/Tiertime Generic PCTG" + ], + "successor": "OFu1evlr" + }, + "OFU0n0zW": { + "claims": [ + "FLSun/FLSun T1 PLA Generic" + ], + "successor": "OFDSrzZ8" + }, + "OFU3zwPc": { + "claims": [ + "Prusa/Prusa Generic TPU HF" + ], + "successor": "OFnT7Qpb" + }, + "OFU5N9jI": { + "claims": [ + "OrcaArena/OrcaArena Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFU6fjbi": { + "claims": [ + "Co Print/CoPrint Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFUScM0D": { + "claims": [ + "Flashforge/FusRock S-Multi" + ], + "successor": "OF0AquDh" + }, + "OFUWRqwb": { + "claims": [ + "Creality/Creality Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFUaVAdj": { + "claims": [ + "Tiertime/Tiertime Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFUrStd6": { + "claims": [ + "Ratrig/RatRig Generic PCTG" + ], + "successor": "OFu1evlr" + }, + "OFUtGagr": { + "claims": [ + "Artillery/Artillery Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFVKADz5": { + "claims": [ + "Comgrow/Comgrow Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFVqZ2H0": { + "claims": [ + "FLSun/FLSun Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFW9uIkE": { + "claims": [ + "Tiertime/Tiertime Generic HIPS" + ], + "successor": "OFsFon5l" + }, + "OFWIr7ZE": { + "claims": [ + "CoLiDo/CoLiDo Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFWY6vBh": { + "claims": [ + "Anycubic/Anycubic Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFWadebJ": { + "claims": [ + "Tiertime/Tiertime Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OFWbbuRY": { + "claims": [ + "InfiMech/InfiMech Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFWof1Ap": { + "claims": [ + "FLSun/FLSun Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFWukXja": { + "claims": [ + "Qidi/Qidi Generic TPU 95A" + ], + "successor": "OFjiXpyf" + }, + "OFWzr7m0": { + "claims": [ + "Anycubic/Anycubic Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFXXUHSG": { + "claims": [ + "Chuanying/Chuanying Generic PETG-CF10" + ], + "successor": "OFO5djrM" + }, + "OFXhZ3uY": { + "claims": [ + "OrcaArena/OrcaArena Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFXuwtnq": { + "claims": [ + "Co Print/CoPrint Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFXyyfX6": { + "claims": [ + "Anker/Anker Generic PLA Silk", + "Anker/Anker Generic PLA Silk 0.2 nozzle", + "Anker/Anker Generic PLA Silk 0.25 nozzle" + ], + "successor": "OFesA6rF" + }, + "OFYHzKyS": { + "claims": [ + "Vzbot/Vzbot Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFYPdJ7t": { + "claims": [ + "Creality/Creality Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFYl0c8v": { + "claims": [ + "Flashforge/Flashforge Generic HIPS" + ], + "successor": "OFsFon5l" + }, + "OFYlZMmy": { + "claims": [ + "Chuanying/Chuanying Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFYlthXI": { + "claims": [ + "Flashforge/Flashforge Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFYtS9zg": { + "claims": [ + "Flashforge/FusRock PAHT-CF" + ], + "successor": "OFKW5hEW" + }, + "OFYvSO1W": { + "claims": [ + "Flashforge/Flashforge Generic PLA-Silk" + ], + "successor": "OFi6PfUM" + }, + "OFZ1hANN": { + "claims": [ + "Flashforge/FusRock Generic NexPA-CF25" + ], + "successor": "OFjt8dDO" + }, + "OFZ4fTO8": { + "claims": [ + "CONSTRUCT3D/C1 Generic High Flow PETG" + ], + "successor": "OFNjku08" + }, + "OFZHgTVI": { + "claims": [ + "Flashforge/Flashforge Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFZPlCck": { + "claims": [ + "Chuanying/Chuanying Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFZsChIG": { + "claims": [ + "Qidi/Qidi Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFa9X7yl": { + "claims": [ + "Flashforge/FusRock S-PAHT" + ], + "successor": "OFCn83wF" + }, + "OFaU2JxD": { + "claims": [ + "Dremel/Dremel Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFahE7HP": { + "claims": [ + "Blocks/Blocks Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFbeeFkl": { + "claims": [ + "OrcaArena/OrcaArena Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OFbenYUK": { + "claims": [ + "Prusa/Prusa Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFbt04e0": { + "claims": [ + "DeltaMaker/DeltaMaker Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFc0xiCz": { + "claims": [ + "InfiMech/InfiMech Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFcCzEkS": { + "claims": [ + "Prusa/Prusa Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFctbSkL": { + "claims": [ + "Blocks/Blocks Generic ASA-CF" + ], + "successor": "OF53eLVD" + }, + "OFd10YeG": { + "claims": [ + "Ratrig/RatRig Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFdEIwxy": { + "claims": [ + "Flashforge/Flashforge Generic PLA-CF10" + ], + "successor": "OFX2zcrM" + }, + "OFdHsxB4": { + "claims": [ + "TwoTrees/TwoTrees Generic 95A TPU" + ], + "successor": "OF6MMR8P" + }, + "OFdLdGgJ": { + "claims": [ + "OrcaArena/OrcaArena Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFdOWhCa": { + "claims": [ + "Ratrig/RatRig Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFdXgp2K": { + "claims": [ + "Chuanying/Chuanying Generic HS PLA", + "Chuanying/Chuanying HS PLA" + ], + "successor": "OFvxghTE" + }, + "OFdlGycb": { + "claims": [ + "CoLiDo/CoLiDo Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFe8UJXH": { + "claims": [ + "Creality/Creality Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFeDfaCh": { + "claims": [ + "CoLiDo/CoLiDo Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFeJjoKF": { + "claims": [ + "FLSun/FLSun Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFeK2vkS": { + "claims": [ + "Chuanying/Chuanying Generic PLA-Silk", + "Chuanying/Chuanying PLA-SILK" + ], + "successor": "OFi6PfUM" + }, + "OFetENFF": { + "claims": [ + "OrcaArena/OrcaArena Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFfZ0lTS": { + "claims": [ + "Qidi/Qidi Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OFfegVpA": { + "claims": [ + "Flashforge/Polymaker Generic S1" + ], + "successor": "OFaDsTE0" + }, + "OFfxFQf9": { + "claims": [ + "Chuanying/Chuanying Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFfznI0Q": { + "claims": [ + "Prusa/Prusa Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFgSEwOZ": { + "claims": [ + "OrcaArena/OrcaArena Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFgSPtDn": { + "claims": [ + "MagicMaker/MM Generic PEEK" + ], + "successor": "OFz5oHgf" + }, + "OFgVJhVt": { + "claims": [ + "Tiertime/Tiertime Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFgvOmM2": { + "claims": [ + "Anker/Anker Generic PETG", + "Anker/Anker Generic PETG 0.2 nozzle", + "Anker/Anker Generic PETG 0.25 nozzle" + ], + "successor": "OFYPdQJh" + }, + "OFhcrFw9": { + "claims": [ + "Creality/Creality Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFiCHnso": { + "claims": [ + "Prusa/Prusa Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFiUSDih": { + "claims": [ + "Blocks/Blocks Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFifxPW1": { + "claims": [ + "DeltaMaker/DeltaMaker Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFiorRtJ": { + "claims": [ + "Blocks/Blocks Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFixgF4N": { + "claims": [ + "Flashforge/FusRock S-Multi" + ], + "successor": "OF0AquDh" + }, + "OFjoIVZ6": { + "claims": [ + "FlyingBear/FlyingBear Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFkUaDnU": { + "claims": [ + "Tiertime/Tiertime Generic PE-CF" + ], + "successor": "OFd0Fv0k" + }, + "OFkYkQGO": { + "claims": [ + "Tiertime/Tiertime Generic PP-GF" + ], + "successor": "OFsijjtH" + }, + "OFl2SXmv": { + "claims": [ + "Prusa/Prusa Generic FLEX" + ], + "successor": "OFbPuPKY" + }, + "OFl4ItvQ": { + "claims": [ + "Prusa/Prusa Generic PLA HF" + ], + "successor": "OFZr862X" + }, + "OFlLmUeV": { + "claims": [ + "Ginger Additive/Ginger Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFlNWVr5": { + "claims": [ + "Flashforge/Flashforge Generic PETG-CF10" + ], + "successor": "OFO5djrM" + }, + "OFlx52rn": { + "claims": [ + "Ratrig/RatRig Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFma52eS": { + "claims": [ + "Blocks/Blocks Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFmhWhEf": { + "claims": [ + "Creality/Creality HF Generic PLA" + ], + "successor": "OFZr862X" + }, + "OFmnJNqY": { + "claims": [ + "OrcaArena/OrcaArena Generic PA" + ], + "successor": "OFg8ndtj" + }, + "OFmzftED": { + "claims": [ + "OrcaArena/OrcaArena Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFndmfJ1": { + "claims": [ + "Anker/Anker Generic PLA", + "Anker/Anker Generic PLA 0.2 nozzle", + "Anker/Anker Generic PLA 0.25 nozzle" + ], + "successor": "OFDSrzZ8" + }, + "OFnfBvn5": { + "claims": [ + "Artillery/Artillery Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFnh79eM": { + "claims": [ + "SecKit/SecKit Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFoDgVnY": { + "claims": [ + "FLSun/FLSun S1 PLA Generic" + ], + "successor": "OFDSrzZ8" + }, + "OFoJcr46": { + "claims": [ + "Prusa/Prusa Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFoT8F7Y": { + "claims": [ + "Prusa/Prusa Generic PVA HF" + ], + "successor": "OFDwBwO5" + }, + "OFoVZg32": { + "claims": [ + "SecKit/SecKit Generic TPU" + ], + "successor": "OFgbpcy9" + }, + "OFodPDxO": { + "claims": [ + "Tiertime/Tiertime Generic PLA High Speed" + ], + "successor": "OFmpMwxS" + }, + "OFp8gtPH": { + "claims": [ + "Creality/Creality Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OFpAaY6w": { + "claims": [ + "Creality/Creality Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFpSYJLI": { + "claims": [ + "Creality/Creality Generic PLA Matte" + ], + "successor": "OFmY0l6t" + }, + "OFptvi3F": { + "claims": [ + "Tiertime/Tiertime Generic PPA-GF" + ], + "successor": "OF8Tlg47" + }, + "OFq5QANf": { + "claims": [ + "Prusa/Prusa Generic PC HF" + ], + "successor": "OFwwAQnA" + }, + "OFqKmLJe": { + "claims": [ + "Creality/Creality Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OFqOk9Ww": { + "claims": [ + "Peopoly/Peopoly Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFqS8fzK": { + "claims": [ + "SecKit/SecKit Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFrO2zyn": { + "claims": [ + "Creality/Creality Generic PLA High Speed" + ], + "successor": "OFmpMwxS" + }, + "OFrQqCwL": { + "claims": [ + "InfiMech/InfiMech Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFrgGex8": { + "claims": [ + "Blocks/Blocks Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFrh4bBH": { + "claims": [ + "SecKit/SecKit Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFrnJJEa": { + "claims": [ + "Tiertime/Tiertime Generic EVA" + ], + "successor": "OFCD8qiU" + }, + "OFrrMLDw": { + "claims": [ + "Flashforge/Flashforge Generic PLA-SILK" + ], + "successor": "OFkf1HHw" + }, + "OFs2ReMr": { + "claims": [ + "InfiMech/InfiMech Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFsCbVbN": { + "claims": [ + "Anker/Anker Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFsF96Gt": { + "claims": [ + "FLSun/FLSun Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFsGqI4y": { + "claims": [ + "Ginger Additive/Ginger Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFsXOMoX": { + "claims": [ + "Qidi/Qidi Generic PLA+" + ], + "successor": "OFEWYR89" + }, + "OFsoQ12i": { + "claims": [ + "Comgrow/Comgrow Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFsxRSwr": { + "claims": [ + "Ratrig/RatRig Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFsxlLdo": { + "claims": [ + "Qidi/Qidi Generic ASA" + ], + "successor": "OFLPAxz3" + }, + "OFtP1rqJ": { + "claims": [ + "FLSun/FLSun Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFtTHNTj": { + "claims": [ + "Flashforge/Flashforge Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFtsVp4v": { + "claims": [ + "SecKit/SecKit Generic PA-CF" + ], + "successor": "OFQLcbps" + }, + "OFu79SUH": { + "claims": [ + "Qidi/Qidi Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFuSwKgm": { + "claims": [ + "Tiertime/Tiertime Generic PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFupq0tY": { + "claims": [ + "Blocks/Blocks Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFv4VZCd": { + "claims": [ + "Qidi/Qidi Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFvGc67v": { + "claims": [ + "Prusa/Prusa Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFvPomQf": { + "claims": [ + "Tiertime/Tiertime Generic PPS" + ], + "successor": "OFq9svOz" + }, + "OFwMFLAm": { + "claims": [ + "Artillery/Artillery Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFwpkvqf": { + "claims": [ + "OrcaArena/OrcaArena Generic PETG-CF" + ], + "successor": "OFoYSJKi" + }, + "OFwxpmHM": { + "claims": [ + "Flashforge/Polymaker Generic CoPA" + ], + "successor": "OFQyyO0l" + }, + "OFx0ZzFV": { + "claims": [ + "OrcaArena/OrcaArena Generic PLA-CF" + ], + "successor": "OFWbdGsC" + }, + "OFxTMg1d": { + "claims": [ + "FlyingBear/FlyingBear Generic PC" + ], + "successor": "OFLakOUI" + }, + "OFxg7n2G": { + "claims": [ + "Ratrig/RatRig Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFxvKuYW": { + "claims": [ + "Tiertime/Tiertime Generic PHA" + ], + "successor": "OF74KeQR" + }, + "OFy4ajVZ": { + "claims": [ + "Qidi/Qidi Generic PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OFyFRojy": { + "claims": [ + "Ratrig/RatRig Generic ABS" + ], + "successor": "OFY9muEs" + }, + "OFyK5Lt9": { + "claims": [ + "Artillery/Artillery Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFyeSq8A": { + "claims": [ + "Prusa/Prusa Generic ABS HF" + ], + "successor": "OF55jHAJ" + }, + "OFyySVby": { + "claims": [ + "SecKit/SecKit Generic PVA" + ], + "successor": "OFDvXujf" + }, + "OFz3q5Xz": { + "claims": [ + "CONSTRUCT3D/C1 Generic PETG" + ], + "successor": "OFYPdQJh" + }, + "OFzXURfo": { + "claims": [ + "FlyingBear/FlyingBear Generic PETG" + ], + "successor": "OFYPdQJh" + }, "OGFA00": { "claims": [ "OrcaFilamentLibrary/Bambu PLA Basic" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 5183acc069..e86eeab452 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -128,8 +128,6 @@ "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/Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Generic TPU @Anycubic Kobra 3 0.4 nozzle", "Artillery/Artillery ABS", "Artillery/Artillery ABS @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery ASA @Artillery M1 Pro 0.4 nozzle", @@ -191,28 +189,28 @@ "BBL/addnorth TPU Pro Matte 85A", "BBL/addnorth TPU Pro Matte 95A", "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", - "Chuanying/Chuanying Generic HIPS", - "Chuanying/Chuanying Generic PVA", "Chuanying/Chuanying PETG @Chuanying X1 0.25 Nozzle", - "Co Print/CoPrint Generic ABS", - "Co Print/CoPrint Generic PETG", - "Co Print/CoPrint Generic TPU", + "Chuanying/Generic HIPS @Chuanying", + "Chuanying/Generic PVA @Chuanying", + "Co Print/Generic ABS @CoPrint", + "Co Print/Generic PETG @CoPrint", + "Co Print/Generic TPU @CoPrint", "Comgrow/Comgrow T300 PLA", - "Creality/Creality Generic ASA-CF @Hi-all", - "Creality/Creality Generic PETG-CF @Hi-all", - "Creality/Creality Generic PLA High Speed @Ender-3V3-all", - "Creality/Creality Generic PLA High Speed @Hi-all", - "Creality/Creality Generic PLA High Speed @K1-all", - "Creality/Creality Generic PLA High Speed @K2-all", - "Creality/Creality Generic PLA Matte @Ender-3V3-all", - "Creality/Creality Generic PLA Matte @Hi-all", - "Creality/Creality Generic PLA Matte @K1-all", - "Creality/Creality Generic PLA Matte @K2-all", - "Creality/Creality Generic PLA Silk @Ender-3V3-all", - "Creality/Creality Generic PLA Silk @Hi-all", - "Creality/Creality Generic PLA Silk @K1-all", - "Creality/Creality Generic PLA Silk @K2-all", - "Creality/Creality Generic PLA Wood @Hi-all", + "Creality/Generic ASA-CF @Creality Hi-all", + "Creality/Generic PETG-CF @Creality Hi-all", + "Creality/Generic PLA High Speed @Creality Ender-3V3-all", + "Creality/Generic PLA High Speed @Creality Hi-all", + "Creality/Generic PLA High Speed @Creality K1-all", + "Creality/Generic PLA High Speed @Creality K2-all", + "Creality/Generic PLA Matte @Creality Ender-3V3-all", + "Creality/Generic PLA Matte @Creality Hi-all", + "Creality/Generic PLA Matte @Creality K1-all", + "Creality/Generic PLA Matte @Creality K2-all", + "Creality/Generic PLA Silk @Creality Ender-3V3-all", + "Creality/Generic PLA Silk @Creality Hi-all", + "Creality/Generic PLA Silk @Creality K1-all", + "Creality/Generic PLA Silk @Creality K2-all", + "Creality/Generic PLA Wood @Creality Hi-all", "Cubicon/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", @@ -244,9 +242,6 @@ "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PLAi21 @base", - "Dremel/Dremel Generic PLA @3D20 all", - "Dremel/Dremel Generic PLA @3D40 all", - "Dremel/Dremel Generic PLA @3D45 all", "Elegoo/Elegoo ASA-CF @base", "Elegoo/Elegoo PC-FR @base", "Elegoo/Elegoo PET-CF @base", @@ -281,14 +276,12 @@ "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", @@ -361,17 +354,6 @@ "Flashforge/Flashforge ASA-CF @FF G4P", "Flashforge/Flashforge ASA-GF @FF C5", "Flashforge/Flashforge ASA-GF @FF C5P", - "Flashforge/Flashforge Generic ASA @G3U", - "Flashforge/Flashforge Generic HIPS", - "Flashforge/Flashforge Generic HIPS @G3U 0.6 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 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-SILK @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge Generic PVA", "Flashforge/Flashforge HIPS @FF C5", "Flashforge/Flashforge HIPS @FF C5P", "Flashforge/Flashforge HIPS @FF G4", @@ -729,40 +711,37 @@ "Flashforge/Flashforge TPU-90A @FF C5P", "Flashforge/Flashforge TPU-95A @FF C5", "Flashforge/Flashforge TPU-95A @FF C5P", - "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/FusRock NexPA-CF25", "Flashforge/FusRock PAHT @FF G4 0.6 HF nozzle", "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PAHT-CF", "Flashforge/FusRock PAHT-CF @FF C5", "Flashforge/FusRock PAHT-CF @FF C5P", "Flashforge/FusRock PAHT-CF @FF G4", - "Flashforge/FusRock PAHT-CF @FF G4 0.6 nozzle", "Flashforge/FusRock PAHT-CF @FF G4P", - "Flashforge/FusRock PAHT-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PAHT-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock PAHT-GF", "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PET-CF", "Flashforge/FusRock PET-CF @FF G4", - "Flashforge/FusRock PET-CF @FF G4 0.6 nozzle", "Flashforge/FusRock PET-CF @FF G4P", - "Flashforge/FusRock PET-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PET-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock PET-GF", + "Flashforge/FusRock S-Multi", "Flashforge/FusRock S-Multi @FF C5", "Flashforge/FusRock S-Multi @FF C5P", + "Flashforge/FusRock S-Multi @G3U 0.6 Nozzle", + "Flashforge/FusRock S-PAHT", "Flashforge/FusRock S-PAHT @FF C5", "Flashforge/FusRock S-PAHT @FF C5P", - "Flashforge/Generic ABS @Flashforge AD4", - "Flashforge/Generic ASA @Flashforge AD4", + "Flashforge/FusRock S-PAHT @G3U 0.6 Nozzle", + "Flashforge/Generic ASA @Flashforge G3U", + "Flashforge/Generic HIPS @Flashforge", + "Flashforge/Generic HIPS @Flashforge G3U 0.6 Nozzle", "Flashforge/Generic PET @FF G4", "Flashforge/Generic PET @FF G4 0.6 HF nozzle", "Flashforge/Generic PET @FF G4 0.6 nozzle", @@ -771,30 +750,33 @@ "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", "Flashforge/Generic PET @FF G4P 0.6 nozzle", "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", - "Flashforge/Generic PETG @Flashforge AD4", - "Flashforge/Generic PETG-CF10 @Flashforge AD4", - "Flashforge/Generic PLA @Flashforge AD4", + "Flashforge/Generic PETG-CF @Flashforge G3U", + "Flashforge/Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic PETG-CF @Flashforge G3U 0.8 Nozzle", "Flashforge/Generic PLA High Speed @Flashforge AD4", "Flashforge/Generic PLA Silk @Flashforge AD4", - "Flashforge/Generic PLA-CF10 @Flashforge AD4", + "Flashforge/Generic PLA-CF @Flashforge G3U", + "Flashforge/Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "Flashforge/Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "Flashforge/Generic PVA @Flashforge", "Flashforge/Generic TPU 85A @FF AD5X", "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", - "Flashforge/Generic TPU @Flashforge AD4", "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", + "Flashforge/Polymaker CoPA", "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", - "Flashforge/Polymaker Generic CoPA", - "Flashforge/Polymaker Generic S1", + "Flashforge/Polymaker S1", "Lulzbot/Lulzbot 2.85mm ABS", "Lulzbot/Lulzbot 2.85mm PETG", "Lulzbot/Lulzbot 2.85mm PLA", @@ -885,7 +867,11 @@ "OrcaFilamentLibrary/FilAr PLA-mate Violeta", "OrcaFilamentLibrary/PolyLite Dual PLA @base", "OrcaFilamentLibrary/PolyTerra Dual PLA @System", - "Prusa/Prusa Generic PLA Silk @MK4S", + "Prusa/Generic PLA Silk @Prusa MK4S", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", "Qidi/QIDI ABS Rapido 0.2 nozzle", "Qidi/QIDI ABS Rapido 0.6 nozzle", "Qidi/QIDI ABS Rapido 0.8 nozzle", @@ -902,10 +888,6 @@ "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 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", "Snapmaker/PolyLite Dual PLA @0.2 nozzle", "Snapmaker/PolyLite J1 PLA", "Snapmaker/PolyLite J1 PLA @0.2 nozzle", @@ -1595,12 +1577,12 @@ "OF02UAVh": [ "Creality/Soleyin Ultra PLA" ], + "OF0AquDh": [ + "Flashforge/FusRock S-Multi" + ], "OF0FfcAG": [ "Anycubic/Anycubic TPU for ACE" ], - "OF0GIkJm": [ - "Tiertime/Tiertime Generic PLA Silk" - ], "OF0NgY1y": [ "BBL/COEX NYLEX PA6-CF", "OrcaFilamentLibrary/COEX NYLEX PA6-CF" @@ -1655,29 +1637,21 @@ "OF0yFLkY": [ "Anycubic/Anycubic ASA" ], - "OF0zx94L": [ - "Vzbot/Vzbot Generic PA" - ], "OF112FvY": [ "Anycubic/Generic PETG Basic" ], - "OF1Id239": [ - "Prusa/Prusa Generic PETG" - ], "OF1N1qMK": [ "OrcaFilamentLibrary/Panchroma PLA UV Shift", "Snapmaker/Panchroma PLA UV Shift" ], - "OF1OZujR": [ - "Flashforge/Flashforge Generic PVA" - ], "OF1Pke8t": [ "BBL/Overture Easy PLA", "OrcaFilamentLibrary/Overture Easy PLA" ], "OF1UNk9P": [ "Creality/Generic PP", - "OrcaFilamentLibrary/Generic PP" + "OrcaFilamentLibrary/Generic PP", + "Tiertime/Generic PP" ], "OF1W7c76": [ "Qidi/QIDI ASA-CF" @@ -1688,9 +1662,6 @@ "OF1d7c3A": [ "Snapmaker/Snapmaker ASA" ], - "OF1daEUW": [ - "Anker/Anker Generic PETG-CF" - ], "OF1dpPrW": [ "Qidi/Bambu PLA" ], @@ -1698,9 +1669,6 @@ "Elegoo/Elegoo PLA PRO", "OrcaFilamentLibrary/Elegoo PLA PRO" ], - "OF1uR1t2": [ - "Tiertime/Tiertime Generic PETG" - ], "OF223rZv": [ "Anycubic/Anycubic ABS" ], @@ -1715,9 +1683,6 @@ "OrcaFilamentLibrary/SUNLU PETG", "Sovol/SUNLU PETG" ], - "OF2RjrWH": [ - "Flashforge/FusRock Generic PAHT-GF" - ], "OF2TQpOO": [ "Qidi/QIDI PLA Silk" ], @@ -1733,9 +1698,6 @@ "OF2hfMcG": [ "OrcaArena/Arena PLA-CF" ], - "OF2mgDsI": [ - "Vzbot/Vzbot Generic PLA" - ], "OF2pj5l5": [ "BBL/Overture Super PLA+", "OrcaFilamentLibrary/Overture Super PLA+" @@ -1754,11 +1716,6 @@ "OF3OMgrI": [ "Creality/CR-Silk" ], - "OF3P0BQA": [ - "Anker/Anker Generic ABS", - "Anker/Anker Generic ABS 0.2 nozzle", - "Anker/Anker Generic ABS 0.25 nozzle" - ], "OF3WQaKK": [ "Creality/CR-PETG" ], @@ -1775,21 +1732,12 @@ "OF3msXEa": [ "Snapmaker/Snapmaker Dual PETG-CF" ], - "OF3s929u": [ - "Tiertime/Tiertime Generic PP" - ], - "OF3wxlw9": [ - "CoLiDo/CoLiDo Generic PETG" - ], "OF3ydJTT": [ "InfiMech/InfiMech PLA Hyper" ], "OF41jaTh": [ "Flashforge/Flashforge TPU-90A" ], - "OF42ZDpN": [ - "Flashforge/FusRock PAHT" - ], "OF43Raws": [ "Snapmaker/PolyTerra J1 PLA" ], @@ -1799,16 +1747,10 @@ "OF44VYzK": [ "OrcaFilamentLibrary/FilAr PETG Azul Francia" ], - "OF48L671": [ - "Ratrig/RatRig Generic ASA" - ], "OF4APyxe": [ "Creality/Hyper PAHT-CF" ], "OF4KsW72": [], - "OF4Mf5Gz": [ - "Creality/Creality Generic PETG" - ], "OF4Nhggz": [ "Artillery/Artillery PLA Basic+" ], @@ -1819,9 +1761,6 @@ "OF4WB37S": [ "Snapmaker/Snapmaker PETG" ], - "OF4XAUnp": [ - "Vzbot/Vzbot Generic ASA" - ], "OF4f8vVp": [ "WonderMaker/WonderMaker PET-CF" ], @@ -1831,22 +1770,11 @@ "OF4nQ62r": [ "Qidi/QIDI PLA Basic" ], - "OF4oCRKe": [ - "DeltaMaker/DeltaMaker Generic PETG" - ], "OF4ulo9Y": [ "WonderMaker/WonderMaker PVA" ], - "OF4xhTuK": [ - "OrcaArena/OrcaArena Generic PA-CF" - ], - "OF4zzGwp": [ - "Flashforge/FusRock Generic PET-GF" - ], - "OF51XQar": [ - "CONSTRUCT3D/C1 Generic PLA" - ], "OF53eLVD": [ + "Blocks/Generic ASA-CF", "Creality/Generic ASA-CF", "Elegoo/Generic ASA-CF" ], @@ -1856,6 +1784,9 @@ "OF54SvEe": [ "Prusa/Prusament PA-CF" ], + "OF55jHAJ": [ + "Prusa/Generic ABS HF" + ], "OF5BN24W": [ "Flashforge/Flashforge PPA-GF" ], @@ -1865,9 +1796,6 @@ "Qidi/PolyLite PLA", "Snapmaker/PolyLite PLA" ], - "OF5E5KNA": [ - "SecKit/SecKit Generic PC" - ], "OF5NQFKI": [ "Flashforge/Flashforge PLA Galaxy" ], @@ -1886,9 +1814,6 @@ "OF5YVJXH": [ "Artillery/Artillery ASA" ], - "OF5Zk4e1": [ - "Anycubic/Anycubic Generic ABS" - ], "OF5c6nq3": [ "Flashforge/Generic TPU-64D" ], @@ -1912,10 +1837,6 @@ "OF5vgi2G": [ "OrcaFilamentLibrary/FilAr PLA-mate Azul" ], - "OF5vzBhb": [ - "Chuanying/Chuanying Generic PLA", - "Chuanying/Chuanying PLA" - ], "OF5w29Kq": [ "Flashforge/Flashforge HS PETG" ], @@ -1931,23 +1852,17 @@ "OF6ATsCF": [ "Snapmaker/Snapmaker Dual PLA-CF" ], - "OF6Fpw1E": [ - "Comgrow/Comgrow Generic PETG" - ], "OF6H51Xx": [ "Snapmaker/Polymaker PETG", "Sovol/Polymaker PETG" ], - "OF6K467o": [ - "InfiMech/InfiMech Generic PA-CF" - ], - "OF6KELDx": [ - "Co Print/CoPrint Generic PLA" - ], "OF6Ll8lK": [ "Elegoo/Elegoo PETG Translucent", "OrcaFilamentLibrary/Elegoo PETG Translucent" ], + "OF6MMR8P": [ + "TwoTrees/Generic 95A TPU" + ], "OF6MOPWx": [ "Creality/Generic PET", "Elegoo/Generic PET", @@ -1963,33 +1878,19 @@ "OF6VgL2U": [ "Phrozen/Phrozen PLA" ], - "OF6WddJ1": [ - "Flashforge/FusRock S-PAHT" - ], "OF6kj4jI": [ "iQ/Fiberthree PACF Pro P2" ], "OF6ooviO": [ "FLSun/FLSun S1 TPU" ], - "OF6rMr3U": [ - "Flashforge/FusRock Generic S-Multi" - ], "OF6rdQ6M": [ - "Creality/Generic PPS-CF" - ], - "OF6tKa1Z": [ - "Anker/Anker Generic TPU" + "Creality/Generic PPS-CF", + "Tiertime/Generic PPS-CF" ], "OF6ueBwd": [ "Flashforge/Flashforge PLA Pro" ], - "OF6vKLaU": [ - "Artillery/Artillery Generic ASA" - ], - "OF6xLvYg": [ - "InfiMech/InfiMech Generic PC" - ], "OF6zAVFj": [ "Sovol/Sovol Zero TPU" ], @@ -2000,7 +1901,8 @@ "Snapmaker/Snapmaker ABS" ], "OF74KeQR": [ - "OrcaFilamentLibrary/Generic PHA" + "OrcaFilamentLibrary/Generic PHA", + "Tiertime/Generic PHA" ], "OF79Fbo6": [ "Cubicon/Cubicon PC" @@ -2020,11 +1922,9 @@ "OF7c9fln": [ "Anycubic/Anycubic PLA Translucent" ], - "OF7g2vYQ": [ - "Co Print/CoPrint Generic TPU" - ], "OF7lOgYF": [ - "OrcaFilamentLibrary/Generic PETG HF" + "OrcaFilamentLibrary/Generic PETG HF", + "Prusa/Generic PETG HF" ], "OF7lwj52": [ "CoLiDo/CoLiDo PETG" @@ -2032,15 +1932,12 @@ "OF7nBAd3": [ "Eryone/Eryone Silk PLA" ], + "OF7pjCsO": [ + "Flashforge/FusRock PAHT" + ], "OF7tt7DO": [ "Cubicon/Cubicon PLA+" ], - "OF7uE5KB": [ - "Anker/Anker Generic PA-CF" - ], - "OF8CXrvm": [ - "SecKit/SecKit Generic PA" - ], "OF8GnyFU": [ "Creality/Hyper ABS" ], @@ -2051,14 +1948,12 @@ "Snapmaker/Snapmaker J1 PET" ], "OF8Tlg47": [ - "OrcaFilamentLibrary/Generic PPA-GF" + "OrcaFilamentLibrary/Generic PPA-GF", + "Tiertime/Generic PPA-GF" ], "OF8aFWfQ": [ "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" ], - "OF8bLDu7": [ - "Blocks/Blocks Generic PA-CF" - ], "OF8dCquh": [ "Snapmaker/Snapmaker J1 ABS Benchy" ], @@ -2075,14 +1970,12 @@ "Eryone/Eryone PETG" ], "OF8tPByX": [ - "OrcaFilamentLibrary/Generic PPA-CF" + "OrcaFilamentLibrary/Generic PPA-CF", + "Tiertime/Generic PPA-CF" ], "OF8wE5l7": [ "Artillery/Artillery PETG Basic" ], - "OF97ru74": [ - "Prusa/Prusa Generic PC" - ], "OF995YXg": [ "Flashforge/Flashforge TPU-64D" ], @@ -2109,9 +2002,6 @@ "OF9emAI9": [ "Ratrig/RatRig PunkFil PETG" ], - "OF9fOPpd": [ - "Vzbot/Vzbot Generic PC" - ], "OF9z5LZ9": [ "FLSun/FLSun S1 PETG" ], @@ -2121,9 +2011,6 @@ "OFAC7Wyu": [ "Artillery/Artillery PLA Matte" ], - "OFACSw9O": [ - "Creality/Creality Generic PLA" - ], "OFAIBCLJ": [ "Elegoo/Generic ABS-CF" ], @@ -2148,34 +2035,12 @@ "OFAt6ec0": [ "OrcaFilamentLibrary/FilAr PLA Marron Oxido" ], - "OFB09fpe": [ - "Ratrig/RatRig Generic TPU" - ], - "OFB0a3hT": [ - "Anker/Anker Generic PLA-CF" - ], - "OFB1Tv1E": [ - "Anycubic/Anycubic Generic PA" - ], "OFB5SmWk": [ "OrcaFilamentLibrary/Valment PLA Galaxy" ], - "OFB8wSps": [ - "Flashforge/FusRock PET-CF" - ], - "OFB9dx27": [ - "Blocks/Blocks Generic ASA" - ], "OFBBgw7B": [ "WonderMaker/WonderMaker PLA Wood" ], - "OFBC32Wb": [ - "Flashforge/FusRock PET" - ], - "OFBIadjM": [ - "Chuanying/Chuanying ASA", - "Chuanying/Chuanying Generic ASA" - ], "OFBJAdLw": [ "LH/LHS PCTG" ], @@ -2198,21 +2063,12 @@ "OFBoSWxb": [ "Snapmaker/PolyLite PLA Luminous" ], - "OFBpcB0a": [ - "TwoTrees/TwoTrees Generic HS PLA" - ], - "OFBtlI8M": [ - "FlyingBear/FlyingBear Generic ABS" - ], "OFBw6eEG": [ "OrcaFilamentLibrary/Overture Matte PLA" ], "OFC1PzXz": [ "Creality/Hyper Luminous" ], - "OFC20UMj": [ - "Flashforge/Flashforge Generic TPU" - ], "OFC5f4Ay": [ "RH3D/Generic PCCF" ], @@ -2221,7 +2077,8 @@ "Snapmaker/Panchroma PLA Starlight" ], "OFCD8qiU": [ - "OrcaFilamentLibrary/Generic EVA" + "OrcaFilamentLibrary/Generic EVA", + "Tiertime/Generic EVA" ], "OFCEA7Nt": [ "Sovol/Sovol SV06 Plus ACE ABS" @@ -2233,28 +2090,22 @@ "OFCJpR7a": [ "Creality/HP Ultra PLA" ], - "OFCVUEaV": [ - "Tiertime/Tiertime Generic TPU" - ], "OFCZsqXg": [ "Creality/Hyper PLA" ], - "OFCaJHAA": [ - "Flashforge/FusRock Generic S-PAHT" - ], "OFCccVrQ": [ "OrcaFilamentLibrary/PolyTerra Dual PLA", "Snapmaker/PolyTerra Dual PLA" ], - "OFCcsYtf": [ - "FLSun/FLSun Generic ASA" - ], "OFCidU7j": [ "OrcaFilamentLibrary/DREMC ABS-GF" ], "OFCjG251": [ "OrcaFilamentLibrary/FilAr PLA-mate Verde" ], + "OFCn83wF": [ + "Flashforge/FusRock S-PAHT" + ], "OFCnywiC": [ "Tiertime/Tiertime PET-CF" ], @@ -2264,19 +2115,12 @@ "OFCp3Bgo": [ "Anycubic/Anycubic PLA SE" ], - "OFCu3jES": [], "OFCuaCer": [ "Volumic/Désactivé" ], "OFD21ije": [ "Cubicon/Cubicon PA-CF" ], - "OFD2JNS1": [ - "Dremel/Dremel Generic PLA" - ], - "OFD6kN7F": [ - "OrcaArena/OrcaArena Generic PLA" - ], "OFD8loeT": [ "re3D/re3D rPETG" ], @@ -2307,15 +2151,39 @@ "InfiMech/Other PETG" ], "OFDSrzZ8": [ + "Anker/Generic PLA", + "Anycubic/Generic PLA", + "Artillery/Generic PLA", + "Blocks/Generic PLA", + "CONSTRUCT3D/Generic PLA", + "Chuanying/Chuanying PLA", + "Chuanying/Generic PLA", + "Co Print/Generic PLA", + "CoLiDo/Generic PLA", + "Comgrow/Generic PLA", + "Creality/Creality Generic PLA", "Creality/Generic PLA", "Custom/Generic PLA", + "DeltaMaker/Generic PLA", + "Dremel/Generic PLA", "Elegoo/Generic PLA", + "FLSun/Generic PLA", "Flashforge/Generic PLA", + "FlyingBear/Generic PLA", + "Ginger Additive/Generic PLA", + "InfiMech/Generic PLA", "LONGER/Generic PLA", + "OrcaArena/Generic PLA", "OrcaFilamentLibrary/Generic PLA", + "Peopoly/Generic PLA", + "Prusa/Generic PLA", "Qidi/Generic PLA", "RH3D/Generic PLA", + "Ratrig/Generic PLA", + "SecKit/Generic PLA", "Sovol/Generic PLA", + "Tiertime/Generic PLA", + "Vzbot/Generic PLA", "Z-Bolt/Generic PLA" ], "OFDdEaoL": [ @@ -2324,9 +2192,6 @@ "OFDe8uyM": [ "OrcaFilamentLibrary/Valment PLA" ], - "OFDeTsJw": [ - "Chuanying/Chuanying Generic HIPS" - ], "OFDgQaca": [ "FlyingBear/FlyingBear PETG" ], @@ -2336,14 +2201,33 @@ "OFDtop41": [ "Creality/Generic Support for PA" ], + "OFDu1qE7": [ + "Flashforge/FusRock PET-CF" + ], "OFDvXujf": [ + "Anker/Generic PVA", + "Anycubic/Generic PVA", + "Blocks/Generic PVA", + "Chuanying/Generic PVA", "Creality/Generic PVA", "Custom/Generic PVA", - "OrcaFilamentLibrary/Generic PVA" + "FLSun/Generic PVA", + "Flashforge/Generic PVA", + "OrcaArena/Generic PVA", + "OrcaFilamentLibrary/Generic PVA", + "Prusa/Generic PVA", + "Qidi/Generic PVA", + "Ratrig/Generic PVA", + "SecKit/Generic PVA", + "Tiertime/Generic PVA", + "Vzbot/Generic PVA" ], "OFDvqJ6n": [ "OrcaFilamentLibrary/Overture ABS Basic" ], + "OFDwBwO5": [ + "Prusa/Generic PVA HF" + ], "OFDxfPgH": [ "OrcaFilamentLibrary/Bambu PLA Sparkle" ], @@ -2351,9 +2235,6 @@ "BBL/COEX TPU 60A", "OrcaFilamentLibrary/COEX TPU 60A" ], - "OFEE1Dld": [ - "Artillery/Artillery Generic TPU" - ], "OFEGNJD4": [ "OrcaFilamentLibrary/Bambu PLA Silk" ], @@ -2366,18 +2247,13 @@ "OFEOnBj6": [ "Snapmaker/Snapmaker PLA Lite" ], - "OFETFWx7": [ - "SecKit/SecKit Generic PLA" - ], "OFEWYR89": [ + "Anker/Generic PLA+", "Qidi/Generic PLA+" ], "OFEZ449N": [ "OrcaFilamentLibrary/FilAr PLA-mate Uva" ], - "OFEZNNw1": [ - "Ratrig/RatRig Generic PA" - ], "OFEZpel7": [ "Volumic/PPS Carbone (Performance)" ], @@ -2413,9 +2289,6 @@ "OFF3cuzT": [ "Creality/Generic TPU 64D" ], - "OFF73Bvp": [ - "SecKit/SecKit Generic PLA-CF" - ], "OFF9OKoY": [ "OrcaFilamentLibrary/PolyLite PLA Pro", "Snapmaker/PolyLite PLA Pro" @@ -2438,9 +2311,6 @@ "OFFX1DRD": [ "FlyingBear/FlyingBear PC" ], - "OFFZ0BBL": [ - "FlyingBear/FlyingBear Generic PLA" - ], "OFFZ458u": [ "Snapmaker/Fiberon PA612-ESD" ], @@ -2457,9 +2327,6 @@ "OFFwJWea": [ "Anycubic/Anycubic PLA Silk" ], - "OFFxZ7hZ": [ - "Chuanying/Chuanying Generic PLA-CF10" - ], "OFG0kOKX": [ "Volumic/Volumic PETG Ultra" ], @@ -2469,25 +2336,10 @@ "OFG4do34": [ "Qidi/Qidi ASA-Aero" ], - "OFGDaEHO": [ - "Tiertime/Tiertime Generic BVOH" - ], - "OFGGyAgJ": [ - "Vzbot/Vzbot Generic TPU" - ], "OFGJ1nxs": [ "FlyingBear/Other PLA", "InfiMech/Other PLA" ], - "OFGKLoUm": [ - "Anycubic/Anycubic Generic TPU" - ], - "OFGLeiNL": [], - "OFGPJxnt": [ - "Anker/Anker Generic PC", - "Anker/Anker Generic PC 0.2 nozzle", - "Anker/Anker Generic PC 0.25 nozzle" - ], "OFGVwfK0": [ "OrcaFilamentLibrary/FilAr PLA-mate Gris" ], @@ -2514,9 +2366,6 @@ "OFGxC8gB": [ "Creality/CR-Wood" ], - "OFGzUNbm": [ - "Tiertime/Tiertime Generic PPS-CF" - ], "OFH2nN08": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" ], @@ -2535,24 +2384,12 @@ "OFHAccHz": [ "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" ], - "OFHFZ1Te": [ - "Prusa/Prusa Generic PLA Silk" - ], - "OFHQUAoZ": [ - "FLSun/FLSun Generic PA-CF" - ], "OFHTVfaU": [ "Sovol/Sovol Zero PETG" ], - "OFHUnLY2": [ - "Vzbot/Vzbot Generic PETG" - ], "OFHWSM21": [ "OrcaFilamentLibrary/Fiberon PET-CF" ], - "OFHa3RZT": [ - "Tiertime/Tiertime Generic PA-CF" - ], "OFHa48An": [ "OrcaFilamentLibrary/Bambu PET-CF" ], @@ -2576,9 +2413,6 @@ "OFI6WZpn": [ "OrcaArena/Arena Support W" ], - "OFI80Hct": [ - "Anycubic/Anycubic Generic ASA" - ], "OFIBXa0k": [ "OrcaFilamentLibrary/FilAr PLA-mate Rojo" ], @@ -2588,6 +2422,9 @@ "OFIK0xFa": [ "FLSun/FLSun S1 ASA" ], + "OFIKZxPF": [ + "Creality/Generic PLA Wood" + ], "OFIPjqHt": [ "OrcaArena/Arena Support G" ], @@ -2600,23 +2437,12 @@ "OFIWMSGX": [ "Qidi/HATCHBOX PETG" ], - "OFIYTy8S": [ - "Anker/Anker Generic PLA+", - "Anker/Anker Generic PLA+ 0.2 nozzle", - "Anker/Anker Generic PLA+ 0.25 nozzle" - ], "OFIZMQwM": [ "LH/LHS TPU" ], "OFIamQnD": [ "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" ], - "OFIda816": [ - "Vzbot/Vzbot Generic PVA" - ], - "OFIeCuXj": [ - "Peopoly/Peopoly Generic PETG" - ], "OFIegjmD": [ "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" ], @@ -2626,18 +2452,12 @@ "OFIgbDHq": [ "Anycubic/Anycubic PLA Luminous" ], - "OFIieIka": [ - "Flashforge/Polymaker CoPA" - ], "OFIxOuOu": [ "Snapmaker/PolyLite PLA Starlight" ], "OFIxitiU": [ "Flashforge/Flashforge PLA Basic" ], - "OFIy3kLw": [ - "Prusa/Prusa Generic PA" - ], "OFJ3HRsR": [ "OrcaArena/Arena ABS" ], @@ -2645,9 +2465,6 @@ "FLSun/FLSun T1 PETG" ], "OFJHBEGD": [], - "OFJJpaLS": [ - "FLSun/FLSun Generic PETG" - ], "OFJNeELv": [ "OrcaFilamentLibrary/FILL3D PA" ], @@ -2658,9 +2475,6 @@ "OFJQDUk3": [ "OrcaFilamentLibrary/FilAr PETG Cristal" ], - "OFJSksUs": [ - "FLSun/FLSun Generic PLA" - ], "OFJVFpJz": [ "Sovol/Sovol Zero PLA Silk" ], @@ -2691,12 +2505,6 @@ "OFJxSqO4": [ "Wanhao France/YUMI PLA Direct Drive" ], - "OFK01afJ": [ - "Qidi/Qidi Generic PC" - ], - "OFK4LdYI": [ - "Prusa/Prusa Generic ASA HF" - ], "OFK74HJD": [ "Flashforge/Flashforge PLA Pro" ], @@ -2709,8 +2517,8 @@ "OFKKajh6": [ "OrcaFilamentLibrary/FilAr PLA Gris Plata" ], - "OFKNAhls": [ - "Qidi/Qidi Generic PETG" + "OFKTGKJU": [ + "Flashforge/FusRock PET" ], "OFKTSiYF": [ "OrcaFilamentLibrary/FilAr PLA Blanco Calido" @@ -2718,6 +2526,9 @@ "OFKUEXPA": [ "Snapmaker/Snapmaker Dual ASA" ], + "OFKW5hEW": [ + "Flashforge/FusRock PAHT-CF" + ], "OFKWWgyp": [ "OrcaFilamentLibrary/FilAr PLA Carpincho" ], @@ -2746,27 +2557,15 @@ "OFKpQTJI": [ "Flashforge/Flashforge TPU 65D" ], - "OFKuTr12": [ - "Tiertime/Tiertime Generic PE" - ], - "OFKyCgaK": [ - "Anycubic/Anycubic Generic PLA" - ], "OFL9aRjN": [ "Snapmaker/Snapmaker PETG HF" ], "OFLAXKqP": [ "WonderMaker/WonderMaker TPU 95A" ], - "OFLBUkwC": [ - "Vzbot/Vzbot Generic ABS" - ], "OFLC1oRH": [ "Flashforge/Flashforge PPA-CF" ], - "OFLDSqqi": [ - "Flashforge/Flashforge Generic ABS" - ], "OFLJ8S6I": [ "Flashforge/SUNLU Wood PLA", "OrcaFilamentLibrary/SUNLU Wood PLA" @@ -2776,12 +2575,26 @@ "Tiertime/Tiertime TPU 95A" ], "OFLPAxz3": [ + "Anker/Generic ASA", + "Anycubic/Generic ASA", + "Artillery/Generic ASA", + "Blocks/Generic ASA", + "Chuanying/Chuanying ASA", + "Chuanying/Generic ASA", "Creality/Generic ASA", "Custom/Generic ASA", "Elegoo/Generic ASA", + "FLSun/Generic ASA", "Flashforge/Generic ASA", + "OrcaArena/Generic ASA", "OrcaFilamentLibrary/Generic ASA", - "RH3D/Generic ASA" + "Prusa/Generic ASA", + "Qidi/Generic ASA", + "RH3D/Generic ASA", + "Ratrig/Generic ASA", + "SecKit/Generic ASA", + "Tiertime/Generic ASA", + "Vzbot/Generic ASA" ], "OFLTYJW0": [ "Snapmaker/Snapmaker PLA Translucent" @@ -2797,12 +2610,24 @@ "Qidi/Bambu PETG" ], "OFLakOUI": [ + "Anker/Generic PC", + "Anycubic/Generic PC", + "Blocks/Generic PC", "Creality/Generic PC", "Custom/Generic PC", "Elegoo/Generic PC", + "FLSun/Generic PC", + "FlyingBear/Generic PC", + "InfiMech/Generic PC", + "OrcaArena/Generic PC", "OrcaFilamentLibrary/Generic PC", + "Prusa/Generic PC", "Qidi/Generic PC", - "Sovol/Generic PC" + "Ratrig/Generic PC", + "SecKit/Generic PC", + "Sovol/Generic PC", + "Tiertime/Generic PC", + "Vzbot/Generic PC" ], "OFLbXwoL": [ "Artillery/Artillery PLA Silk" @@ -2820,12 +2645,6 @@ "OFLgwqp2": [ "Creality/Hyper PETG-GF" ], - "OFLrdHse": [ - "Flashforge/Flashforge Generic HS PLA" - ], - "OFLuczRG": [ - "Creality/Creality Generic ASA-CF" - ], "OFLzx3J4": [ "Creality/Hyper Marble" ], @@ -2835,9 +2654,6 @@ "OFM4iJlv": [ "Creality/Generic PA12-CF" ], - "OFM87w9T": [ - "Tiertime/Tiertime Generic SBS" - ], "OFM91vZs": [ "BBL/Overture ASA", "OrcaFilamentLibrary/Overture ASA" @@ -2845,15 +2661,9 @@ "OFMDHOcT": [ "Qidi/QIDI TPU-Aero" ], - "OFMEbuBE": [ - "Blocks/Blocks Generic TPU" - ], "OFMIma8C": [ "Flashforge/Flashforge PLA Luminous" ], - "OFMIurFh": [ - "Creality/Creality HF Generic Speed PLA" - ], "OFMK5gVo": [ "WonderMaker/WonderMaker PLA Basic" ], @@ -2863,9 +2673,6 @@ "OFMSvS8z": [ "Artillery/Artillery PA" ], - "OFMTBcnz": [ - "Tiertime/Tiertime Generic PP-CF" - ], "OFMTK0UC": [ "OrcaFilamentLibrary/Bambu Support For PA/PET" ], @@ -2873,30 +2680,16 @@ "Flashforge/SUNLU PLA+", "OrcaFilamentLibrary/SUNLU PLA+" ], - "OFMZAoqa": [ - "Tiertime/Tiertime Generic PVA" - ], "OFMZvH0z": [ "BBL/Overture Rock PLA", "OrcaFilamentLibrary/Overture Rock PLA" ], - "OFMgJQCZ": [ - "Anker/Anker Generic PA", - "Anker/Anker Generic PA 0.2 nozzle", - "Anker/Anker Generic PA 0.25 nozzle" - ], "OFMjtqTC": [ "OrcaFilamentLibrary/Bambu PLA Wood" ], - "OFMoLF46": [ - "FLSun/FLSun Generic TPU" - ], "OFMpxamb": [ "Flashforge/Flashforge PETG" ], - "OFMqYusc": [ - "Creality/Creality Generic PA" - ], "OFMsDGbs": [ "Anycubic/Anycubic TPU" ], @@ -2906,9 +2699,6 @@ "OFMyLYV8": [ "Flashforge/Flashforge PETG Transparent" ], - "OFN7aNHe": [ - "Tiertime/Tiertime Generic PC" - ], "OFN9fefN": [ "Cubicon/Cubicon ABS-A100" ], @@ -2918,12 +2708,6 @@ "OFNGTH3w": [ "Tiertime/Tiertime PLA" ], - "OFNLXV8X": [ - "Tiertime/Tiertime Generic ABS" - ], - "OFNOxcYl": [ - "Ratrig/RatRig Generic PA-CF" - ], "OFNQKF0M": [ "Tiertime/Tiertime ABS" ], @@ -2933,9 +2717,6 @@ "OFNU9YIW": [ "OrcaFilamentLibrary/FilAr PETG Azul Boreal" ], - "OFNW4ZTC": [ - "Creality/Creality Generic PLA Wood" - ], "OFNWcJsM": [ "Comgrow/Comgrow T300 PLA" ], @@ -2945,30 +2726,18 @@ "OFNX8GI1": [ "Sovol/Sovol Zero ABS" ], - "OFNYewRS": [ - "Blocks/Blocks Generic PLA" - ], - "OFNZYgLA": [ - "Qidi/Qidi Generic PVA" - ], "OFNZjrLo": [ "Sovol/Sovol SV06 Plus ACE PLA" ], - "OFNcdCrm": [ - "Anycubic/Anycubic Generic PLA-CF" - ], "OFNemJM6": [ "OrcaFilamentLibrary/FilAr PLA Cobre" ], - "OFNiSLfL": [ - "OrcaFilamentLibrary/Generic PP-GF" + "OFNjku08": [ + "CONSTRUCT3D/Generic High Flow PETG" ], "OFNk8bxk": [ "OrcaFilamentLibrary/Bambu PA6-GF" ], - "OFNn21yM": [ - "Vzbot/Vzbot Generic PA-CF" - ], "OFNstOna": [ "Eryone/Eryone PETG-CF" ], @@ -2980,6 +2749,7 @@ "Snapmaker/Panchroma PLA Neon" ], "OFO5djrM": [ + "Chuanying/Generic PETG-CF10", "Flashforge/Generic PETG-CF10" ], "OFOABq7t": [ @@ -2995,9 +2765,6 @@ "OFOJPAAS": [ "iQ/VXL90 TiQ2 P2" ], - "OFOKYhi6": [ - "Prusa/Prusa Generic PETG HF" - ], "OFOPU1xv": [ "Snapmaker/Snapmaker PLA Full Spectrum" ], @@ -3051,19 +2818,14 @@ "OFPc4zVY": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" ], - "OFPdhDlK": [ - "Anycubic/Anycubic Generic PA-CF" - ], - "OFPjOUtz": [ - "Flashforge/FusRock Generic PAHT-CF" - ], "OFPkCJKE": [ "Creality/Panchroma PLA Satin", "OrcaFilamentLibrary/Panchroma PLA Satin", "Snapmaker/Panchroma PLA Satin" ], "OFPklMI1": [ - "OrcaFilamentLibrary/Generic PE" + "OrcaFilamentLibrary/Generic PE", + "Tiertime/Generic PE" ], "OFPoyiFs": [ "OrcaFilamentLibrary/Polymaker HT-PLA", @@ -3075,9 +2837,6 @@ "OFPryWt5": [ "Lulzbot/Lulzbot 2.85mm PLA" ], - "OFPy0Ogq": [ - "Qidi/Qidi Generic PA-CF" - ], "OFQ1KzO8": [ "Snapmaker/Snapmaker J1 PLA Silk" ], @@ -3090,15 +2849,9 @@ "OFQ40XeN": [ "Qidi/QIDI PETG Tough" ], - "OFQ7I5vC": [ - "Prusa/Prusa Generic PLA-CF" - ], "OFQ9qnkd": [ "FLSun/FLSun T1 PLA High Speed" ], - "OFQC8Vna": [ - "Flashforge/Flashforge Generic PETG-CF" - ], "OFQEGL7z": [ "FlyingBear/FlyingBear PA-CF" ], @@ -3109,9 +2862,22 @@ "OrcaFilamentLibrary/Bambu Support G" ], "OFQLcbps": [ + "Anker/Generic PA-CF", + "Anycubic/Generic PA-CF", + "Blocks/Generic PA-CF", "Creality/Generic PA-CF", "Custom/Generic PA-CF", - "OrcaFilamentLibrary/Generic PA-CF" + "FLSun/Generic PA-CF", + "FlyingBear/Generic PA-CF", + "InfiMech/Generic PA-CF", + "OrcaArena/Generic PA-CF", + "OrcaFilamentLibrary/Generic PA-CF", + "Prusa/Generic PA-CF", + "Qidi/Generic PA-CF", + "Ratrig/Generic PA-CF", + "SecKit/Generic PA-CF", + "Tiertime/Generic PA-CF", + "Vzbot/Generic PA-CF" ], "OFQMTRc8": [ "Snapmaker/Snapmaker J1 PETG" @@ -3119,9 +2885,6 @@ "OFQMsFfF": [ "Qidi/QIDI ABS-GF10" ], - "OFQTrLXB": [ - "Qidi/Qidi Generic PLA-CF" - ], "OFQWIKbV": [ "OrcaFilamentLibrary/FilAr PLA Titanio" ], @@ -3134,9 +2897,6 @@ "OFQbjX3s": [ "OrcaFilamentLibrary/FILL3D PETG" ], - "OFQbqeN7": [ - "Qidi/Qidi Generic PA" - ], "OFQdaVZS": [ "Creality/Generic PET-CF", "Elegoo/Generic PET-CF" @@ -3147,8 +2907,8 @@ "OFQiq4fb": [ "Flashforge/Flashforge PVA" ], - "OFQswlnF": [ - "Tiertime/Tiertime Generic PA" + "OFQyyO0l": [ + "Flashforge/Polymaker CoPA" ], "OFR0gODA": [ "SeeMeCNC/SeeMeCNC ABS" @@ -3156,15 +2916,9 @@ "OFR1XLMN": [ "Qidi/QIDI TPU 95A-HF" ], - "OFRDLNM9": [ - "Peopoly/Peopoly Generic PLA" - ], "OFRJ325z": [ "LH/LHS PETG" ], - "OFRPEs5o": [ - "Flashforge/Flashforge Generic ASA" - ], "OFRhBryT": [ "Cubicon/Cubicon PLAi21" ], @@ -3181,11 +2935,6 @@ "OrcaFilamentLibrary/Panchroma PLA Celestial", "Snapmaker/Panchroma PLA Celestial" ], - "OFRiyes1": [ - "Anker/Anker Generic ASA", - "Anker/Anker Generic ASA 0.2 nozzle", - "Anker/Anker Generic ASA 0.25 nozzle" - ], "OFRkjhxK": [ "Volumic/Volumic PVA-BVOH (Performance)" ], @@ -3198,43 +2947,22 @@ "OFRpAZ1P": [ "DeltaMaker/DeltaMaker Brand PLA" ], - "OFRujL0v": [ - "Flashforge/FusRock Generic PET-CF" - ], - "OFRusgEn": [ - "Chuanying/Chuanying Generic PVA" - ], "OFRyOsZj": [ "re3D/re3D PLA" ], "OFRzR5mi": [ "OrcaFilamentLibrary/eSUN ePLA-LW" ], - "OFRzsaDK": [ - "FlyingBear/FlyingBear Generic TPU" - ], "OFS2tn6G": [ "OrcaFilamentLibrary/Fiberon PA612-CF" ], "OFS4jbj3": [ "Eryone/Eryone PA" ], - "OFS8JF3S": [ - "Qidi/Qidi Generic PLA High Speed" - ], "OFS8lTQt": [ "OrcaFilamentLibrary/Panchroma PLA Silk", "Snapmaker/Panchroma PLA Silk" ], - "OFSDFYs4": [ - "Creality/Creality Generic PLA-CF" - ], - "OFSGbf2I": [ - "Anycubic/Anycubic Generic PVA" - ], - "OFSPdsuW": [ - "Tiertime/Tiertime Generic PPA-CF" - ], "OFSStjay": [ "FLSun/FLSun S1 PLA Silk" ], @@ -3254,9 +2982,6 @@ "OFTGHyNC": [ "OrcaFilamentLibrary/Bambu PLA Impact" ], - "OFTKFAZ4": [ - "Tiertime/Tiertime Generic PCTG" - ], "OFTOPcx0": [ "OrcaFilamentLibrary/Eolas Prints TPU Transition" ], @@ -3293,9 +3018,6 @@ "OFTvvox9": [ "Sovol/Sovol SV06 ACE PLA" ], - "OFU0n0zW": [ - "FLSun/FLSun T1 PLA Generic" - ], "OFU1zPxE": [ "Elegoo/Elegoo PLA Galaxy", "OrcaFilamentLibrary/Elegoo PLA Galaxy" @@ -3303,15 +3025,6 @@ "OFU3QXL7": [ "re3D/re3D PC" ], - "OFU3zwPc": [ - "Prusa/Prusa Generic TPU HF" - ], - "OFU5N9jI": [ - "OrcaArena/OrcaArena Generic TPU" - ], - "OFU6fjbi": [ - "Co Print/CoPrint Generic ABS" - ], "OFU7CKZt": [ "Volumic/Volumic ASA Ultra (Performance)" ], @@ -3327,33 +3040,18 @@ "OFUIfGoh": [ "Snapmaker/Snapmaker Dual PET" ], - "OFUScM0D": [ - "Flashforge/FusRock S-Multi" - ], - "OFUWRqwb": [ - "Creality/Creality Generic PA-CF" - ], "OFUYCqtB": [ "InfiMech/InfiMech PLA" ], "OFUaHEO9": [ "Anycubic/Anycubic PEBA 95A" ], - "OFUaVAdj": [ - "Tiertime/Tiertime Generic ASA" - ], "OFUanySo": [ "OrcaFilamentLibrary/Bambu PLA Silk+" ], "OFUmS5z5": [ "Creality/eSUN ASA+" ], - "OFUrStd6": [ - "Ratrig/RatRig Generic PCTG" - ], - "OFUtGagr": [ - "Artillery/Artillery Generic PLA-CF" - ], "OFUyDDNv": [ "Elegoo/Elegoo PC", "OrcaFilamentLibrary/Elegoo PC" @@ -3378,16 +3076,10 @@ "OFVHMFJX": [ "Qidi/QIDI PETG Tough 0.2 nozzle" ], - "OFVKADz5": [ - "Comgrow/Comgrow Generic PLA" - ], "OFVptRxp": [ "BBL/COEX TPE 30D", "OrcaFilamentLibrary/COEX TPE 30D" ], - "OFVqZ2H0": [ - "FLSun/FLSun Generic PC" - ], "OFVtIasg": [ "Eryone/Eryone ASA" ], @@ -3402,15 +3094,9 @@ "OFW8lqnb": [ "Snapmaker/Snapmaker PETG Translucent" ], - "OFW9uIkE": [ - "Tiertime/Tiertime Generic HIPS" - ], "OFWDe7YH": [ "Qidi/QIDI UltraPA" ], - "OFWIr7ZE": [ - "CoLiDo/CoLiDo Generic ABS" - ], "OFWRITFw": [ "Prusa/Prusament rPLA" ], @@ -3420,9 +3106,6 @@ "OFWTRJ1K": [ "OrcaFilamentLibrary/FilAr PLA Bronce" ], - "OFWY6vBh": [ - "Anycubic/Anycubic Generic PC" - ], "OFWYtgCa": [ "Elegoo/Elegoo PLA Wood", "OrcaFilamentLibrary/Elegoo PLA Wood" @@ -3430,19 +3113,26 @@ "OFWa0NiB": [ "Volumic/Volumic NYLON Ultra" ], - "OFWadebJ": [ - "Tiertime/Tiertime Generic PETG-CF" - ], "OFWao3Ic": [ "Creality/Ender-PLA" ], - "OFWbbuRY": [ - "InfiMech/InfiMech Generic ABS" - ], "OFWbdGsC": [ + "Anker/Generic PLA-CF", + "Anycubic/Generic PLA-CF", + "Artillery/Generic PLA-CF", + "Blocks/Generic PLA-CF", "Creality/Generic PLA-CF", "Custom/Generic PLA-CF", - "OrcaFilamentLibrary/Generic PLA-CF" + "FLSun/Generic PLA-CF", + "Flashforge/Generic PLA-CF", + "OrcaArena/Generic PLA-CF", + "OrcaFilamentLibrary/Generic PLA-CF", + "Prusa/Generic PLA-CF", + "Qidi/Generic PLA-CF", + "Ratrig/Generic PLA-CF", + "SecKit/Generic PLA-CF", + "Tiertime/Generic PLA-CF", + "Vzbot/Generic PLA-CF" ], "OFWgFOjn": [ "Snapmaker/Snapmaker PLA Silk" @@ -3450,18 +3140,9 @@ "OFWnSvGu": [ "Flashforge/Flashforge ASA-GF" ], - "OFWof1Ap": [ - "FLSun/FLSun Generic ABS" - ], - "OFWukXja": [ - "Qidi/Qidi Generic TPU 95A" - ], "OFWwF7K7": [ "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" ], - "OFWzr7m0": [ - "Anycubic/Anycubic Generic PETG" - ], "OFX0etlv": [ "re3D/re3D PETG" ], @@ -3469,6 +3150,7 @@ "OrcaFilamentLibrary/Fiberon PA12-CF" ], "OFX2zcrM": [ + "Chuanying/Generic PLA-CF10", "Flashforge/Generic PLA-CF10" ], "OFXCBZTA": [ @@ -3486,12 +3168,6 @@ "OFXTPuqV": [ "OrcaFilamentLibrary/Elas PETG Basic" ], - "OFXXUHSG": [ - "Chuanying/Chuanying Generic PETG-CF10" - ], - "OFXhZ3uY": [ - "OrcaArena/OrcaArena Generic PC" - ], "OFXi59OX": [ "Afinia/Afinia Value ABS" ], @@ -3500,7 +3176,11 @@ ], "OFXkm8q1": [ "Creality/Generic PP-CF", - "OrcaFilamentLibrary/Generic PP-CF" + "OrcaFilamentLibrary/Generic PP-CF", + "Tiertime/Generic PP-CF" + ], + "OFXmv5p0": [ + "Creality/Generic Speed PLA" ], "OFXn3Vd9": [ "Qidi/QIDI Support For PAHT" @@ -3511,14 +3191,6 @@ "OFXuGxvQ": [ "Volumic/Volumic PLA Ultra" ], - "OFXuwtnq": [ - "Co Print/CoPrint Generic PETG" - ], - "OFXyyfX6": [ - "Anker/Anker Generic PLA Silk", - "Anker/Anker Generic PLA Silk 0.2 nozzle", - "Anker/Anker Generic PLA Silk 0.25 nozzle" - ], "OFXz7Mwx": [ "Elegoo/Elegoo PLA Silk", "OrcaFilamentLibrary/Elegoo PLA Silk" @@ -3536,15 +3208,32 @@ "Snapmaker/Snapmaker TPU 90A" ], "OFY9muEs": [ + "Anker/Generic ABS", "Anycubic/Generic ABS", + "Artillery/Generic ABS", + "Blocks/Generic ABS", + "Chuanying/Generic ABS", + "Co Print/Generic ABS", + "CoLiDo/Generic ABS", + "Comgrow/Generic ABS", "Creality/Generic ABS", "Custom/Generic ABS", "Elegoo/Generic ABS", + "FLSun/Generic ABS", "Flashforge/Generic ABS", + "FlyingBear/Generic ABS", + "InfiMech/Generic ABS", + "OrcaArena/Generic ABS", "OrcaFilamentLibrary/Generic ABS", + "Peopoly/Generic ABS", + "Prusa/Generic ABS", "Qidi/Generic ABS", "RH3D/Generic ABS", + "Ratrig/Generic ABS", + "SecKit/Generic ABS", "Sovol/Generic ABS", + "Tiertime/Generic ABS", + "Vzbot/Generic ABS", "Z-Bolt/Generic ABS" ], "OFYEtXuk": [ @@ -3554,54 +3243,50 @@ "OrcaFilamentLibrary/PolyLite Dual PLA", "Snapmaker/PolyLite Dual PLA" ], - "OFYHzKyS": [ - "Vzbot/Vzbot Generic PLA-CF" - ], - "OFYPdJ7t": [ - "Creality/Creality Generic ABS" - ], "OFYPdQJh": [ + "Anker/Generic PETG", "Anycubic/Generic PETG", + "Artillery/Generic PETG", + "Blocks/Generic PETG", + "CONSTRUCT3D/Generic PETG", + "Chuanying/Generic PETG", + "Co Print/Generic PETG", + "CoLiDo/Generic PETG", + "Comgrow/Generic PETG", "Creality/Generic PETG", "Custom/Generic PETG", + "DeltaMaker/Generic PETG", "Elegoo/Generic PETG", + "FLSun/Generic PETG", "Flashforge/Generic PETG", + "FlyingBear/Generic PETG", + "Ginger Additive/Generic PETG", + "InfiMech/Generic PETG", "LONGER/Generic PETG", + "OrcaArena/Generic PETG", "OrcaFilamentLibrary/Generic PETG", + "Peopoly/Generic PETG", + "Prusa/Generic PETG", "Qidi/Generic PETG", "RH3D/Generic PETG", + "Ratrig/Generic PETG", + "SecKit/Generic PETG", "Sovol/Generic PETG", + "Tiertime/Generic PETG", + "Vzbot/Generic PETG", "Z-Bolt/Generic PETG" ], "OFYd5uS3": [], "OFYezc6s": [ "FlyingBear/FlyingBear TPU" ], - "OFYl0c8v": [ - "Flashforge/Flashforge Generic HIPS" - ], - "OFYlZMmy": [ - "Chuanying/Chuanying Generic TPU" - ], - "OFYlthXI": [ - "Flashforge/Flashforge Generic PLA-CF" - ], - "OFYtS9zg": [ - "Flashforge/FusRock PAHT-CF" - ], "OFYuowge": [ "FlyingBear/Other ABS", "InfiMech/Other ABS" ], - "OFYvSO1W": [ - "Flashforge/Flashforge Generic PLA-Silk" - ], "OFZ0mR5b": [ "Anycubic/Anycubic PLA-CF" ], - "OFZ1hANN": [ - "Flashforge/FusRock Generic NexPA-CF25" - ], "OFZ2LuAi": [ "Wanhao France/YUMI PLA Bowden" ], @@ -3611,26 +3296,18 @@ "OFZ4QbfK": [ "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" ], - "OFZ4fTO8": [ - "CONSTRUCT3D/C1 Generic High Flow PETG" - ], - "OFZHgTVI": [ - "Flashforge/Flashforge Generic PETG" - ], "OFZLtWYs": [ "Qidi/QIDI ABS-GF25" ], "OFZOuWrO": [ "Qidi/QIDI PPS-CF" ], - "OFZPlCck": [ - "Chuanying/Chuanying Generic ABS" - ], "OFZivHGL": [ "Snapmaker/Snapmaker Dual PLA" ], - "OFZsChIG": [ - "Qidi/Qidi Generic TPU" + "OFZr862X": [ + "Creality/Generic PLA HF", + "Prusa/Generic PLA HF" ], "OFZtOQtl": [ "Flashforge/Flashforge PA6-CF" @@ -3644,6 +3321,9 @@ "OFaDOaNt": [ "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" ], + "OFaDsTE0": [ + "Flashforge/Polymaker S1" + ], "OFaEesXQ": [ "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" ], @@ -3665,9 +3345,6 @@ "OFaRjiIm": [ "SeeMeCNC/SeeMeCNC PETG-CF" ], - "OFaU2JxD": [ - "Dremel/Dremel Generic PLA" - ], "OFaYz8iE": [ "OrcaFilamentLibrary/Elas PLA Pro" ], @@ -3680,9 +3357,6 @@ "OFafocjw": [ "Cubicon/Cubicon ABS" ], - "OFahE7HP": [ - "Blocks/Blocks Generic PC" - ], "OFausr3F": [ "OrcaFilamentLibrary/FilAr PLA-mate Rosa" ], @@ -3695,30 +3369,21 @@ "OFbP8zEO": [ "OrcaFilamentLibrary/Eolas Prints PLA Silk" ], + "OFbPuPKY": [ + "Prusa/Generic FLEX" + ], "OFbSChKb": [ "SeeMeCNC/SeeMeCNC PLA" ], "OFbSZBOi": [ "InfiMech/InfiMech TPU Basic" ], - "OFbeeFkl": [ - "OrcaArena/OrcaArena Generic PLA Silk" - ], - "OFbenYUK": [ - "Prusa/Prusa Generic TPU" - ], "OFbh7HcA": [ "Eryone/Eryone PP-CF" ], "OFbjtPQy": [ "FLSun/FLSun T1 ASA" ], - "OFbt04e0": [ - "DeltaMaker/DeltaMaker Generic TPU" - ], - "OFc0xiCz": [ - "InfiMech/InfiMech Generic TPU" - ], "OFc3xdm9": [ "OrcaFilamentLibrary/Overture PLA", "Qidi/Overture PLA" @@ -3729,9 +3394,6 @@ "OFcBJQcC": [ "Snapmaker/Snapmaker Dual TPU High-Flow" ], - "OFcCzEkS": [ - "Prusa/Prusa Generic PVA" - ], "OFcJ7AKd": [ "Sovol/Sovol SV08 PLA" ], @@ -3741,6 +3403,9 @@ "OFcKtw8W": [ "Volumic/PA6 CF20 (Performance)" ], + "OFcVLpNA": [ + "Flashforge/FusRock PAHT-GF" + ], "OFcdqaWI": [ "Sovol/Sovol Zero PC" ], @@ -3751,9 +3416,6 @@ "OFcogyWl": [ "WonderMaker/WonderMaker PLA Metal" ], - "OFctbSkL": [ - "Blocks/Blocks Generic ASA-CF" - ], "OFctg8r1": [ "CoLiDo/CoLiDo PLA+" ], @@ -3766,10 +3428,8 @@ "Snapmaker/Fiberon PETG-ESD" ], "OFd0Fv0k": [ - "OrcaFilamentLibrary/Generic PE-CF" - ], - "OFd10YeG": [ - "Ratrig/RatRig Generic PLA" + "OrcaFilamentLibrary/Generic PE-CF", + "Tiertime/Generic PE-CF" ], "OFd2vX0G": [ "BBL/COEX PLA PRIME", @@ -3782,26 +3442,10 @@ "OFdD5Wbu": [ "Snapmaker/Snapmaker J1 PLA-CF" ], - "OFdEIwxy": [ - "Flashforge/Flashforge Generic PLA-CF10" - ], - "OFdHsxB4": [ - "TwoTrees/TwoTrees Generic 95A TPU" - ], "OFdI4zMo": [], - "OFdLdGgJ": [ - "OrcaArena/OrcaArena Generic PVA" - ], - "OFdOWhCa": [ - "Ratrig/RatRig Generic PC" - ], "OFdXVjGZ": [ "Tiertime/Tiertime PC" ], - "OFdXgp2K": [ - "Chuanying/Chuanying Generic HS PLA", - "Chuanying/Chuanying HS PLA" - ], "OFdb8YNz": [ "OrcaFilamentLibrary/FilAr PLA Verde Manzana" ], @@ -3811,9 +3455,6 @@ "OFdkWDiy": [ "Cubicon/Cubicon PLAi21" ], - "OFdlGycb": [ - "CoLiDo/CoLiDo Generic TPU" - ], "OFdrYBmI": [ "Tiertime/Tiertime ASA" ], @@ -3832,9 +3473,6 @@ "OFe7Sx5B": [ "Sovol/Sovol SV06 ACE PETG" ], - "OFe8UJXH": [ - "Creality/Creality Generic PC" - ], "OFe8tuNb": [ "Tiertime/Tiertime PA6-CF" ], @@ -3847,19 +3485,9 @@ "OFeCJqxx": [ "Qidi/QIDI ABS Rapido Metal" ], - "OFeDfaCh": [ - "CoLiDo/CoLiDo Generic PLA" - ], "OFeIyhUx": [ "Anycubic/Anycubic PC-CF" ], - "OFeJjoKF": [ - "FLSun/FLSun Generic PA" - ], - "OFeK2vkS": [ - "Chuanying/Chuanying Generic PLA-Silk", - "Chuanying/Chuanying PLA-SILK" - ], "OFeTATC7": [ "Snapmaker/Snapmaker J1 Breakaway" ], @@ -3879,13 +3507,15 @@ "WonderMaker/WonderMaker PLA Matte" ], "OFesA6rF": [ + "Anker/Generic PLA Silk", + "Creality/Generic PLA Silk", "Flashforge/Generic PLA Silk", + "OrcaArena/Generic PLA Silk", "OrcaFilamentLibrary/Generic PLA Silk", + "Prusa/Generic PLA Silk", "Qidi/Generic PLA Silk", - "Sovol/Generic PLA Silk" - ], - "OFetENFF": [ - "OrcaArena/OrcaArena Generic ABS" + "Sovol/Generic PLA Silk", + "Tiertime/Generic PLA Silk" ], "OFexaZU2": [ "OrcaFilamentLibrary/FilAr PLA Manteca" @@ -3926,18 +3556,12 @@ "OFfYHK5z": [ "Qidi/Polymaker PLA-HT" ], - "OFfZ0lTS": [ - "Qidi/Qidi Generic PETG-CF" - ], "OFfZcoKr": [ "OrcaFilamentLibrary/FilAr PLA-mate Piel" ], "OFfb10SK": [ "Artillery/Artillery PC" ], - "OFfegVpA": [ - "Flashforge/Polymaker Generic S1" - ], "OFfmHUkQ": [ "Snapmaker/Snapmaker Dual Breakaway" ], @@ -3965,12 +3589,6 @@ "OFfuih8e": [ "Creality/Creality Silk PLA" ], - "OFfxFQf9": [ - "Chuanying/Chuanying Generic PETG" - ], - "OFfznI0Q": [ - "Prusa/Prusa Generic PA-CF" - ], "OFg3cWVt": [ "Snapmaker/Snapmaker Dual PLA Metal" ], @@ -3981,10 +3599,21 @@ "OrcaFilamentLibrary/FILL3D PPCF" ], "OFg8ndtj": [ + "Anker/Generic PA", + "Anycubic/Generic PA", + "Blocks/Generic PA", "Creality/Generic PA", "Custom/Generic PA", "Elegoo/Generic PA", + "FLSun/Generic PA", + "OrcaArena/Generic PA", "OrcaFilamentLibrary/Generic PA", + "Prusa/Generic PA", + "Qidi/Generic PA", + "Ratrig/Generic PA", + "SecKit/Generic PA", + "Tiertime/Generic PA", + "Vzbot/Generic PA", "Z-Bolt/Generic PA" ], "OFgHh8ly": [ @@ -3993,18 +3622,9 @@ "OFgMWJ8T": [ "OrcaFilamentLibrary/FilAr PLA Negro Azabache" ], - "OFgSEwOZ": [ - "OrcaArena/OrcaArena Generic PETG" - ], - "OFgSPtDn": [ - "MagicMaker/MM Generic PEEK" - ], "OFgSbX7E": [ "Volumic/Volumic PC (Performance)" ], - "OFgVJhVt": [ - "Tiertime/Tiertime Generic PLA-CF" - ], "OFgVQkqW": [ "Cubicon/Cubicon ABSk" ], @@ -4012,13 +3632,30 @@ "Artillery/Artillery ABS" ], "OFgbpcy9": [ + "Anker/Generic TPU", "Anycubic/Generic TPU", + "Artillery/Generic TPU", + "Blocks/Generic TPU", + "Chuanying/Generic TPU", + "Co Print/Generic TPU", + "CoLiDo/Generic TPU", "Creality/Generic TPU", "Custom/Generic TPU", + "DeltaMaker/Generic TPU", + "FLSun/Generic TPU", "Flashforge/Generic TPU", + "FlyingBear/Generic TPU", + "InfiMech/Generic TPU", + "OrcaArena/Generic TPU", "OrcaFilamentLibrary/Generic TPU", + "Prusa/Generic TPU", + "Qidi/Generic TPU", "RH3D/Generic TPU", - "Sovol/Generic TPU" + "Ratrig/Generic TPU", + "SecKit/Generic TPU", + "Sovol/Generic TPU", + "Tiertime/Generic TPU", + "Vzbot/Generic TPU" ], "OFgcryz4": [ "Ratrig/RatRig BigNozzle ASA" @@ -4044,11 +3681,6 @@ "OFgptDSf": [ "OrcaArena/Arena PLA Matte" ], - "OFgvOmM2": [ - "Anker/Anker Generic PETG", - "Anker/Anker Generic PETG 0.2 nozzle", - "Anker/Anker Generic PETG 0.25 nozzle" - ], "OFgyPlwU": [ "Snapmaker/Snapmaker TPU High-Flow" ], @@ -4072,7 +3704,8 @@ "Snapmaker/Snapmaker PLA-CF" ], "OFhQfUQY": [ - "OrcaFilamentLibrary/Generic SBS" + "OrcaFilamentLibrary/Generic SBS", + "Tiertime/Generic SBS" ], "OFhTPf6L": [ "Creality/Generic PA6-CF", @@ -4097,9 +3730,6 @@ "Elegoo/Elegoo PLA Sparkle", "OrcaFilamentLibrary/Elegoo PLA Sparkle" ], - "OFhcrFw9": [ - "Creality/Creality Generic TPU" - ], "OFhfd722": [ "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" ], @@ -4130,7 +3760,10 @@ "Creality/eSUN PLA-LW" ], "OFi6PfUM": [ - "Creality/Generic PLA-Silk" + "Chuanying/Chuanying PLA-SILK", + "Chuanying/Generic PLA-Silk", + "Creality/Generic PLA-Silk", + "Flashforge/Generic PLA-Silk" ], "OFi7Bf0F": [ "Flashforge/Flashforge ABS-CF" @@ -4138,24 +3771,15 @@ "OFi90KlM": [ "Volumic/Volumic NYLON Ultra (Performance)" ], - "OFiCHnso": [ - "Prusa/Prusa Generic PLA" - ], "OFiDpM1B": [ "OrcaFilamentLibrary/FilAr PLA-mate Bordo" ], "OFiEz2XI": [ "Cubicon/Cubicon PA-CF" ], - "OFiUSDih": [ - "Blocks/Blocks Generic PA" - ], "OFiWaoqD": [ "OrcaFilamentLibrary/DREMC PPA-CF" ], - "OFifxPW1": [ - "DeltaMaker/DeltaMaker Generic PLA" - ], "OFilAA3b": [ "Eryone/Eryone PLA-CF" ], @@ -4168,9 +3792,6 @@ "OFin64Qg": [ "Creality/Generic Support for PLA" ], - "OFiorRtJ": [ - "Blocks/Blocks Generic PVA" - ], "OFitS8al": [ "Snapmaker/PolyLite PLA Neon" ], @@ -4227,12 +3848,12 @@ "OFjoAe0R": [ "Qidi/Qidi PLA-CF" ], - "OFjoIVZ6": [ - "FlyingBear/FlyingBear Generic PA-CF" - ], "OFjorDcx": [ "OrcaFilamentLibrary/FDplast ABS" ], + "OFjt8dDO": [ + "Flashforge/FusRock NexPA-CF25" + ], "OFjt9en1": [ "OrcaFilamentLibrary/Generic CoPE" ], @@ -4258,14 +3879,11 @@ "OFkR8E2c": [ "Prusa/Prusament PETG" ], - "OFkUaDnU": [ - "Tiertime/Tiertime Generic PE-CF" - ], "OFkWaWRo": [ "Sovol/Sovol SV06 Plus ACE TPU" ], - "OFkYkQGO": [ - "Tiertime/Tiertime Generic PP-GF" + "OFkf1HHw": [ + "Flashforge/Generic PLA-SILK" ], "OFkhhUS0": [ "Elegoo/Elegoo Rapid PLA+", @@ -4296,12 +3914,6 @@ "OFkzr35f": [ "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" ], - "OFl2SXmv": [ - "Prusa/Prusa Generic FLEX" - ], - "OFl4ItvQ": [ - "Prusa/Prusa Generic PLA HF" - ], "OFl7nOAf": [ "Sovol/Sovol SV06 Plus ACE PETG" ], @@ -4311,15 +3923,9 @@ "OFlIsW6f": [ "Snapmaker/Snapmaker Dual PLA Matte" ], - "OFlLmUeV": [ - "Ginger Additive/Ginger Generic PLA" - ], "OFlN6DL1": [ "Qidi/QIDI PA-Ultra" ], - "OFlNWVr5": [ - "Flashforge/Flashforge Generic PETG-CF10" - ], "OFlP3KWq": [ "Elegoo/Elegoo PETG HF", "OrcaFilamentLibrary/Elegoo PETG HF" @@ -4348,9 +3954,6 @@ "OrcaFilamentLibrary/Polymaker HT-PLA-GF", "Snapmaker/Polymaker HT-PLA-GF" ], - "OFlx52rn": [ - "Ratrig/RatRig Generic PLA-CF" - ], "OFm06H6V": [ "Elegoo/Elegoo PLA Basic", "OrcaFilamentLibrary/Elegoo PLA Basic" @@ -4380,12 +3983,10 @@ "Flashforge/Flashforge HS PLA Burnt Ti" ], "OFmY0l6t": [ + "Creality/Generic PLA Matte", "Elegoo/Generic PLA Matte", "OrcaFilamentLibrary/Generic PLA Matte" ], - "OFma52eS": [ - "Blocks/Blocks Generic ABS" - ], "OFma5TXH": [ "Qidi/QIDI ABS Odorless" ], @@ -4402,29 +4003,23 @@ "Elegoo/Elegoo TPU 95A", "OrcaFilamentLibrary/Elegoo TPU 95A" ], - "OFmhWhEf": [ - "Creality/Creality HF Generic PLA" - ], "OFmjN2bc": [ "Anycubic/Anycubic PLA" ], "OFmn9NZL": [ "OrcaFilamentLibrary/FusRock ABS-GF" ], - "OFmnJNqY": [ - "OrcaArena/OrcaArena Generic PA" - ], "OFmpMwxS": [ + "Creality/Generic PLA High Speed", "Flashforge/Generic PLA High Speed", - "OrcaFilamentLibrary/Generic PLA High Speed" + "OrcaFilamentLibrary/Generic PLA High Speed", + "Qidi/Generic PLA High Speed", + "Tiertime/Generic PLA High Speed" ], "OFmveLWz": [ "Elegoo/Elegoo PETG-GF", "OrcaFilamentLibrary/Elegoo PETG-GF" ], - "OFmzftED": [ - "OrcaArena/OrcaArena Generic ASA" - ], "OFn1QaY3": [ "Elegoo/Elegoo PLA Translucent2", "OrcaFilamentLibrary/Elegoo PLA Translucent2" @@ -4447,6 +4042,9 @@ "OFnSeLHk": [ "CoLiDo/CoLiDo PLA Silk" ], + "OFnT7Qpb": [ + "Prusa/Generic TPU HF" + ], "OFnXrkhA": [ "InfiMech/InfiMech PA-CF" ], @@ -4459,26 +4057,15 @@ "OFncpm7O": [ "WonderMaker/WonderMaker PLA Silk" ], - "OFndmfJ1": [ - "Anker/Anker Generic PLA", - "Anker/Anker Generic PLA 0.2 nozzle", - "Anker/Anker Generic PLA 0.25 nozzle" - ], "OFneOFWe": [ "CoLiDo/CoLiDo ABS" ], "OFnejEt4": [ "OrcaFilamentLibrary/FilAr PETG Cian" ], - "OFnfBvn5": [ - "Artillery/Artillery Generic PLA" - ], "OFngcE81": [ "LH/LHS TPU Foamy 78A" ], - "OFnh79eM": [ - "SecKit/SecKit Generic ABS" - ], "OFniMuTN": [ "OrcaFilamentLibrary/Bambu PA6-CF" ], @@ -4491,7 +4078,8 @@ "OFo2UF2C": [ "Creality/Generic BVOH", "Flashforge/Generic BVOH", - "OrcaFilamentLibrary/Generic BVOH" + "OrcaFilamentLibrary/Generic BVOH", + "Tiertime/Generic BVOH" ], "OFo6n2pB": [ "Anycubic/Anycubic PETG" @@ -4499,25 +4087,18 @@ "OFoBTKmn": [ "Cubicon/Cubicon PETG" ], - "OFoDgVnY": [ - "FLSun/FLSun S1 PLA Generic" - ], - "OFoJcr46": [ - "Prusa/Prusa Generic ASA" - ], "OFoSknDB": [ "OrcaFilamentLibrary/FILL3D PLA Turbo" ], - "OFoT8F7Y": [ - "Prusa/Prusa Generic PVA HF" - ], - "OFoVZg32": [ - "SecKit/SecKit Generic TPU" - ], "OFoYSJKi": [ + "Anker/Generic PETG-CF", "Creality/Generic PETG-CF", "Elegoo/Generic PETG-CF", - "OrcaFilamentLibrary/Generic PETG-CF" + "Flashforge/Generic PETG-CF", + "OrcaArena/Generic PETG-CF", + "OrcaFilamentLibrary/Generic PETG-CF", + "Qidi/Generic PETG-CF", + "Tiertime/Generic PETG-CF" ], "OFobDOW5": [ "Elegoo/Elegoo ASA", @@ -4527,9 +4108,6 @@ "BBL/AliZ PETG", "OrcaFilamentLibrary/AliZ PETG" ], - "OFodPDxO": [ - "Tiertime/Tiertime Generic PLA High Speed" - ], "OFogbnCb": [ "Flashforge/FlashForge PPS-CF" ], @@ -4551,15 +4129,9 @@ "OFp57RRC": [ "Qidi/QIDI PPS-GF" ], - "OFp8gtPH": [ - "Creality/Creality Generic PLA Silk" - ], "OFp9wdmf": [ "Eryone/Eryone PA-CF" ], - "OFpAaY6w": [ - "Creality/Creality Generic ASA" - ], "OFpBV2Ma": [ "Qidi/Tinmorry PETG-ECO" ], @@ -4576,16 +4148,10 @@ "OFpPJSHE": [ "Peopoly/Peopoly Lancer PETG-C" ], - "OFpSYJLI": [ - "Creality/Creality Generic PLA Matte" - ], "OFpW4gdi": [ "Flashforge/SUNLU PLA Matte", "OrcaFilamentLibrary/SUNLU PLA Matte" ], - "OFptvi3F": [ - "Tiertime/Tiertime Generic PPA-GF" - ], "OFpu74Qe": [ "Snapmaker/Snapmaker PLA Eco" ], @@ -4595,14 +4161,12 @@ "OFq0TY7C": [ "Flashforge/Flashforge ASA-CF" ], - "OFq5QANf": [ - "Prusa/Prusa Generic PC HF" - ], "OFq8gfS4": [ "OrcaFilamentLibrary/FilAr PETG Negro Azabache" ], "OFq9svOz": [ - "Creality/Generic PPS" + "Creality/Generic PPS", + "Tiertime/Generic PPS" ], "OFqGRZyH": [ "OrcaFilamentLibrary/Numakers PLA+" @@ -4611,15 +4175,6 @@ "Creality/eSUN PLA+", "OrcaFilamentLibrary/eSUN PLA+" ], - "OFqKmLJe": [ - "Creality/Creality Generic PETG-CF" - ], - "OFqOk9Ww": [ - "Peopoly/Peopoly Generic ABS" - ], - "OFqS8fzK": [ - "SecKit/SecKit Generic PETG" - ], "OFqcL5UF": [ "Qidi/QIDI Support For PET/PA" ], @@ -4645,41 +4200,23 @@ "OFrM4hdm": [ "Creality/CR-PLA Carbon" ], - "OFrO2zyn": [ - "Creality/Creality Generic PLA High Speed" - ], "OFrOh600": [ "Creality/Panchroma PLA Matte", "OrcaFilamentLibrary/Panchroma PLA Matte", "Snapmaker/Panchroma PLA Matte" ], - "OFrQqCwL": [ - "InfiMech/InfiMech Generic PLA" - ], "OFrdZ0cK": [ "Creality/eSUN PETG+HS" ], - "OFrgGex8": [ - "Blocks/Blocks Generic PETG" - ], - "OFrh4bBH": [ - "SecKit/SecKit Generic ASA" - ], "OFrjacXf": [ "Flashforge/Flashforge PET-CF" ], - "OFrnJJEa": [ - "Tiertime/Tiertime Generic EVA" - ], "OFrnkURQ": [ "Flashforge/Flashforge PLA Metal" ], "OFrr67nG": [ "OrcaArena/Arena PC" ], - "OFrrMLDw": [ - "Flashforge/Flashforge Generic PLA-SILK" - ], "OFryjl35": [ "Elegoo/Elegoo ASA-CF", "OrcaFilamentLibrary/Elegoo ASA-CF" @@ -4687,34 +4224,25 @@ "OFs1sNLz": [ "Chuanying/Chuanying ABS" ], - "OFs2ReMr": [ - "InfiMech/InfiMech Generic PETG" - ], "OFsB2lxm": [ "Elegoo/Elegoo PLA Matte", "OrcaFilamentLibrary/Elegoo PLA Matte" ], - "OFsCbVbN": [ - "Anker/Anker Generic PVA" - ], "OFsD974q": [ "Volumic/Volumic PETG Ultra (Performance)" ], "OFsDXRpS": [ "OrcaFilamentLibrary/FilAr PLA Piel" ], - "OFsF96Gt": [ - "FLSun/FLSun Generic PLA-CF" - ], "OFsFo7ms": [ "Volumic/Volumic PP Ultra" ], "OFsFon5l": [ + "Chuanying/Generic HIPS", "Creality/Generic HIPS", - "OrcaFilamentLibrary/Generic HIPS" - ], - "OFsGqI4y": [ - "Ginger Additive/Ginger Generic PETG" + "Flashforge/Generic HIPS", + "OrcaFilamentLibrary/Generic HIPS", + "Tiertime/Generic HIPS" ], "OFsHSVZc": [ "OrcaFilamentLibrary/Bambu Support W" @@ -4730,24 +4258,16 @@ "OrcaFilamentLibrary/Panchroma PLA", "Snapmaker/Panchroma PLA" ], - "OFsXOMoX": [ - "Qidi/Qidi Generic PLA+" - ], "OFsXQXbs": [ "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" ], - "OFsoQ12i": [ - "Comgrow/Comgrow Generic ABS" + "OFsijjtH": [ + "OrcaFilamentLibrary/Generic PP-GF", + "Tiertime/Generic PP-GF" ], "OFsoykbm": [ "OrcaFilamentLibrary/DREMC PA6-CF" ], - "OFsxRSwr": [ - "Ratrig/RatRig Generic PVA" - ], - "OFsxlLdo": [ - "Qidi/Qidi Generic ASA" - ], "OFt0JbR7": [ "Snapmaker/Snapmaker J1 PLA Metal" ], @@ -4773,15 +4293,9 @@ "OrcaArena/Arena PAHT-CF" ], "OFtOoWIj": [], - "OFtP1rqJ": [ - "FLSun/FLSun Generic PVA" - ], "OFtRn8X8": [ "OrcaFilamentLibrary/FDplast SBS" ], - "OFtTHNTj": [ - "Flashforge/Flashforge Generic PLA" - ], "OFtTYl9Q": [], "OFtefokm": [ "OrcaFilamentLibrary/FilAr PLA-mate Blanco" @@ -4796,9 +4310,6 @@ "OFtr8eZw": [ "OrcaFilamentLibrary/FDplast PLA" ], - "OFtsVp4v": [ - "SecKit/SecKit Generic PA-CF" - ], "OFtudokz": [ "OrcaFilamentLibrary/Eolas Prints PLA Premium" ], @@ -4816,10 +4327,9 @@ ], "OFu1evlr": [ "Creality/Generic PCTG", - "OrcaFilamentLibrary/Generic PCTG" - ], - "OFu79SUH": [ - "Qidi/Qidi Generic PLA" + "OrcaFilamentLibrary/Generic PCTG", + "Ratrig/Generic PCTG", + "Tiertime/Generic PCTG" ], "OFuFqYyG": [ "Flashforge/Flashforge PAHT-CF" @@ -4833,9 +4343,6 @@ "OFuO0cAP": [ "OrcaArena/Arena PETG-CF" ], - "OFuSwKgm": [ - "Tiertime/Tiertime Generic PLA" - ], "OFuUJyRx": [ "FLSun/FLSun T1 PLA Silk" ], @@ -4865,9 +4372,6 @@ "OFulOdT2": [ "Flashforge/Generic TPU 85A" ], - "OFupq0tY": [ - "Blocks/Blocks Generic PLA-CF" - ], "OFurdQxc": [ "OrcaFilamentLibrary/FilAr PETG Magenta" ], @@ -4877,15 +4381,9 @@ "OFuxH0Uz": [ "Volumic/Volumic FLEX93 Ultra" ], - "OFv4VZCd": [ - "Qidi/Qidi Generic ABS" - ], "OFvDbkFq": [ "Prusa/Prusament PC Blend" ], - "OFvGc67v": [ - "Prusa/Prusa Generic ABS" - ], "OFvKUnLh": [ "OrcaFilamentLibrary/Bambu TPU 95A HF" ], @@ -4895,9 +4393,6 @@ "OFvPPMxL": [ "OrcaFilamentLibrary/FilAr PLA Verde FilAr" ], - "OFvPomQf": [ - "Tiertime/Tiertime Generic PPS" - ], "OFvTVZc3": [ "BBL/COEX PETG", "OrcaFilamentLibrary/COEX PETG" @@ -4921,6 +4416,12 @@ "OFvxIS9g": [ "Snapmaker/Fiberon PA12-CF10" ], + "OFvxghTE": [ + "Chuanying/Chuanying HS PLA", + "Chuanying/Generic HS PLA", + "Flashforge/Generic HS PLA", + "TwoTrees/Generic HS PLA" + ], "OFvyB0Bz": [ "Snapmaker/PolyLite PLA Galaxy" ], @@ -4931,9 +4432,6 @@ "OFwLBAGf": [ "Qidi/HATCHBOX ABS" ], - "OFwMFLAm": [ - "Artillery/Artillery Generic ABS" - ], "OFwPrlCM": [ "OrcaFilamentLibrary/Bambu PETG Translucent" ], @@ -4953,22 +4451,16 @@ "OFwhLMs4": [ "Snapmaker/Snapmaker PLA SnapSpeed" ], - "OFwpkvqf": [ - "OrcaArena/OrcaArena Generic PETG-CF" - ], "OFwu7IAG": [ "BBL/COEX PCTG PRIME", "OrcaFilamentLibrary/COEX PCTG PRIME" ], - "OFwxpmHM": [ - "Flashforge/Polymaker Generic CoPA" + "OFwwAQnA": [ + "Prusa/Generic PC HF" ], "OFwyt1xt": [ "Eryone/Eryone ASA-CF" ], - "OFx0ZzFV": [ - "OrcaArena/OrcaArena Generic PLA-CF" - ], "OFx8Lmsd": [ "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" ], @@ -4988,9 +4480,6 @@ "Elegoo/Elegoo ABS", "OrcaFilamentLibrary/Elegoo ABS" ], - "OFxTMg1d": [ - "FlyingBear/FlyingBear Generic PC" - ], "OFxUwUeW": [ "Flashforge/SUNLU PLA Marble", "OrcaFilamentLibrary/SUNLU PLA Marble" @@ -5001,12 +4490,6 @@ "OFxe4rXr": [ "Snapmaker/PolyTerra PLA Marble" ], - "OFxg7n2G": [ - "Ratrig/RatRig Generic PETG" - ], - "OFxvKuYW": [ - "Tiertime/Tiertime Generic PHA" - ], "OFy02QHU": [ "Snapmaker/PolyLite PLA Translucent" ], @@ -5019,27 +4502,18 @@ "OFy48TOp": [ "Flashforge/Generic TPU-95A" ], - "OFy4ajVZ": [ - "Qidi/Qidi Generic PLA Silk" - ], "OFy8tYJE": [ "Cubicon/Cubicon ABS-A100" ], "OFyCToOV": [ "Sovol/Sovol SV08 TPU" ], - "OFyFRojy": [ - "Ratrig/RatRig Generic ABS" - ], "OFyFyLIp": [ "SeeMeCNC/SeeMeCNC TPU" ], "OFyHgT60": [ "OrcaArena/Arena PLA Sparkle" ], - "OFyK5Lt9": [ - "Artillery/Artillery Generic PETG" - ], "OFyLWVF3": [ "Creality/Generic PETG-GF" ], @@ -5059,9 +4533,6 @@ "OFybzvQN": [ "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" ], - "OFyeSq8A": [ - "Prusa/Prusa Generic ABS HF" - ], "OFyhjiNs": [ "Snapmaker/Snapmaker PVA" ], @@ -5087,11 +4558,8 @@ "BBL/AliZ PLA", "OrcaFilamentLibrary/AliZ PLA" ], - "OFyySVby": [ - "SecKit/SecKit Generic PVA" - ], - "OFz3q5Xz": [ - "CONSTRUCT3D/C1 Generic PETG" + "OFz5oHgf": [ + "MagicMaker/Generic PEEK" ], "OFzAWsca": [ "Qidi/Qidi TPU 95A-HF" @@ -5099,12 +4567,12 @@ "OFzB4uOs": [ "Sovol/Sovol Zero PLA Basic HS Nozzle" ], + "OFzRtFM9": [ + "Prusa/Generic ASA HF" + ], "OFzS7zt4": [ "Anycubic/Anycubic PA" ], - "OFzXURfo": [ - "FlyingBear/FlyingBear Generic PETG" - ], "OFzY7N3Z": [ "Artillery/Artillery PLA" ], @@ -5112,6 +4580,9 @@ "OFztQ7rO": [ "LH/LHS ABS" ], + "OFzwA5Z9": [ + "Flashforge/FusRock PET-GF" + ], "OFzyIxba": [ "OrcaFilamentLibrary/Bambu PVA" ], @@ -5144,16 +4615,6 @@ "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", @@ -5265,10 +4726,20 @@ "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", "Anycubic/Generic ABS @Anycubic Kobra 3 0.4 nozzle", + "Anycubic/Generic ASA @Anycubic", + "Anycubic/Generic PA @Anycubic", + "Anycubic/Generic PA-CF @Anycubic", + "Anycubic/Generic PC @Anycubic", + "Anycubic/Generic PETG @Anycubic", "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 PLA @Anycubic", + "Anycubic/Generic PLA-CF @Anycubic", + "Anycubic/Generic PVA @Anycubic", + "Anycubic/Generic TPU @Anycubic", "Anycubic/Generic TPU @Anycubic Kobra 3 0.4 nozzle", "Anycubic/Panchroma PLA @Anycubic Kobra S1", "Anycubic/Polymaker PLA Pro @Anycubic Kobra S1", @@ -5282,12 +4753,6 @@ "Artillery/Artillery ASA @Artillery M1 Pro 0.4 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 PA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", @@ -5334,6 +4799,12 @@ "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery TPU @Artillery M1 Pro 0.6 nozzle", "Artillery/Artillery TPU @Artillery M1 Pro 0.8 nozzle", + "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", "BBL/Generic SBS", "BBL/addnorth ABS rABS", "BBL/addnorth PA Adura", @@ -5362,54 +4833,54 @@ "BBL/addnorth TPU EasyFlex", "BBL/addnorth TPU Pro Matte 85A", "BBL/addnorth TPU Pro Matte 95A", - "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", + "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 @Blocks", + "CONSTRUCT3D/Generic High Flow PETG @C1", + "CONSTRUCT3D/Generic PETG @C1", + "CONSTRUCT3D/Generic PLA @C1", "Chuanying/Chuanying ABS @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 PETG @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", + "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", + "Co Print/Generic ABS @CoPrint", + "Co Print/Generic PETG @CoPrint", + "Co Print/Generic PLA @CoPrint", + "Co Print/Generic TPU @CoPrint", "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", + "CoLiDo/Generic ABS @CoLiDo DIY 4.0", + "CoLiDo/Generic ABS @CoLiDo X16", + "CoLiDo/Generic PETG @CoLiDo DIY 4.0", + "CoLiDo/Generic PETG @CoLiDo X16", + "CoLiDo/Generic PLA @CoLiDo DIY 4.0", + "CoLiDo/Generic PLA @CoLiDo X16", + "CoLiDo/Generic TPU @CoLiDo DIY 4.0", + "CoLiDo/Generic TPU @CoLiDo X16", "Comgrow/Comgrow T300 PLA", + "Comgrow/Generic ABS @Comgrow", + "Comgrow/Generic PETG @Comgrow", + "Comgrow/Generic PLA @Comgrow", "Creality/CR-ABS @Ender-3 V4-all", "Creality/CR-ABS @Hi-all", "Creality/CR-ABS @K1 Max_CFS-C-all", @@ -5501,36 +4972,6 @@ "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 ASA-CF @Hi-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 PETG-CF @Hi-all", - "Creality/Creality Generic PLA", - "Creality/Creality Generic PLA @Ender-5Max-all", - "Creality/Creality Generic PLA High Speed @Ender-3V3-all", - "Creality/Creality Generic PLA High Speed @Hi-all", - "Creality/Creality Generic PLA High Speed @K1-all", - "Creality/Creality Generic PLA High Speed @K2-all", - "Creality/Creality Generic PLA Matte @Ender-3V3-all", - "Creality/Creality Generic PLA Matte @Hi-all", - "Creality/Creality Generic PLA Matte @K1-all", - "Creality/Creality Generic PLA Matte @K2-all", - "Creality/Creality Generic PLA Silk @Ender-3V3-all", - "Creality/Creality Generic PLA Silk @Hi-all", - "Creality/Creality Generic PLA Silk @K1-all", - "Creality/Creality Generic PLA Silk @K2-all", - "Creality/Creality Generic PLA Wood @Hi-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", @@ -5558,6 +4999,8 @@ "Creality/Ender-PLA @K2 Pro-all", "Creality/Ender-PLA @K2-all", "Creality/Ender-PLA @SPARKX i7-all", + "Creality/Generic ABS @Creality", + "Creality/Generic ABS @Creality Ender-5Max-all", "Creality/Generic ABS @Ender-3 V4-all", "Creality/Generic ABS @Hi-all", "Creality/Generic ABS @K1 Max_CFS-C-all", @@ -5570,6 +5013,8 @@ "Creality/Generic ABS @K2 Pro-all", "Creality/Generic ABS @K2 SE-all", "Creality/Generic ABS @K2-all", + "Creality/Generic ASA @Creality", + "Creality/Generic ASA @Creality Ender-5Max-all", "Creality/Generic ASA @K1 Max_CFS-C-all", "Creality/Generic ASA @K1 SE-all", "Creality/Generic ASA @K1 SE_CFS-C-all", @@ -5580,6 +5025,7 @@ "Creality/Generic ASA @K2 Pro-all", "Creality/Generic ASA @K2 SE-all", "Creality/Generic ASA @K2-all", + "Creality/Generic ASA-CF @Creality Hi-all", "Creality/Generic ASA-CF @K2 Plus-all", "Creality/Generic BVOH @Hi-all", "Creality/Generic BVOH @K1 Max_CFS-C-all", @@ -5594,6 +5040,7 @@ "Creality/Generic HIPS @K1C_CFS-C-all", "Creality/Generic HIPS @K1_CFS-C-all", "Creality/Generic HIPS @K2 Plus-all", + "Creality/Generic PA @Creality Ender-5Max-all", "Creality/Generic PA @K1 Max_CFS-C-all", "Creality/Generic PA @K1C-all", "Creality/Generic PA @K1C_CFS-C-all", @@ -5601,6 +5048,7 @@ "Creality/Generic PA @K2 Plus-all", "Creality/Generic PA @K2 Pro-all", "Creality/Generic PA @K2-all", + "Creality/Generic PA-CF @Creality", "Creality/Generic PA-CF @K1 Max_CFS-C-all", "Creality/Generic PA-CF @K1C-all", "Creality/Generic PA-CF @K1C_CFS-C-all", @@ -5643,6 +5091,8 @@ "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 @Creality", + "Creality/Generic PETG @Creality Ender-5Max-all", "Creality/Generic PETG @Ender-3 V4-all", "Creality/Generic PETG @Hi-all", "Creality/Generic PETG @K1 Max_CFS-C-all", @@ -5656,6 +5106,7 @@ "Creality/Generic PETG @K2 SE-all", "Creality/Generic PETG @K2-all", "Creality/Generic PETG @SPARKX i7-all", + "Creality/Generic PETG-CF @Creality Hi-all", "Creality/Generic PETG-CF @K1 Max_CFS-C-all", "Creality/Generic PETG-CF @K1C-all", "Creality/Generic PETG-CF @K1C_CFS-C-all", @@ -5667,6 +5118,8 @@ "Creality/Generic PETG-GF @K2 Plus-all", "Creality/Generic PETG-GF @K2 Pro-all", "Creality/Generic PETG-GF @K2-all", + "Creality/Generic PLA @Creality", + "Creality/Generic PLA @Creality Ender-5Max-all", "Creality/Generic PLA @Ender-3 V4-all", "Creality/Generic PLA @Hi-all", "Creality/Generic PLA @K1 Max_CFS-C-all", @@ -5680,6 +5133,21 @@ "Creality/Generic PLA @K2 SE-all", "Creality/Generic PLA @K2-all", "Creality/Generic PLA @SPARKX i7-all", + "Creality/Generic PLA HF @Creality", + "Creality/Generic PLA High Speed @Creality Ender-3V3-all", + "Creality/Generic PLA High Speed @Creality Hi-all", + "Creality/Generic PLA High Speed @Creality K1-all", + "Creality/Generic PLA High Speed @Creality K2-all", + "Creality/Generic PLA Matte @Creality Ender-3V3-all", + "Creality/Generic PLA Matte @Creality Hi-all", + "Creality/Generic PLA Matte @Creality K1-all", + "Creality/Generic PLA Matte @Creality K2-all", + "Creality/Generic PLA Silk @Creality Ender-3V3-all", + "Creality/Generic PLA Silk @Creality Hi-all", + "Creality/Generic PLA Silk @Creality K1-all", + "Creality/Generic PLA Silk @Creality K2-all", + "Creality/Generic PLA Wood @Creality Hi-all", + "Creality/Generic PLA-CF @Creality", "Creality/Generic PLA-CF @Ender-3 V4-all", "Creality/Generic PLA-CF @K1 Max_CFS-C-all", "Creality/Generic PLA-CF @K1 SE-all", @@ -5731,10 +5199,13 @@ "Creality/Generic PVA @K2 Plus-all", "Creality/Generic PVA @K2 Pro-all", "Creality/Generic PVA @K2-all", + "Creality/Generic Speed PLA @Creality HF", "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 @Creality", + "Creality/Generic TPU @Creality Ender-5Max-all", "Creality/Generic TPU @Ender-3 V4-all", "Creality/Generic TPU @K1 Max_CFS-C-all", "Creality/Generic TPU @K1 SE-all", @@ -5958,13 +5429,13 @@ "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", "Cubicon/Cubicon PLAi21 @base", "DeltaMaker/DeltaMaker Brand PLA", - "DeltaMaker/DeltaMaker Generic PETG", - "DeltaMaker/DeltaMaker Generic PLA", - "DeltaMaker/DeltaMaker Generic TPU", - "Dremel/Dremel Generic PLA", - "Dremel/Dremel Generic PLA @3D20 all", - "Dremel/Dremel Generic PLA @3D40 all", - "Dremel/Dremel Generic PLA @3D45 all", + "DeltaMaker/Generic PETG @DeltaMaker", + "DeltaMaker/Generic PLA @DeltaMaker", + "DeltaMaker/Generic TPU @DeltaMaker", + "Dremel/Generic PLA @Dremel", + "Dremel/Generic PLA @Dremel 3D20 all", + "Dremel/Generic PLA @Dremel 3D40 all", + "Dremel/Generic PLA @Dremel 3D45 all", "Elegoo/Generic ABS-CF @Elegoo Centauri", "Elegoo/Generic ASA-CF @Elegoo Centauri", "Elegoo/Generic PA6-CF @Elegoo", @@ -5988,30 +5459,30 @@ "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", + "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 @FLSun S1", + "FLSun/Generic PLA @FLSun T1", + "FLSun/Generic PLA-CF @FLSun", + "FLSun/Generic PVA @FLSun", + "FLSun/Generic TPU @FLSun", "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", "Flashforge/FlashForge PC @FF G4 0.6 nozzle", "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", @@ -6080,37 +5551,6 @@ "Flashforge/Flashforge ASA-CF @FF G4P", "Flashforge/Flashforge ASA-GF @FF C5", "Flashforge/Flashforge ASA-GF @FF C5P", - "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 HIPS @FF C5", "Flashforge/Flashforge HIPS @FF C5P", "Flashforge/Flashforge HIPS @FF G4", @@ -6468,40 +5908,52 @@ "Flashforge/Flashforge TPU-90A @FF C5P", "Flashforge/Flashforge TPU-95A @FF C5", "Flashforge/Flashforge TPU-95A @FF C5P", - "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/FusRock NexPA-CF25", "Flashforge/FusRock PAHT @FF G4 0.6 HF nozzle", "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PAHT-CF", "Flashforge/FusRock PAHT-CF @FF C5", "Flashforge/FusRock PAHT-CF @FF C5P", "Flashforge/FusRock PAHT-CF @FF G4", "Flashforge/FusRock PAHT-CF @FF G4 0.6 nozzle", "Flashforge/FusRock PAHT-CF @FF G4P", "Flashforge/FusRock PAHT-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PAHT-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock PAHT-GF", "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", + "Flashforge/FusRock PET-CF", "Flashforge/FusRock PET-CF @FF G4", "Flashforge/FusRock PET-CF @FF G4 0.6 nozzle", "Flashforge/FusRock PET-CF @FF G4P", "Flashforge/FusRock PET-CF @FF G4P 0.6 nozzle", + "Flashforge/FusRock PET-CF @G3U 0.6 Nozzle", + "Flashforge/FusRock PET-GF", + "Flashforge/FusRock S-Multi", "Flashforge/FusRock S-Multi @FF C5", "Flashforge/FusRock S-Multi @FF C5P", + "Flashforge/FusRock S-Multi @G3U 0.6 Nozzle", + "Flashforge/FusRock S-PAHT", "Flashforge/FusRock S-PAHT @FF C5", "Flashforge/FusRock S-PAHT @FF C5P", + "Flashforge/FusRock S-PAHT @G3U 0.6 Nozzle", + "Flashforge/Generic ABS @FF AD5M 0.25 Nozzle", + "Flashforge/Generic ABS @Flashforge", "Flashforge/Generic ABS @Flashforge AD4", + "Flashforge/Generic ABS @Flashforge G3U", + "Flashforge/Generic ABS @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic ASA @FF AD5M 0.25 Nozzle", + "Flashforge/Generic ASA @Flashforge", "Flashforge/Generic ASA @Flashforge AD4", + "Flashforge/Generic ASA @Flashforge G3U", + "Flashforge/Generic ASA @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic HIPS @Flashforge", + "Flashforge/Generic HIPS @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic HS PLA @FF AD5M 0.25 Nozzle", + "Flashforge/Generic HS PLA @Flashforge", "Flashforge/Generic PET @FF G4", "Flashforge/Generic PET @FF G4 0.6 HF nozzle", "Flashforge/Generic PET @FF G4 0.6 nozzle", @@ -6510,16 +5962,35 @@ "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", "Flashforge/Generic PET @FF G4P 0.6 nozzle", "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", + "Flashforge/Generic PETG @FF AD5M 0.25 Nozzle", + "Flashforge/Generic PETG @Flashforge", "Flashforge/Generic PETG @Flashforge AD4", "Flashforge/Generic PETG @Flashforge Artemis", + "Flashforge/Generic PETG @Flashforge G3U", + "Flashforge/Generic PETG @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic PETG @Flashforge G3U 0.8 Nozzle", + "Flashforge/Generic PETG-CF @Flashforge G3U", + "Flashforge/Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic PETG-CF @Flashforge G3U 0.8 Nozzle", + "Flashforge/Generic PETG-CF10 @Flashforge", "Flashforge/Generic PETG-CF10 @Flashforge AD4", + "Flashforge/Generic PLA @Flashforge", "Flashforge/Generic PLA @Flashforge AD4", + "Flashforge/Generic PLA @Flashforge G3U", "Flashforge/Generic PLA High Speed @Flashforge AD4", "Flashforge/Generic PLA Silk @Flashforge AD4", + "Flashforge/Generic PLA-CF @Flashforge G3U", + "Flashforge/Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "Flashforge/Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "Flashforge/Generic PLA-CF10 @Flashforge", "Flashforge/Generic PLA-CF10 @Flashforge AD4", + "Flashforge/Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "Flashforge/Generic PLA-Silk @Flashforge", + "Flashforge/Generic PVA @Flashforge", "Flashforge/Generic TPU 85A @FF AD5X", "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", + "Flashforge/Generic TPU @Flashforge", "Flashforge/Generic TPU @Flashforge AD4", "Flashforge/Generic TPU-64D @FF C5", "Flashforge/Generic TPU-64D @FF C5P", @@ -6527,22 +5998,16 @@ "Flashforge/Generic TPU-90A @FF C5P", "Flashforge/Generic TPU-95A @FF C5", "Flashforge/Generic TPU-95A @FF C5P", + "Flashforge/Polymaker CoPA", "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", - "Flashforge/Polymaker Generic CoPA", - "Flashforge/Polymaker Generic S1", + "Flashforge/Polymaker 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", @@ -6556,6 +6021,12 @@ "FlyingBear/FlyingBear PLA Hyper @S1", "FlyingBear/FlyingBear TPU @S1", "FlyingBear/FlyingBear TPU Basic @Ghost7", + "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/Other ABS @S1", "FlyingBear/Other PA-CF @S1", "FlyingBear/Other PC @S1", @@ -6563,17 +6034,17 @@ "FlyingBear/Other PLA @S1", "FlyingBear/Other PLA Hyper @S1", "FlyingBear/Other TPU @S1", - "Ginger Additive/Ginger Generic PETG", - "Ginger Additive/Ginger Generic PLA", + "Ginger Additive/Generic PETG @Ginger", + "Ginger Additive/Generic PLA @Ginger", + "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/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", @@ -6622,10 +6093,10 @@ "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", + "MagicMaker/Generic PEEK @MM", + "OrcaArena/Generic PA @OrcaArena", + "OrcaArena/Generic PA-CF @OrcaArena", + "OrcaArena/Generic TPU @OrcaArena", "OrcaFilamentLibrary/Eolas Prints ABS @System", "OrcaFilamentLibrary/Eolas Prints ASA @System", "OrcaFilamentLibrary/Eolas Prints PETG @System", @@ -6730,151 +6201,151 @@ "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/Generic ABS @Peopoly", + "Peopoly/Generic PETG @Peopoly", + "Peopoly/Generic PLA @Peopoly", "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", - "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 @MINIIS", - "Prusa/Prusa Generic ASA @MINIIS 0.25", - "Prusa/Prusa Generic ASA @MINIIS 0.6", - "Prusa/Prusa Generic ASA @MINIIS 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 @MK4", - "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 FLEX @XL", - "Prusa/Prusa Generic FLEX @XL 5T", - "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", - "Prusa/Prusa Generic PC @MINIIS", - "Prusa/Prusa Generic PC @MINIIS 0.25", - "Prusa/Prusa Generic PC @MINIIS 0.6", - "Prusa/Prusa Generic PC @MINIIS 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/Generic ABS @Prusa CORE One", + "Prusa/Generic ABS @Prusa CORE One 0.6", + "Prusa/Generic ABS @Prusa CORE One 0.8", + "Prusa/Generic ABS @Prusa CORE One HF 0.4", + "Prusa/Generic ABS @Prusa CORE One HF 0.5", + "Prusa/Generic ABS @Prusa CORE One HF 0.6", + "Prusa/Generic ABS @Prusa CORE One HF 0.8", + "Prusa/Generic ABS @Prusa MK3.5", + "Prusa/Generic ABS @Prusa MK3.5 0.25", + "Prusa/Generic ABS @Prusa MK3.5 0.6", + "Prusa/Generic ABS @Prusa MK3.5 0.8", + "Prusa/Generic ABS @Prusa MK4S", + "Prusa/Generic ABS @Prusa MK4S 0.6", + "Prusa/Generic ABS @Prusa MK4S 0.8", + "Prusa/Generic ABS @Prusa MK4S HF0.4", + "Prusa/Generic ABS @Prusa MK4S HF0.5", + "Prusa/Generic ABS @Prusa MK4S HF0.6", + "Prusa/Generic ABS @Prusa MK4S HF0.8", + "Prusa/Generic ABS HF @Prusa MK3.5", + "Prusa/Generic ABS HF @Prusa MK3.5 0.6", + "Prusa/Generic ABS HF @Prusa MK3.5 0.8", + "Prusa/Generic ASA @Prusa", + "Prusa/Generic ASA @Prusa CORE One", + "Prusa/Generic ASA @Prusa CORE One 0.6", + "Prusa/Generic ASA @Prusa CORE One 0.8", + "Prusa/Generic ASA @Prusa CORE One HF 0.4", + "Prusa/Generic ASA @Prusa CORE One HF 0.5", + "Prusa/Generic ASA @Prusa CORE One HF 0.6", + "Prusa/Generic ASA @Prusa CORE One HF 0.8", + "Prusa/Generic ASA @Prusa MINIIS", + "Prusa/Generic ASA @Prusa MINIIS 0.25", + "Prusa/Generic ASA @Prusa MINIIS 0.6", + "Prusa/Generic ASA @Prusa MINIIS 0.8", + "Prusa/Generic ASA @Prusa MK3.5", + "Prusa/Generic ASA @Prusa MK3.5 0.25", + "Prusa/Generic ASA @Prusa MK3.5 0.6", + "Prusa/Generic ASA @Prusa MK3.5 0.8", + "Prusa/Generic ASA @Prusa MK4", + "Prusa/Generic ASA @Prusa MK4S", + "Prusa/Generic ASA @Prusa MK4S 0.6", + "Prusa/Generic ASA @Prusa MK4S 0.8", + "Prusa/Generic ASA @Prusa MK4S HF0.4", + "Prusa/Generic ASA @Prusa MK4S HF0.5", + "Prusa/Generic ASA @Prusa MK4S HF0.6", + "Prusa/Generic ASA @Prusa MK4S HF0.8", + "Prusa/Generic ASA HF @Prusa MK3.5", + "Prusa/Generic ASA HF @Prusa MK3.5 0.6", + "Prusa/Generic ASA HF @Prusa MK3.5 0.8", + "Prusa/Generic FLEX @Prusa XL", + "Prusa/Generic FLEX @Prusa XL 5T", + "Prusa/Generic PA @Prusa MK3.5", + "Prusa/Generic PA @Prusa MK3.5 0.25", + "Prusa/Generic PA @Prusa MK3.5 0.6", + "Prusa/Generic PA @Prusa MK3.5 0.8", + "Prusa/Generic PA-CF @Prusa MK3.5", + "Prusa/Generic PA-CF @Prusa MK3.5 0.25", + "Prusa/Generic PA-CF @Prusa MK3.5 0.6", + "Prusa/Generic PA-CF @Prusa MK3.5 0.8", + "Prusa/Generic PC @Prusa", + "Prusa/Generic PC @Prusa MINIIS", + "Prusa/Generic PC @Prusa MINIIS 0.25", + "Prusa/Generic PC @Prusa MINIIS 0.6", + "Prusa/Generic PC @Prusa MINIIS 0.8", + "Prusa/Generic PC @Prusa MK3.5", + "Prusa/Generic PC @Prusa MK3.5 0.25", + "Prusa/Generic PC @Prusa MK3.5 0.6", + "Prusa/Generic PC @Prusa MK3.5 0.8", + "Prusa/Generic PC HF @Prusa MK3.5", + "Prusa/Generic PC HF @Prusa MK3.5 0.6", + "Prusa/Generic PC HF @Prusa MK3.5 0.8", + "Prusa/Generic PETG @Prusa CORE One", + "Prusa/Generic PETG @Prusa CORE One 0.6", + "Prusa/Generic PETG @Prusa CORE One 0.8", + "Prusa/Generic PETG @Prusa CORE One HF 0.4", + "Prusa/Generic PETG @Prusa CORE One HF 0.5", + "Prusa/Generic PETG @Prusa CORE One HF 0.6", + "Prusa/Generic PETG @Prusa CORE One HF 0.8", + "Prusa/Generic PETG @Prusa MK3.5", + "Prusa/Generic PETG @Prusa MK3.5 0.25", + "Prusa/Generic PETG @Prusa MK3.5 0.6", + "Prusa/Generic PETG @Prusa MK3.5 0.8", + "Prusa/Generic PETG @Prusa MK4S", + "Prusa/Generic PETG @Prusa MK4S 0.6", + "Prusa/Generic PETG @Prusa MK4S 0.8", + "Prusa/Generic PETG @Prusa MK4S HF0.4", + "Prusa/Generic PETG @Prusa MK4S HF0.5", + "Prusa/Generic PETG @Prusa MK4S HF0.6", + "Prusa/Generic PETG @Prusa MK4S HF0.8", + "Prusa/Generic PETG HF @Prusa MK3.5", + "Prusa/Generic PETG HF @Prusa MK3.5 0.6", + "Prusa/Generic PETG HF @Prusa MK3.5 0.8", + "Prusa/Generic PLA @Prusa CORE One", + "Prusa/Generic PLA @Prusa CORE One 0.6", + "Prusa/Generic PLA @Prusa CORE One 0.8", + "Prusa/Generic PLA @Prusa CORE One HF 0.4", + "Prusa/Generic PLA @Prusa CORE One HF 0.5", + "Prusa/Generic PLA @Prusa CORE One HF 0.6", + "Prusa/Generic PLA @Prusa CORE One HF 0.8", + "Prusa/Generic PLA @Prusa MK3.5", + "Prusa/Generic PLA @Prusa MK3.5 0.25", + "Prusa/Generic PLA @Prusa MK3.5 0.6", + "Prusa/Generic PLA @Prusa MK3.5 0.8", + "Prusa/Generic PLA @Prusa MK4S", + "Prusa/Generic PLA @Prusa MK4S 0.6", + "Prusa/Generic PLA @Prusa MK4S 0.8", + "Prusa/Generic PLA @Prusa MK4S HF0.4", + "Prusa/Generic PLA @Prusa MK4S HF0.5", + "Prusa/Generic PLA @Prusa MK4S HF0.6", + "Prusa/Generic PLA @Prusa MK4S HF0.8", + "Prusa/Generic PLA HF @Prusa MK3.5", + "Prusa/Generic PLA HF @Prusa MK3.5 0.6", + "Prusa/Generic PLA HF @Prusa MK3.5 0.8", + "Prusa/Generic PLA Silk @Prusa CORE One", + "Prusa/Generic PLA Silk @Prusa CORE One 0.6", + "Prusa/Generic PLA Silk @Prusa CORE One 0.8", + "Prusa/Generic PLA Silk @Prusa MK4S", + "Prusa/Generic PLA Silk @Prusa MK4S 0.6", + "Prusa/Generic PLA Silk @Prusa MK4S 0.8", + "Prusa/Generic PLA-CF @Prusa MK3.5", + "Prusa/Generic PLA-CF @Prusa MK3.5 0.25", + "Prusa/Generic PLA-CF @Prusa MK3.5 0.6", + "Prusa/Generic PLA-CF @Prusa MK3.5 0.8", + "Prusa/Generic PVA @Prusa MK3.5", + "Prusa/Generic PVA @Prusa MK3.5 0.25", + "Prusa/Generic PVA @Prusa MK3.5 0.6", + "Prusa/Generic PVA @Prusa MK3.5 0.8", + "Prusa/Generic PVA HF @Prusa MK3.5", + "Prusa/Generic PVA HF @Prusa MK3.5 0.6", + "Prusa/Generic PVA HF @Prusa MK3.5 0.8", + "Prusa/Generic TPU @Prusa CORE One", + "Prusa/Generic TPU @Prusa CORE One 0.6", + "Prusa/Generic TPU @Prusa CORE One 0.8", + "Prusa/Generic TPU @Prusa MK3.5", + "Prusa/Generic TPU @Prusa MK4S", + "Prusa/Generic TPU @Prusa MK4S 0.6", + "Prusa/Generic TPU @Prusa MK4S 0.8", + "Prusa/Generic TPU HF @Prusa MK3.5", "Prusa/Prusament ASA @CORE One", "Prusa/Prusament ASA @CORE One 0.6", "Prusa/Prusament ASA @CORE One 0.8", @@ -6961,6 +6432,107 @@ "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/Generic ABS @Qidi", + "Qidi/Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic ABS @Qidi X-Max 3 0.2 nozzle", + "Qidi/Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Generic ASA @Qidi", + "Qidi/Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic ASA @Qidi X-Max 3 0.2 nozzle", + "Qidi/Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Generic PA @Qidi", + "Qidi/Generic PA-CF @Qidi", + "Qidi/Generic PC @Qidi", + "Qidi/Generic PC @Qidi 0.2 nozzle", + "Qidi/Generic PC @Qidi 0.8 nozzle", + "Qidi/Generic PC @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic PC @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic PC @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic PC @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic PC @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PC @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PC @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PC @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic PETG @Qidi", + "Qidi/Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic PETG @Qidi X-Max 3 0.2 nozzle", + "Qidi/Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Generic PETG-CF @Qidi", + "Qidi/Generic PLA @Qidi", + "Qidi/Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic PLA @Qidi X-Max 3 0.2 nozzle", + "Qidi/Generic PLA @Qidi X-Max 3 0.6 nozzle", + "Qidi/Generic PLA @Qidi X-Max 3 0.8 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "Qidi/Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic PLA Silk @Qidi", + "Qidi/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PLA+ @Qidi", + "Qidi/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "Qidi/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "Qidi/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "Qidi/Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "Qidi/Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "Qidi/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "Qidi/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "Qidi/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "Qidi/Generic PLA-CF @Qidi", + "Qidi/Generic PVA @Qidi", + "Qidi/Generic TPU 95A @Qidi", + "Qidi/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "Qidi/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "Qidi/Generic TPU @Qidi", + "Qidi/Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "Qidi/Generic TPU @Qidi X-Plus 4 0.4 nozzle", "Qidi/HATCHBOX ABS @Qidi", "Qidi/HATCHBOX ABS @Qidi 0.2 nozzle", "Qidi/HATCHBOX ABS @Qidi 0.6 nozzle", @@ -7360,107 +6932,6 @@ "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", @@ -7481,36 +6952,36 @@ "RH3D/Generic PETG @E3NG v1.2S", "RH3D/Generic PLA @E3NG v1.2S", "RH3D/Generic TPU @E3NG v1.2S", + "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/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", + "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 @SecKit", "SeeMeCNC/SeeMeCNC ABS", "SeeMeCNC/SeeMeCNC PA-CF", "SeeMeCNC/SeeMeCNC PETG", @@ -7581,66 +7052,66 @@ "Sovol/Sovol Zero PLA Silk", "Sovol/Sovol Zero PLA Silk HS Nozzle", "Sovol/Sovol Zero TPU", + "Tiertime/Generic ABS @Tiertime", + "Tiertime/Generic ABS @Tiertime 300HS", + "Tiertime/Generic ASA @Tiertime", + "Tiertime/Generic ASA @Tiertime 300HS", + "Tiertime/Generic BVOH @Tiertime", + "Tiertime/Generic BVOH @Tiertime 300HS", + "Tiertime/Generic EVA @Tiertime", + "Tiertime/Generic EVA @Tiertime 300HS", + "Tiertime/Generic HIPS @Tiertime", + "Tiertime/Generic HIPS @Tiertime 300HS", + "Tiertime/Generic PA @Tiertime", + "Tiertime/Generic PA @Tiertime 300HS", + "Tiertime/Generic PA-CF @Tiertime", + "Tiertime/Generic PA-CF @Tiertime 300HS", + "Tiertime/Generic PC @Tiertime", + "Tiertime/Generic PC @Tiertime 300HS", + "Tiertime/Generic PCTG @Tiertime", + "Tiertime/Generic PCTG @Tiertime 300HS", + "Tiertime/Generic PE @Tiertime", + "Tiertime/Generic PE @Tiertime 300HS", + "Tiertime/Generic PE-CF @Tiertime", + "Tiertime/Generic PE-CF @Tiertime 300HS", + "Tiertime/Generic PETG @Tiertime", + "Tiertime/Generic PETG @Tiertime 300HS", + "Tiertime/Generic PETG-CF @Tiertime", + "Tiertime/Generic PETG-CF @Tiertime 300HS", + "Tiertime/Generic PHA @Tiertime", + "Tiertime/Generic PHA @Tiertime 300HS", + "Tiertime/Generic PLA @Tiertime", + "Tiertime/Generic PLA @Tiertime 300HS", + "Tiertime/Generic PLA High Speed @Tiertime", + "Tiertime/Generic PLA High Speed @Tiertime 300HS", + "Tiertime/Generic PLA Silk @Tiertime", + "Tiertime/Generic PLA Silk @Tiertime 300HS", + "Tiertime/Generic PLA-CF @Tiertime", + "Tiertime/Generic PLA-CF @Tiertime 300HS", + "Tiertime/Generic PP @Tiertime", + "Tiertime/Generic PP @Tiertime 300HS", + "Tiertime/Generic PP-CF @Tiertime", + "Tiertime/Generic PP-CF @Tiertime 300HS", + "Tiertime/Generic PP-GF @Tiertime", + "Tiertime/Generic PP-GF @Tiertime 300HS", + "Tiertime/Generic PPA-CF @Tiertime", + "Tiertime/Generic PPA-CF @Tiertime 300HS", + "Tiertime/Generic PPA-GF @Tiertime", + "Tiertime/Generic PPA-GF @Tiertime 300HS", + "Tiertime/Generic PPS @Tiertime", + "Tiertime/Generic PPS @Tiertime 300HS", + "Tiertime/Generic PPS-CF @Tiertime", + "Tiertime/Generic PPS-CF @Tiertime 300HS", + "Tiertime/Generic PVA @Tiertime", + "Tiertime/Generic PVA @Tiertime 300HS", + "Tiertime/Generic SBS @Tiertime", + "Tiertime/Generic SBS @Tiertime 300HS", + "Tiertime/Generic TPU @Tiertime", + "Tiertime/Generic TPU @Tiertime 300HS", "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", @@ -7657,8 +7128,8 @@ "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", + "TwoTrees/Generic 95A TPU @TwoTrees SK1", + "TwoTrees/Generic HS PLA @TwoTrees SK1", "Volumic/Désactivé", "Volumic/PA6 CF20 (Performance)", "Volumic/PETG ESD (Performance)", @@ -7686,16 +7157,16 @@ "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", + "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 @Vzbot", "Wanhao France/YUMI PETG", "Wanhao France/YUMI PLA Bowden", "Wanhao France/YUMI PLA Direct Drive", @@ -7764,6 +7235,13 @@ "Soleyin Ultra PLA" ] ], + "OF0AquDh": [ + [ + "FusRock", + "PA", + "FusRock S-Multi" + ] + ], "OF0FfcAG": [ [ "Anycubic", @@ -7771,13 +7249,6 @@ "Anycubic TPU for ACE" ] ], - "OF0GIkJm": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA Silk" - ] - ], "OF0NgY1y": [ [ "COEX 3D", @@ -7890,13 +7361,6 @@ "Anycubic ASA" ] ], - "OF0zx94L": [ - [ - "Generic", - "PA", - "Vzbot Generic PA" - ] - ], "OF112FvY": [ [ "Generic", @@ -7904,13 +7368,6 @@ "Generic PETG Basic" ] ], - "OF1Id239": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG" - ] - ], "OF1N1qMK": [ [ "Polymaker", @@ -7918,13 +7375,6 @@ "Panchroma PLA UV Shift" ] ], - "OF1OZujR": [ - [ - "Generic", - "PVA", - "Flashforge Generic PVA" - ] - ], "OF1Pke8t": [ [ "Overture", @@ -7960,13 +7410,6 @@ "Snapmaker ASA" ] ], - "OF1daEUW": [ - [ - "Generic", - "PETG-CF", - "Anker Generic PETG-CF" - ] - ], "OF1dpPrW": [ [ "Bambu Lab", @@ -7981,13 +7424,6 @@ "Elegoo PLA PRO" ] ], - "OF1uR1t2": [ - [ - "Generic", - "PETG", - "Tiertime Generic PETG" - ] - ], "OF223rZv": [ [ "Anycubic", @@ -8016,13 +7452,6 @@ "SUNLU PETG" ] ], - "OF2RjrWH": [ - [ - "Generic", - "PAHT-GF", - "FusRock Generic PAHT-GF" - ] - ], "OF2TQpOO": [ [ "QIDI", @@ -8058,13 +7487,6 @@ "Arena PLA-CF" ] ], - "OF2mgDsI": [ - [ - "Generic", - "PLA", - "Vzbot Generic PLA" - ] - ], "OF2pj5l5": [ [ "Overture", @@ -8107,13 +7529,6 @@ "CR-Silk" ] ], - "OF3P0BQA": [ - [ - "Generic", - "ABS", - "Anker Generic ABS" - ] - ], "OF3WQaKK": [ [ "Creality", @@ -8149,20 +7564,6 @@ "Snapmaker Dual PETG-CF" ] ], - "OF3s929u": [ - [ - "Generic", - "PP", - "Tiertime Generic PP" - ] - ], - "OF3wxlw9": [ - [ - "CoLiDo", - "PETG", - "CoLiDo Generic PETG" - ] - ], "OF3ydJTT": [ [ "InfiMech", @@ -8177,13 +7578,6 @@ "Flashforge TPU-90A" ] ], - "OF42ZDpN": [ - [ - "Generic", - "PAHT", - "FusRock PAHT" - ] - ], "OF43Raws": [ [ "Polymaker", @@ -8205,13 +7599,6 @@ "FilAr PETG Azul Francia" ] ], - "OF48L671": [ - [ - "Generic", - "ASA", - "RatRig Generic ASA" - ] - ], "OF4APyxe": [ [ "Creality", @@ -8226,13 +7613,6 @@ "FilAr PLA" ] ], - "OF4Mf5Gz": [ - [ - "Generic", - "PETG", - "Creality Generic PETG" - ] - ], "OF4Nhggz": [ [ "Artillery", @@ -8261,13 +7641,6 @@ "Snapmaker PETG" ] ], - "OF4XAUnp": [ - [ - "Generic", - "ASA", - "Vzbot Generic ASA" - ] - ], "OF4f8vVp": [ [ "WonderMaker", @@ -8289,13 +7662,6 @@ "QIDI PLA Basic" ] ], - "OF4oCRKe": [ - [ - "Generic", - "PETG", - "DeltaMaker Generic PETG" - ] - ], "OF4ulo9Y": [ [ "WonderMaker", @@ -8303,27 +7669,6 @@ "WonderMaker PVA" ] ], - "OF4xhTuK": [ - [ - "Generic", - "PA-CF", - "OrcaArena Generic PA-CF" - ] - ], - "OF4zzGwp": [ - [ - "Generic", - "PET-GF", - "FusRock Generic PET-GF" - ] - ], - "OF51XQar": [ - [ - "Generic", - "PLA", - "C1 Generic PLA" - ] - ], "OF53eLVD": [ [ "Generic", @@ -8345,6 +7690,13 @@ "Prusament PA-CF" ] ], + "OF55jHAJ": [ + [ + "Generic", + "ABS", + "Generic ABS HF" + ] + ], "OF5BN24W": [ [ "Flashforge", @@ -8359,13 +7711,6 @@ "PolyLite PLA" ] ], - "OF5E5KNA": [ - [ - "Generic", - "PC", - "SecKit Generic PC" - ] - ], "OF5NQFKI": [ [ "Generic", @@ -8408,13 +7753,6 @@ "Artillery ASA" ] ], - "OF5Zk4e1": [ - [ - "Generic", - "ABS", - "Anycubic Generic ABS" - ] - ], "OF5c6nq3": [ [ "Generic", @@ -8471,13 +7809,6 @@ "FilAr PLA-mate Azul" ] ], - "OF5vzBhb": [ - [ - "Generic", - "PLA", - "Chuanying Generic PLA" - ] - ], "OF5w29Kq": [ [ "Generic", @@ -8513,13 +7844,6 @@ "Snapmaker Dual PLA-CF" ] ], - "OF6Fpw1E": [ - [ - "Generic", - "PETG", - "Comgrow Generic PETG" - ] - ], "OF6H51Xx": [ [ "Polymaker", @@ -8527,20 +7851,6 @@ "Polymaker PETG" ] ], - "OF6K467o": [ - [ - "InfiMech", - "PA-CF", - "InfiMech Generic PA-CF" - ] - ], - "OF6KELDx": [ - [ - "Co Print", - "PLA", - "CoPrint Generic PLA" - ] - ], "OF6Ll8lK": [ [ "Elegoo", @@ -8548,6 +7858,13 @@ "Elegoo PETG Translucent" ] ], + "OF6MMR8P": [ + [ + "Generic", + "TPU", + "Generic 95A TPU" + ] + ], "OF6MOPWx": [ [ "Generic", @@ -8576,13 +7893,6 @@ "Phrozen PLA" ] ], - "OF6WddJ1": [ - [ - "Generic", - "S-PAHT", - "FusRock S-PAHT" - ] - ], "OF6kj4jI": [ [ "iQ Materials", @@ -8597,13 +7907,6 @@ "FLSun S1 TPU" ] ], - "OF6rMr3U": [ - [ - "Generic", - "PA", - "FusRock Generic S-Multi" - ] - ], "OF6rdQ6M": [ [ "Generic", @@ -8611,13 +7914,6 @@ "Generic PPS-CF" ] ], - "OF6tKa1Z": [ - [ - "Generic", - "TPU", - "Anker Generic TPU" - ] - ], "OF6ueBwd": [ [ "Generic", @@ -8625,20 +7921,6 @@ "Flashforge PLA Pro" ] ], - "OF6vKLaU": [ - [ - "Generic", - "ASA", - "Artillery Generic ASA" - ] - ], - "OF6xLvYg": [ - [ - "InfiMech", - "PC", - "InfiMech Generic PC" - ] - ], "OF6zAVFj": [ [ "Generic", @@ -8709,13 +7991,6 @@ "Anycubic PLA Translucent" ] ], - "OF7g2vYQ": [ - [ - "Co Print", - "TPU", - "CoPrint Generic TPU" - ] - ], "OF7lOgYF": [ [ "Generic", @@ -8737,6 +8012,13 @@ "Eryone Silk PLA" ] ], + "OF7pjCsO": [ + [ + "FusRock", + "PAHT", + "FusRock PAHT" + ] + ], "OF7tt7DO": [ [ "Cubicon", @@ -8744,20 +8026,6 @@ "Cubicon PLA+" ] ], - "OF7uE5KB": [ - [ - "Generic", - "PA-CF", - "Anker Generic PA-CF" - ] - ], - "OF8CXrvm": [ - [ - "Generic", - "PA", - "SecKit Generic PA" - ] - ], "OF8GnyFU": [ [ "Creality", @@ -8793,13 +8061,6 @@ "FilAr PLA Amarillo Lirio" ] ], - "OF8bLDu7": [ - [ - "Generic", - "PA-CF", - "Blocks Generic PA-CF" - ] - ], "OF8dCquh": [ [ "Snapmaker", @@ -8849,13 +8110,6 @@ "Artillery PETG Basic" ] ], - "OF97ru74": [ - [ - "Generic", - "PC", - "Prusa Generic PC" - ] - ], "OF995YXg": [ [ "Generic", @@ -8919,13 +8173,6 @@ "RatRig PunkFil PETG" ] ], - "OF9fOPpd": [ - [ - "Generic", - "PC", - "Vzbot Generic PC" - ] - ], "OF9z5LZ9": [ [ "Generic", @@ -8947,13 +8194,6 @@ "Artillery PLA Matte" ] ], - "OFACSw9O": [ - [ - "Generic", - "PLA", - "Creality Generic PLA" - ] - ], "OFAIBCLJ": [ [ "Generic", @@ -9010,27 +8250,6 @@ "FilAr PLA Marron Oxido" ] ], - "OFB09fpe": [ - [ - "Generic", - "TPU", - "RatRig Generic TPU" - ] - ], - "OFB0a3hT": [ - [ - "Generic", - "PLA-CF", - "Anker Generic PLA-CF" - ] - ], - "OFB1Tv1E": [ - [ - "Generic", - "PA", - "Anycubic Generic PA" - ] - ], "OFB5SmWk": [ [ "Valment", @@ -9038,20 +8257,6 @@ "Valment PLA Galaxy" ] ], - "OFB8wSps": [ - [ - "Generic", - "PET-CF", - "FusRock PET-CF" - ] - ], - "OFB9dx27": [ - [ - "Generic", - "ASA", - "Blocks Generic ASA" - ] - ], "OFBBgw7B": [ [ "WonderMaker", @@ -9059,20 +8264,6 @@ "WonderMaker PLA Wood" ] ], - "OFBC32Wb": [ - [ - "Generic", - "PET", - "FusRock PET" - ] - ], - "OFBIadjM": [ - [ - "Generic", - "ASA", - "Chuanying Generic ASA" - ] - ], "OFBJAdLw": [ [ "LH Stinger", @@ -9122,20 +8313,6 @@ "PolyLite PLA Luminous" ] ], - "OFBpcB0a": [ - [ - "Generic", - "PLA", - "TwoTrees Generic HS PLA" - ] - ], - "OFBtlI8M": [ - [ - "FlyingBear", - "ABS", - "FlyingBear Generic ABS" - ] - ], "OFBw6eEG": [ [ "Overture", @@ -9150,13 +8327,6 @@ "Hyper Luminous" ] ], - "OFC20UMj": [ - [ - "Generic", - "TPU", - "Flashforge Generic TPU" - ] - ], "OFC5f4Ay": [ [ "Generic", @@ -9199,13 +8369,6 @@ "HP Ultra PLA" ] ], - "OFCVUEaV": [ - [ - "Generic", - "TPU", - "Tiertime Generic TPU" - ] - ], "OFCZsqXg": [ [ "Creality", @@ -9213,13 +8376,6 @@ "Hyper PLA" ] ], - "OFCaJHAA": [ - [ - "Generic", - "PAHT", - "FusRock Generic S-PAHT" - ] - ], "OFCccVrQ": [ [ "Polymaker", @@ -9227,13 +8383,6 @@ "PolyTerra Dual PLA" ] ], - "OFCcsYtf": [ - [ - "Generic", - "ASA", - "FLSun Generic ASA" - ] - ], "OFCidU7j": [ [ "DREMC", @@ -9248,6 +8397,13 @@ "FilAr PLA-mate Verde" ] ], + "OFCn83wF": [ + [ + "FusRock", + "PAHT", + "FusRock S-PAHT" + ] + ], "OFCnywiC": [ [ "Tiertime", @@ -9269,13 +8425,6 @@ "Anycubic PLA SE" ] ], - "OFCu3jES": [ - [ - "Generic", - "PETG", - "Yumi Generic PETG" - ] - ], "OFCuaCer": [ [ "Volumic", @@ -9290,20 +8439,6 @@ "Cubicon PA-CF" ] ], - "OFD2JNS1": [ - [ - "Generic", - "PLA", - "Dremel Generic PLA" - ] - ], - "OFD6kN7F": [ - [ - "Generic", - "PLA", - "OrcaArena Generic PLA" - ] - ], "OFD8loeT": [ [ "re3D", @@ -9388,13 +8523,6 @@ "Valment PLA" ] ], - "OFDeTsJw": [ - [ - "Generic", - "HIPS", - "Chuanying Generic HIPS" - ] - ], "OFDgQaca": [ [ "FlyingBear", @@ -9416,6 +8544,13 @@ "Generic Support for PA" ] ], + "OFDu1qE7": [ + [ + "FusRock", + "PET-CF", + "FusRock PET-CF" + ] + ], "OFDvXujf": [ [ "Generic", @@ -9430,6 +8565,13 @@ "Overture ABS Basic" ] ], + "OFDwBwO5": [ + [ + "Generic", + "PVA", + "Generic PVA HF" + ] + ], "OFDxfPgH": [ [ "Bambu Lab", @@ -9444,13 +8586,6 @@ "COEX TPU 60A" ] ], - "OFEE1Dld": [ - [ - "Generic", - "TPU", - "Artillery Generic TPU" - ] - ], "OFEGNJD4": [ [ "Bambu Lab", @@ -9479,13 +8614,6 @@ "Snapmaker PLA Lite" ] ], - "OFETFWx7": [ - [ - "Generic", - "PLA", - "SecKit Generic PLA" - ] - ], "OFEWYR89": [ [ "Generic", @@ -9500,13 +8628,6 @@ "FilAr PLA-mate Uva" ] ], - "OFEZNNw1": [ - [ - "Generic", - "PA", - "RatRig Generic PA" - ] - ], "OFEZpel7": [ [ "Volumic", @@ -9591,13 +8712,6 @@ "Generic TPU 64D" ] ], - "OFF73Bvp": [ - [ - "Generic", - "PLA-CF", - "SecKit Generic PLA-CF" - ] - ], "OFF9OKoY": [ [ "Polymaker", @@ -9647,13 +8761,6 @@ "FlyingBear PC" ] ], - "OFFZ0BBL": [ - [ - "FlyingBear", - "PLA", - "FlyingBear Generic PLA" - ] - ], "OFFZ458u": [ [ "Polymaker", @@ -9689,13 +8796,6 @@ "Anycubic PLA Silk" ] ], - "OFFxZ7hZ": [ - [ - "Generic", - "PLA-CF", - "Chuanying Generic PLA-CF10" - ] - ], "OFG0kOKX": [ [ "Volumic", @@ -9717,20 +8817,6 @@ "Qidi ASA-Aero" ] ], - "OFGDaEHO": [ - [ - "Generic", - "BVOH", - "Tiertime Generic BVOH" - ] - ], - "OFGGyAgJ": [ - [ - "Generic", - "TPU", - "Vzbot Generic TPU" - ] - ], "OFGJ1nxs": [ [ "Other", @@ -9738,27 +8824,6 @@ "Other PLA" ] ], - "OFGKLoUm": [ - [ - "Generic", - "TPU", - "Anycubic Generic TPU" - ] - ], - "OFGLeiNL": [ - [ - "Generic", - "PLA", - "Yumi Generic PLA" - ] - ], - "OFGPJxnt": [ - [ - "Generic", - "PC", - "Anker Generic PC" - ] - ], "OFGVwfK0": [ [ "FilAr", @@ -9822,13 +8887,6 @@ "CR-Wood" ] ], - "OFGzUNbm": [ - [ - "Generic", - "PPS-CF", - "Tiertime Generic PPS-CF" - ] - ], "OFH2nN08": [ [ "Eolas Prints", @@ -9871,20 +8929,6 @@ "FilAr PLA Blanco Antartida" ] ], - "OFHFZ1Te": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA Silk" - ] - ], - "OFHQUAoZ": [ - [ - "Generic", - "PA-CF", - "FLSun Generic PA-CF" - ] - ], "OFHTVfaU": [ [ "Generic", @@ -9892,13 +8936,6 @@ "Sovol Zero PETG" ] ], - "OFHUnLY2": [ - [ - "Generic", - "PETG", - "Vzbot Generic PETG" - ] - ], "OFHWSM21": [ [ "Polymaker", @@ -9906,13 +8943,6 @@ "Fiberon PET-CF" ] ], - "OFHa3RZT": [ - [ - "Generic", - "PA-CF", - "Tiertime Generic PA-CF" - ] - ], "OFHa48An": [ [ "Bambu Lab", @@ -9962,13 +8992,6 @@ "Arena Support W" ] ], - "OFI80Hct": [ - [ - "Generic", - "ASA", - "Anycubic Generic ASA" - ] - ], "OFIBXa0k": [ [ "FilAr", @@ -9990,6 +9013,13 @@ "FLSun S1 ASA" ] ], + "OFIKZxPF": [ + [ + "Generic", + "PLA", + "Generic PLA Wood" + ] + ], "OFIPjqHt": [ [ "Orca Arena", @@ -10018,13 +9048,6 @@ "HATCHBOX PETG" ] ], - "OFIYTy8S": [ - [ - "Generic", - "PLA", - "Anker Generic PLA+" - ] - ], "OFIZMQwM": [ [ "LH Stinger", @@ -10039,20 +9062,6 @@ "FilAr PLA Gris Ceniza" ] ], - "OFIda816": [ - [ - "Generic", - "PVA", - "Vzbot Generic PVA" - ] - ], - "OFIeCuXj": [ - [ - "Generic", - "PETG", - "Peopoly Generic PETG" - ] - ], "OFIegjmD": [ [ "Eolas Prints", @@ -10074,13 +9083,6 @@ "Anycubic PLA Luminous" ] ], - "OFIieIka": [ - [ - "Generic", - "PA", - "Polymaker CoPA" - ] - ], "OFIxOuOu": [ [ "Polymaker", @@ -10095,13 +9097,6 @@ "Flashforge PLA Basic" ] ], - "OFIy3kLw": [ - [ - "Generic", - "PA", - "Prusa Generic PA" - ] - ], "OFJ3HRsR": [ [ "Orca Arena", @@ -10123,13 +9118,6 @@ "DREMC PLA+ HS" ] ], - "OFJJpaLS": [ - [ - "Generic", - "PETG", - "FLSun Generic PETG" - ] - ], "OFJNeELv": [ [ "FILL3D", @@ -10151,13 +9139,6 @@ "FilAr PETG Cristal" ] ], - "OFJSksUs": [ - [ - "Generic", - "PLA", - "FLSun Generic PLA" - ] - ], "OFJVFpJz": [ [ "Generic", @@ -10228,20 +9209,6 @@ "YUMI PLA Direct Drive" ] ], - "OFK01afJ": [ - [ - "Generic", - "PC", - "Qidi Generic PC" - ] - ], - "OFK4LdYI": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA HF" - ] - ], "OFK74HJD": [ [ "Generic", @@ -10270,11 +9237,11 @@ "FilAr PLA Gris Plata" ] ], - "OFKNAhls": [ + "OFKTGKJU": [ [ - "Generic", - "PETG", - "Qidi Generic PETG" + "FusRock", + "PET", + "FusRock PET" ] ], "OFKTSiYF": [ @@ -10291,6 +9258,13 @@ "Snapmaker Dual ASA" ] ], + "OFKW5hEW": [ + [ + "FusRock", + "PAHT-CF", + "FusRock PAHT-CF" + ] + ], "OFKWWgyp": [ [ "FilAr", @@ -10354,20 +9328,6 @@ "Flashforge TPU 65D" ] ], - "OFKuTr12": [ - [ - "Generic", - "PE", - "Tiertime Generic PE" - ] - ], - "OFKyCgaK": [ - [ - "Generic", - "PLA", - "Anycubic Generic PLA" - ] - ], "OFL9aRjN": [ [ "Snapmaker", @@ -10382,13 +9342,6 @@ "WonderMaker TPU 95A" ] ], - "OFLBUkwC": [ - [ - "Generic", - "ABS", - "Vzbot Generic ABS" - ] - ], "OFLC1oRH": [ [ "Flashforge", @@ -10396,13 +9349,6 @@ "Flashforge PPA-CF" ] ], - "OFLDSqqi": [ - [ - "Generic", - "ABS", - "Flashforge Generic ABS" - ] - ], "OFLJ8S6I": [ [ "SUNLU", @@ -10501,20 +9447,6 @@ "Hyper PETG-GF" ] ], - "OFLrdHse": [ - [ - "Generic", - "PLA", - "Flashforge Generic HS PLA" - ] - ], - "OFLuczRG": [ - [ - "Generic", - "ASA", - "Creality Generic ASA-CF" - ] - ], "OFLzx3J4": [ [ "Creality", @@ -10536,13 +9468,6 @@ "Generic PA12-CF" ] ], - "OFM87w9T": [ - [ - "Generic", - "SBS", - "Tiertime Generic SBS" - ] - ], "OFM91vZs": [ [ "Overture", @@ -10557,13 +9482,6 @@ "QIDI TPU-Aero" ] ], - "OFMEbuBE": [ - [ - "Generic", - "TPU", - "Blocks Generic TPU" - ] - ], "OFMIma8C": [ [ "Generic", @@ -10571,13 +9489,6 @@ "Flashforge PLA Luminous" ] ], - "OFMIurFh": [ - [ - "Generic", - "PLA", - "Creality HF Generic Speed PLA" - ] - ], "OFMK5gVo": [ [ "WonderMaker", @@ -10599,13 +9510,6 @@ "Artillery PA" ] ], - "OFMTBcnz": [ - [ - "Generic", - "PP-CF", - "Tiertime Generic PP-CF" - ] - ], "OFMTK0UC": [ [ "Bambu Lab", @@ -10620,13 +9524,6 @@ "SUNLU PLA+" ] ], - "OFMZAoqa": [ - [ - "Generic", - "PVA", - "Tiertime Generic PVA" - ] - ], "OFMZvH0z": [ [ "Overture", @@ -10634,13 +9531,6 @@ "Overture Rock PLA" ] ], - "OFMgJQCZ": [ - [ - "Generic", - "PA", - "Anker Generic PA" - ] - ], "OFMjtqTC": [ [ "Bambu Lab", @@ -10648,13 +9538,6 @@ "Bambu PLA Wood" ] ], - "OFMoLF46": [ - [ - "Generic", - "TPU", - "FLSun Generic TPU" - ] - ], "OFMpxamb": [ [ "Flashforge", @@ -10662,13 +9545,6 @@ "Flashforge PETG" ] ], - "OFMqYusc": [ - [ - "Generic", - "PA", - "Creality Generic PA" - ] - ], "OFMsDGbs": [ [ "Anycubic", @@ -10690,13 +9566,6 @@ "Flashforge PETG Transparent" ] ], - "OFN7aNHe": [ - [ - "Generic", - "PC", - "Tiertime Generic PC" - ] - ], "OFN9fefN": [ [ "Cubicon", @@ -10718,20 +9587,6 @@ "Tiertime PLA" ] ], - "OFNLXV8X": [ - [ - "Generic", - "ABS", - "Tiertime Generic ABS" - ] - ], - "OFNOxcYl": [ - [ - "Generic", - "PA-CF", - "RatRig Generic PA-CF" - ] - ], "OFNQKF0M": [ [ "Tiertime", @@ -10753,13 +9608,6 @@ "FilAr PETG Azul Boreal" ] ], - "OFNW4ZTC": [ - [ - "Generic", - "PLA", - "Creality Generic PLA Wood" - ] - ], "OFNWcJsM": [ [ "Generic", @@ -10781,20 +9629,6 @@ "Sovol Zero ABS" ] ], - "OFNYewRS": [ - [ - "Generic", - "PLA", - "Blocks Generic PLA" - ] - ], - "OFNZYgLA": [ - [ - "Generic", - "PVA", - "Qidi Generic PVA" - ] - ], "OFNZjrLo": [ [ "Generic", @@ -10802,13 +9636,6 @@ "Sovol SV06 Plus ACE PLA" ] ], - "OFNcdCrm": [ - [ - "Generic", - "PLA-CF", - "Anycubic Generic PLA-CF" - ] - ], "OFNemJM6": [ [ "FilAr", @@ -10816,11 +9643,11 @@ "FilAr PLA Cobre" ] ], - "OFNiSLfL": [ + "OFNjku08": [ [ "Generic", - "PP", - "Generic PP-GF" + "PETG", + "Generic High Flow PETG" ] ], "OFNk8bxk": [ @@ -10830,13 +9657,6 @@ "Bambu PA6-GF" ] ], - "OFNn21yM": [ - [ - "Generic", - "PA-CF", - "Vzbot Generic PA-CF" - ] - ], "OFNstOna": [ [ "Eryone", @@ -10893,13 +9713,6 @@ "VXL90 TiQ2 P2" ] ], - "OFOKYhi6": [ - [ - "Generic", - "PETG", - "Prusa Generic PETG HF" - ] - ], "OFOPU1xv": [ [ "Snapmaker", @@ -11019,20 +9832,6 @@ "Eolas Prints PLA INGEO 870" ] ], - "OFPdhDlK": [ - [ - "Generic", - "PA-CF", - "Anycubic Generic PA-CF" - ] - ], - "OFPjOUtz": [ - [ - "Generic", - "PAHT-CF", - "FusRock Generic PAHT-CF" - ] - ], "OFPkCJKE": [ [ "Polymaker", @@ -11068,13 +9867,6 @@ "Lulzbot 2.85mm PLA" ] ], - "OFPy0Ogq": [ - [ - "Generic", - "PA-CF", - "Qidi Generic PA-CF" - ] - ], "OFQ1KzO8": [ [ "Snapmaker", @@ -11103,13 +9895,6 @@ "QIDI PETG Tough" ] ], - "OFQ7I5vC": [ - [ - "Generic", - "PLA-CF", - "Prusa Generic PLA-CF" - ] - ], "OFQ9qnkd": [ [ "Generic", @@ -11117,13 +9902,6 @@ "FLSun T1 PLA High Speed" ] ], - "OFQC8Vna": [ - [ - "Generic", - "PETG-CF", - "Flashforge Generic PETG-CF" - ] - ], "OFQEGL7z": [ [ "FlyingBear", @@ -11166,13 +9944,6 @@ "QIDI ABS-GF10" ] ], - "OFQTrLXB": [ - [ - "Generic", - "PLA-CF", - "Qidi Generic PLA-CF" - ] - ], "OFQWIKbV": [ [ "FilAr", @@ -11201,13 +9972,6 @@ "FILL3D PETG" ] ], - "OFQbqeN7": [ - [ - "Generic", - "PA", - "Qidi Generic PA" - ] - ], "OFQdaVZS": [ [ "Generic", @@ -11229,11 +9993,11 @@ "Flashforge PVA" ] ], - "OFQswlnF": [ + "OFQyyO0l": [ [ - "Generic", + "Polymaker", "PA", - "Tiertime Generic PA" + "Polymaker CoPA" ] ], "OFR0gODA": [ @@ -11250,13 +10014,6 @@ "QIDI TPU 95A-HF" ] ], - "OFRDLNM9": [ - [ - "Generic", - "PLA", - "Peopoly Generic PLA" - ] - ], "OFRJ325z": [ [ "LH Stinger", @@ -11264,13 +10021,6 @@ "LHS PETG" ] ], - "OFRPEs5o": [ - [ - "Generic", - "ASA", - "Flashforge Generic ASA" - ] - ], "OFRhBryT": [ [ "Cubicon", @@ -11306,13 +10056,6 @@ "Panchroma PLA Celestial" ] ], - "OFRiyes1": [ - [ - "Generic", - "ASA", - "Anker Generic ASA" - ] - ], "OFRkjhxK": [ [ "Volumic", @@ -11341,20 +10084,6 @@ "DeltaMaker Brand PLA" ] ], - "OFRujL0v": [ - [ - "Generic", - "PET-CF", - "FusRock Generic PET-CF" - ] - ], - "OFRusgEn": [ - [ - "Generic", - "PVA", - "Chuanying Generic PVA" - ] - ], "OFRyOsZj": [ [ "re3D", @@ -11369,13 +10098,6 @@ "eSUN ePLA-LW" ] ], - "OFRzsaDK": [ - [ - "FlyingBear", - "TPU", - "FlyingBear Generic TPU" - ] - ], "OFS2tn6G": [ [ "Polymaker", @@ -11390,13 +10112,6 @@ "Eryone PA" ] ], - "OFS8JF3S": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA High Speed" - ] - ], "OFS8lTQt": [ [ "Polymaker", @@ -11404,27 +10119,6 @@ "Panchroma PLA Silk" ] ], - "OFSDFYs4": [ - [ - "Generic", - "PLA-CF", - "Creality Generic PLA-CF" - ] - ], - "OFSGbf2I": [ - [ - "Generic", - "PVA", - "Anycubic Generic PVA" - ] - ], - "OFSPdsuW": [ - [ - "Generic", - "PPA-CF", - "Tiertime Generic PPA-CF" - ] - ], "OFSStjay": [ [ "Generic", @@ -11474,13 +10168,6 @@ "Bambu PLA Impact" ] ], - "OFTKFAZ4": [ - [ - "Generic", - "PCTG", - "Tiertime Generic PCTG" - ] - ], "OFTOPcx0": [ [ "Eolas Prints", @@ -11565,13 +10252,6 @@ "Sovol SV06 ACE PLA" ] ], - "OFU0n0zW": [ - [ - "Generic", - "PLA", - "FLSun T1 PLA Generic" - ] - ], "OFU1zPxE": [ [ "Elegoo", @@ -11586,27 +10266,6 @@ "re3D PC" ] ], - "OFU3zwPc": [ - [ - "Generic", - "TPU", - "Prusa Generic TPU HF" - ] - ], - "OFU5N9jI": [ - [ - "Generic", - "TPU", - "OrcaArena Generic TPU" - ] - ], - "OFU6fjbi": [ - [ - "Co Print", - "ABS", - "CoPrint Generic ABS" - ] - ], "OFU7CKZt": [ [ "Volumic", @@ -11642,20 +10301,6 @@ "Snapmaker Dual PET" ] ], - "OFUScM0D": [ - [ - "Generic", - "S-Multi", - "FusRock S-Multi" - ] - ], - "OFUWRqwb": [ - [ - "Generic", - "PA-CF", - "Creality Generic PA-CF" - ] - ], "OFUYCqtB": [ [ "InfiMech", @@ -11670,13 +10315,6 @@ "Anycubic PEBA 95A" ] ], - "OFUaVAdj": [ - [ - "Generic", - "ASA", - "Tiertime Generic ASA" - ] - ], "OFUanySo": [ [ "Bambu Lab", @@ -11691,20 +10329,6 @@ "eSUN ASA+" ] ], - "OFUrStd6": [ - [ - "Generic", - "PETG", - "RatRig Generic PCTG" - ] - ], - "OFUtGagr": [ - [ - "Generic", - "PLA-CF", - "Artillery Generic PLA-CF" - ] - ], "OFUyDDNv": [ [ "Elegoo", @@ -11761,13 +10385,6 @@ "QIDI PETG Tough 0.2 nozzle" ] ], - "OFVKADz5": [ - [ - "Generic", - "PLA", - "Comgrow Generic PLA" - ] - ], "OFVptRxp": [ [ "COEX 3D", @@ -11775,13 +10392,6 @@ "COEX TPE 30D" ] ], - "OFVqZ2H0": [ - [ - "Generic", - "PC", - "FLSun Generic PC" - ] - ], "OFVtIasg": [ [ "Eryone", @@ -11810,13 +10420,6 @@ "Snapmaker PETG Translucent" ] ], - "OFW9uIkE": [ - [ - "Generic", - "HIPS", - "Tiertime Generic HIPS" - ] - ], "OFWDe7YH": [ [ "QIDI", @@ -11824,13 +10427,6 @@ "QIDI UltraPA" ] ], - "OFWIr7ZE": [ - [ - "CoLiDo", - "ABS", - "CoLiDo Generic ABS" - ] - ], "OFWRITFw": [ [ "Prusa Polymers", @@ -11852,13 +10448,6 @@ "FilAr PLA Bronce" ] ], - "OFWY6vBh": [ - [ - "Generic", - "PC", - "Anycubic Generic PC" - ] - ], "OFWYtgCa": [ [ "Elegoo", @@ -11873,13 +10462,6 @@ "Volumic NYLON Ultra" ] ], - "OFWadebJ": [ - [ - "Generic", - "PETG-CF", - "Tiertime Generic PETG-CF" - ] - ], "OFWao3Ic": [ [ "Creality", @@ -11887,13 +10469,6 @@ "Ender-PLA" ] ], - "OFWbbuRY": [ - [ - "InfiMech", - "ABS", - "InfiMech Generic ABS" - ] - ], "OFWbdGsC": [ [ "Generic", @@ -11915,20 +10490,6 @@ "Flashforge ASA-GF" ] ], - "OFWof1Ap": [ - [ - "Generic", - "ABS", - "FLSun Generic ABS" - ] - ], - "OFWukXja": [ - [ - "Generic", - "TPU", - "Qidi Generic TPU 95A" - ] - ], "OFWwF7K7": [ [ "FilAr", @@ -11936,13 +10497,6 @@ "FilAr PLA Cafe con Leche" ] ], - "OFWzr7m0": [ - [ - "Generic", - "PETG", - "Anycubic Generic PETG" - ] - ], "OFX0etlv": [ [ "re3D", @@ -11999,20 +10553,6 @@ "Elas PETG Basic" ] ], - "OFXXUHSG": [ - [ - "Generic", - "PETG-CF", - "Chuanying Generic PETG-CF10" - ] - ], - "OFXhZ3uY": [ - [ - "Generic", - "PC", - "OrcaArena Generic PC" - ] - ], "OFXi59OX": [ [ "Afinia", @@ -12034,6 +10574,13 @@ "Generic PP-CF" ] ], + "OFXmv5p0": [ + [ + "Generic", + "PLA", + "Generic Speed PLA" + ] + ], "OFXn3Vd9": [ [ "QIDI", @@ -12055,20 +10602,6 @@ "Volumic PLA Ultra" ] ], - "OFXuwtnq": [ - [ - "Co Print", - "PETG", - "CoPrint Generic PETG" - ] - ], - "OFXyyfX6": [ - [ - "Generic", - "PLA", - "Anker Generic PLA Silk" - ] - ], "OFXz7Mwx": [ [ "Elegoo", @@ -12125,20 +10658,6 @@ "PolyLite Dual PLA" ] ], - "OFYHzKyS": [ - [ - "Generic", - "PLA-CF", - "Vzbot Generic PLA-CF" - ] - ], - "OFYPdJ7t": [ - [ - "Generic", - "ABS", - "Creality Generic ABS" - ] - ], "OFYPdQJh": [ [ "Generic", @@ -12160,34 +10679,6 @@ "FlyingBear TPU" ] ], - "OFYl0c8v": [ - [ - "Generic", - "HIPS", - "Flashforge Generic HIPS" - ] - ], - "OFYlZMmy": [ - [ - "Generic", - "TPU", - "Chuanying Generic TPU" - ] - ], - "OFYlthXI": [ - [ - "Generic", - "PLA-CF", - "Flashforge Generic PLA-CF" - ] - ], - "OFYtS9zg": [ - [ - "Generic", - "PAHT-CF", - "FusRock PAHT-CF" - ] - ], "OFYuowge": [ [ "Other", @@ -12195,13 +10686,6 @@ "Other ABS" ] ], - "OFYvSO1W": [ - [ - "Generic", - "PLA", - "Flashforge Generic PLA-Silk" - ] - ], "OFZ0mR5b": [ [ "Anycubic", @@ -12209,13 +10693,6 @@ "Anycubic PLA-CF" ] ], - "OFZ1hANN": [ - [ - "FusRock", - "PA-CF", - "FusRock Generic NexPA-CF25" - ] - ], "OFZ2LuAi": [ [ "Yumi", @@ -12237,20 +10714,6 @@ "FilAr PLA Rosa Flamenco" ] ], - "OFZ4fTO8": [ - [ - "Generic", - "PETG", - "C1 Generic High Flow PETG" - ] - ], - "OFZHgTVI": [ - [ - "Generic", - "PETG", - "Flashforge Generic PETG" - ] - ], "OFZLtWYs": [ [ "QIDI", @@ -12265,13 +10728,6 @@ "QIDI PPS-CF" ] ], - "OFZPlCck": [ - [ - "Generic", - "ABS", - "Chuanying Generic ABS" - ] - ], "OFZivHGL": [ [ "Snapmaker", @@ -12279,11 +10735,11 @@ "Snapmaker Dual PLA" ] ], - "OFZsChIG": [ + "OFZr862X": [ [ "Generic", - "TPU", - "Qidi Generic TPU" + "PLA", + "Generic PLA HF" ] ], "OFZtOQtl": [ @@ -12314,6 +10770,13 @@ "FilAr PLA Celeste Cielo" ] ], + "OFaDsTE0": [ + [ + "Polymaker", + "PA", + "Polymaker S1" + ] + ], "OFaEesXQ": [ [ "FilAr", @@ -12363,13 +10826,6 @@ "SeeMeCNC PETG-CF" ] ], - "OFaU2JxD": [ - [ - "Generic", - "PLA", - "Dremel Generic PLA" - ] - ], "OFaYz8iE": [ [ "Elas", @@ -12398,13 +10854,6 @@ "Cubicon ABS" ] ], - "OFahE7HP": [ - [ - "Generic", - "PC", - "Blocks Generic PC" - ] - ], "OFausr3F": [ [ "FilAr", @@ -12433,6 +10882,13 @@ "Eolas Prints PLA Silk" ] ], + "OFbPuPKY": [ + [ + "Generic", + "FLEX", + "Generic FLEX" + ] + ], "OFbSChKb": [ [ "SeeMeCNC", @@ -12447,20 +10903,6 @@ "InfiMech TPU Basic" ] ], - "OFbeeFkl": [ - [ - "Generic", - "PLA", - "OrcaArena Generic PLA Silk" - ] - ], - "OFbenYUK": [ - [ - "Generic", - "TPU", - "Prusa Generic TPU" - ] - ], "OFbh7HcA": [ [ "Eryone", @@ -12475,20 +10917,6 @@ "FLSun T1 ASA" ] ], - "OFbt04e0": [ - [ - "Generic", - "TPU", - "DeltaMaker Generic TPU" - ] - ], - "OFc0xiCz": [ - [ - "InfiMech", - "TPU", - "InfiMech Generic TPU" - ] - ], "OFc3xdm9": [ [ "Overture", @@ -12510,13 +10938,6 @@ "Snapmaker Dual TPU High-Flow" ] ], - "OFcCzEkS": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA" - ] - ], "OFcJ7AKd": [ [ "Generic", @@ -12538,6 +10959,13 @@ "PA6 CF20 (Performance)" ] ], + "OFcVLpNA": [ + [ + "FusRock", + "PAHT-GF", + "FusRock PAHT-GF" + ] + ], "OFcdqaWI": [ [ "Generic", @@ -12559,13 +10987,6 @@ "WonderMaker PLA Metal" ] ], - "OFctbSkL": [ - [ - "Generic", - "ASA", - "Blocks Generic ASA-CF" - ] - ], "OFctg8r1": [ [ "CoLiDo", @@ -12594,13 +11015,6 @@ "Generic PE-CF" ] ], - "OFd10YeG": [ - [ - "Generic", - "PLA", - "RatRig Generic PLA" - ] - ], "OFd2vX0G": [ [ "COEX 3D", @@ -12622,20 +11036,6 @@ "Snapmaker J1 PLA-CF" ] ], - "OFdEIwxy": [ - [ - "Generic", - "PLA-CF", - "Flashforge Generic PLA-CF10" - ] - ], - "OFdHsxB4": [ - [ - "Generic", - "TPU", - "TwoTrees Generic 95A TPU" - ] - ], "OFdI4zMo": [ [ "DREMC", @@ -12643,20 +11043,6 @@ "DREMC ASA CF" ] ], - "OFdLdGgJ": [ - [ - "Generic", - "PVA", - "OrcaArena Generic PVA" - ] - ], - "OFdOWhCa": [ - [ - "Generic", - "PC", - "RatRig Generic PC" - ] - ], "OFdXVjGZ": [ [ "Tiertime", @@ -12664,13 +11050,6 @@ "Tiertime PC" ] ], - "OFdXgp2K": [ - [ - "Generic", - "PLA", - "Chuanying Generic HS PLA" - ] - ], "OFdb8YNz": [ [ "FilAr", @@ -12692,13 +11071,6 @@ "Cubicon PLAi21" ] ], - "OFdlGycb": [ - [ - "CoLiDo", - "TPU", - "CoLiDo Generic TPU" - ] - ], "OFdrYBmI": [ [ "Tiertime", @@ -12741,13 +11113,6 @@ "Sovol SV06 ACE PETG" ] ], - "OFe8UJXH": [ - [ - "Generic", - "PC", - "Creality Generic PC" - ] - ], "OFe8tuNb": [ [ "Tiertime", @@ -12776,13 +11141,6 @@ "QIDI ABS Rapido Metal" ] ], - "OFeDfaCh": [ - [ - "CoLiDo", - "PLA", - "CoLiDo Generic PLA" - ] - ], "OFeIyhUx": [ [ "Anycubic", @@ -12790,20 +11148,6 @@ "Anycubic PC-CF" ] ], - "OFeJjoKF": [ - [ - "Generic", - "PA", - "FLSun Generic PA" - ] - ], - "OFeK2vkS": [ - [ - "Generic", - "PLA", - "Chuanying Generic PLA-Silk" - ] - ], "OFeTATC7": [ [ "Snapmaker", @@ -12853,13 +11197,6 @@ "Generic PLA Silk" ] ], - "OFetENFF": [ - [ - "Generic", - "ABS", - "OrcaArena Generic ABS" - ] - ], "OFexaZU2": [ [ "FilAr", @@ -12951,13 +11288,6 @@ "Polymaker PLA-HT" ] ], - "OFfZ0lTS": [ - [ - "Generic", - "PETG-CF", - "Qidi Generic PETG-CF" - ] - ], "OFfZcoKr": [ [ "FilAr", @@ -12972,13 +11302,6 @@ "Artillery PC" ] ], - "OFfegVpA": [ - [ - "Polymaker", - "PA", - "Polymaker Generic S1" - ] - ], "OFfmHUkQ": [ [ "Snapmaker", @@ -13035,20 +11358,6 @@ "Creality Silk PLA" ] ], - "OFfxFQf9": [ - [ - "Generic", - "PETG", - "Chuanying Generic PETG" - ] - ], - "OFfznI0Q": [ - [ - "Generic", - "PA-CF", - "Prusa Generic PA-CF" - ] - ], "OFg3cWVt": [ [ "Snapmaker", @@ -13091,20 +11400,6 @@ "FilAr PLA Negro Azabache" ] ], - "OFgSEwOZ": [ - [ - "Generic", - "PETG", - "OrcaArena Generic PETG" - ] - ], - "OFgSPtDn": [ - [ - "Generic", - "PEEK", - "MM Generic PEEK" - ] - ], "OFgSbX7E": [ [ "Volumic", @@ -13112,13 +11407,6 @@ "Volumic PC (Performance)" ] ], - "OFgVJhVt": [ - [ - "Generic", - "PLA-CF", - "Tiertime Generic PLA-CF" - ] - ], "OFgVQkqW": [ [ "Cubicon", @@ -13196,13 +11484,6 @@ "Arena PLA Matte" ] ], - "OFgvOmM2": [ - [ - "Generic", - "PETG", - "Anker Generic PETG" - ] - ], "OFgyPlwU": [ [ "Snapmaker", @@ -13308,13 +11589,6 @@ "Elegoo PLA Sparkle" ] ], - "OFhcrFw9": [ - [ - "Generic", - "TPU", - "Creality Generic TPU" - ] - ], "OFhfd722": [ [ "Eolas Prints", @@ -13399,13 +11673,6 @@ "Volumic NYLON Ultra (Performance)" ] ], - "OFiCHnso": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA" - ] - ], "OFiDpM1B": [ [ "FilAr", @@ -13420,13 +11687,6 @@ "Cubicon PA-CF" ] ], - "OFiUSDih": [ - [ - "Generic", - "PA", - "Blocks Generic PA" - ] - ], "OFiWaoqD": [ [ "DREMC", @@ -13434,13 +11694,6 @@ "DREMC PPA-CF" ] ], - "OFifxPW1": [ - [ - "Generic", - "PLA", - "DeltaMaker Generic PLA" - ] - ], "OFilAA3b": [ [ "Eryone", @@ -13469,13 +11722,6 @@ "Generic Support for PLA" ] ], - "OFiorRtJ": [ - [ - "Generic", - "PVA", - "Blocks Generic PVA" - ] - ], "OFitS8al": [ [ "Polymaker", @@ -13602,13 +11848,6 @@ "Qidi PLA-CF" ] ], - "OFjoIVZ6": [ - [ - "FlyingBear", - "PA-CF", - "FlyingBear Generic PA-CF" - ] - ], "OFjorDcx": [ [ "FDplast", @@ -13616,6 +11855,13 @@ "FDplast ABS" ] ], + "OFjt8dDO": [ + [ + "FusRock", + "PA-CF", + "FusRock NexPA-CF25" + ] + ], "OFjt9en1": [ [ "Generic", @@ -13672,13 +11918,6 @@ "Prusament PETG" ] ], - "OFkUaDnU": [ - [ - "Generic", - "PE-CF", - "Tiertime Generic PE-CF" - ] - ], "OFkWaWRo": [ [ "Generic", @@ -13686,11 +11925,11 @@ "Sovol SV06 Plus ACE TPU" ] ], - "OFkYkQGO": [ + "OFkf1HHw": [ [ "Generic", - "PP-GF", - "Tiertime Generic PP-GF" + "PLA", + "Generic PLA-SILK" ] ], "OFkhhUS0": [ @@ -13756,20 +11995,6 @@ "Eolas Prints PLA Antibacterial" ] ], - "OFl2SXmv": [ - [ - "Generic", - "FLEX", - "Prusa Generic FLEX" - ] - ], - "OFl4ItvQ": [ - [ - "Generic", - "PLA", - "Prusa Generic PLA HF" - ] - ], "OFl7nOAf": [ [ "Generic", @@ -13791,13 +12016,6 @@ "Snapmaker Dual PLA Matte" ] ], - "OFlLmUeV": [ - [ - "Generic", - "PLA", - "Ginger Generic PLA" - ] - ], "OFlN6DL1": [ [ "QIDI", @@ -13805,13 +12023,6 @@ "QIDI PA-Ultra" ] ], - "OFlNWVr5": [ - [ - "Generic", - "PETG-CF", - "Flashforge Generic PETG-CF10" - ] - ], "OFlP3KWq": [ [ "Elegoo", @@ -13868,13 +12079,6 @@ "Polymaker HT-PLA-GF" ] ], - "OFlx52rn": [ - [ - "Generic", - "PLA-CF", - "RatRig Generic PLA-CF" - ] - ], "OFm06H6V": [ [ "Elegoo", @@ -13945,13 +12149,6 @@ "Generic PLA Matte" ] ], - "OFma52eS": [ - [ - "Generic", - "ABS", - "Blocks Generic ABS" - ] - ], "OFma5TXH": [ [ "QIDI", @@ -13987,13 +12184,6 @@ "Elegoo TPU" ] ], - "OFmhWhEf": [ - [ - "Generic", - "PLA", - "Creality HF Generic PLA" - ] - ], "OFmjN2bc": [ [ "Anycubic", @@ -14008,13 +12198,6 @@ "FusRock ABS-GF" ] ], - "OFmnJNqY": [ - [ - "Generic", - "PA", - "OrcaArena Generic PA" - ] - ], "OFmpMwxS": [ [ "Generic", @@ -14029,13 +12212,6 @@ "Elegoo PETG-GF" ] ], - "OFmzftED": [ - [ - "Generic", - "ASA", - "OrcaArena Generic ASA" - ] - ], "OFn1QaY3": [ [ "Elegoo", @@ -14085,6 +12261,13 @@ "CoLiDo PLA Silk" ] ], + "OFnT7Qpb": [ + [ + "Generic", + "TPU", + "Generic TPU HF" + ] + ], "OFnXrkhA": [ [ "InfiMech", @@ -14113,13 +12296,6 @@ "WonderMaker PLA Silk" ] ], - "OFndmfJ1": [ - [ - "Generic", - "PLA", - "Anker Generic PLA" - ] - ], "OFneOFWe": [ [ "CoLiDo", @@ -14134,13 +12310,6 @@ "FilAr PETG Cian" ] ], - "OFnfBvn5": [ - [ - "Generic", - "PLA", - "Artillery Generic PLA" - ] - ], "OFngcE81": [ [ "LH Stinger", @@ -14148,13 +12317,6 @@ "LHS TPU Foamy 78A" ] ], - "OFnh79eM": [ - [ - "Generic", - "ABS", - "SecKit Generic ABS" - ] - ], "OFniMuTN": [ [ "Bambu Lab", @@ -14197,20 +12359,6 @@ "Cubicon PETG" ] ], - "OFoDgVnY": [ - [ - "Generic", - "PLA", - "FLSun S1 PLA Generic" - ] - ], - "OFoJcr46": [ - [ - "Generic", - "ASA", - "Prusa Generic ASA" - ] - ], "OFoSknDB": [ [ "FILL3D", @@ -14218,20 +12366,6 @@ "FILL3D PLA Turbo" ] ], - "OFoT8F7Y": [ - [ - "Generic", - "PVA", - "Prusa Generic PVA HF" - ] - ], - "OFoVZg32": [ - [ - "Generic", - "TPU", - "SecKit Generic TPU" - ] - ], "OFoYSJKi": [ [ "Generic", @@ -14253,13 +12387,6 @@ "AliZ PETG" ] ], - "OFodPDxO": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA High Speed" - ] - ], "OFogbnCb": [ [ "Generic", @@ -14309,13 +12436,6 @@ "QIDI PPS-GF" ] ], - "OFp8gtPH": [ - [ - "Generic", - "PLA", - "Creality Generic PLA Silk" - ] - ], "OFp9wdmf": [ [ "Eryone", @@ -14323,13 +12443,6 @@ "Eryone PA-CF" ] ], - "OFpAaY6w": [ - [ - "Generic", - "ASA", - "Creality Generic ASA" - ] - ], "OFpBV2Ma": [ [ "Generic", @@ -14365,13 +12478,6 @@ "Peopoly Lancer PETG-C" ] ], - "OFpSYJLI": [ - [ - "Generic", - "PLA", - "Creality Generic PLA Matte" - ] - ], "OFpW4gdi": [ [ "SUNLU", @@ -14379,13 +12485,6 @@ "SUNLU PLA Matte" ] ], - "OFptvi3F": [ - [ - "Generic", - "PPA-GF", - "Tiertime Generic PPA-GF" - ] - ], "OFpu74Qe": [ [ "Snapmaker", @@ -14407,13 +12506,6 @@ "Flashforge ASA-CF" ] ], - "OFq5QANf": [ - [ - "Generic", - "PC", - "Prusa Generic PC HF" - ] - ], "OFq8gfS4": [ [ "FilAr", @@ -14442,27 +12534,6 @@ "eSUN PLA+" ] ], - "OFqKmLJe": [ - [ - "Generic", - "PETG", - "Creality Generic PETG-CF" - ] - ], - "OFqOk9Ww": [ - [ - "Generic", - "ABS", - "Peopoly Generic ABS" - ] - ], - "OFqS8fzK": [ - [ - "Generic", - "PETG", - "SecKit Generic PETG" - ] - ], "OFqcL5UF": [ [ "QIDI", @@ -14519,13 +12590,6 @@ "CR-PLA Carbon" ] ], - "OFrO2zyn": [ - [ - "Generic", - "PLA", - "Creality Generic PLA High Speed" - ] - ], "OFrOh600": [ [ "Polymaker", @@ -14533,13 +12597,6 @@ "Panchroma PLA Matte" ] ], - "OFrQqCwL": [ - [ - "InfiMech", - "PLA", - "InfiMech Generic PLA" - ] - ], "OFrdZ0cK": [ [ "eSUN", @@ -14547,20 +12604,6 @@ "eSUN PETG+HS" ] ], - "OFrgGex8": [ - [ - "Generic", - "PETG", - "Blocks Generic PETG" - ] - ], - "OFrh4bBH": [ - [ - "Generic", - "ASA", - "SecKit Generic ASA" - ] - ], "OFrjacXf": [ [ "Flashforge", @@ -14568,13 +12611,6 @@ "Flashforge PET-CF" ] ], - "OFrnJJEa": [ - [ - "Generic", - "EVA", - "Tiertime Generic EVA" - ] - ], "OFrnkURQ": [ [ "Generic", @@ -14589,13 +12625,6 @@ "Arena PC" ] ], - "OFrrMLDw": [ - [ - "Generic", - "PLA", - "Flashforge Generic PLA-SILK" - ] - ], "OFryjl35": [ [ "Elegoo", @@ -14610,13 +12639,6 @@ "Chuanying ABS" ] ], - "OFs2ReMr": [ - [ - "InfiMech", - "PETG", - "InfiMech Generic PETG" - ] - ], "OFsB2lxm": [ [ "Elegoo", @@ -14624,13 +12646,6 @@ "Elegoo PLA Matte" ] ], - "OFsCbVbN": [ - [ - "Generic", - "PVA", - "Anker Generic PVA" - ] - ], "OFsD974q": [ [ "Volumic", @@ -14645,13 +12660,6 @@ "FilAr PLA Piel" ] ], - "OFsF96Gt": [ - [ - "Generic", - "PLA-CF", - "FLSun Generic PLA-CF" - ] - ], "OFsFo7ms": [ [ "Volumic", @@ -14666,13 +12674,6 @@ "Generic HIPS" ] ], - "OFsGqI4y": [ - [ - "Generic", - "PETG", - "Ginger Generic PETG" - ] - ], "OFsHSVZc": [ [ "Bambu Lab", @@ -14701,13 +12702,6 @@ "Panchroma PLA" ] ], - "OFsXOMoX": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA+" - ] - ], "OFsXQXbs": [ [ "FilAr", @@ -14715,11 +12709,11 @@ "FilAr PETG Blanco Antartida" ] ], - "OFsoQ12i": [ + "OFsijjtH": [ [ "Generic", - "ABS", - "Comgrow Generic ABS" + "PP-GF", + "Generic PP-GF" ] ], "OFsoykbm": [ @@ -14729,20 +12723,6 @@ "DREMC PA6-CF" ] ], - "OFsxRSwr": [ - [ - "Generic", - "PVA", - "RatRig Generic PVA" - ] - ], - "OFsxlLdo": [ - [ - "Generic", - "ASA", - "Qidi Generic ASA" - ] - ], "OFt0JbR7": [ [ "Snapmaker", @@ -14806,13 +12786,6 @@ "FilAr PLA-mate" ] ], - "OFtP1rqJ": [ - [ - "Generic", - "PVA", - "FLSun Generic PVA" - ] - ], "OFtRn8X8": [ [ "FDplast", @@ -14820,13 +12793,6 @@ "FDplast SBS" ] ], - "OFtTHNTj": [ - [ - "Generic", - "PLA", - "Flashforge Generic PLA" - ] - ], "OFtTYl9Q": [ [ "Generic", @@ -14862,13 +12828,6 @@ "FDplast PLA" ] ], - "OFtsVp4v": [ - [ - "Generic", - "PA-CF", - "SecKit Generic PA-CF" - ] - ], "OFtudokz": [ [ "Eolas Prints", @@ -14911,13 +12870,6 @@ "Generic PCTG" ] ], - "OFu79SUH": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA" - ] - ], "OFuFqYyG": [ [ "Generic", @@ -14946,13 +12898,6 @@ "Arena PETG-CF" ] ], - "OFuSwKgm": [ - [ - "Generic", - "PLA", - "Tiertime Generic PLA" - ] - ], "OFuUJyRx": [ [ "Generic", @@ -15016,13 +12961,6 @@ "Generic TPU 85A" ] ], - "OFupq0tY": [ - [ - "Generic", - "PLA-CF", - "Blocks Generic PLA-CF" - ] - ], "OFurdQxc": [ [ "FilAr", @@ -15044,13 +12982,6 @@ "Volumic FLEX93 Ultra" ] ], - "OFv4VZCd": [ - [ - "Generic", - "ABS", - "Qidi Generic ABS" - ] - ], "OFvDbkFq": [ [ "Prusa Polymers", @@ -15058,13 +12989,6 @@ "Prusament PC Blend" ] ], - "OFvGc67v": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS" - ] - ], "OFvKUnLh": [ [ "Bambu Lab", @@ -15086,13 +13010,6 @@ "FilAr PLA Verde FilAr" ] ], - "OFvPomQf": [ - [ - "Generic", - "PPS", - "Tiertime Generic PPS" - ] - ], "OFvTVZc3": [ [ "COEX 3D", @@ -15142,6 +13059,13 @@ "Fiberon PA12-CF10" ] ], + "OFvxghTE": [ + [ + "Generic", + "PLA", + "Generic HS PLA" + ] + ], "OFvyB0Bz": [ [ "Polymaker", @@ -15170,13 +13094,6 @@ "HATCHBOX ABS" ] ], - "OFwMFLAm": [ - [ - "Generic", - "ABS", - "Artillery Generic ABS" - ] - ], "OFwPrlCM": [ [ "Bambu Lab", @@ -15219,13 +13136,6 @@ "Snapmaker PLA SnapSpeed" ] ], - "OFwpkvqf": [ - [ - "Orca Arena", - "PETG-CF", - "OrcaArena Generic PETG-CF" - ] - ], "OFwu7IAG": [ [ "COEX 3D", @@ -15233,11 +13143,11 @@ "COEX PCTG PRIME" ] ], - "OFwxpmHM": [ + "OFwwAQnA": [ [ - "Polymaker", - "PA", - "Polymaker Generic CoPA" + "Generic", + "PC", + "Generic PC HF" ] ], "OFwyt1xt": [ @@ -15247,13 +13157,6 @@ "Eryone ASA-CF" ] ], - "OFx0ZzFV": [ - [ - "Generic", - "PLA-CF", - "OrcaArena Generic PLA-CF" - ] - ], "OFx8Lmsd": [ [ "Eolas Prints", @@ -15296,13 +13199,6 @@ "Elegoo ABS" ] ], - "OFxTMg1d": [ - [ - "FlyingBear", - "PC", - "FlyingBear Generic PC" - ] - ], "OFxUwUeW": [ [ "SUNLU", @@ -15324,20 +13220,6 @@ "PolyTerra PLA Marble" ] ], - "OFxg7n2G": [ - [ - "Generic", - "PETG", - "RatRig Generic PETG" - ] - ], - "OFxvKuYW": [ - [ - "Generic", - "PHA", - "Tiertime Generic PHA" - ] - ], "OFy02QHU": [ [ "Polymaker", @@ -15366,13 +13248,6 @@ "Generic TPU-95A" ] ], - "OFy4ajVZ": [ - [ - "Generic", - "PLA", - "Qidi Generic PLA Silk" - ] - ], "OFy8tYJE": [ [ "Cubicon", @@ -15387,13 +13262,6 @@ "Sovol SV08 TPU" ] ], - "OFyFRojy": [ - [ - "Generic", - "ABS", - "RatRig Generic ABS" - ] - ], "OFyFyLIp": [ [ "SeeMeCNC", @@ -15408,13 +13276,6 @@ "Arena PLA Sparkle" ] ], - "OFyK5Lt9": [ - [ - "Generic", - "PETG", - "Artillery Generic PETG" - ] - ], "OFyLWVF3": [ [ "Generic", @@ -15457,13 +13318,6 @@ "FilAr PETG Gris Ceniza" ] ], - "OFyeSq8A": [ - [ - "Generic", - "ABS", - "Prusa Generic ABS HF" - ] - ], "OFyhjiNs": [ [ "Snapmaker", @@ -15520,18 +13374,11 @@ "AliZ PLA" ] ], - "OFyySVby": [ + "OFz5oHgf": [ [ "Generic", - "PVA", - "SecKit Generic PVA" - ] - ], - "OFz3q5Xz": [ - [ - "Generic", - "PETG", - "C1 Generic PETG" + "PEEK", + "Generic PEEK" ] ], "OFzAWsca": [ @@ -15548,6 +13395,13 @@ "Sovol Zero PLA Basic HS Nozzle" ] ], + "OFzRtFM9": [ + [ + "Generic", + "ASA", + "Generic ASA HF" + ] + ], "OFzS7zt4": [ [ "Anycubic", @@ -15555,13 +13409,6 @@ "Anycubic PA" ] ], - "OFzXURfo": [ - [ - "FlyingBear", - "PETG", - "FlyingBear Generic PETG" - ] - ], "OFzY7N3Z": [ [ "Artillery", @@ -15583,6 +13430,13 @@ "LHS ABS" ] ], + "OFzwA5Z9": [ + [ + "FusRock", + "PET-GF", + "FusRock PET-GF" + ] + ], "OFzyIxba": [ [ "Bambu Lab", From ab21af6b08d7a44918b75c169191fb3534394a62 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 1 Sep 2026 17:44:12 +0800 Subject: [PATCH 075/208] fix filament names --- resources/profiles/Chuanying.json | 26 +- ...eneric ABS @Chuanying X1 0.25 Nozzle.json} | 8 +- ...eneric ASA @Chuanying X1 0.25 Nozzle.json} | 7 +- ...ric HS PLA @Chuanying X1 0.25 Nozzle.json} | 7 +- ...neric PETG @Chuanying X1 0.25 Nozzle.json} | 8 +- ...eneric PLA @Chuanying X1 0.25 Nozzle.json} | 7 +- ...c PLA-Silk @Chuanying X1 0.25 Nozzle.json} | 7 +- resources/profiles/Comgrow.json | 6 +- ...LA.json => Generic PLA @Comgrow T300.json} | 6 +- .../Comgrow/machine/Comgrow T300.json | 2 +- resources/profiles/FLSun.json | 50 +- ...S1 ABS.json => Generic ABS @FLSun S1.json} | 6 +- ...T1 ABS.json => Generic ABS @FLSun T1.json} | 6 +- ...S1 ASA.json => Generic ASA @FLSun S1.json} | 6 +- ...T1 ASA.json => Generic ASA @FLSun T1.json} | 6 +- ... PETG.json => Generic PETG @FLSun S1.json} | 6 +- ... PETG.json => Generic PETG @FLSun T1.json} | 6 +- ... => Generic PLA High Speed @FLSun S1.json} | 11 +- ... => Generic PLA High Speed @FLSun T1.json} | 11 +- ...k.json => Generic PLA Silk @FLSun S1.json} | 11 +- ...k.json => Generic PLA Silk @FLSun T1.json} | 11 +- ...S1 TPU.json => Generic TPU @FLSun S1.json} | 6 +- ...T1 TPU.json => Generic TPU @FLSun T1.json} | 6 +- .../profiles/FLSun/machine/FLSun S1.json | 2 +- .../profiles/FLSun/machine/FLSun T1.json | 2 +- resources/profiles/Lulzbot.json | 14 +- ...5mm ABS.json => Generic ABS @Lulzbot.json} | 6 +- ...m PETG.json => Generic PETG @Lulzbot.json} | 6 +- ...5mm PLA.json => Generic PLA @Lulzbot.json} | 6 +- .../Lulzbot Taz 4 or 5 0.5 nozzle.json | 2 +- .../Lulzbot/machine/Lulzbot Taz 4 or 5.json | 2 +- .../machine/Lulzbot Taz 6 0.5 nozzle.json | 2 +- .../Lulzbot/machine/Lulzbot Taz 6.json | 2 +- .../Lulzbot Taz Pro Dual 0.5 nozzle.json | 2 +- .../Lulzbot/machine/Lulzbot Taz Pro Dual.json | 2 +- resources/profiles/Phrozen.json | 6 +- ...Generic PLA @Phrozen Arco 0.4 nozzle.json} | 10 +- .../machine/Phrozen Arco 0.4 nozzle.json | 2 +- .../Phrozen/machine/Phrozen Arco.json | 2 +- resources/profiles/Qidi.json | 2 +- .../Qidi/filament/Tinmorry PETG-ECO.json | 4 +- resources/profiles/Snapmaker.json | 2 +- .../filament/Snapmaker TPU 95A @U1 base.json | 4 +- .../filament/Snapmaker TPU 95A @U1.json | 2 +- resources/profiles/Sovol.json | 82 +-- ....json => Generic ABS @Sovol SV06 ACE.json} | 6 +- ... => Generic ABS @Sovol SV06 Plus ACE.json} | 6 +- ... ABS.json => Generic ABS @Sovol SV08.json} | 6 +- ... ABS.json => Generic ABS @Sovol Zero.json} | 6 +- ...ro PC.json => Generic PC @Sovol Zero.json} | 6 +- ...json => Generic PETG @Sovol SV06 ACE.json} | 6 +- ...=> Generic PETG @Sovol SV06 Plus ACE.json} | 6 +- ...ETG.json => Generic PETG @Sovol SV08.json} | 6 +- ...ETG.json => Generic PETG @Sovol Zero.json} | 6 +- ....json => Generic PLA @Sovol SV06 ACE.json} | 6 +- ... => Generic PLA @Sovol SV06 Plus ACE.json} | 6 +- ... PLA.json => Generic PLA @Sovol SV07.json} | 6 +- ...> Generic PLA @Sovol SV08 0.2 nozzle.json} | 6 +- ... PLA.json => Generic PLA @Sovol SV08.json} | 6 +- ...asic.json => Generic PLA @Sovol Zero.json} | 6 +- ...json => Generic PLA Silk @Sovol Zero.json} | 14 +- ....json => Generic TPU @Sovol SV06 ACE.json} | 6 +- ... => Generic TPU @Sovol SV06 Plus ACE.json} | 6 +- ... TPU.json => Generic TPU @Sovol SV08.json} | 6 +- ... TPU.json => Generic TPU @Sovol Zero.json} | 6 +- .../machine/Sovol SV06 ACE 0.2 nozzle.json | 2 +- .../machine/Sovol SV06 ACE 0.4 nozzle.json | 2 +- .../machine/Sovol SV06 ACE 0.6 nozzle.json | 2 +- .../machine/Sovol SV06 ACE 0.8 nozzle.json | 2 +- .../Sovol/machine/Sovol SV06 ACE.json | 2 +- .../Sovol SV06 Plus ACE 0.4 nozzle.json | 2 +- .../Sovol/machine/Sovol SV06 Plus ACE.json | 2 +- .../profiles/Sovol/machine/Sovol SV07.json | 2 +- .../Sovol/machine/Sovol SV08 0.2 nozzle.json | 2 +- .../Sovol/machine/Sovol SV08 0.4 nozzle.json | 2 +- .../Sovol/machine/Sovol SV08 0.6 nozzle.json | 2 +- .../Sovol/machine/Sovol SV08 0.8 nozzle.json | 2 +- .../profiles/Sovol/machine/Sovol SV08.json | 2 +- .../Sovol/machine/Sovol Zero 0.4 nozzle.json | 2 +- .../profiles/Sovol/machine/Sovol Zero.json | 2 +- resources/profiles/retired_filament_ids.json | 240 ++++++++ scripts/assign_filament_ids.py | 19 +- scripts/filament_id_snapshot.json | 532 +----------------- 83 files changed, 570 insertions(+), 769 deletions(-) rename resources/profiles/Chuanying/filament/{Chuanying ABS @Chuanying X1 0.25 Nozzle.json => Generic ABS @Chuanying X1 0.25 Nozzle.json} (62%) rename resources/profiles/Chuanying/filament/{Chuanying ASA @Chuanying X1 0.25 Nozzle.json => Generic ASA @Chuanying X1 0.25 Nozzle.json} (67%) rename resources/profiles/Chuanying/filament/{Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json => Generic HS PLA @Chuanying X1 0.25 Nozzle.json} (74%) rename resources/profiles/Chuanying/filament/{Chuanying PETG @Chuanying X1 0.25 Nozzle.json => Generic PETG @Chuanying X1 0.25 Nozzle.json} (60%) rename resources/profiles/Chuanying/filament/{Chuanying PLA @Chuanying X1 0.25 Nozzle.json => Generic PLA @Chuanying X1 0.25 Nozzle.json} (74%) rename resources/profiles/Chuanying/filament/{Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json => Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json} (75%) rename resources/profiles/Comgrow/filament/{Comgrow T300 PLA.json => Generic PLA @Comgrow T300.json} (86%) rename resources/profiles/FLSun/filament/{FLSun S1 ABS.json => Generic ABS @FLSun S1.json} (91%) rename resources/profiles/FLSun/filament/{FLSun T1 ABS.json => Generic ABS @FLSun T1.json} (91%) rename resources/profiles/FLSun/filament/{FLSun S1 ASA.json => Generic ASA @FLSun S1.json} (91%) rename resources/profiles/FLSun/filament/{FLSun T1 ASA.json => Generic ASA @FLSun T1.json} (91%) rename resources/profiles/FLSun/filament/{FLSun S1 PETG.json => Generic PETG @FLSun S1.json} (90%) rename resources/profiles/FLSun/filament/{FLSun T1 PETG.json => Generic PETG @FLSun T1.json} (90%) rename resources/profiles/FLSun/filament/{FLSun S1 PLA High Speed.json => Generic PLA High Speed @FLSun S1.json} (79%) rename resources/profiles/FLSun/filament/{FLSun T1 PLA High Speed.json => Generic PLA High Speed @FLSun T1.json} (79%) rename resources/profiles/FLSun/filament/{FLSun S1 PLA Silk.json => Generic PLA Silk @FLSun S1.json} (81%) rename resources/profiles/FLSun/filament/{FLSun T1 PLA Silk.json => Generic PLA Silk @FLSun T1.json} (81%) rename resources/profiles/FLSun/filament/{FLSun S1 TPU.json => Generic TPU @FLSun S1.json} (91%) rename resources/profiles/FLSun/filament/{FLSun T1 TPU.json => Generic TPU @FLSun T1.json} (91%) rename resources/profiles/Lulzbot/filament/{Lulzbot 2.85mm ABS.json => Generic ABS @Lulzbot.json} (74%) rename resources/profiles/Lulzbot/filament/{Lulzbot 2.85mm PETG.json => Generic PETG @Lulzbot.json} (74%) rename resources/profiles/Lulzbot/filament/{Lulzbot 2.85mm PLA.json => Generic PLA @Lulzbot.json} (74%) rename resources/profiles/Phrozen/filament/{Phrozen PLA @Phrozen Arco 0.4 nozzle.json => Generic PLA @Phrozen Arco 0.4 nozzle.json} (94%) rename resources/profiles/Sovol/filament/{Sovol SV06 ACE ABS.json => Generic ABS @Sovol SV06 ACE.json} (87%) rename resources/profiles/Sovol/filament/{Sovol SV06 Plus ACE ABS.json => Generic ABS @Sovol SV06 Plus ACE.json} (84%) rename resources/profiles/Sovol/filament/{Sovol SV08 ABS.json => Generic ABS @Sovol SV08.json} (91%) rename resources/profiles/Sovol/filament/{Sovol Zero ABS.json => Generic ABS @Sovol Zero.json} (90%) rename resources/profiles/Sovol/filament/{Sovol Zero PC.json => Generic PC @Sovol Zero.json} (90%) rename resources/profiles/Sovol/filament/{Sovol SV06 ACE PETG.json => Generic PETG @Sovol SV06 ACE.json} (87%) rename resources/profiles/Sovol/filament/{Sovol SV06 Plus ACE PETG.json => Generic PETG @Sovol SV06 Plus ACE.json} (84%) rename resources/profiles/Sovol/filament/{Sovol SV08 PETG.json => Generic PETG @Sovol SV08.json} (90%) rename resources/profiles/Sovol/filament/{Sovol Zero PETG.json => Generic PETG @Sovol Zero.json} (91%) rename resources/profiles/Sovol/filament/{Sovol SV06 ACE PLA.json => Generic PLA @Sovol SV06 ACE.json} (87%) rename resources/profiles/Sovol/filament/{Sovol SV06 Plus ACE PLA.json => Generic PLA @Sovol SV06 Plus ACE.json} (85%) rename resources/profiles/Sovol/filament/{Sovol SV07 PLA.json => Generic PLA @Sovol SV07.json} (87%) rename resources/profiles/Sovol/filament/{Sovol SV08 PLA @SV08 0.2 nozzle.json => Generic PLA @Sovol SV08 0.2 nozzle.json} (84%) rename resources/profiles/Sovol/filament/{Sovol SV08 PLA.json => Generic PLA @Sovol SV08.json} (89%) rename resources/profiles/Sovol/filament/{Sovol Zero PLA Basic.json => Generic PLA @Sovol Zero.json} (90%) rename resources/profiles/Sovol/filament/{Sovol Zero PLA Silk.json => Generic PLA Silk @Sovol Zero.json} (80%) rename resources/profiles/Sovol/filament/{Sovol SV06 ACE TPU.json => Generic TPU @Sovol SV06 ACE.json} (87%) rename resources/profiles/Sovol/filament/{Sovol SV06 Plus ACE TPU.json => Generic TPU @Sovol SV06 Plus ACE.json} (85%) rename resources/profiles/Sovol/filament/{Sovol SV08 TPU.json => Generic TPU @Sovol SV08.json} (90%) rename resources/profiles/Sovol/filament/{Sovol Zero TPU.json => Generic TPU @Sovol Zero.json} (90%) diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index 746a31e334..d994843f60 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ @@ -70,36 +70,36 @@ "sub_path": "filament/Generic PLA-Silk @Chuanying.json" }, { - "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json" + "name": "Generic ABS @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic ABS @Chuanying X1 0.25 Nozzle.json" }, { "name": "Generic HIPS @Chuanying", "sub_path": "filament/Generic HIPS @Chuanying.json" }, { - "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic ASA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic ASA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic HS PLA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying PETG @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PETG @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PETG @Chuanying X1 0.25 Nozzle.json" }, { "name": "Generic PVA @Chuanying", "sub_path": "filament/Generic PVA @Chuanying.json" }, { - "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PLA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json" }, { "name": "Generic PETG-CF10 @Chuanying", diff --git a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json similarity index 62% rename from resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json index 8a2a02e2f6..f54d17ef0d 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json @@ -1,16 +1,16 @@ { "type": "filament", - "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", + "name": "Generic ABS @Chuanying X1 0.25 Nozzle", "inherits": "Generic ABS @Chuanying", + "renamed_from": "Chuanying ABS @Chuanying X1 0.25 Nozzle;Chuanying ABS Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "VkCgo0e4KR24DX28", - "filament_id": "OFs1sNLz", + "setting_id": "uHqfv6eUDzoxEkEj", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying ABS @Chuanying X1 0.25 Nozzle" + "Generic ABS @Chuanying X1 0.25 Nozzle" ], "fan_max_speed": [ "50" diff --git a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json similarity index 67% rename from resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json index 018b418f50..690f31669a 100644 --- a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json @@ -1,15 +1,16 @@ { "type": "filament", - "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", + "name": "Generic ASA @Chuanying X1 0.25 Nozzle", "inherits": "Generic ASA @Chuanying", + "renamed_from": "Chuanying ASA @Chuanying X1 0.25 Nozzle;Chuanying ASA Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "px1EPCDgOG8eE81V", + "setting_id": "bVxY01TC9sAM9KQW", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying ASA @Chuanying X1 0.25 Nozzle" + "Generic ASA @Chuanying X1 0.25 Nozzle" ], "fan_max_speed": [ "50" diff --git a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json similarity index 74% rename from resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json index 2cf18e831f..339fae8619 100644 --- a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json @@ -1,15 +1,16 @@ { "type": "filament", - "name": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle", + "name": "Generic HS PLA @Chuanying X1 0.25 Nozzle", "inherits": "Generic HS PLA @Chuanying", + "renamed_from": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle;Chuanying HS PLA Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "CAdli5S8JIFafvRG", + "setting_id": "gdW1LIVf6BecAtpa", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying HS PLA @Chuanying X1 0.25 Nozzle" + "Generic HS PLA @Chuanying X1 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json similarity index 60% rename from resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json index e41bc4221b..88eaf57c01 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json @@ -1,16 +1,16 @@ { "type": "filament", - "name": "Chuanying PETG @Chuanying X1 0.25 Nozzle", + "name": "Generic PETG @Chuanying X1 0.25 Nozzle", "inherits": "Generic PETG @Chuanying", + "renamed_from": "Chuanying PETG @Chuanying X1 0.25 Nozzle;Chuanying PETG Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "9xxP8YWj4hnWQoVZ", - "filament_id": "OFlXJxX1", + "setting_id": "YQ0HAxEDmMQgqNGY", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying PETG @Chuanying X1 0.25 Nozzle" + "Generic PETG @Chuanying X1 0.25 Nozzle" ], "fan_max_speed": [ "80" diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json similarity index 74% rename from resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json index 7bdab64af6..cea064f9da 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json @@ -1,15 +1,16 @@ { "type": "filament", - "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", + "name": "Generic PLA @Chuanying X1 0.25 Nozzle", "inherits": "Generic PLA @Chuanying", + "renamed_from": "Chuanying PLA @Chuanying X1 0.25 Nozzle;Chuanying PLA Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "3WDFe1uKTOTiRtPE", + "setting_id": "XsPEVGHYiyAX4YXy", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying PLA @Chuanying X1 0.25 Nozzle" + "Generic PLA @Chuanying X1 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json similarity index 75% rename from resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json rename to resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json index d04fcc6f38..66d057cbf1 100644 --- a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json +++ b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json @@ -1,15 +1,16 @@ { "type": "filament", - "name": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", + "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", "inherits": "Generic PLA-Silk @Chuanying", + "renamed_from": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle;Chuanying PLA-SILK Chuanying X1 0.25 Nozzle", "from": "system", - "setting_id": "kph5feBjhPi0oo0G", + "setting_id": "XaGDKARkuGTTabMN", "instantiation": "true", "compatible_printers": [ "Chuanying X1 0.25 Nozzle" ], "filament_settings_id": [ - "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle" + "Generic PLA-Silk @Chuanying X1 0.25 Nozzle" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index 107ef2b3ba..e3eb237518 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ @@ -117,8 +117,8 @@ "sub_path": "filament/Generic PLA @Comgrow.json" }, { - "name": "Comgrow T300 PLA", - "sub_path": "filament/Comgrow T300 PLA.json" + "name": "Generic PLA @Comgrow T300", + "sub_path": "filament/Generic PLA @Comgrow T300.json" } ], "machine_list": [ diff --git a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json similarity index 86% rename from resources/profiles/Comgrow/filament/Comgrow T300 PLA.json rename to resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json index 965e2985ee..bde24b8ba0 100644 --- a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json +++ b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Comgrow T300 PLA", + "name": "Generic PLA @Comgrow T300", "inherits": "Generic PLA @Comgrow", + "renamed_from": "Comgrow T300 PLA", "from": "system", - "setting_id": "TnHaf2TSHVfuwbVg", - "filament_id": "OFNWcJsM", + "setting_id": "3N6gPGkzpE9CvkVz", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Comgrow/machine/Comgrow T300.json b/resources/profiles/Comgrow/machine/Comgrow T300.json index 41c94aa193..558c4338b6 100644 --- a/resources/profiles/Comgrow/machine/Comgrow T300.json +++ b/resources/profiles/Comgrow/machine/Comgrow T300.json @@ -8,5 +8,5 @@ "bed_model": "comgrow_t300_buildplate_model.stl", "bed_texture": "comgrow_t300_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Comgrow T300 PLA" + "default_materials": "Generic PLA @Comgrow T300" } diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 364b3cf521..67ce8c2583 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ @@ -217,60 +217,60 @@ "sub_path": "filament/Generic TPU @FLSun.json" }, { - "name": "FLSun S1 ABS", - "sub_path": "filament/FLSun S1 ABS.json" + "name": "Generic ABS @FLSun S1", + "sub_path": "filament/Generic ABS @FLSun S1.json" }, { - "name": "FLSun T1 ABS", - "sub_path": "filament/FLSun T1 ABS.json" + "name": "Generic ABS @FLSun T1", + "sub_path": "filament/Generic ABS @FLSun T1.json" }, { - "name": "FLSun S1 ASA", - "sub_path": "filament/FLSun S1 ASA.json" + "name": "Generic ASA @FLSun S1", + "sub_path": "filament/Generic ASA @FLSun S1.json" }, { - "name": "FLSun T1 ASA", - "sub_path": "filament/FLSun T1 ASA.json" + "name": "Generic ASA @FLSun T1", + "sub_path": "filament/Generic ASA @FLSun T1.json" }, { - "name": "FLSun S1 PETG", - "sub_path": "filament/FLSun S1 PETG.json" + "name": "Generic PETG @FLSun S1", + "sub_path": "filament/Generic PETG @FLSun S1.json" }, { - "name": "FLSun T1 PETG", - "sub_path": "filament/FLSun T1 PETG.json" + "name": "Generic PETG @FLSun T1", + "sub_path": "filament/Generic PETG @FLSun T1.json" }, { "name": "Generic PLA @FLSun S1", "sub_path": "filament/Generic PLA @FLSun S1.json" }, { - "name": "FLSun S1 PLA High Speed", - "sub_path": "filament/FLSun S1 PLA High Speed.json" + "name": "Generic PLA High Speed @FLSun S1", + "sub_path": "filament/Generic PLA High Speed @FLSun S1.json" }, { - "name": "FLSun S1 PLA Silk", - "sub_path": "filament/FLSun S1 PLA Silk.json" + "name": "Generic PLA Silk @FLSun S1", + "sub_path": "filament/Generic PLA Silk @FLSun S1.json" }, { "name": "Generic PLA @FLSun T1", "sub_path": "filament/Generic PLA @FLSun T1.json" }, { - "name": "FLSun T1 PLA High Speed", - "sub_path": "filament/FLSun T1 PLA High Speed.json" + "name": "Generic PLA High Speed @FLSun T1", + "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" }, { - "name": "FLSun T1 PLA Silk", - "sub_path": "filament/FLSun T1 PLA Silk.json" + "name": "Generic PLA Silk @FLSun T1", + "sub_path": "filament/Generic PLA Silk @FLSun T1.json" }, { - "name": "FLSun S1 TPU", - "sub_path": "filament/FLSun S1 TPU.json" + "name": "Generic TPU @FLSun S1", + "sub_path": "filament/Generic TPU @FLSun S1.json" }, { - "name": "FLSun T1 TPU", - "sub_path": "filament/FLSun T1 TPU.json" + "name": "Generic TPU @FLSun T1", + "sub_path": "filament/Generic TPU @FLSun T1.json" } ], "machine_list": [ diff --git a/resources/profiles/FLSun/filament/FLSun S1 ABS.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun S1 ABS.json rename to resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json index d097e75200..3a57d47404 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ABS.json +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun S1 ABS", + "name": "Generic ABS @FLSun S1", "inherits": "Generic ABS @FLSun", + "renamed_from": "FLSun S1 ABS", "from": "system", - "setting_id": "tvpZ28Oe4Al7hlgj", - "filament_id": "OFzzmK2Q", + "setting_id": "a7U3u888FlJ6CSFb", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun T1 ABS.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun T1 ABS.json rename to resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json index 8514ed0ecd..36c684cdc6 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ABS.json +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun T1 ABS", + "name": "Generic ABS @FLSun T1", "inherits": "Generic ABS @FLSun", + "renamed_from": "FLSun T1 ABS", "from": "system", - "setting_id": "GP8VqRfidKOdj0ZJ", - "filament_id": "OFV0KrAG", + "setting_id": "j185WWfVulPxWJvQ", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun S1 ASA.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun S1 ASA.json rename to resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json index 79d37b5e30..d605ac5519 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 ASA.json +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun S1 ASA", + "name": "Generic ASA @FLSun S1", "inherits": "Generic ASA @FLSun", + "renamed_from": "FLSun S1 ASA", "from": "system", - "setting_id": "C5oyaWw3YVEz0CgE", - "filament_id": "OFIK0xFa", + "setting_id": "qJeJII6CgHuaC4Iz", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun T1 ASA.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun T1 ASA.json rename to resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json index 862fde6c6e..c27f9e34dd 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 ASA.json +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun T1 ASA", + "name": "Generic ASA @FLSun T1", "inherits": "Generic ASA @FLSun", + "renamed_from": "FLSun T1 ASA", "from": "system", - "setting_id": "YmJbWfCQpNk9nxB7", - "filament_id": "OFbjtPQy", + "setting_id": "kj4PPnvuvvGDrDwA", "instantiation": "true", "fan_max_speed": [ "50" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PETG.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json similarity index 90% rename from resources/profiles/FLSun/filament/FLSun S1 PETG.json rename to resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json index 33e14b08a1..02506525dd 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PETG.json +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun S1 PETG", + "name": "Generic PETG @FLSun S1", "inherits": "Generic PETG @FLSun", + "renamed_from": "FLSun S1 PETG", "from": "system", - "setting_id": "Ac6q0FtMFMLesFdU", - "filament_id": "OF9z5LZ9", + "setting_id": "LxDenrdsmz0QjMDE", "instantiation": "true", "fan_max_speed": [ "60" diff --git a/resources/profiles/FLSun/filament/FLSun T1 PETG.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json similarity index 90% rename from resources/profiles/FLSun/filament/FLSun T1 PETG.json rename to resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json index 5b2e6e471c..64651bea1d 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PETG.json +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun T1 PETG", + "name": "Generic PETG @FLSun T1", "inherits": "Generic PETG @FLSun", + "renamed_from": "FLSun T1 PETG", "from": "system", - "setting_id": "A2aA7xcmqgz8ERyY", - "filament_id": "OFJ80y1e", + "setting_id": "n9wpUe32lTtq2iSS", "instantiation": "true", "fan_max_speed": [ "60" diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json similarity index 79% rename from resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json rename to resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json index f1cd779e91..af00b2272d 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json @@ -1,11 +1,14 @@ { "type": "filament", - "name": "FLSun S1 PLA High Speed", - "inherits": "Generic PLA @FLSun", + "name": "Generic PLA High Speed @FLSun S1", + "inherits": "Generic PLA High Speed @System", + "renamed_from": "FLSun S1 PLA High Speed", "from": "system", - "setting_id": "v2clpNXXo8m6dV33", - "filament_id": "OFoqrHTw", + "setting_id": "ONz6C8a3AMGWxqdK", "instantiation": "true", + "filament_multitool_ramming_flow": [ + "10" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json similarity index 79% rename from resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json rename to resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json index 814aa5b47c..7468aadd31 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json +++ b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json @@ -1,11 +1,14 @@ { "type": "filament", - "name": "FLSun T1 PLA High Speed", - "inherits": "Generic PLA @FLSun", + "name": "Generic PLA High Speed @FLSun T1", + "inherits": "Generic PLA High Speed @System", + "renamed_from": "FLSun T1 PLA High Speed", "from": "system", - "setting_id": "E4lpSLLlAxUW04ik", - "filament_id": "OFQ9qnkd", + "setting_id": "en1l0jgFX97t6qUi", "instantiation": "true", + "filament_multitool_ramming_flow": [ + "10" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json similarity index 81% rename from resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json rename to resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json index 2d4a65f157..0ec0d28da4 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json @@ -1,11 +1,14 @@ { "type": "filament", - "name": "FLSun S1 PLA Silk", - "inherits": "Generic PLA @FLSun", + "name": "Generic PLA Silk @FLSun S1", + "inherits": "Generic PLA Silk @System", + "renamed_from": "FLSun S1 PLA Silk", "from": "system", - "setting_id": "164Bn4YchxJAaLsa", - "filament_id": "OFSStjay", + "setting_id": "NTJw0fbcn3JoOr0R", "instantiation": "true", + "filament_retraction_length": [ + "nil" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json similarity index 81% rename from resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json rename to resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json index f7b4b22751..891697aa01 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json +++ b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json @@ -1,11 +1,14 @@ { "type": "filament", - "name": "FLSun T1 PLA Silk", - "inherits": "Generic PLA @FLSun", + "name": "Generic PLA Silk @FLSun T1", + "inherits": "Generic PLA Silk @System", + "renamed_from": "FLSun T1 PLA Silk", "from": "system", - "setting_id": "gElUb4GnCoEfVlEd", - "filament_id": "OFuUJyRx", + "setting_id": "y2p7TTGI8XWIeiQY", "instantiation": "true", + "filament_retraction_length": [ + "nil" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/FLSun/filament/FLSun S1 TPU.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun S1 TPU.json rename to resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json index 1a495c4a0b..76e27d9be3 100644 --- a/resources/profiles/FLSun/filament/FLSun S1 TPU.json +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun S1 TPU", + "name": "Generic TPU @FLSun S1", "inherits": "Generic TPU @FLSun", + "renamed_from": "FLSun S1 TPU", "from": "system", - "setting_id": "yzPvNqIo7mfWAwNS", - "filament_id": "OF6ooviO", + "setting_id": "xDnQih17nXmGPoPc", "instantiation": "true", "fan_max_speed": [ "100" diff --git a/resources/profiles/FLSun/filament/FLSun T1 TPU.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json similarity index 91% rename from resources/profiles/FLSun/filament/FLSun T1 TPU.json rename to resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json index 3b25d65229..25f60f10e1 100644 --- a/resources/profiles/FLSun/filament/FLSun T1 TPU.json +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "FLSun T1 TPU", + "name": "Generic TPU @FLSun T1", "inherits": "Generic TPU @FLSun", + "renamed_from": "FLSun T1 TPU", "from": "system", - "setting_id": "34Ux18VB4d6R6G40", - "filament_id": "OFENzGSm", + "setting_id": "TEakmydLXxrHti3G", "instantiation": "true", "fan_max_speed": [ "100" diff --git a/resources/profiles/FLSun/machine/FLSun S1.json b/resources/profiles/FLSun/machine/FLSun S1.json index 597480c25f..eac676cd09 100644 --- a/resources/profiles/FLSun/machine/FLSun S1.json +++ b/resources/profiles/FLSun/machine/FLSun S1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_s1_buildplate_model.stl", "bed_texture": "FLSun_S1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun S1 PLA High Speed;FLSun S1 PLA Silk;Generic PLA @FLSun S1;FLSun S1 PETG;FLSun S1 ASA;FLSun S1 TPU;FLSun S1 ABS" + "default_materials": "Generic PLA High Speed @FLSun S1;Generic PLA Silk @FLSun S1;Generic PLA @FLSun S1;Generic PETG @FLSun S1;Generic ASA @FLSun S1;Generic TPU @FLSun S1;Generic ABS @FLSun S1" } diff --git a/resources/profiles/FLSun/machine/FLSun T1.json b/resources/profiles/FLSun/machine/FLSun T1.json index 45a7a290b1..25a788a60e 100644 --- a/resources/profiles/FLSun/machine/FLSun T1.json +++ b/resources/profiles/FLSun/machine/FLSun T1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_T1_buildplate_model.stl", "bed_texture": "FLSun_T1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun T1 PLA High Speed;FLSun T1 PLA Silk;Generic PLA @FLSun T1;FLSun T1 PETG;FLSun T1 ASA;FLSun T1 TPU;FLSun T1 ABS" + "default_materials": "Generic PLA High Speed @FLSun T1;Generic PLA Silk @FLSun T1;Generic PLA @FLSun T1;Generic PETG @FLSun T1;Generic ASA @FLSun T1;Generic TPU @FLSun T1;Generic ABS @FLSun T1" } diff --git a/resources/profiles/Lulzbot.json b/resources/profiles/Lulzbot.json index 31836580f0..1d8e31dc93 100644 --- a/resources/profiles/Lulzbot.json +++ b/resources/profiles/Lulzbot.json @@ -1,7 +1,7 @@ { "name": "Lulzbot", "url": "https://ohai.lulzbot.com/group/taz-6/", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Lulzbot configurations", "machine_model_list": [ @@ -62,16 +62,16 @@ ], "filament_list": [ { - "name": "Lulzbot 2.85mm ABS", - "sub_path": "filament/Lulzbot 2.85mm ABS.json" + "name": "Generic ABS @Lulzbot", + "sub_path": "filament/Generic ABS @Lulzbot.json" }, { - "name": "Lulzbot 2.85mm PETG", - "sub_path": "filament/Lulzbot 2.85mm PETG.json" + "name": "Generic PETG @Lulzbot", + "sub_path": "filament/Generic PETG @Lulzbot.json" }, { - "name": "Lulzbot 2.85mm PLA", - "sub_path": "filament/Lulzbot 2.85mm PLA.json" + "name": "Generic PLA @Lulzbot", + "sub_path": "filament/Generic PLA @Lulzbot.json" } ], "machine_list": [ diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json b/resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json similarity index 74% rename from resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json rename to resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json index 002c664cc2..95d8a2274c 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json +++ b/resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Lulzbot 2.85mm ABS", + "name": "Generic ABS @Lulzbot", "inherits": "Generic ABS @System", + "renamed_from": "Lulzbot 2.85mm ABS", "from": "system", - "setting_id": "XwsWBVH2xIwyRMm4", - "filament_id": "OF6O67Xk", + "setting_id": "Mtn4Fh3Lp6KlAxjo", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json b/resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json similarity index 74% rename from resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json rename to resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json index 343900a1ce..825df8bdc8 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json +++ b/resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Lulzbot 2.85mm PETG", + "name": "Generic PETG @Lulzbot", "inherits": "Generic PETG @System", + "renamed_from": "Lulzbot 2.85mm PETG", "from": "system", - "setting_id": "7aS9fdn94lEOU1gJ", - "filament_id": "OF8eQjjt", + "setting_id": "dqj6O9NIPAaq8wWz", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json b/resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json similarity index 74% rename from resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json rename to resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json index 89e0681b45..d08d72ee53 100644 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json +++ b/resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Lulzbot 2.85mm PLA", + "name": "Generic PLA @Lulzbot", "inherits": "Generic PLA @System", + "renamed_from": "Lulzbot 2.85mm PLA", "from": "system", - "setting_id": "1pyzsOWeVPCxWlqQ", - "filament_id": "OFPryWt5", + "setting_id": "3evRjso1wNxd9nV3", "instantiation": "true", "filament_diameter": [ "2.85" diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json index cc1224b635..5fe1dc64e7 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json @@ -104,7 +104,7 @@ ], "single_extruder_multi_material": "1", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been generated specifically for the Lulzbot Taz 4 and 5 - translated from CuraLE 4.13.10 by Wrathernaut\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM140 S{bed_temperature_initial_layer[0]}; start bed heating up\nG90; absolute positioning\nM107; disable fans\nM82; set extruder to absolute mode\nG28 X0 Y0; home X and Y\nG28 Z0; home Z\nG1 Z15.0 F175; move extruder up\nM117 Heating...; progress indicator message on LCD\nM109 R{nozzle_temperature_initial_layer[0]}; wait for extruder to reach printing temp\nM190 R{bed_temperature_initial_layer[0]}; wait for bed to reach printing temp\nG92 E0; set extruder position to 0\nG1 F200 E0; prime the nozzle with filament\nG92 E0; re-set extruder position to 0\nG1 F175; set travel speed\nM203 X192 Y208 Z3; set limits on travel speed\nM117 TAZ Printing...; progress indicator message on LCD\n;Start G-Code End", "machine_end_gcode": ";End G-Code Begin\nM400; wait for moves to finish\nM140 S0; disable hotend\nM104 S0; disable bed heater\nM107; disable fans\nG91; relative positioning\nG1 E-1 F300; filament retraction to release pressure\nG1 Z0.5 E-5 X-20 Y-20 F3000; lift up and retract even more filament\nM77;stopGLCD timer\nG90;absolute positioning\nG1 X0 Y250;move to cooling position\nM84;disable steppers\nM117 Print Complete.;print complete message", diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json index c00c1cc2e3..f7b77690b4 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json @@ -8,5 +8,5 @@ "bed_model": "taz_4_or_5_build_plate.stl", "bed_texture": "lulzbot_logo.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json index 4a7aa978fb..23a74064b6 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json @@ -100,7 +100,7 @@ ], "single_extruder_multi_material": "1", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been translated from LulzBot's CuraLE (v4.13.10) startup GCODE for Taz 6 Single Extruder by Wrathernaut\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM107; disable fans\nM420 S; disable leveling matrix\nG90; absolute positioning\nM82; set extruder to absolute mode\nG92 E0; set extruder position to 0\nM140 S{bed_temperature_initial_layer[0]}; start bed heating up (w)\nG28 XY; home X and Y\nG1 X-19 Y258 F1000; move to safe homing position\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R170\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R190; unknown filament type soften temp before homing Z{endif}\nG28 Z; home Z\nG1 E-15 F100; retract filament\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R190\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R180\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R170; unknown filament type wipe temp{endif}\n;M206 X0 Y0 Z0; uncomment to adjust wipe position (+X ~ nozzle moves left)(+Y ~ nozzle moves forward)(+Z ~ nozzle moves down)\nG12; wiping sequence\nM206 X0 Y0 Z0; reseting stock nozzle position ### CAUTION: changing this line can affect print quality ###\nG1 Z10 F5000; raise nozzle after wipe\nM109 {if filament_type[0] == \"PLA\"}R160\n{elsif filament_type[0] == \"ABS\"}R170\n{elsif filament_type[0] == \"ABS-GF\"}R170\n{elsif filament_type[0] == \"ASA\"}R170\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R200\n{elsif filament_type[0] == \"PA-CF\"}R200\n{elsif filament_type[0] == \"PA-GF\"}R170\n{elsif filament_type[0] == \"PA6-CF\"}R170\n{elsif filament_type[0] == \"PA11-CF\"}R200\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R200\n{elsif filament_type[0] == \"PC-CF\"}R200\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R180\n{elsif filament_type[0] == \"PE-CF\"}R180\n{elsif filament_type[0] == \"PET-CF\"}R170\n{elsif filament_type[0] == \"PETG\"}R170\n{elsif filament_type[0] == \"PETG-CF10\"}R170\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R160\n{elsif filament_type[0] == \"PVB\"}R160\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R160\n{elsif filament_type[0] == \"FLEX\"}R160\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R160\n{elsif filament_type[0] == \"NYLON\"}R200\n{else}R170; unknown filament type probe temp{endif}\nG1 X-10 Y293 F4000; move above first probe point\nM204 S100; set probing acceleration\nG29; start auto-leveling sequence\nM420 S1; enable leveling matrix\nM204 S500; restore standard acceleration\nG1 X0 Y0 Z15 F5000; move up off last probe point\nG4 S1; pause\nM400; wait for moves to finish\nM117 Heating...; progress indicator message on LCD\nM109 R{nozzle_temperature_initial_layer[0]}; wait for extruder to reach printing temp (w)\nM190 R{bed_temperature_initial_layer[0]}; wait for bed to reach printing temp\nG1 Z2 E0 F75; prime tiny bit of filament into the nozzle\nM117 TAZ 6 Printing...; progress indicator message on LCD\n;Start G-Code End", "machine_end_gcode": ";End G-Code Begin\nM400; wait for moves to finish\nM140 S0; start bed cooling\nM104 S0; disable hotend\nM107; disable fans\nG91; relative positioning\nG1 E-1 F300; filament retraction to release pressure\nG1 Z20 E-5 X-20 Y-20 F3000; lift up and retract even more filament\nG1 E6; re-prime extruder\nG90; absolute positioning\nG1 Y280 F3000; present finished print\nM77; stop GLCD timer\nM84; disable steppers\nG90; absolute positioning\nM117 Print Complete.; print complete message\n;End G-Code End", diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json index fdf3c0b056..46772a73b0 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json @@ -8,5 +8,5 @@ "bed_model": "taz_6_build_plate.stl", "bed_texture": "lulzbot_logo.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json index dccf5c21a9..ad04dec32a 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json @@ -15,7 +15,7 @@ ], "printer_settings_id": "LulzbotPro-Dual", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been translated from Cura startup from CuraLE 4.13.10 to OrcaSlicer by Wrathernaut\nT0\nM82; absolute extrusion mode\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM107; disable fans\nG90; absolute positioning\nM420 S0; disable previous leveling matrix\nM140 S{bed_temperature_initial_layer[initial_tool]}; begin bed temping up (w)\nM104 {if filament_type[initial_tool] == \"PLA\"}S180\n{elsif filament_type[initial_tool] == \"ABS\"}S190\n{elsif filament_type[initial_tool] == \"ABS-GF\"}S190\n{elsif filament_type[initial_tool] == \"ASA\"}S190\n{elsif filament_type[initial_tool] == \"ASA-Aero\"}S190\n{elsif filament_type[initial_tool] == \"BVOH\"}S170\n{elsif filament_type[initial_tool] == \"EVA\"}S170\n{elsif filament_type[initial_tool] == \"PA\"}R220\n{elsif filament_type[initial_tool] == \"PA-CF\"}R220\n{elsif filament_type[initial_tool] == \"PA-GF\"}R220\n{elsif filament_type[initial_tool] == \"PA6-CF\"}R220\n{elsif filament_type[initial_tool] == \"PA11-CF\"}R220\n{elsif filament_type[initial_tool] == \"ASA-Aero\"}S170\n{elsif filament_type[initial_tool] == \"PC\"}R220\n{elsif filament_type[initial_tool] == \"PC-CF\"}R220\n{elsif filament_type[initial_tool] == \"PCTG\"}S180\n{elsif filament_type[initial_tool] == \"PE\"}S190\n{elsif filament_type[initial_tool] == \"PE-CF\"}S190\n{elsif filament_type[initial_tool] == \"PET-CF\"}S190\n{elsif filament_type[initial_tool] == \"PETG\"}S190\n{elsif filament_type[initial_tool] == \"PETG-CF10\"}S190\n{elsif filament_type[initial_tool] == \"PHA\"}S180\n{elsif filament_type[initial_tool] == \"PLA-AERO\"}S180\n{elsif filament_type[initial_tool] == \"PLA-CF\"}S180\n{elsif filament_type[initial_tool] == \"PP\"}S180\n{elsif filament_type[initial_tool] == \"PP-CF\"}S180\n{elsif filament_type[initial_tool] == \"PP-GF\"}S180\n{elsif filament_type[initial_tool] == \"PPS\"}S180\n{elsif filament_type[initial_tool] == \"PPS-CF\"}S180\n{elsif filament_type[initial_tool] == \"PVA\"}S180\n{elsif filament_type[initial_tool] == \"PVB\"}S180\n{elsif filament_type[initial_tool] == \"SBS\"}S180\n{elsif filament_type[initial_tool] == \"TPU\"}S180\n{elsif filament_type[initial_tool] == \"FLEX\"}S180\n{elsif filament_type[initial_tool] == \"PET\"}S170\n{elsif filament_type[initial_tool] == \"HIPS\"}S170\n{elsif filament_type[initial_tool] == \"NYLON\"}R220\n{else}S190; unknown filament type soften temp before homing Z\n{endif}G28; home\nG0 X50 Y25 Z10 F2000\nM117 Heating...\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R170\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R190; unknown filament type soften temp before homing Z{endif}\nM82; set extruder to absolute mode\nG92 E0; set extruder to zero\nG1 E-7 F100; retract 7mm of filament on first extruder\nM106; turn on fans to speed cooling\nM117 Wiping...\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R190\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R180\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R170; unknown filament type wipe temp{endif}\nM109 {if filament_type[0] == \"PLA\"}R160\n{elsif filament_type[0] == \"ABS\"}R170\n{elsif filament_type[0] == \"ABS-GF\"}R170\n{elsif filament_type[0] == \"ASA\"}R170\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R200\n{elsif filament_type[0] == \"PA-CF\"}R200\n{elsif filament_type[0] == \"PA-GF\"}R170\n{elsif filament_type[0] == \"PA6-CF\"}R170\n{elsif filament_type[0] == \"PA11-CF\"}R200\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R200\n{elsif filament_type[0] == \"PC-CF\"}R200\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R180\n{elsif filament_type[0] == \"PE-CF\"}R180\n{elsif filament_type[0] == \"PET-CF\"}R170\n{elsif filament_type[0] == \"PETG\"}R170\n{elsif filament_type[0] == \"PETG-CF10\"}R170\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R160\n{elsif filament_type[0] == \"PVB\"}R160\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R160\n{elsif filament_type[0] == \"FLEX\"}R160\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R160\n{elsif filament_type[0] == \"NYLON\"}R200\n{else}R170; unknown filament type probe temp{endif}; cool to probe temp\nG12; wipe sequence\nM107; turn off fan\nG29; probe sequence (for auto-leveling)\nM420 S1; enable leveling matrix\nT{initial_tool}; ensure we're using the first extruder\nM104 S{first_layer_temperature[initial_tool]}; set extruder temp\nG0 X5 Y15 Z10 F5000; move to start location\nM400; clear buffer\nM117 Heating...\nM109 R{first_layer_temperature[initial_tool]}; set extruder temp and waitnM190 R{bed_temperature_initial_layer[initial_tool]}; get bed temping up during first layer\nG1 Z2 E0 F75; raise head and 0 extruder\nM82; set to absolute mode\nM400; clear buffer\nM300 T; play sound at start of first layer\nM117 Printing ...\n;Start G-Code End", "machine_end_gcode": "M400; wait for moves to finish\nM140 S0; start cooling bed\nM107; fans off\nG91 ; relative positioning\nG1 E-1 F300 ; retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z25 E-1 X20 Y20 F2000; move Z up a bit and retract filament even more\nM104 S{nozzle_temperature[0]} T0 ; T0 to print temp\nM104 S{nozzle_temperature[1]} T1 ; T1 to print temp\nG90 ; absolute positioning\nG0 X285 Y-30 F3000; move to cooling position\nG91 ; relative positioning\nM117 Purging for next print;progress indicator message\nT0\nM109 S{nozzle_temperature[0]}; wait for temp\nG92 E0; set extruder position to purge amount\nG1 E15 F75; purge\nM400; wait for purge\nM104 S0 ; T0 hotend off\nT1\nM109 S{nozzle_temperature[1]}; wait for temp\nG92 E0; set extruder position to purge amount\nG1 E15 F75; purge\nM400; wait for purge\nM104 S0 ; T1 hotend off\nT0\nM117 Cooling, please wait;progress indicator message\nM190 S0; cool off bed\nG0 Y280 F3000 ; present finished print\nM77; stop GLCD timer\nM18 X Y E; turn off x y and e axis\nG90 ; absolute positioning\nM117 Print complete; progress indicator message" diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json index b5157e0925..ca7afe7d9f 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json @@ -8,5 +8,5 @@ "bed_model": "taz_pro_dual_build_plate.stl", "bed_texture": "Taz_Pro_Dual_printbed.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Phrozen.json b/resources/profiles/Phrozen.json index bd4e6f1081..0c711816c1 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Phrozen configurations", "machine_model_list": [ @@ -57,8 +57,8 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Phrozen PLA @Phrozen Arco 0.4 nozzle", - "sub_path": "filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json" + "name": "Generic PLA @Phrozen Arco 0.4 nozzle", + "sub_path": "filament/Generic PLA @Phrozen Arco 0.4 nozzle.json" } ], "machine_list": [ diff --git a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json similarity index 94% rename from resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json rename to resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json index 8ca51614b6..d909765bad 100644 --- a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json @@ -1,13 +1,13 @@ { "type": "filament", - "name": "Phrozen PLA @Phrozen Arco 0.4 nozzle", - "inherits": "fdm_filament_pla", + "name": "Generic PLA @Phrozen Arco 0.4 nozzle", + "inherits": "Generic PLA @System", + "renamed_from": "Phrozen PLA @Phrozen Arco 0.4 nozzle;Phrozen PLA Phrozen Arco 0.4 nozzle", "from": "system", - "setting_id": "Cc3ULDFzvoHwh8bV", - "filament_id": "OF6VgL2U", + "setting_id": "xTeHmDOY48Bik10J", "instantiation": "true", "filament_settings_id": [ - "Phrozen PLA @Phrozen Arco 0.4 nozzle" + "Generic PLA @Phrozen Arco 0.4 nozzle" ], "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json index 051f62fa6c..c34d188507 100644 --- a/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json @@ -14,7 +14,7 @@ ], "default_print_profile": "0.20mm Standard @Phrozen Arco 0.4 nozzle", "default_filament_profile": [ - "Phrozen PLA @Phrozen Arco 0.4 nozzle" + "Generic PLA @Phrozen Arco 0.4 nozzle" ], "disable_m73": "1", "gcode_flavor": "klipper", diff --git a/resources/profiles/Phrozen/machine/Phrozen Arco.json b/resources/profiles/Phrozen/machine/Phrozen Arco.json index 648b014ebd..be6c15bfe7 100644 --- a/resources/profiles/Phrozen/machine/Phrozen Arco.json +++ b/resources/profiles/Phrozen/machine/Phrozen Arco.json @@ -8,5 +8,5 @@ "bed_model": "Phrozen Arco_buildplate_model.stl", "bed_texture": "Phrozen Arco_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Phrozen PLA @Phrozen Arco 0.4 nozzle" + "default_materials": "Generic PLA @Phrozen Arco 0.4 nozzle" } diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index c3babbc4a5..a831bb268c 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.13", + "version": "02.04.00.14", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json index 83ec8a1025..ce29e0a165 100644 --- a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json +++ b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uVa250OrqClMz41k", - "filament_id": "OFpBV2Ma", + "filament_id": "OFYE7YZw", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -52,7 +52,7 @@ "235" ], "filament_vendor": [ - "Generic" + "Tinmorry" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 65b1d12a3a..50aaad2715 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.10", + "version": "02.04.00.11", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json index 9dce5b1e84..d61e2adb1b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker TPU 95A @U1 base", "from": "system", - "filament_id": "OFKo87c6", + "filament_id": "OFvmwTZE", "instantiation": "false", "overhang_fan_threshold": [ "95%" @@ -47,7 +47,7 @@ "0" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json index 9cc40e8552..59b125ff72 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json @@ -195,7 +195,7 @@ "100" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 770ca55c95..a38645abc2 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ @@ -234,96 +234,96 @@ "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" }, { - "name": "Sovol SV06 ACE ABS", - "sub_path": "filament/Sovol SV06 ACE ABS.json" + "name": "Generic ABS @Sovol SV06 ACE", + "sub_path": "filament/Generic ABS @Sovol SV06 ACE.json" }, { - "name": "Sovol SV06 ACE PETG", - "sub_path": "filament/Sovol SV06 ACE PETG.json" + "name": "Generic PETG @Sovol SV06 ACE", + "sub_path": "filament/Generic PETG @Sovol SV06 ACE.json" }, { - "name": "Sovol SV06 ACE PLA", - "sub_path": "filament/Sovol SV06 ACE PLA.json" + "name": "Generic PLA @Sovol SV06 ACE", + "sub_path": "filament/Generic PLA @Sovol SV06 ACE.json" }, { - "name": "Sovol SV06 ACE TPU", - "sub_path": "filament/Sovol SV06 ACE TPU.json" + "name": "Generic TPU @Sovol SV06 ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 ACE.json" }, { - "name": "Sovol SV06 Plus ACE ABS", - "sub_path": "filament/Sovol SV06 Plus ACE ABS.json" + "name": "Generic ABS @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic ABS @Sovol SV06 Plus ACE.json" }, { - "name": "Sovol SV06 Plus ACE PETG", - "sub_path": "filament/Sovol SV06 Plus ACE PETG.json" + "name": "Generic PETG @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic PETG @Sovol SV06 Plus ACE.json" }, { - "name": "Sovol SV06 Plus ACE PLA", - "sub_path": "filament/Sovol SV06 Plus ACE PLA.json" + "name": "Generic PLA @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic PLA @Sovol SV06 Plus ACE.json" }, { - "name": "Sovol SV06 Plus ACE TPU", - "sub_path": "filament/Sovol SV06 Plus ACE TPU.json" + "name": "Generic TPU @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 Plus ACE.json" }, { - "name": "Sovol SV07 PLA", - "sub_path": "filament/Sovol SV07 PLA.json" + "name": "Generic PLA @Sovol SV07", + "sub_path": "filament/Generic PLA @Sovol SV07.json" }, { - "name": "Sovol SV08 ABS", - "sub_path": "filament/Sovol SV08 ABS.json" + "name": "Generic ABS @Sovol SV08", + "sub_path": "filament/Generic ABS @Sovol SV08.json" }, { - "name": "Sovol SV08 PETG", - "sub_path": "filament/Sovol SV08 PETG.json" + "name": "Generic PETG @Sovol SV08", + "sub_path": "filament/Generic PETG @Sovol SV08.json" }, { - "name": "Sovol SV08 PLA", - "sub_path": "filament/Sovol SV08 PLA.json" + "name": "Generic PLA @Sovol SV08", + "sub_path": "filament/Generic PLA @Sovol SV08.json" }, { - "name": "Sovol SV08 PLA @SV08 0.2 nozzle", - "sub_path": "filament/Sovol SV08 PLA @SV08 0.2 nozzle.json" + "name": "Generic PLA @Sovol SV08 0.2 nozzle", + "sub_path": "filament/Generic PLA @Sovol SV08 0.2 nozzle.json" }, { - "name": "Sovol SV08 TPU", - "sub_path": "filament/Sovol SV08 TPU.json" + "name": "Generic TPU @Sovol SV08", + "sub_path": "filament/Generic TPU @Sovol SV08.json" }, { - "name": "Sovol Zero ABS", - "sub_path": "filament/Sovol Zero ABS.json" + "name": "Generic ABS @Sovol Zero", + "sub_path": "filament/Generic ABS @Sovol Zero.json" }, { - "name": "Sovol Zero PC", - "sub_path": "filament/Sovol Zero PC.json" + "name": "Generic PC @Sovol Zero", + "sub_path": "filament/Generic PC @Sovol Zero.json" }, { - "name": "Sovol Zero PETG", - "sub_path": "filament/Sovol Zero PETG.json" + "name": "Generic PETG @Sovol Zero", + "sub_path": "filament/Generic PETG @Sovol Zero.json" }, { "name": "Sovol Zero PETG HS Nozzle", "sub_path": "filament/Sovol Zero PETG HS Nozzle.json" }, { - "name": "Sovol Zero PLA Basic", - "sub_path": "filament/Sovol Zero PLA Basic.json" + "name": "Generic PLA @Sovol Zero", + "sub_path": "filament/Generic PLA @Sovol Zero.json" }, { "name": "Sovol Zero PLA Basic HS Nozzle", "sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json" }, { - "name": "Sovol Zero PLA Silk", - "sub_path": "filament/Sovol Zero PLA Silk.json" + "name": "Generic PLA Silk @Sovol Zero", + "sub_path": "filament/Generic PLA Silk @Sovol Zero.json" }, { "name": "Sovol Zero PLA Silk HS Nozzle", "sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json" }, { - "name": "Sovol Zero TPU", - "sub_path": "filament/Sovol Zero TPU.json" + "name": "Generic TPU @Sovol Zero", + "sub_path": "filament/Generic TPU @Sovol Zero.json" } ], "machine_list": [ diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json similarity index 87% rename from resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json rename to resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json index 025dee3fe5..49b26d498a 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 ACE ABS", + "name": "Generic ABS @Sovol SV06 ACE", "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV06 ACE ABS", "from": "system", - "setting_id": "okqqqm0P8ehlQuDY", - "filament_id": "OF67EdL5", + "setting_id": "exjBdPPCgk53gipu", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json similarity index 84% rename from resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json rename to resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json index e38812d1a4..905ee2bda0 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 Plus ACE ABS", + "name": "Generic ABS @Sovol SV06 Plus ACE", "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV06 Plus ACE ABS", "from": "system", - "setting_id": "Me1iSJmocW35ClmN", - "filament_id": "OFCEA7Nt", + "setting_id": "sg9HXvKEoKD4pw7v", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json similarity index 91% rename from resources/profiles/Sovol/filament/Sovol SV08 ABS.json rename to resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json index f29c3f274d..e690ee88e5 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV08 ABS", + "name": "Generic ABS @Sovol SV08", "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV08 ABS", "from": "system", - "setting_id": "nq4vvrWqKjWKELEz", - "filament_id": "OF016CJw", + "setting_id": "aZx3ePr3Id1jPJG9", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero ABS.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol Zero ABS.json rename to resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json index 8ae60c192f..3b737e2a18 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero ABS.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol Zero ABS", + "name": "Generic ABS @Sovol Zero", "inherits": "Generic ABS @System", + "renamed_from": "Sovol Zero ABS", "from": "system", - "setting_id": "9pI7op6U4azpfNfb", - "filament_id": "OFNX8GI1", + "setting_id": "g6sSyyIFYJUzlXsp", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PC.json b/resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol Zero PC.json rename to resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json index 87d4b2c924..dd0eb60594 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PC.json +++ b/resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol Zero PC", + "name": "Generic PC @Sovol Zero", "inherits": "Generic PC @System", + "renamed_from": "Sovol Zero PC", "from": "system", - "setting_id": "vuuZXnlrMgUKtSI0", - "filament_id": "OFcdqaWI", + "setting_id": "yRKCiPMN6fxibcyg", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json similarity index 87% rename from resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json rename to resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json index 41066fb061..acb2c90316 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 ACE PETG", + "name": "Generic PETG @Sovol SV06 ACE", "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV06 ACE PETG", "from": "system", - "setting_id": "5mtng0PM8CMglpD7", - "filament_id": "OFe7Sx5B", + "setting_id": "p8fGWNVkT6n5Dv9P", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json similarity index 84% rename from resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json rename to resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json index 4b1ab35b1c..5c2dfeff98 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 Plus ACE PETG", + "name": "Generic PETG @Sovol SV06 Plus ACE", "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV06 Plus ACE PETG", "from": "system", - "setting_id": "ZrAm6Nm4FI7p4PgC", - "filament_id": "OFl7nOAf", + "setting_id": "I7IzLMYw7iDUUJwc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol SV08 PETG.json rename to resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json index 54718800a9..c637897b10 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV08 PETG", + "name": "Generic PETG @Sovol SV08", "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV08 PETG", "from": "system", - "setting_id": "CWd7KULbXvJeTTEy", - "filament_id": "OFRi7v0b", + "setting_id": "7vDZKIKJW5fy1EGG", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json similarity index 91% rename from resources/profiles/Sovol/filament/Sovol Zero PETG.json rename to resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json index 37f603579b..a223521d25 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol Zero PETG", + "name": "Generic PETG @Sovol Zero", "inherits": "Generic PETG @System", + "renamed_from": "Sovol Zero PETG", "from": "system", - "setting_id": "75OJvkXlmbcaHQfW", - "filament_id": "OFHTVfaU", + "setting_id": "i4OW2eAtXOKdtVNj", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json similarity index 87% rename from resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json index b3780567d1..de9e7cde47 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 ACE PLA", + "name": "Generic PLA @Sovol SV06 ACE", "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV06 ACE PLA", "from": "system", - "setting_id": "kgtcANsbfwSbdgOh", - "filament_id": "OFTvvox9", + "setting_id": "UEEwpetmmxpxM4vV", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json similarity index 85% rename from resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json index a0a3190eaf..8dcb4a6d2d 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 Plus ACE PLA", + "name": "Generic PLA @Sovol SV06 Plus ACE", "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV06 Plus ACE PLA", "from": "system", - "setting_id": "YEEOGJYm4Z8W4vGV", - "filament_id": "OFNZjrLo", + "setting_id": "yzv5Kwe3OivHxNUI", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json similarity index 87% rename from resources/profiles/Sovol/filament/Sovol SV07 PLA.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json index b1b13b7e79..42210ef9c0 100644 --- a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV07 PLA", + "name": "Generic PLA @Sovol SV07", "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV07 PLA", "from": "system", - "setting_id": "IHicmU5gzVf6G4F1", - "filament_id": "OFaFNP2U", + "setting_id": "sNGno8XCSsgmwjvH", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json similarity index 84% rename from resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json index dda11511e0..be23b183ab 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV08 PLA @SV08 0.2 nozzle", + "name": "Generic PLA @Sovol SV08 0.2 nozzle", "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV08 PLA @SV08 0.2 nozzle;Sovol SV08 PLA SV08 0.2 nozzle", "from": "system", - "setting_id": "qmnuve3FgzrXgjPA", - "filament_id": "OFcJ7AKd", + "setting_id": "W7oQNGWqiPMUlzhw", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json similarity index 89% rename from resources/profiles/Sovol/filament/Sovol SV08 PLA.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json index 9e76203099..c124edee31 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV08 PLA", + "name": "Generic PLA @Sovol SV08", "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV08 PLA", "from": "system", - "setting_id": "nnU0222BS0F1c5ki", - "filament_id": "OFcJ7AKd", + "setting_id": "4fSYcvbFXNRHnlEw", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json rename to resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json index 990a2b3edb..131867f6b8 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol Zero PLA Basic", + "name": "Generic PLA @Sovol Zero", "inherits": "Generic PLA @System", + "renamed_from": "Sovol Zero PLA Basic", "from": "system", - "setting_id": "ZVvOaMwZ7noevsYf", - "filament_id": "OF7VJMYM", + "setting_id": "NNDerIjh7qtuh1I3", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json similarity index 80% rename from resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json rename to resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json index 24fab028e8..5b46a92d64 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json +++ b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json @@ -1,11 +1,17 @@ { "type": "filament", - "name": "Sovol Zero PLA Silk", - "inherits": "Generic PLA @System", + "name": "Generic PLA Silk @Sovol Zero", + "inherits": "Generic PLA Silk @System", + "renamed_from": "Sovol Zero PLA Silk", "from": "system", - "setting_id": "QowhGzqSwGQoAp1a", - "filament_id": "OFJVFpJz", + "setting_id": "Se2yKerHRStYtWf5", "instantiation": "true", + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_retraction_length": [ + "nil" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json similarity index 87% rename from resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json rename to resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json index 861b80c567..ba653af37d 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 ACE TPU", + "name": "Generic TPU @Sovol SV06 ACE", "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV06 ACE TPU", "from": "system", - "setting_id": "ERN0ozxmPhIMze0i", - "filament_id": "OFJfv07m", + "setting_id": "jBAo7stLaaQxKFsp", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json similarity index 85% rename from resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json rename to resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json index fbacdaf2da..9c9490b863 100644 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV06 Plus ACE TPU", + "name": "Generic TPU @Sovol SV06 Plus ACE", "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV06 Plus ACE TPU", "from": "system", - "setting_id": "oNucKLcIdxwBPpUN", - "filament_id": "OFkWaWRo", + "setting_id": "MUXz0JSHdT66Mti1", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol SV08 TPU.json rename to resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json index 404675d8f4..bf412d77d8 100644 --- a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol SV08 TPU", + "name": "Generic TPU @Sovol SV08", "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV08 TPU", "from": "system", - "setting_id": "tpBbCQhcSJsBesnG", - "filament_id": "OFyCToOV", + "setting_id": "vFPYMoNvgjn1aSKA", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero TPU.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json similarity index 90% rename from resources/profiles/Sovol/filament/Sovol Zero TPU.json rename to resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json index bd4596b303..8c7c18c523 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero TPU.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json @@ -1,10 +1,10 @@ { "type": "filament", - "name": "Sovol Zero TPU", + "name": "Generic TPU @Sovol Zero", "inherits": "Generic TPU @System", + "renamed_from": "Sovol Zero TPU", "from": "system", - "setting_id": "iZHXx0RyRO096L0z", - "filament_id": "OF6zAVFj", + "setting_id": "MlY6WQ41FE8zDPSV", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json index 45030c23ac..329a91b001 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json index 9128747e51..c9f054af98 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json index a1433ec914..e7bc84ee1a 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json index 5415c845e2..6c555ef1d5 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json index fe28ebc823..e3e0067e60 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv06_ace_buildplate_model.stl", "bed_texture": "sovol_sv06_ace_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV06 ACE PLA" + "default_materials": "Generic PLA @Sovol SV06 ACE" } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json index 440ff3c88f..5624a3c07f 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json @@ -124,6 +124,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 Plus ACE PLA" + "Generic PLA @Sovol SV06 Plus ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json index 8ec61bab90..5b034f4359 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv06plus_ace_buildplate_model.stl", "bed_texture": "sovol_sv06plus_ace_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV06 Plus ACE PLA" + "default_materials": "Generic PLA @Sovol SV06 Plus ACE" } diff --git a/resources/profiles/Sovol/machine/Sovol SV07.json b/resources/profiles/Sovol/machine/Sovol SV07.json index 2ac60556da..bd63f8d407 100644 --- a/resources/profiles/Sovol/machine/Sovol SV07.json +++ b/resources/profiles/Sovol/machine/Sovol SV07.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv07_buildplate_model.stl", "bed_texture": "sovol_sv07_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV07 PLA" + "default_materials": "Generic PLA @Sovol SV07" } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json index c81d26c959..441616c542 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA @SV08 0.2 nozzle" + "Generic PLA @Sovol SV08 0.2 nozzle" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json index 5aa5e4f14b..7defca131b 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json @@ -102,6 +102,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json index 2825fb9a83..d49594b4af 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json index 6510857d6f..576ca16076 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08.json b/resources/profiles/Sovol/machine/Sovol SV08.json index 2d861f5ef4..c6cee44624 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08.json +++ b/resources/profiles/Sovol/machine/Sovol SV08.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv08_buildplate_model.stl", "bed_texture": "sovol_sv08_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV08 PLA;Sovol SV08 PLA @SV08 0.2 nozzle;Sovol SV08 ABS;Sovol SV08 PETG;Sovol SV08 TPU" + "default_materials": "Generic PLA @Sovol SV08;Generic PLA @Sovol SV08 0.2 nozzle;Generic ABS @Sovol SV08;Generic PETG @Sovol SV08;Generic TPU @Sovol SV08" } diff --git a/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json index f4ae49b7cb..a5699a9eed 100644 --- a/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json @@ -107,6 +107,6 @@ "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nG28\nSTART_PRINT\nG28\nG90\nG1 X0 Y0 F12000\nG1 Z0.300 F600\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\n{if first_layer_print_min[1] - 6 > print_bed_min[1]}\nG90\nM83\nG1 E-0.5 F600\nG1 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4} Y{first_layer_print_min[1] - 5} F12000\nG0 Z0.3 F600 ;Move to start position\nG1 E0.200 F600\n{if first_layer_print_max[0] - first_layer_print_min[0] > 50}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{else}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 2} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0])} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{endif}\nG1 E-0.300 F600\nG0 Z1 F600\nG1 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4} Y{first_layer_print_min[1] - 4} F12000\nG0 Z0.3 F600 ;Move to start position\nG1 E0.200 F600\n{if first_layer_print_max[0] - first_layer_print_min[0] > 50}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{else}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 2} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0])} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{endif}\nG1 E-0.300 F600\nG0 Z5 F600\nM400\n{else}\nG90\nM83\nG1 E-0.300 Z3 F600\nG1 X{print_bed_max[1] / 3} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 Z0.3 F600\nG1 E0.300 F600\nG1 X{print_bed_max[1] / 3 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3} Y1 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 E-0.300 Z3 F600\nM400\n{endif}\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\n\n", "machine_end_gcode": "END_PRINT\n", "default_filament_profile": [ - "Sovol Zero PLA Basic" + "Generic PLA @Sovol Zero" ] } diff --git a/resources/profiles/Sovol/machine/Sovol Zero.json b/resources/profiles/Sovol/machine/Sovol Zero.json index c1ccc64b84..6f99e8f8d0 100644 --- a/resources/profiles/Sovol/machine/Sovol Zero.json +++ b/resources/profiles/Sovol/machine/Sovol Zero.json @@ -8,5 +8,5 @@ "bed_model": "sovol_zero_buildplate_model.stl", "bed_texture": "sovol_zero_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol Zero PLA Basic;Sovol Zero PLA Basic HS Nozzle;Sovol Zero PLA Silk;Sovol Zero PLA Silk HS Nozzle;Sovol Zero ABS;Sovol Zero PETG;Sovol Zero PETG HS Nozzle;Sovol Zero TPU;Sovol Zero PC" + "default_materials": "Generic PLA @Sovol Zero;Sovol Zero PLA Basic HS Nozzle;Generic PLA Silk @Sovol Zero;Sovol Zero PLA Silk HS Nozzle;Generic ABS @Sovol Zero;Generic PETG @Sovol Zero;Sovol Zero PETG HS Nozzle;Generic TPU @Sovol Zero;Generic PC @Sovol Zero" } diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index 336f48ac15..b41888a840 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -2322,6 +2322,12 @@ ], "successor": "OFmhJs5V" }, + "OF016CJw": { + "claims": [ + "Sovol/Sovol SV08 ABS" + ], + "successor": "OFY9muEs" + }, "OF0GIkJm": { "claims": [ "Tiertime/Tiertime Generic PLA Silk" @@ -2457,6 +2463,12 @@ ], "successor": "OFDSrzZ8" }, + "OF67EdL5": { + "claims": [ + "Sovol/Sovol SV06 ACE ABS" + ], + "successor": "OFY9muEs" + }, "OF6Fpw1E": { "claims": [ "Comgrow/Comgrow Generic PETG" @@ -2475,12 +2487,30 @@ ], "successor": "OFDSrzZ8" }, + "OF6O67Xk": { + "claims": [ + "Lulzbot/Lulzbot 2.85mm ABS" + ], + "successor": "OFY9muEs" + }, + "OF6VgL2U": { + "claims": [ + "Phrozen/Phrozen PLA" + ], + "successor": "OFDSrzZ8" + }, "OF6WddJ1": { "claims": [ "Flashforge/FusRock S-PAHT" ], "successor": "OFCn83wF" }, + "OF6ooviO": { + "claims": [ + "FLSun/FLSun S1 TPU" + ], + "successor": "OFgbpcy9" + }, "OF6rMr3U": { "claims": [ "Flashforge/FusRock Generic S-Multi" @@ -2505,6 +2535,18 @@ ], "successor": "OFLakOUI" }, + "OF6zAVFj": { + "claims": [ + "Sovol/Sovol Zero TPU" + ], + "successor": "OFgbpcy9" + }, + "OF7VJMYM": { + "claims": [ + "Sovol/Sovol Zero PLA Basic" + ], + "successor": "OFDSrzZ8" + }, "OF7g2vYQ": { "claims": [ "Co Print/CoPrint Generic TPU" @@ -2529,6 +2571,12 @@ ], "successor": "OFQLcbps" }, + "OF8eQjjt": { + "claims": [ + "Lulzbot/Lulzbot 2.85mm PETG" + ], + "successor": "OFYPdQJh" + }, "OF97ru74": { "claims": [ "Prusa/Prusa Generic PC" @@ -2541,6 +2589,12 @@ ], "successor": "OFLakOUI" }, + "OF9z5LZ9": { + "claims": [ + "FLSun/FLSun S1 PETG" + ], + "successor": "OFYPdQJh" + }, "OFACSw9O": { "claims": [ "Creality/Creality Generic PLA" @@ -2608,6 +2662,12 @@ ], "successor": "OFgbpcy9" }, + "OFCEA7Nt": { + "claims": [ + "Sovol/Sovol SV06 Plus ACE ABS" + ], + "successor": "OFY9muEs" + }, "OFCVUEaV": { "claims": [ "Tiertime/Tiertime Generic TPU" @@ -2654,6 +2714,12 @@ ], "successor": "OFgbpcy9" }, + "OFENzGSm": { + "claims": [ + "FLSun/FLSun T1 TPU" + ], + "successor": "OFgbpcy9" + }, "OFETFWx7": { "claims": [ "SecKit/SecKit Generic PLA" @@ -2732,6 +2798,12 @@ ], "successor": "OFQLcbps" }, + "OFHTVfaU": { + "claims": [ + "Sovol/Sovol Zero PETG" + ], + "successor": "OFYPdQJh" + }, "OFHUnLY2": { "claims": [ "Vzbot/Vzbot Generic PETG" @@ -2750,6 +2822,12 @@ ], "successor": "OFLPAxz3" }, + "OFIK0xFa": { + "claims": [ + "FLSun/FLSun S1 ASA" + ], + "successor": "OFLPAxz3" + }, "OFIYTy8S": { "claims": [ "Anker/Anker Generic PLA+", @@ -2782,6 +2860,12 @@ ], "successor": "OFg8ndtj" }, + "OFJ80y1e": { + "claims": [ + "FLSun/FLSun T1 PETG" + ], + "successor": "OFYPdQJh" + }, "OFJJpaLS": { "claims": [ "FLSun/FLSun Generic PETG" @@ -2794,6 +2878,18 @@ ], "successor": "OFDSrzZ8" }, + "OFJVFpJz": { + "claims": [ + "Sovol/Sovol Zero PLA Silk" + ], + "successor": "OFesA6rF" + }, + "OFJfv07m": { + "claims": [ + "Sovol/Sovol SV06 ACE TPU" + ], + "successor": "OFgbpcy9" + }, "OFK01afJ": { "claims": [ "Qidi/Qidi Generic PC" @@ -2812,6 +2908,12 @@ ], "successor": "OFYPdQJh" }, + "OFKo87c6": { + "claims": [ + "Snapmaker/Snapmaker TPU 95A" + ], + "successor": "OFvmwTZE" + }, "OFKuTr12": { "claims": [ "Tiertime/Tiertime Generic PE" @@ -2928,6 +3030,18 @@ ], "successor": "OFIKZxPF" }, + "OFNWcJsM": { + "claims": [ + "Comgrow/Comgrow T300 PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFNX8GI1": { + "claims": [ + "Sovol/Sovol Zero ABS" + ], + "successor": "OFY9muEs" + }, "OFNYewRS": { "claims": [ "Blocks/Blocks Generic PLA" @@ -2940,6 +3054,12 @@ ], "successor": "OFDvXujf" }, + "OFNZjrLo": { + "claims": [ + "Sovol/Sovol SV06 Plus ACE PLA" + ], + "successor": "OFDSrzZ8" + }, "OFNcdCrm": { "claims": [ "Anycubic/Anycubic Generic PLA-CF" @@ -2976,6 +3096,12 @@ ], "successor": "OFKW5hEW" }, + "OFPryWt5": { + "claims": [ + "Lulzbot/Lulzbot 2.85mm PLA" + ], + "successor": "OFDSrzZ8" + }, "OFPy0Ogq": { "claims": [ "Qidi/Qidi Generic PA-CF" @@ -2988,6 +3114,12 @@ ], "successor": "OFWbdGsC" }, + "OFQ9qnkd": { + "claims": [ + "FLSun/FLSun T1 PLA High Speed" + ], + "successor": "OFmpMwxS" + }, "OFQC8Vna": { "claims": [ "Flashforge/Flashforge Generic PETG-CF" @@ -3024,6 +3156,12 @@ ], "successor": "OFLPAxz3" }, + "OFRi7v0b": { + "claims": [ + "Sovol/Sovol SV08 PETG" + ], + "successor": "OFYPdQJh" + }, "OFRiyes1": { "claims": [ "Anker/Anker Generic ASA", @@ -3074,6 +3212,12 @@ ], "successor": "OF8tPByX" }, + "OFSStjay": { + "claims": [ + "FLSun/FLSun S1 PLA Silk" + ], + "successor": "OFesA6rF" + }, "OFSTCno1": { "claims": [ "re3D/re3D Greengate rPETG" @@ -3086,6 +3230,12 @@ ], "successor": "OFu1evlr" }, + "OFTvvox9": { + "claims": [ + "Sovol/Sovol SV06 ACE PLA" + ], + "successor": "OFDSrzZ8" + }, "OFU0n0zW": { "claims": [ "FLSun/FLSun T1 PLA Generic" @@ -3140,6 +3290,12 @@ ], "successor": "OFWbdGsC" }, + "OFV0KrAG": { + "claims": [ + "FLSun/FLSun T1 ABS" + ], + "successor": "OFY9muEs" + }, "OFVKADz5": { "claims": [ "Comgrow/Comgrow Generic PLA" @@ -3304,6 +3460,12 @@ ], "successor": "OFCn83wF" }, + "OFaFNP2U": { + "claims": [ + "Sovol/Sovol SV07 PLA" + ], + "successor": "OFDSrzZ8" + }, "OFaU2JxD": { "claims": [ "Dremel/Dremel Generic PLA" @@ -3328,6 +3490,12 @@ ], "successor": "OFgbpcy9" }, + "OFbjtPQy": { + "claims": [ + "FLSun/FLSun T1 ASA" + ], + "successor": "OFLPAxz3" + }, "OFbt04e0": { "claims": [ "DeltaMaker/DeltaMaker Generic TPU" @@ -3346,6 +3514,18 @@ ], "successor": "OFDvXujf" }, + "OFcJ7AKd": { + "claims": [ + "Sovol/Sovol SV08 PLA" + ], + "successor": "OFDSrzZ8" + }, + "OFcdqaWI": { + "claims": [ + "Sovol/Sovol Zero PC" + ], + "successor": "OFLakOUI" + }, "OFctbSkL": { "claims": [ "Blocks/Blocks Generic ASA-CF" @@ -3395,6 +3575,12 @@ ], "successor": "OFgbpcy9" }, + "OFe7Sx5B": { + "claims": [ + "Sovol/Sovol SV06 ACE PETG" + ], + "successor": "OFYPdQJh" + }, "OFe8UJXH": { "claims": [ "Creality/Creality Generic PC" @@ -3524,6 +3710,12 @@ ], "successor": "OFd0Fv0k" }, + "OFkWaWRo": { + "claims": [ + "Sovol/Sovol SV06 Plus ACE TPU" + ], + "successor": "OFgbpcy9" + }, "OFkYkQGO": { "claims": [ "Tiertime/Tiertime Generic PP-GF" @@ -3542,6 +3734,12 @@ ], "successor": "OFZr862X" }, + "OFl7nOAf": { + "claims": [ + "Sovol/Sovol SV06 Plus ACE PETG" + ], + "successor": "OFYPdQJh" + }, "OFlLmUeV": { "claims": [ "Ginger Additive/Ginger Generic PLA" @@ -3554,6 +3752,12 @@ ], "successor": "OFO5djrM" }, + "OFlXJxX1": { + "claims": [ + "Chuanying/Chuanying PETG" + ], + "successor": "OFYPdQJh" + }, "OFlx52rn": { "claims": [ "Ratrig/RatRig Generic PLA-CF" @@ -3634,6 +3838,12 @@ ], "successor": "OFmpMwxS" }, + "OFoqrHTw": { + "claims": [ + "FLSun/FLSun S1 PLA High Speed" + ], + "successor": "OFmpMwxS" + }, "OFp8gtPH": { "claims": [ "Creality/Creality Generic PLA Silk" @@ -3646,6 +3856,12 @@ ], "successor": "OFLPAxz3" }, + "OFpBV2Ma": { + "claims": [ + "Qidi/Tinmorry PETG-ECO" + ], + "successor": "OFYE7YZw" + }, "OFpSYJLI": { "claims": [ "Creality/Creality Generic PLA Matte" @@ -3718,6 +3934,12 @@ ], "successor": "OFkf1HHw" }, + "OFs1sNLz": { + "claims": [ + "Chuanying/Chuanying ABS" + ], + "successor": "OFY9muEs" + }, "OFs2ReMr": { "claims": [ "InfiMech/InfiMech Generic PETG" @@ -3796,6 +4018,12 @@ ], "successor": "OFDSrzZ8" }, + "OFuUJyRx": { + "claims": [ + "FLSun/FLSun T1 PLA Silk" + ], + "successor": "OFesA6rF" + }, "OFupq0tY": { "claims": [ "Blocks/Blocks Generic PLA-CF" @@ -3868,6 +4096,12 @@ ], "successor": "OFesA6rF" }, + "OFyCToOV": { + "claims": [ + "Sovol/Sovol SV08 TPU" + ], + "successor": "OFgbpcy9" + }, "OFyFRojy": { "claims": [ "Ratrig/RatRig Generic ABS" @@ -3904,6 +4138,12 @@ ], "successor": "OFYPdQJh" }, + "OFzzmK2Q": { + "claims": [ + "FLSun/FLSun S1 ABS" + ], + "successor": "OFY9muEs" + }, "OGFA00": { "claims": [ "OrcaFilamentLibrary/Bambu PLA Basic" diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index c5e6aefe58..34ff667ed0 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -234,6 +234,7 @@ def load_vendor_filaments(profiles_dir, vendor): "compatible_printers": data.get("compatible_printers") or [], "filament_vendor": data.get("filament_vendor"), "filament_type": data.get("filament_type"), + "renamed_from": data.get("renamed_from"), } return presets, errors @@ -378,6 +379,7 @@ def analyze_tree(profiles_dir): triples = {} # fid -> set of triples of its non-island declarers declarer_triples = [] # (vendor, rec, fid, triple) per non-island declarer family_triples = {} # (vendor, family) -> {triple: [declarer names]} + renamed_claims = {} # "Vendor/OldFamily" -> set of ids the rename now carries for vendor, filaments in vendors.items(): occurring = vendor_ids.setdefault(vendor, set()) @@ -411,6 +413,13 @@ def analyze_tree(profiles_dir): continue occurring.add(eff) ids.setdefault(eff, set()).add(f"{vendor}/{base_name(rec['name'])}") + # A renamed preset keeps voting under the names it used to have, so + # the id its old family carried retires to the id the rename minted. + renamed = rec.get("renamed_from") + for old in (renamed if isinstance(renamed, str) else "").split(";"): + if old.strip(): + renamed_claims.setdefault( + f"{vendor}/{base_name(old.strip())}", set()).add(eff) if rec.get("filament_id"): instantiated_with_id.append(f"{vendor}/{rec['name']}") if vendor != OFL and rec["ofl_entry"] and eff in ofl_declared: @@ -459,6 +468,7 @@ def analyze_tree(profiles_dir): "vendors": vendors, "read_errors": read_errors, "ids": {fid: sorted(claims) for fid, claims in ids.items()}, + "renamed_claims": {claim: sorted(fids) for claim, fids in renamed_claims.items()}, "vendor_ids": vendor_ids, "declared_ids": declared_ids, "instantiated_with_id": sorted(instantiated_with_id), @@ -529,11 +539,18 @@ def write_ledger(path, obj): def claim_effective_ids(analysis): - """Reverse of analysis["ids"]: claim "Vendor/Family" -> set of effective ids.""" + """Reverse of analysis["ids"]: claim "Vendor/Family" -> set of effective ids. + + A preset's "renamed_from" names count as claims of that preset too, so an id + whose family was renamed still finds a successor in the claim vote. + """ claim_ids = {} for fid, claims in analysis["ids"].items(): for claim in claims: claim_ids.setdefault(claim, set()).add(fid) + for claim, fids in analysis.get("renamed_claims", {}).items(): + if claim not in claim_ids: + claim_ids[claim] = set(fids) return claim_ids diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index e86eeab452..b3e38041f3 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -71,38 +71,15 @@ "Flashforge/Generic TPU-90A @FF C5P", "Flashforge/Generic TPU-95A @FF C5", "Flashforge/Generic TPU-95A @FF C5P", - "Lulzbot/Lulzbot 2.85mm ABS", - "Lulzbot/Lulzbot 2.85mm PETG", - "Lulzbot/Lulzbot 2.85mm PLA", "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", "Snapmaker/PolyTerra J1 PLA", "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", "Sovol/Generic PLA Silk @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" + "Sovol/Sovol Zero PLA Silk HS Nozzle" ], "id_overrides": [ "Anycubic/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", @@ -188,14 +165,11 @@ "BBL/addnorth TPU EasyFlex", "BBL/addnorth TPU Pro Matte 85A", "BBL/addnorth TPU Pro Matte 95A", - "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", - "Chuanying/Chuanying PETG @Chuanying X1 0.25 Nozzle", "Chuanying/Generic HIPS @Chuanying", "Chuanying/Generic PVA @Chuanying", "Co Print/Generic ABS @CoPrint", "Co Print/Generic PETG @CoPrint", "Co Print/Generic TPU @CoPrint", - "Comgrow/Comgrow T300 PLA", "Creality/Generic ASA-CF @Creality Hi-all", "Creality/Generic PETG-CF @Creality Hi-all", "Creality/Generic PLA High Speed @Creality Ender-3V3-all", @@ -273,18 +247,6 @@ "Elegoo/Generic PETG PRO @Elegoo", "Elegoo/Generic PETG-CF @Elegoo Centauri", "Elegoo/Generic PLA Matte @Elegoo", - "FLSun/FLSun S1 ABS", - "FLSun/FLSun S1 ASA", - "FLSun/FLSun S1 PETG", - "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 High Speed", - "FLSun/FLSun T1 PLA Silk", - "FLSun/FLSun T1 TPU", "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", "Flashforge/FlashForge PC @FF G4 0.6 nozzle", "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", @@ -777,9 +739,6 @@ "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", "Flashforge/Polymaker S1", - "Lulzbot/Lulzbot 2.85mm ABS", - "Lulzbot/Lulzbot 2.85mm PETG", - "Lulzbot/Lulzbot 2.85mm PLA", "OrcaFilamentLibrary/AliZ PETG-CF @base", "OrcaFilamentLibrary/AliZ PETG-Metal @base", "OrcaFilamentLibrary/Elegoo ASA-CF @base", @@ -917,29 +876,9 @@ "Sovol/Generic PLA Silk @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", "Wanhao France/YUMI PETG", "Wanhao France/YUMI PLA Bowden", "Wanhao France/YUMI PLA Direct Drive", @@ -1571,9 +1510,6 @@ "GF_ANXPH": [ "BBL/addnorth PLA X-PLA High Speed" ], - "OF016CJw": [ - "Sovol/Sovol SV08 ABS" - ], "OF02UAVh": [ "Creality/Soleyin Ultra PLA" ], @@ -1846,9 +1782,6 @@ "OF66KUAN": [ "Creality/PolySonic PLA" ], - "OF67EdL5": [ - "Sovol/Sovol SV06 ACE ABS" - ], "OF6ATsCF": [ "Snapmaker/Snapmaker Dual PLA-CF" ], @@ -1868,22 +1801,13 @@ "Elegoo/Generic PET", "Flashforge/Generic PET" ], - "OF6O67Xk": [ - "Lulzbot/Lulzbot 2.85mm ABS" - ], "OF6TuVAg": [ "Snapmaker/Snapmaker Breakaway Support For PLA", "Snapmaker/Snapmaker J1 PVA" ], - "OF6VgL2U": [ - "Phrozen/Phrozen PLA" - ], "OF6kj4jI": [ "iQ/Fiberthree PACF Pro P2" ], - "OF6ooviO": [ - "FLSun/FLSun S1 TPU" - ], "OF6rdQ6M": [ "Creality/Generic PPS-CF", "Tiertime/Generic PPS-CF" @@ -1891,9 +1815,6 @@ "OF6ueBwd": [ "Flashforge/Flashforge PLA Pro" ], - "OF6zAVFj": [ - "Sovol/Sovol Zero TPU" - ], "OF70zbGS": [ "Creality/Hyper L-W PLA" ], @@ -1916,9 +1837,6 @@ "OF7SliVn": [ "Snapmaker/PolyLite J1 PLA" ], - "OF7VJMYM": [ - "Sovol/Sovol Zero PLA Basic" - ], "OF7c9fln": [ "Anycubic/Anycubic PLA Translucent" ], @@ -1957,9 +1875,6 @@ "OF8dCquh": [ "Snapmaker/Snapmaker J1 ABS Benchy" ], - "OF8eQjjt": [ - "Lulzbot/Lulzbot 2.85mm PETG" - ], "OF8eaY7j": [ "Creality/Generic PA612-CF" ], @@ -2002,9 +1917,6 @@ "OF9emAI9": [ "Ratrig/RatRig PunkFil PETG" ], - "OF9z5LZ9": [ - "FLSun/FLSun S1 PETG" - ], "OFA026vt": [ "OrcaArena/Arena PA-CF" ], @@ -2080,9 +1992,6 @@ "OrcaFilamentLibrary/Generic EVA", "Tiertime/Generic EVA" ], - "OFCEA7Nt": [ - "Sovol/Sovol SV06 Plus ACE ABS" - ], "OFCIUsWh": [ "OrcaFilamentLibrary/Panchroma PLA Translucent", "Snapmaker/Panchroma PLA Translucent" @@ -2156,7 +2065,6 @@ "Artillery/Generic PLA", "Blocks/Generic PLA", "CONSTRUCT3D/Generic PLA", - "Chuanying/Chuanying PLA", "Chuanying/Generic PLA", "Co Print/Generic PLA", "CoLiDo/Generic PLA", @@ -2173,9 +2081,11 @@ "Ginger Additive/Generic PLA", "InfiMech/Generic PLA", "LONGER/Generic PLA", + "Lulzbot/Generic PLA", "OrcaArena/Generic PLA", "OrcaFilamentLibrary/Generic PLA", "Peopoly/Generic PLA", + "Phrozen/Generic PLA", "Prusa/Generic PLA", "Qidi/Generic PLA", "RH3D/Generic PLA", @@ -2241,9 +2151,6 @@ "OFEMfQsX": [ "Flashforge/Flashforge PETG Basic" ], - "OFENzGSm": [ - "FLSun/FLSun T1 TPU" - ], "OFEOnBj6": [ "Snapmaker/Snapmaker PLA Lite" ], @@ -2384,9 +2291,6 @@ "OFHAccHz": [ "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" ], - "OFHTVfaU": [ - "Sovol/Sovol Zero PETG" - ], "OFHWSM21": [ "OrcaFilamentLibrary/Fiberon PET-CF" ], @@ -2419,9 +2323,6 @@ "OFIE3vOf": [ "Anycubic/Anycubic PLA Matte" ], - "OFIK0xFa": [ - "FLSun/FLSun S1 ASA" - ], "OFIKZxPF": [ "Creality/Generic PLA Wood" ], @@ -2461,9 +2362,6 @@ "OFJ3HRsR": [ "OrcaArena/Arena ABS" ], - "OFJ80y1e": [ - "FLSun/FLSun T1 PETG" - ], "OFJHBEGD": [], "OFJNeELv": [ "OrcaFilamentLibrary/FILL3D PA" @@ -2475,18 +2373,12 @@ "OFJQDUk3": [ "OrcaFilamentLibrary/FilAr PETG Cristal" ], - "OFJVFpJz": [ - "Sovol/Sovol Zero PLA Silk" - ], "OFJWKoYG": [ "iQ/Material4Print ABS Natur P1" ], "OFJYpVAQ": [ "Flashforge/Generic TPU-90A" ], - "OFJfv07m": [ - "Sovol/Sovol SV06 ACE TPU" - ], "OFJgijky": [ "Snapmaker/PolyLite CosPLA" ], @@ -2551,9 +2443,6 @@ "OrcaFilamentLibrary/Panchroma PLA Marble", "Snapmaker/Panchroma PLA Marble" ], - "OFKo87c6": [ - "Snapmaker/Snapmaker TPU 95A" - ], "OFKpQTJI": [ "Flashforge/Flashforge TPU 65D" ], @@ -2579,7 +2468,6 @@ "Anycubic/Generic ASA", "Artillery/Generic ASA", "Blocks/Generic ASA", - "Chuanying/Chuanying ASA", "Chuanying/Generic ASA", "Creality/Generic ASA", "Custom/Generic ASA", @@ -2717,18 +2605,9 @@ "OFNU9YIW": [ "OrcaFilamentLibrary/FilAr PETG Azul Boreal" ], - "OFNWcJsM": [ - "Comgrow/Comgrow T300 PLA" - ], "OFNWnx2c": [ "Flashforge/Flashforge TPU-95A" ], - "OFNX8GI1": [ - "Sovol/Sovol Zero ABS" - ], - "OFNZjrLo": [ - "Sovol/Sovol SV06 Plus ACE PLA" - ], "OFNemJM6": [ "OrcaFilamentLibrary/FilAr PLA Cobre" ], @@ -2834,9 +2713,6 @@ "OFPqX3x2": [ "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" ], - "OFPryWt5": [ - "Lulzbot/Lulzbot 2.85mm PLA" - ], "OFQ1KzO8": [ "Snapmaker/Snapmaker J1 PLA Silk" ], @@ -2849,9 +2725,6 @@ "OFQ40XeN": [ "Qidi/QIDI PETG Tough" ], - "OFQ9qnkd": [ - "FLSun/FLSun T1 PLA High Speed" - ], "OFQEGL7z": [ "FlyingBear/FlyingBear PA-CF" ], @@ -2925,9 +2798,6 @@ "OFRhCTUg": [ "Anycubic/Anycubic PET-CF" ], - "OFRi7v0b": [ - "Sovol/Sovol SV08 PETG" - ], "OFRiFnfQ": [ "OrcaFilamentLibrary/Eolas Prints PETG Transition" ], @@ -2963,9 +2833,6 @@ "OrcaFilamentLibrary/Panchroma PLA Silk", "Snapmaker/Panchroma PLA Silk" ], - "OFSStjay": [ - "FLSun/FLSun S1 PLA Silk" - ], "OFSa39yP": [ "Snapmaker/Snapmaker J1 PLA" ], @@ -3015,9 +2882,6 @@ "OFTsHNQi": [ "Qidi/QIDI ASA" ], - "OFTvvox9": [ - "Sovol/Sovol SV06 ACE PLA" - ], "OFU1zPxE": [ "Elegoo/Elegoo PLA Galaxy", "OrcaFilamentLibrary/Elegoo PLA Galaxy" @@ -3056,9 +2920,6 @@ "Elegoo/Elegoo PC", "OrcaFilamentLibrary/Elegoo PC" ], - "OFV0KrAG": [ - "FLSun/FLSun T1 ABS" - ], "OFV5Q7j2": [ "Snapmaker/Snapmaker J1 TPE" ], @@ -3223,6 +3084,7 @@ "Flashforge/Generic ABS", "FlyingBear/Generic ABS", "InfiMech/Generic ABS", + "Lulzbot/Generic ABS", "OrcaArena/Generic ABS", "OrcaFilamentLibrary/Generic ABS", "Peopoly/Generic ABS", @@ -3236,6 +3098,9 @@ "Vzbot/Generic ABS", "Z-Bolt/Generic ABS" ], + "OFYE7YZw": [ + "Qidi/Tinmorry PETG-ECO" + ], "OFYEtXuk": [ "Snapmaker/Snapmaker J1 PA-CF" ], @@ -3263,6 +3128,7 @@ "Ginger Additive/Generic PETG", "InfiMech/Generic PETG", "LONGER/Generic PETG", + "Lulzbot/Generic PETG", "OrcaArena/Generic PETG", "OrcaFilamentLibrary/Generic PETG", "Peopoly/Generic PETG", @@ -3330,9 +3196,6 @@ "OFaEuvNF": [ "Anycubic/Anycubic PAHT-CF" ], - "OFaFNP2U": [ - "Sovol/Sovol SV07 PLA" - ], "OFaHjk1V": [ "Volumic/Volumic PC" ], @@ -3381,9 +3244,6 @@ "OFbh7HcA": [ "Eryone/Eryone PP-CF" ], - "OFbjtPQy": [ - "FLSun/FLSun T1 ASA" - ], "OFc3xdm9": [ "OrcaFilamentLibrary/Overture PLA", "Qidi/Overture PLA" @@ -3394,9 +3254,6 @@ "OFcBJQcC": [ "Snapmaker/Snapmaker Dual TPU High-Flow" ], - "OFcJ7AKd": [ - "Sovol/Sovol SV08 PLA" - ], "OFcJDtTx": [ "Artillery/Artillery TPU" ], @@ -3406,9 +3263,6 @@ "OFcVLpNA": [ "Flashforge/FusRock PAHT-GF" ], - "OFcdqaWI": [ - "Sovol/Sovol Zero PC" - ], "OFcfQk4h": [ "BBL/Overture Air PLA", "OrcaFilamentLibrary/Overture Air PLA" @@ -3470,9 +3324,6 @@ "OFe6sfXS": [ "Flashforge/FlashForge PC" ], - "OFe7Sx5B": [ - "Sovol/Sovol SV06 ACE PETG" - ], "OFe8tuNb": [ "Tiertime/Tiertime PA6-CF" ], @@ -3509,6 +3360,7 @@ "OFesA6rF": [ "Anker/Generic PLA Silk", "Creality/Generic PLA Silk", + "FLSun/Generic PLA Silk", "Flashforge/Generic PLA Silk", "OrcaArena/Generic PLA Silk", "OrcaFilamentLibrary/Generic PLA Silk", @@ -3760,7 +3612,6 @@ "Creality/eSUN PLA-LW" ], "OFi6PfUM": [ - "Chuanying/Chuanying PLA-SILK", "Chuanying/Generic PLA-Silk", "Creality/Generic PLA-Silk", "Flashforge/Generic PLA-Silk" @@ -3879,9 +3730,6 @@ "OFkR8E2c": [ "Prusa/Prusament PETG" ], - "OFkWaWRo": [ - "Sovol/Sovol SV06 Plus ACE TPU" - ], "OFkf1HHw": [ "Flashforge/Generic PLA-SILK" ], @@ -3914,9 +3762,6 @@ "OFkzr35f": [ "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" ], - "OFl7nOAf": [ - "Sovol/Sovol SV06 Plus ACE PETG" - ], "OFlBoEfL": [ "Snapmaker/Snapmaker J1 TPU High-Flow" ], @@ -3933,9 +3778,6 @@ "OFlSNkhc": [ "OrcaFilamentLibrary/Eolas Prints ASA" ], - "OFlXJxX1": [ - "Chuanying/Chuanying PETG" - ], "OFllmFhT": [ "Elegoo/Generic PETG PRO" ], @@ -4011,6 +3853,7 @@ ], "OFmpMwxS": [ "Creality/Generic PLA High Speed", + "FLSun/Generic PLA High Speed", "Flashforge/Generic PLA High Speed", "OrcaFilamentLibrary/Generic PLA High Speed", "Qidi/Generic PLA High Speed", @@ -4114,9 +3957,6 @@ "OFoiVqVM": [ "OrcaFilamentLibrary/Bambu PLA Basic" ], - "OFoqrHTw": [ - "FLSun/FLSun S1 PLA High Speed" - ], "OForhBi4": [ "Cubicon/Cubicon ABSk" ], @@ -4132,9 +3972,6 @@ "OFp9wdmf": [ "Eryone/Eryone PA-CF" ], - "OFpBV2Ma": [ - "Qidi/Tinmorry PETG-ECO" - ], "OFpBlrvY": [ "OrcaFilamentLibrary/Valment PLA Silk" ], @@ -4221,9 +4058,6 @@ "Elegoo/Elegoo ASA-CF", "OrcaFilamentLibrary/Elegoo ASA-CF" ], - "OFs1sNLz": [ - "Chuanying/Chuanying ABS" - ], "OFsB2lxm": [ "Elegoo/Elegoo PLA Matte", "OrcaFilamentLibrary/Elegoo PLA Matte" @@ -4343,9 +4177,6 @@ "OFuO0cAP": [ "OrcaArena/Arena PETG-CF" ], - "OFuUJyRx": [ - "FLSun/FLSun T1 PLA Silk" - ], "OFuUuIhR": [ "Elegoo/Elegoo PETG-CF", "OrcaFilamentLibrary/Elegoo PETG-CF" @@ -4410,6 +4241,9 @@ "Elegoo/Elegoo PLA", "OrcaFilamentLibrary/Elegoo PLA" ], + "OFvmwTZE": [ + "Snapmaker/Snapmaker TPU 95A" + ], "OFvrXuV7": [ "OrcaFilamentLibrary/PolyLite ASA" ], @@ -4417,7 +4251,6 @@ "Snapmaker/Fiberon PA12-CF10" ], "OFvxghTE": [ - "Chuanying/Chuanying HS PLA", "Chuanying/Generic HS PLA", "Flashforge/Generic HS PLA", "TwoTrees/Generic HS PLA" @@ -4505,9 +4338,6 @@ "OFy8tYJE": [ "Cubicon/Cubicon ABS-A100" ], - "OFyCToOV": [ - "Sovol/Sovol SV08 TPU" - ], "OFyFyLIp": [ "SeeMeCNC/SeeMeCNC TPU" ], @@ -4585,9 +4415,6 @@ ], "OFzyIxba": [ "OrcaFilamentLibrary/Bambu PVA" - ], - "OFzzmK2Q": [ - "FLSun/FLSun S1 ABS" ] }, "instantiated_with_id": [ @@ -4847,8 +4674,6 @@ "CONSTRUCT3D/Generic High Flow PETG @C1", "CONSTRUCT3D/Generic PETG @C1", "CONSTRUCT3D/Generic PLA @C1", - "Chuanying/Chuanying ABS @Chuanying X1 0.25 Nozzle", - "Chuanying/Chuanying PETG @Chuanying X1 0.25 Nozzle", "Chuanying/Generic ABS @Chuanying", "Chuanying/Generic ASA @Chuanying", "Chuanying/Generic HIPS @Chuanying", @@ -4877,7 +4702,6 @@ "CoLiDo/Generic PLA @CoLiDo X16", "CoLiDo/Generic TPU @CoLiDo DIY 4.0", "CoLiDo/Generic TPU @CoLiDo X16", - "Comgrow/Comgrow T300 PLA", "Comgrow/Generic ABS @Comgrow", "Comgrow/Generic PETG @Comgrow", "Comgrow/Generic PLA @Comgrow", @@ -5459,18 +5283,6 @@ "Eryone/Eryone PP-CF", "Eryone/Eryone Silk PLA", "Eryone/Eryone TPU", - "FLSun/FLSun S1 ABS", - "FLSun/FLSun S1 ASA", - "FLSun/FLSun S1 PETG", - "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 High Speed", - "FLSun/FLSun T1 PLA Silk", - "FLSun/FLSun T1 TPU", "FLSun/Generic ABS @FLSun", "FLSun/Generic ASA @FLSun", "FLSun/Generic PA @FLSun", @@ -6090,9 +5902,6 @@ "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/Generic PEEK @MM", "OrcaArena/Generic PA @OrcaArena", "OrcaArena/Generic PA-CF @OrcaArena", @@ -6208,7 +6017,6 @@ "Peopoly/Peopoly Lancer PET-CF", "Peopoly/Peopoly Lancer PETG-C", "Peopoly/Peopoly Lancer PLA-C", - "Phrozen/Phrozen PLA @Phrozen Arco 0.4 nozzle", "Prusa/Generic ABS @Prusa CORE One", "Prusa/Generic ABS @Prusa CORE One 0.6", "Prusa/Generic ABS @Prusa CORE One 0.8", @@ -7029,29 +6837,9 @@ "Sovol/Generic PLA Silk @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/Generic ABS @Tiertime", "Tiertime/Generic ABS @Tiertime 300HS", "Tiertime/Generic ASA @Tiertime", @@ -7221,13 +7009,6 @@ ], "triple_exceptions": [], "triples": { - "OF016CJw": [ - [ - "Generic", - "ABS", - "Sovol SV08 ABS" - ] - ], "OF02UAVh": [ [ "Creality", @@ -7830,13 +7611,6 @@ "PolySonic PLA" ] ], - "OF67EdL5": [ - [ - "Generic", - "ABS", - "Sovol SV06 ACE ABS" - ] - ], "OF6ATsCF": [ [ "Snapmaker", @@ -7872,13 +7646,6 @@ "Generic PET" ] ], - "OF6O67Xk": [ - [ - "Generic", - "ABS", - "Lulzbot 2.85mm ABS" - ] - ], "OF6TuVAg": [ [ "Snapmaker", @@ -7886,13 +7653,6 @@ "Snapmaker J1 PVA" ] ], - "OF6VgL2U": [ - [ - "Generic", - "PLA", - "Phrozen PLA" - ] - ], "OF6kj4jI": [ [ "iQ Materials", @@ -7900,13 +7660,6 @@ "Fiberthree PACF Pro P2" ] ], - "OF6ooviO": [ - [ - "Generic", - "TPU", - "FLSun S1 TPU" - ] - ], "OF6rdQ6M": [ [ "Generic", @@ -7921,13 +7674,6 @@ "Flashforge PLA Pro" ] ], - "OF6zAVFj": [ - [ - "Generic", - "TPU", - "Sovol Zero TPU" - ] - ], "OF70zbGS": [ [ "Creality", @@ -7977,13 +7723,6 @@ "PolyLite J1 PLA" ] ], - "OF7VJMYM": [ - [ - "Generic", - "PLA", - "Sovol Zero PLA Basic" - ] - ], "OF7c9fln": [ [ "Anycubic", @@ -8068,13 +7807,6 @@ "Snapmaker J1 ABS Benchy" ] ], - "OF8eQjjt": [ - [ - "Generic", - "PETG", - "Lulzbot 2.85mm PETG" - ] - ], "OF8eaY7j": [ [ "Generic", @@ -8173,13 +7905,6 @@ "RatRig PunkFil PETG" ] ], - "OF9z5LZ9": [ - [ - "Generic", - "PETG", - "FLSun S1 PETG" - ] - ], "OFA026vt": [ [ "Orca Arena", @@ -8348,13 +8073,6 @@ "Generic EVA" ] ], - "OFCEA7Nt": [ - [ - "Generic", - "ABS", - "Sovol SV06 Plus ACE ABS" - ] - ], "OFCIUsWh": [ [ "Polymaker", @@ -8600,13 +8318,6 @@ "Flashforge PETG Basic" ] ], - "OFENzGSm": [ - [ - "Generic", - "TPU", - "FLSun T1 TPU" - ] - ], "OFEOnBj6": [ [ "Snapmaker", @@ -8929,13 +8640,6 @@ "FilAr PLA Blanco Antartida" ] ], - "OFHTVfaU": [ - [ - "Generic", - "PETG", - "Sovol Zero PETG" - ] - ], "OFHWSM21": [ [ "Polymaker", @@ -9006,13 +8710,6 @@ "Anycubic PLA Matte" ] ], - "OFIK0xFa": [ - [ - "Generic", - "ASA", - "FLSun S1 ASA" - ] - ], "OFIKZxPF": [ [ "Generic", @@ -9104,13 +8801,6 @@ "Arena ABS" ] ], - "OFJ80y1e": [ - [ - "Generic", - "PETG", - "FLSun T1 PETG" - ] - ], "OFJHBEGD": [ [ "DREMC", @@ -9139,13 +8829,6 @@ "FilAr PETG Cristal" ] ], - "OFJVFpJz": [ - [ - "Generic", - "PLA", - "Sovol Zero PLA Silk" - ] - ], "OFJWKoYG": [ [ "iQ Materials", @@ -9160,13 +8843,6 @@ "Generic TPU-90A" ] ], - "OFJfv07m": [ - [ - "Generic", - "TPU", - "Sovol SV06 ACE TPU" - ] - ], "OFJgijky": [ [ "Polymaker", @@ -9314,13 +8990,6 @@ "Panchroma PLA Marble" ] ], - "OFKo87c6": [ - [ - "Generic", - "TPU", - "Snapmaker TPU 95A" - ] - ], "OFKpQTJI": [ [ "Generic", @@ -9608,13 +9277,6 @@ "FilAr PETG Azul Boreal" ] ], - "OFNWcJsM": [ - [ - "Generic", - "PLA", - "Comgrow T300 PLA" - ] - ], "OFNWnx2c": [ [ "Generic", @@ -9622,20 +9284,6 @@ "Flashforge TPU-95A" ] ], - "OFNX8GI1": [ - [ - "Generic", - "ABS", - "Sovol Zero ABS" - ] - ], - "OFNZjrLo": [ - [ - "Generic", - "PLA", - "Sovol SV06 Plus ACE PLA" - ] - ], "OFNemJM6": [ [ "FilAr", @@ -9860,13 +9508,6 @@ "FilAr PLA Rosa Amaranto" ] ], - "OFPryWt5": [ - [ - "Generic", - "PLA", - "Lulzbot 2.85mm PLA" - ] - ], "OFQ1KzO8": [ [ "Snapmaker", @@ -9895,13 +9536,6 @@ "QIDI PETG Tough" ] ], - "OFQ9qnkd": [ - [ - "Generic", - "PLA", - "FLSun T1 PLA High Speed" - ] - ], "OFQEGL7z": [ [ "FlyingBear", @@ -10035,13 +9669,6 @@ "Anycubic PET-CF" ] ], - "OFRi7v0b": [ - [ - "Generic", - "PETG", - "Sovol SV08 PETG" - ] - ], "OFRiFnfQ": [ [ "Eolas Prints", @@ -10119,13 +9746,6 @@ "Panchroma PLA Silk" ] ], - "OFSStjay": [ - [ - "Generic", - "PLA", - "FLSun S1 PLA Silk" - ] - ], "OFSa39yP": [ [ "Snapmaker", @@ -10245,13 +9865,6 @@ "QIDI ASA" ] ], - "OFTvvox9": [ - [ - "Generic", - "PLA", - "Sovol SV06 ACE PLA" - ] - ], "OFU1zPxE": [ [ "Elegoo", @@ -10336,13 +9949,6 @@ "Elegoo PC" ] ], - "OFV0KrAG": [ - [ - "Generic", - "ABS", - "FLSun T1 ABS" - ] - ], "OFV5Q7j2": [ [ "Snapmaker", @@ -10644,6 +10250,13 @@ "Generic ABS" ] ], + "OFYE7YZw": [ + [ + "Tinmorry", + "PETG", + "Tinmorry PETG-ECO" + ] + ], "OFYEtXuk": [ [ "Snapmaker", @@ -10791,13 +10404,6 @@ "Anycubic PAHT-CF" ] ], - "OFaFNP2U": [ - [ - "Generic", - "PLA", - "Sovol SV07 PLA" - ] - ], "OFaHjk1V": [ [ "Volumic", @@ -10910,13 +10516,6 @@ "Eryone PP-CF" ] ], - "OFbjtPQy": [ - [ - "Generic", - "ASA", - "FLSun T1 ASA" - ] - ], "OFc3xdm9": [ [ "Overture", @@ -10938,13 +10537,6 @@ "Snapmaker Dual TPU High-Flow" ] ], - "OFcJ7AKd": [ - [ - "Generic", - "PLA", - "Sovol SV08 PLA" - ] - ], "OFcJDtTx": [ [ "Artillery", @@ -10966,13 +10558,6 @@ "FusRock PAHT-GF" ] ], - "OFcdqaWI": [ - [ - "Generic", - "PC", - "Sovol Zero PC" - ] - ], "OFcfQk4h": [ [ "Overture", @@ -11106,13 +10691,6 @@ "FlashForge PC" ] ], - "OFe7Sx5B": [ - [ - "Generic", - "PETG", - "Sovol SV06 ACE PETG" - ] - ], "OFe8tuNb": [ [ "Tiertime", @@ -11918,13 +11496,6 @@ "Prusament PETG" ] ], - "OFkWaWRo": [ - [ - "Generic", - "TPU", - "Sovol SV06 Plus ACE TPU" - ] - ], "OFkf1HHw": [ [ "Generic", @@ -11995,13 +11566,6 @@ "Eolas Prints PLA Antibacterial" ] ], - "OFl7nOAf": [ - [ - "Generic", - "PETG", - "Sovol SV06 Plus ACE PETG" - ] - ], "OFlBoEfL": [ [ "Snapmaker", @@ -12037,13 +11601,6 @@ "Eolas Prints ASA" ] ], - "OFlXJxX1": [ - [ - "Generic", - "PETG", - "Chuanying PETG" - ] - ], "OFllmFhT": [ [ "Generic", @@ -12401,13 +11958,6 @@ "Bambu PLA Basic" ] ], - "OFoqrHTw": [ - [ - "Generic", - "PLA", - "FLSun S1 PLA High Speed" - ] - ], "OForhBi4": [ [ "Cubicon", @@ -12443,13 +11993,6 @@ "Eryone PA-CF" ] ], - "OFpBV2Ma": [ - [ - "Generic", - "PETG", - "Tinmorry PETG-ECO" - ] - ], "OFpBlrvY": [ [ "Valment", @@ -12632,13 +12175,6 @@ "Elegoo ASA-CF" ] ], - "OFs1sNLz": [ - [ - "Generic", - "ABS", - "Chuanying ABS" - ] - ], "OFsB2lxm": [ [ "Elegoo", @@ -12898,13 +12434,6 @@ "Arena PETG-CF" ] ], - "OFuUJyRx": [ - [ - "Generic", - "PLA", - "FLSun T1 PLA Silk" - ] - ], "OFuUuIhR": [ [ "Elegoo", @@ -13045,6 +12574,13 @@ "Elegoo PLA" ] ], + "OFvmwTZE": [ + [ + "Snapmaker", + "TPU", + "Snapmaker TPU 95A" + ] + ], "OFvrXuV7": [ [ "Polymaker", @@ -13255,13 +12791,6 @@ "Cubicon ABS-A100" ] ], - "OFyCToOV": [ - [ - "Generic", - "TPU", - "Sovol SV08 TPU" - ] - ], "OFyFyLIp": [ [ "SeeMeCNC", @@ -13443,13 +12972,6 @@ "PVA", "Bambu PVA" ] - ], - "OFzzmK2Q": [ - [ - "Generic", - "ABS", - "FLSun S1 ABS" - ] ] } } From 90d5654db90adec6c1610b83936743e1cd74d238 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 17:56:47 +0800 Subject: [PATCH 076/208] Shifted the guide links to the bottom left of the publish dialog --- src/slic3r/GUI/PublishSettingsDialog.cpp | 41 ++++++++++++------------ 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 6b641e34da..0e8c47b799 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -511,29 +511,11 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) wxBoxSizer* w_sizer = new wxBoxSizer(wxVERTICAL); - wxStaticText* msg = new wxStaticText(this, wxID_ANY, _L("Select which settings to embed in the 3MF file")); + wxStaticText* msg = new wxStaticText(this, wxID_ANY, _L("Select which settings to be published in the 3MF file")); msg->SetFont(Label::Body_13); msg->Wrap(-1); w_sizer->Add(msg, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); - // Guide link: opens the (still WIP) Publish 3MF docs in a new window/tab, keeping the dialog open. - wxStaticText* guide_link = new wxStaticText(this, wxID_ANY, _L("Publish 3MF Wiki Guide")); - guide_link->SetFont(Label::Body_13); - guide_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); - guide_link->SetCursor(wxCURSOR_HAND); - guide_link->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { - wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html", wxBROWSER_NEW_WINDOW); - }); - w_sizer->Add(guide_link, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); - - // Placeholder guide link: a Publish 3MF video URL, right below the wiki guide link. - wxStaticText* video_link = new wxStaticText(this, wxID_ANY, _L("Publish 3MF YouTube Video (Placeholder)")); - video_link->SetFont(Label::Body_13); - video_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); - video_link->SetCursor(wxCURSOR_HAND); - video_link->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { wxLaunchDefaultBrowser("https://www.youtube.com", wxBROWSER_NEW_WINDOW); }); - w_sizer->Add(video_link, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); - w_sizer->Add(f_bar, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); w_sizer->Add(m_outer_tabs, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); w_sizer->Add(m_outer_host, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); @@ -556,7 +538,26 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) }); dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); - w_sizer->Add(dlg_btns, 0, wxEXPAND); + // Guide links, bottom-left, sharing the footer row with the OK/Cancel buttons (pushed right). + auto make_link = [this](const wxString& label, const char* url) { + wxStaticText* link = new wxStaticText(this, wxID_ANY, label); + link->SetFont(Label::Body_13); + link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); + link->SetCursor(wxCURSOR_HAND); + link->Bind(wxEVT_LEFT_DOWN, [url](wxMouseEvent&) { wxLaunchDefaultBrowser(url, wxBROWSER_NEW_WINDOW); }); + return link; + }; + wxBoxSizer* links_sizer = new wxBoxSizer(wxVERTICAL); + links_sizer->Add(make_link(_L("Publish 3MF Wiki Guide"), "https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html"), 0, + wxALIGN_LEFT); + links_sizer->Add(make_link(_L("Publish 3MF YouTube Video (Placeholder)"), "https://www.youtube.com"), 0, wxTOP | wxALIGN_LEFT, + FromDIP(4)); + + wxBoxSizer* footer = new wxBoxSizer(wxHORIZONTAL); + footer->Add(links_sizer, 0, wxALIGN_CENTER_VERTICAL); + footer->AddStretchSpacer(); + footer->Add(dlg_btns, 0, wxALIGN_CENTER_VERTICAL); + w_sizer->Add(footer, 0, wxRIGHT | wxLEFT | wxBOTTOM | wxEXPAND, FromDIP(10)); SetSizerAndFit(w_sizer); fit_to_content(); // initial size only; the dialog is resizable From 6985075c5b5024ce795f4e28f01c61306d3776e4 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 18:17:28 +0800 Subject: [PATCH 077/208] Change the PUB badge to OrcaSlicer's color --- resources/web/homepage/css/home.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index 395dcc9356..ff04d3ba3d 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -596,7 +596,7 @@ body font-size: 10px; font-weight: 600; color: #FFFFFF; - background-color: #00AE42; + background-color: #009688; border-radius: 2px; white-space: nowrap; } From d00af63a6153bce963f01b791a593986f6f3047f Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Tue, 1 Sep 2026 18:18:33 +0800 Subject: [PATCH 078/208] Removes identity matching for when slots need to grow without writing type key --- src/libslic3r/PresetBundle.cpp | 99 +++++++++------------------------- 1 file changed, 24 insertions(+), 75 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 688d2b90b0..76211314b0 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5666,81 +5666,10 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, const size_t new_slot_idx = this->filament_presets.size(); std::string initial_preset; if (published_slots.count(static_cast(new_slot_idx)) != 0) { - // Prefer the best distinct candidate for the slot's published material - // (exact id, then vendor+type, then type only), searching compatible - // presets first and falling back to incompatible ones only when no - // compatible candidate exists... - for (const PublishedMaterialEntry& entry : published_config->material_keys) { - // Scored for every entry with an identity (name / ids / family), - // not only when a Type requirement was checked; candidate_score's - // family tiers fall back to the entry's own filament_type. - if (entry.slot != static_cast(new_slot_idx)) - continue; - const std::string resolved_name = resolved_name_for(entry.slot); - int best_score = -1; - auto scan = [&](bool compatible_only) -> std::pair { - int best_score = -1; - std::string best_name; - for (size_t i = first_candidate; i < this->filaments.size(); ++i) { - const Preset& candidate = this->filaments.preset(i); - if (compatible_only && !candidate.is_compatible) - continue; - const int score = candidate_score(candidate, entry, resolved_name); - if (score > best_score) { - // Exact identity tiers (name / setting_id) win even when the - // preset is hidden or already referenced by another slot; the - // alias re-pointing pass below still de-aliases afterwards. - if (score < 3 && (!candidate.is_visible || used_preset_names.count(candidate.name) != 0)) - continue; - best_score = score; - best_name = candidate.name; - } - } - return {best_score, best_name}; - }; - const auto [compat_score, compat_name] = scan(true); - const auto [any_score, any_name] = scan(false); - if (compat_score >= 0) { - best_score = compat_score; - initial_preset = compat_name; - } else if (any_score >= 0) { - best_score = any_score; - initial_preset = any_name; - } - if (best_score >= 0) - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF grew slot " << new_slot_idx << " with " - << initial_preset << " (score " << best_score << ", preset_name \"" - << entry.preset_name << "\", type \"" << entry.publish_type_value << "\")"; - if (best_score >= 0 && best_score < 2 && (!entry.filament_id.empty() || !entry.filament_vendor.empty())) - published_config->material_replacements.emplace_back("slot " + std::to_string(new_slot_idx) + ": " + - initial_preset + " (substitute)"); - break; - } - // ...otherwise any visible preset not already used by another slot, - // preferring the published material's own family when it is known. - if (initial_preset.empty()) { - std::string slot_family; - for (const PublishedMaterialEntry& entry : published_config->material_keys) - if (entry.slot == static_cast(new_slot_idx)) { - slot_family = !entry.publish_type_value.empty() ? entry.publish_type_value : - normalize_filament_type(entry.filament_type); - break; - } - for (size_t i = first_candidate; i < this->filaments.size(); ++i) { - const Preset& candidate = this->filaments.preset(i); - if (!candidate.is_visible || used_preset_names.count(candidate.name) != 0) - continue; - if (!slot_family.empty()) { - const ConfigOptionStrings* types = candidate.config.opt("filament_type"); - const std::string cand_type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : - std::string(); - if (normalize_filament_type(cand_type) != slot_family) - continue; - } - initial_preset = candidate.name; - break; - } - } + // Grow the slot the way the sidebar "add filament" does: seed it with + // the receiver's last preset. + if (!this->filament_presets.empty()) + initial_preset = this->filament_presets.back(); } if (initial_preset.empty()) // Unpublished filler slot, or every visible preset is already used: @@ -5764,6 +5693,26 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, for (size_t slot = 1; slot < this->filament_presets.size(); ++slot) { if (published_slots.count(static_cast(slot)) == 0 || !referenced_elsewhere(this->filament_presets[slot], slot)) continue; + // A slot whose published entry writes nothing into a shared preset in place + // keeps its own preset: de-aliasing would needlessly swap the material. Only + // keys routed to the slot's preset can leak across an aliased slot (colour is + // slot-scoped via project_config; a type requirement is handled by the + // type-gate below; full detaches separately). Mixed-definition keys go to the + // per-slot project arrays, never the preset. + bool writes_preset_keys = false; + for (const PublishedMaterialEntry& entry : published_config->material_keys) { + if (entry.slot != static_cast(slot)) + continue; + for (const std::string& key : entry.keys) + if (mixed_definitions.count(publish_base_key(key)) == 0) { + writes_preset_keys = true; + break; + } + if (writes_preset_keys) + break; + } + if (!writes_preset_keys) + continue; // Prefer the best distinct candidate for the slot's published material // (exact id, then vendor+type, then type only), compatible presets first... std::string replacement; From bee0df825ea6fcf3a96ead493354406acb07e371 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 1 Sep 2026 18:36:44 +0800 Subject: [PATCH 079/208] fix filament_vendor --- resources/profiles/Flashforge.json | 106 +- ...hforge ABS Basic @FF AD5M 0.25 nozzle.json | 4 +- ...hforge ABS Basic @FF AD5X 0.25 nozzle.json | 4 +- ...shforge ABS Basic @FF AD5X 0.6 nozzle.json | 5 +- ...shforge ABS Basic @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge ABS Basic @FF AD5X.json | 5 +- .../filament/Flashforge ABS Basic @FF C5.json | 5 +- .../Flashforge ABS Basic @FF C5P.json | 5 +- ...ashforge ABS Basic @FF G4 0.25 nozzle.json | 4 +- ...hforge ABS Basic @FF G4 0.6 HF nozzle.json | 5 +- ...lashforge ABS Basic @FF G4 0.6 nozzle.json | 5 +- ...hforge ABS Basic @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge ABS Basic @FF G4 HF.json | 5 +- .../filament/Flashforge ABS Basic @FF G4.json | 5 +- ...shforge ABS Basic @FF G4P 0.25 nozzle.json | 4 +- ...forge ABS Basic @FF G4P 0.6 HF nozzle.json | 5 +- ...ashforge ABS Basic @FF G4P 0.6 nozzle.json | 5 +- ...forge ABS Basic @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge ABS Basic @FF G4P HF.json | 5 +- .../Flashforge ABS Basic @FF G4P.json | 5 +- .../filament/Flashforge ABS Basic.json | 5 +- .../Flashforge ABS-CF @FF G4 0.6 nozzle.json | 5 +- .../filament/Flashforge ABS-CF @FF G4.json | 5 +- .../Flashforge ABS-CF @FF G4P 0.6 nozzle.json | 5 +- .../filament/Flashforge ABS-CF @FF G4P.json | 5 +- .../filament/Flashforge ABS-GF @FF C5.json | 5 +- .../filament/Flashforge ABS-GF @FF C5P.json | 5 +- .../Flashforge ASA @FF AD5M 0.25 Nozzle.json | 5 +- ...hforge ASA Basic @FF AD5M 0.25 nozzle.json | 5 +- ...hforge ASA Basic @FF AD5X 0.25 nozzle.json | 5 +- ...shforge ASA Basic @FF AD5X 0.6 nozzle.json | 5 +- ...shforge ASA Basic @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge ASA Basic @FF AD5X.json | 5 +- .../filament/Flashforge ASA Basic @FF C5.json | 5 +- .../Flashforge ASA Basic @FF C5P.json | 5 +- ...ashforge ASA Basic @FF G4 0.25 nozzle.json | 4 +- ...hforge ASA Basic @FF G4 0.6 HF nozzle.json | 5 +- ...lashforge ASA Basic @FF G4 0.6 nozzle.json | 5 +- ...hforge ASA Basic @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge ASA Basic @FF G4 HF.json | 5 +- .../filament/Flashforge ASA Basic @FF G4.json | 5 +- ...shforge ASA Basic @FF G4P 0.25 nozzle.json | 4 +- ...forge ASA Basic @FF G4P 0.6 HF nozzle.json | 5 +- ...ashforge ASA Basic @FF G4P 0.6 nozzle.json | 5 +- ...forge ASA Basic @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge ASA Basic @FF G4P HF.json | 5 +- .../Flashforge ASA Basic @FF G4P.json | 5 +- .../filament/Flashforge ASA Basic.json | 5 +- .../filament/Flashforge ASA-GF @FF C5.json | 5 +- .../filament/Flashforge ASA-GF @FF C5P.json | 5 +- .../filament/Flashforge HIPS @FF C5.json | 5 +- .../filament/Flashforge HIPS @FF C5P.json | 5 +- .../Flashforge HIPS @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge HIPS @FF G4 0.6 nozzle.json | 5 +- .../Flashforge HIPS @FF G4 0.8 HF nozzle.json | 5 +- .../filament/Flashforge HIPS @FF G4 HF.json | 5 +- .../filament/Flashforge HIPS @FF G4.json | 5 +- ...Flashforge HIPS @FF G4P 0.6 HF nozzle.json | 5 +- .../Flashforge HIPS @FF G4P 0.6 nozzle.json | 5 +- ...Flashforge HIPS @FF G4P 0.8 HF nozzle.json | 5 +- .../filament/Flashforge HIPS @FF G4P HF.json | 5 +- .../filament/Flashforge HIPS @FF G4P.json | 5 +- ...ashforge HS PETG @FF AD5M 0.25 nozzle.json | 4 +- ...ashforge HS PETG @FF AD5X 0.25 nozzle.json | 4 +- ...lashforge HS PETG @FF AD5X 0.6 nozzle.json | 5 +- ...lashforge HS PETG @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge HS PETG @FF AD5X.json | 5 +- .../filament/Flashforge HS PETG @FF C5.json | 5 +- .../filament/Flashforge HS PETG @FF C5P.json | 5 +- ...Flashforge HS PETG @FF G4 0.25 nozzle.json | 4 +- ...ashforge HS PETG @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge HS PETG @FF G4 0.6 nozzle.json | 5 +- ...ashforge HS PETG @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge HS PETG @FF G4 HF.json | 5 +- .../filament/Flashforge HS PETG @FF G4.json | 5 +- ...lashforge HS PETG @FF G4P 0.25 nozzle.json | 4 +- ...shforge HS PETG @FF G4P 0.6 HF nozzle.json | 5 +- ...Flashforge HS PETG @FF G4P 0.6 nozzle.json | 5 +- ...shforge HS PETG @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge HS PETG @FF G4P HF.json | 5 +- .../filament/Flashforge HS PETG @FF G4P.json | 5 +- .../filament/Flashforge HS PETG.json | 5 +- ...lashforge HS PLA @FF AD5M 0.25 Nozzle.json | 5 +- ...lashforge HS PLA @FF AD5X 0.25 nozzle.json | 4 +- ...Flashforge HS PLA @FF AD5X 0.6 nozzle.json | 5 +- ...Flashforge HS PLA @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge HS PLA @FF AD5X.json | 5 +- .../filament/Flashforge HS PLA @FF C5.json | 5 +- .../filament/Flashforge HS PLA @FF C5P.json | 5 +- .../Flashforge HS PLA @FF G4 0.25 nozzle.json | 4 +- ...lashforge HS PLA @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge HS PLA @FF G4 0.6 nozzle.json | 5 +- ...lashforge HS PLA @FF G4 0.8 HF nozzle.json | 5 +- .../filament/Flashforge HS PLA @FF G4 HF.json | 5 +- .../filament/Flashforge HS PLA @FF G4.json | 5 +- ...Flashforge HS PLA @FF G4P 0.25 nozzle.json | 4 +- ...ashforge HS PLA @FF G4P 0.6 HF nozzle.json | 5 +- .../Flashforge HS PLA @FF G4P 0.6 nozzle.json | 5 +- ...ashforge HS PLA @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge HS PLA @FF G4P HF.json | 5 +- .../filament/Flashforge HS PLA @FF G4P.json | 5 +- ... HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge HS PLA Burnt Ti @FF G4 HF.json | 5 +- ...HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json | 5 +- ...Flashforge HS PLA Burnt Ti @FF G4P HF.json | 5 +- ...orge HS PLA Burnt Ti@FF G4 0.6 nozzle.json | 5 +- ...e HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json | 6 +- ...rge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json | 5 +- ... HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json | 6 +- .../filament/Flashforge HS PLA.json | 5 +- .../Flashforge PA @FF G4 0.6 HF nozzle.json | 5 +- .../filament/Flashforge PA @FF G4 HF.json | 5 +- .../filament/Flashforge PA @FF G4.json | 5 +- .../Flashforge PA @FF G4P 0.6 HF nozzle.json | 5 +- .../filament/Flashforge PA @FF G4P HF.json | 5 +- .../filament/Flashforge PA @FF G4P.json | 5 +- .../filament/Flashforge PA-CF @FF C5.json | 5 +- .../filament/Flashforge PA-CF @FF C5P.json | 5 +- .../filament/Flashforge PA-CF @FF G4.json | 5 +- .../filament/Flashforge PA-CF @FF G4P.json | 5 +- .../filament/Flashforge PAHT-CF @FF C5.json | 83 -- .../filament/Flashforge PAHT-CF @FF C5P.json | 89 -- .../filament/Flashforge PAHT-CF @FF G4.json | 108 -- .../filament/Flashforge PAHT-CF @FF G4P.json | 108 -- ...> Flashforge PC @FF G4 0.6 HF nozzle.json} | 11 +- ...n => Flashforge PC @FF G4 0.6 nozzle.json} | 11 +- ...> Flashforge PC @FF G4 0.8 HF nozzle.json} | 11 +- ... Flashforge PC @FF G4P 0.6 HF nozzle.json} | 11 +- ... => Flashforge PC @FF G4P 0.6 nozzle.json} | 11 +- ... Flashforge PC @FF G4P 0.8 HF nozzle.json} | 11 +- ...forge PETG Basic @FF AD5M 0.25 nozzle.json | 4 +- .../filament/Flashforge PETG Basic.json | 5 +- ...shforge PETG Pro @FF AD5M 0.25 nozzle.json | 4 +- ...shforge PETG Pro @FF AD5X 0.25 nozzle.json | 4 +- ...ashforge PETG Pro @FF AD5X 0.6 nozzle.json | 5 +- ...ashforge PETG Pro @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PETG Pro @FF AD5X.json | 5 +- .../filament/Flashforge PETG Pro @FF C5.json | 5 +- .../filament/Flashforge PETG Pro @FF C5P.json | 5 +- ...lashforge PETG Pro @FF G4 0.25 nozzle.json | 4 +- ...shforge PETG Pro @FF G4 0.6 HF nozzle.json | 5 +- ...Flashforge PETG Pro @FF G4 0.6 nozzle.json | 5 +- ...shforge PETG Pro @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PETG Pro @FF G4 HF.json | 5 +- .../filament/Flashforge PETG Pro @FF G4.json | 5 +- ...ashforge PETG Pro @FF G4P 0.25 nozzle.json | 4 +- ...hforge PETG Pro @FF G4P 0.6 HF nozzle.json | 5 +- ...lashforge PETG Pro @FF G4P 0.6 nozzle.json | 5 +- ...hforge PETG Pro @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PETG Pro @FF G4P HF.json | 5 +- .../filament/Flashforge PETG Pro @FF G4P.json | 5 +- .../filament/Flashforge PETG Pro.json | 5 +- ...PETG Transparent @FF AD5M 0.25 nozzle.json | 4 +- ...PETG Transparent @FF AD5X 0.25 nozzle.json | 4 +- ... PETG Transparent @FF AD5X 0.6 nozzle.json | 5 +- ... PETG Transparent @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PETG Transparent @FF AD5X.json | 5 +- .../Flashforge PETG Transparent @FF C5.json | 5 +- .../Flashforge PETG Transparent @FF C5P.json | 5 +- ...e PETG Transparent @FF G4 0.25 nozzle.json | 4 +- ...PETG Transparent @FF G4 0.6 HF nozzle.json | 5 +- ...ge PETG Transparent @FF G4 0.6 nozzle.json | 5 +- ...PETG Transparent @FF G4 0.8 HF nozzle.json | 5 +- ...Flashforge PETG Transparent @FF G4 HF.json | 5 +- .../Flashforge PETG Transparent @FF G4.json | 5 +- ... PETG Transparent @FF G4P 0.25 nozzle.json | 4 +- ...ETG Transparent @FF G4P 0.6 HF nozzle.json | 5 +- ...e PETG Transparent @FF G4P 0.6 nozzle.json | 5 +- ...ETG Transparent @FF G4P 0.8 HF nozzle.json | 5 +- ...lashforge PETG Transparent @FF G4P HF.json | 5 +- .../Flashforge PETG Transparent @FF G4P.json | 5 +- .../filament/Flashforge PETG Transparent.json | 5 +- ...lashforge PETG-CF @FF AD5X 0.6 nozzle.json | 5 +- ...lashforge PETG-CF @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge PETG-CF @FF AD5X.json | 5 +- .../filament/Flashforge PETG-CF @FF C5.json | 5 +- .../filament/Flashforge PETG-CF @FF C5P.json | 5 +- .../Flashforge PETG-CF @FF G4 0.6 nozzle.json | 5 +- .../filament/Flashforge PETG-CF @FF G4.json | 5 +- ...Flashforge PETG-CF @FF G4P 0.6 nozzle.json | 5 +- .../filament/Flashforge PETG-CF @FF G4P.json | 5 +- .../filament/Flashforge PETG-CF.json | 5 +- ...hforge PLA Basic @FF AD5M 0.25 nozzle.json | 4 +- ...hforge PLA Basic @FF AD5X 0.25 nozzle.json | 4 +- ...shforge PLA Basic @FF AD5X 0.6 nozzle.json | 5 +- ...shforge PLA Basic @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Basic @FF AD5X.json | 5 +- .../filament/Flashforge PLA Basic @FF C5.json | 5 +- .../Flashforge PLA Basic @FF C5P.json | 5 +- ...ashforge PLA Basic @FF G4 0.25 nozzle.json | 4 +- ...hforge PLA Basic @FF G4 0.6 HF nozzle.json | 5 +- ...lashforge PLA Basic @FF G4 0.6 nozzle.json | 5 +- ...hforge PLA Basic @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Basic @FF G4 HF.json | 5 +- .../filament/Flashforge PLA Basic @FF G4.json | 5 +- ...shforge PLA Basic @FF G4P 0.25 nozzle.json | 4 +- ...forge PLA Basic @FF G4P 0.6 HF nozzle.json | 5 +- ...ashforge PLA Basic @FF G4P 0.6 nozzle.json | 5 +- ...forge PLA Basic @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Basic @FF G4P HF.json | 5 +- .../Flashforge PLA Basic @FF G4P.json | 5 +- .../filament/Flashforge PLA Basic.json | 5 +- ...hforge PLA Buint Ti @FF G4 0.8 nozzle.json | 93 -- ...forge PLA Buint Ti @FF G4P 0.8 nozzle.json | 93 -- ...PLA Color Change @FF AD5M 0.25 nozzle.json | 4 +- ...PLA Color Change @FF AD5X 0.25 nozzle.json | 4 +- ... PLA Color Change @FF AD5X 0.6 nozzle.json | 5 +- ... PLA Color Change @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Color Change @FF AD5X.json | 5 +- .../Flashforge PLA Color Change @FF C5.json | 5 +- .../Flashforge PLA Color Change @FF C5P.json | 5 +- ...e PLA Color Change @FF G4 0.25 nozzle.json | 4 +- ...PLA Color Change @FF G4 0.6 HF nozzle.json | 5 +- ...ge PLA Color Change @FF G4 0.6 nozzle.json | 5 +- ...PLA Color Change @FF G4 0.8 HF nozzle.json | 5 +- ...Flashforge PLA Color Change @FF G4 HF.json | 5 +- .../Flashforge PLA Color Change @FF G4.json | 5 +- ... PLA Color Change @FF G4P 0.25 nozzle.json | 4 +- ...LA Color Change @FF G4P 0.6 HF nozzle.json | 5 +- ...e PLA Color Change @FF G4P 0.6 nozzle.json | 5 +- ...LA Color Change @FF G4P 0.8 HF nozzle.json | 5 +- ...lashforge PLA Color Change @FF G4P HF.json | 5 +- .../Flashforge PLA Color Change @FF G4P.json | 5 +- .../filament/Flashforge PLA Color Change.json | 5 +- ...forge PLA Galaxy @FF AD5M 0.25 nozzle.json | 4 +- ...forge PLA Galaxy @FF AD5X 0.25 nozzle.json | 4 +- ...hforge PLA Galaxy @FF AD5X 0.6 nozzle.json | 5 +- ...hforge PLA Galaxy @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Galaxy @FF AD5X.json | 5 +- .../Flashforge PLA Galaxy @FF C5.json | 5 +- .../Flashforge PLA Galaxy @FF C5P.json | 5 +- ...shforge PLA Galaxy @FF G4 0.25 nozzle.json | 4 +- ...forge PLA Galaxy @FF G4 0.6 HF nozzle.json | 5 +- ...ashforge PLA Galaxy @FF G4 0.6 nozzle.json | 5 +- ...forge PLA Galaxy @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Galaxy @FF G4 HF.json | 5 +- .../Flashforge PLA Galaxy @FF G4.json | 5 +- ...hforge PLA Galaxy @FF G4P 0.25 nozzle.json | 4 +- ...orge PLA Galaxy @FF G4P 0.6 HF nozzle.json | 5 +- ...shforge PLA Galaxy @FF G4P 0.6 nozzle.json | 5 +- ...orge PLA Galaxy @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Galaxy @FF G4P HF.json | 5 +- .../Flashforge PLA Galaxy @FF G4P.json | 5 +- .../filament/Flashforge PLA Galaxy.json | 5 +- ...rge PLA Luminous @FF AD5M 0.25 nozzle.json | 4 +- ...rge PLA Luminous @FF AD5X 0.25 nozzle.json | 4 +- ...orge PLA Luminous @FF AD5X 0.6 nozzle.json | 5 +- ...orge PLA Luminous @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Luminous @FF AD5X.json | 5 +- .../Flashforge PLA Luminous @FF C5.json | 5 +- .../Flashforge PLA Luminous @FF C5P.json | 5 +- ...forge PLA Luminous @FF G4 0.25 nozzle.json | 4 +- ...rge PLA Luminous @FF G4 0.6 HF nozzle.json | 5 +- ...rge PLA Luminous @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Luminous @FF G4 HF.json | 5 +- .../Flashforge PLA Luminous @FF G4.json | 5 +- ...orge PLA Luminous @FF G4P 0.25 nozzle.json | 4 +- ...ge PLA Luminous @FF G4P 0.6 HF nozzle.json | 5 +- ...ge PLA Luminous @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Luminous @FF G4P HF.json | 5 +- .../Flashforge PLA Luminous @FF G4P.json | 5 +- .../filament/Flashforge PLA Luminous.json | 5 +- ...hforge PLA Matte @FF AD5M 0.25 nozzle.json | 4 +- ...hforge PLA Matte @FF AD5X 0.25 nozzle.json | 4 +- ...shforge PLA Matte @FF AD5X 0.6 nozzle.json | 5 +- ...shforge PLA Matte @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Matte @FF AD5X.json | 5 +- ....json => Flashforge PLA Matte @FF C5.json} | 12 +- ...json => Flashforge PLA Matte @FF C5P.json} | 12 +- ...ashforge PLA Matte @FF G4 0.25 nozzle.json | 4 +- ...hforge PLA Matte @FF G4 0.6 HF nozzle.json | 5 +- ...lashforge PLA Matte @FF G4 0.6 nozzle.json | 5 +- ...hforge PLA Matte @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Matte @FF G4 HF.json | 5 +- .../filament/Flashforge PLA Matte @FF G4.json | 5 +- ...shforge PLA Matte @FF G4P 0.25 nozzle.json | 4 +- ...forge PLA Matte @FF G4P 0.6 HF nozzle.json | 5 +- ...ashforge PLA Matte @FF G4P 0.6 nozzle.json | 5 +- ...forge PLA Matte @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Matte @FF G4P HF.json | 5 +- .../Flashforge PLA Matte @FF G4P.json | 5 +- .../filament/Flashforge PLA Matte.json | 5 +- ...hforge PLA Metal @FF AD5M 0.25 nozzle.json | 4 +- ...hforge PLA Metal @FF AD5X 0.25 nozzle.json | 4 +- ...shforge PLA Metal @FF AD5X 0.6 nozzle.json | 5 +- ...shforge PLA Metal @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Metal @FF AD5X.json | 5 +- ....json => Flashforge PLA Metal @FF C5.json} | 12 +- ...json => Flashforge PLA Metal @FF C5P.json} | 12 +- ...ashforge PLA Metal @FF G4 0.25 nozzle.json | 4 +- ...hforge PLA Metal @FF G4 0.6 HF nozzle.json | 5 +- ...lashforge PLA Metal @FF G4 0.6 nozzle.json | 5 +- ...hforge PLA Metal @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Metal @FF G4 HF.json | 5 +- .../filament/Flashforge PLA Metal @FF G4.json | 5 +- ...shforge PLA Metal @FF G4P 0.25 nozzle.json | 4 +- ...forge PLA Metal @FF G4P 0.6 HF nozzle.json | 5 +- ...ashforge PLA Metal @FF G4P 0.6 nozzle.json | 5 +- ...forge PLA Metal @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Metal @FF G4P HF.json | 5 +- .../Flashforge PLA Metal @FF G4P.json | 5 +- .../filament/Flashforge PLA Metal.json | 5 +- ...ashforge PLA Pro @FF AD5M 0.25 nozzle.json | 4 +- ...ashforge PLA Pro @FF AD5X 0.25 nozzle.json | 4 +- ...lashforge PLA Pro @FF AD5X 0.6 nozzle.json | 5 +- ...lashforge PLA Pro @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge PLA Pro @FF AD5X.json | 5 +- ...C5.json => Flashforge PLA Pro @FF C5.json} | 12 +- ...P.json => Flashforge PLA Pro @FF C5P.json} | 12 +- ...Flashforge PLA Pro @FF G4 0.25 nozzle.json | 4 +- ...ashforge PLA Pro @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge PLA Pro @FF G4 0.6 nozzle.json | 5 +- ...ashforge PLA Pro @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Pro @FF G4 HF.json | 5 +- .../filament/Flashforge PLA Pro @FF G4.json | 5 +- ...lashforge PLA Pro @FF G4P 0.25 nozzle.json | 4 +- ...shforge PLA Pro @FF G4P 0.6 HF nozzle.json | 5 +- ...Flashforge PLA Pro @FF G4P 0.6 nozzle.json | 5 +- ...shforge PLA Pro @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Pro @FF G4P HF.json | 5 +- .../filament/Flashforge PLA Pro @FF G4P.json | 5 +- .../filament/Flashforge PLA Pro.json | 5 +- ...shforge PLA Silk @FF AD5M 0.25 nozzle.json | 5 +- ...shforge PLA Silk @FF AD5X 0.25 nozzle.json | 4 +- ...ashforge PLA Silk @FF AD5X 0.6 nozzle.json | 5 +- ...ashforge PLA Silk @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Silk @FF AD5X.json | 5 +- .../filament/Flashforge PLA Silk @FF C5.json | 5 +- .../filament/Flashforge PLA Silk @FF C5P.json | 5 +- ...lashforge PLA Silk @FF G4 0.25 nozzle.json | 4 +- ...shforge PLA Silk @FF G4 0.6 HF nozzle.json | 5 +- ...Flashforge PLA Silk @FF G4 0.6 nozzle.json | 5 +- ...shforge PLA Silk @FF G4 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Silk @FF G4 HF.json | 5 +- .../filament/Flashforge PLA Silk @FF G4.json | 5 +- ...ashforge PLA Silk @FF G4P 0.25 nozzle.json | 4 +- ...hforge PLA Silk @FF G4P 0.6 HF nozzle.json | 5 +- ...lashforge PLA Silk @FF G4P 0.6 nozzle.json | 5 +- ...hforge PLA Silk @FF G4P 0.8 HF nozzle.json | 5 +- .../Flashforge PLA Silk @FF G4P HF.json | 5 +- .../filament/Flashforge PLA Silk @FF G4P.json | 5 +- .../filament/Flashforge PLA Silk.json | 5 +- ...orge PLA Sparkle @FF AD5M 0.25 nozzle.json | 4 +- ...orge PLA Sparkle @FF AD5X 0.25 nozzle.json | 4 +- ...forge PLA Sparkle @FF AD5X 0.6 nozzle.json | 5 +- ...forge PLA Sparkle @FF AD5X 0.8 nozzle.json | 5 +- .../Flashforge PLA Sparkle @FF AD5X.json | 5 +- ...hforge PLA Sparkle @FF G4 0.25 nozzle.json | 4 +- ...orge PLA Sparkle @FF G4 0.6 HF nozzle.json | 5 +- ...shforge PLA Sparkle @FF G4 0.6 nozzle.json | 5 +- .../Flashforge PLA Sparkle @FF G4 HF.json | 5 +- .../Flashforge PLA Sparkle @FF G4.json | 5 +- ...forge PLA Sparkle @FF G4P 0.25 nozzle.json | 4 +- ...rge PLA Sparkle @FF G4P 0.6 HF nozzle.json | 5 +- ...hforge PLA Sparkle @FF G4P 0.6 nozzle.json | 5 +- .../Flashforge PLA Sparkle @FF G4P HF.json | 5 +- .../Flashforge PLA Sparkle @FF G4P.json | 5 +- .../filament/Flashforge PLA Sparkle.json | 5 +- ...Flashforge PLA-CF @FF AD5X 0.6 nozzle.json | 5 +- ...Flashforge PLA-CF @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge PLA-CF @FF AD5X.json | 5 +- .../filament/Flashforge PLA-CF @FF C5.json | 5 +- .../filament/Flashforge PLA-CF @FF C5P.json | 5 +- .../Flashforge PLA-CF @FF G4 0.6 nozzle.json | 5 +- .../filament/Flashforge PLA-CF @FF G4.json | 5 +- .../Flashforge PLA-CF @FF G4P 0.6 nozzle.json | 5 +- .../filament/Flashforge PLA-CF @FF G4P.json | 5 +- .../filament/Flashforge PLA-CF.json | 5 +- ...shforge PLA-SILK @FF AD5M 0.25 Nozzle.json | 5 +- ... Flashforge PPS @FF G4 0.6 HF nozzle.json} | 11 +- ... => Flashforge PPS @FF G4 0.6 nozzle.json} | 11 +- ... Flashforge PPS @FF G4 0.8 HF nozzle.json} | 11 +- .../filament/Flashforge PPS @FF G4.json | 5 +- ...Flashforge PPS @FF G4P 0.6 HF nozzle.json} | 11 +- ...=> Flashforge PPS @FF G4P 0.6 nozzle.json} | 11 +- ...Flashforge PPS @FF G4P 0.8 HF nozzle.json} | 11 +- .../filament/Flashforge PPS @FF G4P.json | 5 +- ... Flashforge PPS-CF @FF G4 0.6 nozzle.json} | 11 +- ...Flashforge PPS-CF @FF G4P 0.6 nozzle.json} | 11 +- .../filament/Flashforge PVA @FF C5.json | 5 +- .../filament/Flashforge PVA @FF C5P.json | 5 +- ...ashforge TPU 65D @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge TPU 65D @FF G4 0.6 nozzle.json | 5 +- ...ashforge TPU 65D @FF G4 0.8 HF nozzle.json | 5 +- ...shforge TPU 65D @FF G4P 0.6 HF nozzle.json | 5 +- ...Flashforge TPU 65D @FF G4P 0.6 nozzle.json | 5 +- ...shforge TPU 65D @FF G4P 0.8 HF nozzle.json | 5 +- ...lashforge TPU 95A @FF AD5X 0.6 nozzle.json | 5 +- ...lashforge TPU 95A @FF AD5X 0.8 nozzle.json | 5 +- .../filament/Flashforge TPU 95A @FF AD5X.json | 5 +- ...ashforge TPU 95A @FF G4 0.6 HF nozzle.json | 5 +- .../Flashforge TPU 95A @FF G4 0.6 nozzle.json | 5 +- ...ashforge TPU 95A @FF G4 0.8 HF nozzle.json | 5 +- .../filament/Flashforge TPU 95A @FF G4.json | 5 +- ...shforge TPU 95A @FF G4P 0.6 HF nozzle.json | 5 +- ...Flashforge TPU 95A @FF G4P 0.6 nozzle.json | 5 +- ...shforge TPU 95A @FF G4P 0.8 HF nozzle.json | 5 +- .../filament/Flashforge TPU 95A @FF G4P.json | 5 +- .../filament/Flashforge TPU 95A.json | 5 +- .../filament/Flashforge TPU-64D @FF C5.json | 5 +- .../filament/Flashforge TPU-64D @FF C5P.json | 5 +- .../filament/Flashforge TPU-90A @FF C5.json | 5 +- .../filament/Flashforge TPU-90A @FF C5P.json | 5 +- .../filament/Flashforge TPU-95A @FF C5.json | 5 +- .../filament/Flashforge TPU-95A @FF C5P.json | 5 +- .../filament/FusRock PAHT-CF @FF C5.json | 1 + .../filament/FusRock PAHT-CF @FF C5P.json | 1 + .../filament/FusRock PAHT-CF @FF G4.json | 1 + .../filament/FusRock PAHT-CF @FF G4P.json | 1 + resources/profiles/Ratrig.json | 26 +- ...son => Generic ABS BigNozzle @RatRig.json} | 7 +- ...son => Generic ASA BigNozzle @RatRig.json} | 7 +- ...on => Generic PCTG BigNozzle @RatRig.json} | 7 +- ...on => Generic PETG BigNozzle @RatRig.json} | 7 +- ...son => Generic PLA BigNozzle @RatRig.json} | 7 +- ...son => Generic TPU BigNozzle @RatRig.json} | 7 +- resources/profiles/retired_filament_ids.json | 276 +++++ scripts/filament_id_snapshot.json | 946 ++++++++---------- 418 files changed, 2321 insertions(+), 1714 deletions(-) delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4 0.6 HF nozzle.json => Flashforge PC @FF G4 0.6 HF nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4 0.6 nozzle.json => Flashforge PC @FF G4 0.6 nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4 0.8 HF nozzle.json => Flashforge PC @FF G4 0.8 HF nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4P 0.6 HF nozzle.json => Flashforge PC @FF G4P 0.6 HF nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4P 0.6 nozzle.json => Flashforge PC @FF G4P 0.6 nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PC @FF G4P 0.8 HF nozzle.json => Flashforge PC @FF G4P 0.8 HF nozzle.json} (85%) delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json delete mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json rename resources/profiles/Flashforge/filament/{Flashforge PLA Pro @FF C5.json => Flashforge PLA Matte @FF C5.json} (82%) rename resources/profiles/Flashforge/filament/{Flashforge PLA Matte @FF C5P.json => Flashforge PLA Matte @FF C5P.json} (80%) rename resources/profiles/Flashforge/filament/{Flashforge PLA Metal @FF C5.json => Flashforge PLA Metal @FF C5.json} (81%) rename resources/profiles/Flashforge/filament/{Flashforge PLA Metal @FF C5P.json => Flashforge PLA Metal @FF C5P.json} (80%) rename resources/profiles/Flashforge/filament/{Flashforge PLA Matte @FF C5.json => Flashforge PLA Pro @FF C5.json} (82%) rename resources/profiles/Flashforge/filament/{Flashforge PLA Pro @FF C5P.json => Flashforge PLA Pro @FF C5P.json} (81%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4 0.6 HF nozzle.json => Flashforge PPS @FF G4 0.6 HF nozzle.json} (86%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4 0.6 nozzle.json => Flashforge PPS @FF G4 0.6 nozzle.json} (87%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4 0.8 HF nozzle.json => Flashforge PPS @FF G4 0.8 HF nozzle.json} (86%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4P 0.6 HF nozzle.json => Flashforge PPS @FF G4P 0.6 HF nozzle.json} (86%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4P 0.6 nozzle.json => Flashforge PPS @FF G4P 0.6 nozzle.json} (87%) rename resources/profiles/Flashforge/filament/{FlashForge PPS @FF G4P 0.8 HF nozzle.json => Flashforge PPS @FF G4P 0.8 HF nozzle.json} (86%) rename resources/profiles/Flashforge/filament/{FlashForge PPS-CF @FF G4 0.6 nozzle.json => Flashforge PPS-CF @FF G4 0.6 nozzle.json} (85%) rename resources/profiles/Flashforge/filament/{FlashForge PPS-CF @FF G4P 0.6 nozzle.json => Flashforge PPS-CF @FF G4P 0.6 nozzle.json} (85%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle ABS.json => Generic ABS BigNozzle @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle ASA.json => Generic ASA BigNozzle @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle PCTG.json => Generic PCTG BigNozzle @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle PETG.json => Generic PETG BigNozzle @RatRig.json} (93%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle PLA.json => Generic PLA BigNozzle @RatRig.json} (92%) rename resources/profiles/Ratrig/filament/{RatRig BigNozzle TPU.json => Generic TPU BigNozzle @RatRig.json} (92%) diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 63c09f65af..11b86ecc8d 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.05", + "version": "02.04.00.06", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -1237,14 +1237,6 @@ "name": "Flashforge PA-CF @FF G4P", "sub_path": "filament/Flashforge PA-CF @FF G4P.json" }, - { - "name": "Flashforge PAHT-CF @FF G4", - "sub_path": "filament/Flashforge PAHT-CF @FF G4.json" - }, - { - "name": "Flashforge PAHT-CF @FF G4P", - "sub_path": "filament/Flashforge PAHT-CF @FF G4P.json" - }, { "name": "Flashforge PLA-CF", "sub_path": "filament/Flashforge PLA-CF.json" @@ -1898,36 +1890,36 @@ "sub_path": "filament/FusRock/FusRock PET-GF.json" }, { - "name": "FlashForge PPS @FF G4 0.6 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.6 HF nozzle.json" + "name": "Flashforge PPS @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.6 HF nozzle.json" }, { - "name": "FlashForge PPS @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.6 nozzle.json" + "name": "Flashforge PPS @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.6 nozzle.json" }, { - "name": "FlashForge PPS @FF G4 0.8 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.8 HF nozzle.json" + "name": "Flashforge PPS @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.8 HF nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.6 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json" + "name": "Flashforge PPS @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.6 nozzle.json" + "name": "Flashforge PPS @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.6 nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json" + "name": "Flashforge PPS @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json" }, { - "name": "FlashForge PPS-CF @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json" + "name": "Flashforge PPS-CF @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json" }, { - "name": "FlashForge PPS-CF @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json" + "name": "Flashforge PPS-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json" }, { "name": "FusRock PET @FF G4P 0.8 HF nozzle", @@ -1966,28 +1958,28 @@ "sub_path": "filament/Generic PET @FF G4P 0.8 HF nozzle.json" }, { - "name": "FlashForge PC @FF G4 0.6 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.6 HF nozzle.json" + "name": "Flashforge PC @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.6 HF nozzle.json" }, { - "name": "FlashForge PC @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.6 nozzle.json" + "name": "Flashforge PC @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.6 nozzle.json" }, { - "name": "FlashForge PC @FF G4 0.8 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.8 HF nozzle.json" + "name": "Flashforge PC @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.8 HF nozzle.json" }, { - "name": "FlashForge PC @FF G4P 0.6 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.6 HF nozzle.json" + "name": "Flashforge PC @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.6 HF nozzle.json" }, { - "name": "FlashForge PC @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.6 nozzle.json" + "name": "Flashforge PC @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.6 nozzle.json" }, { - "name": "FlashForge PC @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.8 HF nozzle.json" + "name": "Flashforge PC @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.8 HF nozzle.json" }, { "name": "FusRock PAHT @FF G4 0.6 HF nozzle", @@ -2117,14 +2109,6 @@ "name": "Flashforge PLA Basic @FF G4P 0.8 HF nozzle", "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json" }, - { - "name": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "sub_path": "filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json" - }, - { - "name": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", - "sub_path": "filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json" - }, { "name": "Flashforge PLA Color Change @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json" @@ -2569,14 +2553,6 @@ "name": "Flashforge PA-CF @FF C5P", "sub_path": "filament/Flashforge PA-CF @FF C5P.json" }, - { - "name": "Flashforge PAHT-CF @FF C5", - "sub_path": "filament/Flashforge PAHT-CF @FF C5.json" - }, - { - "name": "Flashforge PAHT-CF @FF C5P", - "sub_path": "filament/Flashforge PAHT-CF @FF C5P.json" - }, { "name": "Flashforge PET-CF @FF C5", "sub_path": "filament/Flashforge PET-CF @FF C5.json" @@ -2610,28 +2586,28 @@ "sub_path": "filament/Flashforge PETG-CF @FF C5P.json" }, { - "name": "Flashforge PLA Matte @FF C5", - "sub_path": "filament/Flashforge PLA Matte @FF C5.json" + "name": "Flashforge PLA Matte @FF C5", + "sub_path": "filament/Flashforge PLA Matte @FF C5.json" }, { - "name": "Flashforge PLA Matte @FF C5P", - "sub_path": "filament/Flashforge PLA Matte @FF C5P.json" + "name": "Flashforge PLA Matte @FF C5P", + "sub_path": "filament/Flashforge PLA Matte @FF C5P.json" }, { - "name": "Flashforge PLA Metal @FF C5", - "sub_path": "filament/Flashforge PLA Metal @FF C5.json" + "name": "Flashforge PLA Metal @FF C5", + "sub_path": "filament/Flashforge PLA Metal @FF C5.json" }, { - "name": "Flashforge PLA Metal @FF C5P", - "sub_path": "filament/Flashforge PLA Metal @FF C5P.json" + "name": "Flashforge PLA Metal @FF C5P", + "sub_path": "filament/Flashforge PLA Metal @FF C5P.json" }, { - "name": "Flashforge PLA Pro @FF C5", - "sub_path": "filament/Flashforge PLA Pro @FF C5.json" + "name": "Flashforge PLA Pro @FF C5", + "sub_path": "filament/Flashforge PLA Pro @FF C5.json" }, { - "name": "Flashforge PLA Pro @FF C5P", - "sub_path": "filament/Flashforge PLA Pro @FF C5P.json" + "name": "Flashforge PLA Pro @FF C5P", + "sub_path": "filament/Flashforge PLA Pro @FF C5P.json" }, { "name": "Flashforge PLA Basic @FF C5", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json index 836cd00898..93b640c5f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SuEfcE6AYK8N1FI4", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge ABS Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json index 39cbd2de77..6245bcf02c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gmkc6fRLMI73Iut8", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json index 8ce05c7f1e..7ba9ffc527 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "fgEYZ1Mgyp1AvtwU", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json index b3f51e2b63..d797114137 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "cIxbQMVdG5K85rJr", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json index 7457627179..82e08e3f49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "9GXBeuCUrScJfmJB", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json index 0e39fc998e..5e5ce18eea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ds0GgE1jssl4IbF3", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json index 4394ed643a..9ea370b14b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UTWbwTYuXYbBx3uw", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json index ec7afd1806..6be9c9ac5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "CuckX5MsN69806ow", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json index 136856bf4a..c38639dd89 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NttDJCrfB01uwMDl", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json index 79ecbbdf9e..9709d11e22 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJd6dG6OdEffEFC7", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json index dcc92a46c8..2f3d072baf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8yFCuCnEuI3dUvQy", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json index a824989281..a6badb7396 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "np4fP5kghRlczOTT", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json index 050606e773..c70351a9b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "8o2maTFOXq0XR6Dm", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json index dea33f9ccb..ebacfbe35c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "MBo02hFXn0ebDRdb", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json index 6055001320..d6be224ddc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vCsjC0UnKenzIR0O", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json index c4295d0a31..9ff2f3f54a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xhxVdlmh5r7meoHo", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json index 30a2cdf399..d2c5c73541 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "6dlQN4Xhd6kGZ0Qn", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json index ea68716e21..c4b58df04c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "r8WVFPozL8f5oLVJ", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json index 95bc121e93..ebf003f20d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "xw0pZNmhw1K4tPQ1", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json index b4b539a756..8be3cb0913 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "m6QLC2UaS3fW298i", - "filament_id": "OFShw1X8", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ABS Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json index 95fab6bbc4..398f80f8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nx3Px0Zu356IKShT", - "filament_id": "OFi7Bf0F", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index 92ed5ff1cc..3fd0dc97ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "d4EGsmMeEDCOUBF2", - "filament_id": "OFi7Bf0F", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json index 4e5016999f..043e0ea208 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9ziPFKsjESbw1pXL", - "filament_id": "OFi7Bf0F", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index dceedb6fc5..77148bf480 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "NzJJs6yrSik5xuyX", - "filament_id": "OFi7Bf0F", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json index dd285b07f6..8cb591fa47 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UinlbuXNbad2kN0s", - "filament_id": "OFH5UH6P", + "filament_id": "OFojbdhR", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json index 0244b1fa25..3fefbd7a96 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ycgiXY41kqNgslE3", - "filament_id": "OFH5UH6P", + "filament_id": "OFojbdhR", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json index 1fe1013580..f7d1332ec2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,10 @@ "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", "inherits": "Generic ASA @Flashforge", "from": "system", - "filament_id": "OFtTYl9Q", + "filament_id": "OFJS560n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json index 665b49d497..0f99d476fc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "kjS4k8nrIdNNNoWw", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json index 42c9955886..9a3aac8573 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "Y647IFVkk5JIXzte", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index 4cd916c615..7a199389af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "vaOyXUcrJ97KE7ZW", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index c98dc7b59f..3c2e7173bf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "iLWq5pJ3ox9EAM1Z", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index 8b80a1d1c3..68f66a1f6b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "i7PUPYxy0Z9weyyA", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json index 48e7c83322..5aec1c1d8b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UUSDyOetXSOuBIUd", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json index 886c3cf0c1..18ae2c78f1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "2r0kwhklE24Hp94O", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json index 52420cb125..051b069550 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XWta5jJFsCxBdEPd", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json index 012911ba4a..66ae12c06c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "w8O6oenp0NymzCqf", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json index dc42f97981..166d3a01ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "thhmWRzNYLYJOeR2", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json index 9cccf05b75..54e47a5e64 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g5jiz6Q6or23BIo7", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json index 2b405b1fb6..01db10d49d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "7xmWlHHNMvXBKdYS", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json index ae0e3d9222..9cdc87b1e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "r0B8KfZ1mNWMvGqE", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json index 7a8035000c..f989622957 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "quOwRRLcNfOy0sYf", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json index 01a5604125..d8801abca8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CBLZqLhkwf5XKO12", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json index 48e7d01b94..1cc08eabb3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Df3anJxiRXLVO9hw", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json index 6c8441ee9f..30787c9de1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nu4WvBWuEhazZfh5", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json index e30b784bfb..5b73e31a49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "hF0h4ye3hMDtEba1", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json index ce18c5a69f..05223314f5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "3isZCWr4CBjFtGDX", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json index 613efc2502..2500eacd3f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json @@ -4,7 +4,10 @@ "inherits": "Generic ASA @Flashforge", "from": "system", "setting_id": "SU6r879TbQMUFCij", - "filament_id": "OFaBwRvT", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json index e1bb924d28..de98bbdf41 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "941E5MaAyFY3iv4V", - "filament_id": "OFWnSvGu", + "filament_id": "OFrZDhVt", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json index 0f1d63ca96..0bff2a9e2c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "RdmsxyUGUX8Ot4oj", - "filament_id": "OFWnSvGu", + "filament_id": "OFrZDhVt", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json index 798fbc6583..608d143031 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "ckwc7U0Q2eKHmCxY", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json index 4abf262f2f..14a3d39616 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "AEQYrT7e4Q5J2G6C", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index ae01f84a4b..bb2f4387b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "jUNUZhE0BJyB64fC", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index 6658adabab..597e24ade7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "0qMEqo9YMDLSVafs", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 4e2fd50066..5b17792267 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ek749gIdUAPq6WxT", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json index ed9d2cb9e4..b79fa3d0d2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "tEohTtyHofD6l6o3", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json index 10127abb22..96b5849040 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "oLeLrIjFJzoZha3E", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index f050371f1f..cb385fd395 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HXGUlYY4X5IHhL3R", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 02d5c02b8c..a32508d8b0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g22Cv3zy3h5BhJYK", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index a99c168faf..b2958e0032 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aDzBXuvN7IuSP5sa", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json index 436a4cba60..bbbaebe8b8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CIj24REX7BA8zPHQ", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json index 3b2a22ccbf..bc52c94e5b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "yAGyGjF6uDrjfjLn", - "filament_id": "OFaz8VoR", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json index 5f34ca9901..b9eb0a335b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "1NFhtEvvvgZiHcto", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge HS PETG @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json index a6229f92d8..fb96e1e846 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "eNOkWn5PT8rDpA0g", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json index 081ede7bc4..c1dd59623c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "vOqAGzaYLz0XdRvC", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json index 8ea4960a88..21198590ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "KSuxZ3fpQz0khDSz", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json index 577b175cbe..23703621f3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "o4B1kAToVny7jw0M", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json index 3e26d15964..a48606e3c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "kpRved5M3NktqIYn", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json index 4cab6d97ae..9ceca02a50 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "ypxgjHl9uIMyZIce", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json index 21e54e38b4..5b64fa0f61 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "uXGuyvVxfdQW22vu", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json index 30ccd1a277..28565a5c3b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q9UbakUmZPzG3xU0", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json index 6e2c0ca19c..592b3fe094 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IL18Lu0qHx1RVqKD", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json index 33696f6366..e4b953f089 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2FQib7fZjcwfCnm2", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index 2b3722dd0c..955235b442 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CtwOm90WWD4S7U6j", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json index 83ebdfa2b1..5a47b94941 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "kvULpm0WhKiSPj8V", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json index b161612d91..9875a638ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bFVYSPkynBBapFjq", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json index cf4731f584..26df92ae7b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CUU7knzm4cbe1giE", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json index 78a554fec2..b936141d13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "gcYvL572cumWZdnl", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json index b00acd32da..f53c9c41e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "cx99AH0C575XxAj9", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index 613a806f5a..82a8dc096a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "RrrKoR7MVD8IFQlq", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json index aa7bf4a40f..ff09b6e445 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "7VEPGuR16wNukAX2", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json index 8908833f96..3ee8ed9e42 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "H9uwlPw6m6Nf7qH5", - "filament_id": "OF5w29Kq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge HS PETG" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json index d8dfd92fc6..d511cdafe6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OmDped3weZ4uHAtY", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json index 12e9fe913f..c7060c9f4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bfPaqPGaR5zpTsLk", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json index 1f37c091d2..082b03f19b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oD592bif4ra0ADco", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json index a8cf1c5bdc..6571d871b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ldhMY6F7v6nK8wwf", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json index ada09e1c19..a5b788402d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5vzOmbjHbkJXrgYM", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json index 0d5e671f95..85c0b17327 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xSJk7LFpYKmckPQh", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json index 9aa4efc2e4..667e4045b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xdFZUsj1cNLXdvT6", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json index 43f1bbf068..15551e3faa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "JCQtuv8Abfz4jVRV", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json index 42f009212d..ba4f6bc6d9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hzxRPyH1fqarsMuN", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json index fcb55d2400..4e69e17253 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oJsLlIIpxwGSoJTv", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json index 80c9e422d0..ad8f07ef26 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJbNZ381ERkZ0KUB", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json index 5072e86227..f202e50f11 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "BqavrNpwhXDXcZ3r", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json index 25a9130d9d..7472f78b02 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "cgf4Qk4iHZh7zHN5", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json index 8e228a364e..3d97511a29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jFUS6233aq4XPgrn", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json index a1e58886d3..2bc30165fc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "p31K69Srld6o4sQ2", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json index 7217ec8854..b5308a0f8c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MwbYvnRIzlNmH81h", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json index fcf7f8a8c7..2c2ee97348 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rKhHmkqXYD2xN4K9", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json index c6d61c696b..88184f5a92 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Dshsi3O7NvYYjXJt", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json index a7fb05e8d6..cd59be156d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mfnL6QEevCmTmOL0", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json index 117fe724a9..3281932fe8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AGLHrHKWye0YTtNK", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json index 806f9e4ed7..f5de82a8bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px8qzmB2yFLoNl83", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json index fecd582701..da6fd90d98 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "mwuIEsBz5bXEV68w", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json index 4ae6a84762..bb2d6256b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "TielygFT88owWg4J", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json index f391f26c3a..149406f025 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "It2NI6OFhNEUvulz", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index a554fc2a59..d06a93931d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -2,9 +2,13 @@ "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "renamed_from": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle;Flashforge PLA Buint Ti FF G4 0.8 nozzle", "from": "system", "setting_id": "Qt3huWxoYpMEqEN6", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json index f32d4697c0..6fb09f1458 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y3XuavnnOMoHLGHA", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index 7eddf0b7b5..13d1358b71 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -2,9 +2,13 @@ "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "renamed_from": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle;Flashforge PLA Buint Ti FF G4P 0.8 nozzle", "from": "system", "setting_id": "2HUxAWeolJIlxPs1", - "filament_id": "OFmQkb3c", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json index 120d8b317e..8002ac7ba9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vdaZBnDsmUC1fhDp", - "filament_id": "OFnMv3W5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge HS PLA" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json index af9159b1b6..f5d60553e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "u7rolQaTQz9U6veH", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json index 14e5f098ab..8b10616a83 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qTGTwiliWj3dSo9y", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json index 2f7836790f..ec1ded13ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "wAkuJRTLWxGyBU0b", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json index dd3a5801f6..bc05757132 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "dbs29hQSQl9zuWis", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json index dbbb88d9ee..1e5eb664ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "XGNPvS2ps7Xn2fpx", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json index 6d34858446..21ee8da2a6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "h33iEGZ7wPeBYKYQ", - "filament_id": "OFgf4gZa", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json index 687017cdba..2b4f6fc95a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "e58C9MdOWikIbbVR", - "filament_id": "OFuGRMNV", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json index 4159a24737..b75438e584 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "RX2Tg8KpwQpCbkLI", - "filament_id": "OFuGRMNV", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json index d0589f6b1a..3379bd5c39 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "C4DfYuQgDXIgK7mk", - "filament_id": "OFuGRMNV", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json index 6225424dc7..07653a9002 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "Yu7hL4izNsgDVqMT", - "filament_id": "OFuGRMNV", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json deleted file mode 100644 index 0491362ddf..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF C5", - "inherits": "Generic PA-CF @System", - "from": "system", - "setting_id": "8ZR8o3MKYxXLd70k", - "filament_id": "OFuFqYyG", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Creator 5 0.4 nozzle", - "Flashforge Creator 5 0.6 nozzle", - "Flashforge Creator 5 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF C5" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PAHT-CF" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json deleted file mode 100644 index 1c142f11b5..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF C5P", - "inherits": "Generic PA-CF @System", - "from": "system", - "setting_id": "FSfGFl7FCutxXN2l", - "filament_id": "OFuFqYyG", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "compatible_printers": [ - "Flashforge Creator 5 Pro 0.4 nozzle", - "Flashforge Creator 5 Pro 0.6 nozzle", - "Flashforge Creator 5 Pro 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF C5P" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PAHT-CF" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json deleted file mode 100644 index 19abc27d75..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF G4", - "inherits": "Generic PLA-CF10 @Flashforge", - "from": "system", - "setting_id": "ZlpBAM9uaS01sWAJ", - "filament_id": "OFuFqYyG", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "50" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "30" - ], - "filament_density": [ - "1.06" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF G4" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PA-CF\n" - ], - "filament_type": [ - "PAHT-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 0.4 nozzle" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "overhang_fan_speed": [ - "60" - ], - "pressure_advance": [ - "0.02" - ], - "slow_down_layer_time": [ - "2" - ], - "support_material_interface_fan_speed": [ - "60" - ], - "temperature_vitrification": [ - "180" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json deleted file mode 100644 index dff2e68ddd..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF G4P", - "inherits": "Generic PLA-CF10 @Flashforge", - "from": "system", - "setting_id": "9DaSYBA2OI7Jj5zS", - "filament_id": "OFuFqYyG", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "50" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "30" - ], - "filament_density": [ - "1.06" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF G4P" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PA-CF\n" - ], - "filament_type": [ - "PAHT-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.4 nozzle" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "overhang_fan_speed": [ - "60" - ], - "pressure_advance": [ - "0.02" - ], - "slow_down_layer_time": [ - "2" - ], - "support_material_interface_fan_speed": [ - "60" - ], - "temperature_vitrification": [ - "180" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json index bd7ef806a7..e88cbb31c3 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4 0.6 HF nozzle", + "name": "Flashforge PC @FF G4 0.6 HF nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.6 HF nozzle;FlashForge PC FF G4 0.6 HF nozzle", "from": "system", - "setting_id": "M9HM8tihJzV4crs8", - "filament_id": "OFe6sfXS", + "setting_id": "Tj504IYSj6mUDR6E", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4 0.6 HF nozzle" + "Flashforge PC @FF G4 0.6 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json index 1bbc7d1e11..6b1decef09 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4 0.6 nozzle", + "name": "Flashforge PC @FF G4 0.6 nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.6 nozzle;FlashForge PC FF G4 0.6 nozzle", "from": "system", - "setting_id": "08VjBSha6gjhJYgk", - "filament_id": "OFe6sfXS", + "setting_id": "VfhBf8676qCWatKP", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4 0.6 nozzle" + "Flashforge PC @FF G4 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json index 9e7ebbdc89..e1740fb30d 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4 0.8 HF nozzle", + "name": "Flashforge PC @FF G4 0.8 HF nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.8 HF nozzle;FlashForge PC FF G4 0.8 HF nozzle", "from": "system", - "setting_id": "JqgkmxnjlnQ3uw1u", - "filament_id": "OFe6sfXS", + "setting_id": "ILBm9zXX5U4Oh82h", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4 0.8 HF nozzle" + "Flashforge PC @FF G4 0.8 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json index 5e6b9ca06c..11ec475184 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4P 0.6 HF nozzle", + "name": "Flashforge PC @FF G4P 0.6 HF nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.6 HF nozzle;FlashForge PC FF G4P 0.6 HF nozzle", "from": "system", - "setting_id": "vvLLPvSeb5PYbT1R", - "filament_id": "OFe6sfXS", + "setting_id": "Kj6KWBfSuFALX2sd", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4P 0.6 HF nozzle" + "Flashforge PC @FF G4P 0.6 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json index 74fb0b79e2..38ca36a685 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4P 0.6 nozzle", + "name": "Flashforge PC @FF G4P 0.6 nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.6 nozzle;FlashForge PC FF G4P 0.6 nozzle", "from": "system", - "setting_id": "mPJMPfFCyfWdKzMO", - "filament_id": "OFe6sfXS", + "setting_id": "XjAM4PMXLCBwdgQf", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4P 0.6 nozzle" + "Flashforge PC @FF G4P 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json index 81ee3e9c95..dfdda7bfe2 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PC @FF G4P 0.8 HF nozzle", + "name": "Flashforge PC @FF G4P 0.8 HF nozzle", "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.8 HF nozzle;FlashForge PC FF G4P 0.8 HF nozzle", "from": "system", - "setting_id": "HTgqTUTznOlfCRAd", - "filament_id": "OFe6sfXS", + "setting_id": "icAIkgRCZAjz6apM", + "filament_id": "OFWXCbVF", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "3" @@ -43,7 +44,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PC @FF G4P 0.8 HF nozzle" + "Flashforge PC @FF G4P 0.8 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PC" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json index 6ea60b3214..5dc78f3cdb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xOZQvdZa1YCcnjor", - "filament_id": "OFEMfQsX", + "filament_id": "OFYYeMyQ", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PETG Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json index 0d325d1c1a..3d5c4f4b0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "YLLJ4xZI704GReej", - "filament_id": "OFEMfQsX", + "filament_id": "OFYYeMyQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json index a351fd284a..614ac50225 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8EUg1hTLfsyDPbnG", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PETG Pro @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json index 153daf20e9..0ab5b18b04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "UKhV8A2DBc1xyNWc", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json index d685b38547..e15f011f1f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "dFZ1MmHjj1AAIaMm", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json index 1a279d0591..a3d431030f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ro3rt7IAJrA5aZD6", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json index 4f839ae1b5..7cc361d89d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "cTxrnqzr2wVt4Nj7", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json index bbf62043f7..0a1b47b916 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "QA1KD03F0zj2zsVi", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json index fae56d5e11..69cb6ee5e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "EU8Q0XLjED23MNer", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json index a22994d00b..fcb6cbcaad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XFSgx95whLw5FD08", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json index 5c41866971..746eb1cc61 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8x6yU2U8d5f67N73", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json index df04115fd9..ecafe03349 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W0nfaSSZdg2HQkh", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json index 00878236df..94b757887a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AJcugKx4qHPJ3JAT", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index b73e951307..d1c404cd19 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "R0nZuLXEo5qA6Mt8", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json index ccb1dd2f50..8c1de1d947 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ql2BBBymzqEG7GKk", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json index 295b0a313e..387adc60c7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8Jc4eedkknqNB87s", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json index c4f944cfc2..60bb0ae243 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "KU5tDHAKja1sCoHm", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json index 93664c46e2..24ed205273 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "sb6jD3UZmb0DNIsC", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json index da54d45f51..d993d05592 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4BB1wJLtsXus5eyY", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index b2f8087db9..1385ac8454 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "m7oJx47UMlFctMkX", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json index be118c9e69..1bd2c4cdbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ozD2wU5UiORTtJsa", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json index 00fffab83a..df9948d863 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "IQfUoy7gTmVmBDL5", - "filament_id": "OFPQfNAf", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json index b43b82c176..b1352eecc1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "W59yTyPnVv4LYiah", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PETG Transparent @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json index 54596db508..697cd7b714 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "NRY4fsPNtnqs0kyH", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json index fdc9c427d3..2d29ad79b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ht7wzk8l0b1kv5tZ", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json index bbe03ece1f..f1b7a3b4ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "NJFHpa5HFHIyHSWu", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json index 4e0de85100..252e51750d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "UaObrRNSTwitC6jr", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json index 08e0076cb0..ed8c6fd0bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "TtXy042wtT6nF3WB", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json index 4d40f2fbcb..b6395b0325 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "66OWHhGyuaFISu6v", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json index 60bc613ad6..3f0f32fc0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "p5c6XJ1VD8cn2Meh", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json index 5c9ccb693f..2ab27e8567 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "K8WkJmFy2V1zhYQO", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json index 7676d966b1..b3c10e9970 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LLK1hwKZhDU8SaGJ", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json index 63c046558f..8c29f5a466 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LaUF2HJtBnpZF7Cd", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 6adfb18f16..2736fea042 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "OUToXk8ddS1RPPUK", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json index c8e5141713..d907e48ab5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ywff8rI39XKjcocY", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json index 347a845f06..61db117e30 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "C0VV5Uzsl4icRgKa", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json index 4ede8cb506..0dfa3dfee2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "kuCvwo6Phr6Ywhm4", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json index 74d4250de0..91c49b1c85 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Z2E69w9AevYg15tl", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json index d345b35e9f..0ac80ad83a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RkQaxwTjhJK0A3zr", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index 3d6abe6ff3..bc6fbecdb4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "YBQTMes2S9iJjKDf", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json index bf76cf5bfa..0213d9e14b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "lCngVWG3q0FWsnrG", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json index 450c5f33d7..7502aa35b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "3Gv6MJ3RRja5pbOM", - "filament_id": "OFMyLYV8", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json index d746b5348d..a516f371a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "bcqYod61blJRzhK2", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json index 1b5c706120..7a51f2615a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "CnFKOi7fFyS8QlKK", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json index 0fbd657de5..e401baa389 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "eKWJW36I5fVHwjWD", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json index 16c5cce80d..52901dd534 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "RXRERfs2oQKewpPS", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json index 2be54257d3..dda9226bcd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "8Ns75F5n2fdQ8sDk", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json index c0145120d7..71c68991d0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4EgMPzlVo1rTeQ1e", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json index fb095064f7..b0b2ec7360 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "K9ME1F4oJkPi8jRu", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json index 76d459de35..668e1af37a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9jCp0gTjB3Mt95Mj", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json index 14be746810..a0200ebe49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "d5OleuNNZBJK9vxH", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json index c92b4aa162..57b297768c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "MpG61mwVUtJ7t602", - "filament_id": "OFBK6zAi", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PETG-CF" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json index 65741b1860..9a4844d6ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "3fuVuyVcn8U0bRJQ", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json index 64d564cfca..1a56e9f162 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "FrRRUl5OT773uCju", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json index 6248751055..7c929b1363 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "gMmhMDqjmJfAYcbV", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json index d9041d25b7..7f66423bbe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "0OsrtqfIxrEJMwac", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json index 110048dba4..f698b05b32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "fuzWVrfZqekMETLK", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json index 8963823c97..6893946556 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FmUnckQofjunAtwr", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json index 6fc821a49a..9a7c7080a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "Q0RsVOPLuMByur9c", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json index 6969ef6263..bd42e42f74 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "QXJgY8OPyaoYUI1D", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json index d0b03d8959..4ed8203529 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R54l7TcwsjdPHvNB", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json index a898615cfc..731b59748d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MELEwYupDkT2DPxL", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json index 8a98aa4445..24eb70b646 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uGLvOoPAfksLO43M", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json index c9cb6c8711..b9ab2a97ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "gGpKvk3rnLuTjOwo", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json index 94fee218f2..2d81ff10df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Yopqnj4b5ZVwigGx", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json index dcbfee57e3..eedd218625 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "GrwiA2dArUGV9x2g", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json index 0714764c1c..9c6d20e0e0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QEfQrqMwApuSMqih", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json index afa79d4382..1285b05257 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "BAPIn3eJAPGpscRJ", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json index 1b7bd7a1dc..784f6dfd17 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "44BmRNRb6vlPq8qe", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json index 8f77560323..4fdcf94869 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "ltJbhoAeAec9gxrS", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json index 6cf9a832ff..57305d4cc5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "GxdZiXdqns72ibQl", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json index 8582b545c9..12a8f6cd79 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5XKGaHUjxHECbnHO", - "filament_id": "OFIxitiU", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json deleted file mode 100644 index 2728623e2e..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", - "from": "system", - "setting_id": "H8IStdO8zEfSLYVE", - "filament_id": "OFQZeyZv", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "Flashforge PLA Buint Ti @FF G4 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA\n\n" - ], - "compatible_printers": [ - "Flashforge Guider4 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "9" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "45" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json deleted file mode 100644 index 538d1415f1..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", - "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", - "from": "system", - "setting_id": "4wlkoKnU2bA7xhYO", - "filament_id": "OFQZeyZv", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA\n\n" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "9" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "45" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json index 6cf9156ada..6947f2afbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "KXy0WyQp06VC2ICh", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Color Change @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json index d5e1624903..9e644f1006 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "9cGw7tXD8YJHEi1H", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json index 45e7ed6a32..4f5eca6889 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "TF6BeOl0patjpPaa", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json index ed65db080c..950effa7cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "nkYeEBo8NdkJulAP", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json index 70991dff2d..bf6dfb230f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "yEDfsOsogfZbNBVX", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json index 2fc09d1cc1..23bfa9be0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xZmQdh487UMtvBRu", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json index 707eb4e042..6f5e1afb0e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "rc00SOyIg30uE3Da", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json index 5a35f8d82f..a465a78ea6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k1OiugasUs7baG1f", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json index 9c64cff73b..31a99ea10e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "G2Et7kPHptMESzQ0", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json index f57fbdc47d..07fe12f973 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zsOdmFGBSF9UySMN", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json index 963bd8152d..3a778e5472 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oxRMuvBMu9qdQWUQ", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json index 608ef77d24..8657a4010e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "5hwNJvvLtb75XBBg", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json index 78d56a62a5..c185b26f3d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mGj8VEyOnnogpkmF", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json index 2542e59765..0709fa3e08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "HXVX4mDeUSfW2RgL", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json index 9070fa4762..9742b8aefc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "JDcRA6apekWLXPvH", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json index 01b3800053..4d3681736e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "b5GJpvKYktP4vZpj", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json index 78aa762193..6eb75a8f52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RjUpQV6iQxTircwj", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json index 0241ed5dba..26609fd995 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "9DEZ6SmFdgfluhsR", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json index 7d3aa644c0..e660d0f569 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "girTMkusNTfY04rz", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json index 75e3bc1a3f..29f68b0f62 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "pCQ2qmeXUyJzP7kS", - "filament_id": "OFkwIWwc", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Color Change" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json index aa9433b6a2..b0f7d6bf89 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "a1jTbQsflD7SDFih", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json index 979f2a51fd..df9cc2d3e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zyCRsy0mHRgyuQqt", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json index d48f2944b6..d66bf2b24c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "y8TNaRebTrmFem10", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json index 17a2bd1120..65dffd3601 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "qju0AMvvq0B5Glny", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json index 06e76b0a60..1067b50067 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8gGBOEcNvlbZxGW", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json index 929002ffac..2ce8486cb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "0RkkIcIUFgwOFTBY", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json index 487f05b211..373a81bcdc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "9qVabnSl8xfKSIYX", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json index 0d81c49ca3..e44bbe16e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DL7lxDI35YErCTWX", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json index aa3a164d86..efb7dad130 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "koEC7DteUoXHUd2z", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json index 0517355c72..64b442938c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "D69fWcXioFcpoUjC", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json index 2982fcfe42..d20dc55d41 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rfiQUncdSExEaK0U", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json index ef995df080..346dfad0a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "WX8lK8efXIVcpjFf", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json index a301208f82..3b999c0734 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Tzvo3oILQJc4SQko", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json index 7491d8dc7c..b29877be60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZQYrljZtu3es26hB", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json index 9b00f47fc6..1b8e75eb32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y5gm20O4yCCDIoC0", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json index c92d0c95c3..d39114697f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "80vSQxnHfd5ZUy5h", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json index fc02069f65..185440fba4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UZi7T5VoasmXWyH5", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json index c86fa47d2f..ec0581df11 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "6UlSb4fqHIMdMxkO", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json index 22b40f77bb..c1818186cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "H2Cr4B5VUaxyYsN0", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json index ffff2b3523..785e26ace5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "NJrc0UZ54Fq8MaqF", - "filament_id": "OF5NQFKI", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Galaxy" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json index ec022f475c..5702843039 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k8iibCO2EnlTSRyi", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Luminous @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json index a6bc399396..44a6f663ef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "pACct3L7duMh3hfx", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json index 5898b4c1c2..3e106a6eda 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "GdvXL8SrKrYHxSgZ", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json index 227d392df3..446137267f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SLYD2YcQTQgbSjIF", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json index 0b7704be7b..d605b1e444 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "kOobFSlqEG9Qe0d1", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json index bb19b242a7..5efeada6af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "4sE1LTVVuRglRbpD", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json index f370433f16..485a3b51a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "jEUZyaEIBf2eXXeh", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json index 9e865d710f..3019fb194c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "qZ6kKjRCMfe4Ql3F", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json index 1dd346734f..0b58399215 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xPPSRmadqfqCtRF2", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json index 19db33c12b..792049300a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aWVXIk1xVa9URR1D", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json index 85732db257..a218752f68 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "KhBF7hHHVPzqiAca", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json index 4a47c2e41d..615e05d2e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "sTplnj3gMAzwtLWE", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json index 3f409afcef..cc630d58ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zJFUJKDJRYi1pRL7", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json index aab7e584c9..65e6995584 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vXPXOKD8vNJlujM1", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json index 01c99d30bd..7704d5f2b8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "purqxjmWiflDrnik", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json index e11842c15a..b9f94e604e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qraQ97uusigB63hv", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json index 049325af4d..5ce6582146 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Z1NCX8XMyIVlOlWn", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json index e8f02f10a0..46151a4496 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "s620OFLTgFT4Ds2A", - "filament_id": "OFMIma8C", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Luminous" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json index d9c3ffe33a..30c0a43a1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DcbISTLvKNMZRzKx", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Matte @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json index 790c30cef0..98964015a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4fwlIrzy6O2EsyBZ", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json index 9788577dc8..2774450e57 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "BVmVfNCuy8HDhcEI", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json index b044ecd47f..f03dc70fd1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "WRMePGzDGdEGiqNv", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json index 1cdea005e4..f009759cad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "thnbuaLDDlGrkrdY", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json similarity index 82% rename from resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json index 5aa386d441..230a723624 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Pro @FF C5", + "name": "Flashforge PLA Matte @FF C5", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Matte @FF C5;Flashforge PLA Matte FF C5", "from": "system", - "setting_id": "47Q7YXoJ7rD7Vu21", - "filament_id": "OF6ueBwd", + "setting_id": "ct3nO6w9j58gqDI0", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" @@ -45,7 +49,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Pro @FF C5" + "Flashforge PLA Matte @FF C5" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json similarity index 80% rename from resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json index 657898f301..0d7543cc09 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Matte @FF C5P", + "name": "Flashforge PLA Matte @FF C5P", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Matte @FF C5P;Flashforge PLA Matte FF C5P", "from": "system", - "setting_id": "FpLoe6QrPXnrH019", - "filament_id": "OFH6Pjxe", + "setting_id": "Bn2BaG7f1tkvlyYI", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -48,7 +52,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Matte @FF C5P" + "Flashforge PLA Matte @FF C5P" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json index 548d627fa2..4898587111 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "cnPwhLyBq6JL8gEA", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json index 28809dc1c0..2ff2a07363 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8b9q1FfVljPmKoEt", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json index 2a2ac35fa8..f49e19c292 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o9dOrLgL6efF19O1", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json index d3d9ac763a..98e44f21f4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QoRmDvhoeGi6Z2xv", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json index 2cc4d75091..7eda7a4b62 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "dHyuoORAUGLtlGkJ", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json index bc2daed905..698511967d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OgqVyIHfy3U8Dc6d", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json index 2716d0f9fa..c9a63d60cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "g1gnICJ3u6hpGazQ", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json index fa2c6322ea..c868aa0137 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "feXpVbDM5ON5mwg0", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json index 8ae39f5623..fc205bb684 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XMnZQ1AxXPJqpqRX", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json index e8a01ae3e0..42dc4c9c15 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Ke0bRKPNKSsVMO1Y", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json index 55571d70e5..1d76131870 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IRC2n4GaofxvvyTt", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json index 75b6007012..63d6f372e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RN4wdTL0qccM4huZ", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json index 60488f6338..781357b1a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ipMevDMORKqZYdvD", - "filament_id": "OF1bQyX2", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_max_volumetric_speed": [ "22" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json index a788ef51f7..1adef03eef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vwwb5nfO63U1ErCn", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Metal @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json index b6a2c35983..e786ecd378 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ekq4MRPyzlYxRhbX", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json index 231e4cf895..27caf06739 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "uusF7Vz94HOwoQF0", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json index 92a867b768..4f01562a04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "sHZWzrZO8PP0QYZR", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json index 22abaf206a..f85391cb2b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "bxwjEFI8HmNY8JI6", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json similarity index 81% rename from resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json index e41c16e0cb..d382637556 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Metal @FF C5", + "name": "Flashforge PLA Metal @FF C5", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Metal @FF C5;Flashforge PLA Metal FF C5", "from": "system", - "setting_id": "YFbZ472BRNga6OpQ", - "filament_id": "OFrnkURQ", + "setting_id": "AdjRSTc9RZG6mJ1e", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" @@ -45,7 +49,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Metal @FF C5" + "Flashforge PLA Metal @FF C5" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json similarity index 80% rename from resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json index fb5ba4bbf6..965b6fe595 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Metal @FF C5P", + "name": "Flashforge PLA Metal @FF C5P", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Metal @FF C5P;Flashforge PLA Metal FF C5P", "from": "system", - "setting_id": "AtVxriSKOrFZzUun", - "filament_id": "OFrnkURQ", + "setting_id": "k0AQO2dGbk0qvxzO", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -48,7 +52,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Metal @FF C5P" + "Flashforge PLA Metal @FF C5P" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json index 5f0dc7ac33..bf884cf46e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "VvMaIJwFk4Q6KX4p", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json index 682889ba46..8fcf56e6b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "5xqdqoj2l50FegPF", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json index da2e664b20..352adaa681 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R79SbWA9i2OAu2ee", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json index 56b51fbb39..8d78236629 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zjIN4KzIOwI1VwOc", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json index aa615d6c52..aaabcaac60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "UxMNNil2KnWvAJ4q", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json index 18240ff4ab..b1035a4629 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "57i6iKrVYUS5UiBT", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json index 712410e542..d7697ccb8e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vVKalJViJuBvlHkK", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json index a8eea524f7..bf06971c23 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IYPw8a9tkpuf95uH", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json index eebeaeb9d4..7d85d6e56f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "I0bULoVAbtVfQoCy", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json index 48206bc4e6..9c6e1b92b0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "DbPo3ay2e4a002AB", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json index 8d50a6ad0a..a79ce03a5b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "uztv4hhm2O3T93zZ", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json index cd239560be..82bf12c247 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "UFWWrhfgS7N36Y8W", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json index 368782f0fd..90d419bfa5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "UD5i0ijsirfieUvb", - "filament_id": "OFvVxvzZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Metal" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json index 15a01f350a..c956e6a5ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DIMoIGOGedN17WbO", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Pro @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json index 9d4fb9f9a8..eda5f5745f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SC5LJcecBaEG5by3", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json index b25c6b56ab..d56ed06c1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "t9lPSFnwLDk0ARIp", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json index d0a7d88e4f..423b8743a7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SBSlOEwZSvZHeX4r", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json index f276a6e671..0ab1f650f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "DbWTm2H71izMWmpx", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json similarity index 82% rename from resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json index 15b12ed8f9..e02f21dbd3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Matte @FF C5", + "name": "Flashforge PLA Pro @FF C5", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Pro @FF C5;Flashforge PLA Pro FF C5", "from": "system", - "setting_id": "UQF0kAaXnZgJGK4o", - "filament_id": "OFH6Pjxe", + "setting_id": "30eBjTZFg6vDZkc0", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" @@ -45,7 +49,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Matte @FF C5" + "Flashforge PLA Pro @FF C5" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json similarity index 81% rename from resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json rename to resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json index 025ddbf305..fedd74b2c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json @@ -1,10 +1,14 @@ { "type": "filament", - "name": "Flashforge PLA Pro @FF C5P", + "name": "Flashforge PLA Pro @FF C5P", "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Pro @FF C5P;Flashforge PLA Pro FF C5P", "from": "system", - "setting_id": "v7vYsiPVka4c1CUW", - "filament_id": "OF6ueBwd", + "setting_id": "xOvxorpWP37CQCfi", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -48,7 +52,7 @@ "18" ], "filament_settings_id": [ - "Flashforge PLA Pro @FF C5P" + "Flashforge PLA Pro @FF C5P" ], "filament_start_gcode": [ "; filament start gcode" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json index 174584294f..a2ea5e43ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZENqqRqvEOeloAgs", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json index e7b16bb162..f3dd8e04cf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YcXuvz3qYHtVoWxv", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json index 400fb84d2e..7dc8528606 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "prItyXNphhuPCAce", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json index f044a481b4..57e815ab25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "83zDmjaAgxxIt7KU", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json index c40c210005..35bce9d866 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px3O28Olb9LExqfT", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json index 71ad06d85a..b04f49d81b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "QYgsCCHP3Khqrzh3", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json index 6f675b36db..4e1e4c5ac7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "wV01bqvZ6MRaEibZ", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json index aaab161802..07b82edf7f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1ro9wHPYhuMHNiYe", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json index 20ee4d7163..433318fc86 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W4a7c9ugUVwvvmn", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json index 804c28cfe1..87031ba66b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CloRo3qxvzxHZuIP", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json index b0f9655605..281a34a2c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "QgUbP07tIXmFysEb", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json index 50db881fc0..8d29d1823c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "6mvGOtkPZT6ROboo", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json index 2924f05d13..e70b87f9a9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vI875WYbMyQeMwlh", - "filament_id": "OFK74HJD", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Pro" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json index 13d04ff82c..b232f00632 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gxl3i7jTwkzrKxF4", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index c3ece049cf..1a604e9250 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "mx6NWRkqyo2U12XQ", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index c39e501f5c..3bbc1afcb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "YH9IHXOFMKwcTLyA", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index 58d57b30c2..36a3c15a4f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "IfAieG0OAG807xlu", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index dc7fb68745..ce5ecdb2aa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "N6J7QqQ7TIgM3MyW", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json index 3e65220aa5..de9c9be46a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "OIsfpi49wEoF0ekO", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json index 5943d800f7..f82bc5efc4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "xxeZ6VPjRFevxDnK", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json index 1db32c1b42..84ee8494b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "x5m17Z5UpqpTtwgF", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json index 0f6d8e0bbe..ec7a71f35f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2GZp8yjrY1OioFDi", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json index 284128710c..36090afaf7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "U0XtCVUhIMnidhbR", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json index 72d48ebb9b..558015cb87 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8j9kaYy3ghkF81Cu", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json index 00ddedabc1..c37e0f6341 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "E0LeJwSxaniDkB0b", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json index 536a4ac8ac..b7f4f619ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "8rggqgJ9kg9yLE28", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json index f8dbc1a5db..7e2cbef575 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "hnWRLUwnfXiwnqBM", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json index 96cc519bb4..047cdcf879 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uY4OWhIytHMz4rWq", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json index de21757695..b5f36b7483 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YSkkXd9EhhEHvGpf", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json index 7a3f814c62..a41d10e40a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XlxXZj9Wi1D6IwCE", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json index 2723288b7d..e95f7ad1de 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IPyXBSnMCAikjI9V", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json index 7837f5d704..df4894cdb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "f3gJsovSmDKoA7BP", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json index 16a44d9bf2..15239129d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "vZb7BvbyVWkZv3rR", - "filament_id": "OFLYDIb8", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json index b9621303fe..c6e10f3502 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ojYsAanAPqYhgFoe", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "filament_settings_id": [ "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json index e1df09f3fb..e90f5c1545 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xVYaNvQwM2chTkPe", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "complete_print_exhaust_fan_speed": [ "80" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json index 96d39efa5d..3786cf7abb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8lsEnMIiHHorJhb", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json index ee4824a8dd..c7fb93bca2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oXlxQJY0K6Dnri7e", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json index 06c4d3fb57..b6802db1b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "XKpFulrvvrfE56va", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json index b0d52bf934..3d35049e4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jmVmKMUCcowszvVp", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json index 296b827e39..5cf32f2c38 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "yeh5cd0tAHtHzdoQ", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json index 9dbe7d7af0..27380eb9e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q2Zi0YluaYpG3Ktf", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json index 1eafaf0b40..42df4a0ea9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "1qXV6AJqPpAwX1YK", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json index 1d93c10b5a..7a11476c06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "YsyGGOGqUVkEqkIr", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json index b333c92f94..013e84740b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json @@ -4,10 +4,10 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4L3Zm1YIxs8J8dp9", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json index 6459a6f8a8..4a975e6f20 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UVvd018dTbygqTgy", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json index 410394cbce..0781dd641f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "F0k8kkgWM5FkLAzo", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json index 7ecddf5859..9b4065c982 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json @@ -4,7 +4,10 @@ "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Oapl8InwbkwNSIDl", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json index 0554f047e6..35ccf42632 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "NiB6Yb4b0auyn9KQ", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json index ca024d690b..4be3dba6ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "LYtdPgec1hBLhoQA", - "filament_id": "OFec7Qiw", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Sparkle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json index 8bb0d6980f..245e401283 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "QRyISvTy06kCwxKo", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json index f63829709e..f456d8c7db 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "rmnF24E3SuwzRscH", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json index 2939f9ee4e..a39646f621 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "BXPI5Pkp7a6pLrCh", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json index b2b8bcf477..a1b271569e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "rBm25DRY1PAkEJ4r", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json index f5e734c62b..189dba715a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "xReo12oteZ4ECNJN", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json index e441facb7d..292cf5972c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9PgjgxU7pLl2Dfpe", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json index f2b5662c13..0faba78623 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RuNKzuIsw7F1ogmG", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json index 62dd7a9ee9..77a590f1d6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YPuMCHNGDWh0FpIB", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json index 7958393b2b..3bd2e72000 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "3uC056Y171ZjnQE6", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json index 5466774689..10f87a860a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "JxNlb64lTODaaQhU", - "filament_id": "OF2bZtyg", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA-CF" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json index 07744f726a..4242f0f8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -3,7 +3,10 @@ "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "inherits": "Generic PLA-Silk @Flashforge", "from": "system", - "filament_id": "OFGc282l", + "filament_id": "OFV8Mxqx", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json similarity index 86% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json index e8de847c00..3df5398f11 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4 0.6 HF nozzle", + "name": "Flashforge PPS @FF G4 0.6 HF nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.6 HF nozzle;FlashForge PPS FF G4 0.6 HF nozzle", "from": "system", - "setting_id": "3w8fnDjkoFaJ6Nhw", - "filament_id": "OFUCpLaL", + "setting_id": "5x1ye2DAm3GvzmZJ", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4 0.6 HF nozzle" + "Flashforge PPS @FF G4 0.6 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json similarity index 87% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json index 993a4dbf92..1de4d51745 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4 0.6 nozzle", + "name": "Flashforge PPS @FF G4 0.6 nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.6 nozzle;FlashForge PPS FF G4 0.6 nozzle", "from": "system", - "setting_id": "owHbDqY55rFtSegz", - "filament_id": "OFUCpLaL", + "setting_id": "yZoLC24CeKEyvkgA", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4 0.6 nozzle" + "Flashforge PPS @FF G4 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json similarity index 86% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json index ff65c08991..e8014ddfec 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4 0.8 HF nozzle", + "name": "Flashforge PPS @FF G4 0.8 HF nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.8 HF nozzle;FlashForge PPS FF G4 0.8 HF nozzle", "from": "system", - "setting_id": "eFK1zzT1JY9ZnEl9", - "filament_id": "OFUCpLaL", + "setting_id": "EsrSpDB3Kx35qb76", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4 0.8 HF nozzle" + "Flashforge PPS @FF G4 0.8 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json index c8a1c2d800..fd2f854067 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "6NjEQ6RJKUAOrSLw", - "filament_id": "OFxMGIPt", + "filament_id": "OFlgMgNM", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json similarity index 86% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json index 0f6fa82220..f731181d65 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4P 0.6 HF nozzle", + "name": "Flashforge PPS @FF G4P 0.6 HF nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.6 HF nozzle;FlashForge PPS FF G4P 0.6 HF nozzle", "from": "system", - "setting_id": "E8CcstoHzax78ZJY", - "filament_id": "OFUCpLaL", + "setting_id": "Uu82gm86ESeidnRT", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.6 HF nozzle" + "Flashforge PPS @FF G4P 0.6 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json similarity index 87% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json index 581d855fe0..3eab34befc 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4P 0.6 nozzle", + "name": "Flashforge PPS @FF G4P 0.6 nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.6 nozzle;FlashForge PPS FF G4P 0.6 nozzle", "from": "system", - "setting_id": "xa22FD8bRVGsLiPJ", - "filament_id": "OFUCpLaL", + "setting_id": "G6pIMZA5RC15kJoC", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.6 nozzle" + "Flashforge PPS @FF G4P 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json similarity index 86% rename from resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json index dee62ada5b..a2662d8cc9 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS @FF G4P 0.8 HF nozzle", + "name": "Flashforge PPS @FF G4P 0.8 HF nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.8 HF nozzle;FlashForge PPS FF G4P 0.8 HF nozzle", "from": "system", - "setting_id": "bZ9dbA8dIu9mjWyN", - "filament_id": "OFUCpLaL", + "setting_id": "SsK15iSJxrQWI5wy", + "filament_id": "OFlgMgNM", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "activate_chamber_temp_control": [ "1" @@ -61,7 +62,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.8 HF nozzle" + "Flashforge PPS @FF G4P 0.8 HF nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json index 76257267fe..b841f62e6c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "vFMKqNjQjlNxwvDI", - "filament_id": "OFxMGIPt", + "filament_id": "OFlgMgNM", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json index 218d8add21..b33fcb95c9 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS-CF @FF G4 0.6 nozzle", + "name": "Flashforge PPS-CF @FF G4 0.6 nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS-CF @FF G4 0.6 nozzle;FlashForge PPS-CF FF G4 0.6 nozzle", "from": "system", - "setting_id": "4w0oK3F50O1DUqsu", - "filament_id": "OFogbnCb", + "setting_id": "mMTi9QaW5xVch3an", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "2" @@ -49,7 +50,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS-CF @FF G4 0.6 nozzle" + "Flashforge PPS-CF @FF G4 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json similarity index 85% rename from resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json rename to resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json index 1213313096..48edb216c5 100644 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "FlashForge PPS-CF @FF G4P 0.6 nozzle", + "name": "Flashforge PPS-CF @FF G4P 0.6 nozzle", "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS-CF @FF G4P 0.6 nozzle;FlashForge PPS-CF FF G4P 0.6 nozzle", "from": "system", - "setting_id": "94vPnztRcpnbfAKx", - "filament_id": "OFogbnCb", + "setting_id": "dSI79hoaa9jLGvhz", + "filament_id": "OFTSXxzE", "instantiation": "true", "filament_vendor": [ - "Generic" + "Flashforge" ], "close_fan_the_first_x_layers": [ "2" @@ -49,7 +50,7 @@ "15" ], "filament_settings_id": [ - "FlashForge PPS-CF @FF G4P 0.6 nozzle" + "Flashforge PPS-CF @FF G4P 0.6 nozzle" ], "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PPS" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json index 4f3cc891e3..90d94b9c29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "rSYGG2ni41NDVw6l", - "filament_id": "OFQiq4fb", + "filament_id": "OFaaddbQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json index 206933a8fe..03fdb6117e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "nwgbMjLRJLtJ04ri", - "filament_id": "OFQiq4fb", + "filament_id": "OFaaddbQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json index f3625e4bea..1514862e44 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "f75oElm4zB0hukIj", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json index c08ad7948b..d6fda96505 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o4KYTpJF6KksX2mg", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json index e0d6448c72..27d6515ccb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HUSkDZL6rCpz0lRk", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json index a37ab23204..7db519170a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8xgu0AnMuKbPWyVd", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json index a9ceca338a..2123c33993 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Rgqt3MjxOye5EaFt", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json index df74375b18..a5ce644702 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "PBFsW5qhVbQteYh5", - "filament_id": "OFKpQTJI", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json index 6eca69f2b4..897054d8ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "TPbHmcFyPyjvoERv", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json index c0e5b624e4..adb4820faa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "zLMgsyDmdoXHhqFv", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json index 06a632a6c5..5c5f690cd2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "ThakVhjfpgnAlEVH", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json index 676484711e..b67887cc8b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "M0ozqaD3jSKoD6fm", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json index 01fd9f2752..ae6049673b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ob8IkvzNt9CWCzbk", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json index 9f72e9eaca..37bef9c3f6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NzxX1lyRJ7wLUihV", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json index ecd3bbb764..c5b24e9e04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "4FIGiheSGvSJPw3s", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json index bcfe2516a2..23cd8d6326 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1GNqSBaQitzhYSx7", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json index 22373250ff..eb2a423bca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "eOhMygyxaccdov7o", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json index 7d393a9b9d..f4b91222e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json @@ -4,7 +4,10 @@ "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LxooKiOkRncktNLf", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json index cdcee7c997..9e675ccd52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "HdoJfbQr0uwQ6Vwb", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json index c3042b14b1..aa2f6251dc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "J4EaFhnpkLDcl5wH", - "filament_id": "OFAf9pJF", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge TPU 95A" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json index 1daa3b0189..5a4e304862 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "fd5bACFa33J7aTdp", - "filament_id": "OF995YXg", + "filament_id": "OF8GtyKJ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json index 3145267db2..428afe7f1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "hrcELA2qEMkZ6Wvj", - "filament_id": "OF995YXg", + "filament_id": "OF8GtyKJ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json index 96c3798a71..407e92aed8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "Lis7BZ3lMkoX5KQt", - "filament_id": "OF41jaTh", + "filament_id": "OFwlZ7gH", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json index 18e401489e..611724b460 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "xY03Hiidu5YNSUyZ", - "filament_id": "OF41jaTh", + "filament_id": "OFwlZ7gH", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json index 3fee2a98b2..0c27bb94c6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "AHu6wNV3zcPBusOF", - "filament_id": "OFNWnx2c", + "filament_id": "OFx0WlzS", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json index d7625a7d8d..e3b05721e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json @@ -4,7 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "8MBRqfLIRdhxk1dF", - "filament_id": "OFNWnx2c", + "filament_id": "OFx0WlzS", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json index 4b212a6283..5ad0cca8f6 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json @@ -2,6 +2,7 @@ "type": "filament", "name": "FusRock PAHT-CF @FF C5", "inherits": "Generic PA-CF @System", + "renamed_from": "Flashforge PAHT-CF @FF C5;Flashforge PAHT-CF FF C5", "from": "system", "setting_id": "gZqAGVOlWR79n7hN", "filament_id": "OFKW5hEW", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json index a9e1bce236..b23f871add 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json @@ -2,6 +2,7 @@ "type": "filament", "name": "FusRock PAHT-CF @FF C5P", "inherits": "Generic PA-CF @System", + "renamed_from": "Flashforge PAHT-CF @FF C5P;Flashforge PAHT-CF FF C5P", "from": "system", "setting_id": "nJF1lCOavNNh4yHs", "filament_id": "OFKW5hEW", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index f8595f254b..22ea704736 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -2,6 +2,7 @@ "type": "filament", "name": "FusRock PAHT-CF @FF G4", "inherits": "Generic PLA-CF10 @Flashforge", + "renamed_from": "Flashforge PAHT-CF @FF G4;Flashforge PAHT-CF FF G4", "from": "system", "setting_id": "nH6pwFYsPyBzL1EB", "filament_id": "OFKW5hEW", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 8634877859..5156df9505 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -2,6 +2,7 @@ "type": "filament", "name": "FusRock PAHT-CF @FF G4P", "inherits": "Generic PLA-CF10 @Flashforge", + "renamed_from": "Flashforge PAHT-CF @FF G4P;Flashforge PAHT-CF FF G4P", "from": "system", "setting_id": "wmWMf3MfmbfZx2o8", "filament_id": "OFKW5hEW", diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 128926c992..710554df5a 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -313,8 +313,8 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "RatRig BigNozzle ABS", - "sub_path": "filament/RatRig BigNozzle ABS.json" + "name": "Generic ABS BigNozzle @RatRig", + "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" }, { "name": "Generic ABS @RatRig", @@ -325,8 +325,8 @@ "sub_path": "filament/RatRig PunkFil ABS.json" }, { - "name": "RatRig BigNozzle ASA", - "sub_path": "filament/RatRig BigNozzle ASA.json" + "name": "Generic ASA BigNozzle @RatRig", + "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" }, { "name": "Generic ASA @RatRig", @@ -345,12 +345,12 @@ "sub_path": "filament/Generic PC @RatRig.json" }, { - "name": "RatRig BigNozzle PCTG", - "sub_path": "filament/RatRig BigNozzle PCTG.json" + "name": "Generic PCTG BigNozzle @RatRig", + "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" }, { - "name": "RatRig BigNozzle PETG", - "sub_path": "filament/RatRig BigNozzle PETG.json" + "name": "Generic PETG BigNozzle @RatRig", + "sub_path": "filament/Generic PETG BigNozzle @RatRig.json" }, { "name": "Generic PCTG @RatRig", @@ -369,8 +369,8 @@ "sub_path": "filament/RatRig PunkFil PETG CF.json" }, { - "name": "RatRig BigNozzle PLA", - "sub_path": "filament/RatRig BigNozzle PLA.json" + "name": "Generic PLA BigNozzle @RatRig", + "sub_path": "filament/Generic PLA BigNozzle @RatRig.json" }, { "name": "Generic PLA @RatRig", @@ -385,8 +385,8 @@ "sub_path": "filament/Generic PVA @RatRig.json" }, { - "name": "RatRig BigNozzle TPU", - "sub_path": "filament/RatRig BigNozzle TPU.json" + "name": "Generic TPU BigNozzle @RatRig", + "sub_path": "filament/Generic TPU BigNozzle @RatRig.json" }, { "name": "Generic TPU @RatRig", diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json b/resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json rename to resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json index 698d14aba2..3d071c779a 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json +++ b/resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle ABS", + "name": "Generic ABS BigNozzle @RatRig", "inherits": "fdm_filament_abs", + "renamed_from": "RatRig BigNozzle ABS", "from": "system", - "setting_id": "oE39mwr3PCpeBxZN", - "filament_id": "OFtplX8o", + "setting_id": "4GJ4GHOuApWBbQoS", + "filament_id": "OFnyHfcv", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json b/resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json rename to resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json index c16d3c7869..f6f85f78e7 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json +++ b/resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle ASA", + "name": "Generic ASA BigNozzle @RatRig", "inherits": "fdm_filament_asa", + "renamed_from": "RatRig BigNozzle ASA", "from": "system", - "setting_id": "GGkbwdd79jAXnwuf", - "filament_id": "OFgcryz4", + "setting_id": "n2V9gkhbqWJzsQBK", + "filament_id": "OF4GM5qX", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json rename to resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json index ce0edbd3b0..0592709a82 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json +++ b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle PCTG", + "name": "Generic PCTG BigNozzle @RatRig", "inherits": "fdm_filament_pet", + "renamed_from": "RatRig BigNozzle PCTG", "from": "system", - "setting_id": "uCKZhFAPvEa2wKnA", - "filament_id": "OFFC0VqZ", + "setting_id": "HPaol79uY9NdhasQ", + "filament_id": "OFYfAcLY", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json b/resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json similarity index 93% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json rename to resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json index 1595d776b2..213f41628c 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json +++ b/resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle PETG", + "name": "Generic PETG BigNozzle @RatRig", "inherits": "fdm_filament_pet", + "renamed_from": "RatRig BigNozzle PETG", "from": "system", - "setting_id": "bf3YMNVRSE1i1E8N", - "filament_id": "OFmexHIS", + "setting_id": "pRM6IVX5T3y6Ywj4", + "filament_id": "OFvD0Qqt", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json b/resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json rename to resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json index 75be42804b..08d546aafc 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json +++ b/resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle PLA", + "name": "Generic PLA BigNozzle @RatRig", "inherits": "fdm_filament_pla", + "renamed_from": "RatRig BigNozzle PLA", "from": "system", - "setting_id": "dyG3zLuhX2qe8XJP", - "filament_id": "OFiuJSmy", + "setting_id": "WEI4QiKyANQOK7dG", + "filament_id": "OFqFRiLb", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json b/resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json similarity index 92% rename from resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json rename to resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json index c220b6dc58..4714f57d5a 100644 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json +++ b/resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json @@ -1,10 +1,11 @@ { "type": "filament", - "name": "RatRig BigNozzle TPU", + "name": "Generic TPU BigNozzle @RatRig", "inherits": "fdm_filament_tpu", + "renamed_from": "RatRig BigNozzle TPU", "from": "system", - "setting_id": "wLJ3X05Jnz1EqeOI", - "filament_id": "OFsNJjpc", + "setting_id": "9UWg2cO61XFdlWxo", + "filament_id": "OF5tX6va", "instantiation": "true", "filament_max_volumetric_speed": [ "5" diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index b41888a840..0fb50e0560 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -2352,6 +2352,12 @@ ], "successor": "OFDvXujf" }, + "OF1bQyX2": { + "claims": [ + "Flashforge/Flashforge PLA Matte" + ], + "successor": "OF6qAuyi" + }, "OF1daEUW": { "claims": [ "Anker/Anker Generic PETG-CF" @@ -2370,6 +2376,12 @@ ], "successor": "OFcVLpNA" }, + "OF2bZtyg": { + "claims": [ + "Flashforge/Flashforge PLA-CF" + ], + "successor": "OF9cAwMK" + }, "OF2mgDsI": { "claims": [ "Vzbot/Vzbot Generic PLA" @@ -2396,6 +2408,12 @@ ], "successor": "OFYPdQJh" }, + "OF41jaTh": { + "claims": [ + "Flashforge/Flashforge TPU-90A" + ], + "successor": "OFwlZ7gH" + }, "OF42ZDpN": { "claims": [ "Flashforge/FusRock PAHT" @@ -2450,6 +2468,12 @@ ], "successor": "OFLakOUI" }, + "OF5NQFKI": { + "claims": [ + "Flashforge/Flashforge PLA Galaxy" + ], + "successor": "OFJJ0Ar3" + }, "OF5Zk4e1": { "claims": [ "Anycubic/Anycubic Generic ABS" @@ -2463,6 +2487,12 @@ ], "successor": "OFDSrzZ8" }, + "OF5w29Kq": { + "claims": [ + "Flashforge/Flashforge HS PETG" + ], + "successor": "OFDxxTpW" + }, "OF67EdL5": { "claims": [ "Sovol/Sovol SV06 ACE ABS" @@ -2523,6 +2553,12 @@ ], "successor": "OFgbpcy9" }, + "OF6ueBwd": { + "claims": [ + "Flashforge/Flashforge PLA Pro" + ], + "successor": "OFm4SivL" + }, "OF6vKLaU": { "claims": [ "Artillery/Artillery Generic ASA" @@ -2583,6 +2619,12 @@ ], "successor": "OFLakOUI" }, + "OF995YXg": { + "claims": [ + "Flashforge/Flashforge TPU-64D" + ], + "successor": "OF8GtyKJ" + }, "OF9fOPpd": { "claims": [ "Vzbot/Vzbot Generic PC" @@ -2601,6 +2643,12 @@ ], "successor": "OFDSrzZ8" }, + "OFAf9pJF": { + "claims": [ + "Flashforge/Flashforge TPU 95A" + ], + "successor": "OFSqIcJC" + }, "OFB09fpe": { "claims": [ "Ratrig/RatRig Generic TPU" @@ -2644,6 +2692,12 @@ ], "successor": "OFLPAxz3" }, + "OFBK6zAi": { + "claims": [ + "Flashforge/Flashforge PETG-CF" + ], + "successor": "OFuFEtKX" + }, "OFBpcB0a": { "claims": [ "TwoTrees/TwoTrees Generic HS PLA" @@ -2714,6 +2768,12 @@ ], "successor": "OFgbpcy9" }, + "OFEMfQsX": { + "claims": [ + "Flashforge/Flashforge PETG Basic" + ], + "successor": "OFYYeMyQ" + }, "OFENzGSm": { "claims": [ "FLSun/FLSun T1 TPU" @@ -2738,6 +2798,12 @@ ], "successor": "OFWbdGsC" }, + "OFFC0VqZ": { + "claims": [ + "Ratrig/RatRig BigNozzle PCTG" + ], + "successor": "OFYfAcLY" + }, "OFFZ0BBL": { "claims": [ "FlyingBear/FlyingBear Generic PLA" @@ -2786,6 +2852,18 @@ ], "successor": "OF6rdQ6M" }, + "OFH5UH6P": { + "claims": [ + "Flashforge/Flashforge ABS-GF" + ], + "successor": "OFojbdhR" + }, + "OFH6Pjxe": { + "claims": [ + "Flashforge/Flashforge PLA Matte" + ], + "successor": "OF6qAuyi" + }, "OFHFZ1Te": { "claims": [ "Prusa/Prusa Generic PLA Silk" @@ -2854,6 +2932,12 @@ ], "successor": "OFQyyO0l" }, + "OFIxitiU": { + "claims": [ + "Flashforge/Flashforge PLA Basic" + ], + "successor": "OFJ3F2jm" + }, "OFIy3kLw": { "claims": [ "Prusa/Prusa Generic PA" @@ -2902,6 +2986,12 @@ ], "successor": "OFzRtFM9" }, + "OFK74HJD": { + "claims": [ + "Flashforge/Flashforge PLA Pro" + ], + "successor": "OFm4SivL" + }, "OFKNAhls": { "claims": [ "Qidi/Qidi Generic PETG" @@ -2914,6 +3004,12 @@ ], "successor": "OFvmwTZE" }, + "OFKpQTJI": { + "claims": [ + "Flashforge/Flashforge TPU 65D" + ], + "successor": "OFSDfduA" + }, "OFKuTr12": { "claims": [ "Tiertime/Tiertime Generic PE" @@ -2944,6 +3040,12 @@ ], "successor": "OFhQfUQY" }, + "OFLYDIb8": { + "claims": [ + "Flashforge/Flashforge PLA Silk" + ], + "successor": "OFgjgN35" + }, "OFLrdHse": { "claims": [ "Flashforge/Flashforge Generic HS PLA" @@ -2968,6 +3070,12 @@ ], "successor": "OFgbpcy9" }, + "OFMIma8C": { + "claims": [ + "Flashforge/Flashforge PLA Luminous" + ], + "successor": "OFdqkWtz" + }, "OFMIurFh": { "claims": [ "Creality/Creality HF Generic Speed PLA" @@ -3006,6 +3114,12 @@ ], "successor": "OFg8ndtj" }, + "OFMyLYV8": { + "claims": [ + "Flashforge/Flashforge PETG Transparent" + ], + "successor": "OFwjMiKL" + }, "OFN7aNHe": { "claims": [ "Tiertime/Tiertime Generic PC" @@ -3036,6 +3150,12 @@ ], "successor": "OFDSrzZ8" }, + "OFNWnx2c": { + "claims": [ + "Flashforge/Flashforge TPU-95A" + ], + "successor": "OFx0WlzS" + }, "OFNX8GI1": { "claims": [ "Sovol/Sovol Zero ABS" @@ -3084,6 +3204,12 @@ ], "successor": "OF7lOgYF" }, + "OFPQfNAf": { + "claims": [ + "Flashforge/Flashforge PETG Pro" + ], + "successor": "OFXiArjA" + }, "OFPdhDlK": { "claims": [ "Anycubic/Anycubic Generic PA-CF" @@ -3132,12 +3258,24 @@ ], "successor": "OFWbdGsC" }, + "OFQZeyZv": { + "claims": [ + "Flashforge/Flashforge PLA Buint Ti" + ], + "successor": "OF8O09RG" + }, "OFQbqeN7": { "claims": [ "Qidi/Qidi Generic PA" ], "successor": "OFg8ndtj" }, + "OFQiq4fb": { + "claims": [ + "Flashforge/Flashforge PVA" + ], + "successor": "OFaaddbQ" + }, "OFQswlnF": { "claims": [ "Tiertime/Tiertime Generic PA" @@ -3224,6 +3362,12 @@ ], "successor": "OFmCOW2Y" }, + "OFShw1X8": { + "claims": [ + "Flashforge/Flashforge ABS Basic" + ], + "successor": "OFibWuBd" + }, "OFTKFAZ4": { "claims": [ "Tiertime/Tiertime Generic PCTG" @@ -3260,6 +3404,12 @@ ], "successor": "OFY9muEs" }, + "OFUCpLaL": { + "claims": [ + "Flashforge/FlashForge PPS" + ], + "successor": "OFlgMgNM" + }, "OFUScM0D": { "claims": [ "Flashforge/FusRock S-Multi" @@ -3338,6 +3488,12 @@ ], "successor": "OFY9muEs" }, + "OFWnSvGu": { + "claims": [ + "Flashforge/Flashforge ASA-GF" + ], + "successor": "OFrZDhVt" + }, "OFWof1Ap": { "claims": [ "FLSun/FLSun Generic ABS" @@ -3460,6 +3616,12 @@ ], "successor": "OFCn83wF" }, + "OFaBwRvT": { + "claims": [ + "Flashforge/Flashforge ASA Basic" + ], + "successor": "OFFFg2Pf" + }, "OFaFNP2U": { "claims": [ "Sovol/Sovol SV07 PLA" @@ -3478,6 +3640,12 @@ ], "successor": "OFLakOUI" }, + "OFaz8VoR": { + "claims": [ + "Flashforge/Flashforge HIPS" + ], + "successor": "OFvaLVML" + }, "OFbeeFkl": { "claims": [ "OrcaArena/OrcaArena Generic PLA Silk" @@ -3575,6 +3743,12 @@ ], "successor": "OFgbpcy9" }, + "OFe6sfXS": { + "claims": [ + "Flashforge/FlashForge PC" + ], + "successor": "OFWXCbVF" + }, "OFe7Sx5B": { "claims": [ "Sovol/Sovol SV06 ACE PETG" @@ -3606,6 +3780,12 @@ ], "successor": "OFi6PfUM" }, + "OFec7Qiw": { + "claims": [ + "Flashforge/Flashforge PLA Sparkle" + ], + "successor": "OFV5c8hG" + }, "OFetENFF": { "claims": [ "OrcaArena/OrcaArena Generic ABS" @@ -3654,6 +3834,18 @@ ], "successor": "OFWbdGsC" }, + "OFgcryz4": { + "claims": [ + "Ratrig/RatRig BigNozzle ASA" + ], + "successor": "OF4GM5qX" + }, + "OFgf4gZa": { + "claims": [ + "Flashforge/Flashforge PA" + ], + "successor": "OFEvEfw5" + }, "OFgvOmM2": { "claims": [ "Anker/Anker Generic PETG", @@ -3668,6 +3860,12 @@ ], "successor": "OFgbpcy9" }, + "OFi7Bf0F": { + "claims": [ + "Flashforge/Flashforge ABS-CF" + ], + "successor": "OFYTIMbj" + }, "OFiCHnso": { "claims": [ "Prusa/Prusa Generic PLA" @@ -3692,6 +3890,12 @@ ], "successor": "OFDvXujf" }, + "OFiuJSmy": { + "claims": [ + "Ratrig/RatRig BigNozzle PLA" + ], + "successor": "OFqFRiLb" + }, "OFixgF4N": { "claims": [ "Flashforge/FusRock S-Multi" @@ -3722,6 +3926,12 @@ ], "successor": "OFsijjtH" }, + "OFkwIWwc": { + "claims": [ + "Flashforge/Flashforge PLA Color Change" + ], + "successor": "OFMkAW6r" + }, "OFl2SXmv": { "claims": [ "Prusa/Prusa Generic FLEX" @@ -3764,12 +3974,24 @@ ], "successor": "OFWbdGsC" }, + "OFmQkb3c": { + "claims": [ + "Flashforge/Flashforge HS PLA Burnt Ti" + ], + "successor": "OF8O09RG" + }, "OFma52eS": { "claims": [ "Blocks/Blocks Generic ABS" ], "successor": "OFY9muEs" }, + "OFmexHIS": { + "claims": [ + "Ratrig/RatRig BigNozzle PETG" + ], + "successor": "OFvD0Qqt" + }, "OFmhWhEf": { "claims": [ "Creality/Creality HF Generic PLA" @@ -3788,6 +4010,12 @@ ], "successor": "OFLPAxz3" }, + "OFnMv3W5": { + "claims": [ + "Flashforge/Flashforge HS PLA" + ], + "successor": "OFIK2H3G" + }, "OFndmfJ1": { "claims": [ "Anker/Anker Generic PLA", @@ -3838,6 +4066,12 @@ ], "successor": "OFmpMwxS" }, + "OFogbnCb": { + "claims": [ + "Flashforge/FlashForge PPS-CF" + ], + "successor": "OFTSXxzE" + }, "OFoqrHTw": { "claims": [ "FLSun/FLSun S1 PLA High Speed" @@ -3928,6 +4162,12 @@ ], "successor": "OFCD8qiU" }, + "OFrnkURQ": { + "claims": [ + "Flashforge/Flashforge PLA Metal" + ], + "successor": "OFAebKg8" + }, "OFrrMLDw": { "claims": [ "Flashforge/Flashforge Generic PLA-SILK" @@ -3964,6 +4204,12 @@ ], "successor": "OFYPdQJh" }, + "OFsNJjpc": { + "claims": [ + "Ratrig/RatRig BigNozzle TPU" + ], + "successor": "OF5tX6va" + }, "OFsXOMoX": { "claims": [ "Qidi/Qidi Generic PLA+" @@ -4000,6 +4246,12 @@ ], "successor": "OFDSrzZ8" }, + "OFtplX8o": { + "claims": [ + "Ratrig/RatRig BigNozzle ABS" + ], + "successor": "OFnyHfcv" + }, "OFtsVp4v": { "claims": [ "SecKit/SecKit Generic PA-CF" @@ -4012,6 +4264,18 @@ ], "successor": "OFDSrzZ8" }, + "OFuFqYyG": { + "claims": [ + "Flashforge/Flashforge PAHT-CF" + ], + "successor": "OFKW5hEW" + }, + "OFuGRMNV": { + "claims": [ + "Flashforge/Flashforge PA-CF" + ], + "successor": "OFGxuI0n" + }, "OFuSwKgm": { "claims": [ "Tiertime/Tiertime Generic PLA" @@ -4048,6 +4312,12 @@ ], "successor": "OFq9svOz" }, + "OFvVxvzZ": { + "claims": [ + "Flashforge/Flashforge PLA Metal" + ], + "successor": "OFAebKg8" + }, "OFwMFLAm": { "claims": [ "Artillery/Artillery Generic ABS" @@ -4072,6 +4342,12 @@ ], "successor": "OFWbdGsC" }, + "OFxMGIPt": { + "claims": [ + "Flashforge/Flashforge PPS" + ], + "successor": "OFlgMgNM" + }, "OFxTMg1d": { "claims": [ "FlyingBear/FlyingBear Generic PC" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index b3e38041f3..5eedb85a5e 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -19,8 +19,6 @@ "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", @@ -29,12 +27,6 @@ "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", @@ -43,6 +35,12 @@ "Flashforge/Flashforge PLA Galaxy @FF C5P", "Flashforge/Flashforge PLA Luminous @FF C5", "Flashforge/Flashforge PLA Luminous @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 Silk @FF C5", "Flashforge/Flashforge PLA Silk @FF C5P", "Flashforge/Flashforge PLA-CF @FF C5", @@ -247,20 +245,6 @@ "Elegoo/Generic PETG PRO @Elegoo", "Elegoo/Generic PETG-CF @Elegoo Centauri", "Elegoo/Generic PLA Matte @Elegoo", - "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", - "Flashforge/FlashForge PC @FF G4 0.6 nozzle", - "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", - "Flashforge/FlashForge PC @FF G4P 0.6 HF nozzle", - "Flashforge/FlashForge PC @FF G4P 0.6 nozzle", - "Flashforge/FlashForge PC @FF G4P 0.8 HF nozzle", - "Flashforge/FlashForge PPS @FF G4 0.6 HF nozzle", - "Flashforge/FlashForge PPS @FF G4 0.6 nozzle", - "Flashforge/FlashForge PPS @FF G4 0.8 HF nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.6 HF nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.6 nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.8 HF nozzle", - "Flashforge/FlashForge PPS-CF @FF G4 0.6 nozzle", - "Flashforge/FlashForge PPS-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge ABS @FF AD5M 0.25 Nozzle", "Flashforge/Flashforge ABS Basic", "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", @@ -389,10 +373,12 @@ "Flashforge/Flashforge PA12-CF", "Flashforge/Flashforge PA6-CF", "Flashforge/Flashforge PA66-CF", - "Flashforge/Flashforge PAHT-CF @FF C5", - "Flashforge/Flashforge PAHT-CF @FF C5P", - "Flashforge/Flashforge PAHT-CF @FF G4", - "Flashforge/Flashforge PAHT-CF @FF G4P", + "Flashforge/Flashforge PC @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PC @FF G4 0.6 nozzle", + "Flashforge/Flashforge PC @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PC @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PC @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PC @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PET-CF", "Flashforge/Flashforge PET-CF @FF C5", "Flashforge/Flashforge PET-CF @FF C5P", @@ -449,12 +435,6 @@ "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", "Flashforge/Flashforge PETG-CF @FF G4P", "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", - "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", "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PLA Basic @FF AD5X", @@ -475,8 +455,6 @@ "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PLA Basic @FF G4P HF", - "Flashforge/Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "Flashforge/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", "Flashforge/Flashforge PLA Color Change", "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PLA Color Change @FF AD5X", @@ -541,6 +519,8 @@ "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Matte @FF C5", + "Flashforge/Flashforge PLA Matte @FF C5P", "Flashforge/Flashforge PLA Matte @FF G4", "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", @@ -559,6 +539,8 @@ "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Metal @FF C5", + "Flashforge/Flashforge PLA Metal @FF C5P", "Flashforge/Flashforge PLA Metal @FF G4", "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", @@ -577,6 +559,8 @@ "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Pro @FF C5", + "Flashforge/Flashforge PLA Pro @FF C5P", "Flashforge/Flashforge PLA Pro @FF G4", "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", @@ -641,12 +625,20 @@ "Flashforge/Flashforge PPA-CF @FF C5P", "Flashforge/Flashforge PPA-GF", "Flashforge/Flashforge PPS @FF G4", + "Flashforge/Flashforge PPS @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PPS @FF G4 0.6 nozzle", + "Flashforge/Flashforge PPS @FF G4 0.8 HF nozzle", "Flashforge/Flashforge PPS @FF G4P", + "Flashforge/Flashforge PPS @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PPS @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PPS @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PPS-CF", "Flashforge/Flashforge PPS-CF @FF C5", "Flashforge/Flashforge PPS-CF @FF C5P", "Flashforge/Flashforge PPS-CF @FF G4", + "Flashforge/Flashforge PPS-CF @FF G4 0.6 nozzle", "Flashforge/Flashforge PPS-CF @FF G4P", + "Flashforge/Flashforge PPS-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge PVA @FF C5", "Flashforge/Flashforge PVA @FF C5P", "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", @@ -1592,9 +1584,6 @@ "OF1W7c76": [ "Qidi/QIDI ASA-CF" ], - "OF1bQyX2": [ - "Flashforge/Flashforge PLA Matte" - ], "OF1d7c3A": [ "Snapmaker/Snapmaker ASA" ], @@ -1628,9 +1617,6 @@ "OF2Z1nT5": [ "OrcaFilamentLibrary/FilAr PETG Azul Imperial" ], - "OF2bZtyg": [ - "Flashforge/Flashforge PLA-CF" - ], "OF2hfMcG": [ "OrcaArena/Arena PLA-CF" ], @@ -1671,9 +1657,6 @@ "OF3ydJTT": [ "InfiMech/InfiMech PLA Hyper" ], - "OF41jaTh": [ - "Flashforge/Flashforge TPU-90A" - ], "OF43Raws": [ "Snapmaker/PolyTerra J1 PLA" ], @@ -1686,6 +1669,9 @@ "OF4APyxe": [ "Creality/Hyper PAHT-CF" ], + "OF4GM5qX": [ + "Ratrig/Generic ASA BigNozzle" + ], "OF4KsW72": [], "OF4Nhggz": [ "Artillery/Artillery PLA Basic+" @@ -1732,9 +1718,6 @@ "Qidi/PolyLite PLA", "Snapmaker/PolyLite PLA" ], - "OF5NQFKI": [ - "Flashforge/Flashforge PLA Galaxy" - ], "OF5NqBfC": [ "Wanhao France/YUMI PETG" ], @@ -1767,15 +1750,15 @@ "Snapmaker/Polymaker PLA Pro" ], "OF5rnhjh": [], + "OF5tX6va": [ + "Ratrig/Generic TPU BigNozzle" + ], "OF5umxxT": [ "Snapmaker/PolyLite PLA Glow" ], "OF5vgi2G": [ "OrcaFilamentLibrary/FilAr PLA-mate Azul" ], - "OF5w29Kq": [ - "Flashforge/Flashforge HS PETG" - ], "OF65InrS": [ "Snapmaker/Snapmaker TPU" ], @@ -1808,13 +1791,13 @@ "OF6kj4jI": [ "iQ/Fiberthree PACF Pro P2" ], + "OF6qAuyi": [ + "Flashforge/Flashforge PLA Matte" + ], "OF6rdQ6M": [ "Creality/Generic PPS-CF", "Tiertime/Generic PPS-CF" ], - "OF6ueBwd": [ - "Flashforge/Flashforge PLA Pro" - ], "OF70zbGS": [ "Creality/Hyper L-W PLA" ], @@ -1859,12 +1842,18 @@ "OF8GnyFU": [ "Creality/Hyper ABS" ], + "OF8GtyKJ": [ + "Flashforge/Flashforge TPU-64D" + ], "OF8Hx3Pi": [ "Cubicon/Cubicon PETG" ], "OF8Jl6NT": [ "Snapmaker/Snapmaker J1 PET" ], + "OF8O09RG": [ + "Flashforge/Flashforge HS PLA Burnt Ti" + ], "OF8Tlg47": [ "OrcaFilamentLibrary/Generic PPA-GF", "Tiertime/Generic PPA-GF" @@ -1891,9 +1880,6 @@ "OF8wE5l7": [ "Artillery/Artillery PETG Basic" ], - "OF995YXg": [ - "Flashforge/Flashforge TPU-64D" - ], "OF99UMPq": [ "BBL/COEX ABS", "OrcaFilamentLibrary/COEX ABS" @@ -1914,6 +1900,9 @@ "OF9UJOGF": [ "Anycubic/Anycubic PETG-CF" ], + "OF9cAwMK": [ + "Flashforge/Flashforge PLA-CF" + ], "OF9emAI9": [ "Ratrig/RatRig PunkFil PETG" ], @@ -1938,8 +1927,8 @@ "OFAZllAN": [ "Artillery/Artillery PLA-CF" ], - "OFAf9pJF": [ - "Flashforge/Flashforge TPU 95A" + "OFAebKg8": [ + "Flashforge/Flashforge PLA Metal" ], "OFAnyRUI": [ "OrcaFilamentLibrary/Bambu Support For PLA" @@ -1956,9 +1945,6 @@ "OFBJAdLw": [ "LH/LHS PCTG" ], - "OFBK6zAi": [ - "Flashforge/Flashforge PETG-CF" - ], "OFBLktDy": [ "Creality/Soleyin Basic PETG" ], @@ -2141,6 +2127,9 @@ "OFDxfPgH": [ "OrcaFilamentLibrary/Bambu PLA Sparkle" ], + "OFDxxTpW": [ + "Flashforge/Flashforge HS PETG" + ], "OFE0NFRh": [ "BBL/COEX TPU 60A", "OrcaFilamentLibrary/COEX TPU 60A" @@ -2148,9 +2137,6 @@ "OFEGNJD4": [ "OrcaFilamentLibrary/Bambu PLA Silk" ], - "OFEMfQsX": [ - "Flashforge/Flashforge PETG Basic" - ], "OFEOnBj6": [ "Snapmaker/Snapmaker PLA Lite" ], @@ -2190,6 +2176,9 @@ "OFEswT5W": [ "OrcaFilamentLibrary/Bambu PLA-CF" ], + "OFEvEfw5": [ + "Flashforge/Flashforge PA" + ], "OFEwRwmL": [ "Cubicon/Cubicon PLA" ], @@ -2206,8 +2195,8 @@ "OFFAWVf0": [ "Qidi/QIDI PC-ABS-FR" ], - "OFFC0VqZ": [ - "Ratrig/RatRig BigNozzle PCTG" + "OFFFg2Pf": [ + "Flashforge/Flashforge ASA Basic" ], "OFFNYwWR": [ "OrcaFilamentLibrary/Bambu PA-CF" @@ -2250,7 +2239,6 @@ "OFGVwfK0": [ "OrcaFilamentLibrary/FilAr PLA-mate Gris" ], - "OFGc282l": [], "OFGcLA5R": [ "OrcaFilamentLibrary/FilAr PLA-mate Beige" ], @@ -2273,18 +2261,15 @@ "OFGxC8gB": [ "Creality/CR-Wood" ], + "OFGxuI0n": [ + "Flashforge/Flashforge PA-CF" + ], "OFH2nN08": [ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" ], "OFH57ibH": [ "Snapmaker/Polymaker Silk PLA Family" ], - "OFH5UH6P": [ - "Flashforge/Flashforge ABS-GF" - ], - "OFH6Pjxe": [ - "Flashforge/Flashforge PLA Matte" - ], "OFH7b12v": [ "Creality/Generic PAHT-CF" ], @@ -2323,6 +2308,9 @@ "OFIE3vOf": [ "Anycubic/Anycubic PLA Matte" ], + "OFIK2H3G": [ + "Flashforge/Flashforge HS PLA" + ], "OFIKZxPF": [ "Creality/Generic PLA Wood" ], @@ -2356,13 +2344,16 @@ "OFIxOuOu": [ "Snapmaker/PolyLite PLA Starlight" ], - "OFIxitiU": [ + "OFJ3F2jm": [ "Flashforge/Flashforge PLA Basic" ], "OFJ3HRsR": [ "OrcaArena/Arena ABS" ], "OFJHBEGD": [], + "OFJJ0Ar3": [ + "Flashforge/Flashforge PLA Galaxy" + ], "OFJNeELv": [ "OrcaFilamentLibrary/FILL3D PA" ], @@ -2373,6 +2364,7 @@ "OFJQDUk3": [ "OrcaFilamentLibrary/FilAr PETG Cristal" ], + "OFJS560n": [], "OFJWKoYG": [ "iQ/Material4Print ABS Natur P1" ], @@ -2397,9 +2389,6 @@ "OFJxSqO4": [ "Wanhao France/YUMI PLA Direct Drive" ], - "OFK74HJD": [ - "Flashforge/Flashforge PLA Pro" - ], "OFK8XHPn": [ "Qidi/Overture ABS" ], @@ -2443,9 +2432,6 @@ "OrcaFilamentLibrary/Panchroma PLA Marble", "Snapmaker/Panchroma PLA Marble" ], - "OFKpQTJI": [ - "Flashforge/Flashforge TPU 65D" - ], "OFL9aRjN": [ "Snapmaker/Snapmaker PETG HF" ], @@ -2491,9 +2477,6 @@ "Elegoo/Elegoo Rapid PETG", "OrcaFilamentLibrary/Elegoo Rapid PETG" ], - "OFLYDIb8": [ - "Flashforge/Flashforge PLA Silk" - ], "OFLYDngx": [ "Qidi/Bambu PETG" ], @@ -2549,9 +2532,6 @@ "OFMDHOcT": [ "Qidi/QIDI TPU-Aero" ], - "OFMIma8C": [ - "Flashforge/Flashforge PLA Luminous" - ], "OFMK5gVo": [ "WonderMaker/WonderMaker PLA Basic" ], @@ -2575,6 +2555,9 @@ "OFMjtqTC": [ "OrcaFilamentLibrary/Bambu PLA Wood" ], + "OFMkAW6r": [ + "Flashforge/Flashforge PLA Color Change" + ], "OFMpxamb": [ "Flashforge/Flashforge PETG" ], @@ -2584,9 +2567,6 @@ "OFMuXBmO": [ "OrcaFilamentLibrary/Elas PLA Basic" ], - "OFMyLYV8": [ - "Flashforge/Flashforge PETG Transparent" - ], "OFN9fefN": [ "Cubicon/Cubicon ABS-A100" ], @@ -2605,9 +2585,6 @@ "OFNU9YIW": [ "OrcaFilamentLibrary/FilAr PETG Azul Boreal" ], - "OFNWnx2c": [ - "Flashforge/Flashforge TPU-95A" - ], "OFNemJM6": [ "OrcaFilamentLibrary/FilAr PLA Cobre" ], @@ -2682,9 +2659,6 @@ "OFPHLnoe": [ "Creality/HP-ASA" ], - "OFPQfNAf": [ - "Flashforge/Flashforge PETG Pro" - ], "OFPWPlSC": [ "OrcaFilamentLibrary/FILL3D PP" ], @@ -2764,9 +2738,6 @@ "OFQYaiGg": [ "Snapmaker/Snapmaker PET" ], - "OFQZeyZv": [ - "Flashforge/Flashforge PLA Buint Ti" - ], "OFQbjX3s": [ "OrcaFilamentLibrary/FILL3D PETG" ], @@ -2777,9 +2748,6 @@ "OFQe7sAx": [ "Anycubic/Anycubic PA6-CF" ], - "OFQiq4fb": [ - "Flashforge/Flashforge PVA" - ], "OFQyyO0l": [ "Flashforge/Polymaker CoPA" ], @@ -2833,14 +2801,17 @@ "OrcaFilamentLibrary/Panchroma PLA Silk", "Snapmaker/Panchroma PLA Silk" ], + "OFSDfduA": [ + "Flashforge/Flashforge TPU 65D" + ], "OFSa39yP": [ "Snapmaker/Snapmaker J1 PLA" ], "OFSbGfsz": [ "OrcaArena/Arena PLA Basic" ], - "OFShw1X8": [ - "Flashforge/Flashforge ABS Basic" + "OFSqIcJC": [ + "Flashforge/Flashforge TPU 95A" ], "OFSwbBWS": [], "OFT2jon4": [ @@ -2892,9 +2863,6 @@ "OFU7CKZt": [ "Volumic/Volumic ASA Ultra (Performance)" ], - "OFUCpLaL": [ - "Flashforge/FlashForge PPS" - ], "OFUF7oA4": [ "Creality/Hyper PC" ], @@ -2923,6 +2891,9 @@ "OFV5Q7j2": [ "Snapmaker/Snapmaker J1 TPE" ], + "OFV5c8hG": [ + "Flashforge/Flashforge PLA Sparkle" + ], "OFV5tNw6": [ "Elegoo/Elegoo PET-CF", "OrcaFilamentLibrary/Elegoo PET-CF" @@ -2930,6 +2901,7 @@ "OFV5wEMe": [ "Afinia/Afinia ABS" ], + "OFV8Mxqx": [], "OFVBlUFH": [], "OFVCkX5w": [ "OrcaFilamentLibrary/Bambu TPU 95A" @@ -2967,6 +2939,9 @@ "OFWTRJ1K": [ "OrcaFilamentLibrary/FilAr PLA Bronce" ], + "OFWXCbVF": [ + "Flashforge/Flashforge PC" + ], "OFWYtgCa": [ "Elegoo/Elegoo PLA Wood", "OrcaFilamentLibrary/Elegoo PLA Wood" @@ -2998,9 +2973,6 @@ "OFWgFOjn": [ "Snapmaker/Snapmaker PLA Silk" ], - "OFWnSvGu": [ - "Flashforge/Flashforge ASA-GF" - ], "OFWwF7K7": [ "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" ], @@ -3032,6 +3004,9 @@ "OFXi59OX": [ "Afinia/Afinia Value ABS" ], + "OFXiArjA": [ + "Flashforge/Flashforge PETG Pro" + ], "OFXk1emJ": [ "Artillery/Artillery PLA Basic" ], @@ -3142,10 +3117,19 @@ "Vzbot/Generic PETG", "Z-Bolt/Generic PETG" ], + "OFYTIMbj": [ + "Flashforge/Flashforge ABS-CF" + ], + "OFYYeMyQ": [ + "Flashforge/Flashforge PETG Basic" + ], "OFYd5uS3": [], "OFYezc6s": [ "FlyingBear/FlyingBear TPU" ], + "OFYfAcLY": [ + "Ratrig/Generic PCTG BigNozzle" + ], "OFYuowge": [ "FlyingBear/Other ABS", "InfiMech/Other ABS" @@ -3181,9 +3165,6 @@ "OFZtkHRq": [ "Anycubic/Anycubic PC" ], - "OFaBwRvT": [ - "Flashforge/Flashforge ASA Basic" - ], "OFaDOaNt": [ "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" ], @@ -3211,6 +3192,9 @@ "OFaYz8iE": [ "OrcaFilamentLibrary/Elas PLA Pro" ], + "OFaaddbQ": [ + "Flashforge/Flashforge PVA" + ], "OFaeIx7W": [ "iQ/Polymaker PETG Polymax black P1" ], @@ -3223,9 +3207,6 @@ "OFausr3F": [ "OrcaFilamentLibrary/FilAr PLA-mate Rosa" ], - "OFaz8VoR": [ - "Flashforge/Flashforge HIPS" - ], "OFb5EEM3": [ "Artillery/Artillery PET" ], @@ -3309,6 +3290,9 @@ "OFdkWDiy": [ "Cubicon/Cubicon PLAi21" ], + "OFdqkWtz": [ + "Flashforge/Flashforge PLA Luminous" + ], "OFdrYBmI": [ "Tiertime/Tiertime ASA" ], @@ -3321,9 +3305,6 @@ "OFe61n6v": [ "Ratrig/RatRig PunkFil PETG CF" ], - "OFe6sfXS": [ - "Flashforge/FlashForge PC" - ], "OFe8tuNb": [ "Tiertime/Tiertime PA6-CF" ], @@ -3345,9 +3326,6 @@ "OFeVzkSU": [ "Snapmaker/Fiberon PPS-GF20" ], - "OFec7Qiw": [ - "Flashforge/Flashforge PLA Sparkle" - ], "OFeelsSM": [ "Qidi/HATCHBOX PLA" ], @@ -3509,17 +3487,14 @@ "Tiertime/Generic TPU", "Vzbot/Generic TPU" ], - "OFgcryz4": [ - "Ratrig/RatRig BigNozzle ASA" - ], "OFgdaBOt": [ "Snapmaker/Polymaker Tough PLA Family" ], "OFgeM7nD": [ "Flashforge/Flashforge PA12-CF" ], - "OFgf4gZa": [ - "Flashforge/Flashforge PA" + "OFgjgN35": [ + "Flashforge/Flashforge PLA Silk" ], "OFglhKLM": [ "Qidi/QIDI PLA Rapido 0.8 nozzle" @@ -3616,9 +3591,6 @@ "Creality/Generic PLA-Silk", "Flashforge/Generic PLA-Silk" ], - "OFi7Bf0F": [ - "Flashforge/Flashforge ABS-CF" - ], "OFi90KlM": [ "Volumic/Volumic NYLON Ultra (Performance)" ], @@ -3631,6 +3603,9 @@ "OFiWaoqD": [ "OrcaFilamentLibrary/DREMC PPA-CF" ], + "OFibWuBd": [ + "Flashforge/Flashforge ABS Basic" + ], "OFilAA3b": [ "Eryone/Eryone PLA-CF" ], @@ -3646,9 +3621,6 @@ "OFitS8al": [ "Snapmaker/PolyLite PLA Neon" ], - "OFiuJSmy": [ - "Ratrig/RatRig BigNozzle PLA" - ], "OFiwEbze": [ "Volumic/PETG ESD (Performance)" ], @@ -3753,9 +3725,6 @@ "OFks6esg": [ "Creality/EN-PLA+" ], - "OFkwIWwc": [ - "Flashforge/Flashforge PLA Color Change" - ], "OFkx5MEe": [ "Artillery/Artillery PVA" ], @@ -3778,6 +3747,9 @@ "OFlSNkhc": [ "OrcaFilamentLibrary/Eolas Prints ASA" ], + "OFlgMgNM": [ + "Flashforge/Flashforge PPS" + ], "OFllmFhT": [ "Elegoo/Generic PETG PRO" ], @@ -3800,6 +3772,9 @@ "Elegoo/Elegoo PLA Basic", "OrcaFilamentLibrary/Elegoo PLA Basic" ], + "OFm4SivL": [ + "Flashforge/Flashforge PLA Pro" + ], "OFm4ysMO": [ "FlyingBear/FlyingBear ABS" ], @@ -3821,9 +3796,6 @@ "OFmKU2Ha": [ "Eryone/Eryone PLA" ], - "OFmQkb3c": [ - "Flashforge/Flashforge HS PLA Burnt Ti" - ], "OFmY0l6t": [ "Creality/Generic PLA Matte", "Elegoo/Generic PLA Matte", @@ -3835,9 +3807,6 @@ "OFmaeU4a": [ "OrcaFilamentLibrary/FilAr PLA-mate Naranja" ], - "OFmexHIS": [ - "Ratrig/RatRig BigNozzle PETG" - ], "OFmfizbq": [ "OrcaArena/Arena PLA Silk" ], @@ -3876,9 +3845,6 @@ "OFnHc3D6": [ "Creality/eSUN PLA-CF" ], - "OFnMv3W5": [ - "Flashforge/Flashforge HS PLA" - ], "OFnO4wnf": [ "Prusa/Prusament PLA" ], @@ -3915,6 +3881,9 @@ "OFnmp6rt": [ "Anycubic/Anycubic PLA+" ], + "OFnyHfcv": [ + "Ratrig/Generic ABS BigNozzle" + ], "OFo15hcT": [ "Qidi/QIDI PAHT-GF" ], @@ -3951,12 +3920,12 @@ "BBL/AliZ PETG", "OrcaFilamentLibrary/AliZ PETG" ], - "OFogbnCb": [ - "Flashforge/FlashForge PPS-CF" - ], "OFoiVqVM": [ "OrcaFilamentLibrary/Bambu PLA Basic" ], + "OFojbdhR": [ + "Flashforge/Flashforge ABS-GF" + ], "OForhBi4": [ "Cubicon/Cubicon ABSk" ], @@ -4005,6 +3974,9 @@ "Creality/Generic PPS", "Tiertime/Generic PPS" ], + "OFqFRiLb": [ + "Ratrig/Generic PLA BigNozzle" + ], "OFqGRZyH": [ "OrcaFilamentLibrary/Numakers PLA+" ], @@ -4042,15 +4014,15 @@ "OrcaFilamentLibrary/Panchroma PLA Matte", "Snapmaker/Panchroma PLA Matte" ], + "OFrZDhVt": [ + "Flashforge/Flashforge ASA-GF" + ], "OFrdZ0cK": [ "Creality/eSUN PETG+HS" ], "OFrjacXf": [ "Flashforge/Flashforge PET-CF" ], - "OFrnkURQ": [ - "Flashforge/Flashforge PLA Metal" - ], "OFrr67nG": [ "OrcaArena/Arena PC" ], @@ -4081,9 +4053,6 @@ "OFsHSVZc": [ "OrcaFilamentLibrary/Bambu Support W" ], - "OFsNJjpc": [ - "Ratrig/RatRig BigNozzle TPU" - ], "OFsP8PKH": [ "Z-Bolt/Generic ABS HT" ], @@ -4130,7 +4099,6 @@ "OFtRn8X8": [ "OrcaFilamentLibrary/FDplast SBS" ], - "OFtTYl9Q": [], "OFtefokm": [ "OrcaFilamentLibrary/FilAr PLA-mate Blanco" ], @@ -4138,9 +4106,6 @@ "BBL/COEX ASA PRIME", "OrcaFilamentLibrary/COEX ASA PRIME" ], - "OFtplX8o": [ - "Ratrig/RatRig BigNozzle ABS" - ], "OFtr8eZw": [ "OrcaFilamentLibrary/FDplast PLA" ], @@ -4165,11 +4130,8 @@ "Ratrig/Generic PCTG", "Tiertime/Generic PCTG" ], - "OFuFqYyG": [ - "Flashforge/Flashforge PAHT-CF" - ], - "OFuGRMNV": [ - "Flashforge/Flashforge PA-CF" + "OFuFEtKX": [ + "Flashforge/Flashforge PETG-CF" ], "OFuJ49uH": [ "Qidi/QIDI PETG Basic" @@ -4212,6 +4174,9 @@ "OFuxH0Uz": [ "Volumic/Volumic FLEX93 Ultra" ], + "OFvD0Qqt": [ + "Ratrig/Generic PETG BigNozzle" + ], "OFvDbkFq": [ "Prusa/Prusament PC Blend" ], @@ -4228,12 +4193,12 @@ "BBL/COEX PETG", "OrcaFilamentLibrary/COEX PETG" ], - "OFvVxvzZ": [ - "Flashforge/Flashforge PLA Metal" - ], "OFvVy7yo": [ "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" ], + "OFvaLVML": [ + "Flashforge/Flashforge HIPS" + ], "OFvdZ2bx": [ "Qidi/QIDI WOOD Rapido" ], @@ -4284,6 +4249,12 @@ "OFwhLMs4": [ "Snapmaker/Snapmaker PLA SnapSpeed" ], + "OFwjMiKL": [ + "Flashforge/Flashforge PETG Transparent" + ], + "OFwlZ7gH": [ + "Flashforge/Flashforge TPU-90A" + ], "OFwu7IAG": [ "BBL/COEX PCTG PRIME", "OrcaFilamentLibrary/COEX PCTG PRIME" @@ -4294,6 +4265,9 @@ "OFwyt1xt": [ "Eryone/Eryone ASA-CF" ], + "OFx0WlzS": [ + "Flashforge/Flashforge TPU-95A" + ], "OFx8Lmsd": [ "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" ], @@ -4306,9 +4280,6 @@ "OFxJRuVF": [ "Anycubic/Anycubic PC-GF" ], - "OFxMGIPt": [ - "Flashforge/Flashforge PPS" - ], "OFxOHhZw": [ "Elegoo/Elegoo ABS", "OrcaFilamentLibrary/Elegoo ABS" @@ -5295,20 +5266,6 @@ "FLSun/Generic PLA-CF @FLSun", "FLSun/Generic PVA @FLSun", "FLSun/Generic TPU @FLSun", - "Flashforge/FlashForge PC @FF G4 0.6 HF nozzle", - "Flashforge/FlashForge PC @FF G4 0.6 nozzle", - "Flashforge/FlashForge PC @FF G4 0.8 HF nozzle", - "Flashforge/FlashForge PC @FF G4P 0.6 HF nozzle", - "Flashforge/FlashForge PC @FF G4P 0.6 nozzle", - "Flashforge/FlashForge PC @FF G4P 0.8 HF nozzle", - "Flashforge/FlashForge PPS @FF G4 0.6 HF nozzle", - "Flashforge/FlashForge PPS @FF G4 0.6 nozzle", - "Flashforge/FlashForge PPS @FF G4 0.8 HF nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.6 HF nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.6 nozzle", - "Flashforge/FlashForge PPS @FF G4P 0.8 HF nozzle", - "Flashforge/FlashForge PPS-CF @FF G4 0.6 nozzle", - "Flashforge/FlashForge PPS-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge ABS", "Flashforge/Flashforge ABS Basic", "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", @@ -5436,10 +5393,12 @@ "Flashforge/Flashforge PA12-CF", "Flashforge/Flashforge PA6-CF", "Flashforge/Flashforge PA66-CF", - "Flashforge/Flashforge PAHT-CF @FF C5", - "Flashforge/Flashforge PAHT-CF @FF C5P", - "Flashforge/Flashforge PAHT-CF @FF G4", - "Flashforge/Flashforge PAHT-CF @FF G4P", + "Flashforge/Flashforge PC @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PC @FF G4 0.6 nozzle", + "Flashforge/Flashforge PC @FF G4 0.8 HF nozzle", + "Flashforge/Flashforge PC @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PC @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PC @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PET-CF", "Flashforge/Flashforge PET-CF @FF C5", "Flashforge/Flashforge PET-CF @FF C5P", @@ -5497,12 +5456,6 @@ "Flashforge/Flashforge PETG-CF @FF G4P", "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge PLA", - "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", "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PLA Basic @FF AD5X", @@ -5523,8 +5476,6 @@ "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PLA Basic @FF G4P HF", - "Flashforge/Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "Flashforge/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", "Flashforge/Flashforge PLA Color Change", "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", "Flashforge/Flashforge PLA Color Change @FF AD5X", @@ -5589,6 +5540,8 @@ "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Matte @FF C5", + "Flashforge/Flashforge PLA Matte @FF C5P", "Flashforge/Flashforge PLA Matte @FF G4", "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", @@ -5607,6 +5560,8 @@ "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Metal @FF C5", + "Flashforge/Flashforge PLA Metal @FF C5P", "Flashforge/Flashforge PLA Metal @FF G4", "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", @@ -5625,6 +5580,8 @@ "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", + "Flashforge/Flashforge PLA Pro @FF C5", + "Flashforge/Flashforge PLA Pro @FF C5P", "Flashforge/Flashforge PLA Pro @FF G4", "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", @@ -5688,12 +5645,20 @@ "Flashforge/Flashforge PPA-CF @FF C5P", "Flashforge/Flashforge PPA-GF", "Flashforge/Flashforge PPS @FF G4", + "Flashforge/Flashforge PPS @FF G4 0.6 HF nozzle", + "Flashforge/Flashforge PPS @FF G4 0.6 nozzle", + "Flashforge/Flashforge PPS @FF G4 0.8 HF nozzle", "Flashforge/Flashforge PPS @FF G4P", + "Flashforge/Flashforge PPS @FF G4P 0.6 HF nozzle", + "Flashforge/Flashforge PPS @FF G4P 0.6 nozzle", + "Flashforge/Flashforge PPS @FF G4P 0.8 HF nozzle", "Flashforge/Flashforge PPS-CF", "Flashforge/Flashforge PPS-CF @FF C5", "Flashforge/Flashforge PPS-CF @FF C5P", "Flashforge/Flashforge PPS-CF @FF G4", + "Flashforge/Flashforge PPS-CF @FF G4 0.6 nozzle", "Flashforge/Flashforge PPS-CF @FF G4P", + "Flashforge/Flashforge PPS-CF @FF G4P 0.6 nozzle", "Flashforge/Flashforge PVA @FF C5", "Flashforge/Flashforge PVA @FF C5P", "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", @@ -6761,22 +6726,22 @@ "RH3D/Generic PLA @E3NG v1.2S", "RH3D/Generic TPU @E3NG v1.2S", "Ratrig/Generic ABS @RatRig", + "Ratrig/Generic ABS BigNozzle @RatRig", "Ratrig/Generic ASA @RatRig", + "Ratrig/Generic ASA BigNozzle @RatRig", "Ratrig/Generic PA @RatRig", "Ratrig/Generic PA-CF @RatRig", "Ratrig/Generic PC @RatRig", "Ratrig/Generic PCTG @RatRig", + "Ratrig/Generic PCTG BigNozzle @RatRig", "Ratrig/Generic PETG @RatRig", + "Ratrig/Generic PETG BigNozzle @RatRig", "Ratrig/Generic PLA @RatRig", + "Ratrig/Generic PLA BigNozzle @RatRig", "Ratrig/Generic PLA-CF @RatRig", "Ratrig/Generic PVA @RatRig", "Ratrig/Generic TPU @RatRig", - "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/Generic TPU BigNozzle @RatRig", "Ratrig/RatRig PunkFil ABS", "Ratrig/RatRig PunkFil PETG", "Ratrig/RatRig PunkFil PETG CF", @@ -7177,13 +7142,6 @@ "QIDI ASA-CF" ] ], - "OF1bQyX2": [ - [ - "Generic", - "PLA", - "Flashforge PLA Matte" - ] - ], "OF1d7c3A": [ [ "Snapmaker", @@ -7254,13 +7212,6 @@ "FilAr PETG Azul Imperial" ] ], - "OF2bZtyg": [ - [ - "Generic", - "PLA-CF", - "Flashforge PLA-CF" - ] - ], "OF2hfMcG": [ [ "Orca Arena", @@ -7352,13 +7303,6 @@ "InfiMech PLA Hyper" ] ], - "OF41jaTh": [ - [ - "Generic", - "TPU-90A", - "Flashforge TPU-90A" - ] - ], "OF43Raws": [ [ "Polymaker", @@ -7387,6 +7331,13 @@ "Hyper PAHT-CF" ] ], + "OF4GM5qX": [ + [ + "Generic", + "ASA", + "Generic ASA BigNozzle" + ] + ], "OF4KsW72": [ [ "FilAr", @@ -7492,13 +7443,6 @@ "PolyLite PLA" ] ], - "OF5NQFKI": [ - [ - "Generic", - "PLA", - "Flashforge PLA Galaxy" - ] - ], "OF5NqBfC": [ [ "Yumi", @@ -7576,6 +7520,13 @@ "FilAr PETG" ] ], + "OF5tX6va": [ + [ + "Generic", + "TPU", + "Generic TPU BigNozzle" + ] + ], "OF5umxxT": [ [ "Polymaker", @@ -7590,13 +7541,6 @@ "FilAr PLA-mate Azul" ] ], - "OF5w29Kq": [ - [ - "Generic", - "PETG", - "Flashforge HS PETG" - ] - ], "OF65InrS": [ [ "Snapmaker", @@ -7660,6 +7604,13 @@ "Fiberthree PACF Pro P2" ] ], + "OF6qAuyi": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Matte" + ] + ], "OF6rdQ6M": [ [ "Generic", @@ -7667,13 +7618,6 @@ "Generic PPS-CF" ] ], - "OF6ueBwd": [ - [ - "Generic", - "PLA", - "Flashforge PLA Pro" - ] - ], "OF70zbGS": [ [ "Creality", @@ -7772,6 +7716,13 @@ "Hyper ABS" ] ], + "OF8GtyKJ": [ + [ + "Flashforge", + "TPU-64D", + "Flashforge TPU-64D" + ] + ], "OF8Hx3Pi": [ [ "Cubicon", @@ -7786,6 +7737,13 @@ "Snapmaker J1 PET" ] ], + "OF8O09RG": [ + [ + "Flashforge", + "PLA", + "Flashforge HS PLA Burnt Ti" + ] + ], "OF8Tlg47": [ [ "Generic", @@ -7842,13 +7800,6 @@ "Artillery PETG Basic" ] ], - "OF995YXg": [ - [ - "Generic", - "TPU-64D", - "Flashforge TPU-64D" - ] - ], "OF99UMPq": [ [ "COEX 3D", @@ -7898,6 +7849,13 @@ "Anycubic PETG-CF" ] ], + "OF9cAwMK": [ + [ + "Flashforge", + "PLA-CF", + "Flashforge PLA-CF" + ] + ], "OF9emAI9": [ [ "RatRig", @@ -7954,11 +7912,11 @@ "Artillery PLA-CF" ] ], - "OFAf9pJF": [ + "OFAebKg8": [ [ - "Generic", - "TPU", - "Flashforge TPU 95A" + "Flashforge", + "PLA", + "Flashforge PLA Metal" ] ], "OFAnyRUI": [ @@ -7996,13 +7954,6 @@ "LHS PCTG" ] ], - "OFBK6zAi": [ - [ - "Generic", - "PETG-CF", - "Flashforge PETG-CF" - ] - ], "OFBLktDy": [ [ "Creality", @@ -8297,6 +8248,13 @@ "Bambu PLA Sparkle" ] ], + "OFDxxTpW": [ + [ + "Flashforge", + "PETG", + "Flashforge HS PETG" + ] + ], "OFE0NFRh": [ [ "COEX 3D", @@ -8311,13 +8269,6 @@ "Bambu PLA Silk" ] ], - "OFEMfQsX": [ - [ - "Generic", - "PETG", - "Flashforge PETG Basic" - ] - ], "OFEOnBj6": [ [ "Snapmaker", @@ -8409,6 +8360,13 @@ "Bambu PLA-CF" ] ], + "OFEvEfw5": [ + [ + "Flashforge", + "PA", + "Flashforge PA" + ] + ], "OFEwRwmL": [ [ "Cubicon", @@ -8444,11 +8402,11 @@ "QIDI PC-ABS-FR" ] ], - "OFFC0VqZ": [ + "OFFFg2Pf": [ [ - "Generic", - "PETG", - "RatRig BigNozzle PCTG" + "Flashforge", + "ASA", + "Flashforge ASA Basic" ] ], "OFFNYwWR": [ @@ -8542,13 +8500,6 @@ "FilAr PLA-mate Gris" ] ], - "OFGc282l": [ - [ - "Generic", - "PLA", - "Flashforge PLA-SILK" - ] - ], "OFGcLA5R": [ [ "FilAr", @@ -8598,6 +8549,13 @@ "CR-Wood" ] ], + "OFGxuI0n": [ + [ + "Flashforge", + "PA-CF", + "Flashforge PA-CF" + ] + ], "OFH2nN08": [ [ "Eolas Prints", @@ -8612,20 +8570,6 @@ "Polymaker Silk PLA Family" ] ], - "OFH5UH6P": [ - [ - "Generic", - "ABS-GF", - "Flashforge ABS-GF" - ] - ], - "OFH6Pjxe": [ - [ - "Generic", - "PLA", - "Flashforge PLA Matte" - ] - ], "OFH7b12v": [ [ "Generic", @@ -8710,6 +8654,13 @@ "Anycubic PLA Matte" ] ], + "OFIK2H3G": [ + [ + "Flashforge", + "PLA", + "Flashforge HS PLA" + ] + ], "OFIKZxPF": [ [ "Generic", @@ -8787,9 +8738,9 @@ "PolyLite PLA Starlight" ] ], - "OFIxitiU": [ + "OFJ3F2jm": [ [ - "Generic", + "Flashforge", "PLA", "Flashforge PLA Basic" ] @@ -8808,6 +8759,13 @@ "DREMC PLA+ HS" ] ], + "OFJJ0Ar3": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Galaxy" + ] + ], "OFJNeELv": [ [ "FILL3D", @@ -8829,6 +8787,13 @@ "FilAr PETG Cristal" ] ], + "OFJS560n": [ + [ + "Flashforge", + "ASA", + "Flashforge ASA" + ] + ], "OFJWKoYG": [ [ "iQ Materials", @@ -8885,13 +8850,6 @@ "YUMI PLA Direct Drive" ] ], - "OFK74HJD": [ - [ - "Generic", - "PLA", - "Flashforge PLA Pro" - ] - ], "OFK8XHPn": [ [ "Overture", @@ -8990,13 +8948,6 @@ "Panchroma PLA Marble" ] ], - "OFKpQTJI": [ - [ - "Generic", - "TPU", - "Flashforge TPU 65D" - ] - ], "OFL9aRjN": [ [ "Snapmaker", @@ -9060,13 +9011,6 @@ "Elegoo Rapid PETG" ] ], - "OFLYDIb8": [ - [ - "Generic", - "PLA", - "Flashforge PLA Silk" - ] - ], "OFLYDngx": [ [ "Bambu Lab", @@ -9151,13 +9095,6 @@ "QIDI TPU-Aero" ] ], - "OFMIma8C": [ - [ - "Generic", - "PLA", - "Flashforge PLA Luminous" - ] - ], "OFMK5gVo": [ [ "WonderMaker", @@ -9207,6 +9144,13 @@ "Bambu PLA Wood" ] ], + "OFMkAW6r": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Color Change" + ] + ], "OFMpxamb": [ [ "Flashforge", @@ -9228,13 +9172,6 @@ "Elas PLA Basic" ] ], - "OFMyLYV8": [ - [ - "Generic", - "PETG", - "Flashforge PETG Transparent" - ] - ], "OFN9fefN": [ [ "Cubicon", @@ -9277,13 +9214,6 @@ "FilAr PETG Azul Boreal" ] ], - "OFNWnx2c": [ - [ - "Generic", - "TPU-95A", - "Flashforge TPU-95A" - ] - ], "OFNemJM6": [ [ "FilAr", @@ -9445,13 +9375,6 @@ "HP-ASA" ] ], - "OFPQfNAf": [ - [ - "Generic", - "PETG", - "Flashforge PETG Pro" - ] - ], "OFPWPlSC": [ [ "FILL3D", @@ -9592,13 +9515,6 @@ "Snapmaker PET" ] ], - "OFQZeyZv": [ - [ - "Generic", - "PLA", - "Flashforge PLA Buint Ti" - ] - ], "OFQbjX3s": [ [ "FILL3D", @@ -9620,13 +9536,6 @@ "Anycubic PA6-CF" ] ], - "OFQiq4fb": [ - [ - "Generic", - "PVA", - "Flashforge PVA" - ] - ], "OFQyyO0l": [ [ "Polymaker", @@ -9746,6 +9655,13 @@ "Panchroma PLA Silk" ] ], + "OFSDfduA": [ + [ + "Flashforge", + "TPU", + "Flashforge TPU 65D" + ] + ], "OFSa39yP": [ [ "Snapmaker", @@ -9760,11 +9676,11 @@ "Arena PLA Basic" ] ], - "OFShw1X8": [ + "OFSqIcJC": [ [ - "Generic", - "ABS", - "Flashforge ABS Basic" + "Flashforge", + "TPU", + "Flashforge TPU 95A" ] ], "OFSwbBWS": [ @@ -9886,13 +9802,6 @@ "Volumic ASA Ultra (Performance)" ] ], - "OFUCpLaL": [ - [ - "Generic", - "PPS", - "FlashForge PPS" - ] - ], "OFUF7oA4": [ [ "Creality", @@ -9956,6 +9865,13 @@ "Snapmaker J1 TPE" ] ], + "OFV5c8hG": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Sparkle" + ] + ], "OFV5tNw6": [ [ "Elegoo", @@ -9970,6 +9886,13 @@ "Afinia ABS" ] ], + "OFV8Mxqx": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA-SILK" + ] + ], "OFVBlUFH": [ [ "DREMC", @@ -10054,6 +9977,13 @@ "FilAr PLA Bronce" ] ], + "OFWXCbVF": [ + [ + "Flashforge", + "PC", + "Flashforge PC" + ] + ], "OFWYtgCa": [ [ "Elegoo", @@ -10089,13 +10019,6 @@ "Snapmaker PLA Silk" ] ], - "OFWnSvGu": [ - [ - "Generic", - "ASA-GF", - "Flashforge ASA-GF" - ] - ], "OFWwF7K7": [ [ "FilAr", @@ -10166,6 +10089,13 @@ "Afinia Value ABS" ] ], + "OFXiArjA": [ + [ + "Flashforge", + "PETG", + "Flashforge PETG Pro" + ] + ], "OFXk1emJ": [ [ "Artillery", @@ -10278,6 +10208,20 @@ "Generic PETG" ] ], + "OFYTIMbj": [ + [ + "Flashforge", + "ABS-CF", + "Flashforge ABS-CF" + ] + ], + "OFYYeMyQ": [ + [ + "Flashforge", + "PETG", + "Flashforge PETG Basic" + ] + ], "OFYd5uS3": [ [ "DREMC", @@ -10292,6 +10236,13 @@ "FlyingBear TPU" ] ], + "OFYfAcLY": [ + [ + "Generic", + "PETG", + "Generic PCTG BigNozzle" + ] + ], "OFYuowge": [ [ "Other", @@ -10369,13 +10320,6 @@ "Anycubic PC" ] ], - "OFaBwRvT": [ - [ - "Generic", - "ASA", - "Flashforge ASA Basic" - ] - ], "OFaDOaNt": [ [ "FilAr", @@ -10439,6 +10383,13 @@ "Elas PLA Pro" ] ], + "OFaaddbQ": [ + [ + "Flashforge", + "PVA", + "Flashforge PVA" + ] + ], "OFaeIx7W": [ [ "iQ Materials", @@ -10467,13 +10418,6 @@ "FilAr PLA-mate Rosa" ] ], - "OFaz8VoR": [ - [ - "Generic", - "HIPS", - "Flashforge HIPS" - ] - ], "OFb5EEM3": [ [ "Artillery", @@ -10656,6 +10600,13 @@ "Cubicon PLAi21" ] ], + "OFdqkWtz": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Luminous" + ] + ], "OFdrYBmI": [ [ "Tiertime", @@ -10684,13 +10635,6 @@ "RatRig PunkFil PETG CF" ] ], - "OFe6sfXS": [ - [ - "Generic", - "PC", - "FlashForge PC" - ] - ], "OFe8tuNb": [ [ "Tiertime", @@ -10740,13 +10684,6 @@ "Fiberon PPS-GF20" ] ], - "OFec7Qiw": [ - [ - "Generic", - "PLA", - "Flashforge PLA Sparkle" - ] - ], "OFeelsSM": [ [ "HATCHBOX", @@ -11006,13 +10943,6 @@ "Generic TPU" ] ], - "OFgcryz4": [ - [ - "Generic", - "ASA", - "RatRig BigNozzle ASA" - ] - ], "OFgdaBOt": [ [ "Polymaker", @@ -11027,11 +10957,11 @@ "Flashforge PA12-CF" ] ], - "OFgf4gZa": [ + "OFgjgN35": [ [ - "Generic", - "PA", - "Flashforge PA" + "Flashforge", + "PLA", + "Flashforge PLA Silk" ] ], "OFglhKLM": [ @@ -11237,13 +11167,6 @@ "Generic PLA-Silk" ] ], - "OFi7Bf0F": [ - [ - "Generic", - "ABS-CF", - "Flashforge ABS-CF" - ] - ], "OFi90KlM": [ [ "Volumic", @@ -11272,6 +11195,13 @@ "DREMC PPA-CF" ] ], + "OFibWuBd": [ + [ + "Flashforge", + "ABS", + "Flashforge ABS Basic" + ] + ], "OFilAA3b": [ [ "Eryone", @@ -11307,13 +11237,6 @@ "PolyLite PLA Neon" ] ], - "OFiuJSmy": [ - [ - "Generic", - "PLA", - "RatRig BigNozzle PLA" - ] - ], "OFiwEbze": [ [ "Volumic", @@ -11545,13 +11468,6 @@ "EN-PLA+" ] ], - "OFkwIWwc": [ - [ - "Generic", - "PLA", - "Flashforge PLA Color Change" - ] - ], "OFkx5MEe": [ [ "Artillery", @@ -11601,6 +11517,13 @@ "Eolas Prints ASA" ] ], + "OFlgMgNM": [ + [ + "Flashforge", + "PPS", + "Flashforge PPS" + ] + ], "OFllmFhT": [ [ "Generic", @@ -11643,6 +11566,13 @@ "Elegoo PLA Basic" ] ], + "OFm4SivL": [ + [ + "Flashforge", + "PLA", + "Flashforge PLA Pro" + ] + ], "OFm4ysMO": [ [ "FlyingBear", @@ -11692,13 +11622,6 @@ "Eryone PLA" ] ], - "OFmQkb3c": [ - [ - "Generic", - "PLA", - "Flashforge HS PLA Burnt Ti" - ] - ], "OFmY0l6t": [ [ "Generic", @@ -11720,13 +11643,6 @@ "FilAr PLA-mate Naranja" ] ], - "OFmexHIS": [ - [ - "Generic", - "PETG", - "RatRig BigNozzle PETG" - ] - ], "OFmfizbq": [ [ "Orca Arena", @@ -11797,13 +11713,6 @@ "eSUN PLA-CF" ] ], - "OFnMv3W5": [ - [ - "Generic", - "PLA", - "Flashforge HS PLA" - ] - ], "OFnO4wnf": [ [ "Prusa Polymers", @@ -11888,6 +11797,13 @@ "Anycubic PLA+" ] ], + "OFnyHfcv": [ + [ + "Generic", + "ABS", + "Generic ABS BigNozzle" + ] + ], "OFo15hcT": [ [ "QIDI", @@ -11944,13 +11860,6 @@ "AliZ PETG" ] ], - "OFogbnCb": [ - [ - "Generic", - "PPS-CF", - "FlashForge PPS-CF" - ] - ], "OFoiVqVM": [ [ "Bambu Lab", @@ -11958,6 +11867,13 @@ "Bambu PLA Basic" ] ], + "OFojbdhR": [ + [ + "Flashforge", + "ABS-GF", + "Flashforge ABS-GF" + ] + ], "OForhBi4": [ [ "Cubicon", @@ -12063,6 +11979,13 @@ "Generic PPS" ] ], + "OFqFRiLb": [ + [ + "Generic", + "PLA", + "Generic PLA BigNozzle" + ] + ], "OFqGRZyH": [ [ "Numakers", @@ -12140,6 +12063,13 @@ "Panchroma PLA Matte" ] ], + "OFrZDhVt": [ + [ + "Flashforge", + "ASA-GF", + "Flashforge ASA-GF" + ] + ], "OFrdZ0cK": [ [ "eSUN", @@ -12154,13 +12084,6 @@ "Flashforge PET-CF" ] ], - "OFrnkURQ": [ - [ - "Generic", - "PLA", - "Flashforge PLA Metal" - ] - ], "OFrr67nG": [ [ "Orca Arena", @@ -12217,13 +12140,6 @@ "Bambu Support W" ] ], - "OFsNJjpc": [ - [ - "Generic", - "TPU", - "RatRig BigNozzle TPU" - ] - ], "OFsP8PKH": [ [ "Generic", @@ -12329,13 +12245,6 @@ "FDplast SBS" ] ], - "OFtTYl9Q": [ - [ - "Generic", - "ASA", - "Flashforge ASA" - ] - ], "OFtefokm": [ [ "FilAr", @@ -12350,13 +12259,6 @@ "COEX ASA PRIME" ] ], - "OFtplX8o": [ - [ - "Generic", - "ABS", - "RatRig BigNozzle ABS" - ] - ], "OFtr8eZw": [ [ "FDplast", @@ -12406,18 +12308,11 @@ "Generic PCTG" ] ], - "OFuFqYyG": [ + "OFuFEtKX": [ [ - "Generic", - "PAHT-CF", - "Flashforge PAHT-CF" - ] - ], - "OFuGRMNV": [ - [ - "Generic", - "PA-CF", - "Flashforge PA-CF" + "Flashforge", + "PETG-CF", + "Flashforge PETG-CF" ] ], "OFuJ49uH": [ @@ -12511,6 +12406,13 @@ "Volumic FLEX93 Ultra" ] ], + "OFvD0Qqt": [ + [ + "Generic", + "PETG", + "Generic PETG BigNozzle" + ] + ], "OFvDbkFq": [ [ "Prusa Polymers", @@ -12546,13 +12448,6 @@ "COEX PETG" ] ], - "OFvVxvzZ": [ - [ - "Generic", - "PLA", - "Flashforge PLA Metal" - ] - ], "OFvVy7yo": [ [ "Eolas Prints", @@ -12560,6 +12455,13 @@ "Eolas Prints TPU D60 UV Resistant" ] ], + "OFvaLVML": [ + [ + "Flashforge", + "HIPS", + "Flashforge HIPS" + ] + ], "OFvdZ2bx": [ [ "QIDI", @@ -12672,6 +12574,20 @@ "Snapmaker PLA SnapSpeed" ] ], + "OFwjMiKL": [ + [ + "Flashforge", + "PETG", + "Flashforge PETG Transparent" + ] + ], + "OFwlZ7gH": [ + [ + "Flashforge", + "TPU-90A", + "Flashforge TPU-90A" + ] + ], "OFwu7IAG": [ [ "COEX 3D", @@ -12693,6 +12609,13 @@ "Eryone ASA-CF" ] ], + "OFx0WlzS": [ + [ + "Flashforge", + "TPU-95A", + "Flashforge TPU-95A" + ] + ], "OFx8Lmsd": [ [ "Eolas Prints", @@ -12721,13 +12644,6 @@ "Anycubic PC-GF" ] ], - "OFxMGIPt": [ - [ - "Generic", - "PPS", - "Flashforge PPS" - ] - ], "OFxOHhZw": [ [ "Elegoo", From afa806da182ae5570d2cc3859993ce30b56a532a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 1 Sep 2026 23:45:55 +0800 Subject: [PATCH 080/208] Update Dremel and Ratrig filament profiles; remove deprecated entries and adjust versioning --- resources/profiles/Dremel.json | 6 +- .../Generic PLA @Dremel 3D20 all.json | 5 +- .../Generic PLA @Dremel 3D40 all.json | 5 +- .../Generic PLA @Dremel 3D45 all.json | 11 +- .../Dremel/filament/Generic PLA @Dremel.json | 24 --- .../Dremel/machine/fdm_dremel_common.json | 3 - resources/profiles/Ratrig.json | 38 +---- .../Generic PCTG BigNozzle @RatRig.json | 4 +- .../Ratrig/filament/fdm_filament_abs.json | 88 ----------- .../Ratrig/filament/fdm_filament_asa.json | 88 ----------- .../Ratrig/filament/fdm_filament_common.json | 141 ------------------ .../Ratrig/filament/fdm_filament_pa.json | 85 ----------- .../Ratrig/filament/fdm_filament_pc.json | 88 ----------- .../Ratrig/filament/fdm_filament_pet.json | 82 ---------- .../Ratrig/filament/fdm_filament_pla.json | 94 ------------ .../Ratrig/filament/fdm_filament_pva.json | 100 ------------- .../Ratrig/filament/fdm_filament_tpu.json | 88 ----------- resources/profiles/retired_filament_ids.json | 6 + scripts/filament_id_snapshot.json | 21 ++- 19 files changed, 38 insertions(+), 939 deletions(-) delete mode 100644 resources/profiles/Dremel/filament/Generic PLA @Dremel.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_abs.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_asa.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_common.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_pa.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_pc.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_pet.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_pla.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_pva.json delete mode 100644 resources/profiles/Ratrig/filament/fdm_filament_tpu.json diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index 951763b563..3d804f6a1b 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ @@ -88,10 +88,6 @@ "name": "fdm_filament_pla", "sub_path": "filament/fdm_filament_pla.json" }, - { - "name": "Generic PLA @Dremel", - "sub_path": "filament/Generic PLA @Dremel.json" - }, { "name": "Generic PLA @Dremel 3D20 all", "sub_path": "filament/Generic PLA @Dremel 3D20 all.json" diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json index e38769a288..2dbcc6184e 100644 --- a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json @@ -1,12 +1,15 @@ { "type": "filament", "name": "Generic PLA @Dremel 3D20 all", - "inherits": "Generic PLA @Dremel", + "inherits": "fdm_filament_pla", "renamed_from": "Dremel Generic PLA @3D20 all;Dremel Generic PLA 3D20 all", "from": "system", "setting_id": "UggXEvCig0b6S8Vx", "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], "filament_max_volumetric_speed": [ "9" ], diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json index 4c7afbe819..03704ce5e9 100644 --- a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json @@ -1,12 +1,15 @@ { "type": "filament", "name": "Generic PLA @Dremel 3D40 all", - "inherits": "Generic PLA @Dremel", + "inherits": "fdm_filament_pla", "renamed_from": "Dremel Generic PLA @3D40 all;Dremel Generic PLA 3D40 all", "from": "system", "setting_id": "VUOtsWfy46cvAyBT", "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], "filament_max_volumetric_speed": [ "9" ], diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json index a40cebf06d..78f747e0f9 100644 --- a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json @@ -1,12 +1,21 @@ { "type": "filament", "name": "Generic PLA @Dremel 3D45 all", - "inherits": "Generic PLA @Dremel", + "inherits": "fdm_filament_pla", "renamed_from": "Dremel Generic PLA @3D45 all;Dremel Generic PLA 3D45 all", "from": "system", "setting_id": "qEeBb3Pix2iDT3SD", "filament_id": "OFDSrzZ8", "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], "slow_down_min_speed": "10", "close_fan_the_first_x_layers": "3", "filament_loading_speed_start": "3", diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel.json deleted file mode 100644 index 9cf4e162f0..0000000000 --- a/resources/profiles/Dremel/filament/Generic PLA @Dremel.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA @Dremel", - "inherits": "fdm_filament_pla", - "renamed_from": "Dremel Generic PLA", - "from": "system", - "setting_id": "jYydSWbyE3JzoKnQ", - "filament_id": "OFDSrzZ8", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Dremel 3D45 0.4 nozzle", - "Dremel 3D40 0.4 nozzle", - "Dremel 3D20 0.4 nozzle" - ] -} diff --git a/resources/profiles/Dremel/machine/fdm_dremel_common.json b/resources/profiles/Dremel/machine/fdm_dremel_common.json index 6f7504f9fa..0dae7eb9ea 100644 --- a/resources/profiles/Dremel/machine/fdm_dremel_common.json +++ b/resources/profiles/Dremel/machine/fdm_dremel_common.json @@ -123,9 +123,6 @@ "wipe": [ "1" ], - "default_filament_profile": [ - "Generic PLA @Dremel" - ], "bed_exclude_area": [ "0x0" ], diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 710554df5a..a2b792ebdd 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.04", + "version": "02.04.00.05", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -276,42 +276,6 @@ } ], "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, { "name": "Generic ABS BigNozzle @RatRig", "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" diff --git a/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json index 0592709a82..2e47eb6765 100644 --- a/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json +++ b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json @@ -1,11 +1,11 @@ { "type": "filament", "name": "Generic PCTG BigNozzle @RatRig", - "inherits": "fdm_filament_pet", + "inherits": "fdm_filament_pctg", "renamed_from": "RatRig BigNozzle PCTG", "from": "system", "setting_id": "HPaol79uY9NdhasQ", - "filament_id": "OFYfAcLY", + "filament_id": "OFXW4CDh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Ratrig/filament/fdm_filament_abs.json b/resources/profiles/Ratrig/filament/fdm_filament_abs.json deleted file mode 100644 index 6232c6bf6d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_abs.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_abs", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "105" - ], - "eng_plate_temp": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "textured_plate_temp": [ - "105" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "textured_plate_temp_initial_layer": [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_asa.json b/resources/profiles/Ratrig/filament/fdm_filament_asa.json deleted file mode 100644 index 0b3ca804e8..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_asa.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_asa", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "105" - ], - "eng_plate_temp": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "textured_plate_temp": [ - "105" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "textured_plate_temp_initial_layer": [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ASA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_common.json b/resources/profiles/Ratrig/filament/fdm_filament_common.json deleted file mode 100644 index ab5b8305a6..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_common.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "overhang_fan_threshold": [ - "95%" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "0" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "bed_type": [ - "Cool Plate" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "full_fan_speed_layer": [ - "0" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "35" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "nozzle_temperature": [ - "200" - ], - "temperature_vitrification": [ - "100" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pa.json b/resources/profiles/Ratrig/filament/fdm_filament_pa.json deleted file mode 100644 index 8b67678f9b..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pa.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pa", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "textured_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "4" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_type": [ - "PA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "0" - ], - "overhang_fan_speed": [ - "30" - ], - "nozzle_temperature": [ - "290" - ], - "temperature_vitrification": [ - "108" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pc.json b/resources/profiles/Ratrig/filament/fdm_filament_pc.json deleted file mode 100644 index ec102017fc..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pc", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "110" - ], - "hot_plate_temp": [ - "110" - ], - "textured_plate_temp": [ - "110" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "temperature_vitrification": [ - "140" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pet.json b/resources/profiles/Ratrig/filament/fdm_filament_pet.json deleted file mode 100644 index d056aa4e88..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pet.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "255" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pla.json b/resources/profiles/Ratrig/filament/fdm_filament_pla.json deleted file mode 100644 index ef1a11694d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pla.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pla", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PLA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pva.json b/resources/profiles/Ratrig/filament/fdm_filament_pva.json deleted file mode 100644 index 860cba12e1..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pva.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pva", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "textured_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_soluble": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "50" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_tpu.json b/resources/profiles/Ratrig/filament/fdm_filament_tpu.json deleted file mode 100644 index d781fc067d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_tpu.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_tpu", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "30" - ], - "eng_plate_temp": [ - "30" - ], - "hot_plate_temp": [ - "35" - ], - "textured_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "30" - ], - "eng_plate_temp_initial_layer": [ - "30" - ], - "hot_plate_temp_initial_layer": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "TPU" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "filament_retraction_length": [ - "0.4" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json index 0fb50e0560..7f5dda5901 100644 --- a/resources/profiles/retired_filament_ids.json +++ b/resources/profiles/retired_filament_ids.json @@ -3550,6 +3550,12 @@ ], "successor": "OFY9muEs" }, + "OFYfAcLY": { + "claims": [ + "Ratrig/Generic PCTG BigNozzle" + ], + "successor": "OFXW4CDh" + }, "OFYl0c8v": { "claims": [ "Flashforge/Flashforge Generic HIPS" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 5eedb85a5e..c9966fc8d6 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -3001,6 +3001,9 @@ "OFXTPuqV": [ "OrcaFilamentLibrary/Elas PETG Basic" ], + "OFXW4CDh": [ + "Ratrig/Generic PCTG BigNozzle" + ], "OFXi59OX": [ "Afinia/Afinia Value ABS" ], @@ -3127,9 +3130,6 @@ "OFYezc6s": [ "FlyingBear/FlyingBear TPU" ], - "OFYfAcLY": [ - "Ratrig/Generic PCTG BigNozzle" - ], "OFYuowge": [ "FlyingBear/Other ABS", "InfiMech/Other ABS" @@ -5227,7 +5227,6 @@ "DeltaMaker/Generic PETG @DeltaMaker", "DeltaMaker/Generic PLA @DeltaMaker", "DeltaMaker/Generic TPU @DeltaMaker", - "Dremel/Generic PLA @Dremel", "Dremel/Generic PLA @Dremel 3D20 all", "Dremel/Generic PLA @Dremel 3D40 all", "Dremel/Generic PLA @Dremel 3D45 all", @@ -10082,6 +10081,13 @@ "Elas PETG Basic" ] ], + "OFXW4CDh": [ + [ + "Generic", + "PCTG", + "Generic PCTG BigNozzle" + ] + ], "OFXi59OX": [ [ "Afinia", @@ -10236,13 +10242,6 @@ "FlyingBear TPU" ] ], - "OFYfAcLY": [ - [ - "Generic", - "PETG", - "Generic PCTG BigNozzle" - ] - ], "OFYuowge": [ [ "Other", From 44a617a40d475ac8bf1b3d6ce0e7dffa866a9900 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 2 Sep 2026 02:42:30 +0800 Subject: [PATCH 081/208] more fixes --- resources/profiles/Creality.json | 2 +- resources/profiles/Creality/machine/Creality CR-10 SE.json | 2 +- resources/profiles/Creality/machine/Creality K1 Max.json | 2 +- .../profiles/Creality/machine/Creality K1 Max_CFS-C.json | 2 +- resources/profiles/Creality/machine/Creality K1.json | 2 +- resources/profiles/Creality/machine/Creality K1_CFS-C.json | 2 +- resources/profiles/Flashforge.json | 2 +- .../Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json | 6 ++++++ .../Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json | 6 ++++++ .../Flashforge/filament/FusRock PAHT-CF @FF G4.json | 6 ++++++ .../Flashforge/filament/FusRock PAHT-CF @FF G4P.json | 6 ++++++ resources/profiles/Z-Bolt.json | 2 +- 12 files changed, 32 insertions(+), 8 deletions(-) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 29399dcade..a043d51433 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.77", + "version": "02.03.02.78", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE.json b/resources/profiles/Creality/machine/Creality CR-10 SE.json index bd39ea5ff1..56af1ec8a6 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10se_buildplate_model.stl", "bed_texture": "creality_cr10se_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PETG @Creality;Generic TPU @Creality;Generic ABS @Creality" + "default_materials": "Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PETG @Creality;Generic TPU @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1 Max.json b/resources/profiles/Creality/machine/Creality K1 Max.json index 3acfd1ec99..5680990e70 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max.json +++ b/resources/profiles/Creality/machine/Creality K1 Max.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1max_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json index 3016f2de6c..012ad881ea 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_Max_CFS_C", - "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1.json b/resources/profiles/Creality/machine/Creality K1.json index 60cd9142f1..a70046460a 100644 --- a/resources/profiles/Creality/machine/Creality K1.json +++ b/resources/profiles/Creality/machine/Creality K1.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C.json b/resources/profiles/Creality/machine/Creality K1_CFS-C.json index d0d7124dd2..c5986ae635 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_CFS_C", - "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA @Creality HF;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 11b86ecc8d..e754ca729a 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.06", + "version": "02.04.00.07", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index d06a93931d..22b1a35dcb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -67,6 +67,12 @@ "nozzle_temperature_initial_layer": [ "205" ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], "overhang_fan_threshold": [ "25%" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index 13d1358b71..dccc672613 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -67,6 +67,12 @@ "nozzle_temperature_initial_layer": [ "205" ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], "overhang_fan_threshold": [ "25%" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index 22ea704736..2fb2e00e21 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -10,9 +10,15 @@ "filament_vendor": [ "FusRock" ], + "activate_chamber_temp_control": [ + "1" + ], "additional_cooling_fan_speed": [ "0" ], + "chamber_temperature": [ + "60" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 5156df9505..263323a60a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -10,9 +10,15 @@ "filament_vendor": [ "FusRock" ], + "activate_chamber_temp_control": [ + "1" + ], "additional_cooling_fan_speed": [ "0" ], + "chamber_temperature": [ + "60" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Z-Bolt.json b/resources/profiles/Z-Bolt.json index 8e3d3a0cd5..aa092cc8b2 100644 --- a/resources/profiles/Z-Bolt.json +++ b/resources/profiles/Z-Bolt.json @@ -1,7 +1,7 @@ { "name": "Z-Bolt", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Z-Bolt configurations", "machine_model_list": [ From f85902b0cea6f741b31dd1c488ce1a894eb11ec8 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 2 Sep 2026 10:45:47 +0800 Subject: [PATCH 082/208] Preserving state of publish dialog --- src/slic3r/GUI/MainFrame.cpp | 8 ++- src/slic3r/GUI/Plater.cpp | 38 ++++++++++ src/slic3r/GUI/Plater.hpp | 4 ++ src/slic3r/GUI/PublishSettingsDialog.cpp | 91 +++++++++++++++++++++++- src/slic3r/GUI/PublishSettingsDialog.hpp | 15 +++- 5 files changed, 153 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 7d73d884b0..87e1271678 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1744,9 +1744,15 @@ void MainFrame::publish_project() { if (m_plater == nullptr) return; - PublishSettingsDialog dlg(this); + // Seed the dialog from the session selection (a remembered state or a freshly loaded + // published 3MF); a null pointer means "fresh", keeping the dirty defaults. + std::vector pending_keys; + std::vector pending_material; + const bool has_prior = m_plater->get_pending_published(pending_keys, pending_material); + PublishSettingsDialog dlg(this, has_prior ? &pending_keys : nullptr, has_prior ? &pending_material : nullptr); if (dlg.ShowModal() != wxID_OK) return; + m_plater->set_pending_published(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); m_plater->export_published_3mf(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 7a3789bc96..b5233b123b 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6750,6 +6750,12 @@ struct Plater::priv SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr; PublishDialog* m_publish_dlg = nullptr; + // Session-level stash of the last published selection. Written on publish and on + // loading a published 3MF; read when the Publish dialog is opened. + bool m_has_pending_published{false}; + std::vector m_pending_published_keys; + std::vector m_pending_material_keys; + // Data Slic3r::DynamicPrintConfig* config; // FIXME: leak? Slic3r::Print fff_print; @@ -9087,6 +9093,15 @@ std::vector Plater::priv::load_files(const std::vector& input_ NotificationManager::NotificationLevel::WarningNotificationLevel); } + // Remember the imported published selection so the Publish dialog is + // pre-seeded with the file's settings. Stored after the load so any + // per-slot relocations are already reflected in material_keys. + if (published_config.published) { + this->m_has_pending_published = true; + this->m_pending_published_keys = published_config.published_keys; + this->m_pending_material_keys = published_config.material_keys; + } + ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); if (bed_type_opt != nullptr) { BedType bed_type = (BedType) bed_type_opt->getInt(); @@ -10290,6 +10305,11 @@ void Plater::priv::reset(bool apply_presets_change) clear_warnings(); + // A new project must not inherit the previous project's published selection (Feature A/B). + m_has_pending_published = false; + m_pending_published_keys.clear(); + m_pending_material_keys.clear(); + set_project_filename(""); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: empty"; @@ -18411,6 +18431,24 @@ int Plater::export_published_3mf(const std::vector& published_keys, return wxID_YES; } +bool Plater::get_pending_published(std::vector& out_keys, + std::vector& out_material) const +{ + if (!p->m_has_pending_published) + return false; + out_keys = p->m_pending_published_keys; + out_material = p->m_pending_material_keys; + return true; +} + +void Plater::set_pending_published(const std::vector& published_keys, + const std::vector& material_keys) +{ + p->m_has_pending_published = true; + p->m_pending_published_keys = published_keys; + p->m_pending_material_keys = material_keys; +} + Preset* get_printer_preset(const MachineObject* obj) { if (!obj) diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 2f83da1cb9..26cd06978b 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -520,6 +520,10 @@ public: // Export a "published" 3MF embedding the author-selected settings in the file metadata; a // pure export that leaves the in-memory project untouched. int export_published_3mf(const std::vector& published_keys, const std::vector& material_keys); + // Session-level stash of the last published selection, seeded into the Publish dialog on + // open and written on publish or on loading a published 3MF + bool get_pending_published(std::vector& out_keys, std::vector& out_material) const; + void set_pending_published(const std::vector& published_keys, const std::vector& material_keys); static TriangleMesh combine_mesh_fff(const ModelObject& mo, int instance_id, std::function notify_func = {}); void export_stl(bool extended = false, bool selection_only = false, bool multi_stls = false, FileType file_type = FT_STL); //BBS: remove amf diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 0e8c47b799..d4d9b5d5d2 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -434,7 +434,8 @@ PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_ return spec; } -PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) +PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent, const std::vector* published_keys, + const std::vector* material_keys) : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), wxID_ANY, _L("Publish 3MF..."), @@ -522,6 +523,11 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent) build_option_model(); + // Seed from a remembered session selection or a freshly loaded published 3MF (authoritative). + if (published_keys != nullptr || material_keys != nullptr) + apply_selection(published_keys != nullptr ? *published_keys : std::vector(), + material_keys != nullptr ? *material_keys : std::vector()); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { @@ -1691,6 +1697,89 @@ void PublishSettingsDialog::show_menu(wxMouseEvent& evt) PopupMenu(&m, local_pos); } +void PublishSettingsDialog::apply_selection(const std::vector& published_keys, + const std::vector& material_keys) +{ + // The supplied selection is authoritative: clear the dirty-default pre-check first so a + // dirty key the user deselected stays off, then re-select exactly what the selection names. + for (Row& row : m_rows) + if (row.check != nullptr) + row.check->SetValue(false); + for (Category& cat : m_categories) { + if (cat.section != Section::Material) + continue; + if (cat.enable_check != nullptr) + cat.enable_check->SetValue(false); + if (cat.full_check != nullptr) + cat.full_check->SetValue(false); + } + + // Print / printer rows: match by exact row key (the full "#N" opt_id where present). + for (const std::string& key : published_keys) + for (Row& row : m_rows) + if ((row.section == Section::Print || row.section == Section::Printer) && row.check != nullptr && row.key == key) { + row.check->SetValue(true); + break; + } + + // Per-slot material selections, applied positionally by slot. + for (const Slic3r::PublishedMaterialEntry& entry : material_keys) { + if (entry.slot < 0) + continue; + bool entry_mixed = false; + for (const std::string& k : entry.keys) + if (publish_mixed_keys().count(publish_base_key(k)) != 0) { + entry_mixed = true; + break; + } + size_t cat_idx = size_t(-1); + for (size_t c = 0; c < m_categories.size(); ++c) { + const Category& cat = m_categories[c]; + if (cat.section != Section::Material || cat.is_mixed != entry_mixed || cat.filament_slot != size_t(entry.slot)) + continue; + cat_idx = c; + break; + } + if (cat_idx == size_t(-1)) + continue; // slot not present in the receiver (out of range / skipped) + Category& cat = m_categories[cat_idx]; + if (cat.enable_check != nullptr) { + cat.enable_check->SetValue(true); + on_enable_toggle(cat_idx); + } + if (entry.full && cat.full_check != nullptr) { + cat.full_check->SetValue(true); + on_full_toggle(cat_idx); + } else { + // Setting rows are keyed by the base key. + for (const std::string& key : entry.keys) { + const std::string base = publish_base_key(key); + for (const size_t r : cat.rows) { + Row& row = m_rows[r]; + if (row.kind == RowKind::Setting && row.key == base) { + row.check->SetValue(true); + break; + } + } + } + if (entry.publish_type && !entry.publish_type_value.empty()) + for (const size_t r : cat.rows) + if (m_rows[r].kind == RowKind::Type && m_rows[r].check != nullptr) { + m_rows[r].check->SetValue(true); + break; + } + if (entry.publish_color && !entry.color.empty()) + for (const size_t r : cat.rows) + if (m_rows[r].kind == RowKind::Color && m_rows[r].check != nullptr) { + m_rows[r].check->SetValue(true); + break; + } + } + } + + apply_visibility(); +} + std::vector PublishSettingsDialog::GetPublishedKeys() const { std::vector out; diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index f2dcf70bba..8d9342fadb 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -46,7 +46,14 @@ struct MixedDependencyIssue class PublishSettingsDialog : public DPIDialog { public: - PublishSettingsDialog(wxWindow* parent = nullptr); + // Optional published selection (Feature A/B): when the caller supplies one (either a + // remembered session selection or the payload of a freshly loaded published 3MF) the dialog + // is seeded from it, overriding the dirty-default pre-check. A non-null pointer to an empty + // selection means "publish nothing" (an intentional empty state); a null pointer means "no + // remembered selection" (keep the dirty defaults). + PublishSettingsDialog(wxWindow* parent = nullptr, + const std::vector* published_keys = nullptr, + const std::vector* material_keys = nullptr); ~PublishSettingsDialog(); // The selected print/printer setting keys (in display order); printer keys carry a '#N' @@ -179,6 +186,12 @@ private: }; void build_option_model(); + // Seed the dialog from a published selection (print/printer keys + per-slot material keys): + // the supplied selection is authoritative - it is applied after the dirty pre-check and + // overrides it, so deselected dirty keys stay off. Rows/slots not present in the selection + // are left unselected. Unknown or out-of-range entries are skipped gracefully. + void apply_selection(const std::vector& published_keys, + const std::vector& material_keys); // Frozen snapshot of a mixed slot's definition for the page visualization, resolved from // the full config once at dialog-build time. Gradient slots pre-sample exactly what the // slicer will print: the custom curve wins over the gradient_range endpoints over the From 4654d24f6f1191b30f7a3fd472b763e30994039b Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 2 Sep 2026 12:38:27 +0800 Subject: [PATCH 083/208] Add a OrcaSlicer badge in the thumbnail preview for published 3MF projects. Add a visual indicator in the publish dialog to show that something in the section is toggled --- resources/web/homepage/css/home.css | 16 +++++++++- resources/web/homepage/js/home.js | 3 +- src/slic3r/GUI/PublishSettingsDialog.cpp | 39 ++++++++++++++++++++++++ src/slic3r/GUI/PublishSettingsDialog.hpp | 5 +++ src/slic3r/GUI/Widgets/Button.cpp | 35 +++++++++++++++++++++ src/slic3r/GUI/Widgets/Button.hpp | 7 +++++ src/slic3r/GUI/Widgets/TabCtrl.cpp | 8 +++++ src/slic3r/GUI/Widgets/TabCtrl.hpp | 3 ++ 8 files changed, 114 insertions(+), 2 deletions(-) diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index ff04d3ba3d..f4ef1d5420 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -552,7 +552,8 @@ body background-color: #E4E4E4; border-radius: 8px; width: 184px; - height: 184px; + height: 184px; + position: relative; } .FileItem img @@ -564,6 +565,19 @@ body object-fit: cover; } +.FileImg .FileLogoBadge +{ + position: absolute; + top: 8px; + left: 8px; + width: 26px; + height: 26px; + padding: 2px; + box-sizing: border-box; + background-color: rgba(255,255,255,0.85); + border-radius: 50%; +} + .FileName { white-space: nowrap; diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index 3cb5ff4fb3..20eb96474b 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -226,10 +226,11 @@ function ShowRecentFileList( pList ) //let sShortName=sPath.substring(index+1,sPath.length); let sBadge=sPublished? 'PUB':''; + let sLogoBadge=sPublished? '':''; let TmpHtml='
'+ ''+ - '
No Image
'+ + '
No Image'+sLogoBadge+'
'+ '
'+sBadge+'
'+sName+'
'+ '
'+sTime+'
'+ '
'; diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index d4d9b5d5d2..340ca8d02e 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -881,6 +881,7 @@ void PublishSettingsDialog::build_option_model() m_outer_tabs->SelectItem(0); show_outer_page(0); } + refresh_tab_indicators(); } size_t PublishSettingsDialog::section_group_for(Section kind) @@ -1127,6 +1128,7 @@ void PublishSettingsDialog::add_row_ui(const std::string& key, Row& current = m_rows[row_index]; current.check = new wxCheckBox(category.scroll, wxID_ANY, label); current.check->SetFont(Label::Body_13); + current.check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { refresh_tab_indicators(); }); auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); // The value is read-only text (incl. the Type row: the published type is the slot's @@ -1161,6 +1163,7 @@ void PublishSettingsDialog::on_full_toggle(size_t category_index) const bool full = cat.full_check->GetValue(); for (size_t r : cat.rows) m_rows[r].check->Enable(!full); + refresh_tab_indicators(); } void PublishSettingsDialog::on_enable_toggle(size_t category_index) @@ -1195,6 +1198,7 @@ void PublishSettingsDialog::on_enable_toggle(size_t category_index) apply_visibility(); if (cat.page != nullptr) cat.page->GetSizer()->Layout(); + refresh_tab_indicators(); } void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedVisualSpec& spec) @@ -1606,6 +1610,7 @@ void PublishSettingsDialog::select_all(bool value) if (m_categories[c].section == Section::Material) on_enable_toggle(c); apply_visibility(); + refresh_tab_indicators(); } bool PublishSettingsDialog::row_is_visible(const Row& row) const @@ -1637,6 +1642,7 @@ void PublishSettingsDialog::select_visible(bool value) m_filter_ctrl->ChangeValue(""); apply_filter(""); // resync visibility and the All/None bar } + refresh_tab_indicators(); } void PublishSettingsDialog::show_menu(wxMouseEvent& evt) @@ -1778,6 +1784,7 @@ void PublishSettingsDialog::apply_selection(const std::vector& publ } apply_visibility(); + refresh_tab_indicators(); } std::vector PublishSettingsDialog::GetPublishedKeys() const @@ -1932,6 +1939,38 @@ std::vector PublishSettingsDialog::GetPublishedM return out; } +bool PublishSettingsDialog::category_has_selection(const Category& cat) const +{ + // A material slot publishes (or not) as a whole, gated by "Enable". + if (cat.section == Section::Material) + return cat.enable_check != nullptr && cat.enable_check->GetValue(); + // Print/Printer categories have no gate: any checked row counts. + for (const size_t r : cat.rows) + if (m_rows[r].check->GetValue()) + return true; + return false; +} + +void PublishSettingsDialog::refresh_tab_indicators() +{ + for (size_t s = 0; s < m_sections.size(); ++s) { + SectionGroup& section = m_sections[s]; + bool any = false; + for (size_t i = 0; i < section.categories.size(); ++i) { + const bool on = category_has_selection(m_categories[section.categories[i]]); + section.tabs->SetItemIndicator(static_cast(i), on); + any = any || on; + } + if (section.mixed_tabs != nullptr) + for (size_t i = 0; i < section.mixed_categories.size(); ++i) { + const bool on = category_has_selection(m_categories[section.mixed_categories[i]]); + section.mixed_tabs->SetItemIndicator(static_cast(i), on); + any = any || on; + } + m_outer_tabs->SetItemIndicator(static_cast(s), any); + } +} + std::vector PublishSettingsDialog::full_keys_for_slot() const { // The canonical filament preset keys minus the structural keys the published overlay must diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp index 8d9342fadb..f41b3e73a3 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.hpp +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -213,6 +213,11 @@ private: // "Enable" toggled on a material slot: reveals/hides everything below the header and, for a // mixed slot, auto-selects its component filaments' "Enable" + "Full Publish" toggles. void on_enable_toggle(size_t category_index); + // Whether a category currently publishes something, driving its tab's indicator dot. + // Print/Printer: any row checked. Material: the slot's "Enable" is on. + bool category_has_selection(const Category& cat) const; + // Recompute the indicator dot on every outer/inner tab from the current selection state. + void refresh_tab_indicators(); // Unmet dependencies of enabled mixed-filament slots, one record per (mix, component) pair: // "Enable" not checked on the component, or enabled with neither "Full Publish" nor the // "Type" requirement row checked. Colour is deliberately ignored (the receiver renders the diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 5a5bd89403..22b1c34cab 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -162,6 +162,15 @@ void Button::SetCenter(bool isCenter) { this->isCenter = isCenter; } +void Button::SetIndicator(bool on) +{ + if (m_show_indicator == on) + return; + m_show_indicator = on; + messureSize(); + Refresh(); +} + void Button::SetVertical(bool vertical) { this->vertical = vertical; @@ -324,6 +333,13 @@ void Button::render(wxDC& dc) szContent.x -= d; } } + if (m_show_indicator) { + const int dot = FromDIP(6); + if (vertical) + szContent.y += dot + FromDIP(6); + else + szContent.x += dot + FromDIP(6); + } // move to center wxRect rcContent = { {0, 0}, size }; if (isCenter) { @@ -364,6 +380,17 @@ void Button::render(wxDC& dc) #endif dc.DrawText(text, pt); } + if (m_show_indicator) { + const int dot = FromDIP(6); // diameter + wxPoint dot_pt; + dot_pt.x = pt.x + (text.IsEmpty() ? 0 : textSize.x) + FromDIP(6) + dot / 2; + // Centre on the content vertically; a bitmap-only (empty-label) tab has no text row. + dot_pt.y = text.IsEmpty() ? rcContent.y + rcContent.height / 2 : pt.y + textSize.y / 2; + const wxColour c = StateColor::darkModeColorFor(m_indicator_color); + dc.SetBrush(wxBrush(c)); + dc.SetPen(wxPen(c)); + dc.DrawCircle(dot_pt, dot / 2); + } } void Button::messureSize() @@ -388,6 +415,14 @@ void Button::messureSize() if (szIcon.y > szContent.y) szContent.y = szIcon.y; } } + if (m_show_indicator) { + // Indicator dot sits to the right of the label: its diameter plus the gap from the text. + const int dot = FromDIP(6); + if (vertical) + szContent.y += dot + FromDIP(6); + else + szContent.x += dot + FromDIP(6); + } wxSize size = szContent + paddingSize * 2; if (minSize.GetHeight() > 0) size.SetHeight(minSize.GetHeight()); diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 19dcd24938..758a9a4009 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -4,6 +4,7 @@ #include "../wxExtensions.hpp" #include "StaticBox.hpp" #include +#include class ButtonProps { @@ -44,6 +45,8 @@ class Button : public StaticBox bool canFocus = true; bool isCenter = true; bool vertical = false; + bool m_show_indicator = false; + wxColour m_indicator_color = wxColour("#009688"); static const int buttonWidth = 200; static const int buttonHeight = 50; @@ -75,6 +78,10 @@ public: void SetSelected(bool selected = true) { m_selected = selected; } + // Show a small coloured dot to the right of the label (used by TabCtrl tabs to flag that + // the tab's category has a selected/toggled setting). + void SetIndicator(bool on); + // Only meant to be used by inspector, not public API ButtonStyle GetStyle() const { return m_style; } ButtonType GetType() const { return m_type; } diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 4090bf9c1b..34de109b8f 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -171,6 +171,14 @@ void TabCtrl::SetItemBitmap(unsigned int item, const wxBitmap& bitmap) relayout(); } +void TabCtrl::SetItemIndicator(unsigned int item, bool on) +{ + if (item >= btns.size()) + return; + btns[item]->SetIndicator(on); + relayout(); +} + bool TabCtrl::GetItemBold(unsigned int item) const { if (item >= btns.size()) diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index 0d3606aca7..493c4edee5 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -46,6 +46,9 @@ public: void SetItemText(unsigned int item, wxString const& value); void SetItemBitmap(unsigned int item, const wxBitmap& bitmap); + // Show/hide the small "has selection" dot next to a tab's text. + void SetItemIndicator(unsigned int item, bool on); + bool GetItemBold(unsigned int item) const; void SetItemBold(unsigned int item, bool bold); From f1719b558064c571485a7c544cef4f3be8141d08 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 2 Sep 2026 14:29:15 +0800 Subject: [PATCH 084/208] Fixes mixed filament growth bug. Fixes unit test --- src/libslic3r/PresetBundle.cpp | 25 ++ tests/libslic3r/test_3mf.cpp | 141 +++++++---- .../libslic3r/test_preset_bundle_loading.cpp | 232 +++++++++++++++--- 3 files changed, 329 insertions(+), 69 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 76211314b0..f1535fca90 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5595,6 +5595,12 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, for (const PublishedMaterialEntry& entry : published_config->material_keys) if (entry.slot >= 0) published_slots.insert(entry.slot); + // Grown slots the receiver creates that carry no published content of their own + // (e.g. an unpublished mixed slot left as a gap by a published mix's authored + // position) at or beyond the receiver's physical capacity. They must not become + // physical filaments (that would overflow the nozzle count): finalized as empty + // mixed placeholders below, like the surplus-material placeholders. + std::set virtual_gap_slots; // Exact-name resolution of each published slot's preset through the collection's // own name machinery: find_preset2 follows renamed_from (vendor profile renames) // and canonical bundle names, and auto-matches removed vendor-generic profiles @@ -5665,6 +5671,10 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, while (this->filament_presets.size() < target_slots) { const size_t new_slot_idx = this->filament_presets.size(); std::string initial_preset; + if (new_slot_idx >= physical_capacity && published_slots.count(static_cast(new_slot_idx)) == 0) + // An unpublished grown slot past the printer's physical capacity cannot + // host a real filament: finalize it as a virtual placeholder below. + virtual_gap_slots.insert(static_cast(new_slot_idx)); if (published_slots.count(static_cast(new_slot_idx)) != 0) { // Grow the slot the way the sidebar "add filament" does: seed it with // the receiver's last preset. @@ -5927,6 +5937,10 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, for (size_t i = 0; i < this->filament_presets.size(); ++i) if (this->is_mixed_filament(i)) mixed_final_slots.insert(int(i)); + // Unpublished gap slots past the capacity are virtual too: count them in the + // final layout so a published mix whose components collide with one is caught. + for (int gap_slot : virtual_gap_slots) + mixed_final_slots.insert(gap_slot); const size_t mixed_final_slot_count = this->filament_presets.size(); // Finalize a slot as an empty mixed-filament placeholder: mark it virtual with // an intentionally empty definition, and add it to the final-layout set so a @@ -6320,6 +6334,17 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, apply_slot_keys(write_config, preset_keys, entry.slot, material_label); } } + // Unpublished gap slots past the printer's physical capacity: the receiver grew + // them only to reach a published definition, so they must not become physical + // filaments (that would overflow the nozzle count). Finalize each as an empty + // mixed placeholder, exactly like the surplus-material placeholders above. + for (int gap_slot : virtual_gap_slots) + if (!this->is_mixed_filament(size_t(gap_slot))) { + finalize_mixed_placeholder(size_t(gap_slot)); + published_config->material_replacements.emplace_back( + "slot " + std::to_string(gap_slot) + + ": unassigned mixed filament (printer supports only " + std::to_string(physical_capacity) + " filaments)"); + } } } diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index f595926699..d30b40004d 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -866,10 +866,12 @@ SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer ta } } -// A "full publish" entry carries the whole slot's key list: its vector options keep only the -// author's slot value, the other slots are masked to their defaults so a slot-1 full publish -// does not leak slot 0's data into the file. -SCENARIO("Full-publish entries filter the whole slot and mask the other slots", "[3mf]") { +// An entry masks the non-published slots to their defaults so publishing slot 1 never leaks slot +// 0's value into the file. Both a full entry (the whole-slot key list) and a partial entry (a +// per-slot key) go through the same masking path in filter_published_config (keys and full_keys +// are filtered identically), so the two forms are exercised together. +SCENARIO("Published entries mask the other slots to their defaults", "[3mf]") { + const bool full = GENERATE(true, false); GIVEN("a full print configuration with two filament slots") { DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; @@ -878,45 +880,18 @@ SCENARIO("Full-publish entries filter the whole slot and mask the other slots", // mask can restore it on the non-published slot. full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; - PublishedMaterialEntry full_entry; - full_entry.slot = 1; - full_entry.full = true; - full_entry.full_keys = { "filament_flow_ratio" }; - - WHEN("filtering with a full entry for slot 1") { - DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { full_entry }); - - THEN("the full key list is present with the author's slot value") { - REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); - REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); + WHEN("filtering with a published entry for slot 1") { + PublishedMaterialEntry entry; + entry.slot = 1; + if (full) { + entry.full = true; + entry.full_keys = { "filament_flow_ratio" }; + } else { + entry.keys = { "filament_flow_ratio" }; } - THEN("the non-published slot is masked to its default") { - REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); - } - THEN("the identity keys stay present") { - REQUIRE(filtered_cfg.option("filament_colour") != nullptr); - } - } - } -} + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { entry }); -// A partial-publish entry (per-slot keys) is masked to the author's slot exactly like a full -// entry, so publishing one slot's retraction does not ship the other slots' values in the file. -SCENARIO("Partial-publish entries mask the other slots like full entries", "[3mf]") { - GIVEN("a full print configuration with two filament slots") { - DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); - full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; - full_cfg.opt("filament_colour")->values = { "#111111", "#222222" }; - full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; - - PublishedMaterialEntry partial_entry; - partial_entry.slot = 1; - partial_entry.keys = { "filament_flow_ratio" }; - - WHEN("filtering with a partial entry for slot 1") { - DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { partial_entry }); - - THEN("the partial key is present with the author's slot value") { + THEN("the selected key is present with the author's slot value") { REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); } @@ -1075,3 +1050,87 @@ SCENARIO("Published mixed-filament keys are masked to the author's slot", "[3mf] } } +// The published flag is gated on the exact string "1": any other serialized value means "not +// published", so a receiver never treats a file as published on a loose truthiness check. +TEST_CASE("is_published_3mf_flag accepts only the literal \"1\"", "[3mf]") { + CHECK(is_published_3mf_flag("1")); + CHECK_FALSE(is_published_3mf_flag("0")); + CHECK_FALSE(is_published_3mf_flag("false")); + CHECK_FALSE(is_published_3mf_flag("true")); + CHECK_FALSE(is_published_3mf_flag("")); + CHECK_FALSE(is_published_3mf_flag("YES")); +} + +// bbs_3mf_is_published is the lightweight metadata probe used to decide whether a file was +// produced by the publish feature (GUI "recently published" tracking). It must return true only +// for a file whose metadata carries the flag set to "1", and false for legacy files and for a +// file whose flag is present but not "1" (which loads as a normal, non-published 3MF). +SCENARIO("bbs_3mf_is_published detects only genuinely published 3MFs", "[3mf]") { + auto store_model = [](const std::string &path, const std::string &flag_value, const std::string &keys_value) { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + model.model_info = std::make_shared(); + // An empty flag_value means "don't write the flag at all" (a legacy file). + if (!flag_value.empty()) + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = flag_value; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = keys_value; + ScopedTemporaryDir backup_dir("orca_is_pub"); + model.set_backup_path(backup_dir.string()); + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = path.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + }; + + GIVEN("a minimal published 3MF whose flag is \"1\"") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "1", R"(["layer_height"])"); + WHEN("probed by bbs_3mf_is_published") { + THEN("it is recognized as published") { + CHECK(bbs_3mf_is_published(temp.string())); + } + } + } + GIVEN("a legacy 3MF without any published flag") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "", R"(["layer_height"])"); + WHEN("probed by bbs_3mf_is_published") { + THEN("it is not recognized as published") { + CHECK_FALSE(bbs_3mf_is_published(temp.string())); + } + } + } + GIVEN("a 3MF carrying the flag set to \"0\"") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "0", R"(["layer_height"])"); + WHEN("probed and loaded") { + THEN("it is not recognized as published") { + CHECK_FALSE(bbs_3mf_is_published(temp.string())); + } + THEN("it loads as a normal, non-published 3MF") { + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + REQUIRE(load_bbs_3mf(temp.string().c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig)); + REQUIRE(dst_model.model_info != nullptr); + // The key is present but not "1", so nothing treats the file as published; the + // stored keys still round-trip verbatim. + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "0"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height"])"); + release_PlateData_list(dst_plates); + } + } + } +} + diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 17e33f3320..d2d0560be2 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1212,13 +1212,14 @@ TEST_CASE("Published 3MF imports a full material under the author's stripped nam REQUIRE(bundle.filament_presets.size() == 2); CHECK(bundle.filament_presets[0] == "My PETG"); - // The grown slot lands on a freshly created copy carrying the author's slot-1 value; - // the library preset that seeded it stays untouched. + // The grown slot seeds the receiver's last preset ("My PETG"), then the full material + // detaches onto a copy carrying the author's slot-1 value; "Generic PLA @System" is + // left untouched. CHECK(bundle.filament_presets[1] == "Generic PLA"); check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.8 }); check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 1: Generic PLA @System -> Generic PLA"); + CHECK(pub.material_replacements[0] == "slot 1: My PETG -> Generic PLA"); CHECK(pub.skipped_keys.empty()); } } @@ -1922,7 +1923,7 @@ TEST_CASE("Published 3MF grows the receiver's slots only as far as the published // A published slot is seeded from an unused library preset and the values are written onto it // in place, so the receiver's own material (slot 0) is never overwritten. -TEST_CASE("Published 3MF seeds published slots from unused presets and mutates them in place", "[Preset][Bundle][Published]") +TEST_CASE("Published 3MF grows published slots to the receiver's last preset and recolors it in place", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -1937,8 +1938,9 @@ TEST_CASE("Published 3MF seeds published slots from unused presets and mutates t }; // Receiver with its own material plus one more library preset; author publishes only slot 4 - // (Red). The grown slot is seeded from the unused library preset, so the published red - // recolors that preset in place and never the receiver's own material. + // (Red). Growth always repeats the receiver's last filament ("Add one filament"), so the + // grown slot references the shared "My PLA" preset and the published red recolors it in + // place; the unused "Other PLA" preset is left untouched. PresetBundle bundle; Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); mine.config.opt_string("filament_type", 0u) = "PLA"; @@ -1960,14 +1962,14 @@ TEST_CASE("Published 3MF seeds published slots from unused presets and mutates t bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 4); - // Unpublished filler slots repeat the receiver's last preset ("Add one filament"). + // Every grown slot (published or filler) repeats the receiver's last preset. CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "My PLA"); - // The published slot was seeded from the unused library preset; the published colour was - // written onto it in place, never onto the receiver's own material. - CHECK(bundle.filament_presets[3] == "Other PLA"); - CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); - CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // The published red recolors the shared "My PLA" preset in place; the unused "Other PLA" + // preset is left untouched. + CHECK(bundle.filament_presets[3] == "My PLA"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#654321" }); // The project-level colours are sized and seeded for every grown slot. CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); @@ -1977,10 +1979,11 @@ TEST_CASE("Published 3MF seeds published slots from unused presets and mutates t CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); } -// Without a checked Type row, a grown published slot is still seeded from the published -// material's identity - an exact filament_id outranks any arbitrary unused preset, and an -// entry carrying only a family constrains the pick to that family. -TEST_CASE("Published 3MF seeds a grown slot by published identity or family without a type requirement", "[Preset][Bundle][Published]") +// Growth always repeats the receiver's last preset; a published slot only lands on its +// material identity when the aliased grown slot is re-pointed (de-alias fires on a preset +// key). Lock the identity priority there: an exact filament_id outranks an arbitrary unused +// preset, and an entry carrying only a family constrains the pick to that family. +TEST_CASE("Published 3MF re-points an aliased grown slot by published identity or family without a type requirement", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -1998,6 +2001,7 @@ TEST_CASE("Published 3MF seeds a grown slot by published identity or family with entry.slot = 2; entry.filament_type = "PLA"; entry.filament_vendor = "Generic"; + entry.keys = { "filament_retraction_length" }; // An unused preset sorting before everything else: an unconstrained pick would take it. PresetBundle bundle; Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); @@ -2022,8 +2026,9 @@ TEST_CASE("Published 3MF seeds a grown slot by published identity or family with REQUIRE(bundle.filament_presets.size() == 3); CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "Zzz PLA"); - // An exact identity match is not a substitute, so nothing is reported. - CHECK(pub.material_replacements.empty()); + // The exact-id preset outranks the type-only "Aaa PLA"; the re-point is reported. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Zzz PLA"); } SECTION("a family-only entry picks an unused preset of that family") { @@ -2039,7 +2044,11 @@ TEST_CASE("Published 3MF seeds a grown slot by published identity or family with bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 3); + // The family pick lands on the only PETG preset (the PLA presets and the receiver's own + // material lose), and the re-point is reported. CHECK(bundle.filament_presets[2] == "Bbb PETG"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Bbb PETG"); } } @@ -3797,6 +3806,103 @@ TEST_CASE("Published 3MF finalizes a mixed filament rejected over a placeholder })); } +// The receiver must not overflow its physical capacity when it grows slots to reach a published +// mixed definition: an unpublished mixed slot that lands as a gap past the nozzle count becomes +// an empty mixed placeholder, not a physical filament. An author with six physical slots (0-5) +// and two tail mixes (slots 6 and 7) publishes only 0-5 and 7; the receiver has four nozzles. +// Slots 4 and 5 become surplus placeholders, slot 7 keeps its authored mix position, and the +// unpublished gap slot 6 is finalized as a virtual placeholder - never a fifth physical slot. +TEST_CASE("Published 3MF turns an unpublished gap slot past the printer's capacity into an empty mixed placeholder", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(4, "My PLA"); + bundle.set_num_filaments(4, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(4, 0.4); + + // 8 authored slots: 0-5 physical, 6 unpublished mixed, 7 published mixed. The payload masks + // the unpublished slot's mixed flag (filter_published_config), so slot 6 reads as physical. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = std::vector(8, 1.75); + config.opt("filament_self_index")->values = { 1, 2, 3, 4, 5, 6, 7, 8 }; + config.opt("filament_extruder_variant")->values = std::vector(8, "Direct Drive Standard"); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00", + "#FF00FF", "#00FFFF", "#800080", "#804000" }; + config.opt("filament_type")->values.assign(8, "PLA"); + config.opt("filament_vendor")->values.assign(8, "Generic"); + config.opt("filament_is_mixed")->values = { 0, 0, 0, 0, 0, 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "", "", "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "", "", "", "", "0.5,0.5" }; + config.opt("filament_mixed_gradient")->values = std::vector(8, 0); + config.opt("filament_mixed_gradient_range")->values.assign(8, ""); + config.opt("filament_mixed_gradient_curve")->values.assign(8, ""); + config.opt("filament_mixed_gradient_per_part")->values = std::vector(8, 0); + + auto make_full_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.full = true; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + auto make_mix_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_entry(0), make_full_entry(1), make_full_entry(2), make_full_entry(3), + make_full_entry(4), make_full_entry(5), make_mix_entry(7, "#804000") }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 8); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 8); + // Slots 0-3 stay physical; 4 and 5 are surplus placeholders; 6 is the unpublished gap; 7 is + // the published mix. All four tail slots are virtual. + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(is_mixed[6]); + CHECK(is_mixed[7]); + // Surplus physical slots (4,5) and the unpublished gap (6) carry no definition; the + // published mix on slot 7 keeps its own. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 8); + CHECK(components[4].empty()); + CHECK(components[5].empty()); + CHECK(components[6].empty()); + CHECK(components[7] == "1,2"); + // Exactly four physical slots remain (never a fifth past the nozzle count). + size_t physical_count = 0; + for (bool mixed : is_mixed) + if (!mixed) + ++physical_count; + CHECK(physical_count == 4); + // The unpublished gap's conversion is surfaced through the post-import notice. + bool gap_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 6: unassigned mixed filament") != std::string::npos) + gap_reported = true; + CHECK(gap_reported); + CHECK(pub.skipped_keys.empty()); +} + // The relocation shifts cells inside the file's per-slot mixed arrays; a payload too short to // actually carry the definition degrades to empty cells, which the definition validation then // reports - an empty mix must not ship as a virtual slot. @@ -3859,10 +3965,12 @@ TEST_CASE("Published 3MF reports a relocated mixed filament whose payload cells bundle.project_config.opt("filament_colour")->values.begin())); } -// A grown slot's material is chosen by identity tiers: exact preset name, then the bare -// name/alias form, then exact setting_id, then exact filament_id, then vendor+type, then type -// only. Each section pits two adjacent tiers against each other. -TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Preset][Bundle][Published]") +// A grown published slot always repeats the receiver's last preset; it can only move to the +// published material's identity when a replacement is warranted (an aliased slot that would +// otherwise leak keys, or a type mismatch). The tier priority candidate_score uses is locked +// here: exact preset name > bare name > exact setting_id > exact filament_id > vendor+type, +// with the lower tiers reported as a substitute. +TEST_CASE("Published 3MF re-points an aliased grown slot's material by identity tiers", "[Preset][Bundle][Published]") { auto make_file_config = [] { DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -3894,6 +4002,7 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr bundle.filament_presets = { "My PLA" }; entry.preset_name = "Authored PLA @Vendor"; + entry.keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; pub.material_keys = { entry }; @@ -3903,8 +4012,11 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr REQUIRE(bundle.filament_presets.size() == 3); CHECK(bundle.filament_presets[1] == "My PLA"); + // The aliased grown slot is re-pointed at the exact-name preset; the bare-name and the + // receiver's own preset lose. CHECK(bundle.filament_presets[2] == "Authored PLA @Vendor"); - CHECK(pub.material_replacements.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Authored PLA @Vendor"); } SECTION("a bare name outranks an exact setting_id") @@ -3921,6 +4033,7 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name entry.setting_id = "SID123"; + entry.keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; pub.material_keys = { entry }; @@ -3931,6 +4044,8 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr REQUIRE(bundle.filament_presets.size() == 3); CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "Authored PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Authored PLA"); } SECTION("an exact setting_id outranks an exact filament_id") @@ -3949,6 +4064,7 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name entry.setting_id = "SID123"; entry.filament_id = "GFA00"; + entry.keys = { "filament_retraction_length" }; PublishedConfig pub; pub.published = true; pub.material_keys = { entry }; @@ -3959,22 +4075,26 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr REQUIRE(bundle.filament_presets.size() == 3); CHECK(bundle.filament_presets[1] == "My PLA"); CHECK(bundle.filament_presets[2] == "Bbb PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Bbb PLA"); } SECTION("a vendor+type match is reported as a substitute") { PresetBundle bundle; - Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); - mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PETG"); + mine.config.opt_string("filament_type", 0u) = "PETG"; Preset &exact_vendor = add_inmemory_preset(bundle.filaments, "Aaa PLA"); exact_vendor.config.opt_string("filament_type", 0u) = "PLA"; exact_vendor.config.opt_string("filament_vendor", 0u) = "Generic"; Preset &other_vendor = add_inmemory_preset(bundle.filaments, "Zzz PLA"); other_vendor.config.opt_string("filament_type", 0u) = "PLA"; other_vendor.config.opt_string("filament_vendor", 0u) = "Other"; - bundle.filament_presets = { "My PLA" }; + bundle.filament_presets = { "My PETG" }; entry.filament_vendor = "Generic"; // no name or id identity: the family tiers decide + entry.publish_type = true; + entry.publish_type_value = "PLA"; // the grown slot seeds "My PETG" -> the gate reads a mismatch PublishedConfig pub; pub.published = true; pub.material_keys = { entry }; @@ -3983,12 +4103,12 @@ TEST_CASE("Published 3MF scores a grown slot's material by identity tiers", "[Pr bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); REQUIRE(bundle.filament_presets.size() == 3); - CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[1] == "My PETG"); // The same-vendor PLA outranks the type-only candidate... CHECK(bundle.filament_presets[2] == "Aaa PLA"); // ...and since it is not an exact material match, the load says so. REQUIRE(pub.material_replacements.size() == 1); - CHECK(pub.material_replacements[0] == "slot 2: Aaa PLA (substitute)"); + CHECK(pub.material_replacements[0] == "slot 2: My PETG -> Aaa PLA (substitute)"); } } @@ -4203,3 +4323,59 @@ TEST_CASE("Published 3MF applies duplicate entries for one slot last-wins", "[Pr CHECK(pub.skipped_keys.empty()); CHECK(pub.material_replacements.empty()); } + +// normalize_filament_type maps "PLA High Speed" onto the canonical family "PLA" (a space- +// separated modifier is dropped) but leaves dash-separated composite types like "PA-CF" intact, +// and passes through unknown types and the empty string unchanged. +TEST_CASE("normalize_filament_type strips a space modifier but keeps dash types", "[Preset][Bundle][Published]") +{ + CHECK(normalize_filament_type("PLA High Speed") == "PLA"); + CHECK(normalize_filament_type("PA-CF") == "PA-CF"); + CHECK(normalize_filament_type("PETG-CF") == "PETG-CF"); + CHECK(normalize_filament_type("PLA") == "PLA"); + CHECK(normalize_filament_type("ABC") == "ABC"); + CHECK(normalize_filament_type("") == ""); +} + +// collect_dirty_settings_keys feeds the Publish dialog's pre-check: it must be the set union of +// the dirty options across the edited print, printer and filament presets. +TEST_CASE("collect_dirty_settings_keys unions the dirty settings from all three presets", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + // The edited preset is initialised as a copy of the selected (default) preset, so a single + // edit makes exactly that option dirty. deep_diff reports scalar keys by name but per-element + // vector keys as "key#", so a vector edit surfaces as "key#0". + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.28; + bundle.filaments.get_edited_preset().config.opt("filament_type", true)->values = { "ABS" }; + bundle.printers.get_edited_preset().config.opt("nozzle_diameter", true)->values = { 0.6 }; + + const std::vector dirty = collect_dirty_settings_keys(bundle); + for (const char *key : { "layer_height", "filament_type#0", "nozzle_diameter#0" }) + CHECK(contains_key(dirty, key)); +} + +// The publish denylist and the mixed-key list are single sources of truth for the import path: +// lock their members so a silent edit to either cannot drift away from the contract the import +// and export masks rely on. +TEST_CASE("Published 3MF denylist and mixed-key sets match the import/export contract", "[Preset][Bundle][Published]") +{ + const std::set& structural = publish_structural_keys(); + // Structural / inheritance keys must never be applied onto a receiver's presets. + for (const char *key : { "printer_settings_id", "filament_settings_id", "print_settings_id", + "compatible_printers", "compatible_prints", "compatible_printers_condition", + "compatible_prints_condition", "default_filament_profile", "default_print_profile", + "inherits", "extruder_count", "printer_model", "filament_ids" }) + CHECK(structural.count(key) == 1); + // ...but a per-slot publishable material key is not structural. + CHECK(structural.count("filament_retraction_length") == 0); + CHECK(structural.count("filament_colour") == 0); + + const std::set& mixed = publish_mixed_keys(); + CHECK(mixed == std::set{ + "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }); + // Mixed keys are project-level arrays, not material-preset keys, so none is structural. + for (const std::string &key : mixed) + CHECK(structural.count(key) == 0); +} From e17f932aff0362199385af9dd1d78ccc77016629 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 2 Sep 2026 17:22:06 +0800 Subject: [PATCH 085/208] Update Publish Guide Links --- src/slic3r/GUI/PublishSettingsDialog.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index 340ca8d02e..ed0b00aa29 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -434,7 +434,8 @@ PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_ return spec; } -PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent, const std::vector* published_keys, +PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent, + const std::vector* published_keys, const std::vector* material_keys) : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), wxID_ANY, @@ -554,10 +555,9 @@ PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent, const std::vector return link; }; wxBoxSizer* links_sizer = new wxBoxSizer(wxVERTICAL); - links_sizer->Add(make_link(_L("Publish 3MF Wiki Guide"), "https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html"), 0, - wxALIGN_LEFT); - links_sizer->Add(make_link(_L("Publish 3MF YouTube Video (Placeholder)"), "https://www.youtube.com"), 0, wxTOP | wxALIGN_LEFT, - FromDIP(4)); + links_sizer->Add(make_link(_L("Publish 3MF Wiki"), "https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html"), 0, wxALIGN_LEFT); + links_sizer->Add(make_link(_L("Publish 3MF Video Guide"), "https://www.youtube.com/@OfficialOrcaSlicer/videos"), 0, + wxTOP | wxALIGN_LEFT, FromDIP(4)); wxBoxSizer* footer = new wxBoxSizer(wxHORIZONTAL); footer->Add(links_sizer, 0, wxALIGN_CENTER_VERTICAL); From 85f14673f09939827c210b63629bc5027d2a070a Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 2 Sep 2026 18:09:23 +0800 Subject: [PATCH 086/208] Only show the currently in used filaments for publishing --- src/slic3r/GUI/PublishSettingsDialog.cpp | 119 ++++++++++++++++++++++- 1 file changed, 117 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp index ed0b00aa29..16b0b6201c 100644 --- a/src/slic3r/GUI/PublishSettingsDialog.cpp +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -17,6 +17,7 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PublishSettings.hpp" #include "libslic3r/FilamentMixer.hpp" +#include "libslic3r/Model.hpp" #include #include @@ -307,6 +308,114 @@ wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, return composite; } +// The filament slots (0-based) the current project actually uses, across every plate: base and +// MMU-painted volume extruders, per-object layer-range and support/wall/infill filament +// overrides, and custom-gcode tool changes. Used mixed slots are preserved as themselves (so an +// in-use mix is publishable) while their physical components are added too - a mix always ships +// with the materials of its components even if a component is not referenced directly anywhere. +std::set project_used_filament_slots(const PresetBundle& bundle, const DynamicPrintConfig& full, const Model& model) +{ + std::set used; // 0-based used slots, mixed slots not yet expanded + if (model.objects.empty()) + return used; + + auto add_1based = [&used](int id) { + if (id > 0) + used.insert(size_t(id - 1)); + }; + + const DynamicPrintConfig& print_cfg = bundle.prints.get_edited_preset().config; + const int glb_support_intf = print_cfg.opt_int("support_interface_filament"); + const int glb_support = print_cfg.opt_int("support_filament"); + const int glb_outer_wall = print_cfg.opt_int("outer_wall_filament_id"); + const int glb_inner_wall = print_cfg.opt_int("inner_wall_filament_id"); + const int glb_sparse_infill = print_cfg.opt_int("sparse_infill_filament_id"); + const int glb_internal_solid = print_cfg.opt_int("internal_solid_filament_id"); + const int glb_top_surface = print_cfg.opt_int("top_surface_filament_id"); + const int glb_bottom_surface = print_cfg.opt_int("bottom_surface_filament_id"); + const bool glb_support_on = print_cfg.opt_bool("enable_support") || print_cfg.opt_int("raft_layers") > 0; + + for (ModelObject* mo : model.objects) { + for (ModelVolume* mv : mo->volumes) + for (int e : mv->get_extruders()) + add_1based(e); + + for (const auto& range_entry : mo->layer_config_ranges) + if (const ConfigOption* ext_opt = range_entry.second.option("extruder")) + add_1based(ext_opt->getInt()); + + bool obj_support = glb_support_on; + if (const ConfigOption* s_opt = mo->config.option("enable_support"); s_opt != nullptr) + obj_support = s_opt->getBool(); + else if (const ConfigOption* r_opt = mo->config.option("raft_layers"); r_opt != nullptr) + obj_support = r_opt->getInt() > 0; + + if (obj_support) { + if (const ConfigOption* opt = mo->config.option("support_interface_filament"); opt != nullptr && opt->getInt() != 0) + add_1based(opt->getInt()); + else + add_1based(glb_support_intf); + + if (const ConfigOption* opt = mo->config.option("support_filament"); opt != nullptr && opt->getInt() != 0) + add_1based(opt->getInt()); + else + add_1based(glb_support); + } + + auto obj_id = [&mo](const char* key) { + const ConfigOption* opt = mo->config.option(key); + return (opt != nullptr) ? opt->getInt() : 0; + }; + + int obj_outer_wall = obj_id("outer_wall_filament_id"); + if (obj_outer_wall == 0) + obj_outer_wall = obj_id("inner_wall_filament_id"); + add_1based(obj_outer_wall != 0 ? obj_outer_wall : glb_outer_wall); + + int obj_inner_wall = obj_id("inner_wall_filament_id"); + if (obj_inner_wall == 0) + obj_inner_wall = obj_id("outer_wall_filament_id"); + add_1based(obj_inner_wall != 0 ? obj_inner_wall : glb_inner_wall); + + const int obj_sparse = obj_id("sparse_infill_filament_id"); + add_1based(obj_sparse != 0 ? obj_sparse : glb_sparse_infill); + + const int obj_internal_solid = obj_id("internal_solid_filament_id"); + add_1based(obj_internal_solid != 0 ? obj_internal_solid : glb_internal_solid); + + int obj_top = obj_id("top_surface_filament_id"); + if (obj_top == 0) + obj_top = obj_internal_solid; + add_1based(obj_top != 0 ? obj_top : glb_top_surface); + + int obj_bottom = obj_id("bottom_surface_filament_id"); + if (obj_bottom == 0) + obj_bottom = obj_internal_solid; + add_1based(obj_bottom != 0 ? obj_bottom : glb_bottom_surface); + } + + for (const auto& plate_entry : model.plates_custom_gcodes) + for (const CustomGCode::Item& item : plate_entry.second.gcodes) + if (item.type == CustomGCode::Type::ToolChange) + add_1based(item.extruder); + + // Expand used mixed slots to their physical components and keep each mixed slot itself so the + // dialog shows the mix. A component both used directly and pulled in via a mix is deduped. + const auto* is_mixed_opt = full.opt("filament_is_mixed"); + const auto* comp_opt = full.opt("filament_mixed_components"); + if (is_mixed_opt != nullptr && comp_opt != nullptr && has_any_mixed_filament(is_mixed_opt->values)) { + const std::vector raw(used.begin(), used.end()); + const std::vector expanded = expand_mixed_filaments(raw, is_mixed_opt->values, comp_opt->values); + std::set result(expanded.begin(), expanded.end()); + for (unsigned int s : raw) + if (s < is_mixed_opt->values.size() && is_mixed_opt->values[s]) + result.insert(s); + return result; + } + + return used; +} + } // namespace // Warning shown on OK when an enabled mixed-filament slot relies on a filament that would ship @@ -732,9 +841,15 @@ void PublishSettingsDialog::build_option_model() // settings; their "Enable" toggle always embeds the mix definition (components, // ratios, gradient). Detect them via the project-level flag. const ConfigOptionBools* is_mixed_opt = full.opt("filament_is_mixed"); - // One section per filament slot (a 4-slot printer shows 4 pages), each - // disambiguated by its colour chip and slot identity while showing the bare name. + // Only the slots the project actually uses: base/MMU-painted volume extruders, + // support/wall/infill overrides and custom-gcode tool changes, plus the physical + // components of any in-use mixed slot. Unused slots get no section at all (and are + // therefore never published). One section per used slot, disambiguated by its + // colour chip and slot identity while showing the bare name. + const std::set used_slots = project_used_filament_slots(*bundle, full, wxGetApp().plater()->model()); for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { + if (used_slots.find(slot) == used_slots.end()) + continue; const bool is_mixed = is_mixed_opt != nullptr && slot < is_mixed_opt->size() && is_mixed_opt->values[slot]; const PublishMaterialIdentity identity = material_identity(slot, full); // A mixed slot's title is its component composition (e.g. "1 (60%) + 2 From ab90aec001b0c78e9f4acefe5bab5bdf66842a9c Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 2 Sep 2026 18:50:50 +0800 Subject: [PATCH 087/208] add per vendor support for check_profile check --- scripts/check_profile.bat | 2 + scripts/check_profile.ps1 | 157 ++++++++++++++++++++++++++++++++++---- scripts/check_profile.sh | 153 ++++++++++++++++++++++++++++++++----- 3 files changed, 279 insertions(+), 33 deletions(-) diff --git a/scripts/check_profile.bat b/scripts/check_profile.bat index 231fa721d4..e92f9fe0e8 100644 --- a/scripts/check_profile.bat +++ b/scripts/check_profile.bat @@ -1,5 +1,7 @@ @echo off REM Runs check_profile.ps1, the Windows twin of check_profile.sh, from cmd. +REM Arguments are passed straight through, so anything the .ps1 takes works here: +REM scripts\check_profile.bat -Vendor Elegoo validate_custom REM -ExecutionPolicy Bypass is needed because a Windows client defaults to Restricted, REM which refuses to run a checked-out .ps1 at all. powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0check_profile.ps1" %* diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 index 5c5dcb20c8..9c9bb6c506 100644 --- a/scripts/check_profile.ps1 +++ b/scripts/check_profile.ps1 @@ -23,6 +23,10 @@ has, is moved aside for the duration of the run and restored on exit. Only one run per work dir at a time. + -Vendor narrows a run to one vendor while working on that vendor's profiles - the one + deliberate divergence from CI, which always checks the whole tree. A check that cannot be + narrowed is left out of the run and reported as skipped. + x64 and ARM64 hosts are both supported. A locally built validator is chosen by the machine type in its PE header rather than by the name of its build tree, so build\ (x64) and build-arm64\ side by side resolve correctly; the published nightly is x64 only and runs @@ -32,6 +36,14 @@ Profile tree to validate (default: resources\profiles). extra_json_check always looks at the tree next to the script, so this only redirects the validator checks. +.PARAMETER Vendor + Check only this vendor, named after its .json (e.g. "Co Print"). validate_custom is + narrowed with it too, by keeping only that vendor's presets in each fixture tree. The one + check it cannot narrow is validate_slice for a vendor that ships no printers; the summary + reports that one as skipped, and naming it explicitly still runs it. extra_json_check keeps + its two cross-vendor checks (setting_id and filament_id) tree-wide, so a scoped run can still + fail on another vendor's files. + .PARAMETER Validator OrcaSlicer_profile_validator.exe to use; also $env:ORCA_PROFILE_VALIDATOR. Default: the local build*\ Release build (then RelWithDebInfo, MinSizeRel, Debug) for this architecture, else @@ -58,6 +70,9 @@ .EXAMPLE powershell -ExecutionPolicy Bypass -File scripts\check_profile.ps1 validate_system validate_slice + +.EXAMPLE + scripts\check_profile.bat -Vendor Elegoo #> # PositionalBinding is off so that the check names are the only positional arguments; left on, @@ -65,6 +80,7 @@ [CmdletBinding(PositionalBinding = $false)] param( [Alias('p')] [string] $ProfilesDir, + [Alias('v')] [string] $Vendor, [string] $Validator, [string] $WorkDir, [Alias('l')] [int] $LogLevel = 2, @@ -156,12 +172,42 @@ foreach ($name in $Checks) { if ($name -like '-*') { Die "unknown option '$name' (try -Help)" } if ($AllChecks -notcontains $name) { Die "unknown check '$name' (try -Help)" } } +# A check named on the command line always runs; only the default set is narrowed (see the run +# loop below). +$NamedChecks = [bool] $Checks if (-not $Checks) { $Checks = $AllChecks } if (-not $ProfilesDir) { $ProfilesDir = Join-Path $RepoRoot 'resources\profiles' } if (-not (Test-Path -LiteralPath $ProfilesDir -PathType Container)) { Die "profile directory not found: $ProfilesDir" } $ProfilesDir = (Resolve-Path -LiteralPath $ProfilesDir).Path +# A vendor neither tool knows is not an error to them: the static checks load nothing of their own +# and still report success, so a typo would otherwise be three green checks and one baffling slice +# failure. The match has to be made on the names themselves rather than with a Test-Path - the +# validator compares the .json stem case-sensitively, while Windows' case-insensitive +# filesystem would let "creality" pass a path test and then match no vendor. A vendor is a +# .json with a sibling directory; that pair is also what tells one apart from +# blacklist.json and retired_filament_ids.json, which sit in the same folder. +if ($Vendor) { + $found = $false + $suggestion = '' + foreach ($file in (Get-ChildItem -LiteralPath $ProfilesDir -Filter '*.json' -File)) { + $name = [IO.Path]::GetFileNameWithoutExtension($file.Name) + if (-not (Test-Path -LiteralPath (Join-Path $ProfilesDir $name) -PathType Container)) { continue } + if ($name -ceq $Vendor) { $found = $true; break } + if ($name -eq $Vendor) { $suggestion = $name } + } + if (-not $found) { + if ($suggestion) { Die "unknown vendor '$Vendor'; vendor names are case-sensitive, did you mean '$suggestion'?" } + Die "unknown vendor '$Vendor': no such vendor in $ProfilesDir" + } +} + +# The validator's -v and orca_extra_profile_check.py's --vendor both take that stem; an unscoped +# run passes neither, so the checks below splat these in either way. +$VendorArgs = if ($Vendor) { @('-v', $Vendor) } else { @() } +$VendorPyArgs = if ($Vendor) { @('--vendor', $Vendor) } else { @() } + if (-not $WorkDir) { $WorkDir = Join-Path $RepoRoot '.test\check_profiles' } $LogDir = Join-Path $WorkDir 'logs' try { New-Item -ItemType Directory -Force -Path $LogDir | Out-Null } catch { Die "cannot create ${LogDir}: $_" } @@ -350,32 +396,77 @@ function Resolve-Python { Die 'no Python 3 found; install it (or the py launcher) and re-run' } +# The fixtures name every preset "__orca_test", after the "name" inside +# .json rather than the file stem -Vendor takes - BBL.json is "Bambulab", iQ.json is +# "innovatiQ". Falls back to the stem for a vendor file with no readable name. +function Get-VendorDisplayName { + $name = '' + try { $name = (Get-Content -LiteralPath (Join-Path $ProfilesDir "$Vendor.json") -Raw -ErrorAction Stop | ConvertFrom-Json).name } catch { } + if ($name) { return "$name" } + return $Vendor +} + +# Unpack just the presets one vendor's profiles own, and return how many that was. Each fixture +# preset was generated from a single system preset and inherits it by name - none inherits another +# user preset - so the selection is self-contained. +function Expand-VendorPresets([string] $Zip, [string] $Tree, [string] $Prefix) { + # .NET rather than Expand-Archive: a fixture holds around 20,000 entries, and unpacking every + # one of them to keep a twentieth costs more than the validation this is speeding up. + Add-Type -AssemblyName System.IO.Compression.FileSystem + $kept = 0 + $archive = [IO.Compression.ZipFile]::OpenRead($Zip) + try { + foreach ($entry in $archive.Entries) { + # A directory entry has an empty Name, so it never matches and is never created. + if (-not $entry.Name.StartsWith($Prefix, [StringComparison]::Ordinal)) { continue } + $dest = Join-Path $Tree $entry.FullName.Replace('/', [IO.Path]::DirectorySeparatorChar) + [IO.Directory]::CreateDirectory([IO.Path]::GetDirectoryName($dest)) | Out-Null + [IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $dest, $true) + $kept++ + } + } finally { + $archive.Dispose() + } + return $kept +} + # ---------------------------------------------------------------------------- checks $CheckBodies = @{ extra_json_check = { - Invoke-Tool -Exe (Resolve-Python) -Arguments @((Join-Path $RepoRoot 'scripts\orca_extra_profile_check.py')) + Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_extra_profile_check.py')) + $VendorPyArgs) } validate_system = { - Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-l', "$LogLevel") + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-l', "$LogLevel")) } # Slices a two-colour cube through every printer so all custom g-code (incl. # change_filament_gcode) is expanded - catches undefined-placeholder / invalid-flow bugs the # static checks cannot see. validate_slice = { - Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-s', '-l', "$LogLevel") + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-s', '-l', "$LogLevel")) } validate_filament_subtypes = { - Invoke-Tool -Exe $Validator -Arguments @('-p', $ProfilesDir, '-l', "$LogLevel", '-f') + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-l', "$LogLevel", '-f')) } # Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each # is unpacked over the current system profiles and validated, so a profile change that would # break an existing user's presets fails here. + # + # Under -Vendor only that vendor's presets are unpacked, which is what makes the validator's + # -v usable here: -v filters the system vendors but never the user presets, so on a whole-tree + # snapshot it reports every other vendor's presets as unresolvable parents - thousands of + # errors saying nothing about the vendor under test. Teaching -v to filter user presets too is + # the deeper fix, but this runs against whatever validator is to hand, the published nightly + # included, so the picking has to happen here. It picks on the "_" + # filename prefix that generate_custom_presets() (the validator's -g mode) gave every preset in + # these fixtures; a fixture cut from a renamed generator would surface as the "checked nothing" + # warning below. Presets whose source had no vendor carry no prefix - a few of those still name + # one in the middle, like "PET @BBL A1_orca_test" - and only an unscoped run covers them. validate_custom = { $fixturesDir = Join-Path $WorkDir 'profile-fixtures' $outputDir = Join-Path $WorkDir 'custom-preset-validation' @@ -392,6 +483,8 @@ $CheckBodies = @{ return 1 } + $vendorPrefix = if ($Vendor) { "$(Get-VendorDisplayName)_" } else { '' } + $totalKept = 0 $status = 0 $failedLogs = @() $summary = @('## Custom Preset Fixture Validation', '', '| Version | Status | Log |', '| --- | --- | --- |') @@ -424,12 +517,23 @@ $CheckBodies = @{ Remove-Item -LiteralPath $profileTree -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Force -Path $profileTree | Out-Null # Piped rather than copied through \*, so a vendor directory whose name - # holds a wildcard character is still copied by its literal path. - Get-ChildItem -LiteralPath $ProfilesDir -Force | Copy-Item -Destination $profileTree -Recurse -Force + # holds a wildcard character is still copied by its literal path. Under -Vendor the + # validator opens only that vendor and OrcaFilamentLibrary and skips the other sixty-odd + # (PresetBundle::load_system_presets_from_json), so the rest are left out of the copy: + # ~3s a fixture that was going on files nothing opens. + Get-ChildItem -LiteralPath $ProfilesDir -Force | + Where-Object { -not $Vendor -or -not $_.PSIsContainer -or $_.Name -eq $Vendor -or $_.Name -eq 'OrcaFilamentLibrary' } | + Copy-Item -Destination $profileTree -Recurse -Force Remove-Item -LiteralPath (Join-Path $profileTree 'user') -Recurse -Force -ErrorAction SilentlyContinue - Expand-Archive -LiteralPath $fixtureZip -DestinationPath $profileTree -Force + if ($Vendor) { + $kept = Expand-VendorPresets $fixtureZip $profileTree $vendorPrefix + $totalKept += $kept + Write-CheckLog " $kept $Vendor preset file(s)" + } else { + Expand-Archive -LiteralPath $fixtureZip -DestinationPath $profileTree -Force + } - $result = Invoke-Tool -Exe $Validator -Arguments @('-p', $profileTree, '-l', "$LogLevel") -OutFile $logPath + $result = Invoke-Tool -Exe $Validator -Arguments (@('-p', $profileTree) + $VendorArgs + @('-l', "$LogLevel")) -OutFile $logPath if ($result -eq 0) { $summary += "| $version | PASS | $version.log |" # Only failures are worth keeping; each tree is a full copy of resources\profiles. @@ -441,6 +545,12 @@ $CheckBodies = @{ } } + # A vendor added after the newest fixture was cut appears in none of them: nothing failed, + # but nothing was checked either. + if ($Vendor -and $totalKept -eq 0) { + Write-CheckLog "no $Vendor presets in any fixture; validate_custom checked nothing" + } + [IO.File]::WriteAllLines((Join-Path $outputDir 'summary.md'), [string[]] $summary) $summary | ForEach-Object { Write-CheckLog $_ } @@ -473,7 +583,7 @@ $CommentHeadings = @{ function Invoke-Check([string] $Name) { $log = Join-Path $LogDir "$Name.log" Write-Host '' - Write-Host "==> $Name" -ForegroundColor Cyan + Write-Host "==> $Name$(if ($Vendor) { " ($Vendor)" })" -ForegroundColor Cyan $script:LogWriter = New-LogWriter $log try { @@ -510,26 +620,41 @@ try { if ($Checks | Where-Object { $_ -ne 'extra_json_check' }) { $Validator = Resolve-Validator } + # An empty printer set is a failure to the sweep, so validate_slice is recorded as skipped + # rather than run for a vendor that ships no printers (the filament-only OrcaFilamentLibrary); + # naming the check explicitly still runs it. $results = [ordered] @{} + $skipReasons = @{} foreach ($name in $AllChecks) { - if ($Checks -contains $name) { $results[$name] = Invoke-Check $name } + if ($Checks -notcontains $name) { continue } + if ($name -eq 'validate_slice' -and -not $NamedChecks -and $Vendor -and + -not (Test-Path -LiteralPath (Join-Path (Join-Path $ProfilesDir $Vendor) 'machine') -PathType Container)) { + $results[$name] = 'skip' + $skipReasons[$name] = "$Vendor ships no printers" + } else { + $results[$name] = if (Invoke-Check $name) { 'pass' } else { 'fail' } + } } Write-Host '' Write-Host '==> summary' -ForegroundColor Cyan foreach ($name in $results.Keys) { - if ($results[$name]) { - Write-Host " PASS $name" -ForegroundColor Green - } else { - Write-Host " FAIL $name ($(Join-Path $LogDir "$name.log"))" -ForegroundColor Red + switch ($results[$name]) { + 'pass' { Write-Host " PASS $name" -ForegroundColor Green } + 'skip' { Write-Host " SKIP $name ($($skipReasons[$name]))" -ForegroundColor Yellow } + default { Write-Host " FAIL $name ($(Join-Path $LogDir "$name.log"))" -ForegroundColor Red } } } - $failed = @($results.Keys | Where-Object { -not $results[$_] }) + $failed = @($results.Keys | Where-Object { $results[$_] -eq 'fail' }) if (-not $failed) { Remove-Item -LiteralPath (Join-Path $WorkDir 'pr_comment.md') -Force -ErrorAction SilentlyContinue Write-Host '' - Write-Host "All checks passed. Logs: $LogDir" -ForegroundColor Green + if (@($results.Values) -contains 'skip') { + Write-Host "Every check that ran passed, but CI runs the skipped ones too. Logs: $LogDir" -ForegroundColor Green + } else { + Write-Host "All checks passed. Logs: $LogDir" -ForegroundColor Green + } exit 0 } diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh index 9b841d0612..cb56258c9f 100755 --- a/scripts/check_profile.sh +++ b/scripts/check_profile.sh @@ -14,6 +14,10 @@ # has, is moved aside for the duration of the run and restored on exit. Only one run per work # dir at a time. # +# -v/--vendor narrows a run to one vendor while working on that vendor's profiles - the one +# deliberate divergence from CI, which always checks the whole tree. A check that cannot be +# narrowed is left out of the run and reported as skipped; see usage(). +# # Usage: scripts/check_profile.sh [OPTION]... [CHECK]... # The check_* functions run through run_check, which dispatches on the check name, so @@ -33,14 +37,20 @@ HOST_ARCH="$(uname -m)" PROFILES_DIR="${REPO_ROOT}/resources/profiles" WORK_DIR="${REPO_ROOT}/.test/check_profiles" VALIDATOR="${ORCA_PROFILE_VALIDATOR:-}" +# Vendor to check, named after its .json - empty means every vendor, which is exactly what +# both the validator's -v and orca_extra_profile_check.py's --vendor take an empty value to mean. +# So the flag is passed unconditionally below rather than kept in an array bash 3.2 cannot expand +# empty under `set -u`. +VENDOR="" LOG_LEVEL=2 PREFER_DOWNLOAD=0 REFRESH=0 ALL_CHECKS=(extra_json_check validate_system validate_slice validate_filament_subtypes validate_custom) CHECKS=() -# "pass|fail" per check that ran; a string rather than an array because bash 3.2 -# (still the /bin/bash on macOS) cannot expand an empty array under `set -u`. +# "pass|fail" per check that ran, plus "skipwhy" for one a vendor +# scope left out; a string rather than an array because bash 3.2 (still the /bin/bash on macOS) +# cannot expand an empty array under `set -u`. RESULTS="" usage() { @@ -58,6 +68,7 @@ Checks (default: all, in this order): Options: -p, --profiles DIR profile tree to validate (default: resources/profiles) + -v, --vendor NAME check only this vendor, named after its .json (e.g. "Co Print") --validator BIN OrcaSlicer_profile_validator to use; also \$ORCA_PROFILE_VALIDATOR. Default: the local build*/ Release build (then RelWithDebInfo, then Debug) for this architecture, else the nightly release build is @@ -70,6 +81,12 @@ Options: Note: extra_json_check always looks at the tree next to the script (/resources/profiles); --profiles only redirects the validator checks. + +Note: --vendor narrows validate_custom too, by keeping only that vendor's presets in each +fixture tree. The one check it cannot narrow is validate_slice for a vendor that ships no +printers; the summary reports that one as skipped, and naming it explicitly still runs it. +extra_json_check keeps its two cross-vendor checks (setting_id and filament_id) tree-wide, +so a scoped run can still fail on another vendor's files. EOF } @@ -88,6 +105,7 @@ while [ $# -gt 0 ]; do case "$1" in -h|--help) usage; exit 0 ;; -p|--profiles) [ $# -ge 2 ] || die "$1 needs a directory"; PROFILES_DIR="$2"; shift 2 ;; + -v|--vendor) [ $# -ge 2 ] || die "$1 needs a vendor name"; VENDOR="$2"; shift 2 ;; --validator) [ $# -ge 2 ] || die "$1 needs a path"; VALIDATOR="$2"; shift 2 ;; --work-dir) [ $# -ge 2 ] || die "$1 needs a directory"; WORK_DIR="$2"; shift 2 ;; -l|--log-level) [ $# -ge 2 ] || die "$1 needs a number"; LOG_LEVEL="$2"; shift 2 ;; @@ -106,11 +124,40 @@ while [ $# -gt 0 ]; do esac done -[ "${#CHECKS[@]}" -gt 0 ] || CHECKS=("${ALL_CHECKS[@]}") +# A check named on the command line always runs; only the default set is narrowed (see the run +# loop below). +NAMED_CHECKS="${#CHECKS[@]}" +[ "${NAMED_CHECKS}" -gt 0 ] || CHECKS=("${ALL_CHECKS[@]}") [ -d "${PROFILES_DIR}" ] || die "profile directory not found: ${PROFILES_DIR}" PROFILES_DIR="$(cd -- "${PROFILES_DIR}" && pwd)" +# A vendor neither tool knows is not an error to them: the static checks load nothing of their own +# and still report success, so a typo would otherwise be three green checks and one baffling slice +# failure. The match has to be made on the names themselves rather than with a -f test - the +# validator compares the .json stem case-sensitively, while a case-insensitive filesystem +# (macOS, Windows) would let "creality" pass a file test and then match no vendor. A vendor is a +# .json with a sibling / directory; that pair is also what tells one apart from +# blacklist.json and retired_filament_ids.json, which sit in the same folder. +if [ -n "${VENDOR}" ]; then + wanted="$(printf '%s' "${VENDOR}" | tr '[:upper:]' '[:lower:]')" + found="" + suggestion="" + for file in "${PROFILES_DIR}"/*.json; do + name="${file##*/}"; name="${name%.json}" + [ -d "${PROFILES_DIR}/${name}" ] || continue + if [ "${name}" = "${VENDOR}" ]; then + found=1 + break + fi + [ "$(printf '%s' "${name}" | tr '[:upper:]' '[:lower:]')" = "${wanted}" ] && suggestion="${name}" + done + if [ -z "${found}" ]; then + [ -z "${suggestion}" ] || die "unknown vendor '${VENDOR}'; vendor names are case-sensitive, did you mean '${suggestion}'?" + die "unknown vendor '${VENDOR}': no such vendor in ${PROFILES_DIR}" + fi +fi + LOG_DIR="${WORK_DIR}/logs" mkdir -p "${LOG_DIR}" || die "cannot create ${LOG_DIR}" WORK_DIR="$(cd -- "${WORK_DIR}" && pwd)" @@ -315,34 +362,65 @@ resolve_validator() { # ---------------------------------------------------------------------------- checks check_extra_json_check() { - python3 "${REPO_ROOT}/scripts/orca_extra_profile_check.py" + python3 "${REPO_ROOT}/scripts/orca_extra_profile_check.py" --vendor "${VENDOR}" } check_validate_system() { - "${VALIDATOR}" -p "${PROFILES_DIR}" -l "${LOG_LEVEL}" + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -l "${LOG_LEVEL}" } # Slices a two-colour cube through every printer so all custom g-code (incl. change_filament_gcode) # is expanded - catches undefined-placeholder / invalid-flow bugs the static checks cannot see. check_validate_slice() { - "${VALIDATOR}" -p "${PROFILES_DIR}" -s -l "${LOG_LEVEL}" + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -s -l "${LOG_LEVEL}" } check_validate_filament_subtypes() { - "${VALIDATOR}" -p "${PROFILES_DIR}" -l "${LOG_LEVEL}" -f + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -l "${LOG_LEVEL}" -f +} + +# The fixtures name every preset "__orca_test", after the "name" inside +# .json rather than the file stem --vendor takes - BBL.json is "Bambulab", iQ.json is +# "innovatiQ". Falls back to the stem for a vendor file with no readable name. +vendor_display_name() { + local name + name="$(VENDOR_JSON="${PROFILES_DIR}/${VENDOR}.json" python3 - <<'PY' +import json +import os + +try: + with open(os.environ["VENDOR_JSON"], encoding="utf-8") as fh: + print(json.load(fh).get("name", "")) +except Exception: + pass +PY +)" + printf '%s\n' "${name:-${VENDOR}}" } # Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each is # unpacked over the current system profiles and validated, so a profile change that would break # an existing user's presets fails here. +# +# Under --vendor only that vendor's presets are unpacked, which is what makes the validator's -v +# usable here: -v filters the system vendors but never the user presets, so on a whole-tree +# snapshot it reports every other vendor's presets as unresolvable parents - thousands of errors +# saying nothing about the vendor under test. Teaching -v to filter user presets too is the deeper +# fix, but this runs against whatever validator is to hand, the published nightly included, so the +# picking has to happen here. It picks on the "_" filename prefix that +# generate_custom_presets() (the validator's -g mode) gave every preset in these fixtures; a +# fixture cut from a renamed generator would surface as the "checked nothing" warning below. +# Presets whose source had no vendor carry no prefix - a few of those still name one in the +# middle, like "PET @BBL A1_orca_test" - and only an unscoped run covers them. check_validate_custom() { local fixtures_dir="${WORK_DIR}/profile-fixtures" local output_dir="${WORK_DIR}/custom-preset-validation" local summary="${output_dir}/summary.md" - local status=0 failed_logs="" - local version asset expected_sha256 asset_url fixture_zip profile_tree log_path actual_sha256 result + local status=0 failed_logs="" vendor_prefix="" total_kept=0 + local version asset expected_sha256 asset_url fixture_zip profile_tree log_path actual_sha256 result kept command -v unzip >/dev/null 2>&1 || { msg "unzip is required for validate_custom"; return 1; } + [ -z "${VENDOR}" ] || vendor_prefix="$(vendor_display_name)_" mkdir -p "${fixtures_dir}" "${output_dir}" || return 1 fetch "${FIXTURE_RELEASE_URL}/manifest.json" "${fixtures_dir}/manifest.json" force || return 1 @@ -407,11 +485,28 @@ PY msg "validating custom presets from ${version} ..." rm -rf "${profile_tree}" mkdir -p "${profile_tree}" || return 1 - cp -a "${PROFILES_DIR}/." "${profile_tree}/" || return 1 - rm -rf "${profile_tree}/user" - unzip -q "${fixture_zip}" -d "${profile_tree}" || return 1 + if [ -n "${VENDOR}" ]; then + # -v has the validator open this vendor and OrcaFilamentLibrary and skip the rest + # (PresetBundle::load_system_presets_from_json), and unzip's * spans '/', so one + # pattern reaches every preset type. Copying and unpacking only those turns a ~5s + # setup per fixture into ~0.5s. Naming the vendor twice, when it is the library + # itself, is not an error to cp; exit 11 is unzip's "nothing matched", which is the + # fixture-predates-the-vendor case the warning below reports. + cp -a "${PROFILES_DIR}"/*.json "${PROFILES_DIR}/${VENDOR}" \ + "${PROFILES_DIR}/OrcaFilamentLibrary" "${profile_tree}/" || return 1 + unzip -q "${fixture_zip}" "user/*/${vendor_prefix}*" -d "${profile_tree}" + result=$? + [ "${result}" -eq 0 ] || [ "${result}" -eq 11 ] || return 1 + kept="$(find "${profile_tree}/user" -type f 2>/dev/null | wc -l | tr -d ' ')" + total_kept=$((total_kept + kept)) + msg " ${kept} ${VENDOR} preset file(s)" + else + cp -a "${PROFILES_DIR}/." "${profile_tree}/" || return 1 + rm -rf "${profile_tree}/user" + unzip -q "${fixture_zip}" -d "${profile_tree}" || return 1 + fi - "${VALIDATOR}" -p "${profile_tree}" -l "${LOG_LEVEL}" > "${log_path}" 2>&1 + "${VALIDATOR}" -p "${profile_tree}" -v "${VENDOR}" -l "${LOG_LEVEL}" > "${log_path}" 2>&1 result=$? if [ "${result}" -eq 0 ]; then @@ -425,6 +520,12 @@ PY fi done < "${fixtures_dir}/fixtures.tsv" + # A vendor added after the newest fixture was cut appears in none of them: nothing failed, but + # nothing was checked either. + if [ -n "${VENDOR}" ] && [ "${total_kept}" -eq 0 ]; then + msg "no ${VENDOR} presets in any fixture; validate_custom checked nothing" + fi + cat "${summary}" if [ -n "${failed_logs}" ]; then echo "" @@ -461,7 +562,7 @@ run_check() { local name="$1" local log="${LOG_DIR}/${name}.log" local result - printf '\n%s==> %s%s\n' "${C_BOLD}" "${name}" "${C_RESET}" + printf '\n%s==> %s%s%s\n' "${C_BOLD}" "${name}" "${VENDOR:+ (${VENDOR})}" "${C_RESET}" "check_${name}" 2>&1 | tee "${log}" result="${PIPESTATUS[0]}" if [ "${result}" -eq 0 ]; then @@ -477,17 +578,30 @@ if wants validate_system || wants validate_slice || wants validate_filament_subt resolve_validator fi +# An empty printer set is a failure to the sweep, so validate_slice is recorded as skipped rather +# than run for a vendor that ships no printers (the filament-only OrcaFilamentLibrary); naming the +# check explicitly still runs it. for check in "${ALL_CHECKS[@]}"; do - wants "${check}" && run_check "${check}" + wants "${check}" || continue + if [ "${check}" = validate_slice ] && [ "${NAMED_CHECKS}" -eq 0 ] && [ -n "${VENDOR}" ] && + [ ! -d "${PROFILES_DIR}/${VENDOR}/machine" ]; then + RESULTS="${RESULTS}${check}"$'\t'"skip"$'\t'"${VENDOR} ships no printers"$'\n' + else + run_check "${check}" + fi done # Summary, plus the comment check_profiles_comment.yml would post when something fails. failed=0 +skipped=0 printf '\n%s==> summary%s\n' "${C_BOLD}" "${C_RESET}" -while IFS=$'\t' read -r name result; do +while IFS=$'\t' read -r name result why; do [ -n "${name}" ] || continue if [ "${result}" = "pass" ]; then printf '%s PASS%s %s\n' "${C_GREEN}" "${C_RESET}" "${name}" + elif [ "${result}" = "skip" ]; then + printf '%s SKIP%s %s (%s)\n' "${C_BOLD}" "${C_RESET}" "${name}" "${why}" + skipped=1 else printf '%s FAIL%s %s (%s)\n' "${C_RED}" "${C_RESET}" "${name}" "${LOG_DIR}/${name}.log" failed=1 @@ -498,7 +612,12 @@ EOF if [ "${failed}" -eq 0 ]; then rm -f "${WORK_DIR}/pr_comment.md" - printf '\n%sAll checks passed.%s Logs: %s\n' "${C_GREEN}" "${C_RESET}" "${LOG_DIR}" + if [ "${skipped}" -eq 0 ]; then + printf '\n%sAll checks passed.%s Logs: %s\n' "${C_GREEN}" "${C_RESET}" "${LOG_DIR}" + else + printf '\n%sEvery check that ran passed%s, but CI runs the skipped ones too. Logs: %s\n' \ + "${C_GREEN}" "${C_RESET}" "${LOG_DIR}" + fi exit 0 fi From 21fdd7028fda2e1eb0da70ab6d120f8936e2a5f8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 3 Sep 2026 11:25:49 +0800 Subject: [PATCH 088/208] Fix spurious slice-validation failures when checking all vendors The sweep now validates each printer with the filament that printer ships, so a run over every vendor reports what a single-vendor run does. Validator only - no change to slicing output or shipped profiles. --- src/dev-utils/OrcaSlicer_profile_validator.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/dev-utils/OrcaSlicer_profile_validator.cpp b/src/dev-utils/OrcaSlicer_profile_validator.cpp index 49a38cd1c4..21c6b33180 100644 --- a/src/dev-utils/OrcaSlicer_profile_validator.cpp +++ b/src/dev-utils/OrcaSlicer_profile_validator.cpp @@ -175,6 +175,17 @@ void select_printer_default_presets(PresetBundle &bundle) if (const auto *def_fil = printer_preset.config.option("default_filament_profile"); def_fil != nullptr && !def_fil->values.empty()) bundle.filaments.select_preset_by_name(def_fil->values.front(), /*force=*/true); + // Re-seed the per-slot filament list from that selection, or the sweep's result depends on the + // printer sliced before it. Once there are 2+ slots, full_config() builds the filament config from + // filament_presets and ignores the selected preset (PresetBundle::full_fff_config), while + // update_compatible() only replaces a slot that has gone *incompatible* - and when it does, it ranks + // the outgoing preset's alias, then its filament type, above the printer's own default. The sweep + // grows every printer to 2 slots and update_multi_material_filament_presets() never shrinks them, so + // a material picked up on the first printer rides the whole run. With all vendors loaded the first + // printer inherits a TPU (the load-time pick is whichever filament sorts first), the type match + // re-resolves it to "Generic TPU @System", and its alias then pins every later printer to that + // vendor's own "Generic TPU @..." - which the BBL dual-nozzle profiles rightly refuse to group. + bundle.filament_presets.assign(1, bundle.filaments.get_selected_preset_name()); } // The vendor/printer currently being sliced, stamped onto every engine log record by the sink below so From e2b251c145620fc6b0214202a4fc863fa73ca9ed Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 3 Sep 2026 12:14:14 +0800 Subject: [PATCH 089/208] Fix generic PLA and default filaments on the Creality Hi --- resources/profiles/Creality.json | 6 +++--- ...c PLA @Hi-all.json => Generic PLA @Creality Hi-all.json} | 5 +++-- .../profiles/Creality/filament/Generic PLA @Hi-all.json | 2 -- .../filament/Generic PLA High Speed @Creality Hi-all.json | 2 +- .../filament/Generic PLA Matte @Creality Hi-all.json | 2 +- .../filament/Generic PLA Silk @Creality Hi-all.json | 2 +- .../filament/Generic PLA Wood @Creality Hi-all.json | 2 +- .../profiles/Creality/machine/Creality Hi 0.2 nozzle.json | 2 +- .../profiles/Creality/machine/Creality Hi 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality Hi 0.6 nozzle.json | 2 +- .../profiles/Creality/machine/Creality Hi 0.8 nozzle.json | 2 +- resources/profiles/Creality/machine/Creality Hi.json | 2 +- scripts/filament_id_snapshot.json | 1 - 13 files changed, 15 insertions(+), 17 deletions(-) rename resources/profiles/Creality/filament/{Creality Generic PLA @Hi-all.json => Generic PLA @Creality Hi-all.json} (91%) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index a043d51433..7db87efed7 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.78", + "version": "02.03.02.79", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ @@ -1809,8 +1809,8 @@ "sub_path": "filament/Generic PLA @Creality Ender-3V3-all.json" }, { - "name": "Creality Generic PLA @Hi-all", - "sub_path": "filament/Creality Generic PLA @Hi-all.json" + "name": "Generic PLA @Creality Hi-all", + "sub_path": "filament/Generic PLA @Creality Hi-all.json" }, { "name": "Generic PLA @Creality K1-all", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json similarity index 91% rename from resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json rename to resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json index 63f51623a0..452c7854ae 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json @@ -1,9 +1,10 @@ { "type": "filament", - "name": "Creality Generic PLA @Hi-all", + "name": "Generic PLA @Creality Hi-all", "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @Hi-all;Creality Generic PLA Hi-all", "from": "system", - "setting_id": "3gf0CImK4nJwfXrB", + "setting_id": "6rwK4GqvNrgaw4kF", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json index b79aa1d05f..43bb0786ea 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json @@ -136,8 +136,6 @@ "pressure_advance": "0.04", "support_material_interface_fan_speed": "-1", "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], "filament_id": "OFDSrzZ8" diff --git a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json index 0e64943dd5..cb184a432a 100644 --- a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA High Speed @Creality Hi-all", - "inherits": "Creality Generic PLA @Hi-all", + "inherits": "Generic PLA @Creality Hi-all", "renamed_from": "Creality Generic PLA High Speed @Hi-all;Creality Generic PLA High Speed Hi-all", "from": "system", "setting_id": "KJZ1ztg3jL2Cg4fi", diff --git a/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json index c657630c40..1cff84c8bf 100644 --- a/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA Matte @Creality Hi-all", - "inherits": "Creality Generic PLA @Hi-all", + "inherits": "Generic PLA @Creality Hi-all", "renamed_from": "Creality Generic PLA Matte @Hi-all;Creality Generic PLA Matte Hi-all", "from": "system", "setting_id": "pFxJgjam0WAeSKqf", diff --git a/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json index bd41fff189..3358b98c75 100644 --- a/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA Silk @Creality Hi-all", - "inherits": "Creality Generic PLA @Hi-all", + "inherits": "Generic PLA @Creality Hi-all", "renamed_from": "Creality Generic PLA Silk @Hi-all;Creality Generic PLA Silk Hi-all", "from": "system", "setting_id": "k1ofgUXqhHGSPDPY", diff --git a/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json index b272cb185a..62f6ddf42c 100644 --- a/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA Wood @Creality Hi-all", - "inherits": "Creality Generic PLA @Hi-all", + "inherits": "Generic PLA @Creality Hi-all", "renamed_from": "Creality Generic PLA Wood @Hi-all;Creality Generic PLA Wood Hi-all", "from": "system", "setting_id": "PNqfF5ecYqqpobdh", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json index b7a1676baa..57dcd7e949 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json @@ -91,7 +91,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @System" ], "deretraction_speed": "40", "extruder_colour": "#018001", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json index 74cd4559d5..0372431a1e 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json @@ -135,7 +135,7 @@ "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X260 Y180 F30000\nG1 Z{z_after_toolchange} F600", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Creality Hi-all" ], "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM104 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 E0.8 F300\nG1 X0 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X150 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "G1 X0 Y180 F8000\nEND_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json index 402771c410..f7bcd5884d 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json @@ -135,7 +135,7 @@ "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X260 Y180 F30000\nG1 Z{z_after_toolchange} F600", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Creality Hi-all" ], "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM104 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 E0.8 F300\nG1 X0 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X150 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "G1 X0 Y180 F8000\nEND_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json index 5f43c0992c..23e19a2a66 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json @@ -86,7 +86,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Hi-all" ], "deretraction_speed": "40", "extruder_colour": "#018001", diff --git a/resources/profiles/Creality/machine/Creality Hi.json b/resources/profiles/Creality/machine/Creality Hi.json index 107d587cc5..279daf531c 100644 --- a/resources/profiles/Creality/machine/Creality Hi.json +++ b/resources/profiles/Creality/machine/Creality Hi.json @@ -9,5 +9,5 @@ "bed_texture": "creality_hi_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Generic ABS @Creality Hi-all;Generic ASA @Creality Hi-all;Generic ASA-CF @Creality Hi-all;Generic PETG @Creality Hi-all;Generic PETG-CF @Creality Hi-all;Generic PLA @Creality Hi-all;Generic PLA High Speed @Creality Hi-all;Generic PLA Matte @Creality Hi-all;Generic PLA Silk @Creality Hi-all;Generic PLA-CF @Creality Hi-all;Generic PLA Wood @Creality Hi-all;Generic TPU @Creality Hi-all" + "default_materials": "Generic ABS @Creality Hi-all;Generic ABS @Hi-all;Generic ASA @Creality Hi-all;Generic ASA-CF @Creality Hi-all;Generic PETG @Creality Hi-all;Generic PETG @Hi-all;Generic PETG-CF @Creality Hi-all;Generic PLA @Creality Hi-all;Generic PLA @Hi-all;Generic PLA High Speed @Creality Hi-all;Generic PLA Matte @Creality Hi-all;Generic PLA Silk @Creality Hi-all;Generic PLA-CF @Creality Hi-all;Generic PLA Wood @Creality Hi-all;Generic TPU @Creality Hi-all" } diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index c9966fc8d6..efaffb0654 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -2055,7 +2055,6 @@ "Co Print/Generic PLA", "CoLiDo/Generic PLA", "Comgrow/Generic PLA", - "Creality/Creality Generic PLA", "Creality/Generic PLA", "Custom/Generic PLA", "DeltaMaker/Generic PLA", From 8c7160079e73626061eaa6f157c84e9c501461cd Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Thu, 3 Sep 2026 13:17:13 +0800 Subject: [PATCH 090/208] Revert clang-format changes then reapplied chagnes for Plater/PresetBundle. Fixed extruder masking incorrectness. Fix warning notifications stacking --- src/libslic3r/Format/bbs_3mf.cpp | 12 +- src/libslic3r/Preset.cpp | 2 + src/libslic3r/PresetBundle.cpp | 3706 ++++---- src/libslic3r/PublishSettings.cpp | 44 +- src/slic3r/GUI/NotificationManager.cpp | 36 +- src/slic3r/GUI/NotificationManager.hpp | 5 +- src/slic3r/GUI/Plater.cpp | 10596 ++++++++++++----------- tests/libslic3r/test_3mf.cpp | 93 + 8 files changed, 7286 insertions(+), 7208 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 3a3ee20e6f..4b9c666ce0 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -6997,8 +6997,16 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // receivers onto a geometry-only fallback whose baked-in popup misreports the // file ("old OrcaSlicer version" / "BambuStudio"), while tag-less files classify // as From_Other and import the geometry silently. - if (!m_minimal_published) + if (m_minimal_published) { + // metadata_item_map is seeded from the input file's metadata_items above, so a + // project opened from a regular Orca/BBS 3MF still carries the Application / + // OrcaSlicer tags it came with. Erase them: skipping the overwrite is not enough, + // and an empty value would still emit a "present-looking" tag to old receivers. + metadata_item_map.erase(BBL_APPLICATION_TAG); + metadata_item_map.erase(ORCASLICER_TAG); + } else { metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + } } metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); @@ -7025,7 +7033,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) << xml_escape(item.second) << "\n"; if (item.first == BBL_APPLICATION_TAG) { // The OrcaSlicer tag is only written for files that carry the Application - // tag, which a minimal published 3MF omits (see the map assignment above): + // tag, which a minimal published 3MF erases (see the map assignment above): // the branch below is unreachable in minimal mode. stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" << xml_escape(SoftFever_VERSION) << "\n"; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 6646d98e71..460276c420 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -3096,6 +3096,8 @@ std::string PresetCollection::add_detached_preset(const std::string &name_base, // effects or project-embedded path. lock(); const auto it = this->find_preset_internal(final_name); + if (m_presets.begin() + m_idx_selected >= it) + ++m_idx_selected; Preset &preset = *m_presets.insert(it, stored); preset.name = final_name; preset.vendor = nullptr; diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 3e88d67ea6..e4bafd0071 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -43,7 +43,7 @@ // Store the print/filament/printer presets into a "presets" subdirectory of the Slic3rPE config dir. // This breaks compatibility with the upstream Slic3r if the --datadir is used to switch between the two versions. -// #define SLIC3R_PROFILE_USE_PRESETS_SUBDIR +//#define SLIC3R_PROFILE_USE_PRESETS_SUBDIR namespace Slic3r { @@ -51,29 +51,45 @@ namespace Slic3r { // below is the reduced subset that crosses over in "published" 3MF mode; keep both in sync. // s_project_options_published additionally carries wipe_tower_rotation_angle, which normal // loads do not import (it is not listed here): published-only plate geometry. -static std::vector s_project_options{"flush_volumes_vector", "flush_volumes_matrix", - // BBS - "filament_colour", "filament_colour_type", "filament_multi_colour", "wipe_tower_x", - "wipe_tower_y", "curr_bed_type", "flush_multiplier", - // Fast-purge mode: project-level purge control, inert at Default. - "flush_multiplier_fast", "prime_volume_mode", "nozzle_volume_type", "filament_map_mode", - "filament_map", - // Per-filament nozzle-volume choice; project-level like filament_map so the per-filament - // slot resolution survives preset switches. - "filament_volume_map", - // Per-filament physical-nozzle choice the grouping engine writes back; project-level so a - // saved project round-trips the assignment alongside filament_map/filament_volume_map. - "filament_nozzle_map", - // Filament Track Switch device state: whether the switch is installed and ready, and - // whether dynamic per-nozzle filament mapping is active. Persisted with the project and - // restored from a saved 3mf; reset to false on load and set true only by live device sync. - "has_filament_switcher", "enable_filament_dynamic_map", - // Mixed-color filament slots. Project-level parallel arrays indexed like filament_colour: - // which slots are virtual mixes, their component filaments, blend ratios and the optional - // Z-gradient description. Kept with the project so a saved 3mf round-trips the mix setup. - "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", - "filament_mixed_gradient", "filament_mixed_gradient_range", - "filament_mixed_gradient_curve", "filament_mixed_gradient_per_part"}; +static std::vector s_project_options { + "flush_volumes_vector", + "flush_volumes_matrix", + // BBS + "filament_colour", + "filament_colour_type", + "filament_multi_colour", + "wipe_tower_x", + "wipe_tower_y", + "curr_bed_type", + "flush_multiplier", + // Fast-purge mode: project-level purge control, inert at Default. + "flush_multiplier_fast", + "prime_volume_mode", + "nozzle_volume_type", + "filament_map_mode", + "filament_map", + // Per-filament nozzle-volume choice; project-level like filament_map so the per-filament + // slot resolution survives preset switches. + "filament_volume_map", + // Per-filament physical-nozzle choice the grouping engine writes back; project-level so a + // saved project round-trips the assignment alongside filament_map/filament_volume_map. + "filament_nozzle_map", + // Filament Track Switch device state: whether the switch is installed and ready, and + // whether dynamic per-nozzle filament mapping is active. Persisted with the project and + // restored from a saved 3mf; reset to false on load and set true only by live device sync. + "has_filament_switcher", + "enable_filament_dynamic_map", + // Mixed-color filament slots. Project-level parallel arrays indexed like filament_colour: + // which slots are virtual mixes, their component filaments, blend ratios and the optional + // Z-gradient description. Kept with the project so a saved 3mf round-trips the mix setup. + "filament_is_mixed", + "filament_mixed_components", + "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", + "filament_mixed_gradient_range", + "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" +}; // Project options applied when loading a "published" 3MF project: s_project_options minus the // filament/purge keys, plus wipe_tower_rotation_angle (plate geometry that only published @@ -90,24 +106,25 @@ static std::vector s_project_options{"flush_volumes_vector", "flush // assertions in tests/libslic3r/test_preset_bundle_loading.cpp guard both directions. static std::vector s_project_options_published{"wipe_tower_x", "wipe_tower_y", "wipe_tower_rotation_angle"}; -// Orca: add custom as default -const char* PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom"; -const char* PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; -const char* PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT = "0.4"; -const char* PresetBundle::ORCA_DEFAULT_FILAMENT = "Generic PLA @System"; -const char* PresetBundle::ORCA_FILAMENT_LIBRARY = "OrcaFilamentLibrary"; -const char* PresetBundle::ORCA_DEFAULT_FILAMENT_PLACEHOLDER = "Default Filament"; +//Orca: add custom as default +const char *PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom"; +const char *PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; +const char *PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT = "0.4"; +const char *PresetBundle::ORCA_DEFAULT_FILAMENT = "Generic PLA @System"; +const char *PresetBundle::ORCA_FILAMENT_LIBRARY = "OrcaFilamentLibrary"; +const char *PresetBundle::ORCA_DEFAULT_FILAMENT_PLACEHOLDER = "Default Filament"; -DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset, - Preset& in_print_preset, - const DynamicPrintConfig& project_config, - std::vector& in_filament_presets, - bool apply_extruder, - std::optional> filament_maps_new, - std::optional> filament_volume_maps_new) +DynamicPrintConfig PresetBundle::construct_full_config( + Preset& in_printer_preset, + Preset& in_print_preset, + const DynamicPrintConfig& project_config, + std::vector& in_filament_presets, + bool apply_extruder, + std::optional> filament_maps_new, + std::optional> filament_volume_maps_new) { - DynamicPrintConfig& printer_config = in_printer_preset.config; - DynamicPrintConfig& print_config = in_print_preset.config; + DynamicPrintConfig &printer_config = in_printer_preset.config; + DynamicPrintConfig &print_config = in_print_preset.config; DynamicPrintConfig out; out.apply(FullPrintConfig::defaults()); @@ -119,7 +136,7 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset size_t num_filaments = in_filament_presets.size(); std::vector filament_maps = out.option("filament_map")->values; - std::vector filament_volume_maps(num_filaments, (int) nvtStandard); + std::vector filament_volume_maps(num_filaments, (int)nvtStandard); ConfigOptionInts* filament_volume_map_opt = out.option("filament_volume_map"); if (filament_maps_new.has_value()) @@ -137,7 +154,7 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset filament_volume_maps.resize(num_filaments, nvtStandard); } - auto* extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); + auto *extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); // Collect the "compatible_printers_condition" and "inherits" values over all presets (print, filaments, printers) into a single vector. std::vector compatible_printers_condition; std::vector compatible_prints_condition; @@ -146,12 +163,11 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset std::vector print_compatible_printers; // BBS: add logic for settings check between different system presets std::vector different_settings; - std::string different_print_settings, different_printer_settings; + std::string different_print_settings, different_printer_settings; compatible_printers_condition.emplace_back(in_print_preset.compatible_printers_condition()); - const ConfigOptionStrings* compatible_printers = print_config.option("compatible_printers", false); - if (compatible_printers) - print_compatible_printers = compatible_printers->values; + const ConfigOptionStrings *compatible_printers = print_config.option("compatible_printers", false); + if (compatible_printers) print_compatible_printers = compatible_printers->values; // BBS: add logic for settings check between different system presets std::string print_inherits = in_print_preset.inherits(); inherits.emplace_back(print_inherits); @@ -161,7 +177,7 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset int extruder_count = 1, extruder_volume_type_count = 1; bool different_extruder = false; if (apply_extruder) { - different_extruder = out.support_different_extruders(extruder_count); + different_extruder = out.support_different_extruders(extruder_count); extruder_volume_type_count = out.get_extruder_nozzle_volume_count(extruder_count, nozzle_volume_types); if ((extruder_count > 1) || different_extruder) { @@ -173,13 +189,10 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset // per variant (e.g. X2D machine_max_speed_e/machine_max_acceleration_e). The slicing // path composes variant_2 first and is unaffected; changing the order here would alter // long-standing composed values, so any fix must re-baseline them. - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); // update print config related with variants - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - print_options_with_variant, "print_extruder_id", "print_extruder_variant"); + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, print_options_with_variant, "print_extruder_id", "print_extruder_variant"); } } @@ -187,9 +200,7 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset // BBS: update filament config related with variants DynamicPrintConfig filament_config = in_filament_presets[0].config; if (apply_extruder && ((extruder_count > 1) || different_extruder)) - filament_config.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - filament_options_with_variant, "", "filament_extruder_variant", 1, - filament_maps[0], (NozzleVolumeType) filament_volume_maps[0]); + filament_config.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, filament_options_with_variant, "", "filament_extruder_variant", 1, filament_maps[0], (NozzleVolumeType)filament_volume_maps[0]); out.apply(filament_config); compatible_printers_condition.emplace_back(in_filament_presets[0].compatible_printers_condition()); compatible_prints_condition.emplace_back(in_filament_presets[0].compatible_prints_condition()); @@ -197,13 +208,13 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset inherits.emplace_back(filament_inherits); filament_ids.emplace_back(in_filament_presets[0].filament_id); - std::vector& filament_self_indice = out.option("filament_self_index", true)->values; - int index_size = out.option("filament_extruder_variant")->size(); + std::vector &filament_self_indice = out.option("filament_self_index", true)->values; + int index_size = out.option("filament_extruder_variant")->size(); filament_self_indice.resize(index_size, 1); } else { - std::vector filament_configs; - std::vector filament_presets; - for (const Preset& preset : in_filament_presets) { + std::vector filament_configs; + std::vector filament_presets; + for (const Preset & preset : in_filament_presets) { filament_presets.emplace_back(&preset); filament_configs.emplace_back(&(preset.config)); } @@ -213,45 +224,37 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset for (size_t i = 0; i < num_filaments; ++i) { filament_temp_configs[i] = *(filament_configs[i]); if (apply_extruder && ((extruder_count > 1) || different_extruder)) - filament_temp_configs[i].update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, - nozzle_volume_types, filament_options_with_variant, "", - "filament_extruder_variant", 1, filament_maps[i], - (NozzleVolumeType) filament_volume_maps[i]); + filament_temp_configs[i].update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, filament_options_with_variant, "", "filament_extruder_variant", 1, filament_maps[i], (NozzleVolumeType)filament_volume_maps[i]); } // loop through options and apply them to the resulting config. std::vector filament_variant_count(num_filaments, 1); - for (const t_config_option_key& key : in_filament_presets[0].config.keys()) { - if (key == "compatible_prints" || key == "compatible_printers") - continue; + for (const t_config_option_key &key : in_filament_presets[0].config.keys()) { + if (key == "compatible_prints" || key == "compatible_printers") continue; // Get a destination option. - ConfigOption* opt_dst = out.option(key, false); + ConfigOption *opt_dst = out.option(key, false); if (opt_dst->is_scalar()) { // Get an option, do not create if it does not exist. - const ConfigOption* opt_src = filament_temp_configs.front().option(key); - if (opt_src != nullptr) - opt_dst->set(opt_src); + const ConfigOption *opt_src = filament_temp_configs.front().option(key); + if (opt_src != nullptr) opt_dst->set(opt_src); } else { // BBS - ConfigOptionVectorBase* opt_vec_dst = static_cast(opt_dst); + ConfigOptionVectorBase *opt_vec_dst = static_cast(opt_dst); { if (apply_extruder) { - std::vector filament_opts(num_filaments, nullptr); + std::vector filament_opts(num_filaments, nullptr); // Setting a vector value from all filament_configs. - for (size_t i = 0; i < filament_opts.size(); ++i) - filament_opts[i] = filament_temp_configs[i].option(key); + for (size_t i = 0; i < filament_opts.size(); ++i) filament_opts[i] = filament_temp_configs[i].option(key); opt_vec_dst->set(filament_opts); } else { for (size_t i = 0; i < num_filaments; ++i) { - const ConfigOptionVectorBase* filament_option = static_cast( - filament_temp_configs[i].option(key)); + const ConfigOptionVectorBase *filament_option = static_cast(filament_temp_configs[i].option(key)); if (i == 0) opt_vec_dst->set(filament_option); else opt_vec_dst->append(filament_option); - if (key == "filament_extruder_variant") - filament_variant_count[i] = filament_option->size(); + if (key == "filament_extruder_variant") filament_variant_count[i] = filament_option->size(); } } } @@ -260,14 +263,12 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset if (!apply_extruder) { // append filament_self_index - std::vector& filament_self_indice = out.option("filament_self_index", true)->values; - int index_size = out.option("filament_extruder_variant")->size(); + std::vector &filament_self_indice = out.option("filament_self_index", true)->values; + int index_size = out.option("filament_extruder_variant")->size(); filament_self_indice.resize(index_size, 1); int k = 0; for (size_t i = 0; i < num_filaments; i++) { - for (size_t j = 0; j < filament_variant_count[i]; j++) { - filament_self_indice[k++] = i + 1; - } + for (size_t j = 0; j < filament_variant_count[i]; j++) { filament_self_indice[k++] = i + 1; } } } } @@ -281,10 +282,10 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset // BBS: add logic for settings check between different system presets out.erase("different_settings_to_system"); - static const char* keys[] = {"support_filament", "support_interface_filament"}; + static const char *keys[] = {"support_filament", "support_interface_filament"}; for (size_t i = 0; i < sizeof(keys) / sizeof(keys[0]); ++i) { std::string key = std::string(keys[i]); - auto* opt = dynamic_cast(out.option(key, false)); + auto *opt = dynamic_cast(out.option(key, false)); assert(opt != nullptr); opt->value = boost::algorithm::clamp(opt->value, 0, int(num_filaments)); } @@ -300,28 +301,27 @@ DynamicPrintConfig PresetBundle::construct_full_config(Preset& in_printer_preset out.option("filament_map", true)->values = filament_maps; out.option("filament_volume_map", true)->values = filament_volume_maps; - auto add_if_some_non_empty = [&out](std::vector&& values, const std::string& key) { + auto add_if_some_non_empty = [&out](std::vector &&values, const std::string &key) { bool nonempty = false; - for (const std::string& v : values) + for (const std::string &v : values) if (!v.empty()) { nonempty = true; break; } - if (nonempty) - out.set_key_value(key, new ConfigOptionStrings(std::move(values))); + if (nonempty) out.set_key_value(key, new ConfigOptionStrings(std::move(values))); }; add_if_some_non_empty(std::move(compatible_printers_condition), "compatible_machine_expression_group"); add_if_some_non_empty(std::move(compatible_prints_condition), "compatible_process_expression_group"); add_if_some_non_empty(std::move(inherits), "inherits_group"); // BBS: add logic for settings check between different system presets - // add_if_some_non_empty(std::move(different_settings), "different_settings_to_system"); + //add_if_some_non_empty(std::move(different_settings), "different_settings_to_system"); add_if_some_non_empty(std::move(print_compatible_printers), "print_compatible_printers"); out.option("printer_technology", true)->value = ptFFF; return out; } -std::string PresetBundle::find_preset_vendor(const std::string& preset_name, Preset::Type type) +std::string PresetBundle::find_preset_vendor(const std::string &preset_name, Preset::Type type) { // Get the resources preset directory (contains all bundled vendor profiles) fs::path system_dir = fs::path(Slic3r::resources_dir()) / PRESET_PROFILES_DIR; @@ -347,9 +347,10 @@ std::string PresetBundle::find_preset_vendor(const std::string& preset_name, Pre // instead of the raw profile JSONs, by its cache alone. for (const std::string& vendor_name : vendor_names_in(system_dir)) { const fs::path vendor_json = system_dir / (vendor_name + ".json"); - if (!fs::exists(vendor_json)) { + if (! fs::exists(vendor_json)) { if (VendorCacheFile::carries_preset((system_dir / (vendor_name + ".opc")).string(), vendor_name, type, preset_name)) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found preset " << preset_name << " in vendor cache " << vendor_name; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found preset " << preset_name + << " in vendor cache " << vendor_name; return vendor_name; } continue; @@ -385,11 +386,13 @@ std::string PresetBundle::find_preset_vendor(const std::string& preset_name, Pre continue; // Found the preset! Get the vendor name and install the entire bundle - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found preset " << p_name << " in vendor bundle " << vendor_name; - + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found preset " << p_name + << " in vendor bundle " << vendor_name; + return vendor_name; } - } catch (const std::exception& e) { + } + catch (const std::exception &e) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " Failed to find vendor name for " << preset_name << ": " << e.what(); return ""; } @@ -400,21 +403,11 @@ std::string PresetBundle::find_preset_vendor(const std::string& preset_name, Pre } PresetBundle::PresetBundle() - : prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast(FullPrintConfig::defaults())) - , filaments(Preset::TYPE_FILAMENT, - Preset::filament_options(), - static_cast(FullPrintConfig::defaults()), - ORCA_DEFAULT_FILAMENT_PLACEHOLDER) - , sla_materials(Preset::TYPE_SLA_MATERIAL, - Preset::sla_material_options(), - static_cast(SLAFullPrintConfig::defaults())) - , sla_prints(Preset::TYPE_SLA_PRINT, - Preset::sla_print_options(), - static_cast(SLAFullPrintConfig::defaults())) - , printers(Preset::TYPE_PRINTER, - Preset::printer_options(), - static_cast(FullPrintConfig::defaults()), - "Default Printer") + : prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast(FullPrintConfig::defaults())) + , filaments(Preset::TYPE_FILAMENT, Preset::filament_options(), static_cast(FullPrintConfig::defaults()), ORCA_DEFAULT_FILAMENT_PLACEHOLDER) + , sla_materials(Preset::TYPE_SLA_MATERIAL, Preset::sla_material_options(), static_cast(SLAFullPrintConfig::defaults())) + , sla_prints(Preset::TYPE_SLA_PRINT, Preset::sla_print_options(), static_cast(SLAFullPrintConfig::defaults())) + , printers(Preset::TYPE_PRINTER, Preset::printer_options(), static_cast(FullPrintConfig::defaults()), "Default Printer") , physical_printers(PhysicalPrinter::printer_options()) { // The following keys are handled by the UI, they do not have a counterpart in any StaticPrintConfig derived classes, @@ -436,12 +429,12 @@ PresetBundle::PresetBundle() // Set all the nullable values to nils. { auto& default_config = this->filaments.default_preset().config; - for (const std::string& opt_key : default_config.keys()) { - ConfigOption* opt = default_config.optptr(opt_key, false); + for(const std::string& opt_key : default_config.keys()){ + ConfigOption* opt = default_config.optptr(opt_key, false); bool is_override_key = is_filament_extruder_override_key(opt_key); - if (!is_override_key || !opt->nullable()) + if(!is_override_key || !opt->nullable()) continue; - opt->deserialize("nil", ForwardCompatibilitySubstitutionRule::Disable); + opt->deserialize("nil",ForwardCompatibilitySubstitutionRule::Disable); } } @@ -454,16 +447,15 @@ PresetBundle::PresetBundle() this->sla_prints.default_preset().compatible_printers_condition(); this->sla_prints.default_preset().inherits(); - // this->printers.add_default_preset(Preset::sla_printer_options(), static_cast(SLAFullPrintConfig::defaults()), "- default SLA -"); this->printers.preset(1).printer_technology_ref() = ptSLA; + //this->printers.add_default_preset(Preset::sla_printer_options(), static_cast(SLAFullPrintConfig::defaults()), "- default SLA -"); + //this->printers.preset(1).printer_technology_ref() = ptSLA; for (size_t i = 0; i < 1; ++i) { // The following ugly switch is to avoid printers.preset(0) to return the edited instance, as the 0th default is the current one. - Preset& preset = this->printers.default_preset(i); - for (const char* key : {"printer_settings_id", "printer_model", "printer_variant", "thumbnails"}) - preset.config.optptr(key, true); - // if (i == 0) { - preset.config.optptr("default_print_profile", true); - preset.config.option("default_filament_profile", true); + Preset &preset = this->printers.default_preset(i); + for (const char *key : {"printer_settings_id", "printer_model", "printer_variant", "thumbnails"}) preset.config.optptr(key, true); + //if (i == 0) { + preset.config.optptr("default_print_profile", true); + preset.config.option("default_filament_profile", true); //} else { // preset.config.optptr("default_sla_print_profile", true); // preset.config.optptr("default_sla_material_profile", true); @@ -482,29 +474,32 @@ PresetBundle::PresetBundle() this->project_config.apply_only(FullPrintConfig::defaults(), s_project_options); } -PresetBundle::PresetBundle(const PresetBundle& rhs) { *this = rhs; } - -PresetBundle& PresetBundle::operator=(const PresetBundle& rhs) +PresetBundle::PresetBundle(const PresetBundle &rhs) { - prints = rhs.prints; - sla_prints = rhs.sla_prints; - filaments = rhs.filaments; - sla_materials = rhs.sla_materials; - printers = rhs.printers; - physical_printers = rhs.physical_printers; + *this = rhs; +} - filament_presets = rhs.filament_presets; - project_config = rhs.project_config; - vendors = rhs.vendors; - obsolete_presets = rhs.obsolete_presets; - m_errors = rhs.m_errors; +PresetBundle& PresetBundle::operator=(const PresetBundle &rhs) +{ + prints = rhs.prints; + sla_prints = rhs.sla_prints; + filaments = rhs.filaments; + sla_materials = rhs.sla_materials; + printers = rhs.printers; + physical_printers = rhs.physical_printers; + + filament_presets = rhs.filament_presets; + project_config = rhs.project_config; + vendors = rhs.vendors; + obsolete_presets = rhs.obsolete_presets; + m_errors = rhs.m_errors; // Adjust Preset::vendor pointers to point to the copied vendors map. - prints.update_vendor_ptrs_after_copy(this->vendors); - sla_prints.update_vendor_ptrs_after_copy(this->vendors); - filaments.update_vendor_ptrs_after_copy(this->vendors); + prints .update_vendor_ptrs_after_copy(this->vendors); + sla_prints .update_vendor_ptrs_after_copy(this->vendors); + filaments .update_vendor_ptrs_after_copy(this->vendors); sla_materials.update_vendor_ptrs_after_copy(this->vendors); - printers.update_vendor_ptrs_after_copy(this->vendors); + printers .update_vendor_ptrs_after_copy(this->vendors); return *this; } @@ -513,13 +508,13 @@ void PresetBundle::reset(bool delete_files) { // Clear the existing presets, delete their respective files. this->vendors.clear(); - this->prints.reset(delete_files); - this->sla_prints.reset(delete_files); - this->filaments.reset(delete_files); + this->prints .reset(delete_files); + this->sla_prints .reset(delete_files); + this->filaments .reset(delete_files); this->sla_materials.reset(delete_files); - this->printers.reset(delete_files); + this->printers .reset(delete_files); // BBS: filament_presets is load from project config, not handled here - // this->filament_presets.clear(); + //this->filament_presets.clear(); if (this->filament_presets.empty()) this->filament_presets.emplace_back(this->filaments.get_selected_preset_name()); this->obsolete_presets.prints.clear(); @@ -532,25 +527,26 @@ void PresetBundle::reset(bool delete_files) void PresetBundle::setup_directories() { boost::filesystem::path data_dir = boost::filesystem::path(Slic3r::data_dir()); - // BBS: change directoties by design + //BBS: change directoties by design std::initializer_list paths = { data_dir, data_dir / "ota", - data_dir / PRESET_SYSTEM_DIR, + data_dir / PRESET_SYSTEM_DIR, data_dir / PRESET_USER_DIR, // Store the print/filament/printer presets at the same location as the upstream Slic3r. - // data_dir / PRESET_SYSTEM_DIR / PRESET_PRINT_NAME, - // data_dir / PRESET_SYSTEM_DIR / PRESET_FILAMENT_NAME, - // data_dir / PRESET_SYSTEM_DIR / PRESET_PRINTER_NAME + //data_dir / PRESET_SYSTEM_DIR / PRESET_PRINT_NAME, + //data_dir / PRESET_SYSTEM_DIR / PRESET_FILAMENT_NAME, + //data_dir / PRESET_SYSTEM_DIR / PRESET_PRINTER_NAME }; - for (const boost::filesystem::path& path : paths) { - boost::filesystem::path subdir = path; + for (const boost::filesystem::path &path : paths) { + boost::filesystem::path subdir = path; subdir.make_preferred(); - if (!boost::filesystem::is_directory(subdir) && !boost::filesystem::create_directory(subdir)) { + if (! boost::filesystem::is_directory(subdir) && + ! boost::filesystem::create_directory(subdir)) { if (boost::filesystem::is_directory(subdir)) { - BOOST_LOG_TRIVIAL(warning) << boost::format("creating directory %1% failed, maybe created by other instance, go on!") % - subdir.string(); - } else + BOOST_LOG_TRIVIAL(warning) << boost::format("creating directory %1% failed, maybe created by other instance, go on!")%subdir.string(); + } + else throw Slic3r::RuntimeError(std::string("Unable to create directory ") + subdir.string()); } } @@ -559,7 +555,7 @@ void PresetBundle::setup_directories() // recursively copy all files and dirs in from_dir to to_dir static void copy_dir(const boost::filesystem::path& from_dir, const boost::filesystem::path& to_dir) { - if (!boost::filesystem::is_directory(from_dir)) + if(!boost::filesystem::is_directory(from_dir)) return; // i assume to_dir.parent surely exists if (!boost::filesystem::is_directory(to_dir)) @@ -583,33 +579,33 @@ void PresetBundle::copy_files(const std::string& from) // list of searched paths based on current directory system in setup_directories() // do not copy cache and snapshots boost::filesystem::path from_data_dir = boost::filesystem::path(from); - // BBS: change directoties by design - std::initializer_list from_dirs = - {// from_data_dir / "vendor", - // Store the print/filament/printer presets at the same location as the upstream Slic3r. - from_data_dir / PRESET_PRINT_NAME, from_data_dir / PRESET_FILAMENT_NAME, from_data_dir / PRESET_PRINTER_NAME}; + //BBS: change directoties by design + std::initializer_list from_dirs= { + //from_data_dir / "vendor", + // Store the print/filament/printer presets at the same location as the upstream Slic3r. + from_data_dir / PRESET_PRINT_NAME, + from_data_dir / PRESET_FILAMENT_NAME, + from_data_dir / PRESET_PRINTER_NAME + }; // copy recursively all files - // BBS: change directoties by design + //BBS: change directoties by design for (const boost::filesystem::path& from_dir : from_dirs) { - copy_dir(from_dir, data_dir / "old" / from_dir.filename()); + copy_dir(from_dir, data_dir /"old"/from_dir.filename()); } } -PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig& config, - ForwardCompatibilitySubstitutionRule substitution_rule, - const PresetPreferences& preferred_selection /* = PresetPreferences()*/) +PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, ForwardCompatibilitySubstitutionRule substitution_rule, + const PresetPreferences& preferred_selection/* = PresetPreferences()*/) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; std::string errors_cummulative; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" enter, substitution_rule %1%, preferred printer_model_id %2%") % substitution_rule % - preferred_selection.printer_model_id; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, substitution_rule %1%, preferred printer_model_id %2%")%substitution_rule%preferred_selection.printer_model_id; const auto startup_t0 = std::chrono::steady_clock::now(); - // BBS: change system config to json + //BBS: change system config to json std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule); // BBS load preset from user's folder, load system default if @@ -635,26 +631,35 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig& config, set_calibrate_printer(""); { - const auto total_ms = std::chrono::duration_cast(std::chrono::steady_clock::now() - startup_t0).count(); + const auto total_ms = std::chrono::duration_cast( + std::chrono::steady_clock::now() - startup_t0).count(); BOOST_LOG_TRIVIAL(info) << "PresetBundle: all presets loaded in " << total_ms << " ms"; } - // BBS: add config related logs - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" finished, returned substitutions %1%") % substitutions.size(); + //BBS: add config related logs + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" finished, returned substitutions %1%")%substitutions.size(); return substitutions; } -// BBS: add function to generate differed preset for save -// the pointer should be freed by the caller +//BBS: add function to generate differed preset for save +//the pointer should be freed by the caller Preset* PresetBundle::get_preset_differed_for_save(Preset& preset) { PresetCollection* preset_collection; - switch (preset.type) { - case Preset::TYPE_PRINT: preset_collection = &(this->prints); break; - case Preset::TYPE_PRINTER: preset_collection = &(this->printers); break; - case Preset::TYPE_FILAMENT: preset_collection = &(this->filaments); break; - default: BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" invalid type %1%, return directly") % preset.type; return nullptr; + switch(preset.type) { + case Preset::TYPE_PRINT: + preset_collection = &(this->prints); + break; + case Preset::TYPE_PRINTER: + preset_collection = &(this->printers); + break; + case Preset::TYPE_FILAMENT: + preset_collection = &(this->filaments); + break; + default: + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" invalid type %1%, return directly")%preset.type; + return nullptr; } return preset_collection->get_preset_differed_for_save(preset); @@ -664,17 +669,25 @@ int PresetBundle::get_differed_values_to_update(Preset& preset, std::mapprints); break; - case Preset::TYPE_PRINTER: preset_collection = &(this->printers); break; - case Preset::TYPE_FILAMENT: preset_collection = &(this->filaments); break; - default: BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" invalid type %1%, return directly") % preset.type; return -1; + switch(preset.type) { + case Preset::TYPE_PRINT: + preset_collection = &(this->prints); + break; + case Preset::TYPE_PRINTER: + preset_collection = &(this->printers); + break; + case Preset::TYPE_FILAMENT: + preset_collection = &(this->filaments); + break; + default: + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" invalid type %1%, return directly")%preset.type; + return -1; } return preset_collection->get_differed_values_to_update(preset, key_values); } -// BBS: get vendor's current version +//BBS: get vendor's current version Semver PresetBundle::get_vendor_profile_version(std::string vendor_name) { Semver result_ver; @@ -689,11 +702,12 @@ Semver PresetBundle::get_vendor_profile_version(std::string vendor_name) VendorType PresetBundle::get_current_vendor_type() { - auto t = VendorType::Unknown; - auto config = &printers.get_edited_preset().config; + auto t = VendorType::Unknown; + auto config = &printers.get_edited_preset().config; const auto* printer_model = config->opt("printer_model"); if (printer_model == nullptr) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": printer_model is " << (config->has("printer_model") ? "not a string" : "missing") + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": printer_model is " + << (config->has("printer_model") ? "not a string" : "missing") << ", vendor type is Unknown"; return t; } @@ -709,11 +723,12 @@ VendorType PresetBundle::get_current_vendor_type() if (!vendor_name.empty()) break; } - if (!vendor_name.empty()) { - if (vendor_name.compare("BBL") == 0) + if (!vendor_name.empty()) + { + if(vendor_name.compare("BBL") == 0) t = VendorType::Marlin_BBL; - - if (vendor_name.compare("Qidi") == 0) + + if(vendor_name.compare("Qidi") == 0) t = VendorType::Klipper_Qidi; } return t; @@ -726,8 +741,7 @@ bool PresetBundle::use_bbl_network() return use_bbl_network; } -bool PresetBundle::use_bbl_device_tab() -{ +bool PresetBundle::use_bbl_device_tab() { if (!is_bbl_vendor()) { return false; } @@ -737,7 +751,7 @@ bool PresetBundle::use_bbl_device_tab() } const auto cfg = printers.get_edited_preset().config; - // Use bbl device tab if printhost webui url is not set + // Use bbl device tab if printhost webui url is not set return cfg.opt_string("print_host_webui").empty(); } @@ -764,8 +778,7 @@ bool PresetBundle::backup_user_folder() const } } -std::optional PresetBundle::get_filament_by_filament_id(const std::string& filament_id, - const std::string& printer_name) const +std::optional PresetBundle::get_filament_by_filament_id(const std::string& filament_id, const std::string& printer_name) const { if (filament_id.empty()) return std::nullopt; @@ -775,11 +788,11 @@ std::optional PresetBundle::get_filament_by_filament_id(const for (auto iter = filaments.begin(); iter != filaments.end(); ++iter) { const Preset& filament_preset = *iter; - const auto& config = filament_preset.config; + const auto& config = filament_preset.config; if (filament_preset.filament_id == filament_id) { FilamentBaseInfo info; - info.filament_id = filament_id; - info.is_system = filament_preset.is_system; + info.filament_id = filament_id; + info.is_system = filament_preset.is_system; info.filament_name = filament_preset.alias; if (config.has("filament_is_support")) info.is_support = config.option("filament_is_support")->values[0]; @@ -791,7 +804,7 @@ std::optional PresetBundle::get_filament_by_filament_id(const info.nozzle_temp_range_high = config.option("nozzle_temperature_range_high")->values[0]; if (config.has("nozzle_temperature_range_low")) info.nozzle_temp_range_low = config.option("nozzle_temperature_range_low")->values[0]; - if (config.has("temperature_vitrification")) + if(config.has("temperature_vitrification")) info.temperature_vitrification = config.option("temperature_vitrification")->values[0]; if (!printer_name.empty()) { @@ -800,11 +813,11 @@ std::optional PresetBundle::get_filament_by_filament_id(const if (iter != compatible_printers.end() && config.has("filament_printable")) { info.filament_printable = config.option("filament_printable")->values[0]; if (config.has("filament_extruder_compatibility")) - info.set_filament_extruder_compatibility( - config.option("filament_extruder_compatibility")->values[0]); + info.set_filament_extruder_compatibility(config.option("filament_extruder_compatibility")->values[0]); return info; } - } else { + } + else { return info; } } @@ -812,47 +825,44 @@ std::optional PresetBundle::get_filament_by_filament_id(const return std::nullopt; } -// BBS: load project embedded presets -PresetsConfigSubstitutions PresetBundle::load_project_embedded_presets(std::vector project_presets, - ForwardCompatibilitySubstitutionRule substitution_rule) +//BBS: load project embedded presets +PresetsConfigSubstitutions PresetBundle::load_project_embedded_presets(std::vector project_presets, ForwardCompatibilitySubstitutionRule substitution_rule) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; std::string errors_cummulative; - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(" enter, substitution_rule %1%, preset toltal count %2%") % substitution_rule % - project_presets.size(); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, substitution_rule %1%, preset toltal count %2%")%substitution_rule% project_presets.size(); try { this->prints.load_project_embedded_presets(project_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { errors_cummulative += err.what(); } try { this->filaments.load_project_embedded_presets(project_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { errors_cummulative += err.what(); } try { this->printers.load_project_embedded_presets(project_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { errors_cummulative += err.what(); } - // this->update_multi_material_filament_presets(); - // this->update_compatible(PresetSelectCompatibleType::Never); - // Rewrite renamed compatible references before the caller (Plater) selects the project presets. + //this->update_multi_material_filament_presets(); + //this->update_compatible(PresetSelectCompatibleType::Never); + // Rewrite renamed compatible references before the caller (Plater) selects the project presets. this->normalize_compatible_presets(); - if (!errors_cummulative.empty()) + if (! errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); - // this->load_selections(config, ""); + //this->load_selections(config, ""); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, returned substitutions %1%") % substitutions.size(); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, returned substitutions %1%")%substitutions.size(); return substitutions; } -// BBS: get current project embedded presets +//BBS: get current project embedded presets std::vector PresetBundle::get_current_project_embedded_presets() { std::vector project_presets; @@ -866,38 +876,39 @@ std::vector PresetBundle::get_current_project_embedded_presets() if (!printer_presets.empty()) std::copy(printer_presets.begin(), printer_presets.end(), std::back_inserter(project_presets)); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, returned project_presets count %1%") % project_presets.size(); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, returned project_presets count %1%")%project_presets.size(); return project_presets; } -// BBS: reset project embedded presets +//BBS: reset project embedded presets void PresetBundle::reset_project_embedded_presets() { std::string prefer_printer; Preset& current_printer = this->printers.get_selected_preset(); - ConfigOption* inherits = current_printer.config.option("inherits"); + ConfigOption* inherits = current_printer.config.option("inherits"); if (inherits) { - prefer_printer = dynamic_cast(inherits)->value; + prefer_printer = dynamic_cast(inherits)->value; } - // first printer, then filament, then print - bool printer_reselect = this->printers.reset_project_embedded_presets(); + //first printer, then filament, then print + bool printer_reselect = this->printers.reset_project_embedded_presets(); bool filament_reselect = this->filaments.reset_project_embedded_presets(); - bool print_reselect = this->prints.reset_project_embedded_presets(); + bool print_reselect = this->prints.reset_project_embedded_presets(); if (printer_reselect) { if (!prefer_printer.empty()) - this->printers.select_preset_by_name(prefer_printer, true); + this->printers.select_preset_by_name(prefer_printer, true); else - this->printers.select_preset(this->printers.first_visible_idx()); + this->printers.select_preset(this->printers.first_visible_idx()); - // this->update_multi_material_filament_presets(); + //this->update_multi_material_filament_presets(); this->update_compatible(PresetSelectCompatibleType::Never); - } else if (filament_reselect || print_reselect) { - // Preset& current_printer = this->printers.get_selected_preset(); + } + else if (filament_reselect || print_reselect) { + //Preset& current_printer = this->printers.get_selected_preset(); /*if (filament_reselect) { - const std::vector &prefered_filament_profiles = - current_printer.config.option("default_filament_profile")->values; const std::string prefered_filament_profile - = prefered_filament_profiles.empty() ? std::string() : prefered_filament_profiles.front(); if (!prefered_filament_profile.empty()) + const std::vector &prefered_filament_profiles = current_printer.config.option("default_filament_profile")->values; + const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : prefered_filament_profiles.front(); + if (!prefered_filament_profile.empty()) this->filaments.select_preset_by_name(prefered_filament_profile, true); else this->filaments.select_preset(this->filaments.first_visible_idx()); @@ -908,18 +919,17 @@ void PresetBundle::reset_project_embedded_presets() this->update_compatible(PresetSelectCompatibleType::Never); } - // this->update_multi_material_filament_presets(); + //this->update_multi_material_filament_presets(); - // update filament_presets - for (size_t i = 0; i < filament_presets.size(); ++i) { + //update filament_presets + for (size_t i = 0; i < filament_presets.size(); ++ i) + { Preset* selected_filament = this->filaments.find_preset(filament_presets[i], false); if (!selected_filament) { - // it should be the project embedded presets + //it should be the project embedded presets Preset& current_printer = this->printers.get_selected_preset(); - const std::vector& prefered_filament_profiles = - current_printer.config.option("default_filament_profile")->values; - const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : - prefered_filament_profiles.front(); + const std::vector &prefered_filament_profiles = current_printer.config.option("default_filament_profile")->values; + const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : prefered_filament_profiles.front(); if (!prefered_filament_profile.empty()) { // Check if preferred filament exists and is visible const Preset* preferred_preset = this->filaments.find_preset(prefered_filament_profile, false); @@ -935,22 +945,26 @@ void PresetBundle::reset_project_embedded_presets() } } -// BBS: get bed texture for printer model +//BBS: get bed texture for printer model std::string PresetBundle::get_texture_for_printer_model(std::string model_name) { std::string texture_name, vendor_name, out; - for (auto vendor_profile : this->vendors) { - for (auto vendor_model : vendor_profile.second.models) { - if (vendor_model.name == model_name || vendor_model.id == model_name) { + for (auto vendor_profile: this->vendors) + { + for (auto vendor_model: vendor_profile.second.models) + { + if (vendor_model.name == model_name || vendor_model.id == model_name) + { texture_name = vendor_model.bed_texture; - vendor_name = vendor_profile.first; + vendor_name = vendor_profile.first; break; } } } - if (!texture_name.empty()) { + if (!texture_name.empty()) + { out = Slic3r::data_dir() + "/vendor/" + vendor_name + "/" + texture_name; if (!boost::filesystem::exists(boost::filesystem::path(out))) out = Slic3r::resources_dir() + "/profiles/" + vendor_name + "/" + texture_name; @@ -959,22 +973,26 @@ std::string PresetBundle::get_texture_for_printer_model(std::string model_name) return out; } -// BBS: get stl model for printer model +//BBS: get stl model for printer model std::string PresetBundle::get_stl_model_for_printer_model(std::string model_name) { std::string stl_name, vendor_name, out; - for (auto vendor_profile : this->vendors) { - for (auto vendor_model : vendor_profile.second.models) { - if (vendor_model.name == model_name) { - stl_name = vendor_model.bed_model; + for (auto vendor_profile: this->vendors) + { + for (auto vendor_model: vendor_profile.second.models) + { + if (vendor_model.name == model_name) + { + stl_name = vendor_model.bed_model; vendor_name = vendor_profile.first; break; } } } - if (!stl_name.empty()) { + if (!stl_name.empty()) + { out = Slic3r::data_dir() + "/vendor/" + vendor_name + "/" + stl_name; if (!boost::filesystem::exists(boost::filesystem::path(out))) out = Slic3r::resources_dir() + "/profiles/" + vendor_name + "/" + stl_name; @@ -987,23 +1005,27 @@ std::string PresetBundle::get_hotend_model_for_printer_model(std::string model_n { std::string hotend_stl, vendor_name, out; - for (auto vendor_profile : this->vendors) { - for (auto vendor_model : vendor_profile.second.models) { - if (vendor_model.name == model_name) { - hotend_stl = vendor_model.hotend_model; + for (auto vendor_profile: this->vendors) + { + for (auto vendor_model: vendor_profile.second.models) + { + if (vendor_model.name == model_name) + { + hotend_stl = vendor_model.hotend_model; vendor_name = vendor_profile.first; break; } } } - if (!hotend_stl.empty()) { + if (!hotend_stl.empty()) + { out = Slic3r::data_dir() + "/vendor/" + vendor_name + "/" + hotend_stl; if (!boost::filesystem::exists(boost::filesystem::path(out))) out = Slic3r::resources_dir() + "/profiles/" + vendor_name + "/" + hotend_stl; } - if (out.empty() || !boost::filesystem::exists(boost::filesystem::path(out))) + if (out.empty() ||!boost::filesystem::exists(boost::filesystem::path(out))) out = Slic3r::resources_dir() + "/profiles/hotend.stl"; return out; @@ -1016,13 +1038,11 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For std::string errors_cummulative; fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); - if (!fs::exists(user_folder)) - fs::create_directory(user_folder); + if (!fs::exists(user_folder)) fs::create_directory(user_folder); std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + user; - fs::path folder(user_folder / user); - if (!fs::exists(folder)) - fs::create_directory(folder); + fs::path folder(user_folder / user); + if (!fs::exists(folder)) fs::create_directory(folder); bundles.WriteLock(); bundles.m_bundles.clear(); @@ -1035,36 +1055,30 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For if (fs::exists(local_dir)) { dir_user_presets_local = local_dir; for (auto& entry : fs::directory_iterator(local_dir)) { - if (!fs::is_directory(entry.path())) - continue; + if (!fs::is_directory(entry.path())) continue; std::string bundle_dir = entry.path().string(); fs::path metadata_file = entry.path() / PRESET_BUNDLE_METADATA; - if (!fs::exists(metadata_file)) - continue; + if (!fs::exists(metadata_file)) continue; BundleMetadata metadata; - if (!metadata.load_from_json(metadata_file.string())) - continue; + if (!metadata.load_from_json(metadata_file.string())) continue; metadata.print_presets.clear(); metadata.filament_presets.clear(); metadata.printer_presets.clear(); - this->prints.load_presets( - bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.print_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); - this->filaments.load_presets( - bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); - this->printers.load_presets( - bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.print_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.filament_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.printer_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); metadata.bundle_type = BundleType::Local; - metadata.path = metadata_file.string(); + metadata.path = metadata_file.string(); bundles.WriteLock(); bundles.m_bundles[metadata.id] = metadata; @@ -1076,38 +1090,32 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For fs::path subscribed_dir(folder / PRESET_SUBSCRIBED_DIR); if (fs::exists(subscribed_dir)) { for (auto& entry : fs::directory_iterator(subscribed_dir)) { - if (!fs::is_directory(entry.path())) - continue; + if (!fs::is_directory(entry.path())) continue; std::string bundle_dir = entry.path().string(); fs::path metadata_file = entry.path() / PRESET_BUNDLE_METADATA; - if (!fs::exists(metadata_file)) - continue; + if (!fs::exists(metadata_file)) continue; BundleMetadata metadata; - if (!metadata.load_from_json(metadata_file.string())) - continue; + if (!metadata.load_from_json(metadata_file.string())) continue; metadata.print_presets.clear(); metadata.filament_presets.clear(); metadata.printer_presets.clear(); metadata.is_subscribed = true; - this->prints.load_presets( - bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.print_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); - this->filaments.load_presets( - bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); - this->printers.load_presets( - bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, - [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); }, - PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.print_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.filament_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { + metadata.printer_presets.push_back(preset.name); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); - metadata.bundle_type = BundleType::Subscribed; - metadata.path = metadata_file.string(); + metadata.bundle_type = BundleType::Subscribed; + metadata.path = metadata_file.string(); metadata.update_available = false; bundles.WriteLock(); @@ -1125,32 +1133,27 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For std::string sel = prints.get_selected_preset().name; this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); prints.select_preset_by_name(sel, false); - } catch (const std::runtime_error& err) { - errors_cummulative += err.what(); - } + } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = filaments.get_selected_preset().name; this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); filaments.select_preset_by_name(sel, false); - } catch (const std::runtime_error& err) { - errors_cummulative += err.what(); - } + } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = printers.get_selected_preset().name; this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); printers.select_preset_by_name(sel, false); - } catch (const std::runtime_error& err) { - errors_cummulative += err.what(); - } - if (!errors_cummulative.empty()) - throw Slic3r::RuntimeError(errors_cummulative); + } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } + if (!errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); - const auto json_ms = std::chrono::duration_cast(std::chrono::steady_clock::now() - json_t0).count(); + const auto json_ms = std::chrono::duration_cast( + std::chrono::steady_clock::now() - json_t0).count(); BOOST_LOG_TRIVIAL(info) << "PresetBundle: user presets loaded from JSON in " << json_ms << " ms"; } { - const auto ms = std::chrono::duration_cast(std::chrono::steady_clock::now() - user_load_t0).count(); + const auto ms = std::chrono::duration_cast( + std::chrono::steady_clock::now() - user_load_t0).count(); BOOST_LOG_TRIVIAL(info) << "PresetBundle: user + bundle presets loaded in " << ms << " ms"; } @@ -1161,70 +1164,62 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For return PresetsConfigSubstitutions(); } -PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig& config, - std::map>& my_presets, - ForwardCompatibilitySubstitutionRule substitution_rule) +PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig & config, + std::map> &my_presets, + ForwardCompatibilitySubstitutionRule substitution_rule) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; std::string errors_cummulative; bool process_added = false, filament_added = false, machine_added = false; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" enter, substitution_rule %1%, preset toltal count %2%") % substitution_rule % - my_presets.size(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" print's selected_idx %1%, selected_name %2%") % prints.get_selected_idx() % - prints.get_selected_preset_name(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" filament's selected_idx %1%, selected_name %2%") % filaments.get_selected_idx() % - filaments.get_selected_preset_name(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" printers's selected_idx %1%, selected_name %2%") % printers.get_selected_idx() % - printers.get_selected_preset_name(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, substitution_rule %1%, preset toltal count %2%")%substitution_rule%my_presets.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" print's selected_idx %1%, selected_name %2%") %prints.get_selected_idx() %prints.get_selected_preset_name(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" filament's selected_idx %1%, selected_name %2%") %filaments.get_selected_idx() %filaments.get_selected_preset_name(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" printers's selected_idx %1%, selected_name %2%") %printers.get_selected_idx() %printers.get_selected_preset_name(); // Sync removing remove_users_preset(config, &my_presets); std::map>::iterator it; for (int pass = 0; pass < 2; ++pass) - for (it = my_presets.begin(); it != my_presets.end(); it++) { - std::string name = it->first; - std::map& value_map = it->second; - // Load user root presets at first pass - std::map::iterator inherits_iter = value_map.find(BBL_JSON_KEY_INHERITS); - if ((pass == 1) == (inherits_iter == value_map.end() || inherits_iter->second.empty())) - continue; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " start load from cloud: " << name; - // get the type first - std::map::iterator type_iter = value_map.find(BBL_JSON_KEY_TYPE); - if (type_iter == value_map.end()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find type for setting %1%") % name; - continue; + for (it = my_presets.begin(); it != my_presets.end(); it++) { + std::string name = it->first; + std::map& value_map = it->second; + // Load user root presets at first pass + std::map::iterator inherits_iter = value_map.find(BBL_JSON_KEY_INHERITS); + if ((pass == 1) == (inherits_iter == value_map.end() || inherits_iter->second.empty())) + continue; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " start load from cloud: " << name; + //get the type first + std::map::iterator type_iter = value_map.find(BBL_JSON_KEY_TYPE); + if (type_iter == value_map.end()) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find type for setting %1%")%name; + continue; + } + try { + PresetCollection *preset_collection = nullptr; + if (type_iter->second == PRESET_IOT_PRINT_TYPE) { + preset_collection = &(this->prints); + process_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, PresetOrigin(PresetOrigin::Kind::User)); } - try { - PresetCollection* preset_collection = nullptr; - if (type_iter->second == PRESET_IOT_PRINT_TYPE) { - preset_collection = &(this->prints); - process_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, - PresetOrigin(PresetOrigin::Kind::User)); - } else if (type_iter->second == PRESET_IOT_FILAMENT_TYPE) { - preset_collection = &(this->filaments); - filament_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, - PresetOrigin(PresetOrigin::Kind::User)); - } else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { - preset_collection = &(this->printers); - machine_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, - PresetOrigin(PresetOrigin::Kind::User)); - } else { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format("invalid type %1% for setting %2%") % type_iter->second % name; - continue; - } - } catch (const std::runtime_error& err) { - errors_cummulative += err.what(); + else if (type_iter->second == PRESET_IOT_FILAMENT_TYPE) { + preset_collection = &(this->filaments); + filament_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, PresetOrigin(PresetOrigin::Kind::User)); + } + else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { + preset_collection = &(this->printers); + machine_added |= preset_collection->load_user_preset(name, value_map, substitutions, substitution_rule, PresetOrigin(PresetOrigin::Kind::User)); + } + else { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format("invalid type %1% for setting %2%") %type_iter->second %name; + continue; } } + catch (const std::runtime_error& err) { + errors_cummulative += err.what(); + } + } /*if (process_added) { this->prints.update_after_user_presets_loaded(); } @@ -1240,38 +1235,37 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig& config, this->update_multi_material_filament_presets(); this->update_compatible(PresetSelectCompatibleType::Never); - // this->load_selections(config, PresetPreferences()); + //this->load_selections(config, PresetPreferences()); set_calibrate_printer(""); - if (!errors_cummulative.empty()) + if (! errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(" finished, process_added %1%, filament_added %2%, machine_added %3%") % process_added % - filament_added % machine_added; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, process_added %1%, filament_added %2%, machine_added %3%")%process_added %filament_added %machine_added; return substitutions; } -bool PresetBundle::apply_vendor_config(const std::map>>& new_vendors, - const std::map& new_filaments, - AppConfig* app_config, - bool overwrite, - const std::string& preferred_printer_model, - const std::string& preferred_printer_variant, - const std::string& preferred_filament) +bool PresetBundle::apply_vendor_config( + const std::map>>& new_vendors, + const std::map& new_filaments, + AppConfig* app_config, + bool overwrite, + const std::string& preferred_printer_model, + const std::string& preferred_printer_variant, + const std::string& preferred_filament) { namespace fs = boost::filesystem; // Get current configuration from AppConfig - const auto old_vendors = app_config->vendors(); - const auto old_filaments = app_config->has_section(AppConfig::SECTION_FILAMENTS) ? - app_config->get_section(AppConfig::SECTION_FILAMENTS) : - std::map(); + const auto old_vendors = app_config->vendors(); + const auto old_filaments = app_config->has_section(AppConfig::SECTION_FILAMENTS) + ? app_config->get_section(AppConfig::SECTION_FILAMENTS) + : std::map(); // Find vendors that need installation std::vector install_bundles; - for (const auto& it : new_vendors) { + for (const auto &it : new_vendors) { if (it.second.size() > 0) { if (!is_vendor_installed(it.first)) { install_bundles.emplace_back(it.first); @@ -1295,9 +1289,9 @@ bool PresetBundle::apply_vendor_config(const std::mapsecond.empty(); + static const std::string system_suffix = " @System"; + auto it_default = new_vendors.find(PresetBundle::ORCA_DEFAULT_BUNDLE); + bool has_default_bundle_printer = it_default != new_vendors.end() && !it_default->second.empty(); // Check if any non-default vendor has selected printers bool has_vendor_printer = false; @@ -1325,8 +1319,7 @@ bool PresetBundle::apply_vendor_config(const std::mapvendors.end()) { // Vendor is loaded, check if the filament exists for (auto f : vendor_it->second.default_filaments) { - BOOST_LOG_TRIVIAL(info) - << " checking if vendor filament " << f << " matches " << short_name << "(" << name << ")"; + BOOST_LOG_TRIVIAL(info) << " checking if vendor filament " << f << " matches " << short_name << "(" << name << ")"; if (f.find(short_name) != std::string::npos) { BOOST_LOG_TRIVIAL(info) << name << " has filament from vendor: " << vendor; has_vendor_filament = true; @@ -1356,7 +1349,8 @@ bool PresetBundle::apply_vendor_config(const std::mapset_section(AppConfig::SECTION_FILAMENTS, supplemented_filaments); app_config->set_vendors(new_vendors); - } else { + } + else { // Merge filaments std::map merged_filaments = old_filaments; for (const auto& [name, value] : supplemented_filaments) { @@ -1378,7 +1372,7 @@ bool PresetBundle::apply_vendor_config(const std::mapload_presets(*app_config, ForwardCompatibilitySubstitutionRule::Enable, - {preferred_printer_model, preferred_printer_variant, preferred_filament, std::string()}); + {preferred_printer_model, preferred_printer_variant, preferred_filament, std::string()}); // Ensure active filament compatibility // If the active filament is not in the wizard-selected filaments, switch to the first @@ -1404,56 +1398,49 @@ bool PresetBundle::apply_vendor_config(const std::map& files, - std::function override_confirm, - ForwardCompatibilitySubstitutionRule rule, - AppConfig& config) +PresetsConfigSubstitutions PresetBundle::import_presets(std::vector & files, + std::function override_confirm, + ForwardCompatibilitySubstitutionRule rule, + AppConfig& config) { bundles.PauseRead(); // Pause threads from reading BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " entry"; PresetsConfigSubstitutions substitutions; int overwrite = 0; - std::vector result; - std::string user_id = config.get("preset_folder"); + std::vector result; + std::string user_id = config.get("preset_folder"); if (user_id.empty()) user_id = DEFAULT_USER_FOLDER_NAME; this->update_user_presets_directory(user_id); - for (auto& file : files) { + for (auto &file : files) { if (Slic3r::is_json_file(file)) { import_json_presets(substitutions, file, override_confirm, rule, overwrite, result); } // Determine if it is a preset bundle - if (boost::iends_with(file, ".orca_printer") || boost::iends_with(file, ".orca_bundle") || - boost::iends_with(file, ".orca_filament") || boost::iends_with(file, ".zip")) { + if (boost::iends_with(file, ".orca_printer") || boost::iends_with(file, ".orca_bundle") || boost::iends_with(file, ".orca_filament") || boost::iends_with(file, ".zip")) { boost::system::error_code ec; // create user folder fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); - if (!fs::exists(user_folder)) - fs::create_directory(user_folder, ec); - if (ec) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); + if (!fs::exists(user_folder)) fs::create_directory(user_folder, ec); + if (ec) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); // create default folder fs::path configs_folder(user_folder / user_id); - if (!fs::exists(configs_folder)) - fs::create_directory(configs_folder, ec); - if (ec) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); - // create temp folder - // std::string user_default_temp_dir = data_dir() + "/" + PRESET_USER_DIR + "/" + DEFAULT_USER_FOLDER_NAME + "/" + "temp"; + if (!fs::exists(configs_folder)) fs::create_directory(configs_folder, ec); + if (ec) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); + //create temp folder + //std::string user_default_temp_dir = data_dir() + "/" + PRESET_USER_DIR + "/" + DEFAULT_USER_FOLDER_NAME + "/" + "temp"; fs::path temp_folder(configs_folder / "temp"); std::string user_default_temp_dir = temp_folder.make_preferred().string(); - if (fs::exists(temp_folder)) - fs::remove_all(temp_folder); + if (fs::exists(temp_folder)) fs::remove_all(temp_folder); fs::create_directory(temp_folder, ec); - if (ec) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); + if (ec) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " create directory failed: " << ec.message(); file = boost::filesystem::path(file).make_preferred().string(); mz_zip_archive zip_archive; mz_zip_zero_struct(&zip_archive); mz_bool status; - FILE* zipFile = boost::nowide::fopen(file.c_str(), "rb"); + FILE *zipFile = boost::nowide::fopen(file.c_str(), "rb"); status = mz_zip_reader_init_cfile(&zip_archive, zipFile, 0, MZ_ZIP_FLAG_CASE_SENSITIVE | MZ_ZIP_FLAG_IGNORE_PATH); if (MZ_FALSE == status) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Failed to initialize reader ZIP archive"; @@ -1467,19 +1454,17 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector bool has_bundle_structure = false; BundleMetadata metadata; fs::path metadata_path = temp_folder / BUNDLE_STRUCTURE_JSON_NAME; - status = mz_zip_reader_extract_file_to_file(&zip_archive, BUNDLE_STRUCTURE_JSON_NAME, - encode_path(metadata_path.string().c_str()).c_str(), MZ_ZIP_FLAG_CASE_SENSITIVE); + status = mz_zip_reader_extract_file_to_file(&zip_archive, BUNDLE_STRUCTURE_JSON_NAME, encode_path(metadata_path.string().c_str()).c_str(), MZ_ZIP_FLAG_CASE_SENSITIVE); if (status) { if (metadata.load_from_json(metadata_path.string())) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found bundle_id: " << metadata.id << " from " - << BUNDLE_STRUCTURE_JSON_NAME; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found bundle_id: " << metadata.id << " from " << BUNDLE_STRUCTURE_JSON_NAME; has_bundle_structure = true; } } if (has_bundle_structure && metadata.id.empty()) { boost::uuids::uuid uuid = boost::uuids::random_generator()(); - metadata.id = to_string(uuid); + metadata.id = to_string(uuid); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " bundle_id was empty, so generating a UUID: " << metadata.id; } @@ -1491,11 +1476,9 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector if (!fs::exists(bundle_base_dir)) fs::create_directories(bundle_base_dir, ec); if (ec) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " Failed to create bundle directory: " << bundle_base_dir.string() - << " error: " << ec.message(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " Failed to create bundle directory: " << bundle_base_dir.string() << " error: " << ec.message(); } else { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << " No bundle_structure.json found, importing presets into the user preset directory"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " No bundle_structure.json found, importing presets into the user preset directory"; } // Extract Files @@ -1510,21 +1493,18 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector if (std::string::npos != index) { file_name = file_name.substr(index + 1); } - if (BUNDLE_STRUCTURE_JSON_NAME == file_name) - continue; + if (BUNDLE_STRUCTURE_JSON_NAME == file_name) continue; // create target file path std::string target_file_path = boost::filesystem::path(temp_folder / file_name).make_preferred().string(); - status = mz_zip_reader_extract_to_file(&zip_archive, i, encode_path(target_file_path.c_str()).c_str(), - MZ_ZIP_FLAG_CASE_SENSITIVE); + status = mz_zip_reader_extract_to_file(&zip_archive, i, encode_path(target_file_path.c_str()).c_str(), MZ_ZIP_FLAG_CASE_SENSITIVE); // target file is opened if (MZ_FALSE == status) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Failed to open target file: " << target_file_path; } else { bool is_success = import_json_presets(substitutions, target_file_path, override_confirm, rule, overwrite, result, has_bundle_structure ? bundle_base_dir.string() : std::string()); - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << " import target file: " << target_file_path << " import result" << is_success; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " import target file: " << target_file_path << " import result" << is_success; } } } @@ -1542,8 +1522,9 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Saved bundle metadata to: " << metadata_save_path.string(); metadata.bundle_type = BundleType::Local; - metadata.path = metadata_save_path.string(); + metadata.path = metadata_save_path.string(); // Store the bundle metadata in m_bundles for tracking + bundles.WriteLock(); bundles.m_bundles[metadata.id] = metadata; @@ -1554,10 +1535,8 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector } fclose(zipFile); - if (fs::exists(temp_folder)) - fs::remove_all(temp_folder, ec); - if (ec) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " remove directory failed: " << ec.message(); + if (fs::exists(temp_folder)) fs::remove_all(temp_folder, ec); + if (ec) BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " remove directory failed: " << ec.message(); } } bundles.UnpauseRead(); @@ -1565,37 +1544,38 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector return substitutions; } -bool PresetBundle::import_json_presets(PresetsConfigSubstitutions& substitutions, - std::string& file, - std::function override_confirm, - ForwardCompatibilitySubstitutionRule rule, - int& overwrite, - std::vector& result, - const std::string& bundle_dir) +bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & substitutions, + std::string & file, + std::function override_confirm, + ForwardCompatibilitySubstitutionRule rule, + int & overwrite, + std::vector & result, + const std::string & bundle_dir) { try { DynamicPrintConfig config; // BBS: change to json format // ConfigSubstitutions config_substitutions = config.load_from_ini(preset.file, substitution_rule); std::map key_values; - std::string reason; - ConfigSubstitutions config_substitutions = config.load_from_json(file, rule, key_values, reason); - std::string name = key_values[BBL_JSON_KEY_NAME]; - std::string version_str = key_values[BBL_JSON_KEY_VERSION]; - boost::optional version = Semver::parse(version_str); - if (!version) - return false; + std::string reason; + ConfigSubstitutions config_substitutions = config.load_from_json(file, rule, key_values, reason); + std::string name = key_values[BBL_JSON_KEY_NAME]; + std::string version_str = key_values[BBL_JSON_KEY_VERSION]; + boost::optional version = Semver::parse(version_str); + if (!version) return false; - std::string type_subdir; // also note the type subdir for bundles - PresetCollection* collection = nullptr; + std::string type_subdir; // also note the type subdir for bundles + PresetCollection *collection = nullptr; if (config.has("printer_settings_id")) { - collection = &printers; + collection = &printers; type_subdir = PRESET_PRINTER_NAME; - } else if (config.has("print_settings_id")) { - collection = &prints; + } + else if (config.has("print_settings_id")) { + collection = &prints; type_subdir = PRESET_PRINT_NAME; - } else if (config.has("filament_settings_id")) { - collection = &filaments; + } + else if (config.has("filament_settings_id")) { + collection = &filaments; type_subdir = PRESET_FILAMENT_NAME; } if (collection == nullptr) { @@ -1603,17 +1583,15 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions& substitutions return false; } const PresetOrigin load_origin = detect_origin_from_path(boost::filesystem::path(bundle_dir)); - const std::string preset_name = get_preset_canonical_name(name, load_origin); + const std::string preset_name = get_preset_canonical_name(name, load_origin); - if (overwrite == 0) - overwrite = 1; + if (overwrite == 0) overwrite = 1; if (auto p = collection->find_preset(preset_name, false)) { if (p->is_default || p->is_system) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset already present and is system preset, not loading: " << preset_name; return false; } - if (overwrite != 2 && overwrite != 3) - overwrite = override_confirm(preset_name); // 3: yes to all 2: no to all + if (overwrite != 2 && overwrite != 3) overwrite = override_confirm(preset_name); //3: yes to all 2: no to all } if (overwrite == 0 || overwrite == 2) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset already present, not loading: " << preset_name; @@ -1621,61 +1599,55 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions& substitutions } DynamicPrintConfig new_config; - Preset* inherit_preset = nullptr; - ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS); - std::string inherits_value; + Preset * inherit_preset = nullptr; + ConfigOption * inherits_config = config.option(BBL_JSON_KEY_INHERITS); + std::string inherits_value; if (inherits_config) { - ConfigOptionString* option_str = dynamic_cast(inherits_config); + ConfigOptionString *option_str = dynamic_cast(inherits_config); inherits_value = option_str->value; inherit_preset = collection->find_preset2(inherits_value, true); Preset::normalize_inherits(config, inherit_preset); if (inherit_preset) - inherits_value = inherit_preset->name; // keep the base_id redo below in sync + inherits_value = inherit_preset->name; // keep the base_id redo below in sync } if (inherit_preset) { new_config = inherit_preset->config; new_config.apply(std::move(config)); } else { // We support custom root preset now - auto inherits_config2 = dynamic_cast(inherits_config); + auto inherits_config2 = dynamic_cast(inherits_config); if (inherits_config2 && !inherits_config2->value.empty()) { // we should skip this preset here - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(", can not find inherit preset for user preset %1%, just skip") % name; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", can not find inherit preset for user preset %1%, just skip") % name; return false; } - // Find a default preset for the config. The PrintPresetCollection provides different default preset based on the - // "printer_technology" field. - const Preset& default_preset = collection->default_preset_for(config); + // Find a default preset for the config. The PrintPresetCollection provides different default preset based on the "printer_technology" field. + const Preset &default_preset = collection->default_preset_for(config); new_config = default_preset.config; new_config.apply(std::move(config)); extend_default_config_length(new_config, true, default_preset.config); } - Preset& preset = collection->load_preset(collection->path_from_name(name, inherit_preset == nullptr), preset_name, - std::move(new_config), false); + Preset &preset = collection->load_preset(collection->path_from_name(name, inherit_preset == nullptr), preset_name, std::move(new_config), false); preset.bundle_id = load_origin.bundle_id; if (key_values.find(BBL_JSON_KEY_FILAMENT_ID) != key_values.end()) preset.filament_id = key_values[BBL_JSON_KEY_FILAMENT_ID]; preset.is_external = true; preset.version = *version; inherit_preset = collection->find_preset(inherits_value, false, true); // pointer maybe wrong after insert, redo find - if (inherit_preset) - preset.base_id = inherit_preset->setting_id; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << preset.name << " have filament_id: " << preset.filament_id - << " and base_id: " << preset.base_id; + if (inherit_preset) preset.base_id = inherit_preset->setting_id; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << preset.name << " have filament_id: " << preset.filament_id << " and base_id: " << preset.base_id; Preset::normalize(preset.config); // Report configuration fields, which are misplaced into a wrong group. - const Preset& default_preset = collection->default_preset_for(new_config); - std::string incorrect_keys = Preset::remove_invalid_keys(preset.config, default_preset.config); + const Preset &default_preset = collection->default_preset_for(new_config); + std::string incorrect_keys = Preset::remove_invalid_keys(preset.config, default_preset.config); if (!incorrect_keys.empty()) { ++m_errors; BOOST_LOG_TRIVIAL(error) << "Error in a preset file: The preset \"" << preset.file << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; } if (!config_substitutions.empty()) - substitutions.push_back( - {name, collection->type(), PresetConfigSubstitutions::Source::UserFile, file, std::move(config_substitutions)}); + substitutions.push_back({name, collection->type(), PresetConfigSubstitutions::Source::UserFile, file, std::move(config_substitutions)}); collection->set_custom_preset_alias(preset); // If bundle_dir is provided, use it for the save operation @@ -1689,26 +1661,26 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions& substitutions } result.push_back(file); - } catch (const std::ifstream::failure& err) { + } catch (const std::ifstream::failure &err) { ++m_errors; BOOST_LOG_TRIVIAL(error) << boost::format("The config cannot be loaded: %1%. Reason: %2%") % file % err.what(); - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { ++m_errors; BOOST_LOG_TRIVIAL(error) << boost::format("Failed importing config file: %1%. Reason: %2%") % file % err.what(); } return true; } -// BBS save user preset to user_id preset folder +//BBS save user preset to user_id preset folder void PresetBundle::save_user_presets(AppConfig& config, std::map& need_to_delete_list) { std::string user_sub_folder = DEFAULT_USER_FOLDER_NAME; if (!config.get("preset_folder").empty()) user_sub_folder = config.get("preset_folder"); - // BBS: change directory by design - const std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + user_sub_folder; + //BBS: change directory by design + const std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/"+ user_sub_folder; - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, save to %1%") % dir_user_presets; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, save to %1%")%dir_user_presets; fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); if (!fs::exists(user_folder)) @@ -1740,7 +1712,7 @@ void PresetBundle::check_and_fix_user_presets_syncinfo(const std::string& user_i process_collection(this->printers); } -// Orca: Import subscribed bundle presets (load and save to disk in one operation) +//Orca: Import subscribed bundle presets (load and save to disk in one operation) PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( AppConfig& config, const std::map>& bundle_presets, @@ -1751,8 +1723,7 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( std::string errors_cumulative; bool process_added = false, filament_added = false, machine_added = false; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " enter, substitution_rule " << substitution_rule << ", bundle_id: " << remote_metadata.id - << ", preset count: " << bundle_presets.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " enter, substitution_rule " << substitution_rule << ", bundle_id: " << remote_metadata.id << ", preset count: " << bundle_presets.size(); BundleMetadata merged_metadata; auto existing_it = bundles.m_bundles.find(remote_metadata.id); @@ -1762,16 +1733,16 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( merged_metadata.imported_time = std::time(nullptr); } - merged_metadata.id = remote_metadata.id; - merged_metadata.name = remote_metadata.name; - merged_metadata.version = remote_metadata.version; - merged_metadata.description = remote_metadata.description; - merged_metadata.author = remote_metadata.author; - merged_metadata.updated_time = remote_metadata.updated_time; - merged_metadata.bundle_type = BundleType::Subscribed; - merged_metadata.is_subscribed = true; + merged_metadata.id = remote_metadata.id; + merged_metadata.name = remote_metadata.name; + merged_metadata.version = remote_metadata.version; + merged_metadata.description = remote_metadata.description; + merged_metadata.author = remote_metadata.author; + merged_metadata.updated_time = remote_metadata.updated_time; + merged_metadata.bundle_type = BundleType::Subscribed; + merged_metadata.is_subscribed = true; merged_metadata.update_available = false; - merged_metadata.unauthorized = false; + merged_metadata.unauthorized = false; const PresetOrigin subscribed_origin(PresetOrigin::Kind::SubscribedBundle, remote_metadata.id); @@ -1795,8 +1766,8 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( remote_printers.insert(subscribed_name); } - auto remove_obsolete_bundle_presets = [&](PresetCollection& collection, const std::unordered_set& remote_names, - const char* type_name) -> int { + auto remove_obsolete_bundle_presets = + [&](PresetCollection& collection, const std::unordered_set& remote_names, const char* type_name) -> int { int removed_count = 0; std::vector to_delete; @@ -1810,12 +1781,10 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( for (const std::string& preset_name : to_delete) { if (collection.delete_preset(preset_name, true)) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << type_name << " preset '" << preset_name - << "' no longer in remote bundle, deleted"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << type_name << " preset '" << preset_name << "' no longer in remote bundle, deleted"; ++removed_count; } else { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": failed to delete obsolete " << type_name << " preset '" << preset_name - << "'"; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": failed to delete obsolete " << type_name << " preset '" << preset_name << "'"; } } @@ -1833,8 +1802,7 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( // Get current user ID for path construction std::string user_id = config.get("preset_folder"); - if (user_id.empty()) - user_id = DEFAULT_USER_FOLDER_NAME; + if (user_id.empty()) user_id = DEFAULT_USER_FOLDER_NAME; // Create the subscribed directory base path boost::filesystem::path user_folder(Slic3r::data_dir() + "/" + PRESET_USER_DIR); @@ -1845,8 +1813,7 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( if (!boost::filesystem::exists(subscribed_base)) boost::filesystem::create_directories(subscribed_base, ec); if (ec) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create subscribed directory: " << subscribed_base.string() - << " error: " << ec.message(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create subscribed directory: " << subscribed_base.string() << " error: " << ec.message(); return substitutions; } @@ -1857,8 +1824,7 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( if (!boost::filesystem::exists(bundle_dir)) boost::filesystem::create_directories(bundle_dir, ec); if (ec) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create bundle directory: " << bundle_dir.string() - << " error: " << ec.message(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create bundle directory: " << bundle_dir.string() << " error: " << ec.message(); return substitutions; } @@ -1868,8 +1834,8 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( // Load each preset from the bundle and save to disk for (const auto& preset_entry : bundle_presets) { - const std::string& preset_name = preset_entry.first; - const std::string subscribed_name = get_preset_canonical_name(preset_name, subscribed_origin); + const std::string& preset_name = preset_entry.first; + const std::string subscribed_name = get_preset_canonical_name(preset_name, subscribed_origin); std::map value_map = preset_entry.second; // Make a copy since we might modify it BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " importing preset: " << preset_name << " from bundle: " << remote_metadata.id; @@ -1884,8 +1850,7 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( // If this preset inherits from another preset inside the same bundle, rewrite the // reference to the canonical (bundle-prefixed) name so the lookup matches the stored identity. auto inherits_iter = value_map.find(BBL_JSON_KEY_INHERITS); - if (inherits_iter != value_map.end() && !inherits_iter->second.empty() && - bundle_presets.find(inherits_iter->second) != bundle_presets.end()) + if (inherits_iter != value_map.end() && !inherits_iter->second.empty() && bundle_presets.find(inherits_iter->second) != bundle_presets.end()) inherits_iter->second = get_preset_canonical_name(inherits_iter->second, subscribed_origin); try { @@ -1895,23 +1860,23 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( if (type_iter->second == PRESET_IOT_PRINT_TYPE) { preset_collection = &(this->prints); - type_subdir = PRESET_PRINT_NAME; - preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, - subscribed_origin); + type_subdir = PRESET_PRINT_NAME; + preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, subscribed_origin); process_added |= preset_added; - } else if (type_iter->second == PRESET_IOT_FILAMENT_TYPE) { + } + else if (type_iter->second == PRESET_IOT_FILAMENT_TYPE) { preset_collection = &(this->filaments); - type_subdir = PRESET_FILAMENT_NAME; - preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, - subscribed_origin); + type_subdir = PRESET_FILAMENT_NAME; + preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, subscribed_origin); filament_added |= preset_added; - } else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { + } + else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { preset_collection = &(this->printers); - type_subdir = PRESET_PRINTER_NAME; - preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, - subscribed_origin); + type_subdir = PRESET_PRINTER_NAME; + preset_added = preset_collection->load_user_preset(preset_name, value_map, substitutions, substitution_rule, subscribed_origin); machine_added |= preset_added; - } else { + } + else { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " invalid type " << type_iter->second << " for preset " << preset_name; continue; } @@ -1933,19 +1898,20 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) merged_metadata.printer_presets.push_back(preset->name); } - } catch (const std::runtime_error& err) { + } + catch (const std::runtime_error& err) { errors_cumulative += err.what(); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " error importing preset " << preset_name << ": " << err.what(); } } boost::filesystem::path metadata_save_path = bundle_dir / PRESET_BUNDLE_METADATA; - merged_metadata.path = metadata_save_path.string(); - bundles.m_bundles[remote_metadata.id] = merged_metadata; + merged_metadata.path = metadata_save_path.string(); + bundles.m_bundles[remote_metadata.id] = merged_metadata; if (bundles.m_bundles[remote_metadata.id].save_to_json(metadata_save_path.string())) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " saved bundle metadata to: " << metadata_save_path.string(); - } else { + } else { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to save bundle metadata to: " << metadata_save_path.string(); } @@ -1960,18 +1926,15 @@ PresetsConfigSubstitutions PresetBundle::update_subscribed_presets( if (!errors_cumulative.empty()) throw Slic3r::RuntimeError(errors_cumulative); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << " finished, process_added " << process_added << ", filament_added " << filament_added - << ", machine_added " << machine_added; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << " finished, process_added " << process_added << ", filament_added " << filament_added << ", machine_added " << machine_added; return substitutions; } // Helper function: save preset to bundle directory with common logic // This function extracts the common code used by both import_json_presets and import_subscribed_presets -bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, - PresetCollection* collection, - const std::string& bundle_id, - const std::string& type_subdir, - const std::string& bundle_base_dir) +bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, PresetCollection* collection, + const std::string& bundle_id, const std::string& type_subdir, + const std::string& bundle_base_dir) { if (bundle_base_dir.empty()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " bundle_base_dir is empty, cannot save preset " << preset.name; @@ -1988,8 +1951,7 @@ bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, if (!boost::filesystem::exists(bundle_dir)) boost::filesystem::create_directories(bundle_dir, ec); if (ec) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create bundle directory: " << bundle_dir.string() - << " error: " << ec.message(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create bundle directory: " << bundle_dir.string() << " error: " << ec.message(); return false; } @@ -1998,8 +1960,7 @@ bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, if (!boost::filesystem::exists(type_dir)) { boost::filesystem::create_directories(type_dir, ec); if (ec) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create type directory: " << type_dir.string() - << " error: " << ec.message(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " failed to create type directory: " << type_dir.string() << " error: " << ec.message(); return false; } } @@ -2009,8 +1970,8 @@ bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, // Bundle preset names may include the subscribed/local prefix path. // Persist the file under the type directory using only the base preset name. const std::string preset_filename = boost::filesystem::path(preset.name).filename().string(); - const std::string file_name = boost::iends_with(preset_filename, ".json") ? preset_filename : (preset_filename + ".json"); - preset.file = (type_dir / file_name).make_preferred().string(); + const std::string file_name = boost::iends_with(preset_filename, ".json") ? preset_filename : (preset_filename + ".json"); + preset.file = (type_dir / file_name).make_preferred().string(); // Save with parent config if inherits from another preset std::string inherits = Preset::inherits(preset.config); @@ -2026,8 +1987,10 @@ bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, Preset::normalize_inherits(preset.config, parent_preset); if (preset.base_id.empty()) preset.base_id = parent_preset->setting_id; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " saved preset " << preset.name << " filament_id: " << preset.filament_id - << " base_id: " << preset.base_id << " bundle: " << bundle_id; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " saved preset " << preset.name + << " filament_id: " << preset.filament_id + << " base_id: " << preset.base_id + << " bundle: " << bundle_id; preset.save(&(parent_preset->config)); } } @@ -2043,13 +2006,13 @@ bool PresetBundle::save_preset_to_bundle_dir(Preset& preset, } } -// BBS: save user preset to user_id preset folder +//BBS: save user preset to user_id preset folder void PresetBundle::update_user_presets_directory(const std::string preset_folder) { - // BBS: change directory by design - const std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + preset_folder; + //BBS: change directory by design + const std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/"+ preset_folder; - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, update directory to %1%") % dir_user_presets; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, update directory to %1%")%dir_user_presets; fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); if (!fs::exists(user_folder)) @@ -2070,8 +2033,7 @@ void PresetBundle::remove_user_presets_directory(const std::string preset_folder const std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + preset_folder; if (preset_folder.empty()) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(": preset_folder is empty, no need to remove directory : %1%") % dir_user_presets; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": preset_folder is empty, no need to remove directory : %1%") % dir_user_presets; return; } BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, delete directory : %1%") % dir_user_presets; @@ -2083,69 +2045,72 @@ void PresetBundle::remove_user_presets_directory(const std::string preset_folder void PresetBundle::update_system_preset_setting_ids(std::map>& system_presets) { - for (auto iterator : system_presets) { - std::string name = iterator.first; + for (auto iterator: system_presets) + { + std::string name = iterator.first; std::map& value_map = iterator.second; - // get the type first + //get the type first std::map::iterator type_iter = value_map.find(BBL_JSON_KEY_TYPE); if (type_iter == value_map.end()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find type for setting %1%") % name; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find type for setting %1%")%name; continue; } - PresetCollection* preset_collection = nullptr; + PresetCollection *preset_collection = nullptr; if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { preset_collection = &(this->printers); - } else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { + } + else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { preset_collection = &(this->printers); - } else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { + } + else if (type_iter->second == PRESET_IOT_PRINTER_TYPE) { preset_collection = &(this->printers); - } else { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format("invalid type %1% for setting %2%") % type_iter->second % name; + } + else { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format("invalid type %1% for setting %2%") %type_iter->second %name; continue; } std::string setting_id; if (value_map.count(BBL_JSON_KEY_SETTING_ID) > 0) setting_id = value_map[BBL_JSON_KEY_SETTING_ID]; else { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find setting_id for setting %1%") % name; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(" can not find setting_id for setting %1%")%name; continue; } Preset* preset = preset_collection->find_preset(name, false, true); if (preset) { if (!preset->setting_id.empty() && (preset->setting_id.compare(setting_id) != 0)) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << boost::format("name %1%, local setting_id %2% is different with remote id %3%") % preset->name % - preset->setting_id % setting_id; - } else if (preset->setting_id.empty()) + BOOST_LOG_TRIVIAL(error) << boost::format("name %1%, local setting_id %2% is different with remote id %3%") + %preset->name %preset->setting_id %setting_id; + } + else if (preset->setting_id.empty()) preset->setting_id = setting_id; - } else { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format("can not find setting %1% in system presets, type %2%") % name % type_iter->second; + } + else { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format("can not find setting %1% in system presets, type %2%") %name %type_iter->second; continue; } } return; } -// BBS: validate printers from previous project -static std::set gcodes_key_set = {"filament_end_gcode", "filament_start_gcode", "change_filament_gcode", - "layer_change_gcode", "machine_end_gcode", "machine_pause_gcode", - "machine_start_gcode", "template_custom_gcode", "printing_by_object_gcode", - "before_layer_change_gcode", "time_lapse_gcode", "wrapping_detection_gcode"}; -int PresetBundle::validate_presets(const std::string& file_name, DynamicPrintConfig& config, std::set& different_gcodes) +//BBS: validate printers from previous project +static std::set gcodes_key_set = {"filament_end_gcode", "filament_start_gcode", "change_filament_gcode", "layer_change_gcode", "machine_end_gcode", "machine_pause_gcode", "machine_start_gcode", + "template_custom_gcode", "printing_by_object_gcode", "before_layer_change_gcode", "time_lapse_gcode", "wrapping_detection_gcode"}; +int PresetBundle::validate_presets(const std::string &file_name, DynamicPrintConfig& config, std::set& different_gcodes) { - bool validated = false; - std::vector inherits_values = config.option("inherits_group", true)->values; - std::vector filament_preset_name = config.option("filament_settings_id", true)->values; - std::string printer_preset = config.option("printer_settings_id", true)->value; - bool has_different_settings_to_system = config.option("different_settings_to_system") ? true : false; + bool validated = false; + std::vector inherits_values = config.option("inherits_group", true)->values; + std::vector filament_preset_name = config.option("filament_settings_id", true)->values; + std::string printer_preset = config.option("printer_settings_id", true)->value; + bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; std::vector different_values; - int ret = VALIDATE_PRESETS_SUCCESS; + int ret = VALIDATE_PRESETS_SUCCESS; if (has_different_settings_to_system) different_values = config.option("different_settings_to_system", true)->values; - // PrinterTechnology printer_technology = Preset::printer_technology(config); + //PrinterTechnology printer_technology = Preset::printer_technology(config); size_t filament_count = config.option("filament_diameter")->values.size(); inherits_values.resize(filament_count + 2, std::string()); different_values.resize(filament_count + 2, std::string()); @@ -2155,14 +2120,14 @@ int PresetBundle::validate_presets(const std::string& file_name, DynamicPrintCon validated = this->printers.validate_preset(printer_preset, printer_inherits); if (!validated) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(":file_name %1%, found the printer preset not inherit from system") % file_name; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":file_name %1%, found the printer preset not inherit from system") % file_name; different_gcodes.emplace(printer_preset); ret = VALIDATE_PRESETS_PRINTER_NOT_FOUND; } - for (unsigned int index = 0; index < filament_count; index++) { - std::string filament_preset = filament_preset_name[index]; - std::string filament_inherits = inherits_values[index + 1]; + for(unsigned int index = 0; index < filament_count; index ++) + { + std::string filament_preset = filament_preset_name[index]; + std::string filament_inherits = inherits_values[index+1]; // filament_preset_name is padded up to filament_count from filament_diameter. Unfilled // slots have no assigned preset, so there's nothing to validate or warn about. @@ -2171,23 +2136,21 @@ int PresetBundle::validate_presets(const std::string& file_name, DynamicPrintCon validated = this->filaments.validate_preset(filament_preset, filament_inherits); if (!validated) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(":file_name %1%, found the filament %2% preset not inherit from system") % - file_name % (index + 1); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":file_name %1%, found the filament %2% preset not inherit from system") % file_name %(index+1); different_gcodes.emplace(filament_preset); ret = VALIDATE_PRESETS_FILAMENTS_NOT_FOUND; } } - // self defined presets, return directly - if (ret) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(":file_name %1%, found self defined presets, count %2%") % file_name % - different_gcodes.size(); + //self defined presets, return directly + if (ret) + { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":file_name %1%, found self defined presets, count %2%") %file_name %different_gcodes.size(); return ret; } - for (unsigned int index = 1; index < filament_count; index++) { + for(unsigned int index = 1; index < filament_count; index ++) + { std::string different_settingss = different_values[index]; std::vector different_keys; @@ -2197,16 +2160,14 @@ int PresetBundle::validate_presets(const std::string& file_name, DynamicPrintCon for (unsigned int j = 0; j < different_keys.size(); j++) { if (gcodes_key_set.find(different_keys[j]) != gcodes_key_set.end()) { different_gcodes.emplace(different_keys[j]); - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(":preset index %1%, different key %2%") % index % different_keys[j]; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":preset index %1%, different key %2%") %index %different_keys[j]; } } } - if (!different_gcodes.empty()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(":file_name %1%, found different gcodes count %2%") % file_name % - different_gcodes.size(); + if (!different_gcodes.empty()) + { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(":file_name %1%, found different gcodes count %2%") %file_name %different_gcodes.size(); return VALIDATE_PRESETS_MODIFIED_GCODES; } @@ -2215,7 +2176,7 @@ int PresetBundle::validate_presets(const std::string& file_name, DynamicPrintCon return VALIDATE_PRESETS_SUCCESS; } -void PresetBundle::remove_users_preset(AppConfig& config, std::map>* my_presets) +void PresetBundle::remove_users_preset(AppConfig &config, std::map> *my_presets) { auto check_removed = [my_presets](Preset &preset) -> bool { if (my_presets == nullptr) return true; @@ -2230,18 +2191,17 @@ void PresetBundle::remove_users_preset(AppConfig& config, std::mapis_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(":printers erase %1%, type %2%, user_id %3%") % it->name % - Preset::get_type_string(it->type) % it->user_id; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":printers erase %1%, type %2%, user_id %3%") % it->name % Preset::get_type_string(it->type) % it->user_id; if (it->name == printer_selected_preset_name) need_reset_printer_preset = true; it = printers.erase(it); - } else { + } + else { it++; } } @@ -2263,17 +2223,16 @@ void PresetBundle::remove_users_preset(AppConfig& config, std::mapis_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(":prints erase %1%, type %2%, user_id %3%") % it->name % - Preset::get_type_string(it->type) % it->user_id; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":prints erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_print_name) need_reset_print_preset = true; it = prints.erase(it); - } else { + } + else { it++; } } @@ -2285,22 +2244,20 @@ void PresetBundle::remove_users_preset(AppConfig& config, std::mapis_user() && it->user_id.compare(preset_folder_user_id) == 0 && check_removed(*it)) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(":filaments erase %1%, type %2%, user_id %3%") % it->name % - Preset::get_type_string(it->type) % it->user_id; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(":filaments erase %1%, type %2%, user_id %3%")%it->name %Preset::get_type_string(it->type) %it->user_id; if (it->name == selected_filament_name) need_reset_filament_preset = true; it = filaments.erase(it); - } else { + } + else { it++; } } if (need_reset_filament_preset && printers.get_selected_preset().config.has("default_filament_profile")) { - const std::vector& prefered_filament_profiles = - printers.get_selected_preset().config.option("default_filament_profile")->values; + const std::vector& prefered_filament_profiles = printers.get_selected_preset().config.option("default_filament_profile")->values; if (prefered_filament_profiles.size() > 0) filaments.select_preset_by_name(prefered_filament_profiles[0], true); } else { @@ -2310,7 +2267,8 @@ void PresetBundle::remove_users_preset(AppConfig& config, std::mapfilaments.find_preset(filament_presets[i]); if (preset == nullptr) filament_presets[i] = filaments.get_selected_preset_name(); @@ -2328,12 +2286,11 @@ void PresetBundle::clear_printer_hold_aliases() this->printers.m_printer_hold_alias.clear(); } -// BBS: add json related logic, load system presets from json -std::pair PresetBundle::load_system_presets_from_json( - ForwardCompatibilitySubstitutionRule compatibility_rule) +//BBS: add json related logic, load system presets from json +std::pair PresetBundle::load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule) { - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%") % compatibility_rule; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%")%compatibility_rule; if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) // Loading system presets, don't log substitutions. compatibility_rule = ForwardCompatibilitySubstitutionRule::EnableSilent; @@ -2342,8 +2299,8 @@ std::pair PresetBundle::load_system_pre compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; // Here the vendor specific read only Config Bundles are stored. - // BBS: change directory by design - boost::filesystem::path dir = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR).make_preferred(); + //BBS: change directory by design + boost::filesystem::path dir = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR).make_preferred(); if (validation_mode) dir = (boost::filesystem::path(data_dir())).make_preferred(); @@ -2352,10 +2309,10 @@ std::pair PresetBundle::load_system_pre // The vendors below are loaded whole and against each other — the filament // library first, then every other vendor with it as the base — so each parse // is complete enough to be worth caching. - m_generate_vendor_caches = m_generate_vendor_caches || !validation_mode; + m_generate_vendor_caches = m_generate_vendor_caches || ! validation_mode; - PresetsConfigSubstitutions substitutions; - std::string errors_cummulative; + PresetsConfigSubstitutions substitutions; + std::string errors_cummulative; bool first = true; // Sorted, so any duplicate-preset warning below comes out in the same order on // every run. @@ -2375,17 +2332,16 @@ std::pair PresetBundle::load_system_pre } // Step 1: Load ORCA_FILAMENT_LIBRARY into `this` synchronously. - if (!orca_lib_vendor.empty()) { + if (! orca_lib_vendor.empty()) { try { // Match a fresh launch before parsing: hold aliases and the error // counter survive reset(), and would otherwise carry prior-cycle // state into this load. this->clear_printer_hold_aliases(); this->m_errors = 0; - append(substitutions, - this->load_vendor_configs_from_json(dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule).first); + append(substitutions, this->load_vendor_configs_from_json(dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule).first); first = false; - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { if (validation_mode) throw err; errors_cummulative += err.what(); @@ -2396,25 +2352,26 @@ std::pair PresetBundle::load_system_pre // Step 2: Load remaining vendors in parallel. Each gets its own // PresetBundle and uses `this` (which contains ORCA_FILAMENT_LIBRARY) // as the base_bundle for cross-bundle inheritance lookups. - std::vector> parallel_bundles(other_vendors.size()); - std::vector parallel_substitutions(other_vendors.size()); - std::vector parallel_errors(other_vendors.size()); + std::vector> parallel_bundles(other_vendors.size()); + std::vector parallel_substitutions(other_vendors.size()); + std::vector parallel_errors(other_vendors.size()); - tbb::parallel_for(tbb::blocked_range(0, other_vendors.size()), [&](const tbb::blocked_range& range) { - for (size_t i = range.begin(); i < range.end(); ++i) { - auto bundle = std::make_unique(); - bundle->set_is_validation_mode(validation_mode); - bundle->set_generate_vendor_caches(m_generate_vendor_caches); - try { - auto result = bundle->load_vendor_configs_from_json(dir.string(), other_vendors[i], PresetBundle::LoadSystem, - compatibility_rule, this); - parallel_substitutions[i] = std::move(result.first); - parallel_bundles[i] = std::move(bundle); - } catch (const std::runtime_error& err) { - parallel_errors[i] = err.what(); + tbb::parallel_for(tbb::blocked_range(0, other_vendors.size()), + [&](const tbb::blocked_range& range) { + for (size_t i = range.begin(); i < range.end(); ++i) { + auto bundle = std::make_unique(); + bundle->set_is_validation_mode(validation_mode); + bundle->set_generate_vendor_caches(m_generate_vendor_caches); + try { + auto result = bundle->load_vendor_configs_from_json( + dir.string(), other_vendors[i], PresetBundle::LoadSystem, compatibility_rule, this); + parallel_substitutions[i] = std::move(result.first); + parallel_bundles[i] = std::move(bundle); + } catch (const std::runtime_error &err) { + parallel_errors[i] = err.what(); + } } - } - }); + }); // Step 3: Sequentially merge the parallel-loaded bundles into `this`. // The merge order is the original vendor order so any duplicate-warning @@ -2433,7 +2390,7 @@ std::pair PresetBundle::load_system_pre const std::string& vendor_name = other_vendors[i]; append(substitutions, std::move(parallel_substitutions[i])); std::vector duplicates = this->merge_presets(std::move(*parallel_bundles[i])); - first = false; + first = false; if (!duplicates.empty()) { errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; for (size_t j = 0; j < duplicates.size(); ++j) { @@ -2447,22 +2404,22 @@ std::pair PresetBundle::load_system_pre } if (first) { - // No config bundle loaded, reset. - this->reset(false); - } + // No config bundle loaded, reset. + this->reset(false); + } - this->update_system_maps(); + this->update_system_maps(); - const auto load_ms = std::chrono::duration_cast(std::chrono::steady_clock::now() - load_t0).count(); + const auto load_ms = std::chrono::duration_cast( + std::chrono::steady_clock::now() - load_t0).count(); BOOST_LOG_TRIVIAL(info) << "PresetBundle: " << vendor_names.size() << " vendor(s) loaded in " << load_ms << " ms"; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, errors_cummulative %1%") % errors_cummulative; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, errors_cummulative %1%")%errors_cummulative; return std::make_pair(std::move(substitutions), errors_cummulative); } -std::pair PresetBundle::load_system_models_from_json( - ForwardCompatibilitySubstitutionRule compatibility_rule) +std::pair PresetBundle::load_system_models_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%") % compatibility_rule; if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) @@ -2473,10 +2430,10 @@ std::pair PresetBundle::load_system_mod compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; // Here the vendor specific read only Config Bundles are stored. - boost::filesystem::path dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); + boost::filesystem::path dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); PresetsConfigSubstitutions substitutions; - std::string errors_cummulative; - for (auto& dir_entry : boost::filesystem::directory_iterator(dir)) { + std::string errors_cummulative; + for (auto &dir_entry : boost::filesystem::directory_iterator(dir)) { std::string vendor_file = dir_entry.path().string(); if (Slic3r::is_json_file(vendor_file)) { std::string vendor_name = dir_entry.path().filename().string(); @@ -2484,9 +2441,8 @@ std::pair PresetBundle::load_system_mod vendor_name.erase(vendor_name.size() - 5); try { // Load the config bundle, flatten it. - append(substitutions, - load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadVendorOnly, compatibility_rule).first); - } catch (const std::runtime_error& err) { + append(substitutions, load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadVendorOnly, compatibility_rule).first); + } catch (const std::runtime_error &err) { errors_cummulative += err.what(); errors_cummulative += "\n"; } @@ -2497,8 +2453,7 @@ std::pair PresetBundle::load_system_mod return std::make_pair(std::move(substitutions), errors_cummulative); } -std::pair PresetBundle::load_system_filaments_json( - ForwardCompatibilitySubstitutionRule compatibility_rule) +std::pair PresetBundle::load_system_filaments_json(ForwardCompatibilitySubstitutionRule compatibility_rule) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%") % compatibility_rule; if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) @@ -2509,11 +2464,11 @@ std::pair PresetBundle::load_system_fil compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; // Here the vendor specific read only Config Bundles are stored. - boost::filesystem::path dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); + boost::filesystem::path dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); PresetsConfigSubstitutions substitutions; - std::string errors_cummulative; - bool first = true; - for (auto& dir_entry : boost::filesystem::directory_iterator(dir)) { + std::string errors_cummulative; + bool first = true; + for (auto &dir_entry : boost::filesystem::directory_iterator(dir)) { std::string vendor_file = dir_entry.path().string(); if (Slic3r::is_json_file(vendor_file)) { std::string vendor_name = dir_entry.path().filename().string(); @@ -2522,31 +2477,23 @@ std::pair PresetBundle::load_system_fil try { if (first) { // Reset this PresetBundle and load the first vendor config. - append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, - PresetBundle::LoadSystem | PresetBundle::LoadFilamentOnly, - compatibility_rule) - .first); + append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem | PresetBundle::LoadFilamentOnly, compatibility_rule).first); first = false; } else { // Load the other vendor configs, merge them with this PresetBundle. // Report duplicate profiles. PresetBundle other; - append(substitutions, - other - .load_vendor_configs_from_json(dir.string(), vendor_name, - PresetBundle::LoadSystem | PresetBundle::LoadFilamentOnly, compatibility_rule) - .first); + append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem | PresetBundle::LoadFilamentOnly, compatibility_rule).first); std::vector duplicates = this->merge_presets(std::move(other)); if (!duplicates.empty()) { errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; for (size_t i = 0; i < duplicates.size(); ++i) { - if (i > 0) - errors_cummulative += ", "; + if (i > 0) errors_cummulative += ", "; errors_cummulative += duplicates[i]; } } } - } catch (const std::runtime_error& err) { + } catch (const std::runtime_error &err) { errors_cummulative += err.what(); errors_cummulative += "\n"; } @@ -2562,19 +2509,17 @@ VendorProfile PresetBundle::get_custom_vendor_models() const VendorProfile vendor; vendor.name = PRESET_CUSTOM_VENDOR; vendor.id = PRESET_CUSTOM_VENDOR; - for (auto& preset : printers.get_presets()) { - if (preset.is_system) - continue; - if (printers.get_preset_base(preset) != &preset) - continue; - if (preset.is_default) - continue; - auto model = preset.config.opt_string("printer_model"); - auto variant = preset.config.opt_string("printer_variant"); - auto iter_model = std::find_if(vendor.models.begin(), vendor.models.end(), - [model](VendorProfile::PrinterModel& m) { return m.name == model; }); + for (auto &preset : printers.get_presets()) { + if (preset.is_system) continue; + if (printers.get_preset_base(preset) != &preset) continue; + if (preset.is_default) continue; + auto model = preset.config.opt_string("printer_model"); + auto variant = preset.config.opt_string("printer_variant"); + auto iter_model = std::find_if(vendor.models.begin(), vendor.models.end(), [model](VendorProfile::PrinterModel &m) { + return m.name == model; + }); if (iter_model == vendor.models.end()) { - iter_model = vendor.models.emplace(vendor.models.end(), VendorProfile::PrinterModel{}); + iter_model = vendor.models.emplace(vendor.models.end(), VendorProfile::PrinterModel{}); iter_model->id = model; iter_model->name = model; iter_model->variants = {VendorProfile::PrinterVariant(variant)}; @@ -2586,21 +2531,21 @@ VendorProfile PresetBundle::get_custom_vendor_models() const } // Merge one vendor's presets with the other vendor's presets, report duplicates. -std::vector PresetBundle::merge_presets(PresetBundle&& other) +std::vector PresetBundle::merge_presets(PresetBundle &&other) { this->vendors.insert(other.vendors.begin(), other.vendors.end()); - std::vector duplicate_prints = this->prints.merge_presets(std::move(other.prints), this->vendors); - std::vector duplicate_sla_prints = this->sla_prints.merge_presets(std::move(other.sla_prints), this->vendors); - std::vector duplicate_filaments = this->filaments.merge_presets(std::move(other.filaments), this->vendors); + std::vector duplicate_prints = this->prints .merge_presets(std::move(other.prints), this->vendors); + std::vector duplicate_sla_prints = this->sla_prints .merge_presets(std::move(other.sla_prints), this->vendors); + std::vector duplicate_filaments = this->filaments .merge_presets(std::move(other.filaments), this->vendors); std::vector duplicate_sla_materials = this->sla_materials.merge_presets(std::move(other.sla_materials), this->vendors); - std::vector duplicate_printers = this->printers.merge_presets(std::move(other.printers), this->vendors); - append(this->obsolete_presets.prints, std::move(other.obsolete_presets.prints)); - append(this->obsolete_presets.sla_prints, std::move(other.obsolete_presets.sla_prints)); - append(this->obsolete_presets.filaments, std::move(other.obsolete_presets.filaments)); + std::vector duplicate_printers = this->printers .merge_presets(std::move(other.printers), this->vendors); + append(this->obsolete_presets.prints, std::move(other.obsolete_presets.prints)); + append(this->obsolete_presets.sla_prints, std::move(other.obsolete_presets.sla_prints)); + append(this->obsolete_presets.filaments, std::move(other.obsolete_presets.filaments)); append(this->obsolete_presets.sla_materials, std::move(other.obsolete_presets.sla_materials)); - append(this->obsolete_presets.printers, std::move(other.obsolete_presets.printers)); - append(duplicate_prints, std::move(duplicate_sla_prints)); - append(duplicate_prints, std::move(duplicate_filaments)); + append(this->obsolete_presets.printers, std::move(other.obsolete_presets.printers)); + append(duplicate_prints, std::move(duplicate_sla_prints)); + append(duplicate_prints, std::move(duplicate_filaments)); append(duplicate_prints, std::move(duplicate_sla_materials)); append(duplicate_prints, std::move(duplicate_printers)); m_errors += other.m_errors; @@ -2609,22 +2554,22 @@ std::vector PresetBundle::merge_presets(PresetBundle&& other) void PresetBundle::update_system_maps() { - this->prints.update_map_system_profile_renamed(); - this->sla_prints.update_map_system_profile_renamed(); - this->filaments.update_map_system_profile_renamed(); + this->prints .update_map_system_profile_renamed(); + this->sla_prints .update_map_system_profile_renamed(); + this->filaments .update_map_system_profile_renamed(); this->sla_materials.update_map_system_profile_renamed(); - this->printers.update_map_system_profile_renamed(); + this->printers .update_map_system_profile_renamed(); - this->prints.update_map_alias_to_profile_name(); - this->sla_prints.update_map_alias_to_profile_name(); - this->filaments.update_map_alias_to_profile_name(); + this->prints .update_map_alias_to_profile_name(); + this->sla_prints .update_map_alias_to_profile_name(); + this->filaments .update_map_alias_to_profile_name(); this->sla_materials.update_map_alias_to_profile_name(); - this->printers.update_map_alias_to_profile_name(); + this->printers .update_map_alias_to_profile_name(); this->filaments.update_library_profile_excluded_from(); } -static inline std::string remove_ini_suffix(const std::string& name) +static inline std::string remove_ini_suffix(const std::string &name) { std::string out = name; if (boost::iends_with(out, ".ini")) @@ -2635,14 +2580,14 @@ static inline std::string remove_ini_suffix(const std::string& name) // Set the "enabled" flag for printer vendors, printer models and printer variants // based on the user configuration. // If the "vendor" section is missing, enable all models and variants of the particular vendor. -void PresetBundle::load_installed_printers(const AppConfig& config) +void PresetBundle::load_installed_printers(const AppConfig &config) { - this->update_system_maps(); - for (auto& preset : printers) + this->update_system_maps(); + for (auto &preset : printers) preset.set_visible_from_appconfig(config); } -const std::string& PresetBundle::get_preset_name_by_alias(const Preset::Type& preset_type, const std::string& alias) const +const std::string& PresetBundle::get_preset_name_by_alias( const Preset::Type& preset_type, const std::string& alias) const { if (preset_type == Preset::TYPE_INVALID) return alias; @@ -2651,21 +2596,21 @@ const std::string& PresetBundle::get_preset_name_by_alias(const Preset::Type& pr preset_type == Preset::TYPE_SLA_PRINT ? sla_prints : preset_type == Preset::TYPE_FILAMENT ? filaments : preset_type == Preset::TYPE_PRINTER ? printers : - sla_materials; + sla_materials; return presets.get_preset_name_by_alias(alias); } -// BBS: get filament required hrc by filament type +//BBS: get filament required hrc by filament type const int PresetBundle::get_required_hrc_by_filament_type(const std::string& filament_type) const { - static std::unordered_map filament_type_to_hrc; + static std::unordered_mapfilament_type_to_hrc; if (filament_type_to_hrc.empty()) { for (auto iter = filaments.m_presets.begin(); iter != filaments.m_presets.end(); iter++) { if (iter->vendor && iter->vendor->id == "BBL") { if (iter->config.has("filament_type") && iter->config.has("required_nozzle_HRC")) { - auto type = iter->config.opt_string("filament_type", 0); - auto hrc = iter->config.opt_int("required_nozzle_HRC", 0); + auto type = iter->config.opt_string("filament_type", 0); + auto hrc = iter->config.opt_int("required_nozzle_HRC", 0); filament_type_to_hrc[type] = hrc; } } @@ -2678,17 +2623,14 @@ const int PresetBundle::get_required_hrc_by_filament_type(const std::string& fil return 0; } -// BBS: add project embedded preset logic -void PresetBundle::save_changes_for_preset(const std::string& new_name, - Preset::Type type, - const std::vector& unselected_options, - bool save_to_project) +//BBS: add project embedded preset logic +void PresetBundle::save_changes_for_preset(const std::string& new_name, Preset::Type type, + const std::vector& unselected_options, bool save_to_project) { - PresetCollection& presets = type == Preset::TYPE_PRINT ? prints : - type == Preset::TYPE_SLA_PRINT ? sla_prints : - type == Preset::TYPE_FILAMENT ? filaments : - type == Preset::TYPE_SLA_MATERIAL ? sla_materials : - printers; + PresetCollection& presets = type == Preset::TYPE_PRINT ? prints : + type == Preset::TYPE_SLA_PRINT ? sla_prints : + type == Preset::TYPE_FILAMENT ? filaments : + type == Preset::TYPE_SLA_MATERIAL ? sla_materials : printers; // if we want to save just some from selected options if (!unselected_options.empty()) { @@ -2697,12 +2639,11 @@ void PresetBundle::save_changes_for_preset(const std::string& new_name, } // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini - // BBS: add project embedded preset logic - // presets.save_current_preset(new_name); + //BBS: add project embedded preset logic + //presets.save_current_preset(new_name); presets.save_current_preset(new_name, false, save_to_project); // Mark the print & filament enabled if they are compatible with the currently selected preset. - // If saving the preset changes compatibility with other presets, keep the now incompatible dependent presets selected, however with a - // "red flag" icon showing that they are no more compatible. + // If saving the preset changes compatibility with other presets, keep the now incompatible dependent presets selected, however with a "red flag" icon showing that they are no more compatible. update_compatible(PresetSelectCompatibleType::Never); if (type == Preset::TYPE_FILAMENT) { @@ -2711,90 +2652,87 @@ void PresetBundle::save_changes_for_preset(const std::string& new_name, } } -void PresetBundle::load_installed_filaments(AppConfig& config) +void PresetBundle::load_installed_filaments(AppConfig &config) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, printer size %1%") % printers.size(); - // if (! config.has_section(AppConfig::SECTION_FILAMENTS) - // || config.get_section(AppConfig::SECTION_FILAMENTS).empty()) { - // Compatibility with the PrusaSlicer 2.1.1 and older, where the filament profiles were not installable yet. - // Find all filament profiles, which are compatible with installed printers, and act as if these filament profiles - // were installed. - std::unordered_set compatible_filaments; - for (const Preset& printer : printers) - if (printer.is_visible && printer.printer_technology() == ptFFF && printer.vendor && (!printer.vendor->models.empty())) { - bool add_default_materials = true; - if (config.has_section(AppConfig::SECTION_FILAMENTS)) { - const std::map& installed_filament = config.get_section(AppConfig::SECTION_FILAMENTS); - for (auto filament_iter : installed_filament) { - Preset* filament = filaments.find_preset(filament_iter.first, false, true); - if (filament && is_compatible_with_printer(PresetWithVendorProfile(*filament, filament->vendor), - PresetWithVendorProfile(printer, printer.vendor))) { - // already has compatible filament - add_default_materials = false; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": printer %1% vendor %2% already has default filament %3%") % - printer.name % printer.vendor % filament_iter.first; - break; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, printer size %1%")%printers.size(); + //if (! config.has_section(AppConfig::SECTION_FILAMENTS) + // || config.get_section(AppConfig::SECTION_FILAMENTS).empty()) { + // Compatibility with the PrusaSlicer 2.1.1 and older, where the filament profiles were not installable yet. + // Find all filament profiles, which are compatible with installed printers, and act as if these filament profiles + // were installed. + std::unordered_set compatible_filaments; + for (const Preset &printer : printers) + if (printer.is_visible && printer.printer_technology() == ptFFF && printer.vendor && (!printer.vendor->models.empty())) { + bool add_default_materials = true; + if (config.has_section(AppConfig::SECTION_FILAMENTS)) + { + const std::map& installed_filament = config.get_section(AppConfig::SECTION_FILAMENTS); + for (auto filament_iter : installed_filament) + { + Preset* filament = filaments.find_preset(filament_iter.first, false, true); + if (filament && is_compatible_with_printer(PresetWithVendorProfile(*filament, filament->vendor), PresetWithVendorProfile(printer, printer.vendor))) + { + + //already has compatible filament + add_default_materials = false; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": printer %1% vendor %2% already has default filament %3%")%printer.name %printer.vendor %filament_iter.first; + break; + } } } - } - if (!add_default_materials) - continue; + if (!add_default_materials) + continue; - const VendorProfile::PrinterModel* printer_model = PresetUtils::system_printer_model(printer); - if (!printer_model) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": can not find printer_model for printer %1%") % printer.name; - continue; + const VendorProfile::PrinterModel *printer_model = PresetUtils::system_printer_model(printer); + if (!printer_model) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": can not find printer_model for printer %1%")%printer.name; + continue; + } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": printer %1% vendor %2% don't have filament visible, will add %3% default filaments")%printer.name %printer.vendor %printer_model->default_materials.size(); + for (auto default_filament: printer_model->default_materials) + { + Preset* filament = filaments.find_preset(default_filament, false, true); + if (filament && filament->is_system) + compatible_filaments.insert(filament); + } + //const PresetWithVendorProfile printer_with_vendor_profile = printers.get_preset_with_vendor_profile(printer); + //for (const Preset &filament : filaments) + // if (filament.is_system && is_compatible_with_printer(filaments.get_preset_with_vendor_profile(filament), printer_with_vendor_profile)) + // compatible_filaments.insert(&filament); } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format( - ": printer %1% vendor %2% don't have filament visible, will add %3% default filaments") % - printer.name % printer.vendor % printer_model->default_materials.size(); - for (auto default_filament : printer_model->default_materials) { - Preset* filament = filaments.find_preset(default_filament, false, true); - if (filament && filament->is_system) - compatible_filaments.insert(filament); - } - // const PresetWithVendorProfile printer_with_vendor_profile = printers.get_preset_with_vendor_profile(printer); - // for (const Preset &filament : filaments) - // if (filament.is_system && is_compatible_with_printer(filaments.get_preset_with_vendor_profile(filament), - // printer_with_vendor_profile)) - // compatible_filaments.insert(&filament); + // and mark these filaments as installed, therefore this code will not be executed at the next start of the application. + for (const auto &filament: compatible_filaments) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": set filament %1% to visible by default")%filament->name; + config.set(AppConfig::SECTION_FILAMENTS, filament->name, "true"); } - // and mark these filaments as installed, therefore this code will not be executed at the next start of the application. - for (const auto& filament : compatible_filaments) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": set filament %1% to visible by default") % filament->name; - config.set(AppConfig::SECTION_FILAMENTS, filament->name, "true"); - } //} - for (auto& preset : filaments) + for (auto &preset : filaments) preset.set_visible_from_appconfig(config); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": exit."); } -void PresetBundle::load_installed_sla_materials(AppConfig& config) +void PresetBundle::load_installed_sla_materials(AppConfig &config) { - if (!config.has_section(AppConfig::SECTION_MATERIALS)) { + if (! config.has_section(AppConfig::SECTION_MATERIALS)) { std::unordered_set comp_sla_materials; - // Compatibility with the PrusaSlicer 2.1.1 and older, where the SLA material profiles were not installable yet. - // Find all SLA material profiles, which are compatible with installed printers, and act as if these SLA material profiles - // were installed. - for (const Preset& printer : printers) + // Compatibility with the PrusaSlicer 2.1.1 and older, where the SLA material profiles were not installable yet. + // Find all SLA material profiles, which are compatible with installed printers, and act as if these SLA material profiles + // were installed. + for (const Preset &printer : printers) if (printer.is_visible && printer.printer_technology() == ptSLA) { - const PresetWithVendorProfile printer_with_vendor_profile = printers.get_preset_with_vendor_profile(printer); - for (const Preset& material : sla_materials) - if (material.is_system && - is_compatible_with_printer(sla_materials.get_preset_with_vendor_profile(material), printer_with_vendor_profile)) - comp_sla_materials.insert(&material); - } - // and mark these SLA materials as installed, therefore this code will not be executed at the next start of the application. - for (const auto& material : comp_sla_materials) + const PresetWithVendorProfile printer_with_vendor_profile = printers.get_preset_with_vendor_profile(printer); + for (const Preset &material : sla_materials) + if (material.is_system && is_compatible_with_printer(sla_materials.get_preset_with_vendor_profile(material), printer_with_vendor_profile)) + comp_sla_materials.insert(&material); + } + // and mark these SLA materials as installed, therefore this code will not be executed at the next start of the application. + for (const auto &material: comp_sla_materials) config.set(AppConfig::SECTION_MATERIALS, material->name, "true"); } - for (auto& preset : sla_materials) + for (auto &preset : sla_materials) preset.set_visible_from_appconfig(config); } @@ -2805,10 +2743,11 @@ void PresetBundle::load_installed_sla_materials(AppConfig& config) // indices into exactly that list. Missing keys clear the arrays, so one printer never inherits // another's mixes; fallback_to_global also reads the shared "presets" keys an older config // layout used, which export_selections drops on the next save. -static void load_mixed_filament_settings( - DynamicPrintConfig& project_config, AppConfig& config, const std::string& printer_name, size_t n_filaments, bool fallback_to_global) +static void load_mixed_filament_settings(DynamicPrintConfig &project_config, AppConfig &config, + const std::string &printer_name, size_t n_filaments, + bool fallback_to_global) { - auto raw_value = [&](const char* key, bool& found) -> std::string { + auto raw_value = [&](const char *key, bool &found) -> std::string { if (config.has_printer_setting(printer_name, key)) { found = true; return config.get_printer_setting(printer_name, key); @@ -2821,22 +2760,21 @@ static void load_mixed_filament_settings( return std::string{}; }; std::vector parts; - auto load_bools = [&](const char* key) { - auto& vals = project_config.option(key)->values; + auto load_bools = [&](const char *key) { + auto &vals = project_config.option(key)->values; vals.clear(); - bool found = false; + bool found = false; const std::string s = raw_value(key, found); if (found && !s.empty()) { boost::algorithm::split(parts, s, boost::algorithm::is_any_of(",")); - for (const auto& p : parts) - vals.push_back(p == "1"); + for (const auto &p : parts) vals.push_back(p == "1"); } vals.resize(n_filaments, false); }; - auto load_strings = [&](const char* key) { - auto& vals = project_config.option(key)->values; + auto load_strings = [&](const char *key) { + auto &vals = project_config.option(key)->values; vals.clear(); - bool found = false; + bool found = false; const std::string s = raw_value(key, found); if (found && !s.empty()) { boost::algorithm::split(parts, s, boost::algorithm::is_any_of("|")); @@ -2855,9 +2793,9 @@ static void load_mixed_filament_settings( // The gradient curve is the one array whose values contain '|' themselves (it separates the // control points), so it is stored C-style escaped rather than '|'-joined. { - auto& vals = project_config.option("filament_mixed_gradient_curve")->values; + auto &vals = project_config.option("filament_mixed_gradient_curve")->values; vals.clear(); - bool found = false; + bool found = false; const std::string s = raw_value("filament_mixed_gradient_curve", found); if (found && !s.empty()) { std::vector curves; @@ -2871,12 +2809,12 @@ static void load_mixed_filament_settings( } } -void PresetBundle::update_selections(AppConfig& config) +void PresetBundle::update_selections(AppConfig &config) { - std::string initial_printer_profile_name = printers.get_selected_preset_name(); + std::string initial_printer_profile_name = printers.get_selected_preset_name(); // Orca: load from orca_presets - std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); - std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); + std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); + std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); // Selects the profiles, which were selected at the last application close. prints.select_preset_by_name_strict(initial_print_profile_name); @@ -2886,8 +2824,8 @@ void PresetBundle::update_selections(AppConfig& config) // Load it even if the current printer technology is SLA. // The possibly excessive filament names will be later removed with this->update_multi_material_filament_presets() // once the FFF technology gets selected. - this->filament_presets = {filaments.get_selected_preset_name()}; - for (unsigned int i = 1; i < 1000; ++i) { + this->filament_presets = { filaments.get_selected_preset_name() }; + for (unsigned int i = 1; i < 1000; ++ i) { char name[64]; sprintf(name, "filament_%02u", i); auto f_name = config.get_printer_setting(initial_printer_profile_name, name); @@ -2908,18 +2846,14 @@ void PresetBundle::update_selections(AppConfig& config) std::vector multi_filament_colors; if (config.has_printer_setting(initial_printer_profile_name, "filament_multi_colors")) { - boost::algorithm::split(multi_filament_colors, config.get_printer_setting(initial_printer_profile_name, "filament_multi_colors"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(multi_filament_colors, config.get_printer_setting(initial_printer_profile_name, "filament_multi_colors"), boost::algorithm::is_any_of(",")); } - if (multi_filament_colors.size() == 0) - project_config.option("filament_multi_colour")->values = filament_colors; - else - project_config.option("filament_multi_colour")->values = multi_filament_colors; + if (multi_filament_colors.size() == 0) project_config.option("filament_multi_colour")->values = filament_colors; + else project_config.option("filament_multi_colour")->values = multi_filament_colors; std::vector filament_color_types; if (config.has_printer_setting(initial_printer_profile_name, "filament_color_types")) { - boost::algorithm::split(filament_color_types, config.get_printer_setting(initial_printer_profile_name, "filament_color_types"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(filament_color_types, config.get_printer_setting(initial_printer_profile_name, "filament_color_types"), boost::algorithm::is_any_of(",")); } filament_color_types.resize(filament_presets.size(), "1"); project_config.option("filament_colour_type")->values = filament_color_types; @@ -2935,32 +2869,25 @@ void PresetBundle::update_selections(AppConfig& config) std::vector extruder_ams_count_str; if (config.has_printer_setting(initial_printer_profile_name, "extruder_ams_count")) { - boost::algorithm::split(extruder_ams_count_str, config.get_printer_setting(initial_printer_profile_name, "extruder_ams_count"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(extruder_ams_count_str, config.get_printer_setting(initial_printer_profile_name, "extruder_ams_count"), boost::algorithm::is_any_of(",")); } this->extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str); std::vector matrix; if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_matrix")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); auto flush_volumes_matrix = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), - flush_volumes_matrix.end()); + project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), flush_volumes_matrix.end()); } if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_vector")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), boost::algorithm::is_any_of("|")); auto flush_volumes_vector = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), - flush_volumes_vector.end()); + project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), flush_volumes_vector.end()); } if (config.has_printer_setting(initial_printer_profile_name, "flush_multiplier")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_multiplier"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_multiplier"), boost::algorithm::is_any_of("|")); auto flush_multipliers = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_multiplier")->values = std::vector(flush_multipliers.begin(), - flush_multipliers.end()); + project_config.option("flush_multiplier")->values = std::vector(flush_multipliers.begin(), flush_multipliers.end()); } // No global fallback here: on a printer change the legacy shared keys describe another // printer's filament list, so absent per-printer keys must clear the mixes, not revive them. @@ -2974,27 +2901,26 @@ void PresetBundle::update_selections(AppConfig& config) this->update_multi_material_filament_presets(); std::string first_visible_filament_name; - for (auto& fp : filament_presets) { + for (auto & fp : filament_presets) { // Orca: also match the ORCA_DEFAULT_FILAMENT_PLACEHOLDER placeholder. update_compatible_internal // iterates from m_num_default_presets, so the placeholder's is_compatible flag // stays true and the not-found/visible/compatible predicate alone would miss it. - if (auto it = filaments.find_preset_internal(fp); - fp == ORCA_DEFAULT_FILAMENT_PLACEHOLDER || it == filaments.end() || !it->is_visible || !it->is_compatible) { + if (auto it = filaments.find_preset_internal(fp); fp == ORCA_DEFAULT_FILAMENT_PLACEHOLDER || it == filaments.end() || !it->is_visible || !it->is_compatible) { if (first_visible_filament_name.empty()) first_visible_filament_name = filaments.first_compatible().name; fp = first_visible_filament_name; } } + } // Load selections (current print, current filaments, current printer) from config.ini // This is done on application start up or after updates are applied. -void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& preferred_selection /* = PresetPreferences()*/) +void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& preferred_selection/* = PresetPreferences()*/) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": enter, preferred printer_model_id %1%") % preferred_selection.printer_model_id; - // Update visibility of presets based on application vendor / model / variant configuration. - this->load_installed_printers(config); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, preferred printer_model_id %1%")%preferred_selection.printer_model_id; + // Update visibility of presets based on application vendor / model / variant configuration. + this->load_installed_printers(config); // Update visibility of filament and sla material presets this->load_installed_filaments(config); @@ -3003,7 +2929,7 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p // Parse the initial print / filament / printer profile names. // std::string initial_sla_print_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_PRINT_NAME)); // std::string initial_sla_material_profile_name = remove_ini_suffix(config.get("presets", PRESET_SLA_MATERIALS_NAME)); - std::string initial_printer_profile_name = remove_ini_suffix(config.get("presets", PRESET_PRINTER_NAME)); + std::string initial_printer_profile_name = remove_ini_suffix(config.get("presets", PRESET_PRINTER_NAME)); // Activate print / filament / printer profiles from either the config, // or from the preferred_model_id suggestion passed in by ConfigWizard. @@ -3011,26 +2937,25 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p // Do not select alternate profiles for the print / filament profiles as those presets // will be selected by the following call of this->update_compatible(PresetSelectCompatibleType::Always). - const Preset* initial_printer = printers.find_preset(initial_printer_profile_name); + const Preset *initial_printer = printers.find_preset(initial_printer_profile_name); // If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr. - const Preset* preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, - preferred_selection.printer_variant); + const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant); printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true); CNumericLocalesSetter locales_setter; // Orca: load from orca_presets // const auto os_presets = config.get_machine_settings(initial_printer_profile_name); - std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); - std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); + std::string initial_print_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_PRINT_NAME); + std::string initial_filament_profile_name = config.get_printer_setting(initial_printer_profile_name, PRESET_FILAMENT_NAME); - // BBS: set default print/filament profiles to BBL's default setting - if (preferred_printer) { + //BBS: set default print/filament profiles to BBL's default setting + if (preferred_printer) + { const std::string& prefered_print_profile = preferred_printer->config.opt_string("default_print_profile"); if ((!initial_print_profile_name.compare("Default Setting")) && (prefered_print_profile.size() > 0)) initial_print_profile_name = prefered_print_profile; - const std::vector& prefered_filament_profiles = - preferred_printer->config.option("default_filament_profile")->values; + const std::vector& prefered_filament_profiles = preferred_printer->config.option("default_filament_profile")->values; if ((!initial_filament_profile_name.compare(ORCA_DEFAULT_FILAMENT_PLACEHOLDER)) && (prefered_filament_profiles.size() > 0)) { // Check if preferred filament is visible const Preset* preferred_preset = this->filaments.find_preset(prefered_filament_profiles[0], false); @@ -3044,15 +2969,15 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p // Selects the profile, leaves it to -1 if the initial profile name is empty or if it was not found. prints.select_preset_by_name_strict(initial_print_profile_name); filaments.select_preset_by_name_strict(initial_filament_profile_name); - // sla_prints.select_preset_by_name_strict(initial_sla_print_profile_name); + // sla_prints.select_preset_by_name_strict(initial_sla_print_profile_name); // sla_materials.select_preset_by_name_strict(initial_sla_material_profile_name); // Load the names of the other filament profiles selected for a multi-material printer. // Load it even if the current printer technology is SLA. // The possibly excessive filament names will be later removed with this->update_multi_material_filament_presets() // once the FFF technology gets selected. - this->filament_presets = {filaments.get_selected_preset_name()}; - for (unsigned int i = 1; i < 1000; ++i) { + this->filament_presets = { filaments.get_selected_preset_name() }; + for (unsigned int i = 1; i < 1000; ++ i) { char name[64]; sprintf(name, "filament_%02u", i); auto f_name = config.get_printer_setting(initial_printer_profile_name, name); @@ -3074,18 +2999,14 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p std::vector multi_filament_colors; if (config.has_printer_setting(initial_printer_profile_name, "filament_multi_colors")) { - boost::algorithm::split(multi_filament_colors, config.get_printer_setting(initial_printer_profile_name, "filament_multi_colors"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(multi_filament_colors, config.get_printer_setting(initial_printer_profile_name, "filament_multi_colors"), boost::algorithm::is_any_of(",")); } - if (multi_filament_colors.size() == 0) - project_config.option("filament_multi_colour")->values = filament_colors; - else - project_config.option("filament_multi_colour")->values = multi_filament_colors; + if (multi_filament_colors.size() == 0) project_config.option("filament_multi_colour")->values = filament_colors; + else project_config.option("filament_multi_colour")->values = multi_filament_colors; std::vector filament_color_types; if (config.has_printer_setting(initial_printer_profile_name, "filament_color_types")) { - boost::algorithm::split(filament_color_types, config.get_printer_setting(initial_printer_profile_name, "filament_color_types"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(filament_color_types, config.get_printer_setting(initial_printer_profile_name, "filament_color_types"), boost::algorithm::is_any_of(",")); } filament_color_types.resize(filament_presets.size(), "1"); project_config.option("filament_colour_type")->values = filament_color_types; @@ -3101,32 +3022,25 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p std::vector extruder_ams_count_str; if (config.has_printer_setting(initial_printer_profile_name, "extruder_ams_count")) { - boost::algorithm::split(extruder_ams_count_str, config.get_printer_setting(initial_printer_profile_name, "extruder_ams_count"), - boost::algorithm::is_any_of(",")); + boost::algorithm::split(extruder_ams_count_str, config.get_printer_setting(initial_printer_profile_name, "extruder_ams_count"), boost::algorithm::is_any_of(",")); } this->extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str); std::vector matrix; if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_matrix")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_matrix"), boost::algorithm::is_any_of("|")); auto flush_volumes_matrix = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), - flush_volumes_matrix.end()); + project_config.option("flush_volumes_matrix")->values = std::vector(flush_volumes_matrix.begin(), flush_volumes_matrix.end()); } if (config.has_printer_setting(initial_printer_profile_name, "flush_volumes_vector")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_volumes_vector"), boost::algorithm::is_any_of("|")); auto flush_volumes_vector = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), - flush_volumes_vector.end()); + project_config.option("flush_volumes_vector")->values = std::vector(flush_volumes_vector.begin(), flush_volumes_vector.end()); } if (config.has_printer_setting(initial_printer_profile_name, "flush_multiplier")) { - boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_multiplier"), - boost::algorithm::is_any_of("|")); + boost::algorithm::split(matrix, config.get_printer_setting(initial_printer_profile_name, "flush_multiplier"), boost::algorithm::is_any_of("|")); auto flush_multipliers = matrix | boost::adaptors::transformed(boost::lexical_cast); - project_config.option("flush_multiplier")->values = std::vector(flush_multipliers.begin(), - flush_multipliers.end()); + project_config.option("flush_multiplier")->values = std::vector(flush_multipliers.begin(), flush_multipliers.end()); } load_mixed_filament_settings(project_config, config, initial_printer_profile_name, filament_presets.size(), true); @@ -3138,17 +3052,17 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p this->update_multi_material_filament_presets(); if (initial_printer != nullptr && (preferred_printer == nullptr || initial_printer == preferred_printer)) { - // Don't run the following code, as we want to activate default filament / SLA material profiles when installing and selecting a new - // printer. Only run this code if just a filament / SLA material was installed by Config Wizard for an active Printer. + // Don't run the following code, as we want to activate default filament / SLA material profiles when installing and selecting a new printer. + // Only run this code if just a filament / SLA material was installed by Config Wizard for an active Printer. auto printer_technology = printers.get_selected_preset().printer_technology(); - if (printer_technology == ptFFF && !preferred_selection.filament.empty()) { + if (printer_technology == ptFFF && ! preferred_selection.filament.empty()) { std::string preferred_preset_name = get_preset_name_by_alias(Preset::Type::TYPE_FILAMENT, preferred_selection.filament); if (auto it = filaments.find_preset_internal(preferred_preset_name); - it != filaments.end() && (it->name == preferred_preset_name) && it->is_visible && it->is_compatible) { + it != filaments.end() && (it->name == preferred_preset_name ) && it->is_visible && it->is_compatible) { filaments.select_preset_by_name_strict(preferred_preset_name); this->filament_presets.front() = filaments.get_selected_preset_name(); } - } else if (printer_technology == ptSLA && !preferred_selection.sla_material.empty()) { + } else if (printer_technology == ptSLA && ! preferred_selection.sla_material.empty()) { std::string preferred_preset_name = get_preset_name_by_alias(Preset::Type::TYPE_SLA_MATERIAL, preferred_selection.sla_material); if (auto it = sla_materials.find_preset_internal(preferred_preset_name); it != sla_materials.end() && it->is_visible && it->is_compatible) @@ -3157,18 +3071,17 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p } std::string first_visible_filament_name; - for (auto& fp : filament_presets) { + for (auto & fp : filament_presets) { // Orca: also match the ORCA_DEFAULT_FILAMENT_PLACEHOLDER placeholder — see update_selections. - if (auto it = filaments.find_preset_internal(fp); - fp == ORCA_DEFAULT_FILAMENT_PLACEHOLDER || it == filaments.end() || !it->is_visible || !it->is_compatible) { + if (auto it = filaments.find_preset_internal(fp); fp == ORCA_DEFAULT_FILAMENT_PLACEHOLDER || it == filaments.end() || !it->is_visible || !it->is_compatible) { if (first_visible_filament_name.empty()) first_visible_filament_name = filaments.first_compatible().name; fp = first_visible_filament_name; } } - const Preset& current_printer = printers.get_selected_preset(); - const Preset* base_printer = printers.get_preset_base(current_printer); + const Preset& current_printer = printers.get_selected_preset(); + const Preset* base_printer = printers.get_preset_base(current_printer); bool use_default_nozzle_volume_type = true; if (base_printer) { std::string prev_nozzle_volume_type = config.get_nozzle_volume_types_from_config(base_printer->name); @@ -3181,12 +3094,11 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p } if (use_default_nozzle_volume_type) { - project_config.option("nozzle_volume_type")->values = - current_printer.config.option("default_nozzle_volume_type")->values; + project_config.option("nozzle_volume_type")->values = current_printer.config.option("default_nozzle_volume_type")->values; } else { // Orca: make sure `nozzle_volume_type` not shorter than `default_nozzle_volume_type`, otherwise we got array out of bound access // later in `Tab::switch_excluder` - auto& opt = project_config.option("nozzle_volume_type")->values; + auto& opt = project_config.option("nozzle_volume_type")->values; const auto& opt_default = current_printer.config.option("default_nozzle_volume_type")->values; while (opt.size() < opt_default.size()) { opt.emplace_back(opt_default[opt.size()]); @@ -3200,17 +3112,15 @@ void PresetBundle::load_selections(AppConfig& config, const PresetPreferences& p if (!initial_physical_printer_name.empty()) physical_printers.select_printer(initial_physical_printer_name); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": finished, preferred printer_model_id %1%") % preferred_selection.printer_model_id; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": finished, preferred printer_model_id %1%")%preferred_selection.printer_model_id; } // Export selections (current print, current filaments, current printer) into config.ini // BBS: change directories by design -void PresetBundle::export_selections(AppConfig& config) +void PresetBundle::export_selections(AppConfig &config) { - assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() >= 1); - // assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || - // filaments.get_selected_preset_name() == filament_presets.front()); + assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() >= 1); + //assert(this->printers.get_edited_preset().printer_technology() != ptFFF || filament_presets.size() > 1 || filaments.get_selected_preset_name() == filament_presets.front()); config.clear_section("presets"); auto printer_name = printers.get_selected_preset_name(); config.set("presets", PRESET_PRINTER_NAME, printer_name); @@ -3227,7 +3137,7 @@ void PresetBundle::export_selections(AppConfig& config) config.clear_printer_settings(printer_name); config.set_printer_setting(printer_name, PRESET_PRINTER_NAME, printer_name); config.set_printer_setting(printer_name, PRESET_PRINT_NAME, prints.get_selected_preset_name()); - config.set_printer_setting(printer_name, PRESET_FILAMENT_NAME, filament_presets.front()); + config.set_printer_setting(printer_name, PRESET_FILAMENT_NAME, filament_presets.front()); config.set_printer_setting(printer_name, "curr_bed_type", config.get("curr_bed_type")); for (unsigned i = 1; i < filament_presets.size(); ++i) { char name[64]; @@ -3237,75 +3147,68 @@ void PresetBundle::export_selections(AppConfig& config) } // Load project config data into app config CNumericLocalesSetter locales_setter; - std::string filament_colors = boost::algorithm::join(project_config.option("filament_colour")->values, ","); + std::string filament_colors = boost::algorithm::join(project_config.option("filament_colour")->values, ","); config.set_printer_setting(printer_name, "filament_colors", filament_colors); // Load filament multi color data into app config - std::string filament_multi_colors = boost::algorithm::join(project_config.option("filament_multi_colour")->values, - ","); + std::string filament_multi_colors = boost::algorithm::join(project_config.option("filament_multi_colour")->values, ","); config.set_printer_setting(printer_name, "filament_multi_colors", filament_multi_colors); // Load filament color type data into app config - std::string filament_color_types = boost::algorithm::join(project_config.option("filament_colour_type")->values, - ","); + std::string filament_color_types = boost::algorithm::join(project_config.option("filament_colour_type")->values, ","); config.set_printer_setting(printer_name, "filament_color_types", filament_color_types); // Load ams counts data into app config - std::string extruder_ams_count_str = boost::algorithm::join(save_extruder_ams_count_to_string(this->extruder_ams_counts), ","); + std::string extruder_ams_count_str = boost::algorithm::join(save_extruder_ams_count_to_string(this->extruder_ams_counts), ","); config.set_printer_setting(printer_name, "extruder_ams_count", extruder_ams_count_str); std::string flush_volumes_matrix = boost::algorithm::join(project_config.option("flush_volumes_matrix")->values | - boost::adaptors::transformed( - static_cast(std::to_string)), - "|"); + boost::adaptors::transformed(static_cast(std::to_string)), + "|"); config.set_printer_setting(printer_name, "flush_volumes_matrix", flush_volumes_matrix); std::string flush_volumes_vector = boost::algorithm::join(project_config.option("flush_volumes_vector")->values | - boost::adaptors::transformed( - static_cast(std::to_string)), - "|"); + boost::adaptors::transformed(static_cast(std::to_string)), + "|"); config.set_printer_setting(printer_name, "flush_volumes_vector", flush_volumes_vector); + std::string flush_multiplier_str = boost::algorithm::join(project_config.option("flush_multiplier")->values | - boost::adaptors::transformed( - static_cast(std::to_string)), + boost::adaptors::transformed(static_cast(std::to_string)), "|"); config.set_printer_setting(printer_name, "flush_multiplier", flush_multiplier_str); // Mixed-color filament metadata goes into the per-printer snapshot next to the filament list // it indexes (see load_mixed_filament_settings). Bools are ','-joined and the component, ratio // and range strings '|'-joined; the gradient curve is escaped instead, as it contains '|'. - auto join_bools = [](const std::vector& vals) { + auto join_bools = [](const std::vector &vals) { std::string s; for (size_t i = 0; i < vals.size(); ++i) { - if (i > 0) - s += ","; + if (i > 0) s += ","; s += (vals[i] ? "1" : "0"); } return s; }; - if (auto* opt = project_config.option("filament_is_mixed")) + if (auto *opt = project_config.option("filament_is_mixed")) config.set_printer_setting(printer_name, "filament_is_mixed", join_bools(opt->values)); - if (auto* opt = project_config.option("filament_mixed_components")) + if (auto *opt = project_config.option("filament_mixed_components")) config.set_printer_setting(printer_name, "filament_mixed_components", boost::algorithm::join(opt->values, "|")); - if (auto* opt = project_config.option("filament_mixed_sublayer_ratios")) + if (auto *opt = project_config.option("filament_mixed_sublayer_ratios")) config.set_printer_setting(printer_name, "filament_mixed_sublayer_ratios", boost::algorithm::join(opt->values, "|")); - if (auto* opt = project_config.option("filament_mixed_gradient")) + if (auto *opt = project_config.option("filament_mixed_gradient")) config.set_printer_setting(printer_name, "filament_mixed_gradient", join_bools(opt->values)); - if (auto* opt = project_config.option("filament_mixed_gradient_range")) + if (auto *opt = project_config.option("filament_mixed_gradient_range")) config.set_printer_setting(printer_name, "filament_mixed_gradient_range", boost::algorithm::join(opt->values, "|")); - if (auto* opt = project_config.option("filament_mixed_gradient_curve")) + if (auto *opt = project_config.option("filament_mixed_gradient_curve")) config.set_printer_setting(printer_name, "filament_mixed_gradient_curve", escape_strings_cstyle(opt->values)); - if (auto* opt = project_config.option("filament_mixed_gradient_per_part")) + if (auto *opt = project_config.option("filament_mixed_gradient_per_part")) config.set_printer_setting(printer_name, "filament_mixed_gradient_per_part", join_bools(opt->values)); // BBS - // config.set("presets", "sla_print", sla_prints.get_selected_preset_name()); - // config.set("presets", "sla_material", sla_materials.get_selected_preset_name()); - // config.set("presets", "physical_printer", physical_printers.get_selected_full_printer_name()); - // BBS: add config related log - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": printer %1%, print %2%, filaments[0] %3% ") % printers.get_selected_preset_name() % - prints.get_selected_preset_name() % filament_presets[0]; + //config.set("presets", "sla_print", sla_prints.get_selected_preset_name()); + //config.set("presets", "sla_material", sla_materials.get_selected_preset_name()); + //config.set("presets", "physical_printer", physical_printers.get_selected_full_printer_name()); + //BBS: add config related log + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": printer %1%, print %2%, filaments[0] %3% ")%printers.get_selected_preset_name() % prints.get_selected_preset_name() %filament_presets[0]; } void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) @@ -3316,12 +3219,12 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) else { filament_presets.resize(n); } - ConfigOptionStrings* filament_color = project_config.option("filament_colour"); - ConfigOptionStrings* filament_multi_color = project_config.option("filament_multi_colour"); - ConfigOptionStrings* filament_color_type = project_config.option("filament_colour_type"); - ConfigOptionInts* filament_map = project_config.option("filament_map"); - ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); - ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); + ConfigOptionStrings* filament_color = project_config.option("filament_colour"); + ConfigOptionStrings *filament_multi_color = project_config.option("filament_multi_colour"); + ConfigOptionStrings* filament_color_type = project_config.option("filament_colour_type"); + ConfigOptionInts* filament_map = project_config.option("filament_map"); + ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); + ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); // Which slots are new is a fact about the arrays below, not about filament_presets: // update_multi_material_filament_presets() tops that list up to the nozzle count on its own, @@ -3357,12 +3260,12 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) if (auto* opt = project_config.option("filament_mixed_gradient_per_part")) opt->values.resize(n, false); - // BBS set new filament color to new_color + //BBS set new filament color to new_color if (!new_color.empty()) { for (size_t i = old_slot_count; i < n; i++) { - filament_color->values[i] = new_color; + filament_color->values[i] = new_color; filament_multi_color->values[i] = new_color; - filament_color_type->values[i] = "1"; // default color type + filament_color_type->values[i] = "1"; // default color type } } @@ -3377,8 +3280,8 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) // update edited_preset { - Preset& edited_preset = filaments.get_edited_preset(); - bool edited_preset_deleted = true; + Preset& edited_preset = filaments.get_edited_preset(); + bool edited_preset_deleted = true; for (std::string filament_preset_name : filament_presets) { if (filament_preset_name == edited_preset.name) { edited_preset_deleted = false; @@ -3389,12 +3292,12 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) } } - ConfigOptionStrings* filament_color = project_config.option("filament_colour"); - ConfigOptionStrings* filament_multi_color = project_config.option("filament_multi_colour"); - ConfigOptionStrings* filament_color_type = project_config.option("filament_colour_type"); - ConfigOptionInts* filament_map = project_config.option("filament_map"); - ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); - ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); + ConfigOptionStrings *filament_color = project_config.option("filament_colour"); + ConfigOptionStrings *filament_multi_color = project_config.option("filament_multi_colour"); + ConfigOptionStrings *filament_color_type = project_config.option("filament_colour_type"); + ConfigOptionInts* filament_map = project_config.option("filament_map"); + ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); + ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); if (filament_color->values.size() > to_del_flament_id) { filament_color->values.erase(filament_color->values.begin() + to_del_flament_id); if (filament_map->values.size() > to_del_flament_id) { @@ -3406,7 +3309,8 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) if (filament_volume_map->values.size() > to_del_flament_id) { filament_volume_map->values.erase(filament_volume_map->values.begin() + to_del_flament_id); } - } else { + } + else { filament_color->values.resize(to_del_flament_id); filament_map->values.resize(to_del_flament_id, 1); filament_nozzle_map->values.resize(to_del_flament_id, 0); @@ -3430,27 +3334,29 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) // *physical* filament must be remapped out of every mix before the arrays themselves shrink. // Deleting a mixed slot needs no remap (nothing references a mixed slot as a component). { - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* comp_opt = project_config.option("filament_mixed_components"); + auto *is_mixed_opt = project_config.option("filament_is_mixed"); + auto *comp_opt = project_config.option("filament_mixed_components"); if (is_mixed_opt && comp_opt) { - bool del_is_physical = (to_del_flament_id >= is_mixed_opt->values.size() || !is_mixed_opt->values[to_del_flament_id]); + bool del_is_physical = (to_del_flament_id >= is_mixed_opt->values.size() + || !is_mixed_opt->values[to_del_flament_id]); if (del_is_physical) - remap_mixed_components_on_delete(is_mixed_opt->values, comp_opt->values, to_del_flament_id + 1); + remap_mixed_components_on_delete(is_mixed_opt->values, comp_opt->values, + to_del_flament_id + 1); } if (is_mixed_opt) erase_or_resize(is_mixed_opt->values); if (comp_opt) erase_or_resize(comp_opt->values); } - if (auto* opt = project_config.option("filament_mixed_sublayer_ratios")) + if (auto *opt = project_config.option("filament_mixed_sublayer_ratios")) erase_or_resize(opt->values); - if (auto* opt = project_config.option("filament_mixed_gradient")) + if (auto *opt = project_config.option("filament_mixed_gradient")) erase_or_resize(opt->values); - if (auto* opt = project_config.option("filament_mixed_gradient_range")) + if (auto *opt = project_config.option("filament_mixed_gradient_range")) erase_or_resize(opt->values); - if (auto* opt = project_config.option("filament_mixed_gradient_curve")) + if (auto *opt = project_config.option("filament_mixed_gradient_curve")) erase_or_resize(opt->values); - if (auto* opt = project_config.option("filament_mixed_gradient_per_part")) + if (auto *opt = project_config.option("filament_mixed_gradient_per_part")) erase_or_resize(opt->values); update_multi_material_filament_presets(to_del_flament_id); @@ -3458,13 +3364,13 @@ void PresetBundle::update_num_filaments(unsigned int to_del_flament_id) bool PresetBundle::is_mixed_filament(size_t idx) const { - auto* opt = project_config.option("filament_is_mixed"); + auto *opt = project_config.option("filament_is_mixed"); return opt && idx < opt->values.size() && opt->values[idx]; } size_t PresetBundle::num_mixed_filaments() const { - auto* opt = project_config.option("filament_is_mixed"); + auto *opt = project_config.option("filament_is_mixed"); return opt == nullptr ? 0 : size_t(std::count(opt->values.begin(), opt->values.end(), true)); } @@ -3487,16 +3393,17 @@ std::vector PresetBundle::physical_filament_config_indices() const return indices; } + void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) { combox_info.clear(); - for (auto& entry : filament_ams_list) { - auto& ams = entry.second; - auto filament_id = ams.opt_string("filament_id", 0u); - auto filament_color = ams.opt_string("filament_colour", 0u); - auto ams_name = ams.opt_string("tray_name", 0u); - auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); - auto filament_multi_color = ams.opt("filament_multi_colour")->values; + for (auto &entry : filament_ams_list) { + auto &ams = entry.second; + auto filament_id = ams.opt_string("filament_id", 0u); + auto filament_color = ams.opt_string("filament_colour", 0u); + auto ams_name = ams.opt_string("tray_name", 0u); + auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); + auto filament_multi_color = ams.opt("filament_multi_colour")->values; if (filament_id.empty()) { continue; } @@ -3507,18 +3414,15 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) combox_info.ams_names.push_back(ams_name); continue; } - 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; - }); + 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; }); if (iter == filaments.end()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(": filament_id %1% not found or system or compatible") % filament_id; + 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); if (!filament_type.empty()) { filament_type = "Generic " + filament_type; - iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto& f) { - return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); - }); + iter = std::find_if(filaments.begin(), filaments.end(), + [&filament_type](auto &f) { return f.is_compatible && f.is_system && boost::algorithm::starts_with(f.name, filament_type); }); } if (iter == filaments.end()) { // Prefer old selection @@ -3542,18 +3446,13 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) } } -unsigned int PresetBundle::sync_ams_list(std::vector>& unknowns, - bool use_map, - std::map& maps, - bool enable_append, - MergeFilamentInfo& merge_info, - bool color_only) +unsigned int PresetBundle::sync_ams_list(std::vector> &unknowns, bool use_map, std::map &maps, bool enable_append, MergeFilamentInfo &merge_info, bool color_only) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "use_map:" << use_map << " enable_append:" << enable_append; std::vector ams_filament_presets; std::vector ams_filament_colors; std::vector ams_filament_color_types; - std::vector ams_array_maps; + std::vector ams_array_maps; ams_multi_color_filment.clear(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": filament_ams_list size: %1%") % filament_ams_list.size(); struct AmsInfo @@ -3561,24 +3460,24 @@ unsigned int PresetBundle::sync_ams_list(std::vector mutli_filament_color; }; auto is_double_extruder = get_printer_extruder_count() == 2; std::vector ams_infos; - int index = 0; - for (auto& entry : filament_ams_list) { - auto& ams = entry.second; - auto filament_id = ams.opt_string("filament_id", 0u); - auto filament_color = ams.opt_string("filament_colour", 0u); - auto filament_color_type = ams.opt_string("filament_colour_type", 0u); - auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); + int index = 0; + for (auto &entry : filament_ams_list) { + auto & ams = entry.second; + auto filament_id = ams.opt_string("filament_id", 0u); + auto filament_color = ams.opt_string("filament_colour", 0u); + auto filament_color_type = ams.opt_string("filament_colour_type", 0u); + auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed"); auto filament_multi_color = ams.opt("filament_multi_colour")->values; - auto ams_id = ams.opt_string("ams_id", 0u); - auto slot_id = ams.opt_string("slot_id", 0u); - auto is_placeholder = ams.has("filament_slot_placeholder") && ams.opt_bool("filament_slot_placeholder", 0u); + auto ams_id = ams.opt_string("ams_id", 0u); + auto slot_id = ams.opt_string("slot_id", 0u); + auto is_placeholder = ams.has("filament_slot_placeholder") && ams.opt_bool("filament_slot_placeholder", 0u); ams_infos.push_back({filament_id.empty() ? false : true, false, is_placeholder, filament_color}); AMSMapInfo temp = {ams_id, slot_id}; ams_array_maps.push_back(temp); @@ -3590,7 +3489,7 @@ unsigned int PresetBundle::sync_ams_list(std::vectorconfig.opt_string("filament_type", 0u)); if (preset_type.size() > best_len && contains_word(upper_type, preset_type)) { - iter = it; - best_len = preset_type.size(); + iter = it; + best_len = preset_type.size(); filament_type = "Generic " + it->config.opt_string("filament_type", 0u); } } @@ -3665,28 +3564,26 @@ unsigned int PresetBundle::sync_ams_list(std::vectorname, filament_type) ? - (has_type ? - L("The filament may not be compatible with the current machine settings. Generic filament presets will be used.") : - L("The filament model is unknown. Generic filament presets will be used.")) : - (has_type ? - L("The filament may not be compatible with the current machine settings. A random filament preset will be used.") : - L("The filament model is unknown. A random filament preset will be used."))); + unknowns.emplace_back(&ams, boost::algorithm::starts_with(iter->name, filament_type) ? + (has_type ? L("The filament may not be compatible with the current machine settings. Generic filament presets will be used.") : + L("The filament model is unknown. Generic filament presets will be used.")) : + (has_type ? L("The filament may not be compatible with the current machine settings. A random filament preset will be used.") : + L("The filament model is unknown. A random filament preset will be used."))); filament_id = iter->filament_id; } ams_filament_presets.push_back(iter->name); @@ -3697,26 +3594,25 @@ unsigned int PresetBundle::sync_ams_list(std::vector("filament_colour"); - ConfigOptionStrings* filament_color_type = project_config.option("filament_colour_type"); - ConfigOptionInts* filament_map = project_config.option("filament_map"); - ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); + ConfigOptionStrings *filament_color = project_config.option("filament_colour"); + ConfigOptionStrings *filament_color_type = project_config.option("filament_colour_type"); + ConfigOptionInts * filament_map = project_config.option("filament_map"); + ConfigOptionInts * filament_volume_map = project_config.option("filament_volume_map"); // Snapshot and temporarily strip mixed filament slots so AMS sync operates on physical // filaments only. A mixed slot is virtual and has no tray to sync against; leaving it in // would let AMS mapping overwrite it and would break the physical-first slot ordering the // rest of the feature relies on. The slots are re-appended verbatim after the sync. - struct MixedSlotSnapshot - { + struct MixedSlotSnapshot { std::string preset; std::string color; std::string color_type; std::string mixed_components; std::string mixed_sublayer_ratios; - bool mixed_gradient = false; + bool mixed_gradient = false; std::string mixed_gradient_range; std::string mixed_gradient_curve; - bool mixed_gradient_per_part = false; + bool mixed_gradient_per_part = false; }; std::vector mixed_snapshots; auto* is_mixed_opt = project_config.option("filament_is_mixed"); @@ -3732,48 +3628,35 @@ unsigned int PresetBundle::sync_ams_list(std::vectorfilament_presets[i]; - snap.color = (i < filament_color->values.size()) ? filament_color->values[i] : ""; + snap.color = (i < filament_color->values.size()) ? filament_color->values[i] : ""; snap.color_type = (i < filament_color_type->values.size()) ? filament_color_type->values[i] : ""; - if (mixed_comp_opt && i < mixed_comp_opt->values.size()) - snap.mixed_components = mixed_comp_opt->values[i]; - if (mixed_ratios_opt && i < mixed_ratios_opt->values.size()) - snap.mixed_sublayer_ratios = mixed_ratios_opt->values[i]; - if (mixed_gradient_opt && i < mixed_gradient_opt->values.size()) - snap.mixed_gradient = mixed_gradient_opt->values[i]; - if (mixed_grad_range_opt && i < mixed_grad_range_opt->values.size()) - snap.mixed_gradient_range = mixed_grad_range_opt->values[i]; - if (mixed_grad_curve_opt && i < mixed_grad_curve_opt->values.size()) - snap.mixed_gradient_curve = mixed_grad_curve_opt->values[i]; - if (mixed_per_part_opt && i < mixed_per_part_opt->values.size()) - snap.mixed_gradient_per_part = mixed_per_part_opt->values[i]; + if (mixed_comp_opt && i < mixed_comp_opt->values.size()) snap.mixed_components = mixed_comp_opt->values[i]; + if (mixed_ratios_opt && i < mixed_ratios_opt->values.size()) snap.mixed_sublayer_ratios = mixed_ratios_opt->values[i]; + if (mixed_gradient_opt && i < mixed_gradient_opt->values.size()) snap.mixed_gradient = mixed_gradient_opt->values[i]; + if (mixed_grad_range_opt && i < mixed_grad_range_opt->values.size()) snap.mixed_gradient_range = mixed_grad_range_opt->values[i]; + if (mixed_grad_curve_opt && i < mixed_grad_curve_opt->values.size()) snap.mixed_gradient_curve = mixed_grad_curve_opt->values[i]; + if (mixed_per_part_opt && i < mixed_per_part_opt->values.size()) snap.mixed_gradient_per_part = mixed_per_part_opt->values[i]; mixed_snapshots.push_back(snap); } if (!mixed_snapshots.empty()) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": stripping " << mixed_snapshots.size() - << " mixed filament slot(s) before AMS sync"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": stripping " << mixed_snapshots.size() << " mixed filament slot(s) before AMS sync"; size_t phys_count = this->filament_presets.size() - mixed_snapshots.size(); this->filament_presets.resize(phys_count); filament_color->values.resize(phys_count); filament_color_type->values.resize(phys_count); filament_map->values.resize(phys_count, 1); is_mixed_opt->values.resize(phys_count); - if (mixed_comp_opt) - mixed_comp_opt->values.resize(phys_count); - if (mixed_ratios_opt) - mixed_ratios_opt->values.resize(phys_count); - if (mixed_gradient_opt) - mixed_gradient_opt->values.resize(phys_count); - if (mixed_grad_range_opt) - mixed_grad_range_opt->values.resize(phys_count); - if (mixed_grad_curve_opt) - mixed_grad_curve_opt->values.resize(phys_count); - if (mixed_per_part_opt) - mixed_per_part_opt->values.resize(phys_count); + if (mixed_comp_opt) mixed_comp_opt->values.resize(phys_count); + if (mixed_ratios_opt) mixed_ratios_opt->values.resize(phys_count); + if (mixed_gradient_opt) mixed_gradient_opt->values.resize(phys_count); + if (mixed_grad_range_opt) mixed_grad_range_opt->values.resize(phys_count); + if (mixed_grad_curve_opt) mixed_grad_curve_opt->values.resize(phys_count); + if (mixed_per_part_opt) mixed_per_part_opt->values.resize(phys_count); } } if (color_only) { - auto get_map_index = [&ams_infos](const std::vector& infos, const AMSMapInfo& temp) { + auto get_map_index = [&ams_infos](const std::vector &infos, const AMSMapInfo &temp) { for (int i = 0; i < infos.size(); i++) { if (infos[i].slot_id == temp.slot_id && infos[i].ams_id == temp.ams_id) { ams_infos[i].is_map = true; @@ -3789,7 +3672,7 @@ unsigned int PresetBundle::sync_ams_list(std::vector("filament_multi_colour"); + ConfigOptionStrings *project_multi_color = project_config.option("filament_multi_colour"); if (project_multi_color) { for (size_t i = 0; i < std::min(exist_multi_color_filment.size(), project_multi_color->values.size()); i++) { std::vector colors = split_string(project_multi_color->values[i], ' '); @@ -3808,7 +3691,7 @@ unsigned int PresetBundle::sync_ams_list(std::vector= 0 && valid_index < int(ams_filament_colors.size()) && !ams_filament_colors[valid_index].empty()) { exist_colors[i] = ams_filament_colors[valid_index]; - mapped_any = true; + mapped_any = true; if (valid_index < int(ams_multi_color_filment.size()) && !ams_multi_color_filment[valid_index].empty()) { exist_multi_color_filment[i] = ams_multi_color_filment[valid_index]; } else { @@ -3833,11 +3716,11 @@ unsigned int PresetBundle::sync_ams_list(std::vectorvalues = exist_colors; + filament_color->values = exist_colors; ams_multi_color_filment = exist_multi_color_filment; merge_info.merges.clear(); } else if (use_map) { - auto check_has_merge_info = [](std::map& maps, MergeFilamentInfo& merge_info, int exist_colors_size) { + auto check_has_merge_info = [](std::map &maps, MergeFilamentInfo &merge_info, int exist_colors_size) { std::set done; for (auto it_i = maps.begin(); it_i != maps.end(); ++it_i) { std::vector same_ams; @@ -3846,7 +3729,7 @@ unsigned int PresetBundle::sync_ams_list(std::vectorfirst) != done.end()) { continue; } - if (it_i->second.slot_id == "" || it_i->second.ams_id == "") { + if (it_i->second.slot_id == "" || it_i->second.ams_id == ""){ continue; } if (it_i->second.slot_id == it_j->second.slot_id && it_i->second.ams_id == it_j->second.ams_id) { @@ -3859,8 +3742,8 @@ unsigned int PresetBundle::sync_ams_list(std::vectorvalues.size()); - auto get_map_index = [&ams_infos](const std::vector& infos, const AMSMapInfo& temp) { + check_has_merge_info(maps, merge_info,filament_color->values.size()); + auto get_map_index = [&ams_infos](const std::vector &infos, const AMSMapInfo &temp) { for (int i = 0; i < infos.size(); i++) { if (infos[i].slot_id == temp.slot_id && infos[i].ams_id == temp.ams_id) { ams_infos[i].is_map = true; @@ -3870,8 +3753,8 @@ unsigned int PresetBundle::sync_ams_list(std::vector need_append_colors; - auto exist_colors = filament_color->values; - auto exist_color_types = filament_color_type->values; + auto exist_colors = filament_color->values; + auto exist_color_types = filament_color_type->values; auto exist_filament_presets = this->filament_presets; std::vector> exist_multi_color_filment; exist_multi_color_filment.resize(exist_colors.size()); @@ -3879,57 +3762,54 @@ unsigned int PresetBundle::sync_ams_list(std::vector= 0 && valid_index < ams_filament_presets.size()) { - exist_colors[i] = ams_filament_colors[valid_index]; - exist_color_types[i] = ams_filament_color_types[valid_index]; - exist_filament_presets[i] = ams_filament_presets[valid_index]; + exist_colors[i] = ams_filament_colors[valid_index]; + exist_color_types[i] = ams_filament_color_types[valid_index]; + exist_filament_presets[i] = ams_filament_presets[valid_index]; exist_multi_color_filment[i] = ams_multi_color_filment[valid_index]; } else { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "check error: array bound (mapping exist)"; } } } - for (size_t i = 0; i < ams_infos.size(); i++) { // check append + for (size_t i = 0; i < ams_infos.size(); i++) {// check append if (ams_infos[i].valid) { if (i >= ams_filament_presets.size()) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "check error: array bound (check append)"; continue; } - ams_infos[i].filament_preset = ams_filament_presets[i]; + ams_infos[i].filament_preset = ams_filament_presets[i]; ams_infos[i].mutli_filament_color = ams_multi_color_filment[i]; if (!ams_infos[i].is_map) { need_append_colors.emplace_back(ams_infos[i]); - ams_filament_colors[i] = ""; + ams_filament_colors[i] = ""; ams_filament_color_types[i] = ""; - ams_filament_presets[i] = ""; - ams_multi_color_filment[i] = std::vector(); + ams_filament_presets[i] = ""; + ams_multi_color_filment[i] = std::vector(); } - } else { - ams_filament_colors[i] = ""; + } + else { + ams_filament_colors[i] = ""; ams_filament_color_types[i] = ""; - ams_filament_presets[i] = ""; - ams_multi_color_filment[i] = std::vector(); + ams_filament_presets[i] = ""; + ams_multi_color_filment[i] = std::vector(); } } - // delete redundant color - ams_filament_colors.erase(std::remove_if(ams_filament_colors.begin(), ams_filament_colors.end(), - [](std::string& value) { return value.empty(); }), + //delete redundant color + ams_filament_colors.erase(std::remove_if(ams_filament_colors.begin(), ams_filament_colors.end(), [](std::string &value) { return value.empty(); }), ams_filament_colors.end()); - ams_filament_color_types.erase(std::remove_if(ams_filament_color_types.begin(), ams_filament_color_types.end(), - [](std::string& value) { return value.empty(); }), + ams_filament_color_types.erase(std::remove_if(ams_filament_color_types.begin(), ams_filament_color_types.end(), [](std::string &value) { return value.empty(); }), ams_filament_color_types.end()); - ams_filament_presets.erase(std::remove_if(ams_filament_presets.begin(), ams_filament_presets.end(), - [](std::string& value) { return value.empty(); }), + ams_filament_presets.erase(std::remove_if(ams_filament_presets.begin(), ams_filament_presets.end(), [](std::string &value) { return value.empty(); }), ams_filament_presets.end()); ams_multi_color_filment.erase(std::remove_if(ams_multi_color_filment.begin(), ams_multi_color_filment.end(), - [](std::vector& value) { return value.empty(); }), + [](std::vector &value) { return value.empty(); }), ams_multi_color_filment.end()); if (need_append_colors.size() > 0 && enable_append) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "need_append_colors.size() > 0 && enable_append"; - auto get_idx_in_array = [](std::vector& presets, std::vector& colors, const std::string& preset, - const std::string& color) -> int { + auto get_idx_in_array = [](std::vector &presets, std::vector &colors, const std::string &preset, const std::string &color) -> int { for (size_t i = 0; i < presets.size(); i++) { if (presets[i] == preset && colors[i] == color) { return i; @@ -3937,12 +3817,11 @@ unsigned int PresetBundle::sync_ams_list(std::vector= MAXIMUM_AMS_SYNC_FILAMENT_NUMBER) { + for (size_t i = 0; i < need_append_colors.size(); i++){ + if (exist_filament_presets.size() >= MAXIMUM_AMS_SYNC_FILAMENT_NUMBER){ break; } - auto idx = get_idx_in_array(exist_filament_presets, exist_colors, need_append_colors[i].filament_preset, - need_append_colors[i].filament_color); + auto idx = get_idx_in_array(exist_filament_presets, exist_colors, need_append_colors[i].filament_preset, need_append_colors[i].filament_color); if (idx >= 0) { continue; } @@ -3952,19 +3831,21 @@ unsigned int PresetBundle::sync_ams_list(std::vectorvalues = exist_colors; + filament_color->values = exist_colors; filament_color_type->values = exist_color_types; - ams_multi_color_filment = exist_multi_color_filment; - this->filament_presets = exist_filament_presets; + ams_multi_color_filment = exist_multi_color_filment; + this->filament_presets = exist_filament_presets; filament_map->values.resize(exist_filament_presets.size(), 1); filament_volume_map->values.resize(exist_filament_presets.size(), static_cast(NozzleVolumeType::nvtStandard)); - } else { // overwrite; - bool has_placeholders = std::any_of(ams_infos.begin(), ams_infos.end(), [](const AmsInfo& a) { return a.is_placeholder; }); + } + else {//overwrite; + bool has_placeholders = std::any_of(ams_infos.begin(), ams_infos.end(), + [](const AmsInfo& a) { return a.is_placeholder; }); if (has_placeholders) { // Orca: merge — keep existing filaments for empty slots - auto exist_colors = filament_color->values; - auto exist_color_types = filament_color_type->values; - auto exist_presets = this->filament_presets; + auto exist_colors = filament_color->values; + auto exist_color_types = filament_color_type->values; + auto exist_presets = this->filament_presets; size_t tray_count = ams_filament_presets.size(); size_t total = std::max(tray_count, exist_presets.size()); @@ -3982,8 +3863,9 @@ unsigned int PresetBundle::sync_ams_list(std::vector{ams_filament_colors[i]}); + result_multi_colors.push_back( + i < ams_multi_color_filment.size() ? ams_multi_color_filment[i] + : std::vector{ams_filament_colors[i]}); } else if (i < exist_presets.size()) { // Empty tray or beyond tray count: keep existing filament result_colors.push_back(exist_colors[i]); @@ -3992,8 +3874,9 @@ unsigned int PresetBundle::sync_ams_list(std::vectorname : filaments.first_visible().name; result_colors.push_back("#CECECE"); @@ -4011,15 +3894,15 @@ unsigned int PresetBundle::sync_ams_list(std::vectorvalues.resize(total, static_cast(NozzleVolumeType::nvtStandard)); } else { // BBL: existing wholesale replace - filament_color->values = ams_filament_colors; + filament_color->values = ams_filament_colors; filament_color_type->values = ams_filament_color_types; - this->filament_presets = ams_filament_presets; + this->filament_presets = ams_filament_presets; filament_map->values.resize(ams_filament_colors.size(), 1); filament_volume_map->values.resize(ams_filament_colors.size(), static_cast(NozzleVolumeType::nvtStandard)); } - auto& print_config = this->prints.get_edited_preset().config; - auto support_filament_opt = print_config.option("support_filament"); + auto& print_config = this->prints.get_edited_preset().config; + auto support_filament_opt = print_config.option("support_filament"); auto support_interface_filament_opt = print_config.option("support_interface_filament"); if (support_filament_opt->value > filament_color_type->values.size()) support_filament_opt->value = 0; @@ -4031,20 +3914,13 @@ unsigned int PresetBundle::sync_ams_list(std::vectorfilament_presets.size(); - if (is_mixed_opt) - is_mixed_opt->values.resize(new_phys_count, (unsigned char) false); - if (mixed_comp_opt) - mixed_comp_opt->values.resize(new_phys_count); - if (mixed_ratios_opt) - mixed_ratios_opt->values.resize(new_phys_count); - if (mixed_gradient_opt) - mixed_gradient_opt->values.resize(new_phys_count, (unsigned char) false); - if (mixed_grad_range_opt) - mixed_grad_range_opt->values.resize(new_phys_count); - if (mixed_grad_curve_opt) - mixed_grad_curve_opt->values.resize(new_phys_count); - if (mixed_per_part_opt) - mixed_per_part_opt->values.resize(new_phys_count, (unsigned char) false); + if (is_mixed_opt) is_mixed_opt->values.resize(new_phys_count, (unsigned char)false); + if (mixed_comp_opt) mixed_comp_opt->values.resize(new_phys_count); + if (mixed_ratios_opt) mixed_ratios_opt->values.resize(new_phys_count); + if (mixed_gradient_opt) mixed_gradient_opt->values.resize(new_phys_count, (unsigned char)false); + if (mixed_grad_range_opt) mixed_grad_range_opt->values.resize(new_phys_count); + if (mixed_grad_curve_opt) mixed_grad_curve_opt->values.resize(new_phys_count); + if (mixed_per_part_opt) mixed_per_part_opt->values.resize(new_phys_count, (unsigned char)false); for (auto& snap : mixed_snapshots) { this->filament_presets.push_back(snap.preset); @@ -4052,20 +3928,13 @@ unsigned int PresetBundle::sync_ams_list(std::vectorvalues.push_back(snap.color_type); ams_multi_color_filment.push_back({snap.color}); filament_map->values.push_back(1); - if (is_mixed_opt) - is_mixed_opt->values.push_back((unsigned char) true); - if (mixed_comp_opt) - mixed_comp_opt->values.push_back(snap.mixed_components); - if (mixed_ratios_opt) - mixed_ratios_opt->values.push_back(snap.mixed_sublayer_ratios); - if (mixed_gradient_opt) - mixed_gradient_opt->values.push_back((unsigned char) snap.mixed_gradient); - if (mixed_grad_range_opt) - mixed_grad_range_opt->values.push_back(snap.mixed_gradient_range); - if (mixed_grad_curve_opt) - mixed_grad_curve_opt->values.push_back(snap.mixed_gradient_curve); - if (mixed_per_part_opt) - mixed_per_part_opt->values.push_back((unsigned char) snap.mixed_gradient_per_part); + if (is_mixed_opt) is_mixed_opt->values.push_back((unsigned char)true); + if (mixed_comp_opt) mixed_comp_opt->values.push_back(snap.mixed_components); + if (mixed_ratios_opt) mixed_ratios_opt->values.push_back(snap.mixed_sublayer_ratios); + if (mixed_gradient_opt) mixed_gradient_opt->values.push_back((unsigned char)snap.mixed_gradient); + if (mixed_grad_range_opt) mixed_grad_range_opt->values.push_back(snap.mixed_gradient_range); + if (mixed_grad_curve_opt) mixed_grad_curve_opt->values.push_back(snap.mixed_gradient_curve); + if (mixed_per_part_opt) mixed_per_part_opt->values.push_back((unsigned char)snap.mixed_gradient_per_part); } } @@ -4079,38 +3948,36 @@ unsigned int PresetBundle::sync_ams_list(std::vector exsit_multi_colors; - for (auto& fil_item : ams_multi_color_filment) { - if (fil_item.empty()) - break; + for (auto &fil_item : ams_multi_color_filment){ + if (fil_item.empty()) break; if (fil_item.size() == 1) exsit_multi_colors.push_back(fil_item[0]); else { std::string colors = ""; - for (auto& color : fil_item) { - colors += color + " "; + for (auto &color : fil_item){ + colors += color + " "; } colors.erase(colors.size() - 1); // remove last space exsit_multi_colors.push_back(colors); } } - ConfigOptionStrings* filament_multi_colour = project_config.option("filament_multi_colour"); + ConfigOptionStrings *filament_multi_colour = project_config.option("filament_multi_colour"); filament_multi_colour->resize(exsit_multi_colors.size()); filament_multi_colour->values = exsit_multi_colors; } -std::vector PresetBundle::get_used_tpu_filaments(const std::vector& used_filaments) +std::vector PresetBundle::get_used_tpu_filaments(const std::vector &used_filaments) { std::vector tpu_filaments; for (size_t i = 0; i < this->filament_presets.size(); ++i) { auto iter = std::find(used_filaments.begin(), used_filaments.end(), i + 1); - if (iter == used_filaments.end()) - continue; + if (iter == used_filaments.end()) continue; std::string filament_name = this->filament_presets[i]; for (int f_index = 0; f_index < this->filaments.size(); f_index++) { - PresetCollection* filament_presets = &this->filaments; - Preset* preset = &filament_presets->preset(f_index); - int size = this->filaments.size(); + PresetCollection *filament_presets = &this->filaments; + Preset *preset = &filament_presets->preset(f_index); + int size = this->filaments.size(); if (preset && filament_name.compare(preset->name) == 0) { std::string display_filament_type; std::string filament_type = preset->config.get_filament_type(display_filament_type); @@ -4131,20 +3998,18 @@ void PresetBundle::set_calibrate_printer(std::string name) } if (!name.empty()) calibrate_printer = printers.find_preset(name); - const Preset& printer_preset = calibrate_printer ? *calibrate_printer : printers.get_edited_preset(); + const Preset & printer_preset = calibrate_printer ? *calibrate_printer : printers.get_edited_preset(); const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(printer_preset); - DynamicPrintConfig config; + DynamicPrintConfig config; config.set_key_value("printer_preset", new ConfigOptionString(active_printer.preset.name)); - const ConfigOption* opt = active_printer.preset.config.option("nozzle_diameter"); - if (opt) - config.set_key_value("num_extruders", new ConfigOptionInt((int) static_cast(opt)->values.size())); + const ConfigOption *opt = active_printer.preset.config.option("nozzle_diameter"); + if (opt) config.set_key_value("num_extruders", new ConfigOptionInt((int) static_cast(opt)->values.size())); calibrate_filaments.clear(); for (size_t i = filaments.num_default_presets(); i < filaments.size(); ++i) { - const Preset& preset = filaments.m_presets[i]; + const Preset & preset = filaments.m_presets[i]; const PresetWithVendorProfile this_preset_with_vendor_profile = filaments.get_preset_with_vendor_profile(preset); - bool is_compatible = is_compatible_with_printer(this_preset_with_vendor_profile, active_printer, &config); - if (is_compatible) - calibrate_filaments.insert(&preset); + bool is_compatible = is_compatible_with_printer(this_preset_with_vendor_profile, active_printer, &config); + if (is_compatible) calibrate_filaments.insert(&preset); } } @@ -4165,31 +4030,25 @@ std::vector> PresetBundle::get_extruder_filament return filament_infos; } -std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string& printer_type, - std::string nozzle_diameter_str, - bool system_only) +std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only) { std::set printer_names; if ("0.0" == nozzle_diameter_str || nozzle_diameter_str.empty()) { nozzle_diameter_str = "0.4"; } - std::ostringstream stream; + std::ostringstream stream; for (auto printer_it = this->printers.begin(); printer_it != this->printers.end(); printer_it++) { - if (system_only && !printer_it->is_system) - continue; + if (system_only && !printer_it->is_system) continue; - ConfigOption* printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString* printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str) - continue; + ConfigOption * printer_model_opt = printer_it->config.option("printer_model"); + ConfigOptionString *printer_model_str = dynamic_cast(printer_model_opt); + if (!printer_model_str) continue; // use printer_model as printer type - if (printer_model_str->value != printer_type) - continue; + if (printer_model_str->value != printer_type) continue; - if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) - printer_names.insert(printer_it->name); + if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) printer_names.insert(printer_it->name); } assert(printer_names.size() == 1); @@ -4201,40 +4060,32 @@ std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle return printer_names; } -bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray(const std::string& printer_type, - std::string& nozzle_diameter_str, - std::string& setting_id, - std::string& tag_uid, - std::string& nozzle_temp_min, - std::string& nozzle_temp_max, - std::string& preset_setting_id) +bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + const std::string &printer_type, std::string& nozzle_diameter_str, std::string &setting_id, std::string &tag_uid, std::string &nozzle_temp_min, std::string &nozzle_temp_max, std::string& preset_setting_id) { bool is_equation = true; - std::map> filament_list = filaments.get_filament_presets(); - std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); + std::map> filament_list = filaments.get_filament_presets(); + std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); - for (const Preset* preset : filament_list.find(setting_id)->second) { - if (tag_uid == "0" || (tag_uid.size() == 16 && tag_uid.substr(12, 2) == "01")) - continue; - if (preset && !preset->is_user()) - continue; - ConfigOption* printer_opt = const_cast(preset)->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - bool compared = false; - for (const std::string& printer_str : printer_strs->values) { + for (const Preset *preset : filament_list.find(setting_id)->second) { + if (tag_uid == "0" || (tag_uid.size() == 16 && tag_uid.substr(12, 2) == "01")) continue; + if (preset && !preset->is_user()) continue; + ConfigOption * printer_opt = const_cast(preset)->config.option("compatible_printers"); + ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); + bool compared = false; + for (const std::string &printer_str : printer_strs->values) { if (printer_names.find(printer_str) != printer_names.end()) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "nozzle temp matching: preset name: " << preset->name - << " printer name: " << printer_str; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "nozzle temp matching: preset name: " << preset->name << " printer name: " << printer_str; // Compare only once if (!compared) { - compared = true; - bool min_temp_equation = false, max_temp_equation = false; - int min_nozzle_temp = std::stoi(nozzle_temp_min); - int max_nozzle_temp = std::stoi(nozzle_temp_max); - ConfigOption* opt_min = const_cast(preset)->config.option("nozzle_temperature_range_low"); + compared = true; + bool min_temp_equation = false, max_temp_equation = false; + int min_nozzle_temp = std::stoi(nozzle_temp_min); + int max_nozzle_temp = std::stoi(nozzle_temp_max); + ConfigOption *opt_min = const_cast(preset)->config.option("nozzle_temperature_range_low"); if (opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); + ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); min_nozzle_temp = opt_min_ints->get_at(0); if (std::to_string(min_nozzle_temp) == nozzle_temp_min) min_temp_equation = true; @@ -4243,9 +4094,9 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m nozzle_temp_min = std::to_string(min_nozzle_temp); } } - ConfigOption* opt_max = const_cast(preset)->config.option("nozzle_temperature_range_high"); + ConfigOption *opt_max = const_cast(preset)->config.option("nozzle_temperature_range_high"); if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); max_nozzle_temp = opt_max_ints->get_at(0); if (std::to_string(max_nozzle_temp) == nozzle_temp_max) max_temp_equation = true; @@ -4255,13 +4106,11 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m } } if (min_temp_equation && max_temp_equation) { - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: no changed"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: no changed"; } else { - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: has changed"; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << "Determine if the temperature has changed: has changed"; preset_setting_id = preset->setting_id; - is_equation = false; + is_equation = false; } } else { assert(false); @@ -4272,7 +4121,7 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m return is_equation; } -Preset* PresetBundle::get_similar_printer_preset(std::string printer_model, std::string printer_variant) +Preset *PresetBundle::get_similar_printer_preset(std::string printer_model, std::string printer_variant) { if (printer_model.empty()) printer_model = printers.get_selected_preset().config.opt_string("printer_model"); @@ -4280,7 +4129,7 @@ Preset* PresetBundle::get_similar_printer_preset(std::string printer_model, std: return nullptr; auto printer_variant_old = printers.get_selected_preset().config.opt_string("printer_variant"); std::map printer_presets; - for (auto& preset : printers.m_presets) { + for (auto &preset : printers.m_presets) { if (printer_variant.empty() && !preset.is_system) continue; if (preset.config.opt_string("printer_model") == printer_model) @@ -4288,8 +4137,7 @@ Preset* PresetBundle::get_similar_printer_preset(std::string printer_model, std: } if (printer_presets.empty()) return nullptr; - auto prefer_printer = printers.get_selected_preset().alias; //.name ORCA use alias instead "name" for calling system presets. otherwise - // nozzle combo will not change printer presets if they custom named + auto prefer_printer = printers.get_selected_preset().alias; //.name ORCA use alias instead "name" for calling system presets. otherwise nozzle combo will not change printer presets if they custom named if (!printer_variant.empty()) boost::replace_all(prefer_printer, printer_variant_old, printer_variant); @@ -4307,29 +4155,30 @@ Preset* PresetBundle::get_similar_printer_preset(std::string printer_model, std: return printer_presets.begin()->second; } -// BBS: check whether this is the only edited filament +//BBS: check whether this is the only edited filament bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) { unsigned n = this->filament_presets.size(); if (filament_index >= n) return false; - std::string name = this->filament_presets[filament_index]; + std::string name = this->filament_presets[filament_index]; Preset& edited_preset = this->filaments.get_edited_preset(); if (edited_preset.name != name) return false; unsigned index = 0; - while (index < n) { + while (index < n) + { if (index == filament_index) { - index++; + index ++; continue; } std::string filament_preset = this->filament_presets[index]; if (edited_preset.name == filament_preset) return false; else - index++; + index ++; } return true; } @@ -4337,8 +4186,7 @@ bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) void PresetBundle::reset_default_nozzle_volume_type() { Preset& current_printer = this->printers.get_edited_preset(); - this->project_config.option("nozzle_volume_type")->values = - current_printer.config.option("default_nozzle_volume_type")->values; + this->project_config.option("nozzle_volume_type")->values = current_printer.config.option("default_nozzle_volume_type")->values; } int PresetBundle::get_printer_extruder_count() const @@ -4367,7 +4215,9 @@ void PresetBundle::update_filament_count() const size_t num_extruders = static_cast(get_printer_extruder_count()); if (filament_presets.size() >= num_extruders) return; - filament_presets.resize(num_extruders, filament_presets.empty() ? filaments.first_visible().name : filament_presets.back()); + filament_presets.resize(num_extruders, filament_presets.empty() + ? filaments.first_visible().name + : filament_presets.back()); } bool PresetBundle::support_different_extruders() const @@ -4386,7 +4236,8 @@ std::vector PresetBundle::get_default_nozzle_volume_types_for_filaments(std result.resize(filament_count, static_cast(NozzleVolumeType::nvtStandard)); auto opt_nozzle_volume_type = dynamic_cast(this->project_config.option("nozzle_volume_type")); - for (int index = 0; index < filament_count; index++) { + for (int index = 0; index < filament_count; index++) + { if (opt_nozzle_volume_type && opt_nozzle_volume_type->values.size() > (f_maps[index] - 1)) result[index] = opt_nozzle_volume_type->values[f_maps[index] - 1]; } @@ -4394,43 +4245,40 @@ std::vector PresetBundle::get_default_nozzle_volume_types_for_filaments(std return result; } -DynamicPrintConfig PresetBundle::full_config(bool apply_extruder, - std::optional> filament_maps, - std::optional> filament_volume_maps) const +DynamicPrintConfig PresetBundle::full_config(bool apply_extruder, std::optional>filament_maps, std::optional> filament_volume_maps) const { return (this->printers.get_edited_preset().printer_technology() == ptFFF) ? - this->full_fff_config(apply_extruder, filament_maps, filament_volume_maps) : - this->full_sla_config(); + this->full_fff_config(apply_extruder, filament_maps, filament_volume_maps) : + this->full_sla_config(); } -DynamicPrintConfig PresetBundle::full_config_secure(std::optional> filament_maps) const +DynamicPrintConfig PresetBundle::full_config_secure(std::optional>filament_maps) const { DynamicPrintConfig config = this->full_fff_config(false, filament_maps); - // FIXME legacy, the keys should not be there after conversion to a Physical Printer profile. + //FIXME legacy, the keys should not be there after conversion to a Physical Printer profile. config.erase("print_host"); config.erase("print_host_webui"); config.erase("printhost_apikey"); - config.erase("printhost_cafile"); - config.erase("printhost_user"); - config.erase("printhost_password"); + config.erase("printhost_cafile"); + config.erase("printhost_user"); + config.erase("printhost_password"); config.erase("printhost_port"); return config; } std::vector>> PresetBundle::get_full_flush_matrix(bool with_multiplier) const { - auto full_config = this->full_config(); - int extruder_nums = full_config.option("nozzle_diameter")->values.size(); + auto full_config = this->full_config(); + int extruder_nums = full_config.option("nozzle_diameter")->values.size(); std::vector flush_volume_value = full_config.option("flush_volumes_matrix")->values; - int filament_nums = full_config.option("filament_type")->values.size(); + int filament_nums = full_config.option("filament_type")->values.size(); std::vector>> matrix; for (size_t extruder_id = 0; extruder_id < extruder_nums; ++extruder_id) { - std::vector flush_matrix(cast(get_flush_volumes_matrix(flush_volume_value, extruder_id, extruder_nums))); + std::vector flush_matrix(cast(get_flush_volumes_matrix(flush_volume_value, extruder_id, extruder_nums))); std::vector> wipe_volumes; for (unsigned int i = 0; i < filament_nums; ++i) - wipe_volumes.push_back( - std::vector(flush_matrix.begin() + i * filament_nums, flush_matrix.begin() + (i + 1) * filament_nums)); + wipe_volumes.push_back(std::vector(flush_matrix.begin() + i * filament_nums, flush_matrix.begin() + (i + 1) * filament_nums)); matrix.emplace_back(wipe_volumes); } @@ -4438,9 +4286,9 @@ std::vector>> PresetBundle::get_full_flush_matrix if (with_multiplier) { // Fast purge mode uses flush_multiplier_fast; the default prime_volume_mode==Default // (or the key absent) reads flush_multiplier, so this is inert. - auto* mode_opt = project_config.option>("prime_volume_mode"); - const bool use_fast = mode_opt && mode_opt->value == PrimeVolumeMode::pvmFast; - auto* mult_opt = project_config.option(use_fast ? "flush_multiplier_fast" : "flush_multiplier"); + auto* mode_opt = project_config.option>("prime_volume_mode"); + const bool use_fast = mode_opt && mode_opt->value == PrimeVolumeMode::pvmFast; + auto* mult_opt = project_config.option(use_fast ? "flush_multiplier_fast" : "flush_multiplier"); auto flush_multiplies = mult_opt ? mult_opt->values : project_config.option("flush_multiplier")->values; flush_multiplies.resize(extruder_nums, 1); for (size_t extruder_id = 0; extruder_id < extruder_nums; ++extruder_id) { @@ -4454,38 +4302,41 @@ std::vector>> PresetBundle::get_full_flush_matrix return matrix; } -const std::set ignore_settings_list = {"inherits", "print_settings_id", "filament_settings_id", "printer_settings_id"}; +const std::set ignore_settings_list ={ + "inherits", + "print_settings_id", "filament_settings_id", "printer_settings_id" +}; -DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, - std::optional> filament_maps_new, - std::optional> filament_volume_maps_new) const +DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optional> filament_maps_new, std::optional> filament_volume_maps_new) const { DynamicPrintConfig out; out.apply(FullPrintConfig::defaults()); out.apply(this->prints.get_edited_preset().config); // Add the default filament preset to have the "filament_preset_id" defined. - out.apply(this->filaments.default_preset().config); - out.apply(this->printers.get_edited_preset().config); + out.apply(this->filaments.default_preset().config); + out.apply(this->printers.get_edited_preset().config); out.apply(this->project_config); // BBS - size_t num_filaments = this->filament_presets.size(); + size_t num_filaments = this->filament_presets.size(); std::vector filament_maps = out.option("filament_map")->values; - std::vector filament_volume_maps(num_filaments, (int) nvtStandard); + std::vector filament_volume_maps(num_filaments, (int)nvtStandard); ConfigOptionInts* filament_volume_map_opt = out.option("filament_volume_map"); if (filament_maps_new.has_value()) filament_maps = *filament_maps_new; if (filament_volume_maps_new.has_value()) { - filament_volume_maps = *filament_volume_maps_new; + filament_volume_maps = *filament_volume_maps_new; out.option("filament_volume_map", true)->values = filament_volume_maps; - } else if (filament_volume_map_opt && filament_volume_map_opt->values.size() == num_filaments) + } + else if (filament_volume_map_opt && filament_volume_map_opt->values.size() == num_filaments) filament_volume_maps = filament_volume_map_opt->values; - // in some middle state, they may be different + //in some middle state, they may be different if (filament_maps.size() != num_filaments) { filament_maps.resize(num_filaments, 1); - } else { + } + else { assert(filament_maps.size() == num_filaments); } if (filament_volume_maps.size() != num_filaments) { @@ -4499,35 +4350,32 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::vector inherits; std::vector filament_ids; std::vector print_compatible_printers; - // BBS: add logic for settings check between different system presets + //BBS: add logic for settings check between different system presets std::vector different_settings; std::string different_print_settings, different_printer_settings; compatible_printers_condition.emplace_back(this->prints.get_edited_preset().compatible_printers_condition()); - const ConfigOptionStrings* compatible_printers = - (const_cast(this))->prints.get_edited_preset().config.option("compatible_printers", false); + const ConfigOptionStrings* compatible_printers = (const_cast(this))->prints.get_edited_preset().config.option("compatible_printers", false); if (compatible_printers) print_compatible_printers = compatible_printers->values; - // BBS: add logic for settings check between different system presets + //BBS: add logic for settings check between different system presets std::string print_inherits = this->prints.get_edited_preset().inherits(); - inherits.emplace_back(print_inherits); - const Preset* print_parent_preset = this->prints.get_selected_preset_parent(); + inherits .emplace_back(print_inherits); + const Preset* print_parent_preset = this->prints.get_selected_preset_parent(); if (print_parent_preset) { - std::vector dirty_options = this->prints.dirty_options_without_option_list(&(this->prints.get_edited_preset()), - print_parent_preset, ignore_settings_list, - false); + std::vector dirty_options = this->prints.dirty_options_without_option_list(&(this->prints.get_edited_preset()), print_parent_preset, ignore_settings_list, false); if (!dirty_options.empty()) { different_print_settings = Slic3r::escape_strings_cstyle(dirty_options); } } different_settings.emplace_back(different_print_settings); - // BBS: update printer config related with variants + //BBS: update printer config related with variants std::vector> nozzle_volume_types; int extruder_count = 1, extruder_volume_type_count = 1; bool different_extruder = false; if (apply_extruder) { - different_extruder = out.support_different_extruders(extruder_count); + different_extruder = out.support_different_extruders(extruder_count); extruder_volume_type_count = out.get_extruder_nozzle_volume_count(extruder_count, nozzle_volume_types); if ((extruder_count > 1) || different_extruder) { @@ -4539,40 +4387,33 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, // per variant (e.g. X2D machine_max_speed_e/machine_max_acceleration_e). The slicing // path composes variant_2 first and is unaffected; changing the order here would alter // long-standing composed values, so any fix must re-baseline them. - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); - // update print config related with variants - out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - print_options_with_variant, "print_extruder_id", "print_extruder_variant"); + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, printer_options_with_variant_1, "printer_extruder_id", "printer_extruder_variant"); + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, printer_options_with_variant_2, "printer_extruder_id", "printer_extruder_variant", 2); + //update print config related with variants + out.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, print_options_with_variant, "print_extruder_id", "print_extruder_variant"); } } if (num_filaments <= 1) { - // BBS: update filament config related with variants + //BBS: update filament config related with variants DynamicPrintConfig filament_config = this->filaments.get_edited_preset().config; if (apply_extruder && ((extruder_count > 1) || different_extruder)) - filament_config.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, - filament_options_with_variant, "", "filament_extruder_variant", 1, - filament_maps[0], (NozzleVolumeType) filament_volume_maps[0]); + filament_config.update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, filament_options_with_variant, "", "filament_extruder_variant", 1, filament_maps[0], (NozzleVolumeType)filament_volume_maps[0]); out.apply(filament_config); compatible_printers_condition.emplace_back(this->filaments.get_edited_preset().compatible_printers_condition()); - compatible_prints_condition.emplace_back(this->filaments.get_edited_preset().compatible_prints_condition()); - // BBS: add logic for settings check between different system presets - // std::string filament_inherits = this->filaments.get_edited_preset().inherits(); + compatible_prints_condition .emplace_back(this->filaments.get_edited_preset().compatible_prints_condition()); + //BBS: add logic for settings check between different system presets + //std::string filament_inherits = this->filaments.get_edited_preset().inherits(); std::string current_preset_name = this->filament_presets[0]; - const Preset* preset = this->filaments.find_preset(current_preset_name, true); - std::string filament_inherits = preset->inherits(); - inherits.emplace_back(filament_inherits); + const Preset* preset = this->filaments.find_preset(current_preset_name, true); + std::string filament_inherits = preset->inherits(); + inherits .emplace_back(filament_inherits); filament_ids.emplace_back(this->filaments.get_edited_preset().filament_id); std::string different_filament_settings; - const Preset* filament_parent_preset = this->filaments.get_selected_preset_parent(); + const Preset* filament_parent_preset = this->filaments.get_selected_preset_parent(); if (filament_parent_preset) { - std::vector dirty_options = - this->filaments.dirty_options_without_option_list(&(this->filaments.get_edited_preset()), filament_parent_preset, - ignore_settings_list, false); + std::vector dirty_options = this->filaments.dirty_options_without_option_list(&(this->filaments.get_edited_preset()), filament_parent_preset, ignore_settings_list, false); if (!dirty_options.empty()) { different_filament_settings = Slic3r::escape_strings_cstyle(dirty_options); } @@ -4581,7 +4422,7 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, different_settings.emplace_back(different_filament_settings); std::vector& filament_self_indice = out.option("filament_self_index", true)->values; - int index_size = out.option("filament_extruder_variant")->size(); + int index_size = out.option("filament_extruder_variant")->size(); filament_self_indice.resize(index_size, 1); } else { // Retrieve filament presets and build a single config object for them. @@ -4600,16 +4441,16 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, filament_configs.emplace_back(&(preset->config)); } for (int index = 0; index < num_filaments; index++) { - const DynamicPrintConfig* cfg = filament_configs[index]; - const Preset* preset = filament_presets[index]; + const DynamicPrintConfig *cfg = filament_configs[index]; + const Preset *preset = filament_presets[index]; // The compatible_prints/printers_condition() returns a reference to configuration key, which may not yet exist. - DynamicPrintConfig& cfg_rw = *const_cast(cfg); + DynamicPrintConfig &cfg_rw = *const_cast(cfg); compatible_printers_condition.emplace_back(Preset::compatible_printers_condition(cfg_rw)); - compatible_prints_condition.emplace_back(Preset::compatible_prints_condition(cfg_rw)); + compatible_prints_condition .emplace_back(Preset::compatible_prints_condition(cfg_rw)); - // BBS: add logic for settings check between different system presets + //BBS: add logic for settings check between different system presets std::string filament_inherits = Preset::inherits(cfg_rw); - inherits.emplace_back(filament_inherits); + inherits .emplace_back(filament_inherits); filament_ids.emplace_back(preset->filament_id); std::string different_filament_settings; @@ -4617,13 +4458,15 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, if (preset->is_system || preset->is_default) { bool is_selected = this->filaments.get_selected_preset_name() == preset->name; if (is_selected) { - // use the real preset + //use the real preset filament_parent_preset = const_cast(this)->filaments.find_preset(preset->name, false, true); - } else { + } + else { filament_parent_preset = preset; } - } else if (!filament_inherits.empty()) - filament_parent_preset = const_cast(this)->filaments.find_preset(filament_inherits, false, true); + } + else if (!filament_inherits.empty()) + filament_parent_preset = const_cast(this)->filaments.find_preset(filament_inherits, false, true); if (filament_parent_preset) { std::vector dirty_options = cfg_rw.diff(filament_parent_preset->config); @@ -4632,7 +4475,8 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, while (iter != dirty_options.end()) { if (ignore_settings_list.find(*iter) != ignore_settings_list.end()) { iter = dirty_options.erase(iter); - } else { + } + else { ++iter; } } @@ -4648,22 +4492,19 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, for (size_t i = 0; i < num_filaments; ++i) { filament_temp_configs[i] = *(filament_configs[i]); if (apply_extruder && ((extruder_count > 1) || different_extruder)) - filament_temp_configs[i].update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, - nozzle_volume_types, filament_options_with_variant, "", - "filament_extruder_variant", 1, filament_maps[i], - (NozzleVolumeType) filament_volume_maps[i]); + filament_temp_configs[i].update_values_to_printer_extruders(out, extruder_count, extruder_volume_type_count, nozzle_volume_types, filament_options_with_variant, "", "filament_extruder_variant", 1, filament_maps[i], (NozzleVolumeType)filament_volume_maps[i]); } // loop through options and apply them to the resulting config. std::vector filament_variant_count(num_filaments, 1); - for (const t_config_option_key& key : this->filaments.default_preset().config.keys()) { - if (key == "compatible_prints" || key == "compatible_printers") - continue; + for (const t_config_option_key &key : this->filaments.default_preset().config.keys()) { + if (key == "compatible_prints" || key == "compatible_printers") + continue; // Get a destination option. - ConfigOption* opt_dst = out.option(key, false); + ConfigOption *opt_dst = out.option(key, false); if (opt_dst->is_scalar()) { // Get an option, do not create if it does not exist. - const ConfigOption* opt_src = filament_temp_configs.front().option(key); + const ConfigOption *opt_src = filament_temp_configs.front().option(key); if (opt_src != nullptr) opt_dst->set(opt_src); } else { @@ -4676,10 +4517,10 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, for (size_t i = 0; i < filament_opts.size(); ++i) filament_opts[i] = filament_temp_configs[i].option(key); opt_vec_dst->set(filament_opts); - } else { + } + else { for (size_t i = 0; i < num_filaments; ++i) { - const ConfigOptionVectorBase* filament_option = static_cast( - filament_temp_configs[i].option(key)); + const ConfigOptionVectorBase* filament_option = static_cast(filament_temp_configs[i].option(key)); if (i == 0) opt_vec_dst->set(filament_option); else @@ -4694,9 +4535,9 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, } if (!apply_extruder) { - // append filament_self_index + //append filament_self_index std::vector& filament_self_indice = out.option("filament_self_index", true)->values; - int index_size = out.option("filament_extruder_variant")->size(); + int index_size = out.option("filament_extruder_variant")->size(); filament_self_indice.resize(index_size, 1); int k = 0; for (size_t i = 0; i < num_filaments; i++) { @@ -4707,15 +4548,13 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, } } - // BBS: add logic for settings check between different system presets + //BBS: add logic for settings check between different system presets std::string printer_inherits = this->printers.get_edited_preset().inherits(); // Don't store the "compatible_printers_condition" for the printer profile, there is none. - inherits.emplace_back(printer_inherits); - const Preset* printer_parent_preset = this->printers.get_selected_preset_parent(); + inherits .emplace_back(printer_inherits); + const Preset* printer_parent_preset = this->printers.get_selected_preset_parent(); if (printer_parent_preset) { - std::vector dirty_options = this->printers.dirty_options_without_option_list(&(this->printers.get_edited_preset()), - printer_parent_preset, - ignore_settings_list, false); + std::vector dirty_options = this->printers.dirty_options_without_option_list(&(this->printers.get_edited_preset()), printer_parent_preset, ignore_settings_list, false); if (!dirty_options.empty()) { different_printer_settings = Slic3r::escape_strings_cstyle(dirty_options); } @@ -4728,38 +4567,40 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, out.erase("compatible_printers"); out.erase("compatible_printers_condition"); out.erase("inherits"); - // BBS: add logic for settings check between different system presets + //BBS: add logic for settings check between different system presets out.erase("different_settings_to_system"); static const char* keys[] = {"support_filament", "support_interface_filament", "wipe_tower_filament"}; - for (size_t i = 0; i < sizeof(keys) / sizeof(keys[0]); ++i) { + for (size_t i = 0; i < sizeof(keys) / sizeof(keys[0]); ++ i) { std::string key = std::string(keys[i]); - auto* opt = dynamic_cast(out.option(key, false)); + auto *opt = dynamic_cast(out.option(key, false)); assert(opt != nullptr); opt->value = boost::algorithm::clamp(opt->value, 0, int(num_filaments)); } - static const char* keys_with_default[] = {"outer_wall_filament_id", "inner_wall_filament_id", "sparse_infill_filament_id", - "internal_solid_filament_id", "top_surface_filament_id", "bottom_surface_filament_id"}; - for (size_t i = 0; i < sizeof(keys_with_default) / sizeof(keys_with_default[0]); ++i) { + static const char* keys_with_default[] = { + "outer_wall_filament_id", "inner_wall_filament_id", "sparse_infill_filament_id", + "internal_solid_filament_id", "top_surface_filament_id", "bottom_surface_filament_id" + }; + for (size_t i = 0; i < sizeof(keys_with_default) / sizeof(keys_with_default[0]); ++ i) { std::string key = std::string(keys_with_default[i]); - auto* opt = dynamic_cast(out.option(key, false)); + auto *opt = dynamic_cast(out.option(key, false)); assert(opt != nullptr); - if (opt->value < 0 || opt->value > int(num_filaments)) + if(opt->value < 0 || opt->value > int(num_filaments)) opt->value = 0; } - out.option("print_settings_id", true)->value = this->prints.get_selected_preset_name(); + out.option("print_settings_id", true)->value = this->prints.get_selected_preset_name(); out.option("filament_settings_id", true)->values = this->filament_presets; - out.option("printer_settings_id", true)->value = this->printers.get_selected_preset_name(); - out.option("filament_ids", true)->values = filament_ids; - out.option("filament_map", true)->values = filament_maps; + out.option("printer_settings_id", true)->value = this->printers.get_selected_preset_name(); + out.option("filament_ids", true)->values = filament_ids; + out.option("filament_map", true)->values = filament_maps; // Serialize the collected "compatible_printers_condition" and "inherits" fields. // There will be 1 + num_exturders fields for "inherits" and 2 + num_extruders for "compatible_printers_condition" stored. // The vector will not be stored if all fields are empty strings. - auto add_if_some_non_empty = [&out](std::vector&& values, const std::string& key) { + auto add_if_some_non_empty = [&out](std::vector &&values, const std::string &key) { bool nonempty = false; - for (const std::string& v : values) - if (!v.empty()) { + for (const std::string &v : values) + if (! v.empty()) { nonempty = true; break; } @@ -4767,14 +4608,14 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, out.set_key_value(key, new ConfigOptionStrings(std::move(values))); }; add_if_some_non_empty(std::move(compatible_printers_condition), "compatible_machine_expression_group"); - add_if_some_non_empty(std::move(compatible_prints_condition), "compatible_process_expression_group"); - add_if_some_non_empty(std::move(inherits), "inherits_group"); - // BBS: add logic for settings check between different system presets - add_if_some_non_empty(std::move(different_settings), "different_settings_to_system"); - add_if_some_non_empty(std::move(print_compatible_printers), "print_compatible_printers"); - out.option("extruder_ams_count", true)->values = save_extruder_ams_count_to_string(this->extruder_ams_counts); + add_if_some_non_empty(std::move(compatible_prints_condition), "compatible_process_expression_group"); + add_if_some_non_empty(std::move(inherits), "inherits_group"); + //BBS: add logic for settings check between different system presets + add_if_some_non_empty(std::move(different_settings), "different_settings_to_system"); + add_if_some_non_empty(std::move(print_compatible_printers), "print_compatible_printers"); + out.option("extruder_ams_count", true)->values = save_extruder_ams_count_to_string(this->extruder_ams_counts); - out.option("printer_technology", true)->value = ptFFF; + out.option("printer_technology", true)->value = ptFFF; return out; } @@ -4786,36 +4627,35 @@ DynamicPrintConfig PresetBundle::full_sla_config() const out.apply(this->sla_materials.get_edited_preset().config); out.apply(this->printers.get_edited_preset().config); // There are no project configuration values as of now, the project_config is reserved for FFF printers. - // out.apply(this->project_config); +// out.apply(this->project_config); - // Collect the "compatible_printers_condition" and "inherits" values over all presets (sla_prints, sla_materials, printers) into a - // single vector. + // Collect the "compatible_printers_condition" and "inherits" values over all presets (sla_prints, sla_materials, printers) into a single vector. std::vector compatible_printers_condition; - std::vector compatible_prints_condition; + std::vector compatible_prints_condition; std::vector inherits; compatible_printers_condition.emplace_back(this->sla_prints.get_edited_preset().compatible_printers_condition()); - inherits.emplace_back(this->sla_prints.get_edited_preset().inherits()); + inherits .emplace_back(this->sla_prints.get_edited_preset().inherits()); compatible_printers_condition.emplace_back(this->sla_materials.get_edited_preset().compatible_printers_condition()); - compatible_prints_condition.emplace_back(this->sla_materials.get_edited_preset().compatible_prints_condition()); - inherits.emplace_back(this->sla_materials.get_edited_preset().inherits()); - inherits.emplace_back(this->printers.get_edited_preset().inherits()); + compatible_prints_condition .emplace_back(this->sla_materials.get_edited_preset().compatible_prints_condition()); + inherits .emplace_back(this->sla_materials.get_edited_preset().inherits()); + inherits .emplace_back(this->printers.get_edited_preset().inherits()); // These two value types clash between the print and filament profiles. They should be renamed. out.erase("compatible_printers"); out.erase("compatible_printers_condition"); out.erase("inherits"); - out.option("sla_print_settings_id", true)->value = this->sla_prints.get_selected_preset_name(); - out.option("sla_material_settings_id", true)->value = this->sla_materials.get_selected_preset_name(); - out.option("printer_settings_id", true)->value = this->printers.get_selected_preset_name(); + out.option("sla_print_settings_id", true)->value = this->sla_prints.get_selected_preset_name(); + out.option("sla_material_settings_id", true)->value = this->sla_materials.get_selected_preset_name(); + out.option("printer_settings_id", true)->value = this->printers.get_selected_preset_name(); // Serialize the collected "compatible_printers_condition" and "inherits" fields. // There will be 1 + num_exturders fields for "inherits" and 2 + num_extruders for "compatible_printers_condition" stored. // The vector will not be stored if all fields are empty strings. - auto add_if_some_non_empty = [&out](std::vector&& values, const std::string& key) { + auto add_if_some_non_empty = [&out](std::vector &&values, const std::string &key) { bool nonempty = false; - for (const std::string& v : values) - if (!v.empty()) { + for (const std::string &v : values) + if (! v.empty()) { nonempty = true; break; } @@ -4823,49 +4663,48 @@ DynamicPrintConfig PresetBundle::full_sla_config() const out.set_key_value(key, new ConfigOptionStrings(std::move(values))); }; add_if_some_non_empty(std::move(compatible_printers_condition), "compatible_machine_expression_group"); - add_if_some_non_empty(std::move(compatible_prints_condition), "compatible_process_expression_group"); - add_if_some_non_empty(std::move(inherits), "inherits_group"); + add_if_some_non_empty(std::move(compatible_prints_condition), "compatible_process_expression_group"); + add_if_some_non_empty(std::move(inherits), "inherits_group"); - out.option("printer_technology", true)->value = ptSLA; - return out; + out.option("printer_technology", true)->value = ptSLA; + return out; } // Load an external config file containing the print, filament and printer presets. // Instead of a config file, a G-code may be loaded containing the full set of parameters. // In the future the configuration will likely be read from an AMF file as well. // If the file is loaded successfully, its print / filament / printer profiles will be activated. -ConfigSubstitutions PresetBundle::load_config_file(const std::string& path, ForwardCompatibilitySubstitutionRule compatibility_rule) +ConfigSubstitutions PresetBundle::load_config_file(const std::string &path, ForwardCompatibilitySubstitutionRule compatibility_rule) { - if (is_gcode_file(path)) { - DynamicPrintConfig config; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(" enter, gcodefile %1%, compatibility_rule %2%") % path % compatibility_rule; - config.apply(FullPrintConfig::defaults()); + if (is_gcode_file(path)) { + DynamicPrintConfig config; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, gcodefile %1%, compatibility_rule %2%")%path %compatibility_rule; + config.apply(FullPrintConfig::defaults()); ConfigSubstitutions config_substitutions = config.load_from_gcode_file(path, compatibility_rule); Preset::normalize(config); - load_config_file_config(path, true, std::move(config)); - return config_substitutions; - } + load_config_file_config(path, true, std::move(config)); + return config_substitutions; + } - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" can not load config file %1% not from gcode") % path; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" can not load config file %1% not from gcode")%path ; throw Slic3r::RuntimeError(std::string("Unknown configuration file: ") + path); - + return ConfigSubstitutions{}; } -// some filament presets split from one to sperate ones -// following map recording these filament presets -// for example: previously ''Bambu PLA Basic @BBL H2D 0.6 nozzle' was saved in ''Bambu PLA Basic @BBL H2D' with 0.4 -static std::map> filament_preset_convert = - {{"Bambu Lab H2D 0.6 nozzle", - {{"Bambu PLA Basic @BBL H2D", "Bambu PLA Basic @BBL H2D 0.6 nozzle"}, - {"Bambu PLA Matte @BBL H2D", "Bambu PLA Matte @BBL H2D 0.6 nozzle"}, - {"Bambu ABS @BBL H2D", "Bambu ABS @BBL H2D 0.6 nozzle"}}}, - {"Bambu Lab H2D 0.8 nozzle", - {{"Bambu PETG HF @BBL H2D 0.6 nozzle", "Bambu PETG HF @BBL H2D 0.8 nozzle"}, - {"Bambu ASA @BBL H2D 0.6 nozzle", "Bambu ASA @BBL H2D 0.8 nozzle"}}}}; + +//some filament presets split from one to sperate ones +//following map recording these filament presets +//for example: previously ''Bambu PLA Basic @BBL H2D 0.6 nozzle' was saved in ''Bambu PLA Basic @BBL H2D' with 0.4 +static std::map> filament_preset_convert = { +{"Bambu Lab H2D 0.6 nozzle", {{"Bambu PLA Basic @BBL H2D", "Bambu PLA Basic @BBL H2D 0.6 nozzle"}, + {"Bambu PLA Matte @BBL H2D", "Bambu PLA Matte @BBL H2D 0.6 nozzle"}, + {"Bambu ABS @BBL H2D", "Bambu ABS @BBL H2D 0.6 nozzle"}}}, +{"Bambu Lab H2D 0.8 nozzle", {{"Bambu PETG HF @BBL H2D 0.6 nozzle", "Bambu PETG HF @BBL H2D 0.8 nozzle"}, + {"Bambu ASA @BBL H2D 0.6 nozzle", "Bambu ASA @BBL H2D 0.8 nozzle"}}} +}; // Relocate the per-slot cells of one mixed-filament project vector inside the imported // config, applying every authored-slot -> destination move at once. Each move reads its @@ -4910,26 +4749,24 @@ static void apply_mixed_config_relocations(DynamicPrintConfig& } } -// convert the old filament preset to new one after split + +//convert the old filament preset to new one after split static void convert_filament_preset_name(std::string& machine_name, std::string& filament_name) { auto machine_iter = filament_preset_convert.find(machine_name); - if (machine_iter != filament_preset_convert.end()) { + if (machine_iter != filament_preset_convert.end()) + { std::map& filament_maps = machine_iter->second; - auto filament_iter = filament_maps.find(filament_name); - if (filament_iter != filament_maps.end()) { + auto filament_iter = filament_maps.find(filament_name); + if (filament_iter != filament_maps.end()) + { filament_name = filament_iter->second; } } } // Load a config file from a boost property_tree. This is a private method called from load_config_file. // is_external == false on if called from ConfigWizard -void PresetBundle::load_config_file_config(const std::string& name_or_path, - bool is_external, - DynamicPrintConfig&& config, - Semver file_version, - bool selected, - PublishedConfig* published_config) +void PresetBundle::load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version, bool selected, PublishedConfig *published_config) { PrinterTechnology printer_technology = Preset::printer_technology(config); @@ -4937,8 +4774,8 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // the author-selected published keys onto the edited presets. const bool is_published = published_config != nullptr && published_config->published; - auto clear_compatible_printers = [](DynamicPrintConfig& config) { - ConfigOption* opt_compatible = config.optptr("compatible_printers"); + auto clear_compatible_printers = [](DynamicPrintConfig& config){ + ConfigOption *opt_compatible = config.optptr("compatible_printers"); if (opt_compatible != nullptr) { assert(opt_compatible->type() == coStrings); if (opt_compatible->type() == coStrings) @@ -4960,49 +4797,44 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, #else // BBS: use filament_colour insteadof filament_settings_id, filament_settings_id sometimes is not generated ConfigOptionStrings* filament_colour_option = config.option("filament_colour"); - size_t num_filaments = filament_colour_option ? filament_colour_option->size() : 0; + size_t num_filaments = filament_colour_option?filament_colour_option->size():0; if (num_filaments == 0) throw Slic3r::RuntimeError(std::string("Invalid configuration file: ") + name_or_path); #endif - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(": , name_or_path %1%, is_external %2%, num_filaments %3%") % name_or_path % is_external % - num_filaments; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": , name_or_path %1%, is_external %2%, num_filaments %3%") % name_or_path % is_external % num_filaments; // Make a copy of the "compatible_machine_expression_group" and "inherits_group" vectors, which // accumulate values over all presets (print, filaments, printers). // These values will be distributed into their particular presets when loading. - std::vector compatible_printers_condition_values = std::move( - config.option("compatible_machine_expression_group", true)->values); - std::vector compatible_prints_condition_values = std::move( - config.option("compatible_process_expression_group", true)->values); - std::vector inherits_values = std::move(config.option("inherits_group", true)->values); - std::vector filament_ids = std::move(config.option("filament_ids", true)->values); - std::vector print_compatible_printers = std::move( - config.option("print_compatible_printers", true)->values); - // BBS: add different settings check logic - bool has_different_settings_to_system = config.option("different_settings_to_system") ? true : false; - std::vector different_values = std::move(config.option("different_settings_to_system", true)->values); - std::string& compatible_printers_condition = Preset::compatible_printers_condition(config); - std::string& compatible_prints_condition = Preset::compatible_prints_condition(config); - std::string& inherits = Preset::inherits(config); + std::vector compatible_printers_condition_values = std::move(config.option("compatible_machine_expression_group", true)->values); + std::vector compatible_prints_condition_values = std::move(config.option("compatible_process_expression_group", true)->values); + std::vector inherits_values = std::move(config.option("inherits_group", true)->values); + std::vector filament_ids = std::move(config.option("filament_ids", true)->values); + std::vector print_compatible_printers = std::move(config.option("print_compatible_printers", true)->values); + //BBS: add different settings check logic + bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; + std::vector different_values = std::move(config.option("different_settings_to_system", true)->values); + std::string &compatible_printers_condition = Preset::compatible_printers_condition(config); + std::string &compatible_prints_condition = Preset::compatible_prints_condition(config); + std::string &inherits = Preset::inherits(config); compatible_printers_condition_values.resize(num_filaments + 2, std::string()); compatible_prints_condition_values.resize(num_filaments, std::string()); inherits_values.resize(num_filaments + 2, std::string()); different_values.resize(num_filaments + 2, std::string()); filament_ids.resize(num_filaments, std::string()); // The "default_filament_profile" will be later extracted into the printer profile. - switch (printer_technology) { - case ptFFF: - config.option("default_print_profile", true); + switch (printer_technology) { + case ptFFF: + config.option("default_print_profile", true); config.option("default_filament_profile", true); - break; - case ptSLA: - config.option("default_sla_print_profile", true); - config.option("default_sla_material_profile", true); - break; + break; + case ptSLA: + config.option("default_sla_print_profile", true); + config.option("default_sla_material_profile", true); + break; default: break; - } + } bool process_multi_extruder = false; std::vector filament_variant_index; @@ -5022,15 +4854,13 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, filament_extruder_variant.resize(num_filaments, "Direct Drive Standard"); } if (config.option("extruder_variant_list")) { - // 3mf support multiple extruder logic - size_t extruder_count = config.option("nozzle_diameter")->values.size(); + //3mf support multiple extruder logic + size_t extruder_count = config.option("nozzle_diameter")->values.size(); extruder_variant_count = config.option("filament_extruder_variant", true)->size(); - if ((extruder_variant_count != filament_self_indice.size()) || (extruder_variant_count < num_filaments)) { + if ((extruder_variant_count != filament_self_indice.size()) + || (extruder_variant_count < num_filaments)) { assert(false); - BOOST_LOG_TRIVIAL(error) - << __FUNCTION__ - << boost::format(": invalid config file %1%, can not find suitable filament_extruder_variant or filament_self_index") % - name_or_path; + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": invalid config file %1%, can not find suitable filament_extruder_variant or filament_self_index") % name_or_path; throw Slic3r::RuntimeError(std::string("Invalid configuration file: ") + name_or_path); } if (num_filaments != extruder_variant_count) { @@ -5048,12 +4878,13 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, } } } - // no need to parse extruder_ams_count + //no need to parse extruder_ams_count std::vector extruder_ams_count = std::move(config.option("extruder_ams_count", true)->values); config.erase("extruder_ams_count"); if (this->extruder_ams_counts.empty()) this->extruder_ams_counts = get_extruder_ams_count(extruder_ams_count); + // 1) Create a name from the file name. // Keep the suffix (.ini, .gcode, .amf, .3mf etc) to differentiate it from the normal profiles. std::string name = is_external ? boost::filesystem::path(name_or_path).filename().string() : name_or_path; @@ -5061,62 +4892,63 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // 2) If the loading succeeded, split and load the config into print / filament / printer settings. // First load the print and printer presets. - auto load_preset = [&config, &inherits, &inherits_values, &compatible_printers_condition, &compatible_printers_condition_values, - &compatible_prints_condition, &compatible_prints_condition_values, is_external, &name, &name_or_path, file_version, - selected](PresetCollection& presets, size_t idx, const std::string& key, - const std::set& different_keys, std::string filament_id) { - // Split the "compatible_printers_condition" and "inherits" values one by one from a single vector to the print & printer profiles. - inherits = inherits_values[idx]; - compatible_printers_condition = compatible_printers_condition_values[idx]; + auto load_preset = + [&config, &inherits, &inherits_values, + &compatible_printers_condition, &compatible_printers_condition_values, + &compatible_prints_condition, &compatible_prints_condition_values, + is_external, &name, &name_or_path, file_version, selected] + (PresetCollection &presets, size_t idx, const std::string &key, const std::set &different_keys, std::string filament_id) { + // Split the "compatible_printers_condition" and "inherits" values one by one from a single vector to the print & printer profiles. + inherits = inherits_values[idx]; + compatible_printers_condition = compatible_printers_condition_values[idx]; if (idx > 0 && idx - 1 < compatible_prints_condition_values.size()) compatible_prints_condition = compatible_prints_condition_values[idx - 1]; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(": , name %1%, is_external %2%, inherits %3%") % name % is_external % inherits; - if (is_external) - presets.load_external_preset(name_or_path, name, config.opt_string(key, true), config, different_keys, - PresetCollection::LoadAndSelect::Always, file_version, filament_id); - else + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": , name %1%, is_external %2%, inherits %3%")%name %is_external %inherits; + if (is_external) + presets.load_external_preset(name_or_path, name, config.opt_string(key, true), config, different_keys, PresetCollection::LoadAndSelect::Always, file_version, filament_id); + else presets.load_preset(presets.path_from_name(name, inherits.empty()), name, config, selected, file_version).save(nullptr); - }; + }; switch (Preset::printer_technology(config)) { - case ptFFF: { + case ptFFF: + { // A "published" 3MF project keeps the user's currently-selected presets, so the // print / printer / filament presets are NOT loaded from the file. Only the // project config values and the published keys are applied below. if (!is_published) { - // BBS: add different settings logic + //BBS: add different settings logic BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id"); std::vector print_different_keys_vector; std::string print_different_settings = different_values[0]; Slic3r::unescape_strings_cstyle(print_different_settings, print_different_keys_vector); std::set print_different_keys_set(print_different_keys_vector.begin(), print_different_keys_vector.end()); - // if (!has_different_settings_to_system) { - // print_different_keys_set.clear(); - // } - // else - print_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + //if (!has_different_settings_to_system) { + // print_different_keys_set.clear(); + //} + //else + print_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); if (!print_compatible_printers.empty()) { ConfigOptionStrings* compatible_printers = config.option("compatible_printers", true); - compatible_printers->values = print_compatible_printers; + compatible_printers->values = print_compatible_printers; } load_preset(this->prints, 0, "print_settings_id", print_different_keys_set, std::string()); - // clear compatible printers + //clear compatible printers clear_compatible_printers(config); std::vector printer_different_keys_vector; std::string printer_different_settings = different_values[num_filaments + 1]; Slic3r::unescape_strings_cstyle(printer_different_settings, printer_different_keys_vector); std::set printer_different_keys_set(printer_different_keys_vector.begin(), printer_different_keys_vector.end()); - // if (!has_different_settings_to_system) { - // printer_different_keys_set.clear(); - // } - // else - printer_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); - // BBS: add config related logs + //if (!has_different_settings_to_system) { + // printer_different_keys_set.clear(); + //} + //else + printer_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load printer preset from printer_settings_id"); load_preset(this->printers, num_filaments + 1, "printer_settings_id", printer_different_keys_set, std::string()); @@ -5130,55 +4962,51 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // Split the "compatible_printers_condition" and "inherits" values from the cummulative vectors to separate filament presets. inherits = inherits_values[1]; compatible_printers_condition = compatible_printers_condition_values[1]; - compatible_prints_condition = compatible_prints_condition_values.front(); - Preset* loaded = nullptr; + compatible_prints_condition = compatible_prints_condition_values.front(); + Preset *loaded = nullptr; - // BBS: add different settings logic + //BBS: add different settings logic std::vector filament_different_keys_vector; std::string filament_different_settings = different_values[1]; Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector); - std::set filament_different_keys_set(filament_different_keys_vector.begin(), - filament_different_keys_vector.end()); - // if (!has_different_settings_to_system) { - // filament_different_keys_set.clear(); - // } - // else - filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + std::set filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end()); + //if (!has_different_settings_to_system) { + // filament_different_keys_set.clear(); + //} + //else + filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); std::string filament_id = filament_ids[0]; - // BBS: add config related logs + //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load single filament preset from filament_settings_id"); if (is_external) { if (inherits.empty()) convert_filament_preset_name(old_machine_profile_name->value, old_filament_profile_names->values.front()); else convert_filament_preset_name(old_machine_profile_name->value, inherits); - loaded = this->filaments - .load_external_preset(name_or_path, name, old_filament_profile_names->values.front(), config, - filament_different_keys_set, PresetCollection::LoadAndSelect::Always, file_version, - filament_id) - .first; - } else { - // called from Config Wizard. - loaded = &this->filaments.load_preset(this->filaments.path_from_name(name, inherits.empty()), name, config, true, - file_version); - loaded->save(nullptr); + loaded = this->filaments.load_external_preset(name_or_path, name, old_filament_profile_names->values.front(), config, filament_different_keys_set, PresetCollection::LoadAndSelect::Always, file_version, filament_id).first; } + else { + // called from Config Wizard. + loaded= &this->filaments.load_preset(this->filaments.path_from_name(name, inherits.empty()), name, config, true, file_version); + loaded->save(nullptr); + } this->filament_presets.clear(); - this->filament_presets.emplace_back(loaded->name); + this->filament_presets.emplace_back(loaded->name); } else { assert(is_external); // Split the filament presets, load each of them separately. std::vector configs(num_filaments, this->filaments.default_preset().config); // loop through options and scatter them into configs. - for (const t_config_option_key& key : this->filaments.default_preset().config.keys()) { - ConfigOption* other_opt = config.option(key); + for (const t_config_option_key &key : this->filaments.default_preset().config.keys()) { + ConfigOption *other_opt = config.option(key); if (other_opt == nullptr) continue; if (other_opt->is_scalar()) { - for (size_t i = 0; i < configs.size(); ++i) + for (size_t i = 0; i < configs.size(); ++ i) configs[i].option(key, false)->set(other_opt); - } else if (key != "compatible_printers" && key != "compatible_prints") { + } + else if (key != "compatible_printers" && key != "compatible_prints") { for (size_t i = 0; i < configs.size(); ++i) { if (process_multi_extruder && (filament_options_with_variant.find(key) != filament_options_with_variant.end())) { ConfigOptionVectorBase* other_opt_vec = static_cast(other_opt); @@ -5186,9 +5014,9 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, other_opt_vec->resize(extruder_variant_count); } size_t next_index = (i < (configs.size() - 1)) ? filament_variant_index[i + 1] : extruder_variant_count; - static_cast(configs[i].option(key, false)) - ->set(other_opt, filament_variant_index[i], next_index - filament_variant_index[i]); - } else + static_cast(configs[i].option(key, false))->set(other_opt, filament_variant_index[i], next_index - filament_variant_index[i]); + } + else static_cast(configs[i].option(key, false))->set_at(other_opt, 0, i); } } @@ -5199,26 +5027,25 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // in a case when next added preset take a place of previosly selected preset, // we should add presets from last to first bool any_modified = false; - // BBS: add config related logs + //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load multiple filament preset from filament_settings_id"); - for (int i = (int) configs.size() - 1; i >= 0; i--) { - DynamicPrintConfig& cfg = configs[i]; + for (int i = (int)configs.size()-1; i >= 0; i--) { + DynamicPrintConfig &cfg = configs[i]; // Split the "compatible_printers_condition" and "inherits" from the cummulative vectors to separate filament presets. cfg.opt_string("compatible_printers_condition", true) = compatible_printers_condition_values[i + 1]; - cfg.opt_string("compatible_prints_condition", true) = compatible_prints_condition_values[i]; + cfg.opt_string("compatible_prints_condition", true) = compatible_prints_condition_values[i]; cfg.opt_string("inherits", true) = inherits_values[i + 1]; - // BBS: add different settings logic + //BBS: add different settings logic std::vector filament_different_keys_vector; - std::string filament_different_settings = different_values[i + 1]; + std::string filament_different_settings = different_values[i+1]; Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector); - std::set filament_different_keys_set(filament_different_keys_vector.begin(), - filament_different_keys_vector.end()); - // if (!has_different_settings_to_system) { - // filament_different_keys_set.clear(); - // } - // else - filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + std::set filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end()); + //if (!has_different_settings_to_system) { + // filament_different_keys_set.clear(); + //} + //else + filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); std::string filament_id = filament_ids[i]; @@ -5229,15 +5056,16 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, else convert_filament_preset_name(old_machine_profile_name->value, filament_inherit); auto [loaded, modified] = this->filaments.load_external_preset(name_or_path, name, - (i < int(old_filament_profile_names->values.size())) ? - old_filament_profile_names->values[i] : - "", - std::move(cfg), filament_different_keys_set, - i == 0 ? PresetCollection::LoadAndSelect::Always : - any_modified ? - PresetCollection::LoadAndSelect::Never : - PresetCollection::LoadAndSelect::OnlyIfModified, - file_version, filament_id); + (i < int(old_filament_profile_names->values.size())) ? old_filament_profile_names->values[i] : "", + std::move(cfg), + filament_different_keys_set, + i == 0 ? + PresetCollection::LoadAndSelect::Always : + any_modified ? + PresetCollection::LoadAndSelect::Never : + PresetCollection::LoadAndSelect::OnlyIfModified, + file_version, + filament_id); any_modified |= modified; this->filament_presets[i] = loaded->name; } @@ -5250,17 +5078,19 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, break; } - case ptSLA: { + case ptSLA: + { /*std::set different_keys_set; load_preset(this->sla_prints, 0, "sla_print_settings_id", different_keys_set); load_preset(this->sla_materials, 1, "sla_material_settings_id", different_keys_set); load_preset(this->printers, 2, "printer_settings_id", different_keys_set);*/ break; } - default: break; + default: + break; } - this->update_compatible(PresetSelectCompatibleType::Never); + this->update_compatible(PresetSelectCompatibleType::Never); this->update_multi_material_filament_presets(); // A "published" 3MF project overlays the author-selected published keys onto the user's @@ -6369,23 +6199,23 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, this->filaments.select_preset_by_name(this->filament_presets.front(), false); } - // BBS - // const std::string &physical_printer = config.option("physical_printer_settings_id", true)->value; + + //BBS + //const std::string &physical_printer = config.option("physical_printer_settings_id", true)->value; const std::string physical_printer; if (!is_published) { if (this->printers.get_edited_preset().is_external || physical_printer.empty()) { this->physical_printers.unselect_printer(); } else { // Activate the physical printer profile if possible. - PhysicalPrinter* pp = this->physical_printers.find_printer(physical_printer, true); - if (pp != nullptr && std::find(pp->preset_names.begin(), pp->preset_names.end(), this->printers.get_edited_preset().name) != - pp->preset_names.end()) + PhysicalPrinter *pp = this->physical_printers.find_printer(physical_printer, true); + if (pp != nullptr && std::find(pp->preset_names.begin(), pp->preset_names.end(), this->printers.get_edited_preset().name) != pp->preset_names.end()) this->physical_printers.select_printer(pp->name, this->printers.get_edited_preset().name); else this->physical_printers.unselect_printer(); } } - // BBS: add config related logs + //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished"); } @@ -6396,31 +6226,27 @@ void PresetBundle::load_config_file_config(const std::string& name_or_path, // (config_maps) or against base_bundle's filament library, flattens, validates // and registers the preset. Returns the reason loading failed, empty on // success. -std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, - const std::string& path, - const std::string& vendor_name, - const PresetBundle* base_bundle, - LoadConfigBundleAttributes flags, - ConfigSubstitutionContext& substitution_context, - PresetsConfigSubstitutions& substitutions, - std::map& config_maps, - std::map& filament_id_maps, - PresetCollection* presets_collection, - size_t& count, - bool is_from_lib, - const std::set* retain_configs) +std::string PresetBundle::load_vendor_preset( + const CachedPreset& entry, + const std::string& path, const std::string& vendor_name, + const PresetBundle* base_bundle, + LoadConfigBundleAttributes flags, + ConfigSubstitutionContext& substitution_context, PresetsConfigSubstitutions& substitutions, + std::map& config_maps, std::map& filament_id_maps, + PresetCollection* presets_collection, size_t& count, bool is_from_lib, + const std::set* retain_configs) { - const VendorProfile* current_vendor_profile = &this->vendors.at(vendor_name); - const std::string subfile = path + "/" + vendor_name + "/" + entry.sub_path; - const std::string& preset_name = entry.name; - std::string alias_name, filament_id = entry.filament_id; - std::vector renamed_from = entry.renamed_from; - DynamicPrintConfig config; + const VendorProfile* current_vendor_profile = &this->vendors.at(vendor_name); + const std::string subfile = path + "/" + vendor_name + "/" + entry.sub_path; + const std::string& preset_name = entry.name; + std::string alias_name, filament_id = entry.filament_id; + std::vector renamed_from = entry.renamed_from; + DynamicPrintConfig config; const DynamicPrintConfig* default_config = nullptr; - std::string reason; + std::string reason; - // check whether it inherits other preset or not - if (!entry.inherits.empty()) { + //check whether it inherits other preset or not + if (! entry.inherits.empty()) { auto it2 = config_maps.find(entry.inherits); if (it2 != config_maps.end()) default_config = &(it2->second); @@ -6442,14 +6268,16 @@ std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, } } } - } else { + } + else { ++m_errors; BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": can not find inherits " << entry.inherits << " for " << preset_name; // throw ConfigurationError(format("can not find inherits %1% for %2%", inherits, preset_name)); reason = "Can not find inherits: " + entry.inherits; return reason; } - } else { + } + else { if (presets_collection->type() == Preset::TYPE_PRINTER) default_config = &presets_collection->default_preset_for(entry.config_src).config; else @@ -6474,7 +6302,7 @@ std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, return reason; } if (config.has("alias")) - alias_name = (dynamic_cast(config.option("alias")))->value; + alias_name = (dynamic_cast(config.option("alias")))->value; Preset::normalize(config); // Report configuration fields, which are misplaced into a wrong group. @@ -6488,36 +6316,37 @@ std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, if (presets_collection->type() == Preset::TYPE_PRINTER) { // Filter out printer presets, which are not mentioned in the vendor profile. // These presets are considered not installed. - auto printer_model = config.opt_string("printer_model"); + auto printer_model = config.opt_string("printer_model"); if (printer_model.empty()) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" defines no printer model, it will be ignored."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" defines no printer model, it will be ignored."; reason = std::string("can not find printer_model"); return reason; } auto printer_variant = config.opt_string("printer_variant"); if (printer_variant.empty()) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" defines no printer variant, it will be ignored."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" defines no printer variant, it will be ignored."; reason = std::string("can not find printer_variant"); return reason; } auto it_model = std::find_if(current_vendor_profile->models.cbegin(), current_vendor_profile->models.cend(), - [&](const VendorProfile::PrinterModel& m) { return m.id == printer_model; }); + [&](const VendorProfile::PrinterModel &m) { return m.id == printer_model; } + ); if (it_model == current_vendor_profile->models.end()) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" defines invalid printer model \"" << printer_model << "\", it will be ignored."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" defines invalid printer model \"" << printer_model << "\", it will be ignored."; reason = std::string("can not find printer model in vendor profile"); return reason; } auto it_variant = it_model->variant(printer_variant); if (it_variant == nullptr) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" defines invalid printer variant \"" << printer_variant << "\", it will be ignored."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" defines invalid printer variant \"" << printer_variant << "\", it will be ignored."; reason = std::string("can not find printer_variant in vendor profile"); return reason; } @@ -6530,74 +6359,71 @@ std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, // validated, not variant uniqueness. Validation-only so the app keeps loading existing // profiles unchanged. if (validation_mode && entry.instantiation == "true") { - const auto* nd = config.option("nozzle_diameter"); + const auto *nd = config.option("nozzle_diameter"); std::set nozzles, variant_nozzles; if (nd != nullptr) nozzles.insert(nd->values.begin(), nd->values.end()); std::vector variant_tokens; boost::algorithm::split(variant_tokens, printer_variant, boost::algorithm::is_any_of("+")); bool variant_ok = true; // printer_variant is already guaranteed non-empty above - for (const std::string& tok : variant_tokens) { + for (const std::string &tok : variant_tokens) { size_t consumed = 0; - double d = string_to_double_decimal_point(tok, &consumed); + double d = string_to_double_decimal_point(tok, &consumed); // Require a leading numeric diameter; a trailing suffix (e.g. "HF") is allowed. - if (consumed == 0) { - variant_ok = false; - break; - } + if (consumed == 0) { variant_ok = false; break; } variant_nozzles.insert(d); } if (!variant_ok || variant_nozzles != nozzles) { ++m_errors; - BOOST_LOG_TRIVIAL(error) - << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" has printer_variant \"" << printer_variant << "\" that does not match its nozzle_diameter \"" - << (nd ? nd->serialize() : std::string()) - << "\". " - "printer_variant must begin with the nozzle diameter, optionally followed by a non-numeric suffix " - "(e.g. \"0.4\", \"0.8HF\"); for multi-nozzle printers, join the per-nozzle diameters with \"+\" in " - "nozzle order (e.g. \"0.4+0.6\")."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" has printer_variant \"" << printer_variant << + "\" that does not match its nozzle_diameter \"" << (nd ? nd->serialize() : std::string()) << "\". " + "printer_variant must begin with the nozzle diameter, optionally followed by a non-numeric suffix " + "(e.g. \"0.4\", \"0.8HF\"); for multi-nozzle printers, join the per-nozzle diameters with \"+\" in " + "nozzle order (e.g. \"0.4+0.6\")."; } } } - const Preset* preset_existing = presets_collection->find_preset(preset_name, false); + const Preset *preset_existing = presets_collection->find_preset(preset_name, false); if (preset_existing != nullptr) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << preset_name - << "\" has already been loaded from another Config Bundle."; + BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << + preset_name << "\" has already been loaded from another Config Bundle."; reason = std::string("duplicated defines"); return reason; } - auto file_path = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR / vendor_name / entry.sub_path).make_preferred(); - if (validation_mode) + auto file_path = (boost::filesystem::path(data_dir()) /PRESET_SYSTEM_DIR/ vendor_name / entry.sub_path).make_preferred(); + if(validation_mode) file_path = (boost::filesystem::path(data_dir()) / vendor_name / entry.sub_path).make_preferred(); // Load the preset into the list of presets, save it to disk. - Preset& loaded = presets_collection->load_preset(file_path.string(), preset_name, std::move(config), false); + Preset &loaded = presets_collection->load_preset(file_path.string(), preset_name, std::move(config), false); if (flags.has(LoadConfigBundleAttribute::LoadSystem)) { - loaded.is_system = true; - loaded.vendor = current_vendor_profile; - loaded.version = current_vendor_profile->config_version; + loaded.is_system = true; + loaded.vendor = current_vendor_profile; + loaded.version = current_vendor_profile->config_version; loaded.description = entry.description; - loaded.setting_id = entry.setting_id; + loaded.setting_id = entry.setting_id; // Derive the preset setting_id on the fly when a profile ships without one, // matching scripts/assign_vendor_setting_ids.py. Only instantiated presets // carry an id; non-instantiated base profiles return earlier above. This never // touches the per-user cloud-sync setting_id written into user .info files. if (loaded.setting_id.empty() && entry.instantiation == "true") - loaded.setting_id = generate_preset_setting_id(vendor_name, Preset::get_type_string(presets_collection->type()), preset_name); - loaded.filament_id = filament_id; + loaded.setting_id = generate_preset_setting_id( + vendor_name, Preset::get_type_string(presets_collection->type()), preset_name); + loaded.filament_id = filament_id; loaded.m_from_orca_filament_lib = is_from_lib; BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << " " << __LINE__ << ", " << loaded.name << " load filament_id: " << filament_id; if (presets_collection->type() == Preset::TYPE_FILAMENT) { if (filament_id.empty() && "Template" != vendor_name) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": can not find filament_id for " << preset_name; - // throw ConfigurationError(format("can not find inherits %1% for %2%", inherits, preset_name)); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": can not find filament_id for " << preset_name; + //throw ConfigurationError(format("can not find inherits %1% for %2%", inherits, preset_name)); reason = "Can not find filament_id for " + preset_name; return reason; - } else { + } + else { filament_id_maps.emplace(preset_name, filament_id); } } @@ -6621,34 +6447,31 @@ std::string PresetBundle::load_vendor_preset(const CachedPreset& entry, filaments.set_printer_hold_alias(loaded.alias, loaded); } loaded.renamed_from = std::move(renamed_from); - if (!substitution_context.empty()) - substitutions.push_back({preset_name, presets_collection->type(), PresetConfigSubstitutions::Source::ConfigBundle, std::string(), - std::move(substitution_context.substitutions)}); + if (! substitution_context.empty()) + substitutions.push_back({ + preset_name, presets_collection->type(), PresetConfigSubstitutions::Source::ConfigBundle, + std::string(), std::move(substitution_context.substitutions) }); if (retain_configs == nullptr || retain_configs->count(preset_name) != 0) config_maps.emplace(preset_name, loaded.config); ++count; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", got preset %1%, from %2%") % loaded.name % subfile; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", got preset %1%, from %2%")%loaded.name %subfile; return reason; } -// BBS: Load a config bundle file from json +//BBS: Load a config bundle file from json std::pair PresetBundle::load_vendor_configs_from_json( - const std::string& dir, - const std::string& vendor_name, - LoadConfigBundleAttributes flags, - ForwardCompatibilitySubstitutionRule compatibility_rule, - const PresetBundle* base_bundle) + const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle) { // Enable substitutions for user config bundle, throw an exception when loading a system profile. - ConfigSubstitutionContext substitution_context{compatibility_rule}; + ConfigSubstitutionContext substitution_context { compatibility_rule }; PresetsConfigSubstitutions substitutions; // Errors already on this bundle when the load began; the cache stamp below // counts only what this parse adds. const int errors_at_entry = m_errors; - // BBS: add config related logs - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, path %1%, compatibility_rule %2%") % dir.c_str() % compatibility_rule; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, path %1%, compatibility_rule %2%")%dir.c_str()%compatibility_rule; if (flags.has(LoadConfigBundleAttribute::ResetUserProfile) || flags.has(LoadConfigBundleAttribute::LoadSystem)) // Reset this bundle, delete user profile files if SaveImported. this->reset(flags.has(LoadConfigBundleAttribute::SaveImported)); @@ -6656,15 +6479,13 @@ std::pair PresetBundle::load_vendor_configs_ // Orca: only a whole-vendor load has a cache — the vendor-only and filament-only // scans want a slice of one. Validation reads the JSONs whatever is cached. const boost::filesystem::path dir_path(dir); - const bool cacheable = flags.has(LoadConfigBundleAttribute::LoadSystem) && !flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); - if (cacheable && !validation_mode && this->load_vendor_cache(dir_path, vendor_name, base_bundle)) { + const bool cacheable = flags.has(LoadConfigBundleAttribute::LoadSystem) && ! flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); + if (cacheable && ! validation_mode && this->load_vendor_cache(dir_path, vendor_name, base_bundle)) { size_t presets_loaded = 0; - for (const PresetCollection* coll : - std::initializer_list{&this->prints, &this->sla_prints, &this->filaments, &this->sla_materials, - &this->printers}) + for (const PresetCollection* coll : std::initializer_list{ + &this->prints, &this->sla_prints, &this->filaments, &this->sla_materials, &this->printers }) presets_loaded += coll->m_presets.size() - coll->m_num_default_presets; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(", %1% served from its preset cache, %2% presets") % vendor_name % presets_loaded; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", %1% served from its preset cache, %2% presets")%vendor_name%presets_loaded; return std::make_pair(std::move(substitutions), presets_loaded); } @@ -6688,9 +6509,10 @@ std::pair PresetBundle::load_vendor_configs_ } else if (boost::iequals(iter2.key(), BBL_JSON_KEY_SUB_PATH)) { subpath = iter2.value(); } - } else { + } + else { ++m_errors; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": invalid value type for " << iter2.key(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": invalid value type for " << iter2.key(); } } if (!name.empty() && !subpath.empty()) @@ -6712,51 +6534,55 @@ std::pair PresetBundle::load_vendor_configs_ boost::nowide::ifstream ifs(root_file); json j; ifs >> j; - // parse the json elements + //parse the json elements for (auto it = j.begin(); it != j.end(); it++) { if (boost::iequals(it.key(), BBL_JSON_KEY_VERSION)) { - // get version + //get version std::string version_str = it.value(); - auto config_version = Semver::parse(version_str); - if (!config_version) { + auto config_version = Semver::parse(version_str); + if (! config_version) { ++m_errors; - throw ConfigurationError( - (boost::format("vendor %1%'s config version: %2% invalid\nSuggest cleaning the directory %3% firstly") % - vendor_name % version_str % dir) - .str()); + throw ConfigurationError((boost::format("vendor %1%'s config version: %2% invalid\nSuggest cleaning the directory %3% firstly") + % vendor_name % version_str % dir).str()); } else { vendor_profile.config_version = std::move(*config_version); } - } else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) { - // get url + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) { + //get url vendor_profile.config_update_url = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) { - // get description - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": parse " << root_file << ", got description: " << it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) { - // get name + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) { + //get description + BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< ": parse "< PresetBundle::load_vendor_configs_ process_subfiles.clear(); } - // 2) paste the machine model - for (auto& machine_model : machine_model_subfiles) { + //2) paste the machine model + for (auto& machine_model : machine_model_subfiles) + { std::string subfile = dir + "/" + vendor_name + "/" + machine_model.second; VendorProfile::PrinterModel model; model.id = machine_model.first; @@ -6774,44 +6601,49 @@ std::pair PresetBundle::load_vendor_configs_ boost::nowide::ifstream ifs(subfile); json j; ifs >> j; - // parse the json elements + //parse the json elements for (auto it = j.begin(); it != j.end(); it++) { if (boost::iequals(it.key(), BBL_JSON_KEY_VERSION)) { - // get version - } else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) { - // get url - } else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) { - // get name + //get version + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) { + //get url + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) { + //get name model.name = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_MODEL_ID)) { - // get model_id + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_MODEL_ID)) { + //get model_id model.model_id = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_NOZZLE_DIAMETER)) { - // get nozzle diameter + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_NOZZLE_DIAMETER)) { + //get nozzle diameter std::string nozzle_diameters = it.value(); std::vector variants; if (Slic3r::unescape_strings_cstyle(nozzle_diameters, variants)) { - for (const std::string& variant_name : variants) { + for (const std::string &variant_name : variants) { if (model.variant(variant_name) == nullptr) model.variants.emplace_back(VendorProfile::PrinterVariant(variant_name)); } } else { ++m_errors; - BOOST_LOG_TRIVIAL(error) - << __FUNCTION__ - << boost::format(": invalid nozzle_diameters %1% for Vendor %1%") % nozzle_diameters % vendor_name; + BOOST_LOG_TRIVIAL(error)<< __FUNCTION__ << boost::format(": invalid nozzle_diameters %1% for Vendor %1%") % nozzle_diameters % vendor_name; } - } else if (boost::iequals(it.key(), BBL_JSON_KEY_PRINTER_TECH)) { - // get printer tech + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_PRINTER_TECH)) { + //get printer tech if (boost::algorithm::starts_with(it.value(), "SL")) model.technology = ptSLA; else model.technology = ptFFF; - } else if (boost::iequals(it.key(), BBL_JSON_KEY_FAMILY)) { - // get family + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_FAMILY)) { + //get family model.family = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_BED_MODEL)) { - // get bed model + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_BED_MODEL)) { + //get bed model model.bed_model = it.value(); } else if (boost::iequals(it.key(), BBL_JSON_KEY_BOTTOM_TEXTURE_END_NAME)) { model.bottom_texture_end_name = it.value(); @@ -6823,26 +6655,28 @@ std::pair PresetBundle::load_vendor_configs_ model.bottom_texture_rect_longer = it.value(); } else if (boost::iequals(it.key(), BBL_JSON_KEY_MIDDLE_TEXTURE_RECT)) { model.middle_texture_rect = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_IMAGE_BED_TYPE)) { + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_IMAGE_BED_TYPE)) { model.image_bed_type = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_BED_TEXTURE)) { - // get bed texture + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_BED_TEXTURE)) { + //get bed texture model.bed_texture = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_HOTEND_MODEL)) { + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_HOTEND_MODEL)) { model.hotend_model = it.value(); - } else if (boost::iequals(it.key(), BBL_JSON_KEY_DEFAULT_MATERIALS)) { - // get machine list + } + else if (boost::iequals(it.key(), BBL_JSON_KEY_DEFAULT_MATERIALS)) { + //get machine list std::string default_materials_field = it.value(); if (Slic3r::unescape_strings_cstyle(default_materials_field, model.default_materials)) { - Slic3r::sort_remove_duplicates(model.default_materials); - if (!model.default_materials.empty() && model.default_materials.front().empty()) + Slic3r::sort_remove_duplicates(model.default_materials); + if (! model.default_materials.empty() && model.default_materials.front().empty()) // An empty material was inserted into the list of default materials. Remove it. model.default_materials.erase(model.default_materials.begin()); } else { ++m_errors; - BOOST_LOG_TRIVIAL(error) - << __FUNCTION__ - << boost::format(": invalid default_materials %1% for Vendor %1%") % default_materials_field % vendor_name; + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": invalid default_materials %1% for Vendor %1%") % default_materials_field % vendor_name; } } else if (boost::iequals(it.key(), BBL_JSON_KEY_NOT_SUPPORT_BED_TYPE)) { // get machine list @@ -6854,67 +6688,65 @@ std::pair PresetBundle::load_vendor_configs_ model.not_support_bed_types.erase(model.not_support_bed_types.begin()); } else { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ - << boost::format(": invalid not_support_bed_types %1% for Vendor %1%") % - not_support_bed_type_field % vendor_name; + << boost::format(": invalid not_support_bed_types %1% for Vendor %1%") % not_support_bed_type_field % vendor_name; } } } - } catch (nlohmann::detail::parse_error& err) { - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << subfile - << " got a nlohmann::detail::parse_error, reason = " << err.what(); - throw ConfigurationError( - (boost::format("Failed loading configuration file %1%: %2%\nSuggest cleaning the directory %3% firstly") % subfile % - err.what() % dir) - .str()); + } + catch(nlohmann::detail::parse_error &err) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<< subfile <<" got a nlohmann::detail::parse_error, reason = " << err.what(); + throw ConfigurationError((boost::format("Failed loading configuration file %1%: %2%\nSuggest cleaning the directory %3% firstly") + %subfile %err.what() % dir).str()); } - if (!model.id.empty() && !model.variants.empty()) + if (! model.id.empty() && ! model.variants.empty()) vendor_profile.models.push_back(std::move(model)); } - // insert the vendor profile + //insert the vendor profile this->vendors.emplace(vendor_name, vendor_profile); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(", loaded vendor profile, name %1%, id %2%, version %3%") % vendor_profile.name % - vendor_profile.id % vendor_profile.config_version.to_string(); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", loaded vendor profile, name %1%, id %2%, version %3%")%vendor_profile.name%vendor_profile.id%vendor_profile.config_version.to_string(); if (flags.has(LoadConfigBundleAttribute::LoadVendorOnly)) return std::make_pair(PresetsConfigSubstitutions{}, 0); // 3) paste the process/filament/print configs - PresetCollection* presets = nullptr; - size_t presets_loaded = 0; + PresetCollection *presets = nullptr; + size_t presets_loaded = 0; // Parse one subfile into a source-form entry — everything the JSON states, // nothing resolved. Loading the entry (load_vendor_preset) is the // same code whether the entry was parsed just now or deserialized from the // vendor's cache. - auto parse_subfile = [this, dir, vendor_name](ConfigSubstitutionContext& substitution_context, - const std::pair& subfile_iter, - CachedPreset& entry) -> std::string { + auto parse_subfile = [this, dir, vendor_name]( + ConfigSubstitutionContext& substitution_context, + const std::pair& subfile_iter, + CachedPreset& entry) -> std::string { + std::string subfile = dir + "/" + vendor_name + "/" + subfile_iter.second; std::string reason; try { std::map key_values; substitution_context.substitutions.clear(); - // parse the json elements + //parse the json elements entry.sub_path = subfile_iter.second; entry.config_src.load_from_json(subfile, substitution_context, false, key_values, reason); if (!reason.empty()) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": load config file " << subfile << " Failed!"; + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": load config file "< PresetBundle::load_vendor_configs_ << "\" contains invalid \"renamed_from\" key, which is being ignored."; } } - } catch (nlohmann::detail::parse_error& err) { + } + catch(nlohmann::detail::parse_error &err) { ++m_errors; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << subfile - << " got a nlohmann::detail::parse_error, reason = " << err.what(); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<< subfile <<" got a nlohmann::detail::parse_error, reason = " << err.what(); reason = std::string("json parse error") + err.what(); return reason; } @@ -6966,8 +6798,8 @@ std::pair PresetBundle::load_vendor_configs_ // so the parse_errors stamped into the cache must hold only what a cache load // will not recount. int install_errors = 0; - auto load_subfiles = [&](std::vector>& subfiles, std::vector& entries, - const char* kind, bool is_from_lib = false) { + auto load_subfiles = [&](std::vector>& subfiles, + std::vector& entries, const char* kind, bool is_from_lib = false) { configs.clear(); filament_id_maps.clear(); for (auto& subfile : subfiles) { @@ -6975,19 +6807,17 @@ std::pair PresetBundle::load_vendor_configs_ std::string reason = parse_subfile(substitution_context, subfile, entry); if (reason.empty()) { const int errors_before_install = m_errors; - reason = load_vendor_preset(entry, dir, vendor_name, base_bundle, flags, substitution_context, substitutions, configs, - filament_id_maps, presets, presets_loaded, is_from_lib); + reason = load_vendor_preset(entry, dir, vendor_name, base_bundle, flags, + substitution_context, substitutions, configs, filament_id_maps, presets, + presets_loaded, is_from_lib); install_errors += m_errors - errors_before_install; } if (!reason.empty()) { ++m_errors; - // parse error + //parse error std::string subfile_path = dir + "/" + vendor_name + "/" + subfile.second; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ - << boost::format(", got error when parse %1% setting from %2%") % kind % subfile_path; - throw ConfigurationError( - (boost::format("Failed loading configuration file %1%\nSuggest cleaning the directory %2% firstly") % subfile_path % dir) - .str()); + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(", got error when parse %1% setting from %2%") % kind % subfile_path; + throw ConfigurationError((boost::format("Failed loading configuration file %1%\nSuggest cleaning the directory %2% firstly") % subfile_path % dir).str()); } if (will_cache) entries.emplace_back(std::move(entry)); @@ -6997,12 +6827,12 @@ std::pair PresetBundle::load_vendor_configs_ // The section order below — process, filaments (with the ORCA-lib map copy), // printers — is mirrored by load_vendor_cache's install loops; keep the two // in lockstep. - // 3.1) paste the process + //3.1) paste the process presets = &this->prints; load_subfiles(process_subfiles, cache_data.process_entries, "process"); - // 3.2) paste the filaments - presets = &this->filaments; + //3.2) paste the filaments + presets = &this->filaments; const auto is_orca_lib = vendor_name == ORCA_FILAMENT_LIBRARY; load_subfiles(filament_subfiles, cache_data.filament_entries, "filament", is_orca_lib); if (is_orca_lib) { @@ -7010,7 +6840,7 @@ std::pair PresetBundle::load_vendor_configs_ m_filament_id_maps = filament_id_maps; } - // 3.3) paste the printers + //3.3) paste the printers presets = &this->printers; load_subfiles(machine_subfiles, cache_data.machine_entries, "printer"); @@ -7019,13 +6849,13 @@ std::pair PresetBundle::load_vendor_configs_ // wrapped would be added to every future load of this vendor. cache_data.parse_errors = uint64_t(std::max(0, m_errors - errors_at_entry - install_errors)); cache_data.vendors = this->vendors; - if (!VendorCacheFile::save((dir_path / (vendor_name + ".opc")).string(), vendor_name, vendor_profile.config_version.to_string(), - cache_data)) + if (! VendorCacheFile::save((dir_path / (vendor_name + ".opc")).string(), vendor_name, + vendor_profile.config_version.to_string(), cache_data)) BOOST_LOG_TRIVIAL(warning) << "PresetBundle: failed to save vendor cache for " << vendor_name; } - // BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", finished, presets_loaded %1%") % presets_loaded; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", finished, presets_loaded %1%")%presets_loaded; return std::make_pair(std::move(substitutions), presets_loaded); } @@ -7063,9 +6893,9 @@ void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filam // Now verify if flush_volumes_matrix has proper size (it is used to deduce number of extruders in wipe tower generator): std::vector old_matrix = this->project_config.option("flush_volumes_matrix")->values; - size_t old_nozzle_nums = this->project_config.option("flush_multiplier")->values.size(); + size_t old_nozzle_nums = this->project_config.option("flush_multiplier")->values.size(); size_t old_number_of_filaments = size_t(sqrt(old_matrix.size() / old_nozzle_nums) + EPSILON); - size_t nozzle_nums = get_printer_extruder_count(); + size_t nozzle_nums = get_printer_extruder_count(); if (old_nozzle_nums != nozzle_nums) { std::vector& f_multiplier = this->project_config.option("flush_multiplier")->values; f_multiplier.resize(nozzle_nums, 1.f); @@ -7074,11 +6904,11 @@ void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filam if (old_matrix.size() != num_filaments * num_filaments * nozzle_nums) { // First verify if purging volumes presets for each extruder matches number of extruders std::vector& filaments = this->project_config.option("flush_volumes_vector")->values; - while (filaments.size() < 2 * num_filaments) { - filaments.push_back(filaments.size() > 1 ? filaments[0] : 140.); // copy the values from the first extruder - filaments.push_back(filaments.size() > 1 ? filaments[1] : 140.); + while (filaments.size() < 2* num_filaments) { + filaments.push_back(filaments.size()>1 ? filaments[0] : 140.); // copy the values from the first extruder + filaments.push_back(filaments.size()>1 ? filaments[1] : 140.); } - while (filaments.size() > 2 * num_filaments) { + while (filaments.size() > 2* num_filaments) { filaments.pop_back(); filaments.pop_back(); } @@ -7096,19 +6926,14 @@ void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filam // for this nozzle slot; otherwise initialize from the per-filament // flush volumes the same way the (i,j) out-of-range branch does. if (nozzle_id < old_nozzle_nums) { - new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = - old_matrix[old_i * old_number_of_filaments + old_j + old_matrix_size * nozzle_id]; + new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = old_matrix[old_i * old_number_of_filaments + old_j + old_matrix_size * nozzle_id]; } else { - new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = (i == j ? - 0. : - filaments[2 * i] + filaments[2 * j + 1]); + new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = (i == j ? 0. : filaments[2 * i] + filaments[2 * j + 1]); } } } else { for (size_t nozzle_id = 0; nozzle_id < nozzle_nums; ++nozzle_id) { - new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = (i == j ? - 0. : - filaments[2 * i] + filaments[2 * j + 1]); + new_matrix[i * num_filaments + j + new_matrix_size * nozzle_id] = (i == j ? 0. : filaments[2 * i] + filaments[2 * j + 1]); } } } @@ -7121,15 +6946,15 @@ void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filam // Preset::normalize_inherits: target.find_preset(name, false) resolves "renamed_from" recursively // and returns nullptr for unknown names, so we rewrite only on a positive, changed match and leave // user/deleted names untouched. -static void normalize_compatible_field(Preset& preset, const char* field_key, PresetCollection& target) +static void normalize_compatible_field(Preset &preset, const char *field_key, PresetCollection &target) { - auto* opt = preset.config.option(field_key); + auto *opt = preset.config.option(field_key); if (opt == nullptr) return; - for (std::string& name : opt->values) { + for (std::string &name : opt->values) { if (name.empty()) continue; - if (const Preset* resolved = target.find_preset(name, false); resolved != nullptr && resolved->name != name) + if (const Preset *resolved = target.find_preset(name, false); resolved != nullptr && resolved->name != name) name = resolved->name; } } @@ -7146,59 +6971,56 @@ void PresetBundle::normalize_compatible_presets() // references a process preset. System presets are normalized too: a vendor profile can itself // reference a sibling preset by a name that was later renamed, and the rewrite is in-memory only // (system presets are never persisted back to vendor JSON). (begin()/end() skip defaults.) - auto normalize = [this](PresetCollection& holders, PresetCollection* processes) { - for (Preset& p : holders) { + auto normalize = [this](PresetCollection &holders, PresetCollection *processes) { + for (Preset &p : holders) { normalize_compatible_field(p, "compatible_printers", this->printers); if (processes != nullptr) normalize_compatible_field(p, "compatible_prints", *processes); } }; - normalize(this->prints, nullptr); - normalize(this->filaments, &this->prints); - normalize(this->sla_prints, nullptr); + normalize(this->prints, nullptr); + normalize(this->filaments, &this->prints); + normalize(this->sla_prints, nullptr); normalize(this->sla_materials, &this->sla_prints); } -void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_print_if_incompatible, - PresetSelectCompatibleType select_other_filament_if_incompatible) +void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_print_if_incompatible, PresetSelectCompatibleType select_other_filament_if_incompatible) { - const Preset& printer_preset = this->printers.get_edited_preset(); - const PresetWithVendorProfile printer_preset_with_vendor_profile = this->printers.get_preset_with_vendor_profile(printer_preset); + const Preset &printer_preset = this->printers.get_edited_preset(); + const PresetWithVendorProfile printer_preset_with_vendor_profile = this->printers.get_preset_with_vendor_profile(printer_preset); class PreferedProfileMatch { public: - PreferedProfileMatch(const std::string& prefered_alias, const std::string& prefered_name) - : m_prefered_alias(prefered_alias), m_prefered_name(prefered_name) - {} + PreferedProfileMatch(const std::string &prefered_alias, const std::string &prefered_name) : + m_prefered_alias(prefered_alias), m_prefered_name(prefered_name) {} - int operator()(const Preset& preset) const + int operator()(const Preset &preset) const { - return preset.is_default || preset.is_external ? - // Don't match any properties of the "-- default --" profile or the external profiles when switching printer profile. - 0 : - !m_prefered_alias.empty() && m_prefered_alias == preset.alias ? - // Matching an alias, always take this preset with priority. - std::numeric_limits::max() : - // Otherwise take the prefered profile, or the first compatible. - preset.name == m_prefered_name; + return + preset.is_default || preset.is_external ? + // Don't match any properties of the "-- default --" profile or the external profiles when switching printer profile. + 0 : + ! m_prefered_alias.empty() && m_prefered_alias == preset.alias ? + // Matching an alias, always take this preset with priority. + std::numeric_limits::max() : + // Otherwise take the prefered profile, or the first compatible. + preset.name == m_prefered_name; } private: - const std::string m_prefered_alias; - const std::string& m_prefered_name; + const std::string m_prefered_alias; + const std::string &m_prefered_name; }; // Matching by the layer height in addition. class PreferedPrintProfileMatch : public PreferedProfileMatch { public: - PreferedPrintProfileMatch(const Preset* preset, const std::string& prefered_name) - : PreferedProfileMatch(preset ? preset->alias : std::string(), prefered_name) - , m_prefered_layer_height(preset ? preset->config.opt_float("layer_height") : 0) - {} + PreferedPrintProfileMatch(const Preset *preset, const std::string &prefered_name) : + PreferedProfileMatch(preset ? preset->alias : std::string(), prefered_name), m_prefered_layer_height(preset ? preset->config.opt_float("layer_height") : 0) {} - int operator()(const Preset& preset) const + int operator()(const Preset &preset) const { // Don't match any properties of the "-- default --" profile or the external profiles when switching printer profile. if (preset.is_default || preset.is_external) @@ -7222,12 +7044,11 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri class PreferedFilamentProfileMatch : public PreferedProfileMatch { public: - PreferedFilamentProfileMatch(const Preset* preset, const std::string& prefered_name) - : PreferedProfileMatch(preset ? preset->alias : std::string(), prefered_name) - , m_prefered_filament_type(preset ? preset->config.opt_string("filament_type", 0) : std::string()) - {} + PreferedFilamentProfileMatch(const Preset *preset, const std::string &prefered_name) : + PreferedProfileMatch(preset ? preset->alias : std::string(), prefered_name), + m_prefered_filament_type(preset ? preset->config.opt_string("filament_type", 0) : std::string()) {} - int operator()(const Preset& preset) const + int operator()(const Preset &preset) const { // Don't match any properties of the "-- default --" profile or the external profiles when switching printer profile. if (preset.is_default || preset.is_external) @@ -7235,9 +7056,9 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri int match_quality = PreferedProfileMatch::operator()(preset); if (match_quality < std::numeric_limits::max()) { match_quality += 1; - if (preset.is_visible) + if(preset.is_visible) match_quality += 1; - if (!m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) + if (! m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) match_quality *= 10; } return match_quality; @@ -7251,141 +7072,118 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri class PreferedFilamentsProfileMatch { public: - PreferedFilamentsProfileMatch(const Preset* preset, const std::vector& prefered_names) - : m_prefered_alias(preset ? preset->alias : std::string()) - , m_prefered_filament_type(preset ? preset->config.opt_string("filament_type", 0) : std::string("PLA")) - , // BBS: default choose PLA + PreferedFilamentsProfileMatch(const Preset *preset, const std::vector &prefered_names) : + m_prefered_alias(preset ? preset->alias : std::string()), + m_prefered_filament_type(preset ? preset->config.opt_string("filament_type", 0) : std::string("PLA")), // BBS: default choose PLA m_prefered_names(prefered_names) - {} + {} - int operator()(const Preset& preset) const + int operator()(const Preset &preset) const { // Don't match any properties of the "-- default --" profile or the external profiles when switching printer profile. if (preset.is_default || preset.is_external || !preset.is_visible) return 0; - if (!m_prefered_alias.empty() && m_prefered_alias == preset.alias) + if (! m_prefered_alias.empty() && m_prefered_alias == preset.alias) // Matching an alias, always take this preset with priority. return std::numeric_limits::max(); int match_quality = (std::find(m_prefered_names.begin(), m_prefered_names.end(), preset.name) != m_prefered_names.end()) + 1; - if (!m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) + if (! m_prefered_filament_type.empty() && m_prefered_filament_type == preset.config.opt_string("filament_type", 0)) match_quality *= 10; return match_quality; } private: - const std::string m_prefered_alias; - const std::string m_prefered_filament_type; - const std::vector& m_prefered_names; + const std::string m_prefered_alias; + const std::string m_prefered_filament_type; + const std::vector &m_prefered_names; }; - BOOST_LOG_TRIVIAL(info) << boost::format("update_compatibility for all presets enter, select_other_print_if_incompatible %1%, " - "select_other_filament_if_incompatible %2%") % - (int) select_other_print_if_incompatible % (int) select_other_filament_if_incompatible; - switch (printer_preset.printer_technology()) { - case ptFFF: { - assert(printer_preset.config.has("default_print_profile")); - assert(printer_preset.config.has("default_filament_profile")); - const std::vector& prefered_filament_profiles = - printer_preset.config.option("default_filament_profile")->values; + BOOST_LOG_TRIVIAL(info) << boost::format("update_compatibility for all presets enter, select_other_print_if_incompatible %1%, select_other_filament_if_incompatible %2%")%(int)select_other_print_if_incompatible %(int)select_other_filament_if_incompatible; + switch (printer_preset.printer_technology()) { + case ptFFF: + { + assert(printer_preset.config.has("default_print_profile")); + assert(printer_preset.config.has("default_filament_profile")); + const std::vector &prefered_filament_profiles = printer_preset.config.option("default_filament_profile")->values; this->prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, - PreferedPrintProfileMatch(this->prints.get_selected_idx() == size_t(-1) ? - nullptr : - &this->prints.get_edited_preset(), - printer_preset.config.opt_string("default_print_profile"))); - const PresetWithVendorProfile print_preset_with_vendor_profile = this->prints.get_edited_preset_with_vendor_profile(); + PreferedPrintProfileMatch(this->prints.get_selected_idx() == size_t(-1) ? nullptr : &this->prints.get_edited_preset(), printer_preset.config.opt_string("default_print_profile"))); + const PresetWithVendorProfile print_preset_with_vendor_profile = this->prints.get_edited_preset_with_vendor_profile(); // Remember whether the filament profiles were compatible before updating the filament compatibility. - std::vector filament_preset_was_compatible(this->filament_presets.size(), false); - for (size_t idx = 0; idx < this->filament_presets.size(); ++idx) { - Preset* preset = this->filaments.find_preset(this->filament_presets[idx], false); + std::vector filament_preset_was_compatible(this->filament_presets.size(), false); + for (size_t idx = 0; idx < this->filament_presets.size(); ++ idx) { + Preset *preset = this->filaments.find_preset(this->filament_presets[idx], false); filament_preset_was_compatible[idx] = preset != nullptr && preset->is_compatible; } // First select a first compatible profile for the preset editor. - BOOST_LOG_TRIVIAL(info) << boost::format("prefered filaments: size %1%, previous selected %2%") % - prefered_filament_profiles.size() % this->filaments.get_selected_idx(); - if (this->filaments.get_selected_idx() != size_t(-1)) { + BOOST_LOG_TRIVIAL(info) << boost::format("prefered filaments: size %1%, previous selected %2%") %prefered_filament_profiles.size() % this->filaments.get_selected_idx(); + if (this->filaments.get_selected_idx() != size_t(-1)) + { BOOST_LOG_TRIVIAL(info) << boost::format("previous selected filament: %1%") % this->filaments.get_edited_preset().name; } for (size_t idx = 0; idx < prefered_filament_profiles.size(); ++idx) { BOOST_LOG_TRIVIAL(info) << boost::format("prefered filament: %1%") % prefered_filament_profiles[idx]; } - this->filaments.update_compatible(printer_preset_with_vendor_profile, &print_preset_with_vendor_profile, - select_other_filament_if_incompatible, - PreferedFilamentsProfileMatch(this->filaments.get_selected_idx() == size_t(-1) ? - nullptr : - &this->filaments.get_edited_preset(), - prefered_filament_profiles)); + this->filaments.update_compatible(printer_preset_with_vendor_profile, &print_preset_with_vendor_profile, select_other_filament_if_incompatible, + PreferedFilamentsProfileMatch(this->filaments.get_selected_idx() == size_t(-1) ? nullptr : &this->filaments.get_edited_preset(), prefered_filament_profiles)); if (select_other_filament_if_incompatible != PresetSelectCompatibleType::Never) { // Verify validity of the current filament presets. - const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : - prefered_filament_profiles.front(); + const std::string prefered_filament_profile = prefered_filament_profiles.empty() ? std::string() : prefered_filament_profiles.front(); if (this->filament_presets.size() == 1) { // The compatible profile should have been already selected for the preset editor. Just use it. - if (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible.front()) - this->filament_presets.front() = this->filaments.get_edited_preset().name; + if (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible.front()) + this->filament_presets.front() = this->filaments.get_edited_preset().name; } else { - for (size_t idx = 0; idx < this->filament_presets.size(); ++idx) { - std::string& filament_name = this->filament_presets[idx]; - Preset* preset = this->filaments.find_preset(filament_name, false); - if (preset == nullptr || - (!preset->is_compatible && (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || - filament_preset_was_compatible[idx]))) + for (size_t idx = 0; idx < this->filament_presets.size(); ++ idx) { + std::string &filament_name = this->filament_presets[idx]; + Preset *preset = this->filaments.find_preset(filament_name, false); + if (preset == nullptr || (! preset->is_compatible && (select_other_filament_if_incompatible == PresetSelectCompatibleType::Always || filament_preset_was_compatible[idx]))) // Pick a compatible profile. If there are prefered_filament_profiles, use them. - filament_name = this->filaments - .first_compatible( - PreferedFilamentProfileMatch(preset, (idx < prefered_filament_profiles.size()) ? - prefered_filament_profiles[idx] : - prefered_filament_profile)) - .name; + filament_name = this->filaments.first_compatible( + PreferedFilamentProfileMatch(preset, + (idx < prefered_filament_profiles.size()) ? prefered_filament_profiles[idx] : prefered_filament_profile)).name; } } } - break; + break; } - case ptSLA: { - assert(printer_preset.config.has("default_sla_print_profile")); - assert(printer_preset.config.has("default_sla_material_profile")); - this->sla_prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, - PreferedPrintProfileMatch(this->sla_prints.get_selected_idx() == size_t(-1) ? - nullptr : - &this->sla_prints.get_edited_preset(), - printer_preset.config.opt_string("default_sla_print_profile"))); + case ptSLA: + { + assert(printer_preset.config.has("default_sla_print_profile")); + assert(printer_preset.config.has("default_sla_material_profile")); + this->sla_prints.update_compatible(printer_preset_with_vendor_profile, nullptr, select_other_print_if_incompatible, + PreferedPrintProfileMatch(this->sla_prints.get_selected_idx() == size_t(-1) ? nullptr : &this->sla_prints.get_edited_preset(), printer_preset.config.opt_string("default_sla_print_profile"))); const PresetWithVendorProfile sla_print_preset_with_vendor_profile = this->sla_prints.get_edited_preset_with_vendor_profile(); - this->sla_materials.update_compatible(printer_preset_with_vendor_profile, &sla_print_preset_with_vendor_profile, - select_other_filament_if_incompatible, - PreferedProfileMatch(this->sla_materials.get_selected_idx() == size_t(-1) ? - std::string() : - this->sla_materials.get_edited_preset().alias, - printer_preset.config.opt_string("default_sla_material_profile"))); - break; - } + this->sla_materials.update_compatible(printer_preset_with_vendor_profile, &sla_print_preset_with_vendor_profile, select_other_filament_if_incompatible, + PreferedProfileMatch(this->sla_materials.get_selected_idx() == size_t(-1) ? std::string() : this->sla_materials.get_edited_preset().alias, printer_preset.config.opt_string("default_sla_material_profile"))); + break; + } default: break; } BOOST_LOG_TRIVIAL(info) << boost::format("update_compatibility for all presets exit"); } -std::vector PresetBundle::export_current_configs(const std::string& path, - std::function override_confirm, - bool include_modify, - bool export_system_settings) + +std::vector PresetBundle::export_current_configs(const std::string & path, + std::function override_confirm, + bool include_modify, + bool export_system_settings) { - const Preset& print_preset = include_modify ? prints.get_edited_preset() : prints.get_selected_preset(); - const Preset& printer_preset = include_modify ? printers.get_edited_preset() : printers.get_selected_preset(); - std::set presets{&print_preset, &printer_preset}; - for (auto& f : filament_presets) { + const Preset &print_preset = include_modify ? prints.get_edited_preset() : prints.get_selected_preset(); + const Preset &printer_preset = include_modify ? printers.get_edited_preset() : printers.get_selected_preset(); + std::set presets { &print_preset, &printer_preset }; + for (auto &f : filament_presets) { auto filament_preset = filaments.find_preset(f, include_modify); - if (filament_preset) - presets.insert(filament_preset); + if (filament_preset) presets.insert(filament_preset); } int overwrite = 0; std::vector result; for (auto preset : presets) { - if ((preset->is_system && !export_system_settings) || preset->is_default) + if ((preset->is_system && !export_system_settings) || preset->is_default) continue; std::string file = path + "/" + preset->name + ".json"; - if (overwrite == 0) - overwrite = 1; + if (overwrite == 0) overwrite = 1; if (boost::filesystem::exists(file) && overwrite < 2) { overwrite = override_confirm(preset->name); if (overwrite == 0 || overwrite == 2) @@ -7399,7 +7197,7 @@ std::vector PresetBundle::export_current_configs(const std::string& // Set the filament preset name. As the name could come from the UI selection box, // an optional "(modified)" suffix will be removed from the filament name. -void PresetBundle::set_filament_preset(size_t idx, const std::string& name) +void PresetBundle::set_filament_preset(size_t idx, const std::string &name) { if (idx >= filament_presets.size()) { BOOST_LOG_TRIVIAL(warning) << boost::format("Warning: set_filament_preset out of range %1% - %2%") % idx % filament_presets.size(); @@ -7428,7 +7226,7 @@ bool PresetBundle::has_errors(bool check_duplicate_filament_subtypes) const if (!preset.is_system) continue; // It's per design that the Orca Filament Library can have the empty compatible_printers. - if (preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) + if(preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) continue; auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); if (compatible_printers == nullptr || compatible_printers->values.empty()) { @@ -7451,7 +7249,7 @@ bool PresetBundle::has_errors(bool check_duplicate_filament_subtypes) const // VS Code integrated terminal (Cmd/Ctrl+click) and macOS Terminal.app // (Cmd+double-click); quotes or literal spaces break link detection in both, so // the characters that would terminate the URI token are percent-encoded. -static std::string preset_file_uri(const std::string& file) +static std::string preset_file_uri(const std::string &file) { std::string path; try { @@ -7467,7 +7265,7 @@ static std::string preset_file_uri(const std::string& file) case ' ': uri += "%20"; break; case '#': uri += "%23"; break; case '%': uri += "%25"; break; - default: uri += c; + default: uri += c; } } return uri; @@ -7489,34 +7287,34 @@ bool PresetBundle::check_preset_references() const // Resolve one reference (an inherits parent or a compatible_* entry) against its target // collection and log if it is dangling (unknown) or uses a renamed preset's old name. - auto report_ref = [&](const Preset& p, const std::string& name, const PresetCollection& target, const char* verb, const char* noun) { - const Preset* resolved = target.find_preset(name, false); + auto report_ref = [&](const Preset &p, const std::string &name, const PresetCollection &target, + const char *verb, const char *noun) { + const Preset *resolved = target.find_preset(name, false); if (resolved == nullptr) { found = true; BOOST_LOG_TRIVIAL(error) << "Preset \"" << p.name << "\" " << verb << " unknown " << noun << " \"" << name << "\":\n" << preset_file_uri(p.file); } else if (resolved->name != name) { found = true; - BOOST_LOG_TRIVIAL(error) << "Preset \"" << p.name << "\" " << verb << " renamed " << noun << " \"" << name << "\" (now \"" - << resolved->name << "\"):\n" - << preset_file_uri(p.file); + BOOST_LOG_TRIVIAL(error) << "Preset \"" << p.name << "\" " << verb << " renamed " << noun << " \"" << name + << "\" (now \"" << resolved->name << "\"):\n" << preset_file_uri(p.file); } }; - auto check_list = [&](const Preset& p, const char* key, const PresetCollection& target) { - const auto* opt = p.config.option(key); + auto check_list = [&](const Preset &p, const char *key, const PresetCollection &target) { + const auto *opt = p.config.option(key); if (opt == nullptr) return; - for (const std::string& name : opt->values) + for (const std::string &name : opt->values) if (!name.empty()) report_ref(p, name, target, "references", key); }; - auto check_collection = [&](const PresetCollection& holders, const PresetCollection* processes) { - for (const Preset& p : holders) { + auto check_collection = [&](const PresetCollection &holders, const PresetCollection *processes) { + for (const Preset &p : holders) { if (!p.is_system) continue; - if (const std::string& inh = p.inherits(); !inh.empty()) + if (const std::string &inh = p.inherits(); !inh.empty()) report_ref(p, inh, holders, "inherits", "parent"); check_list(p, "compatible_printers", this->printers); if (processes != nullptr) @@ -7526,10 +7324,10 @@ bool PresetBundle::check_preset_references() const // Printers carry no compatible_printers/compatible_prints (those name a printer, so a printer // holding them makes no sense); check_list is a no-op for them, so only their inherits is checked. - check_collection(this->printers, nullptr); - check_collection(this->prints, nullptr); - check_collection(this->filaments, &this->prints); - check_collection(this->sla_prints, nullptr); + check_collection(this->printers, nullptr); + check_collection(this->prints, nullptr); + check_collection(this->filaments, &this->prints); + check_collection(this->sla_prints, nullptr); check_collection(this->sla_materials, &this->sla_prints); return found; @@ -7547,15 +7345,15 @@ bool PresetBundle::check_duplicate_filament_subtypes() const // printer against its own vendor's filaments. A vendor's compatible_printers // only names that vendor's printers, so same-vendor scoping is correctness // preserving and avoids an O(all printers x all filaments) sweep. - std::map> filaments_by_vendor; - for (const auto& preset : filaments) { + std::map> filaments_by_vendor; + for (const auto &preset : filaments) { if (!preset.is_system || preset.filament_id.empty() || preset.vendor == nullptr) continue; filaments_by_vendor[preset.vendor->name].push_back(&preset); } bool found_duplicates = false; - for (const auto& printer : printers) { + for (const auto &printer : printers) { if (!printer.is_system || printer.vendor == nullptr) continue; auto vendor_it = filaments_by_vendor.find(printer.vendor->name); @@ -7564,39 +7362,40 @@ bool PresetBundle::check_duplicate_filament_subtypes() const 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) + std::map> by_filament_id; + for (const Preset *fil : vendor_it->second) 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) { + for (const auto &entry : by_filament_id) { if (entry.second.size() < 2) continue; 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. std::string presets; - for (const Preset* p : entry.second) + for (const Preset *p : entry.second) presets += "\n - " + p->name + "\n " + preset_file_uri(p->file); - BOOST_LOG_TRIVIAL(error) << "Ambiguous AMS filament match: " << entry.second.size() << " filament presets share filament_id \"" - << entry.first << "\" and are all compatible with printer \"" << printer.name - << "\". When matching an AMS spool the slicer cannot tell them apart and" - " silently picks whichever loads first." - << presets; + BOOST_LOG_TRIVIAL(error) + << "Ambiguous AMS filament match: " << entry.second.size() + << " filament presets share filament_id \"" << entry.first + << "\" and are all compatible with printer \"" << printer.name + << "\". When matching an AMS spool the slicer cannot tell them apart and" + " silently picks whichever loads first." << presets; } } // Print the troubleshooting guidance once, not per error, to keep the log readable. if (found_duplicates) BOOST_LOG_TRIVIAL(error) << "\n========================================\n" - << "How to fix \"Ambiguous AMS filament match\" errors: make sure only ONE filament" - " preset with a given filament_id is compatible with each printer. Either" - "\n (a) remove the overlapping printer from a preset's \"compatible_printers\"" - " list (e.g. a '@printer' preset over-claiming a nozzle that already has its own" - " '@printer 0.x nozzle' preset), or" - "\n (b) if these are genuinely different materials, give each its own" - " \"filament_id\" - a common cause is a wrong \"inherits\" pointing at another" - " material's @base preset."; + << "How to fix \"Ambiguous AMS filament match\" errors: make sure only ONE filament" + " preset with a given filament_id is compatible with each printer. Either" + "\n (a) remove the overlapping printer from a preset's \"compatible_printers\"" + " list (e.g. a '@printer' preset over-claiming a nozzle that already has its own" + " '@printer 0.x nozzle' preset), or" + "\n (b) if these are genuinely different materials, give each its own" + " \"filament_id\" - a common cause is a wrong \"inherits\" pointing at another" + " material's @base preset."; return found_duplicates; } @@ -7612,39 +7411,30 @@ bool BundleMetadata::load_from_json(const std::string& path) json j; ifs >> j; - if (j.contains("id")) - this->id = j["id"].get(); + if (j.contains("id")) this->id = j["id"].get(); - if (j.contains("name")) - this->name = j["name"].get(); - else if (j.contains("bundle_id")) - this->name = j["bundle_id"].get(); // backwards compat w bundle_structure.json + if (j.contains("name")) this->name = j["name"].get(); + else if (j.contains("bundle_id")) this->name = j["bundle_id"].get(); // backwards compat w bundle_structure.json - if (j.contains("version")) - this->version = j["version"].get(); + if (j.contains("version")) this->version = j["version"].get(); - if (j.contains("description")) - this->description = j["description"].get(); - else if (j.contains("bundle_type")) - this->description = j["bundle_type"].get(); // backwards compat w bundle_structure.json + if (j.contains("description")) this->description = j["description"].get(); + else if (j.contains("bundle_type")) this->description = j["bundle_type"].get(); // backwards compat w bundle_structure.json - if (j.contains("author")) - this->author = j["author"].get(); + if (j.contains("author")) this->author = j["author"].get(); - if (j.contains("imported_time")) - this->imported_time = j["imported_time"].get(); + if (j.contains("imported_time")) this->imported_time = j["imported_time"].get(); - if (j.contains("updated_time")) - this->updated_time = j["updated_time"].get(); + if (j.contains("updated_time")) this->updated_time = j["updated_time"].get(); - if (j.contains("print_presets")) - this->print_presets = j["print_presets"].get>(); - - if (j.contains("filament_presets")) - this->filament_presets = j["filament_presets"].get>(); - - if (j.contains("printer_presets")) - this->printer_presets = j["printer_presets"].get>(); + if (j.contains("print_presets")) + this->print_presets = j["print_presets"].get>(); + + if (j.contains("filament_presets")) + this->filament_presets = j["filament_presets"].get>(); + + if (j.contains("printer_presets")) + this->printer_presets = j["printer_presets"].get>(); return true; } catch (const std::exception& e) { @@ -7656,26 +7446,27 @@ bool BundleMetadata::load_from_json(const std::string& path) bool BundleMetadata::save_to_json(const std::string& path) const { auto strip_prefix = [](const std::vector& names) { - json arr = json::array(); - for (const auto& name : names) { - arr.push_back(boost::filesystem::path(name).filename().string()); - std::string test = boost::filesystem::path(name).filename().string(); - } - return arr; - }; + json arr = json::array(); + for (const auto& name : names) + { + arr.push_back(boost::filesystem::path(name).filename().string()); + std::string test = boost::filesystem::path(name).filename().string(); + } + return arr; + }; try { json j; - j["id"] = this->id; - j["name"] = this->name; - j["version"] = this->version; - j["description"] = this->description; - j["author"] = this->author; + j["id"] = this->id; + j["name"] = this->name; + j["version"] = this->version; + j["description"] = this->description; + j["author"] = this->author; j["imported_time"] = this->imported_time; - j["updated_time"] = this->updated_time; + j["updated_time"] = this->updated_time; - j["print_presets"] = strip_prefix(this->print_presets); - j["filament_presets"] = strip_prefix(this->filament_presets); - j["printer_presets"] = strip_prefix(this->printer_presets); + j["print_presets"] = strip_prefix(this->print_presets); + j["filament_presets"] = strip_prefix(this->filament_presets); + j["printer_presets"] = strip_prefix(this->printer_presets); boost::nowide::ofstream ofs(path); ofs << j.dump(4); @@ -7696,14 +7487,13 @@ bool PresetBundle::load_vendor_cache(const boost::filesystem::path& dir, const s // of the installation, against nothing, since nothing on disk can then be // newer than it. That state is Semver::inf(), which no real profile carries. const boost::filesystem::path profile = dir / (vendor_name + ".json"); - const Semver version = boost::filesystem::exists(profile) ? get_version_from_json(profile.string()) : Semver::inf(); + const Semver version = boost::filesystem::exists(profile) ? get_version_from_json(profile.string()) + : Semver::inf(); return this->load_vendor_cache((dir / (vendor_name + ".opc")).string(), vendor_name, version, base_bundle); } -bool PresetBundle::load_vendor_cache(const std::string& cache_path, - const std::string& expected_vendor_name, - const Semver& expected_vendor_version, - const PresetBundle* base_bundle) +bool PresetBundle::load_vendor_cache(const std::string& cache_path, const std::string& expected_vendor_name, + const Semver& expected_vendor_version, const PresetBundle* base_bundle) { // What this bundle had counted before the cache was tried. The caller // measures its own parse against this same baseline, so a rejection must @@ -7712,11 +7502,11 @@ bool PresetBundle::load_vendor_cache(const std::string& cache_path, // Read and validated before this bundle is touched: a rejected file leaves // no state to roll back. VendorCacheData data; - if (!VendorCacheFile::load(cache_path, expected_vendor_name, expected_vendor_version, data)) + if (! VendorCacheFile::load(cache_path, expected_vendor_name, expected_vendor_version, data)) return false; try { - const std::string& vendor_name = expected_vendor_name; // VendorCacheFile::load checked they match - this->vendors = std::move(data.vendors); + const std::string& vendor_name = expected_vendor_name; // VendorCacheFile::load checked they match + this->vendors = std::move(data.vendors); // What the parse counted before install took over; install recounts its // own below, so m_errors comes out as a JSON parse would leave it. @@ -7726,13 +7516,13 @@ bool PresetBundle::load_vendor_cache(const std::string& cache_path, // them straight after parsing — same code, same order. The substitution // context stays empty (the entries were substituted when they were // parsed), so no substitutions are reported, as before. - ConfigSubstitutionContext substitution_context{ForwardCompatibilitySubstitutionRule::EnableSilent}; + ConfigSubstitutionContext substitution_context { ForwardCompatibilitySubstitutionRule::EnableSilent }; PresetsConfigSubstitutions substitutions; std::map configs; std::map filament_id_maps; const std::string path = boost::filesystem::path(cache_path).parent_path().string(); - size_t count = 0; - auto install_entries = [&](const std::vector& entries, PresetCollection* presets, bool is_from_lib) { + size_t count = 0; + auto install_entries = [&](const std::vector& entries, PresetCollection* presets, bool is_from_lib) { configs.clear(); filament_id_maps.clear(); // Only configs of presets that other entries inherit are ever looked @@ -7741,14 +7531,14 @@ bool PresetBundle::load_vendor_cache(const std::string& cache_path, // become the m_config_maps other vendors resolve against. std::set inherited; for (const CachedPreset& entry : entries) - if (!entry.inherits.empty()) + if (! entry.inherits.empty()) inherited.insert(entry.inherits); const std::set* retain_configs = is_from_lib ? nullptr : &inherited; for (const CachedPreset& entry : entries) { - const std::string reason = load_vendor_preset(entry, path, vendor_name, base_bundle, LoadConfigBundleAttribute::LoadSystem, - substitution_context, substitutions, configs, filament_id_maps, presets, - count, is_from_lib, retain_configs); - if (!reason.empty()) + const std::string reason = load_vendor_preset(entry, path, vendor_name, + base_bundle, LoadConfigBundleAttribute::LoadSystem, substitution_context, substitutions, + configs, filament_id_maps, presets, count, is_from_lib, retain_configs); + if (! reason.empty()) throw std::runtime_error("entry " + entry.name + " failed to install: " + reason); } }; diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp index c4c71f9436..6d28cc0af3 100644 --- a/src/libslic3r/PublishSettings.cpp +++ b/src/libslic3r/PublishSettings.cpp @@ -19,6 +19,27 @@ std::string publish_base_key(const std::string &key) return pos == std::string::npos ? key : key.substr(0, pos); } +// Parse the trailing "#N" variant index ("retraction_length#2" -> 2). Returns -1 when the key +// carries no '#' separator or its suffix is malformed; mirrors the importer's strict parse +// (PresetBundle.cpp) so the export side rejects the same variants the receiver would skip. +static int publish_variant_index(const std::string &key, const std::string &base_key) +{ + if (key.size() <= base_key.size() || key.compare(0, base_key.size(), base_key) != 0 || key[base_key.size()] != '#') + return -1; + const std::string suffix = key.substr(base_key.size() + 1); + if (suffix.empty()) + return -1; + int idx = 0; + for (const char c : suffix) { + if (c < '0' || c > '9') + return -1; + idx = idx * 10 + (c - '0'); + if (idx > 1000000) // overflow guard; real vector sizes are tiny + return -1; + } + return idx; +} + std::string normalize_filament_type(const std::string& type) { if (type.empty()) @@ -174,8 +195,8 @@ DynamicPrintConfig filter_published_config( DynamicPrintConfig filtered; std::set base_keys_to_include; - // Never masked (whole-vector serialization): identity, plate geometry and process/printer - // keys. + // Never masked (whole-vector serialization): identity, plate geometry, process keys and + // printer keys without a "#N" variant. std::set mask_exempt_keys; // Material entries: base key -> author slots whose values must survive; other slots are // masked to their defaults so a publish (partial or full) does not leak unrelated slot @@ -209,12 +230,23 @@ DynamicPrintConfig filter_published_config( mask_exempt_keys.insert(key); } - // 3. Process and printer published keys + // 3. Process and printer published keys. Printer per-extruder keys carry a "#N" variant + // (e.g. retraction_length#2): mask the base to the author's extruder index so a partial + // publish does not serialize every extruder's value (same slot-masking as the material side). + const std::set &printer_keys = publishable_printer_keys(); for (const std::string &key : published_keys) { const std::string base_key = publish_base_key(key); - if (!base_key.empty()) { - base_keys_to_include.insert(base_key); - mask_exempt_keys.insert(base_key); + if (base_key.empty()) + continue; + base_keys_to_include.insert(base_key); + if (printer_keys.count(base_key) != 0) { + const int variant_idx = publish_variant_index(key, base_key); + if (variant_idx >= 0) + slot_mask_map[base_key].insert(variant_idx); + else + mask_exempt_keys.insert(base_key); // bare printer key or malformed variant: whole vector + } else { + mask_exempt_keys.insert(base_key); // process key: whole vector } } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 044771bf7c..2ee875901c 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -3343,17 +3343,7 @@ size_t NotificationManager::get_notification_count() const void NotificationManager::bbl_show_plateinfo_notification(const std::string &text) { NotificationData data{NotificationType::BBLPlateInfo, NotificationLevel::PrintInfoNotificationLevel, BBL_NOTICE_MAX_INTERVAL, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBLPlateInfo) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + push_notification_data(data, 0); } void NotificationManager::bbl_close_3mf_warn_notification() @@ -3367,17 +3357,7 @@ void NotificationManager::bbl_close_3mf_warn_notification() void NotificationManager::bbl_show_3mf_warn_notification(const std::string &text, NotificationLevel level) { NotificationData data{NotificationType::BBL3MFInfo, level, BBL_NOTICE_MAX_INTERVAL, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBL3MFInfo) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + push_notification_data(data, 0); } void NotificationManager::bbl_close_plateinfo_notification() @@ -3392,17 +3372,7 @@ void NotificationManager::bbl_close_plateinfo_notification() void NotificationManager::bbl_show_preview_only_notification(const std::string &text) { NotificationData data{NotificationType::BBLPreviewOnlyMode, NotificationLevel::WarningNotificationLevel, 0, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBLPreviewOnlyMode) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + push_notification_data(data, 0); } void NotificationManager::bbl_close_preview_only_notification() diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index 55d10dd95c..cb65524dac 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -1083,7 +1083,10 @@ private: NotificationType::ProgressBar, NotificationType::PrintHostUpload, NotificationType::SimplifySuggestion, - NotificationType::ValidateWarning + NotificationType::ValidateWarning, + // A published file load can produce several distinct 3MF warnings (invalid values, + // skipped settings, changed slots); let them stack rather than clobber each other. + NotificationType::BBL3MFInfo }; //prepared (basic) notifications // non-static so its not loaded too early. If static, the translations wont load correctly. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 86f3626eaa..0d2c5ac4c9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -61,7 +61,7 @@ #include "libslic3r/Format/DRC.hpp" #include "libslic3r/Format/STEP.hpp" #include "libslic3r/Format/AMF.hpp" -// #include "libslic3r/Format/3mf.hpp" +//#include "libslic3r/Format/3mf.hpp" #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Model.hpp" @@ -128,11 +128,11 @@ #include "NotificationManager.hpp" #include "PresetComboBoxes.hpp" #include "MsgDialog.hpp" -#include "Widgets/MultiNozzleSync.hpp" // NozzleOption, tryPopUpMultiNozzleDialog, setExtruderNozzleCount -#include "DeviceCore/DevNozzleSystem.h" // DevNozzle, GetExtNozzles / GetRackNozzles +#include "Widgets/MultiNozzleSync.hpp" // NozzleOption, tryPopUpMultiNozzleDialog, setExtruderNozzleCount +#include "DeviceCore/DevNozzleSystem.h" // DevNozzle, GetExtNozzles / GetRackNozzles #include "ProjectDirtyStateManager.hpp" #include "Gizmos/GLGizmoSimplify.hpp" // create suggestion notification -#include "Gizmos/GLGizmoSVG.hpp" // Drop SVG file +#include "Gizmos/GLGizmoSVG.hpp" // Drop SVG file #include "Gizmos/GizmoObjectManipulation.hpp" // BBS @@ -155,7 +155,7 @@ #endif // __APPLE__ #include -#include // Needs to be last because reasons :-/ +#include // Needs to be last because reasons :-/ #include #include "WipeTowerDialog.hpp" #include "MixedFilamentDialog.hpp" @@ -195,9 +195,10 @@ using Slic3r::Preset; using Slic3r::GUI::format_wxstr; using namespace nlohmann; -static const std::pair THUMBNAIL_SIZE_3MF = {512, 512}; +static const std::pair THUMBNAIL_SIZE_3MF = { 512, 512 }; -namespace Slic3r { namespace GUI { +namespace Slic3r { +namespace GUI { // A textured mesh is only worth routing through the import dialog when it actually carries // decoded image data; UV-only meshes have nothing to sample. @@ -210,37 +211,37 @@ static bool has_importable_texture(const Slic3r::TexturedMesh& textured_mesh) return true; return std::any_of(textured_mesh.textures.begin(), textured_mesh.textures.end(), - [](const Slic3r::TextureImage& texture) { return !texture.data.empty(); }); + [](const Slic3r::TextureImage& texture) { return !texture.data.empty(); }); } -wxDEFINE_EVENT(EVT_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); -wxDEFINE_EVENT(EVT_SLICING_UPDATE, SlicingStatusEvent); -wxDEFINE_EVENT(EVT_SLICING_COMPLETED, wxCommandEvent); -wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, SlicingProcessCompletedEvent); -wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent); -wxDEFINE_EVENT(EVT_EXPORT_FINISHED, wxCommandEvent); -wxDEFINE_EVENT(EVT_IMPORT_MODEL_ID, wxCommandEvent); -wxDEFINE_EVENT(EVT_DOWNLOAD_PROJECT, wxCommandEvent); -wxDEFINE_EVENT(EVT_PUBLISH, wxCommandEvent); -wxDEFINE_EVENT(EVT_OPEN_PLATESETTINGSDIALOG, wxCommandEvent); +wxDEFINE_EVENT(EVT_SCHEDULE_BACKGROUND_PROCESS, SimpleEvent); +wxDEFINE_EVENT(EVT_SLICING_UPDATE, SlicingStatusEvent); +wxDEFINE_EVENT(EVT_SLICING_COMPLETED, wxCommandEvent); +wxDEFINE_EVENT(EVT_PROCESS_COMPLETED, SlicingProcessCompletedEvent); +wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent); +wxDEFINE_EVENT(EVT_EXPORT_FINISHED, wxCommandEvent); +wxDEFINE_EVENT(EVT_IMPORT_MODEL_ID, wxCommandEvent); +wxDEFINE_EVENT(EVT_DOWNLOAD_PROJECT, wxCommandEvent); +wxDEFINE_EVENT(EVT_PUBLISH, wxCommandEvent); +wxDEFINE_EVENT(EVT_OPEN_PLATESETTINGSDIALOG, wxCommandEvent); wxDEFINE_EVENT(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG, wxCommandEvent); // BBS: backup & restore -wxDEFINE_EVENT(EVT_RESTORE_PROJECT, wxCommandEvent); -wxDEFINE_EVENT(EVT_PRINT_FINISHED, wxCommandEvent); -wxDEFINE_EVENT(EVT_SEND_CALIBRATION_FINISHED, wxCommandEvent); -wxDEFINE_EVENT(EVT_SEND_FINISHED, wxCommandEvent); -wxDEFINE_EVENT(EVT_PUBLISH_FINISHED, wxCommandEvent); -// BBS: repair model -wxDEFINE_EVENT(EVT_REPAIR_MODEL, wxCommandEvent); -wxDEFINE_EVENT(EVT_FILAMENT_COLOR_CHANGED, wxCommandEvent); -wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_NETWORKING, wxCommandEvent); -wxDEFINE_EVENT(EVT_UPDATE_PLUGINS_WHEN_LAUNCH, wxCommandEvent); -wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_HINT, wxCommandEvent); -wxDEFINE_EVENT(EVT_PREVIEW_ONLY_MODE_HINT, wxCommandEvent); -// BBS: change light/dark mode -wxDEFINE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent); -// BBS: print -wxDEFINE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); +wxDEFINE_EVENT(EVT_RESTORE_PROJECT, wxCommandEvent); +wxDEFINE_EVENT(EVT_PRINT_FINISHED, wxCommandEvent); +wxDEFINE_EVENT(EVT_SEND_CALIBRATION_FINISHED, wxCommandEvent); +wxDEFINE_EVENT(EVT_SEND_FINISHED, wxCommandEvent); +wxDEFINE_EVENT(EVT_PUBLISH_FINISHED, wxCommandEvent); +//BBS: repair model +wxDEFINE_EVENT(EVT_REPAIR_MODEL, wxCommandEvent); +wxDEFINE_EVENT(EVT_FILAMENT_COLOR_CHANGED, wxCommandEvent); +wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_NETWORKING, wxCommandEvent); +wxDEFINE_EVENT(EVT_UPDATE_PLUGINS_WHEN_LAUNCH, wxCommandEvent); +wxDEFINE_EVENT(EVT_INSTALL_PLUGIN_HINT, wxCommandEvent); +wxDEFINE_EVENT(EVT_PREVIEW_ONLY_MODE_HINT, wxCommandEvent); +//BBS: change light/dark mode +wxDEFINE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent); +//BBS: print +wxDEFINE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); wxDEFINE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent); wxDEFINE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent); @@ -250,31 +251,32 @@ wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); wxDEFINE_EVENT(EVT_NOTICE_CHILDE_SIZE_CHANGED, SimpleEvent); wxDEFINE_EVENT(EVT_NOTICE_FULL_SCREEN_CHANGED, IntEvent); #define PRINTER_THUMBNAIL_SIZE (wxSize(40, 40)) // ORCA -#define PRINTER_PANEL_SIZE (wxSize(70, 60)) // ORCA -#define PRINTER_PANEL_RADIUS (6) // ORCA +#define PRINTER_PANEL_SIZE ( wxSize(70, 60)) // ORCA +#define PRINTER_PANEL_RADIUS (6) // ORCA #define BTN_SYNC_SIZE (wxSize(FromDIP(96), FromDIP(98))) static string get_diameter_string(float diameter) { std::ostringstream stream; // ORCA ensure 0.25 returned as 0.25. previous code returned as 0.2 because of std::setprecision(1) - stream << std::fixed << std::setprecision(2) << diameter; // Use 2 decimals to capture 0.25 / 0.15 reliably + stream << std::fixed << std::setprecision(2) << diameter; // Use 2 decimals to capture 0.25 / 0.15 reliably std::string s = stream.str(); - if (s.find('.') != std::string::npos) { // Remove trailing zeros, but keep at least one decimal if needed + if (s.find('.') != std::string::npos) { // Remove trailing zeros, but keep at least one decimal if needed s.erase(s.find_last_not_of('0') + 1); - if (s.back() == '.') - s += '0'; // Ensure "1." → "1.0" + if (s.back() == '.') s += '0'; // Ensure "1." → "1.0" } return s; } -template static void set_config_values(DynamicPrintConfig* config, const std::string& key, T value) +template +static void set_config_values(DynamicPrintConfig *config, const std::string &key, T value) { auto config_opt = config->option(key); if (config_opt) { for (size_t i = 0; i < config_opt->values.size(); ++i) { config_opt->values[i] = value; } - } else { + } + else { BOOST_LOG_TRIVIAL(info) << "set_config_values: the key" << key << "is empty."; } } @@ -296,22 +298,36 @@ bool Plater::has_illegal_filename_characters(const std::string& name) } void Plater::show_illegal_characters_warning(wxWindow* parent) -{ show_error(parent, _L("Invalid name, the following characters are not allowed:") + " <>:/\\|?*\""); } +{ + show_error(parent, _L("Invalid name, the following characters are not allowed:") + " <>:/\\|?*\""); +} -void Plater::mark_plate_toolbar_image_dirty() { m_b_plate_toolbar_image_dirty = true; } +void Plater::mark_plate_toolbar_image_dirty() +{ + m_b_plate_toolbar_image_dirty = true; +} -bool Plater::is_plate_toolbar_image_dirty() const { return m_b_plate_toolbar_image_dirty; } +bool Plater::is_plate_toolbar_image_dirty() const +{ + return m_b_plate_toolbar_image_dirty; +} -void Plater::clear_plate_toolbar_image_dirty() { m_b_plate_toolbar_image_dirty = false; } +void Plater::clear_plate_toolbar_image_dirty() +{ + m_b_plate_toolbar_image_dirty = false; +} -static std::map bed_type_thumbnails = {{BedType::btPC, "bed_cool"}, - {BedType::btEP, "bed_engineering"}, - {BedType::btPEI, "bed_high_templ"}, - {BedType::btPTE, "bed_pei"}, - {BedType::btPCT, "bed_pei_cool"}, - {BedType::btSuperTack, "bed_cool_supertack"}}; +static std::map bed_type_thumbnails = { + {BedType::btPC, "bed_cool" }, + {BedType::btEP, "bed_engineering" }, + {BedType::btPEI, "bed_high_templ" }, + {BedType::btPTE, "bed_pei" }, + {BedType::btPCT, "bed_pei_cool" }, + {BedType::btSuperTack, "bed_cool_supertack" } +}; -enum SlicedInfoIdx { +enum SlicedInfoIdx +{ siFilament_m, siFilament_mm3, siFilament_g, @@ -331,30 +347,37 @@ enum class LoadFilesType { Multiple3MFOther, }; -enum class LoadType : unsigned char { Unknown, OpenProject, LoadGeometry, LoadConfig }; +enum class LoadType : unsigned char +{ + Unknown, + OpenProject, + LoadGeometry, + LoadConfig +}; class SlicedInfo : public wxStaticBoxSizer { public: - SlicedInfo(wxWindow* parent); - void SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label = ""); + SlicedInfo(wxWindow *parent); + void SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label=""); private: std::vector> info_vec; }; -SlicedInfo::SlicedInfo(wxWindow* parent) : wxStaticBoxSizer(new wxStaticBox(parent, wxID_ANY, _L("Sliced Info")), wxVERTICAL) +SlicedInfo::SlicedInfo(wxWindow *parent) : + wxStaticBoxSizer(new wxStaticBox(parent, wxID_ANY, _L("Sliced Info")), wxVERTICAL) { GetStaticBox()->SetFont(wxGetApp().bold_font()); wxGetApp().UpdateDarkUI(GetStaticBox()); - auto* grid_sizer = new wxFlexGridSizer(2, 5, 15); + auto *grid_sizer = new wxFlexGridSizer(2, 5, 15); grid_sizer->SetFlexibleDirection(wxVERTICAL); info_vec.reserve(siCount); auto init_info_label = [this, parent, grid_sizer](wxString text_label) { - auto* text = new wxStaticText(parent, wxID_ANY, text_label); + auto *text = new wxStaticText(parent, wxID_ANY, text_label); text->SetForegroundColour(*wxBLACK); text->SetFont(wxGetApp().small_font()); auto info_label = new wxStaticText(parent, wxID_ANY, "N/A"); @@ -377,7 +400,7 @@ SlicedInfo::SlicedInfo(wxWindow* parent) : wxStaticBoxSizer(new wxStaticBox(pare this->Show(false); } -void SlicedInfo::SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label /*=""*/) +void SlicedInfo::SetTextAndShow(SlicedInfoIdx idx, const wxString& text, const wxString& new_label/*=""*/) { const bool show = text != "N/A"; if (show) @@ -402,8 +425,9 @@ wxString sanitize_window_layout_for_wayland(const wxString& layout, bool* remove } static const std::regex state_pattern(R"(state=(\d+);)"); - constexpr unsigned int disabled_wayland_flags = static_cast(wxAuiPaneInfo::optionFloating) | - static_cast(wxAuiPaneInfo::optionFloatable); + constexpr unsigned int disabled_wayland_flags = + static_cast(wxAuiPaneInfo::optionFloating) | + static_cast(wxAuiPaneInfo::optionFloatable); const std::string input = layout.utf8_string(); std::string output; @@ -417,9 +441,9 @@ wxString sanitize_window_layout_for_wayland(const wxString& layout, bool* remove output.append(search_start, match[0].first); try { - const unsigned long state = std::stoul(match[1].str()); + const unsigned long state = std::stoul(match[1].str()); const unsigned long sanitized_state = state & ~static_cast(disabled_wayland_flags); - modified = modified || sanitized_state != state; + modified = modified || sanitized_state != state; output += "state=" + std::to_string(sanitized_state) + ";"; } catch (const std::exception&) { @@ -442,7 +466,11 @@ wxString sanitize_window_layout_for_wayland(const wxString& layout, bool* remove // Sidebar / private -enum class ActionButtonType : int { abReslice, abExport, abSendGCode }; +enum class ActionButtonType : int { + abReslice, + abExport, + abSendGCode +}; // Background for the extruder-group title chip and its edit buttons, matching the StaticGroup // interior. macOS keeps a lighter #F7F7F7 tint in light mode; dark mode uses the mapped colour. @@ -461,7 +489,7 @@ static wxColour extruder_group_chip_bg() class HoverLabel : public wxPanel { public: - HoverLabel(wxWindow* parent, const wxString& label) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) + HoverLabel(wxWindow *parent, const wxString &label) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) { SetBackgroundColour(extruder_group_chip_bg()); auto sizer = new wxBoxSizer(wxHORIZONTAL); @@ -488,7 +516,7 @@ public: m_hover_btn = new ScalableButton(this, wxID_ANY, "dot"); m_hover_btn->SetMinSize(wxSize(FromDIP(25), -1)); m_hover_btn->SetBackgroundColour(extruder_group_chip_bg()); - m_hover_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto& evt) { + m_hover_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (m_enabled && m_hover_on_click) m_hover_on_click(); }); @@ -529,7 +557,7 @@ public: UpdateSizing(); } - void SetTitle(const wxString& title) + void SetTitle(const wxString &title) { m_label->SetLabel(title); UpdateSizing(); @@ -542,7 +570,7 @@ public: { SetBackgroundColour(extruder_group_chip_bg()); m_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); - for (wxStaticText* t : {m_brace_left, m_count, m_brace_right}) + for (wxStaticText *t : {m_brace_left, m_count, m_brace_right}) t->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); m_hover_btn->SetBackgroundColour(extruder_group_chip_bg()); Refresh(); @@ -560,36 +588,36 @@ private: GetParent()->Layout(); } - wxStaticText* m_label; - wxStaticText* m_brace_left; - wxStaticText* m_count; - wxStaticText* m_brace_right; - ScalableButton* m_hover_btn; + wxStaticText *m_label; + wxStaticText *m_brace_left; + wxStaticText *m_count; + wxStaticText *m_brace_right; + ScalableButton *m_hover_btn; std::function m_hover_on_click; - bool m_enabled{false}; + bool m_enabled{false}; }; struct ExtruderGroup : StaticGroup { - ExtruderGroup(wxWindow* parent, int index, wxString const& title); - wxStaticBoxSizer* sizer = nullptr; - HoverLabel* hover_label = nullptr; - ScalableButton* btn_edit = nullptr; - ComboBox* combo_diameter = nullptr; - ComboBox* combo_flow = nullptr; - AMSPreview* ams[4] = {nullptr}; - wxStaticText* ams_not_installed_msg{nullptr}; - ScalableButton* btn_up{nullptr}; - ScalableButton* btn_down{nullptr}; - wxBoxSizer* hsizer_ams{nullptr}; - size_t page_cur{0}; - size_t page_num{3}; - size_t ams_n4 = 0; - size_t ams_n1 = 0; + ExtruderGroup(wxWindow * parent, int index, wxString const &title); + wxStaticBoxSizer *sizer = nullptr; + HoverLabel * hover_label = nullptr; + ScalableButton * btn_edit = nullptr; + ComboBox * combo_diameter = nullptr; + ComboBox * combo_flow = nullptr; + AMSPreview * ams[4] = {nullptr}; + wxStaticText *ams_not_installed_msg{nullptr}; + ScalableButton * btn_up{nullptr}; + ScalableButton * btn_down{nullptr}; + wxBoxSizer *hsizer_ams { nullptr }; + size_t page_cur{0}; + size_t page_num{3}; + size_t ams_n4 = 0; + size_t ams_n1 = 0; std::vector ams_4; std::vector ams_1; - wxString diameter; + wxString diameter; void set_ams_count(int n4, int n1) { @@ -604,23 +632,11 @@ struct ExtruderGroup : StaticGroup void update_ams(); void SetTitle(const wxString& title); - void SetCount(int count) - { - if (hover_label) - hover_label->SetCount(count); - } - void SetEditEnabled(bool enable) - { - if (hover_label) - hover_label->EnableEdit(enable); - } - void SetOnHoverClick(std::function on_click) - { - if (hover_label) - hover_label->SetOnHoverClick(std::move(on_click)); - } + void SetCount(int count) { if (hover_label) hover_label->SetCount(count); } + void SetEditEnabled(bool enable) { if (hover_label) hover_label->EnableEdit(enable); } + void SetOnHoverClick(std::function on_click) { if (hover_label) hover_label->SetOnHoverClick(std::move(on_click)); } - void sync_ams(MachineObject const* obj, std::vector const& ams4, std::vector const& ams1); + void sync_ams(MachineObject const *obj, std::vector const &ams4, std::vector const &ams1); void Rescale() { @@ -648,70 +664,70 @@ struct ExtruderGroup : StaticGroup struct Sidebar::priv { - Plater* plater; + Plater *plater; - wxPanel* scrolled = nullptr; - PlaterPresetComboBox* combo_sla_print = nullptr; - PlaterPresetComboBox* combo_sla_material = nullptr; + wxPanel *scrolled = nullptr; + PlaterPresetComboBox *combo_sla_print = nullptr; + PlaterPresetComboBox *combo_sla_material = nullptr; // Printer - wxSizer* vsizer_printer = nullptr; - wxBoxSizer* extruder_dual_sizer = nullptr; - wxBoxSizer* extruder_single_sizer = nullptr; + wxSizer * vsizer_printer = nullptr; + wxBoxSizer * extruder_dual_sizer = nullptr; + wxBoxSizer * extruder_single_sizer = nullptr; // Printer - preset - StaticBox* panel_printer_preset = nullptr; - wxStaticBitmap* image_printer = nullptr; - PlaterPresetComboBox* combo_printer = nullptr; - ScalableButton* btn_edit_printer = nullptr; - ScalableButton* btn_connect_printer = nullptr; + StaticBox * panel_printer_preset = nullptr; + wxStaticBitmap * image_printer = nullptr; + PlaterPresetComboBox *combo_printer = nullptr; + ScalableButton * btn_edit_printer = nullptr; + ScalableButton * btn_connect_printer = nullptr; // Nozzle diameter - StaticBox* panel_nozzle_dia = nullptr; - Label* label_nozzle_title = nullptr; - ComboBox* combo_nozzle_dia = nullptr; - Label* label_nozzle_type = nullptr; + StaticBox * panel_nozzle_dia = nullptr; + Label * label_nozzle_title= nullptr; + ComboBox * combo_nozzle_dia = nullptr; + Label * label_nozzle_type = nullptr; // Printer - bed - StaticBox* panel_printer_bed = nullptr; - wxStaticBitmap* image_printer_bed = nullptr; - ComboBox* combo_printer_bed = nullptr; + StaticBox * panel_printer_bed = nullptr; + wxStaticBitmap *image_printer_bed = nullptr; + ComboBox * combo_printer_bed = nullptr; - ImageDPIFrame* big_bed_image_popup = nullptr; + ImageDPIFrame *big_bed_image_popup = nullptr; // Printer - sync - // Button *btn_sync_printer; + //Button *btn_sync_printer; std::shared_ptr counter_sync_printer = std::make_shared(); - wxTimer* timer_sync_printer = new wxTimer(); + wxTimer * timer_sync_printer = new wxTimer(); // Printer - ams - ExtruderGroup* left_extruder = nullptr; - ExtruderGroup* right_extruder = nullptr; - ExtruderGroup* single_extruder = nullptr; + ExtruderGroup *left_extruder = nullptr; + ExtruderGroup *right_extruder = nullptr; + ExtruderGroup *single_extruder = nullptr; - int FromDIP(int n) { return plater->FromDIP(n); } + int FromDIP(int n) { return plater->FromDIP(n); } void layout_printer(bool isBBL, bool isDual); void flush_printer_sync(bool restart = false); - PlaterPresetComboBox* combo_print = nullptr; + PlaterPresetComboBox *combo_print = nullptr; std::vector combos_filament; - int editing_filament = -1; - wxBoxSizer* sizer_filaments = nullptr; + int editing_filament = -1; + wxBoxSizer *sizer_filaments = nullptr; - // BBS Sidebar widgets + //BBS Sidebar widgets wxPanel* m_panel_print_title; wxStaticText* m_staticText_print_title; wxPanel* m_panel_print_content; - wxBoxSizer* sizer_params; + wxBoxSizer *sizer_params; - // wxComboBox * m_comboBox_print_preset; - wxStaticLine* m_staticline1; + //wxComboBox * m_comboBox_print_preset; + wxStaticLine * m_staticline1; StaticBox* m_panel_filament_title; - wxPanel* m_panel_filament_separator; + wxPanel* m_panel_filament_separator; wxStaticText* m_staticText_filament_settings; wxStaticText* m_staticText_filament_count; - ScalableButton* m_bpButton_add_filament; - ScalableButton* m_bpButton_del_filament; - ScalableButton* m_bpButton_ams_filament; - ScalableButton* m_bpButton_set_filament; + ScalableButton * m_bpButton_add_filament; + ScalableButton * m_bpButton_del_filament; + ScalableButton * m_bpButton_ams_filament; + ScalableButton * m_bpButton_set_filament; int m_menu_filament_id = -1; wxPanel* m_filament_area_wrapper; @@ -721,63 +737,63 @@ struct Sidebar::priv // Mixed-color filament section. Sits directly under the physical filament list in // scrolled_sizer. BBS hosts the equivalent widgets inside an m_filament_area_wrapper // that Orca's sidebar has no counterpart for, so these are parented to p->scrolled. - wxPanel* m_btn_add_mixed_filament{nullptr}; // "+ Add Mixed Filament" full-width button - wxPanel* m_panel_mixed_title{nullptr}; // title row: "Mixed Filament" + add/del buttons - wxStaticText* m_text_mixed_title{nullptr}; - ScalableButton* m_btn_mixed_add{nullptr}; - ScalableButton* m_btn_mixed_del{nullptr}; - wxScrolledWindow* m_mixed_scroll_area{nullptr}; // independent scrollbar for mixed rows - wxPanel* m_panel_mixed_content{nullptr}; - wxBoxSizer* m_sizer_mixed_filaments{nullptr}; // two-column, mirrors sizer_filaments - wxPanel* m_panel_mixed_warning{nullptr}; // red bar for broken/mismatched mixes - wxStaticText* m_text_mixed_warning{nullptr}; - bool m_mixed_filament_broken{false}; + wxPanel* m_btn_add_mixed_filament{nullptr}; // "+ Add Mixed Filament" full-width button + wxPanel* m_panel_mixed_title{nullptr}; // title row: "Mixed Filament" + add/del buttons + wxStaticText* m_text_mixed_title{nullptr}; + ScalableButton* m_btn_mixed_add{nullptr}; + ScalableButton* m_btn_mixed_del{nullptr}; + wxScrolledWindow* m_mixed_scroll_area{nullptr}; // independent scrollbar for mixed rows + wxPanel* m_panel_mixed_content{nullptr}; + wxBoxSizer* m_sizer_mixed_filaments{nullptr}; // two-column, mirrors sizer_filaments + wxPanel* m_panel_mixed_warning{nullptr}; // red bar for broken/mismatched mixes + wxStaticText* m_text_mixed_warning{nullptr}; + bool m_mixed_filament_broken{false}; wxScrolledWindow* m_scrolledWindow_filament_content; wxStaticLine* m_staticline2; wxPanel* m_panel_project_title; ScalableButton* m_filament_icon = nullptr; - Button* m_purge_mode_btn = nullptr; - Button* m_flushing_volume_btn = nullptr; - TextInput* m_search_item = nullptr; - StaticBox* m_search_bar = nullptr; + Button * m_purge_mode_btn = nullptr; + Button * m_flushing_volume_btn = nullptr; + TextInput* m_search_item = nullptr; + StaticBox* m_search_bar = nullptr; Search::SearchObjectDialog* dia = nullptr; // BBS printer config - StaticBox* m_panel_printer_title = nullptr; - wxPanel* m_panel_printer_separator = nullptr; - ScalableButton* m_printer_icon = nullptr; - ScalableButton* m_printer_connect = nullptr; - ScalableButton* m_printer_bbl_sync = nullptr; - ScalableButton* m_printer_setting = nullptr; - wxStaticText* m_text_printer_settings = nullptr; - wxPanel* m_panel_printer_content = nullptr; + StaticBox* m_panel_printer_title = nullptr; + wxPanel* m_panel_printer_separator = nullptr; + ScalableButton* m_printer_icon = nullptr; + ScalableButton* m_printer_connect = nullptr; + ScalableButton* m_printer_bbl_sync = nullptr; + ScalableButton* m_printer_setting = nullptr; + wxStaticText * m_text_printer_settings = nullptr; + wxPanel* m_panel_printer_content = nullptr; // Filament Track Switch status overlay: an icon floated over the left/single extruder AMS area, // shown only when the switch is installed (green when ready, red when not calibrated). wxStaticBitmap* extruder_separator_icon = nullptr; - ObjectList* m_object_list{nullptr}; - ObjectSettings* object_settings{nullptr}; - ObjectLayers* object_layers{nullptr}; + ObjectList *m_object_list{ nullptr }; + ObjectSettings *object_settings{ nullptr }; + ObjectLayers *object_layers{ nullptr }; - wxButton* btn_export_gcode; - wxButton* btn_reslice; - ScalableButton* btn_send_gcode; - // ScalableButton *btn_eject_device; - ScalableButton* btn_export_gcode_removable; // exports to removable drives (appears only if removable drive is connected) + wxButton *btn_export_gcode; + wxButton *btn_reslice; + ScalableButton *btn_send_gcode; + //ScalableButton *btn_eject_device; + ScalableButton* btn_export_gcode_removable; //exports to removable drives (appears only if removable drive is connected) - bool is_switching_diameter{false}; - Search::OptionsSearcher searcher; + bool is_switching_diameter{false}; + Search::OptionsSearcher searcher; std::string ams_list_device; - priv(Plater* plater) : plater(plater) {} + priv(Plater *plater) : plater(plater) {} ~priv(); void show_preset_comboboxes(); void jump_to_object(ObjectDataViewModelNode* item); void can_search(); - bool sync_extruder_list(bool& only_external_material, bool is_manual = false); + bool sync_extruder_list(bool &only_external_material, bool is_manual = false); // Resolve the nozzle option for a multi-nozzle machine. Returns nullopt (and is a no-op) unless // extruder_count >= 2 && support_multi_nozzle. When is_manual, always pops the MultiNozzleSyncDialog; // otherwise reuses the app_config-cached option when the machine's nozzle config is unchanged. @@ -808,16 +824,17 @@ struct Sidebar::priv void Sidebar::priv::layout_printer(bool isBBL, bool isDual) { // Printer - preset - if (auto sizer = static_cast(panel_printer_preset->GetSizer()); - sizer == nullptr /*|| isBBL != (sizer->GetOrientation() == wxVERTICAL)*/) { - // if (isBBL) { - wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL); - hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); - hsizer->Add(combo_printer, 1, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(2)); // 1 already triggers wxEXPAND - hsizer->AddSpacer(FromDIP(2)); - hsizer->Add(btn_edit_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); - // hsizer->Add(btn_connect_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); - panel_printer_preset->SetSizer(hsizer); + if (auto sizer = static_cast(panel_printer_preset->GetSizer()); + sizer == nullptr /*|| isBBL != (sizer->GetOrientation() == wxVERTICAL)*/) { + + //if (isBBL) { + wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); + hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + hsizer->Add(combo_printer, 1, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(2)); // 1 already triggers wxEXPAND + hsizer->AddSpacer(FromDIP(2)); + hsizer->Add(btn_edit_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); + //hsizer->Add(btn_connect_printer, 0, wxRIGHT | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(SidebarProps::IconSpacing())); + panel_printer_preset->SetSizer(hsizer); //} else { // wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); // hsizer->Add(image_printer, 0, wxLEFT | wxALIGN_CENTER, FromDIP(4)); @@ -829,11 +846,11 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) } if (vsizer_printer->GetItemCount() == 0) { - wxBoxSizer* hsizer_printer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *hsizer_printer = new wxBoxSizer(wxHORIZONTAL); hsizer_printer->Add(panel_printer_preset, 1, wxEXPAND, 0); - hsizer_printer->Add(panel_nozzle_dia, 0, wxLEFT, FromDIP(4)); + hsizer_printer->Add(panel_nozzle_dia , 0, wxLEFT, FromDIP(4)); hsizer_printer->Add(panel_printer_bed, 0, wxLEFT, FromDIP(4)); - // hsizer_printer->Add(btn_sync_printer , 0, wxLEFT, FromDIP(4)); + //hsizer_printer->Add(btn_sync_printer , 0, wxLEFT, FromDIP(4)); vsizer_printer->AddSpacer(FromDIP(SidebarProps::ContentMarginV())); vsizer_printer->Add(hsizer_printer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); @@ -848,9 +865,8 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) // Filament Track Switch status icon, floated over the extruder AMS area (positioned in // update_extruder_separator_icon). Created hidden; a click re-shows the ready/not-ready tip. if (!extruder_separator_icon) { - auto bitmap = ScalableBitmap(m_panel_printer_content, "fila_switch", 10); - extruder_separator_icon = new wxStaticBitmap(m_panel_printer_content, wxID_ANY, bitmap.bmp(), wxDefaultPosition, - bitmap.GetBmpSize()); + auto bitmap = ScalableBitmap(m_panel_printer_content, "fila_switch", 10); + extruder_separator_icon = new wxStaticBitmap(m_panel_printer_content, wxID_ANY, bitmap.bmp(), wxDefaultPosition, bitmap.GetBmpSize()); extruder_separator_icon->Hide(); extruder_separator_icon->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { show_fila_switch_msg(is_fila_switch_ready()); @@ -859,9 +875,9 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) } // single - extruder_single_sizer = single_extruder->sizer; - wxBoxSizer* extruder_sizer = new wxBoxSizer(wxVERTICAL); - extruder_sizer->Add(extruder_dual_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); + extruder_single_sizer = single_extruder->sizer; + wxBoxSizer * extruder_sizer = new wxBoxSizer(wxVERTICAL); + extruder_sizer->Add(extruder_dual_sizer , 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); extruder_sizer->Add(extruder_single_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ContentMargin())); vsizer_printer->Add(extruder_sizer, 1, wxEXPAND | wxTOP, FromDIP(2)); @@ -869,14 +885,14 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) vsizer_printer->AddSpacer(FromDIP(SidebarProps::ContentMarginV())); } - // btn_connect_printer->Show(!isBBL); + //btn_connect_printer->Show(!isBBL); m_printer_connect->Show(!isBBL); - // btn_sync_printer->Show(isBBL); + //btn_sync_printer->Show(isBBL); m_printer_bbl_sync->Show(isBBL); // ORCA show plate type combo box only when its supported - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - const auto& cfg = preset_bundle.printers.get_edited_preset().config; + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + const auto& cfg = preset_bundle.printers.get_edited_preset().config; // Orca: we use preset_bundle.is_bbl_vendor() instead of isBBL to determine if the plate type combo box should be shown // ref: https://github.com/OrcaSlicer/OrcaSlicer/pull/11610#discussion_r2607411847 panel_printer_bed->Show(preset_bundle.is_bbl_vendor() || cfg.opt_bool("support_multi_bed_types")); @@ -887,7 +903,7 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) // Single nozzle & non ams if (!isDual) { // Orca: for printer without flow variant, we do not show flow combo - int extruder_count = 0; + int extruder_count = 0; const bool has_flow_variant = cfg.support_different_extruders(extruder_count); panel_nozzle_dia->Show(!has_flow_variant); @@ -899,9 +915,9 @@ void Sidebar::priv::layout_printer(bool isBBL, bool isDual) // ORCA ensure printer section is visible after changing printer from printer selection dialog // this will inform user on printer change when printer section is collapsed - if (m_panel_printer_content) { + if (m_panel_printer_content){ bool isShown = m_panel_printer_content->IsShown(); - if (!isShown && m_text_printer_settings) { + if(!isShown && m_text_printer_settings){ m_text_printer_settings->SetLabel(_L("Printer")); // ensure title returns to default state m_panel_printer_content->Show(); } @@ -914,7 +930,7 @@ void Sidebar::priv::flush_printer_sync(bool restart) *counter_sync_printer = 6; timer_sync_printer->Start(500); } - // btn_sync_printer->SetBackgroundColorNormal((*counter_sync_printer & 1) ? "#F8F8F8" :"#009688"); + //btn_sync_printer->SetBackgroundColorNormal((*counter_sync_printer & 1) ? "#F8F8F8" :"#009688"); m_printer_bbl_sync->SetBitmap_((*counter_sync_printer & 1) ? "printer_sync_not" : "printer_sync_ok"); if (--*counter_sync_printer <= 0) timer_sync_printer->Stop(); @@ -923,7 +939,7 @@ void Sidebar::priv::flush_printer_sync(bool restart) Sidebar::priv::~priv() { // BBS - // delete object_manipulation; + //delete object_manipulation; delete object_settings; // BBS #if 0 @@ -935,7 +951,7 @@ void Sidebar::priv::show_preset_comboboxes() { const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; -// BBS +//BBS #if 0 for (size_t i = 0; i < 4; ++i) sizer_presets->Show(i, !showSLA); @@ -952,7 +968,10 @@ void Sidebar::priv::show_preset_comboboxes() scrolled->Refresh(); } -void Sidebar::priv::jump_to_object(ObjectDataViewModelNode* item) { m_object_list->selected_object(item); } +void Sidebar::priv::jump_to_object(ObjectDataViewModelNode* item) +{ + m_object_list->selected_object(item); +} void Sidebar::priv::can_search() { @@ -1003,75 +1022,61 @@ void Sidebar::priv::hide_rich_tip(wxButton* btn) } #endif -std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config, size_t nozzle_id) +std::vector get_min_flush_volumes(const DynamicPrintConfig &full_config, size_t nozzle_id) { - std::vector extra_flush_volumes; - // const auto& full_config = wxGetApp().preset_bundle->full_config(); - // auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; + std::vectorextra_flush_volumes; + //const auto& full_config = wxGetApp().preset_bundle->full_config(); + //auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; const ConfigOptionFloatsNullable* nozzle_volume_opt = full_config.option("nozzle_volume"); - int nozzle_volume_val = nozzle_volume_opt ? (int) nozzle_volume_opt->get_at(nozzle_id) : 0; + int nozzle_volume_val = nozzle_volume_opt ? (int)nozzle_volume_opt->get_at(nozzle_id) : 0; const ConfigOptionInt* enable_long_retraction_when_cut_opt = full_config.option("enable_long_retraction_when_cut"); - int machine_enabled_level = 0; + int machine_enabled_level = 0; if (enable_long_retraction_when_cut_opt) { machine_enabled_level = enable_long_retraction_when_cut_opt->value; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": get enable_long_retraction_when_cut from config, value=%1%") % machine_enabled_level; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get enable_long_retraction_when_cut from config, value=%1%")%machine_enabled_level; } const ConfigOptionBools* long_retractions_when_cut_opt = full_config.option("long_retractions_when_cut"); - bool machine_activated = false; + bool machine_activated = false; if (long_retractions_when_cut_opt) { machine_activated = long_retractions_when_cut_opt->values[nozzle_id] == 1; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": get long_retractions_when_cut from config, value=%1%, activated=%2%") % - long_retractions_when_cut_opt->values[0] % machine_activated; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get long_retractions_when_cut from config, value=%1%, activated=%2%")%long_retractions_when_cut_opt->values[0] %machine_activated; } size_t filament_size = full_config.option("filament_diameter")->values.size(); - std::vector filament_retraction_distance_when_cut(filament_size, 18.0f), - printer_retraction_distance_when_cut(filament_size, 18.0f); + std::vector filament_retraction_distance_when_cut(filament_size, 18.0f), printer_retraction_distance_when_cut(filament_size, 18.0f); std::vector filament_long_retractions_when_cut(filament_size, 0); - const ConfigOptionFloats* filament_retraction_distances_when_cut_opt = full_config.option( - "filament_retraction_distances_when_cut"); + const ConfigOptionFloats* filament_retraction_distances_when_cut_opt = full_config.option("filament_retraction_distances_when_cut"); if (filament_retraction_distances_when_cut_opt) { filament_retraction_distance_when_cut = filament_retraction_distances_when_cut_opt->values; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": get filament_retraction_distance_when_cut from config, size=%1%, values=%2%") % - filament_retraction_distance_when_cut.size() % - filament_retraction_distances_when_cut_opt->serialize(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_retraction_distance_when_cut from config, size=%1%, values=%2%")%filament_retraction_distance_when_cut.size() %filament_retraction_distances_when_cut_opt->serialize(); } - const ConfigOptionFloats* printer_retraction_distance_when_cut_opt = full_config.option( - "retraction_distances_when_cut"); + const ConfigOptionFloats* printer_retraction_distance_when_cut_opt = full_config.option("retraction_distances_when_cut"); if (printer_retraction_distance_when_cut_opt) { printer_retraction_distance_when_cut = printer_retraction_distance_when_cut_opt->values; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": get retraction_distances_when_cut from config, size=%1%, values=%2%") % - printer_retraction_distance_when_cut.size() % printer_retraction_distance_when_cut_opt->serialize(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get retraction_distances_when_cut from config, size=%1%, values=%2%")%printer_retraction_distance_when_cut.size() %printer_retraction_distance_when_cut_opt->serialize(); } - const ConfigOptionBools* filament_long_retractions_when_cut_opt = full_config.option( - "filament_long_retractions_when_cut"); + const ConfigOptionBools* filament_long_retractions_when_cut_opt = full_config.option("filament_long_retractions_when_cut"); if (filament_long_retractions_when_cut_opt) { filament_long_retractions_when_cut = filament_long_retractions_when_cut_opt->values; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": get filament_long_retractions_when_cut from config, size=%1%, values=%2%") % - filament_long_retractions_when_cut.size() % filament_long_retractions_when_cut_opt->serialize(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_long_retractions_when_cut from config, size=%1%, values=%2%")%filament_long_retractions_when_cut.size() %filament_long_retractions_when_cut_opt->serialize(); } for (size_t idx = 0; idx < filament_size; ++idx) { int extra_flush_volume = nozzle_volume_val; - int retract_length = machine_enabled_level && machine_activated ? printer_retraction_distance_when_cut[nozzle_id] : 0; + int retract_length = machine_enabled_level && machine_activated ? printer_retraction_distance_when_cut[nozzle_id] : 0; unsigned char filament_activated = filament_long_retractions_when_cut[idx]; - double filament_retract_length = filament_retraction_distance_when_cut[idx]; + double filament_retract_length = filament_retraction_distance_when_cut[idx]; if (filament_activated == 0) retract_length = 0; else if (filament_activated == 1 && machine_enabled_level == LongRectrationLevel::EnableFilament) { if (!std::isnan(filament_retract_length)) - retract_length = (int) filament_retraction_distance_when_cut[idx]; + retract_length = (int)filament_retraction_distance_when_cut[idx]; else retract_length = printer_retraction_distance_when_cut[nozzle_id]; } @@ -1092,20 +1097,20 @@ struct DynamicFilamentList : DynamicList // physical-only list for all of its keys. explicit DynamicFilamentList(bool physical_only = false) : physical_only(physical_only) {} bool physical_only; - std::vector> items; + std::vector> items; std::vector slot_map{0}; // combo index -> 1-based filament slot; slot_map[0] = 0 is "Default" - void apply_on(Choice* c) override + void apply_on(Choice *c) override { if (!c) return; if (items.empty()) update(true); - auto cb = dynamic_cast(c->window); + auto cb = dynamic_cast(c->window); if (!cb) return; wxString old_selection = cb->GetStringSelection(); - int old_index = cb->GetSelection(); + int old_index = cb->GetSelection(); // slot_map is already rebuilt here: restoring through it keeps the index of every slot // still listed and sends a vanished slot to the fallback below. int old_slot = old_index >= 0 && old_index < int(slot_map.size()) ? slot_map[old_index] : -1; @@ -1152,7 +1157,7 @@ struct DynamicFilamentList : DynamicList slot_map.assign(1, 0); if (!force && m_choices.empty()) return; - auto icons = get_extruder_color_icons(true); + auto icons = get_extruder_color_icons(true); auto presets = wxGetApp().preset_bundle->filament_presets; for (int i = 0; i < presets.size(); ++i) { if (physical_only && wxGetApp().preset_bundle->is_mixed_filament(i)) @@ -1176,7 +1181,10 @@ static bool has_junction_deviation(const DynamicPrintConfig* printer_config) } const auto gcode_flavor = printer_config->option>("gcode_flavor"); const auto junction_dev = printer_config->option("machine_max_junction_deviation"); - return gcode_flavor && gcode_flavor->value == GCodeFlavor::gcfMarlinFirmware && junction_dev && !junction_dev->values.empty() && + return gcode_flavor && + gcode_flavor->value == GCodeFlavor::gcfMarlinFirmware && + junction_dev && + !junction_dev->values.empty() && junction_dev->values.front() > 0.0; } @@ -1186,22 +1194,21 @@ static DynamicFilamentList dynamic_physical_filament_list(true); // physical slo class AMSCountPopupWindow : public PopupWindow { public: - AMSCountPopupWindow(ExtruderGroup* extruder, int index) : PopupWindow(extruder, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) + AMSCountPopupWindow(ExtruderGroup *extruder, int index) + : PopupWindow(extruder, wxBORDER_NONE | wxPU_CONTAINS_CONTROLS) { SetBackgroundColour(*wxWHITE); - auto msg = new wxStaticText(this, wxID_ANY, _L("Set the number of AMS installed on the nozzle.")); + auto msg = new wxStaticText(this, wxID_ANY, _L("Set the number of AMS installed on the nozzle.")); msg->SetFont(Label::Body_14); msg->SetForegroundColour("#262E30"); msg->Wrap(FromDIP(280)); auto box = new StaticBox(this, wxID_ANY); box->SetBackgroundColor(0xF8F8F8); box->SetBorderWidth(0); - auto img4 = new ScalableButton(box, wxID_ANY, "ams_4_tray", {}, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, - false, 44); - // img4->SetBackgroundColour(*wxWHITE); - auto img1 = new ScalableButton(box, wxID_ANY, "ams_1_tray", {}, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, - false, 44); - // img1->SetBackgroundColour(*wxWHITE); + auto img4 = new ScalableButton(box, wxID_ANY, "ams_4_tray", {}, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 44); + //img4->SetBackgroundColour(*wxWHITE); + auto img1 = new ScalableButton(box, wxID_ANY, "ams_1_tray", {}, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 44); + //img1->SetBackgroundColour(*wxWHITE); auto txt4 = new wxStaticText(box, wxID_ANY, _L("AMS(4 slots)")); txt4->SetFont(Label::Body_14); txt4->SetBackgroundColour(0xF8F8F8); @@ -1216,28 +1223,28 @@ public: GetAMSCount(1 - index, oth4, oth1); auto val4 = new SpinInput(box, {}, {}, wxDefaultPosition, {FromDIP(60), -1}, 0, 0, 4 - oth4, ams4); auto val1 = new SpinInput(box, {}, {}, wxDefaultPosition, {FromDIP(60), -1}, 0, 0, 8 - oth1, ams1); - auto event_handler = [index, val4, val1, extruder](auto& evt) { + auto event_handler = [index, val4, val1, extruder](auto &evt) { SetAMSCount(index, val4->GetValue(), val1->GetValue()); UpdateAMSCount(index, extruder); }; val4->Bind(wxEVT_SPINCTRL, event_handler); val1->Bind(wxEVT_SPINCTRL, event_handler); - wxSizer* sizer = new wxBoxSizer(wxVERTICAL); + wxSizer * sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(msg, 0, wxTOP | wxLEFT | wxRIGHT, FromDIP(10)); - wxSizer* sizer2 = new wxBoxSizer(wxVERTICAL); - wxSizer* sizer21 = new wxBoxSizer(wxHORIZONTAL); - sizer21->Add(img4, 0, wxALIGN_CENTRE); - sizer21->Add(txt4, 2, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); - sizer21->Add(val4, 1, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); - sizer2->Add(sizer21, 0, wxLEFT | wxRIGHT | wxTOP | wxEXPAND, FromDIP(14)); - sizer2->AddSpacer(FromDIP(6)); - wxSizer* sizer22 = new wxBoxSizer(wxHORIZONTAL); - sizer22->Add(img1, 0, wxALIGN_CENTRE); - sizer22->Add(txt1, 2, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); - sizer22->Add(val1, 1, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); - sizer2->Add(sizer22, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, FromDIP(14)); - box->SetSizer(sizer2); + wxSizer *sizer2 = new wxBoxSizer(wxVERTICAL); + wxSizer *sizer21 = new wxBoxSizer(wxHORIZONTAL); + sizer21->Add(img4, 0, wxALIGN_CENTRE); + sizer21->Add(txt4, 2, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); + sizer21->Add(val4, 1, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); + sizer2->Add(sizer21, 0, wxLEFT | wxRIGHT | wxTOP | wxEXPAND, FromDIP(14)); + sizer2->AddSpacer(FromDIP(6)); + wxSizer *sizer22 = new wxBoxSizer(wxHORIZONTAL); + sizer22->Add(img1, 0, wxALIGN_CENTRE); + sizer22->Add(txt1, 2, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); + sizer22->Add(val1, 1, wxLEFT | wxALIGN_CENTRE, FromDIP(10)); + sizer2->Add(sizer22, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, FromDIP(14)); + box->SetSizer(sizer2); sizer->Add(box, 0, wxTOP | wxBOTTOM | wxLEFT | wxRIGHT | wxEXPAND, FromDIP(14)); SetSizer(sizer); @@ -1245,11 +1252,11 @@ public: Fit(); Bind(wxEVT_PAINT, [this](wxPaintEvent& evt) { - wxPaintDC dc(this); - dc.SetPen(StateColor::darkModeColorFor(wxColour("#DBDBDB"))); // ORCA match popup border color - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); - }); + wxPaintDC dc(this); + dc.SetPen(StateColor::darkModeColorFor(wxColour("#DBDBDB"))); // ORCA match popup border color + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); + }); SetBackgroundColour(*wxWHITE); wxGetApp().UpdateDarkUIWin(this); @@ -1257,34 +1264,35 @@ public: static void SetAMSCount(int index, int ams4, int ams1) { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; preset_bundle.extruder_ams_counts.resize(2); - auto& ams_map = preset_bundle.extruder_ams_counts[index]; - ams_map[4] = ams4; - ams_map[1] = ams1; + auto &ams_map = preset_bundle.extruder_ams_counts[index]; + ams_map[4] = ams4; + ams_map[1] = ams1; - std::vector extruder_ams_count = save_extruder_ams_count_to_string(preset_bundle.extruder_ams_counts); - std::string extruder_ams_count_str = boost::algorithm::join(extruder_ams_count, ","); + std::vector extruder_ams_count = save_extruder_ams_count_to_string(preset_bundle.extruder_ams_counts); + std::string extruder_ams_count_str = boost::algorithm::join(extruder_ams_count, ","); wxGetApp().app_config->set("presets", "extruder_ams_count", extruder_ams_count_str); wxGetApp().plater()->update(); // update slice status } - static void GetAMSCount(int index, int& ams4, int& ams1) + static void GetAMSCount(int index, int & ams4, int & ams1) { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; if (preset_bundle.extruder_ams_counts.empty()) { ams4 = 0; ams1 = 0; - } else { + } + else { assert(preset_bundle.extruder_ams_counts.size() == 2); ams4 = preset_bundle.extruder_ams_counts[index][4]; ams1 = preset_bundle.extruder_ams_counts[index][1]; } } - static void UpdateAMSCount(int index, ExtruderGroup* extruder) + static void UpdateAMSCount(int index, ExtruderGroup *extruder) { - std::vector>& ams_counts = wxGetApp().preset_bundle->extruder_ams_counts; + std::vector> &ams_counts = wxGetApp().preset_bundle->extruder_ams_counts; ams_counts.resize(2); std::map& ams_map = ams_counts[index]; if (ams_map.find(4) == ams_map.end()) { @@ -1298,7 +1306,8 @@ public: } }; -ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) : StaticGroup(parent, wxID_ANY, wxString()) +ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title) + : StaticGroup(parent, wxID_ANY, wxString()) { SetFont(Label::Body_10); SetForegroundColour(wxColour("#CECECE")); @@ -1311,18 +1320,16 @@ ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) hover_label = new HoverLabel(this, title); // Nozzle - wxStaticText* label_diameter = new wxStaticText(this, wxID_ANY, _L("Diameter")); + wxStaticText *label_diameter = new wxStaticText(this, wxID_ANY, _L("Diameter")); label_diameter->SetFont(Label::Body_14); label_diameter->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); - if (index >= 0) - label_diameter->SetMinSize({FromDIP(80), -1}); - auto combo_diameter = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); - this->combo_diameter = combo_diameter; - wxStaticText* label_flow = new wxStaticText(this, wxID_ANY, _L("Flow")); + if (index >= 0) label_diameter->SetMinSize({FromDIP(80), -1}); + auto combo_diameter = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); + this->combo_diameter = combo_diameter; + wxStaticText *label_flow = new wxStaticText(this, wxID_ANY, _L("Flow")); label_flow->SetFont(Label::Body_14); label_flow->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); - if (index >= 0) - label_flow->SetMinSize({FromDIP(80), -1}); + if (index >= 0) label_flow->SetMinSize({FromDIP(80), -1}); auto combo_flow = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); combo_flow->GetDropDown().SetUseContentWidth(true); combo_flow->Bind(wxEVT_COMBOBOX, [index, combo_flow](wxCommandEvent &evt) { @@ -1341,36 +1348,27 @@ ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) this->combo_flow = combo_flow; // AMS - wxStaticText* label_ams = new wxStaticText(this, wxID_ANY, _L("AMS")); + wxStaticText *label_ams = new wxStaticText(this, wxID_ANY, _L("AMS")); label_ams->SetFont(Label::Body_14); label_ams->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); - // label_ams->SetMinSize({FromDIP(70), -1}); + //label_ams->SetMinSize({FromDIP(70), -1}); if (index >= 0) { btn_edit = new ScalableButton(this, wxID_ANY, "dot"); btn_edit->SetBackgroundColour(extruder_group_chip_bg()); btn_edit->Hide(); - btn_edit->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto& evt) { - PopupWindow* window = new AMSCountPopupWindow(this, index); - auto size = GetSize(); - auto pos = ClientToScreen({0, size.y + 12}); + btn_edit->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) { + PopupWindow *window = new AMSCountPopupWindow(this, index); + auto size = GetSize(); + auto pos = ClientToScreen({0, size.y + 12}); size.SetWidth(size.GetWidth() + FromDIP(10)); window->Position(pos, {0, 0}); window->Popup(); }); - auto hovered = std::make_shared(); - for (wxWindow* w : - std::initializer_list{this, label_diameter, combo_diameter, label_flow, combo_flow, btn_edit, label_ams}) { - w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, this](wxMouseEvent& evt) { - *hovered = w; - btn_edit->SetBitmap_("edit"); - }); - w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, this](wxMouseEvent& evt) { - if (*hovered == w) { - btn_edit->SetBitmap_("dot"); - *hovered = nullptr; - } - }); + auto hovered = std::make_shared(); + for (wxWindow *w : std::initializer_list{this, label_diameter, combo_diameter, label_flow, combo_flow, btn_edit, label_ams}) { + w->Bind(wxEVT_ENTER_WINDOW, [w, hovered, this](wxMouseEvent &evt) { *hovered = w; btn_edit->SetBitmap_("edit"); }); + w->Bind(wxEVT_LEAVE_WINDOW, [w, hovered, this](wxMouseEvent &evt) { if (*hovered == w) { btn_edit->SetBitmap_("dot"); *hovered = nullptr; } }); } } @@ -1392,8 +1390,7 @@ ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) hsizer_ams->Add(btn_edit, 0, wxLEFT | wxALIGN_CENTER, FromDIP(2)); hsizer_ams->Add(ams_not_installed_msg, 0, wxALIGN_CENTER); - btn_up = new ScalableButton(this, wxID_ANY, "page_up", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, - false, 14); + btn_up = new ScalableButton(this, wxID_ANY, "page_up", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_up->SetBackgroundColour(*wxWHITE); btn_up->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur > 0) @@ -1401,8 +1398,7 @@ ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) update_ams(); }); btn_up->Hide(); - btn_down = new ScalableButton(this, wxID_ANY, "page_down", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, - wxBU_EXACTFIT | wxNO_BORDER, false, 14); + btn_down = new ScalableButton(this, wxID_ANY, "page_down", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_down->SetBackgroundColour(*wxWHITE); btn_down->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur + 1 < page_num) @@ -1411,25 +1407,25 @@ ExtruderGroup::ExtruderGroup(wxWindow* parent, int index, wxString const& title) }); btn_down->Hide(); - wxBoxSizer* hsizer_diameter = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *hsizer_diameter = new wxBoxSizer(wxHORIZONTAL); hsizer_diameter->Add(label_diameter, 0, wxALIGN_CENTER); hsizer_diameter->Add(combo_diameter, 1, wxEXPAND); - wxBoxSizer* hsizer_nozzle = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer * hsizer_nozzle = new wxBoxSizer(wxHORIZONTAL); hsizer_nozzle->Add(label_flow, 0, wxALIGN_CENTER); hsizer_nozzle->Add(combo_flow, 1, wxEXPAND); if (index < 0) { label_ams->Hide(); ams_not_installed_msg->Hide(); - wxStaticBoxSizer* vsizer = new wxStaticBoxSizer(this, wxVERTICAL); - wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL); - hsizer->Add(hsizer_diameter, 1, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(8)); + wxStaticBoxSizer *vsizer = new wxStaticBoxSizer(this, wxVERTICAL); + wxBoxSizer *hsizer = new wxBoxSizer(wxHORIZONTAL); + hsizer->Add(hsizer_diameter, 1, wxEXPAND | wxTOP| wxBOTTOM, FromDIP(8)); hsizer->Add(hsizer_nozzle, 1, wxEXPAND | wxALL, FromDIP(8)); hsizer->AddSpacer(FromDIP(2)); // Avoid badge vsizer->Add(hover_label, 0, wxLEFT | wxALL, FromDIP(2)); vsizer->Add(hsizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, FromDIP(2)); this->sizer = vsizer; } else { - wxStaticBoxSizer* vsizer = new wxStaticBoxSizer(this, wxVERTICAL); + wxStaticBoxSizer *vsizer = new wxStaticBoxSizer(this, wxVERTICAL); vsizer->Add(hover_label, 0, wxLEFT | wxALL, FromDIP(2)); vsizer->Add(hsizer_ams, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, FromDIP(2)); vsizer->Add(hsizer_diameter, 0, wxEXPAND | wxLEFT | wxTOP | wxRIGHT, FromDIP(2)); @@ -1444,8 +1440,7 @@ void ExtruderGroup::update_ams() static AMSinfo info4; static AMSinfo info1; if (info4.cans.empty()) { - for (size_t i = 0; i < 4; ++i) - info4.cans.push_back({}); + for (size_t i = 0; i < 4; ++i) info4.cans.push_back({}); info1.ams_type = AMSModel::N3S_AMS; info1.cans.push_back({}); } @@ -1496,7 +1491,7 @@ void ExtruderGroup::update_ams() hsizer_ams->AddStretchSpacer(1); if (btn_up->IsShown() && btn_down->IsShown()) { auto vsizer_btn = new wxBoxSizer(wxVERTICAL); - auto size = btn_up->GetSize(); + auto size = btn_up->GetSize(); vsizer_btn->Add(btn_up, 0); vsizer_btn->Add(btn_down, 0); hsizer_ams->Add(vsizer_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(2)); @@ -1510,16 +1505,16 @@ void ExtruderGroup::update_ams() sizer->Layout(); } -void ExtruderGroup::sync_ams(MachineObject const* obj, std::vector const& ams4, std::vector const& ams1) +void ExtruderGroup::sync_ams(MachineObject const *obj, std::vector const &ams4, std::vector const &ams1) { - if (ams_4.empty() && ams4.empty() && ams_1.empty() && ams1.empty()) + if (ams_4.empty() && ams4.empty() + && ams_1.empty() && ams1.empty()) return; - auto sync = [obj](std::vector& infos, std::vector const& ams) -> bool { + auto sync = [obj](std::vector &infos, std::vector const &ams) -> bool { std::vector infos2; for (auto a : ams) { AMSinfo ams_info; - ams_info.parse_ams_info(const_cast(obj), a, obj->GetFilaSystem()->IsDetectRemainEnabled(), - obj->is_support_ams_humidity); + ams_info.parse_ams_info(const_cast(obj), a, obj->GetFilaSystem()->IsDetectRemainEnabled(), obj->is_support_ams_humidity); infos2.push_back(ams_info); } if (infos == infos2) @@ -1543,14 +1538,12 @@ bool Sidebar::priv::switch_diameter(bool single) if (single) { diameter = single_extruder->combo_diameter->GetValue(); } else { - auto diameter_left = left_extruder->combo_diameter->GetValue(); + auto diameter_left = left_extruder->combo_diameter->GetValue(); auto diameter_right = right_extruder->combo_diameter->GetValue(); if (diameter_left != diameter_right) { std::string printer_type = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle); - auto left_name = _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::SentenceCase)); - auto right_name = _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::SentenceCase)); + auto left_name = _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::SentenceCase)); + auto right_name = _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::SentenceCase)); MessageDialog dlg(this->plater, _L("The software does not support using different diameter of nozzles for one print. " "If the left and right nozzles are inconsistent, we can only proceed with single-head printing. " @@ -1565,14 +1558,15 @@ bool Sidebar::priv::switch_diameter(bool single) diameter = diameter_right; else return false; - } else { + } + else { diameter = diameter_left; } } - + // ORCA: Check if the selected diameter matches the current nozzle diameter in the config Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); - auto* nozzle_diameter = dynamic_cast(printer_preset.config.option("nozzle_diameter")); + auto* nozzle_diameter = dynamic_cast(printer_preset.config.option("nozzle_diameter")); if (nozzle_diameter && nozzle_diameter->size() > 0) { auto current_nozzle_dia = get_diameter_string(nozzle_diameter->values[0]); // If the selected diameter is the same as current nozzle, don't switch profiles @@ -1580,8 +1574,8 @@ bool Sidebar::priv::switch_diameter(bool single) return true; } } - - auto preset = wxGetApp().preset_bundle->get_similar_printer_preset({}, diameter.ToStdString()); + + auto preset = wxGetApp().preset_bundle->get_similar_printer_preset({}, diameter.ToStdString()); if (preset == nullptr) { // ORCA add a text. this appears when user tries to change nozzle value but config doesnt have a inherited or compatible preset MessageDialog dlg(this->plater, _L("Configuration incompatible"), _L("Warning"), wxICON_WARNING | wxOK); @@ -1594,7 +1588,9 @@ bool Sidebar::priv::switch_diameter(bool single) static bool is_skip_high_flow_printer(const std::string& printer) { - static const std::set invalidate_list = {"Bambu Lab X1E"}; + static const std::set invalidate_list = { + "Bambu Lab X1E" + }; return invalidate_list.count(printer); }; @@ -1619,8 +1615,7 @@ static std::string serialize_nozzle_config(const std::map 0) - oss << ";"; + if (i > 0) oss << ";"; oss << std::fixed << std::setprecision(1) << deputy_nozzles[i].GetNozzleDiameter() << "," << static_cast(deputy_nozzles[i].GetNozzleFlowType()); } @@ -1628,8 +1623,7 @@ static std::string serialize_nozzle_config(const std::map 0) - oss << ";"; + if (i > 0) oss << ";"; oss << std::fixed << std::setprecision(1) << main_nozzles[i].GetNozzleDiameter() << "," << static_cast(main_nozzles[i].GetNozzleFlowType()); } @@ -1637,11 +1631,10 @@ static std::string serialize_nozzle_config(const std::map> deserialize_nozzle_config(const std::string& config_str) +static std::map> deserialize_nozzle_config(const std::string &config_str) { std::map> nozzle_cfg_map; - if (config_str.empty()) - return nozzle_cfg_map; + if (config_str.empty()) return nozzle_cfg_map; std::vector extruder_parts; boost::split(extruder_parts, config_str, boost::is_any_of("|")); @@ -1650,12 +1643,12 @@ static std::map> deserialize_nozzle_config(const std std::vector nozzles; std::vector parts; boost::split(parts, part_str, boost::is_any_of(";")); - for (const auto& part : parts) { + for (const auto &part : parts) { std::vector values; boost::split(values, part, boost::is_any_of(",")); if (values.size() == 2) { DevNozzle nozzle; - nozzle.m_diameter = std::stof(values[0]); + nozzle.m_diameter = std::stof(values[0]); nozzle.m_nozzle_flow = static_cast(std::stoi(values[1])); nozzles.push_back(nozzle); } @@ -1664,42 +1657,39 @@ static std::map> deserialize_nozzle_config(const std }; if (extruder_parts.size() != 2) { - auto nozzles = get_nozzles_from_string(config_str); - nozzle_cfg_map[MAIN_EXTRUDER_ID] = nozzles; - nozzle_cfg_map[DEPUTY_EXTRUDER_ID] = {DevNozzle()}; + auto nozzles = get_nozzles_from_string(config_str); + nozzle_cfg_map[MAIN_EXTRUDER_ID] = nozzles; + nozzle_cfg_map[DEPUTY_EXTRUDER_ID] = { DevNozzle() }; return nozzle_cfg_map; } if (!extruder_parts[0].empty()) { - auto nozzles = get_nozzles_from_string(extruder_parts[0]); + auto nozzles = get_nozzles_from_string(extruder_parts[0]); nozzle_cfg_map[DEPUTY_EXTRUDER_ID] = nozzles; } if (!extruder_parts[1].empty()) { - auto nozzles = get_nozzles_from_string(extruder_parts[1]); + auto nozzles = get_nozzles_from_string(extruder_parts[1]); nozzle_cfg_map[MAIN_EXTRUDER_ID] = nozzles; } return nozzle_cfg_map; } -static bool is_same_nozzle_config(const std::map>& config1, const std::map>& config2) +static bool is_same_nozzle_config(const std::map> &config1, const std::map> &config2) { - if (config1.size() != config2.size()) - return false; + if (config1.size() != config2.size()) return false; for (const auto& [eid, nozzles1] : config1) { auto it = config2.find(eid); - if (it == config2.end()) - return false; + if (it == config2.end()) return false; - const auto& nozzles2 = it->second; - if (nozzles1.size() != nozzles2.size()) - return false; + const auto &nozzles2 = it->second; + if (nozzles1.size() != nozzles2.size()) return false; auto sorted_nozzles1 = nozzles1; auto sorted_nozzles2 = nozzles2; - auto compare_nozzle = [](const DevNozzle& a, const DevNozzle& b) { + auto compare_nozzle = [](const DevNozzle &a, const DevNozzle &b) { float dia_a = a.GetNozzleDiameter(); float dia_b = b.GetNozzleDiameter(); if (std::abs(dia_a - dia_b) > EPSILON) { @@ -1722,22 +1712,19 @@ static bool is_same_nozzle_config(const std::map>& c return true; } -static std::string serialize_nozzle_option(const NozzleOption& option) -{ +static std::string serialize_nozzle_option(const NozzleOption& option) { std::ostringstream oss; oss << option.diameter << "|"; bool first = true; for (const auto& pair : option.extruder_nozzle_stats) { - if (!first) - oss << ";"; + if (!first) oss << ";"; first = false; oss << pair.first << ":"; bool first_stat = true; for (const auto& stat_pair : pair.second) { - if (!first_stat) - oss << ","; + if (!first_stat) oss << ","; first_stat = false; oss << static_cast(stat_pair.first) << "#" << stat_pair.second; } @@ -1745,15 +1732,12 @@ static std::string serialize_nozzle_option(const NozzleOption& option) return oss.str(); } -static std::optional deserialize_nozzle_option(const std::string& option_str) -{ - if (option_str.empty()) - return std::nullopt; +static std::optional deserialize_nozzle_option(const std::string& option_str) { + if (option_str.empty()) return std::nullopt; std::vector parts; boost::split(parts, option_str, boost::is_any_of("|")); - if (parts.size() != 2) - return std::nullopt; + if (parts.size() != 2) return std::nullopt; NozzleOption option; option.diameter = parts[0]; @@ -1762,13 +1746,11 @@ static std::optional deserialize_nozzle_option(const std::string& boost::split(extruder_parts, parts[1], boost::is_any_of(";")); for (const auto& extruder_part : extruder_parts) { - if (extruder_part.empty()) - continue; + if (extruder_part.empty()) continue; std::vector extruder_data; boost::split(extruder_data, extruder_part, boost::is_any_of(":")); - if (extruder_data.size() != 2) - continue; + if (extruder_data.size() != 2) continue; int extruder_id = std::stoi(extruder_data[0]); std::unordered_map stats; @@ -1781,8 +1763,8 @@ static std::optional deserialize_nozzle_option(const std::string& boost::split(kv, stat_part, boost::is_any_of("#")); if (kv.size() == 2) { NozzleVolumeType type = static_cast(std::stoi(kv[0])); - int count = std::stoi(kv[1]); - stats[type] = count; + int count = std::stoi(kv[1]); + stats[type] = count; } } @@ -1792,21 +1774,16 @@ static std::optional deserialize_nozzle_option(const std::string& return option; } -std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj, - int extruder_count, - bool support_multi_nozzle, - bool is_manual) +std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj, int extruder_count, bool support_multi_nozzle, bool is_manual) { if (extruder_count < 2 || !support_multi_nozzle) { return std::nullopt; } - if (!obj || !obj->GetNozzleSystem()) - return std::nullopt; + if (!obj || !obj->GetNozzleSystem()) return std::nullopt; auto nozzle_system = obj->GetNozzleSystem(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - if (!preset_bundle) - return std::nullopt; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + if (!preset_bundle) return std::nullopt; std::string curr_dev_id = obj->get_dev_id(); std::map> curr_nozzle_cfg; @@ -1820,8 +1797,8 @@ std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj curr_nozzle_cfg[MAIN_EXTRUDER_ID].emplace_back(rack_nozzle.second); } - AppConfig* app_config = wxGetApp().app_config; - std::string saved_dev_id = app_config->get("sync_extruder", "dev_id"); + AppConfig *app_config = wxGetApp().app_config; + std::string saved_dev_id = app_config->get("sync_extruder", "dev_id"); std::string saved_nozzle_config_str = app_config->get("sync_extruder", "nozzle_config"); std::string saved_nozzle_option_str = app_config->get("sync_extruder", "nozzle_option"); std::optional nozzle_option; @@ -1833,20 +1810,20 @@ std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj if (!saved_dev_id.empty() && !saved_nozzle_config_str.empty() && !saved_nozzle_option_str.empty() && saved_dev_id == curr_dev_id) { auto saved_nozzle_config = deserialize_nozzle_config(saved_nozzle_config_str); if (is_same_nozzle_config(saved_nozzle_config, curr_nozzle_cfg)) { - nozzle_option = deserialize_nozzle_option(saved_nozzle_option_str); + nozzle_option = deserialize_nozzle_option(saved_nozzle_option_str); can_reuse_saved_option = nozzle_option.has_value(); } if (can_reuse_saved_option) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Reusing saved nozzle option for dev_id: " << curr_dev_id; - auto& project_config = preset_bundle->project_config; - ConfigOptionEnumsGeneric* nozzle_volume_type_opt = project_config.option("nozzle_volume_type"); + auto &project_config = preset_bundle->project_config; + ConfigOptionEnumsGeneric *nozzle_volume_type_opt = project_config.option("nozzle_volume_type"); // Write to preset bundle config for (int extruder_id = 0; extruder_id < extruder_count; ++extruder_id) { NozzleVolumeType volume_type; - int nozzle_count; - bool clear_all = true; + int nozzle_count; + bool clear_all = true; if (!nozzle_option->extruder_nozzle_stats.count(extruder_id)) { nozzle_count = 0; @@ -1863,7 +1840,7 @@ std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj clear_all = false; } } else { - for (auto& stat : nozzle_option->extruder_nozzle_stats[extruder_id]) { + for (auto &stat : nozzle_option->extruder_nozzle_stats[extruder_id]) { volume_type = stat.first; nozzle_count = stat.second; setExtruderNozzleCount(preset_bundle, extruder_id, volume_type, nozzle_count, clear_all); @@ -1875,8 +1852,7 @@ std::optional Sidebar::priv::get_nozzle_options(MachineObject* obj // a manual flow switch, and refresh the sidebar badges. setNozzleStatsFromMachine(true); if (nozzle_volume_type_opt) { - for (int extruder_id = 0; extruder_id < extruder_count && extruder_id < (int) nozzle_volume_type_opt->values.size(); - ++extruder_id) + for (int extruder_id = 0; extruder_id < extruder_count && extruder_id < (int) nozzle_volume_type_opt->values.size(); ++extruder_id) updateNozzleCountDisplay(preset_bundle, extruder_id, NozzleVolumeType(nozzle_volume_type_opt->values[extruder_id])); } } @@ -1930,7 +1906,7 @@ void Sidebar::priv::show_fila_switch_msg(bool ready) long style = ready ? (wxICON_INFORMATION | wxOK) : (wxICON_WARNING | wxOK); // Orca: drop the vendor "Learn more" tracking link; there is no Orca help page for the switch yet. - MessageDialog dlg(static_cast(wxGetApp().mainframe), msg, _L("Tips"), style); + MessageDialog dlg(static_cast(wxGetApp().mainframe), msg, _L("Tips"), style); dlg.CenterOnParent(); dlg.ShowModal(); } @@ -1980,12 +1956,12 @@ void Sidebar::priv::update_extruder_separator_icon(bool show, bool ready) // left_extruder->GetPosition() and the icon position live in the same coordinate space. wxPoint left_box_pos = left_extruder->GetPosition(); wxPoint ams_local_pos = left_extruder->hsizer_ams->GetPosition(); - wxSize left_size = left_extruder->sizer->GetSize(); - wxSize ams_size = left_extruder->hsizer_ams->GetSize(); - wxSize icon_size = extruder_separator_icon->GetSize(); - int ams_abs_y = left_box_pos.y + ams_local_pos.y + FromDIP(4); - int center_x = left_size.GetWidth() + FromDIP(6); - int center_y = ams_abs_y + (ams_size.GetHeight() - icon_size.GetHeight()) / 2; + wxSize left_size = left_extruder->sizer->GetSize(); + wxSize ams_size = left_extruder->hsizer_ams->GetSize(); + wxSize icon_size = extruder_separator_icon->GetSize(); + int ams_abs_y = left_box_pos.y + ams_local_pos.y + FromDIP(4); + int center_x = left_size.GetWidth() + FromDIP(6); + int center_y = ams_abs_y + (ams_size.GetHeight() - icon_size.GetHeight()) / 2; center_x -= icon_size.GetWidth() / 2; center_y -= icon_size.GetHeight() / 2; extruder_separator_icon->SetPosition(wxPoint(center_x, center_y)); @@ -2004,19 +1980,19 @@ void Sidebar::priv::update_extruder_separator_icon(bool show, bool ready) m_panel_printer_content->Refresh(); } -bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_manual) +bool Sidebar::priv::sync_extruder_list(bool &only_external_material, bool is_manual) { - MachineObject* obj = wxGetApp().getDeviceManager()->get_selected_machine(); - auto printer_name = plater->get_selected_printer_name_in_combox(); + MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine(); + auto printer_name = plater->get_selected_printer_name_in_combox(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " begin sync_extruder_list"; if (obj == nullptr) { plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, _L("Sync printer information")); return false; } - // if (obj->get_extder_system()->extders.size() != 2) {//wxString(obj->get_preset_printer_model_name(machine_print_name)) - // plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::INCONSISTENT, _L("Sync printer - // information")); return false; - // } + //if (obj->get_extder_system()->extders.size() != 2) {//wxString(obj->get_preset_printer_model_name(machine_print_name)) + // plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::INCONSISTENT, _L("Sync printer information")); + // return false; + //} if (!plater->check_printer_initialized(obj)) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " check_printer_initialized fail"; @@ -2024,18 +2000,16 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man } std::string machine_print_name = obj->get_show_printer_type(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - std::string target_model_id = preset_bundle->printers.get_selected_preset().get_printer_type(preset_bundle); - Preset* machine_preset = get_printer_preset(obj); + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + std::string target_model_id = preset_bundle->printers.get_selected_preset().get_printer_type(preset_bundle); + Preset* machine_preset = get_printer_preset(obj); if (!machine_preset) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << "check error: machine_preset empty"; return false; } if (machine_print_name != target_model_id) { - MessageDialog dlg(this->plater, - _L("The currently selected machine preset is inconsistent with the connected printer type.\n" - "Are you sure to continue syncing?"), - _L("Sync printer information"), wxICON_WARNING | wxYES | wxNO); + MessageDialog dlg(this->plater, _L("The currently selected machine preset is inconsistent with the connected printer type.\n" + "Are you sure to continue syncing?"), _L("Sync printer information"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { return false; } @@ -2049,11 +2023,11 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man }); } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " go on sync_extruder_list"; - const Preset& cur_preset = preset_bundle->printers.get_selected_preset(); - int extruder_nums = preset_bundle->get_printer_extruder_count(); + const Preset &cur_preset = preset_bundle->printers.get_selected_preset(); + int extruder_nums = preset_bundle->get_printer_extruder_count(); std::vector extruder_map(extruder_nums); std::iota(extruder_map.begin(), extruder_map.end(), 0); - const ConfigOptionInts* physical_extruder_map = cur_preset.config.option("physical_extruder_map"); + const ConfigOptionInts *physical_extruder_map = cur_preset.config.option("physical_extruder_map"); if (physical_extruder_map != nullptr) { assert(physical_extruder_map->values.size() == extruder_nums); extruder_map = physical_extruder_map->values; @@ -2065,12 +2039,11 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man // value > 1 (nil-guarded, matching the manual/ToolOrdering gates), which no shipping single-nozzle or // dual-extruder profile sets. When the machine is multi-nozzle but no option resolves (e.g. user cancelled), // abort the sync. - const ConfigOptionIntsNullable* extruder_max_nozzle_count = cur_preset.config.option( - "extruder_max_nozzle_count"); + const ConfigOptionIntsNullable *extruder_max_nozzle_count = cur_preset.config.option("extruder_max_nozzle_count"); bool support_multi_nozzle = extruder_max_nozzle_count != nullptr && std::any_of(extruder_max_nozzle_count->values.begin(), extruder_max_nozzle_count->values.end(), [](int val) { return val > 1 && val != ConfigOptionIntsNullable::nil_value(); }); - auto nozzle_option = get_nozzle_options(obj, extruder_nums, support_multi_nozzle, is_manual); + auto nozzle_option = get_nozzle_options(obj, extruder_nums, support_multi_nozzle, is_manual); if (!nozzle_option && support_multi_nozzle) return false; @@ -2078,13 +2051,12 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man nozzle_diameters.resize(extruder_nums); std::vector target_types(extruder_nums, NozzleVolumeType::nvtStandard); for (size_t index = 0; index < extruder_nums; ++index) { - int extruder_id = extruder_map[index]; - nozzle_diameters[extruder_id] = nozzle_option ? atof(nozzle_option->diameter.c_str()) : - obj->GetExtderSystem()->GetNozzleDiameter(index); - NozzleVolumeType target_type = NozzleVolumeType::nvtStandard; + int extruder_id = extruder_map[index]; + nozzle_diameters[extruder_id] = nozzle_option ? atof(nozzle_option->diameter.c_str()) : obj->GetExtderSystem()->GetNozzleDiameter(index); + NozzleVolumeType target_type = NozzleVolumeType::nvtStandard; std::optional select_type; if (nozzle_option && nozzle_option->extruder_nozzle_stats.count(index)) { - const auto& stats = nozzle_option->extruder_nozzle_stats[index]; + const auto &stats = nozzle_option->extruder_nozzle_stats[index]; if (stats.size() > 1) // The extruder holds nozzles of several flow types: select the mixed-flow mode. select_type = NozzleVolumeType::nvtHybrid; @@ -2093,8 +2065,7 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man } if (obj->is_nozzle_flow_type_supported()) { if (obj->GetExtderSystem()->GetNozzleFlowType(index) == NozzleFlowType::NONE_FLOWTYPE) { - MessageDialog dlg(this->plater, - _L("There are unset nozzle types. Please set the nozzle types of all extruders before synchronizing."), + MessageDialog dlg(this->plater, _L("There are unset nozzle types. Please set the nozzle types of all extruders before synchronizing."), _L("Sync extruder infomation"), wxICON_WARNING | wxOK); dlg.ShowModal(); continue; @@ -2122,29 +2093,23 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man auto switcher_pos = ams.second->GetSwitcherPos(); if (!switcher_pos) continue; - int switcher_id = obj->is_main_extruder_on_left() ? (1 - static_cast(switcher_pos.value())) : - static_cast(switcher_pos.value()); + int switcher_id = obj->is_main_extruder_on_left() ? (1 - static_cast(switcher_pos.value())) + : static_cast(switcher_pos.value()); if (extruder_id != switcher_id) continue; } const bool is_n3s = ams.second->GetAmsType() == DevAms::N3S; // Main (first) extruder is id 0, deputy is id 1. if (extruder_id == 0) { - if (is_n3s) - ++main_1; - else - ++main_4; + if (is_n3s) ++main_1; else ++main_4; } else if (extruder_id == 1) { - if (is_n3s) - ++deputy_1; - else - ++deputy_4; + if (is_n3s) ++deputy_1; else ++deputy_4; } } } only_external_material = !obj->GetFilaSystem()->HasAms(); - int main_index = obj->is_main_extruder_on_left() ? 0 : 1; - int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0; + int main_index = obj->is_main_extruder_on_left() ? 0 : 1; + int deputy_index = obj->is_main_extruder_on_left() ? 1 : 0; if (extruder_nums > 1) { int left_index = left_extruder->combo_diameter->FindString(get_diameter_string(nozzle_diameters[0])); @@ -2169,7 +2134,7 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man } // set nozzle volume type after switching prset, so this value can override the old value stored in conf - auto printer_tab = dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER)); + auto printer_tab = dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER)); for (size_t idx = 0; idx < target_types.size(); ++idx) { printer_tab->set_extruder_volume_type(idx, target_types[idx]); } @@ -2184,17 +2149,17 @@ bool Sidebar::priv::sync_extruder_list(bool& only_external_material, bool is_man // Copy the live switch state into the project so slicing and the send dialog honor it. Both // resolve to false unless the switch is installed and calibrated, so nothing changes without one. - auto& project_config = wxGetApp().preset_bundle->project_config; - if (auto* dynamic_filament = project_config.opt("enable_filament_dynamic_map")) + auto &project_config = wxGetApp().preset_bundle->project_config; + if (auto *dynamic_filament = project_config.opt("enable_filament_dynamic_map")) dynamic_filament->value = is_fila_switch_ready(); - if (auto* has_switcher = project_config.opt("has_filament_switcher")) + if (auto *has_switcher = project_config.opt("has_filament_switcher")) has_switcher->value = is_fila_switch_ready(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " finish sync_extruder_list"; return true; } -void Sidebar::priv::update_sync_status(const MachineObject* obj) +void Sidebar::priv::update_sync_status(const MachineObject *obj) { StateColor not_synced_colour(std::pair(wxColour("#009688"), StateColor::Normal)); auto clear_all_sync_status = [this]() { @@ -2208,8 +2173,8 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) single_extruder->ShowBadge(false); single_extruder->sync_ams(nullptr, {}, {}); update_extruder_separator_icon(false, false); - // btn_sync_printer->SetBorderColor(not_synced_colour); - // btn_sync_printer->SetIcon("printer_sync"); + //btn_sync_printer->SetBorderColor(not_synced_colour); + //btn_sync_printer->SetIcon("printer_sync"); m_printer_bbl_sync->SetBitmap_("printer_sync_not"); }; @@ -2228,7 +2193,7 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) fila_switch_warning_shown = false; } - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; if (!preset_bundle) { clear_all_sync_status(); return; @@ -2236,7 +2201,7 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) bool printer_synced = false; // 1. update printer status - const Preset& cur_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); + const Preset &cur_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); if (preset_bundle && preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) == obj->get_show_printer_type()) { panel_printer_preset->ShowBadge(true); printer_synced = true; @@ -2252,23 +2217,25 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) struct ExtruderInfo { float diameter{0.4}; - // int nozzle_volue_type{0}; - int ams_4{0}; - int ams_1{0}; - std::vector ams_v4; - std::vector ams_v1; + //int nozzle_volue_type{0}; + int ams_4{0}; + int ams_1{0}; + std::vector ams_v4; + std::vector ams_v1; - bool operator==(const ExtruderInfo& other) const + bool operator==(const ExtruderInfo &other) const { - return abs(diameter - other.diameter) < EPSILON && /*nozzle_volue_type == other.nozzle_volue_type - &&*/ ams_4 == other.ams_4 && ams_1 == other.ams_1; + return abs(diameter - other.diameter) < EPSILON + && /*nozzle_volue_type == other.nozzle_volue_type + &&*/ ams_4 == other.ams_4 + && ams_1 == other.ams_1; } }; - auto is_same_nozzle_info = [obj](const ExtruderInfo& left, const ExtruderInfo& right) { + auto is_same_nozzle_info = [obj](const ExtruderInfo &left, const ExtruderInfo &right) { bool is_same_nozzle_type = true; if (obj->is_nozzle_flow_type_supported()) - is_same_nozzle_type = true; // left.nozzle_volue_type == right.nozzle_volue_type; // TODO: Orca hack + is_same_nozzle_type = true;//left.nozzle_volue_type == right.nozzle_volue_type; // TODO: Orca hack return abs(left.diameter - right.diameter) < EPSILON && is_same_nozzle_type; }; @@ -2293,11 +2260,10 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) } std::vector extruder_infos(extruder_nums); - std::vector nozzle_volume_types = - wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")->values; - // for (size_t i = 0; i < nozzle_volume_types.size(); ++i) { - // extruder_infos[i].nozzle_volue_type = nozzle_volume_types[i]; - // } + std::vector nozzle_volume_types = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")->values; + //for (size_t i = 0; i < nozzle_volume_types.size(); ++i) { + // extruder_infos[i].nozzle_volue_type = nozzle_volume_types[i]; + //} std::vector> extruder_ams_counts = wxGetApp().preset_bundle->extruder_ams_counts; if (extruder_ams_counts.size() >= extruder_nums) { @@ -2315,11 +2281,12 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) double value = 0.0; single_extruder->diameter.ToDouble(&value); extruder_infos[0].diameter = float(value); - } else if (extruder_nums == 2) { + } + else if(extruder_nums == 2){ double value = 0.0; left_extruder->diameter.ToDouble(&value); extruder_infos[0].diameter = float(value); - + value = 0.0; right_extruder->diameter.ToDouble(&value); extruder_infos[1].diameter = float(value); @@ -2328,11 +2295,11 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) std::vector machine_extruder_infos(obj->GetExtderSystem()->GetTotalExtderCount()); const auto& extruders = obj->GetExtderSystem()->GetExtruders(); - for (const DevExtder& extruder : extruders) { - // machine_extruder_infos[extruder.GetExtId()].nozzle_volue_type = int(extruder.GetNozzleFlowType()) - 1; - machine_extruder_infos[extruder.GetExtId()].diameter = extruder.GetNozzleDiameter(); + for (const DevExtder &extruder : extruders) { + //machine_extruder_infos[extruder.GetExtId()].nozzle_volue_type = int(extruder.GetNozzleFlowType()) - 1; + machine_extruder_infos[extruder.GetExtId()].diameter = extruder.GetNozzleDiameter(); } - for (auto& item : obj->GetFilaSystem()->GetAmsList()) { + for (auto &item : obj->GetFilaSystem()->GetAmsList()) { int extruder_id; // With the switch ready every AMS feeds both extruders, so attribute each to the extruder its // input track feeds. Without a switch the binding is a single extruder @@ -2342,10 +2309,10 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) auto switcher_pos = item.second->GetSwitcherPos(); if (!switcher_pos) continue; - extruder_id = obj->is_main_extruder_on_left() ? (1 - static_cast(switcher_pos.value())) : - static_cast(switcher_pos.value()); + extruder_id = obj->is_main_extruder_on_left() ? (1 - static_cast(switcher_pos.value())) + : static_cast(switcher_pos.value()); } else { - const auto& uniq_extruder_id = item.second->GetUniqueBindedExtruderId(); + const auto &uniq_extruder_id = item.second->GetUniqueBindedExtruderId(); if (!uniq_extruder_id) continue; extruder_id = uniq_extruder_id.value(); @@ -2354,7 +2321,8 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) if (extruder_id >= machine_extruder_infos.size()) continue; - if (item.second->GetAmsType() == DevAms::N3S) { // N3S + if (item.second->GetAmsType() == DevAms::N3S) + { // N3S machine_extruder_infos[extruder_id].ams_1++; machine_extruder_infos[extruder_id].ams_v1.push_back(item.second); } else { @@ -2372,17 +2340,20 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) panel_nozzle_dia->ShowBadge(true); // ORCA add support for nozzle sync single_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1); extruder_synced[0] = true; - } else { + } + else { single_extruder->ShowBadge(false); panel_nozzle_dia->ShowBadge(false); // ORCA add support for nozzle sync single_extruder->sync_ams(obj, {}, {}); } - } else if (extruder_nums == 2) { + } + else if (extruder_nums == 2) { if (extruder_infos[0] == machine_extruder_infos[0]) { left_extruder->ShowBadge(true); left_extruder->sync_ams(obj, machine_extruder_infos[0].ams_v4, machine_extruder_infos[0].ams_v1); extruder_synced[0] = true; - } else { + } + else { left_extruder->ShowBadge(false); left_extruder->sync_ams(obj, {}, {}); } @@ -2391,7 +2362,8 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) right_extruder->ShowBadge(true); right_extruder->sync_ams(obj, machine_extruder_infos[1].ams_v4, machine_extruder_infos[1].ams_v1); extruder_synced[1] = true; - } else { + } + else { right_extruder->ShowBadge(false); right_extruder->sync_ams(obj, {}, {}); } @@ -2400,12 +2372,13 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) StateColor synced_colour(std::pair(wxColour("#CECECE"), StateColor::Normal)); bool all_extruder_synced = std::all_of(extruder_synced.begin(), extruder_synced.end(), [](bool value) { return value; }); if (printer_synced && all_extruder_synced) { - // btn_sync_printer->SetBorderColor(synced_colour); - // btn_sync_printer->SetIcon("ams_nozzle_sync"); + // btn_sync_printer->SetBorderColor(synced_colour); + // btn_sync_printer->SetIcon("ams_nozzle_sync"); m_printer_bbl_sync->SetBitmap_("printer_sync_ok"); - } else { - // btn_sync_printer->SetBorderColor(not_synced_colour); - // btn_sync_printer->SetIcon("printer_sync"); + } + else { + // btn_sync_printer->SetBorderColor(not_synced_colour); + // btn_sync_printer->SetIcon("printer_sync"); m_printer_bbl_sync->SetBitmap_("printer_sync_not"); } @@ -2418,24 +2391,25 @@ void Sidebar::priv::update_sync_status(const MachineObject* obj) last_filament_ams_list = wxGetApp().preset_bundle->filament_ams_list; const auto print_tech = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology(); if (print_tech == ptFFF && !is_same_ams_list) { - for (PlaterPresetComboBox* cb : combos_filament) + for (PlaterPresetComboBox *cb : combos_filament) cb->update(); } } -} + } -void Sidebar::update_sync_ams_btn_enable(wxUpdateUIEvent& e) -{ - if (m_last_slice_state != p->plater->is_background_process_slicing()) { - m_last_slice_state = p->plater->is_background_process_slicing(); - // btn_sync->Enable(!m_last_slice_state); - p->m_printer_bbl_sync->Enable(!m_last_slice_state); - ams_btn->Enable(!m_last_slice_state); - Refresh(); - } -} +void Sidebar::update_sync_ams_btn_enable(wxUpdateUIEvent &e) + { + if (m_last_slice_state != p->plater->is_background_process_slicing()) { + m_last_slice_state = p->plater->is_background_process_slicing(); + //btn_sync->Enable(!m_last_slice_state); + p->m_printer_bbl_sync->Enable(!m_last_slice_state); + ams_btn->Enable(!m_last_slice_state); + Refresh(); + } + } -Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(39 * wxGetApp().em_unit(), -1)), p(new priv(parent)) +Sidebar::Sidebar(Plater *parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(39 * wxGetApp().em_unit(), -1)), p(new priv(parent)) { Choice::register_dynamic_list("support_filament", &dynamic_physical_filament_list); Choice::register_dynamic_list("support_interface_filament", &dynamic_physical_filament_list); @@ -2452,9 +2426,10 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // but this cause the bad layout of the sidebar, when all infoboxes appear. // As a result we can see the empty block at the bottom of the sidebar // But if we set this value to 5, layout will be better - // p->scrolled->SetScrollRate(0, 5); + //p->scrolled->SetScrollRate(0, 5); p->scrolled->SetBackgroundColour(*wxWHITE); + SetFont(wxGetApp().normal_font()); #ifndef __APPLE__ #ifdef _WIN32 @@ -2466,14 +2441,14 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, #endif int em = wxGetApp().em_unit(); - // BBS refine layout and styles - // Sizer in the scrolled area + //BBS refine layout and styles + // Sizer in the scrolled area auto* scrolled_sizer = m_scrolled_sizer = new wxBoxSizer(wxVERTICAL); p->scrolled->SetSizer(scrolled_sizer); - wxColour title_bg = wxColour(248, 248, 248); - wxColour inactive_text = wxColour(86, 86, 86); - wxColour active_text = wxColour(0, 0, 0); + wxColour title_bg = wxColour(248, 248, 248); + wxColour inactive_text = wxColour(86, 86, 86); + wxColour active_text = wxColour(0, 0, 0); wxColour static_line_col = wxColour(166, 169, 170); #ifdef __WINDOWS__ @@ -2488,7 +2463,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->m_panel_printer_title->SetBackgroundColor(title_bg); p->m_panel_printer_title->SetBackgroundColor2(0xF1F1F1); - p->m_printer_icon = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer"); + p->m_printer_icon = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer"); p->m_text_printer_settings = new Label(p->m_panel_printer_title, _L("Printer"), LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END); p->m_printer_icon->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) { @@ -2499,7 +2474,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // ORCA use connect button on titlebar p->m_printer_connect = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "monitor_signal_strong"); p->m_printer_connect->SetToolTip(_L("Connection")); - p->m_printer_connect->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + p->m_printer_connect->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { PhysicalPrinterDialog dlg(this->GetParent()); dlg.ShowModal(); }); @@ -2507,7 +2482,9 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // ORCA use sync button on titlebar p->m_printer_bbl_sync = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer_sync_not"); p->m_printer_bbl_sync->SetToolTip(_L("Synchronize nozzle information and the number of AMS")); - p->m_printer_bbl_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { deal_btn_sync(); }); + p->m_printer_bbl_sync->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + deal_btn_sync(); + }); p->m_printer_setting = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "settings"); p->m_printer_setting->Bind(wxEVT_BUTTON, [](wxCommandEvent &e) { @@ -2515,17 +2492,15 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // wxGetApp().params_dialog()->Popup(); // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_PRINTERS); - }); + }); wxBoxSizer* h_sizer_title = new wxBoxSizer(wxHORIZONTAL); h_sizer_title->Add(p->m_printer_icon, 0, wxALIGN_CENTRE | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); h_sizer_title->AddSpacer(FromDIP(SidebarProps::ElementSpacing())); h_sizer_title->Add(p->m_text_printer_settings, 1, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); - // h_sizer_title->AddStretchSpacer(); - h_sizer_title->Add(p->m_printer_connect, 0, wxALIGN_CENTER | wxRIGHT, - FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks - h_sizer_title->Add(p->m_printer_bbl_sync, 0, wxALIGN_CENTER | wxRIGHT, - FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks + //h_sizer_title->AddStretchSpacer(); + h_sizer_title->Add(p->m_printer_connect , 0, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks + h_sizer_title->Add(p->m_printer_bbl_sync, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(SidebarProps::WideSpacing())); // used larger margin to prevent accidental clicks h_sizer_title->Add(p->m_printer_setting, 0, wxALIGN_CENTER); h_sizer_title->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); h_sizer_title->SetMinSize(-1, 3 * em); @@ -2537,20 +2512,19 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // add printer title scrolled_sizer->Add(p->m_panel_printer_title, 0, wxEXPAND | wxALL, 0); - p->m_panel_printer_title->Bind(wxEVT_LEFT_UP, [this](auto& e) { + p->m_panel_printer_title->Bind(wxEVT_LEFT_UP, [this] (auto & e) { if (!p || !p->combo_printer || !p->m_text_printer_settings || !p->m_panel_printer_content || !m_scrolled_sizer) return; // ORCA Show printer name on title when its folded to inform user without expanding it again - bool isShown = p->m_panel_printer_content->IsShown(); - wxString title = _L("Printer") + wxString(!isShown ? "" : (" | " + p->combo_printer->GetValue())); + bool isShown = p->m_panel_printer_content->IsShown(); + wxString title = _L("Printer") + wxString(!isShown ? "" : (" | " + p->combo_printer->GetValue())); p->m_text_printer_settings->SetLabel(title); p->m_panel_printer_content->Show(!isShown); p->m_panel_printer_separator->Show(isShown); m_scrolled_sizer->Layout(); }); // ORCA add bottom border for seperation wile sections folded - p->m_panel_printer_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, - wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string + p->m_panel_printer_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string p->m_panel_printer_separator->SetBackgroundColour("#FFFFFF"); scrolled_sizer->Add(p->m_panel_printer_separator, 0, wxEXPAND); @@ -2559,8 +2533,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->m_panel_printer_content = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); p->m_panel_printer_content->SetBackgroundColour(wxColour(255, 255, 255)); - struct PanelColors - { + struct PanelColors { wxColour bg_normal = "#FFFFFF"; wxColour bg_focus = "#E5F0EE"; wxColour bd_normal = "#DBDBDB"; @@ -2573,17 +2546,18 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->panel_printer_preset->SetCornerRadius(FromDIP(PRINTER_PANEL_RADIUS)); p->panel_printer_preset->SetBorderColor(panel_color.bd_normal); p->panel_printer_preset->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); - p->panel_printer_preset->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { p->combo_printer->wxEvtHandler::ProcessEvent(evt); }); + p->panel_printer_preset->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { + p->combo_printer->wxEvtHandler::ProcessEvent(evt); + }); // ORCA Hide Cover automatically if there is not enough space - p->panel_printer_preset->Bind(wxEVT_SIZE, [this](auto& e) { + p->panel_printer_preset->Bind(wxEVT_SIZE, [this](auto & e) { auto current_width = e.GetSize().GetWidth(); auto narrow_width = FromDIP(235); - auto label_width = p->combo_printer->GetTextExtent(p->combo_printer->GetStringSelection()).GetWidth(); - auto min_width = label_width + FromDIP(25 + PRINTER_PANEL_SIZE.GetWidth()); - if (((min_width < narrow_width && min_width > current_width) || (current_width < narrow_width && min_width > narrow_width)) && - p->image_printer->IsShown()) + auto label_width = p->combo_printer->GetTextExtent(p->combo_printer->GetStringSelection()).GetWidth(); + auto min_width = label_width + FromDIP(25 + PRINTER_PANEL_SIZE.GetWidth()); + if(((min_width < narrow_width && min_width > current_width) || (current_width < narrow_width && min_width > narrow_width)) && p->image_printer->IsShown()) p->image_printer->Hide(); - else if ((current_width > min_width || !(current_width < narrow_width)) && !p->image_printer->IsShown()) + else if((current_width > min_width || !(current_width < narrow_width)) && !p->image_printer->IsShown()) p->image_printer->Show(); e.Skip(); }); @@ -2594,18 +2568,16 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->btn_edit_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "edit"); p->btn_edit_printer->SetToolTip(_L("Click to edit preset")); p->btn_edit_printer->Hide(); // hide for first launch - p->btn_edit_printer->Bind(wxEVT_BUTTON, [this, panel_color, printer_preset_hovered](wxCommandEvent) { + p->btn_edit_printer->Bind(wxEVT_BUTTON, [this, panel_color, printer_preset_hovered](wxCommandEvent){ p->editing_filament = -1; if (p->combo_printer->switch_to_tab()) p->editing_filament = 0; - // ORCA: FIX crash on wxGTK, directly modifying UI (self->Hide() / parent->Layout()) inside a button event can crash because - // callbacks are not re-entrant, leaving widgets in an inconsistent state + // ORCA: FIX crash on wxGTK, directly modifying UI (self->Hide() / parent->Layout()) inside a button event can crash because callbacks are not re-entrant, leaving widgets in an inconsistent state wxGetApp().CallAfter([this, panel_color, printer_preset_hovered]() { - // ORCA clicking edit button not triggers wxEVT_KILL_FOCUS wxEVT_LEAVE_WINDOW make changes manually to prevent stucked - // colors when opening printer settings + // ORCA clicking edit button not triggers wxEVT_KILL_FOCUS wxEVT_LEAVE_WINDOW make changes manually to prevent stucked colors when opening printer settings if (!p || !p->panel_printer_preset || !p->btn_edit_printer) return; - p->panel_printer_preset->SetBorderColor(panel_color.bd_normal); + p->panel_printer_preset->SetBorderColor(panel_color.bd_normal); printer_preset_hovered->clear(); p->btn_edit_printer->Hide(); p->panel_printer_preset->Layout(); @@ -2613,15 +2585,16 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, }); ScalableBitmap bitmap_printer(p->panel_printer_preset, "printer_placeholder", PRINTER_THUMBNAIL_SIZE.GetHeight()); - p->image_printer = new wxStaticBitmap(p->panel_printer_preset, wxID_ANY, bitmap_printer.bmp(), wxDefaultPosition, - FromDIP(PRINTER_THUMBNAIL_SIZE), 0); - p->image_printer->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { p->combo_printer->wxEvtHandler::ProcessEvent(evt); }); + p->image_printer = new wxStaticBitmap(p->panel_printer_preset, wxID_ANY, bitmap_printer.bmp(), wxDefaultPosition, FromDIP(PRINTER_THUMBNAIL_SIZE), 0); + p->image_printer->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { + p->combo_printer->wxEvtHandler::ProcessEvent(evt); + }); p->combo_printer = new PlaterPresetComboBox(p->panel_printer_preset, Preset::TYPE_PRINTER); p->combo_printer->SetBorderWidth(0); p->combo_printer->SetMaxSize(wxSize(-1, FromDIP(30))); // limiting height makes badge visible // ORCA paint whole combobox on focus - auto printer_focus_bg = [this, panel_color](bool focused) { + auto printer_focus_bg = [this, panel_color](bool focused){ auto bg_color = StateColor::darkModeColorFor(focused ? panel_color.bg_focus : panel_color.bg_normal); p->panel_printer_preset->SetBackgroundColor(bg_color); p->panel_printer_preset->SetBorderColor(focused ? panel_color.bd_focus : panel_color.bd_normal); @@ -2643,15 +2616,14 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, }); */ // ORCA use Show/Hide to gain text area instead using blank icon. also manages hover effect for border - for (wxWindow* w : - std::initializer_list{p->panel_printer_preset, p->btn_edit_printer, p->image_printer, p->combo_printer}) { - w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent& e) { + for (wxWindow *w : std::initializer_list{p->panel_printer_preset, p->btn_edit_printer, p->image_printer, p->combo_printer}) { + w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent &e) { printer_preset_hovered->insert(w); - if (!p->combo_printer->HasFocus()) + if(!p->combo_printer->HasFocus()) p->panel_printer_preset->SetBorderColor(panel_color.bd_hover); e.Skip(); }); - w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent& e) { + w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, printer_preset_hovered](wxMouseEvent &e) { printer_preset_hovered->erase(w); if (printer_preset_hovered->empty() && !p->combo_printer->HasFocus()) p->panel_printer_preset->SetBorderColor(panel_color.bd_normal); @@ -2661,7 +2633,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // Perform show/hide in wxEVT_IDLE after enter/leave events have settled. // This prevents the extraneous enter/leave events generated by the // layout change itself from causing a feedback loop. - Bind(wxEVT_IDLE, [this, printer_preset_hovered](wxIdleEvent& e) { + Bind(wxEVT_IDLE, [this, printer_preset_hovered](wxIdleEvent &e) { auto hovered = !printer_preset_hovered->empty(); if (p->btn_edit_printer->IsShown() != hovered) { if (hovered) { @@ -2678,18 +2650,19 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->panel_nozzle_dia->SetCornerRadius(FromDIP(PRINTER_PANEL_RADIUS)); p->panel_nozzle_dia->SetBorderColor(panel_color.bd_normal); p->panel_nozzle_dia->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); - p->panel_nozzle_dia->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { p->combo_nozzle_dia->wxEvtHandler::ProcessEvent(evt); }); + p->panel_nozzle_dia->Bind(wxEVT_LEFT_DOWN, [this](auto & evt) { + p->combo_nozzle_dia->wxEvtHandler::ProcessEvent(evt); + }); p->label_nozzle_title = new Label(p->panel_nozzle_dia, _L("Nozzle"), LB_PROPAGATE_MOUSE_EVENT); p->label_nozzle_title->SetFont(Label::Body_10); - p->combo_nozzle_dia = new ComboBox(p->panel_nozzle_dia, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, - wxCB_READONLY); + p->combo_nozzle_dia = new ComboBox(p->panel_nozzle_dia, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); p->combo_nozzle_dia->SetBorderWidth(0); p->combo_nozzle_dia->GetDropDown().SetUseContentWidth(true); p->combo_nozzle_dia->SetMinSize(FromDIP(wxSize(PRINTER_PANEL_SIZE.GetWidth() - 4, 26))); // requires a static value in here p->combo_nozzle_dia->SetMaxSize(FromDIP(wxSize(PRINTER_PANEL_SIZE.GetWidth() - 4, 26))); // using -1 with wxEXPAND has issues - p->combo_nozzle_dia->Bind(wxEVT_COMBOBOX, [this](auto& e) { + p->combo_nozzle_dia->Bind(wxEVT_COMBOBOX, [this](auto &e) { auto evt_combo = (*p->single_extruder).combo_diameter; evt_combo->SetSelection(e.GetSelection()); wxCommandEvent evt(wxEVT_COMBOBOX, evt_combo->GetId()); @@ -2699,7 +2672,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, e.Skip(); }); // ORCA paint whole combobox on focus - auto nozzle_focus_bg = [this, panel_color](bool focused) { + auto nozzle_focus_bg = [this, panel_color](bool focused){ auto bg_color = StateColor::darkModeColorFor(focused ? panel_color.bg_focus : panel_color.bg_normal); p->panel_nozzle_dia->SetBackgroundColor(bg_color); p->panel_nozzle_dia->SetBorderColor(focused ? panel_color.bd_focus : panel_color.bd_normal); @@ -2710,23 +2683,21 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); - p->label_nozzle_type = new Label(p->panel_nozzle_dia, "Brass", - LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END | wxALIGN_CENTRE_HORIZONTAL); + p->label_nozzle_type = new Label(p->panel_nozzle_dia, "Brass", LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END | wxALIGN_CENTRE_HORIZONTAL); p->label_nozzle_type->SetFont(Label::Body_10); p->label_nozzle_type->SetMinSize(FromDIP(wxSize(56, -1))); p->label_nozzle_type->SetMaxSize(FromDIP(wxSize(56, -1))); // highlight border on hover auto nozzle_dia_hovered = std::make_shared>(); - for (wxWindow* w : - std::initializer_list{p->panel_nozzle_dia, p->label_nozzle_title, p->label_nozzle_type, p->combo_nozzle_dia}) { - w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, nozzle_dia_hovered](wxMouseEvent& e) { + for (wxWindow *w : std::initializer_list{p->panel_nozzle_dia, p->label_nozzle_title, p->label_nozzle_type, p->combo_nozzle_dia}) { + w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, nozzle_dia_hovered](wxMouseEvent &e) { nozzle_dia_hovered->insert(w); - if (!p->combo_nozzle_dia->HasFocus()) + if(!p->combo_nozzle_dia->HasFocus()) p->panel_nozzle_dia->SetBorderColor(panel_color.bd_hover); e.Skip(); }); - w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, nozzle_dia_hovered](wxMouseEvent& e) { + w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, nozzle_dia_hovered](wxMouseEvent &e) { nozzle_dia_hovered->erase(w); if (nozzle_dia_hovered->empty() && !p->combo_nozzle_dia->HasFocus()) p->panel_nozzle_dia->SetBorderColor(panel_color.bd_normal); @@ -2734,10 +2705,10 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, }); } - wxGridSizer* nozzle_dia_sizer = new wxGridSizer(3, 1, FromDIP(2), 0); - nozzle_dia_sizer->Add(p->label_nozzle_title, 1, wxALIGN_CENTER | wxTOP, FromDIP(2)); - nozzle_dia_sizer->Add(p->combo_nozzle_dia, 0, wxALIGN_CENTER); - nozzle_dia_sizer->Add(p->label_nozzle_type, 1, wxALIGN_CENTER | wxBOTTOM, FromDIP(1)); + wxGridSizer *nozzle_dia_sizer = new wxGridSizer(3, 1, FromDIP(2), 0); + nozzle_dia_sizer->Add(p->label_nozzle_title, 1, wxALIGN_CENTER | wxTOP , FromDIP(2)); + nozzle_dia_sizer->Add(p->combo_nozzle_dia , 0, wxALIGN_CENTER); + nozzle_dia_sizer->Add(p->label_nozzle_type , 1, wxALIGN_CENTER | wxBOTTOM, FromDIP(1)); p->panel_nozzle_dia->SetSizer(nozzle_dia_sizer); @@ -2746,39 +2717,38 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->panel_printer_bed->SetCornerRadius(FromDIP(PRINTER_PANEL_RADIUS)); p->panel_printer_bed->SetBorderColor(panel_color.bd_normal); p->panel_printer_bed->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); - p->panel_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { + p->panel_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { on_leave_image_printer_bed(evt); p->combo_printer_bed->wxEvtHandler::ProcessEvent(evt); }); - // ScalableButton *wiki_bed = new ScalableButton(p->panel_printer_bed, wxID_ANY, "help"); - // wiki_bed->Bind(wxEVT_BUTTON, [](wxCommandEvent) { - // wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments"); - // }); + //ScalableButton *wiki_bed = new ScalableButton(p->panel_printer_bed, wxID_ANY, "help"); + //wiki_bed->Bind(wxEVT_BUTTON, [](wxCommandEvent) { + // wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments"); + //}); ScalableBitmap bitmap_bed(p->panel_printer_bed, "printer_placeholder", PRINTER_THUMBNAIL_SIZE.GetHeight()); p->image_printer_bed = new wxStaticBitmap(p->panel_printer_bed, wxID_ANY, bitmap_bed.bmp(), wxDefaultPosition, wxDefaultSize, 0); - p->image_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto& evt) { + p->image_printer_bed->Bind(wxEVT_LEFT_DOWN, [this](auto &evt) { on_leave_image_printer_bed(evt); p->combo_printer_bed->wxEvtHandler::ProcessEvent(evt); }); - p->combo_printer_bed = new ComboBox(p->panel_printer_bed, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, - wxCB_READONLY); + p->combo_printer_bed = new ComboBox(p->panel_printer_bed, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); p->combo_printer_bed->SetBorderWidth(0); p->combo_printer_bed->GetDropDown().SetUseContentWidth(true); - p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18, -1))); // ORCA show only arrow - p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18, -1))); // ORCA show only arrow + p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow + p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow reset_bed_type_combox_choices(true); - p->combo_printer_bed->Bind(wxEVT_COMBOBOX, [this](auto& e) { - auto image_path = get_cur_select_bed_image(); + p->combo_printer_bed->Bind(wxEVT_COMBOBOX, [this](auto &e) { + auto image_path = get_cur_select_bed_image(); p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); e.Skip(); }); // ORCA paint whole combobox on focus - auto bed_focus_bg = [this, panel_color](bool focused) { + auto bed_focus_bg = [this, panel_color](bool focused){ auto bg_color = StateColor::darkModeColorFor(focused ? panel_color.bg_focus : panel_color.bg_normal); p->panel_printer_bed->SetBackgroundColor(bg_color); p->panel_printer_bed->SetBorderColor(focused ? panel_color.bd_focus : panel_color.bd_normal); @@ -2790,34 +2760,34 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, // highlight border on hover auto printer_bed_hovered = std::make_shared>(); - for (wxWindow* w : std::initializer_list{p->panel_printer_bed, p->image_printer_bed, p->combo_printer_bed}) { - w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_bed_hovered](wxMouseEvent& e) { + for (wxWindow *w : std::initializer_list{p->panel_printer_bed, p->image_printer_bed, p->combo_printer_bed}) { + w->Bind(wxEVT_ENTER_WINDOW, [this, w, panel_color, printer_bed_hovered](wxMouseEvent &e) { printer_bed_hovered->insert(w); - if (!p->combo_printer_bed->HasFocus()) + if(!p->combo_printer_bed->HasFocus()) p->panel_printer_bed->SetBorderColor(panel_color.bd_hover); - if (w == p->image_printer_bed && !p->combo_printer_bed->is_drop_down()) // dont trigger while combo open + if(w == p->image_printer_bed && !p->combo_printer_bed->is_drop_down()) // dont trigger while combo open on_enter_image_printer_bed(e); e.Skip(); }); - w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, printer_bed_hovered](wxMouseEvent& e) { + w->Bind(wxEVT_LEAVE_WINDOW, [this, w, panel_color, printer_bed_hovered](wxMouseEvent &e) { printer_bed_hovered->erase(w); if (printer_bed_hovered->empty() && !p->combo_printer_bed->HasFocus()) p->panel_printer_bed->SetBorderColor(panel_color.bd_normal); - if (w == p->image_printer_bed) + if(w == p->image_printer_bed) on_leave_image_printer_bed(e); e.Skip(); }); } - wxBoxSizer* bed_type_sizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *bed_type_sizer = new wxBoxSizer(wxHORIZONTAL); bed_type_sizer->Add(p->combo_printer_bed, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); bed_type_sizer->Add(p->image_printer_bed, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); p->panel_printer_bed->SetSizer(bed_type_sizer); - AppConfig* app_config = wxGetApp().app_config; + AppConfig *app_config = wxGetApp().app_config; std::string str_bed_type = app_config->get("curr_bed_type"); - int bed_type_value = atoi(str_bed_type.c_str()); + int bed_type_value = atoi(str_bed_type.c_str()); // hotfix: btDefault is added as the first one in BedType, and app_config should not be btDefault if (bed_type_value == 0) { app_config->set("curr_bed_type", "1"); @@ -2834,7 +2804,7 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, if (item.first == str_bed_type) bed_type = (BedType)item.second; }*/ - BedType bed_type = (BedType) bed_type_value; + BedType bed_type = (BedType)bed_type_value; project_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); /* ORCA THIS PART MOVED TO TITLEBAR @@ -2864,10 +2834,13 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, }); p->btn_sync_printer = btn_sync; */ - p->timer_sync_printer->Bind(wxEVT_TIMER, [this](wxTimerEvent& e) { p->flush_printer_sync(); }); + p->timer_sync_printer->Bind(wxEVT_TIMER, [this] (wxTimerEvent & e) { + p->flush_printer_sync(); + }); + - p->left_extruder = new ExtruderGroup(p->m_panel_printer_content, 0, _L("Left Nozzle")); - p->right_extruder = new ExtruderGroup(p->m_panel_printer_content, 1, _L("Right Nozzle")); + p->left_extruder = new ExtruderGroup(p->m_panel_printer_content, 0, _L("Left Nozzle")); + p->right_extruder = new ExtruderGroup(p->m_panel_printer_content, 1, _L("Right Nozzle")); p->single_extruder = new ExtruderGroup(p->m_panel_printer_content, -1, _L("Nozzle")); // manuallySetNozzleCount refreshes the badge and the plater itself; it is a no-op unless the // printer has a multi-nozzle extruder (and the edit button is only enabled then, see @@ -2877,24 +2850,24 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->single_extruder->SetEditEnabled(false); // Orca: keep the floating switcher icon aligned with the left extruder's AMS row when the // extruder card is resized (the overlay is absolutely positioned, not managed by a sizer). - p->left_extruder->Bind(wxEVT_SIZE, [this](wxSizeEvent& evt) { + p->left_extruder->Bind(wxEVT_SIZE, [this](wxSizeEvent &evt) { if (p->extruder_separator_icon && p->extruder_separator_icon->IsShown()) { wxPoint left_box_pos = p->left_extruder->GetPosition(); wxPoint ams_local_pos = p->left_extruder->hsizer_ams->GetPosition(); - wxSize left_size = p->left_extruder->sizer->GetSize(); - wxSize ams_size = p->left_extruder->hsizer_ams->GetSize(); - wxSize icon_size = p->extruder_separator_icon->GetSize(); - int ams_abs_y = left_box_pos.y + ams_local_pos.y + FromDIP(4); - int center_x = left_size.GetWidth() + FromDIP(6) - icon_size.GetWidth() / 2; - int center_y = ams_abs_y + (ams_size.GetHeight() - icon_size.GetHeight()) / 2 - icon_size.GetHeight() / 2; + wxSize left_size = p->left_extruder->sizer->GetSize(); + wxSize ams_size = p->left_extruder->hsizer_ams->GetSize(); + wxSize icon_size = p->extruder_separator_icon->GetSize(); + int ams_abs_y = left_box_pos.y + ams_local_pos.y + FromDIP(4); + int center_x = left_size.GetWidth() + FromDIP(6) - icon_size.GetWidth() / 2; + int center_y = ams_abs_y + (ams_size.GetHeight() - icon_size.GetHeight()) / 2 - icon_size.GetHeight() / 2; p->extruder_separator_icon->SetPosition(wxPoint(center_x, center_y)); if (p->m_panel_printer_content) p->m_panel_printer_content->Refresh(); } evt.Skip(); }); - auto switch_diameter = [this](wxCommandEvent& evt) { - auto extruder = dynamic_cast(dynamic_cast(evt.GetEventObject())->GetParent()); + auto switch_diameter = [this](wxCommandEvent & evt) { + auto extruder = dynamic_cast(dynamic_cast(evt.GetEventObject())->GetParent()); p->is_switching_diameter = true; p->switch_diameter(extruder == p->single_extruder); p->is_switching_diameter = false; @@ -2911,394 +2884,379 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, } { - // Orca: Sidebar - Filament titlebar UI - // add filament title - p->m_panel_filament_title = new StaticBox(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_NONE); - p->m_panel_filament_title->SetBackgroundColor(title_bg); - p->m_panel_filament_title->SetBackgroundColor2(0xF1F1F1); - p->m_panel_filament_title->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent& e) { - if (!p || !p->m_filament_area_wrapper || !m_scrolled_sizer || !p->m_bpButton_set_filament || !p->m_purge_mode_btn || - !p->m_flushing_volume_btn || !p->m_bpButton_add_filament || !ams_btn) - return; - // ORCA exclude area of del button from titlebar collapse/expand feature to fix undesired collapse when user spams del filament - // button also block fold/unfold feature when user clicks to spacing between icons - int exclude_pt = p->m_bpButton_set_filament->GetPosition().x; // maximum fixed item - if (p->m_purge_mode_btn->IsShown()) - exclude_pt = p->m_purge_mode_btn->GetPosition().x; - else if (p->m_flushing_volume_btn->IsShown()) - exclude_pt = p->m_flushing_volume_btn->GetPosition().x; - else if (p->m_bpButton_add_filament->IsShown()) - exclude_pt = p->m_bpButton_add_filament->GetPosition().x - FromDIP(30); // reserve spacing for delete button - else if (ams_btn->IsShown()) - exclude_pt = ams_btn->GetPosition().x; - if (e.GetPosition().x > exclude_pt) - return; - bool isShown = p->m_filament_area_wrapper->IsShown(); - p->m_filament_area_wrapper->Show(!isShown); - p->m_panel_filament_separator->Show(isShown); - m_scrolled_sizer->Layout(); - CallAfter([this] { update_filaments_counter(true); }); // call after all UI processing done - }); + // Orca: Sidebar - Filament titlebar UI + // add filament title + p->m_panel_filament_title = new StaticBox(p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL | wxBORDER_NONE); + p->m_panel_filament_title->SetBackgroundColor(title_bg); + p->m_panel_filament_title->SetBackgroundColor2(0xF1F1F1); + p->m_panel_filament_title->Bind(wxEVT_LEFT_UP, [this](wxMouseEvent &e) { + if (!p || !p->m_filament_area_wrapper || !m_scrolled_sizer || !p->m_bpButton_set_filament || !p->m_purge_mode_btn || !p->m_flushing_volume_btn || !p->m_bpButton_add_filament || !ams_btn) + return; + // ORCA exclude area of del button from titlebar collapse/expand feature to fix undesired collapse when user spams del filament button + // also block fold/unfold feature when user clicks to spacing between icons + int exclude_pt = p->m_bpButton_set_filament->GetPosition().x; // maximum fixed item + if (p->m_purge_mode_btn->IsShown()) exclude_pt = p->m_purge_mode_btn->GetPosition().x; + else if (p->m_flushing_volume_btn->IsShown()) exclude_pt = p->m_flushing_volume_btn->GetPosition().x; + else if (p->m_bpButton_add_filament->IsShown()) exclude_pt = p->m_bpButton_add_filament->GetPosition().x - FromDIP(30); // reserve spacing for delete button + else if (ams_btn->IsShown()) exclude_pt = ams_btn->GetPosition().x; + if (e.GetPosition().x > exclude_pt) + return; + bool isShown = p->m_filament_area_wrapper->IsShown(); + p->m_filament_area_wrapper->Show(!isShown); + p->m_panel_filament_separator->Show(isShown); + m_scrolled_sizer->Layout(); - wxBoxSizer* bSizer39; - bSizer39 = new wxBoxSizer(wxHORIZONTAL); - p->m_filament_icon = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "filament"); - p->m_staticText_filament_settings = new Label(p->m_panel_filament_title, _L("Project Filaments"), LB_PROPAGATE_MOUSE_EVENT); - bSizer39->Add(p->m_filament_icon, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); - bSizer39->Add(p->m_staticText_filament_settings, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ElementSpacing())); - bSizer39->SetMinSize(-1, FromDIP(30)); + CallAfter([this]{update_filaments_counter(true);}); // call after all UI processing done + }); - p->m_staticText_filament_count = new Label(p->m_panel_filament_title, "(0)", LB_PROPAGATE_MOUSE_EVENT); - bSizer39->Add(p->m_staticText_filament_count, 0, wxALIGN_CENTER); - bSizer39->Add(FromDIP(10), 0, 0, 0, 0); + wxBoxSizer* bSizer39; + bSizer39 = new wxBoxSizer( wxHORIZONTAL ); + p->m_filament_icon = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "filament"); + p->m_staticText_filament_settings = new Label(p->m_panel_filament_title, _L("Project Filaments"), LB_PROPAGATE_MOUSE_EVENT); + bSizer39->Add(p->m_filament_icon, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); + bSizer39->Add(p->m_staticText_filament_settings, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(SidebarProps::ElementSpacing())); + bSizer39->SetMinSize(-1, FromDIP(30)); - p->m_panel_filament_title->SetSizer(bSizer39); - p->m_panel_filament_title->Layout(); - scrolled_sizer->Add(p->m_panel_filament_title, 0, wxEXPAND | wxALL, 0); - // ORCA add bottom border for seperation wile sections folded - p->m_panel_filament_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, - wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string - p->m_panel_filament_separator->SetBackgroundColour("#FFFFFF"); - scrolled_sizer->Add(p->m_panel_filament_separator, 0, wxEXPAND); + p->m_staticText_filament_count = new Label(p->m_panel_filament_title, "(0)", LB_PROPAGATE_MOUSE_EVENT); + bSizer39->Add(p->m_staticText_filament_count, 0, wxALIGN_CENTER ); + bSizer39->Add(FromDIP(10), 0, 0, 0, 0); - bSizer39->AddStretchSpacer(1); + p->m_panel_filament_title->SetSizer( bSizer39 ); + p->m_panel_filament_title->Layout(); + scrolled_sizer->Add(p->m_panel_filament_title, 0, wxEXPAND | wxALL, 0); + // ORCA add bottom border for seperation wile sections folded + p->m_panel_filament_separator = new wxPanel(p->scrolled, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(2))); // ORCA staticline class not works without string + p->m_panel_filament_separator->SetBackgroundColour("#FFFFFF"); + scrolled_sizer->Add(p->m_panel_filament_separator, 0, wxEXPAND); - p->m_purge_mode_btn = new Button(p->m_panel_filament_title, _L("Purge mode")); - p->m_purge_mode_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); + bSizer39->AddStretchSpacer(1); - p->m_purge_mode_btn->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) { - auto& preset_bundle = *wxGetApp().preset_bundle; - auto support_fast_purge_opt = preset_bundle.printers.get_edited_preset().config.option( - "support_fast_purge_mode"); - bool support_fast_purge = support_fast_purge_opt ? support_fast_purge_opt->value : false; - auto dlg_type = support_fast_purge ? PurgeModeDialogType::FastMode : PurgeModeDialogType::MultiNozzle; - PurgeModeDialog dlg(static_cast(wxGetApp().mainframe), dlg_type); - if (dlg.ShowModal() == wxID_OK) { - preset_bundle.project_config.set_key_value("prime_volume_mode", - new ConfigOptionEnum(dlg.get_selected_mode())); - wxGetApp().plater()->update(); - } - }); + p->m_purge_mode_btn = new Button(p->m_panel_filament_title, _L("Purge mode")); + p->m_purge_mode_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); - bSizer39->Add(p->m_purge_mode_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); - bSizer39->Hide(p->m_purge_mode_btn); // hidden on launch; shown only for printers that support purge mode selection - - // BBS - // add wiping dialog - // wiping_dialog_button->SetFont(wxGetApp().normal_font()); - p->m_flushing_volume_btn = new Button(p->m_panel_filament_title, _L("Flushing volumes")); - p->m_flushing_volume_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); - p->m_flushing_volume_btn->SetId(wxID_RESET); - auto has_modify = is_flush_config_modified(); - set_flushing_volume_warning(has_modify); - - p->m_flushing_volume_btn->Bind(wxEVT_BUTTON, ([parent, this](wxCommandEvent& e) { - open_flushing_dialog(parent, SimpleEvent(EVT_SCHEDULE_BACKGROUND_PROCESS, parent)); - p->plater->get_view3D_canvas3D()->reload_scene(true); - p->plater->update(); - })); - - bSizer39->Add(p->m_flushing_volume_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); - bSizer39->Hide(p->m_flushing_volume_btn); // ORCA Ensure button is hidden on launch while 1 filament exist - - ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); - add_btn->SetToolTip(_L("Add one filament")); - add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e) { - add_filament(); - update_filaments_counter(); - }); - p->m_bpButton_add_filament = add_btn; - - // ORCA Moved add button after delete button to prevent add button position change when remove icon automatically hidden - - ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament"); - del_btn->SetToolTip(_L("Remove last filament")); - del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e) { - delete_filament(); - update_filaments_counter(); - }); - p->m_bpButton_del_filament = del_btn; - - bSizer39->Add(del_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::IconSpacing())); - bSizer39->Add(add_btn, 0, wxALIGN_CENTER | wxLEFT, - FromDIP(SidebarProps::IconSpacing())); // ORCA Moved add button after delete button to prevent add button position - // change when remove icon automatically hidden - - bSizer39->Hide(p->m_bpButton_del_filament); // ORCA Ensure button is hidden on launch while 1 filament exist - - ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, - wxBU_EXACTFIT | wxNO_BORDER, false, 16); // ORCA match icon size with other icons as 16x16 - ams_btn->SetToolTip(_L("Synchronize filament list from AMS")); - ams_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e) { sync_ams_list(); }); - - ams_btn->Bind(wxEVT_UPDATE_UI, &Sidebar::update_sync_ams_btn_enable, this); - p->m_bpButton_ams_filament = ams_btn; - - bSizer39->Add(ams_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::WideSpacing())); - // bSizer39->Add(FromDIP(10), 0, 0, 0, 0 ); - - ScalableButton* set_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "settings"); - set_btn->SetToolTip(_L("Set filaments to use")); - set_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { - p->editing_filament = -1; - // wxGetApp().params_dialog()->Popup(); - // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); - wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_FILAMENTS); - }); - p->m_bpButton_set_filament = set_btn; - - bSizer39->Add(set_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::WideSpacing())); - bSizer39->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); - - // ---- Wrapper panel for collapse/expand of all filament content ---- - p->m_filament_area_wrapper = new wxPanel(p->scrolled, wxID_ANY); - p->m_filament_area_wrapper->SetBackgroundColour(*wxWHITE); - auto* wrapper_sizer = new wxBoxSizer(wxVERTICAL); - - // add filament content - p->m_panel_filament_content = new wxScrolledWindow(p->m_filament_area_wrapper, wxID_ANY, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL); - p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); - p->m_panel_filament_content->SetScrollRate(0, 5); - // p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(174)}); - p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); - - // wxBoxSizer* bSizer_filament_content; - // bSizer_filament_content = new wxBoxSizer( wxHORIZONTAL ); - - // Orca: Sidebar - Filament content UI: setup filament selection combos panel layout - // Creates a two-column grid layout for filament selection dropdowns within the scrollable panel - p->sizer_filaments = new wxBoxSizer(wxHORIZONTAL); - p->sizer_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); - p->sizer_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); - - p->combos_filament.push_back(nullptr); - - /* first filament item */ - init_filament_combo(&p->combos_filament[0], 0); - - // bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); - wxSizer* sizer_filaments2 = new wxBoxSizer(wxVERTICAL); - sizer_filaments2->Add(p->sizer_filaments, 0, wxEXPAND, 0); - p->m_panel_filament_content->SetSizer(sizer_filaments2); - p->m_panel_filament_content->Layout(); - - update_filaments_area_height(); // ORCA - - wrapper_sizer->Add(p->m_panel_filament_content, 0, wxEXPAND); - - // ---- Mixed-color filament section ---- - // A mixed filament is a virtual slot realized from 2-3 physical filaments at slicing time. - // Everything here stays hidden until at least two physical filaments exist, so a single - // filament setup looks exactly as before. - { - // 1) "+ Add Mixed Filament" button, shown only while no mixed filament exists yet. - p->m_btn_add_mixed_filament = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); - p->m_btn_add_mixed_filament->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#F8F8F8"))); - p->m_btn_add_mixed_filament->SetMinSize(wxSize(-1, FromDIP(23))); - { - auto* btn_sizer = new wxBoxSizer(wxHORIZONTAL); - auto* icon_add = new ScalableButton(p->m_btn_add_mixed_filament, wxID_ANY, "add_filament", wxEmptyString, wxDefaultSize, - wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 16); - auto* add_label = new wxStaticText(p->m_btn_add_mixed_filament, wxID_ANY, _L("Add Mixed Filament"), wxDefaultPosition, - wxDefaultSize, 0); - add_label->SetFont(::Label::Body_13); - btn_sizer->AddStretchSpacer(); - btn_sizer->Add(icon_add, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); - btn_sizer->Add(add_label, 0, wxALIGN_CENTER_VERTICAL); - btn_sizer->AddStretchSpacer(); - p->m_btn_add_mixed_filament->SetSizer(btn_sizer); - p->m_btn_add_mixed_filament->SetCursor(wxCursor(wxCURSOR_HAND)); - // Whole panel is the hit target, so forward clicks from the children too. - auto on_click = [this](wxMouseEvent&) { add_mixed_filament(); }; - p->m_btn_add_mixed_filament->Bind(wxEVT_LEFT_UP, on_click); - add_label->Bind(wxEVT_LEFT_UP, on_click); - icon_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { add_mixed_filament(); }); - } - wrapper_sizer->Add(p->m_btn_add_mixed_filament, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP | wxBOTTOM, FromDIP(8)); - - // 2) Title row with add / remove buttons, shown once a mixed filament exists. - p->m_panel_mixed_title = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); - p->m_panel_mixed_title->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); - { - auto* title_sizer = new wxBoxSizer(wxHORIZONTAL); - p->m_text_mixed_title = new wxStaticText(p->m_panel_mixed_title, wxID_ANY, _L("Mixed Filament")); - p->m_text_mixed_title->SetFont(::Label::Head_14); - title_sizer->Add(p->m_text_mixed_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); - title_sizer->AddStretchSpacer(); - - p->m_btn_mixed_del = new ScalableButton(p->m_panel_mixed_title, wxID_ANY, "delete_filament"); - p->m_btn_mixed_del->SetToolTip(_L("Remove last mixed filament")); - p->m_btn_mixed_del->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { - auto* plater_ptr = dynamic_cast(GetParent()); - if (!plater_ptr) - return; - auto mixed_indices = plater_ptr->mixed_filament_config_indices(); - if (!mixed_indices.empty()) - delete_mixed_filament_at(mixed_indices.size() - 1); - }); - title_sizer->Add(p->m_btn_mixed_del, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::IconSpacing())); - - p->m_btn_mixed_add = new ScalableButton(p->m_panel_mixed_title, wxID_ANY, "add_filament"); - p->m_btn_mixed_add->SetToolTip(_L("Add mixed filament")); - p->m_btn_mixed_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { add_mixed_filament(); }); - title_sizer->Add(p->m_btn_mixed_add, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::IconSpacing())); - title_sizer->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); - - p->m_panel_mixed_title->SetSizer(title_sizer); - } - wrapper_sizer->Add(p->m_panel_mixed_title, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(8)); - - // 3) Mixed filament rows, in their own scroll area so a long mixed list does not - // push the physical filament list off screen. - p->m_mixed_scroll_area = new wxScrolledWindow(p->m_filament_area_wrapper, wxID_ANY, wxDefaultPosition, wxDefaultSize, - wxTAB_TRAVERSAL); - p->m_mixed_scroll_area->SetScrollbars(0, 100, 1, 2); - p->m_mixed_scroll_area->SetScrollRate(0, 5); - p->m_mixed_scroll_area->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); - { - auto* mix_scroll_sizer = new wxBoxSizer(wxVERTICAL); - p->m_panel_mixed_content = new wxPanel(p->m_mixed_scroll_area, wxID_ANY); - p->m_panel_mixed_content->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); - - // Two columns, same idiom as sizer_filaments. - p->m_sizer_mixed_filaments = new wxBoxSizer(wxHORIZONTAL); - p->m_sizer_mixed_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); - p->m_sizer_mixed_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); - - auto* sizer_mixed2 = new wxBoxSizer(wxVERTICAL); - sizer_mixed2->Add(p->m_sizer_mixed_filaments, 0, wxEXPAND, 0); - p->m_panel_mixed_content->SetSizer(sizer_mixed2); - mix_scroll_sizer->Add(p->m_panel_mixed_content, 0, wxEXPAND | wxBOTTOM, FromDIP(8)); - p->m_mixed_scroll_area->SetSizer(mix_scroll_sizer); - } - p->m_mixed_scroll_area->EnableScrolling(false, true); - p->m_mixed_scroll_area->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT); - p->m_mixed_scroll_area->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { - int w = p->m_mixed_scroll_area->GetClientSize().GetWidth(); - if (w > 0) - p->m_mixed_scroll_area->SetVirtualSize(w, p->m_mixed_scroll_area->GetVirtualSize().GetHeight()); - e.Skip(); - }); - wrapper_sizer->Add(p->m_mixed_scroll_area, 0, wxEXPAND, 0); - - // 4) Warning bar for mixes whose components were deleted or whose types disagree. - p->m_panel_mixed_warning = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); - p->m_panel_mixed_warning->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); - { - auto* warn_sizer = new wxBoxSizer(wxHORIZONTAL); - p->m_text_mixed_warning = - new wxStaticText(p->m_panel_mixed_warning, wxID_ANY, - _L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); - p->m_text_mixed_warning->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#D01B1B"))); - p->m_text_mixed_warning->SetFont(::Label::Body_12); - p->m_text_mixed_warning->Wrap(FromDIP(360)); - warn_sizer->Add(p->m_text_mixed_warning, 1, wxALL, FromDIP(6)); - p->m_panel_mixed_warning->SetSizer(warn_sizer); - } - wrapper_sizer->Add(p->m_panel_mixed_warning, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(8)); - - // Hidden until update_mixed_filament_list() decides otherwise. - p->m_btn_add_mixed_filament->Hide(); - p->m_panel_mixed_title->Hide(); - p->m_mixed_scroll_area->Hide(); - p->m_panel_mixed_content->Hide(); - p->m_panel_mixed_warning->Hide(); + p->m_purge_mode_btn->Bind(wxEVT_BUTTON, [](wxCommandEvent &e) { + auto &preset_bundle = *wxGetApp().preset_bundle; + auto support_fast_purge_opt = preset_bundle.printers.get_edited_preset().config.option("support_fast_purge_mode"); + bool support_fast_purge = support_fast_purge_opt ? support_fast_purge_opt->value : false; + auto dlg_type = support_fast_purge ? PurgeModeDialogType::FastMode : PurgeModeDialogType::MultiNozzle; + PurgeModeDialog dlg(static_cast(wxGetApp().mainframe), dlg_type); + if (dlg.ShowModal() == wxID_OK) { + preset_bundle.project_config.set_key_value("prime_volume_mode", new ConfigOptionEnum(dlg.get_selected_mode())); + wxGetApp().plater()->update(); } - // ---- End mixed-color filament section ---- + }); - p->m_filament_area_wrapper->SetSizer(wrapper_sizer); - p->m_filament_area_wrapper->Layout(); - scrolled_sizer->Add( - p->m_filament_area_wrapper, 0, wxEXPAND | wxTOP | wxBOTTOM, - FromDIP(SidebarProps::ContentMarginV())); // ORCA use vertical margin on parent otherwise it shows scrollbar even on 1 filament - // ---- End filament area ---- + bSizer39->Add(p->m_purge_mode_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + bSizer39->Hide(p->m_purge_mode_btn); // hidden on launch; shown only for printers that support purge mode selection + + // BBS + // add wiping dialog + //wiping_dialog_button->SetFont(wxGetApp().normal_font()); + p->m_flushing_volume_btn = new Button(p->m_panel_filament_title, _L("Flushing volumes")); + p->m_flushing_volume_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); + p->m_flushing_volume_btn->SetId(wxID_RESET); + auto has_modify = is_flush_config_modified(); + set_flushing_volume_warning(has_modify); + + p->m_flushing_volume_btn->Bind(wxEVT_BUTTON, ([parent, this](wxCommandEvent &e) { + open_flushing_dialog(parent, SimpleEvent(EVT_SCHEDULE_BACKGROUND_PROCESS, parent)); + p->plater->get_view3D_canvas3D()->reload_scene(true); + p->plater->update(); + })); + + bSizer39->Add(p->m_flushing_volume_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + bSizer39->Hide(p->m_flushing_volume_btn); // ORCA Ensure button is hidden on launch while 1 filament exist + + ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); + add_btn->SetToolTip(_L("Add one filament")); + add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e){ + add_filament(); + update_filaments_counter(); + }); + p->m_bpButton_add_filament = add_btn; + + // ORCA Moved add button after delete button to prevent add button position change when remove icon automatically hidden + + ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament"); + del_btn->SetToolTip(_L("Remove last filament")); + del_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + delete_filament(); + update_filaments_counter(); + }); + p->m_bpButton_del_filament = del_btn; + + bSizer39->Add(del_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::IconSpacing())); + bSizer39->Add(add_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::IconSpacing())); // ORCA Moved add button after delete button to prevent add button position change when remove icon automatically hidden + + bSizer39->Hide(p->m_bpButton_del_filament); // ORCA Ensure button is hidden on launch while 1 filament exist + + ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, + wxBU_EXACTFIT | wxNO_BORDER, false, 16); // ORCA match icon size with other icons as 16x16 + ams_btn->SetToolTip(_L("Synchronize filament list from AMS")); + ams_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + sync_ams_list(); + }); + + ams_btn->Bind(wxEVT_UPDATE_UI, &Sidebar::update_sync_ams_btn_enable, this); + p->m_bpButton_ams_filament = ams_btn; + + bSizer39->Add(ams_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::WideSpacing())); + //bSizer39->Add(FromDIP(10), 0, 0, 0, 0 ); + + ScalableButton* set_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "settings"); + set_btn->SetToolTip(_L("Set filaments to use")); + set_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + p->editing_filament = -1; + // wxGetApp().params_dialog()->Popup(); + // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); + wxGetApp().run_wizard(ConfigWizard::RR_USER, ConfigWizard::SP_FILAMENTS); + }); + p->m_bpButton_set_filament = set_btn; + + bSizer39->Add(set_btn, 0, wxALIGN_CENTER | wxLEFT, FromDIP(SidebarProps::WideSpacing())); + bSizer39->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); + + // ---- Wrapper panel for collapse/expand of all filament content ---- + p->m_filament_area_wrapper = new wxPanel(p->scrolled, wxID_ANY); + p->m_filament_area_wrapper->SetBackgroundColour(*wxWHITE); + auto* wrapper_sizer = new wxBoxSizer(wxVERTICAL); + + // add filament content + p->m_panel_filament_content = new wxScrolledWindow(p->m_filament_area_wrapper, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); + p->m_panel_filament_content->SetScrollRate(0, 5); + //p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(174)}); + p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); + + //wxBoxSizer* bSizer_filament_content; + //bSizer_filament_content = new wxBoxSizer( wxHORIZONTAL ); + + // Orca: Sidebar - Filament content UI: setup filament selection combos panel layout + // Creates a two-column grid layout for filament selection dropdowns within the scrollable panel + p->sizer_filaments = new wxBoxSizer(wxHORIZONTAL); + p->sizer_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); + p->sizer_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); + + p->combos_filament.push_back(nullptr); + + /* first filament item */ + init_filament_combo(&p->combos_filament[0], 0); + + //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); + wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL); + sizer_filaments2->Add(p->sizer_filaments, 0, wxEXPAND, 0); + p->m_panel_filament_content->SetSizer(sizer_filaments2); + p->m_panel_filament_content->Layout(); + + update_filaments_area_height(); // ORCA + + wrapper_sizer->Add(p->m_panel_filament_content, 0, wxEXPAND); + + // ---- Mixed-color filament section ---- + // A mixed filament is a virtual slot realized from 2-3 physical filaments at slicing time. + // Everything here stays hidden until at least two physical filaments exist, so a single + // filament setup looks exactly as before. + { + // 1) "+ Add Mixed Filament" button, shown only while no mixed filament exists yet. + p->m_btn_add_mixed_filament = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); + p->m_btn_add_mixed_filament->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#F8F8F8"))); + p->m_btn_add_mixed_filament->SetMinSize(wxSize(-1, FromDIP(23))); + { + auto* btn_sizer = new wxBoxSizer(wxHORIZONTAL); + auto* icon_add = new ScalableButton(p->m_btn_add_mixed_filament, wxID_ANY, "add_filament", wxEmptyString, + wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 16); + auto* add_label = new wxStaticText(p->m_btn_add_mixed_filament, wxID_ANY, _L("Add Mixed Filament"), + wxDefaultPosition, wxDefaultSize, 0); + add_label->SetFont(::Label::Body_13); + btn_sizer->AddStretchSpacer(); + btn_sizer->Add(icon_add, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + btn_sizer->Add(add_label, 0, wxALIGN_CENTER_VERTICAL); + btn_sizer->AddStretchSpacer(); + p->m_btn_add_mixed_filament->SetSizer(btn_sizer); + p->m_btn_add_mixed_filament->SetCursor(wxCursor(wxCURSOR_HAND)); + // Whole panel is the hit target, so forward clicks from the children too. + auto on_click = [this](wxMouseEvent&) { add_mixed_filament(); }; + p->m_btn_add_mixed_filament->Bind(wxEVT_LEFT_UP, on_click); + add_label->Bind(wxEVT_LEFT_UP, on_click); + icon_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { add_mixed_filament(); }); + } + wrapper_sizer->Add(p->m_btn_add_mixed_filament, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP | wxBOTTOM, FromDIP(8)); + + // 2) Title row with add / remove buttons, shown once a mixed filament exists. + p->m_panel_mixed_title = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); + p->m_panel_mixed_title->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + { + auto* title_sizer = new wxBoxSizer(wxHORIZONTAL); + p->m_text_mixed_title = new wxStaticText(p->m_panel_mixed_title, wxID_ANY, _L("Mixed Filament")); + p->m_text_mixed_title->SetFont(::Label::Head_14); + title_sizer->Add(p->m_text_mixed_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::TitlebarMargin())); + title_sizer->AddStretchSpacer(); + + p->m_btn_mixed_del = new ScalableButton(p->m_panel_mixed_title, wxID_ANY, "delete_filament"); + p->m_btn_mixed_del->SetToolTip(_L("Remove last mixed filament")); + p->m_btn_mixed_del->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + auto* plater_ptr = dynamic_cast(GetParent()); + if (!plater_ptr) return; + auto mixed_indices = plater_ptr->mixed_filament_config_indices(); + if (!mixed_indices.empty()) + delete_mixed_filament_at(mixed_indices.size() - 1); + }); + title_sizer->Add(p->m_btn_mixed_del, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::IconSpacing())); + + p->m_btn_mixed_add = new ScalableButton(p->m_panel_mixed_title, wxID_ANY, "add_filament"); + p->m_btn_mixed_add->SetToolTip(_L("Add mixed filament")); + p->m_btn_mixed_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { add_mixed_filament(); }); + title_sizer->Add(p->m_btn_mixed_add, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::IconSpacing())); + title_sizer->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); + + p->m_panel_mixed_title->SetSizer(title_sizer); + } + wrapper_sizer->Add(p->m_panel_mixed_title, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(8)); + + // 3) Mixed filament rows, in their own scroll area so a long mixed list does not + // push the physical filament list off screen. + p->m_mixed_scroll_area = new wxScrolledWindow(p->m_filament_area_wrapper, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + p->m_mixed_scroll_area->SetScrollbars(0, 100, 1, 2); + p->m_mixed_scroll_area->SetScrollRate(0, 5); + p->m_mixed_scroll_area->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + { + auto* mix_scroll_sizer = new wxBoxSizer(wxVERTICAL); + p->m_panel_mixed_content = new wxPanel(p->m_mixed_scroll_area, wxID_ANY); + p->m_panel_mixed_content->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + + // Two columns, same idiom as sizer_filaments. + p->m_sizer_mixed_filaments = new wxBoxSizer(wxHORIZONTAL); + p->m_sizer_mixed_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); + p->m_sizer_mixed_filaments->Add(new wxBoxSizer(wxVERTICAL), 1, wxEXPAND); + + auto* sizer_mixed2 = new wxBoxSizer(wxVERTICAL); + sizer_mixed2->Add(p->m_sizer_mixed_filaments, 0, wxEXPAND, 0); + p->m_panel_mixed_content->SetSizer(sizer_mixed2); + mix_scroll_sizer->Add(p->m_panel_mixed_content, 0, wxEXPAND | wxBOTTOM, FromDIP(8)); + p->m_mixed_scroll_area->SetSizer(mix_scroll_sizer); + } + p->m_mixed_scroll_area->EnableScrolling(false, true); + p->m_mixed_scroll_area->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT); + p->m_mixed_scroll_area->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { + int w = p->m_mixed_scroll_area->GetClientSize().GetWidth(); + if (w > 0) + p->m_mixed_scroll_area->SetVirtualSize(w, p->m_mixed_scroll_area->GetVirtualSize().GetHeight()); + e.Skip(); + }); + wrapper_sizer->Add(p->m_mixed_scroll_area, 0, wxEXPAND, 0); + + // 4) Warning bar for mixes whose components were deleted or whose types disagree. + p->m_panel_mixed_warning = new wxPanel(p->m_filament_area_wrapper, wxID_ANY); + p->m_panel_mixed_warning->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); + { + auto* warn_sizer = new wxBoxSizer(wxHORIZONTAL); + p->m_text_mixed_warning = new wxStaticText(p->m_panel_mixed_warning, wxID_ANY, + _L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); + p->m_text_mixed_warning->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#D01B1B"))); + p->m_text_mixed_warning->SetFont(::Label::Body_12); + p->m_text_mixed_warning->Wrap(FromDIP(360)); + warn_sizer->Add(p->m_text_mixed_warning, 1, wxALL, FromDIP(6)); + p->m_panel_mixed_warning->SetSizer(warn_sizer); + } + wrapper_sizer->Add(p->m_panel_mixed_warning, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(8)); + + // Hidden until update_mixed_filament_list() decides otherwise. + p->m_btn_add_mixed_filament->Hide(); + p->m_panel_mixed_title->Hide(); + p->m_mixed_scroll_area->Hide(); + p->m_panel_mixed_content->Hide(); + p->m_panel_mixed_warning->Hide(); + } + // ---- End mixed-color filament section ---- + + p->m_filament_area_wrapper->SetSizer(wrapper_sizer); + p->m_filament_area_wrapper->Layout(); + scrolled_sizer->Add(p->m_filament_area_wrapper, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(SidebarProps::ContentMarginV())); // ORCA use vertical margin on parent otherwise it shows scrollbar even on 1 filament + // ---- End filament area ---- } { - // add project title - auto params_panel = ((MainFrame*) parent->GetParent())->m_param_panel; - if (params_panel) { - params_panel->get_top_panel()->Reparent(p->scrolled); - auto spliter_1 = new ::StaticLine(p->scrolled); - spliter_1->SetLineColour("#A6A9AA"); - scrolled_sizer->Add(spliter_1, 0, wxEXPAND); - scrolled_sizer->Add(params_panel->get_top_panel(), 0, wxEXPAND); - auto spliter_2 = new ::StaticLine(p->scrolled); - spliter_2->SetLineColour("#CECECE"); - scrolled_sizer->Add(spliter_2, 0, wxEXPAND); + //add project title + auto params_panel = ((MainFrame*)parent->GetParent())->m_param_panel; + if (params_panel) { + params_panel->get_top_panel()->Reparent(p->scrolled); + auto spliter_1 = new ::StaticLine(p->scrolled); + spliter_1->SetLineColour("#A6A9AA"); + scrolled_sizer->Add(spliter_1, 0, wxEXPAND); + scrolled_sizer->Add(params_panel->get_top_panel(), 0, wxEXPAND); + auto spliter_2 = new ::StaticLine(p->scrolled); + spliter_2->SetLineColour("#CECECE"); + scrolled_sizer->Add(spliter_2, 0, wxEXPAND); + } + + //add project content + p->sizer_params = new wxBoxSizer(wxVERTICAL); + + // ORCA: Update search box to modern style + p->m_search_bar = new StaticBox(p->scrolled); + p->m_search_bar->SetCornerRadius(0); + p->m_search_bar->SetBorderColor(wxColour("#CECECE")); + + p->m_search_item = new TextInput(p->m_search_bar, wxEmptyString, wxEmptyString, "", wxDefaultPosition, wxDefaultSize, 0 | wxBORDER_NONE); + p->m_search_item->SetIcon(*BitmapCache().load_svg("search", FromDIP(16), FromDIP(16))); // ORCA: Add search icon to search box + + wxTextCtrl* text_ctrl = p->m_search_item->GetTextCtrl(); + text_ctrl->SetHint(_L("Search plate, object and part.")); + text_ctrl->SetForegroundColour(wxColour("#262E30")); + text_ctrl->SetFont(Label::Body_13); + text_ctrl->SetSize(wxSize(-1, FromDIP(16))); // Centers text vertically + + text_ctrl->Bind(wxEVT_SET_FOCUS, [this](wxFocusEvent& e) { + if (p->dia->IsShown()) { + e.Skip(); + return; } - - // add project content - p->sizer_params = new wxBoxSizer(wxVERTICAL); - - // ORCA: Update search box to modern style - p->m_search_bar = new StaticBox(p->scrolled); - p->m_search_bar->SetCornerRadius(0); - p->m_search_bar->SetBorderColor(wxColour("#CECECE")); - - p->m_search_item = new TextInput(p->m_search_bar, wxEmptyString, wxEmptyString, "", wxDefaultPosition, wxDefaultSize, - 0 | wxBORDER_NONE); - p->m_search_item->SetIcon(*BitmapCache().load_svg("search", FromDIP(16), FromDIP(16))); // ORCA: Add search icon to search box - - wxTextCtrl* text_ctrl = p->m_search_item->GetTextCtrl(); - text_ctrl->SetHint(_L("Search plate, object and part.")); - text_ctrl->SetForegroundColour(wxColour("#262E30")); - text_ctrl->SetFont(Label::Body_13); - text_ctrl->SetSize(wxSize(-1, FromDIP(16))); // Centers text vertically - - text_ctrl->Bind(wxEVT_SET_FOCUS, [this](wxFocusEvent& e) { - if (p->dia->IsShown()) { - e.Skip(); - return; - } - p->m_search_bar->SetBorderColor(wxColour("#009688")); - wxPoint pos = this->p->m_search_bar->ClientToScreen(wxPoint(0, 0)); + p->m_search_bar->SetBorderColor(wxColour("#009688")); + wxPoint pos = this->p->m_search_bar->ClientToScreen(wxPoint(0, 0)); #ifndef __WXGTK__ - pos.y += this->p->m_search_bar->GetRect().height; + pos.y += this->p->m_search_bar->GetRect().height; #else this->p->m_search_item->Enable(false); #endif - p->dia->SetPosition(pos); - p->dia->Popup(); - e.Skip(); // required to show caret - }); + p->dia->SetPosition(pos); + p->dia->Popup(); + e.Skip(); // required to show caret + }); - auto search_sizer = new wxBoxSizer(wxHORIZONTAL); - search_sizer->Add(new wxWindow(p->m_search_bar, wxID_ANY, wxDefaultPosition, wxSize(0, 0)), 0, wxEXPAND | wxLEFT | wxRIGHT, - FromDIP(1)); - search_sizer->Add(p->m_search_item, 1, wxEXPAND | wxALL, FromDIP(2)); - p->m_search_bar->SetSizer(search_sizer); - p->m_search_bar->Layout(); - search_sizer->Fit(p->m_search_bar); + auto search_sizer = new wxBoxSizer(wxHORIZONTAL); + search_sizer->Add(new wxWindow(p->m_search_bar, wxID_ANY, wxDefaultPosition, wxSize(0, 0)), 0, wxEXPAND|wxLEFT|wxRIGHT, FromDIP(1)); + search_sizer->Add(p->m_search_item, 1, wxEXPAND | wxALL, FromDIP(2)); + p->m_search_bar->SetSizer(search_sizer); + p->m_search_bar->Layout(); + search_sizer->Fit(p->m_search_bar); - p->m_object_list = new ObjectList(p->scrolled); - p->m_object_list->Bind(wxCUSTOMEVT_EXIT_SEARCH, [this](wxCommandEvent&) { + p->m_object_list = new ObjectList(p->scrolled); + p->m_object_list->Bind(wxCUSTOMEVT_EXIT_SEARCH, [this](wxCommandEvent&) { #ifdef __WXGTK__ - this->p->m_search_item->Enable(true); + this->p->m_search_item->Enable(true); #endif - this->p->m_search_bar->SetBorderColor(wxColour("#CECECE")); - this->p->m_search_item->GetTextCtrl()->SetValue(""); // reset value when close - }); + this->p->m_search_bar->SetBorderColor(wxColour("#CECECE")); + this->p->m_search_item->GetTextCtrl()->SetValue(""); // reset value when close + }); - p->sizer_params->Add(p->m_search_bar, 0, wxALL | wxEXPAND, 0); - p->sizer_params->Add(p->m_object_list, 1, wxEXPAND | wxTOP, 0); - scrolled_sizer->Add(p->sizer_params, 2, wxEXPAND | wxLEFT, 0); - p->m_object_list->Hide(); - p->m_search_bar->Hide(); - // Frequently Object Settings - p->object_settings = new ObjectSettings(p->scrolled); + p->sizer_params->Add(p->m_search_bar, 0, wxALL | wxEXPAND, 0); + p->sizer_params->Add(p->m_object_list, 1, wxEXPAND | wxTOP, 0); + scrolled_sizer->Add(p->sizer_params, 2, wxEXPAND | wxLEFT, 0); + p->m_object_list->Hide(); + p->m_search_bar->Hide(); + // Frequently Object Settings + p->object_settings = new ObjectSettings(p->scrolled); - p->dia = new Search::SearchObjectDialog(p->m_object_list, p->scrolled->GetParent(), p->m_search_item); + p->dia = new Search::SearchObjectDialog(p->m_object_list, p->scrolled->GetParent(), p->m_search_item); #if !NEW_OBJECT_SETTING - p->object_settings->Hide(); - p->sizer_params->Add(p->object_settings->get_sizer(), 0, wxEXPAND | wxTOP, 5 * em / 10); + p->object_settings->Hide(); + p->sizer_params->Add(p->object_settings->get_sizer(), 0, wxEXPAND | wxTOP, 5 * em / 10); #else - if (params_panel) { - params_panel->Reparent(p->scrolled); - scrolled_sizer->Add(params_panel, 3, wxEXPAND); - } + if (params_panel) { + params_panel->Reparent(p->scrolled); + scrolled_sizer->Add(params_panel, 3, wxEXPAND); + } #endif } @@ -3306,71 +3264,67 @@ Sidebar::Sidebar(Plater* parent) : wxPanel(parent, wxID_ANY, wxDefaultPosition, p->object_layers->Hide(); p->sizer_params->Add(p->object_layers->get_sizer(), 0, wxEXPAND | wxTOP, 0); - auto* sizer = new wxBoxSizer(wxVERTICAL); + auto *sizer = new wxBoxSizer(wxVERTICAL); sizer->Add(p->scrolled, 1, wxEXPAND); SetSizer(sizer); } Sidebar::~Sidebar() {} -void Sidebar::on_enter_image_printer_bed(wxMouseEvent& evt) -{ - // p->image_printer_bed->Bind(wxEVT_LEAVE_WINDOW, &Sidebar::on_leave_image_printer_bed, this); - auto pos = p->panel_printer_bed->GetScreenPosition(); - auto rect = p->panel_printer_bed->GetRect(); - wxPoint temp_pos(pos.x + rect.GetWidth() + FromDIP(3), pos.y); +void Sidebar::on_enter_image_printer_bed(wxMouseEvent &evt) { + //p->image_printer_bed->Bind(wxEVT_LEAVE_WINDOW, &Sidebar::on_leave_image_printer_bed, this); + auto pos = p->panel_printer_bed->GetScreenPosition(); + auto rect = p->panel_printer_bed->GetRect(); + wxPoint temp_pos(pos.x + rect.GetWidth() + FromDIP(3), pos.y); if (p->big_bed_image_popup == nullptr) p->big_bed_image_popup = new ImageDPIFrame(); - auto image_path = get_cur_select_bed_image(); - p->big_bed_image_popup->set_bitmap( - create_scaled_bitmap("big_" + image_path, p->big_bed_image_popup, p->big_bed_image_popup->get_image_px())); + auto image_path = get_cur_select_bed_image(); + p->big_bed_image_popup->set_bitmap(create_scaled_bitmap("big_" + image_path, p->big_bed_image_popup, p->big_bed_image_popup->get_image_px())); p->big_bed_image_popup->set_title(p->combo_printer_bed->GetString(p->combo_printer_bed->GetSelection())); p->big_bed_image_popup->SetCanFocus(false); p->big_bed_image_popup->SetPosition(temp_pos); p->big_bed_image_popup->on_show(); } -void Sidebar::on_leave_image_printer_bed(wxMouseEvent& evt) -{ - // auto pos_x = evt.GetX(); - // auto pos_y = evt.GetY(); - // auto rect = p->image_printer_bed->GetRect(); - // if ((pos_x <= 0 || pos_y <= 0 || pos_x >= rect.GetWidth()) && p->big_bed_image_popup) { +void Sidebar::on_leave_image_printer_bed(wxMouseEvent &evt) { + //auto pos_x = evt.GetX(); + //auto pos_y = evt.GetY(); + //auto rect = p->image_printer_bed->GetRect(); + //if ((pos_x <= 0 || pos_y <= 0 || pos_x >= rect.GetWidth()) && p->big_bed_image_popup) { if (p->big_bed_image_popup) { bool was_visible = p->big_bed_image_popup->IsShown(); p->big_bed_image_popup->on_hide(); - if (!p->combo_printer_bed->is_drop_down() && was_visible) - p->combo_printer_bed->SetFocus(); // set focus back to bed type combo. this prevents weird look if focus on other item + if(!p->combo_printer_bed->is_drop_down() && was_visible) + p->combo_printer_bed->SetFocus(); // set focus back to bed type combo. this prevents weird look if focus on other item } } -void Sidebar::on_change_color_mode(bool is_dark) -{ - const ModelObjectPtrs& mos = wxGetApp().model().objects; +void Sidebar::on_change_color_mode(bool is_dark) { + const ModelObjectPtrs &mos = wxGetApp().model().objects; for (int i = 0; i < mos.size(); i++) { - wxGetApp().obj_list()->update_info_items(i, nullptr, false, true); + wxGetApp().obj_list()->update_info_items(i,nullptr,false,true); } + } void Sidebar::create_printer_preset() { CreatePrinterPresetDialog dlg(wxGetApp().mainframe); - int res = dlg.ShowModal(); + int res = dlg.ShowModal(); if (wxID_OK == res) { wxGetApp().load_current_presets(); wxGetApp().mainframe->update_side_preset_ui(); update_ui_from_settings(); update_all_preset_comboboxes(); CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::PRINTER); - int res = success_dlg.ShowModal(); + int res = success_dlg.ShowModal(); if (res == wxID_OK) { p->editing_filament = -1; - if (p->combo_printer->switch_to_tab()) - p->editing_filament = 0; + if (p->combo_printer->switch_to_tab()) p->editing_filament = 0; } } } -void Sidebar::init_filament_combo(PlaterPresetComboBox** combo, const int filament_idx) +void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int filament_idx) { *combo = new PlaterPresetComboBox(p->m_panel_filament_content, Slic3r::Preset::TYPE_FILAMENT); (*combo)->set_filament_idx(filament_idx); @@ -3384,10 +3338,8 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox** combo, const int filame combo_and_btn_sizer->AddSpacer(FromDIP((filament_idx % 2) == 0 ? 12 : 3)); // Content Margin (*combo)->clr_picker->SetLabel(wxString::Format("%d", filament_idx + 1)); - combo_and_btn_sizer->Add((*combo)->clr_picker, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, - FromDIP(SidebarProps::ElementSpacing()) - FromDIP(2)); // ElementSpacing - 2 (from combo box)) - combo_and_btn_sizer->Add(*combo, 1, wxALL | wxEXPAND, FromDIP(2)) - ->SetMinSize({-1, 30 * wxGetApp().em_unit() / 10}); // ORCA ensure height matches with PlaterPresetComboBox + combo_and_btn_sizer->Add((*combo)->clr_picker, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(SidebarProps::ElementSpacing()) - FromDIP(2)); // ElementSpacing - 2 (from combo box)) + combo_and_btn_sizer->Add(*combo, 1, wxALL | wxEXPAND, FromDIP(2))->SetMinSize({-1, 30 * wxGetApp().em_unit() / 10}); // ORCA ensure height matches with PlaterPresetComboBox /* BBS hide del_btn ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_content, wxID_ANY, "delete_filament"); @@ -3410,15 +3362,16 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox** combo, const int filame edit_btn->Bind(wxEVT_BUTTON, [this, edit_btn, combobox, filament_idx](wxCommandEvent) { bool single_or_bbl = should_show_SEMM_buttons(); bool is_multi_material = p->combos_filament.size() > 1; - if (single_or_bbl && is_multi_material) { - // MULTI MATERIAL Show menu + if(single_or_bbl && is_multi_material) { + // MULTI MATERIAL Show menu auto menu = p->plater->filament_action_menu(filament_idx); - wxPoint pt{0, edit_btn->GetSize().GetHeight() + FromDIP(2)}; - pt = edit_btn->ClientToScreen(pt); - pt = wxGetApp().mainframe->ScreenToClient(pt); + wxPoint pt { 0, edit_btn->GetSize().GetHeight() + FromDIP(2) }; + pt = edit_btn->ClientToScreen(pt); + pt = wxGetApp().mainframe->ScreenToClient(pt); p->m_menu_filament_id = filament_idx; p->plater->PopupMenu(menu, (int) pt.x, pt.y); - } else { + } + else { // SINGLE MATERIAL / MULTI EXTRUDER / TOOLCHANGER / IDEX Opens Dialog directly p->editing_filament = filament_idx; combobox->switch_to_tab(); @@ -3426,16 +3379,14 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox** combo, const int filame }); combobox->edit_btn = edit_btn; - combo_and_btn_sizer->Add(edit_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, - FromDIP(SidebarProps::ElementSpacing()) - FromDIP(2)); // ElementSpacing - 2 (from combo box)) + combo_and_btn_sizer->Add(edit_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(SidebarProps::ElementSpacing()) - FromDIP(2)); // ElementSpacing - 2 (from combo box)) combo_and_btn_sizer->AddSpacer(FromDIP(SidebarProps::ContentMargin())); // BBS: filament double columns - auto side = filament_idx % 2; - auto /***/ sizer_filaments = this->p->sizer_filaments->GetItem(side)->GetSizer(); - if (side == 1 && filament_idx > 1) - sizer_filaments->Remove(filament_idx / 2); + auto side = filament_idx % 2; + auto /***/sizer_filaments = this->p->sizer_filaments->GetItem(side)->GetSizer(); + if (side == 1 && filament_idx > 1) sizer_filaments->Remove(filament_idx / 2); sizer_filaments->Add(combo_and_btn_sizer, 1, wxEXPAND); if (side == 0 && filament_idx > 0) { sizer_filaments = this->p->sizer_filaments->GetItem(1)->GetSizer(); @@ -3448,14 +3399,14 @@ void Sidebar::remove_unused_filament_combos(const size_t current_extruder_count) if (current_extruder_count >= p->combos_filament.size()) return; while (p->combos_filament.size() > current_extruder_count) { - const int last = p->combos_filament.size() - 1; + const int last = p->combos_filament.size() - 1; auto sizer_filaments = this->p->sizer_filaments->GetItem(last % 2)->GetSizer(); sizer_filaments->Remove(last / 2); (*p->combos_filament[last]).Destroy(); p->combos_filament.pop_back(); } // BBS: filament double columns - auto sizer_filaments0 = this->p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); + auto sizer_filaments0 = this->p->sizer_filaments->GetItem((size_t)0)->GetSizer(); auto sizer_filaments1 = this->p->sizer_filaments->GetItem(1)->GetSizer(); if (current_extruder_count < 2) { sizer_filaments1->Clear(); @@ -3471,27 +3422,27 @@ void Sidebar::remove_unused_filament_combos(const size_t current_extruder_count) void Sidebar::update_all_preset_comboboxes() { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); - auto p_mainframe = wxGetApp().mainframe; - auto cfg = preset_bundle.printers.get_edited_preset().config; - const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); + auto p_mainframe = wxGetApp().mainframe; + auto cfg = preset_bundle.printers.get_edited_preset().config; + const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); const bool use_native_device_tab = preset_bundle.use_bbl_device_tab() || use_printer_agents; if (preset_bundle.use_bbl_network()) { - // only show connection button for not-BBL printer - // p->btn_connect_printer->Hide(); + //only show connection button for not-BBL printer + //p->btn_connect_printer->Hide(); p->m_printer_connect->Hide(); - // only show sync-ams button for BBL printer + //only show sync-ams button for BBL printer p->m_bpButton_ams_filament->Show(); - // update print button default value for bbl or third-party printer + //update print button default value for bbl or third-party printer p_mainframe->set_print_button_to_default(MainFrame::PrintSelectType::ePrintPlate); } else { - // p->btn_connect_printer->Show(); - // ORCA: hide the physical-printer connection button when printer agents are enabled + //p->btn_connect_printer->Show(); + // ORCA: hide the physical-printer connection button when printer agents are enabled p->m_printer_connect->Show(!use_printer_agents); // ORCA: show/hide sync-ams button based on filament sync mode @@ -3504,19 +3455,19 @@ void Sidebar::update_all_preset_comboboxes() // Orca: with "Support 3MF as gcode" (use_3mf) the local export is a .gcode.3mf bundle, so when no // printer host/IP is configured the default action is "Export plate sliced file" (mirrors the // print dropdown) instead of "Export G-code file". - auto print_btn_type = cfg.opt_bool("use_3mf") ? MainFrame::PrintSelectType::eExportSlicedFile : - MainFrame::PrintSelectType::eExportGcode; - wxString url = from_u8(PrintHost::get_print_host_webui(&cfg)); + auto print_btn_type = cfg.opt_bool("use_3mf") ? MainFrame::PrintSelectType::eExportSlicedFile + : MainFrame::PrintSelectType::eExportGcode; + wxString url = from_u8(PrintHost::get_print_host_webui(&cfg)); wxString apikey; - if (url.empty()) + if(url.empty()) url = wxString::Format("file://%s/web/orca/missing_connection.html", from_u8(resources_dir())); else { const auto host_type = cfg.option>("host_type")->value; if (cfg.has("printhost_apikey") && (host_type != htSimplyPrint)) apikey = cfg.opt_string("printhost_apikey"); - print_btn_type = (preset_bundle.is_bbl_vendor() || wxGetApp().app_config->get_bool("use_printer_agents")) ? - MainFrame::PrintSelectType::ePrintPlate : - MainFrame::PrintSelectType::eSendGcode; + print_btn_type = (preset_bundle.is_bbl_vendor() || wxGetApp().app_config->get_bool("use_printer_agents")) + ? MainFrame::PrintSelectType::ePrintPlate + : MainFrame::PrintSelectType::eSendGcode; } if (use_printer_agents) @@ -3524,27 +3475,29 @@ void Sidebar::update_all_preset_comboboxes() else if (!use_native_device_tab) p_mainframe->load_printer_url(url, apikey); + p_mainframe->set_print_button_to_default(print_btn_type); + } if (cfg.opt_bool("pellet_modded_printer")) { - p->m_staticText_filament_settings->SetLabel(_L("Pellets")); + p->m_staticText_filament_settings->SetLabel(_L("Pellets")); p->m_filament_icon->SetBitmap_("pellets"); } else { - p->m_staticText_filament_settings->SetLabel(_L("Filament")); + p->m_staticText_filament_settings->SetLabel(_L("Filament")); p->m_filament_icon->SetBitmap_("filament"); } show_SEMM_buttons(); - // p->m_staticText_filament_settings->Update(); + //p->m_staticText_filament_settings->Update(); if (is_bbl_vendor || cfg.opt_bool("support_multi_bed_types")) { p->combo_printer_bed->Enable(); // Orca: don't update bed type if loading project if (!p->plater->is_loading_project()) { bool has_changed = reset_bed_type_combox_choices(); - bool flag = m_begin_sync_printer_status && !has_changed; + bool flag = m_begin_sync_printer_status && !has_changed; if (!(flag)) { auto str_bed_type = wxGetApp().app_config->get_printer_setting(wxGetApp().preset_bundle->printers.get_selected_preset_name(), "curr_bed_type"); @@ -3554,7 +3507,7 @@ void Sidebar::update_all_preset_comboboxes() bed_type_value = preset_bundle.printers.get_edited_preset().get_default_bed_type(&preset_bundle); } - set_bed_type_accord_combox((BedType) bed_type_value); + set_bed_type_accord_combox((BedType) bed_type_value); } else { BedType bed_type = preset_bundle.printers.get_edited_preset().get_default_bed_type(&preset_bundle); set_bed_type_accord_combox(bed_type); @@ -3574,10 +3527,10 @@ void Sidebar::update_all_preset_comboboxes() p->panel_printer_bed->Show(is_bbl_vendor || cfg.opt_bool("support_multi_bed_types")); // Update the print choosers to only contain the compatible presets, update the dirty flags. - // BBS + //BBS // Update the printer choosers, update the dirty flags. - // p->combo_printer->update(); + //p->combo_printer->update(); // Update the filament choosers to only contain the compatible presets, update the color preview, // update the dirty flags. if (print_tech == ptFFF) { @@ -3596,12 +3549,13 @@ void Sidebar::update_all_preset_comboboxes() void Sidebar::update_presets(Preset::Type preset_type) { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%") % preset_type; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%")%preset_type; switch (preset_type) { - case Preset::TYPE_FILAMENT: { + case Preset::TYPE_FILAMENT: + { // BBS #if 0 const size_t extruder_cnt = print_tech != ptFFF ? 1 : @@ -3610,16 +3564,16 @@ void Sidebar::update_presets(Preset::Type preset_type) #else const size_t filament_cnt = p->combos_filament.size(); #endif - const std::string& name = preset_bundle.filaments.get_selected_preset_name(); + const std::string &name = preset_bundle.filaments.get_selected_preset_name(); if (p->editing_filament >= 0) { preset_bundle.set_filament_preset(p->editing_filament, name); } else if (filament_cnt == 1) { // Single filament printer, synchronize the filament presets. - Preset* preset = preset_bundle.filaments.find_preset(name, false); + Preset *preset = preset_bundle.filaments.find_preset(name, false); if (preset) { - if (preset->is_compatible) - preset_bundle.set_filament_preset(0, name); + if (preset->is_compatible) preset_bundle.set_filament_preset(0, name); } + } for (size_t i = 0; i < filament_cnt; i++) @@ -3630,22 +3584,25 @@ void Sidebar::update_presets(Preset::Type preset_type) } case Preset::TYPE_PRINT: - // wxGetApp().mainframe->m_param_panel; - // p->combo_print->update(); + //wxGetApp().mainframe->m_param_panel; + //p->combo_print->update(); { - Tab* print_tab = wxGetApp().get_tab(Preset::TYPE_PRINT); - if (print_tab) { - print_tab->get_combo_box()->update(); - } - break; + Tab* print_tab = wxGetApp().get_tab(Preset::TYPE_PRINT); + if (print_tab) { + print_tab->get_combo_box()->update(); } - case Preset::TYPE_SLA_PRINT:; // p->combo_sla_print->update(); + break; + } + case Preset::TYPE_SLA_PRINT: + ;// p->combo_sla_print->update(); break; - case Preset::TYPE_SLA_MATERIAL:; // p->combo_sla_material->update(); + case Preset::TYPE_SLA_MATERIAL: + ;// p->combo_sla_material->update(); break; - case Preset::TYPE_PRINTER: { + case Preset::TYPE_PRINTER: + { update_all_preset_comboboxes(); p->show_preset_comboboxes(); @@ -3659,17 +3616,17 @@ void Sidebar::update_presets(Preset::Type preset_type) Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); if (auto printer_structure_opt = printer_preset.config.option>("printer_structure")) { - wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == - PrinterStructure::psI3); - } else + wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3); + } + else wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = false; // Update dual extrudes - auto* nozzle_diameter = dynamic_cast(printer_preset.config.option("nozzle_diameter")); - auto extruder_variants = printer_preset.config.option("extruder_variant_list"); + auto* nozzle_diameter = dynamic_cast(printer_preset.config.option("nozzle_diameter")); + auto extruder_variants = printer_preset.config.option("extruder_variant_list"); std::string printer_model = printer_preset.config.option("printer_model")->value; - bool isBBL = preset_bundle.is_bbl_vendor(); + bool isBBL = preset_bundle.is_bbl_vendor(); bool is_dual_extruder = extruder_variants->size() == 2; // why: agent mode drives the native device tab, so the sidebar lays out like BBL // (no physical-printer connect button). @@ -3680,40 +3637,36 @@ void Sidebar::update_presets(Preset::Type preset_type) // UI left = DEPUTY_EXTRUDER_ID(1), UI right = MAIN_EXTRUDER_ID(0) if (is_dual_extruder) { std::string printer_type = printer_preset.get_printer_type(wxGetApp().preset_bundle); - auto left_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::TitleCase); - auto right_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::TitleCase); + auto left_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase); + auto right_title = DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase); p->left_extruder->SetTitle(_L(left_title)); p->right_extruder->SetTitle(_L(right_title)); } - auto extruders_def = printer_preset.config.def()->get("extruder_type"); - auto extruders = printer_preset.config.option("extruder_type"); - auto nozzle_volumes_def = wxGetApp().preset_bundle->project_config.def()->get("nozzle_volume_type"); - auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type"); - auto diameters = wxGetApp().preset_bundle->printers.diameters_of_selected_printer(); - auto diameter = printer_preset.config.opt_string("printer_variant"); + auto extruders_def = printer_preset.config.def()->get("extruder_type"); + auto extruders = printer_preset.config.option("extruder_type"); + auto nozzle_volumes_def = wxGetApp().preset_bundle->project_config.def()->get("nozzle_volume_type"); + auto nozzle_volumes = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type"); + auto diameters = wxGetApp().preset_bundle->printers.diameters_of_selected_printer(); + auto diameter = printer_preset.config.opt_string("printer_variant"); auto extruder_max_nozzle_count = printer_preset.config.option("extruder_max_nozzle_count"); - auto update_extruder_variant = [printer_model, extruders_def, extruders, nozzle_volumes_def, nozzle_volumes, extruder_variants, - diameter, extruder_max_nozzle_count](ExtruderGroup& extruder, int index) { + auto update_extruder_variant = [printer_model, extruders_def, extruders, nozzle_volumes_def, nozzle_volumes, extruder_variants,diameter,extruder_max_nozzle_count](ExtruderGroup & extruder, int index) { extruder.combo_flow->Clear(); - auto type = extruders_def->enum_labels[extruders->values[index]]; + auto type = extruders_def->enum_labels[extruders->values[index]]; int select = -1; for (size_t i = 0; i < nozzle_volumes_def->enum_labels.size(); ++i) { // get_at falls back to the first entry when a profile defines no per-extruder value, // so extruders without an explicit sub-nozzle count never offer Hybrid. A nullable-int // nil is INT_MAX (> 1) and would otherwise falsely pass the gate, so exclude it too. if (boost::algorithm::contains(extruder_variants->values[index], type + " " + nozzle_volumes_def->enum_labels[i]) || - extruder_max_nozzle_count->get_at(index) > 1 && - extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && - nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid) { - if (nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == NozzleVolumeType::nvtHighFlow && - (diameter == "0.2" || is_skip_high_flow_printer(printer_model))) + extruder_max_nozzle_count->get_at(index) > 1 && extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && + nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid) { + if (nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == NozzleVolumeType::nvtHighFlow &&(diameter == "0.2" || + is_skip_high_flow_printer(printer_model))) continue; if (nozzle_volumes->values[index] == i) select = extruder.combo_flow->GetCount(); - extruder.combo_flow->Append(_L(nozzle_volumes_def->enum_labels[i]), {}, (void*) i); + extruder.combo_flow->Append(_L(nozzle_volumes_def->enum_labels[i]), {}, (void*)i); } } if (select == -1) @@ -3727,7 +3680,7 @@ void Sidebar::update_presets(Preset::Type preset_type) // ORCA get the actual nozzle diameter from printer config auto nozzle_dia = get_diameter_string(nozzle_diameter->values[extruder_index]); // ORCA try to add nozzle diameter from config if list is empty. fixes blank nozzle combo box when preset has no alias - if (diameters[0].empty() && !nozzle_dia.empty()) { + if(diameters[0].empty() && !nozzle_dia.empty()){ diameters[0] = nozzle_dia; } // Orca: Check if the actual nozzle diameter exists in the list, if not add it as a custom option @@ -3745,38 +3698,34 @@ void Sidebar::update_presets(Preset::Type preset_type) auto image_path = get_cur_select_bed_image(); if (is_dual_extruder) { std::string printer_type = printer_preset.get_printer_type(wxGetApp().preset_bundle); - p->left_extruder->SetTitle( - _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::TitleCase))); - p->right_extruder->SetTitle( - _L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, - ToolHeadNameCase::TitleCase))); + p->left_extruder->SetTitle(_L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase))); + p->right_extruder->SetTitle(_L(DevPrinterConfigUtil::get_toolhead_display_name(printer_type, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::TitleCase))); AMSCountPopupWindow::UpdateAMSCount(0, p->left_extruder); AMSCountPopupWindow::UpdateAMSCount(1, p->right_extruder); update_extruder_variant(*p->left_extruder, 0); update_extruder_variant(*p->right_extruder, 1); - // if (!p->is_switching_diameter) { - update_extruder_diameter(0, *p->left_extruder); - update_extruder_diameter(1, *p->right_extruder); + //if (!p->is_switching_diameter) { + update_extruder_diameter(0, *p->left_extruder); + update_extruder_diameter(1, *p->right_extruder); //} p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); } else { AMSCountPopupWindow::UpdateAMSCount(0, p->single_extruder); update_extruder_variant(*p->single_extruder, 0); - // if (!p->is_switching_diameter) - update_extruder_diameter(0, *p->single_extruder); + //if (!p->is_switching_diameter) + update_extruder_diameter(0, *p->single_extruder); // ORCA sync unified nozzle combo box p->combo_nozzle_dia->Clear(); for (size_t i = 0; i < diameters.size(); ++i) p->combo_nozzle_dia->Append(diameters[i], {}); p->combo_nozzle_dia->SetSelection((*p->single_extruder).combo_diameter->GetSelection()); - + // ORCA update nozzle type - const auto& full_config = wxGetApp().preset_bundle->full_config(); - wxString nozzle_type = "-"; + const auto& full_config = wxGetApp().preset_bundle->full_config(); + wxString nozzle_type = "-"; const ConfigOptionEnumsGenericNullable* cfg_nozzle_type = full_config.option("nozzle_type"); - if (cfg_nozzle_type != nullptr) { + if(cfg_nozzle_type != nullptr){ std::vector nozzle_types(cfg_nozzle_type->size()); for (size_t idx = 0; idx < cfg_nozzle_type->size(); ++idx) nozzle_types[idx] = NozzleType(cfg_nozzle_type->values[idx]); @@ -3784,8 +3733,8 @@ void Sidebar::update_presets(Preset::Type preset_type) nozzle_types[0] == ntHardenedSteel ? "Hardened Steel" : nozzle_types[0] == ntStainlessSteel ? "Stainless Steel" : nozzle_types[0] == ntTungstenCarbide ? "Tungsten Carbide" : - nozzle_types[0] == ntBrass ? "Brass" : - "-" // Undefined + nozzle_types[0] == ntBrass ? "Brass" + : "-" // Undefined ); } p->label_nozzle_type->SetLabel(nozzle_type); @@ -3811,17 +3760,19 @@ void Sidebar::update_presets(Preset::Type preset_type) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": exit."); } -// BBS +//BBS void Sidebar::update_presets_from_to(Slic3r::Preset::Type preset_type, std::string from, std::string to) { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%, from %2% to %3%") % preset_type % from % to; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%, from %2% to %3%")%preset_type %from %to; switch (preset_type) { - case Preset::TYPE_FILAMENT: { + case Preset::TYPE_FILAMENT: + { const size_t filament_cnt = p->combos_filament.size(); - for (auto it = preset_bundle.filament_presets.begin(); it != preset_bundle.filament_presets.end(); it++) { + for (auto it = preset_bundle.filament_presets.begin(); it != preset_bundle.filament_presets.end(); it++) + { if ((*it).compare(from) == 0) { (*it) = to; } @@ -3840,8 +3791,7 @@ void Sidebar::update_presets_from_to(Slic3r::Preset::Type preset_type, std::stri BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": exit!"); } -BedType Sidebar::get_cur_select_bed_type() -{ +BedType Sidebar::get_cur_select_bed_type() { int selection = p->combo_printer_bed->GetSelection(); if (selection < 0 && selection >= m_cur_combox_bed_types.size()) { p->combo_printer_bed->SetSelection(0); @@ -3853,14 +3803,13 @@ BedType Sidebar::get_cur_select_bed_type() std::string Sidebar::get_cur_select_bed_image() { - auto select_bed_type = get_cur_select_bed_type(); - // auto series_suffix_str = m_cur_image_bed_type.empty() ? "" : ("_" + m_cur_image_bed_type); - auto image_path = bed_type_thumbnails[select_bed_type]; // + series_suffix_str; + auto select_bed_type = get_cur_select_bed_type(); + //auto series_suffix_str = m_cur_image_bed_type.empty() ? "" : ("_" + m_cur_image_bed_type); + auto image_path = bed_type_thumbnails[select_bed_type];// + series_suffix_str; return image_path; } -void Sidebar::set_bed_type_accord_combox(BedType bed_type) -{ +void Sidebar::set_bed_type_accord_combox(BedType bed_type) { for (size_t i = 0; i < m_cur_combox_bed_types.size(); i++) { if (m_cur_combox_bed_types[i] == bed_type) { p->combo_printer_bed->SelectAndNotify(i); @@ -3884,28 +3833,28 @@ bool Sidebar::reset_bed_type_combox_choices(bool is_sidebar_init) } if (m_last_combo_bedtype_count != 0 && pm) { auto cur_count = (int) BedType::btCount - 1 - pm->not_support_bed_types.size(); - if (cur_count == m_last_combo_bedtype_count) { // no change + if (cur_count == m_last_combo_bedtype_count) {//no change return false; } } - const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); + const ConfigOptionDef *bed_type_def = print_config_def.get("curr_bed_type"); p->combo_printer_bed->Clear(); m_cur_combox_bed_types.clear(); - if (pm && bed_type_def && bed_type_def->enum_keys_map) { + if (pm &&bed_type_def && bed_type_def->enum_keys_map) { int index = 0; for (auto item : bed_type_def->enum_labels) { index++; - bool find = std::find(pm->not_support_bed_types.begin(), pm->not_support_bed_types.end(), item) != - pm->not_support_bed_types.end(); + bool find = std::find(pm->not_support_bed_types.begin(), pm->not_support_bed_types.end(), item) != pm->not_support_bed_types.end(); if (find) { continue; } - m_cur_combox_bed_types.emplace_back(BedType(index)); // BedType //btPC =1 + m_cur_combox_bed_types.emplace_back(BedType(index));//BedType //btPC =1 p->combo_printer_bed->AppendString(_L(item)); } - } else { + } + else { m_cur_image_bed_type = ""; - int index = 0; + int index = 0; for (auto item : bed_type_def->enum_labels) { index++; m_cur_combox_bed_types.emplace_back(BedType(index)); // BedType //btPC =1 @@ -3930,6 +3879,7 @@ void Sidebar::change_top_border_for_mode_sizer(bool increase_border) #endif } + // ---- Mixed-color filament sidebar support ---- // The mixed rows get their own scroll area, capped by Orca's filaments_area_preferred_count // row budget rather than BBS's fixed 3-row / 12-filament limit. @@ -3939,11 +3889,11 @@ void Sidebar::recalc_filament_scroll_sizes() return; // Same preferred-row budget the physical list uses, so both lists cap consistently. - auto left_sizer = p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); - auto combo_sizer = left_sizer->GetItem((size_t) 0)->GetSizer(); - const int row_h = combo_sizer ? combo_sizer->GetSize().GetHeight() : 0; + auto left_sizer = p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); + auto combo_sizer = left_sizer->GetItem((size_t) 0)->GetSizer(); + const int row_h = combo_sizer ? combo_sizer->GetSize().GetHeight() : 0; int preferred_rows = std::ceil(0.5 * std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count"))); - const int max_h = (row_h > 0) ? preferred_rows * row_h : -1; + const int max_h = (row_h > 0) ? preferred_rows * row_h : -1; auto content_size = p->m_mixed_scroll_area->GetSizer()->GetMinSize(); if (max_h > 0 && content_size.y > max_h) { @@ -3954,9 +3904,9 @@ void Sidebar::recalc_filament_scroll_sizes() } p->m_mixed_scroll_area->SetMinSize({0, content_size.y}); } -static std::string blend_mixed_color(const std::vector& comp_ids, - const std::vector& ratios, - const std::vector& color_strs) +static std::string blend_mixed_color(const std::vector &comp_ids, + const std::vector &ratios, + const std::vector &color_strs) { std::vector hex_colors; hex_colors.reserve(comp_ids.size()); @@ -3968,8 +3918,7 @@ static std::string blend_mixed_color(const std::vector& comp_ids, void Sidebar::update_mixed_filament_list() { auto* plater = dynamic_cast(GetParent()); - if (!plater) - return; + if (!plater) return; wxWindowUpdateLocker noUpdates(this); @@ -3979,17 +3928,17 @@ void Sidebar::update_mixed_filament_list() const wxColour mc_dim = StateColor::darkModeColorFor(wxColour("#ACACAC")); auto& project_config = wxGetApp().preset_bundle->project_config; - auto mixed_indices = plater->mixed_filament_config_indices(); - size_t num_physical = p->combos_filament.size(); + auto mixed_indices = plater->mixed_filament_config_indices(); + size_t num_physical = p->combos_filament.size(); - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* components_opt = project_config.option("filament_mixed_components"); - auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); - auto* colours_opt = project_config.option("filament_colour"); - auto* grad_opt = project_config.option("filament_mixed_gradient"); - auto* grad_range_opt = project_config.option("filament_mixed_gradient_range"); + auto* is_mixed_opt = project_config.option("filament_is_mixed"); + auto* components_opt = project_config.option("filament_mixed_components"); + auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); + auto* colours_opt = project_config.option("filament_colour"); + auto* grad_opt = project_config.option("filament_mixed_gradient"); + auto* grad_range_opt = project_config.option("filament_mixed_gradient_range"); - bool can_mix = (num_physical >= 2); + bool can_mix = (num_physical >= 2); bool has_mixed = can_mix && !mixed_indices.empty(); // Check integrity of mixed filament component references @@ -4011,11 +3960,11 @@ void Sidebar::update_mixed_filament_list() ft = preset->config.get_filament_type(display_type); } } - if (ft.empty()) - ft = "PLA"; + if (ft.empty()) ft = "PLA"; physical_types.push_back(ft); } - auto type_mismatch_slots = check_mixed_filament_type_consistency(is_mixed_opt->values, components_opt->values, physical_types); + auto type_mismatch_slots = check_mixed_filament_type_consistency( + is_mixed_opt->values, components_opt->values, physical_types); for (size_t s : type_mismatch_slots) broken_set.insert(s); broken_slots.insert(broken_slots.end(), type_mismatch_slots.begin(), type_mismatch_slots.end()); @@ -4035,8 +3984,8 @@ void Sidebar::update_mixed_filament_list() auto* notify = wxGetApp().plater()->get_notification_manager(); if (notify) notify->push_notification(NotificationType::BBLMixedFilamentBroken, - NotificationManager::NotificationLevel::ErrorNotificationLevel, - _u8L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); + NotificationManager::NotificationLevel::ErrorNotificationLevel, + _u8L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); } else { auto* notify = wxGetApp().plater()->get_notification_manager(); if (notify) @@ -4057,7 +4006,7 @@ void Sidebar::update_mixed_filament_list() auto make_swatch_panel = [this](wxWindow* parent, const wxColour& col, unsigned int num) -> wxPanel* { int swatch_sz = FromDIP(20); - auto* panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(swatch_sz, swatch_sz)); + auto* panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(swatch_sz, swatch_sz)); panel->SetMinSize(wxSize(swatch_sz, swatch_sz)); bool is_dark = wxGetApp().dark_mode(); panel->Bind(wxEVT_PAINT, [panel, col, num, is_dark](wxPaintEvent&) { @@ -4079,13 +4028,14 @@ void Sidebar::update_mixed_filament_list() dc.SetFont(::Label::Body_14); wxSize txt_sz = dc.GetTextExtent(txt); dc.SetTextForeground(col.GetLuminance() > 0.5 ? wxColour(50, 58, 61) : *wxWHITE); - dc.DrawText(txt, (sz.GetWidth() - txt_sz.GetWidth()) / 2, (sz.GetHeight() - txt_sz.GetHeight()) / 2); + dc.DrawText(txt, (sz.GetWidth() - txt_sz.GetWidth()) / 2, + (sz.GetHeight() - txt_sz.GetHeight()) / 2); }); return panel; }; for (size_t i = 0; i < mixed_indices.size(); ++i) { - size_t cfg_idx = mixed_indices[i]; + size_t cfg_idx = mixed_indices[i]; auto* combo_and_btn_sizer = new wxBoxSizer(wxHORIZONTAL); combo_and_btn_sizer->Add(FromDIP(10), 0, 0, 0, 0); @@ -4109,13 +4059,15 @@ void Sidebar::update_mixed_filament_list() while (std::getline(iss, tok, ',')) { float v = 0; if (std::sscanf(tok.c_str(), "%f", &v) == 1) - comp_ratios.push_back((int) (v * 100 + 0.5f)); + comp_ratios.push_back((int)(v * 100 + 0.5f)); } } if (!comp_ids.empty() && comp_ratios.size() != comp_ids.size()) { - BOOST_LOG_TRIVIAL(warning) << "Mixed filament slot " << cfg_idx << ": ratio count (" << comp_ratios.size() - << ") != component count (" << comp_ids.size() << "), resetting to even distribution"; - int n = (int) comp_ids.size(); + BOOST_LOG_TRIVIAL(warning) << "Mixed filament slot " << cfg_idx + << ": ratio count (" << comp_ratios.size() + << ") != component count (" << comp_ids.size() + << "), resetting to even distribution"; + int n = (int)comp_ids.size(); comp_ratios.assign(n, 100 / n); comp_ratios[0] += 100 - (100 / n) * n; } @@ -4136,8 +4088,8 @@ void Sidebar::update_mixed_filament_list() } } - bool is_gradient = false; - int gradient_direction = 0; + bool is_gradient = false; + int gradient_direction = 0; if (grad_opt && cfg_idx < grad_opt->values.size()) is_gradient = grad_opt->values[cfg_idx]; if (is_gradient && grad_range_opt && cfg_idx < grad_range_opt->values.size()) { @@ -4147,18 +4099,20 @@ void Sidebar::update_mixed_filament_list() gradient_direction = (v0 > v1) ? 0 : 1; } - std::string mix_color_str = (colours_opt && cfg_idx < colours_opt->values.size()) ? colours_opt->values[cfg_idx] : "#888888"; + std::string mix_color_str = (colours_opt && cfg_idx < colours_opt->values.size()) + ? colours_opt->values[cfg_idx] : "#888888"; wxColour mix_col(mix_color_str); - unsigned int mix_num = (unsigned int) (cfg_idx + 1); + unsigned int mix_num = (unsigned int)(cfg_idx + 1); // The swatch fades bottom to top over the model's height, sampled the same way // the slicer builds the sublayers, so it matches the editor's Effect Preview. The // ramp comes back empty for every slot that is not a two component gradient mix. - const int swatch_sz = FromDIP(20); + const int swatch_sz = FromDIP(20); const std::vector gradient_ramp = mixed_gradient_ramp(project_config, cfg_idx, swatch_sz); if (!gradient_ramp.empty()) { - auto* grad_panel = new wxPanel(p->m_panel_mixed_content, wxID_ANY, wxDefaultPosition, wxSize(swatch_sz, swatch_sz)); + auto* grad_panel = new wxPanel(p->m_panel_mixed_content, wxID_ANY, + wxDefaultPosition, wxSize(swatch_sz, swatch_sz)); grad_panel->SetMinSize(wxSize(swatch_sz, swatch_sz)); grad_panel->SetBackgroundStyle(wxBG_STYLE_PAINT); grad_panel->Bind(wxEVT_PAINT, [grad_panel, gradient_ramp, mix_num](wxPaintEvent&) { @@ -4171,12 +4125,13 @@ void Sidebar::update_mixed_filament_list() // The number sits at the swatch's middle, so take its contrast from the // colour printed at mid height rather than from either endpoint. dc.SetTextForeground(gradient_ramp[gradient_ramp.size() / 2].GetLuminance() > 0.5 ? wxColour(50, 58, 61) : *wxWHITE); - dc.DrawText(txt, (sz.GetWidth() - txt_sz.GetWidth()) / 2, (sz.GetHeight() - txt_sz.GetHeight()) / 2); + dc.DrawText(txt, (sz.GetWidth() - txt_sz.GetWidth()) / 2, + (sz.GetHeight() - txt_sz.GetHeight()) / 2); }); combo_and_btn_sizer->Add(grad_panel, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); } else { - combo_and_btn_sizer->Add(make_swatch_panel(p->m_panel_mixed_content, mix_col, mix_num), 0, - wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + combo_and_btn_sizer->Add(make_swatch_panel(p->m_panel_mixed_content, mix_col, mix_num), + 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); } auto* content_panel = new wxPanel(p->m_panel_mixed_content, wxID_ANY); @@ -4194,11 +4149,11 @@ void Sidebar::update_mixed_filament_list() // Build per-component colour list for the lambda std::vector cp_colours; - std::vector cp_valid; + std::vector cp_valid; std::vector cp_ids = comp_ids; - std::vector cp_ratios = comp_ratios; - bool cp_is_gradient = is_gradient; - int cp_gradient_dir = gradient_direction; + std::vector cp_ratios = comp_ratios; + bool cp_is_gradient = is_gradient; + int cp_gradient_dir = gradient_direction; for (size_t ci = 0; ci < comp_ids.size(); ++ci) { bool valid = (comp_ids[ci] >= 1 && comp_ids[ci] <= physical_colors.size()); cp_valid.push_back(valid); @@ -4207,16 +4162,17 @@ void Sidebar::update_mixed_filament_list() // Reorder for gradient display: from -> to std::vector draw_ids; - std::vector draw_ratios; - std::vector draw_colours; - std::vector draw_valid; + std::vector draw_ratios; + std::vector draw_colours; + std::vector draw_valid; if (cp_is_gradient && cp_ids.size() == 2) { - int fi = (cp_gradient_dir == 0) ? 0 : 1; - int ti = 1 - fi; - draw_ids = {cp_ids[fi], cp_ids[ti]}; - draw_ratios = {cp_ratios.size() > (size_t) fi ? cp_ratios[fi] : 0, cp_ratios.size() > (size_t) ti ? cp_ratios[ti] : 0}; - draw_colours = {cp_colours[fi], cp_colours[ti]}; - draw_valid = {cp_valid[fi], cp_valid[ti]}; + int fi = (cp_gradient_dir == 0) ? 0 : 1; + int ti = 1 - fi; + draw_ids = { cp_ids[fi], cp_ids[ti] }; + draw_ratios = { cp_ratios.size() > (size_t)fi ? cp_ratios[fi] : 0, + cp_ratios.size() > (size_t)ti ? cp_ratios[ti] : 0 }; + draw_colours = { cp_colours[fi], cp_colours[ti] }; + draw_valid = { cp_valid[fi], cp_valid[ti] }; } else { draw_ids = cp_ids; draw_ratios = cp_ratios; @@ -4224,9 +4180,11 @@ void Sidebar::update_mixed_filament_list() draw_valid = cp_valid; } - content_panel->Bind(wxEVT_PAINT, [content_panel, mc_bg, mc_border, mc_text, mc_dim, cp_pad, cp_swatch_sz, cp_sep_margin, - cp_pct_left, cp_gap, cp_pct_gap, cp_is_dark, cp_is_gradient, draw_ids, draw_ratios, - draw_colours, draw_valid](wxPaintEvent&) { + content_panel->Bind(wxEVT_PAINT, [content_panel, mc_bg, mc_border, mc_text, mc_dim, + cp_pad, cp_swatch_sz, cp_sep_margin, cp_pct_left, + cp_gap, cp_pct_gap, cp_is_dark, + cp_is_gradient, + draw_ids, draw_ratios, draw_colours, draw_valid](wxPaintEvent&) { wxBufferedPaintDC dc(content_panel); wxSize sz = content_panel->GetClientSize(); @@ -4235,22 +4193,24 @@ void Sidebar::update_mixed_filament_list() dc.DrawRectangle(0, 0, sz.GetWidth(), sz.GetHeight()); dc.SetFont(::Label::Body_13); - int x = cp_pad; - int y_swatch = (sz.GetHeight() - cp_swatch_sz) / 2; - int text_h = dc.GetTextExtent(wxT("A")).GetHeight(); - int y_text = y_swatch + (cp_swatch_sz - text_h) / 2; - int avail = sz.GetWidth() - cp_pad; + int x = cp_pad; + int y_swatch = (sz.GetHeight() - cp_swatch_sz) / 2; + int text_h = dc.GetTextExtent(wxT("A")).GetHeight(); + int y_text = y_swatch + (cp_swatch_sz - text_h) / 2; + int avail = sz.GetWidth() - cp_pad; wxString ellipsis = wxT("..."); - int ellipsis_w = dc.GetTextExtent(ellipsis).GetWidth(); + int ellipsis_w = dc.GetTextExtent(ellipsis).GetWidth(); - auto fits = [&](int needed) -> bool { return (x + needed) <= (avail - ellipsis_w); }; + auto fits = [&](int needed) -> bool { + return (x + needed) <= (avail - ellipsis_w); + }; size_t n = draw_ids.size(); for (size_t ci = 0; ci < n; ++ci) { // Separator: "+" or arrow if (ci > 0) { wxString sep = cp_is_gradient ? wxT("\u2192") : wxT("+"); - int sep_w = dc.GetTextExtent(sep).GetWidth() + cp_sep_margin * 2; + int sep_w = dc.GetTextExtent(sep).GetWidth() + cp_sep_margin * 2; if (!fits(sep_w + cp_swatch_sz)) { dc.SetTextForeground(mc_text); dc.DrawText(ellipsis, x, y_text); @@ -4284,27 +4244,29 @@ void Sidebar::update_mixed_filament_list() dc.DrawRectangle(x, y_swatch, cp_swatch_sz, cp_swatch_sz); } dc.SetFont(::Label::Body_14); - wxString num = wxString::Format("%u", draw_ids[ci]); + wxString num = wxString::Format("%u", draw_ids[ci]); wxSize num_sz = dc.GetTextExtent(num); dc.SetTextForeground(col.GetLuminance() > 0.5 ? wxColour(50, 58, 61) : *wxWHITE); - dc.DrawText(num, x + (cp_swatch_sz - num_sz.GetWidth()) / 2, y_swatch + (cp_swatch_sz - num_sz.GetHeight()) / 2); + dc.DrawText(num, x + (cp_swatch_sz - num_sz.GetWidth()) / 2, + y_swatch + (cp_swatch_sz - num_sz.GetHeight()) / 2); dc.SetFont(::Label::Body_13); } else { dc.SetBrush(wxBrush(mc_bg)); dc.SetPen(wxPen(mc_dim, 1)); dc.DrawRectangle(x, y_swatch, cp_swatch_sz, cp_swatch_sz); - wxString dash = wxT("\u2014"); + wxString dash = wxT("\u2014"); wxSize dash_sz = dc.GetTextExtent(dash); dc.SetTextForeground(mc_dim); - dc.DrawText(dash, x + (cp_swatch_sz - dash_sz.GetWidth()) / 2, y_swatch + (cp_swatch_sz - dash_sz.GetHeight()) / 2); + dc.DrawText(dash, x + (cp_swatch_sz - dash_sz.GetWidth()) / 2, + y_swatch + (cp_swatch_sz - dash_sz.GetHeight()) / 2); } x += cp_swatch_sz + cp_gap; // Ratio text (skip for gradient) if (!cp_is_gradient) { - int r = (ci < draw_ratios.size()) ? draw_ratios[ci] : 0; + int r = (ci < draw_ratios.size()) ? draw_ratios[ci] : 0; wxString pct = wxString::Format("%d%%", r); - int pct_w = dc.GetTextExtent(pct).GetWidth(); + int pct_w = dc.GetTextExtent(pct).GetWidth(); if (!fits(pct_w)) { dc.SetTextForeground(mc_text); dc.DrawText(ellipsis, x, y_text); @@ -4321,8 +4283,7 @@ void Sidebar::update_mixed_filament_list() { wxString tip; for (size_t ci = 0; ci < draw_ids.size(); ++ci) { - if (ci > 0) - tip += cp_is_gradient ? wxT(" \u2192 ") : wxT(" + "); + if (ci > 0) tip += cp_is_gradient ? wxT(" \u2192 ") : wxT(" + "); int r = (ci < draw_ratios.size()) ? draw_ratios[ci] : 0; tip += wxString::Format("%u (%d%%)", draw_ids[ci], r); } @@ -4341,19 +4302,22 @@ void Sidebar::update_mixed_filament_list() combo_and_btn_sizer->Add(content_panel, 1, wxALL | wxEXPAND, FromDIP(2))->SetMinSize({-1, FromDIP(30)}); - auto* menu_btn = new ScalableButton(p->m_panel_mixed_content, wxID_ANY, is_broken ? "error" : "menu_filament"); + auto* menu_btn = new ScalableButton(p->m_panel_mixed_content, wxID_ANY, + is_broken ? "error" : "menu_filament"); menu_btn->SetToolTip(is_broken ? _L("Mixed filament has broken component references") : _L("Edit / Delete / Merge")); menu_btn->Bind(wxEVT_BUTTON, [this, panel_idx, cfg_idx](wxCommandEvent&) { wxMenu menu; auto* edit_item = menu.Append(wxID_ANY, _L("Edit")); - menu.Bind(wxEVT_MENU, [this, panel_idx](wxCommandEvent&) { edit_mixed_filament(panel_idx); }, edit_item->GetId()); + menu.Bind(wxEVT_MENU, [this, panel_idx](wxCommandEvent&) { + edit_mixed_filament(panel_idx); + }, edit_item->GetId()); - wxMenu* sub_menu = new wxMenu(); + wxMenu* sub_menu = new wxMenu(); std::vector icons = get_extruder_color_icons(true); - int filaments_cnt = icons.size(); + int filaments_cnt = icons.size(); for (int j = 0; j < filaments_cnt; ++j) { - if ((size_t) j == cfg_idx) + if ((size_t)j == cfg_idx) continue; wxString item_name; @@ -4361,8 +4325,10 @@ void Sidebar::update_mixed_filament_list() if (is_target_mixed) { item_name = wxString::Format(_L("Filament %d"), j + 1); } else { - auto preset = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[j]); - item_name = preset ? from_u8(preset->label(false)) : wxString::Format(_L("Filament %d"), j + 1); + auto preset = wxGetApp().preset_bundle->filaments.find_preset( + wxGetApp().preset_bundle->filament_presets[j]); + item_name = preset ? from_u8(preset->label(false)) + : wxString::Format(_L("Filament %d"), j + 1); } auto* mi = new wxMenuItem(sub_menu, wxID_ANY, item_name); @@ -4370,7 +4336,9 @@ void Sidebar::update_mixed_filament_list() mi->SetBitmap(*icons[j]); #endif sub_menu->Append(mi); - sub_menu->Bind(wxEVT_MENU, [this, cfg_idx, j](wxCommandEvent&) { change_filament(cfg_idx, j); }, mi->GetId()); + sub_menu->Bind(wxEVT_MENU, [this, cfg_idx, j](wxCommandEvent&) { + change_filament(cfg_idx, j); + }, mi->GetId()); } if (filaments_cnt > 1) menu.AppendSubMenu(sub_menu, _L("Merge with")); @@ -4381,7 +4349,9 @@ void Sidebar::update_mixed_filament_list() // ORCA use delete item on end of menu to prevent accidental clicks. clicking to submenus(merge) already not allowed by OS auto* del_item = menu.Append(wxID_ANY, _L("Delete")); - menu.Bind(wxEVT_MENU, [this, panel_idx](wxCommandEvent&) { delete_mixed_filament_at(panel_idx); }, del_item->GetId()); + menu.Bind(wxEVT_MENU, [this, panel_idx](wxCommandEvent&) { + delete_mixed_filament_at(panel_idx); + }, del_item->GetId()); PopupMenu(&menu); }); @@ -4389,10 +4359,9 @@ void Sidebar::update_mixed_filament_list() combo_and_btn_sizer->Add(FromDIP(16), 0, 0, 0, 0); - int side = i % 2; + int side = i % 2; auto* col = (side == 0) ? left_col : right_col; - if (side == 1 && i > 1) - col->Remove(i / 2); + if (side == 1 && i > 1) col->Remove(i / 2); col->Add(combo_and_btn_sizer, 1, wxEXPAND); if (side == 0 && i > 0) { right_col->AddStretchSpacer(1); @@ -4421,8 +4390,7 @@ void Sidebar::update_mixed_filament_list() p->m_mixed_filament_broken = false; if (!broken_slots.empty()) { std::set broken_1based; - for (size_t s : broken_slots) - broken_1based.insert(s + 1); + for (size_t s : broken_slots) broken_1based.insert(s + 1); auto* curr_plate = plater->get_partplate_list().get_curr_plate(); if (curr_plate) { @@ -4431,7 +4399,7 @@ void Sidebar::update_mixed_filament_list() continue; // Check object-level extruder int obj_ext = obj->config.has("extruder") ? obj->config.extruder() : 1; - if (broken_1based.count((size_t) obj_ext)) { + if (broken_1based.count((size_t)obj_ext)) { p->m_mixed_filament_broken = true; break; } @@ -4439,40 +4407,26 @@ void Sidebar::update_mixed_filament_list() for (auto* vol : obj->volumes) { // Check volume-level extruder int vol_ext = vol->config.has("extruder") ? vol->config.extruder() : obj_ext; - if (broken_1based.count((size_t) vol_ext)) { - found = true; - break; - } + if (broken_1based.count((size_t)vol_ext)) { found = true; break; } // Check color painting data (mmu segmentation facets) if (vol->is_model_part() && !vol->mmu_segmentation_facets.empty()) { for (size_t broken_slot : broken_1based) { - if (vol->mmu_segmentation_facets.has_facets(*vol, EnforcerBlockerType(broken_slot))) { - found = true; - break; - } + if (vol->mmu_segmentation_facets.has_facets(*vol, EnforcerBlockerType(broken_slot))) + { found = true; break; } } - if (found) - break; + if (found) break; } } - if (found) { - p->m_mixed_filament_broken = true; - break; - } + if (found) { p->m_mixed_filament_broken = true; break; } // Check height range modifier extruder overrides for (auto& [range, cfg] : obj->layer_config_ranges) { if (cfg.has("extruder")) { int layer_ext = cfg.option("extruder")->getInt(); - if (layer_ext > 0 && broken_1based.count((size_t) layer_ext)) { - found = true; - break; - } + if (layer_ext > 0 && broken_1based.count((size_t)layer_ext)) + { found = true; break; } } } - if (found) { - p->m_mixed_filament_broken = true; - break; - } + if (found) { p->m_mixed_filament_broken = true; break; } } } } @@ -4488,34 +4442,31 @@ void Sidebar::update_mixed_filament_list() mf->update_slice_print_status(MainFrame::eEventObjectUpdate, false); } - if (auto* tab = dynamic_cast(wxGetApp().plate_tab)) + if (auto *tab = dynamic_cast(wxGetApp().plate_tab)) tab->update_mixed_filament_seq_state(); + } bool Sidebar::has_broken_mixed_filament() const { auto* plater = dynamic_cast(GetParent()); - if (!plater) - return false; + if (!plater) return false; return has_broken_mixed_filament(plater->get_partplate_list().get_curr_plate()); } bool Sidebar::has_broken_mixed_filament(const PartPlate* plate) const { - if (!plate) - return false; + if (!plate) return false; auto* plater = dynamic_cast(GetParent()); - if (!plater) - return false; + if (!plater) return false; auto& project_config = wxGetApp().preset_bundle->project_config; - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* comp_strs_opt = project_config.option("filament_mixed_components"); - if (!is_mixed_opt || !comp_strs_opt) - return false; + auto* is_mixed_opt = project_config.option("filament_is_mixed"); + auto* comp_strs_opt = project_config.option("filament_mixed_components"); + if (!is_mixed_opt || !comp_strs_opt) return false; size_t num_physical = p->combos_filament.size(); - auto broken_slots = check_mixed_filament_integrity(is_mixed_opt->values, comp_strs_opt->values, num_physical); + auto broken_slots = check_mixed_filament_integrity(is_mixed_opt->values, comp_strs_opt->values, num_physical); // Type consistency check { @@ -4530,20 +4481,18 @@ bool Sidebar::has_broken_mixed_filament(const PartPlate* plate) const ft = preset->config.get_filament_type(display_type); } } - if (ft.empty()) - ft = "PLA"; + if (ft.empty()) ft = "PLA"; physical_types.push_back(ft); } - auto type_mismatch_slots = check_mixed_filament_type_consistency(is_mixed_opt->values, comp_strs_opt->values, physical_types); + auto type_mismatch_slots = check_mixed_filament_type_consistency( + is_mixed_opt->values, comp_strs_opt->values, physical_types); broken_slots.insert(broken_slots.end(), type_mismatch_slots.begin(), type_mismatch_slots.end()); } - if (broken_slots.empty()) - return false; + if (broken_slots.empty()) return false; std::set broken_1based; - for (size_t s : broken_slots) - broken_1based.insert(s + 1); + for (size_t s : broken_slots) broken_1based.insert(s + 1); // Scan model objects on the given plate for raw extruder assignments // (don't use get_extruders() which expands mixed slots) @@ -4552,12 +4501,12 @@ bool Sidebar::has_broken_mixed_filament(const PartPlate* plate) const continue; // Check object-level extruder int obj_ext = entry->config.has("extruder") ? entry->config.extruder() : 1; - if (broken_1based.count((size_t) obj_ext)) + if (broken_1based.count((size_t)obj_ext)) return true; for (auto* vol : entry->volumes) { // Check volume-level extruder int vol_ext = vol->config.has("extruder") ? vol->config.extruder() : obj_ext; - if (broken_1based.count((size_t) vol_ext)) + if (broken_1based.count((size_t)vol_ext)) return true; // Check color painting data (mmu segmentation facets) if (vol->is_model_part() && !vol->mmu_segmentation_facets.empty()) { @@ -4571,7 +4520,7 @@ bool Sidebar::has_broken_mixed_filament(const PartPlate* plate) const for (auto& [range, cfg] : entry->layer_config_ranges) { if (cfg.has("extruder")) { int layer_ext = cfg.option("extruder")->getInt(); - if (layer_ext > 0 && broken_1based.count((size_t) layer_ext)) + if (layer_ext > 0 && broken_1based.count((size_t)layer_ext)) return true; } } @@ -4581,9 +4530,9 @@ bool Sidebar::has_broken_mixed_filament(const PartPlate* plate) const } void Sidebar::collect_physical_filament_info(std::vector& color_strs, - std::vector& names, - std::vector& types, - std::vector* config_indices) + std::vector& names, + std::vector& types, + std::vector* config_indices) { color_strs.clear(); names.clear(); @@ -4591,9 +4540,9 @@ void Sidebar::collect_physical_filament_info(std::vector& color_str if (config_indices) config_indices->clear(); - size_t num_physical = p->combos_filament.size(); + size_t num_physical = p->combos_filament.size(); auto& project_config = wxGetApp().preset_bundle->project_config; - auto* is_mixed_opt = project_config.option("filament_is_mixed"); + auto* is_mixed_opt = project_config.option("filament_is_mixed"); std::vector physical_indices; const size_t total = wxGetApp().preset_bundle->filament_presets.size(); physical_indices.reserve(num_physical); @@ -4623,7 +4572,7 @@ void Sidebar::collect_physical_filament_info(std::vector& color_str auto& preset_bundle = *wxGetApp().preset_bundle; for (size_t i = 0; i < num_physical; ++i) { const size_t cfg_idx = physical_indices[i]; - Preset* preset = nullptr; + Preset* preset = nullptr; if (cfg_idx < preset_bundle.filament_presets.size()) preset = preset_bundle.filaments.find_preset(preset_bundle.filament_presets[cfg_idx]); std::string ft; @@ -4631,8 +4580,7 @@ void Sidebar::collect_physical_filament_info(std::vector& color_str std::string display_type; ft = preset->config.get_filament_type(display_type); } - if (ft.empty()) - ft = "PLA"; + if (ft.empty()) ft = "PLA"; types.push_back(ft); } } @@ -4648,19 +4596,22 @@ static std::string serialize_mixed_gradient_curve_if_custom(const MixedFilamentR if (!(result.components.size() == 2 && !result.gradient_curve.empty())) return {}; - const double y0 = (result.gradient_direction == 0) ? kGradientMaxRatio : kGradientMinRatio; - const double y1 = (result.gradient_direction == 0) ? kGradientMinRatio : kGradientMaxRatio; + const double y0 = (result.gradient_direction == 0) ? kGradientMaxRatio : kGradientMinRatio; + const double y1 = (result.gradient_direction == 0) ? kGradientMinRatio : kGradientMaxRatio; const double eps = 1e-4; if (result.gradient_curve.size() == 2) { const auto& a0 = result.gradient_curve[0]; const auto& a1 = result.gradient_curve[1]; // Default curve also requires no tangent overrides; any finite tangent // means the user bent the segment, so we must serialize it. - const bool is_default = std::abs(a0.x - 0.0) < eps && std::abs(a1.x - 1.0) < eps && std::abs(a0.y - y0) < eps && - std::abs(a1.y - y1) < eps && !std::isfinite(a0.m_in) && !std::isfinite(a0.m_out) && - !std::isfinite(a1.m_in) && !std::isfinite(a1.m_out); - if (is_default) - return {}; + const bool is_default = + std::abs(a0.x - 0.0) < eps + && std::abs(a1.x - 1.0) < eps + && std::abs(a0.y - y0) < eps + && std::abs(a1.y - y1) < eps + && !std::isfinite(a0.m_in) && !std::isfinite(a0.m_out) + && !std::isfinite(a1.m_in) && !std::isfinite(a1.m_out); + if (is_default) return {}; } Slic3r::GradientCurve gc; @@ -4668,9 +4619,10 @@ static std::string serialize_mixed_gradient_curve_if_custom(const MixedFilamentR return Slic3r::serialize_gradient_curve(gc); } -static bool create_mixed_filament_from_result(Sidebar* sidebar, - const MixedFilamentResult& result, - const std::vector& color_strs) +static bool create_mixed_filament_from_result( + Sidebar* sidebar, + const MixedFilamentResult& result, + const std::vector& color_strs) { if (!sidebar || result.components.size() < 2 || result.ratios.size() < 2) return false; @@ -4684,16 +4636,15 @@ static bool create_mixed_filament_from_result(Sidebar* sidebar, return false; auto& project_config = wxGetApp().preset_bundle->project_config; - size_t total = wxGetApp().preset_bundle->filament_presets.size(); - size_t new_idx = total; + size_t total = wxGetApp().preset_bundle->filament_presets.size(); + size_t new_idx = total; std::string mixed_color = blend_mixed_color(result.components, result.ratios, color_strs); wxGetApp().preset_bundle->set_num_filaments(total + 1, mixed_color); auto* multi_colour_opt = project_config.option("filament_multi_colour"); if (multi_colour_opt) { - while (multi_colour_opt->values.size() <= new_idx) - multi_colour_opt->values.push_back(""); + while (multi_colour_opt->values.size() <= new_idx) multi_colour_opt->values.push_back(""); multi_colour_opt->values[new_idx] = mixed_color; } @@ -4701,69 +4652,60 @@ static bool create_mixed_filament_from_result(Sidebar* sidebar, // size-guarded so a sizing bug degrades into a no-op rather than a heap overwrite. { auto* is_mixed_opt = project_config.option("filament_is_mixed"); - while (is_mixed_opt->values.size() <= new_idx) - is_mixed_opt->values.push_back(false); + while (is_mixed_opt->values.size() <= new_idx) is_mixed_opt->values.push_back(false); is_mixed_opt->values[new_idx] = true; } std::string comp_str; for (size_t i = 0; i < result.components.size(); ++i) { - if (i > 0) - comp_str += ","; + if (i > 0) comp_str += ","; comp_str += std::to_string(result.components[i]); } { auto* comp_opt = project_config.option("filament_mixed_components"); - while (comp_opt->values.size() <= new_idx) - comp_opt->values.push_back(std::string{}); + while (comp_opt->values.size() <= new_idx) comp_opt->values.push_back(std::string{}); comp_opt->values[new_idx] = comp_str; } int ratio_sum = 0; - for (int r : result.ratios) - ratio_sum += r; - if (ratio_sum <= 0) - ratio_sum = 100; + for (int r : result.ratios) ratio_sum += r; + if (ratio_sum <= 0) ratio_sum = 100; std::string ratio_str; { CNumericLocalesSetter c_locale_setter; for (size_t i = 0; i < result.ratios.size(); ++i) { - if (i > 0) - ratio_str += ","; + if (i > 0) ratio_str += ","; char buf[32]; - std::snprintf(buf, sizeof(buf), "%.4f", (float) result.ratios[i] / ratio_sum); + std::snprintf(buf, sizeof(buf), "%.4f", (float)result.ratios[i] / ratio_sum); ratio_str += buf; } } { auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); - while (ratios_opt->values.size() <= new_idx) - ratios_opt->values.push_back(std::string{}); + while (ratios_opt->values.size() <= new_idx) ratios_opt->values.push_back(std::string{}); ratios_opt->values[new_idx] = ratio_str; } if (!project_config.option("filament_mixed_gradient")) project_config.set_key_value("filament_mixed_gradient", new ConfigOptionBools({false})); if (!project_config.option("filament_mixed_gradient_range")) - project_config.set_key_value("filament_mixed_gradient_range", new ConfigOptionStrings({""})); + project_config.set_key_value("filament_mixed_gradient_range", new ConfigOptionStrings({""}) ); if (!project_config.option("filament_mixed_gradient_curve")) - project_config.set_key_value("filament_mixed_gradient_curve", new ConfigOptionStrings({""})); + project_config.set_key_value("filament_mixed_gradient_curve", new ConfigOptionStrings({""}) ); if (!project_config.option("filament_mixed_gradient_per_part")) project_config.set_key_value("filament_mixed_gradient_per_part", new ConfigOptionBools({false})); { auto* grad_opt = project_config.option("filament_mixed_gradient"); - while (grad_opt->values.size() <= new_idx) - grad_opt->values.push_back(false); + while (grad_opt->values.size() <= new_idx) grad_opt->values.push_back(false); grad_opt->values[new_idx] = result.gradient_enabled; } { auto* grad_range_opt = project_config.option("filament_mixed_gradient_range"); - while (grad_range_opt->values.size() <= new_idx) - grad_range_opt->values.push_back(""); + while (grad_range_opt->values.size() <= new_idx) grad_range_opt->values.push_back(""); if (result.gradient_enabled && result.components.size() == 2) { - const char* fmt = (result.gradient_direction == 0) ? "0.9000,0.1000" : "0.1000,0.9000"; + const char* fmt = (result.gradient_direction == 0) ? "0.9000,0.1000" : "0.1000,0.9000"; grad_range_opt->values[new_idx] = fmt; } else { grad_range_opt->values[new_idx] = ""; @@ -4771,14 +4713,12 @@ static bool create_mixed_filament_from_result(Sidebar* sidebar, } { auto* grad_curve_opt = project_config.option("filament_mixed_gradient_curve"); - while (grad_curve_opt->values.size() <= new_idx) - grad_curve_opt->values.push_back(""); + while (grad_curve_opt->values.size() <= new_idx) grad_curve_opt->values.push_back(""); grad_curve_opt->values[new_idx] = serialize_mixed_gradient_curve_if_custom(result); } { auto* per_part_opt = project_config.option("filament_mixed_gradient_per_part"); - while (per_part_opt->values.size() <= new_idx) - per_part_opt->values.push_back(false); + while (per_part_opt->values.size() <= new_idx) per_part_opt->values.push_back(false); per_part_opt->values[new_idx] = result.gradient_enabled && result.per_part_gradient; } @@ -4801,14 +4741,11 @@ static bool create_mixed_filament_from_result(Sidebar* sidebar, void Sidebar::add_mixed_filament() { auto* plater = dynamic_cast(GetParent()); - if (!plater) - return; + if (!plater) return; size_t num_physical = p->combos_filament.size(); - if (num_physical < 2) - return; - if (wxGetApp().preset_bundle->filament_presets.size() >= size_t(EnforcerBlockerType::ExtruderMax)) - return; + if (num_physical < 2) return; + if (wxGetApp().preset_bundle->filament_presets.size() >= size_t(EnforcerBlockerType::ExtruderMax)) return; std::vector color_strs, names, types; collect_physical_filament_info(color_strs, names, types); @@ -4823,12 +4760,10 @@ void Sidebar::add_mixed_filament() void Sidebar::edit_mixed_filament(size_t panel_idx) { auto* plater = dynamic_cast(GetParent()); - if (!plater) - return; + if (!plater) return; auto mixed_indices = plater->mixed_filament_config_indices(); - if (panel_idx >= mixed_indices.size()) - return; + if (panel_idx >= mixed_indices.size()) return; size_t cfg_idx = mixed_indices[panel_idx]; std::vector color_strs, names, types; @@ -4837,7 +4772,7 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) auto& project_config = wxGetApp().preset_bundle->project_config; MixedFilamentResult existing; auto* components_opt = project_config.option("filament_mixed_components"); - auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); + auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); // Parse existing components if (components_opt && cfg_idx < components_opt->values.size()) { @@ -4859,16 +4794,18 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) while (std::getline(iss, tok, ',')) { float v = 0; if (std::sscanf(tok.c_str(), "%f", &v) == 1) - existing.ratios.push_back((int) (v * 100 + 0.5f)); + existing.ratios.push_back((int)(v * 100 + 0.5f)); } } if (existing.components.size() < 2) { existing.components = {1, 2}; - existing.ratios = {50, 50}; + existing.ratios = {50, 50}; } else if (existing.ratios.size() != existing.components.size()) { - BOOST_LOG_TRIVIAL(warning) << "Mixed filament edit: ratio count (" << existing.ratios.size() << ") != component count (" - << existing.components.size() << "), resetting to even distribution"; - int n = (int) existing.components.size(); + BOOST_LOG_TRIVIAL(warning) << "Mixed filament edit: ratio count (" + << existing.ratios.size() << ") != component count (" + << existing.components.size() + << "), resetting to even distribution"; + int n = (int)existing.components.size(); existing.ratios.assign(n, 100 / n); existing.ratios[0] += 100 - (100 / n) * n; } @@ -4886,7 +4823,7 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) } auto* grad_curve_opt = project_config.option("filament_mixed_gradient_curve"); if (existing.gradient_enabled && grad_curve_opt && cfg_idx < grad_curve_opt->values.size()) { - auto curve = Slic3r::parse_gradient_curve(grad_curve_opt->values[cfg_idx]); + auto curve = Slic3r::parse_gradient_curve(grad_curve_opt->values[cfg_idx]); existing.gradient_curve = curve.points; } auto* per_part_opt = project_config.option("filament_mixed_gradient_per_part"); @@ -4896,33 +4833,28 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) MixedFilamentDialog dlg(this, existing, color_strs, names, types); if (dlg.ShowModal() == wxID_OK) { auto result = dlg.get_result(); - if (result.components.size() < 2 || result.ratios.size() < 2) - return; + if (result.components.size() < 2 || result.ratios.size() < 2) return; // Serialize components std::string comp_str; for (size_t i = 0; i < result.components.size(); ++i) { - if (i > 0) - comp_str += ","; + if (i > 0) comp_str += ","; comp_str += std::to_string(result.components[i]); } components_opt->values[cfg_idx] = comp_str; // Serialize ratios int ratio_sum = 0; - for (int r : result.ratios) - ratio_sum += r; - if (ratio_sum <= 0) - ratio_sum = 100; + for (int r : result.ratios) ratio_sum += r; + if (ratio_sum <= 0) ratio_sum = 100; std::string ratio_str; { CNumericLocalesSetter c_locale_setter; for (size_t i = 0; i < result.ratios.size(); ++i) { - if (i > 0) - ratio_str += ","; + if (i > 0) ratio_str += ","; char buf[32]; - std::snprintf(buf, sizeof(buf), "%.4f", (float) result.ratios[i] / ratio_sum); + std::snprintf(buf, sizeof(buf), "%.4f", (float)result.ratios[i] / ratio_sum); ratio_str += buf; } } @@ -4932,24 +4864,22 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) if (!project_config.option("filament_mixed_gradient")) project_config.set_key_value("filament_mixed_gradient", new ConfigOptionBools({false})); if (!project_config.option("filament_mixed_gradient_range")) - project_config.set_key_value("filament_mixed_gradient_range", new ConfigOptionStrings({""})); + project_config.set_key_value("filament_mixed_gradient_range", new ConfigOptionStrings({""}) ); if (!project_config.option("filament_mixed_gradient_curve")) - project_config.set_key_value("filament_mixed_gradient_curve", new ConfigOptionStrings({""})); + project_config.set_key_value("filament_mixed_gradient_curve", new ConfigOptionStrings({""}) ); if (!project_config.option("filament_mixed_gradient_per_part")) project_config.set_key_value("filament_mixed_gradient_per_part", new ConfigOptionBools({false})); { auto* grad_opt = project_config.option("filament_mixed_gradient"); - while (grad_opt->values.size() <= cfg_idx) - grad_opt->values.push_back(false); + while (grad_opt->values.size() <= cfg_idx) grad_opt->values.push_back(false); grad_opt->values[cfg_idx] = result.gradient_enabled; } { auto* grad_range_opt = project_config.option("filament_mixed_gradient_range"); - while (grad_range_opt->values.size() <= cfg_idx) - grad_range_opt->values.push_back(""); + while (grad_range_opt->values.size() <= cfg_idx) grad_range_opt->values.push_back(""); if (result.gradient_enabled && result.components.size() == 2) { - const char* fmt = (result.gradient_direction == 0) ? "0.9000,0.1000" : "0.1000,0.9000"; + const char* fmt = (result.gradient_direction == 0) ? "0.9000,0.1000" : "0.1000,0.9000"; grad_range_opt->values[cfg_idx] = fmt; } else { grad_range_opt->values[cfg_idx] = ""; @@ -4957,20 +4887,18 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) } { auto* grad_curve_opt = project_config.option("filament_mixed_gradient_curve"); - while (grad_curve_opt->values.size() <= cfg_idx) - grad_curve_opt->values.push_back(""); + while (grad_curve_opt->values.size() <= cfg_idx) grad_curve_opt->values.push_back(""); grad_curve_opt->values[cfg_idx] = serialize_mixed_gradient_curve_if_custom(result); } { auto* per_part_opt = project_config.option("filament_mixed_gradient_per_part"); - while (per_part_opt->values.size() <= cfg_idx) - per_part_opt->values.push_back(false); + while (per_part_opt->values.size() <= cfg_idx) per_part_opt->values.push_back(false); per_part_opt->values[cfg_idx] = result.gradient_enabled && result.per_part_gradient; } // Compute blended color std::string blended = blend_mixed_color(result.components, result.ratios, color_strs); - auto* colours_opt = project_config.option("filament_colour"); + auto* colours_opt = project_config.option("filament_colour"); if (colours_opt && cfg_idx < colours_opt->values.size()) colours_opt->values[cfg_idx] = blended; @@ -4990,12 +4918,10 @@ void Sidebar::edit_mixed_filament(size_t panel_idx) void Sidebar::delete_mixed_filament_at(size_t panel_idx) { auto* plater = dynamic_cast(GetParent()); - if (!plater) - return; + if (!plater) return; auto mixed_indices = plater->mixed_filament_config_indices(); - if (panel_idx >= mixed_indices.size()) - return; + if (panel_idx >= mixed_indices.size()) return; size_t cfg_idx = mixed_indices[panel_idx]; delete_filament(cfg_idx, -1); @@ -5009,7 +4935,7 @@ void Sidebar::decompose_filament_color(int filament_idx) return; auto& project_config = wxGetApp().preset_bundle->project_config; - auto* colours_opt = project_config.option("filament_colour"); + auto* colours_opt = project_config.option("filament_colour"); if (!colours_opt || static_cast(filament_idx) >= colours_opt->values.size()) return; @@ -5027,7 +4953,8 @@ void Sidebar::decompose_filament_color(int filament_idx) auto& pb = *wxGetApp().preset_bundle; for (size_t i = 0; i < physical_config_indices.size(); ++i) { const size_t ci = physical_config_indices[i]; - Preset* pr = (ci < pb.filament_presets.size()) ? pb.filaments.find_preset(pb.filament_presets[ci]) : nullptr; + Preset* pr = (ci < pb.filament_presets.size()) + ? pb.filaments.find_preset(pb.filament_presets[ci]) : nullptr; decompose_types.push_back(filament_type_for_color_decompose(pr)); } } @@ -5040,16 +4967,19 @@ void Sidebar::decompose_filament_color(int filament_idx) } } - ColorDecomposeDialog dlg(this, source_physical_idx == size_t(-1) ? -1 : static_cast(source_physical_idx), target_color, color_strs, - names, decompose_types, wxGetApp().preset_bundle->filament_presets.size(), - static_cast(EnforcerBlockerType::ExtruderMax), physical_config_indices); + ColorDecomposeDialog dlg(this, + source_physical_idx == size_t(-1) ? -1 : static_cast(source_physical_idx), + target_color, color_strs, names, decompose_types, + wxGetApp().preset_bundle->filament_presets.size(), + static_cast(EnforcerBlockerType::ExtruderMax), + physical_config_indices); int modal_res = dlg.ShowModal(); if (modal_res == wxID_OK) { ColorDecomposeResult dialog_result = dlg.get_result(); MixedFilamentResult mixed_result; std::vector missing_components; - if (!prepare_decompose_mixed_result(dialog_result, static_cast(filament_idx), source_physical_idx, color_strs, - decompose_types, physical_config_indices, mixed_result, missing_components)) + if (!prepare_decompose_mixed_result(dialog_result, static_cast(filament_idx), source_physical_idx, + color_strs, decompose_types, physical_config_indices, mixed_result, missing_components)) return; if (!confirm_create_decompose_missing_components(this, missing_components)) @@ -5080,7 +5010,7 @@ void Sidebar::update_filaments_area_height() // ORCA use a height with user preference auto left_sizer = p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); auto combo_sizer = left_sizer->GetItem((size_t) 0)->GetSizer(); - int preferred_rows = std::ceil(0.5 * std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count"))); + int preferred_rows = std::ceil(0.5 * std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count"))); auto height_with_borders = combo_sizer->GetSize().GetHeight(); // gets height from sizer instead static numbers p->m_panel_filament_content->SetMaxSize(wxSize{-1, preferred_rows * height_with_borders}); @@ -5096,18 +5026,18 @@ void Sidebar::update_filaments_area_height() void Sidebar::update_filaments_counter(bool force_layout) // ORCA { - int current_count = p->combos_filament.size(); - int preferred_count = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - bool isShown = p->m_panel_filament_content->IsShown(); - auto counter = p->m_staticText_filament_count; + int current_count = p->combos_filament.size(); + int preferred_count = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); + bool isShown = p->m_panel_filament_content->IsShown(); + auto counter = p->m_staticText_filament_count; counter->SetLabel("(" + std::to_string(current_count) + ")"); // update counter on every change - if (current_count > preferred_count || !isShown) + if(current_count > preferred_count || !isShown) counter->Show(); else if (isShown) // hide when list is visible and short enough counter->Hide(); - if (force_layout) + if(force_layout) m_scrolled_sizer->Layout(); } @@ -5115,7 +5045,8 @@ void Sidebar::msw_rescale() { SetMinSize(wxSize(39 * wxGetApp().em_unit(), -1)); p->m_panel_printer_title->GetSizer()->SetMinSize(-1, 3 * wxGetApp().em_unit()); - p->m_panel_filament_title->GetSizer()->SetMinSize(-1, 3 * wxGetApp().em_unit()); + p->m_panel_filament_title->GetSizer() + ->SetMinSize(-1, 3 * wxGetApp().em_unit()); p->m_printer_icon->msw_rescale(); p->m_printer_connect->msw_rescale(); p->m_printer_bbl_sync->msw_rescale(); @@ -5137,15 +5068,14 @@ void Sidebar::msw_rescale() p->panel_printer_bed->SetMinSize(FromDIP(PRINTER_PANEL_SIZE)); p->panel_printer_bed->SetCornerRadius(FromDIP(PRINTER_PANEL_RADIUS)); p->combo_printer_bed->Rescale(); - p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18, -1))); // ORCA show only arrow - p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18, -1))); // ORCA show only arrow - bool isDual = static_cast(p->panel_printer_preset->GetSizer())->GetOrientation() == wxVERTICAL; + p->combo_printer_bed->SetMinSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow + p->combo_printer_bed->SetMaxSize(FromDIP(wxSize(18,-1))); // ORCA show only arrow + bool isDual = static_cast(p->panel_printer_preset->GetSizer())->GetOrientation() == wxVERTICAL; auto image_path = get_cur_select_bed_image(); p->image_printer_bed->SetBitmap(create_scaled_bitmap(image_path, this, PRINTER_THUMBNAIL_SIZE.GetHeight())); - if (p->big_bed_image_popup) { // ORCA force rebuild frame. current wxwidget version not supports wxBITMAP_SCALE_FILL flag on - // wxStaticBitmap also wxImage scaledImage = bit_map.ConvertToImage(); - // scaledImage.Rescale(FromDIP(m_image_px), FromDIP(m_image_px), wxIMAGE_QUALITY_HIGH); didnt worked as - // expected and it requires use on set_bitmap. so that will try to scale everytime + if (p->big_bed_image_popup){ // ORCA force rebuild frame. current wxwidget version not supports wxBITMAP_SCALE_FILL flag on wxStaticBitmap + // also wxImage scaledImage = bit_map.ConvertToImage(); scaledImage.Rescale(FromDIP(m_image_px), FromDIP(m_image_px), wxIMAGE_QUALITY_HIGH); + // didnt worked as expected and it requires use on set_bitmap. so that will try to scale everytime p->big_bed_image_popup->Destroy(); p->big_bed_image_popup = nullptr; } @@ -5159,25 +5089,25 @@ void Sidebar::msw_rescale() p->m_flushing_volume_btn->Rescale(); set_flushing_volume_warning(is_flush_config_modified()); // ORCA reapply appearance - // BBS + //BBS p->left_extruder->Rescale(); p->right_extruder->Rescale(); p->single_extruder->Rescale(); - // p->btn_sync_printer->SetPaddingSize({FromDIP(6), FromDIP(12)}); - // p->btn_sync_printer->SetMinSize(BTN_SYNC_SIZE); - // p->btn_sync_printer->Rescale(); + //p->btn_sync_printer->SetPaddingSize({FromDIP(6), FromDIP(12)}); + //p->btn_sync_printer->SetMinSize(BTN_SYNC_SIZE); + //p->btn_sync_printer->Rescale(); #if 0 if (p->mode_sizer) p->mode_sizer->msw_rescale(); #endif - // for (PlaterPresetComboBox* combo : std::vector { p->combo_print, - // //p->combo_sla_print, - // //p->combo_sla_material, - // //p->combo_printer - // } ) - // combo->msw_rescale(); + //for (PlaterPresetComboBox* combo : std::vector { p->combo_print, + // //p->combo_sla_print, + // //p->combo_sla_material, + // //p->combo_printer + // } ) + // combo->msw_rescale(); for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); @@ -5186,11 +5116,11 @@ void Sidebar::msw_rescale() update_filaments_area_height(); // ORCA resize after combos scaled // BBS - // p->frequently_changed_parameters->msw_rescale(); - // obj_list()->msw_rescale(); + //p->frequently_changed_parameters->msw_rescale(); + //obj_list()->msw_rescale(); // BBS TODO: add msw_rescale for newly added windows // BBS - // p->object_manipulation->msw_rescale(); + //p->object_manipulation->msw_rescale(); p->object_settings->msw_rescale(); p->m_search_item->Rescale(); p->m_search_item->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(16))); @@ -5228,7 +5158,7 @@ void Sidebar::sys_color_changed() for (wxWindow* win : std::vector{ p->scrolled, p->presets_panel }) wxGetApp().UpdateAllStaticTextDarkUI(win); #endif - // p->btn_sync_printer->SetIcon("printer_sync"); + //p->btn_sync_printer->SetIcon("printer_sync"); p->m_printer_bbl_sync->msw_rescale(); p->m_printer_connect->msw_rescale(); // for (wxWindow* btn : std::vector{ p->btn_reslice, p->btn_export_gcode }) @@ -5253,7 +5183,7 @@ void Sidebar::sys_color_changed() #endif p->object_settings->sys_color_changed(); - // BBS: remove print related combos + //BBS: remove print related combos #if 0 for (PlaterPresetComboBox* combo : std::vector{ p->combo_print, p->combo_sla_print, @@ -5272,12 +5202,12 @@ void Sidebar::sys_color_changed() p->image_printer->SetSize(FromDIP(PRINTER_THUMBNAIL_SIZE)); p->image_printer_bed->SetSize(FromDIP(PRINTER_THUMBNAIL_SIZE)); - for (ExtruderGroup* ext : {p->left_extruder, p->right_extruder, p->single_extruder}) + for (ExtruderGroup *ext : {p->left_extruder, p->right_extruder, p->single_extruder}) if (ext) ext->sys_color_changed(); // call a kill focus event to ensure new colors applied - for (ComboBox* combo : std::vector{p->combo_printer, p->combo_nozzle_dia, p->combo_printer_bed}) { + for (ComboBox* combo : std::vector{p->combo_printer, p->combo_nozzle_dia, p->combo_printer_bed}){ wxFocusEvent fakeEvent(wxEVT_KILL_FOCUS); fakeEvent.SetEventObject(combo); combo->HandleWindowEvent(fakeEvent); @@ -5287,12 +5217,12 @@ void Sidebar::sys_color_changed() obj_list()->sys_color_changed(); obj_layers()->sys_color_changed(); // BBS - // p->object_manipulation->sys_color_changed(); + //p->object_manipulation->sys_color_changed(); // btn...->msw_rescale() updates icon on button, so use it - // p->btn_send_gcode->msw_rescale(); - // p->btn_eject_device->msw_rescale(); - // p->btn_export_gcode_removable->msw_rescale(); + //p->btn_send_gcode->msw_rescale(); +// p->btn_eject_device->msw_rescale(); + //p->btn_export_gcode_removable->msw_rescale(); p->scrolled->Layout(); @@ -5302,11 +5232,14 @@ void Sidebar::sys_color_changed() p->searcher.dlg_sys_color_changed(); } -void Sidebar::search() { p->searcher.search(); } +void Sidebar::search() +{ + p->searcher.search(); +} void Sidebar::jump_to_option(const std::string& opt_key, Preset::Type type, const std::wstring& category) { - // const Search::Option& opt = p->searcher.get_option(opt_key, type); + //const Search::Option& opt = p->searcher.get_option(opt_key, type); if (type == Preset::TYPE_PRINT) { auto tab = dynamic_cast(wxGetApp().params_panel()->get_current_tab()); if (tab && tab->has_key(opt_key)) { @@ -5324,7 +5257,7 @@ void Sidebar::jump_to_option(size_t selected) jump_to_option(opt.opt_key(), opt.type, opt.category); // Switch to the Settings NotePad - // wxGetApp().mainframe->select_tab(); +// wxGetApp().mainframe->select_tab(); } // BBS. Move logic from Plater::on_extruders_change() to Sidebar::on_filament_count_change(). @@ -5334,7 +5267,7 @@ void Sidebar::on_filament_count_change(size_t num_filaments) // their own (they are rendered by update_mixed_filament_list instead), so the physical // subset drives the combo list. auto& project_config = wxGetApp().preset_bundle->project_config; - auto* is_mixed_opt = project_config.option("filament_is_mixed"); + auto* is_mixed_opt = project_config.option("filament_is_mixed"); std::vector physical_indices; for (size_t i = 0; i < num_filaments; ++i) { @@ -5362,8 +5295,9 @@ void Sidebar::on_filament_count_change(size_t num_filaments) wxWindowUpdateLocker noUpdates_scrolled_panel(this); size_t i = choices.size(); - while (i < num_physical) { - PlaterPresetComboBox* choice /*{ nullptr }*/; + while (i < num_physical) + { + PlaterPresetComboBox* choice/*{ nullptr }*/; init_filament_combo(&choice, physical_indices[i]); int last_selection = choices.back()->GetSelection(); choices.push_back(choice); @@ -5379,7 +5313,7 @@ void Sidebar::on_filament_count_change(size_t num_filaments) show_SEMM_buttons(); // ORCA - update_filaments_area_height(); // ORCA + update_filaments_area_height(); // ORCA recalc_filament_scroll_sizes(); update_mixed_filament_list(); @@ -5391,7 +5325,7 @@ void Sidebar::on_filament_count_change(size_t num_filaments) void Sidebar::on_filaments_delete(size_t filament_id) { - auto& choices = combos_filament(); + auto &choices = combos_filament(); // A mixed (virtual) slot has no combo of its own, so there is no combo UI to remove — // but the shared refresh below must still run so the mixed filament panel drops its row. @@ -5403,8 +5337,8 @@ void Sidebar::on_filaments_delete(size_t filament_id) // delete UI item { - const int last = p->combos_filament.size() - 1; - auto sizer_filaments = this->p->sizer_filaments->GetItem(last % 2)->GetSizer(); + const int last = p->combos_filament.size() - 1; + auto sizer_filaments = this->p->sizer_filaments->GetItem(last % 2)->GetSizer(); sizer_filaments->Remove(last / 2); PlaterPresetComboBox* to_delete_combox = p->combos_filament[filament_id]; @@ -5428,7 +5362,7 @@ void Sidebar::on_filaments_delete(size_t filament_id) show_SEMM_buttons(); // ORCA - for (size_t idx = filament_id; idx < p->combos_filament.size(); ++idx) { + for (size_t idx = filament_id ; idx < p->combos_filament.size(); ++idx) { p->combos_filament[idx]->update(); } } @@ -5443,28 +5377,22 @@ void Sidebar::on_filaments_delete(size_t filament_id) update_dynamic_filament_list(); } -void Sidebar::add_filament() -{ - if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) - return; - wxColour new_col = Plater::get_next_color_for_filament(); +void Sidebar::add_filament() { + if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; + wxColour new_col = Plater::get_next_color_for_filament(); add_custom_filament(new_col); auto filament_list = p->m_panel_filament_content; - if (!filament_list->IsShown()) { + if(!filament_list->IsShown()){ filament_list->Show(); // ORCA show list if its folded m_scrolled_sizer->Layout(); } filament_list->Scroll(-1, INT_MAX); // ORCA scroll to end of list on changes to inform user about filament count } -void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) -{ - if (is_new_project_in_gcode3mf()) { - return; - } - if (p->combos_filament.size() <= 1) - return; +void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) { + if (is_new_project_in_gcode3mf()) { return; } + if (p->combos_filament.size() <= 1) return; size_t filament_count = p->combos_filament.size() - 1; if (filament_id == size_t(-2)) { @@ -5505,16 +5433,14 @@ void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) // new number of slots; recompute from the shrunk preset list for the downstream updates. size_t total_after_delete = wxGetApp().preset_bundle->filament_presets.size(); wxGetApp().plater()->get_partplate_list().on_filament_deleted(total_after_delete, filament_id); - wxGetApp().plater()->on_filaments_delete(total_after_delete, filament_id, - replace_filament_id > (int) filament_id ? (replace_filament_id - 1) : replace_filament_id, - is_mixed_snapshot); + wxGetApp().plater()->on_filaments_delete(total_after_delete, filament_id, replace_filament_id > (int)filament_id ? (replace_filament_id - 1) : replace_filament_id, is_mixed_snapshot); wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); wxGetApp().plater()->update(); auto filament_list = p->m_panel_filament_content; - if (!filament_list->IsShown()) { + if(!filament_list->IsShown()){ filament_list->Show(); // ORCA show list if its folded m_scrolled_sizer->Layout(); } @@ -5526,16 +5452,16 @@ void Sidebar::change_filament(size_t from_id, size_t to_id) { // Merging a physical filament into a mixed one that lists it as a component would delete // the very filament the mix depends on, leaving it broken. Warn before doing so. - auto& pb = *wxGetApp().preset_bundle; + auto& pb = *wxGetApp().preset_bundle; bool from_is_physical = !pb.is_mixed_filament(from_id); - bool to_is_mixed = pb.is_mixed_filament(to_id); + bool to_is_mixed = pb.is_mixed_filament(to_id); if (from_is_physical && to_is_mixed) { auto* comp_opt = pb.project_config.option("filament_mixed_components"); if (comp_opt && to_id < comp_opt->values.size()) { - auto comps = Slic3r::parse_mixed_components(comp_opt->values[to_id]); - unsigned int from_1based = (unsigned int) from_id + 1; - bool target_uses_source = false; + auto comps = Slic3r::parse_mixed_components(comp_opt->values[to_id]); + unsigned int from_1based = (unsigned int)from_id + 1; + bool target_uses_source = false; for (unsigned int c : comps) { if (c == from_1based) { target_uses_source = true; @@ -5543,9 +5469,11 @@ void Sidebar::change_filament(size_t from_id, size_t to_id) } } if (target_uses_source) { - int ret = wxMessageBox(_L("The target mixed filament uses this physical filament as a component. " - "Merging will remove this physical filament and may invalidate the mixed filament. Continue?"), - _L("Warning"), wxOK | wxCANCEL | wxICON_WARNING); + int ret = wxMessageBox( + _L("The target mixed filament uses this physical filament as a component. " + "Merging will remove this physical filament and may invalidate the mixed filament. Continue?"), + _L("Warning"), + wxOK | wxCANCEL | wxICON_WARNING); if (ret != wxOK) return; } @@ -5558,31 +5486,26 @@ void Sidebar::change_filament(size_t from_id, size_t to_id) void Sidebar::edit_filament() { p->editing_filament = -1; - if (p->m_menu_filament_id >= 0 && p->m_menu_filament_id < p->combos_filament.size() && - p->combos_filament[p->m_menu_filament_id]->switch_to_tab()) + if (p->m_menu_filament_id >= 0 && p->m_menu_filament_id < p->combos_filament.size() + && p->combos_filament[p->m_menu_filament_id]->switch_to_tab()) p->editing_filament = p->m_menu_filament_id; // sync with TabPresetComboxBox's m_filament_idx } -void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_name, bool /*skip_preset_validation*/) -{ - if (is_new_project_in_gcode3mf()) { - return; - } - if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) - return; - if (wxGetApp().preset_bundle->filament_presets.size() >= MAXIMUM_EXTRUDER_NUMBER) - return; +void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_name, bool /*skip_preset_validation*/) { + if (is_new_project_in_gcode3mf()) { return; } + if (p->combos_filament.size() >= MAXIMUM_EXTRUDER_NUMBER) return; + if (wxGetApp().preset_bundle->filament_presets.size() >= MAXIMUM_EXTRUDER_NUMBER) return; // Mixed-color slots are kept at the tail of the filament arrays, so a new physical // filament has to be inserted just after the last physical one rather than appended. // Count off filament_is_mixed, not filament_presets or the combos: the extruder-count spinner // reaches this before the sidebar has rebuilt, and update_multi_material_filament_presets() // can have grown filament_presets alone. - auto* bundle = wxGetApp().preset_bundle; - size_t insert_pos = bundle->num_physical_filaments(); - size_t total = insert_pos + bundle->num_mixed_filaments(); - int filament_count = (int) (total + 1); - std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + auto *bundle = wxGetApp().preset_bundle; + size_t insert_pos = bundle->num_physical_filaments(); + size_t total = insert_pos + bundle->num_mixed_filaments(); + int filament_count = (int)(total + 1); + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); bundle->set_num_filaments(filament_count, new_color); // Maintain physical-first ordering: rotate the new slot from end to insert_pos. @@ -5592,7 +5515,7 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na std::rotate(presets.begin() + insert_pos, presets.begin() + total, presets.end()); auto& project_config = wxGetApp().preset_bundle->project_config; - auto& ams_mc = wxGetApp().preset_bundle->ams_multi_color_filment; + auto& ams_mc = wxGetApp().preset_bundle->ams_multi_color_filment; auto rotate_strings = [&](const char* key) { if (auto* opt = project_config.option(key)) @@ -5628,8 +5551,8 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na std::rotate(ams_mc.begin() + insert_pos, ams_mc.begin() + total, ams_mc.end()); // Remap object/volume extruder IDs and paint data: anything >= insert_pos+1 (1-based) shifts up by 1 - int threshold_1based = (int) (insert_pos + 1); - auto ebt_threshold = EnforcerBlockerType(threshold_1based); + int threshold_1based = (int)(insert_pos + 1); + auto ebt_threshold = EnforcerBlockerType(threshold_1based); for (auto* obj : wxGetApp().plater()->model().objects) { if (obj->config.has("extruder")) { int ext = obj->config.extruder(); @@ -5647,7 +5570,8 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na } } - if (!preset_name.empty() && wxGetApp().preset_bundle->filaments.find_preset(preset_name, false) && + if (!preset_name.empty() && + wxGetApp().preset_bundle->filaments.find_preset(preset_name, false) && insert_pos < wxGetApp().preset_bundle->filament_presets.size()) { wxGetApp().preset_bundle->filament_presets[insert_pos] = preset_name; } @@ -5662,9 +5586,10 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na bool Sidebar::is_new_project_in_gcode3mf() { if (p->plater->using_exported_file()) { - auto filename = p->plater->get_preview_only_filename(); - auto text = wxString::Format(_L("After completing your operation, %s project will be closed and create a new project."), filename); - MessageDialog dlg(wxGetApp().plater(), text, _L("Warning"), wxOK | wxICON_WARNING); + auto filename = p->plater->get_preview_only_filename(); + auto text = wxString::Format(_L("After completing your operation, %s project will be closed and create a new project."), filename); + MessageDialog dlg(wxGetApp().plater(), text, _L("Warning"), + wxOK | wxICON_WARNING); dlg.ShowModal(); p->plater->new_project(); return true; @@ -5725,8 +5650,7 @@ void Sidebar::on_bed_type_change(BedType bed_type) std::map Sidebar::build_filament_ams_list(MachineObject* obj) { std::map filament_ams_list; - if (!obj) - return filament_ams_list; + if (!obj) return filament_ams_list; // For pull-mode agents (e.g., HTTP REST API), refresh DevFilaSystem first auto* agent = wxGetApp().getDeviceManager()->get_agent(); @@ -5736,18 +5660,17 @@ std::map Sidebar::build_filament_ams_list(MachineObject } } - auto build_tray_config = [](DevAmsTray const& tray, std::string const& name, std::string ams_id, std::string slot_id) { - BOOST_LOG_TRIVIAL(info) << boost::format("build_filament_ams_list: name %1% setting_id %2% type %3% color %4%") % name % - tray.setting_id % tray.m_fila_type % tray.color; + auto build_tray_config = [](DevAmsTray const &tray, std::string const &name, std::string ams_id, std::string slot_id) { + BOOST_LOG_TRIVIAL(info) << boost::format("build_filament_ams_list: name %1% setting_id %2% type %3% color %4%") + % name % tray.setting_id % tray.m_fila_type % tray.color; DynamicPrintConfig tray_config; tray_config.set_key_value("filament_id", new ConfigOptionStrings{tray.setting_id}); tray_config.set_key_value("tag_uid", new ConfigOptionStrings{tray.tag_uid}); tray_config.set_key_value("ams_id", new ConfigOptionStrings{ams_id}); tray_config.set_key_value("slot_id", new ConfigOptionStrings{slot_id}); tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.m_fila_type}); - tray_config.set_key_value("tray_name", new ConfigOptionStrings{name}); - tray_config.set_key_value("filament_colour", - new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))}); + tray_config.set_key_value("tray_name", new ConfigOptionStrings{ name }); + tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))}); tray_config.set_key_value("filament_multi_colour", new ConfigOptionStrings{}); tray_config.set_key_value("filament_colour_type", new ConfigOptionStrings{std::to_string(tray.ctype)}); tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists}); @@ -5756,23 +5679,22 @@ std::map Sidebar::build_filament_ams_list(MachineObject if (wxGetApp().preset_bundle) { info = wxGetApp().preset_bundle->get_filament_by_filament_id(tray.setting_id); } - tray_config.set_key_value("filament_is_support", new ConfigOptionBools{info.has_value() ? info->is_support : false}); + tray_config.set_key_value("filament_is_support", new ConfigOptionBools{ info.has_value() ? info->is_support : false}); for (int i = 0; i < tray.cols.size(); ++i) { - tray_config.opt("filament_multi_colour") - ->values.push_back(into_u8(wxColour("#" + tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX))); + tray_config.opt("filament_multi_colour")->values.push_back(into_u8(wxColour("#" + tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX))); } return tray_config; }; if (obj->ams_support_virtual_tray) { int extruder = 0x10000; // Main (first) extruder at right - for (auto& vt_tray : obj->vt_slot) { - filament_ams_list.emplace(extruder + stoi(vt_tray.id), build_tray_config(vt_tray, "Ext", vt_tray.id, "0")); // 254 or 255 + for (auto & vt_tray : obj->vt_slot) { + filament_ams_list.emplace(extruder + stoi(vt_tray.id), build_tray_config(vt_tray, "Ext",vt_tray.id, "0"));//254 or 255 extruder = 0; } } - auto get_ams_name = [](int ams_id, int slot_id) -> std::string { + auto get_ams_name = [](int ams_id, int slot_id)->std::string { if (ams_id >= 0 && ams_id < 26) { char slot_name = slot_id + '1'; return std::string(1, 'A' + ams_id) + std::string(1, slot_name); @@ -5789,9 +5711,9 @@ std::map Sidebar::build_filament_ams_list(MachineObject int ams_id = std::stoi(ams.first); int extruder = ams.second->GetExtruderId() ? 0 : 0x10000; // Main (first) extruder at right for (auto tray : ams.second->GetTrays()) { - int slot_id = std::stoi(tray.first); - filament_ams_list.emplace(extruder + (ams_id * 4 + slot_id), build_tray_config(*tray.second, get_ams_name(ams_id, slot_id), - std::to_string(ams_id), std::to_string(slot_id))); + int slot_id = std::stoi(tray.first); + filament_ams_list.emplace(extruder + (ams_id * 4 + slot_id), + build_tray_config(*tray.second, get_ams_name(ams_id, slot_id), std::to_string(ams_id), std::to_string(slot_id))); } } return filament_ams_list; @@ -5803,18 +5725,24 @@ bool Sidebar::sync_extruder_list() return p->sync_extruder_list(only_external_material); } -bool Sidebar::is_fila_switch_ready() { return p->is_fila_switch_ready(); } - -void Sidebar::reset_fila_switch() { p->update_extruder_separator_icon(false, false); } - -bool Sidebar::need_auto_sync_extruder_list_after_connect_priner(const MachineObject* obj) +bool Sidebar::is_fila_switch_ready() { - if (!obj) + return p->is_fila_switch_ready(); +} + +void Sidebar::reset_fila_switch() +{ + p->update_extruder_separator_icon(false, false); +} + +bool Sidebar::need_auto_sync_extruder_list_after_connect_priner(const MachineObject *obj) +{ + if(!obj) return false; - std::string machine_print_name = obj->get_show_printer_type(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - std::string target_model_id = preset_bundle->printers.get_selected_preset().get_printer_type(preset_bundle); + std::string machine_print_name = obj->get_show_printer_type(); + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + std::string target_model_id = preset_bundle->printers.get_selected_preset().get_printer_type(preset_bundle); if (machine_print_name != target_model_id) { return false; } @@ -5825,12 +5753,17 @@ bool Sidebar::need_auto_sync_extruder_list_after_connect_priner(const MachineObj return true; } -void Sidebar::update_sync_status(const MachineObject* obj) { p->update_sync_status(obj); } - -int Sidebar::get_sidebar_pos_right_x() { return this->GetScreenPosition().x + this->GetSize().x; } - -void Sidebar::on_size(SimpleEvent& e) +void Sidebar::update_sync_status(const MachineObject *obj) { + p->update_sync_status(obj); +} + +int Sidebar::get_sidebar_pos_right_x() +{ + return this->GetScreenPosition().x + this->GetSize().x; +} + +void Sidebar::on_size(SimpleEvent &e) { if (m_sna_dialog && m_sna_dialog->IsShown()) { pop_sync_nozzle_and_ams_dialog(); } @@ -5839,24 +5772,18 @@ void Sidebar::on_size(SimpleEvent& e) } } -void Sidebar::on_full_screen(IntEvent& e) -{ - if (m_sna_dialog) { - m_sna_dialog->on_full_screen(e); - } - if (m_fna_dialog) { - m_fna_dialog->on_full_screen(e); - } +void Sidebar::on_full_screen(IntEvent &e) { + if (m_sna_dialog) { m_sna_dialog->on_full_screen(e); } + if (m_fna_dialog) { m_fna_dialog->on_full_screen(e); } } -void Sidebar::get_big_btn_sync_pos_size(wxPoint& pt, wxSize& size) +void Sidebar::get_big_btn_sync_pos_size(wxPoint &pt, wxSize &size) { size = p->m_printer_bbl_sync->GetSize(); - pt = p->m_printer_bbl_sync->GetScreenPosition(); + pt = p->m_printer_bbl_sync->GetScreenPosition(); } -void Sidebar::get_small_btn_sync_pos_size(wxPoint& pt, wxSize& size) -{ +void Sidebar::get_small_btn_sync_pos_size(wxPoint &pt, wxSize &size) { size = ams_btn->GetSize(); pt = ams_btn->GetScreenPosition(); } @@ -5872,22 +5799,23 @@ void Sidebar::load_ams_list(MachineObject* obj) filament_ams_list = build_filament_ams_list(obj); } - bool device_change = false; + bool device_change = false; const std::string& device = obj ? obj->get_dev_id() : ""; if (p->ams_list_device != device) { p->ams_list_device = device; device_change = true; } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": %1% items") % filament_ams_list.size(); - if (wxGetApp().preset_bundle->filament_ams_list == filament_ams_list && !device_change) { + if (wxGetApp().preset_bundle->filament_ams_list == filament_ams_list && !device_change) + { return; } wxGetApp().preset_bundle->filament_ams_list = filament_ams_list; - for (auto c : p->combos_filament) { + for (auto c : p->combos_filament){ c->update(); if (device_change) { - c->ShowBadge(false); // change printer,then clear badge + c->ShowBadge(false);//change printer,then clear badge } } @@ -5903,15 +5831,14 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) return; GUI::wxGetApp().sidebar().load_ams_list(obj); - auto& list = wxGetApp().preset_bundle->filament_ams_list; + auto & list = wxGetApp().preset_bundle->filament_ams_list; if (list.empty()) { auto printer_name = p->plater->get_selected_printer_name_in_combox(); - p->plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, - _L("Sync printer information")); + p->plater->pop_warning_and_go_to_device_page(printer_name, Plater::PrinterWarningType::NOT_CONNECTED, _L("Sync printer information")); return; } - bool exist_at_list_one_filament = false; - for (auto& cur : list) { + bool exist_at_list_one_filament =false; + for (auto &cur : list) { auto temp_config = cur.second; auto filament_type = temp_config.opt_string("filament_type", 0u); auto filament_color = temp_config.opt_string("filament_colour", 0u); @@ -5936,9 +5863,9 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) if (!ams_filament_ids.empty()) { boost::algorithm::split(list2, ams_filament_ids, boost::algorithm::is_any_of(",")); } - wxGetApp().plater()->update_all_plate_thumbnails(true); // preview thumbnail for sync_dlg + wxGetApp().plater()->update_all_plate_thumbnails(true);//preview thumbnail for sync_dlg SyncAmsInfoDialog::SyncInfo temp_info; - temp_info.use_dialog_pos = false; + temp_info.use_dialog_pos = false; temp_info.cancel_text_to_later = is_from_big_sync_btn; if (m_sync_dlg == nullptr) { m_sync_dlg = new SyncAmsInfoDialog(this, temp_info); @@ -5956,7 +5883,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) m_sync_dlg->set_check_dirty_fialment(false); dlg_res = m_sync_dlg->ShowModal(); } else { - dlg_res = (int) wxID_YES; + dlg_res =(int) wxID_YES; } if (dlg_res == wxID_CANCEL) return; @@ -5968,7 +5895,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) list2.resize(list.size()); auto iter = list.begin(); for (int i = 0; i < list.size(); ++i, ++iter) { - auto& ams = iter->second; + auto & ams = iter->second; auto filament_id = ams.opt_string("filament_id", 0u); ams.set_key_value("filament_changed", new ConfigOptionBool{dlg_res == wxID_YES || list2[i] != filament_id}); list2[i] = filament_id; @@ -5976,49 +5903,47 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) // BBS:Record consumables information before synchronization std::vector color_before_sync; - std::vector is_support_before; + std::vector is_support_before; DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config; - ConfigOptionStrings* color_opt = project_config.option("filament_colour"); + ConfigOptionStrings* color_opt = project_config.option("filament_colour"); for (int i = 0; i < p->combos_filament.size(); ++i) { is_support_before.push_back(is_support_filament(i)); color_before_sync.push_back(color_opt->values[i]); } MergeFilamentInfo merge_info; - std::vector> unknowns; - auto enable_append = wxGetApp().app_config->get_bool("enable_append_color_by_sync_ams"); + std::vector> unknowns; + auto enable_append = wxGetApp().app_config->get_bool("enable_append_color_by_sync_ams"); auto sync_color_only = wxGetApp().app_config->get("sync_ams_filament_mode") == "1"; - auto n = wxGetApp().preset_bundle->sync_ams_list(unknowns, !sync_result.direct_sync, sync_result.sync_maps, enable_append, merge_info, - sync_color_only); + auto n = wxGetApp().preset_bundle->sync_ams_list(unknowns, !sync_result.direct_sync, sync_result.sync_maps, enable_append, merge_info, sync_color_only); wxString detail; - for (auto& uk : unknowns) { + for (auto & uk : unknowns) { auto tray_name = uk.first->opt_string("tray_name", 0u); auto filament_type = uk.first->opt_string("filament_type", 0u); detail += from_u8("\n- " + tray_name + "(" + filament_type + ") ") + _L(uk.second); } if (n == 0) { - MessageDialog dlg(this, _L("There are no compatible filaments, and sync is not performed.") + detail, _L("Sync filaments with AMS"), - wxOK); + MessageDialog dlg(this, + _L("There are no compatible filaments, and sync is not performed.") + detail, + _L("Sync filaments with AMS"), wxOK); dlg.ShowModal(); return; } // Replace unknown filament IDs with the resolved preset's filament_id - auto& filaments = wxGetApp().preset_bundle->filaments; - auto& filament_presets = wxGetApp().preset_bundle->filament_presets; + auto &filaments = wxGetApp().preset_bundle->filaments; + auto &filament_presets = wxGetApp().preset_bundle->filament_presets; for (size_t i = 0; i < list2.size() && i < filament_presets.size(); ++i) { if (list2[i] == UNKNOWN_FILAMENT_ID) { - const Preset* resolved = filaments.find_preset(filament_presets[i]); + const Preset *resolved = filaments.find_preset(filament_presets[i]); if (resolved) list2[i] = resolved->filament_id; } } ams_filament_ids = boost::algorithm::join(list2, ","); - wxGetApp().app_config->set("ams_filament_ids", p->ams_list_device, ams_filament_ids); + wxGetApp().app_config ->set("ams_filament_ids", p->ams_list_device, ams_filament_ids); if (!unknowns.empty()) { MessageDialog dlg(this, - _L("There are some unknown or incompatible filaments mapped to generic preset.\nPlease update Orca Slicer or " - "restart Orca Slicer to check if there is an update to system presets.") + - detail, - _L("Sync filaments with AMS"), wxOK); + _L("There are some unknown or incompatible filaments mapped to generic preset.\nPlease update Orca Slicer or restart Orca Slicer to check if there is an update to system presets.") + detail, + _L("Sync filaments with AMS"), wxOK); dlg.ShowModal(); } if (!sync_color_only) { @@ -6036,9 +5961,11 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (int i = 0; i < p->combos_filament.size(); ++i) { if (i >= color_before_sync.size()) { auto_calc_flushing_volumes(i); - } else if (color_before_sync[i] != color_opt->values[i] && wxGetApp().app_config->get("auto_calculate_flush") != "disabled") { + } + else if(color_before_sync[i] != color_opt->values[i] && wxGetApp().app_config->get("auto_calculate_flush") != "disabled"){ auto_calc_flushing_volumes(i); - } else if (is_support_filament(i) != is_support_before[i] && wxGetApp().app_config->get("auto_calculate_flush") == "all") { + } + else if(is_support_filament(i) !=is_support_before[i] && wxGetApp().app_config->get("auto_calculate_flush") == "all"){ auto_calc_flushing_volumes(i); } } @@ -6052,16 +5979,15 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) update_dynamic_filament_list(); } else { wxGetApp().plater()->update_filament_colors_in_full_config(); - for (auto& c : p->combos_filament) + for (auto &c : p->combos_filament) c->update(); obj_list()->update_filament_colors(); update_dynamic_filament_list(); } - auto badge_combox_filament = [sync_color_only](PlaterPresetComboBox* c) { - auto tip = sync_color_only ? - _L("Only filament color information has been synchronized from printer.") : - _L("Filament type and color information have been synchronized, but slot information is not included."); + auto badge_combox_filament = [sync_color_only](PlaterPresetComboBox *c) { + auto tip = sync_color_only ? _L("Only filament color information has been synchronized from printer.") : + _L("Filament type and color information have been synchronized, but slot information is not included."); c->SetToolTip(tip); c->ShowBadge(true); }; @@ -6073,17 +5999,16 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) // empty trays are skipped), so every resulting combo is AMS-sourced and gets a badge. The // previous per-tray index walked the full filament_ams_list (including the skipped empties), // so an empty slot before a loaded one dropped the badge for the trailing filaments. - for (auto& c : p->combos_filament) { + for (auto &c : p->combos_filament) { badge_combox_filament(c); } } } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "prepare enable_merge_color_by_sync_ams"; - if (!merge_info.is_empty() && - wxGetApp().app_config->get_bool("enable_merge_color_by_sync_ams")) { // merge same color and preset filament//use same ams - auto reduce_index = [](MergeFilamentInfo& merge_info, int value) { + if (!merge_info.is_empty() && wxGetApp().app_config->get_bool("enable_merge_color_by_sync_ams")) { // merge same color and preset filament//use same ams + auto reduce_index = [](MergeFilamentInfo &merge_info,int value) { for (size_t i = 0; i < merge_info.merges.size(); i++) { - auto& cur = merge_info.merges[i]; + auto &cur = merge_info.merges[i]; for (size_t j = 0; j < cur.size(); j++) { if (value < cur[j]) { cur[j] = cur[j] - 1; @@ -6102,7 +6027,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (size_t i = 0; i < merge_info.merges.size(); i++) { auto& cur = merge_info.merges[i]; - for (int j = cur.size() - 1; j >= 1; j--) { + for (int j = cur.size() -1; j >= 1 ; j--) { auto last_index = cur[j]; change_filament(last_index, cur[0]); cur.erase(cur.begin() + j); @@ -6113,7 +6038,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (size_t i = 0; i < sync_ams_badges.size(); i++) { if (sync_ams_badges[i] == true) { if (i < p->combos_filament.size()) { - auto& c = p->combos_filament[i]; + auto &c = p->combos_filament[i]; badge_combox_filament(c); } else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << "check error: p->combos_filament array out of bound"; @@ -6127,7 +6052,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) } auto temp_index = iter.first; if (temp_index < p->combos_filament.size() && temp_index >= 0) { - auto& c = p->combos_filament[temp_index]; + auto &c = p->combos_filament[temp_index]; badge_combox_filament(c); } } @@ -6137,11 +6062,12 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "finish pop_finsish_sync_ams_dialog"; } + bool Sidebar::should_show_SEMM_buttons() { - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); - auto cfg = preset_bundle.printers.get_edited_preset().config; + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); + auto cfg = preset_bundle.printers.get_edited_preset().config; return cfg.opt_bool("single_extruder_multi_material") || is_bbl_vendor; } @@ -6151,22 +6077,23 @@ void Sidebar::show_SEMM_buttons() // ORCA if (!p || p->combos_filament.empty() || !p->m_bpButton_add_filament || !p->m_bpButton_del_filament || !p->m_flushing_volume_btn) return; - + bool is_multi_material = p->combos_filament.size() > 1; bool single_or_bbl = should_show_SEMM_buttons(); - bool is_single = single_or_bbl && !is_multi_material; // SINGLE EXTRUDER / BBL WITH 1 MATERIAL - bool is_multi = single_or_bbl && is_multi_material; // MULTI MATERIAL WITH SINGLE EXTRUDER - bool is_fixed = !is_single && !is_multi; // MULTI EXTRUDER / TOOLCHANGER / IDEX WITH FIXED MATERIAL + bool is_single = single_or_bbl && !is_multi_material; // SINGLE EXTRUDER / BBL WITH 1 MATERIAL + bool is_multi = single_or_bbl && is_multi_material; // MULTI MATERIAL WITH SINGLE EXTRUDER + bool is_fixed = !is_single && !is_multi; // MULTI EXTRUDER / TOOLCHANGER / IDEX WITH FIXED MATERIAL p->m_bpButton_add_filament->Show(single_or_bbl); p->m_bpButton_del_filament->Show(is_multi); - p->m_flushing_volume_btn->Show(is_multi); + p->m_flushing_volume_btn->Show( is_multi); if (is_multi) { - for (auto& c : p->combos_filament) + for (auto &c : p->combos_filament) c->edit_btn->SetBitmap_("menu_filament"); - } else if (is_single || is_fixed) { - for (auto& c : p->combos_filament) + } + else if (is_single || is_fixed) { + for (auto &c : p->combos_filament) c->edit_btn->SetBitmap_("edit"); } @@ -6210,24 +6137,42 @@ void Sidebar::update_dynamic_filament_list() dynamic_physical_filament_list.update(); } -PlaterPresetComboBox* Sidebar::printer_combox() { return p->combo_printer; } +PlaterPresetComboBox* Sidebar::printer_combox() +{ + return p->combo_printer; +} ObjectList* Sidebar::obj_list() { // BBS - // return obj_list(); + //return obj_list(); return p->m_object_list; } -ObjectSettings* Sidebar::obj_settings() { return p->object_settings; } +ObjectSettings* Sidebar::obj_settings() +{ + return p->object_settings; +} -ObjectLayers* Sidebar::obj_layers() { return p->object_layers; } +ObjectLayers* Sidebar::obj_layers() +{ + return p->object_layers; +} -wxPanel* Sidebar::scrolled_panel() { return p->scrolled; } +wxPanel* Sidebar::scrolled_panel() +{ + return p->scrolled; +} -wxPanel* Sidebar::print_panel() { return p->m_panel_print_content; } +wxPanel* Sidebar::print_panel() +{ + return p->m_panel_print_content; +} -wxPanel* Sidebar::filament_panel() { return p->m_panel_filament_content; } +wxPanel* Sidebar::filament_panel() +{ + return p->m_panel_filament_content; +} ConfigOptionsGroup* Sidebar::og_freq_chng_params(const bool is_fff) { @@ -6248,10 +6193,11 @@ wxButton* Sidebar::get_wiping_dialog_button() void Sidebar::set_flushing_volume_warning(const bool flushing_volume_modify) { - if (flushing_volume_modify) { + if(flushing_volume_modify){ p->m_flushing_volume_btn->SetStyle(ButtonStyle::Regular, ButtonType::Compact); p->m_flushing_volume_btn->SetBorderColor(wxColour("#FF6F00")); - } else + } + else p->m_flushing_volume_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Compact); } @@ -6266,17 +6212,19 @@ void Sidebar::enable_buttons(bool enable) #endif } -bool Sidebar::show_reslice(bool show) const { return p->btn_reslice->Show(show); } -bool Sidebar::show_export(bool show) const { return p->btn_export_gcode->Show(show); } -bool Sidebar::show_send(bool show) const { return p->btn_send_gcode->Show(show); } +bool Sidebar::show_reslice(bool show) const { return p->btn_reslice->Show(show); } +bool Sidebar::show_export(bool show) const { return p->btn_export_gcode->Show(show); } +bool Sidebar::show_send(bool show) const { return p->btn_send_gcode->Show(show); } bool Sidebar::show_export_removable(bool show) const { return p->btn_export_gcode_removable->Show(show); } -// bool Sidebar::show_eject(bool show) const { return p->btn_eject_device->Show(show); } -// bool Sidebar::get_eject_shown() const { return p->btn_eject_device->IsShown(); } +//bool Sidebar::show_eject(bool show) const { return p->btn_eject_device->Show(show); } +//bool Sidebar::get_eject_shown() const { return p->btn_eject_device->IsShown(); } -bool Sidebar::is_multifilament() { return p->combos_filament.size() > 1; } - -void Sidebar::deal_btn_sync() +bool Sidebar::is_multifilament() { + return p->combos_filament.size() > 1; +} + +void Sidebar::deal_btn_sync() { m_begin_sync_printer_status = true; bool only_external_material; // Manual "sync machine" button: is_manual=true so an H2C pops the MultiNozzleSyncDialog to pick a nozzle option. @@ -6290,10 +6238,10 @@ void Sidebar::deal_btn_sync() template void setup_dialog_position(T& info) { - auto plater = wxGetApp().plater(); - auto& sidebar = plater->sidebar(); - auto docking = plater->get_sidebar_docking_state(); - bool on_right = true; + auto plater = wxGetApp().plater(); + auto& sidebar = plater->sidebar(); + auto docking = plater->get_sidebar_docking_state(); + bool on_right = true; if (docking == Sidebar::Left) { on_right = true; @@ -6318,27 +6266,23 @@ template void setup_dialog_position(T& info) } } -void Sidebar::pop_sync_nozzle_and_ams_dialog() -{ +void Sidebar::pop_sync_nozzle_and_ams_dialog() { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " begin pop_sync_nozzle_and_ams_dialog"; wxTheApp->CallAfter([this]() { SyncNozzleAndAmsDialog::InputInfo temp_na_info; - wxPoint big_btn_pt; - wxSize big_btn_size; + wxPoint big_btn_pt; + wxSize big_btn_size; wxGetApp().plater()->sidebar().get_big_btn_sync_pos_size(big_btn_pt, big_btn_size); - temp_na_info.dialog_pos = big_btn_pt + wxPoint(big_btn_size.x, big_btn_size.y) + - wxPoint(FromDIP(big_btn_size.x / 10.f - 5), FromDIP(big_btn_size.y / 10.f)); + temp_na_info.dialog_pos = big_btn_pt + wxPoint(big_btn_size.x, big_btn_size.y) + wxPoint(FromDIP(big_btn_size.x / 10.f - 5), FromDIP(big_btn_size.y / 10.f)); temp_na_info.dialog_pos.y += FromDIP(2); setup_dialog_position(temp_na_info); wxPoint small_btn_pt; - wxSize small_btn_size; + wxSize small_btn_size; get_small_btn_sync_pos_size(small_btn_pt, small_btn_size); temp_na_info.ams_btn_pos = small_btn_pt + wxPoint(small_btn_size.x / 2, small_btn_size.y / 2); - if (m_fna_dialog) { - m_fna_dialog->on_hide(); - } + if (m_fna_dialog) { m_fna_dialog->on_hide(); } if (m_sna_dialog) { m_sna_dialog->Destroy(); m_sna_dialog = nullptr; @@ -6352,16 +6296,14 @@ void Sidebar::pop_finsish_sync_ams_dialog() { wxTheApp->CallAfter([this]() { wxPoint small_btn_pt; - wxSize small_btn_size; + wxSize small_btn_size; get_small_btn_sync_pos_size(small_btn_pt, small_btn_size); FinishSyncAmsDialog::InputInfo temp_fsa_info; - temp_fsa_info.dialog_pos.y = small_btn_pt.y; + temp_fsa_info.dialog_pos.y = small_btn_pt.y; setup_dialog_position(temp_fsa_info); - temp_fsa_info.ams_btn_pos = small_btn_pt + wxPoint(small_btn_size.x / 2, small_btn_size.y / 2); - if (m_sna_dialog) { - m_sna_dialog->on_hide(); - } + temp_fsa_info.ams_btn_pos = small_btn_pt + wxPoint(small_btn_size.x / 2, small_btn_size.y / 2); + if (m_sna_dialog) { m_sna_dialog->on_hide(); } if (m_fna_dialog) { m_fna_dialog->Destroy(); m_fna_dialog = nullptr; @@ -6369,38 +6311,42 @@ void Sidebar::pop_finsish_sync_ams_dialog() m_fna_dialog = new FinishSyncAmsDialog(temp_fsa_info); m_fna_dialog->on_show(); }); + } static std::vector get_search_inputs(ConfigOptionMode mode) { - std::vector ret{}; + std::vector ret {}; auto& tabs_list = wxGetApp().tabs_list; auto print_tech = wxGetApp().preset_bundle->printers.get_selected_preset().printer_technology(); for (auto tab : tabs_list) if (tab->supports_printer_technology(print_tech)) - ret.emplace_back(Search::InputInfo{tab->get_config(), tab->type(), mode}); + ret.emplace_back(Search::InputInfo {tab->get_config(), tab->type(), mode}); return ret; } -void Sidebar::update_searcher() { p->searcher.init(get_search_inputs(m_mode)); } +void Sidebar::update_searcher() +{ + p->searcher.init(get_search_inputs(m_mode)); +} void Sidebar::update_mode() { m_mode = wxGetApp().get_mode(); - // BBS: remove print related combos + //BBS: remove print related combos update_searcher(); wxWindowUpdateLocker noUpdates(this); // BBS - // obj_list()->get_sizer()->Show(m_mode > comSimple); + //obj_list()->get_sizer()->Show(m_mode > comSimple); obj_list()->unselect_objects(); obj_list()->update_selections(); - // obj_list()->update_object_menu(); +// obj_list()->update_object_menu(); Layout(); } @@ -6412,14 +6358,14 @@ void Sidebar::collapse(bool collapse) { p->plater->collapse_sidebar(collapse); } #ifdef _MSW_DARK_MODE void Sidebar::show_mode_sizer(bool show) { - // p->mode_sizer->Show(show); + //p->mode_sizer->Show(show); } #endif void Sidebar::update_ui_from_settings() { // BBS - // p->object_manipulation->update_ui_from_settings(); + //p->object_manipulation->update_ui_from_settings(); // update Cut gizmo, if it's open p->plater->canvas3D()->update_gizmos_on_off_state(); p->plater->set_current_canvas_as_dirty(); @@ -6444,38 +6390,47 @@ bool Sidebar::show_object_list(bool show) const void Sidebar::finish_param_edit() { p->editing_filament = -1; } -std::vector& Sidebar::combos_filament() { return p->combos_filament; } +std::vector& Sidebar::combos_filament() +{ + return p->combos_filament; +} void Sidebar::clear_combos_filament_badge() { - auto& combos_filament = p->combos_filament; - for (auto& c : combos_filament) { // clear flag + auto &combos_filament = p->combos_filament; + for (auto &c : combos_filament) { // clear flag c->ShowBadge(false); } } -void Sidebar::udpate_combos_filament_badge() -{ - auto& combos_filament = p->combos_filament; - for (auto& c : combos_filament) { +void Sidebar::udpate_combos_filament_badge() { + auto &combos_filament = p->combos_filament; + for (auto &c : combos_filament) { auto selection = c->GetSelection(); auto select_flag = c->GetFlag(selection); auto ok = select_flag == (int) PresetComboBox::FilamentAMSType::FROM_AMS; c->ShowBadge(ok); } + } -Search::OptionsSearcher& Sidebar::get_searcher() { return p->searcher; } +Search::OptionsSearcher& Sidebar::get_searcher() +{ + return p->searcher; +} -std::string& Sidebar::get_search_line() { return p->searcher.search_string(); } +std::string& Sidebar::get_search_line() +{ + return p->searcher.search_string(); +} static std::map printer_thumbnails = {}; void Sidebar::update_printer_thumbnail() { - auto& preset_bundle = wxGetApp().preset_bundle; - Preset& selected_preset = preset_bundle->printers.get_edited_preset(); - std::string printer_type = selected_preset.get_current_printer_type(preset_bundle); + auto& preset_bundle = wxGetApp().preset_bundle; + Preset & selected_preset = preset_bundle->printers.get_edited_preset(); + std::string printer_type = selected_preset.get_current_printer_type(preset_bundle); if (printer_thumbnails.find(printer_type) != printer_thumbnails.end()) // Use known cache first p->image_printer->SetBitmap(create_scaled_bitmap(printer_thumbnails[printer_type], this, PRINTER_THUMBNAIL_SIZE.GetHeight())); else { @@ -6491,7 +6446,7 @@ void Sidebar::update_printer_thumbnail() */ // Orca: try to use the printer model cover as the thumbnail - const auto model_name = selected_preset.config.opt_string("printer_model"); + const auto model_name = selected_preset.config.opt_string("printer_model"); std::string cover_file = model_name + "_cover.png"; for (auto vendor_profile : preset_bundle->vendors) { for (auto vendor_model : vendor_profile.second.models) { @@ -6515,27 +6470,29 @@ void Sidebar::update_printer_thumbnail() } } -void Sidebar::auto_calc_flushing_volumes(const int filament_idx, const int extruder_id) -{ +void Sidebar::auto_calc_flushing_volumes(const int filament_idx, const int extruder_id) { + std::vector filament_indices; std::vector extruder_indices; auto& preset_bundle = wxGetApp().preset_bundle; - auto filament_ptr = preset_bundle->project_config.option("filament_colour"); - int filament_count = filament_ptr ? filament_ptr->size() : 0; - int extruder_count = preset_bundle->get_printer_extruder_count(); + auto filament_ptr = preset_bundle->project_config.option("filament_colour"); + int filament_count = filament_ptr ? filament_ptr->size() : 0; + int extruder_count = preset_bundle->get_printer_extruder_count(); if (filament_idx < 0) { filament_indices.resize(filament_count); std::iota(filament_indices.begin(), filament_indices.end(), 0); - } else { + } + else { filament_indices.emplace_back(filament_idx); } if (extruder_id < 0) { extruder_indices.resize(extruder_count); std::iota(extruder_indices.begin(), extruder_indices.end(), 0); - } else { + } + else { extruder_indices.emplace_back(extruder_id); } @@ -6553,28 +6510,28 @@ void Sidebar::auto_calc_flushing_volumes(const int filament_idx, const int extru p->plater->update(); } + void Sidebar::auto_calc_flushing_volumes_internal(const int modify_id, const int extruder_id) { auto& preset_bundle = wxGetApp().preset_bundle; // A mixed-colour slot is virtual and is never flushed to or from: leave its row and column // alone (the flushing dialog hides them and only compares physical slots). - if (modify_id >= 0 && preset_bundle->is_mixed_filament((size_t) modify_id)) + if (modify_id >= 0 && preset_bundle->is_mixed_filament((size_t)modify_id)) return; - auto& project_config = preset_bundle->project_config; - const auto& full_config = wxGetApp().preset_bundle->full_config(); - auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; - size_t extruder_nums = preset_bundle->get_printer_extruder_count(); - int nozzle_flush_dataset = full_config.option("nozzle_flush_dataset")->values[extruder_id]; - std::vector init_matrix = get_flush_volumes_matrix((project_config.option("flush_volumes_matrix"))->values, - extruder_id, extruder_nums); + auto& project_config = preset_bundle->project_config; + const auto& full_config = wxGetApp().preset_bundle->full_config(); + auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; + size_t extruder_nums = preset_bundle->get_printer_extruder_count(); + int nozzle_flush_dataset = full_config.option("nozzle_flush_dataset")->values[extruder_id]; + std::vector init_matrix = get_flush_volumes_matrix((project_config.option("flush_volumes_matrix"))->values, extruder_id, extruder_nums); const std::vector& min_flush_volumes = get_min_flush_volumes(full_config, extruder_id); - const auto* flush_multi_opt = project_config.option("flush_multiplier"); - float flush_multiplier = flush_multi_opt ? (float) flush_multi_opt->get_at(extruder_id) : 1.f; - std::vector matrix = init_matrix; - int m_max_flush_volume = Slic3r::g_max_flush_volume; - unsigned int m_number_of_extruders = (int) (sqrt(init_matrix.size()) + 0.001); + const auto* flush_multi_opt = project_config.option("flush_multiplier"); + float flush_multiplier = flush_multi_opt ? (float)flush_multi_opt->get_at(extruder_id) : 1.f; + std::vector matrix = init_matrix; + int m_max_flush_volume = Slic3r::g_max_flush_volume; + unsigned int m_number_of_extruders = (int)(sqrt(init_matrix.size()) + 0.001); const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); std::vector> multi_colours; @@ -6599,25 +6556,25 @@ void Sidebar::auto_calc_flushing_volumes_internal(const int modify_id, const int if (modify_id >= 0 && modify_id < multi_colours.size()) { for (int i = 0; i < multi_colours.size(); ++i) { - if (preset_bundle->is_mixed_filament((size_t) i)) + if (preset_bundle->is_mixed_filament((size_t)i)) continue; // from to modify int from_idx = i; if (from_idx != modify_id) { Slic3r::FlushVolCalculator calculator(min_flush_volumes[from_idx], m_max_flush_volume, nozzle_flush_dataset); - int flushing_volume = 0; + int flushing_volume = 0; bool is_from_support = is_support_filament(from_idx); - bool is_to_support = is_support_filament(modify_id); + bool is_to_support = is_support_filament(modify_id); if (is_to_support) { flushing_volume = Slic3r::g_flush_volume_to_support; - } else { + } + else { for (int j = 0; j < multi_colours[from_idx].size(); ++j) { const wxColour& from = multi_colours[from_idx][j]; for (int k = 0; k < multi_colours[modify_id].size(); ++k) { const wxColour& to = multi_colours[modify_id][k]; - int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), - to.Red(), to.Green(), to.Blue()); - flushing_volume = std::max(flushing_volume, volume); + int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue()); + flushing_volume = std::max(flushing_volume, volume); } } if (is_from_support) @@ -6631,18 +6588,18 @@ void Sidebar::auto_calc_flushing_volumes_internal(const int modify_id, const int if (to_idx != modify_id) { Slic3r::FlushVolCalculator calculator(min_flush_volumes[modify_id], m_max_flush_volume, nozzle_flush_dataset); bool is_from_support = is_support_filament(modify_id); - bool is_to_support = is_support_filament(to_idx); - int flushing_volume = 0; + bool is_to_support = is_support_filament(to_idx); + int flushing_volume = 0; if (is_to_support) { flushing_volume = Slic3r::g_flush_volume_to_support; - } else { + } + else { for (int j = 0; j < multi_colours[modify_id].size(); ++j) { const wxColour& from = multi_colours[modify_id][j]; for (int k = 0; k < multi_colours[to_idx].size(); ++k) { const wxColour& to = multi_colours[to_idx][k]; - int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), - to.Red(), to.Green(), to.Blue()); - flushing_volume = std::max(flushing_volume, volume); + int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue()); + flushing_volume = std::max(flushing_volume, volume); } } if (is_from_support) @@ -6653,21 +6610,27 @@ void Sidebar::auto_calc_flushing_volumes_internal(const int modify_id, const int } } } - set_flush_volumes_matrix((project_config.option("flush_volumes_matrix"))->values, matrix, extruder_id, - extruder_nums); + set_flush_volumes_matrix((project_config.option("flush_volumes_matrix"))->values, matrix, extruder_id, extruder_nums); } -void Sidebar::jump_to_object(ObjectDataViewModelNode* item) { p->jump_to_object(item); } +void Sidebar::jump_to_object(ObjectDataViewModelNode* item) +{ + p->jump_to_object(item); +} -void Sidebar::can_search() { p->can_search(); } +void Sidebar::can_search() +{ + p->can_search(); +} class PlaterDropTarget : public wxFileDropTarget { public: - PlaterDropTarget(MainFrame& mainframe, Plater& plater) : m_mainframe(mainframe), m_plater(plater) - { this->SetDefaultAction(wxDragCopy); } + PlaterDropTarget(MainFrame& mainframe, Plater& plater) : m_mainframe(mainframe), m_plater(plater) { + this->SetDefaultAction(wxDragCopy); + } - virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames); + virtual bool OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames); private: MainFrame& m_mainframe; @@ -6675,16 +6638,16 @@ private: }; namespace { -bool emboss_svg(Plater& plater, const wxString& svg_file, const Vec2d& mouse_drop_position) +bool emboss_svg(Plater& plater, const wxString &svg_file, const Vec2d& mouse_drop_position) { std::string svg_file_str = into_u8(svg_file); - GLCanvas3D* canvas = plater.canvas3D(); + GLCanvas3D* canvas = plater.canvas3D(); if (canvas == nullptr) return false; auto base_svg = canvas->get_gizmos_manager().get_gizmo(GLGizmosManager::Svg); if (base_svg == nullptr) return false; - GLGizmoSVG* svg = dynamic_cast(base_svg); + GLGizmoSVG* svg = dynamic_cast(base_svg); if (svg == nullptr) return false; @@ -6695,42 +6658,51 @@ bool emboss_svg(Plater& plater, const wxString& svg_file, const Vec2d& mouse_dro return svg->create_volume(svg_file_str, mouse_drop_position, ModelVolumeType::MODEL_PART); } -} // namespace +} // State to manage showing after export notifications and device ejecting -enum ExportingStatus { NOT_EXPORTING, EXPORTING_TO_REMOVABLE, EXPORTING_TO_LOCAL }; +enum ExportingStatus{ + NOT_EXPORTING, + EXPORTING_TO_REMOVABLE, + EXPORTING_TO_LOCAL +}; + // TODO: listen on dark ui change class FloatFrame : public wxAuiFloatingFrame { public: FloatFrame(wxWindow* parent, wxAuiManager* ownerMgr, const wxAuiPaneInfo& pane) : wxAuiFloatingFrame(parent, ownerMgr, pane) - { wxGetApp().UpdateFrameDarkUI(this); } + { + wxGetApp().UpdateFrameDarkUI(this); + } }; class AuiMgr : public wxAuiManager { public: - AuiMgr() : wxAuiManager() {} + AuiMgr() : wxAuiManager(){} virtual wxAuiFloatingFrame* CreateFloatingFrame(wxWindow* parent, const wxAuiPaneInfo& p) override - { return new FloatFrame(parent, this, p); } + { + return new FloatFrame(parent, this, p); + } }; // Plater / private struct Plater::priv { // PIMPL back pointer ("Q-Pointer") - Plater* q; - Sidebar* sidebar; - MainFrame* main_frame; + Plater *q; + Sidebar * sidebar; + MainFrame *main_frame; MenuFactory menus; SelectMachineDialog* m_select_machine_dlg = nullptr; - SendMultiMachinePage* m_send_multi_dlg = nullptr; + SendMultiMachinePage* m_send_multi_dlg = nullptr; SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr; - PublishDialog* m_publish_dlg = nullptr; + PublishDialog *m_publish_dlg = nullptr; // Session-level stash of the last published selection. Written on publish and on // loading a published 3MF; read when the Publish dialog is opened. @@ -6739,33 +6711,33 @@ struct Plater::priv std::vector m_pending_material_keys; // Data - Slic3r::DynamicPrintConfig* config; // FIXME: leak? - Slic3r::Print fff_print; - Slic3r::SLAPrint sla_print; - Slic3r::Model model; - PrinterTechnology printer_technology = ptFFF; + Slic3r::DynamicPrintConfig *config; // FIXME: leak? + Slic3r::Print fff_print; + Slic3r::SLAPrint sla_print; + Slic3r::Model model; + PrinterTechnology printer_technology = ptFFF; Slic3r::GCodeProcessorResult gcode_result; // GUI elements AuiMgr m_aui_mgr; wxString m_default_window_layout; - wxPanel* current_panel{nullptr}; + wxPanel* current_panel{ nullptr }; std::vector panels; struct SidebarLayout { - bool is_enabled{false}; - bool is_collapsed{false}; - bool show{false}; + bool is_enabled{false}; + bool is_collapsed{false}; + bool show{false}; } sidebar_layout; Bed3D bed; Camera camera; - // BBS: partplate related structure + //BBS: partplate related structure PartPlateList partplate_list; - // BBS: add a flag to ignore cancel event + //BBS: add a flag to ignore cancel event bool m_ignore_event{false}; bool m_slice_all{false}; - bool m_is_slicing{false}; + bool m_is_slicing {false}; // Missing-plugin set signatures (sorted full refs joined by '\n'), one per notification. They // gate plugin-load re-validation and avoid needlessly recreating the notification when the set // is unchanged. Whether missing plugins block slicing is derived directly from PluginResolver @@ -6774,17 +6746,17 @@ struct Plater::priv std::string m_cloud_missing_shown_sig; std::string m_inactive_shown_sig; std::string m_broken_shown_sig; - bool auto_reslice_pending{false}; - bool auto_reslice_after_cancel{false}; - bool m_is_publishing{false}; + bool auto_reslice_pending {false}; + bool auto_reslice_after_cancel {false}; + bool m_is_publishing {false}; int m_is_RightClickInLeftUI{-1}; int m_cur_slice_plate; - // BBS: m_slice_all in .gcode.3mf file case, set true when slice all - bool m_slice_all_only_has_gcode{false}; + //BBS: m_slice_all in .gcode.3mf file case, set true when slice all + bool m_slice_all_only_has_gcode{ false }; bool m_need_update{false}; - // BBS: add popup object table logic - // ObjectTableDialog* m_popup_table{ nullptr }; + //BBS: add popup object table logic + //ObjectTableDialog* m_popup_table{ nullptr }; #if ENABLE_ENVIRONMENT_MAP GLTexture environment_texture; @@ -6792,17 +6764,17 @@ struct Plater::priv Mouse3DController mouse3d_controller; View3D* view3D; // BBS - // GLToolbar view_toolbar; + //GLToolbar view_toolbar; GLToolbar collapse_toolbar; - Preview* preview; - AssembleView* assemble_view{nullptr}; - bool first_enter_assemble{true}; + Preview *preview; + AssembleView* assemble_view { nullptr }; + bool first_enter_assemble{ true }; std::unique_ptr notification_manager; ProjectDirtyStateManager dirty_state; - BackgroundSlicingProcess background_process; - bool suppressed_backround_processing_update{false}; + BackgroundSlicingProcess background_process; + bool suppressed_backround_processing_update { false }; // TODO: A mechanism would be useful for blocking the plater interactions: // objects would be frozen for the user. In case of arrange, an animation @@ -6812,22 +6784,22 @@ struct Plater::priv // UIThreadWorker can be used as a replacement for BoostThreadWorker if // no additional worker threads are desired (useful for debugging or profiling) PlaterWorker m_worker; - SLAImportDialog* m_sla_import_dlg; + SLAImportDialog * m_sla_import_dlg; - int m_job_prepare_state; + int m_job_prepare_state; - bool delayed_scene_refresh; - std::string delayed_error_message; + bool delayed_scene_refresh; + std::string delayed_error_message; - wxTimer background_process_timer; - wxTimer auto_reslice_timer; + wxTimer background_process_timer; + wxTimer auto_reslice_timer; - std::string label_btn_export; - std::string label_btn_send; + std::string label_btn_export; + std::string label_btn_send; - bool show_render_statistic_dialog{false}; - bool show_wireframe{false}; - bool wireframe_enabled{true}; + bool show_render_statistic_dialog{ false }; + bool show_wireframe{ false }; + bool wireframe_enabled{ true }; static const std::regex pattern_bundle; static const std::regex pattern_3mf; @@ -6837,9 +6809,10 @@ struct Plater::priv bool m_is_dark = false; - priv(Plater* q, MainFrame* main_frame); + priv(Plater *q, MainFrame *main_frame); ~priv(); + bool need_update() const { return m_need_update; } void set_need_update(bool need_update) { m_need_update = need_update; } @@ -6852,8 +6825,7 @@ struct Plater::priv Slic3r::put_other_changes(); dirty_state.update_from_presets(); } - int save_project_if_dirty(const wxString& reason) - { + int save_project_if_dirty(const wxString& reason) { int res = wxID_NO; if (dirty_state.is_dirty()) { MainFrame* mainframe = wxGetApp().mainframe; @@ -6861,13 +6833,11 @@ struct Plater::priv wxString suggested_project_name; wxString project_name = suggested_project_name = get_project_filename(".3mf"); if (suggested_project_name.IsEmpty()) { - fs::path output_file = get_export_file_path(FT_3MF); + fs::path output_file = get_export_file_path(FT_3MF); suggested_project_name = output_file.empty() ? _L("Untitled") : from_u8(output_file.stem().string()); } - res = MessageDialog(mainframe, - reason + "\n" + format_wxstr(_L("Do you want to save changes to \"%1%\"?"), suggested_project_name), - wxString(SLIC3R_APP_FULL_NAME), wxYES_NO | wxCANCEL) - .ShowModal(); + res = MessageDialog(mainframe, reason + "\n" + format_wxstr(_L("Do you want to save changes to \"%1%\"?"), suggested_project_name), + wxString(SLIC3R_APP_FULL_NAME), wxYES_NO | wxCANCEL).ShowModal(); if (res == wxID_YES) if (!mainframe->save_project_as(project_name)) res = wxID_CANCEL; @@ -6875,11 +6845,7 @@ struct Plater::priv } return res; } - void reset_project_dirty_after_save() - { - m_undo_redo_stack_main.mark_current_as_saved(); - dirty_state.reset_after_save(); - } + void reset_project_dirty_after_save() { m_undo_redo_stack_main.mark_current_as_saved(); dirty_state.reset_after_save(); } void reset_project_dirty_initial_presets() { dirty_state.reset_initial_presets(); } #if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW @@ -6893,7 +6859,7 @@ struct Plater::priv }; void update(unsigned int flags = 0); void select_view(const std::string& direction); - // BBS: add no_slice option + //BBS: add no_slice option void select_view_3D(const std::string& name, bool no_slice = true); void select_next_view_3D(); @@ -6905,7 +6871,7 @@ struct Plater::priv bool are_view3D_labels_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->are_labels_shown(); } void show_view3D_labels(bool show) { - if (current_panel == view3D) { + if (current_panel == view3D) { view3D->get_canvas3d()->show_labels(show); wxGetApp().app_config->set_bool("show_labels", show); } @@ -6914,7 +6880,7 @@ struct Plater::priv bool is_view3D_overhang_shown() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_overhang_shown(); } void show_view3D_overhang(bool show) { - if (current_panel == view3D) { + if (current_panel == view3D) { view3D->get_canvas3d()->show_overhang(show); wxGetApp().app_config->set_bool("show_overhang", show); } @@ -6926,15 +6892,14 @@ struct Plater::priv void reset_window_layout(); Sidebar::DockingState get_sidebar_docking_state(); - bool is_view3D_layers_editing_enabled() const - { return (current_panel == view3D) && view3D->get_canvas3d()->is_layers_editing_enabled(); } + bool is_view3D_layers_editing_enabled() const { return (current_panel == view3D) && view3D->get_canvas3d()->is_layers_editing_enabled(); } void set_current_canvas_as_dirty(); GLCanvas3D* get_current_canvas3D(bool exclude_preview = false); void unbind_canvas_event_handlers(); void reset_canvas_volumes(); - bool check_ams_status_impl(bool is_slice_all); // Check whether the printer and ams status are consistent, for grouping algorithm - bool get_machine_sync_status(); // check whether the printer is linked and the printer type is same as selected profile + bool check_ams_status_impl(bool is_slice_all); // Check whether the printer and ams status are consistent, for grouping algorithm + bool get_machine_sync_status(); // check whether the printer is linked and the printer type is same as selected profile // BBS bool init_collapse_toolbar(); @@ -6963,7 +6928,7 @@ struct Plater::priv void update_ui_from_settings(); // BBS std::shared_ptr statusbar(); - std::string get_config(const std::string& key) const; + std::string get_config(const std::string &key) const; BoundingBoxf bed_shape_bb() const; BoundingBox scaled_bed_shape_bb() const; @@ -6973,37 +6938,31 @@ struct Plater::priv LoadStrategy strategy, bool ask_multi = false, bool* published_out = nullptr); - std::vector load_model_objects(const ModelObjectPtrs& model_objects, - bool allow_negative_z = false, - bool split_object = false, - bool auto_drop = true); + std::vector load_model_objects(const ModelObjectPtrs& model_objects, bool allow_negative_z = false, bool split_object = false, bool auto_drop = true); // Texture-to-color import: a mesh loaded with UVs + a texture map gets its faces clustered // into printable colours, which are then matched against (or added to) the filament list. - struct TextureImportResult - { - Slic3r::PaintedMesh painted; - std::vector matches; - std::vector> new_filament_colors; - std::vector new_filament_preset_names; + struct TextureImportResult { + Slic3r::PaintedMesh painted; + std::vector matches; + std::vector> new_filament_colors; + std::vector new_filament_preset_names; std::vector new_mixed_filaments; - std::vector filament_entries; - size_t existing_filament_count = 0; - bool skipped = false; - bool fallback_to_geometry_only = false; - wxString fallback_warning; + std::vector filament_entries; + size_t existing_filament_count = 0; + bool skipped = false; + bool fallback_to_geometry_only = false; + wxString fallback_warning; }; - bool run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, - TextureImportResult& result, - std::function cancel_callback = {}, + bool run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, TextureImportResult& result, + std::function cancel_callback = {}, std::function progress_callback = {}); - void apply_textured_mesh_import_result(Slic3r::Model& loaded_model, - const std::vector& obj_idxs, + void apply_textured_mesh_import_result(Slic3r::Model& loaded_model, const std::vector& obj_idxs, const TextureImportResult& result, - LoadProgressCallback progress_callback = {}, - bool update_scene = true); - void handle_textured_mesh_import(Slic3r::Model& model, const std::vector& obj_idxs, std::function cancel_callback = {}); + LoadProgressCallback progress_callback = {}, bool update_scene = true); + void handle_textured_mesh_import(Slic3r::Model& model, const std::vector& obj_idxs, + std::function cancel_callback = {}); fs::path get_export_file_path(GUI::FileType file_type); wxString get_export_file(GUI::FileType file_type, const wxString& title = {}, bool published = false); @@ -7028,7 +6987,7 @@ struct Plater::priv void deselect_all(); void exit_gizmo(); void remove(size_t obj_idx); - bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); // BBS + bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS void delete_all_objects_from_model(); void reset(bool apply_presets_change = false); void center_selection(); @@ -7040,11 +6999,7 @@ struct Plater::priv void scale_selection_to_fit_print_volume(); // Return the active Undo/Redo stack. It may be either the main stack or the Gimzo stack. - Slic3r::UndoRedo::Stack& undo_redo_stack() - { - assert(m_undo_redo_stack_active != nullptr); - return *m_undo_redo_stack_active; - } + Slic3r::UndoRedo::Stack& undo_redo_stack() { assert(m_undo_redo_stack_active != nullptr); return *m_undo_redo_stack_active; } Slic3r::UndoRedo::Stack& undo_redo_stack_main() { return m_undo_redo_stack_main; } void enter_gizmos_stack(); bool leave_gizmos_stack(); @@ -7052,7 +7007,7 @@ struct Plater::priv void take_snapshot(const std::string& snapshot_name, UndoRedo::SnapshotType snapshot_type = UndoRedo::SnapshotType::Action); /*void take_snapshot(const wxString& snapshot_name, UndoRedo::SnapshotType snapshot_type = UndoRedo::SnapshotType::Action) { this->take_snapshot(std::string(snapshot_name.ToUTF8().data()), snapshot_type); }*/ - int get_active_snapshot_index(); + int get_active_snapshot_index(); void undo(); void redo(); @@ -7061,25 +7016,22 @@ struct Plater::priv // BBS: backup bool up_to_date(bool saved, bool backup); - void suppress_snapshots() { m_prevent_snapshots++; } - void allow_snapshots() { m_prevent_snapshots--; } + void suppress_snapshots() { m_prevent_snapshots++; } + void allow_snapshots() { m_prevent_snapshots--; } // BBS: single snapshot - void single_snapshots_enter(SingleSnapshot* single) + void single_snapshots_enter(SingleSnapshot *single) { - if (m_single == nullptr) - m_single = single; + if (m_single == nullptr) m_single = single; } - void single_snapshots_leave(SingleSnapshot* single) + void single_snapshots_leave(SingleSnapshot *single) { - if (m_single == single) - m_single = nullptr; + if (m_single == single) m_single = nullptr; } - void process_validation_warning(StringObjectException const& warning) const; - void process_validation_warnings(const std::vector& warnings) const; + void process_validation_warning(StringObjectException const &warning) const; + void process_validation_warnings(const std::vector &warnings) const; - bool background_processing_enabled() const - { + bool background_processing_enabled() const { #ifdef SUPPORT_BACKGROUND_PROCESSING return this->get_config("background_processing") == "1"; #else @@ -7091,7 +7043,7 @@ struct Plater::priv void schedule_background_process(); void schedule_auto_reslice_if_needed(); void trigger_auto_reslice_now(); - int auto_slice_delay_seconds() const; + int auto_slice_delay_seconds() const; // Update background processing thread from the current config and Model. enum UpdateBackgroundProcessReturnState { // update_background_process() reports, that the Print / SLAPrint was updated in a way, @@ -7114,8 +7066,7 @@ struct Plater::priv bool restart_background_process(unsigned int state); // returns bit mask of UpdateBackgroundProcessReturnState unsigned int update_restart_background_process(bool force_scene_update, bool force_preview_update); - void show_delayed_error_message() - { + void show_delayed_error_message() { if (!this->delayed_error_message.empty()) { std::string msg = std::move(this->delayed_error_message); this->delayed_error_message.clear(); @@ -7131,7 +7082,7 @@ struct Plater::priv void replace_all_with_stl(); void reload_all_from_disk(); - // BBS: add no_slice option + //BBS: add no_slice option void set_current_panel(wxPanel* panel, bool no_slice = true); void on_combobox_select(wxCommandEvent&); @@ -7145,9 +7096,9 @@ struct Plater::priv void on_slicing_began(); void clear_warnings(); - void add_warning(const Slic3r::PrintStateBase::Warning& warning, size_t oid); + void add_warning(const Slic3r::PrintStateBase::Warning &warning, size_t oid); // Update notification manager with the current state of warnings produced by the background process (slicing). - void actualize_slicing_warnings(const PrintBase& print); + void actualize_slicing_warnings(const PrintBase &print); void actualize_object_warnings(const PrintBase& print); // Displays dialog window with list of warnings. // Returns true if user clicks OK. @@ -7160,32 +7111,32 @@ struct Plater::priv void on_action_split_objects(SimpleEvent&); void on_action_split_volumes(SimpleEvent&); void on_action_layersediting(SimpleEvent&); - void on_create_filament(SimpleEvent&); - void on_modify_filament(SimpleEvent&); - void on_add_filament(SimpleEvent&); - void on_delete_filament(SimpleEvent&); - void on_add_custom_filament(ColorEvent&); + void on_create_filament(SimpleEvent &); + void on_modify_filament(SimpleEvent &); + void on_add_filament(SimpleEvent &); + void on_delete_filament(SimpleEvent &); + void on_add_custom_filament(ColorEvent &); void on_object_select(SimpleEvent&); - void show_right_click_menu(Vec2d mouse_position, wxMenu* menu); + void show_right_click_menu(Vec2d mouse_position, wxMenu *menu); void on_right_click(RBtnEvent&); - // BBS: add model repair - void on_repair_model(wxCommandEvent& event); - void on_filament_color_changed(wxCommandEvent& event); - void show_install_plugin_hint(wxCommandEvent& event); - void install_network_plugin(wxCommandEvent& event); - void show_preview_only_hint(wxCommandEvent& event); - // BBS: add part plate related logic + //BBS: add model repair + void on_repair_model(wxCommandEvent &event); + void on_filament_color_changed(wxCommandEvent &event); + void show_install_plugin_hint(wxCommandEvent &event); + void install_network_plugin(wxCommandEvent &event); + void show_preview_only_hint(wxCommandEvent &event); + //BBS: add part plate related logic void on_plate_right_click(RBtnPlateEvent&); void on_plate_selected(SimpleEvent&); void on_action_request_model_id(wxCommandEvent& evt); void on_action_download_project(wxCommandEvent& evt); void on_slice_button_status(bool enable); - // BBS: GUI refactor: GLToolbar + //BBS: GUI refactor: GLToolbar void on_action_open_project(SimpleEvent&); void on_action_slice_plate(SimpleEvent&); void on_action_slice_all(SimpleEvent&); - void on_action_publish(wxCommandEvent& evt); + void on_action_publish(wxCommandEvent &evt); void on_action_print_plate(SimpleEvent&); void open_machine_select_dialog(int plate_idx, PrintFromType print_type = PrintFromType::FROM_NORMAL); void on_action_print_all(SimpleEvent&); @@ -7194,7 +7145,7 @@ struct Plater::priv void on_action_export_sliced_file(SimpleEvent&); void on_action_export_all_sliced_file(SimpleEvent&); void on_action_select_sliced_plate(wxCommandEvent& evt); - // BBS: change dark/light mode + //BBS: change dark/light mode void on_change_color_mode(SimpleEvent& evt); void on_apple_change_color_mode(wxSysColourChangedEvent& evt); void apply_color_mode(); @@ -7202,9 +7153,9 @@ struct Plater::priv void on_3dcanvas_mouse_dragging_started(SimpleEvent&); void on_3dcanvas_mouse_dragging_finished(SimpleEvent&); - // void show_action_buttons(const bool is_ready_to_slice) const; + //void show_action_buttons(const bool is_ready_to_slice) const; bool show_publish_dlg(bool show = true); - void update_publish_dialog_status(wxString& msg, int percent = -1); + void update_publish_dialog_status(wxString &msg, int percent = -1); void on_action_print_plate_from_sdcard(SimpleEvent&); void on_tab_selection_changing(wxBookCtrlEvent&); @@ -7213,16 +7164,16 @@ struct Plater::priv // triangulate the bed and store the triangles into m_bed.m_triangles, // fills the m_bed.m_grid_lines and sets m_bed.m_origin. // Sets m_bed.m_polygon to limit the object placement. - // BBS: add bed exclude area - void set_bed_shape(const Pointfs& shape, - const Pointfs& exclude_areas, - const Pointfs& wrapping_exclude_areas, - const double printable_height, + //BBS: add bed exclude area + void set_bed_shape(const Pointfs &shape, + const Pointfs &exclude_areas, + const Pointfs &wrapping_exclude_areas, + const double printable_height, std::vector extruder_areas, - std::vector extruder_heights, - const std::string& custom_texture, - const std::string& custom_model, - bool force_as_custom = false); + std::vector extruder_heights, + const std::string &custom_texture, + const std::string &custom_model, + bool force_as_custom = false); bool can_delete() const; bool can_delete_all() const; @@ -7240,7 +7191,7 @@ struct Plater::priv bool can_set_instance_to_object() const; bool can_mirror() const; bool can_reload_from_disk() const; - // BBS: + //BBS: bool can_fillcolor() const; bool has_assemble_view() const; bool can_replace_with_stl() const; @@ -7250,15 +7201,12 @@ struct Plater::priv bool can_scale_to_print_volume() const; #endif // ENABLE_ENHANCED_PRINT_VOLUME_FIT - // BBS: add plate_id for thumbnail - void generate_thumbnail(ThumbnailData& data, - unsigned int w, - unsigned int h, - const ThumbnailsParams& thumbnail_params, - Camera::EType camera_type, - Camera::ViewAngleType camera_view_angle_type = Camera::ViewAngleType::Iso, - bool for_picking = false, - bool ban_light = false); + //BBS: add plate_id for thumbnail + void generate_thumbnail(ThumbnailData& data, unsigned int w, unsigned int h, const ThumbnailsParams& thumbnail_params, + Camera::EType camera_type, + Camera::ViewAngleType camera_view_angle_type = Camera::ViewAngleType::Iso, + bool for_picking = false, + bool ban_light = false); ThumbnailsList generate_thumbnails(const ThumbnailsParams& params, Camera::EType camera_type); PlateBBoxData generate_first_layer_bbox(); @@ -7270,7 +7218,7 @@ struct Plater::priv wxString get_export_gcode_filename(const wxString& extension = wxEmptyString, bool only_filename = false, bool export_all = false) const; void set_project_filename(const wxString& filename); - // BBS store bbs project name + //BBS store bbs project name wxString get_project_name(); void set_project_name(const wxString& project_name); void update_title_dirty_status(); @@ -7280,34 +7228,27 @@ struct Plater::priv void update_objects_position_when_select_preset(const std::function& select_prest); - // Caching last value of show_action_buttons parameter for show_action_buttons(), so that a callback which does not know this state will - // not override it. - // mutable bool ready_to_slice = { false }; - // Flag indicating that the G-code export targets a removable device, therefore the show_action_buttons() needs to be called at any case - // when the background processing finishes. - ExportingStatus exporting_status{NOT_EXPORTING}; - std::string last_output_path; - std::string last_output_dir_path; - // BBS store machine_sn and 3mf_path for PrintJob - PrintPrepareData m_print_job_data; - bool inside_snapshot_capture() { return m_prevent_snapshots != 0; } - int process_completed_with_error{-1}; //-1 means no error + // Caching last value of show_action_buttons parameter for show_action_buttons(), so that a callback which does not know this state will not override it. + //mutable bool ready_to_slice = { false }; + // Flag indicating that the G-code export targets a removable device, therefore the show_action_buttons() needs to be called at any case when the background processing finishes. + ExportingStatus exporting_status { NOT_EXPORTING }; + std::string last_output_path; + std::string last_output_dir_path; + //BBS store machine_sn and 3mf_path for PrintJob + PrintPrepareData m_print_job_data; + bool inside_snapshot_capture() { return m_prevent_snapshots != 0; } + int process_completed_with_error { -1 }; //-1 means no error - // BBS: project - BBLProject project; + //BBS: project + BBLProject project; - // BBS: add print project related logic + //BBS: add print project related logic void update_fff_scene_only_shells(bool only_shells = true); - // BBS: add popup object table logic + //BBS: add popup object table logic bool PopupObjectTable(int object_id, int volume_id, const wxPoint& position); void on_action_send_to_printer(bool isall = false); void on_action_send_to_multi_machine(SimpleEvent&); - int update_print_required_data(Slic3r::DynamicPrintConfig config, - Slic3r::Model model, - Slic3r::PlateDataPtrs plate_data_list, - std::string file_name, - std::string file_path); - + int update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path); private: bool layers_height_allowed() const; @@ -7320,30 +7261,30 @@ private: void on_action_export_to_sdcard_all(SimpleEvent&); void update_plugin_when_launch(wxCommandEvent& event); // path to project folder stored with no extension - boost::filesystem::path m_project_folder; + boost::filesystem::path m_project_folder; /* display project name */ - wxString m_project_name; + wxString m_project_name; - Slic3r::UndoRedo::Stack m_undo_redo_stack_main; - Slic3r::UndoRedo::Stack m_undo_redo_stack_gizmos; - Slic3r::UndoRedo::Stack* m_undo_redo_stack_active = &m_undo_redo_stack_main; - int m_prevent_snapshots = 0; /* Used for avoid of excess "snapshoting". - * Like for "delete selected" or "set numbers of copies" - * we should call tack_snapshot just ones - * instead of calls for each action separately - * */ + Slic3r::UndoRedo::Stack m_undo_redo_stack_main; + Slic3r::UndoRedo::Stack m_undo_redo_stack_gizmos; + Slic3r::UndoRedo::Stack *m_undo_redo_stack_active = &m_undo_redo_stack_main; + int m_prevent_snapshots = 0; /* Used for avoid of excess "snapshoting". + * Like for "delete selected" or "set numbers of copies" + * we should call tack_snapshot just ones + * instead of calls for each action separately + * */ // BBS: single snapshot - Plater::SingleSnapshot* m_single = nullptr; + Plater::SingleSnapshot *m_single = nullptr; // BBS: backup - size_t m_saved_timestamp = 0; + size_t m_saved_timestamp = 0; size_t m_backup_timestamp = 0; - std::string m_last_fff_printer_profile_name; - std::string m_last_sla_printer_profile_name; + std::string m_last_fff_printer_profile_name; + std::string m_last_sla_printer_profile_name; // vector of all warnings generated by last slicing std::vector> current_warnings; - bool show_warning_dialog{false}; + bool show_warning_dialog { false }; }; Plater::~Plater() = default; @@ -7354,7 +7295,7 @@ const std::regex Plater::priv::pattern_zip_amf(".*[.]zip[.]amf", std::regex::ica const std::regex Plater::priv::pattern_any_amf(".*[.](amf|amf[.]xml|zip[.]amf)", std::regex::icase); const std::regex Plater::priv::pattern_prusa(".*bbl", std::regex::icase); -bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames) +bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString &filenames) { #ifdef WIN32 // hides the system icon @@ -7368,14 +7309,14 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& fi // When only one .svg file is dropped on scene if (filenames.size() == 1) { - const wxString& filename = filenames.Last(); - const wxString file_extension = filename.substr(filename.length() - 4); + const wxString &filename = filenames.Last(); + const wxString file_extension = filename.substr(filename.length() - 4); if (file_extension.CmpNoCase(".svg") == 0) { // BBS: GUI refactor: move sidebar to the left - const wxPoint offset = m_plater.GetPosition() + m_plater.p->current_panel->GetPosition(); + const wxPoint offset = m_plater.GetPosition() + m_plater.p->current_panel->GetPosition(); Vec2d mouse_position(x - offset.x, y - offset.y); // Scale for retina displays - const GLCanvas3D* canvas = m_plater.canvas3D(); + const GLCanvas3D *canvas = m_plater.canvas3D(); canvas->apply_retina_scale(mouse_position); return emboss_svg(m_plater, filename, mouse_position); } @@ -7385,26 +7326,29 @@ bool PlaterDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& fi return res; } -Plater::priv::priv(Plater* q, MainFrame* main_frame) +Plater::priv::priv(Plater *q, MainFrame *main_frame) : q(q) , main_frame(main_frame) - // BBS: add bed_exclude_area - , config(Slic3r::DynamicPrintConfig::new_from_defaults_keys( - {"printable_area", "bed_exclude_area", "wrapping_exclude_area", "extruder_printable_area", "bed_custom_texture", - "bed_custom_model", "print_sequence", "extruder_clearance_radius", "extruder_clearance_height_to_lid", - "extruder_clearance_height_to_rod", "nozzle_height", "skirt_type", "skirt_loops", "skirt_speed", "min_skirt_length", - "skirt_distance", "skirt_start_angle", "brim_width", "brim_object_gap", "brim_flow_ratio", "brim_use_efc_outline", - "combine_brims", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation", "enable_prime_tower", - "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", - "prime_tower_enable_framework", "prime_tower_infill_gap", "prime_volume", "extruder_colour", "filament_colour", "filament_type", - "filament_is_support", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology", - // These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor. - "layer_height", "initial_layer_print_height", "min_layer_height", "max_layer_height", "wall_loops", "outer_wall_filament_id", - "inner_wall_filament_id", "sparse_infill_density", "sparse_infill_filament_id", "top_shell_layers", "enable_support", - "support_filament", "support_interface_filament", "support_top_z_distance", "support_bottom_z_distance", "raft_layers", - "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extra_flow", - "wipe_tower_max_purge_speed", "wipe_tower_wall_type", "wipe_tower_extra_rib_length", "wipe_tower_rib_width", - "wipe_tower_fillet_wall", "wipe_tower_filament", "best_object_pos", "master_extruder_id"})) + //BBS: add bed_exclude_area + , config(Slic3r::DynamicPrintConfig::new_from_defaults_keys({ + "printable_area", "bed_exclude_area", "wrapping_exclude_area", "extruder_printable_area", "bed_custom_texture", "bed_custom_model", "print_sequence", + "extruder_clearance_radius", + "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "nozzle_height", "skirt_type", "skirt_loops", "skirt_speed","min_skirt_length", "skirt_distance", "skirt_start_angle", + "brim_width", "brim_object_gap", "brim_flow_ratio", "brim_use_efc_outline", "combine_brims", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "preferred_orientation", + "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_tower_skip_points", "prime_tower_enable_framework", + "prime_tower_infill_gap", "prime_volume", + "extruder_colour", "filament_colour", "filament_type", "filament_is_support", "material_colour", "printable_height", "extruder_printable_height", "printer_model", "printer_technology", + // These values are necessary to construct SlicingParameters by the Canvas3D variable layer height editor. + "layer_height", "initial_layer_print_height", "min_layer_height", "max_layer_height", + "wall_loops", "outer_wall_filament_id", "inner_wall_filament_id", "sparse_infill_density", "sparse_infill_filament_id", "top_shell_layers", + "enable_support", "support_filament", "support_interface_filament", + "support_top_z_distance", "support_bottom_z_distance", "raft_layers", + "wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extra_flow", "wipe_tower_max_purge_speed", + "wipe_tower_wall_type", "wipe_tower_extra_rib_length","wipe_tower_rib_width","wipe_tower_fillet_wall", + "wipe_tower_filament", + "best_object_pos", "master_extruder_id" + })) , sidebar(new Sidebar(q)) , notification_manager(std::make_unique(q)) , m_worker{q, std::make_unique(notification_manager.get()), "ui_worker"} @@ -7412,7 +7356,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) , m_job_prepare_state(Job::JobPrepareState::PREPARE_STATE_DEFAULT) , delayed_scene_refresh(false) , collapse_toolbar(GLToolbar::Normal, "Collapse") - // BBS :partplatelist construction + //BBS :partplatelist construction , partplate_list(this->q, &model) { m_is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; @@ -7427,21 +7371,21 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) if (disable_wayland_floating) m_aui_mgr.SetFlags(m_aui_mgr.GetFlags() & ~wxAUI_MGR_ALLOW_FLOATING); #endif - // m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE, 0); - // m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_SASH_SIZE, 2); + //m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_PANE_BORDER_SIZE, 0); + //m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_SASH_SIZE, 2); m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_CAPTION_SIZE, 18); m_aui_mgr.GetArtProvider()->SetMetric(wxAUI_DOCKART_GRADIENT_TYPE, wxAUI_GRADIENT_NONE); this->q->SetFont(Slic3r::GUI::wxGetApp().normal_font()); - // BBS: use the first partplate's print for background process + //BBS: use the first partplate's print for background process partplate_list.update_slice_context_to_current_plate(background_process); /* background_process.set_fff_print(&fff_print); background_process.set_sla_print(&sla_print); background_process.set_gcode_result(&gcode_result); - background_process.set_thumbnail_cb([this](const ThumbnailsParams& params) { return this->generate_thumbnails(params, - Camera::EType::Ortho); }); background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED); + background_process.set_thumbnail_cb([this](const ThumbnailsParams& params) { return this->generate_thumbnails(params, Camera::EType::Ortho); }); + background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED); background_process.set_finished_event(EVT_PROCESS_COMPLETED); background_process.set_export_began_event(EVT_EXPORT_BEGAN); // Default printer technology for default config. @@ -7455,8 +7399,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) sla_print.set_status_callback(statuscb); */ // BBS: to be checked. Not follow patch. - background_process.set_thumbnail_cb( - [this](const ThumbnailsParams& params) { return this->generate_thumbnails(params, Camera::EType::Ortho); }); + background_process.set_thumbnail_cb([this](const ThumbnailsParams& params) { return this->generate_thumbnails(params, Camera::EType::Ortho); }); background_process.set_slicing_completed_event(EVT_SLICING_COMPLETED); background_process.set_finished_event(EVT_PROCESS_COMPLETED); background_process.set_export_began_event(EVT_EXPORT_BEGAN); @@ -7479,17 +7422,16 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) main_frame->m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, &priv::on_tab_selection_changing, this); auto* panel_3d = new wxPanel(q); - view3D = new View3D(panel_3d, bed, &model, config, &background_process); - // BBS: use partplater's gcode - preview = new Preview(panel_3d, bed, &model, config, &background_process, partplate_list.get_current_slice_result(), - [this]() { schedule_background_process(); }); + view3D = new View3D(panel_3d, bed, &model, config, &background_process); + //BBS: use partplater's gcode + preview = new Preview(panel_3d, bed, &model, config, &background_process, partplate_list.get_current_slice_result(), [this]() { schedule_background_process(); }); assemble_view = new AssembleView(panel_3d, bed, &model, config, &background_process); #ifdef __APPLE__ // BBS // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size - // view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); + //view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); #endif // __APPLE__ panels.push_back(view3D); @@ -7498,7 +7440,8 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) this->background_process_timer.SetOwner(this->q, 0); this->auto_reslice_timer.SetOwner(this->q, 0); - this->q->Bind(wxEVT_TIMER, [this](wxTimerEvent& evt) { + this->q->Bind(wxEVT_TIMER, [this](wxTimerEvent &evt) + { if (&evt.GetTimer() == &this->background_process_timer) { if (!this->suppressed_backround_processing_update) this->update_restart_background_process(false, false); @@ -7513,8 +7456,13 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) update(); // Orca: Make sidebar dockable - m_aui_mgr.AddPane(sidebar, wxAuiPaneInfo().Name("sidebar").Left().CloseButton(false).TopDockable(false).BottomDockable(false).BestSize( - wxSize(39 * wxGetApp().em_unit(), 90 * wxGetApp().em_unit()))); + m_aui_mgr.AddPane(sidebar, wxAuiPaneInfo() + .Name("sidebar") + .Left() + .CloseButton(false) + .TopDockable(false) + .BottomDockable(false) + .BestSize(wxSize(39 * wxGetApp().em_unit(), 90 * wxGetApp().em_unit()))); auto* panel_sizer = new wxBoxSizer(wxHORIZONTAL); panel_sizer->Add(view3D, 1, wxEXPAND | wxALL, 0); @@ -7529,8 +7477,8 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) auto& sidebar = m_aui_mgr.GetPane(this->sidebar); // Load previous window layout - const auto cfg = wxGetApp().app_config; - wxString layout = wxString::FromUTF8(cfg->get("window_layout")); + const auto cfg = wxGetApp().app_config; + wxString layout = wxString::FromUTF8(cfg->get("window_layout")); if (!layout.empty()) { bool removed_floating_state = false; #ifdef __WXGTK__ @@ -7564,6 +7512,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) menus.init(main_frame); + // Events: if (wxGetApp().is_editor()) { @@ -7575,14 +7524,15 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) // jump to found option from SearchDialog q->Bind(wxCUSTOMEVT_JUMP_TO_OPTION, [this](wxCommandEvent& evt) { sidebar->jump_to_option(evt.GetInt()); }); q->Bind(wxCUSTOMEVT_JUMP_TO_OBJECT, [this](wxCommandEvent& evt) { - auto client_data = evt.GetClientData(); + auto client_data = evt.GetClientData(); ObjectDataViewModelNode* data = static_cast(client_data); sidebar->jump_to_object(data); - }); + } + ); } wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas(); - // BBS: GUI refactor + //BBS: GUI refactor wxGLCanvas* preview_canvas = preview->get_wxglcanvas(); if (wxGetApp().is_editor()) { @@ -7590,34 +7540,30 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) view3D_canvas->Bind(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS, [this](SimpleEvent&) { delayed_error_message.clear(); this->background_process_timer.Start(500, wxTIMER_ONE_SHOT); - }); + }); view3D_canvas->Bind(EVT_GLCANVAS_OBJECT_SELECT, &priv::on_object_select, this); view3D_canvas->Bind(EVT_GLCANVAS_RIGHT_CLICK, &priv::on_right_click, this); - // BBS: add part plate related logic + //BBS: add part plate related logic view3D_canvas->Bind(EVT_GLCANVAS_PLATE_RIGHT_CLICK, &priv::on_plate_right_click, this); view3D_canvas->Bind(EVT_GLCANVAS_REMOVE_OBJECT, [q](SimpleEvent&) { q->remove_selected(); }); view3D_canvas->Bind(EVT_GLCANVAS_ARRANGE, [this](SimpleEvent& evt) { - // BBS arrange from EVT set default state. + //BBS arrange from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_DEFAULT); - this->q->arrange(); - }); + this->q->arrange(); }); view3D_canvas->Bind(EVT_GLCANVAS_ARRANGE_PARTPLATE, [this](SimpleEvent& evt) { - // BBS arrange from EVT set default state. + //BBS arrange from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_MENU); - this->q->arrange(); - }); + this->q->arrange(); }); view3D_canvas->Bind(EVT_GLCANVAS_ORIENT, [this](SimpleEvent& evt) { - // BBS orient from EVT set default state. + //BBS orient from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_DEFAULT); - this->q->orient(); - }); + this->q->orient(); }); view3D_canvas->Bind(EVT_GLCANVAS_ORIENT_PARTPLATE, [this](SimpleEvent& evt) { - // BBS orient from EVT set default state. + //BBS orient from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_MENU); - this->q->orient(); - }); - // BBS - view3D_canvas->Bind(EVT_GLCANVAS_SELECT_CURR_PLATE_ALL, [this](SimpleEvent&) { this->q->select_curr_plate_all(); }); + this->q->orient(); }); + //BBS + view3D_canvas->Bind(EVT_GLCANVAS_SELECT_CURR_PLATE_ALL, [this](SimpleEvent&) {this->q->select_curr_plate_all(); }); view3D_canvas->Bind(EVT_GLCANVAS_PRINTABLE, [this](SimpleEvent& evt) { this->sidebar->obj_list()->toggle_printable_state(); }); view3D_canvas->Bind(EVT_GLCANVAS_SELECT_ALL, [this](SimpleEvent&) { this->q->select_all(); }); @@ -7626,18 +7572,14 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) if (this->q->is_view3D_shown()) wxGetApp().open_speed_dial(); }); - view3D_canvas->Bind(EVT_GLCANVAS_INCREASE_INSTANCES, [this](Event& evt) { - if (evt.data == 1) - this->q->increase_instances(); - else if (this->can_decrease_instances()) - this->q->decrease_instances(); - }); + view3D_canvas->Bind(EVT_GLCANVAS_INCREASE_INSTANCES, [this](Event& evt) + { if (evt.data == 1) this->q->increase_instances(); else if (this->can_decrease_instances()) this->q->decrease_instances(); }); view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_MOVED, [this](SimpleEvent&) { update(); }); view3D_canvas->Bind(EVT_GLCANVAS_FORCE_UPDATE, [this](SimpleEvent&) { update(); }); view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_ROTATED, [this](SimpleEvent&) { update(); }); view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_SCALED, [this](SimpleEvent&) { update(); }); // BBS - // view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event& evt) { this->sidebar->enable_buttons(evt.data); }); + //view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event& evt) { this->sidebar->enable_buttons(evt.data); }); view3D_canvas->Bind(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, [this](Event& evt) { on_slice_button_status(evt.data); }); view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_GEOMETRY, &priv::on_update_geometry, this); view3D_canvas->Bind(EVT_GLCANVAS_MOUSE_DRAGGING_STARTED, &priv::on_3dcanvas_mouse_dragging_started, this); @@ -7646,89 +7588,83 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) view3D_canvas->Bind(EVT_GLCANVAS_RESETGIZMOS, [this](SimpleEvent&) { reset_all_gizmos(); }); view3D_canvas->Bind(EVT_GLCANVAS_UNDO, [this](SimpleEvent&) { this->undo(); }); view3D_canvas->Bind(EVT_GLCANVAS_REDO, [this](SimpleEvent&) { this->redo(); }); - view3D_canvas->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, - [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); - view3D_canvas->Bind(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, - [this](SimpleEvent&) { this->view3D->get_canvas3d()->reset_layer_height_profile(); }); - view3D_canvas->Bind(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, - [this](Event& evt) { this->view3D->get_canvas3d()->adaptive_layer_height_profile(evt.data); }); - view3D_canvas->Bind(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, - [this](HeightProfileSmoothEvent& evt) { this->view3D->get_canvas3d()->smooth_layer_height_profile(evt.data); }); + view3D_canvas->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); + view3D_canvas->Bind(EVT_GLCANVAS_RESET_LAYER_HEIGHT_PROFILE, [this](SimpleEvent&) { this->view3D->get_canvas3d()->reset_layer_height_profile(); }); + view3D_canvas->Bind(EVT_GLCANVAS_ADAPTIVE_LAYER_HEIGHT_PROFILE, [this](Event& evt) { this->view3D->get_canvas3d()->adaptive_layer_height_profile(evt.data); }); + view3D_canvas->Bind(EVT_GLCANVAS_SMOOTH_LAYER_HEIGHT_PROFILE, [this](HeightProfileSmoothEvent& evt) { this->view3D->get_canvas3d()->smooth_layer_height_profile(evt.data); }); view3D_canvas->Bind(EVT_GLCANVAS_RELOAD_FROM_DISK, [this](SimpleEvent&) { this->reload_all_from_disk(); }); // 3DScene/Toolbar: view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this); view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [this](SimpleEvent&) { delete_all_objects_from_model(); }); - // view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [q](SimpleEvent&) { q->reset_with_confirm(); }); +// view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [q](SimpleEvent&) { q->reset_with_confirm(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_ADD_PLATE, &priv::on_action_add_plate, this); view3D_canvas->Bind(EVT_GLTOOLBAR_DEL_PLATE, &priv::on_action_del_plate, this); view3D_canvas->Bind(EVT_GLTOOLBAR_ORIENT, [this](SimpleEvent&) { - // BBS arrange from EVT set default state. + //BBS arrange from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_DEFAULT); - this->q->orient(); - }); + this->q->orient(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_ARRANGE, [this](SimpleEvent&) { - // BBS arrange from EVT set default state. + //BBS arrange from EVT set default state. this->q->set_prepare_state(Job::PREPARE_STATE_DEFAULT); this->q->arrange(); - }); + }); view3D_canvas->Bind(EVT_GLTOOLBAR_CUT, [q](SimpleEvent&) { q->cut_selection_to_clipboard(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_COPY, [q](SimpleEvent&) { q->copy_selection_to_clipboard(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_PASTE, [q](SimpleEvent&) { q->paste_from_clipboard(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_LAYERSEDITING, &priv::on_action_layersediting, this); - // BBS: add clone + //BBS: add clone view3D_canvas->Bind(EVT_GLTOOLBAR_CLONE, [q](SimpleEvent&) { q->clone_selection(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_MORE, [q](SimpleEvent&) { q->increase_instances(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_FEWER, [q](SimpleEvent&) { q->decrease_instances(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_OBJECTS, &priv::on_action_split_objects, this); view3D_canvas->Bind(EVT_GLTOOLBAR_SPLIT_VOLUMES, &priv::on_action_split_volumes, this); - // BBS: GUI refactor: GLToolbar + //BBS: GUI refactor: GLToolbar view3D_canvas->Bind(EVT_GLTOOLBAR_OPEN_PROJECT, &priv::on_action_open_project, this); - // view3D_canvas->Bind(EVT_GLTOOLBAR_SLICE_PLATE, &priv::on_action_slice_plate, this); - // view3D_canvas->Bind(EVT_GLTOOLBAR_SLICE_ALL, &priv::on_action_slice_all, this); - // view3D_canvas->Bind(EVT_GLTOOLBAR_PRINT_PLATE, &priv::on_action_print_plate, this); - // view3D_canvas->Bind(EVT_GLTOOLBAR_PRINT_ALL, &priv::on_action_print_all, this); - // view3D_canvas->Bind(EVT_GLTOOLBAR_EXPORT_GCODE, &priv::on_action_export_gcode, this); + //view3D_canvas->Bind(EVT_GLTOOLBAR_SLICE_PLATE, &priv::on_action_slice_plate, this); + //view3D_canvas->Bind(EVT_GLTOOLBAR_SLICE_ALL, &priv::on_action_slice_all, this); + //view3D_canvas->Bind(EVT_GLTOOLBAR_PRINT_PLATE, &priv::on_action_print_plate, this); + //view3D_canvas->Bind(EVT_GLTOOLBAR_PRINT_ALL, &priv::on_action_print_all, this); + //view3D_canvas->Bind(EVT_GLTOOLBAR_EXPORT_GCODE, &priv::on_action_export_gcode, this); view3D_canvas->Bind(EVT_GLVIEWTOOLBAR_ASSEMBLE, [q](SimpleEvent&) { q->select_view_3D("Assemble"); }); - // preview also send these events - // preview_canvas->Bind(EVT_GLTOOLBAR_SLICE_PLATE, &priv::on_action_slice_plate, this); - // preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_PLATE, &priv::on_action_print_plate, this); - // preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_ALL, &priv::on_action_print_all, this); - // review_canvas->Bind(EVT_GLTOOLBAR_EXPORT_GCODE, &priv::on_action_export_gcode, this); + //preview also send these events + //preview_canvas->Bind(EVT_GLTOOLBAR_SLICE_PLATE, &priv::on_action_slice_plate, this); + //preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_PLATE, &priv::on_action_print_plate, this); + //preview_canvas->Bind(EVT_GLTOOLBAR_PRINT_ALL, &priv::on_action_print_all, this); + //review_canvas->Bind(EVT_GLTOOLBAR_EXPORT_GCODE, &priv::on_action_export_gcode, this); view3D_canvas->Bind(EVT_GLCANVAS_SWITCH_TO_OBJECT, [main_frame](SimpleEvent&) { - if (main_frame->m_param_panel) { - main_frame->m_param_panel->switch_to_object(false); - } - }); + if (main_frame->m_param_panel) { + main_frame->m_param_panel->switch_to_object(false); + } + }); view3D_canvas->Bind(EVT_GLCANVAS_SWITCH_TO_GLOBAL, [main_frame](SimpleEvent&) { - if (main_frame->m_param_panel) { - main_frame->m_param_panel->switch_to_global(); - } - }); + if (main_frame->m_param_panel) { + main_frame->m_param_panel->switch_to_global(); + } + }); } view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); // Preview events: preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); - preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE, [this](SimpleEvent&) { preview->get_canvas3d()->set_as_dirty(); }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE, [this](SimpleEvent &) { + preview->get_canvas3d()->set_as_dirty(); + }); if (wxGetApp().is_editor()) { preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); }); - preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, - [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); }); preview->get_wxglcanvas()->Bind(EVT_CUSTOMEVT_TICKSCHANGED, [this](wxCommandEvent& event) { - Type tick_event_type = (Type) event.GetInt(); - Model& model = wxGetApp().plater()->model(); - // BBS: replace model custom gcode with current plate custom gcode - model.plates_custom_gcodes[model.curr_plate_index] = - preview->get_canvas3d()->get_gcode_viewer().get_layers_slider()->GetTicksValues(); + Type tick_event_type = (Type)event.GetInt(); + Model& model = wxGetApp().plater()->model(); + //BBS: replace model custom gcode with current plate custom gcode + model.plates_custom_gcodes[model.curr_plate_index] = preview->get_canvas3d()->get_gcode_viewer().get_layers_slider()->GetTicksValues(); // BBS set to invalid state only - if (tick_event_type == Type::ToolChange || tick_event_type == Type::Custom || tick_event_type == Type::Template || - tick_event_type == Type::PausePrint) { - PartPlate* plate = this->q->get_partplate_list().get_curr_plate(); + if (tick_event_type == Type::ToolChange || tick_event_type == Type::Custom || tick_event_type == Type::Template || tick_event_type == Type::PausePrint) { + PartPlate *plate = this->q->get_partplate_list().get_curr_plate(); if (plate) { plate->update_slice_result_valid_state(false); } @@ -7745,7 +7681,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) if (wxGetApp().is_gcode_viewer()) preview->Bind(EVT_GLCANVAS_RELOAD_FROM_DISK, [this](SimpleEvent&) { this->q->reload_gcode_from_disk(); }); - // BBS + //BBS wxGLCanvas* assemble_canvas = assemble_view->get_wxglcanvas(); if (wxGetApp().is_editor()) { assemble_canvas->Bind(EVT_GLTOOLBAR_FILLCOLOR, [q](IntEvent& evt) { q->fill_color(evt.get_data()); }); @@ -7763,7 +7699,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) q->Bind(EVT_EXPORT_BEGAN, &priv::on_export_began, this); q->Bind(EVT_EXPORT_FINISHED, &priv::on_export_finished, this); q->Bind(EVT_GLVIEWTOOLBAR_3D, [q](SimpleEvent&) { q->select_view_3D("3D"); }); - // BBS: set on_slice to false + //BBS: set on_slice to false q->Bind(EVT_GLVIEWTOOLBAR_PREVIEW, [q](SimpleEvent&) { q->select_view_3D("Preview", false); }); q->Bind(EVT_GLTOOLBAR_SLICE_PLATE, &priv::on_action_slice_plate, this); q->Bind(EVT_GLTOOLBAR_SLICE_ALL, &priv::on_action_slice_all, this); @@ -7784,14 +7720,14 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) q->Bind(EVT_PRINT_FINISHED, [q](wxCommandEvent& evt) { q->print_job_finished(evt); }); q->Bind(EVT_SEND_CALIBRATION_FINISHED, [q](wxCommandEvent& evt) { q->send_calibration_job_finished(evt); }); q->Bind(EVT_SEND_FINISHED, [q](wxCommandEvent& evt) { q->send_job_finished(evt); }); - q->Bind(EVT_PUBLISH_FINISHED, [q](wxCommandEvent& evt) { q->publish_job_finished(evt); }); - q->Bind(EVT_OPEN_PLATESETTINGSDIALOG, [q](wxCommandEvent& evt) { q->open_platesettings_dialog(evt); }); - q->Bind(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG, [q](wxCommandEvent& evt) { q->open_filament_map_setting_dialog(evt); }); - // q->Bind(EVT_GLVIEWTOOLBAR_ASSEMBLE, [q](SimpleEvent&) { q->select_view_3D("Assemble"); }); + q->Bind(EVT_PUBLISH_FINISHED, [q](wxCommandEvent& evt) { q->publish_job_finished(evt);}); + q->Bind(EVT_OPEN_PLATESETTINGSDIALOG, [q](wxCommandEvent& evt) { q->open_platesettings_dialog(evt);}); + q->Bind(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG, [q](wxCommandEvent &evt) { q->open_filament_map_setting_dialog(evt); }); + //q->Bind(EVT_GLVIEWTOOLBAR_ASSEMBLE, [q](SimpleEvent&) { q->select_view_3D("Assemble"); }); } // Drop target: - q->SetDropTarget(new PlaterDropTarget(*main_frame, *q)); // if my understanding is right, wxWindow takes the owenership + q->SetDropTarget(new PlaterDropTarget(*main_frame, *q)); // if my understanding is right, wxWindow takes the owenership q->Layout(); apply_color_mode(); @@ -7817,41 +7753,43 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) // Register an USB HID (Human Interface Device) attach event. evt contains Win32 path to the USB device containing VID, PID and other info. // This event wakes up the Mouse3DController's background thread to enumerate HID devices, if the VID of the callback event // is one of the 3D Mouse vendors (3DConnexion or Logitech). - this->q->Bind(EVT_HID_DEVICE_ATTACHED, [this](HIDDeviceAttachedEvent& evt) { mouse3d_controller.device_attached(evt.data); }); - this->q->Bind(EVT_HID_DEVICE_DETACHED, [this](HIDDeviceAttachedEvent& evt) { mouse3d_controller.device_detached(evt.data); }); + this->q->Bind(EVT_HID_DEVICE_ATTACHED, [this](HIDDeviceAttachedEvent &evt) { + mouse3d_controller.device_attached(evt.data); + }); + this->q->Bind(EVT_HID_DEVICE_DETACHED, [this](HIDDeviceAttachedEvent& evt) { + mouse3d_controller.device_detached(evt.data); + }); #endif /* _WIN32 */ - // notification_manager = new NotificationManager(this->q); + //notification_manager = new NotificationManager(this->q); if (wxGetApp().is_editor()) { this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); - this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, - [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); + this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); this->q->Bind(EVT_PRINTER_CONFIG_UPDATE_AVAILABLE_CLICKED, [](PrinterConfigUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->do_printer_config_update(); - wxGetApp().getDeviceManager()->reload_printer_settings(); - }); + wxGetApp().getDeviceManager()->reload_printer_settings(); }); /* BBS do not handle removeable driver event */ - this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent& evt) { + this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) { if (evt.data.second) { // BBS - // this->show_action_buttons(this->ready_to_slice); + //this->show_action_buttons(this->ready_to_slice); notification_manager->close_notification_of_type(NotificationType::ExportFinished); - notification_manager->push_notification( - NotificationType::CustomNotification, NotificationManager::NotificationLevel::RegularNotificationLevel, - format(_L("Successfully unmounted. The device %s (%s) can now be safely removed from the computer."), - evt.data.first.name, evt.data.first.path)); + notification_manager->push_notification(NotificationType::CustomNotification, + NotificationManager::NotificationLevel::RegularNotificationLevel, + format(_L("Successfully unmounted. The device %s (%s) can now be safely removed from the computer."), evt.data.first.name, evt.data.first.path) + ); } else { notification_manager->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::ErrorNotificationLevel, - format(_L("Ejecting of device %s (%s) has failed."), evt.data.first.name, - evt.data.first.path)); + format(_L("Ejecting of device %s (%s) has failed."), evt.data.first.name, evt.data.first.path) + ); } }); - this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this](RemovableDrivesChangedEvent&) { + this->q->Bind(EVT_REMOVABLE_DRIVES_CHANGED, [this](RemovableDrivesChangedEvent &) { // BBS - // this->show_action_buttons(this->ready_to_slice); + //this->show_action_buttons(this->ready_to_slice); // Close notification ExportingFinished but only if last export was to removable notification_manager->device_ejected(); }); @@ -7865,12 +7803,12 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) } // Initialize the Undo / Redo stack with a first snapshot. - // this->take_snapshot("New Project", UndoRedo::SnapshotType::ProjectSeparator); + //this->take_snapshot("New Project", UndoRedo::SnapshotType::ProjectSeparator); // Reset the "dirty project" flag. m_undo_redo_stack_main.mark_current_as_saved(); dirty_state.update_from_undo_redo_stack(false); - // this->take_snapshot("New Project"); - // BBS: save project confirm + //this->take_snapshot("New Project"); + // BBS: save project confirm up_to_date(true, false); up_to_date(true, true); model.set_need_backup(); @@ -7882,9 +7820,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) std::string last_backup = last; std::string originfile; if (Slic3r::has_restore_data(last_backup, originfile)) { - auto result = MessageDialog(this->q, _L("Previously unsaved items have been detected. Do you want to restore them\?"), - wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Restore"), wxYES_NO | wxYES_DEFAULT | wxCENTRE) - .ShowModal(); + auto result = MessageDialog(this->q, _L("Previously unsaved items have been detected. Do you want to restore them\?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Restore"), wxYES_NO | wxYES_DEFAULT | wxCENTRE).ShowModal(); if (result == wxID_YES) { this->q->load_project(from_path(last_backup), from_path(originfile)); Slic3r::backup_soon(); @@ -7898,13 +7834,13 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) } catch (...) {} - + if (this->q->get_project_filename().IsEmpty() && this->q->is_empty_project()) { int skip_confirm = e.GetInt(); this->q->new_project(skip_confirm, true); } }); - // wxPostEvent(this->q, wxCommandEvent{EVT_RESTORE_PROJECT}); + //wxPostEvent(this->q, wxCommandEvent{EVT_RESTORE_PROJECT}); } this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) { @@ -7917,7 +7853,7 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) wxGetApp().mainframe->Raise(); this->q->load_files(input_files); }); - + this->q->Bind(EVT_START_DOWNLOAD_OTHER_INSTANCE, [](StartDownloadOtherInstanceEvent& evt) { BOOST_LOG_TRIVIAL(trace) << "Received url from other instance event."; wxGetApp().mainframe->Show(); @@ -7925,12 +7861,15 @@ Plater::priv::priv(Plater* q, MainFrame* main_frame) for (size_t i = 0; i < evt.data.size(); ++i) { wxGetApp().start_download(evt.data[i]); } + + }); + this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) { + bring_instance_forward(); }); - this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent&) { bring_instance_forward(); }); wxGetApp().other_instance_message_handler()->init(this->q); // collapse sidebar according to saved value - // if (wxGetApp().is_editor()) { + //if (wxGetApp().is_editor()) { // bool is_collapsed = wxGetApp().app_config->get("collapsed_sidebar") == "1"; // sidebar->collapse(is_collapsed); //} @@ -7955,18 +7894,16 @@ void Plater::priv::update(unsigned int flags) model.center_instances_around_point(this->bed.build_volume().bed_center()); #endif - unsigned int update_status = 0; - const bool force_background_processing_restart = this->printer_technology == ptSLA || - (flags & (unsigned int) UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE); + unsigned int update_status = 0; + const bool force_background_processing_restart = this->printer_technology == ptSLA || (flags & (unsigned int)UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE); if (force_background_processing_restart) // Update the SLAPrint from the current Model, so that the reload_scene() // pulls the correct data. - update_status = this->update_background_process(false, flags & (unsigned int) UpdateParams::POSTPONE_VALIDATION_ERROR_MESSAGE); - // BBS TODO reload_scene - this->view3D->reload_scene(false, flags & (unsigned int) UpdateParams::FORCE_FULL_SCREEN_REFRESH); - if (is_preview_shown()) - this->preview->reload_print(); - // BBS assemble view + update_status = this->update_background_process(false, flags & (unsigned int)UpdateParams::POSTPONE_VALIDATION_ERROR_MESSAGE); + //BBS TODO reload_scene + this->view3D->reload_scene(false, flags & (unsigned int)UpdateParams::FORCE_FULL_SCREEN_REFRESH); + if (is_preview_shown()) this->preview->reload_print(); + //BBS assemble view this->assemble_view->reload_scene(false, flags); // todo: better to mark thumbnail dirty here @@ -7992,23 +7929,25 @@ void Plater::priv::select_view(const std::string& direction) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << "select view3D"; view3D->select_view(direction); wxGetApp().update_ui_from_settings(); - } else if (current_panel == preview) { + } + else if (current_panel == preview) { BOOST_LOG_TRIVIAL(info) << "select preview"; preview->select_view(direction); wxGetApp().update_ui_from_settings(); - } else if (current_panel == assemble_view) { + } + else if (current_panel == assemble_view) { BOOST_LOG_TRIVIAL(info) << "select assemble view"; assemble_view->select_view(direction); } } -const VendorProfile::PrinterModel* Plater::get_curr_printer_model() +const VendorProfile::PrinterModel *Plater::get_curr_printer_model() { auto bundle = wxGetApp().preset_bundle; if (bundle) { - const Preset* curr = &bundle->printers.get_selected_preset(); + const Preset *curr = &bundle->printers.get_selected_preset(); if (curr) { - const VendorProfile::PrinterModel* pm = PresetUtils::system_printer_model(*curr); + const VendorProfile::PrinterModel *pm = PresetUtils::system_printer_model(*curr); if (!pm) { auto curr_parent = bundle->printers.get_selected_preset_parent(); if (curr_parent) { @@ -8048,9 +7987,9 @@ std::map Plater::get_bed_texture_maps() bool Plater::get_enable_wrapping_detection() { - const DynamicPrintConfig& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - const ConfigOptionBool* wrapping_detection = print_config.option("enable_wrapping_detection"); - return (wrapping_detection != nullptr) && wrapping_detection->value; + const DynamicPrintConfig & print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const ConfigOptionBool * wrapping_detection = print_config.option("enable_wrapping_detection"); + return (wrapping_detection != nullptr) && wrapping_detection->value; } wxColour Plater::get_next_color_for_filament() @@ -8059,9 +7998,22 @@ wxColour Plater::get_next_color_for_filament() // refs to https://www.ebaomonthly.com/window/photo/lesson/colorList.htm wxColour colors[FILAMENT_SYSTEM_COLORS_NUM] = { // ORCA updated all color palette - wxColour("#00C1AE"), wxColour("#F4E2C1"), wxColour("#ED1C24"), wxColour("#00FF7F"), wxColour("#F26722"), wxColour("#FFEB31"), - wxColour("#7841CE"), wxColour("#115877"), wxColour("#ED1E79"), wxColour("#2EBDEF"), wxColour("#345B2F"), wxColour("#800080"), - wxColour("#FA8173"), wxColour("#800000"), wxColour("#F7B763"), wxColour("#A4C41E"), + wxColour("#00C1AE"), + wxColour("#F4E2C1"), + wxColour("#ED1C24"), + wxColour("#00FF7F"), + wxColour("#F26722"), + wxColour("#FFEB31"), + wxColour("#7841CE"), + wxColour("#115877"), + wxColour("#ED1E79"), + wxColour("#2EBDEF"), + wxColour("#345B2F"), + wxColour("#800080"), + wxColour("#FA8173"), + wxColour("#800000"), + wxColour("#F7B763"), + wxColour("#A4C41E"), }; return colors[curr_color_filamenet++ % FILAMENT_SYSTEM_COLORS_NUM]; } @@ -8069,25 +8021,22 @@ wxColour Plater::get_next_color_for_filament() wxString Plater::get_slice_warning_string(GCodeProcessorResult::SliceWarning& warning) { if (warning.msg == BED_TEMP_TOO_HIGH_THAN_FILAMENT) { - return _L("The current heatbed temperature is relatively high. The nozzle may clog when printing this filament in a closed " - "environment. Please open the front door and/or remove the upper glass."); + return _L("The current heatbed temperature is relatively high. The nozzle may clog when printing this filament in a closed environment. Please open the front door and/or remove the upper glass."); } else if (warning.msg == NOZZLE_HRC_CHECKER) { - return _L("The nozzle hardness required by the filament is higher than the default nozzle hardness of the printer. Please replace " - "the hardened nozzle or filament, otherwise, the nozzle will be worn down or damaged."); + return _L("The nozzle hardness required by the filament is higher than the default nozzle hardness of the printer. Please replace the hardened nozzle or filament, otherwise, the nozzle will be worn down or damaged."); } else if (warning.msg == NOT_SUPPORT_TRADITIONAL_TIMELAPSE) { - return _L( - "Enabling traditional timelapse photography may cause surface imperfections. It is recommended to change to smooth mode."); + return _L("Enabling traditional timelapse photography may cause surface imperfections. It is recommended to change to smooth mode."); } else if (warning.msg == NOT_GENERATE_TIMELAPSE) { return wxString(); } else if (warning.msg == SMOOTH_TIMELAPSE_WITHOUT_PRIME_TOWER) { - return _L("Smooth mode for timelapse is enabled, but the prime tower is off, which may cause print defects. Please enable the " - "prime tower, re-slice and print again."); - } else { + return _L("Smooth mode for timelapse is enabled, but the prime tower is off, which may cause print defects. Please enable the prime tower, re-slice and print again."); + } + else { return wxString(warning.msg); } } -void Plater::priv::apply_free_camera_correction(bool apply /* = true*/) +void Plater::priv::apply_free_camera_correction(bool apply/* = true*/) { bool use_perspective_camera = get_config("use_perspective_camera").compare("true") == 0; if (use_perspective_camera) @@ -8098,7 +8047,7 @@ void Plater::priv::apply_free_camera_correction(bool apply /* = true*/) camera.recover_from_free_camera(); } -// BBS: add no slice option +//BBS: add no slice option void Plater::priv::select_view_3D(const std::string& name, bool no_slice) { if (name == "3D") { @@ -8107,23 +8056,25 @@ void Plater::priv::select_view_3D(const std::string& name, bool no_slice) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("goto preview page when loading gcode/exported_3mf"); } set_current_panel(view3D, no_slice); - } else if (name == "Preview") { + } + else if (name == "Preview") { BOOST_LOG_TRIVIAL(info) << "select preview"; - // BBS update extruder params and speed table before slicing + //BBS update extruder params and speed table before slicing const Slic3r::DynamicPrintConfig& config = wxGetApp().preset_bundle->full_config(); - auto& print = q->get_partplate_list().get_current_fff_print(); - auto print_config = print.config(); - int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); + auto& print = q->get_partplate_list().get_current_fff_print(); + auto print_config = print.config(); + int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); Model::setExtruderParams(config, numExtruders); Model::setPrintSpeedTable(config, print_config); set_current_panel(preview, no_slice); - } else if (name == "Assemble") { + } + else if (name == "Assemble") { BOOST_LOG_TRIVIAL(info) << "select assemble view"; set_current_panel(assemble_view, no_slice); } - // BBS update selection + //BBS update selection wxGetApp().obj_list()->update_selections(); selection_changed(); @@ -8132,12 +8083,13 @@ void Plater::priv::select_view_3D(const std::string& name, bool no_slice) void Plater::priv::select_next_view_3D() { + if (current_panel == view3D) wxGetApp().mainframe->select_tab(TAB_ID_PREVIEW); else if (current_panel == preview) wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - // else if (current_panel == assemble_view) - // set_current_panel(view3D); +// else if (current_panel == assemble_view) +// set_current_panel(view3D); } void Plater::priv::enable_sidebar(bool enabled) @@ -8157,7 +8109,9 @@ void Plater::priv::collapse_sidebar(bool collapse) sidebar_layout.is_collapsed = collapse; // Now update the tooltip in the toolbar. - std::string new_tooltip = collapse ? _u8L("Expand sidebar") : _u8L("Collapse sidebar"); + std::string new_tooltip = collapse + ? _u8L("Expand sidebar") + : _u8L("Collapse sidebar"); new_tooltip += " [" + _u8L("Shift+") + _u8L("Tab") + "]"; int id = collapse_toolbar.get_item_id("collapse_sidebar"); collapse_toolbar.set_tooltip(id, new_tooltip); @@ -8165,13 +8119,12 @@ void Plater::priv::collapse_sidebar(bool collapse) update_sidebar(); } -void Plater::priv::update_sidebar(bool force_update) -{ +void Plater::priv::update_sidebar(bool force_update) { auto& sidebar = m_aui_mgr.GetPane(this->sidebar); if (!sidebar.IsOk() || this->current_panel == nullptr) { return; } - bool needs_update = force_update; + bool needs_update = force_update; if (!sidebar_layout.is_enabled) { if (sidebar.IsShown()) { @@ -8201,21 +8154,23 @@ void Plater::priv::reset_window_layout() update_sidebar(true); } -Sidebar::DockingState Plater::priv::get_sidebar_docking_state() -{ +Sidebar::DockingState Plater::priv::get_sidebar_docking_state() { if (!sidebar_layout.is_enabled) { return Sidebar::None; } const auto& sidebar = m_aui_mgr.GetPane(this->sidebar); - if (sidebar.IsFloating()) { + if(sidebar.IsFloating()) { return Sidebar::None; } return sidebar.dock_direction == wxAUI_DOCK_RIGHT ? Sidebar::Right : Sidebar::Left; } -void Plater::priv::reset_all_gizmos() { view3D->get_canvas3d()->reset_all_gizmos(); } +void Plater::priv::reset_all_gizmos() +{ + view3D->get_canvas3d()->reset_all_gizmos(); +} // Called after the Preferences dialog is closed and the program settings are saved. // Update the UI based on the current preferences. @@ -8230,9 +8185,15 @@ void Plater::priv::update_ui_from_settings() } // BBS -std::shared_ptr Plater::priv::statusbar() { return nullptr; } +std::shared_ptr Plater::priv::statusbar() +{ + return nullptr; +} -std::string Plater::priv::get_config(const std::string& key) const { return wxGetApp().app_config->get(key); } +std::string Plater::priv::get_config(const std::string &key) const +{ + return wxGetApp().app_config->get(key); +} BoundingBoxf Plater::priv::bed_shape_bb() const { @@ -8242,14 +8203,14 @@ BoundingBoxf Plater::priv::bed_shape_bb() const BoundingBox Plater::priv::scaled_bed_shape_bb() const { - const auto* bed_shape_opt = config->opt("printable_area"); + const auto *bed_shape_opt = config->opt("printable_area"); const auto printable_area = Slic3r::Polygon::new_scale(bed_shape_opt->values); return printable_area.bounding_box(); } -void read_binary_stl(const std::string& filename, std::string& model_id, std::string& code) -{ - std::ifstream file(encode_path(filename.c_str()), std::ios::binary); + +void read_binary_stl(const std::string& filename, std::string& model_id, std::string& code) { + std::ifstream file( encode_path(filename.c_str()), std::ios::binary); if (!file) { return; } @@ -8268,7 +8229,7 @@ void read_binary_stl(const std::string& filename, std::string& model_id, std::st return; } - char magic[2] = {data[0], data[1]}; + char magic[2] = { data[0], data[1] }; if (magic[0] != 'M' || magic[1] != 'W') { file.close(); return; @@ -8279,9 +8240,9 @@ void read_binary_stl(const std::string& filename, std::string& model_id, std::st return; } - char protocol_version[3] = {data[3], data[4], data[5]}; + char protocol_version[3] = { data[3], data[4], data[5] }; - // version + //version if (protocol_version[0] != '1' || protocol_version[1] != '.' || protocol_version[2] != '0') { file.close(); return; @@ -8296,16 +8257,18 @@ void read_binary_stl(const std::string& filename, std::string& model_id, std::st tokens.push_back(tokenPtr); } - // model id + //model id if (tokens.size() < 4) { file.close(); return; } model_id = tokens[2]; - code = tokens[3]; + code = tokens[3]; file.close(); - } catch (...) {} + } + catch (...) { + } return; } @@ -8316,25 +8279,26 @@ std::vector Plater::priv::load_files(const std::vector& input_ bool* published_out) { std::vector empty_result; - bool dlg_cont = true; + bool dlg_cont = true; bool is_user_cancel = false; - bool translate_old = false; + bool translate_old = false; int current_width = 0, current_depth = 0, current_height = 0, project_filament_count = 1; if (input_files.empty()) return std::vector(); if (!input_files.empty()) - q->m_3mf_path = input_files[0].string(); - + q->m_3mf_path = input_files[0].string(); + // SoftFever: ugly fix so we can exist pa calib mode background_process.fff_print()->calib_mode() = CalibMode::Calib_None; + // BBS int filaments_cnt = config->opt("filament_colour")->values.size(); - bool one_by_one = input_files.size() == 1 || printer_technology == ptSLA /* || filaments_cnt <= 1*/; - if (!one_by_one) { - for (const auto& path : input_files) { + bool one_by_one = input_files.size() == 1 || printer_technology == ptSLA/* || filaments_cnt <= 1*/; + if (! one_by_one) { + for (const auto &path : input_files) { if (std::regex_match(path.string(), pattern_bundle)) { one_by_one = true; break; @@ -8342,74 +8306,75 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - bool load_model = strategy & LoadStrategy::LoadModel; - bool load_config = strategy & LoadStrategy::LoadConfig; + bool load_model = strategy & LoadStrategy::LoadModel; + bool load_config = strategy & LoadStrategy::LoadConfig; bool imperial_units = strategy & LoadStrategy::ImperialUnits; - bool silence = strategy & LoadStrategy::Silence; + bool silence = strategy & LoadStrategy::Silence; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": load_model %1%, load_config %2%, input_files size %3%") % load_model % load_config % - input_files.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": load_model %1%, load_config %2%, input_files size %3%")%load_model %load_config %input_files.size(); const auto loading = _L("Loading") + dots; ProgressDialog dlg(loading, "", 100, find_toplevel_parent(q), wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_APP_MODAL); wxBusyCursor busy; - auto* new_model = (!load_model || one_by_one) ? nullptr : new Slic3r::Model(); + auto *new_model = (!load_model || one_by_one) ? nullptr : new Slic3r::Model(); std::vector obj_idxs; - std::string designer_model_id; - std::string designer_country_code; + std::string designer_model_id; + std::string designer_country_code; - int answer_convert_from_meters = wxOK_DEFAULT; - int answer_convert_from_imperial_units = wxOK_DEFAULT; - int tolal_model_count = 0; + int answer_convert_from_meters = wxOK_DEFAULT; + int answer_convert_from_imperial_units = wxOK_DEFAULT; + int tolal_model_count = 0; - int progress_percent = 0; - int total_files = input_files.size(); - const int stage_percent[IMPORT_STAGE_MAX + 1] = {5, // IMPORT_STAGE_RESTORE - 10, // IMPORT_STAGE_OPEN - 30, // IMPORT_STAGE_READ_FILES - 50, // IMPORT_STAGE_EXTRACT - 60, // IMPORT_STAGE_LOADING_OBJECTS - 70, // IMPORT_STAGE_LOADING_PLATES - 80, // IMPORT_STAGE_FINISH - 85, // IMPORT_STAGE_ADD_INSTANCE - 90, // IMPORT_STAGE_UPDATE_GCODE - 92, // IMPORT_STAGE_CHECK_MODE_GCODE - 95, // UPDATE_GCODE_RESULT - 98, // IMPORT_LOAD_CONFIG - 99, // IMPORT_LOAD_MODEL_OBJECTS - 100}; - const int step_percent[LOAD_STEP_STAGE_NUM + 1] = {5, // LOAD_STEP_STAGE_READ_FILE - 30, // LOAD_STEP_STAGE_GET_SOLID - 60, // LOAD_STEP_STAGE_GET_MESH - 100}; + int progress_percent = 0; + int total_files = input_files.size(); + const int stage_percent[IMPORT_STAGE_MAX+1] = { + 5, // IMPORT_STAGE_RESTORE + 10, // IMPORT_STAGE_OPEN + 30, // IMPORT_STAGE_READ_FILES + 50, // IMPORT_STAGE_EXTRACT + 60, // IMPORT_STAGE_LOADING_OBJECTS + 70, // IMPORT_STAGE_LOADING_PLATES + 80, // IMPORT_STAGE_FINISH + 85, // IMPORT_STAGE_ADD_INSTANCE + 90, // IMPORT_STAGE_UPDATE_GCODE + 92, // IMPORT_STAGE_CHECK_MODE_GCODE + 95, // UPDATE_GCODE_RESULT + 98, // IMPORT_LOAD_CONFIG + 99, // IMPORT_LOAD_MODEL_OBJECTS + 100 + }; + const int step_percent[LOAD_STEP_STAGE_NUM+1] = { + 5, // LOAD_STEP_STAGE_READ_FILE + 30, // LOAD_STEP_STAGE_GET_SOLID + 60, // LOAD_STEP_STAGE_GET_MESH + 100 + }; - const float INPUT_FILES_RATIO = 0.7; - const float INIT_MODEL_RATIO = 0.75; - const float CENTER_AROUND_ORIGIN_RATIO = 0.8; - const float LOAD_MODEL_RATIO = 0.9; + const float INPUT_FILES_RATIO = 0.7; + const float INIT_MODEL_RATIO = 0.75; + const float CENTER_AROUND_ORIGIN_RATIO = 0.8; + + const float LOAD_MODEL_RATIO = 0.9; for (size_t i = 0; i < input_files.size(); ++i) { #ifdef _WIN32 auto path = input_files[i]; - // On Windows, we swap slashes to back slashes, see GH #6803 as read_from_file() does not understand slashes on Windows thus it - // assignes full path to names of loaded objects. + // On Windows, we swap slashes to back slashes, see GH #6803 as read_from_file() does not understand slashes on Windows thus it assignes full path to names of loaded objects. path.make_preferred(); #else // _WIN32 // Don't make a copy on Posix. Slash is a path separator, back slashes are not accepted as a substitute. - const auto& path = input_files[i]; + const auto &path = input_files[i]; #endif // _WIN32 - const auto filename = path.filename(); - int progress_percent = static_cast(100.0f * static_cast(i) / static_cast(input_files.size())); - const auto real_filename = (strategy & LoadStrategy::Restore) ? input_files[++i].filename() : filename; - const auto dlg_info = _L("Loading file") + ": " + from_path(real_filename); + const auto filename = path.filename(); + int progress_percent = static_cast(100.0f * static_cast(i) / static_cast(input_files.size())); + const auto real_filename = (strategy & LoadStrategy::Restore) ? input_files[++i].filename() : filename; + const auto dlg_info = _L("Loading file") + ": " + from_path(real_filename); BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": load file %1%") % filename; dlg_cont = dlg.Update(progress_percent, dlg_info); - if (!dlg_cont) - return empty_result; + if (!dlg_cont) return empty_result; const bool type_3mf = std::regex_match(path.string(), pattern_3mf); // const bool type_zip_amf = !type_3mf && std::regex_match(path.string(), pattern_zip_amf); @@ -8423,15 +8388,14 @@ std::vector Plater::priv::load_files(const std::vector& input_ load_aux = true; strategy = strategy | LoadStrategy::LoadAuxiliary; } - if (load_config) - strategy = strategy | LoadStrategy::CheckVersion; + if (load_config) strategy = strategy | LoadStrategy::CheckVersion; bool is_project_file = false; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": is_project_file %1%, type_3mf %2%") % is_project_file % type_3mf; try { if (type_3mf) { DynamicPrintConfig config; - Semver file_version; - En3mfType en_3mf_file_type = En3mfType::From_BBS; + Semver file_version; + En3mfType en_3mf_file_type = En3mfType::From_BBS; // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; // on load keep the user's current presets and overlay only those keys. Declared // here (outside the config block below) so it stays alive for the embedded-preset @@ -8441,9 +8405,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ DynamicPrintConfig config_loaded; // BBS: add part plate related logic - PlateDataPtrs plate_data; + PlateDataPtrs plate_data; ConfigSubstitutionContext config_substitutions{ForwardCompatibilitySubstitutionRule::Enable}; - std::vector project_presets; + std::vector project_presets; // BBS: backup & restore q->skip_thumbnail_invalid = true; model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, en_3mf_file_type, strategy, &plate_data, &project_presets, @@ -8460,12 +8424,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (cancel) is_user_cancel = cancel; }); - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << ":" << __LINE__ - << boost::format(", plate_data.size %1%, project_preset.size %2%, is_bbs_or_orca_3mf %3%, file_version %4% \n") % - plate_data.size() % project_presets.size() % - (en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) % - file_version.to_string(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ + << boost::format(", plate_data.size %1%, project_preset.size %2%, is_bbs_or_orca_3mf %3%, file_version %4% \n") % plate_data.size() % + project_presets.size() % (en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) % file_version.to_string(); // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; // on load keep the user's current presets and overlay only those keys. Parsed @@ -8572,24 +8533,20 @@ std::vector Plater::priv::load_files(const std::vector& input_ // 2. add extruder for BBS or Other model if only import geometry if (en_3mf_file_type == En3mfType::From_Prusa || (load_model && !load_config)) { std::set extruderIds; - for (ModelObject* o : model.objects) { - if (o->config.option("extruder")) - extruderIds.insert(o->config.extruder()); + for (ModelObject *o : model.objects) { + if (o->config.option("extruder")) extruderIds.insert(o->config.extruder()); for (auto volume : o->volumes) { - if (volume->config.option("extruder")) - extruderIds.insert(volume->config.extruder()); - for (int extruder : volume->get_extruders()) { - extruderIds.insert(extruder); - } + if (volume->config.option("extruder")) extruderIds.insert(volume->config.extruder()); + for (int extruder : volume->get_extruders()) { extruderIds.insert(extruder); } } } int size = extruderIds.size() == 0 ? 0 : *(extruderIds.rbegin()); int filament_size = sidebar->combos_filament().size(); while (filament_size < MAXIMUM_EXTRUDER_NUMBER && filament_size < size) { - int filament_count = filament_size + 1; - wxColour new_col = Plater::get_next_color_for_filament(); - std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + int filament_count = filament_size + 1; + wxColour new_col = Plater::get_next_color_for_filament(); + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); wxGetApp().preset_bundle->set_num_filaments(filament_count, new_color); wxGetApp().plater()->on_filament_count_change(filament_count); ++filament_size; @@ -8602,22 +8559,21 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (import_project_action.empty()) load_type = LoadType::Unknown; else - load_type = static_cast(std::stoi(import_project_action)); + load_type = static_cast(std::stoi(import_project_action)); // BBS: version check - Semver app_version = *(Semver::parse(SoftFever_VERSION)); - const wxString load_3mf_title = _L("Load 3MF"); - const wxString newer_3mf_title = _L("Newer 3MF version"); - const wxString bambu_project_title = _L("BambuStudio Project"); - const wxString msg_unsupported_geometry = _L("The 3MF is not supported by OrcaSlicer, loading geometry data only."); - const wxString msg_old_orca_geometry = _L( - "The 3MF file was generated by an old OrcaSlicer version, loading geometry data only."); - const wxString msg_older_geometry = _L("The 3MF file was generated by an older version, loading geometry data only."); - const wxString msg_bambu_geometry = _L("The 3MF file was generated by BambuStudio, loading geometry data only."); - auto log_and_show_3mf_info = [&](const wxString& text, const wxString& title) { - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << ":" << __LINE__ << " " - << boost::format("3MF import message [%1%]: %2% | file: %3%") % into_u8(title) % into_u8(text) % path.string(); + Semver app_version = *(Semver::parse(SoftFever_VERSION)); + const wxString load_3mf_title = _L("Load 3MF"); + const wxString newer_3mf_title = _L("Newer 3MF version"); + const wxString bambu_project_title = _L("BambuStudio Project"); + const wxString msg_unsupported_geometry = _L("The 3MF is not supported by OrcaSlicer, loading geometry data only."); + const wxString msg_old_orca_geometry = _L("The 3MF file was generated by an old OrcaSlicer version, loading geometry data only."); + const wxString msg_older_geometry = _L("The 3MF file was generated by an older version, loading geometry data only."); + const wxString msg_bambu_geometry = _L("The 3MF file was generated by BambuStudio, loading geometry data only."); + auto log_and_show_3mf_info = [&](const wxString& text, const wxString& title) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ + << " " + << boost::format("3MF import message [%1%]: %2% | file: %3%") % into_u8(title) % into_u8(text) % path.string(); show_info(q, text, title); }; if (en_3mf_file_type == En3mfType::From_Prusa) { @@ -8625,7 +8581,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ load_config = false; if (load_type != LoadType::LoadGeometry) log_and_show_3mf_info(msg_unsupported_geometry, load_3mf_title); - } else if (en_3mf_file_type == En3mfType::From_Orca) { + } + else if (en_3mf_file_type == En3mfType::From_Orca) { // OrcaSlicer file (has OrcaSlicer tag) - compare file_version with SoftFever_VERSION // Migration fix for OrcaSlicer 2.3.1-alpha sparse infill rotation template if (load_config && (file_version < app_version) && file_version == Semver("2.3.1-alpha")) { @@ -8640,8 +8597,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ L("This project was created with an OrcaSlicer 2.3.1-alpha and uses " "infill rotation template settings that may not work properly with your current infill pattern. " "This could result in weak support or print quality issues.")); - msg_text += "\n\n" + _(L("Would you like OrcaSlicer to automatically fix this by clearing the rotation " - "template settings?")); + msg_text += "\n\n" + + _(L("Would you like OrcaSlicer to automatically fix this by clearing the rotation template settings?")); MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO); dialog.SetButtonLabel(wxID_YES, _L("Yes")); dialog.SetButtonLabel(wxID_NO, _L("No")); @@ -8652,30 +8609,31 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } else if (load_config && (file_version > app_version)) { if (config_substitutions.unrecogized_keys.size() > 0) { - wxString text = wxString::Format( - _L("The 3MF file version %s is newer than %s's version %s, found the following unrecognized keys:"), - file_version.to_string_sf(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string_sf()); + wxString text = wxString::Format(_L("The 3MF file version %s is newer than %s's version %s, found the following unrecognized keys:"), + file_version.to_string_sf(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string_sf()); text += "\n"; wxString context = text; - wxString append = _L("You should update your software.\n"); + wxString append = _L("You should update your software.\n"); context += "\n\n"; context += append; log_and_show_3mf_info(context, newer_3mf_title); - } else { - // if the minor version is not matched + } + else { + //if the minor version is not matched if (file_version.min() != app_version.min()) { - wxString text = wxString::Format( - _L("The 3MF file version %s is newer than %s's version %s, we suggest to upgrade your software."), - file_version.to_string_sf(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string_sf()); + wxString text = wxString::Format(_L("The 3MF file version %s is newer than %s's version %s, we suggest to upgrade your software."), + file_version.to_string_sf(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string_sf()); text += "\n"; log_and_show_3mf_info(text, newer_3mf_title); } } - } else if (load_config && config_loaded.empty()) { + } + else if (load_config && config_loaded.empty()) { load_config = false; log_and_show_3mf_info(msg_old_orca_geometry, load_3mf_title); } - } else if (en_3mf_file_type == En3mfType::From_BBS) { + } + else if (en_3mf_file_type == En3mfType::From_BBS) { // No OrcaSlicer tag - check Bambu/Application version Semver orca_tag_start_version(2, 3, 2); if (file_version <= orca_tag_start_version) { @@ -8690,12 +8648,12 @@ std::vector Plater::priv::load_files(const std::vector& input_ _sparse_infill_pattern == ipZigZag || _sparse_infill_pattern == ipCrossZag || _sparse_infill_pattern == ipLockedZag; if (!is_safe_to_rotate) { - wxString msg_text = _(L("This project was created with an OrcaSlicer 2.3.1-alpha and uses " - "infill rotation template settings that may not work properly with your " - "current infill pattern. " - "This could result in weak support or print quality issues.")); - msg_text += "\n\n" + _(L("Would you like OrcaSlicer to automatically fix this by clearing the " - "rotation template settings?")); + wxString msg_text = _( + L("This project was created with an OrcaSlicer 2.3.1-alpha and uses " + "infill rotation template settings that may not work properly with your current infill pattern. " + "This could result in weak support or print quality issues.")); + msg_text += "\n\n" + + _(L("Would you like OrcaSlicer to automatically fix this by clearing the rotation template settings?")); MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO); dialog.SetButtonLabel(wxID_YES, _L("Yes")); dialog.SetButtonLabel(wxID_NO, _L("No")); @@ -8704,7 +8662,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } } - } else if (load_config && config_loaded.empty()) { + } + else if (load_config && config_loaded.empty()) { load_config = false; log_and_show_3mf_info(msg_older_geometry, load_3mf_title); } @@ -8715,23 +8674,21 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (load_config && config_loaded.empty()) { load_config = false; log_and_show_3mf_info(msg_bambu_geometry, load_3mf_title); - } else if (load_config && (file_version > slic3r_version)) { + } + else if (load_config && (file_version > slic3r_version)) { // BambuStudio file version is newer than our compatible SLIC3R_VERSION if (config_substitutions.unrecogized_keys.size() > 0) { - wxString text = wxString::Format(_L("The 3MF was created by BambuStudio (version %s), which is newer " - "than the compatible version %s. Found unrecognized settings:"), + wxString text = wxString::Format(_L("The 3MF was created by BambuStudio (version %s), which is newer than the compatible version %s. Found unrecognized settings:"), file_version.to_string(), slic3r_version.to_string()); text += "\n"; wxString context = text; - wxString append = _L("You should update your software.\n"); + wxString append = _L("You should update your software.\n"); context += "\n\n"; context += append; log_and_show_3mf_info(context, bambu_project_title); } else { - wxString text = - wxString::Format(_L("The 3MF was created by BambuStudio (version %s), which is newer than the " - "compatible version %s. Some settings may not be fully compatible."), - file_version.to_string(), slic3r_version.to_string()); + wxString text = wxString::Format(_L("The 3MF was created by BambuStudio (version %s), which is newer than the compatible version %s. Some settings may not be fully compatible."), + file_version.to_string(), slic3r_version.to_string()); text += "\n"; log_and_show_3mf_info(text, bambu_project_title); } @@ -8741,46 +8698,41 @@ std::vector Plater::priv::load_files(const std::vector& input_ log_and_show_3mf_info(text, bambu_project_title); } } - } else if (en_3mf_file_type == En3mfType::From_Other) { + } + else if (en_3mf_file_type == En3mfType::From_Other) { // Generic CAD/other 3MF without slicer metadata: import geometry silently. if (load_config && config_loaded.empty()) { - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << ":" << __LINE__ << " " - << boost::format("3MF has no slicer metadata/project config, importing geometry only: %1%") % path.string(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ + << " " + << boost::format("3MF has no slicer metadata/project config, importing geometry only: %1%") % path.string(); load_config = false; } - } else if (load_config && config_loaded.empty()) { + } + else if (load_config && config_loaded.empty()) { load_config = false; log_and_show_3mf_info(msg_old_orca_geometry, load_3mf_title); - } else if (!load_config) { + } + else if (!load_config) { // reset config except color - for (ModelObject* model_object : model.objects) { + for (ModelObject *model_object : model.objects) { bool has_extruder = model_object->config.has("extruder"); - int extruder_id = -1; + int extruder_id = -1; // save the extruder information before reset - if (has_extruder) { - extruder_id = model_object->config.extruder(); - } + if (has_extruder) { extruder_id = model_object->config.extruder(); } model_object->config.reset(); // restore the extruder after reset - if (has_extruder) { - model_object->config.set("extruder", extruder_id); - } + if (has_extruder) { model_object->config.set("extruder", extruder_id); } // Is there any modifier or advanced config data? - for (ModelVolume* model_volume : model_object->volumes) { + for (ModelVolume *model_volume : model_object->volumes) { has_extruder = model_volume->config.has("extruder"); - if (has_extruder) { - extruder_id = model_volume->config.extruder(); - } + if (has_extruder) { extruder_id = model_volume->config.extruder(); } model_volume->config.reset(); - if (has_extruder) { - model_volume->config.set("extruder", extruder_id); - } + if (has_extruder) { model_volume->config.set("extruder", extruder_id); } } } } @@ -8800,17 +8752,15 @@ std::vector Plater::priv::load_files(const std::vector& input_ } Semver old_version(1, 5, 9); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && - (file_version < old_version) && load_model && load_config && !config_loaded.empty()) { + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && (file_version < old_version) && load_model && load_config && !config_loaded.empty()) { translate_old = true; partplate_list.get_plate_size(current_width, current_depth, current_height); } if (load_config) { if (translate_old) { - // set the size back - partplate_list.reset_size(current_width + Bed3D::Axes::DefaultTipRadius, - current_depth + Bed3D::Axes::DefaultTipRadius, current_height, false); + //set the size back + partplate_list.reset_size(current_width + Bed3D::Axes::DefaultTipRadius, current_depth + Bed3D::Axes::DefaultTipRadius, current_height, false); } project_filament_count = config_loaded.option("filament_colour")->size(); partplate_list.load_from_3mf_structure(plate_data, project_filament_count); @@ -8830,16 +8780,12 @@ std::vector Plater::priv::load_files(const std::vector& input_ if ((project_presets.size() > 0) && load_config && !published_config.published) { // load project embedded presets PresetsConfigSubstitutions preset_substitutions; - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - preset_substitutions = preset_bundle.load_project_embedded_presets(project_presets, - ForwardCompatibilitySubstitutionRule::Enable); - if (!preset_substitutions.empty()) - show_substitutions_info(preset_substitutions); + PresetBundle & preset_bundle = *wxGetApp().preset_bundle; + preset_substitutions = preset_bundle.load_project_embedded_presets(project_presets, ForwardCompatibilitySubstitutionRule::Enable); + if (!preset_substitutions.empty()) show_substitutions_info(preset_substitutions); } if (project_presets.size() > 0) { - for (unsigned int i = 0; i < project_presets.size(); i++) { - delete project_presets[i]; - } + for (unsigned int i = 0; i < project_presets.size(); i++) { delete project_presets[i]; } project_presets.clear(); } @@ -8855,37 +8801,35 @@ std::vector Plater::priv::load_files(const std::vector& input_ // Based on the printer technology field found in the loaded config, select the base for the config, PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); - config.apply(static_cast(FullPrintConfig::defaults())); + config.apply(static_cast(FullPrintConfig::defaults())); // and place the loaded config over the base. config += std::move(config_loaded); std::map validity = config.validate(); if (!validity.empty()) { - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("Param values in 3mf error: "); - for (std::map::iterator it = validity.begin(); it != validity.end(); ++it) - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("%1%: %2%") % it->first % it->second; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("Param values in 3mf error: "); + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << " " << boost::format("%1%: %2%")%it->first %it->second; // - NotificationManager* notify_manager = q->get_notification_manager(); - std::string error_message = _u8L("Invalid values found in the 3MF:"); + NotificationManager *notify_manager = q->get_notification_manager(); + std::string error_message = _u8L("Invalid values found in the 3MF:"); error_message += "\n"; - for (std::map::iterator it = validity.begin(); it != validity.end(); ++it) + for (std::map::iterator it=validity.begin(); it!=validity.end(); ++it) error_message += "-" + it->first + ": " + it->second + "\n"; error_message += "\n"; error_message += _u8L("Please correct them in the Param tabs"); notify_manager->bbl_show_3mf_warn_notification(error_message); } } - if (!config_substitutions.empty()) - show_substitutions_info(config_substitutions.substitutions, filename.string()); + if (!config_substitutions.empty()) show_substitutions_info(config_substitutions.substitutions, filename.string()); // BBS if (load_model && !load_config) { ; - } else { + } + else { this->model.plates_custom_gcodes = model.plates_custom_gcodes; - this->model.design_info = model.design_info; - this->model.model_info = model.model_info; + this->model.design_info = model.design_info; + this->model.model_info = model.model_info; } } @@ -8905,60 +8849,52 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (load_config) { if (!config.empty()) { Preset::normalize(config); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; { // BBS: modify the prime tower params for old version file Semver old_version3(2, 0, 0); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && - file_version < old_version3) { + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && file_version < old_version3) { double old_filament_prime_volume = 0.; - int filament_count = 0; + int filament_count = 0; { - ConfigOptionFloats* filament_prime_volume_option = config.option( - "filament_prime_volume"); - ConfigOptionStrings* filament_colors_option = config.option("filament_colour", - true); - filament_count = filament_colors_option->values.size(); + ConfigOptionFloats *filament_prime_volume_option = config.option("filament_prime_volume"); + ConfigOptionStrings *filament_colors_option = config.option("filament_colour", true); + filament_count = filament_colors_option->values.size(); if (filament_prime_volume_option) { - std::vector& filament_prime_volume_values = filament_prime_volume_option->values; + std::vector &filament_prime_volume_values = filament_prime_volume_option->values; if (!filament_prime_volume_values.empty()) { old_filament_prime_volume = filament_prime_volume_values[0]; - if (filament_count > 1) - filament_prime_volume_values.resize(filament_count, old_filament_prime_volume); + if (filament_count > 1) filament_prime_volume_values.resize(filament_count, old_filament_prime_volume); } } } - ConfigOptionEnum* prime_tower_rib_wall_option = - config.option>("wipe_tower_wall_type", true); - prime_tower_rib_wall_option->value = WipeTowerWallType::wtwRectangle; + ConfigOptionEnum *prime_tower_rib_wall_option = config.option>("wipe_tower_wall_type", true); + prime_tower_rib_wall_option->value = WipeTowerWallType::wtwRectangle; - ConfigOptionPercent* prime_tower_infill_gap_option = - config.option("prime_tower_infill_gap", true); - prime_tower_infill_gap_option->value = 100; + ConfigOptionPercent *prime_tower_infill_gap_option = config.option("prime_tower_infill_gap", true); + prime_tower_infill_gap_option->value = 100; - ConfigOptionInts* filament_adhesiveness_category_option = - config.option("filament_adhesiveness_category", true); - std::vector& filament_adhesiveness_category_values = filament_adhesiveness_category_option->values; + ConfigOptionInts *filament_adhesiveness_category_option = config.option("filament_adhesiveness_category", true); + std::vector &filament_adhesiveness_category_values = filament_adhesiveness_category_option->values; filament_adhesiveness_category_values.resize(filament_count); for (int index = 0; index < filament_count; index++) filament_adhesiveness_category_values[index] = 100; - std::vector& diff_settings = - config.option("different_settings_to_system", true)->values; + std::vector &diff_settings = config.option("different_settings_to_system", true)->values; diff_settings.resize(filament_count + 2); std::vector diff_process_keys; - std::string diff_process_settings = diff_settings[0]; + std::string diff_process_settings = diff_settings[0]; Slic3r::unescape_strings_cstyle(diff_process_settings, diff_process_keys); diff_process_keys.emplace_back("wipe_tower_wall_type"); diff_process_keys.emplace_back("prime_tower_infill_gap"); diff_process_settings = Slic3r::escape_strings_cstyle(diff_process_keys); - diff_settings[0] = diff_process_settings; + diff_settings[0] = diff_process_settings; for (int index = 0; index < filament_count; index++) { std::vector diff_filament_keys; - std::string diff_filament_settings = diff_settings[index + 1]; + std::string diff_filament_settings = diff_settings[index + 1]; Slic3r::unescape_strings_cstyle(diff_filament_settings, diff_filament_keys); diff_filament_keys.emplace_back("filament_adhesiveness_category"); diff_filament_settings = Slic3r::escape_strings_cstyle(diff_filament_keys); @@ -8976,51 +8912,38 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (validated == VALIDATE_PRESETS_MODIFIED_GCODES) { std::string warning_message; warning_message += "\n"; - for (std::set::iterator it = modified_gcodes.begin(); it != modified_gcodes.end(); ++it) + for (std::set::iterator it=modified_gcodes.begin(); it!=modified_gcodes.end(); ++it) warning_message += "-" + *it + "\n"; warning_message += "\n"; - // show_info(q, _L("The 3MF has the following modified G-code in filament or printer presets:") + - // warning_message + _L("Please confirm that all modified G-code is safe to prevent any damage to the - // machine!"), _L("Modified G-code")); - MessageDialog - dlg(q, - _L("The 3MF has the following modified G-code in filament or printer presets:") + warning_message + - _L("Please confirm that all modified G-code is safe to prevent any damage to the machine!"), - _L("Modified G-code")); + //show_info(q, _L("The 3MF has the following modified G-code in filament or printer presets:") + warning_message + _L("Please confirm that all modified G-code is safe to prevent any damage to the machine!"), _L("Modified G-code")); + MessageDialog dlg(q, _L("The 3MF has the following modified G-code in filament or printer presets:") + warning_message + _L("Please confirm that all modified G-code is safe to prevent any damage to the machine!"), _L("Modified G-code")); dlg.show_dsa_button(); - auto res = dlg.ShowModal(); + auto res = dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); - } else if ((validated == VALIDATE_PRESETS_PRINTER_NOT_FOUND) || - (validated == VALIDATE_PRESETS_FILAMENTS_NOT_FOUND)) { + } + else if ((validated == VALIDATE_PRESETS_PRINTER_NOT_FOUND) || (validated == VALIDATE_PRESETS_FILAMENTS_NOT_FOUND)) { std::string warning_message; warning_message += "\n"; - for (std::set::iterator it = modified_gcodes.begin(); it != modified_gcodes.end(); ++it) + for (std::set::iterator it=modified_gcodes.begin(); it!=modified_gcodes.end(); ++it) warning_message += "-" + *it + "\n"; warning_message += "\n"; - // show_info(q, _L("The 3MF has the following customized filament or printer presets:") + warning_message + - // _L("Please confirm that the G-code within these presets is safe to prevent any damage to the machine!"), - // _L("Customized Preset")); - MessageDialog dlg(q, - _L("The 3MF has the following customized filament or printer presets:") + - from_u8(warning_message) + - _L("Please confirm that the G-code within these presets is safe to prevent any " - "damage to the machine!"), - _L("Customized Preset")); + //show_info(q, _L("The 3MF has the following customized filament or printer presets:") + warning_message + _L("Please confirm that the G-code within these presets is safe to prevent any damage to the machine!"), _L("Customized Preset")); + MessageDialog dlg(q, _L("The 3MF has the following customized filament or printer presets:") + from_u8(warning_message)+ _L("Please confirm that the G-code within these presets is safe to prevent any damage to the machine!"), _L("Customized Preset")); dlg.show_dsa_button(); - auto res = dlg.ShowModal(); + auto res = dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); } } - // always load config + //always load config { // BBS: save the wipe tower pos in file here, will be used later ConfigOptionFloats* wipe_tower_x_opt = config.opt("wipe_tower_x"); ConfigOptionFloats* wipe_tower_y_opt = config.opt("wipe_tower_y"); - std::optional file_wipe_tower_x; - std::optional file_wipe_tower_y; + std::optionalfile_wipe_tower_x; + std::optionalfile_wipe_tower_y; if (wipe_tower_x_opt) file_wipe_tower_x = *wipe_tower_x_opt; if (wipe_tower_y_opt) @@ -9073,7 +8996,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); if (bed_type_opt != nullptr) { - BedType bed_type = (BedType) bed_type_opt->getInt(); + BedType bed_type = (BedType)bed_type_opt->getInt(); // update app config for bed type bool is_bbl_preset = preset_bundle->is_bbl_vendor(); if (is_bbl_preset) { @@ -9121,10 +9044,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ // // show notification about temporarily installed presets // if (!names.empty()) { - // std::string notif_text = into_u8(_L_PLURAL("The preset below was temporarily installed on the active - // instance of PrusaSlicer", - // "The presets below were temporarily installed on the active - // instance of PrusaSlicer", names.size())) + ":"; + // std::string notif_text = into_u8(_L_PLURAL("The preset below was temporarily installed on the active instance of PrusaSlicer", + // "The presets below were temporarily installed on the active instance of PrusaSlicer", + // names.size())) + ":"; // for (std::string& name : names) // notif_text += "\n - " + name; // notification_manager->push_notification(NotificationType::CustomNotification, @@ -9134,11 +9056,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ // BBS // if (printer_technology == ptFFF) - // CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, - // &preset_bundle->project_config); + // CustomGCode::update_custom_gcode_per_print_z_from_config(model.custom_gcode_per_print_z, &preset_bundle->project_config); - // For exporting from the amf/3mf we shouldn't check printer_presets for the containing information about "Print - // Host upload" BBS: add preset combo box re-active logic currently found only needs re-active here + // For exporting from the amf/3mf we shouldn't check printer_presets for the containing information about "Print Host upload" + // BBS: add preset combo box re-active logic + // currently found only needs re-active here wxGetApp().load_current_presets(false, false); // Update filament colors for the MM-printer profile in the full config // to avoid black (default) colors for Extruders in the ObjectList, @@ -9149,8 +9071,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ DynamicConfig& proj_cfg = preset_bundle->project_config; // do some post process after loading config { - // BBS: rewrite wipe tower pos stored in 3mf file , the code above should be seriously reconsidered - ConfigOptionFloats* wipe_tower_x = proj_cfg.opt("wipe_tower_x"); + //BBS: rewrite wipe tower pos stored in 3mf file , the code above should be seriously reconsidered + ConfigOptionFloats* wipe_tower_x = proj_cfg.opt("wipe_tower_x"); ConfigOptionFloats* wipe_tower_y = proj_cfg.opt("wipe_tower_y"); if (file_wipe_tower_x) *wipe_tower_x = *file_wipe_tower_x; @@ -9178,22 +9100,19 @@ std::vector Plater::priv::load_files(const std::vector& input_ } // Sync filament multi colour - ConfigOptionStrings* filament_multi_color = proj_cfg.opt("filament_multi_colour", - true); + ConfigOptionStrings* filament_multi_color = proj_cfg.opt("filament_multi_colour", true); if (filament_multi_color->size() != filament_count) { filament_multi_color->values.resize(filament_count); } // If there is no multi-color data or color is not match, use single color as default value for (size_t i = 0; i < filament_count; i++) { std::vector colors = Slic3r::split_string(filament_multi_color->values[i], ' '); - if (i >= filament_multi_color->values.size() || colors.empty() || - colors[0] != filament_color->values[i]) { + if (i >= filament_multi_color->values.size() || colors.empty() || colors[0] != filament_color->values[i] ) { filament_multi_color->values[i] = filament_color->values[i]; } } // Sync filament colour type - ConfigOptionStrings* filament_color_type = proj_cfg.opt("filament_colour_type", - true); + ConfigOptionStrings* filament_color_type = proj_cfg.opt("filament_colour_type", true); if (filament_color_type && filament_color_type->size() != filament_count) { filament_color_type->values.resize(filament_count); @@ -9223,33 +9142,29 @@ std::vector Plater::priv::load_files(const std::vector& input_ } // The loaded project supplies nozzle_volume_type; refresh the sidebar // nozzle-count badges against it. - if (auto* nozzle_volumes = wxGetApp().preset_bundle->project_config.option( - "nozzle_volume_type")) { + if (auto *nozzle_volumes = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")) { const int extruder_count = wxGetApp().preset_bundle->get_printer_extruder_count(); - for (int extruder_id = 0; extruder_id < extruder_count && extruder_id < (int) nozzle_volumes->values.size(); - ++extruder_id) - updateNozzleCountDisplay(wxGetApp().preset_bundle, extruder_id, - NozzleVolumeType(nozzle_volumes->values[extruder_id])); + for (int extruder_id = 0; extruder_id < extruder_count && extruder_id < (int) nozzle_volumes->values.size(); ++extruder_id) + updateNozzleCountDisplay(wxGetApp().preset_bundle, extruder_id, NozzleVolumeType(nozzle_volumes->values[extruder_id])); } } } - if (!silence) - wxGetApp().app_config->update_config_dir(path.parent_path().string()); + if (!silence) wxGetApp().app_config->update_config_dir(path.parent_path().string()); } } else { // BBS: add plate data related logic PlateDataPtrs plate_data; // BBS: project embedded settings - std::vector project_presets; - bool is_xxx; - Semver file_version; + std::vector project_presets; + bool is_xxx; + Semver file_version; //ObjImportColorFn obj_color_fun=nullptr; auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path.string(), ".obj")) { return; } const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); + ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); if (color_dlg.ShowModal() != wxID_OK) { in_out.filament_ids.clear(); } @@ -9295,10 +9210,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ is_split = mesh_dlg.get_split_compound_value(); return 1; } - } else { + }else { linear_value = linear; - angle_value = angle; - is_split = split_compound; + angle_value = angle; + is_split = split_compound; return 1; } is_user_cancel = true; @@ -9312,25 +9227,22 @@ std::vector Plater::priv::load_files(const std::vector& input_ designer_model_id = mode_id; designer_country_code = code; - bool cont = true; - float percent_float = (100.0f * (float) i / (float) total_files) + - INPUT_FILES_RATIO * 100.0f * ((float) current / (float) total) / (float) total_files; - BOOST_LOG_TRIVIAL(trace) - << "load_stl_file: percent(float)=" << percent_float << ", curr = " << current << ", total = " << total; - progress_percent = (int) percent_float; - wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); - cont = dlg.Update(progress_percent, msg); - cancel = !cont; - }, - nullptr, 0, obj_color_fun); + bool cont = true; + float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * 100.0f * ((float)current / (float)total) / (float)total_files; + BOOST_LOG_TRIVIAL(trace) << "load_stl_file: percent(float)=" << percent_float << ", curr = " << current << ", total = " << total; + progress_percent = (int)percent_float; + wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); + cont = dlg.Update(progress_percent, msg); + cancel = !cont; + }, + nullptr, 0, obj_color_fun); } if (designer_model_id.empty() && boost::algorithm::iends_with(path.string(), ".stl")) { read_binary_stl(path.string(), designer_model_id, designer_country_code); } - if (type_any_amf && is_xxx) - imperial_units = true; + if (type_any_amf && is_xxx) imperial_units = true; for (auto obj : model.objects) { if (obj->name.empty()) { @@ -9351,31 +9263,26 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (project_presets.size() > 0) { // load project embedded presets PresetsConfigSubstitutions preset_substitutions; - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - preset_substitutions = preset_bundle.load_project_embedded_presets(project_presets, - ForwardCompatibilitySubstitutionRule::Enable); - if (!preset_substitutions.empty()) - show_substitutions_info(preset_substitutions); + PresetBundle & preset_bundle = *wxGetApp().preset_bundle; + preset_substitutions = preset_bundle.load_project_embedded_presets(project_presets, ForwardCompatibilitySubstitutionRule::Enable); + if (!preset_substitutions.empty()) show_substitutions_info(preset_substitutions); - for (unsigned int i = 0; i < project_presets.size(); i++) { - delete project_presets[i]; - } + for (unsigned int i = 0; i < project_presets.size(); i++) { delete project_presets[i]; } project_presets.clear(); } } - } catch (const ConfigurationError& e) { - std::string message = GUI::format(_L("Failed loading file \"%1%\". An invalid configuration was found."), filename.string()) + - "\n\n" + e.what(); + } catch (const ConfigurationError &e) { + std::string message = GUI::format(_L("Failed loading file \"%1%\". An invalid configuration was found."), filename.string()) + "\n\n" + e.what(); GUI::show_error(q, message); continue; - } catch (const std::exception& e) { + } catch (const std::exception &e) { if (!is_user_cancel) GUI::show_error(q, e.what()); continue; } - progress_percent = 100.0f * (float) i / (float) total_files + INIT_MODEL_RATIO * 100.0f / (float) total_files; - dlg_cont = dlg.Update(progress_percent); + progress_percent = 100.0f * (float)i / (float)total_files + INIT_MODEL_RATIO * 100.0f / (float)total_files; + dlg_cont = dlg.Update(progress_percent); if (!dlg_cont) { q->skip_thumbnail_invalid = false; return empty_result; @@ -9383,17 +9290,13 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (load_model) { // The model should now be initialized - auto convert_from_imperial_units = [](Model& model, bool only_small_volumes) { - model.convert_from_imperial_units(only_small_volumes); - }; + auto convert_from_imperial_units = [](Model &model, bool only_small_volumes) { model.convert_from_imperial_units(only_small_volumes); }; // BBS: add load_old_project logic if ((!is_project_file) && (!load_old_project)) { // if (!is_project_file) { if (int deleted_objects = model.removed_objects_with_zero_volume(); deleted_objects > 0) { - MessageDialog(q, _L("Objects with zero volume removed"), _L("The volume of the object is zero"), - wxICON_INFORMATION | wxOK) - .ShowModal(); + MessageDialog(q, _L("Objects with zero volume removed"), _L("The volume of the object is zero"), wxICON_INFORMATION | wxOK).ShowModal(); } if (imperial_units) // Convert even if the object is big. @@ -9404,18 +9307,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); - int answer = dlg.ShowModal(); - if (answer == wxID_YES) - model.convert_from_meters(true); + int answer = dlg.ShowModal(); + if (answer == wxID_YES) model.convert_from_meters(true); } else if (model.looks_like_imperial_units()) { // BBS do not handle look like in meters MessageDialog dlg(q, format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); - int answer = dlg.ShowModal(); - if (answer == wxID_YES) - convert_from_imperial_units(model, true); + int answer = dlg.ShowModal(); + if (answer == wxID_YES) convert_from_imperial_units(model, true); } // else if (model.looks_like_imperial_units()) { // BBS do not handle look like in imperial @@ -9429,8 +9330,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ // "The dimensions of the object from file %s seem to be defined in inches.\n" // "The internal unit of PrusaSlicer is a millimeter. Do you want to recalculate the dimensions of the object?", // "The dimensions of some objects from file %s seem to be defined in inches.\n" - // "The internal unit of PrusaSlicer is a millimeter. Do you want to recalculate the dimensions of these objects?", - // model.objects.size()), from_path(filename)) + // "The internal unit of PrusaSlicer is a millimeter. Do you want to recalculate the dimensions of these objects?", model.objects.size()), from_path(filename)) // + "\n", _L("The object is too small"), wxICON_QUESTION | wxYES_NO); // dlg.ShowCheckBox(_L("Apply to all the remaining small objects being loaded.")); // int answer = dlg.ShowModal(); @@ -9442,12 +9342,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ // convert_model_if(model, answer_convert_from_imperial_units == wxID_YES); } - if (!is_project_file && model.looks_like_multipart_object()) { - MessageDialog msg_dlg(q, - _L("This file contains several objects positioned at multiple heights.\nInstead of considering them " - "as multiple objects, should \nthe file be loaded as a single object with multiple parts\?") + - "\n", - _L("Multi-part object detected"), wxICON_WARNING | wxYES | wxNO); + if (!is_project_file && model.looks_like_multipart_object()) { + MessageDialog msg_dlg(q, _L("This file contains several objects positioned at multiple heights.\nInstead of considering them as multiple objects, should \nthe file be loaded as a single object with multiple parts\?") + "\n", + _L("Multi-part object detected"), wxICON_WARNING | wxYES | wxNO); if (msg_dlg.ShowModal() == wxID_YES) { model.convert_multipart_object(filaments_cnt); } @@ -9464,15 +9361,15 @@ std::vector Plater::priv::load_files(const std::vector& input_ // return obj_idxs; //} - progress_percent = 100.0f * (float) i / (float) total_files + CENTER_AROUND_ORIGIN_RATIO * 100.0f / (float) total_files; - dlg_cont = dlg.Update(progress_percent); + progress_percent = 100.0f * (float)i / (float)total_files + CENTER_AROUND_ORIGIN_RATIO * 100.0f / (float)total_files; + dlg_cont = dlg.Update(progress_percent); if (!dlg_cont) { q->skip_thumbnail_invalid = false; return empty_result; } int model_idx = 0; - for (ModelObject* model_object : model.objects) { + for (ModelObject *model_object : model.objects) { if (!type_3mf && !type_any_amf) model_object->center_around_origin(false); @@ -9492,8 +9389,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ tolal_model_count += model_idx; - progress_percent = 100.0f * (float) i / (float) total_files + LOAD_MODEL_RATIO * 100.0f / (float) total_files; - dlg_cont = dlg.Update(progress_percent); + progress_percent = 100.0f * (float)i / (float)total_files + LOAD_MODEL_RATIO * 100.0f / (float)total_files; + dlg_cont = dlg.Update(progress_percent); if (!dlg_cont) { q->skip_thumbnail_invalid = false; return empty_result; @@ -9518,7 +9415,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ auto cancel_cb = [&dlg, &dlg_cont]() { return !dlg_cont || dlg.WasCancelled(); }; auto progress_cb = [&dlg, &dlg_cont, &progress_percent](int percent) { progress_percent = std::clamp(percent, 0, 100); - dlg_cont = dlg.Update(progress_percent, _L("Matching textures to filaments")); + dlg_cont = dlg.Update(progress_percent, _L("Matching textures to filaments")); return dlg_cont; }; if (!run_textured_mesh_import_dialog(model, texture_import_result, cancel_cb, progress_cb)) { @@ -9526,7 +9423,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ return empty_result; } if (texture_import_result.fallback_to_geometry_only && !texture_import_result.fallback_warning.empty()) { - MessageDialog(q, texture_import_result.fallback_warning, _L("Texture Import Warning"), wxOK | wxICON_WARNING).ShowModal(); + MessageDialog(q, texture_import_result.fallback_warning, + _L("Texture Import Warning"), + wxOK | wxICON_WARNING).ShowModal(); } if (!texture_import_result.painted.face_colors.empty()) { std::vector texture_object_idxs(model.objects.size()); @@ -9535,12 +9434,12 @@ std::vector Plater::priv::load_files(const std::vector& input_ dlg.Update(std::clamp(percent, 0, 100), msg); return true; }; - apply_textured_mesh_import_result(model, texture_object_idxs, texture_import_result, apply_progress_cb, false); + apply_textured_mesh_import_result(model, texture_object_idxs, texture_import_result, + apply_progress_cb, false); } } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ - << boost::format(", before load_model_objects, count %1%") % model.objects.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", before load_model_objects, count %1%")%model.objects.size(); auto loaded_idxs = load_model_objects(model.objects, is_project_file); obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end()); @@ -9553,10 +9452,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } else { // This must be an .stl or .obj file, which may contain a maximum of one volume. - for (const ModelObject* model_object : model.objects) { + for (const ModelObject *model_object : model.objects) { new_model->add_object(*model_object); - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":" << __LINE__ << boost::format(", added object %1%") % model_object->name; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":" << __LINE__ << boost::format(", added object %1%")%model_object->name; wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); dlg_cont = dlg.Update(progress_percent, msg); if (!dlg_cont) { @@ -9568,18 +9467,18 @@ std::vector Plater::priv::load_files(const std::vector& input_ } if (new_model != nullptr && new_model->objects.size() > 1) { - // BBS do not popup this dialog + //BBS do not popup this dialog bool new_model_auto_drop = true; int single_object_answer = false; if (ask_multi) { RichMessageDialog dlg(q, _L("Load these files as a single object with multiple parts?\n"), - _L("An object with multiple parts was detected"), wxICON_QUESTION | wxYES_NO); + _L("An object with multiple parts was detected"), wxICON_QUESTION | wxYES_NO); dlg.ShowCheckBox(_L("Auto-Drop"), true); single_object_answer = dlg.ShowModal(); - if (dlg.IsCheckBoxChecked() == false) + if (dlg.IsCheckBoxChecked() == false) new_model_auto_drop = false; // convert to multipart and split after load_model_objects @@ -9591,9 +9490,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ // TODO // DONE always convert to multipart, split afterwards to retain relative position // DONE if !auto_drop move all objects over the z-position 0, so that none are clipped by the bed. - // DONE retain auto_drop (and printable) state when assembling or splitting objects. - // DONE when manually split to object ask users if looks_like_multipart and none have auto_drob disabled if they want to disable - // auto_drop for all resulting objects. + // DONE retain auto_drop (and printable) state when assembling or splitting objects. + // DONE when manually split to object ask users if looks_like_multipart and none have auto_drob disabled if they want to disable auto_drop for all resulting objects. // - add icon in object list, similar to fuzzy painting, etc. auto loaded_idxs = load_model_objects(new_model->objects, false, false, new_model_auto_drop); @@ -9605,48 +9503,41 @@ std::vector Plater::priv::load_files(const std::vector& input_ } if (load_config) { - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (dev) { - MachineObject* obj = dev->get_selected_machine(); + MachineObject *obj = dev->get_selected_machine(); if (obj && obj->is_info_ready()) { if (obj->GetExtderSystem()->GetTotalExtderCount() > 0) { - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - Preset& printer_preset = preset_bundle->printers.get_selected_preset(); + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + Preset &printer_preset = preset_bundle->printers.get_selected_preset(); - double preset_nozzle_diameter = 0.4; - const ConfigOption* opt = printer_preset.config.option("nozzle_diameter"); - if (opt) - preset_nozzle_diameter = static_cast(opt)->values[0]; + double preset_nozzle_diameter = 0.4; + const ConfigOption *opt = printer_preset.config.option("nozzle_diameter"); + if (opt) preset_nozzle_diameter = static_cast(opt)->values[0]; std::string machine_type = obj->printer_type; - if (obj->is_support_upgrade_kit && obj->installed_upgrade_kit) - machine_type = "C12"; + if (obj->is_support_upgrade_kit && obj->installed_upgrade_kit) machine_type = "C12"; bool nozzle_mismatch = !obj->GetExtderSystem()->NozzleDiameterMatchesOrUnknown(0, (float) preset_nozzle_diameter); if (printer_preset.get_current_printer_type(preset_bundle) != machine_type || nozzle_mismatch) { - Preset* machine_preset = get_printer_preset(obj); + Preset *machine_preset = get_printer_preset(obj); if (machine_preset != nullptr) { std::string printer_model = machine_preset->config.option("printer_model")->value; - bool sync_printer_info = false; + bool sync_printer_info = false; if (!wxGetApp().app_config->has("sync_after_load_file_show_flag")) { - wxString tips = from_u8( - (boost::format(_u8L("Connected printer is %s. It must match the project preset for printing.\n")) % - printer_model) - .str()); + wxString tips = from_u8((boost::format(_u8L("Connected printer is %s. It must match the project preset for printing.\n")) % printer_model).str()); tips += _L("Do you want to sync the printer information and automatically switch the preset?"); TipsDialog dlg(wxGetApp().mainframe, _L("Tips"), tips, "sync_after_load_file_show_flag", wxYES_NO); - if (dlg.ShowModal() == wxID_YES) { - sync_printer_info = true; - } - } else { + if (dlg.ShowModal() == wxID_YES) { sync_printer_info = true; } + } + else { sync_printer_info = wxGetApp().app_config->get("sync_after_load_file_show_flag") == "true"; } if (sync_printer_info) { - Tab* printer_tab = GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER); + Tab *printer_tab = GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER); printer_tab->select_preset(machine_preset->name); - if (obj->is_multi_extruders()) - GUI::wxGetApp().sidebar().sync_extruder_list(); + if (obj->is_multi_extruders()) GUI::wxGetApp().sidebar().sync_extruder_list(); } } } @@ -9655,15 +9546,14 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - if (new_model) - delete new_model; + if (new_model) delete new_model; - // BBS: translate old 3mf to correct positions + //BBS: translate old 3mf to correct positions if (translate_old) { - // translate the objects + //translate the objects int plate_count = partplate_list.get_plate_count(); - for (int index = 1; index < plate_count; index++) { - PartPlate* cur_plate = (PartPlate*) partplate_list.get_plate(index); + for (int index = 1; index < plate_count; index ++) { + PartPlate* cur_plate = (PartPlate *)partplate_list.get_plate(index); Vec3d cur_origin = cur_plate->get_origin(); Vec3d new_origin = partplate_list.compute_origin_using_new_size(index, current_width, current_depth); @@ -9675,46 +9565,50 @@ std::vector Plater::priv::load_files(const std::vector& input_ partplate_list.register_raycasters_for_picking(*view3D->get_canvas3d()); } - // BBS: add gcode loading logic in the end - q->m_exported_file = false; + //BBS: add gcode loading logic in the end + q->m_exported_file = false; q->skip_thumbnail_invalid = false; if (load_model && load_config) { if (model.objects.empty()) { partplate_list.load_gcode_files(); - PartPlate *first_plate = nullptr, *cur_plate = nullptr; + PartPlate * first_plate = nullptr, *cur_plate = nullptr; int plate_cnt = partplate_list.get_plate_count(); int index = 0, first_plate_index = 0; q->m_valid_plates_count = 0; - for (index = 0; index < plate_cnt; index++) { + for (index = 0; index < plate_cnt; index ++) + { cur_plate = partplate_list.get_plate(index); if (!first_plate && cur_plate->is_slice_result_valid()) { - first_plate = cur_plate; + first_plate = cur_plate; first_plate_index = index; } if (cur_plate->is_slice_result_valid()) - q->m_valid_plates_count++; + q->m_valid_plates_count ++; } - if (first_plate && first_plate->is_slice_result_valid()) { + if (first_plate&&first_plate->is_slice_result_valid()) { q->m_exported_file = true; - // select plate 0 as default + //select plate 0 as default q->select_plate(first_plate_index); - // set to 3d tab + //set to 3d tab q->select_view_3D("Preview"); wxGetApp().mainframe->select_tab(TAB_ID_PREVIEW); - } else { - // set to 3d tab + } + else { + //set to 3d tab q->select_view_3D("3D"); - // select plate 0 as default + //select plate 0 as default q->select_plate(0); } - } else { - // set to 3d tab + } + else { + //set to 3d tab q->select_view_3D("3D"); - // select plate 0 as default + //select plate 0 as default q->select_plate(0); } - } else { - // always set to 3D after loading files + } + else { + //always set to 3D after loading files q->select_view_3D("3D"); wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); } @@ -9726,8 +9620,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ view3D->reload_scene(true); view3D->set_as_dirty(); } - if (!silence) - wxGetApp().app_config->update_skein_dir(input_files[input_files.size() - 1].parent_path().make_preferred().string()); + if (!silence) wxGetApp().app_config->update_skein_dir(input_files[input_files.size() - 1].parent_path().make_preferred().string()); // XXX: Plater.pm had @loaded_files, but didn't seem to fill them with the filenames... } @@ -9740,7 +9633,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ Selection& selection = view3D->get_canvas3d()->get_selection(); selection.clear(); for (size_t idx : obj_idxs) { - selection.add_object((unsigned int) idx, false); + selection.add_object((unsigned int)idx, false); } } // BBS: update object list selection @@ -9751,25 +9644,25 @@ std::vector Plater::priv::load_files(const std::vector& input_ view3D->get_canvas3d()->update_gizmos_on_off_state(); } - GLGizmoSimplify::add_simplify_suggestion_notification(obj_idxs, model.objects, *notification_manager); + GLGizmoSimplify::add_simplify_suggestion_notification( + obj_idxs, model.objects, *notification_manager); - // set designer_model_id - q->model().stl_design_id = designer_model_id; + //set designer_model_id + q->model().stl_design_id = designer_model_id; q->model().stl_design_country = designer_country_code; - // if (!designer_model_id.empty() && q->model().stl_design_id.empty() && !designer_country_code.empty()) { - // q->model().stl_design_id = designer_model_id; - // q->model().stl_design_country = designer_country_code; - // } - // else { - // q->model().stl_design_id = ""; - // q->model().stl_design_country = ""; - // } + //if (!designer_model_id.empty() && q->model().stl_design_id.empty() && !designer_country_code.empty()) { + // q->model().stl_design_id = designer_model_id; + // q->model().stl_design_country = designer_country_code; + //} + //else { + // q->model().stl_design_id = ""; + // q->model().stl_design_country = ""; + //} if (tolal_model_count <= 0 && !q->m_exported_file) { dlg.Hide(); if (!is_user_cancel) { - MessageDialog msg(wxGetApp().mainframe, _L("The file does not contain any geometry data."), _L("Warning"), - wxYES | wxICON_WARNING); + MessageDialog msg(wxGetApp().mainframe, _L("The file does not contain any geometry data."), _L("Warning"), wxYES | wxICON_WARNING); if (msg.ShowModal() == wxID_YES) {} } } @@ -9778,12 +9671,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ return obj_idxs; } -#define AUTOPLACEMENT_ON_LOAD + #define AUTOPLACEMENT_ON_LOAD -std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& model_objects, - bool allow_negative_z, - bool split_object, - bool auto_drop) +std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& model_objects, bool allow_negative_z, bool split_object, bool auto_drop) { const Vec3d bed_size = Slic3r::to_3d(this->bed.build_volume().bounding_volume2d().size(), 1.0) - 2.0 * Vec3d::Ones(); @@ -9797,8 +9687,8 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #ifdef AUTOPLACEMENT_ON_LOAD ModelInstancePtrs new_instances; #endif /* AUTOPLACEMENT_ON_LOAD */ - for (ModelObject* model_object : model_objects) { - auto* object = model.add_object(*model_object); + for (ModelObject *model_object : model_objects) { + auto *object = model.add_object(*model_object); object->sort_volumes(true); std::string object_name = object->name.empty() ? fs::path(object->input_file).filename().string() : object->name; obj_idxs.push_back(obj_count++); @@ -9807,30 +9697,29 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #ifdef AUTOPLACEMENT_ON_LOAD object->center_around_origin(); new_instances.emplace_back(object->add_instance()); -#else /* AUTOPLACEMENT_ON_LOAD */ +#else /* AUTOPLACEMENT_ON_LOAD */ // if object has no defined position(s) we need to rearrange everything after loading // need_arrange = true; - // add a default instance and center object around origin - object->center_around_origin(); // also aligns object to Z = 0 + // add a default instance and center object around origin + object->center_around_origin(); // also aligns object to Z = 0 ModelInstance* instance = object->add_instance(); - // BBS calc transformation + //BBS calc transformation Geometry::Transformation t = instance->get_transformation(); instance->set_offset(Slic3r::to_3d(this->bed.build_volume().bed_center(), -object->origin_translation(2))); #endif /* AUTOPLACEMENT_ON_LOAD */ } - - // BBS: when the object is too large, let the user choose whether to scale it down + + //BBS: when the object is too large, let the user choose whether to scale it down for (size_t i = 0; i < object->instances.size(); ++i) { ModelInstance* instance = object->instances[i]; - const Vec3d size = object->instance_bounding_box(i).size(); - const Vec3d ratio = size.cwiseQuotient(bed_size); - const double max_ratio = std::max(ratio(0), ratio(1)); + const Vec3d size = object->instance_bounding_box(i).size(); + const Vec3d ratio = size.cwiseQuotient(bed_size); + const double max_ratio = std::max(ratio(0), ratio(1)); if (max_ratio > 10000) { - MessageDialog - dlg(q, _L("Your object appears to be too large, do you want to scale it down to fit the print bed automatically?"), - _L("Object too large"), wxICON_QUESTION | wxYES); - int answer = dlg.ShowModal(); + MessageDialog dlg(q, _L("Your object appears to be too large, do you want to scale it down to fit the print bed automatically?"), _L("Object too large"), + wxICON_QUESTION | wxYES); + int answer = dlg.ShowModal(); // the size of the object is too big -> this could lead to overflow when moving to clipper coordinates, // so scale down the mesh object->scale_mesh_after_creation(1. / max_ratio); @@ -9838,11 +9727,11 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode object->center_around_origin(); scaled_down = true; break; - } else if (max_ratio > 10) { - MessageDialog - dlg(q, _L("Your object appears to be too large, do you want to scale it down to fit the print bed automatically?"), - _L("Object too large"), wxICON_QUESTION | wxYES_NO); - int answer = dlg.ShowModal(); + } + else if (max_ratio > 10) { + MessageDialog dlg(q, _L("Your object appears to be too large, do you want to scale it down to fit the print bed automatically?"), _L("Object too large"), + wxICON_QUESTION | wxYES_NO); + int answer = dlg.ShowModal(); if (answer == wxID_YES) { instance->set_scaling_factor(instance->get_scaling_factor() / max_ratio); scaled_down = true; @@ -9852,27 +9741,28 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode if (!auto_drop) { for (size_t i = 0; i < object->instances.size(); ++i) { - ModelInstance* instance = object->instances[i]; - instance->auto_drop = auto_drop; + ModelInstance* instance = object->instances[i]; + instance->auto_drop = auto_drop; } // if under the bed, move over the bed double dist_to_bed = std::min(object->min_z(), double(0)); object->translate_instances(Vec3d(0, 0, -dist_to_bed)); - } else { + } + else { object->ensure_on_bed(allow_negative_z); } if (!split_object) { - // BBS initial assemble transformation + //BBS initial assemble transformation for (ModelObject* model_object : model.objects) { - // BBS initialize assemble transformation + //BBS initialize assemble transformation for (int i = 0; i < model_object->instances.size(); i++) { if (!model_object->instances[i]->is_assemble_initialized()) { model_object->instances[i]->set_assemble_transformation(model_object->instances[i]->get_transformation()); } } - } + } } } @@ -9898,7 +9788,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #else // BBS: find an empty cell to put the copied object for (auto& instance : new_instances) { - auto offset = instance->get_offset(); + auto offset = instance->get_offset(); auto start_point = this->bed.build_volume().bounding_volume2d().center(); bool plate_empty = partplate_list.get_curr_plate()->empty(); Vec3d displacement; @@ -9914,22 +9804,23 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #endif /* AUTOPLACEMENT_ON_LOAD */ - // BBS: remove the auto scaled_down logic when load models - // if (scaled_down) { - // GUI::show_info(q, - // _L("Your object appears to be too large, so it was automatically scaled down to fit your print bed."), - // _L("Object too large?")); - // } + //BBS: remove the auto scaled_down logic when load models + //if (scaled_down) { + // GUI::show_info(q, + // _L("Your object appears to be too large, so it was automatically scaled down to fit your print bed."), + // _L("Object too large?")); + //} BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", finished auto placement, before add_objects_to_list"); notification_manager->close_notification_of_type(NotificationType::UpdatedItemsInfo); if (obj_idxs.size() > 1) { - std::vector obj_idxs_1(obj_idxs.begin(), obj_idxs.end() - 1); + std::vector obj_idxs_1 (obj_idxs.begin(), obj_idxs.end() - 1); wxGetApp().obj_list()->add_objects_to_list(obj_idxs_1, false); wxGetApp().obj_list()->add_object_to_list(obj_idxs[obj_idxs.size() - 1]); - } else + } + else wxGetApp().obj_list()->add_objects_to_list(obj_idxs); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", after add_objects_to_list"); @@ -9938,7 +9829,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode // which is updated after a view3D->reload_scene(false, flags & (unsigned int)UpdateParams::FORCE_FULL_SCREEN_REFRESH) call for (const size_t idx : obj_idxs) wxGetApp().obj_list()->update_info_items(idx); - + object_list_changed(); this->schedule_background_process(); @@ -9950,7 +9841,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode void Plater::priv::load_auxiliary_files() { std::string auxiliary_path = encode_path(q->model().get_auxiliary_file_temp_path().c_str()); - // wxGetApp().mainframe->m_project->Reload(auxiliary_path); + //wxGetApp().mainframe->m_project->Reload(auxiliary_path); } fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) @@ -9959,7 +9850,7 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) this->update_print_volume_state(); const Selection& selection = get_selection(); - int obj_idx = selection.get_object_idx(); + int obj_idx = selection.get_object_idx(); fs::path output_file; if (file_type == FT_3MF) @@ -9968,20 +9859,22 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) else if (file_type == FT_STL) { if (obj_idx > 0 && obj_idx < this->model.objects.size() && selection.is_single_full_object()) { output_file = this->model.objects[obj_idx]->get_export_filename(); - } else { + } + else { output_file = into_path(get_project_name()); } } - // bbs name the project using the part name + //bbs name the project using the part name if (output_file.empty()) { if (get_project_name() != _L("Untitled")) { output_file = into_path(get_project_name() + ".3mf"); } } - if (output_file.empty()) { + if (output_file.empty()) + { // first try to get the file name from the current selection - if ((0 <= obj_idx) && (obj_idx < (int) this->model.objects.size())) + if ((0 <= obj_idx) && (obj_idx < (int)this->model.objects.size())) output_file = this->model.objects[obj_idx]->get_export_filename(); if (output_file.empty()) @@ -10003,56 +9896,65 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& { wxString wildcard; switch (file_type) { - case FT_STL: - case FT_DRC: - case FT_AMF: - case FT_3MF: - case FT_GCODE: - case FT_OBJ: wildcard = file_wildcards(file_type); break; - default: wildcard = file_wildcards(FT_MODEL); break; + case FT_STL: + case FT_DRC: + case FT_AMF: + case FT_3MF: + case FT_GCODE: + case FT_OBJ: + wildcard = file_wildcards(file_type); + break; + default: + wildcard = file_wildcards(FT_MODEL); + break; } fs::path output_file = get_export_file_path(file_type); wxString dlg_title; switch (file_type) { - case FT_STL: { - output_file.replace_extension("stl"); - dlg_title = _L("Export STL file:"); - break; - } - case FT_DRC: { - output_file.replace_extension("drc"); - dlg_title = _L("Export Draco file:"); - break; - } - case FT_AMF: { - // XXX: Problem on OS X with double extension? - output_file.replace_extension("zip.amf"); - dlg_title = _L("Export AMF file:"); - break; - } - case FT_3MF: { + case FT_STL: + { + output_file.replace_extension("stl"); + dlg_title = _L("Export STL file:"); + break; + } + case FT_DRC: + { + output_file.replace_extension("drc"); + dlg_title = _L("Export Draco file:"); + break; + } + case FT_AMF: + { + // XXX: Problem on OS X with double extension? + output_file.replace_extension("zip.amf"); + dlg_title = _L("Export AMF file:"); + break; + } + case FT_3MF: + { // A published export is suggested as ".published.3mf" so the role is visible in the // dialog and in the recent-files list. This is only a pre-filled suggestion; the user's // typed filename wins, keeping a plain ".3mf" output fully valid. output_file.replace_extension(published ? "published.3mf" : "3mf"); dlg_title = title.empty() ? _L("Save file as") : title; - break; - } - case FT_OBJ: { - output_file.replace_extension("obj"); - dlg_title = _L("Export OBJ file:"); - break; - } - default: break; + break; + } + case FT_OBJ: + { + output_file.replace_extension("obj"); + dlg_title = _L("Export OBJ file:"); + break; + } + default: break; } std::string out_dir = (boost::filesystem::path(output_file).parent_path()).string(); wxFileDialog dlg(q, dlg_title, - is_shapes_dir(out_dir) ? from_u8(wxGetApp().app_config->get_last_dir()) : from_path(output_file.parent_path()), - from_path(output_file.filename()), wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxPD_APP_MODAL); + is_shapes_dir(out_dir) ? from_u8(wxGetApp().app_config->get_last_dir()) : from_path(output_file.parent_path()), from_path(output_file.filename()), + wildcard, wxFD_SAVE | wxFD_OVERWRITE_PROMPT | wxPD_APP_MODAL); int result = dlg.ShowModal(); if (result == wxID_CANCEL) @@ -10068,8 +9970,9 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& boost::system::error_code ec; if (boost::filesystem::exists(into_u8(out_path), ec)) { auto result = MessageBox(q->GetHandle(), - wxString::Format(_L("The file %s already exists.\nDo you want to replace it\?"), out_path), - _L("Confirm Save As"), MB_YESNO | MB_ICONWARNING); + wxString::Format(_L("The file %s already exists.\nDo you want to replace it\?"), out_path), + _L("Confirm Save As"), + MB_YESNO | MB_ICONWARNING); if (result != IDYES) return wxEmptyString; } @@ -10080,11 +9983,20 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& return out_path; } -const Selection& Plater::priv::get_selection() const { return view3D->get_canvas3d()->get_selection(); } +const Selection& Plater::priv::get_selection() const +{ + return view3D->get_canvas3d()->get_selection(); +} -Selection& Plater::priv::get_selection() { return view3D->get_canvas3d()->get_selection(); } +Selection& Plater::priv::get_selection() +{ + return view3D->get_canvas3d()->get_selection(); +} -Selection& Plater::priv::get_curr_selection() { return get_current_canvas3D()->get_selection(); } +Selection& Plater::priv::get_curr_selection() +{ + return get_current_canvas3D()->get_selection(); +} int Plater::priv::get_selected_object_idx() const { @@ -10095,9 +10007,9 @@ int Plater::priv::get_selected_object_idx() const int Plater::priv::get_selected_volume_idx() const { auto& selection = get_selection(); - int idx = selection.get_object_idx(); + int idx = selection.get_object_idx(); if ((0 > idx) || (idx > 1000)) - return -1; + return-1; const GLVolume* v = selection.get_first_volume(); if (model.objects[idx]->volumes.size() > 1) return v->volume_idx(); @@ -10124,22 +10036,21 @@ void Plater::priv::object_list_changed() { const bool export_in_progress = this->background_process.is_export_scheduled(); // || ! send_gcode_file.empty()); // XXX: is this right? - // const bool model_fits = view3D->get_canvas3d()->check_volumes_outside_state() == ModelInstancePVS_Inside; + //const bool model_fits = view3D->get_canvas3d()->check_volumes_outside_state() == ModelInstancePVS_Inside; ObjectFilamentResults object_results; bool model_fits = view3D->get_canvas3d()->check_volumes_outside_state(&object_results) != ModelInstancePVS_Partly_Outside; - model_fits = model_fits && object_results.filaments.empty(); + model_fits = model_fits && object_results.filaments.empty(); PartPlate* part_plate = partplate_list.get_curr_plate(); // BBS - // sidebar->enable_buttons(!model.objects.empty() && !export_in_progress && model_fits && part_plate->has_printable_instances()); + //sidebar->enable_buttons(!model.objects.empty() && !export_in_progress && model_fits && part_plate->has_printable_instances()); // A mixed filament with deleted or type-mismatched components cannot be resolved at slicing // time, so block the slice buttons the same way MainFrame::get_enable_slice_status() does. bool mixed_broken = sidebar->has_broken_mixed_filament(); - bool can_slice = !model.objects.empty() && !export_in_progress && model_fits && part_plate->has_printable_instances() && !mixed_broken; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": can_slice %1%, model_fits= %2%, export_in_progress %3%, has_printable_instances %4% ") % - can_slice % model_fits % export_in_progress % part_plate->has_printable_instances(); + bool can_slice = !model.objects.empty() && !export_in_progress && model_fits && part_plate->has_printable_instances() + && !mixed_broken; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": can_slice %1%, model_fits= %2%, export_in_progress %3%, has_printable_instances %4% ")%can_slice %model_fits %export_in_progress %part_plate->has_printable_instances(); main_frame->update_slice_print_status(MainFrame::eEventObjectUpdate, can_slice); wxGetApp().params_panel()->notify_object_config_changed(); @@ -10166,9 +10077,15 @@ void Plater::priv::select_all() this->sidebar->obj_list()->update_selections(); } -void Plater::priv::deselect_all() { view3D->deselect_all(); } +void Plater::priv::deselect_all() +{ + view3D->deselect_all(); +} -void Plater::priv::exit_gizmo() { view3D->exit_gizmo(); } +void Plater::priv::exit_gizmo() +{ + view3D->exit_gizmo(); +} void Plater::priv::remove(size_t obj_idx) { @@ -10177,7 +10094,7 @@ void Plater::priv::remove(size_t obj_idx) m_worker.cancel_all(); model.delete_object(obj_idx); - // BBS: notify partplate the instance removed + //BBS: notify partplate the instance removed partplate_list.notify_instance_removed(obj_idx, -1); update(); // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. @@ -10185,15 +10102,15 @@ void Plater::priv::remove(size_t obj_idx) object_list_changed(); } + bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immediately) { // check if object isn't cut // show warning message that "cut consistancy" will not be supported any more - ModelObject* obj = model.objects[obj_idx]; + ModelObject *obj = model.objects[obj_idx]; if (obj->is_cut()) { InfoDialog dialog(q, _L("Delete object which is a part of cut object"), - _L("You are trying to delete an object which is a part of a cut object.\nThis action will break a cut " - "correspondence.\nAfter that, model consistency can\'t be guaranteed."), + _L("You are trying to delete an object which is a part of a cut object.\nThis action will break a cut correspondence.\nAfter that, model consistency can\'t be guaranteed."), false, wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxICON_WARNING); dialog.SetButtonLabel(wxID_YES, _L("Delete")); if (dialog.ShowModal() == wxID_CANCEL) @@ -10210,10 +10127,10 @@ bool Plater::priv::delete_object_from_model(size_t obj_idx, bool refresh_immedia sidebar->obj_list()->invalidate_cut_info_for_object(obj_idx); model.delete_object(obj_idx); - // BBS: notify partplate the instance removed + //BBS: notify partplate the instance removed partplate_list.notify_instance_removed(obj_idx, -1); - // BBS + //BBS if (refresh_immediately) { update(); object_list_changed(); @@ -10239,7 +10156,7 @@ void Plater::priv::delete_all_objects_from_model() // Stop and reset the Print content. background_process.reset(); - // BBS: update partplate + //BBS: update partplate partplate_list.clear(); model.clear_objects(); @@ -10248,7 +10165,7 @@ void Plater::priv::delete_all_objects_from_model() sidebar->obj_list()->delete_all_objects_from_list(); object_list_changed(); - // BBS + //BBS model.calib_pa_pattern.reset(); model.plates_custom_gcodes.clear(); } @@ -10272,16 +10189,16 @@ void Plater::priv::reset(bool apply_presets_change) view3D->get_canvas3d()->reset_all_gizmos(); reset_gcode_toolpaths(); - // BBS: update gcode to current partplate's - // GCodeProcessorResult* current_result = this->background_process.get_current_plate()->get_slice_result(); - // current_result->reset(); - // gcode_result.reset(); + //BBS: update gcode to current partplate's + //GCodeProcessorResult* current_result = this->background_process.get_current_plate()->get_slice_result(); + //current_result->reset(); + //gcode_result.reset(); view3D->get_canvas3d()->reset_sequential_print_clearance(); m_worker.cancel_all(); - // BBS: clear the partplate list's object before object cleared + //BBS: clear the partplate list's object before object cleared partplate_list.reinit(); partplate_list.update_slice_context_to_current_plate(background_process); preview->update_gcode_result(partplate_list.get_current_slice_result()); @@ -10292,7 +10209,7 @@ void Plater::priv::reset(bool apply_presets_change) assemble_view->get_canvas3d()->reset_explosion_ratio(); update(); - // BBS + //BBS if (wxGetApp().is_editor()) { // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. sidebar->obj_list()->delete_all_objects_from_list(); @@ -10302,14 +10219,14 @@ void Plater::priv::reset(bool apply_presets_change) project.reset(); wxGetApp().sidebar().printer_combox()->clear_selected_dev_id(); - // BBS: reset all project embedded presets + //BBS: reset all project embedded presets wxGetApp().preset_bundle->reset_project_embedded_presets(); if (apply_presets_change) wxGetApp().apply_keeped_preset_modifications(); else wxGetApp().load_current_presets(false, false); - // BBS + //BBS model.calib_pa_pattern.reset(); model.plates_custom_gcodes.clear(); @@ -10328,19 +10245,28 @@ void Plater::priv::reset(bool apply_presets_change) } } -void Plater::priv::center_selection() { view3D->center_selected(); } +void Plater::priv::center_selection() +{ + view3D->center_selected(); +} -void Plater::priv::drop_selection() { view3D->drop_selected(); } +void Plater::priv::drop_selection() +{ + view3D->drop_selected(); +} -void Plater::priv::mirror(Axis axis) { view3D->mirror_selection(axis); } +void Plater::priv::mirror(Axis axis) +{ + view3D->mirror_selection(axis); +} -void Plater::find_new_position(const ModelInstancePtrs& instances) +void Plater::find_new_position(const ModelInstancePtrs &instances) { arrangement::ArrangePolygons movable, fixed; arrangement::ArrangeParams arr_params = init_arrange_params(this); - for (const ModelObject* mo : p->model.objects) - for (ModelInstance* inst : mo->instances) { + for (const ModelObject *mo : p->model.objects) + for (ModelInstance *inst : mo->instances) { auto it = std::find(instances.begin(), instances.end(), inst); arrangement::ArrangePolygon arrpoly; inst->get_arrange_polygon(&arrpoly); @@ -10348,7 +10274,7 @@ void Plater::find_new_position(const ModelInstancePtrs& instances) if (it == instances.end()) fixed.emplace_back(std::move(arrpoly)); else { - arrpoly.setter = [it](const arrangement::ArrangePolygon& p) { + arrpoly.setter = [it](const arrangement::ArrangePolygon &p) { if (p.is_arranged() && p.bed_idx == 0) { Vec2d t = p.translation.cast(); (*it)->apply_arrange_result(t, p.rotation); @@ -10363,13 +10289,13 @@ void Plater::find_new_position(const ModelInstancePtrs& instances) arrangement::arrange(movable, fixed, this->build_volume().polygon(), arr_params); - for (auto& m : movable) + for (auto & m : movable) m.apply(); } // split selected object into multiple objects by its volumes void Plater::priv::split_object(bool auto_drop /* = true */) -{ +{ int obj_idx = get_selected_object_idx(); priv::split_object(obj_idx, auto_drop); } @@ -10382,7 +10308,7 @@ void Plater::priv::split_object(int obj_idx, bool auto_drop /* = true */) // we clone model object because split_object() adds the split volumes // into the same model object, thus causing duplicates when we call load_model_objects() - Model new_model = model; + Model new_model = model; ModelObject* current_model_object = new_model.objects[obj_idx]; wxBusyCursor wait; @@ -10391,10 +10317,11 @@ void Plater::priv::split_object(int obj_idx, bool auto_drop /* = true */) if (new_objects.size() == 1) // #ysFIXME use notification Slic3r::GUI::warning_catcher(q, _L("The selected object couldn't be split.")); - else { + else + { // BBS no solid parts removed // If we splited object which is contain some parts/modifiers then all non-solid parts (modifiers) were deleted - // if (current_model_object->volumes.size() > 1 && current_model_object->volumes.size() != new_objects.size()) + //if (current_model_object->volumes.size() > 1 && current_model_object->volumes.size() != new_objects.size()) // notification_manager->push_notification(NotificationType::CustomNotification, // NotificationManager::NotificationLevel::PrintInfoNotificationLevel, // _u8L("All non-solid parts (modifiers) were deleted")); @@ -10403,15 +10330,15 @@ void Plater::priv::split_object(int obj_idx, bool auto_drop /* = true */) auto is_atleast_one_floating = [new_objects]() { for (ModelObject* new_object : new_objects) { - if (new_object->get_instance_min_z(0) >= SINKING_MIN_Z_THRESHOLD) + if (new_object->get_instance_min_z(0) >= SINKING_MIN_Z_THRESHOLD) return true; } return false; }; bool split_auto_drop = auto_drop; if (current_model_object->instances[0]->auto_drop && is_atleast_one_floating()) { - MessageDialog dlg(q, _L("Disable Auto-Drop to preserve Z positioning?\n"), _L("Object with floating parts was detected"), - wxICON_QUESTION | wxYES_NO); + MessageDialog dlg(q, _L("Disable Auto-Drop to preserve Z positioning?\n"), + _L("Object with floating parts was detected"), wxICON_QUESTION | wxYES_NO); if (dlg.ShowModal() == wxID_YES) split_auto_drop = false; @@ -10421,19 +10348,23 @@ void Plater::priv::split_object(int obj_idx, bool auto_drop /* = true */) // load all model objects at once, otherwise the plate would be rearranged after each one // causing original positions not to be kept - // BBS: set split_object to true to avoid re-compute assemble matrix + //BBS: set split_object to true to avoid re-compute assemble matrix std::vector idxs = load_model_objects(new_objects, false, true, split_auto_drop); wxGetApp().plater()->get_view3D_canvas3D()->update_instance_printable_state_for_objects(idxs); // select newly added objects - for (size_t idx : idxs) { - get_selection().add_object((unsigned int) idx, false); + for (size_t idx : idxs) + { + get_selection().add_object((unsigned int)idx, false); } } } -void Plater::priv::split_volume() { wxGetApp().obj_list()->split(); } +void Plater::priv::split_volume() +{ + wxGetApp().obj_list()->split(); +} void Plater::priv::scale_selection_to_fit_print_volume() { @@ -10546,11 +10477,11 @@ int Plater::priv::auto_slice_delay_seconds() const std::vector> Plater::priv::get_extruder_filament_info() { std::vector> filament_infos; - DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return filament_infos; - MachineObject* obj_ = dev->get_selected_machine(); + MachineObject *obj_ = dev->get_selected_machine(); if (obj_ == nullptr) return filament_infos; @@ -10563,97 +10494,90 @@ std::vector> Plater::priv::get_extruder_filament void Plater::priv::update_print_volume_state() { - // BBS: use the plate's bounding box instead of the bed's + //BBS: use the plate's bounding box instead of the bed's PartPlate* pp = partplate_list.get_curr_plate(); - BuildVolume build_volume(pp->get_shape(), this->bed.build_volume().printable_height(), this->bed.build_volume().extruder_areas(), - this->bed.build_volume().extruder_heights()); + BuildVolume build_volume(pp->get_shape(), this->bed.build_volume().printable_height(), this->bed.build_volume().extruder_areas(), this->bed.build_volume().extruder_heights()); this->model.update_print_volume_state(build_volume); } -void Plater::priv::process_validation_warning(StringObjectException const& warning) const +void Plater::priv::process_validation_warning(StringObjectException const &warning) const { if (warning.string.empty()) notification_manager->close_notification_of_type(NotificationType::ValidateWarning); else { std::string text = warning.string; - auto po = dynamic_cast(warning.object); - auto mo = po ? po->model_object() : dynamic_cast(warning.object); - // ORCA: Update process_validation_warning to handle ModelInstance selection and include fallback - auto mi = dynamic_cast(warning.object); + auto po = dynamic_cast(warning.object); + auto mo = po ? po->model_object() : dynamic_cast(warning.object); + //ORCA: Update process_validation_warning to handle ModelInstance selection and include fallback + auto mi = dynamic_cast(warning.object); - auto action_fn = (mo || mi || !warning.opt_key.empty()) ? - [id = mo ? mo->id() : (mi ? mi->id() : 0), parent_id = mi ? mi->get_object()->id() : 0, - is_inst = (mi != nullptr), opt = warning.opt_key](wxEvtHandler*) { - auto& objects = wxGetApp().model().objects; + auto action_fn = (mo || mi || !warning.opt_key.empty()) ? [id = mo ? mo->id() : (mi ? mi->id() : 0), + parent_id = mi ? mi->get_object()->id() : 0, + is_inst = (mi != nullptr), + opt = warning.opt_key](wxEvtHandler *) { + auto & objects = wxGetApp().model().objects; - if (is_inst) { - bool selected = false; - auto iter = std::find_if(objects.begin(), objects.end(), - [parent_id](auto o) { return o->id() == parent_id; }); - if (iter != objects.end()) { - ModelObject* obj = *iter; - int inst_idx = -1; - for (size_t i = 0; i < obj->instances.size(); ++i) { - if (obj->instances[i]->id() == id) { - inst_idx = i; - break; - } - } + if (is_inst) { + bool selected = false; + auto iter = std::find_if(objects.begin(), objects.end(), [parent_id](auto o) { return o->id() == parent_id; }); + if (iter != objects.end()) { + ModelObject* obj = *iter; + int inst_idx = -1; + for(size_t i=0; iinstances.size(); ++i) { + if (obj->instances[i]->id() == id) { + inst_idx = i; + break; + } + } - wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); + wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - if (inst_idx != -1) { - auto* model = wxGetApp().obj_list()->GetModel(); - wxDataViewItem item; - wxDataViewItem objItem = model->GetObjectItem(obj); - if (objItem.IsOk()) { - int vm_obj_idx = model->GetIdByItem(objItem); - if (vm_obj_idx != -1) { - item = model->GetItemByInstanceId(vm_obj_idx, inst_idx); - } - } - if (item.IsOk()) { - wxDataViewItemArray sel_items; - sel_items.Add(item); - wxGetApp().obj_list()->select_items(sel_items); - wxGetApp().obj_list()->update_selections_on_canvas(); - selected = true; - } - } + if (inst_idx != -1) { + auto* model = wxGetApp().obj_list()->GetModel(); + wxDataViewItem item; + wxDataViewItem objItem = model->GetObjectItem(obj); + if (objItem.IsOk()) { + int vm_obj_idx = model->GetIdByItem(objItem); + if (vm_obj_idx != -1) { + item = model->GetItemByInstanceId(vm_obj_idx, inst_idx); + } + } + if (item.IsOk()) { + wxDataViewItemArray sel_items; + sel_items.Add(item); + wxGetApp().obj_list()->select_items(sel_items); + wxGetApp().obj_list()->update_selections_on_canvas(); + selected = true; + } + } - if (!selected) { - wxGetApp().obj_list()->select_items({{obj, nullptr}}); - wxGetApp().obj_list()->update_selections_on_canvas(); - } - } - } else { - auto iter = id.id ? - std::find_if(objects.begin(), objects.end(), [id](auto o) { return o->id() == id; }) : - objects.end(); - if (iter != objects.end()) { - wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - wxGetApp().obj_list()->select_items({{*iter, nullptr}}); - wxGetApp().obj_list()->update_selections_on_canvas(); - } - } - if (!opt.empty()) { - if ((!is_inst && id.id) || (is_inst && parent_id.id)) - wxGetApp().params_panel()->switch_to_object(); - wxGetApp().sidebar().jump_to_option(opt, Preset::TYPE_PRINT, L""); - } - return false; - } : - std::function(); + if (!selected) { + wxGetApp().obj_list()->select_items({ {obj, nullptr} }); + wxGetApp().obj_list()->update_selections_on_canvas(); + } + } + } else { + auto iter = id.id ? std::find_if(objects.begin(), objects.end(), [id](auto o) { return o->id() == id; }) : objects.end(); + if (iter != objects.end()) { + wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); + wxGetApp().obj_list()->select_items({{*iter, nullptr}}); + wxGetApp().obj_list()->update_selections_on_canvas(); + } + } + if (!opt.empty()) { + if ((!is_inst && id.id) || (is_inst && parent_id.id)) + wxGetApp().params_panel()->switch_to_object(); + wxGetApp().sidebar().jump_to_option(opt, Preset::TYPE_PRINT, L""); + } + return false; + } : std::function(); auto hypertext = (mo || mi || !warning.opt_key.empty()) ? _u8L("Jump to") : ""; - if (mo) - hypertext += std::string(" [") + mo->name + "]"; - if (mi) - hypertext += std::string(" [") + mi->get_object()->name + "]"; - if (!warning.opt_key.empty()) - hypertext += std::string(" (") + warning.opt_key + ")"; + if (mo) hypertext += std::string(" [") + mo->name + "]"; + if (mi) hypertext += std::string(" [") + mi->get_object()->name + "]"; + if (!warning.opt_key.empty()) hypertext += std::string(" (") + warning.opt_key + ")"; // BBS disable support enforcer - // if (text == "_SUPPORTS_OFF") { + //if (text == "_SUPPORTS_OFF") { // text = _u8L("An object has custom support enforcers which will not be used " // "because supports are disabled.")+"\n"; // hypertext = _u8L("Enable supports for enforcers only"); @@ -10670,21 +10594,24 @@ void Plater::priv::process_validation_warning(StringObjectException const& warni // }; //} - notification_manager->push_notification(NotificationType::ValidateWarning, - NotificationManager::NotificationLevel::WarningNotificationLevel, - _u8L("WARNING:") + "\n" + text, hypertext, action_fn); + notification_manager->push_notification( + NotificationType::ValidateWarning, + NotificationManager::NotificationLevel::WarningNotificationLevel, + _u8L("WARNING:") + "\n" + text, hypertext, action_fn + ); } } -void Plater::priv::process_validation_warnings(const std::vector& warnings) const +void Plater::priv::process_validation_warnings(const std::vector &warnings) const { // ValidateWarning stacks by text (m_multiple_types), so clear the stale set before re-adding. notification_manager->close_notification_of_type(NotificationType::ValidateWarning); - for (const StringObjectException& warning : warnings) + for (const StringObjectException &warning : warnings) if (!warning.string.empty()) process_validation_warning(warning); } + // Update background processing thread from the current config and Model. // Returns a bitmask of UpdateBackgroundProcessReturnState. unsigned int Plater::priv::update_background_process(bool force_validation, bool postpone_error_messages, bool switch_print) @@ -10698,52 +10625,50 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool // Update the "out of print bed" state of ModelInstances. update_print_volume_state(); // Apply new config to the possibly running background task. - bool was_running = background_process.running(); - // BBS: add the switch print logic before Print::Apply - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format( - ": enter, force_validation=%1% postpone_error_messages=%2%, switch_print=%3%, was_running=%4%") % - force_validation % postpone_error_messages % switch_print % was_running; - if (switch_print) { - // BBS: update the current print to the current plate + bool was_running = background_process.running(); + //BBS: add the switch print logic before Print::Apply + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, force_validation=%1% postpone_error_messages=%2%, switch_print=%3%, was_running=%4%")%force_validation %postpone_error_messages %switch_print %was_running; + if (switch_print) + { + //BBS: update the current print to the current plate this->partplate_list.update_slice_context_to_current_plate(background_process); this->preview->update_gcode_result(partplate_list.get_current_slice_result()); } - background_process.fff_print()->set_check_multi_filaments_compatibility( - wxGetApp().app_config->get("enable_high_low_temp_mixed_printing") == "false"); + background_process.fff_print()->set_check_multi_filaments_compatibility(wxGetApp().app_config->get("enable_high_low_temp_mixed_printing") == "false"); Print::ApplyStatus invalidated; const auto& preset_bundle = wxGetApp().preset_bundle; if (preset_bundle->get_printer_extruder_count() > 1) { - PartPlate* cur_plate = background_process.get_current_plate(); - std::vector f_maps = cur_plate->get_real_filament_maps(preset_bundle->project_config); + PartPlate* cur_plate = background_process.get_current_plate(); + std::vector f_maps = cur_plate->get_real_filament_maps(preset_bundle->project_config); std::vector f_volume_maps = cur_plate->get_filament_volume_maps(); if (f_volume_maps.empty()) { f_volume_maps = preset_bundle->get_default_nozzle_volume_types_for_filaments(f_maps); } invalidated = background_process.apply(this->model, preset_bundle->full_config(false, f_maps, f_volume_maps)); background_process.fff_print()->set_extruder_filament_info(get_extruder_filament_info()); - } else + } + else invalidated = background_process.apply(this->model, preset_bundle->full_config(false)); if ((invalidated == Print::APPLY_STATUS_CHANGED) || (invalidated == Print::APPLY_STATUS_INVALIDATED)) // BBS: add only gcode mode q->set_only_gcode(false); - // BBS: add slicing related logs - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": background process apply result=%1%") % invalidated; + //BBS: add slicing related logs + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": background process apply result=%1%")%invalidated; if (background_process.empty()) view3D->get_canvas3d()->reset_sequential_print_clearance(); if (invalidated == Print::APPLY_STATUS_INVALIDATED) { - // BBS: update current plater's slicer result to invalid + //BBS: update current plater's slicer result to invalid this->background_process.get_current_plate()->update_slice_result_valid_state(false); - // no need, should be done in background_process.apply - // this->background_process.get_current_gcode_result()->reset(); - // Reset preview canvases. If the print has been invalidated, the preview canvases will be cleared. - // Otherwise they will be just refreshed. + //no need, should be done in background_process.apply + //this->background_process.get_current_gcode_result()->reset(); + // Reset preview canvases. If the print has been invalidated, the preview canvases will be cleared. + // Otherwise they will be just refreshed. if (preview != nullptr) { // If the preview is not visible, the following line just invalidates the preview, // but the G-code paths or SLA preview are calculated first once the preview is made visible. @@ -10756,27 +10681,28 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool return_state |= UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE; notification_manager->set_slicing_progress_hidden(); - } else { + } + else { if (preview && preview->get_reload_paint_after_background_process_apply()) { preview->set_reload_paint_after_background_process_apply(false); preview->reload_print(); } } - if ((invalidated != Print::APPLY_STATUS_UNCHANGED || force_validation) && !background_process.empty()) { + if ((invalidated != Print::APPLY_STATUS_UNCHANGED || force_validation) && ! background_process.empty()) { // The delayed error message is no more valid. delayed_error_message.clear(); // The state of the Print changed, and it is non-zero. Let's validate it and give the user feedback on errors. - // BBS: add is_warning logic + //BBS: add is_warning logic std::vector warnings; - // BBS: refine seq-print logic + //BBS: refine seq-print logic Polygons polygons; std::vector> height_polygons; StringObjectException err = background_process.validate(&warnings, &polygons, &height_polygons); // update string by type q->post_process_string_object_exception(err); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": validate err=%1%, warnings=%2%") % err.string % warnings.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": validate err=%1%, warnings=%2%")%err.string%warnings.size(); if (err.string.empty()) { this->partplate_list.get_curr_plate()->update_apply_result_invalid(false); @@ -10793,88 +10719,92 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool view3D->get_canvas3d()->set_as_dirty(); view3D->get_canvas3d()->request_extra_frame(); } - } else { + } + else { this->partplate_list.get_curr_plate()->update_apply_result_invalid(true); // The print is not valid. // Show error as notification. notification_manager->push_validate_error_notification(err); - // also update the warnings + //also update the warnings process_validation_warnings(warnings); return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; if (printer_technology == ptFFF) { const Print* print = background_process.fff_print(); - // Polygons polygons; - // if (print->config().print_sequence == PrintSequence::ByObject) - // Print::sequential_print_clearance_valid(*print, &polygons); + //Polygons polygons; + //if (print->config().print_sequence == PrintSequence::ByObject) + // Print::sequential_print_clearance_valid(*print, &polygons); view3D->get_canvas3d()->set_sequential_print_clearance_visible(true); view3D->get_canvas3d()->set_sequential_print_clearance_render_fill(true); view3D->get_canvas3d()->set_sequential_print_clearance_polygons(polygons, height_polygons); } } - } else if (!this->delayed_error_message.empty()) { + } + else if (! this->delayed_error_message.empty()) { // Reusing the old state. return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; } - // actualizate warnings + //actualizate warnings if (invalidated != Print::APPLY_STATUS_UNCHANGED || background_process.empty()) { if (background_process.empty()) process_validation_warning({}); actualize_slicing_warnings(*this->background_process.current_print()); actualize_object_warnings(*this->background_process.current_print()); - show_warning_dialog = false; + show_warning_dialog = false; process_completed_with_error = -1; } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format( - ", Line %1%: was_running = %2%, running %3%, invalidated=%4%, return_state=%5%, internal_cancel=%6%") % - __LINE__ % was_running % this->background_process.running() % invalidated % return_state % - this->background_process.is_internal_cancelled(); - if (was_running && !this->background_process.running() && (return_state & UPDATE_BACKGROUND_PROCESS_RESTART) == 0) { - if (invalidated != Print::APPLY_STATUS_UNCHANGED || this->background_process.is_internal_cancelled()) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: was_running = %2%, running %3%, invalidated=%4%, return_state=%5%, internal_cancel=%6%") + % __LINE__ % was_running % this->background_process.running() % invalidated % return_state % this->background_process.is_internal_cancelled(); + if (was_running && ! this->background_process.running() && (return_state & UPDATE_BACKGROUND_PROCESS_RESTART) == 0) { + if (invalidated != Print::APPLY_STATUS_UNCHANGED || this->background_process.is_internal_cancelled()) + { // The background processing was killed and it will not be restarted. // Post the "canceled" callback message, so that it will be processed after any possible pending status bar update messages. - SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, SlicingProcessCompletedEvent::Cancelled, nullptr); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" %1%, post an EVT_PROCESS_COMPLETED to main, status %2%") % __LINE__ % evt.status(); + SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, + SlicingProcessCompletedEvent::Cancelled, nullptr); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%, post an EVT_PROCESS_COMPLETED to main, status %2%")%__LINE__ %evt.status(); wxQueueEvent(q, evt.Clone()); } } - if ((return_state & UPDATE_BACKGROUND_PROCESS_INVALID) != 0) { + if ((return_state & UPDATE_BACKGROUND_PROCESS_INVALID) != 0) + { // Validation of the background data failed. - // BBS: add slice&&print status update logic + //BBS: add slice&&print status update logic this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); process_completed_with_error = partplate_list.get_curr_plate_index(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(", Line %1%: set to process_completed_with_error, return_state=%2%") % __LINE__ % - return_state; - } else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: set to process_completed_with_error, return_state=%2%")%__LINE__%return_state; + } + else + { // Background data is valid. - if ((return_state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 || (return_state & UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE) != 0) + if ((return_state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 || + (return_state & UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE) != 0 ) notification_manager->set_slicing_progress_hidden(); - // BBS: add slice&&print status update logic - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(", Line %1%: background data valid, return_state=%2%") % __LINE__ % return_state; + //BBS: add slice&&print status update logic + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: background data valid, return_state=%2%")%__LINE__%return_state; PartPlate* cur_plate = background_process.get_current_plate(); - if (background_process.finished() && cur_plate && cur_plate->is_slice_result_valid()) { - // ready_to_slice = false; + if (background_process.finished() && cur_plate && cur_plate->is_slice_result_valid()) + { + //ready_to_slice = false; this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); - } else if (!background_process.empty() && - !background_process.running()) /* Do not update buttons if background process is running - * This condition is important for SLA mode especially, - * when this function is called several times during calculations - * */ + } + else if (!background_process.empty() && + !background_process.running()) /* Do not update buttons if background process is running + * This condition is important for SLA mode especially, + * when this function is called several times during calculations + * */ { if (cur_plate->can_slice()) { - // ready_to_slice = true; + //ready_to_slice = true; this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, true); process_completed_with_error = -1; - } else { - // ready_to_slice = false; + } + else { + //ready_to_slice = false; this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); process_completed_with_error = partplate_list.get_curr_plate_index(); } @@ -10898,7 +10828,7 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool #endif } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: exit, return_state=%2%") % __LINE__ % return_state; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: exit, return_state=%2%")%__LINE__%return_state; return return_state; } @@ -10907,33 +10837,36 @@ bool Plater::priv::restart_background_process(unsigned int state) { if (!m_worker.is_idle()) { // Avoid a race condition - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: ui jobs running, return false") % __LINE__; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: ui jobs running, return false")%__LINE__; return false; } - if (!this->background_process.empty() && (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) == 0 && - (((state & UPDATE_BACKGROUND_PROCESS_FORCE_RESTART) != 0 && !this->background_process.finished()) || - (state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) != 0 || (state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0)) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: print is valid, try to start it now") % __LINE__; + if ( ! this->background_process.empty() && + (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) == 0 && + ( ((state & UPDATE_BACKGROUND_PROCESS_FORCE_RESTART) != 0 && ! this->background_process.finished()) || + (state & UPDATE_BACKGROUND_PROCESS_FORCE_EXPORT) != 0 || + (state & UPDATE_BACKGROUND_PROCESS_RESTART) != 0 ) ) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: print is valid, try to start it now")%__LINE__; // The print is valid and it can be started. if (this->background_process.start()) { if (!show_warning_dialog) on_slicing_began(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: start successfully") % __LINE__; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: start successfully")%__LINE__; return true; } - } else if (this->background_process.empty()) { + } + else if (this->background_process.empty()) { PartPlate* cur_plate = background_process.get_current_plate(); if (cur_plate->is_slice_result_valid() && ((state & UPDATE_BACKGROUND_PROCESS_FORCE_RESTART) != 0)) { if (this->background_process.start()) { if (!show_warning_dialog) on_slicing_began(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: start successfully") % __LINE__; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: start successfully")%__LINE__; return true; } } } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: not started") % __LINE__; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: not started")%__LINE__; return false; } @@ -10941,7 +10874,7 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova { wxCHECK_RET(!(output_path.empty()), "export_gcode: output_path and upload_job empty"); - BOOST_LOG_TRIVIAL(trace) << boost::format("export_gcode: output_path %1%") % output_path.string(); + BOOST_LOG_TRIVIAL(trace) << boost::format("export_gcode: output_path %1%")%output_path.string(); if (model.objects.empty()) return; @@ -10959,9 +10892,9 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova return; show_warning_dialog = true; - if (!output_path.empty()) { + if (! output_path.empty()) { background_process.schedule_export(output_path.string(), output_path_on_removable_media); - notification_manager->push_delayed_notification(NotificationType::ExportOngoing, []() { return true; }, 1000, 0); + notification_manager->push_delayed_notification(NotificationType::ExportOngoing, []() {return true; }, 1000, 0); } else { BOOST_LOG_TRIVIAL(info) << "output_path is empty"; } @@ -10991,9 +10924,9 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova return; show_warning_dialog = true; - if (!output_path.empty()) { + if (! output_path.empty()) { background_process.schedule_export(output_path.string(), output_path_on_removable_media); - notification_manager->push_delayed_notification(NotificationType::ExportOngoing, []() { return true; }, 1000, 0); + notification_manager->push_delayed_notification(NotificationType::ExportOngoing, []() {return true; }, 1000, 0); } else { background_process.schedule_upload(std::move(upload_job)); } @@ -11005,9 +10938,10 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova unsigned int Plater::priv::update_restart_background_process(bool force_update_scene, bool force_update_preview) { bool switch_print = true; - // BBS: judge whether can switch print or not - if ((partplate_list.get_plate_count() > 1) && !this->background_process.can_switch_print()) { - // can not switch print currently + //BBS: judge whether can switch print or not + if ((partplate_list.get_plate_count() > 1) && !this->background_process.can_switch_print()) + { + //can not switch print currently BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": plate count %1%, can not switch") % partplate_list.get_plate_count(); switch_print = false; } @@ -11028,19 +10962,21 @@ void Plater::priv::update_fff_scene() this->preview->reload_print(); // In case this was MM print, wipe tower bounding box on 3D tab might need redrawing with exact depth: view3D->reload_scene(true); - // BBS: add assemble view related logic + //BBS: add assemble view related logic assemble_view->reload_scene(true); q->mark_plate_toolbar_image_dirty(); } -// BBS: add print project related logic +//BBS: add print project related logic void Plater::priv::update_fff_scene_only_shells(bool only_shells) { - if (this->preview != nullptr) { + if (this->preview != nullptr) + { const Print* current_print = this->background_process.fff_print(); - if (current_print) { - // this->preview->reset_shells(); + if (current_print) + { + //this->preview->reset_shells(); this->preview->load_shells(*current_print); } } @@ -11068,14 +11004,13 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const try { const bool is_step = boost::algorithm::iends_with(path, ".stp") || boost::algorithm::iends_with(path, ".step"); if (is_step) { - auto config = wxGetApp().app_config; - double linear = std::max(0.003, string_to_double_decimal_point(config->get("linear_deflection"))); - double angle = std::max(0.5, string_to_double_decimal_point(config->get("angle_deflection"))); + auto config = wxGetApp().app_config; + double linear = std::max(0.003, string_to_double_decimal_point(config->get("linear_deflection"))); + double angle = std::max(0.5, string_to_double_decimal_point(config->get("angle_deflection"))); bool split_compound = config->get_bool("is_split_compound"); bool is_user_cancel = false; - auto callback = [&is_user_cancel, linear, angle, split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, - bool& is_split) -> int { + auto callback = [&is_user_cancel, linear, angle, split_compound](Slic3r::Step &file, double &linear_value, double &angle_value, bool &is_split) -> int { if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) { StepMeshDialog mesh_dlg(nullptr, file, linear, angle); if (mesh_dlg.ShowModal() == wxID_OK) { @@ -11094,10 +11029,8 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const return -1; }; - new_model = Model::read_from_step(path, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, nullptr, nullptr, callback, - linear, angle, split_compound); - if (is_user_cancel) - return false; + new_model = Model::read_from_step(path, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, nullptr, nullptr, callback, linear, angle, split_compound); + if (is_user_cancel) return false; } else { new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel); } @@ -11105,14 +11038,14 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const model_object->center_around_origin(); model_object->ensure_on_bed(); } - } catch (std::exception&) { + } + catch (std::exception&) { // error while loading return false; } if (new_model.objects.size() > 1 || new_model.objects.front()->volumes.size() > 1) { - MessageDialog dlg(q, _L("Unable to replace with more than one volume"), _L("Error during replacement"), - wxOK | wxOK_DEFAULT | wxICON_WARNING); + MessageDialog dlg(q, _L("Unable to replace with more than one volume"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING); dlg.ShowModal(); return false; } @@ -11123,7 +11056,7 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const q->take_snapshot(snapshot); ModelObject* old_model_object = model.objects[object_idx]; - ModelVolume* old_volume = old_model_object->volumes[volume_idx]; + ModelVolume* old_volume = old_model_object->volumes[volume_idx]; bool sinking = old_model_object->min_z() < SINKING_Z_THRESHOLD; @@ -11135,8 +11068,7 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const new_volume->set_type(old_volume->type()); new_volume->set_material_id(old_volume->material_id()); new_volume->set_transformation(old_volume->get_transformation()); - new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * - (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); + new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); assert(!old_volume->source.is_converted_from_inches || !old_volume->source.is_converted_from_meters); if (old_volume->source.is_converted_from_inches) new_volume->convert_from_imperial_units(); @@ -11176,7 +11108,7 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const void Plater::priv::replace_with_stl() { - if (!q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) + if (! q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) return; const Selection& selection = get_selection(); @@ -11185,8 +11117,8 @@ void Plater::priv::replace_with_stl() return; const GLVolume* v = selection.get_first_volume(); - int object_idx = v->object_idx(); - int volume_idx = v->volume_idx(); + int object_idx = v->object_idx(); + int volume_idx = v->volume_idx(); // collects paths of files to load @@ -11205,8 +11137,7 @@ void Plater::priv::replace_with_stl() fs::path out_path = dialog.GetPath().ToUTF8().data(); if (out_path.empty()) { - MessageDialog dlg(q, _L("File for the replacement wasn\'t selected"), _L("Error during replacement"), - wxOK | wxOK_DEFAULT | wxICON_WARNING); + MessageDialog dlg(q, _L("File for the replacement wasn\'t selected"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING); dlg.ShowModal(); return; } @@ -11225,7 +11156,7 @@ void Plater::priv::replace_with_stl() void Plater::priv::replace_all_with_stl() { - if (!q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) + if (! q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) return; const Selection& selection = get_selection(); @@ -11249,7 +11180,7 @@ void Plater::priv::replace_all_with_stl() Slic3r::GUI::ItemType item_type = wxGetApp().obj_list()->GetModel()->GetItemType(item); if (item_type & itPlate) { if (item.IsOk()) { - ObjectDataViewModelNode* node = static_cast(item.GetID()); + ObjectDataViewModelNode *node = static_cast(item.GetID()); selected_plate_idxs.push_back(node->GetPlateIdx()); } } @@ -11270,8 +11201,8 @@ void Plater::priv::replace_all_with_stl() for (unsigned int idx : volume_idxs) { const GLVolume* v = selection.get_volume(idx); - int object_idx = v->object_idx(); - int volume_idx = v->volume_idx(); + int object_idx = v->object_idx(); + int volume_idx = v->volume_idx(); const ModelObject* object = model.objects[object_idx]; const ModelVolume* volume = object->volumes[volume_idx]; @@ -11290,8 +11221,7 @@ void Plater::priv::replace_all_with_stl() fs::path out_path = dialog.GetPath().ToUTF8().data(); if (out_path.empty()) { - MessageDialog dlg(q, _L("Directory for the replace wasn't selected"), _L("Error during replacement"), - wxOK | wxOK_DEFAULT | wxICON_WARNING); + MessageDialog dlg(q, _L("Directory for the replace wasn't selected"), _L("Error during replacement"), wxOK | wxOK_DEFAULT | wxICON_WARNING); dlg.ShowModal(); return; } @@ -11300,8 +11230,8 @@ void Plater::priv::replace_all_with_stl() for (unsigned int idx : volume_idxs) { const GLVolume* v = selection.get_volume(idx); - int object_idx = v->object_idx(); - int volume_idx = v->volume_idx(); + int object_idx = v->object_idx(); + int volume_idx = v->volume_idx(); const ModelObject* object = model.objects[object_idx]; const ModelVolume* volume = object->volumes[volume_idx]; @@ -11351,20 +11281,19 @@ void Plater::priv::replace_all_with_stl() } #if ENABLE_RELOAD_FROM_DISK_REWORK -static std::vector> reloadable_volumes(const Model& model, const Selection& selection) +static std::vector> reloadable_volumes(const Model &model, const Selection &selection) { std::vector> ret; - const std::set& selected_volumes_idxs = selection.get_volume_idxs(); + const std::set & selected_volumes_idxs = selection.get_volume_idxs(); for (unsigned int idx : selected_volumes_idxs) { - const GLVolume& v = *selection.get_volume(idx); - const int o_idx = v.object_idx(); + const GLVolume &v = *selection.get_volume(idx); + const int o_idx = v.object_idx(); if (0 <= o_idx && o_idx < int(model.objects.size())) { - const ModelObject* obj = model.objects[o_idx]; - const int v_idx = v.volume_idx(); + const ModelObject *obj = model.objects[o_idx]; + const int v_idx = v.volume_idx(); if (0 <= v_idx && v_idx < int(obj->volumes.size())) { - const ModelVolume* vol = obj->volumes[v_idx]; - if (!vol->source.is_from_builtin_objects && !vol->source.input_file.empty() && - !fs::path(vol->source.input_file).extension().string().empty()) + const ModelVolume *vol = obj->volumes[v_idx]; + if (!vol->source.is_from_builtin_objects && !vol->source.input_file.empty() && !fs::path(vol->source.input_file).extension().string().empty()) ret.push_back({o_idx, v_idx}); } } @@ -11383,14 +11312,12 @@ void Plater::priv::reload_from_disk() if (selected_volumes.empty()) return; - std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); - }); - selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), - [](const std::pair& v1, const std::pair& v2) { - return (v1.first == v2.first) && (v1.second == v2.second); - }), - selected_volumes.end()); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first == v2.first) && (v1.second == v2.second); + }), selected_volumes.end()); #else Plater::TakeSnapshot snapshot(q, _u8L("Reload from disk")); @@ -11406,9 +11333,8 @@ void Plater::priv::reload_from_disk() int volume_idx; // operators needed by std::algorithms - bool operator<(const SelectedVolume& other) const - { return object_idx < other.object_idx || (object_idx == other.object_idx && volume_idx < other.volume_idx); } - bool operator==(const SelectedVolume& other) const { return object_idx == other.object_idx && volume_idx == other.volume_idx; } + bool operator < (const SelectedVolume& other) const { return object_idx < other.object_idx || (object_idx == other.object_idx && volume_idx < other.volume_idx); } + bool operator == (const SelectedVolume& other) const { return object_idx == other.object_idx && volume_idx == other.volume_idx; } }; std::vector selected_volumes; @@ -11416,11 +11342,11 @@ void Plater::priv::reload_from_disk() const std::set& selected_volumes_idxs = selection.get_volume_idxs(); for (unsigned int idx : selected_volumes_idxs) { const GLVolume* v = selection.get_volume(idx); - int v_idx = v->volume_idx(); + int v_idx = v->volume_idx(); if (v_idx >= 0) { int o_idx = v->object_idx(); - if (0 <= o_idx && o_idx < (int) model.objects.size()) - selected_volumes.push_back({o_idx, v_idx}); + if (0 <= o_idx && o_idx < (int)model.objects.size()) + selected_volumes.push_back({ o_idx, v_idx }); } } std::sort(selected_volumes.begin(), selected_volumes.end()); @@ -11433,8 +11359,8 @@ void Plater::priv::reload_from_disk() #if ENABLE_RELOAD_FROM_DISK_REWORK std::vector> replace_paths; for (auto [obj_idx, vol_idx] : selected_volumes) { - const ModelObject* object = model.objects[obj_idx]; - const ModelVolume* volume = object->volumes[vol_idx]; + const ModelObject *object = model.objects[obj_idx]; + const ModelVolume *volume = object->volumes[vol_idx]; if (fs::exists(volume->source.input_file)) input_paths.push_back(volume->source.input_file); else { @@ -11480,8 +11406,8 @@ void Plater::priv::reload_from_disk() if (!found) missing_input_paths.push_back(volume->source.input_file); } - } else if (!object->input_file.empty() && volume->is_model_part() && !volume->name.empty() && - !volume->source.is_from_builtin_objects) + } + else if (!object->input_file.empty() && volume->is_model_part() && !volume->name.empty() && !volume->source.is_from_builtin_objects) missing_input_paths.push_back(volume->name); } #endif // ENABLE_RELOAD_FROM_DISK_REWORK @@ -11492,7 +11418,7 @@ void Plater::priv::reload_from_disk() while (!missing_input_paths.empty()) { // ask user to select the missing file fs::path search = missing_input_paths.back(); - wxString title = _L("Please select a file"); + wxString title = _L("Please select a file"); #if defined(__APPLE__) title += " (" + from_u8(search.filename().string()) + ")"; #endif // __APPLE__ @@ -11502,7 +11428,7 @@ void Plater::priv::reload_from_disk() return; std::string sel_filename_path = dialog.GetPath().ToUTF8().data(); - std::string sel_filename = fs::path(sel_filename_path).filename().string(); + std::string sel_filename = fs::path(sel_filename_path).filename().string(); if (boost::algorithm::iequals(search.filename().string(), sel_filename)) { input_paths.push_back(sel_filename_path); missing_input_paths.pop_back(); @@ -11517,11 +11443,13 @@ void Plater::priv::reload_from_disk() if (fs::exists(repathed_filename)) { input_paths.push_back(repathed_filename.string()); it = missing_input_paths.erase(it); - } else + } + else ++it; } - } else { - wxString message = _L("Do you want to replace it") + " ?"; + } + else { + wxString message = _L("Do you want to replace it") + " ?"; MessageDialog dlg(q, message, _L("Message"), wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION); if (dlg.ShowModal() == wxID_YES) #if ENABLE_RELOAD_FROM_DISK_REWORK @@ -11551,7 +11479,7 @@ void Plater::priv::reload_from_disk() auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path, ".obj")) { return; } const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); + ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); if (color_dlg.ShowModal() != wxID_OK) { in_out.filament_ids.clear(); } @@ -11560,68 +11488,72 @@ void Plater::priv::reload_from_disk() wxBusyInfo info(_L("Reload from:") + " " + from_u8(path), q->get_current_canvas3D()->get_wxglcanvas()); Model new_model; - try { - // BBS: add plate data related logic + try + { + //BBS: add plate data related logic PlateDataPtrs plate_data; - // BBS: project embedded settings + //BBS: project embedded settings std::vector project_presets; // BBS: backup - if (boost::iends_with(path, ".stp") || boost::iends_with(path, ".step")) { + if (boost::iends_with(path, ".stp") || + boost::iends_with(path, ".step")) { double linear = string_to_double_decimal_point(wxGetApp().app_config->get("linear_deflection")); - double angle = string_to_double_decimal_point(wxGetApp().app_config->get("angle_deflection")); - bool is_split = wxGetApp().app_config->get_bool("is_split_compound"); - new_model = Model::read_from_step(path, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, nullptr, nullptr, - nullptr, linear, angle, is_split); - } else { - new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, - &plate_data, &project_presets, nullptr, nullptr, nullptr, nullptr, nullptr, 0, - obj_color_fun); + double angle = string_to_double_decimal_point(wxGetApp().app_config->get("angle_deflection")); + bool is_split = wxGetApp().app_config->get_bool("is_split_compound"); + new_model = Model::read_from_step(path, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, nullptr, nullptr, nullptr, linear, angle, is_split); + }else { + new_model = Model::read_from_file(path, nullptr, nullptr, LoadStrategy::AddDefaultInstances | LoadStrategy::LoadModel, &plate_data, &project_presets, nullptr, nullptr, nullptr, nullptr, nullptr, 0, obj_color_fun); } - for (ModelObject* model_object : new_model.objects) { + + for (ModelObject* model_object : new_model.objects) + { model_object->center_around_origin(); model_object->ensure_on_bed(); } - if (plate_data.size() > 0) { - // partplate_list.load_from_3mf_structure(plate_data); + if (plate_data.size() > 0) + { + //partplate_list.load_from_3mf_structure(plate_data); partplate_list.update_slice_context_to_current_plate(background_process); this->preview->update_gcode_result(partplate_list.get_current_slice_result()); release_PlateData_list(plate_data); sidebar->obj_list()->reload_all_plates(); } - } catch (std::exception&) { + } + catch (std::exception&) + { // error while loading return; } #if ENABLE_RELOAD_FROM_DISK_REWORK for (auto [obj_idx, vol_idx] : selected_volumes) { - ModelObject* old_model_object = model.objects[obj_idx]; - ModelVolume* old_volume = old_model_object->volumes[vol_idx]; + ModelObject *old_model_object = model.objects[obj_idx]; + ModelVolume *old_volume = old_model_object->volumes[vol_idx]; bool sinking = old_model_object->min_z() < SINKING_Z_THRESHOLD; bool has_source = !old_volume->source.input_file.empty() && - boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), - fs::path(path).filename().string()); - bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); + boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), fs::path(path).filename().string()); + bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); if (has_source || has_name) { - int new_volume_idx = -1; - int new_object_idx = -1; - bool match_found = false; + int new_volume_idx = -1; + int new_object_idx = -1; + bool match_found = false; // take idxs from the matching volume if (has_source && old_volume->source.object_idx < int(new_model.objects.size())) { - const ModelObject* obj = new_model.objects[old_volume->source.object_idx]; + const ModelObject *obj = new_model.objects[old_volume->source.object_idx]; if (old_volume->source.volume_idx < int(obj->volumes.size())) { - const std::string& new_input_file = obj->volumes[old_volume->source.volume_idx]->source.input_file; - const std::string& old_input_file = old_volume->source.input_file; + const std::string &new_input_file = obj->volumes[old_volume->source.volume_idx]->source.input_file; + const std::string &old_input_file = old_volume->source.input_file; // Orca: match on the exact source path first, then fall back to filename-only so reload // still matches when the project stored a bare filename and the file was found next to // the project (same-folder fallback) or picked via the locate dialog (#12992). - if (new_input_file == old_input_file || boost::algorithm::iequals(fs::path(new_input_file).filename().string(), - fs::path(old_input_file).filename().string())) { + if (new_input_file == old_input_file || + boost::algorithm::iequals(fs::path(new_input_file).filename().string(), + fs::path(old_input_file).filename().string())) { new_volume_idx = old_volume->source.volume_idx; new_object_idx = old_volume->source.object_idx; match_found = true; @@ -11632,8 +11564,8 @@ void Plater::priv::reload_from_disk() if (!match_found && has_name) { // take idxs from the 1st matching volume for (size_t o = 0; o < new_model.objects.size(); ++o) { - ModelObject* obj = new_model.objects[o]; - bool found = false; + ModelObject *obj = new_model.objects[o]; + bool found = false; for (size_t v = 0; v < obj->volumes.size(); ++v) { if (obj->volumes[v]->name == old_volume->name) { new_volume_idx = (int) v; @@ -11642,8 +11574,7 @@ void Plater::priv::reload_from_disk() break; } } - if (found) - break; + if (found) break; // BBS: step model,object loaded as a volume. GUI_ObfectList.cpp load_modifier() if (obj->name == old_volume->name) { new_object_idx = (int) o; @@ -11656,24 +11587,24 @@ void Plater::priv::reload_from_disk() fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); continue; } - ModelObject* new_model_object = new_model.objects[new_object_idx]; + ModelObject *new_model_object = new_model.objects[new_object_idx]; if (int(new_model_object->volumes.size()) <= new_volume_idx) { fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); continue; } - ModelVolume* new_volume = nullptr; + ModelVolume *new_volume = nullptr; // BBS: step model if (new_volume_idx < 0 && new_object_idx >= 0) { - TriangleMesh mesh = new_model_object->mesh(); - new_volume = old_model_object->add_volume(std::move(mesh)); - new_volume->name = new_model_object->name; + TriangleMesh mesh = new_model_object->mesh(); + new_volume = old_model_object->add_volume(std::move(mesh)); + new_volume->name = new_model_object->name; new_volume->source.input_file = new_model_object->input_file; - } else { + }else { new_volume = old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]); // new_volume = old_model_object->volumes.back(); } - + new_volume->set_new_unique_id(); new_volume->config.apply(old_volume->config); new_volume->set_type(old_volume->type()); @@ -11701,8 +11632,7 @@ void Plater::priv::reload_from_disk() std::swap(old_model_object->volumes[vol_idx], old_model_object->volumes.back()); old_model_object->delete_volume(old_model_object->volumes.size() - 1); - if (!sinking) - old_model_object->ensure_on_bed(); + if (!sinking) old_model_object->ensure_on_bed(); old_model_object->sort_volumes(wxGetApp().app_config->get("order_volumes") == "1"); sla::reproject_points_and_holes(old_model_object); @@ -11715,39 +11645,37 @@ void Plater::priv::reload_from_disk() // update the selected volumes whose source is the current file for (const SelectedVolume& sel_v : selected_volumes) { ModelObject* old_model_object = model.objects[sel_v.object_idx]; - ModelVolume* old_volume = old_model_object->volumes[sel_v.volume_idx]; + ModelVolume* old_volume = old_model_object->volumes[sel_v.volume_idx]; bool sinking = old_model_object->bounding_box().min.z() < SINKING_Z_THRESHOLD; - bool has_source = !old_volume->source.input_file.empty() && - boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), - fs::path(path).filename().string()); - bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); + bool has_source = !old_volume->source.input_file.empty() && boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), fs::path(path).filename().string()); + bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); if (has_source || has_name) { int new_volume_idx = -1; int new_object_idx = -1; - // if (has_source) { - // // take idxs from source - // new_volume_idx = old_volume->source.volume_idx; - // new_object_idx = old_volume->source.object_idx; - // } - // else { - // take idxs from the 1st matching volume - for (size_t o = 0; o < new_model.objects.size(); ++o) { - ModelObject* obj = new_model.objects[o]; - bool found = false; - for (size_t v = 0; v < obj->volumes.size(); ++v) { - if (obj->volumes[v]->name == old_volume->name) { - new_volume_idx = (int) v; - new_object_idx = (int) o; - found = true; - break; +// if (has_source) { +// // take idxs from source +// new_volume_idx = old_volume->source.volume_idx; +// new_object_idx = old_volume->source.object_idx; +// } +// else { + // take idxs from the 1st matching volume + for (size_t o = 0; o < new_model.objects.size(); ++o) { + ModelObject* obj = new_model.objects[o]; + bool found = false; + for (size_t v = 0; v < obj->volumes.size(); ++v) { + if (obj->volumes[v]->name == old_volume->name) { + new_volume_idx = (int)v; + new_object_idx = (int)o; + found = true; + break; + } } + if (found) + break; } - if (found) - break; - } - // } +// } if (new_object_idx < 0 || int(new_model.objects.size()) <= new_object_idx) { fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); @@ -11766,11 +11694,10 @@ void Plater::priv::reload_from_disk() new_volume->set_type(old_volume->type()); new_volume->set_material_id(old_volume->material_id()); new_volume->set_transformation(old_volume->get_transformation()); - new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * - (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); + new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); new_volume->source.object_idx = old_volume->source.object_idx; new_volume->source.volume_idx = old_volume->source.volume_idx; - assert(!old_volume->source.is_converted_from_inches || !old_volume->source.is_converted_from_meters); + assert(! old_volume->source.is_converted_from_inches || ! old_volume->source.is_converted_from_meters); if (old_volume->source.is_converted_from_inches) new_volume->convert_from_imperial_units(); else if (old_volume->source.is_converted_from_meters) @@ -11791,10 +11718,8 @@ void Plater::priv::reload_from_disk() for (auto [src, dest] : replace_paths) { for (auto [obj_idx, vol_idx] : selected_volumes) { if (boost::algorithm::iequals(model.objects[obj_idx]->volumes[vol_idx]->source.input_file, src.string())) - // When an error occurs, either the dest parsing error occurs, or the number of objects in the dest is greater than 1 and - // cannot be replaced, and cannot be replaced in this loop. - if (!replace_volume_with_stl(obj_idx, vol_idx, dest, "")) - break; + // When an error occurs, either the dest parsing error occurs, or the number of objects in the dest is greater than 1 and cannot be replaced, and cannot be replaced in this loop. + if (!replace_volume_with_stl(obj_idx, vol_idx, dest, "")) break; } } #else @@ -11802,10 +11727,8 @@ void Plater::priv::reload_from_disk() const auto& path = replace_paths[i].string(); for (const SelectedVolume& sel_v : selected_volumes) { ModelObject* old_model_object = model.objects[sel_v.object_idx]; - ModelVolume* old_volume = old_model_object->volumes[sel_v.volume_idx]; - bool has_source = !old_volume->source.input_file.empty() && - boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), - fs::path(path).filename().string()); + ModelVolume* old_volume = old_model_object->volumes[sel_v.volume_idx]; + bool has_source = !old_volume->source.input_file.empty() && boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), fs::path(path).filename().string()); if (!replace_volume_with_stl(sel_v.object_idx, sel_v.volume_idx, path, "")) { fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); } @@ -11841,7 +11764,7 @@ void Plater::priv::reload_all_from_disk() Plater::TakeSnapshot snapshot(q, _u8L("Reload all")); Plater::SuppressSnapshots suppress(q); - Selection& selection = get_selection(); + Selection& selection = get_selection(); Selection::IndicesList curr_idxs = selection.get_volume_idxs(); // reload from disk uses selection select_all(); @@ -11853,88 +11776,92 @@ void Plater::priv::reload_all_from_disk() } } -// BBS: add no_slice logic +//BBS: add no_slice logic void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) { if (std::find(panels.begin(), panels.end(), panel) == panels.end()) return; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": current_panel %1%, new_panel %2%") % current_panel % panel; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": current_panel %1%, new_panel %2%")%current_panel%panel; #ifdef __WXMAC__ bool force_render = (current_panel != nullptr); #endif // __WXMAC__ - // BBS: add slice logic when switch to preview page + //BBS: add slice logic when switch to preview page auto do_reslice = [this, no_slice]() { - // see: Plater::priv::object_list_changed() - // FIXME: it may be better to have a single function making this check and let it be called wherever needed - bool export_in_progress = this->background_process.is_export_scheduled(); - ObjectFilamentResults object_results; - bool model_fits = this->view3D->get_canvas3d()->check_volumes_outside_state(&object_results) != ModelInstancePVS_Partly_Outside; - model_fits = model_fits && object_results.filaments.empty(); - // BBS: add partplate logic - PartPlate* current_plate = this->partplate_list.get_curr_plate(); - bool only_has_gcode_need_preview = false; - bool current_has_print_instances = current_plate->has_printable_instances(); - if (current_plate->is_slice_result_valid() && this->model.objects.empty() && !current_has_print_instances) - only_has_gcode_need_preview = true; + // see: Plater::priv::object_list_changed() + // FIXME: it may be better to have a single function making this check and let it be called wherever needed + bool export_in_progress = this->background_process.is_export_scheduled(); + ObjectFilamentResults object_results; + bool model_fits = this->view3D->get_canvas3d()->check_volumes_outside_state(&object_results) != ModelInstancePVS_Partly_Outside; + model_fits = model_fits&&object_results.filaments.empty(); + //BBS: add partplate logic + PartPlate * current_plate = this->partplate_list.get_curr_plate(); + bool only_has_gcode_need_preview = false; + bool current_has_print_instances = current_plate->has_printable_instances(); + if (current_plate->is_slice_result_valid() && this->model.objects.empty() && !current_has_print_instances) + only_has_gcode_need_preview = true; - bool mixed_broken = sidebar->has_broken_mixed_filament(); + bool mixed_broken = sidebar->has_broken_mixed_filament(); - BOOST_LOG_TRIVIAL(info) - << __FUNCTION__ - << boost::format( - ": from set_current_panel, no_slice %1%, export_in_progress %2%, model_fits %3%, m_is_slicing %4%, mixed_broken %5%") % - no_slice % export_in_progress % model_fits % m_is_slicing % mixed_broken; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": from set_current_panel, no_slice %1%, export_in_progress %2%, model_fits %3%, m_is_slicing %4%, mixed_broken %5%")%no_slice%export_in_progress%model_fits%m_is_slicing%mixed_broken; - if (!no_slice && !this->model.objects.empty() && !export_in_progress && model_fits && current_has_print_instances && !mixed_broken) { - // if already running in background, not relice here - // BBS: add more judge for slicing - if (!this->background_process.running() && !this->m_is_slicing) { + if (!no_slice && !this->model.objects.empty() && !export_in_progress && model_fits && current_has_print_instances && !mixed_broken) + { + //if already running in background, not relice here + //BBS: add more judge for slicing + if (!this->background_process.running() && !this->m_is_slicing) + { + this->m_slice_all = false; + this->q->reslice(); + } + else { + //reset current plate to the slicing plate + int plate_index = this->background_process.get_current_plate()->get_index(); + this->partplate_list.select_plate(plate_index); + } + } + else if (only_has_gcode_need_preview) + { this->m_slice_all = false; this->q->reslice(); - } else { - // reset current plate to the slicing plate - int plate_index = this->background_process.get_current_plate()->get_index(); - this->partplate_list.select_plate(plate_index); } - } else if (only_has_gcode_need_preview) { - this->m_slice_all = false; - this->q->reslice(); - } - // BBS: process empty plate, reset previous toolpath - else { - // if (!this->m_slice_all) - if (!current_has_print_instances) - reset_gcode_toolpaths(); - // this->q->refresh_print(); - if (!preview->get_canvas3d()->is_initialized()) { - preview->get_canvas3d()->render(true); - } - } - // TODO: turn off this switch currently - /*auto canvas_w = float(preview->get_canvas3d()->get_canvas_size().get_width()); - auto canvas_h = float(preview->get_canvas3d()->get_canvas_size().get_height()); - Point screen_center(canvas_w/2, canvas_h/2); - auto center_point = preview->get_canvas3d()->_mouse_to_3d(screen_center); - center_point(2) = 0.f; - if (!current_plate->contains(center_point)) - this->partplate_list.select_plate_view();*/ - - // keeps current gcode preview, if any - if (this->m_slice_all) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": slicing all, just reload shells"); - this->update_fff_scene_only_shells(); - } else { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": single slice, reload print"); - if (model_fits) - this->preview->reload_print(); // TODO + //BBS: process empty plate, reset previous toolpath else - this->update_fff_scene_only_shells(); - } + { + //if (!this->m_slice_all) + if (!current_has_print_instances) + reset_gcode_toolpaths(); + //this->q->refresh_print(); + if (!preview->get_canvas3d()->is_initialized()) + { + preview->get_canvas3d()->render(true); + } + } + //TODO: turn off this switch currently + /*auto canvas_w = float(preview->get_canvas3d()->get_canvas_size().get_width()); + auto canvas_h = float(preview->get_canvas3d()->get_canvas_size().get_height()); + Point screen_center(canvas_w/2, canvas_h/2); + auto center_point = preview->get_canvas3d()->_mouse_to_3d(screen_center); + center_point(2) = 0.f; + if (!current_plate->contains(center_point)) + this->partplate_list.select_plate_view();*/ - preview->set_as_dirty(); - }; + // keeps current gcode preview, if any + if (this->m_slice_all) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": slicing all, just reload shells"); + this->update_fff_scene_only_shells(); + } + else { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": single slice, reload print"); + if (model_fits) + this->preview->reload_print(); // TODO + else + this->update_fff_scene_only_shells(); + } + + preview->set_as_dirty(); + }; // Add sidebar and toolbar collapse logic if (panel == view3D || panel == preview) { @@ -11950,7 +11877,8 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) } } - if (current_panel == panel) { + if (current_panel == panel) + { if (panel == view3D) { if (view3D->is_reload_delayed()) { // Delayed loading of the 3D scene when caller requests the already active tab. @@ -11965,8 +11893,8 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) if (notification_manager != nullptr) notification_manager->set_in_preview(false); } - // BBS: add slice logic when switch to preview page - // BBS: add only gcode mode + //BBS: add slice logic when switch to preview page + //BBS: add only gcode mode if (!q->only_gcode_mode() && (current_panel == preview) && (wxGetApp().is_editor())) { do_reslice(); } @@ -11974,17 +11902,17 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) return; } - // BBS: wish to reset all plates stats item selected state when back to View3D Tab + //BBS: wish to reset all plates stats item selected state when back to View3D Tab preview->get_canvas3d()->reset_select_plate_toolbar_selection(); wxPanel* old_panel = current_panel; - // #if BBL_HAS_FIRST_PAGE +//#if BBL_HAS_FIRST_PAGE if (!old_panel) { // Wayland may report the first canvas as not yet shown while the frame is still mapping. // Keep the panel switch anyway so handlers are bound and the first paint can initialize GL later. panel->Show(); } - // #endif +//#endif current_panel = panel; // to reduce flickering when changing view, first set as visible the new current panel @@ -12019,7 +11947,8 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) } if (current_panel == view3D || current_panel == preview) { cam.load_camera_view(view3D->get_canvas3d()->get_camera()); - } else if (current_panel == assemble_view) { + } + else if (current_panel == assemble_view) { cam.load_camera_view(assemble_view->get_canvas3d()->get_camera()); } } @@ -12030,12 +11959,12 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) else if (old_panel == assemble_view) { assemble_view->get_canvas3d()->unbind_event_handlers(); - GLCanvas3D* assemble_canvas = assemble_view->get_canvas3d(); + GLCanvas3D* assemble_canvas = assemble_view->get_canvas3d(); Selection::IndicesList select_idxs = assemble_canvas->get_selection().get_volume_idxs(); - Selection& view3d_selection = view3D->get_canvas3d()->get_selection(); + Selection& view3d_selection = view3D->get_canvas3d()->get_selection(); view3d_selection.clear(); for (unsigned int idx : select_idxs) { - auto v = assemble_canvas->get_selection().get_volume(idx); + auto v = assemble_canvas->get_selection().get_volume(idx); auto real_idx = view3d_selection.query_real_volume_idx_from_other_view(v->object_idx(), v->instance_idx(), v->volume_idx()); if (real_idx >= 0) { view3d_selection.add(real_idx, false); @@ -12060,10 +11989,11 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) // reset cached size to force a resize on next call to render() to keep imgui in synch with canvas size view3D->get_canvas3d()->reset_old_size(); // BBS - // view_toolbar.select_item("3D"); + //view_toolbar.select_item("3D"); if (notification_manager != nullptr) notification_manager->set_in_preview(false); - } else if (current_panel == preview) { + } + else if (current_panel == preview) { q->invalid_all_plate_thumbnails(); if (old_panel == view3D) view3D->get_canvas3d()->unbind_event_handlers(); @@ -12106,27 +12036,28 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) // reset cached size to force a resize on next call to render() to keep imgui in synch with canvas size preview->get_canvas3d()->reset_old_size(); // BBS - // view_toolbar.select_item("Preview"); + //view_toolbar.select_item("Preview"); if (notification_manager != nullptr) notification_manager->set_in_preview(true); - } else if (current_panel == assemble_view) { + } + else if (current_panel == assemble_view) { if (old_panel == view3D) { view3D->get_canvas3d()->unbind_event_handlers(); - } else if (old_panel == preview) + } + else if (old_panel == preview) preview->get_canvas3d()->unbind_event_handlers(); assemble_view->get_canvas3d()->bind_event_handlers(); assemble_view->reload_scene(true); if (old_panel == view3D) { - GLCanvas3D* view3D_canvas = view3D->get_canvas3d(); + GLCanvas3D* view3D_canvas = view3D->get_canvas3d(); Selection::IndicesList select_idxs = view3D_canvas->get_selection().get_volume_idxs(); - Selection& assemble_selection = assemble_view->get_canvas3d()->get_selection(); + Selection& assemble_selection = assemble_view->get_canvas3d()->get_selection(); assemble_selection.clear(); for (unsigned int idx : select_idxs) { auto v = view3D_canvas->get_selection().get_volume(idx); - auto real_idx = assemble_selection.query_real_volume_idx_from_other_view(v->object_idx(), v->instance_idx(), - v->volume_idx()); + auto real_idx = assemble_selection.query_real_volume_idx_from_other_view(v->object_idx(), v->instance_idx(), v->volume_idx()); if (real_idx >= 0) { assemble_selection.add(real_idx, false); } @@ -12136,12 +12067,12 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) // BBS set default view and zoom if (first_enter_assemble) { wxGetApp().plater()->get_camera().requires_zoom_to_volumes = true; - first_enter_assemble = false; + first_enter_assemble = false; } assemble_view->set_as_dirty(); // BBS - // view_toolbar.select_item("Assemble"); + //view_toolbar.select_item("Assemble"); } current_panel->SetFocusFromKbd(); @@ -12150,32 +12081,33 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) } // BBS -void Plater::priv::on_combobox_select(wxCommandEvent& evt) +void Plater::priv::on_combobox_select(wxCommandEvent &evt) { PlaterPresetComboBox* preset_combo_box = dynamic_cast(evt.GetEventObject()); if (preset_combo_box) { this->on_select_preset(evt); sidebar->update_printer_thumbnail(); - } else { + } + else { this->on_select_bed_type(evt); } } -void Plater::priv::on_select_bed_type(wxCommandEvent& evt) +void Plater::priv::on_select_bed_type(wxCommandEvent &evt) { - ComboBox* combo = static_cast(evt.GetEventObject()); - auto select_bed_type = sidebar->get_cur_select_bed_type(); - std::string bed_type_name = print_config_def.get("curr_bed_type")->enum_values[(int) select_bed_type - 1]; + ComboBox* combo = static_cast(evt.GetEventObject()); + auto select_bed_type = sidebar->get_cur_select_bed_type(); + std::string bed_type_name = print_config_def.get("curr_bed_type")->enum_values[(int)select_bed_type - 1]; - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - DynamicPrintConfig& proj_config = wxGetApp().preset_bundle->project_config; + PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + DynamicPrintConfig& proj_config = wxGetApp().preset_bundle->project_config; const t_config_enum_values* keys_map = print_config_def.get("curr_bed_type")->enum_keys_map; if (keys_map) { BedType new_bed_type = btCount; for (auto item : *keys_map) { if (item.first == bed_type_name) { - new_bed_type = (BedType) item.second; + new_bed_type = (BedType)item.second; break; } } @@ -12193,10 +12125,10 @@ void Plater::priv::on_select_bed_type(wxCommandEvent& evt) // update app_config AppConfig* app_config = wxGetApp().app_config; app_config->set("curr_bed_type", std::to_string(int(new_bed_type))); - app_config->set_printer_setting(wxGetApp().preset_bundle->printers.get_selected_preset_name(), "curr_bed_type", - std::to_string(int(new_bed_type))); + app_config->set_printer_setting(wxGetApp().preset_bundle->printers.get_selected_preset_name(), + "curr_bed_type", std::to_string(int(new_bed_type))); - // update slice status + //update slice status auto plate_list = partplate_list.get_plate_list(); for (auto plate : plate_list) { if (plate->get_bed_type() == btDefault) { @@ -12212,7 +12144,7 @@ void Plater::priv::on_select_bed_type(wxCommandEvent& evt) } } -void Plater::priv::on_select_preset(wxCommandEvent& evt) +void Plater::priv::on_select_preset(wxCommandEvent &evt) { PlaterPresetComboBox* combo = static_cast(evt.GetEventObject()); Preset::Type preset_type = combo->get_type(); @@ -12232,11 +12164,11 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) // BBS:Save the plate parameters before switching PartPlateList& old_plate_list = this->partplate_list; - PartPlate* old_plate = old_plate_list.get_selected_plate(); - Vec3d old_plate_pos = old_plate->get_center_origin(); + PartPlate* old_plate = old_plate_list.get_selected_plate(); + Vec3d old_plate_pos = old_plate->get_center_origin(); // BBS: Save the model in the current platelist - std::vector> plate_object; + std::vector > plate_object; for (size_t i = 0; i < old_plate_list.get_plate_count(); ++i) { PartPlate* plate = old_plate_list.get_plate(i); std::vector obj_idxs; @@ -12264,8 +12196,8 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) preset_name = Preset::remove_suffix_modified(wx_stored_name.ToUTF8().data()); } else { wxString wx_name = combo->GetString(selection); - preset_name = wxGetApp().preset_bundle->get_preset_name_by_alias(preset_type, - Preset::remove_suffix_modified(wx_name.ToUTF8().data())); + preset_name = wxGetApp().preset_bundle->get_preset_name_by_alias(preset_type, + Preset::remove_suffix_modified(wx_name.ToUTF8().data())); } if (preset_type == Preset::TYPE_FILAMENT) { @@ -12278,7 +12210,7 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) sidebar->auto_calc_flushing_volumes(idx); } auto select_flag = combo->GetFlag(selection); - combo->ShowBadge(select_flag == (int) PresetComboBox::FilamentAMSType::FROM_AMS); + combo->ShowBadge(select_flag == (int)PresetComboBox::FilamentAMSType::FROM_AMS); q->on_filament_change(idx); } bool select_preset = !combo->selection_is_changed_according_to_physical_printers(); @@ -12286,10 +12218,11 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) if (preset_type == Preset::TYPE_FILAMENT && sidebar->is_multifilament()) { // Only update the plater UI for the 2nd and other filaments. combo->update(); - } else if (select_preset) { + } + else if (select_preset) { if (preset_type == Preset::TYPE_PRINTER) { PhysicalPrinterCollection& physical_printers = wxGetApp().preset_bundle->physical_printers; - if (combo->is_selected_physical_printer()) + if(combo->is_selected_physical_printer()) preset_name = physical_printers.get_selected_printer_preset_name(); else physical_printers.unselect_printer(); @@ -12301,7 +12234,7 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) dlg.ShowModal(); } preset->is_visible = true; // force visible - preset_name = preset->name; + preset_name = preset->name; } std::string old_preset_name = wxGetApp().preset_bundle->printers.get_edited_preset().name; @@ -12312,24 +12245,24 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) q->on_config_change(wxGetApp().preset_bundle->full_config()); }); + if (old_preset_name != preset_name && wxGetApp().app_config->get("auto_calculate_flush") == "all") { wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(-1); } // sync extruder info when select multi_extruder preset - if (Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager()) { - MachineObject* obj = dev->get_selected_machine(); + if (Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager()) { + MachineObject *obj = dev->get_selected_machine(); if (obj && obj->is_multi_extruders()) { - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - Preset& cur_preset = preset_bundle->printers.get_edited_preset(); + PresetBundle *preset_bundle = wxGetApp().preset_bundle; + Preset& cur_preset = preset_bundle->printers.get_edited_preset(); if (cur_preset.get_printer_type(preset_bundle) == obj->get_show_printer_type()) { double preset_nozzle_diameter = cur_preset.config.option("nozzle_diameter")->values[0]; - bool same_nozzle_diameter = true; + bool same_nozzle_diameter = true; const auto& extruders = obj->GetExtderSystem()->GetExtruders(); - for (const DevExtder& extruder : extruders) { - if (!obj->GetExtderSystem()->NozzleDiameterMatchesOrUnknown(extruder.GetExtId(), - float(preset_nozzle_diameter))) { + for (const DevExtder &extruder : extruders) { + if (!obj->GetExtderSystem()->NozzleDiameterMatchesOrUnknown(extruder.GetExtId(), float(preset_nozzle_diameter))) { same_nozzle_diameter = false; } } @@ -12359,17 +12292,17 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) // update plater with new config q->on_config_change(wxGetApp().preset_bundle->full_config()); if (preset_type == Preset::TYPE_PRINTER) { - /* Settings list can be changed after printer preset changing, so - * update all settings items for all item had it. - * Furthermore, Layers editing is implemented only for FFF printers - * and for SLA presets they should be deleted - */ + /* Settings list can be changed after printer preset changing, so + * update all settings items for all item had it. + * Furthermore, Layers editing is implemented only for FFF printers + * and for SLA presets they should be deleted + */ wxGetApp().obj_list()->update_object_list_by_printer_technology(); // BBS:Model reset by plate center PartPlateList& cur_plate_list = this->partplate_list; - PartPlate* cur_plate = cur_plate_list.get_curr_plate(); - Vec3d cur_plate_pos = cur_plate->get_center_origin(); + PartPlate* cur_plate = cur_plate_list.get_curr_plate(); + Vec3d cur_plate_pos = cur_plate->get_center_origin(); if (old_plate_pos.x() != cur_plate_pos.x() || old_plate_pos.y() != cur_plate_pos.y()) { for (int i = 0; i < plate_object.size(); ++i) { @@ -12380,15 +12313,16 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) view3D->deselect_all(); } -#if 0 // do not toggle auto calc when change printer - // update flush matrix +#if 0 // do not toggle auto calc when change printer + // update flush matrix size_t filament_size = wxGetApp().plater()->get_extruder_colors_from_plater_config().size(); for (size_t idx = 0; idx < filament_size; ++idx) wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(idx); #endif // Show shared profiles notification for the newly selected printer - if (wxGetApp().app_config->get_bool("show_shared_profiles_notification")) { + if (wxGetApp().app_config->get_bool("show_shared_profiles_notification")) + { std::string printer_name = wxGetApp().preset_bundle->printers.get_selected_preset_base().name; std::string encoded_name = Http::url_encode(printer_name); @@ -12423,29 +12357,27 @@ void Plater::priv::on_select_preset(wxCommandEvent& evt) // update slice state and set bedtype default for 3rd-party printer auto plate_list = partplate_list.get_plate_list(); for (auto plate : plate_list) { - plate->update_slice_result_valid_state(false); + plate->update_slice_result_valid_state(false); } } -void Plater::priv::on_slicing_update(SlicingStatusEvent& evt) +void Plater::priv::on_slicing_update(SlicingStatusEvent &evt) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format(": event_type %1%, percent %2%, text %3%") % evt.GetEventType() % evt.status.percent % - evt.status.text; - // BBS: add slice project logic + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": event_type %1%, percent %2%, text %3%") % evt.GetEventType() % evt.status.percent % evt.status.text; + //BBS: add slice project logic std::string title_text = _u8L("Slicing"); - evt.status.text = title_text + evt.status.text; + evt.status.text = title_text + evt.status.text; if (evt.status.percent >= 0) { - if (!m_worker.is_idle()) { + if (!m_worker.is_idle()) { // Avoid a race condition return; } - notification_manager->set_slicing_progress_percentage(evt.status.text, (float) evt.status.percent / 100.0f); + notification_manager->set_slicing_progress_percentage(evt.status.text, (float)evt.status.percent / 100.0f); // update slicing percent PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list(); - // slicing parallel, only update if percent is greater than before + //slicing parallel, only update if percent is greater than before if (evt.status.percent > plate_list.get_curr_plate()->get_slicing_percent()) plate_list.get_curr_plate()->update_slicing_percent(evt.status.percent); } @@ -12453,9 +12385,9 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent& evt) if (evt.status.flags & (PrintBase::SlicingStatus::RELOAD_SCENE | PrintBase::SlicingStatus::RELOAD_SLA_SUPPORT_POINTS)) { switch (this->printer_technology) { case ptFFF: - // BBS: add slice project logic, only display shells at the beginning + //BBS: add slice project logic, only display shells at the beginning if (!m_slice_all || (m_cur_slice_plate == (partplate_list.get_plate_count() - 1))) - // this->update_fff_scene(); + //this->update_fff_scene(); this->update_fff_scene_only_shells(); break; case ptSLA: @@ -12472,29 +12404,28 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent& evt) this->preview->reload_print(); } - if (evt.status.flags & - (PrintBase::SlicingStatus::UPDATE_PRINT_STEP_WARNINGS | PrintBase::SlicingStatus::UPDATE_PRINT_OBJECT_STEP_WARNINGS)) { + if (evt.status.flags & (PrintBase::SlicingStatus::UPDATE_PRINT_STEP_WARNINGS | PrintBase::SlicingStatus::UPDATE_PRINT_OBJECT_STEP_WARNINGS)) { // Update notification center with warnings of object_id and its warning_step. ObjectID object_id = evt.status.warning_object_id; - int warning_step = evt.status.warning_step; + int warning_step = evt.status.warning_step; PrintStateBase::StateWithWarnings state; - ModelObject const* model_object = nullptr; + ModelObject const * model_object = nullptr; - // BBS: add partplate related logic, use the print in background process + //BBS: add partplate related logic, use the print in background process if (evt.status.flags & PrintBase::SlicingStatus::UPDATE_PRINT_STEP_WARNINGS) { state = this->printer_technology == ptFFF ? - this->background_process.m_fff_print->step_state_with_warnings(static_cast(warning_step)) : - this->background_process.m_sla_print->step_state_with_warnings(static_cast(warning_step)); + this->background_process.m_fff_print->step_state_with_warnings(static_cast(warning_step)) : + this->background_process.m_sla_print->step_state_with_warnings(static_cast(warning_step)); } else if (this->printer_technology == ptFFF) { - const PrintObject* print_object = this->background_process.m_fff_print->get_object(object_id); + const PrintObject *print_object = this->background_process.m_fff_print->get_object(object_id); if (print_object) { - state = print_object->step_state_with_warnings(static_cast(warning_step)); + state = print_object->step_state_with_warnings(static_cast(warning_step)); model_object = print_object->model_object(); } } else { - const SLAPrintObject* print_object = this->background_process.m_sla_print->get_object(object_id); + const SLAPrintObject *print_object = this->background_process.m_sla_print->get_object(object_id); if (print_object) { - state = print_object->step_state_with_warnings(static_cast(warning_step)); + state = print_object->step_state_with_warnings(static_cast(warning_step)); model_object = print_object->model_object(); } } @@ -12502,12 +12433,10 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent& evt) for (auto const& warning : state.warnings) { if (warning.current) { NotificationManager::NotificationLevel notif_level = NotificationManager::NotificationLevel::WarningNotificationLevel; - if (evt.status.message_type == PrintStateBase::SlicingNotificationType::SlicingReplaceInitEmptyLayers || - evt.status.message_type == PrintStateBase::SlicingNotificationType::SlicingEmptyGcodeLayers) { + if (evt.status.message_type == PrintStateBase::SlicingNotificationType::SlicingReplaceInitEmptyLayers || evt.status.message_type == PrintStateBase::SlicingNotificationType::SlicingEmptyGcodeLayers) { notif_level = NotificationManager::NotificationLevel::SeriousWarningNotificationLevel; } - notification_manager->push_slicing_warning_notification(warning.message, false, model_object, object_id, warning_step, - warning.message_id, notif_level); + notification_manager->push_slicing_warning_notification(warning.message, false, model_object, object_id, warning_step, warning.message_id, notif_level); add_warning(warning, object_id.id); } } @@ -12515,13 +12444,12 @@ void Plater::priv::on_slicing_update(SlicingStatusEvent& evt) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format("exit."); } -void Plater::priv::on_slicing_completed(wxCommandEvent& evt) +void Plater::priv::on_slicing_completed(wxCommandEvent & evt) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": event_type %1%, string %2%") % evt.GetEventType() % evt.GetString(); - // BBS: add slice project logic + //BBS: add slice project logic if (m_slice_all && (m_cur_slice_plate < (partplate_list.get_plate_count() - 1))) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ - << boost::format("slicing all, finished plate %1%, will continue next.") % m_cur_slice_plate; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format("slicing all, finished plate %1%, will continue next.")%m_cur_slice_plate; return; } @@ -12529,10 +12457,11 @@ void Plater::priv::on_slicing_completed(wxCommandEvent& evt) delayed_scene_refresh = true; else { if (this->printer_technology == ptFFF) { - // BBS: only reload shells + //BBS: only reload shells this->update_fff_scene_only_shells(false); - // this->update_fff_scene(); - } else + //this->update_fff_scene(); + } + else this->update_sla_scene(); } BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format("exit."); @@ -12562,8 +12491,8 @@ void Plater::priv::on_slicing_began() clear_warnings(); notification_manager->close_notification_of_type(NotificationType::SignDetected); notification_manager->close_notification_of_type(NotificationType::ExportFinished); - bool is_first_plate = m_cur_slice_plate == 0; - bool slice_all = q->m_only_gcode ? m_slice_all_only_has_gcode : m_slice_all; + bool is_first_plate = m_cur_slice_plate == 0; + bool slice_all = q->m_only_gcode ? m_slice_all_only_has_gcode : m_slice_all; bool need_change_dailytips = !(slice_all && !is_first_plate); notification_manager->set_slicing_progress_began(); notification_manager->update_slicing_notif_dailytips(need_change_dailytips); @@ -12572,7 +12501,8 @@ void Plater::priv::add_warning(const Slic3r::PrintStateBase::Warning& warning, s { for (auto& it : current_warnings) { if (warning.message_id == it.first.message_id) { - if (warning.message_id != 0 || (warning.message_id == 0 && warning.message == it.first.message)) { + if (warning.message_id != 0 || (warning.message_id == 0 && warning.message == it.first.message)) + { if (warning.message_id != 0) it.first.message = warning.message; return; @@ -12581,7 +12511,7 @@ void Plater::priv::add_warning(const Slic3r::PrintStateBase::Warning& warning, s } current_warnings.emplace_back(std::pair(warning, oid)); } -void Plater::priv::actualize_slicing_warnings(const PrintBase& print) +void Plater::priv::actualize_slicing_warnings(const PrintBase &print) { std::vector ids = print.print_object_ids(); if (ids.empty()) { @@ -12596,7 +12526,8 @@ void Plater::priv::actualize_slicing_warnings(const PrintBase& print) void Plater::priv::actualize_object_warnings(const PrintBase& print) { std::vector ids; - for (const ModelObject* object : print.model().objects) { + for (const ModelObject* object : print.model().objects ) + { ids.push_back(object->id()); } std::sort(ids.begin(), ids.end()); @@ -12620,29 +12551,31 @@ bool Plater::priv::warnings_dialog() else text += it.first.message; } - // text += "\n\nDo you still wish to export?"; + //text += "\n\nDo you still wish to export?"; MessageDialog msg_window(this->q, from_u8(text), _L("warnings"), wxOK); - const auto res = msg_window.ShowModal(); + const auto res = msg_window.ShowModal(); return res == wxID_OK; + } -// BBS: add project slice logic -void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) +//BBS: add project slice logic +void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, m_ignore_event %1%, status %2%") % m_ignore_event % evt.status(); - // BBS:ignore cancel event for some special case - if (m_ignore_event) { + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, m_ignore_event %1%, status %2%")%m_ignore_event %evt.status(); + //BBS:ignore cancel event for some special case + if (m_ignore_event) + { m_ignore_event = false; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": ignore this event %1%") % evt.status(); return; } - // BBS: add project slice logic + //BBS: add project slice logic bool is_finished = !m_slice_all || (m_cur_slice_plate == (partplate_list.get_plate_count() - 1)); - // BBS: slice .gcode.3mf file related logic, assign is_finished again + //BBS: slice .gcode.3mf file related logic, assign is_finished again bool only_has_gcode_need_preview = false; - auto plate_list = this->partplate_list.get_plate_list(); - bool has_print_instances = false; + auto plate_list = this->partplate_list.get_plate_list(); + bool has_print_instances = false; for (auto plate : plate_list) has_print_instances = has_print_instances || plate->has_printable_instances(); if (this->model.objects.empty() && !has_print_instances) @@ -12675,26 +12608,25 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) notification_manager->set_slicing_progress_hidden(); } } else { - std::vector ptrs; - for (auto oid : message.second) { - const PrintObject* print_object = this->background_process.m_fff_print->get_object(ObjectID(oid)); - if (print_object) { - ptrs.push_back(print_object->model_object()); - } + std::vector ptrs; + for (auto oid : message.second) + { + const PrintObject *print_object = this->background_process.m_fff_print->get_object(ObjectID(oid)); + if (print_object) { ptrs.push_back(print_object->model_object()); } } notification_manager->push_slicing_error_notification(message.first, ptrs); } - if (evt.invalidate_plater()) { + if (evt.invalidate_plater()) + { // BBS #if 0 const wxString invalid_str = _L("Invalid data"); for (auto btn : { ActionButtonType::abReslice, ActionButtonType::abSendGCode, ActionButtonType::abExport }) sidebar->set_btn_label(btn, invalid_str); #endif - process_completed_with_error = partplate_list.get_curr_plate_index(); - ; + process_completed_with_error = partplate_list.get_curr_plate_index();; } - has_error = true; + has_error = true; is_finished = true; } if (evt.cancelled()) { @@ -12703,11 +12635,11 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) is_finished = true; } - // BBS: set the current plater's slice result to valid + //BBS: set the current plater's slice result to valid if (!this->background_process.empty()) this->background_process.get_current_plate()->update_slice_result_valid_state(evt.success()); - // BBS: update the action button according to the current plate's status + //BBS: update the action button according to the current plate's status bool ready_to_slice = !this->partplate_list.get_curr_plate()->is_slice_result_valid(); // BBS @@ -12718,8 +12650,8 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) // This updates the "Slice now", "Export G-code", "Arrange" buttons status. // Namely, it refreshes the "Out of print bed" property of all the ModelObjects, and it enables // the "Slice now" and "Export G-code" buttons based on their "out of bed" status. - // BBS: remove this update here, will be updated in update_fff_scene later - // this->object_list_changed(); + //BBS: remove this update here, will be updated in update_fff_scene later + //this->object_list_changed(); // refresh preview if (view3D->is_dragging()) // updating scene now would interfere with the gizmo dragging @@ -12728,27 +12660,28 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) if (this->printer_technology == ptFFF) { if (is_finished) this->update_fff_scene(); - } else + } + else this->update_sla_scene(); } - // BBS: add slice&&print status update logic + //BBS: add slice&&print status update logic if (evt.cancelled()) { /*if (wxGetApp().get_mode() == comSimple) sidebar->set_btn_label(ActionButtonType::abReslice, "Slice now"); show_action_buttons(true);*/ ready_to_slice = true; - // this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, true, true); + //this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, true, true); - // BBS + //BBS if (m_is_publishing) { m_publish_dlg->cancel(); } } else { - if ((ready_to_slice) || (wxGetApp().get_mode() == comSimple)) { - // this means the current plate is not the slicing plate - // show_action_buttons(ready_to_slice); - // this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true); + if((ready_to_slice) || (wxGetApp().get_mode() == comSimple)) { + //this means the current plate is not the slicing plate + //show_action_buttons(ready_to_slice); + //this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true); } if (exporting_status != ExportingStatus::NOT_EXPORTING && !has_error) { notification_manager->stop_delayed_notifications_of_type(NotificationType::ExportOngoing); @@ -12756,14 +12689,14 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) } // If writing to removable drive was scheduled, show notification with eject button if (exporting_status == ExportingStatus::EXPORTING_TO_REMOVABLE && !has_error) { - // show_action_buttons(ready_to_slice); + //show_action_buttons(ready_to_slice); this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true); - notification_manager - ->push_exporting_finished_notification(last_output_path, last_output_dir_path, - // Don't offer the "Eject" button on ChromeOS, the Linux side has no control over it. - platform_flavor() != PlatformFlavor::LinuxOnChromium); + notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, + // Don't offer the "Eject" button on ChromeOS, the Linux side has no control over it. + platform_flavor() != PlatformFlavor::LinuxOnChromium); wxGetApp().removable_drive_manager()->set_exporting_finished(true); - } else if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error) + }else + if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error) notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, false); // BBS, Generate calibration thumbnail for current plate @@ -12773,19 +12706,20 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) preview->reload_print(); ThumbnailData* calibration_data = &partplate_list.get_curr_plate()->cali_thumbnail_data; const ThumbnailsParams calibration_params = { {}, false, true, true, true, partplate_list.get_curr_plate_index() }; - generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, - calibration_params); preview->get_canvas3d()->reset_gcode_toolpaths();*/ + generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, calibration_params); + preview->get_canvas3d()->reset_gcode_toolpaths();*/ // generate bbox data PlateBBoxData* plate_bbox_data = &partplate_list.get_curr_plate()->cali_bboxes_data; - *plate_bbox_data = generate_first_layer_bbox(); + *plate_bbox_data = generate_first_layer_bbox(); } } exporting_status = ExportingStatus::NOT_EXPORTING; + // BBS stop publishing if error occur - // if (m_is_publishing) { + //if (m_is_publishing) { // GCodeProcessorResult *gcode_result = background_process.get_current_gcode_result(); // m_publish_dlg->UpdateStatus(_L("Error occurred during slicing"), -1, false); // // if toolpath is outside @@ -12794,7 +12728,9 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) // } //} - if (is_finished) { + + if (is_finished) + { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":finished, reload print soon"); m_is_slicing = false; this->preview->reload_print(false); @@ -12810,9 +12746,10 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) } } q->SetDropTarget(new PlaterDropTarget(*main_frame, *q)); - } else { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(":slicing all, plate %1% finished, start next slice...") % m_cur_slice_plate; + } + else + { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":slicing all, plate %1% finished, start next slice...")%m_cur_slice_plate; m_cur_slice_plate++; q->Freeze(); @@ -12820,11 +12757,10 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) partplate_list.select_plate_view(); int ret = q->start_next_slice(); if (ret) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(":slicing all, plate %1% can not be sliced, will stop") % m_cur_slice_plate; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":slicing all, plate %1% can not be sliced, will stop")%m_cur_slice_plate; m_is_slicing = false; } - // not the last plate + //not the last plate update_fff_scene_only_shells(); q->Thaw(); if (m_is_publishing) { @@ -12846,13 +12782,13 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent& evt) void Plater::priv::on_action_add(SimpleEvent&) { if (q != nullptr) { - // q->add_model(); - // BBS open file in toolbar add + //q->add_model(); + //BBS open file in toolbar add q->add_file(); } } -// BBS: add plate from toolbar +//BBS: add plate from toolbar void Plater::priv::on_action_add_plate(SimpleEvent&) { if (q != nullptr) { @@ -12863,22 +12799,22 @@ void Plater::priv::on_action_add_plate(SimpleEvent&) update(); // BBS set default view - // q->get_camera().select_view("topfront"); + //q->get_camera().select_view("topfront"); q->get_camera().requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; } } -// BBS: remove plate from toolbar +//BBS: remove plate from toolbar void Plater::priv::on_action_del_plate(SimpleEvent&) { if (q != nullptr) { q->delete_plate(); - // q->get_camera().select_view("topfront"); - // q->get_camera().requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; + //q->get_camera().select_view("topfront"); + //q->get_camera().requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; } } -// BBS: GUI refactor: GLToolbar +//BBS: GUI refactor: GLToolbar void Plater::priv::on_action_open_project(SimpleEvent&) { if (q != nullptr) { @@ -12886,16 +12822,16 @@ void Plater::priv::on_action_open_project(SimpleEvent&) } } -// BBS: GUI refactor: slice plate +//BBS: GUI refactor: slice plate void Plater::priv::on_action_slice_plate(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received slice plate event\n"; - // BBS update extruder params and speed table before slicing + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received slice plate event\n" ; + //BBS update extruder params and speed table before slicing const Slic3r::DynamicPrintConfig& config = wxGetApp().preset_bundle->full_config(); - auto& print = q->get_partplate_list().get_current_fff_print(); - auto print_config = print.config(); - int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); + auto& print = q->get_partplate_list().get_current_fff_print(); + auto print_config = print.config(); + int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); Model::setExtruderParams(config, numExtruders); Model::setPrintSpeedTable(config, print_config); @@ -12905,33 +12841,33 @@ void Plater::priv::on_action_slice_plate(SimpleEvent&) } } -// BBS: GUI refactor: slice all +//BBS: GUI refactor: slice all void Plater::priv::on_action_slice_all(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received slice project event\n"; - // BBS update extruder params and speed table before slicing + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received slice project event\n" ; + //BBS update extruder params and speed table before slicing const Slic3r::DynamicPrintConfig& config = wxGetApp().preset_bundle->full_config(); - auto& print = q->get_partplate_list().get_current_fff_print(); - auto print_config = print.config(); - int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); + auto& print = q->get_partplate_list().get_current_fff_print(); + auto print_config = print.config(); + int numExtruders = wxGetApp().preset_bundle->filament_presets.size(); Model::setExtruderParams(config, numExtruders); Model::setPrintSpeedTable(config, print_config); - m_slice_all = true; + m_slice_all = true; m_slice_all_only_has_gcode = true; - m_cur_slice_plate = 0; - // select plate + m_cur_slice_plate = 0; + //select plate q->select_plate(m_cur_slice_plate); q->reslice(); if (!m_is_publishing) q->select_view_3D("Preview"); - // BBS: wish to select all plates stats item + //BBS: wish to select all plates stats item preview->get_canvas3d()->_update_select_plate_toolbar_stats_item(true); } } -void Plater::priv::on_action_publish(wxCommandEvent& event) +void Plater::priv::on_action_publish(wxCommandEvent &event) { if (q != nullptr) { if (event.GetInt() == EVT_PUBLISHING_START) { @@ -12961,7 +12897,7 @@ void Plater::priv::on_action_publish(wxCommandEvent& event) void Plater::priv::on_action_print_plate(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print plate event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print plate event\n" ; } PresetBundle& preset_bundle = *wxGetApp().preset_bundle; @@ -12996,7 +12932,7 @@ void Plater::priv::on_action_print_plate_from_sdcard(SimpleEvent&) BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print plate event\n"; } - // BBS + //BBS open_machine_select_dialog(0, PrintFromType::FROM_SDCARD_VIEW); } @@ -13015,11 +12951,12 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) return; } const wxString new_name = main_frame->m_tabpanel->GetPageName(new_sel); - sidebar_layout.show = new_name == TAB_ID_PREPARE || new_name == TAB_ID_PREVIEW; + sidebar_layout.show = new_name == TAB_ID_PREPARE || new_name == TAB_ID_PREVIEW; update_sidebar(); - int old_sel = e.GetOldSelection(); - const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); - const bool use_native_device_tab = wxGetApp().preset_bundle && (wxGetApp().preset_bundle->use_bbl_device_tab() || use_printer_agents); + int old_sel = e.GetOldSelection(); + const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); + const bool use_native_device_tab = wxGetApp().preset_bundle && + (wxGetApp().preset_bundle->use_bbl_device_tab() || use_printer_agents); if (use_native_device_tab && new_name == TAB_ID_MONITOR) { // BBL network module is only required for BBL-vendor printers. // Non-BBL Python plugins (e.g. moonraker) drive the Device tab without it. @@ -13036,12 +12973,12 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) // while the native Device tab holds TAB_ID_MONITOR, and in legacy-web mode it holds // TAB_ID_MONITOR itself. const bool selecting_web_device_tab = main_frame->m_printer_view && - main_frame->m_tabpanel->GetPage(new_sel) == main_frame->m_printer_view; + main_frame->m_tabpanel->GetPage(new_sel) == main_frame->m_printer_view; if (selecting_web_device_tab) { // Use the selected discovered machine when the preset has no host. main_frame->load_printer_url(); } else if (new_name == TAB_ID_MONITOR && wxGetApp().preset_bundle != nullptr) { - auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; wxString url = from_u8(PrintHost::get_print_host_webui(&cfg)); if (main_frame->m_printer_view && url.empty()) { // It's missing_connection page, reload so that we can replay the gif image @@ -13051,34 +12988,30 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) } } -int Plater::priv::update_print_required_data(Slic3r::DynamicPrintConfig config, - Slic3r::Model model, - Slic3r::PlateDataPtrs plate_data_list, - std::string file_name, - std::string file_path) +int Plater::priv::update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path) { - if (!m_select_machine_dlg) - m_select_machine_dlg = new SelectMachineDialog(q); + if (!m_select_machine_dlg) m_select_machine_dlg = new SelectMachineDialog(q); return m_select_machine_dlg->update_print_required_data(config, model, plate_data_list, file_name, file_path); } void Plater::priv::on_action_send_to_printer(bool isall) { - if (!m_send_to_sdcard_dlg) - m_send_to_sdcard_dlg = new SendToPrinterDialog(q); + if (!m_send_to_sdcard_dlg) m_send_to_sdcard_dlg = new SendToPrinterDialog(q); if (isall) { m_send_to_sdcard_dlg->prepare(PLATE_ALL_IDX); - } else { + } + else { m_send_to_sdcard_dlg->prepare(partplate_list.get_curr_plate_index()); } - m_send_to_sdcard_dlg->ShowModal(); + m_send_to_sdcard_dlg->ShowModal(); } -void Plater::priv::on_action_select_sliced_plate(wxCommandEvent& evt) + +void Plater::priv::on_action_select_sliced_plate(wxCommandEvent &evt) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received select sliced plate event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received select sliced plate event\n" ; } bool skip_zoom = evt.GetExtraLong() == 1; q->select_sliced_plate(evt.GetInt(), skip_zoom); @@ -13087,7 +13020,7 @@ void Plater::priv::on_action_select_sliced_plate(wxCommandEvent& evt) void Plater::priv::on_action_print_all(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print all event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received print all event\n" ; } PresetBundle& preset_bundle = *wxGetApp().preset_bundle; @@ -13101,7 +13034,7 @@ void Plater::priv::on_action_print_all(SimpleEvent&) void Plater::priv::on_action_export_gcode(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export gcode event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export gcode event\n" ; q->export_gcode(false); } } @@ -13109,7 +13042,7 @@ void Plater::priv::on_action_export_gcode(SimpleEvent&) void Plater::priv::on_action_send_gcode(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export gcode event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export gcode event\n" ; q->send_gcode_legacy(); } } @@ -13117,12 +13050,12 @@ void Plater::priv::on_action_send_gcode(SimpleEvent&) void Plater::priv::on_action_export_sliced_file(SimpleEvent&) { if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export sliced file event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export sliced file event\n" ; q->export_gcode_3mf(); } } -void Plater::priv::on_action_export_all_sliced_file(SimpleEvent&) +void Plater::priv::on_action_export_all_sliced_file(SimpleEvent &) { if (q != nullptr) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export all sliced file event\n"; @@ -13132,10 +13065,10 @@ void Plater::priv::on_action_export_all_sliced_file(SimpleEvent&) void Plater::priv::on_action_export_to_sdcard(SimpleEvent&) { - if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export sliced file event\n"; - q->send_to_printer(); - } + if (q != nullptr) { + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received export sliced file event\n"; + q->send_to_printer(); + } } void Plater::priv::on_action_export_to_sdcard_all(SimpleEvent&) @@ -13146,16 +13079,16 @@ void Plater::priv::on_action_export_to_sdcard_all(SimpleEvent&) } } -// BBS: add plate select logic +//BBS: add plate select logic void Plater::priv::on_plate_selected(SimpleEvent&) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received plate selected event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received plate selected event\n" ; sidebar->obj_list()->on_plate_selected(partplate_list.get_curr_plate_index()); } void Plater::priv::on_action_request_model_id(wxCommandEvent& evt) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received import model id event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received import model id event\n" ; if (q != nullptr) { q->import_model_id(evt.GetString()); } @@ -13163,23 +13096,29 @@ void Plater::priv::on_action_request_model_id(wxCommandEvent& evt) void Plater::priv::on_action_download_project(wxCommandEvent& evt) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received download project event\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received download project event\n" ; if (q != nullptr) { q->download_project(evt.GetString()); } } -// BBS: add slice button status update logic +//BBS: add slice button status update logic void Plater::priv::on_slice_button_status(bool enable) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": enable = " << enable << "\n"; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": enable = "<update_slice_print_status(MainFrame::eEventObjectUpdate, enable); } -void Plater::priv::on_action_split_objects(SimpleEvent&) { split_object(); } +void Plater::priv::on_action_split_objects(SimpleEvent&) +{ + split_object(); +} -void Plater::priv::on_action_split_volumes(SimpleEvent&) { split_volume(); } +void Plater::priv::on_action_split_volumes(SimpleEvent&) +{ + split_volume(); +} void Plater::priv::on_object_select(SimpleEvent& evt) { @@ -13190,13 +13129,16 @@ void Plater::priv::on_object_select(SimpleEvent& evt) selection_changed(); } -// BBS: repair model through cgal -void Plater::priv::on_repair_model(wxCommandEvent& event) { wxGetApp().obj_list()->fix_through_cgal(); } - -void Plater::priv::on_filament_color_changed(wxCommandEvent& event) +//BBS: repair model through cgal +void Plater::priv::on_repair_model(wxCommandEvent &event) { - // q->update_all_plate_thumbnails(true); - // q->get_preview_canvas3D()->update_plate_thumbnails(); + wxGetApp().obj_list()->fix_through_cgal(); +} + +void Plater::priv::on_filament_color_changed(wxCommandEvent &event) +{ + //q->update_all_plate_thumbnails(true); + //q->get_preview_canvas3D()->update_plate_thumbnails(); int modify_id = event.GetInt(); auto& ams_multi_color_filment = wxGetApp().preset_bundle->ams_multi_color_filment; @@ -13211,17 +13153,17 @@ void Plater::priv::on_filament_color_changed(wxCommandEvent& event) sidebar->update_mixed_filament_list(); } -void Plater::priv::install_network_plugin(wxCommandEvent& event) +void Plater::priv::install_network_plugin(wxCommandEvent &event) { wxGetApp().ShowDownNetPluginDlg(); return; } -void Plater::priv::update_plugin_when_launch(wxCommandEvent& event) +void Plater::priv::update_plugin_when_launch(wxCommandEvent &event) { std::string data_dir_str = data_dir(); boost::filesystem::path data_dir_path(data_dir_str); - auto cache_folder = data_dir_path / "ota"; + auto cache_folder = data_dir_path / "ota"; std::string changelog_file = cache_folder.string() + "/plugins/network_plugins.json"; UpdatePluginDialog dlg(wxGetApp().mainframe); @@ -13229,8 +13171,7 @@ void Plater::priv::update_plugin_when_launch(wxCommandEvent& event) auto result = dlg.ShowModal(); auto app_config = wxGetApp().app_config; - if (!app_config) - return; + if (!app_config) return; if (result == wxID_OK) { // Apply the downloaded update right away and hot-reload the plug-in, the same @@ -13241,36 +13182,32 @@ void Plater::priv::update_plugin_when_launch(wxCommandEvent& event) notification_manager->close_notification_of_type(NotificationType::BBLPluginUpdateAvailable); app_config->set("update_network_plugin", "false"); if (wxGetApp().hot_reload_network_plugin()) { - MessageDialog dlg_ok(wxGetApp().mainframe, _L("Network plug-in switched successfully."), _L("Success"), - wxOK | wxICON_INFORMATION); + MessageDialog dlg_ok(wxGetApp().mainframe, _L("Network plug-in switched successfully."), _L("Success"), wxOK | wxICON_INFORMATION); dlg_ok.ShowModal(); } else { - MessageDialog dlg_fail(wxGetApp().mainframe, _L("Failed to load network plug-in. Please restart the application."), - _L("Restart Required"), wxOK | wxICON_WARNING); + MessageDialog dlg_fail(wxGetApp().mainframe, _L("Failed to load network plug-in. Please restart the application."), _L("Restart Required"), wxOK | wxICON_WARNING); dlg_fail.ShowModal(); } } else { app_config->set("update_network_plugin", had_cache ? "true" : "false"); } - } else if (result == wxID_NO) { + } + else if (result == wxID_NO) { app_config->set("update_network_plugin", "false"); } } -void Plater::priv::show_install_plugin_hint(wxCommandEvent& event) +void Plater::priv::show_install_plugin_hint(wxCommandEvent &event) { - notification_manager->bbl_show_plugin_install_notification( - into_u8(_L("The network plug-in was not detected. Network related features are unavailable."))); + notification_manager->bbl_show_plugin_install_notification(into_u8(_L("The network plug-in was not detected. Network related features are unavailable."))); } -void Plater::priv::show_preview_only_hint(wxCommandEvent& event) +void Plater::priv::show_preview_only_hint(wxCommandEvent &event) { - notification_manager->bbl_show_preview_only_notification( - into_u8(_L("Preview only mode:\nThe loaded file contains G-code only, cannot enter the Prepare page."))); + notification_manager->bbl_show_preview_only_notification(into_u8(_L("Preview only mode:\nThe loaded file contains G-code only, cannot enter the Prepare page."))); } -void Plater::priv::on_apple_change_color_mode(wxSysColourChangedEvent& evt) -{ +void Plater::priv::on_apple_change_color_mode(wxSysColourChangedEvent& evt) { m_is_dark = wxSystemSettings::GetAppearance().IsDark(); if (view3D->get_canvas3d() && view3D->get_canvas3d()->is_initialized()) { view3D->get_canvas3d()->on_change_color_mode(m_is_dark); @@ -13281,25 +13218,22 @@ void Plater::priv::on_apple_change_color_mode(wxSysColourChangedEvent& evt) apply_color_mode(); } -void Plater::priv::on_change_color_mode(SimpleEvent& evt) -{ +void Plater::priv::on_change_color_mode(SimpleEvent& evt) { m_is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; sidebar->on_change_color_mode(m_is_dark); view3D->get_canvas3d()->on_change_color_mode(m_is_dark); preview->get_canvas3d()->on_change_color_mode(m_is_dark); assemble_view->get_canvas3d()->on_change_color_mode(m_is_dark); - if (m_send_to_sdcard_dlg) - m_send_to_sdcard_dlg->on_change_color_mode(); + if (m_send_to_sdcard_dlg) m_send_to_sdcard_dlg->on_change_color_mode(); apply_color_mode(); } void Plater::priv::apply_color_mode() { - const bool is_dark = wxGetApp().dark_mode(); - wxColour orca_color = wxColour(59, 68, - 70); // wxColour(ColorRGBA::ORCA().r_uchar(), ColorRGBA::ORCA().g_uchar(), ColorRGBA::ORCA().b_uchar()); - orca_color = is_dark ? StateColor::darkModeColorFor(orca_color) : StateColor::lightModeColorFor(orca_color); + const bool is_dark = wxGetApp().dark_mode(); + wxColour orca_color = wxColour(59, 68, 70);//wxColour(ColorRGBA::ORCA().r_uchar(), ColorRGBA::ORCA().g_uchar(), ColorRGBA::ORCA().b_uchar()); + orca_color = is_dark ? StateColor::darkModeColorFor(orca_color) : StateColor::lightModeColorFor(orca_color); wxColour sash_color = is_dark ? wxColour(38, 46, 48) : wxColour(206, 206, 206); m_aui_mgr.GetArtProvider()->SetColour(wxAUI_DOCKART_INACTIVE_CAPTION_COLOUR, sash_color); m_aui_mgr.GetArtProvider()->SetColour(wxAUI_DOCKART_INACTIVE_CAPTION_TEXT_COLOUR, *wxWHITE); @@ -13307,8 +13241,7 @@ void Plater::priv::apply_color_mode() m_aui_mgr.GetArtProvider()->SetColour(wxAUI_DOCKART_BORDER_COLOUR, is_dark ? *wxBLACK : wxColour(165, 165, 165)); } -static void get_position(wxWindowBase* child, wxWindowBase* until_parent, int& x, int& y) -{ +static void get_position(wxWindowBase* child, wxWindowBase* until_parent, int& x, int& y) { int res_x = 0, res_y = 0; while (child != until_parent && child != nullptr) { @@ -13324,7 +13257,7 @@ static void get_position(wxWindowBase* child, wxWindowBase* until_parent, int& x y = res_y; } -void Plater::priv::show_right_click_menu(Vec2d mouse_position, wxMenu* menu) +void Plater::priv::show_right_click_menu(Vec2d mouse_position, wxMenu *menu) { // BBS: GUI refactor: move sidebar to the left int x, y; @@ -13335,7 +13268,7 @@ void Plater::priv::show_right_click_menu(Vec2d mouse_position, wxMenu* menu) // specified (even though the position is sane). position = wxDefaultPosition; #endif - GLCanvas3D& canvas = *q->canvas3D(); + GLCanvas3D &canvas = *q->canvas3D(); canvas.apply_retina_scale(mouse_position); canvas.set_popup_menu_position(mouse_position); q->PopupMenu(menu, position); @@ -13348,19 +13281,22 @@ void Plater::priv::on_right_click(RBtnEvent& evt) wxMenu* menu = nullptr; - if (obj_idx == -1) { // no one or several object are selected - if (evt.data.second) { // right button was clicked on empty space + if (obj_idx == -1) { // no one or several object are selected + if (evt.data.second) { // right button was clicked on empty space if (!get_selection().is_empty()) // several objects are selected in 3DScene return; menu = menus.default_menu(); - } else { + } + else { if (current_panel == assemble_view) { menu = menus.assemble_multi_selection_menu(); - } else { + } + else { menu = menus.multi_selection_menu(); } } - } else { + } + else { // If in 3DScene is(are) selected volume(s), but right button was clicked on empty space if (evt.data.second) return; @@ -13374,24 +13310,24 @@ void Plater::priv::on_right_click(RBtnEvent& evt) else { const Selection& selection = get_selection(); // show "Object menu" for each one or several FullInstance instead of FullObject - const bool is_some_full_instances = selection.is_single_full_instance() || selection.is_single_full_object() || + const bool is_some_full_instances = selection.is_single_full_instance() || + selection.is_single_full_object() || selection.is_multiple_full_instance(); - const bool is_part = selection.is_single_volume() || selection.is_single_modifier(); + const bool is_part = selection.is_single_volume() || selection.is_single_modifier(); - // BBS get assemble view menu + //BBS get assemble view menu if (current_panel == assemble_view) { - menu = is_some_full_instances ? menus.assemble_object_menu() : - is_part ? menus.assemble_part_menu() : - menus.assemble_multi_selection_menu(); + menu = is_some_full_instances ? menus.assemble_object_menu() : + is_part ? menus.assemble_part_menu() : menus.assemble_multi_selection_menu(); } else { if (is_some_full_instances) menu = printer_technology == ptSLA ? menus.sla_object_menu() : menus.object_menu(); else if (is_part) { - const GLVolume* gl_volume = selection.get_first_volume(); - const ModelVolume* model_volume = get_model_volume(*gl_volume, selection.get_model()->objects); - menu = (model_volume != nullptr && model_volume->is_text()) ? menus.text_part_menu() : - (model_volume != nullptr && model_volume->is_svg()) ? menus.svg_part_menu() : - menus.part_menu(); + const GLVolume* gl_volume = selection.get_first_volume(); + const ModelVolume *model_volume = get_model_volume(*gl_volume, selection.get_model()->objects); + menu = (model_volume != nullptr && model_volume->is_text()) ? menus.text_part_menu() : + (model_volume != nullptr && model_volume->is_svg()) ? menus.svg_part_menu() : + menus.part_menu(); } else menu = menus.multi_selection_menu(); } @@ -13403,10 +13339,10 @@ void Plater::priv::on_right_click(RBtnEvent& evt) } } -// BBS: add part plate related logic +//BBS: add part plate related logic void Plater::priv::on_plate_right_click(RBtnPlateEvent& evt) { - wxMenu* menu = menus.plate_menu(); + wxMenu *menu = menus.plate_menu(); show_right_click_menu(evt.data.first, menu); } @@ -13415,7 +13351,10 @@ void Plater::priv::on_update_geometry(Vec3dsEvent<2>&) // TODO } -void Plater::priv::on_3dcanvas_mouse_dragging_started(SimpleEvent&) { view3D->get_canvas3d()->reset_sequential_print_clearance(); } +void Plater::priv::on_3dcanvas_mouse_dragging_started(SimpleEvent&) +{ + view3D->get_canvas3d()->reset_sequential_print_clearance(); +} // Update the scene from the background processing, // if the update message was received during mouse manipulation. @@ -13426,21 +13365,23 @@ void Plater::priv::on_3dcanvas_mouse_dragging_finished(SimpleEvent&) update_sla_scene(); } - // partplate_list.reload_all_objects(); + //partplate_list.reload_all_objects(); } -// BBS: add plate id for thumbnail generate param -void Plater::priv::generate_thumbnail(ThumbnailData& data, - unsigned int w, - unsigned int h, - const ThumbnailsParams& thumbnail_params, - Camera::EType camera_type, - Camera::ViewAngleType camera_view_angle_type, - bool for_picking, - bool ban_light) -{ view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type, camera_view_angle_type, for_picking, ban_light); } +//BBS: add plate id for thumbnail generate param +void Plater::priv::generate_thumbnail(ThumbnailData & data, + unsigned int w, + unsigned int h, + const ThumbnailsParams &thumbnail_params, + Camera::EType camera_type, + Camera::ViewAngleType camera_view_angle_type, + bool for_picking, + bool ban_light) +{ + view3D->get_canvas3d()->render_thumbnail(data, w, h, thumbnail_params, camera_type, camera_view_angle_type, for_picking, ban_light); +} -// BBS: add plate id for thumbnail generate param +//BBS: add plate id for thumbnail generate param ThumbnailsList Plater::priv::generate_thumbnails(const ThumbnailsParams& params, Camera::EType camera_type) { ThumbnailsList thumbnails; @@ -13459,48 +13400,49 @@ PlateBBoxData Plater::priv::generate_first_layer_bbox() PlateBBoxData bboxdata; std::vector& id_bboxes = bboxdata.bbox_objs; BoundingBoxf bbox_all; - auto print = this->background_process.m_fff_print; - auto curr_plate = this->partplate_list.get_curr_plate(); - auto curr_plate_seq = curr_plate->get_real_print_seq(); - bboxdata.is_seq_print = (curr_plate_seq == PrintSequence::ByObject); - bboxdata.first_extruder = print->get_tool_ordering().first_extruder(); - bboxdata.bed_type = bed_type_to_gcode_string(print->config().curr_bed_type.value); + auto print = this->background_process.m_fff_print; + auto curr_plate = this->partplate_list.get_curr_plate(); + auto curr_plate_seq = curr_plate->get_real_print_seq(); + bboxdata.is_seq_print = (curr_plate_seq == PrintSequence::ByObject); + bboxdata.first_extruder = print->get_tool_ordering().first_extruder(); + bboxdata.bed_type = bed_type_to_gcode_string(print->config().curr_bed_type.value); bboxdata.first_layer_time = partplate_list.get_curr_plate()->get_slice_result()->initial_layer_time; // get nozzle diameter auto opt_nozzle_diameters = print->config().option("nozzle_diameter"); if (opt_nozzle_diameters != nullptr) bboxdata.nozzle_diameter = float(opt_nozzle_diameters->get_at(bboxdata.first_extruder)); - // PrintObjectPtrs objects; - // if (this->printer_technology == ptFFF) { - // objects = this->background_process.m_fff_print->objects().vector(); - // } - // else { - // objects = this->background_process.m_sla_print->objects(); - // } + //PrintObjectPtrs objects; + //if (this->printer_technology == ptFFF) { + // objects = this->background_process.m_fff_print->objects().vector(); + //} + //else { + // objects = this->background_process.m_sla_print->objects(); + //} auto objects = print->objects(); - auto orig = this->partplate_list.get_curr_plate()->get_origin(); - Vec2d orig2d = {orig[0], orig[1]}; + auto orig = this->partplate_list.get_curr_plate()->get_origin(); + Vec2d orig2d = { orig[0], orig[1] }; BBoxData data; - for (auto obj : objects) { + for (auto obj : objects) + { auto bb_scaled = obj->get_first_layer_bbox(data.area, data.layer_height, data.name); - auto bb = unscaled(bb_scaled); + auto bb = unscaled(bb_scaled); bb.min -= orig2d; bb.max -= orig2d; bbox_all.merge(bb); data.area *= (SCALING_FACTOR * SCALING_FACTOR); // unscale area - data.id = obj->id().id; - data.bbox = {bb.min.x(), bb.min.y(), bb.max.x(), bb.max.y()}; + data.id = obj->id().id; + data.bbox = { bb.min.x(),bb.min.y(),bb.max.x(),bb.max.y() }; id_bboxes.emplace_back(data); } // add wipe tower bounding box if (print->has_wipe_tower()) { - auto wt_corners = print->first_layer_wipe_tower_corners(); + auto wt_corners = print->first_layer_wipe_tower_corners(); // when loading gcode.3mf, wipe tower info may not be correct if (!wt_corners.empty()) { BoundingBox bb_scaled = {wt_corners[0], wt_corners[2]}; - auto bb = unscaled(bb_scaled); + auto bb = unscaled(bb_scaled); bb.min -= orig2d; bb.max -= orig2d; bbox_all.merge(bb); @@ -13511,7 +13453,7 @@ PlateBBoxData Plater::priv::generate_first_layer_bbox() } } - bboxdata.bbox_all = {bbox_all.min.x(), bbox_all.min.y(), bbox_all.max.x(), bbox_all.max.y()}; + bboxdata.bbox_all = { bbox_all.min.x(),bbox_all.min.y(),bbox_all.max.x(),bbox_all.max.y() }; return bboxdata; } @@ -13540,8 +13482,7 @@ wxString Plater::priv::get_export_gcode_filename(const wxString& extension, bool auto full_filename = m_project_folder / std::string((m_project_name + extension).mb_str(wxConvUTF8)); return from_path(full_filename); } else { - auto full_filename = m_project_folder / - std::string((m_project_name + from_u8(plate_index_str) + extension).mb_str(wxConvUTF8)); + auto full_filename = m_project_folder / std::string((m_project_name + from_u8(plate_index_str) + extension).mb_str(wxConvUTF8)); return from_path(full_filename); } } else { @@ -13552,26 +13493,30 @@ wxString Plater::priv::get_export_gcode_filename(const wxString& extension, bool } } else { if (only_filename) { - if (!model.objects.empty() && m_project_name == _L("Untitled")) + if(!model.objects.empty() && m_project_name == _L("Untitled")) return wxString(fs::path(model.objects.front()->name).replace_extension().c_str()) + from_u8(plate_index_str) + extension; if (export_all) return m_project_name + extension; else return m_project_name + from_u8(plate_index_str) + extension; - } else + } + else return ""; } } -wxString Plater::priv::get_project_name() { return m_project_name; } +wxString Plater::priv::get_project_name() +{ + return m_project_name; +} -// BBS +//BBS void Plater::priv::set_project_name(const wxString& project_name) { BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project is:" << project_name; m_project_name = project_name; - // update topbar title + //update topbar title #ifdef __APPLE__ wxGetApp().mainframe->SetTitle(m_project_name); if (!m_project_name.IsEmpty()) @@ -13599,30 +13544,30 @@ void Plater::priv::update_title_dirty_status() #else wxGetApp().mainframe->SetTitle(title + " - OrcaSlicer"); wxGetApp().mainframe->topbar()->SetTitle(title); -#endif +#endif } void Plater::priv::set_project_filename(const wxString& filename) { boost::filesystem::path full_path = into_path(filename); - boost::filesystem::path ext = full_path.extension(); - // if (boost::iequals(ext.string(), ".amf")) { - // // Remove the first extension. - // full_path.replace_extension(""); - // // It may be ".zip.amf". - // if (boost::iequals(full_path.extension().string(), ".zip")) - // // Remove the 2nd extension. - // full_path.replace_extension(""); - // } else { - // // Remove just one extension. - // full_path.replace_extension(""); - // } + boost::filesystem::path ext = full_path.extension(); + //if (boost::iequals(ext.string(), ".amf")) { + // // Remove the first extension. + // full_path.replace_extension(""); + // // It may be ".zip.amf". + // if (boost::iequals(full_path.extension().string(), ".zip")) + // // Remove the 2nd extension. + // full_path.replace_extension(""); + //} else { + // // Remove just one extension. + // full_path.replace_extension(""); + //} full_path.replace_extension(""); m_project_folder = full_path.parent_path(); BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project folder is:" << m_project_folder.string(); - // BBS + //BBS wxString project_name = from_u8(full_path.filename().string()); set_project_name(project_name); // record filename for hint when open exported file/.gcode @@ -13654,14 +13599,14 @@ void Plater::priv::init_notification_manager() notification_manager->init_progress_indicator(); } -void Plater::priv::update_objects_position_when_select_preset(const std::function& select_prest) +void Plater::priv::update_objects_position_when_select_preset(const std::function &select_prest) { select_prest(); wxGetApp().obj_list()->update_object_list_by_printer_technology(); // Re-clamp wipe tower positions to new bed boundaries after preset change - PartPlateList& cur_plate_list = this->partplate_list; + PartPlateList &cur_plate_list = this->partplate_list; for (size_t plate_id = 0; plate_id < cur_plate_list.get_plate_list().size(); ++plate_id) { cur_plate_list.set_default_wipe_tower_pos_for_plate(plate_id); } @@ -13671,23 +13616,29 @@ void Plater::priv::update_objects_position_when_select_preset(const std::functio void Plater::orient() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle()) { p->take_snapshot(_u8L("Orient")); replace_job(w, std::make_unique()); } } -// BBS: add job state related functions -void Plater::set_prepare_state(int state) { p->m_job_prepare_state = state; } +//BBS: add job state related functions +void Plater::set_prepare_state(int state) +{ + p->m_job_prepare_state = state; +} -int Plater::get_prepare_state() { return p->m_job_prepare_state; } +int Plater::get_prepare_state() +{ + return p->m_job_prepare_state; +} void Plater::get_print_job_data(PrintPrepareData* data) { if (data) { - data->plate_idx = p->m_print_job_data.plate_idx; - data->_3mf_path = p->m_print_job_data._3mf_path; + data->plate_idx = p->m_print_job_data.plate_idx; + data->_3mf_path = p->m_print_job_data._3mf_path; data->_3mf_config_path = p->m_print_job_data._3mf_config_path; } } @@ -13696,18 +13647,32 @@ void Plater::set_print_job_plate_idx(int plate_idx) { if (plate_idx == PLATE_CURRENT_IDX) { p->m_print_job_data.plate_idx = get_partplate_list().get_curr_plate_index(); - } else { + } + else { p->m_print_job_data.plate_idx = plate_idx; } } -int Plater::get_send_calibration_finished_event() { return EVT_SEND_CALIBRATION_FINISHED; } -int Plater::get_print_finished_event() { return EVT_PRINT_FINISHED; } +int Plater::get_send_calibration_finished_event() +{ + return EVT_SEND_CALIBRATION_FINISHED; +} -int Plater::get_send_finished_event() { return EVT_SEND_FINISHED; } +int Plater::get_print_finished_event() +{ + return EVT_PRINT_FINISHED; +} -int Plater::get_publish_finished_event() { return EVT_PUBLISH_FINISHED; } +int Plater::get_send_finished_event() +{ + return EVT_SEND_FINISHED; +} + +int Plater::get_publish_finished_event() +{ + return EVT_PUBLISH_FINISHED; +} void Plater::priv::set_current_canvas_as_dirty() { @@ -13727,10 +13692,10 @@ GLCanvas3D* Plater::priv::get_current_canvas3D(bool exclude_preview) return preview->get_canvas3d(); else if (current_panel == assemble_view) return assemble_view->get_canvas3d(); - else // BBS default set to view3D + else //BBS default set to view3D return view3D->get_canvas3d(); - // return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr); + //return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr); } void Plater::priv::unbind_canvas_event_handlers() @@ -13756,7 +13721,7 @@ void Plater::priv::reset_canvas_volumes() bool Plater::priv::check_ams_status_impl(bool is_slice_all) { - Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return true; @@ -13766,9 +13731,9 @@ bool Plater::priv::check_ams_status_impl(bool is_slice_all) if (q->is_gcode_3mf() || q->only_gcode_mode() || q->get_partplate_list().get_curr_plate()->get_objects().empty()) { return true; } - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; if (preset_bundle && preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) == obj->get_show_printer_type()) { - bool is_same_as_printer = true; + bool is_same_as_printer = true; auto nozzle_volumes_values = preset_bundle->project_config.option("nozzle_volume_type")->values; assert(obj->GetExtderSystem()->GetTotalExtderCount() == 2 && nozzle_volumes_values.size() == 2); if (obj->GetExtderSystem()->GetTotalExtderCount() == 2 && nozzle_volumes_values.size() == 2) { @@ -13778,14 +13743,13 @@ bool Plater::priv::check_ams_status_impl(bool is_slice_all) // After device sync, extruder_nozzle_stats matches printer → dialog suppressed. // Reference to BBS: BambuStudio/src/slic3r/GUI/Plater.cpp is_extruder_stat_synced() using namespace MultiNozzleUtils; - auto nozzle_diameter_values = - preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter")->values; + auto nozzle_diameter_values = preset_bundle->printers.get_edited_preset().config.option("nozzle_diameter")->values; // Build preset nozzle groups from extruder_nozzle_stats config std::vector> preset_nozzle_infos(nozzle_diameter_values.size()); for (size_t extruder_id = 0; extruder_id < nozzle_diameter_values.size(); ++extruder_id) { NozzleVolumeType preset_volume_type = NozzleVolumeType(nozzle_volumes_values[extruder_id]); - std::string preset_diameter = format_diameter_to_str(nozzle_diameter_values[extruder_id]); + std::string preset_diameter = format_diameter_to_str(nozzle_diameter_values[extruder_id]); if (preset_volume_type == nvtHybrid) { // Hybrid: expand into separate groups for each nozzle type from stats @@ -13808,9 +13772,9 @@ bool Plater::priv::check_ams_status_impl(bool is_slice_all) for (const auto& preset_group : preset_groups) { if (preset_group.nozzle_count == 0) { // Never synced: if printer has nozzles of this type → needs sync - if (std::find_if(printer_groups.begin(), printer_groups.end(), [&preset_group](const NozzleGroupInfo& elem) { - return preset_group.is_same_type(elem); - }) != printer_groups.end()) { + if (std::find_if(printer_groups.begin(), printer_groups.end(), + [&preset_group](const NozzleGroupInfo& elem) { return preset_group.is_same_type(elem); }) + != printer_groups.end()) { is_same_as_printer = false; break; } @@ -13852,22 +13816,21 @@ bool Plater::priv::check_ams_status_impl(bool is_slice_all) } if (!preset_bundle->extruder_ams_counts.empty() && !preset_bundle->extruder_ams_counts.front().empty()) { - is_same_as_printer &= preset_bundle->extruder_ams_counts[0][4] == left_4 && - preset_bundle->extruder_ams_counts[0][1] == left_1 && - preset_bundle->extruder_ams_counts[1][4] == right_4 && - preset_bundle->extruder_ams_counts[1][1] == right_1; + is_same_as_printer &= preset_bundle->extruder_ams_counts[0][4] == left_4 + && preset_bundle->extruder_ams_counts[0][1] == left_1 + && preset_bundle->extruder_ams_counts[1][4] == right_4 + && preset_bundle->extruder_ams_counts[1][1] == right_1; } if (!is_same_as_printer) { struct SyncInfoDialog : MessageDialog { - SyncInfoDialog(wxWindow* parent) + SyncInfoDialog(wxWindow *parent) : MessageDialog(parent, _L("The nozzle type and AMS quantity information has not been synced from the connected printer.\n" "After syncing, software can optimize printing time and filament usage when slicing.\n" "Would you like to sync now?"), - _L("Warning"), - 0) + _L("Warning"), 0) { add_button(wxID_YES, true, _L("Sync now")); add_button(wxID_NO, true, _L("Later")); @@ -13892,7 +13855,7 @@ bool Plater::priv::check_ams_status_impl(bool is_slice_all) bool Plater::priv::get_machine_sync_status() { - Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return false; @@ -13900,7 +13863,7 @@ bool Plater::priv::get_machine_sync_status() if (!obj) return false; - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; return preset_bundle && preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) == obj->get_show_printer_type(); } @@ -13915,10 +13878,10 @@ bool Plater::priv::init_collapse_toolbar() BackgroundTexture::Metadata background_data; background_data.filename = m_is_dark ? "toolbar_background_dark.png" : "toolbar_background.png"; - background_data.left = 16; - background_data.top = 16; - background_data.right = 16; - background_data.bottom = 16; + background_data.left = 16; + background_data.top = 16; + background_data.right = 16; + background_data.bottom = 16; if (!collapse_toolbar.init(background_data)) return false; @@ -13936,9 +13899,11 @@ bool Plater::priv::init_collapse_toolbar() item.name = "collapse_sidebar"; // set collapse svg name - item.icon_filename = "collapse.svg"; - item.sprite_id = 0; - item.left.action_callback = []() { wxGetApp().plater()->collapse_sidebar(!wxGetApp().plater()->is_sidebar_collapsed()); }; + item.icon_filename = "collapse.svg"; + item.sprite_id = 0; + item.left.action_callback = []() { + wxGetApp().plater()->collapse_sidebar(!wxGetApp().plater()->is_sidebar_collapsed()); + }; if (!collapse_toolbar.add_item(item)) return false; @@ -13949,7 +13914,10 @@ bool Plater::priv::init_collapse_toolbar() return true; } -void Plater::priv::update_preview_bottom_toolbar() { ; } +void Plater::priv::update_preview_bottom_toolbar() +{ + ; +} #if 0 void Plater::update_partplate() @@ -13958,25 +13926,32 @@ void Plater::update_partplate() } #endif -void Plater::priv::reset_gcode_toolpaths() { preview->get_canvas3d()->reset_gcode_toolpaths(); } +void Plater::priv::reset_gcode_toolpaths() +{ + preview->get_canvas3d()->reset_gcode_toolpaths(); +} bool Plater::priv::can_set_instance_to_object() const { const int obj_idx = get_selected_object_idx(); - return 0 <= obj_idx && obj_idx < (int) model.objects.size() && model.objects[obj_idx]->instances.size() > 1; + return 0 <= obj_idx && obj_idx < (int)model.objects.size() && model.objects[obj_idx]->instances.size() > 1; } -bool Plater::priv::can_split(bool to_objects) const { return sidebar->obj_list()->is_splittable(to_objects); } +bool Plater::priv::can_split(bool to_objects) const +{ + return sidebar->obj_list()->is_splittable(to_objects); +} bool Plater::priv::can_fillcolor() const { - // BBS TODO + //BBS TODO return true; } bool Plater::priv::has_assemble_view() const { - for (auto object : model.objects) { + for (auto object: model.objects) + { for (auto instance : object->instances) if (instance->is_assemble_initialized()) return true; @@ -13997,19 +13972,29 @@ bool Plater::priv::has_assemble_view() const bool Plater::priv::can_scale_to_print_volume() const { const BuildVolume_Type type = this->bed.build_volume().type(); - return !sidebar->obj_list()->has_selected_cut_object() && !view3D->get_canvas3d()->get_selection().is_empty() && - (type == BuildVolume_Type::Rectangle || type == BuildVolume_Type::Circle); + return !sidebar->obj_list()->has_selected_cut_object() + && !view3D->get_canvas3d()->get_selection().is_empty() + && (type == BuildVolume_Type::Rectangle || type == BuildVolume_Type::Circle); } #endif // ENABLE_ENHANCED_PRINT_VOLUME_FIT bool Plater::priv::can_mirror() const -{ return !sidebar->obj_list()->has_selected_cut_object() && get_selection().is_from_single_instance(); } +{ + return !sidebar->obj_list()->has_selected_cut_object() + && get_selection().is_from_single_instance(); +} bool Plater::priv::can_replace_with_stl() const -{ return !sidebar->obj_list()->has_selected_cut_object() && get_selection().get_volume_idxs().size() == 1; } +{ + return !sidebar->obj_list()->has_selected_cut_object() + && get_selection().get_volume_idxs().size() == 1; +} bool Plater::priv::can_replace_all_with_stl() const -{ return !sidebar->obj_list()->has_selected_cut_object() && get_selection().get_volume_idxs().size() != 1; } +{ + return !sidebar->obj_list()->has_selected_cut_object() + && get_selection().get_volume_idxs().size() != 1; +} bool Plater::priv::can_reload_from_disk() const { @@ -14030,9 +14015,8 @@ bool Plater::priv::can_reload_from_disk() const int volume_idx; // operators needed by std::algorithms - bool operator<(const SelectedVolume& other) const - { return (object_idx < other.object_idx) || ((object_idx == other.object_idx) && (volume_idx < other.volume_idx)); } - bool operator==(const SelectedVolume& other) const { return (object_idx == other.object_idx) && (volume_idx == other.volume_idx); } + bool operator < (const SelectedVolume& other) const { return (object_idx < other.object_idx) || ((object_idx == other.object_idx) && (volume_idx < other.volume_idx)); } + bool operator == (const SelectedVolume& other) const { return (object_idx == other.object_idx) && (volume_idx == other.volume_idx); } }; std::vector selected_volumes; @@ -14042,24 +14026,22 @@ bool Plater::priv::can_reload_from_disk() const const std::set& selected_volumes_idxs = selection.get_volume_idxs(); for (unsigned int idx : selected_volumes_idxs) { const GLVolume* v = selection.get_volume(idx); - int v_idx = v->volume_idx(); + int v_idx = v->volume_idx(); if (v_idx >= 0) { int o_idx = v->object_idx(); - if (0 <= o_idx && o_idx < (int) model.objects.size()) - selected_volumes.push_back({o_idx, v_idx}); + if (0 <= o_idx && o_idx < (int)model.objects.size()) + selected_volumes.push_back({ o_idx, v_idx }); } } #endif // ENABLE_RELOAD_FROM_DISK_REWORK #if ENABLE_RELOAD_FROM_DISK_REWORK - std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair& v1, const std::pair& v2) { + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); - }); - selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), - [](const std::pair& v1, const std::pair& v2) { - return (v1.first == v2.first) && (v1.second == v2.second); - }), - selected_volumes.end()); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first == v2.first) && (v1.second == v2.second); + }), selected_volumes.end()); // collects paths of files to load std::vector paths; @@ -14087,7 +14069,7 @@ bool Plater::priv::can_reload_from_disk() const return !paths.empty(); } -void Plater::priv::update_publish_dialog_status(wxString& msg, int percent) +void Plater::priv::update_publish_dialog_status(wxString &msg, int percent) { if (m_publish_dlg) m_publish_dlg->UpdateStatus(msg, percent); @@ -14095,45 +14077,42 @@ void Plater::priv::update_publish_dialog_status(wxString& msg, int percent) bool Plater::priv::show_publish_dlg(bool show) { - if (q != nullptr) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":recevied publish event\n"; - } + if (q != nullptr) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":recevied publish event\n"; } - if (!m_publish_dlg) - m_publish_dlg = new PublishDialog(q); + if (!m_publish_dlg) m_publish_dlg = new PublishDialog(q); if (show) { m_publish_dlg->reset(); m_publish_dlg->start_slicing(); - // m_publish_dlg->Show(); + //m_publish_dlg->Show(); m_publish_dlg->ShowModal(); } else { m_publish_dlg->EndModal(wxID_OK); - // cancel the slicing + //cancel the slicing if (this->background_process.running()) this->background_process.stop(); } return true; } -// BBS: add bed exclude area -void Plater::priv::set_bed_shape(const Pointfs& shape, - const Pointfs& exclude_areas, - const Pointfs& wrapping_exclude_areas, - const double printable_height, +//BBS: add bed exclude area +void Plater::priv::set_bed_shape(const Pointfs &shape, + const Pointfs &exclude_areas, + const Pointfs &wrapping_exclude_areas, + const double printable_height, std::vector extruder_areas, - std::vector extruder_heights, - const std::string& custom_texture, - const std::string& custom_model, - bool force_as_custom) + std::vector extruder_heights, + const std::string &custom_texture, + const std::string &custom_model, + bool force_as_custom) { - // Orca: reduce resolution for large bed printer + //Orca: reduce resolution for large bed printer BoundingBoxf bed_size = get_extents(shape); if (bed_size.size().maxCoeff() <= LARGE_BED_THRESHOLD) SCALING_FACTOR = SCALING_FACTOR_INTERNAL; else SCALING_FACTOR = SCALING_FACTOR_INTERNAL_LARGE_PRINTER; - // BBS: add shape position + //BBS: add shape position Vec2d shape_position = partplate_list.get_current_shape_position(); bool new_shape = bed.set_shape(shape, printable_height, extruder_areas, extruder_heights, custom_model, force_as_custom, shape_position); @@ -14142,28 +14121,25 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, double height_to_lid = config->opt_float("extruder_clearance_height_to_lid"); double height_to_rod = config->opt_float("extruder_clearance_height_to_rod"); - Pointfs prev_exclude_areas = partplate_list.get_exclude_area(); + Pointfs prev_exclude_areas = partplate_list.get_exclude_area(); Pointfs prev_wrapping_exclude_areas = partplate_list.get_wrapping_exclude_area(); - new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas) || - (prev_wrapping_exclude_areas != wrapping_exclude_areas); + new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas) + || (prev_wrapping_exclude_areas != wrapping_exclude_areas); if (!new_shape && partplate_list.get_logo_texture_filename() != custom_texture) { partplate_list.update_logo_texture_filename(custom_texture); } if (new_shape) { - if (view3D) - view3D->bed_shape_changed(); - if (preview) - preview->bed_shape_changed(); + if (view3D) view3D->bed_shape_changed(); + if (preview) preview->bed_shape_changed(); - // BBS: update part plate's size - // BBS: to be checked + //BBS: update part plate's size + // BBS: to be checked Vec3d max = bed.printable_bounding_box().max; Vec3d min = bed.printable_bounding_box().min; - double z = config->opt_float("printable_height"); + double z = config->opt_float("printable_height"); partplate_list.reset_size(max.x() - min.x() - Bed3D::Axes::DefaultTipRadius, max.y() - min.y() - Bed3D::Axes::DefaultTipRadius, z); - partplate_list.set_shapes(shape, exclude_areas, wrapping_exclude_areas, extruder_areas, extruder_heights, custom_texture, - height_to_lid, height_to_rod); + partplate_list.set_shapes(shape, exclude_areas, wrapping_exclude_areas, extruder_areas, extruder_heights, custom_texture, height_to_lid, height_to_rod); Vec2d new_shape_position = partplate_list.get_current_shape_position(); if (shape_position != new_shape_position) @@ -14171,13 +14147,25 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, } } -bool Plater::priv::can_delete() const { return !get_selection().is_empty() && !get_selection().is_wipe_tower(); } +bool Plater::priv::can_delete() const +{ + return !get_selection().is_empty() && !get_selection().is_wipe_tower(); +} -bool Plater::priv::can_delete_all() const { return !model.objects.empty(); } +bool Plater::priv::can_delete_all() const +{ + return !model.objects.empty(); +} -bool Plater::priv::can_add_plate() const { return q->get_partplate_list().get_plate_count() < PartPlateList::MAX_PLATES_COUNT; } +bool Plater::priv::can_add_plate() const +{ + return q->get_partplate_list().get_plate_count() < PartPlateList::MAX_PLATES_COUNT; +} -bool Plater::priv::can_delete_plate() const { return q->get_partplate_list().get_plate_count() > 1; } +bool Plater::priv::can_delete_plate() const +{ + return q->get_partplate_list().get_plate_count() > 1; +} bool Plater::priv::can_fix_through_cgal() const { @@ -14186,8 +14174,8 @@ bool Plater::priv::can_fix_through_cgal() const #if FIX_THROUGH_CGAL_ALWAYS // Fixing always. - return !obj_idxs.empty() || !vol_idxs.empty(); -#else // FIX_THROUGH_CGAL_ALWAYS + return ! obj_idxs.empty() || ! vol_idxs.empty(); +#else // FIX_THROUGH_CGAL_ALWAYS // Fixing only if the model is not manifold. if (vol_idxs.empty()) { for (auto obj_idx : obj_idxs) @@ -14207,10 +14195,10 @@ bool Plater::priv::can_fix_through_cgal() const bool Plater::priv::can_simplify() const { // is object for simplification selected - if (get_selected_object_idx() < 0) - return false; + if (get_selected_object_idx() < 0) return false; // is already opened? - if (q->get_view3D_canvas3D()->get_gizmos_manager().get_current_type() == GLGizmosManager::EType::Simplify) + if (q->get_view3D_canvas3D()->get_gizmos_manager().get_current_type() == + GLGizmosManager::EType::Simplify) return false; return true; } @@ -14235,30 +14223,41 @@ bool Plater::priv::can_smooth_mesh() const bool Plater::priv::can_increase_instances() const { - if (!m_worker.is_idle() || q->get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode()) - return false; + if (!m_worker.is_idle() + || q->get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode()) + return false; int obj_idx = get_selected_object_idx(); - return (0 <= obj_idx) && (obj_idx < (int) model.objects.size()) && !sidebar->obj_list()->has_selected_cut_object() && - std::all_of(model.objects[obj_idx]->instances.begin(), model.objects[obj_idx]->instances.end(), - [](auto& inst) { return inst->printable; }); + return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) + && !sidebar->obj_list()->has_selected_cut_object() + && std::all_of(model.objects[obj_idx]->instances.begin(), model.objects[obj_idx]->instances.end(), [](auto& inst) {return inst->printable; }); } bool Plater::priv::can_decrease_instances() const { - if (!m_worker.is_idle() || q->get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode()) - return false; + if (!m_worker.is_idle() + || q->get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode()) + return false; int obj_idx = get_selected_object_idx(); - return (0 <= obj_idx) && (obj_idx < (int) model.objects.size()) && (model.objects[obj_idx]->instances.size() > 1) && - !sidebar->obj_list()->has_selected_cut_object(); + return (0 <= obj_idx) && (obj_idx < (int)model.objects.size()) && (model.objects[obj_idx]->instances.size() > 1) + && !sidebar->obj_list()->has_selected_cut_object(); } -bool Plater::priv::can_split_to_objects() const { return q->can_split(true); } +bool Plater::priv::can_split_to_objects() const +{ + return q->can_split(true); +} -bool Plater::priv::can_split_to_volumes() const { return (printer_technology != ptSLA) && q->can_split(false); } +bool Plater::priv::can_split_to_volumes() const +{ + return (printer_technology != ptSLA) && q->can_split(false); +} -bool Plater::priv::can_arrange() const { return !model.objects.empty() && m_worker.is_idle(); } +bool Plater::priv::can_arrange() const +{ + return !model.objects.empty() && m_worker.is_idle(); +} bool Plater::priv::layers_height_allowed() const { @@ -14266,11 +14265,13 @@ bool Plater::priv::layers_height_allowed() const return false; int obj_idx = get_selected_object_idx(); - return 0 <= obj_idx && obj_idx < (int) model.objects.size() && model.objects[obj_idx]->max_z() > SINKING_Z_THRESHOLD && - view3D->is_layers_editing_allowed(); + return 0 <= obj_idx && obj_idx < (int)model.objects.size() && model.objects[obj_idx]->max_z() > SINKING_Z_THRESHOLD && view3D->is_layers_editing_allowed(); } -bool Plater::priv::can_layers_editing() const { return layers_height_allowed(); } +bool Plater::priv::can_layers_editing() const +{ + return layers_height_allowed(); +} void Plater::priv::on_action_layersediting(SimpleEvent&) { @@ -14281,9 +14282,9 @@ void Plater::priv::on_action_layersediting(SimpleEvent&) const auto& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; if (print_config.opt_bool("enable_mixed_color_sublayer")) { if (wxGetApp().app_config->get("no_warn_mixed_sublayer_variable_layer") != "1") { - MessageDialog - dlg(q, _L("Using variable layer height together with mixed color sublayer may result in poor color mixing quality."), - _L("Warning"), wxICON_WARNING | wxOK); + MessageDialog dlg(q, + _L("Using variable layer height together with mixed color sublayer may result in poor color mixing quality."), + _L("Warning"), wxICON_WARNING | wxOK); dlg.show_dsa_button(); dlg.ShowModal(); if (dlg.get_checkbox_state()) @@ -14295,7 +14296,7 @@ void Plater::priv::on_action_layersediting(SimpleEvent&) notification_manager->set_move_from_overlay(view3D->is_layers_editing_enabled()); } -void Plater::priv::on_create_filament(SimpleEvent&) +void Plater::priv::on_create_filament(SimpleEvent &) { CreateFilamentPresetDialog dlg(wxGetApp().mainframe); int res = dlg.ShowModal(); @@ -14304,48 +14305,51 @@ void Plater::priv::on_create_filament(SimpleEvent&) update_ui_from_settings(); sidebar->update_all_preset_comboboxes(); CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::FILAMENT); - int res = success_dlg.ShowModal(); + int res = success_dlg.ShowModal(); } } -void Plater::priv::on_modify_filament(SimpleEvent& evt) +void Plater::priv::on_modify_filament(SimpleEvent &evt) { - Filamentinformation* filament_info = static_cast(evt.GetEventObject()); - int res; + Filamentinformation *filament_info = static_cast(evt.GetEventObject()); + int res; std::shared_ptr need_edit_preset; { EditFilamentPresetDialog dlg(wxGetApp().mainframe, filament_info); - res = dlg.ShowModal(); + res = dlg.ShowModal(); need_edit_preset = dlg.get_need_edit_preset(); } wxGetApp().mainframe->update_side_preset_ui(); update_ui_from_settings(); sidebar->update_all_preset_comboboxes(); if (wxID_EDIT == res) { - Tab* tab = wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT); - // tab->restore_last_select_item(); - if (tab == nullptr) { - return; - } + Tab *tab = wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT); + //tab->restore_last_select_item(); + if (tab == nullptr) { return; } // Popup needs to be called before "restore_last_select_item", otherwise the page may not be updated wxGetApp().params_dialog()->Popup(); tab->restore_last_select_item(); - // Opening Studio and directly accessing the Filament settings interface through the edit preset button will not take effect and - // requires manual settings. + // Opening Studio and directly accessing the Filament settings interface through the edit preset button will not take effect and requires manual settings. tab->set_just_edit(true); tab->select_preset(need_edit_preset->name); - // when some preset have modified, if the printer is not need_edit_preset_name compatible printer, the preset will jump to other - // preset, need select again - if (!need_edit_preset->is_compatible) - tab->select_preset(need_edit_preset->name); + // when some preset have modified, if the printer is not need_edit_preset_name compatible printer, the preset will jump to other preset, need select again + if (!need_edit_preset->is_compatible) tab->select_preset(need_edit_preset->name); } + } -void Plater::priv::on_add_filament(SimpleEvent& evt) { sidebar->add_filament(); } +void Plater::priv::on_add_filament(SimpleEvent &evt) { + sidebar->add_filament(); +} -void Plater::priv::on_delete_filament(SimpleEvent& evt) { sidebar->delete_filament(); } +void Plater::priv::on_delete_filament(SimpleEvent &evt) { + sidebar->delete_filament(); +} -void Plater::priv::on_add_custom_filament(ColorEvent& evt) { sidebar->add_custom_filament(evt.data); } +void Plater::priv::on_add_custom_filament(ColorEvent &evt) +{ + sidebar->add_custom_filament(evt.data); +} void Plater::priv::enter_gizmos_stack() { @@ -14364,7 +14368,7 @@ bool Plater::priv::leave_gizmos_stack() bool changed = false; assert(m_undo_redo_stack_active == &m_undo_redo_stack_gizmos); if (m_undo_redo_stack_active == &m_undo_redo_stack_gizmos) { - assert(!m_undo_redo_stack_active->empty()); + assert(! m_undo_redo_stack_active->empty()); changed = m_undo_redo_stack_gizmos.has_undo_snapshot(); m_undo_redo_stack_active->clear(); m_undo_redo_stack_active = &m_undo_redo_stack_main; @@ -14374,7 +14378,7 @@ bool Plater::priv::leave_gizmos_stack() int Plater::priv::get_active_snapshot_index() { - const size_t active_snapshot_time = this->undo_redo_stack().active_snapshot_time(); + const size_t active_snapshot_time = this->undo_redo_stack().active_snapshot_time(); const std::vector& ss_stack = this->undo_redo_stack().snapshots(); const auto it = std::lower_bound(ss_stack.begin(), ss_stack.end(), UndoRedo::Snapshot(active_snapshot_time)); return it - ss_stack.begin(); @@ -14396,10 +14400,12 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed if (this->sidebar->obj_list()->is_selected(itSettings)) { snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR; snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); - } else if (this->sidebar->obj_list()->is_selected(itLayer)) { + } + else if (this->sidebar->obj_list()->is_selected(itLayer)) { snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR; snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); - } else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) + } + else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR; // If SLA gizmo is active, ask it if it wants to trigger support generation @@ -14407,12 +14413,12 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed if (view3D->get_canvas3d()->get_gizmos_manager().wants_reslice_supports_on_undo()) snapshot_data.flags |= UndoRedo::SnapshotData::RECALCULATE_SLA_SUPPORTS; - // FIXME updating the Wipe tower config values at the ModelWipeTower from the Print config. - // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print - // config. BBS: add partplate logic + //FIXME updating the Wipe tower config values at the ModelWipeTower from the Print config. + // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. + // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); assert(tower_x_opt->values.size() == tower_y_opt->values.size()); @@ -14422,24 +14428,18 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed ModelWipeTower& tower = model.wipe_tower; tower.positions[plate_idx] = Vec2d(tower_x_opt->get_at(plate_idx), tower_y_opt->get_at(plate_idx)); - tower.rotation = config.opt_float("wipe_tower_rotation_angle"); + tower.rotation = config.opt_float("wipe_tower_rotation_angle"); } } - const GLGizmosManager& gizmos = get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d()->get_gizmos_manager() : - view3D->get_canvas3d()->get_gizmos_manager(); + const GLGizmosManager& gizmos = get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_gizmos_manager() : view3D->get_canvas3d()->get_gizmos_manager(); if (snapshot_type == UndoRedo::SnapshotType::ProjectSeparator) this->undo_redo_stack().clear(); - this->undo_redo_stack().take_snapshot(snapshot_name, model, - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d()->get_selection() : - view3D->get_canvas3d()->get_selection(), - gizmos, partplate_list, snapshot_data); + this->undo_redo_stack().take_snapshot(snapshot_name, model, get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_selection() : view3D->get_canvas3d()->get_selection(), gizmos, partplate_list, snapshot_data); if (snapshot_type == UndoRedo::SnapshotType::LeavingGizmoWithAction) { - // Filter all but the last UndoRedo::SnapshotType::GizmoAction in a row between the last UndoRedo::SnapshotType::EnteringGizmo and - // UndoRedo::SnapshotType::LeavingGizmoWithAction. The remaining snapshot will be renamed to a more generic name, depending on what - // gizmo is being left. + // Filter all but the last UndoRedo::SnapshotType::GizmoAction in a row between the last UndoRedo::SnapshotType::EnteringGizmo and UndoRedo::SnapshotType::LeavingGizmoWithAction. + // The remaining snapshot will be renamed to a more generic name, + // depending on what gizmo is being left. if (gizmos.get_current() != nullptr) { std::string new_name = gizmos.get_current()->get_action_snapshot_name(); this->undo_redo_stack().reduce_noisy_snapshots(new_name); @@ -14448,29 +14448,23 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed // Reset the "dirty project" flag. m_undo_redo_stack_main.mark_current_as_saved(); } - // BBS: add PartPlateList as the paremeter for take_snapshot + //BBS: add PartPlateList as the paremeter for take_snapshot this->undo_redo_stack().release_least_recently_used(); dirty_state.update_from_undo_redo_stack(m_undo_redo_stack_main.project_modified()); // Save the last active preset name of a particular printer technology. - ((this->printer_technology == ptFFF) ? m_last_fff_printer_profile_name : - m_last_sla_printer_profile_name) = wxGetApp().preset_bundle->printers.get_selected_preset_name(); - BOOST_LOG_TRIVIAL(info) << "Undo / Redo snapshot taken: " << snapshot_name - << ", Undo / Redo stack memory: " << Slic3r::format_memsize_MB(this->undo_redo_stack().memsize()) - << log_memory_info(); + ((this->printer_technology == ptFFF) ? m_last_fff_printer_profile_name : m_last_sla_printer_profile_name) = wxGetApp().preset_bundle->printers.get_selected_preset_name(); + BOOST_LOG_TRIVIAL(info) << "Undo / Redo snapshot taken: " << snapshot_name << ", Undo / Redo stack memory: " << Slic3r::format_memsize_MB(this->undo_redo_stack().memsize()) << log_memory_info(); } void Plater::priv::undo() { - const std::vector& snapshots = this->undo_redo_stack().snapshots(); - auto it_current = std::lower_bound(snapshots.begin(), snapshots.end(), - UndoRedo::Snapshot(this->undo_redo_stack().active_snapshot_time())); + const std::vector &snapshots = this->undo_redo_stack().snapshots(); + auto it_current = std::lower_bound(snapshots.begin(), snapshots.end(), UndoRedo::Snapshot(this->undo_redo_stack().active_snapshot_time())); // BBS: undo-redo until modify record - while (--it_current != snapshots.begin() && !snapshot_modifies_project(*it_current)) - ; - if (it_current == snapshots.begin()) - return; + while (--it_current != snapshots.begin() && !snapshot_modifies_project(*it_current)); + if (it_current == snapshots.begin()) return; if (get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView) { if (it_current->snapshot_data.snapshot_type != UndoRedo::SnapshotType::GizmoAction && it_current->snapshot_data.snapshot_type != UndoRedo::SnapshotType::EnteringGizmo && @@ -14483,22 +14477,19 @@ void Plater::priv::undo() void Plater::priv::redo() { - const std::vector& snapshots = this->undo_redo_stack().snapshots(); - auto it_current = std::lower_bound(snapshots.begin(), snapshots.end(), - UndoRedo::Snapshot(this->undo_redo_stack().active_snapshot_time())); + const std::vector &snapshots = this->undo_redo_stack().snapshots(); + auto it_current = std::lower_bound(snapshots.begin(), snapshots.end(), UndoRedo::Snapshot(this->undo_redo_stack().active_snapshot_time())); // BBS: undo-redo until modify record - while (it_current != snapshots.end() && !snapshot_modifies_project(*it_current++)) - ; + while (it_current != snapshots.end() && !snapshot_modifies_project(*it_current++)); if (it_current != snapshots.end()) { - while (it_current != snapshots.end() && !snapshot_modifies_project(*it_current++)) - ; + while (it_current != snapshots.end() && !snapshot_modifies_project(*it_current++)); this->undo_redo_to(--it_current); } } void Plater::priv::undo_redo_to(size_t time_to_load) { - const std::vector& snapshots = this->undo_redo_stack().snapshots(); + const std::vector &snapshots = this->undo_redo_stack().snapshots(); auto it_current = std::lower_bound(snapshots.begin(), snapshots.end(), UndoRedo::Snapshot(time_to_load)); assert(it_current != snapshots.end()); this->undo_redo_to(it_current); @@ -14513,7 +14504,8 @@ bool Plater::priv::up_to_date(bool saved, bool backup) if (!backup) undo_redo_stack_main().mark_current_as_saved(); return true; - } else { + } + else { return !undo_redo_stack_main().has_real_change_from(last_time); } } @@ -14523,21 +14515,20 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator // Make sure that no updating function calls take_snapshot until we are done. SuppressSnapshots snapshot_supressor(q); - bool temp_snapshot_was_taken = this->undo_redo_stack().temp_snapshot_active(); - PrinterTechnology new_printer_technology = it_snapshot->snapshot_data.printer_technology; - bool printer_technology_changed = this->printer_technology != new_printer_technology; + bool temp_snapshot_was_taken = this->undo_redo_stack().temp_snapshot_active(); + PrinterTechnology new_printer_technology = it_snapshot->snapshot_data.printer_technology; + bool printer_technology_changed = this->printer_technology != new_printer_technology; if (printer_technology_changed) { - // BBS do not support SLA + //BBS do not support SLA } // Save the last active preset name of a particular printer technology. - ((this->printer_technology == ptFFF) ? m_last_fff_printer_profile_name : - m_last_sla_printer_profile_name) = wxGetApp().preset_bundle->printers.get_selected_preset_name(); - // FIXME updating the Wipe tower config values at the ModelWipeTower from the Print config. - // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print - // config. BBS: add partplate logic + ((this->printer_technology == ptFFF) ? m_last_fff_printer_profile_name : m_last_sla_printer_profile_name) = wxGetApp().preset_bundle->printers.get_selected_preset_name(); + //FIXME updating the Wipe tower config values at the ModelWipeTower from the Print config. + // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. + // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); assert(tower_x_opt->values.size() == tower_y_opt->values.size()); @@ -14547,7 +14538,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator ModelWipeTower& tower = model.wipe_tower; tower.positions[plate_idx] = Vec2d(tower_x_opt->get_at(plate_idx), tower_y_opt->get_at(plate_idx)); - tower.rotation = config.opt_float("wipe_tower_rotation_angle"); + tower.rotation = config.opt_float("wipe_tower_rotation_angle"); } } const int layer_range_idx = it_snapshot->snapshot_data.layer_range_idx; @@ -14560,15 +14551,17 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator if (this->sidebar->obj_list()->is_selected(itSettings)) { top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR; top_snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); - } else if (this->sidebar->obj_list()->is_selected(itLayer)) { + } + else if (this->sidebar->obj_list()->is_selected(itLayer)) { top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR; top_snapshot_data.layer_range_idx = this->sidebar->obj_list()->get_selected_layers_range_idx(); - } else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) + } + else if (this->sidebar->obj_list()->is_selected(itLayerRoot)) top_snapshot_data.flags |= UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR; - bool new_variable_layer_editing_active = (new_flags & UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE) != 0; - bool new_selected_settings_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR) != 0; - bool new_selected_layer_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR) != 0; - bool new_selected_layerroot_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR) != 0; + bool new_variable_layer_editing_active = (new_flags & UndoRedo::SnapshotData::VARIABLE_LAYER_EDITING_ACTIVE) != 0; + bool new_selected_settings_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_SETTINGS_ON_SIDEBAR) != 0; + bool new_selected_layer_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYER_ON_SIDEBAR) != 0; + bool new_selected_layerroot_on_sidebar = (new_flags & UndoRedo::SnapshotData::SELECTED_LAYERROOT_ON_SIDEBAR) != 0; if (this->view3D->get_canvas3d()->get_gizmos_manager().wants_reslice_supports_on_undo()) top_snapshot_data.flags |= UndoRedo::SnapshotData::RECALCULATE_SLA_SUPPORTS; @@ -14581,45 +14574,32 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator const UndoRedo::Snapshot snapshot_copy = *it_snapshot; // Do the jump in time. if (it_snapshot->timestamp < this->undo_redo_stack().active_snapshot_time() ? - this->undo_redo_stack().undo(model, - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d()->get_selection() : - this->view3D->get_canvas3d()->get_selection(), - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d()->get_gizmos_manager() : - this->view3D->get_canvas3d()->get_gizmos_manager(), - this->partplate_list, top_snapshot_data, it_snapshot->timestamp) : - this->undo_redo_stack().redo(model, - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d()->get_gizmos_manager() : - this->view3D->get_canvas3d()->get_gizmos_manager(), - this->partplate_list, it_snapshot->timestamp)) { + this->undo_redo_stack().undo(model, get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_selection() : this->view3D->get_canvas3d()->get_selection(), get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_gizmos_manager() : this->view3D->get_canvas3d()->get_gizmos_manager(), this->partplate_list, top_snapshot_data, it_snapshot->timestamp) : + this->undo_redo_stack().redo(model, get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_gizmos_manager() : this->view3D->get_canvas3d()->get_gizmos_manager(), this->partplate_list, it_snapshot->timestamp)) { if (printer_technology_changed) { // Switch to the other printer technology. Switch to the last printer active for that particular technology. - AppConfig* app_config = wxGetApp().app_config; - app_config->set("presets", PRESET_PRINTER_NAME, - (new_printer_technology == ptFFF) ? m_last_fff_printer_profile_name : m_last_sla_printer_profile_name); - // FIXME Why are we reloading the whole preset bundle here? Please document. This is fishy and it is unnecessarily expensive. - // Anyways, don't report any config value substitutions, they have been already reported to the user at application start up. + AppConfig *app_config = wxGetApp().app_config; + app_config->set("presets", PRESET_PRINTER_NAME, (new_printer_technology == ptFFF) ? m_last_fff_printer_profile_name : m_last_sla_printer_profile_name); + //FIXME Why are we reloading the whole preset bundle here? Please document. This is fishy and it is unnecessarily expensive. + // Anyways, don't report any config value substitutions, they have been already reported to the user at application start up. wxGetApp().preset_bundle->load_presets(*app_config, ForwardCompatibilitySubstitutionRule::EnableSilent); - // load_current_presets() calls Tab::load_current_preset() -> TabPrint::update() -> - // Object_list::update_and_show_object_settings_item(), but the Object list still keeps pointer to the old Model. Avoid a crash - // by removing selection first. + // load_current_presets() calls Tab::load_current_preset() -> TabPrint::update() -> Object_list::update_and_show_object_settings_item(), + // but the Object list still keeps pointer to the old Model. Avoid a crash by removing selection first. this->sidebar->obj_list()->unselect_objects(); // Load the currently selected preset into the GUI, update the preset selection box. // This also switches the printer technology based on the printer technology of the active printer profile. wxGetApp().load_current_presets(); } - // FIXME updating the Print config from the Wipe tower config values at the ModelWipeTower. - // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print - // config. BBS: add partplate logic + //FIXME updating the Print config from the Wipe tower config values at the ModelWipeTower. + // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. + // BBS: add partplate logic if (this->printer_technology == ptFFF) { - const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; - ConfigOptionFloats* tower_x_opt = const_cast(proj_cfg.option("wipe_tower_x")); - ConfigOptionFloats* tower_y_opt = const_cast(proj_cfg.option("wipe_tower_y")); + ConfigOptionFloats* tower_x_opt = const_cast(proj_cfg.option("wipe_tower_x")); + ConfigOptionFloats* tower_y_opt = const_cast(proj_cfg.option("wipe_tower_y")); // BBS: don't support wipe tower rotation - // double current_rotation = proj_cfg.opt_float("wipe_tower_rotation_angle"); + //double current_rotation = proj_cfg.opt_float("wipe_tower_rotation_angle"); bool need_update = false; if (tower_x_opt->values.size() != model.wipe_tower.positions.size()) { tower_x_opt->clear(); @@ -14673,28 +14653,18 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator void Plater::priv::update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bool /* temp_snapshot_was_taken */) { - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_selection().clear() : - this->view3D->get_canvas3d()->get_selection().clear(); + get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_selection().clear() : this->view3D->get_canvas3d()->get_selection().clear(); // Update volumes from the deserializd model, always stop / update the background processing (for both the SLA and FFF technologies). - this->update((unsigned int) UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE | - (unsigned int) UpdateParams::POSTPONE_VALIDATION_ERROR_MESSAGE); - // Release old snapshots if the memory allocated is excessive. This may remove the top most snapshot if jumping to the very first - // snapshot. - // if (temp_snapshot_was_taken) - // Release the old snapshots always, as it may have happened, that some of the triangle meshes got deserialized from the snapshot, while - // some triangle meshes may have gotten released from the scene or the background processing, therefore now being calculated into the - // Undo / Redo stack size. - this->undo_redo_stack().release_least_recently_used(); - // YS_FIXME update obj_list from the deserialized model (maybe store ObjectIDs into the tree?) (no selections at this point of time) - get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? - assemble_view->get_canvas3d() - ->get_selection() - .set_deserialized(GUI::Selection::EMode(this->undo_redo_stack().selection_deserialized().mode), - this->undo_redo_stack().selection_deserialized().volumes_and_instances) : - this->view3D->get_canvas3d() - ->get_selection() - .set_deserialized(GUI::Selection::EMode(this->undo_redo_stack().selection_deserialized().mode), - this->undo_redo_stack().selection_deserialized().volumes_and_instances); + this->update((unsigned int)UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE | (unsigned int)UpdateParams::POSTPONE_VALIDATION_ERROR_MESSAGE); + // Release old snapshots if the memory allocated is excessive. This may remove the top most snapshot if jumping to the very first snapshot. + //if (temp_snapshot_was_taken) + // Release the old snapshots always, as it may have happened, that some of the triangle meshes got deserialized from the snapshot, while some + // triangle meshes may have gotten released from the scene or the background processing, therefore now being calculated into the Undo / Redo stack size. + this->undo_redo_stack().release_least_recently_used(); + //YS_FIXME update obj_list from the deserialized model (maybe store ObjectIDs into the tree?) (no selections at this point of time) + get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? + assemble_view->get_canvas3d()->get_selection().set_deserialized(GUI::Selection::EMode(this->undo_redo_stack().selection_deserialized().mode), this->undo_redo_stack().selection_deserialized().volumes_and_instances) : + this->view3D->get_canvas3d()->get_selection().set_deserialized(GUI::Selection::EMode(this->undo_redo_stack().selection_deserialized().mode), this->undo_redo_stack().selection_deserialized().volumes_and_instances); get_current_canvas3D()->get_canvas_type() == GLCanvas3D::CanvasAssembleView ? assemble_view->get_canvas3d()->get_gizmos_manager().update_after_undo_redo(snapshot) : this->view3D->get_canvas3d()->get_gizmos_manager().update_after_undo_redo(snapshot); @@ -14703,23 +14673,20 @@ void Plater::priv::update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bo if (wxGetApp().get_mode() == comSimple && model_has_advanced_features(this->model)) { // If the user jumped to a snapshot that require user interface with advanced features, switch to the advanced mode without asking. - // There is a little risk of surprising the user, as he already must have had the advanced or advanced mode active for such a - // snapshot to be taken. + // There is a little risk of surprising the user, as he already must have had the advanced or advanced mode active for such a snapshot to be taken. Slic3r::GUI::wxGetApp().save_mode(comAdvanced); view3D->set_as_dirty(); } - // this->update() above was called with POSTPONE_VALIDATION_ERROR_MESSAGE, so that if an error message was generated when updating the - // back end, it would not open immediately, but it would be saved to be show later. Let's do it now. We do not want to display the - // message box earlier, because on Windows & OSX the message box takes over the message queue pump, which in turn executes the rendering - // function before a full update after the Undo / Redo jump. + // this->update() above was called with POSTPONE_VALIDATION_ERROR_MESSAGE, so that if an error message was generated when updating the back end, it would not open immediately, + // but it would be saved to be show later. Let's do it now. We do not want to display the message box earlier, because on Windows & OSX the message box takes over the message + // queue pump, which in turn executes the rendering function before a full update after the Undo / Redo jump. this->show_delayed_error_message(); - // FIXME what about the state of the manipulators? - // FIXME what about the focus? Cursor in the side panel? + //FIXME what about the state of the manipulators? + //FIXME what about the focus? Cursor in the side panel? - BOOST_LOG_TRIVIAL(info) << "Undo / Redo snapshot reloaded. Undo / Redo stack memory: " - << Slic3r::format_memsize_MB(this->undo_redo_stack().memsize()) << log_memory_info(); + BOOST_LOG_TRIVIAL(info) << "Undo / Redo snapshot reloaded. Undo / Redo stack memory: " << Slic3r::format_memsize_MB(this->undo_redo_stack().memsize()) << log_memory_info(); } void Plater::priv::bring_instance_forward() const @@ -14733,7 +14700,7 @@ void Plater::priv::bring_instance_forward() const return; } BOOST_LOG_TRIVIAL(debug) << "Orca Slicer window going forward"; - // this code maximize app window on Fedora + //this code maximize app window on Fedora { main_frame->Iconize(false); if (main_frame->IsMaximized()) @@ -14741,25 +14708,25 @@ void Plater::priv::bring_instance_forward() const else main_frame->Maximize(false); } - // this code maximize window on Ubuntu + //this code maximize window on Ubuntu { main_frame->Restore(); - wxGetApp().GetTopWindow()->SetFocus(); // focus on my window + wxGetApp().GetTopWindow()->SetFocus(); // focus on my window wxGetApp().GetTopWindow()->Show(true); // show the window - wxGetApp().GetTopWindow()->Raise(); // bring window to front + wxGetApp().GetTopWindow()->Raise(); // bring window to front } } -// BBS: popup object table +//BBS: popup object table bool Plater::priv::PopupObjectTable(int object_id, int volume_id, const wxPoint& position) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, create ObjectTableDialog"); int max_width{1920}, max_height{1080}; - max_width = q->GetMaxWidth(); + max_width = q->GetMaxWidth(); max_height = q->GetMaxHeight(); ObjectTableDialog table_dialog(q, q, &model, wxSize(max_width, max_height)); - // m_popup_table = new ObjectTableDialog(q, q, &model); + //m_popup_table = new ObjectTableDialog(q, q, &model); wxRect rect = sidebar->GetRect(); wxPoint pos = sidebar->ClientToScreen(wxPoint(rect.x, rect.y)); @@ -14773,17 +14740,19 @@ bool Plater::priv::PopupObjectTable(int object_id, int volume_id, const wxPoint& void Sidebar::set_btn_label(const ActionButtonType btn_type, const wxString& label) const { - switch (btn_type) { - case ActionButtonType::abReslice: p->btn_reslice->SetLabelText(label); break; - case ActionButtonType::abExport: p->btn_export_gcode->SetLabelText(label); break; - case ActionButtonType::abSendGCode: /*p->btn_send_gcode->SetLabelText(label);*/ break; + switch (btn_type) + { + case ActionButtonType::abReslice: p->btn_reslice->SetLabelText(label); break; + case ActionButtonType::abExport: p->btn_export_gcode->SetLabelText(label); break; + case ActionButtonType::abSendGCode: /*p->btn_send_gcode->SetLabelText(label);*/ break; } } // Plater / Public -Plater::Plater(wxWindow* parent, MainFrame* main_frame) - : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxGetApp().get_min_size()), p(new priv(this, main_frame)) +Plater::Plater(wxWindow *parent, MainFrame *main_frame) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxGetApp().get_min_size()) + , p(new priv(this, main_frame)) { // Initialization performed in the private c-tor enable_wireframe(true); @@ -14801,7 +14770,7 @@ bool Plater::is_project_dirty() const { return p->is_project_dirty(); } bool Plater::is_presets_dirty() const { return p->is_presets_dirty(); } void Plater::set_plater_dirty(bool is_dirty) { p->set_plater_dirty(is_dirty); } void Plater::update_project_dirty_from_presets() { p->update_project_dirty_from_presets(); } -int Plater::save_project_if_dirty(const wxString& reason) { return p->save_project_if_dirty(reason); } +int Plater::save_project_if_dirty(const wxString& reason) { return p->save_project_if_dirty(reason); } void Plater::reset_project_dirty_after_save() { p->reset_project_dirty_after_save(); } void Plater::reset_project_dirty_initial_presets() { p->reset_project_dirty_initial_presets(); } #if ENABLE_PROJECT_DIRTY_STATE_DEBUG_WINDOW @@ -14812,12 +14781,10 @@ std::vector Plater::mixed_filament_config_indices() const { std::vector indices; auto& config = wxGetApp().preset_bundle->project_config; - auto* opt = config.option("filament_is_mixed"); - if (!opt) - return indices; + auto* opt = config.option("filament_is_mixed"); + if (!opt) return indices; for (size_t i = 0; i < opt->values.size(); ++i) - if (opt->values[i]) - indices.push_back(i); + if (opt->values[i]) indices.push_back(i); return indices; } @@ -14825,7 +14792,7 @@ std::vector Plater::physical_filament_config_indices() const { std::vector indices; auto& config = wxGetApp().preset_bundle->project_config; - auto* opt = config.option("filament_is_mixed"); + auto* opt = config.option("filament_is_mixed"); size_t total = wxGetApp().preset_bundle->filament_presets.size(); for (size_t i = 0; i < total; ++i) { if (!opt || i >= opt->values.size() || !opt->values[i]) @@ -14834,13 +14801,11 @@ std::vector Plater::physical_filament_config_indices() const return indices; } -bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, - TextureImportResult& result, +bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, TextureImportResult& result, std::function cancel_callback, std::function progress_callback) { - if (!loaded_model.texture_mesh || !has_importable_texture(*loaded_model.texture_mesh)) - return false; + if (!loaded_model.texture_mesh || !has_importable_texture(*loaded_model.texture_mesh)) return false; // Defense in depth: if all geometry got dropped earlier (e.g. by a future // regression of the zero-volume cleanup) but the textured mesh is still @@ -14854,31 +14819,29 @@ bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, return true; } - const wxString fallback_warning = _L("Texture import failed. The model appears to contain texture data, but the texture import process " - "could not be completed. The model will be imported as geometry only."); + const wxString fallback_warning = _L("Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only."); BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: opening texture import dialog"; std::vector filament_entries; { - auto& preset_bundle = *wxGetApp().preset_bundle; + auto& preset_bundle = *wxGetApp().preset_bundle; auto& project_config = preset_bundle.project_config; - auto* colours_opt = project_config.option("filament_colour"); - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* type_opt = project_config.option("filament_type"); + auto* colours_opt = project_config.option("filament_colour"); + auto* is_mixed_opt = project_config.option("filament_is_mixed"); + auto* type_opt = project_config.option("filament_type"); auto* components_opt = project_config.option("filament_mixed_components"); - auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); - const size_t total = preset_bundle.filament_presets.size(); + auto* ratios_opt = project_config.option("filament_mixed_sublayer_ratios"); + const size_t total = preset_bundle.filament_presets.size(); filament_entries.reserve(total); for (size_t i = 0; i < total; ++i) { TextureFilamentEntry entry; - entry.kind = (is_mixed_opt && i < is_mixed_opt->values.size() && is_mixed_opt->values[i]) ? - TextureFilamentKind::ExistingMixed : - TextureFilamentKind::ExistingPhysical; - entry.dialog_index = (int) filament_entries.size(); + entry.kind = (is_mixed_opt && i < is_mixed_opt->values.size() && is_mixed_opt->values[i]) ? + TextureFilamentKind::ExistingMixed : TextureFilamentKind::ExistingPhysical; + entry.dialog_index = (int)filament_entries.size(); entry.project_config_index = i; - entry.color_hex = (colours_opt && i < colours_opt->values.size()) ? colours_opt->values[i] : "#808080"; - entry.type = (type_opt && i < type_opt->values.size()) ? type_opt->values[i] : ""; + entry.color_hex = (colours_opt && i < colours_opt->values.size()) ? colours_opt->values[i] : "#808080"; + entry.type = (type_opt && i < type_opt->values.size()) ? type_opt->values[i] : ""; std::string name; if (i < preset_bundle.filament_presets.size()) { @@ -14893,19 +14856,19 @@ bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, if (entry.kind == TextureFilamentKind::ExistingMixed) { if (components_opt && i < components_opt->values.size()) entry.mixed_components = Slic3r::parse_mixed_components(components_opt->values[i]); - std::vector ratios = Slic3r::parse_mixed_ratios(ratios_opt && i < ratios_opt->values.size() ? - ratios_opt->values[i] : - "", - entry.mixed_components.size()); + std::vector ratios = Slic3r::parse_mixed_ratios( + ratios_opt && i < ratios_opt->values.size() ? ratios_opt->values[i] : "", + entry.mixed_components.size()); entry.mixed_ratios.reserve(ratios.size()); for (double ratio : ratios) - entry.mixed_ratios.push_back((int) std::lround(ratio * 100.0)); + entry.mixed_ratios.push_back((int)std::lround(ratio * 100.0)); } filament_entries.push_back(std::move(entry)); } } - TextureImportDialog dlg(q, *loaded_model.texture_mesh, filament_entries, std::move(cancel_callback), std::move(progress_callback)); + TextureImportDialog dlg(q, *loaded_model.texture_mesh, filament_entries, + std::move(cancel_callback), std::move(progress_callback)); if (dlg.ShowModal() != wxID_OK) { if (dlg.was_skipped()) { BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: user skipped texture matching"; @@ -14916,7 +14879,7 @@ bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, if (dlg.fallback_to_geometry_only()) { BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: texture import failed, falling back to geometry-only import"; result.fallback_to_geometry_only = true; - result.fallback_warning = fallback_warning; + result.fallback_warning = fallback_warning; loaded_model.texture_mesh.reset(); return true; } @@ -14925,13 +14888,13 @@ bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, return false; } - auto painted = dlg.get_painted_mesh(); + auto painted = dlg.get_painted_mesh(); auto final_matches = dlg.get_matches(); if (painted.face_colors.empty() || final_matches.empty()) { BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: no painting result"; result.fallback_to_geometry_only = true; - result.fallback_warning = fallback_warning; + result.fallback_warning = fallback_warning; loaded_model.texture_mesh.reset(); return true; } @@ -14939,28 +14902,26 @@ bool Plater::priv::run_textured_mesh_import_dialog(Slic3r::Model& loaded_model, BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: got " << painted.cluster_colors.size() << " clusters, skipped=" << dlg.was_skipped(); - result.painted = std::move(painted); - result.matches = std::move(final_matches); - result.new_filament_colors = dlg.get_new_filament_colors(); + result.painted = std::move(painted); + result.matches = std::move(final_matches); + result.new_filament_colors = dlg.get_new_filament_colors(); result.new_filament_preset_names = dlg.get_new_filament_preset_names(); - result.new_mixed_filaments = dlg.get_new_mixed_filaments(); - result.filament_entries = dlg.get_filament_entries(); - result.existing_filament_count = dlg.get_existing_filament_count(); - result.skipped = dlg.was_skipped(); + result.new_mixed_filaments = dlg.get_new_mixed_filaments(); + result.filament_entries = dlg.get_filament_entries(); + result.existing_filament_count = dlg.get_existing_filament_count(); + result.skipped = dlg.was_skipped(); return true; } -void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model, - const std::vector& obj_idxs, +void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model, const std::vector& obj_idxs, const TextureImportResult& result, - LoadProgressCallback progress_callback, - bool update_scene) + LoadProgressCallback progress_callback, bool update_scene) { auto update_apply_progress = [&progress_callback](int percent, const wxString& message) { return !progress_callback || progress_callback(std::clamp(percent, 0, 100), message); }; - const auto& painted = result.painted; + const auto& painted = result.painted; const auto& final_matches = result.matches; if (painted.face_colors.empty() || final_matches.empty()) { @@ -14977,9 +14938,9 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model auto collect_physical_color_strs = []() { std::vector colors; auto& project_config = wxGetApp().preset_bundle->project_config; - auto* colours_opt = project_config.option("filament_colour"); - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - const size_t total = wxGetApp().preset_bundle->filament_presets.size(); + auto* colours_opt = project_config.option("filament_colour"); + auto* is_mixed_opt = project_config.option("filament_is_mixed"); + const size_t total = wxGetApp().preset_bundle->filament_presets.size(); for (size_t i = 0; i < total; ++i) { const bool is_mixed = is_mixed_opt && i < is_mixed_opt->values.size() && is_mixed_opt->values[i]; if (!is_mixed) @@ -14991,7 +14952,7 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model const auto& entries = result.filament_entries; std::vector filament_index_remap(entries.size(), -1); size_t existing_physical_count = 0; - size_t new_physical_count = 0; + size_t new_physical_count = 0; for (const auto& entry : entries) { if (entry.kind == TextureFilamentKind::ExistingPhysical) ++existing_physical_count; @@ -15000,12 +14961,12 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model } for (const auto& entry : entries) { - if (entry.dialog_index < 0 || entry.dialog_index >= (int) filament_index_remap.size()) + if (entry.dialog_index < 0 || entry.dialog_index >= (int)filament_index_remap.size()) continue; if (entry.kind == TextureFilamentKind::ExistingPhysical) { - filament_index_remap[entry.dialog_index] = (int) entry.project_config_index; + filament_index_remap[entry.dialog_index] = (int)entry.project_config_index; } else if (entry.kind == TextureFilamentKind::ExistingMixed) { - filament_index_remap[entry.dialog_index] = (int) (entry.project_config_index + new_physical_count); + filament_index_remap[entry.dialog_index] = (int)(entry.project_config_index + new_physical_count); } } @@ -15016,10 +14977,12 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model wxColour new_col(entry.color_hex); const size_t final_idx = existing_physical_count + new_physical_order; sidebar->add_custom_filament(new_col, entry.preset_name); - if (entry.dialog_index >= 0 && entry.dialog_index < (int) filament_index_remap.size()) - filament_index_remap[entry.dialog_index] = (int) final_idx; - BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: created pending physical filament dialog=" << entry.dialog_index - << " final=" << final_idx << " color=" << entry.color_hex << " preset=" << entry.preset_name; + if (entry.dialog_index >= 0 && entry.dialog_index < (int)filament_index_remap.size()) + filament_index_remap[entry.dialog_index] = (int)final_idx; + BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: created pending physical filament dialog=" + << entry.dialog_index << " final=" << final_idx + << " color=" << entry.color_hex + << " preset=" << entry.preset_name; ++new_physical_order; } @@ -15030,25 +14993,27 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model mixed_result.components.reserve(mixed.component_dialog_indices.size()); bool valid_components = true; for (int component_dialog_idx : mixed.component_dialog_indices) { - if (component_dialog_idx < 0 || component_dialog_idx >= (int) filament_index_remap.size() || + if (component_dialog_idx < 0 || component_dialog_idx >= (int)filament_index_remap.size() || filament_index_remap[component_dialog_idx] < 0) { valid_components = false; break; } - mixed_result.components.push_back((unsigned int) (filament_index_remap[component_dialog_idx] + 1)); + mixed_result.components.push_back((unsigned int)(filament_index_remap[component_dialog_idx] + 1)); } - if (!valid_components || mixed_result.components.size() < 2 || mixed_result.components.size() != mixed_result.ratios.size()) { - BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: invalid pending mixed filament dialog=" << mixed.dialog_index; + if (!valid_components || mixed_result.components.size() < 2 || + mixed_result.components.size() != mixed_result.ratios.size()) { + BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: invalid pending mixed filament dialog=" + << mixed.dialog_index; continue; } - const int final_idx = (int) wxGetApp().preset_bundle->filament_presets.size(); + const int final_idx = (int)wxGetApp().preset_bundle->filament_presets.size(); if (create_mixed_filament_from_result(sidebar, mixed_result, physical_colors_for_mixing)) { - if (mixed.dialog_index >= 0 && mixed.dialog_index < (int) filament_index_remap.size()) + if (mixed.dialog_index >= 0 && mixed.dialog_index < (int)filament_index_remap.size()) filament_index_remap[mixed.dialog_index] = final_idx; physical_colors_for_mixing = collect_physical_color_strs(); - BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: created pending mixed filament dialog=" << mixed.dialog_index - << " final=" << final_idx; + BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: created pending mixed filament dialog=" + << mixed.dialog_index << " final=" << final_idx; } } @@ -15056,11 +15021,11 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model for (auto& m : remapped_matches) { if (m.filament_index < 0) continue; - if (m.filament_index < (int) filament_index_remap.size() && filament_index_remap[m.filament_index] >= 0) { + if (m.filament_index < (int)filament_index_remap.size() && filament_index_remap[m.filament_index] >= 0) { m.filament_index = filament_index_remap[m.filament_index]; } else { - BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: invalid filament index " << m.filament_index - << " in texture mapping"; + BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: invalid filament index " + << m.filament_index << " in texture mapping"; m.filament_index = -1; } } @@ -15069,7 +15034,7 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model { std::map, int> color_to_filament; for (const auto& m : remapped_matches) { - if (m.cluster_index >= 0 && m.cluster_index < (int) painted.cluster_colors.size() && m.filament_index >= 0) + if (m.cluster_index >= 0 && m.cluster_index < (int)painted.cluster_colors.size() && m.filament_index >= 0) color_to_filament[painted.cluster_colors[m.cluster_index]] = m.filament_index + 1; } for (const auto& face_color : painted.face_colors) { @@ -15088,11 +15053,9 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model for (size_t obj_order = 0; obj_order < obj_idxs.size(); ++obj_order) { size_t idx = obj_idxs[obj_order]; - if (idx >= loaded_model.objects.size()) - continue; + if (idx >= loaded_model.objects.size()) continue; ModelObject* obj = loaded_model.objects[idx]; - if (!obj) - continue; + if (!obj) continue; // painted is derived from the whole textured mesh and is meaningful // only against a single MODEL_PART volume. Applying it to every @@ -15100,37 +15063,38 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model // volume with the same painted geometry. Restrict to the first // model_part and warn when the object holds more than one. ModelVolume* target = nullptr; - int part_count = 0; + int part_count = 0; for (ModelVolume* vol : obj->volumes) { if (vol && vol->is_model_part()) { ++part_count; - if (!target) - target = vol; + if (!target) target = vol; } } - if (!target) - continue; + if (!target) continue; if (part_count > 1) { - BOOST_LOG_TRIVIAL(warning) << "handle_textured_mesh_import: object has " << part_count - << " model parts; painting only applied to the first part."; + BOOST_LOG_TRIVIAL(warning) + << "handle_textured_mesh_import: object has " << part_count + << " model parts; painting only applied to the first part."; } - if (Slic3r::apply_painted_mesh_to_volume(painted, remapped_matches, *target) && min_used_filament_1based > 0) { + if (Slic3r::apply_painted_mesh_to_volume(painted, remapped_matches, *target) + && min_used_filament_1based > 0) { target->config.set("extruder", min_used_filament_1based); obj->config.set("extruder", min_used_filament_1based); if (update_scene) { if (auto* obj_list = wxGetApp().obj_list()) { - obj_list->update_objects_list_filament_column( - std::max(wxGetApp().filaments_cnt(), (size_t) min_used_filament_1based)); + obj_list->update_objects_list_filament_column(std::max( + wxGetApp().filaments_cnt(), (size_t)min_used_filament_1based)); obj_list->update_info_items(idx); } } - BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: set base filament to " << min_used_filament_1based - << " for object index " << idx << ", object extruder=" << obj->config.extruder() + BOOST_LOG_TRIVIAL(info) << "handle_textured_mesh_import: set base filament to " + << min_used_filament_1based << " for object index " << idx + << ", object extruder=" << obj->config.extruder() << ", volume extruder=" << target->config.extruder(); } // bbox invalidation is performed inside apply_painted_mesh_to_volume. obj->ensure_on_bed(); - const int object_percent = 25 + (int) (60 * (obj_order + 1) / std::max(obj_idxs.size(), 1)); + const int object_percent = 25 + (int)(60 * (obj_order + 1) / std::max(obj_idxs.size(), 1)); if (!update_apply_progress(object_percent, _L("Applying texture colors..."))) return; } @@ -15145,8 +15109,7 @@ void Plater::priv::apply_textured_mesh_import_result(Slic3r::Model& loaded_model update_apply_progress(100, _L("Texture colors applied.")); } -void Plater::priv::handle_textured_mesh_import(Slic3r::Model& loaded_model, - const std::vector& obj_idxs, +void Plater::priv::handle_textured_mesh_import(Slic3r::Model& loaded_model, const std::vector& obj_idxs, std::function cancel_callback) { TextureImportResult result; @@ -15156,13 +15119,13 @@ void Plater::priv::handle_textured_mesh_import(Slic3r::Model& loaded_model, apply_textured_mesh_import_result(loaded_model, obj_idxs, result); } -Sidebar& Plater::sidebar() { return *p->sidebar; } -const Model& Plater::model() const { return p->model; } -Model& Plater::model() { return p->model; } -const Print& Plater::fff_print() const { return p->fff_print; } -Print& Plater::fff_print() { return p->fff_print; } -const SLAPrint& Plater::sla_print() const { return p->sla_print; } -SLAPrint& Plater::sla_print() { return p->sla_print; } +Sidebar& Plater::sidebar() { return *p->sidebar; } +const Model& Plater::model() const { return p->model; } +Model& Plater::model() { return p->model; } +const Print& Plater::fff_print() const { return p->fff_print; } +Print& Plater::fff_print() { return p->fff_print; } +const SLAPrint& Plater::sla_print() const { return p->sla_print; } +SLAPrint& Plater::sla_print() { return p->sla_print; } int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_name) { @@ -15171,20 +15134,18 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ bool transfer_preset_changes = false; // BBS: save confirm - auto check = [this, &transfer_preset_changes](bool yes_or_no) { + auto check = [this,&transfer_preset_changes](bool yes_or_no) { m_new_project_and_check_state = true; wxString header = _L("Some presets are modified.") + "\n" + - (yes_or_no ? - _L("You can keep the modified presets for the new project or discard them") : - _L("You can keep the modified presets for the new project, discard, or save changes as new presets.")); + (yes_or_no ? _L("You can keep the modified presets for the new project or discard them") : + _L("You can keep the modified presets for the new project, discard, or save changes as new presets.")); int act_buttons = ActionButtons::KEEP | ActionButtons::REMEMBER_CHOISE; if (!yes_or_no) act_buttons |= ActionButtons::SAVE; if (m_exported_file) { //.gcode.3mf ignore presets modify m_exported_file = false; } - bool result = wxGetApp().check_and_keep_current_preset_changes(_L("Creating a new project"), header, act_buttons, - &transfer_preset_changes); + bool result = wxGetApp().check_and_keep_current_preset_changes(_L("Creating a new project"), header, act_buttons, &transfer_preset_changes); m_new_project_and_check_state = false; return result; }; @@ -15192,26 +15153,26 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ if (!skip_confirm && (result = close_with_confirm(check)) == wxID_CANCEL) return wxID_CANCEL; - m_only_gcode = false; - m_exported_file = false; + m_only_gcode = false; + m_exported_file = false; m_loading_project = false; get_notification_manager()->clear_all(); if (!silent) wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - // get_partplate_list().reinit(); - // get_partplate_list().update_slice_context_to_current_plate(p->background_process); - // p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); + //get_partplate_list().reinit(); + //get_partplate_list().update_slice_context_to_current_plate(p->background_process); + //p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); reset(transfer_preset_changes); reset_project_dirty_after_save(); reset_project_dirty_initial_presets(); wxGetApp().update_saved_preset_from_current_preset(); update_project_dirty_from_presets(); - // reset project + //reset project p->project.reset(); - // set project name + //set project name if (project_name.empty()) p->set_project_name(_L("Untitled")); else @@ -15222,7 +15183,7 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ Model m; model().load_from(m); // new id avoid same path name - // select first plate + //select first plate get_partplate_list().select_plate(0); SimpleEvent event(EVT_GLCANVAS_PLATE_SELECT); p->on_plate_selected(event); @@ -15244,7 +15205,8 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ LoadType determine_load_type(std::string filename, std::string override_setting = ""); // BBS: FIXME, missing resotre logic -void Plater::load_project(wxString const& filename2, wxString const& originfile) +void Plater::load_project(wxString const& filename2, + wxString const& originfile) { model().calib_pa_pattern.reset(nullptr); model().plates_custom_gcodes.clear(); @@ -15252,8 +15214,9 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile; BOOST_LOG_TRIVIAL(info) << __FUNCTION__; auto filename = filename2; - auto check = [&filename, this](bool yes_or_no) { - if (!yes_or_no && !wxGetApp().check_and_save_current_preset_changes(_L("Load project"), _L("Some presets are modified."))) + auto check = [&filename, this] (bool yes_or_no) { + if (!yes_or_no && !wxGetApp().check_and_save_current_preset_changes(_L("Load project"), + _L("Some presets are modified."))) return false; if (filename.empty()) { // Ask user for a project file name. @@ -15270,8 +15233,8 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) // BBS if (m_loading_project) { - // some error cases happens - // return directly + //some error cases happens + //return directly BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": current loading other project, return directly"); return; } @@ -15279,7 +15242,7 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) m_loading_project = true; ScopeGuard loading_project_sc([this]() { m_loading_project = false; }); // Make sure state restored on any early return - m_only_gcode = false; + m_only_gcode = false; m_exported_file = false; get_notification_manager()->bbl_close_plateinfo_notification(); get_notification_manager()->bbl_close_preview_only_notification(); @@ -15290,7 +15253,7 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) get_notification_manager()->close_notification_of_type(NotificationType::SlicingSeriousWarning); get_notification_manager()->close_notification_of_type(NotificationType::SlicingWarning); - auto path = into_path(filename); + auto path = into_path(filename); auto strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig; if (originfile == "") { @@ -15301,9 +15264,9 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) strategy = strategy | LoadStrategy::Restore; } else { switch (determine_load_type(filename.ToStdString())) { - case LoadType::OpenProject: break; // Do nothing - case LoadType::LoadGeometry:; strategy = LoadStrategy::LoadModel; break; - default: return; // User cancelled + case LoadType::OpenProject: break; // Do nothing + case LoadType::LoadGeometry:; strategy = LoadStrategy::LoadModel; break; + default: return; // User cancelled } } bool load_restore = strategy & LoadStrategy::Restore; @@ -15330,7 +15293,7 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << (load_restore ? originfile : filename); p->set_project_filename(load_restore ? originfile : filename); if (load_restore && originfile.IsEmpty()) { - p->set_project_name(_L("Untitled")); + p->set_project_name(_L("Untitled")); } } else { @@ -15346,15 +15309,17 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) if (!filename.IsEmpty()) wxGetApp().mainframe->add_to_recent_projects(filename); } + } // BBS set default 3D view and direction after loading project - // p->select_view_3D("3D"); + //p->select_view_3D("3D"); if (!m_exported_file) { p->select_view("topfront"); p->camera.requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - } else { + } + else { p->partplate_list.select_plate_view(); } @@ -15374,7 +15339,7 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) wxGetApp().params_panel()->switch_to_object_if_has_object_configs(); - auto has_modify = is_flush_config_modified(); + auto has_modify = is_flush_config_modified(); sidebar().set_flushing_volume_warning(has_modify); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " load project done"; @@ -15383,8 +15348,8 @@ void Plater::load_project(wxString const& filename2, wxString const& originfile) // BBS: save logic int Plater::save_project(bool saveAs) { - // if (up_to_date(false, false)) // should we always save - // return; + //if (up_to_date(false, false)) // should we always save + // return; auto filename = get_project_filename(".3mf"); if (!saveAs && filename.IsEmpty()) saveAs = true; @@ -15395,18 +15360,15 @@ int Plater::save_project(bool saveAs) if (filename == "") return wxID_CANCEL; - // BBS export 3mf without gcode - auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh; + //BBS export 3mf without gcode + auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh; bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); if (full_pathnames) { save_strategy = save_strategy | SaveStrategy::FullPathSources; } if (export_3mf(into_path(filename), save_strategy) < 0) { - MessageDialog(this, - _L("Failed to save the project.\nPlease check whether the folder exists online or if other programs have the project " - "file open."), - _L("Save project"), wxOK | wxICON_WARNING) - .ShowModal(); + MessageDialog(this, _L("Failed to save the project.\nPlease check whether the folder exists online or if other programs have the project file open."), + _L("Save project"), wxOK | wxICON_WARNING).ShowModal(); return wxID_CANCEL; } @@ -15423,17 +15385,18 @@ int Plater::save_project(bool saveAs) try { json j; boost::uintmax_t size = boost::filesystem::file_size(into_path(filename)); - j["file_size"] = size; - j["file_name"] = std::string(filename.mb_str()); + j["file_size"] = size; + j["file_name"] = std::string(filename.mb_str()); NetworkAgent* agent = wxGetApp().getAgent(); - } catch (...) {} + } + catch (...) {} update_title_dirty_status(); return wxID_YES; } -// BBS import model by model id +//BBS import model by model id void Plater::import_model_id(wxString download_info) { BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " download info: " << download_info; @@ -15443,135 +15406,155 @@ void Plater::import_model_id(wxString download_info) wxString filename; wxString separator = "&name="; - try { + try + { size_t namePos = download_info.Find(separator); if (namePos != wxString::npos) { download_url = download_info.Mid(0, namePos); - filename = download_info.Mid(namePos + separator.Length()); + filename = download_info.Mid(namePos + separator.Length()); - } else { + } + else { fs::path download_path = fs::path(download_origin_url.wx_str()); - download_url = download_origin_url; - filename = download_path.filename().string(); + download_url = download_origin_url; + filename = download_path.filename().string(); } - } catch (const std::exception&) { - // wxString sError = error.what(); + } + catch (const std::exception&) + { + //wxString sError = error.what(); } - bool download_ok = false; - int retry_count = 0; + bool download_ok = false; + int retry_count = 0; const int max_retries = 3; /* jump to 3D eidtor */ wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); /* prepare progress dialog */ - bool cont = true; + bool cont = true; bool cont_dlg = true; - bool cancel = false; + bool cancel = false; wxString msg; wxString dlg_title = _L("Importing Model"); int percent = 0; - ProgressDialog dlg(dlg_title, wxString(' ', 100) + "\n\n\n\n", - 100, // range - this, // parent - wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_SMOOTH); + ProgressDialog dlg(dlg_title, + wxString(' ', 100) + "\n\n\n\n", + 100, // range + this, // parent + wxPD_CAN_ABORT | + wxPD_APP_MODAL | + wxPD_AUTO_HIDE | + wxPD_SMOOTH); boost::filesystem::path target_path; - // reset params + //reset params p->project.reset(); /* prepare project and profile */ boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &retry_count, &msg, &target_path, &download_ok, download_url, &filename] { - int res = 0; - std::string http_body; + // Orca: NetworkAgent is not needed and only prevents this from running +// NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); +// if (!m_agent) return; - msg = _L("Preparing 3MF file..."); + int res = 0; + std::string http_body; - // gets the number of files with the same name - std::vector vecFiles; - bool is_already_exist = false; + msg = _L("Preparing 3MF file..."); - target_path = fs::path(wxGetApp().app_config->get("download_path")); + //gets the number of files with the same name + std::vector vecFiles; + bool is_already_exist = false; - try { - vecFiles.clear(); - wxString extension = fs::path(filename.wx_str()).extension().c_str(); - // check file suffix - if (!extension.Contains(".3mf")) { - msg = _L("Download failed; unknown file format."); - return; + target_path = fs::path(wxGetApp().app_config->get("download_path")); + + try + { + vecFiles.clear(); + wxString extension = fs::path(filename.wx_str()).extension().c_str(); + + + //check file suffix + if (!extension.Contains(".3mf")) { + msg = _L("Download failed; unknown file format."); + return; + } + + auto name = filename.substr(0, filename.length() - extension.length() - 1); + + for (const auto& iter : boost::filesystem::directory_iterator(target_path)) + { + if (boost::filesystem::is_directory(iter.path())) + continue; + + wxString sFile = iter.path().filename().string().c_str(); + if (strstr(sFile.c_str(), name.c_str()) != NULL) { + vecFiles.push_back(sFile); } - auto name = filename.substr(0, filename.length() - extension.length() - 1); - - for (const auto& iter : boost::filesystem::directory_iterator(target_path)) { - if (boost::filesystem::is_directory(iter.path())) - continue; - - wxString sFile = iter.path().filename().string().c_str(); - if (strstr(sFile.c_str(), name.c_str()) != NULL) { - vecFiles.push_back(sFile); - } - - if (sFile == filename) - is_already_exist = true; - } - } catch (const std::exception&) { - // wxString sError = error.what(); + if (sFile == filename) is_already_exist = true; } + } + catch (const std::exception&) + { + //wxString sError = error.what(); + } - // update filename - if (is_already_exist && vecFiles.size() >= 1) { - wxString extension = fs::path(filename.wx_str()).extension().c_str(); - wxString name = filename.substr(0, filename.length() - extension.length()); - filename = wxString::Format("%s(%d)%s", name, vecFiles.size() + 1, extension).ToStdString(); - } + //update filename + if (is_already_exist && vecFiles.size() >= 1) { + wxString extension = fs::path(filename.wx_str()).extension().c_str(); + wxString name = filename.substr(0, filename.length() - extension.length()); + filename = wxString::Format("%s(%d)%s", name, vecFiles.size() + 1, extension).ToStdString(); + } - msg = _L("Downloading project..."); - // target_path = wxStandardPaths::Get().GetTempDir().utf8_str().data(); + msg = _L("Downloading project..."); - // target_path = wxGetApp().get_local_models_path().c_str(); - boost::uuids::uuid uuid = boost::uuids::random_generator()(); - std::string unique = to_string(uuid).substr(0, 6); + //target_path = wxStandardPaths::Get().GetTempDir().utf8_str().data(); - if (filename.empty()) { - filename = "untitled.3mf"; - } - // target_path /= (boost::format("%1%_%2%.3mf") % filename % unique).str(); - target_path /= fs::path(filename.wc_str()); + //target_path = wxGetApp().get_local_models_path().c_str(); + boost::uuids::uuid uuid = boost::uuids::random_generator()(); + std::string unique = to_string(uuid).substr(0, 6); - fs::path tmp_path = target_path; - tmp_path += format(".%1%", ".download"); + if (filename.empty()) { + filename = "untitled.3mf"; + } - auto filesize = 0; - bool size_limit = false; - auto http = Http::get(download_url.ToStdString()); + //target_path /= (boost::format("%1%_%2%.3mf") % filename % unique).str(); + target_path /= fs::path(filename.wc_str()); - while (cont && retry_count < max_retries) { - retry_count++; - http.on_progress([&percent, &cont, &msg, &filesize, &size_limit](Http::Progress progress, bool& cancel) { - if (!cont) - cancel = true; - if (progress.dltotal != 0) { - if (filesize == 0) { - filesize = progress.dltotal; - double megabytes = static_cast(progress.dltotal) / (1024 * 1024); - // The maximum size of a 3mf file is 500mb - if (megabytes > 500) { - cont = false; - size_limit = true; - } + fs::path tmp_path = target_path; + tmp_path += format(".%1%", ".download"); + + auto filesize = 0; + bool size_limit = false; + auto http = Http::get(download_url.ToStdString()); + + while (cont && retry_count < max_retries) { + retry_count++; + http.on_progress([&percent, &cont, &msg, &filesize, &size_limit](Http::Progress progress, bool& cancel) { + + if (!cont) cancel = true; + if (progress.dltotal != 0) { + + if (filesize == 0) { + filesize = progress.dltotal; + double megabytes = static_cast(progress.dltotal) / (1024 * 1024); + //The maximum size of a 3mf file is 500mb + if (megabytes > 500) { + cont = false; + size_limit = true; } - percent = progress.dlnow * 100 / progress.dltotal; } + percent = progress.dlnow * 100 / progress.dltotal; + } if (size_limit) { msg = _L("Download failed; File size exception."); @@ -15587,31 +15570,31 @@ void Plater::import_model_id(wxString download_info) http_status, error); - if (retry_count == max_retries) { - msg = _L("Importing to Orca Slicer failed. Please download the file and manually import it."); - cont = false; - } - }) - .on_complete([&cont, &download_ok, tmp_path, target_path](std::string body, unsigned /* http_status */) { + if (retry_count == max_retries) { + msg = _L("Importing to Orca Slicer failed. Please download the file and manually import it."); + cont = false; + } + }) + .on_complete([&cont, &download_ok, tmp_path, target_path](std::string body, unsigned /* http_status */) { fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc); file.write(body.c_str(), body.size()); file.close(); fs::rename(tmp_path, target_path); - cont = false; + cont = false; download_ok = true; - }) - .perform_sync(); + }).perform_sync(); // for break while - // cont = false; - } - }); + //cont = false; + } + + }); while (cont && cont_dlg) { wxMilliSleep(50); cont_dlg = dlg.Update(percent, msg); if (!cont_dlg) { - cont = cont_dlg; + cont = cont_dlg; cancel = true; } @@ -15632,15 +15615,13 @@ void Plater::import_model_id(wxString download_info) BOOST_LOG_TRIVIAL(trace) << "import_model_id: target_path = " << target_path.string(); /* load project */ // Orca: If download is a zip file, treat it as if file has been drag and dropped on the plater - if (target_path.extension() == ".zip") { - wxArrayString arr; - arr.Add(from_path(target_path)); - this->load_files(arr); - } else + if (target_path.extension() == ".zip") + { wxArrayString arr; arr.Add(from_path(target_path)); this->load_files(arr); } + else this->load_project(from_path(target_path)); /*BBS set project info after load project, project info is reset in load project */ - // p->project.project_model_id = model_id; - // p->project.project_design_id = design_id; + //p->project.project_model_id = model_id; + //p->project.project_design_id = design_id; AppConfig* config = wxGetApp().app_config; if (config) { p->project.project_country_code = config->get_country_code(); @@ -15649,7 +15630,8 @@ void Plater::import_model_id(wxString download_info) // show save new project p->set_project_filename(target_path.wstring()); p->notification_manager->push_import_finished_notification(target_path.string(), target_path.parent_path().string(), false); - } else { + } + else { if (!msg.empty()) { MessageDialog msg_wingow(nullptr, msg, wxEmptyString, wxICON_WARNING | wxOK); msg_wingow.SetSize(wxSize(FromDIP(480), -1)); @@ -15658,8 +15640,11 @@ void Plater::import_model_id(wxString download_info) return; } } -// BBS download project by project id -void Plater::download_project(const wxString& project_id) { return; } +//BBS download project by project id +void Plater::download_project(const wxString& project_id) +{ + return; +} void Plater::request_model_download(wxString url) { @@ -15682,7 +15667,8 @@ bool Plater::up_to_date(bool saved, bool backup) Slic3r::clear_other_changes(backup); return p->up_to_date(saved, backup); } - return p->model.objects.empty() || (p->up_to_date(saved, backup) && !Slic3r::has_other_changes(backup)); + return p->model.objects.empty() || (p->up_to_date(saved, backup) && + !Slic3r::has_other_changes(backup)); } bool Plater::add_model(bool imperial_units, std::string fname) @@ -15697,12 +15683,13 @@ bool Plater::add_model(bool imperial_units, std::string fname) for (const auto& file : input_files) paths.emplace_back(into_path(file)); - } else { + } + else { paths.emplace_back(fname); } std::string snapshot_label; - assert(!paths.empty()); + assert(! paths.empty()); if (paths.size() == 1) { snapshot_label = "Import Object"; snapshot_label += ": "; @@ -15711,7 +15698,7 @@ bool Plater::add_model(bool imperial_units, std::string fname) snapshot_label = "Import Objects"; snapshot_label += ": "; snapshot_label += paths.front().filename().string().c_str(); - for (size_t i = 1; i < paths.size(); ++i) { + for (size_t i = 1; i < paths.size(); ++ i) { snapshot_label += ", "; snapshot_label += encode_path(paths[i].filename().string().c_str()); } @@ -15723,21 +15710,11 @@ bool Plater::add_model(bool imperial_units, std::string fname) auto loadfiles_type = LoadFilesType::NoFile; auto amf_files_count = get_3mf_file_count(paths); - if (paths.size() > 1 && amf_files_count < paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MFOther; - } - if (paths.size() > 1 && amf_files_count == paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MF; - } - if (paths.size() > 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::MultipleOther; - } - if (paths.size() == 1 && amf_files_count == 1) { - loadfiles_type = LoadFilesType::Single3MF; - }; - if (paths.size() == 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::SingleOther; - }; + if (paths.size() > 1 && amf_files_count < paths.size()) { loadfiles_type = LoadFilesType::Multiple3MFOther; } + if (paths.size() > 1 && amf_files_count == paths.size()) { loadfiles_type = LoadFilesType::Multiple3MF; } + if (paths.size() > 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::MultipleOther; } + if (paths.size() == 1 && amf_files_count == 1) { loadfiles_type = LoadFilesType::Single3MF; }; + if (paths.size() == 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::SingleOther; }; bool ask_multi = false; @@ -15745,10 +15722,10 @@ bool Plater::add_model(bool imperial_units, std::string fname) ask_multi = true; auto strategy = LoadStrategy::LoadModel; - if (imperial_units) - strategy = strategy | LoadStrategy::ImperialUnits; + if (imperial_units) strategy = strategy | LoadStrategy::ImperialUnits; const bool loaded = !load_files(paths, strategy, ask_multi).empty(); if (loaded) { + if (get_project_name() == _L("Untitled") && paths.size() > 0) { boost::filesystem::path full_path(paths[0].string()); p->set_project_name(from_u8(full_path.stem().string())); @@ -15764,16 +15741,22 @@ void Plater::calib_pa(const Calib_Params& params) const auto calib_pa_name = wxString::Format(L"Pressure Advance Test"); new_project(false, false, calib_pa_name); wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; print_config->set_key_value("overhang_reverse", new ConfigOptionBool(false)); print_config->set_key_value("precise_z_height", new ConfigOptionBool(false)); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); switch (params.mode) { - case CalibMode::Calib_PA_Line: add_model(false, Slic3r::resources_dir() + "/calib/pressure_advance/pressure_advance_test.drc"); break; - case CalibMode::Calib_PA_Pattern: _calib_pa_pattern(params); break; - case CalibMode::Calib_PA_Tower: _calib_pa_tower(params); break; - default: break; + case CalibMode::Calib_PA_Line: + add_model(false, Slic3r::resources_dir() + "/calib/pressure_advance/pressure_advance_test.drc"); + break; + case CalibMode::Calib_PA_Pattern: + _calib_pa_pattern(params); + break; + case CalibMode::Calib_PA_Tower: + _calib_pa_tower(params); + break; + default: break; } p->background_process.fff_print()->set_calib_params(params); } @@ -15784,17 +15767,17 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) std::vector accels{params.accelerations}; std::vector object_idxs{}; /* Set common parameters */ - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; DynamicPrintConfig& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - double nozzle_diameter = printer_config->option("nozzle_diameter")->get_at(0); + auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; + double nozzle_diameter = printer_config->option("nozzle_diameter")->get_at(0); set_config_values(filament_config, "filament_retract_when_changing_layer", false); set_config_values(filament_config, "filament_wipe", false); set_config_values(printer_config, "wipe", false); set_config_values(printer_config, "retract_when_changing_layer", false); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool(false)); - // Orca: find acceleration to use in the test + //Orca: find acceleration to use in the test auto accel = print_config.get_abs_value_at("outer_wall_acceleration", params.extruder_id); // get the outer wall acceleration if (accel == 0) // if outer wall accel isnt defined, fall back to inner wall accel accel = print_config.get_abs_value_at("inner_wall_acceleration", params.extruder_id); @@ -15804,27 +15787,26 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) // is set to the travel accel before printing the pattern. if (accels.empty()) { accels.assign({accel}); - const auto msg{_L("INFO:") + "\n" + _L("No accelerations provided for calibration. Use default acceleration value ") + - std::to_string(long(accel)) + _L(u8"mm/s²")}; + const auto msg{_L("INFO:") + "\n" + + _L("No accelerations provided for calibration. Use default acceleration value ") + std::to_string(long(accel)) + _L(u8"mm/s²")}; get_notification_manager()->push_notification(msg.utf8_string()); } else { // set max acceleration in case of batch mode to get correct test pattern size accel = *std::max_element(accels.begin(), accels.end()); } set_config_values(&print_config, "outer_wall_acceleration", accel); - print_config.set_key_value("print_sequence", new ConfigOptionEnum(PrintSequence::ByLayer)); - - // Orca: find jerk value to use in the test - if (!has_junction_deviation(printer_config) && - print_config.get_abs_value_at("default_jerk", params.extruder_id) > 0) { // we have set a jerk value + print_config.set_key_value( "print_sequence", new ConfigOptionEnum(PrintSequence::ByLayer)); + + //Orca: find jerk value to use in the test + if(!has_junction_deviation(printer_config) && print_config.get_abs_value_at("default_jerk", params.extruder_id) > 0){ // we have set a jerk value auto jerk = print_config.get_abs_value_at("outer_wall_jerk", params.extruder_id); // get outer wall jerk if (jerk == 0) // if outer wall jerk is not defined, get inner wall jerk jerk = print_config.get_abs_value_at("inner_wall_jerk", params.extruder_id); if (jerk == 0) // if inner wall jerk is not defined, get the default jerk jerk = print_config.get_abs_value_at("default_jerk", params.extruder_id); - - // Orca: Set jerk values. Again first layer jerk should not matter as it is reset to the travel jerk before the - // first PA pattern is printed. + + //Orca: Set jerk values. Again first layer jerk should not matter as it is reset to the travel jerk before the + // first PA pattern is printed. set_config_values(&print_config, "default_jerk", jerk); set_config_values(&print_config, "outer_wall_jerk", jerk); set_config_values(&print_config, "inner_wall_jerk", jerk); @@ -15833,38 +15815,45 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) set_config_values(&print_config, "travel_jerk", jerk); } - if (has_junction_deviation(printer_config)) { + if (has_junction_deviation(printer_config)){ set_config_values(&print_config, "default_junction_deviation", 0); } - + for (const auto& opt : SuggestedConfigCalibPAPattern().floats_pairs) { set_config_values(&print_config, opt.first, opt.second[0]); } for (const auto& opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { - print_config.set_key_value(opt.first, new ConfigOptionFloatOrPercent(nozzle_diameter * opt.second / 100, false)); + print_config.set_key_value( + opt.first, + new ConfigOptionFloatOrPercent(nozzle_diameter * opt.second / 100, false) + ); } for (const auto& opt : SuggestedConfigCalibPAPattern().int_pairs) { - print_config.set_key_value(opt.first, new ConfigOptionInt(opt.second)); + print_config.set_key_value( + opt.first, + new ConfigOptionInt(opt.second) + ); } print_config.set_key_value(SuggestedConfigCalibPAPattern().brim_pair.first, - new ConfigOptionEnum(SuggestedConfigCalibPAPattern().brim_pair.second)); + new ConfigOptionEnum(SuggestedConfigCalibPAPattern().brim_pair.second)); print_config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); // Orca: Set the outer wall speed to the optimal speed for the test, cap it with max volumetric speed if (speeds.empty()) { // TODO: per-variant cap - double speed = CalibPressureAdvance::find_optimal_PA_speed(wxGetApp().preset_bundle->full_config(), - print_config.get_abs_value("line_width", nozzle_diameter), - print_config.get_abs_value("layer_height"), 0, 0); + double speed = CalibPressureAdvance::find_optimal_PA_speed( + wxGetApp().preset_bundle->full_config(), + print_config.get_abs_value("line_width", nozzle_diameter), + print_config.get_abs_value("layer_height"), 0, 0); set_config_values(&print_config, "outer_wall_speed", speed); speeds.assign({speed}); - const auto msg{_L("INFO:") + "\n" + _L("No speeds provided for calibration. Use default optimal speed ") + - std::to_string(long(speed)) + _L("mm/s")}; + const auto msg{_L("INFO:") + "\n" + + _L("No speeds provided for calibration. Use default optimal speed ") + std::to_string(long(speed)) + _L("mm/s")}; get_notification_manager()->push_notification(msg.utf8_string()); } else if (speeds.size() == 1) { // If we have single value provided, set speed using global configuration. @@ -15880,15 +15869,21 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) wxGetApp().get_tab(Preset::TYPE_PRINTER)->reload_config(); const DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(); - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - const bool is_bbl_machine = preset_bundle->is_bbl_vendor(); - auto cur_plate = get_partplate_list().get_plate(0); + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + const bool is_bbl_machine = preset_bundle->is_bbl_vendor(); + auto cur_plate = get_partplate_list().get_plate(0); // add "handle" cube sidebar().obj_list()->load_generic_subobject("Cube", ModelVolumeType::INVALID); - auto* cube = model().objects[0]; + auto *cube = model().objects[0]; - CalibPressureAdvancePattern pa_pattern(params, full_config, is_bbl_machine, *cube, cur_plate->get_origin()); + CalibPressureAdvancePattern pa_pattern( + params, + full_config, + is_bbl_machine, + *cube, + cur_plate->get_origin() + ); /* Having PA pattern configured, we could make a set of polygons resembling N test patterns. * We'll arrange this set of polygons, so we would know position of each test pattern and @@ -15898,7 +15893,8 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) * as a reference for objects arrangement. Polygon is slightly oversized to add spaces between patterns. * That arrangement will be used to place 'handle cubes' for each test. */ auto cube_bb = cube->raw_bounding_box(); - cube->scale((pa_pattern.print_size_x() + 4) / cube_bb.size().x(), (pa_pattern.print_size_y() + 4) / cube_bb.size().y(), + cube->scale((pa_pattern.print_size_x() + 4) / cube_bb.size().x(), + (pa_pattern.print_size_y() + 4) / cube_bb.size().y(), pa_pattern.max_layer_z() / cube_bb.size().z()); arrangement::ArrangePolygons arranged_items; @@ -15906,7 +15902,7 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) arrangement::ArrangeParams ap; Points bedpts = arrangement::get_shrink_bedpts(&full_config, ap); - for (size_t i = 0; i < speeds.size() * accels.size(); i++) { + for(size_t i = 0; i < speeds.size() * accels.size(); i++) { arrangement::ArrangePolygon p; cube->instances[0]->get_arrange_polygon(&p); p.bed_idx = 0; @@ -15918,23 +15914,24 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) /* scale cube back to the size of test pattern 'handle' */ cube_bb = cube->raw_bounding_box(); - cube->scale(pa_pattern.handle_xy_size() / cube_bb.size().x(), pa_pattern.handle_xy_size() / cube_bb.size().y(), + cube->scale(pa_pattern.handle_xy_size() / cube_bb.size().x(), + pa_pattern.handle_xy_size() / cube_bb.size().y(), pa_pattern.max_layer_z() / cube_bb.size().z()); /* Set speed and acceleration on per-object basis and arrange anchor object on the plates. * Test gcode will be genecated during plate slicing */ - for (size_t test_idx = 0; test_idx < arranged_items.size(); test_idx++) { - const auto& ai = arranged_items[test_idx]; + for(size_t test_idx = 0; test_idx < arranged_items.size(); test_idx++) { + const auto &ai = arranged_items[test_idx]; size_t plate_idx = arranged_items[test_idx].bed_idx; - auto tspd = speeds[test_idx % speeds.size()]; - auto tacc = accels[test_idx / speeds.size()]; + auto tspd = speeds[test_idx % speeds.size()]; + auto tacc = accels[test_idx / speeds.size()]; /* make an own copy of anchor cube for each test */ - auto obj = test_idx == 0 ? cube : model().add_object(*cube); + auto obj = test_idx == 0 ? cube : model().add_object(*cube); auto obj_idx = std::distance(model().objects.begin(), std::find(model().objects.begin(), model().objects.end(), obj)); obj->name.assign(std::string("pa_pattern_") + std::to_string(int(tspd)) + std::string("_") + std::to_string(int(tacc))); - auto& obj_config = obj->config; + auto &obj_config = obj->config; if (speeds.size() > 1) obj_config.set_key_value("outer_wall_speed", new ConfigOptionFloatsNullable(1, tspd)); if (accels.size() > 1) @@ -15948,7 +15945,9 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) object_idxs.emplace_back(obj_idx); get_partplate_list().add_to_plate(obj_idx, 0, plate_idx); - const Vec3d obj_offset{unscale(ai.translation(X)), unscale(ai.translation(Y)), 0}; + const Vec3d obj_offset{unscale(ai.translation(X)), + unscale(ai.translation(Y)), + 0}; obj->instances[0]->set_offset(cur_plate->get_origin() + obj_offset + pa_pattern.handle_pos_offset()); obj->ensure_on_bed(); @@ -15975,23 +15974,27 @@ void Plater::_calib_pa_pattern_gen_gcode() * We'll store gcode for all tests on a single plate here. Once the plate handling is done, * all the g-codes will be merged into a single one on per-layer basis */ std::vector mgc; - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; /* iterate over all cubes on current plate and generate gcode for them */ for (auto obj : cur_plate->get_objects_on_this_plate()) { - auto gcode = model().calib_pa_pattern->generate_custom_gcodes(preset_bundle->full_config(), preset_bundle->is_bbl_vendor(), *obj, - cur_plate->get_origin()); + auto gcode = model().calib_pa_pattern->generate_custom_gcodes( + preset_bundle->full_config(), + preset_bundle->is_bbl_vendor(), + *obj, + cur_plate->get_origin() + ); mgc.emplace_back(gcode); } // move first item into model custom gcode - auto& pcgc = model().plates_custom_gcodes[get_partplate_list().get_curr_plate_index()]; - pcgc = std::move(mgc[0]); + auto &pcgc = model().plates_custom_gcodes[get_partplate_list().get_curr_plate_index()]; + pcgc = std::move(mgc[0]); mgc.erase(mgc.begin()); // concat layer gcodes for each test for (size_t i = 0; i < pcgc.gcodes.size(); i++) { - for (auto& gc : mgc) { + for (auto &gc : mgc) { pcgc.gcodes[i].extra += gc.gcodes[i].extra; } } @@ -16000,35 +16003,35 @@ void Plater::_calib_pa_pattern_gen_gcode() void Plater::cut_horizontal(size_t obj_idx, size_t instance_idx, double z, ModelObjectCutAttributes attributes) { wxCHECK_RET(obj_idx < p->model.objects.size(), "obj_idx out of bounds"); - auto* object = p->model.objects[obj_idx]; + auto *object = p->model.objects[obj_idx]; wxCHECK_RET(instance_idx < object->instances.size(), "instance_idx out of bounds"); - if (!attributes.has(ModelObjectCutAttribute::KeepUpper) && !attributes.has(ModelObjectCutAttribute::KeepLower)) + if (! attributes.has(ModelObjectCutAttribute::KeepUpper) && ! attributes.has(ModelObjectCutAttribute::KeepLower)) return; wxBusyCursor wait; const Vec3d instance_offset = object->instances[instance_idx]->get_offset(); - Cut cut(object, instance_idx, Geometry::translation_transform(z * Vec3d::UnitZ() - instance_offset), attributes); - const auto new_objects = cut.perform_with_plane(); + Cut cut(object, instance_idx, Geometry::translation_transform(z * Vec3d::UnitZ() - instance_offset), attributes); + const auto new_objects = cut.perform_with_plane(); apply_cut_object_to_model(obj_idx, new_objects); } -void Plater::_calib_pa_tower(const Calib_Params& params) -{ +void Plater::_calib_pa_tower(const Calib_Params& params) { if (!add_model(false, Slic3r::resources_dir() + "/calib/pressure_advance/tower_with_seam.drc")) return; - auto& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto& print_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; const double nozzle_diameter = printer_config->option("nozzle_diameter")->get_at(0); print_config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); - filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{1.0f}); + filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{ 1.0f }); + auto& obj_cfg = model().objects[0]->config; @@ -16048,7 +16051,7 @@ void Plater::_calib_pa_tower(const Calib_Params& params) obj_cfg.set_key_value("seam_slope_type", new ConfigOptionEnum(SeamScarfType::None)); print_config.set_key_value("max_volumetric_extrusion_rate_slope", new ConfigOptionFloat(0)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINTER)->update_dirty(); @@ -16057,7 +16060,7 @@ void Plater::_calib_pa_tower(const Calib_Params& params) wxGetApp().get_tab(Preset::TYPE_PRINTER)->reload_config(); auto new_height = std::ceil((params.end - params.start) / params.step) + 1; - auto obj_bb = model().objects[0]->bounding_box_exact(); + auto obj_bb = model().objects[0]->bounding_box_exact(); if (new_height < obj_bb.size().z()) { cut_horizontal(0, 0, new_height, ModelObjectCutAttribute::KeepLower); } @@ -16065,8 +16068,7 @@ void Plater::_calib_pa_tower(const Calib_Params& params) _calib_pa_select_added_objects(); } -void Plater::_calib_pa_select_added_objects() -{ +void Plater::_calib_pa_select_added_objects() { // update printable state for new volumes on canvas3D wxGetApp().plater()->canvas3D()->update_instance_printable_state_for_objects({0}); @@ -16088,28 +16090,27 @@ void Plater::_calib_pa_select_added_objects() // ORCA: Add pattern parameter void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, int pass, InfillPattern pattern) { - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; /// --- scale --- // model is created for a 0.4 nozzle, scale z with nozzle size. const ConfigOptionFloats* nozzle_diameter_config = printer_config->option("nozzle_diameter"); - std::vector extruder_types = printer_config->option("extruder_type")->values; - std::vector nozzle_volume_types = - wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")->values; + std::vector extruder_types = printer_config->option("extruder_type")->values; + std::vector nozzle_volume_types = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")->values; assert(nozzle_diameter_config->values.size() > 0); float nozzle_diameter = nozzle_diameter_config->values[0]; - float xyScale = nozzle_diameter / 0.6; - // scale z to have 10 layers - // 2 bottom, 5 top, 3 sparse infill + float xyScale = nozzle_diameter / 0.6; + //scale z to have 10 layers + // 2 bottom, 5 top, 3 sparse infill double first_layer_height = print_config->option("initial_layer_print_height")->value; - double layer_height = nozzle_diameter / 2.0; // prefer 0.2 layer height for 0.4 nozzle - first_layer_height = std::max(first_layer_height, layer_height); + double layer_height = nozzle_diameter / 2.0; // prefer 0.2 layer height for 0.4 nozzle + first_layer_height = std::max(first_layer_height, layer_height); - const auto canvas = wxGetApp().plater()->canvas3D(); - auto& selection = canvas->get_selection(); + const auto canvas = wxGetApp().plater()->canvas3D(); + auto& selection = canvas->get_selection(); selection.setup_cache(); TransformationType transformation_type; transformation_type.set_relative(); @@ -16124,7 +16125,7 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i auto cur_flowrate = filament_config->option("filament_flow_ratio")->get_at(0); // TODO: per-filament param std::vector internal_solid_speeds = generate_max_speed_parameter_value("internal_solid_infill_speed", linear, pass); - std::vector top_surface_speeds = generate_max_speed_parameter_value("top_surface_speed", linear, pass); + std::vector top_surface_speeds = generate_max_speed_parameter_value("top_surface_speed", linear, pass); // adjust parameters for (auto _obj : objects) { @@ -16135,7 +16136,7 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i _obj->config.set_key_value("enable_extra_bridge_layer", new ConfigOptionEnum(eblDisabled)); _obj->config.set_key_value("internal_bridge_density", new ConfigOptionPercent(100)); _obj->config.set_key_value("sparse_infill_density", new ConfigOptionPercent(35)); - _obj->config.set_key_value("min_width_top_surface", new ConfigOptionFloatOrPercent(100, true)); + _obj->config.set_key_value("min_width_top_surface", new ConfigOptionFloatOrPercent(100,true)); _obj->config.set_key_value("bottom_shell_layers", new ConfigOptionInt(2)); _obj->config.set_key_value("top_shell_layers", new ConfigOptionInt(5)); _obj->config.set_key_value("top_shell_thickness", new ConfigOptionFloat(0)); @@ -16150,8 +16151,7 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i _obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f)); _obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45)); _obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135)); - _obj->config.set_key_value("center_of_surface_pattern", - new ConfigOptionEnum(CenterOfSurfacePattern::Each_Surface)); + _obj->config.set_key_value("center_of_surface_pattern", new ConfigOptionEnum(CenterOfSurfacePattern::Each_Surface)); _obj->config.set_key_value("separated_infills", new ConfigOptionBool(false)); _obj->config.set_key_value("align_infill_direction_to_model", new ConfigOptionBool(true)); _obj->config.set_key_value("ironing_type", new ConfigOptionEnum(IroningType::NoIroning)); @@ -16176,18 +16176,20 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i obj_name[0] = '-'; // Orca: force set locale to C to avoid parsing error const std::string _loc = std::setlocale(LC_NUMERIC, nullptr); - std::setlocale(LC_NUMERIC, "C"); - auto modifier = 1.0f; + std::setlocale(LC_NUMERIC,"C"); + auto modifier = 1.0f; try { modifier = stof(obj_name); - } catch (...) {} + } catch (...) { + } // restore locale std::setlocale(LC_NUMERIC, _loc.c_str()); - if (linear) - _obj->config.set_key_value("print_flow_ratio", new ConfigOptionFloat((cur_flowrate + modifier) / cur_flowrate)); + if(linear) + _obj->config.set_key_value("print_flow_ratio", new ConfigOptionFloat((cur_flowrate + modifier)/cur_flowrate)); else - _obj->config.set_key_value("print_flow_ratio", new ConfigOptionFloat(1.0f + modifier / 100.f)); + _obj->config.set_key_value("print_flow_ratio", new ConfigOptionFloat(1.0f + modifier/100.f)); + } print_config->set_key_value("layer_height", new ConfigOptionFloat(layer_height)); @@ -16205,8 +16207,7 @@ void adjust_settings_for_flowrate_calib(ModelObjectPtrs& objects, bool linear, i } // ORCA: Add pattern parameter -void Plater::calib_flowrate(bool is_linear, int pass, InfillPattern pattern) -{ +void Plater::calib_flowrate(bool is_linear, int pass, InfillPattern pattern) { if (pass != 1 && pass != 2) return; wxString calib_name; @@ -16249,28 +16250,27 @@ void Plater::calib_flowrate(bool is_linear, int pass, InfillPattern pattern) changed_objects(object_idx); } -void Plater::calib_temp(const Calib_Params& params) -{ + +void Plater::calib_temp(const Calib_Params& params) { constexpr double base_temp_tower_nozzle_diameter = 0.4; - constexpr double base_temp_tower_block_height = 10.0; - constexpr int base_temp_tower_temp_step = 5; + constexpr double base_temp_tower_block_height = 10.0; + constexpr int base_temp_tower_temp_step = 5; const auto calib_temp_name = wxString::Format(L"Nozzle temperature test"); new_project(false, false, calib_temp_name); wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); - if (params.mode != CalibMode::Calib_Temp_Tower) - return; - + if (params.mode != CalibMode::Calib_Temp_Tower) return; + if (!add_model(false, Slic3r::resources_dir() + "/calib/temperature_tower/temperature_tower.drc")) return; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; - auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - auto start_temp = lround(params.start); + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; + auto start_temp = lround(params.start); const ConfigOptionFloats* nozzle_diameter_config = printer_config->option("nozzle_diameter"); - size_t nozzle_id = static_cast(std::max(params.extruder_id, 0)); - double nozzle_diameter = base_temp_tower_nozzle_diameter; + size_t nozzle_id = static_cast(std::max(params.extruder_id, 0)); + double nozzle_diameter = base_temp_tower_nozzle_diameter; if (nozzle_diameter_config && !nozzle_diameter_config->values.empty()) { - nozzle_id = std::min(nozzle_id, nozzle_diameter_config->values.size() - 1); + nozzle_id = std::min(nozzle_id, nozzle_diameter_config->values.size() - 1); nozzle_diameter = nozzle_diameter_config->values[nozzle_id]; } if (nozzle_diameter <= 0.0) @@ -16280,7 +16280,7 @@ void Plater::calib_temp(const Calib_Params& params) const double block_height = base_temp_tower_block_height; // cut upper - auto obj_bb = model().objects[0]->bounding_box_exact(); + auto obj_bb = model().objects[0]->bounding_box_exact(); auto block_count = lround((500 - params.end) / base_temp_tower_temp_step + 1); if (block_count > 0) { // subtract EPSILON offset to avoid cutting at the exact location where the flat surface is @@ -16291,7 +16291,7 @@ void Plater::calib_temp(const Calib_Params& params) } // cut bottom - obj_bb = model().objects[0]->bounding_box_exact(); + obj_bb = model().objects[0]->bounding_box_exact(); block_count = lround((500 - params.start) / base_temp_tower_temp_step); if (block_count > 0) { auto new_height = block_count * block_height + EPSILON; @@ -16310,7 +16310,7 @@ void Plater::calib_temp(const Calib_Params& params) set_config_values(filament_config, "nozzle_temperature", (int) start_temp); // When resizing is disabled the 0.4 mm / 0.2 mm reference model is printed as-is (preset layer height kept). if (params.nozzle_based_resize) - model().objects[0]->config.set_key_value("layer_height", new ConfigOptionFloat(nozzle_diameter / 2)); + model().objects[0]->config.set_key_value("layer_height", new ConfigOptionFloat(nozzle_diameter/2)); model().objects[0]->config.set_key_value("brim_type", new ConfigOptionEnum(btOuterOnly)); model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(5.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); @@ -16322,9 +16322,10 @@ void Plater::calib_temp(const Calib_Params& params) auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; print_config->set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); if (params.nozzle_based_resize) - print_config->set_key_value("initial_layer_print_height", new ConfigOptionFloat(nozzle_diameter / 2)); + print_config->set_key_value("initial_layer_print_height", new ConfigOptionFloat(nozzle_diameter/2)); - changed_objects({0}); + + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINT)->reload_config(); @@ -16343,23 +16344,23 @@ void Plater::calib_max_vol_speed(const Calib_Params& params) if (!add_model(false, Slic3r::resources_dir() + "/calib/volumetric_speed/SpeedTestStructure.drc")) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; - auto obj = model().objects[0]; - auto& obj_cfg = obj->config; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto obj = model().objects[0]; + auto& obj_cfg = obj->config; - auto bed_shape = printer_config->option("printable_area")->values; + auto bed_shape = printer_config->option("printable_area")->values; BoundingBoxf bed_ext = get_extents(bed_shape); - auto scale_obj = (bed_ext.size().x() - 10) / obj->bounding_box_exact().size().x(); + auto scale_obj = (bed_ext.size().x() - 10) / obj->bounding_box_exact().size().x(); if (scale_obj < 1.0) obj->scale(scale_obj, 1, 1); const ConfigOptionFloats* nozzle_diameter_config = printer_config->option("nozzle_diameter"); assert(nozzle_diameter_config->values.size() > 0); double nozzle_diameter = nozzle_diameter_config->values[0]; - double line_width = nozzle_diameter * 1.75; - double layer_height = nozzle_diameter * 0.8; + double line_width = nozzle_diameter * 1.75; + double layer_height = nozzle_diameter * 0.8; auto max_lh = printer_config->option("max_layer_height"); for (size_t i = 0; i < max_lh->values.size(); ++i) { @@ -16368,8 +16369,7 @@ void Plater::calib_max_vol_speed(const Calib_Params& params) } const double filament_max_volumetric_speed = filament_config->option("filament_max_volumetric_speed")->get_at(0); - set_config_values(filament_config, "filament_max_volumetric_speed", - std::max(filament_max_volumetric_speed, 200.0)); + set_config_values(filament_config, "filament_max_volumetric_speed", std::max(filament_max_volumetric_speed, 200.0)); filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{0.0}); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); obj_cfg.set_key_value("enable_overhang_speed", new ConfigOptionBoolsNullable(1, false)); @@ -16389,7 +16389,7 @@ void Plater::calib_max_vol_speed(const Calib_Params& params) print_config->set_key_value("max_volumetric_extrusion_rate_slope", new ConfigOptionFloat(0)); print_config->set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINTER)->update_dirty(); @@ -16405,8 +16405,7 @@ void Plater::calib_max_vol_speed(const Calib_Params& params) } auto new_params = params; - auto mm3_per_mm = Flow(line_width, layer_height, nozzle_diameter).mm3_per_mm() * - filament_config->option("filament_flow_ratio")->get_at(0); + auto mm3_per_mm = Flow(line_width, layer_height, nozzle_diameter).mm3_per_mm() * filament_config->option("filament_flow_ratio")->get_at(0); new_params.end = params.end / mm3_per_mm; new_params.start = params.start / mm3_per_mm; new_params.step = params.step / mm3_per_mm; @@ -16425,10 +16424,10 @@ void Plater::calib_retraction(const Calib_Params& params) if (!add_model(false, Slic3r::resources_dir() + "/calib/retraction/retraction_tower.drc")) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; - auto obj = model().objects[0]; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto obj = model().objects[0]; print_config->set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); @@ -16444,8 +16443,7 @@ void Plater::calib_retraction(const Calib_Params& params) auto max_lh = printer_config->option("max_layer_height"); for (size_t i = 0; i < max_lh->values.size(); ++i) { - if (max_lh->values[i] < layer_height) - max_lh->values[i] = layer_height; + if (max_lh->values[i] < layer_height) max_lh->values[i] = layer_height; } printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); @@ -16462,7 +16460,8 @@ void Plater::calib_retraction(const Calib_Params& params) obj->config.set_key_value("overhang_reverse", new ConfigOptionBool(false)); obj->config.set_key_value("precise_z_height", new ConfigOptionBool(false)); - changed_objects({0}); + + changed_objects({ 0 }); // cut upper auto obj_bb = obj->bounding_box_exact(); @@ -16484,15 +16483,15 @@ void Plater::calib_VFA(const Calib_Params& params) if (!add_model(false, Slic3r::resources_dir() + "/calib/vfa/vfa.drc")) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; const ConfigOptionFloats* nozzle_diameter_config = printer_config->option("nozzle_diameter"); - size_t nozzle_id = static_cast(std::max(params.extruder_id, 0)); - double nozzle_diameter = vfa_base_nozzle_diameter; + size_t nozzle_id = static_cast(std::max(params.extruder_id, 0)); + double nozzle_diameter = vfa_base_nozzle_diameter; if (nozzle_diameter_config && !nozzle_diameter_config->values.empty()) { - nozzle_id = std::min(nozzle_id, nozzle_diameter_config->values.size() - 1); + nozzle_id = std::min(nozzle_id, nozzle_diameter_config->values.size() - 1); nozzle_diameter = nozzle_diameter_config->values[nozzle_id]; } if (nozzle_diameter <= 0.0) @@ -16524,7 +16523,7 @@ void Plater::calib_VFA(const Calib_Params& params) model().objects[0]->ensure_on_bed(); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); - filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{0.0}); + filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); set_config_values(print_config, "enable_overhang_speed", false); print_config->set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); print_config->set_key_value("wall_loops", new ConfigOptionInt(1)); @@ -16544,7 +16543,7 @@ void Plater::calib_VFA(const Calib_Params& params) model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_ui_from_settings(); @@ -16552,7 +16551,7 @@ void Plater::calib_VFA(const Calib_Params& params) // Pass the resolved layer height on (only meaningful when resized). GCode's VFA stepping is layer-based, so // it does not require it, but keep it consistent with the geometry. - Calib_Params calib_params = params; + Calib_Params calib_params = params; calib_params.vfa_layer_height = params.nozzle_based_resize ? layer_height : 0.0; p->background_process.fff_print()->set_calib_params(calib_params); } @@ -16565,31 +16564,20 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) if (params.mode != CalibMode::Calib_Input_shaping_freq) return; - if (!add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.drc" : - "/calib/input_shaping/fast_tower_test.drc"))) + if (!add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.drc" : "/calib/input_shaping/fast_tower_test.drc"))) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; const auto gcode_flavor_option = printer_config->option>("gcode_flavor"); if (has_junction_deviation(printer_config)) { - printer_config - ->set_key_value("machine_max_junction_deviation", - new ConfigOptionFloats{ - (std::max(printer_config->option("machine_max_junction_deviation")->values.front(), - 0.25))}); + printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats {(std::max(printer_config->option("machine_max_junction_deviation")->values.front(), 0.25))}); set_config_values(print_config, "default_junction_deviation", 0); } else { const double jerk_value = (gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfKlipper) ? 5.0 : 10.0; - printer_config->set_key_value("machine_max_jerk_x", - new ConfigOptionFloats{ - std::max(printer_config->option("machine_max_jerk_x")->values.front(), - jerk_value)}); - printer_config->set_key_value("machine_max_jerk_y", - new ConfigOptionFloats{ - std::max(printer_config->option("machine_max_jerk_y")->values.front(), - jerk_value)}); + printer_config->set_key_value("machine_max_jerk_x", new ConfigOptionFloats{std::max(printer_config->option("machine_max_jerk_x")->values.front(), jerk_value)}); + printer_config->set_key_value("machine_max_jerk_y", new ConfigOptionFloats{std::max(printer_config->option("machine_max_jerk_y")->values.front(), jerk_value)}); set_config_values(print_config, "default_jerk", 0); } @@ -16601,8 +16589,8 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); printer_config->set_key_value("input_shaping_emit", new ConfigOptionBool{false}); - filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{0.0}); - filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats{0.0}); + filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); + filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats { 0.0 }); filament_config->set_key_value("slow_down_for_layer_cooling", new ConfigOptionBools{false}); print_config->set_key_value("layer_height", new ConfigOptionFloat(0.2)); set_config_values(print_config, "enable_overhang_speed", false); @@ -16615,8 +16603,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); - const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), - printer_config->option("machine_max_speed_y")->get_at(0)); + const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), printer_config->option("machine_max_speed_y")->get_at(0)); const double machine_max_acceleration = printer_config->option("machine_max_acceleration_extruding")->get_at(0); set_config_values(print_config, "outer_wall_speed", machine_max_speed); set_config_values(print_config, "default_acceleration", machine_max_acceleration); @@ -16626,7 +16613,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_ui_from_settings(); @@ -16643,31 +16630,20 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) if (params.mode != CalibMode::Calib_Input_shaping_damp) return; - if (!add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.drc" : - "/calib/input_shaping/fast_tower_test.drc"))) + if (!add_model(false, Slic3r::resources_dir() + (params.test_model < 1 ? "/calib/input_shaping/ringing_tower.drc" : "/calib/input_shaping/fast_tower_test.drc"))) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; - auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; + auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; const auto gcode_flavor_option = printer_config->option>("gcode_flavor"); if (has_junction_deviation(printer_config)) { - printer_config - ->set_key_value("machine_max_junction_deviation", - new ConfigOptionFloats{ - (std::max(printer_config->option("machine_max_junction_deviation")->values.front(), - 0.25))}); + printer_config->set_key_value("machine_max_junction_deviation", new ConfigOptionFloats {(std::max(printer_config->option("machine_max_junction_deviation")->values.front(), 0.25))}); set_config_values(print_config, "default_junction_deviation", 0); } else { const double jerk_value = (gcode_flavor_option && gcode_flavor_option->value == GCodeFlavor::gcfKlipper) ? 5.0 : 10.0; - printer_config->set_key_value("machine_max_jerk_x", - new ConfigOptionFloats{ - std::max(printer_config->option("machine_max_jerk_x")->values.front(), - jerk_value)}); - printer_config->set_key_value("machine_max_jerk_y", - new ConfigOptionFloats{ - std::max(printer_config->option("machine_max_jerk_y")->values.front(), - jerk_value)}); + printer_config->set_key_value("machine_max_jerk_x", new ConfigOptionFloats{std::max(printer_config->option("machine_max_jerk_x")->values.front(), jerk_value)}); + printer_config->set_key_value("machine_max_jerk_y", new ConfigOptionFloats{std::max(printer_config->option("machine_max_jerk_y")->values.front(), jerk_value)}); set_config_values(print_config, "default_jerk", 0); } @@ -16679,8 +16655,8 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); printer_config->set_key_value("input_shaping_emit", new ConfigOptionBool{false}); - filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{0.0}); - filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats{0.0}); + filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); + filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats { 0.0 }); filament_config->set_key_value("slow_down_for_layer_cooling", new ConfigOptionBools{false}); set_config_values(print_config, "enable_overhang_speed", false); print_config->set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); @@ -16692,8 +16668,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); - const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), - printer_config->option("machine_max_speed_y")->get_at(0)); + const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), printer_config->option("machine_max_speed_y")->get_at(0)); const double machine_max_acceleration = printer_config->option("machine_max_acceleration_extruding")->get_at(0); set_config_values(print_config, "outer_wall_speed", machine_max_speed); set_config_values(print_config, "default_acceleration", machine_max_acceleration); @@ -16703,7 +16678,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_ui_from_settings(); @@ -16720,12 +16695,12 @@ void Plater::Calib_Cornering(const Calib_Params& params) if (params.mode != CalibMode::Calib_Cornering) return; - const std::string cornering_model_path = params.test_model == 0 ? "/calib/input_shaping/ringing_tower.drc" : - (params.test_model == 1 ? "/calib/input_shaping/fast_tower_test.drc" : - "/calib/cornering/SCV-V2.drc"); + const std::string cornering_model_path = params.test_model == 0 + ? "/calib/input_shaping/ringing_tower.drc" + : (params.test_model == 1 ? "/calib/input_shaping/fast_tower_test.drc" : "/calib/cornering/SCV-V2.drc"); if (!add_model(false, Slic3r::resources_dir() + cornering_model_path)) return; - auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; @@ -16747,8 +16722,8 @@ void Plater::Calib_Cornering(const Calib_Params& params) printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); printer_config->set_key_value("input_shaping_emit", new ConfigOptionBool{true}); printer_config->set_key_value("input_shaping_type", new ConfigOptionEnum(InputShaperType::Disable)); - filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats{0.0}); - filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats{0.0}); + filament_config->set_key_value("slow_down_layer_time", new ConfigOptionFloats { 0.0 }); + filament_config->set_key_value("slow_down_min_speed", new ConfigOptionFloats { 0.0 }); filament_config->set_key_value("slow_down_for_layer_cooling", new ConfigOptionBools{false}); const double filament_max_volumetric_speed = filament_config->option("filament_max_volumetric_speed")->get_at(0); filament_config->set_key_value("filament_max_volumetric_speed", new ConfigOptionFloats{std::max(filament_max_volumetric_speed, 200.0)}); @@ -16762,8 +16737,7 @@ void Plater::Calib_Cornering(const Calib_Params& params) print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); - const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), - printer_config->option("machine_max_speed_y")->get_at(0)); + const double machine_max_speed = std::min(printer_config->option("machine_max_speed_x")->get_at(0), printer_config->option("machine_max_speed_y")->get_at(0)); const double machine_max_acceleration = printer_config->option("machine_max_acceleration_extruding")->get_at(0); set_config_values(print_config, "outer_wall_speed", machine_max_speed); set_config_values(print_config, "default_acceleration", machine_max_acceleration); @@ -16773,7 +16747,7 @@ void Plater::Calib_Cornering(const Calib_Params& params) model().objects[0]->config.set_key_value("brim_width", new ConfigOptionFloat(3.0)); model().objects[0]->config.set_key_value("brim_object_gap", new ConfigOptionFloat(0.0)); - changed_objects({0}); + changed_objects({ 0 }); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_FILAMENT)->update_dirty(); wxGetApp().get_tab(Preset::TYPE_PRINT)->update_ui_from_settings(); @@ -16798,7 +16772,7 @@ void Plater::import_zip_archive() void Plater::import_sl1_archive() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle() && p->m_sla_import_dlg->ShowModal() == wxID_OK) { p->take_snapshot(_u8L("Import SLA archive")); replace_job(w, std::make_unique(p->m_sla_import_dlg)); @@ -16810,8 +16784,8 @@ void Plater::extract_config_from_project() wxString input_file; wxGetApp().load_project(this, input_file); - if (!input_file.empty()) - load_files({into_path(input_file)}, LoadStrategy::LoadConfig); + if (! input_file.empty()) + load_files({ into_path(input_file) }, LoadStrategy::LoadConfig); } void Plater::load_gcode() @@ -16823,12 +16797,14 @@ void Plater::load_gcode() load_gcode(input_file); } -// BBS: remove GCodeViewer as seperate APP logic +//BBS: remove GCodeViewer as seperate APP logic void Plater::load_gcode(const wxString& filename) { BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " entry and filename: " << filename; BOOST_LOG_TRIVIAL(info) << __FUNCTION__; - if (!is_gcode_file(into_u8(filename)) || (m_last_loaded_gcode == filename && m_only_gcode)) + if (! is_gcode_file(into_u8(filename)) + || (m_last_loaded_gcode == filename && m_only_gcode) + ) return; m_last_loaded_gcode = filename; @@ -16840,37 +16816,40 @@ void Plater::load_gcode(const wxString& filename) m_only_gcode = true; // cleanup view before to start loading/processing - // BBS: update gcode to current partplate's + //BBS: update gcode to current partplate's GCodeProcessorResult* current_result = p->partplate_list.get_current_slice_result(); - Print& current_print = p->partplate_list.get_current_fff_print(); - // BBS:already reset in new_project - // current_result->reset(); - // p->gcode_result.reset(); - // reset_gcode_toolpaths(); + Print& current_print = p->partplate_list.get_current_fff_print(); + //BBS:already reset in new_project + //current_result->reset(); + //p->gcode_result.reset(); + //reset_gcode_toolpaths(); p->preview->reload_print(m_only_gcode); wxGetApp().mainframe->select_tab(TAB_ID_PREVIEW); p->set_current_panel(p->preview, true); p->get_current_canvas3D()->render(); - // p->notification_manager->bbl_show_plateinfo_notification(into_u8(_L("Preview only mode for gcode file."))); + //p->notification_manager->bbl_show_plateinfo_notification(into_u8(_L("Preview only mode for gcode file."))); wxBusyCursor wait; // process gcode GCodeProcessor processor; processor.init_filament_maps_and_nozzle_type_when_import_only_gcode(); - try { + try + { GCodeProcessor::s_IsBBLPrinter = wxGetApp().preset_bundle->is_bbl_vendor(); processor.process_file(filename.ToUTF8().data()); - } catch (const std::exception& ex) { + } + catch (const std::exception& ex) + { show_error(this, ex.what()); return; } *current_result = std::move(processor.extract_result()); - // current_result->filename = filename; + //current_result->filename = filename; BedType bed_type = current_result->bed_type; if (bed_type != BedType::btCount) { - DynamicPrintConfig& proj_config = wxGetApp().preset_bundle->project_config; + DynamicPrintConfig &proj_config = wxGetApp().preset_bundle->project_config; proj_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); on_bed_type_change(bed_type); } @@ -16879,14 +16858,14 @@ void Plater::load_gcode(const wxString& filename) current_print.apply_config_for_render(processor.export_config_for_render()); - // BBS: add cost info when drag in gcode - auto& ps = current_result->print_statistics; + //BBS: add cost info when drag in gcode + auto& ps = current_result->print_statistics; double total_cost = 0.0; for (auto volume : ps.total_volumes_per_extruder) { size_t extruder_id = volume.first; - double density = current_result->filament_densities.at(extruder_id); - double cost = current_result->filament_costs.at(extruder_id); - double weight = volume.second * density * 0.001; + double density = current_result->filament_densities.at(extruder_id); + double cost = current_result->filament_costs.at(extruder_id); + double weight = volume.second * density * 0.001; total_cost += weight * cost * 0.001; } current_print.print_statistics().total_cost = total_cost; @@ -16895,15 +16874,13 @@ void Plater::load_gcode(const wxString& filename) // show results p->preview->reload_print(m_only_gcode); - // BBS: zoom to bed 0 for gcode preview - // p->preview->get_canvas3d()->zoom_to_gcode(); + //BBS: zoom to bed 0 for gcode preview + //p->preview->get_canvas3d()->zoom_to_gcode(); p->preview->get_canvas3d()->zoom_to_plate(0); if (p->preview->get_canvas3d()->get_gcode_layers_zs().empty()) { MessageDialog(this, _L("The selected file") + ":\n" + filename + "\n" + _L("Does not contain valid G-code."), - wxString(GCODEVIEWER_APP_NAME) + " - " + _L("An Error has occurred while loading the G-code file."), - wxCLOSE | wxICON_WARNING | wxCENTRE) - .ShowModal(); + wxString(GCODEVIEWER_APP_NAME) + " - " + _L("An Error has occurred while loading the G-code file."), wxCLOSE | wxICON_WARNING | wxCENTRE).ShowModal(); set_project_filename(DEFAULT_PROJECT_NAME); } else { set_project_filename(filename); @@ -16914,7 +16891,7 @@ void Plater::load_gcode(const wxString& filename) p->view3D->get_canvas3d()->remove_raycasters_for_picking(SceneRaycaster::EType::Bed); } - p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false, false); // 20250416 ban gcode to send print + p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false, false); //20250416 ban gcode to send print } void Plater::reload_gcode_from_disk() @@ -16924,43 +16901,45 @@ void Plater::reload_gcode_from_disk() load_gcode(filename); } -void Plater::reload_print() { p->preview->reload_print(); } +void Plater::reload_print() +{ + p->preview->reload_print(); +} // BBS -wxString Plater::get_project_name() { return p->get_project_name(); } +wxString Plater::get_project_name() +{ + return p->get_project_name(); +} void Plater::update_all_plate_thumbnails(bool force_update) { for (int i = 0; i < get_partplate_list().get_plate_count(); i++) { - PartPlate* plate = get_partplate_list().get_plate(i); - ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + PartPlate* plate = get_partplate_list().get_plate(i); + ThumbnailsParams thumbnail_params = { {}, false, true, true, true, i}; if (force_update || !plate->thumbnail_data.is_valid()) { - get_view3D_canvas3D()->render_thumbnail(plate->thumbnail_data, plate->plate_thumbnail_width, plate->plate_thumbnail_height, - thumbnail_params, Camera::EType::Ortho); + get_view3D_canvas3D()->render_thumbnail(plate->thumbnail_data, plate->plate_thumbnail_width, plate->plate_thumbnail_height, thumbnail_params, Camera::EType::Ortho); } if (force_update || !plate->no_light_thumbnail_data.is_valid()) { - get_view3D_canvas3D()->render_thumbnail(plate->no_light_thumbnail_data, plate->plate_thumbnail_width, - plate->plate_thumbnail_height, thumbnail_params, Camera::EType::Ortho, - Camera::ViewAngleType::Iso, false, true); + get_view3D_canvas3D()->render_thumbnail(plate->no_light_thumbnail_data, plate->plate_thumbnail_width, plate->plate_thumbnail_height, thumbnail_params, + Camera::EType::Ortho, Camera::ViewAngleType::Iso, false, true); } } } -void Plater::update_obj_preview_thumbnail( - ModelObject* mo, int obj_idx, int vol_idx, std::vector colors, int camera_view_angle_type) +void Plater::update_obj_preview_thumbnail(ModelObject *mo, int obj_idx, int vol_idx, std::vector colors, int camera_view_angle_type) { - PartPlate* plate = get_partplate_list().get_plate(0); + PartPlate * plate = get_partplate_list().get_plate(0); ThumbnailsParams thumbnail_params = {{}, false, true, true, true, 0, false}; GLVolumeCollection cur_volumes; cur_volumes.load_object_volume(mo, obj_idx, vol_idx, 0, "volume", true, false, false, false); ModelObjectPtrs model_objects; model_objects.emplace_back(mo); - get_view3D_canvas3D()->render_thumbnail(plate->obj_preview_thumbnail_data, colors, plate->plate_thumbnail_width, - plate->plate_thumbnail_height, thumbnail_params, model_objects, cur_volumes, - Camera::EType::Ortho, (Camera::ViewAngleType) camera_view_angle_type, false, false); + get_view3D_canvas3D()->render_thumbnail(plate->obj_preview_thumbnail_data, colors, plate->plate_thumbnail_width, plate->plate_thumbnail_height, thumbnail_params, + model_objects, cur_volumes, Camera::EType::Ortho, (Camera::ViewAngleType) camera_view_angle_type, false, false); } -// invalid all plate's thumbnails +//invalid all plate's thumbnails void Plater::invalid_all_plate_thumbnails() { if (using_exported_file() || skip_thumbnail_invalid) @@ -16977,28 +16956,29 @@ void Plater::invalid_all_plate_thumbnails() void Plater::force_update_all_plate_thumbnails() { if (using_exported_file() || skip_thumbnail_invalid) { - } else { + } + else { invalid_all_plate_thumbnails(); update_all_plate_thumbnails(true); } } // BBS: backup -std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi, bool* published_out) -{ - // BBS: wish to reset state when load a new file +std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi, bool* published_out) { + //BBS: wish to reset state when load a new file p->m_slice_all_only_has_gcode = false; - // BBS: wish to reset all plates stats item selected state when load a new file + //BBS: wish to reset all plates stats item selected state when load a new file p->preview->get_canvas3d()->reset_select_plate_toolbar_selection(); return p->load_files(input_files, strategy, ask_multi, published_out); } bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) { - // std::vector unzipped_paths; + //std::vector unzipped_paths; std::vector non_project_paths; std::vector project_paths; - try { + try + { mz_zip_archive archive; mz_zip_zero_struct(&archive); @@ -17012,14 +16992,15 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) // selected_paths contains paths and its uncompressed size. The size is used to distinguish between files with same path. std::vector> selected_paths; FileArchiveDialog dlg(static_cast(wxGetApp().mainframe), &archive, selected_paths); - if (dlg.ShowModal() == wxID_OK) { + if (dlg.ShowModal() == wxID_OK) + { std::string archive_path_string = archive_path.string(); - archive_path_string = archive_path_string.substr(0, archive_path_string.size() - 4); + archive_path_string = archive_path_string.substr(0, archive_path_string.size() - 4); fs::path archive_dir(wxStandardPaths::Get().GetTempDir().utf8_str().data()); for (auto& path_w_size : selected_paths) { const fs::path& path = path_w_size.first; - size_t size = path_w_size.second; + size_t size = path_w_size.second; // find path in zip archive for (mz_uint i = 0; i < num_entries; ++i) { if (mz_zip_reader_file_stat(&archive, i, &stat)) { @@ -17033,29 +17014,29 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) if (path != archive_path) continue; // decompressing - try { + try + { std::replace(name.begin(), name.end(), '\\', '/'); // rename if file exists - std::string filename = path.filename().string(); - std::string extension = path.extension().string(); - std::string just_filename = filename.substr(0, filename.size() - extension.size()); + std::string filename = path.filename().string(); + std::string extension = path.extension().string(); + std::string just_filename = filename.substr(0, filename.size() - extension.size()); std::string final_filename = just_filename; size_t version = 0; - while (fs::exists(archive_dir / (final_filename + extension))) { + while (fs::exists(archive_dir / (final_filename + extension))) + { ++version; final_filename = just_filename + "(" + std::to_string(version) + ")"; } - filename = final_filename + extension; + filename = final_filename + extension; fs::path final_path = archive_dir / filename; - std::string buffer((size_t) stat.m_uncomp_size, 0); + std::string buffer((size_t)stat.m_uncomp_size, 0); // Decompress action. We already has correct file index in stat structure. - mz_bool res = mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, (void*) buffer.data(), - (size_t) stat.m_uncomp_size, 0); + mz_bool res = mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, (void*)buffer.data(), (size_t)stat.m_uncomp_size, 0); if (res == 0) { // TRN: First argument = path to file, second argument = error description - wxString error_log = GUI::format_wxstr(_L("Failed to unzip file to %1%: %2%"), final_path.string(), - mz_zip_get_error_string(mz_zip_get_last_error(&archive))); + wxString error_log = GUI::format_wxstr(_L("Failed to unzip file to %1%: %2%"), final_path.string(), mz_zip_get_error_string(mz_zip_get_last_error(&archive))); BOOST_LOG_TRIVIAL(error) << error_log; show_error(nullptr, error_log); break; @@ -17065,9 +17046,7 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) file.write(buffer.c_str(), buffer.size()); file.close(); if (!fs::exists(final_path)) { - wxString error_log = - GUI::format_wxstr(_L("Failed to find unzipped file at %1%. Unzipping of file has failed."), - final_path.string()); + wxString error_log = GUI::format_wxstr(_L("Failed to find unzipped file at %1%. Unzipping of file has failed."), final_path.string()); BOOST_LOG_TRIVIAL(error) << error_log; show_error(nullptr, error_log); break; @@ -17086,7 +17065,9 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) project_paths.emplace_back(final_path); break; - } catch (const std::exception& e) { + } + catch (const std::exception& e) + { // ensure the zip archive is closed and rethrow the exception close_zip_reader(&archive); throw Slic3r::FileIOError(e.what()); @@ -17096,25 +17077,30 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) } close_zip_reader(&archive); if (non_project_paths.size() + project_paths.size() != selected_paths.size()) - BOOST_LOG_TRIVIAL(error) << "Decompresing of archive did not retrieve all files. Expected files: " << selected_paths.size() - << " Decopressed files: " << non_project_paths.size() + project_paths.size(); + BOOST_LOG_TRIVIAL(error) << "Decompresing of archive did not retrieve all files. Expected files: " + << selected_paths.size() + << " Decopressed files: " + << non_project_paths.size() + project_paths.size(); } else { close_zip_reader(&archive); return false; } - } catch (const Slic3r::FileIOError& e) { + } + catch (const Slic3r::FileIOError& e) { // zip reader should be already closed or not even opened GUI::show_error(this, e.what()); return false; } // none selected - if (project_paths.empty() && non_project_paths.empty()) { + if (project_paths.empty() && non_project_paths.empty()) + { return false; } // 1 project file and some models - behave like drag n drop of 3mf and then load models - if (project_paths.size() == 1) { + if (project_paths.size() == 1) + { wxArrayString aux; aux.Add(from_u8(project_paths.front().string())); bool loaded3mf = load_files(aux); @@ -17139,6 +17125,7 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) load_files(project_paths, LoadStrategy::LoadModel); load_files(non_project_paths, LoadStrategy::LoadModel); + for (const fs::path& path : project_paths) { // Delete file from temp file (path variable), it will stay only in app memory. boost::system::error_code ec; @@ -17162,32 +17149,32 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) class ProjectDropDialog : public DPIDialog { private: - wxColour m_def_color = wxColour(255, 255, 255); - int m_action{1}; - bool m_remember_choice{false}; + wxColour m_def_color = wxColour(255, 255, 255); + int m_action{1}; + bool m_remember_choice{false}; public: - ProjectDropDialog(const std::string& filename); + ProjectDropDialog(const std::string &filename); - wxPanel* m_top_line; - wxStaticText* m_fname_title; - wxStaticText* m_fname_f; - StaticBox* m_panel_select; + wxPanel * m_top_line; + wxStaticText *m_fname_title; + wxStaticText *m_fname_f; + StaticBox * m_panel_select; - void on_select_ok(wxCommandEvent& event); - void on_select_cancel(wxCommandEvent& event); + void on_select_ok(wxCommandEvent &event); + void on_select_cancel(wxCommandEvent &event); - int get_action() const { return m_action; } - void set_action(int index) { m_action = index; } + int get_action() const { return m_action; } + void set_action(int index) { m_action = index; } - wxBoxSizer* create_remember_checkbox(wxString title, wxWindow* parent, wxString tooltip); + wxBoxSizer *create_remember_checkbox(wxString title, wxWindow* parent, wxString tooltip); protected: - void on_dpi_changed(const wxRect& suggested_rect) override; + void on_dpi_changed(const wxRect &suggested_rect) override; }; -ProjectDropDialog::ProjectDropDialog(const std::string& filename) - : DPIDialog(static_cast(wxGetApp().mainframe), +ProjectDropDialog::ProjectDropDialog(const std::string &filename) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, from_u8((boost::format(_utf8(L("Drop project file")))).str()), wxDefaultPosition, @@ -17198,7 +17185,7 @@ ProjectDropDialog::ProjectDropDialog(const std::string& filename) // def setting SetBackgroundColour(m_def_color); - wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *m_sizer_main = new wxBoxSizer(wxVERTICAL); m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); m_top_line->SetBackgroundColour(wxColour(166, 169, 170)); @@ -17214,25 +17201,24 @@ ProjectDropDialog::ProjectDropDialog(const std::string& filename) m_fname_f = new wxStaticText(this, wxID_ANY, filename); m_fname_f->SetFont(::Label::Head_14); - m_fname_f->SetMaxSize(wxSize(FromDIP(300), -1)); + m_fname_f->SetMaxSize(wxSize(FromDIP(300),-1)); m_fname_f->Wrap(FromDIP(300)); m_fname_f->SetForegroundColour(wxColour("#363636")); m_sizer_main->Add(m_fname_title, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); m_sizer_main->AddSpacer(FromDIP(10)); - m_sizer_main->Add(m_fname_f, 1, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + m_sizer_main->Add(m_fname_f , 1, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); m_sizer_main->AddSpacer(FromDIP(10)); - auto radio_group = new RadioGroup(this, - { - _L("Open as project"), // 0 - _L("Import geometry only") // 1 - }, - wxVERTICAL); - radio_group->SetMinSize(wxSize(FromDIP(300), -1)); + auto radio_group = new RadioGroup(this, { + _L("Open as project"), // 0 + _L("Import geometry only") // 1 + }, wxVERTICAL); + radio_group->SetMinSize(wxSize(FromDIP(300),-1)); radio_group->SetSelection(get_action() - 1); - radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, - [this, radio_group](wxCommandEvent& e) { set_action(radio_group->GetSelection() + 1); }); + radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, [this, radio_group](wxCommandEvent &e) { + set_action(radio_group->GetSelection() + 1); + }); m_sizer_main->Add(radio_group, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); @@ -17242,8 +17228,8 @@ ProjectDropDialog::ProjectDropDialog(const std::string& filename) // Orca: hide the "Don't show again" checkbox, people keeps accidentally checked this then forgot // wxBoxSizer *m_sizer_left = new wxBoxSizer(wxHORIZONTAL); // - // auto dont_show_again = create_remember_checkbox(_L("Remember my choice."), this, _L("This option can be changed later in preferences, - // under 'Load Behaviour'.")); m_sizer_left->Add(dont_show_again, 0, wxALL, 5); + // auto dont_show_again = create_remember_checkbox(_L("Remember my choice."), this, _L("This option can be changed later in preferences, under 'Load Behaviour'.")); + // m_sizer_left->Add(dont_show_again, 0, wxALL, 5); // // m_sizer_bottom->Add(m_sizer_left, 0, wxEXPAND, 5); @@ -17263,9 +17249,9 @@ ProjectDropDialog::ProjectDropDialog(const std::string& filename) wxGetApp().UpdateDlgDarkUI(this); } -wxBoxSizer* ProjectDropDialog::create_remember_checkbox(wxString title, wxWindow* parent, wxString tooltip) +wxBoxSizer *ProjectDropDialog::create_remember_checkbox(wxString title, wxWindow *parent, wxString tooltip) { - wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 5); auto checkbox = new ::CheckBox(parent); @@ -17275,13 +17261,13 @@ wxBoxSizer* ProjectDropDialog::create_remember_checkbox(wxString title, wxWindow m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxSize(-1, -1), 0); - checkbox_title->SetForegroundColour(wxColour(144, 144, 144)); + checkbox_title->SetForegroundColour(wxColour(144,144,144)); checkbox_title->SetFont(::Label::Body_13); checkbox_title->Wrap(-1); checkbox_title->SetToolTip(tooltip); m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); - checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox](wxCommandEvent& e) { + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox](wxCommandEvent &e) { m_remember_choice = checkbox->GetValue(); e.Skip(); }); @@ -17289,24 +17275,28 @@ wxBoxSizer* ProjectDropDialog::create_remember_checkbox(wxString title, wxWindow return m_sizer_checkbox; } -void ProjectDropDialog::on_select_ok(wxCommandEvent& event) +void ProjectDropDialog::on_select_ok(wxCommandEvent &event) { if (m_remember_choice) { LoadType load_type = static_cast(get_action()); - switch (load_type) { - case LoadType::OpenProject: - wxGetApp().app_config->set(SETTING_PROJECT_LOAD_BEHAVIOUR, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL); - break; - case LoadType::LoadGeometry: - wxGetApp().app_config->set(SETTING_PROJECT_LOAD_BEHAVIOUR, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY); - break; + switch (load_type) + { + case LoadType::OpenProject: + wxGetApp().app_config->set(SETTING_PROJECT_LOAD_BEHAVIOUR, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL); + break; + case LoadType::LoadGeometry: + wxGetApp().app_config->set(SETTING_PROJECT_LOAD_BEHAVIOUR, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY); + break; } } EndModal(wxID_OK); } -void ProjectDropDialog::on_select_cancel(wxCommandEvent& event) { EndModal(wxID_CANCEL); } +void ProjectDropDialog::on_select_cancel(wxCommandEvent &event) +{ + EndModal(wxID_CANCEL); +} void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect) { @@ -17314,7 +17304,7 @@ void ProjectDropDialog::on_dpi_changed(const wxRect& suggested_rect) Refresh(); } -// BBS: remove GCodeViewer as seperate APP logic +//BBS: remove GCodeViewer as seperate APP logic bool Plater::load_files(const wxArrayString& filenames) { const std::regex pattern_drop(".*[.](stp|step|stl|oltp|obj|amf|3mf|svg|zip|drc)", std::regex::icase); @@ -17333,14 +17323,14 @@ bool Plater::load_files(const wxArrayString& filenames) continue; } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": normal_paths %1%, gcode_paths %2%") % normal_paths.size() % gcode_paths.size(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": normal_paths %1%, gcode_paths %2%")%normal_paths.size() %gcode_paths.size(); if (normal_paths.empty() && gcode_paths.empty()) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": can not find valid path, return directly"); // Likely no supported files return false; - } else if (normal_paths.empty()) { - // only gcode files + } + else if (normal_paths.empty()){ + //only gcode files if (gcode_paths.size() > 1) { show_info(this, _L("Only one G-code file can be opened at a time."), _L("G-code loading")); return false; @@ -17355,12 +17345,12 @@ bool Plater::load_files(const wxArrayString& filenames) } //// searches for project files - // for (std::vector::const_reverse_iterator it = normal_paths.rbegin(); it != normal_paths.rend(); ++it) { - // std::string filename = (*it).filename().string(); - // ////BBS: only 3mf will be treated as project file - // if (open_3mf_file((*it))) - // return true; - // } + //for (std::vector::const_reverse_iterator it = normal_paths.rbegin(); it != normal_paths.rend(); ++it) { + // std::string filename = (*it).filename().string(); + // ////BBS: only 3mf will be treated as project file + // if (open_3mf_file((*it))) + // return true; + //} //// other files std::string snapshot_label; @@ -17379,31 +17369,20 @@ bool Plater::load_files(const wxArrayString& filenames) } } - // Plater::TakeSnapshot snapshot(this, snapshot_label); - // load_files(normal_paths, LoadStrategy::LoadModel); + //Plater::TakeSnapshot snapshot(this, snapshot_label); + //load_files(normal_paths, LoadStrategy::LoadModel); // BBS: check file types - std::sort(normal_paths.begin(), normal_paths.end(), - [](fs::path obj1, fs::path obj2) { return obj1.filename().string() < obj2.filename().string(); }); + std::sort(normal_paths.begin(), normal_paths.end(), [](fs::path obj1, fs::path obj2) { return obj1.filename().string() < obj2.filename().string(); }); auto loadfiles_type = LoadFilesType::NoFile; auto amf_files_count = get_3mf_file_count(normal_paths); - if (normal_paths.size() > 1 && amf_files_count < normal_paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MFOther; - } - if (normal_paths.size() > 1 && amf_files_count == normal_paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MF; - } - if (normal_paths.size() > 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::MultipleOther; - } - if (normal_paths.size() == 1 && amf_files_count == 1) { - loadfiles_type = LoadFilesType::Single3MF; - }; - if (normal_paths.size() == 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::SingleOther; - }; + if (normal_paths.size() > 1 && amf_files_count < normal_paths.size()) { loadfiles_type = LoadFilesType::Multiple3MFOther; } + if (normal_paths.size() > 1 && amf_files_count == normal_paths.size()) { loadfiles_type = LoadFilesType::Multiple3MF; } + if (normal_paths.size() > 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::MultipleOther; } + if (normal_paths.size() == 1 && amf_files_count == 1) { loadfiles_type = LoadFilesType::Single3MF; }; + if (normal_paths.size() == 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::SingleOther; }; auto first_file = std::vector{}; auto tmf_file = std::vector{}; @@ -17411,7 +17390,8 @@ bool Plater::load_files(const wxArrayString& filenames) auto res = true; if (this->m_only_gcode || this->m_exported_file) { - if ((loadfiles_type == LoadFilesType::SingleOther) || (loadfiles_type == LoadFilesType::MultipleOther)) { + if ((loadfiles_type == LoadFilesType::SingleOther) + || (loadfiles_type == LoadFilesType::MultipleOther)) { show_info(this, _L("Unable to add models in preview mode"), _L("Add Models")); return false; } @@ -17433,46 +17413,38 @@ bool Plater::load_files(const wxArrayString& filenames) }; switch (loadfiles_type) { - case LoadFilesType::Single3MF: open_3mf_file(normal_paths[0]); break; + case LoadFilesType::Single3MF: + open_3mf_file(normal_paths[0]); + break; case LoadFilesType::SingleOther: { Plater::TakeSnapshot snapshot(this, snapshot_label); - if (handle_zips(normal_paths)) - return true; - if (load_files(normal_paths, LoadStrategy::LoadModel, false).empty()) { - res = false; - } + if (handle_zips(normal_paths)) return true; + if (load_files(normal_paths, LoadStrategy::LoadModel, false).empty()) { res = false; } break; } case LoadFilesType::Multiple3MF: first_file = std::vector{normal_paths[0]}; for (auto i = 0; i < normal_paths.size(); i++) { - if (i > 0) { - other_file.push_back(normal_paths[i]); - } + if (i > 0) { other_file.push_back(normal_paths[i]); } }; open_3mf_file(first_file[0]); - if (load_files(other_file, LoadStrategy::LoadModel).empty()) { - res = false; - } + if (load_files(other_file, LoadStrategy::LoadModel).empty()) { res = false; } break; case LoadFilesType::MultipleOther: { Plater::TakeSnapshot snapshot(this, snapshot_label); if (handle_zips(normal_paths)) { - if (normal_paths.empty()) - return true; - } - if (load_files(normal_paths, LoadStrategy::LoadModel, true).empty()) { - res = false; + if (normal_paths.empty()) return true; } + if (load_files(normal_paths, LoadStrategy::LoadModel, true).empty()) { res = false; } break; } case LoadFilesType::Multiple3MFOther: - for (const auto& path : normal_paths) { - if (boost::iends_with(path.filename().string(), ".3mf")) { + for (const auto &path : normal_paths) { + if (boost::iends_with(path.filename().string(), ".3mf")){ if (first_file.size() <= 0) first_file.push_back(path); else @@ -17483,16 +17455,11 @@ bool Plater::load_files(const wxArrayString& filenames) } open_3mf_file(first_file[0]); - if (load_files(tmf_file, LoadStrategy::LoadModel).empty()) { - res = false; - } + if (load_files(tmf_file, LoadStrategy::LoadModel).empty()) { res = false; } if (res && handle_zips(other_file)) { - if (normal_paths.empty()) - return true; - } - if (load_files(other_file, LoadStrategy::LoadModel, false).empty()) { - res = false; + if (normal_paths.empty()) return true; } + if (load_files(other_file, LoadStrategy::LoadModel, false).empty()) { res = false; } break; default: break; } @@ -17515,7 +17482,7 @@ LoadType determine_load_type(std::string filename, std::string override_setting) } else if (setting == OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK) { ProjectDropDialog dlg(filename); if (dlg.ShowModal() == wxID_OK) { - int choice = dlg.get_action(); + int choice = dlg.get_action(); LoadType load_type = static_cast(choice); wxGetApp().app_config->set("import_project_action", std::to_string(choice)); @@ -17530,42 +17497,38 @@ LoadType determine_load_type(std::string filename, std::string override_setting) } } -bool Plater::open_3mf_file(const fs::path& file_path) +bool Plater::open_3mf_file(const fs::path &file_path) { std::string filename = encode_path(file_path.filename().string().c_str()); if (!boost::algorithm::iends_with(filename, ".3mf")) { return false; } - bool not_empty_plate = !model().objects.empty(); - bool load_setting_ask_when_relevant = wxGetApp().app_config->get(SETTING_PROJECT_LOAD_BEHAVIOUR) == - OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT; - LoadType load_type = determine_load_type(filename, (not_empty_plate && load_setting_ask_when_relevant) ? - OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK : - ""); + bool not_empty_plate = !model().objects.empty(); + bool load_setting_ask_when_relevant = wxGetApp().app_config->get(SETTING_PROJECT_LOAD_BEHAVIOUR) == OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT; + LoadType load_type = determine_load_type(filename, (not_empty_plate && load_setting_ask_when_relevant) ? OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK : ""); - if (load_type == LoadType::Unknown) - return false; + if (load_type == LoadType::Unknown) return false; switch (load_type) { - case LoadType::OpenProject: { - if (wxGetApp().can_load_project()) - load_project(from_path(file_path), ""); - break; - } - case LoadType::LoadGeometry: { - Plater::TakeSnapshot snapshot(this, "Import Object"); - load_files({file_path}, LoadStrategy::LoadModel); - break; - } - case LoadType::LoadConfig: { - load_files({file_path}, LoadStrategy::LoadConfig); - break; - } - case LoadType::Unknown: { - assert(false); - break; - } + case LoadType::OpenProject: { + if (wxGetApp().can_load_project()) + load_project(from_path(file_path), ""); + break; + } + case LoadType::LoadGeometry: { + Plater::TakeSnapshot snapshot(this, "Import Object"); + load_files({file_path}, LoadStrategy::LoadModel); + break; + } + case LoadType::LoadConfig: { + load_files({file_path}, LoadStrategy::LoadConfig); + break; + } + case LoadType::Unknown: { + assert(false); + break; + } } return true; @@ -17574,7 +17537,7 @@ bool Plater::open_3mf_file(const fs::path& file_path) int Plater::get_3mf_file_count(std::vector paths) { auto count = 0; - for (const auto& path : paths) { + for (const auto &path : paths) { if (boost::iends_with(path.filename().string(), ".3mf")) { count++; } @@ -17587,12 +17550,10 @@ void Plater::add_file() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " entry"; wxArrayString input_files; wxGetApp().import_model(this, input_files); - if (input_files.empty()) - return; + if (input_files.empty()) return; std::vector paths; - for (const auto& file : input_files) - paths.emplace_back(into_path(file)); + for (const auto &file : input_files) paths.emplace_back(into_path(file)); std::string snapshot_label; assert(!paths.empty()); @@ -17609,28 +17570,21 @@ void Plater::add_file() auto loadfiles_type = LoadFilesType::NoFile; auto amf_files_count = get_3mf_file_count(paths); - if (paths.size() > 1 && amf_files_count < paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MFOther; - } - if (paths.size() > 1 && amf_files_count == paths.size()) { - loadfiles_type = LoadFilesType::Multiple3MF; - } - if (paths.size() > 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::MultipleOther; - } - if (paths.size() == 1 && amf_files_count == 1) { - loadfiles_type = LoadFilesType::Single3MF; - }; - if (paths.size() == 1 && amf_files_count == 0) { - loadfiles_type = LoadFilesType::SingleOther; - }; + if (paths.size() > 1 && amf_files_count < paths.size()) { loadfiles_type = LoadFilesType::Multiple3MFOther; } + if (paths.size() > 1 && amf_files_count == paths.size()) { loadfiles_type = LoadFilesType::Multiple3MF; } + if (paths.size() > 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::MultipleOther; } + if (paths.size() == 1 && amf_files_count == 1) { loadfiles_type = LoadFilesType::Single3MF; }; + if (paths.size() == 1 && amf_files_count == 0) { loadfiles_type = LoadFilesType::SingleOther; }; auto first_file = std::vector{}; auto tmf_file = std::vector{}; auto other_file = std::vector{}; - switch (loadfiles_type) { - case LoadFilesType::Single3MF: open_3mf_file(paths[0]); break; + switch (loadfiles_type) + { + case LoadFilesType::Single3MF: + open_3mf_file(paths[0]); + break; case LoadFilesType::SingleOther: { Plater::TakeSnapshot snapshot(this, snapshot_label); @@ -17648,15 +17602,11 @@ void Plater::add_file() case LoadFilesType::Multiple3MF: first_file = std::vector{paths[0]}; for (auto i = 0; i < paths.size(); i++) { - if (i > 0) { - other_file.push_back(paths[i]); - } + if (i > 0) { other_file.push_back(paths[i]); } }; open_3mf_file(first_file[0]); - if (!load_files(other_file, LoadStrategy::LoadModel).empty()) { - wxGetApp().mainframe->update_title(); - } + if (!load_files(other_file, LoadStrategy::LoadModel).empty()) { wxGetApp().mainframe->update_title(); } break; case LoadFilesType::MultipleOther: { @@ -17668,13 +17618,13 @@ void Plater::add_file() } wxGetApp().mainframe->update_title(); if (wxGetApp().app_config->get("recent_models") == "true") - for (auto& path : paths) + for (auto &path : paths) wxGetApp().mainframe->add_to_recent_projects(path.wstring()); } break; } case LoadFilesType::Multiple3MFOther: - for (const auto& path : paths) { + for (const auto &path : paths) { if (boost::iends_with(path.filename().string(), ".3mf")) { if (first_file.size() <= 0) first_file.push_back(path); @@ -17690,11 +17640,11 @@ void Plater::add_file() if (!load_files(other_file, LoadStrategy::LoadModel, false).empty()) { wxGetApp().mainframe->update_title(); if (wxGetApp().app_config->get("recent_models") == "true") - for (auto& file : other_file) + for (auto &file : other_file) wxGetApp().mainframe->add_to_recent_projects(file.wstring()); } break; - default: break; + default:break; } } @@ -17703,31 +17653,33 @@ void Plater::update(bool conside_update_flag, bool force_background_processing_u if (is_new_project_and_check_state()) { return; } - unsigned int flag = force_background_processing_update ? (unsigned int) Plater::priv::UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE : - 0; + unsigned int flag = force_background_processing_update ? (unsigned int)Plater::priv::UpdateParams::FORCE_BACKGROUND_PROCESSING_UPDATE : 0; if (conside_update_flag) { if (need_update()) { p->update(flag); p->set_need_update(false); } - } else + } + else p->update(flag); } void Plater::object_list_changed() { p->object_list_changed(); } -Worker& Plater::get_ui_job_worker() { return p->m_worker; } +Worker &Plater::get_ui_job_worker() { return p->m_worker; } -const Worker& Plater::get_ui_job_worker() const { return p->m_worker; } +const Worker &Plater::get_ui_job_worker() const { return p->m_worker; } void Plater::update_ui_from_settings() { p->update_ui_from_settings(); } void Plater::select_view(const std::string& direction) { p->select_view(direction); } -// BBS: add no_slice logic +//BBS: add no_slice logic void Plater::select_view_3D(const std::string& name, bool no_slice) { p->select_view_3D(name, no_slice); } -void Plater::reload_paint_after_background_process_apply() { p->preview->set_reload_paint_after_background_process_apply(true); } +void Plater::reload_paint_after_background_process_apply() { + p->preview->set_reload_paint_after_background_process_apply(true); +} bool Plater::is_preview_shown() const { return p->is_preview_shown(); } bool Plater::is_preview_loaded() const { return p->is_preview_loaded(); } @@ -17737,7 +17689,7 @@ bool Plater::are_view3D_labels_shown() const { return p->are_view3D_labels_shown void Plater::show_view3D_labels(bool show) { p->show_view3D_labels(show); } bool Plater::is_view3D_overhang_shown() const { return p->is_view3D_overhang_shown(); } -void Plater::show_view3D_overhang(bool show) { p->show_view3D_overhang(show); } +void Plater::show_view3D_overhang(bool show) { p->show_view3D_overhang(show); } bool Plater::is_sidebar_enabled() const { return p->sidebar_layout.is_enabled; } void Plater::enable_sidebar(bool enabled) { p->enable_sidebar(enabled); } @@ -17747,7 +17699,7 @@ Sidebar::DockingState Plater::get_sidebar_docking_state() const { return p->get_ void Plater::reset_window_layout() { p->reset_window_layout(); } -// BBS +//BBS void Plater::select_curr_plate_all() { p->select_curr_plate_all(); } void Plater::remove_curr_plate_all() { p->remove_curr_plate_all(); } @@ -17759,10 +17711,9 @@ void Plater::remove(size_t obj_idx) { p->remove(obj_idx); } void Plater::reset(bool apply_presets_change) { p->reset(apply_presets_change); } void Plater::reset_with_confirm() { - if (p->model.objects.empty() || - MessageDialog(static_cast(this), _L("All objects will be removed, continue?"), - wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Delete All"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE) - .ShowModal() == wxID_YES) { + if (p->model.objects.empty() || MessageDialog(static_cast(this), _L("All objects will be removed, continue?"), + wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Delete All"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE) + .ShowModal() == wxID_YES) { reset(); // BBS: jump to plater panel wxGetApp().mainframe->select_tab(TAB_ID_HOME); @@ -17773,15 +17724,13 @@ void Plater::reset_with_confirm() int GUI::Plater::close_with_confirm(std::function second_check) { if (up_to_date(false, false)) { - if (second_check && !second_check(false)) - return wxID_CANCEL; + if (second_check && !second_check(false)) return wxID_CANCEL; model().set_backup_path(""); return wxID_NO; } - MessageDialog dlg(static_cast(this), - _L("The current project has unsaved changes. Would you like to save before continuing\?"), - wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE); + MessageDialog dlg(static_cast(this), _L("The current project has unsaved changes. Would you like to save before continuing\?"), + wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Save"), wxYES_NO | wxCANCEL | wxYES_DEFAULT | wxCENTRE); dlg.show_dsa_button(_L("Remember my choice.")); auto choise = wxGetApp().app_config->get("save_project_choise"); auto result = choise.empty() ? dlg.ShowModal() : choise == "yes" ? wxID_YES : wxID_NO; @@ -17801,8 +17750,7 @@ int GUI::Plater::close_with_confirm(std::function second_check) } } - if (second_check && !second_check(result == wxID_YES)) - return wxID_CANCEL; + if (second_check && !second_check(result == wxID_YES)) return wxID_CANCEL; model().set_backup_path(""); up_to_date(true, false); @@ -17811,21 +17759,23 @@ int GUI::Plater::close_with_confirm(std::function second_check) return result; } -// BBS: trigger a restore project event +//BBS: trigger a restore project event void Plater::trigger_restore_project(int skip_confirm) { auto evt = new wxCommandEvent(EVT_RESTORE_PROJECT, this->GetId()); evt->SetInt(skip_confirm); wxQueueEvent(this, evt); - // wxPostEvent(this, *evt); + //wxPostEvent(this, *evt); } -// BBS -bool Plater::delete_object_from_model(size_t obj_idx, bool refresh_immediately) -{ return p->delete_object_from_model(obj_idx, refresh_immediately); } +//BBS +bool Plater::delete_object_from_model(size_t obj_idx, bool refresh_immediately) { return p->delete_object_from_model(obj_idx, refresh_immediately); } -// BBS: delete all from model -void Plater::delete_all_objects_from_model() { p->delete_all_objects_from_model(); } +//BBS: delete all from model +void Plater::delete_all_objects_from_model() +{ + p->delete_all_objects_from_model(); +} void Plater::set_selected_visible(bool visible) { @@ -17838,6 +17788,7 @@ void Plater::set_selected_visible(bool visible) p->get_current_canvas3D()->set_selected_visible(visible); } + void Plater::remove_selected() { /*if (p->get_selection().is_empty()) @@ -17852,33 +17803,30 @@ void Plater::remove_selected() Plater::TakeSnapshot snapshot(this, "Delete Selected Objects"); get_ui_job_worker().cancel_all(); - // BBS delete current selected - // p->view3D->delete_selected(); + //BBS delete current selected + // p->view3D->delete_selected(); p->get_current_canvas3D()->delete_selected(); } void Plater::increase_instances(size_t num) { - if (!can_increase_instances()) { - return; - } + if (! can_increase_instances()) { return; } Plater::TakeSnapshot snapshot(this, "Increase Instances"); int obj_idx = p->get_selected_object_idx(); - ModelObject* model_object = p->model.objects[obj_idx]; + ModelObject* model_object = p->model.objects[obj_idx]; ModelInstance* model_instance = model_object->instances.back(); - bool was_one_instance = model_object->instances.size() == 1; + bool was_one_instance = model_object->instances.size()==1; double offset_base = canvas3D()->get_size_proportional_to_max_bed_size(0.05); - double offset = offset_base; + double offset = offset_base; for (size_t i = 0; i < num; i++, offset += offset_base) { Vec3d offset_vec = model_instance->get_offset() + Vec3d(offset, offset, 0.0); - model_object->add_instance(offset_vec, model_instance->get_scaling_factor(), model_instance->get_rotation(), - model_instance->get_mirror()); - // p->print.get_object(obj_idx)->add_copy(Slic3r::to_2d(offset_vec)); + model_object->add_instance(offset_vec, model_instance->get_scaling_factor(), model_instance->get_rotation(), model_instance->get_mirror()); +// p->print.get_object(obj_idx)->add_copy(Slic3r::to_2d(offset_vec)); } #ifdef SUPPORT_AUTO_CENTER @@ -17888,23 +17836,21 @@ void Plater::increase_instances(size_t num) p->update(); - p->get_selection().add_instance(obj_idx, (int) model_object->instances.size() - 1); + p->get_selection().add_instance(obj_idx, (int)model_object->instances.size() - 1); sidebar().obj_list()->increase_object_instances(obj_idx, was_one_instance ? num + 1 : num); p->selection_changed(); this->p->schedule_background_process(); - // if (wxGetApp().app_config->get("auto_arrange") == "true") { - // this->set_prepare_state(Job::PREPARE_STATE_MENU); - // this->arrange(); - // } + //if (wxGetApp().app_config->get("auto_arrange") == "true") { + // this->set_prepare_state(Job::PREPARE_STATE_MENU); + // this->arrange(); + //} } void Plater::decrease_instances(size_t num) { - if (!can_decrease_instances()) { - return; - } + if (! can_decrease_instances()) { return; } Plater::TakeSnapshot snapshot(this, "Decrease Instances"); @@ -17912,28 +17858,34 @@ void Plater::decrease_instances(size_t num) ModelObject* model_object = p->model.objects[obj_idx]; if (model_object->instances.size() > num) { - for (size_t i = 0; i < num; ++i) + for (size_t i = 0; i < num; ++ i) model_object->delete_last_instance(); p->update(); // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. sidebar().obj_list()->decrease_object_instances(obj_idx, num); - } else { + } + else { remove(obj_idx); } if (!model_object->instances.empty()) - p->get_selection().add_instance(obj_idx, (int) model_object->instances.size() - 1); + p->get_selection().add_instance(obj_idx, (int)model_object->instances.size() - 1); p->selection_changed(); this->p->schedule_background_process(); - // if (wxGetApp().app_config->get("auto_arrange") == "true") { - // this->set_prepare_state(Job::PREPARE_STATE_MENU); - // this->arrange(); - // } + //if (wxGetApp().app_config->get("auto_arrange") == "true") { + // this->set_prepare_state(Job::PREPARE_STATE_MENU); + // this->arrange(); + //} } -static long GetNumberFromUser( - const wxString& msg, const wxString& prompt, const wxString& title, long value, long min, long max, wxWindow* parent) +static long GetNumberFromUser( const wxString& msg, + const wxString& prompt, + const wxString& title, + long value, + long min, + long max, + wxWindow* parent) { #ifdef _WIN32 wxNumberEntryDialog dialog(parent, msg, prompt, title, value, min, max, wxDefaultPosition); @@ -17955,14 +17907,14 @@ void Plater::set_number_of_copies(/*size_t num*/) ModelObject* model_object = p->model.objects[obj_idx]; - const int num = GetNumberFromUser(" ", _L("Number of copies:"), _L("Copies of the selected object"), model_object->instances.size(), 0, - 1000, this); + const int num = GetNumberFromUser( " ", _L("Number of copies:"), + _L("Copies of the selected object"), model_object->instances.size(), 0, 1000, this ); if (num < 0) return; - Plater::TakeSnapshot snapshot(this, (boost::format("Set numbers of copies to %1%") % num).str()); + Plater::TakeSnapshot snapshot(this, (boost::format("Set numbers of copies to %1%")%num).str()); - int diff = num - (int) model_object->instances.size(); + int diff = num - (int)model_object->instances.size(); if (diff > 0) increase_instances(diff); else if (diff < 0) @@ -17971,7 +17923,7 @@ void Plater::set_number_of_copies(/*size_t num*/) void Plater::fill_bed_with_copies() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle()) { p->take_snapshot(_u8L("Arrange")); replace_job(w, std::make_unique()); @@ -17980,16 +17932,22 @@ void Plater::fill_bed_with_copies() void Plater::fill_bed_with_instances() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle()) { p->take_snapshot(_u8L("Arrange")); replace_job(w, std::make_unique(true)); } } -bool Plater::is_selection_empty() const { return p->get_selection().is_empty() || p->get_selection().is_wipe_tower(); } +bool Plater::is_selection_empty() const +{ + return p->get_selection().is_empty() || p->get_selection().is_wipe_tower(); +} -void Plater::scale_selection_to_fit_print_volume() { p->scale_selection_to_fit_print_volume(); } +void Plater::scale_selection_to_fit_print_volume() +{ + p->scale_selection_to_fit_print_volume(); +} void Plater::convert_unit(ConversionType conv_type) { @@ -18000,14 +17958,13 @@ void Plater::convert_unit(ConversionType conv_type) TakeSnapshot snapshot(this, conv_type == ConversionType::CONV_FROM_INCH ? "Convert from imperial units" : conv_type == ConversionType::CONV_TO_INCH ? "Revert conversion from imperial units" : - conv_type == ConversionType::CONV_FROM_METER ? "Convert from meters" : - "Revert conversion from meters"); + conv_type == ConversionType::CONV_FROM_METER ? "Convert from meters" : "Revert conversion from meters"); wxBusyCursor wait; ModelObjectPtrs objects; std::reverse(obj_idxs.begin(), obj_idxs.end()); for (int obj_idx : obj_idxs) { - ModelObject* object = p->model.objects[obj_idx]; + ModelObject *object = p->model.objects[obj_idx]; object->convert_units(objects, conv_type, volume_idxs); remove(obj_idx); } @@ -18015,12 +17972,13 @@ void Plater::convert_unit(ConversionType conv_type) p->load_model_objects(objects); Selection& selection = p->view3D->get_canvas3d()->get_selection(); - size_t last_obj_idx = p->model.objects.size() - 1; + size_t last_obj_idx = p->model.objects.size() - 1; if (volume_idxs.empty()) { for (size_t i = 0; i < objects.size(); ++i) - selection.add_object((unsigned int) (last_obj_idx - i), i == 0); - } else { + selection.add_object((unsigned int)(last_obj_idx - i), i == 0); + } + else { for (int vol_idx : volume_idxs) selection.add_volume(last_obj_idx, vol_idx, 0, false); } @@ -18042,9 +18000,9 @@ void Plater::apply_cut_object_to_model(size_t obj_idx, const ModelObjectPtrs& ne wxGetApp().obj_list()->update_info_items(idx); Selection& selection = p->get_selection(); - size_t last_id = p->model.objects.size() - 1; + size_t last_id = p->model.objects.size() - 1; for (size_t i = 0; i < new_objects.size(); ++i) - selection.add_object((unsigned int) (last_id - i), i == 0); + selection.add_object((unsigned int)(last_id - i), i == 0); // UIThreadWorker w; // arrange(w, true); @@ -18056,8 +18014,8 @@ void Plater::export_gcode(bool prefer_removable) if (p->model.objects.empty()) return; - // if (get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode(true)) - // return; + //if (get_view3D_canvas3D()->get_gizmos_manager().is_in_editing_mode(true)) + // return; if (p->process_completed_with_error == p->partplate_list.get_curr_plate_index()) return; @@ -18071,20 +18029,21 @@ void Plater::export_gcode(bool prefer_removable) unsigned int state = this->p->update_restart_background_process(false, false); if (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) return; - default_output_file = this->p->background_process.output_filepath_for_project(into_path(this->p->get_project_filename(".3mf"))); - } catch (const Slic3r::PlaceholderParserError& ex) { + default_output_file = this->p->background_process.output_filepath_for_project( + into_path(this->p->get_project_filename(".3mf"))); + } catch (const Slic3r::PlaceholderParserError &ex) { // Show the error with monospaced font. show_error(this, ex.what(), true); return; - } catch (const std::exception& ex) { + } catch (const std::exception &ex) { show_error(this, ex.what(), false); return; } - default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); - AppConfig& appconfig = *wxGetApp().app_config; - RemovableDriveManager& removable_drive_manager = *wxGetApp().removable_drive_manager(); + default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); + AppConfig &appconfig = *wxGetApp().app_config; + RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager(); // Get a last save path, either to removable media or to an internal media. - std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable); + std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable); if (prefer_removable) { // Returns a path to a removable media if it exists, prefering start_dir. Update the internal removable drives database. start_dir = removable_drive_manager.get_removable_drive_path(start_dir); @@ -18096,14 +18055,17 @@ void Plater::export_gcode(bool prefer_removable) fs::path output_path; { std::string ext = default_output_file.extension().string(); - wxFileDialog dlg(this, (printer_technology() == ptFFF) ? _L("Save G-code file as:") : _L("Save SLA file as:"), start_dir, - from_path(default_output_file.filename()), - GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_SL1, ext), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + wxFileDialog dlg(this, (printer_technology() == ptFFF) ? _L("Save G-code file as:") : _L("Save SLA file as:"), + start_dir, + from_path(default_output_file.filename()), + GUI::file_wildcards((printer_technology() == ptFFF) ? FT_GCODE : FT_SL1, ext), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); if (dlg.ShowModal() == wxID_OK) { output_path = into_path(dlg.GetPath()); while (has_illegal_filename_characters(output_path.filename().string())) { show_error(this, _L("The provided file name is not valid.") + "\n" + - _L("The following characters are not allowed by a FAT file system:") + " <>:/\\|?*\""); + _L("The following characters are not allowed by a FAT file system:") + " <>:/\\|?*\""); dlg.SetFilename(from_path(output_path.filename())); if (dlg.ShowModal() == wxID_OK) output_path = into_path(dlg.GetPath()); @@ -18115,17 +18077,17 @@ void Plater::export_gcode(bool prefer_removable) } } - if (!output_path.empty()) { + if (! output_path.empty()) { bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); - // bool path_on_removable_media = false; + //bool path_on_removable_media = false; p->notification_manager->new_export_began(path_on_removable_media); - p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; - p->last_output_path = output_path.string(); + p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; + p->last_output_path = output_path.string(); p->last_output_dir_path = output_path.parent_path().string(); p->export_gcode(output_path, path_on_removable_media); // Storing a path to AppConfig either as path to removable media or a path to internal media. - // is_path_on_removable_drive() is called with the "true" parameter to update its internal database as the user may have shuffled - // the external drives while the dialog was open. + // is_path_on_removable_drive() is called with the "true" parameter to update its internal database as the user may have shuffled the external drives + // while the dialog was open. appconfig.update_last_output_dir(output_path.parent_path().string(), path_on_removable_media); try { @@ -18137,18 +18099,22 @@ void Plater::export_gcode(bool prefer_removable) j["printer_preset"] = printer_config.config.opt_string("inherits"); } - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { j["gcode_printer_model"] = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); } - NetworkAgent* agent = wxGetApp().getAgent(); + NetworkAgent *agent = wxGetApp().getAgent(); } catch (...) {} + } } -void Plater::send_to_printer(bool isall) { p->on_action_send_to_printer(isall); } +void Plater::send_to_printer(bool isall) +{ + p->on_action_send_to_printer(isall); +} -// BBS export gcode 3mf to file +//BBS export gcode 3mf to file void Plater::export_gcode_3mf(bool export_all) { if (p->model.objects.empty()) @@ -18157,7 +18123,7 @@ void Plater::export_gcode_3mf(bool export_all) if (p->process_completed_with_error == p->partplate_list.get_curr_plate_index()) return; - // calc default_output_file, get default output file from background process + //calc default_output_file, get default output file from background process fs::path default_output_file; AppConfig& appconfig = *wxGetApp().app_config; std::string start_dir; @@ -18167,52 +18133,60 @@ void Plater::export_gcode_3mf(bool export_all) unsigned int state = this->p->update_restart_background_process(false, false); if (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) return; - default_output_file = this->p->background_process.output_filepath_for_project(into_path(this->p->get_project_filename(".3mf"))); - } catch (const Slic3r::PlaceholderParserError& ex) { + default_output_file = this->p->background_process.output_filepath_for_project( + into_path(this->p->get_project_filename(".3mf"))); + } + catch (const Slic3r::PlaceholderParserError& ex) { // Show the error with monospaced font. show_error(this, ex.what(), true); return; - } catch (const std::exception& ex) { + } + catch (const std::exception& ex) { show_error(this, ex.what(), false); return; } default_output_file.replace_extension(".gcode.3mf"); default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); - // Get a last save path + //Get a last save path start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false); fs::path output_path; { std::string ext = default_output_file.extension().string(); - wxFileDialog dlg(this, _L("Save Sliced file as:"), start_dir, from_path(default_output_file.filename()), - GUI::file_wildcards(FT_GCODE_3MF, ""), wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + wxFileDialog dlg(this, _L("Save Sliced file as:"), + start_dir, + from_path(default_output_file.filename()), + GUI::file_wildcards(FT_GCODE_3MF, ""), + wxFD_SAVE | wxFD_OVERWRITE_PROMPT + ); if (dlg.ShowModal() == wxID_OK) { output_path = into_path(dlg.GetPath()); - ext = output_path.extension().string(); + ext = output_path.extension().string(); if (ext != ".3mf") output_path = output_path.string() + ".3mf"; } } if (!output_path.empty()) { - // BBS do not set to removable media path + //BBS do not set to removable media path bool path_on_removable_media = false; p->notification_manager->new_export_began(path_on_removable_media); p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; - // BBS do not save last output path - p->last_output_path = output_path.string(); + //BBS do not save last output path + p->last_output_path = output_path.string(); p->last_output_dir_path = output_path.parent_path().string(); - int plate_idx = get_partplate_list().get_curr_plate_index(); + int plate_idx = get_partplate_list().get_curr_plate_index(); if (export_all) plate_idx = PLATE_ALL_IDX; - export_3mf(output_path, SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode | SaveStrategy::SkipModel, - plate_idx); // BBS: silence + export_3mf(output_path, SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode | SaveStrategy::SkipModel, plate_idx); // BBS: silence RemovableDriveManager& removable_drive_manager = *wxGetApp().removable_drive_manager(); + bool on_removable = removable_drive_manager.is_path_on_removable_drive(p->last_output_dir_path); + // update last output dir appconfig.update_last_output_dir(output_path.parent_path().string(), false); p->notification_manager->push_exporting_finished_notification(output_path.string(), p->last_output_dir_path, on_removable); @@ -18224,13 +18198,10 @@ void Plater::send_gcode_finish(wxString name) auto out_str = GUI::format(_L("The file %s has been sent to the printer's storage space and can be viewed on the printer."), name); p->notification_manager->push_exporting_finished_notification(out_str, "", false); } - void Plater::export_core_3mf() { wxString path = p->get_export_file(FT_3MF); - if (path.empty()) { - return; - } + if (path.empty()) { return; } const std::string path_u8 = into_u8(path); export_3mf(path_u8, SaveStrategy::Silence); } @@ -18401,28 +18372,26 @@ void Plater::set_pending_published(const std::vector& published_key p->m_pending_material_keys = material_keys; } -Preset* get_printer_preset(const MachineObject* obj) +Preset *get_printer_preset(const MachineObject *obj) { if (!obj) return nullptr; - Preset* printer_preset = nullptr; + Preset *printer_preset = nullptr; - PresetBundle* preset_bundle = wxGetApp().preset_bundle; + PresetBundle *preset_bundle = wxGetApp().preset_bundle; for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { // only use system printer preset if (!printer_it->is_system) continue; - ConfigOption* printer_nozzle_opt = printer_it->config.option("nozzle_diameter"); - ConfigOptionFloats* printer_nozzle_vals = nullptr; - if (printer_nozzle_opt) - printer_nozzle_vals = dynamic_cast(printer_nozzle_opt); + ConfigOption *printer_nozzle_opt = printer_it->config.option("nozzle_diameter"); + ConfigOptionFloats *printer_nozzle_vals = nullptr; + if (printer_nozzle_opt) printer_nozzle_vals = dynamic_cast(printer_nozzle_opt); std::string model_id = printer_it->get_current_printer_type(preset_bundle); - std::string printer_type = obj->get_show_printer_type(); - bool nozzle_diameter_matches_or_unknown = printer_nozzle_vals && - obj->GetExtderSystem()->NozzleDiameterMatchesOrUnknown(0, printer_nozzle_vals->get_at(0)); + std::string printer_type = obj->get_show_printer_type(); + bool nozzle_diameter_matches_or_unknown = printer_nozzle_vals && obj->GetExtderSystem()->NozzleDiameterMatchesOrUnknown(0, printer_nozzle_vals->get_at(0)); if (model_id.compare(printer_type) == 0 && nozzle_diameter_matches_or_unknown) { printer_preset = &(*printer_it); } @@ -18430,7 +18399,7 @@ Preset* get_printer_preset(const MachineObject* obj) return printer_preset; } -bool Plater::check_printer_initialized(MachineObject* obj, bool only_warning, bool popup_warning) +bool Plater::check_printer_initialized(MachineObject *obj, bool only_warning, bool popup_warning) { if (!obj) return false; @@ -18439,6 +18408,7 @@ bool Plater::check_printer_initialized(MachineObject* obj, bool only_warning, bo const auto& extruders = obj->GetExtderSystem()->GetExtruders(); for (const DevExtder& extruder : extruders) { + // Skip check if nozzle type is unknown if (extruder.GetNozzleType() == NozzleType::ntUndefine) { continue; @@ -18454,16 +18424,14 @@ bool Plater::check_printer_initialized(MachineObject* obj, bool only_warning, bo if (popup_warning) { if (!only_warning) { if (DevPrinterConfigUtil::get_printer_can_set_nozzle(obj->get_show_printer_type())) { - MessageDialog dlg(wxGetApp().plater(), _L("The nozzle type is not set. Please set the nozzle and try again."), - _L("Warning"), wxOK | wxICON_WARNING); + MessageDialog dlg(wxGetApp().plater(), _L("The nozzle type is not set. Please set the nozzle and try again."), _L("Warning"), wxOK | wxICON_WARNING); dlg.ShowModal(); } else { - MessageDialog dlg(wxGetApp().plater(), _L("The nozzle type is not set. Please check."), _L("Warning"), - wxOK | wxICON_WARNING); + MessageDialog dlg(wxGetApp().plater(), _L("The nozzle type is not set. Please check."), _L("Warning"), wxOK | wxICON_WARNING); dlg.ShowModal(); } - PrinterPartsDialog* print_parts_dlg = new PrinterPartsDialog(nullptr); + PrinterPartsDialog *print_parts_dlg = new PrinterPartsDialog(nullptr); print_parts_dlg->update_machine_obj(obj); print_parts_dlg->ShowModal(); } else { @@ -18484,25 +18452,26 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st std::vector csgmesh; csgmesh.reserve(2 * mo.volumes.size()); bool has_splitable_volume = csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), - csg::mpartsPositive | csg::mpartsNegative); - + csg::mpartsPositive | csg::mpartsNegative); + std::string fail_msg = _u8L("Unable to perform boolean operation on model meshes. " - "Only positive parts will be kept. You may fix the meshes and try again."); - if (auto fail_reason_name = csg::check_csgmesh_booleans(Range{std::begin(csgmesh), std::end(csgmesh)}); - std::get<0>(fail_reason_name) != csg::BooleanFailReason::OK) { + "Only positive parts will be kept. You may fix the meshes and try again."); + if (auto fail_reason_name = csg::check_csgmesh_booleans(Range{ std::begin(csgmesh), std::end(csgmesh) }); std::get<0>(fail_reason_name) != csg::BooleanFailReason::OK) { std::string name = std::get<1>(fail_reason_name); - std::map fail_reasons = - {{csg::BooleanFailReason::OK, "OK"}, - {csg::BooleanFailReason::MeshEmpty, Slic3r::format(_u8L("Reason: part \"%1%\" is empty."), name)}, - {csg::BooleanFailReason::NotBoundAVolume, Slic3r::format(_u8L("Reason: part \"%1%\" does not bound a volume."), name)}, - {csg::BooleanFailReason::SelfIntersect, Slic3r::format(_u8L("Reason: part \"%1%\" has self intersection."), name)}, - {csg::BooleanFailReason::NoIntersection, Slic3r::format(_u8L("Reason: \"%1%\" and another part have no intersection."), name)}}; + std::map fail_reasons = { + {csg::BooleanFailReason::OK, "OK"}, + {csg::BooleanFailReason::MeshEmpty, Slic3r::format( _u8L("Reason: part \"%1%\" is empty."), name)}, + {csg::BooleanFailReason::NotBoundAVolume, Slic3r::format(_u8L("Reason: part \"%1%\" does not bound a volume."), name)}, + {csg::BooleanFailReason::SelfIntersect, Slic3r::format(_u8L("Reason: part \"%1%\" has self intersection."), name)}, + {csg::BooleanFailReason::NoIntersection, Slic3r::format(_u8L("Reason: \"%1%\" and another part have no intersection."), name)} }; fail_msg += " " + fail_reasons[std::get<0>(fail_reason_name)]; - } else { + } + else { try { - MeshBoolean::mcut::McutMeshPtr meshPtr = csg::perform_csgmesh_booleans_mcut(Range{std::begin(csgmesh), std::end(csgmesh)}); - mesh = MeshBoolean::mcut::mcut_to_triangle_mesh(*meshPtr); - } catch (...) {} + MeshBoolean::mcut::McutMeshPtr meshPtr = csg::perform_csgmesh_booleans_mcut(Range{ std::begin(csgmesh), std::end(csgmesh) }); + mesh = MeshBoolean::mcut::mcut_to_triangle_mesh(*meshPtr); + } + catch (...) {} #if 0 // if mcut fails, try again with CGAL if (mesh.empty()) { @@ -18535,7 +18504,8 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st m.transform(i->get_matrix(), true); mesh.merge(m); } - } else if (0 <= instance_id && instance_id < int(mo.instances.size())) + } + else if (0 <= instance_id && instance_id < int(mo.instances.size())) mesh.transform(mo.instances[instance_id]->get_matrix(), true); return mesh; } @@ -18544,9 +18514,7 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st #define EXPORT_WITH_BOOLEAN 0 void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, FileType file_type) { - if (p->model.objects.empty()) { - return; - } + if (p->model.objects.empty()) { return; } int quality = 0; @@ -18570,35 +18538,31 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil } else { path = p->get_export_file(file_type); } - if (path.empty()) { - return; - } + if (path.empty()) { return; } const std::string path_u8 = into_u8(path); wxBusyCursor wait; const auto& selection = p->get_selection(); - const auto obj_idx = selection.get_object_idx(); + const auto obj_idx = selection.get_object_idx(); #if EXPORT_WITH_BOOLEAN if (selection_only && (obj_idx == -1 || selection.is_wipe_tower())) return; #else // BBS support selecting multiple objects - if (selection_only && selection.is_wipe_tower()) - return; + if (selection_only && selection.is_wipe_tower()) return; // BBS if (selection_only) { // only support selection single full object and mulitiple full object - if (!selection.is_single_full_object() && !selection.is_multiple_full_object()) - return; + if (!selection.is_single_full_object() && !selection.is_multiple_full_object()) return; } // Following lambda generates a combined mesh for export with normals pointing outwards. - auto mesh_to_export_fff_no_boolean = [this](const ModelObject& mo, int instance_id) { + auto mesh_to_export_fff_no_boolean = [this](const ModelObject &mo, int instance_id) { TriangleMesh mesh; - // Prusa export negative parts + //Prusa export negative parts std::vector csgmesh; csgmesh.reserve(2 * mo.volumes.size()); csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), @@ -18610,13 +18574,14 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil } else if (std::get<2>(csg::check_csgmesh_booleans(csgrange)) == csgrange.end()) { try { auto cgalm = csg::perform_csgmesh_booleans(csgrange); - mesh = MeshBoolean::cgal::cgal_to_triangle_mesh(*cgalm); + mesh = MeshBoolean::cgal::cgal_to_triangle_mesh(*cgalm); } catch (...) {} } if (mesh.empty()) { - get_notification_manager()->push_plater_error_notification(_u8L("Unable to perform boolean operation on model meshes. " - "Only positive parts will be exported.")); + get_notification_manager()->push_plater_error_notification( + _u8L("Unable to perform boolean operation on model meshes. " + "Only positive parts will be exported.")); for (const ModelVolume* v : mo.volumes) if (v->is_model_part()) { @@ -18628,7 +18593,7 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil if (instance_id == -1) { TriangleMesh vols_mesh(mesh); mesh = TriangleMesh(); - for (const ModelInstance* i : mo.instances) { + for (const ModelInstance *i : mo.instances) { TriangleMesh m = vols_mesh; m.transform(i->get_matrix(), true); mesh.merge(m); @@ -18641,17 +18606,15 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil auto mesh_to_export_sla = [&, this](const ModelObject& mo, int instance_id) { TriangleMesh mesh; - const SLAPrintObject* object = this->p->sla_print.get_print_object_by_model_object_id(mo.id()); + const SLAPrintObject *object = this->p->sla_print.get_print_object_by_model_object_id(mo.id()); if (auto m = object->get_mesh_to_print(); m.empty()) - mesh = combine_mesh_fff(mo, instance_id, [this](const std::string& msg) { - return get_notification_manager()->push_general_error_notification(msg); - }); + mesh = combine_mesh_fff(mo, instance_id, [this](const std::string& msg) {return get_notification_manager()->push_general_error_notification(msg); }); else { const Transform3d mesh_trafo_inv = object->trafo().inverse(); - const bool is_left_handed = object->is_left_handed(); + const bool is_left_handed = object->is_left_handed(); - auto pad_mesh = extended ? object->pad_mesh() : TriangleMesh{}; + auto pad_mesh = extended? object->pad_mesh() : TriangleMesh{}; pad_mesh.transform(mesh_trafo_inv); auto supports_mesh = extended ? object->support_mesh() : TriangleMesh{}; @@ -18660,16 +18623,16 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil const std::vector& obj_instances = object->instances(); for (const SLAPrintObject::Instance& obj_instance : obj_instances) { auto it = std::find_if(object->model_object()->instances.begin(), object->model_object()->instances.end(), - [&obj_instance](const ModelInstance* mi) { return mi->id() == obj_instance.instance_id; }); + [&obj_instance](const ModelInstance *mi) { return mi->id() == obj_instance.instance_id; }); assert(it != object->model_object()->instances.end()); if (it != object->model_object()->instances.end()) { - const bool one_inst_only = selection_only && !selection.is_single_full_object(); + const bool one_inst_only = selection_only && ! selection.is_single_full_object(); const int instance_idx = it - object->model_object()->instances.begin(); - const Transform3d& inst_transform = - one_inst_only ? Transform3d::Identity() : - object->model_object()->instances[instance_idx]->get_transformation().get_matrix(); + const Transform3d& inst_transform = one_inst_only + ? Transform3d::Identity() + : object->model_object()->instances[instance_idx]->get_transformation().get_matrix(); TriangleMesh inst_mesh; @@ -18692,10 +18655,10 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil inst_mesh.merge(inst_object_mesh); - // ensure that the instance lays on the bed + // ensure that the instance lays on the bed inst_mesh.translate(0.0f, 0.0f, -inst_mesh.bounding_box().min.z()); - // merge instance with global mesh + // merge instance with global mesh mesh.merge(inst_mesh); if (one_inst_only) @@ -18707,22 +18670,20 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil return mesh; }; - std::function mesh_to_export; + std::function + mesh_to_export; if (p->printer_technology == ptFFF) #if EXPORT_WITH_BOOLEAN - mesh_to_export = [this](const ModelObject& mo, int instance_id) { - return Plater::combine_mesh_fff(mo, instance_id, [this](const std::string& msg) { - return get_notification_manager()->push_general_error_notification(msg); - }); - }; + mesh_to_export = [this](const ModelObject& mo, int instance_id) {return Plater::combine_mesh_fff(mo, instance_id, + [this](const std::string& msg) {return get_notification_manager()->push_general_error_notification(msg); }); }; #else mesh_to_export = mesh_to_export_fff_no_boolean; #endif else mesh_to_export = mesh_to_export_sla; - auto get_save_file = [file_type](std::string const& dir, std::string const& name) { + auto get_save_file = [file_type](std::string const & dir, std::string const & name) { std::string ext = ""; switch (file_type) { case FT_STL: ext = ".stl"; break; @@ -18730,38 +18691,39 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil } auto path = dir + name + ext; - int n = 1; + int n = 1; while (boost::filesystem::exists(path)) - path = dir + name + "(" + std::to_string(n++) + ")" + ext; + path = dir + name + "(" + std::to_string(n++) + ")"+ext; return path; }; TriangleMesh mesh; if (selection_only) { if (selection.is_single_full_object()) { - const auto obj_idx = selection.get_object_idx(); + const auto obj_idx = selection.get_object_idx(); const ModelObject* model_object = p->model.objects[obj_idx]; if (selection.get_mode() == Selection::Instance) mesh = mesh_to_export(*model_object, (model_object->instances.size() > 1) ? -1 : selection.get_instance_idx()); else { const GLVolume* volume = selection.get_first_volume(); - mesh = model_object->volumes[volume->volume_idx()]->mesh(); + mesh = model_object->volumes[volume->volume_idx()]->mesh(); mesh.transform(volume->get_volume_transformation().get_matrix(), true); } - if (model_object->instances.size() == 1) - mesh.translate(-model_object->origin_translation.cast()); - } else if (selection.is_multiple_full_object() && !multi_stls) { + if (model_object->instances.size() == 1) mesh.translate(-model_object->origin_translation.cast()); + } + else if (selection.is_multiple_full_object() && !multi_stls) { const std::set>& instances_idxs = p->get_selection().get_selected_object_instances(); for (const std::pair& i : instances_idxs) { ModelObject* object = p->model.objects[i.first]; mesh.merge(mesh_to_export(*object, i.second)); } - } else if (selection.is_multiple_full_object() && multi_stls) { - const std::set>& instances_idxs = p->get_selection().get_selected_object_instances(); - for (const std::pair& i : instances_idxs) { - ModelObject* object = p->model.objects[i.first]; - auto mesh = mesh_to_export(*object, i.second); + } + else if (selection.is_multiple_full_object() && multi_stls) { + const std::set> &instances_idxs = p->get_selection().get_selected_object_instances(); + for (const std::pair &i : instances_idxs) { + ModelObject *object = p->model.objects[i.first]; + auto mesh = mesh_to_export(*object, i.second); mesh.translate(-object->origin_translation.cast()); switch (file_type) { @@ -18771,7 +18733,8 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil } return; } - } else if (!multi_stls) { + } + else if (!multi_stls) { for (const ModelObject* o : p->model.objects) { mesh.merge(mesh_to_export(*o, -1)); } @@ -18794,7 +18757,7 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil } } -// BBS: remove amf export +//BBS: remove amf export /*void Plater::export_amf() { if (p->model.objects.empty()) { return; } @@ -18815,7 +18778,7 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls, Fil }*/ namespace { -std::string get_file_name(const std::string& file_path) +std::string get_file_name(const std::string &file_path) { size_t pos_last_delimiter = file_path.find_last_of("/\\"); size_t pos_point = file_path.find_last_of('.'); @@ -18823,33 +18786,33 @@ std::string get_file_name(const std::string& file_path) size_t count = pos_point - pos_last_delimiter - 1; return file_path.substr(offset, count); } -using SvgFile = EmbossShape::SvgFile; +using SvgFile = EmbossShape::SvgFile; using SvgFiles = std::vector; -std::string create_unique_3mf_filepath(const std::string& file, const SvgFiles svgs) +std::string create_unique_3mf_filepath(const std::string &file, const SvgFiles svgs) { // const std::string MODEL_FOLDER = "3D/"; // copy from file 3mf.cpp std::string path_in_3mf = "3D/" + file + ".svg"; - size_t suffix_number = 0; - bool is_unique = false; - do { - is_unique = true; - path_in_3mf = "3D/" + file + ((suffix_number++) ? ("_" + std::to_string(suffix_number)) : "") + ".svg"; - for (SvgFile* svgfile : svgs) { + size_t suffix_number = 0; + bool is_unique = false; + do{ + is_unique = true; + path_in_3mf = "3D/" + file + ((suffix_number++)? ("_" + std::to_string(suffix_number)) : "") + ".svg"; + for (SvgFile *svgfile : svgs) { if (svgfile->path_in_3mf.empty()) continue; if (svgfile->path_in_3mf.compare(path_in_3mf) == 0) { is_unique = false; break; } - } + } } while (!is_unique); return path_in_3mf; } -bool set_by_local_path(SvgFile& svg, const SvgFiles& svgs) +bool set_by_local_path(SvgFile &svg, const SvgFiles& svgs) { // Try to find already used svg file - for (SvgFile* svg_ : svgs) { + for (SvgFile *svg_ : svgs) { if (svg_->path_in_3mf.empty()) continue; if (svg.path.compare(svg_->path) == 0) { @@ -18864,13 +18827,13 @@ bool set_by_local_path(SvgFile& svg, const SvgFiles& svgs) /// Function to secure private data before store to 3mf /// /// Data(also private) to clean before publishing -void publish(Model& model, SaveStrategy strategy) -{ +void publish(Model &model, SaveStrategy strategy) { + // SVG file publishing bool exist_new = false; SvgFiles svgfiles; - for (ModelObject* object : model.objects) { - for (ModelVolume* volume : object->volumes) { + for (ModelObject *object: model.objects){ + for (ModelVolume *volume : object->volumes) { if (!volume->emboss_shape.has_value()) continue; if (volume->text_configuration.has_value()) @@ -18887,7 +18850,7 @@ void publish(Model& model, SaveStrategy strategy) } } - for (SvgFile* svgfile : svgfiles) { + for (SvgFile *svgfile : svgfiles) { if (!svgfile->path_in_3mf.empty()) continue; // already suggested path (previous save) @@ -18899,26 +18862,26 @@ void publish(Model& model, SaveStrategy strategy) // check whether original filename is already in: filename = get_file_name(svgfile->path); } - svgfile->path_in_3mf = create_unique_3mf_filepath(filename, svgfiles); + svgfile->path_in_3mf = create_unique_3mf_filepath(filename, svgfiles); } } -} // namespace +} // BBS: backup int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy strategy, int export_plate_idx, Export3mfProgressFn proFn) { int ret = 0; - // if (p->model.objects.empty()) { - // MessageDialog dialog(nullptr, _L("No objects to export."), _L("Save project"), wxYES); - // if (dialog.ShowModal() == wxYES) - // return -1; - // } + //if (p->model.objects.empty()) { + // MessageDialog dialog(nullptr, _L("No objects to export."), _L("Save project"), wxYES); + // if (dialog.ShowModal() == wxYES) + // return -1; + //} if (output_path.empty()) return -1; bool export_config = true; - wxString path = from_path(output_path); + wxString path = from_path(output_path); if (!path.Lower().EndsWith(".3mf")) return -1; @@ -18927,19 +18890,17 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy // modify model publish(p->model, strategy); - DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config_secure(); const std::string path_u8 = into_u8(path); wxBusyCursor wait; - BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ - << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%") % output_path.string() % - (strategy & SaveStrategy::Backup) % export_plate_idx % (unsigned int) strategy; + BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%") + %output_path.string()%(strategy & SaveStrategy::Backup)%export_plate_idx %(unsigned int)strategy; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%") % std::string("") % - (strategy & SaveStrategy::Backup) % export_plate_idx % (unsigned int) strategy; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%") + % std::string("") % (strategy & SaveStrategy::Backup) % export_plate_idx % (unsigned int)strategy; - // BBS: add plate logic for thumbnail generate + //BBS: add plate logic for thumbnail generate std::vector thumbnails; std::vector no_light_thumbnails; std::vector calibration_thumbnails; @@ -18950,113 +18911,106 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy if (!(strategy & SaveStrategy::Backup)) { for (int i = 0; i < p->partplate_list.get_plate_count(); i++) { ThumbnailData* thumbnail_data = &p->partplate_list.get_plate(i)->thumbnail_data; - if (p->partplate_list.get_plate(i)->thumbnail_data.is_valid() && using_exported_file()) { - // no need to generate thumbnail - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": non need to re-generate thumbnail for gcode/exported mode of plate %1%") % i; - } else { + if (p->partplate_list.get_plate(i)->thumbnail_data.is_valid() && using_exported_file()) { + //no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate thumbnail for gcode/exported mode of plate %1%")%i; + } + else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate thumbnail for plate %1%") % i; - const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; + const ThumbnailsParams thumbnail_params = { {}, false, true, true, true, i }; p->generate_thumbnail(p->partplate_list.get_plate(i)->thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, - thumbnail_params, Camera::EType::Ortho); + thumbnail_params, Camera::EType::Ortho); } thumbnails.push_back(thumbnail_data); - ThumbnailData* no_light_thumbnail_data = &p->partplate_list.get_plate(i)->no_light_thumbnail_data; + ThumbnailData *no_light_thumbnail_data = &p->partplate_list.get_plate(i)->no_light_thumbnail_data; if (p->partplate_list.get_plate(i)->no_light_thumbnail_data.is_valid() && using_exported_file()) { // no need to generate thumbnail - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": non need to re-generate thumbnail for gcode/exported mode of plate %1%") % i; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate thumbnail for gcode/exported mode of plate %1%") % i; } else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate thumbnail for plate %1%") % i; const ThumbnailsParams thumbnail_params = {{}, false, true, true, true, i}; - p->generate_thumbnail(p->partplate_list.get_plate(i)->no_light_thumbnail_data, THUMBNAIL_SIZE_3MF.first, - THUMBNAIL_SIZE_3MF.second, thumbnail_params, Camera::EType::Ortho, Camera::ViewAngleType::Iso, false, - true); + p->generate_thumbnail(p->partplate_list.get_plate(i)->no_light_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, thumbnail_params, + Camera::EType::Ortho, Camera::ViewAngleType::Iso, false, true); } no_light_thumbnails.push_back(no_light_thumbnail_data); - // ThumbnailData* calibration_data = &p->partplate_list.get_plate(i)->cali_thumbnail_data; - // calibration_thumbnails.push_back(calibration_data); + //ThumbnailData* calibration_data = &p->partplate_list.get_plate(i)->cali_thumbnail_data; + //calibration_thumbnails.push_back(calibration_data); PlateBBoxData* plate_bbox_data = &p->partplate_list.get_plate(i)->cali_bboxes_data; plate_bboxes.push_back(plate_bbox_data); - // generate top and picking thumbnails + //generate top and picking thumbnails ThumbnailData* top_thumbnail = &p->partplate_list.get_plate(i)->top_thumbnail_data; - if (top_thumbnail->is_valid() && using_exported_file()) { - // no need to generate thumbnail - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": non need to re-generate top_thumbnail for gcode/exported mode of plate %1%") % - i; - } else { + if (top_thumbnail->is_valid() && using_exported_file()) { + //no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate top_thumbnail for gcode/exported mode of plate %1%")%i; + } + else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate top_thumbnail for plate %1%") % i; - const ThumbnailsParams thumbnail_params = {{}, false, true, false, true, i}; - p->generate_thumbnail(p->partplate_list.get_plate(i)->top_thumbnail_data, THUMBNAIL_SIZE_3MF.first, - THUMBNAIL_SIZE_3MF.second, thumbnail_params, Camera::EType::Ortho, Camera::ViewAngleType::Top_Plate, - false); + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + p->generate_thumbnail(p->partplate_list.get_plate(i)->top_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, thumbnail_params, + Camera::EType::Ortho, Camera::ViewAngleType::Top_Plate, false); } top_thumbnails.push_back(top_thumbnail); ThumbnailData* picking_thumbnail = &p->partplate_list.get_plate(i)->pick_thumbnail_data; - if (picking_thumbnail->is_valid() && using_exported_file()) { - // no need to generate thumbnail - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": non need to re-generate pick_thumbnail for gcode/exported mode of plate %1%") % - i; - } else { + if (picking_thumbnail->is_valid() && using_exported_file()) { + //no need to generate thumbnail + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": non need to re-generate pick_thumbnail for gcode/exported mode of plate %1%")%i; + } + else { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": re-generate pick_thumbnail for plate %1%") % i; - const ThumbnailsParams thumbnail_params = {{}, false, true, false, true, i}; - p->generate_thumbnail(p->partplate_list.get_plate(i)->pick_thumbnail_data, THUMBNAIL_SIZE_3MF.first, - THUMBNAIL_SIZE_3MF.second, thumbnail_params, Camera::EType::Ortho, Camera::ViewAngleType::Top_Plate, - true, true); + const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; + p->generate_thumbnail(p->partplate_list.get_plate(i)->pick_thumbnail_data, THUMBNAIL_SIZE_3MF.first, THUMBNAIL_SIZE_3MF.second, thumbnail_params, + Camera::EType::Ortho, Camera::ViewAngleType::Top_Plate, true,true); } picking_thumbnails.push_back(picking_thumbnail); } if (p->partplate_list.get_curr_plate()->is_slice_result_valid()) { - // BBS generate BBS calibration thumbnails + //BBS generate BBS calibration thumbnails int index = p->partplate_list.get_curr_plate_index(); - // ThumbnailData* calibration_data = calibration_thumbnails[index]; - // const ThumbnailsParams calibration_params = { {}, false, true, true, true, p->partplate_list.get_curr_plate_index() }; - // p->generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, - // calibration_params); + //ThumbnailData* calibration_data = calibration_thumbnails[index]; + //const ThumbnailsParams calibration_params = { {}, false, true, true, true, p->partplate_list.get_curr_plate_index() }; + //p->generate_calibration_thumbnail(*calibration_data, PartPlate::cali_thumbnail_width, PartPlate::cali_thumbnail_height, calibration_params); if (using_exported_file()) { - // do nothing - } else + //do nothing + } + else *plate_bboxes[index] = p->generate_first_layer_bbox(); } } - // BBS: add bbs 3mf logic + //BBS: add bbs 3mf logic PlateDataPtrs plate_data_list; - p->partplate_list.store_to_3mf_structure(plate_data_list, - (strategy & SaveStrategy::WithGcode || strategy & SaveStrategy::WithSliceInfo), - export_plate_idx); + p->partplate_list.store_to_3mf_structure(plate_data_list, (strategy & SaveStrategy::WithGcode || strategy & SaveStrategy::WithSliceInfo), export_plate_idx); // BBS: backup - PresetBundle& preset_bundle = *wxGetApp().preset_bundle; + PresetBundle& preset_bundle = *wxGetApp().preset_bundle; std::vector project_presets = preset_bundle.get_current_project_embedded_presets(); StoreParams store_params; - store_params.path = path_u8; - store_params.model = &p->model; - store_params.plate_data_list = plate_data_list; - store_params.export_plate_idx = export_plate_idx; - store_params.project_presets = project_presets; - store_params.config = export_config ? &cfg : nullptr; - store_params.thumbnail_data = thumbnails; - store_params.no_light_thumbnail_data = no_light_thumbnails; - store_params.top_thumbnail_data = top_thumbnails; - store_params.pick_thumbnail_data = picking_thumbnails; + store_params.path = path_u8; + store_params.model = &p->model; + store_params.plate_data_list = plate_data_list; + store_params.export_plate_idx = export_plate_idx; + store_params.project_presets = project_presets; + store_params.config = export_config ? &cfg : nullptr; + store_params.thumbnail_data = thumbnails; + store_params.no_light_thumbnail_data = no_light_thumbnails; + store_params.top_thumbnail_data = top_thumbnails; + store_params.pick_thumbnail_data = picking_thumbnails; store_params.calibration_thumbnail_data = calibration_thumbnails; - store_params.proFn = proFn; - store_params.id_bboxes = plate_bboxes; // BBS - store_params.project = &p->project; - store_params.strategy = strategy | SaveStrategy::Zip64; + store_params.proFn = proFn; + store_params.id_bboxes = plate_bboxes;//BBS + store_params.project = &p->project; + store_params.strategy = strategy | SaveStrategy::Zip64; + // get type and color for platedata - auto* filament_color = dynamic_cast(cfg.option("filament_colour")); + auto* filament_color = dynamic_cast(cfg.option("filament_colour")); auto* nozzle_diameter_option = dynamic_cast(cfg.option("nozzle_diameter")); - auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); + auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); std::string nozzle_diameter_str; if (nozzle_diameter_option) nozzle_diameter_str = nozzle_diameter_option->serialize(); @@ -19064,14 +19018,14 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy std::string printer_model_id = preset_bundle.printers.get_edited_preset().get_printer_type(&preset_bundle); for (int i = 0; i < plate_data_list.size(); i++) { - PlateData* plate_data = plate_data_list[i]; + PlateData *plate_data = plate_data_list[i]; plate_data->printer_model_id = printer_model_id; plate_data->nozzle_diameters = nozzle_diameter_str; for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { std::string display_filament_type; - it->type = cfg.get_filament_type(display_filament_type, it->id); + it->type = cfg.get_filament_type(display_filament_type, it->id); it->filament_id = filament_id_opt ? filament_id_opt->get_at(it->id) : ""; - it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; + it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); if (store_params.id_bboxes.size() > index) { @@ -19095,11 +19049,11 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy if (p->model.design_info == nullptr) { // set designInfo before export and reset after export if (wxGetApp().is_user_login()) { - p->model.design_info = std::make_shared(); - // p->model.design_info->Designer = wxGetApp().getAgent()->get_user_nickname(); + p->model.design_info = std::make_shared(); + //p->model.design_info->Designer = wxGetApp().getAgent()->get_user_nickname(); p->model.design_info->Designer = ""; p->model.design_info->DesignerUserId = wxGetApp().getAgent()->get_user_id(); - BOOST_LOG_TRIVIAL(trace) << "design_info prepare, designer = " << ""; + BOOST_LOG_TRIVIAL(trace) << "design_info prepare, designer = "<< ""; BOOST_LOG_TRIVIAL(trace) << "design_info prepare, designer_user_id = " << p->model.design_info->DesignerUserId; } } @@ -19116,12 +19070,15 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy p->set_project_filename(path); BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << path; } - } else { + } + else { ret = -1; } - if (project_presets.size() > 0) { - for (unsigned int i = 0; i < project_presets.size(); i++) { + if (project_presets.size() > 0) + { + for (unsigned int i = 0; i < project_presets.size(); i++) + { delete project_presets[i]; } project_presets.clear(); @@ -19129,40 +19086,61 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy release_PlateData_list(plate_data_list); - for (unsigned int i = 0; i < calibration_thumbnails.size(); i++) { - // release the data here, as it will always be generated when export + for (unsigned int i = 0; i < calibration_thumbnails.size(); i++) + { + //release the data here, as it will always be generated when export calibration_thumbnails[i]->reset(); } for (unsigned int i = 0; i < no_light_thumbnails.size(); i++) { // release the data here, as it will always be generated when export no_light_thumbnails[i]->reset(); } - for (unsigned int i = 0; i < top_thumbnails.size(); i++) { - // release the data here, as it will always be generated when export + for (unsigned int i = 0; i < top_thumbnails.size(); i++) + { + //release the data here, as it will always be generated when export top_thumbnails[i]->reset(); } top_thumbnails.clear(); - for (unsigned int i = 0; i < picking_thumbnails.size(); i++) { - // release the data here, as it will always be generated when export - picking_thumbnails[i]->reset(); - ; + for (unsigned int i = 0; i < picking_thumbnails.size(); i++) + { + //release the data here, as it will always be generated when export + picking_thumbnails[i]->reset();; } picking_thumbnails.clear(); return ret; } -void Plater::publish_project() { return; } +void Plater::publish_project() +{ + return; +} -void Plater::reload_from_disk() { p->reload_from_disk(); } -void Plater::replace_with_stl() { p->replace_with_stl(); } +void Plater::reload_from_disk() +{ + p->reload_from_disk(); +} -void Plater::replace_all_with_stl() { p->replace_all_with_stl(); } +void Plater::replace_with_stl() +{ + p->replace_with_stl(); +} -void Plater::reload_all_from_disk() { p->reload_all_from_disk(); } +void Plater::replace_all_with_stl() +{ + p->replace_all_with_stl(); +} -bool Plater::has_toolpaths_to_export() const { return p->preview->get_canvas3d()->has_toolpaths_to_export(); } +void Plater::reload_all_from_disk() +{ + p->reload_all_from_disk(); +} + +bool Plater::has_toolpaths_to_export() const +{ + return p->preview->get_canvas3d()->has_toolpaths_to_export(); +} void Plater::export_toolpaths_to_obj() const { @@ -19177,11 +19155,13 @@ void Plater::export_toolpaths_to_obj() const p->preview->get_canvas3d()->export_toolpaths_to_obj(into_u8(path).c_str()); } -bool Plater::is_empty_project() { return model().objects.empty(); } +bool Plater::is_empty_project() { + return model().objects.empty(); +} bool Plater::is_multi_extruder_ams_empty() { - std::vector extruder_ams_count_str = p->config->option("extruder_ams_count", true)->values; - std::vector> extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str); + std::vector extruder_ams_count_str = p->config->option("extruder_ams_count", true)->values; + std::vector> extruder_ams_counts = get_extruder_ams_count(extruder_ams_count_str); for (auto extruder_ams_count : extruder_ams_counts) { for (auto iter = extruder_ams_count.begin(); iter != extruder_ams_count.end(); ++iter) { if (iter->second != 0) @@ -19191,14 +19171,13 @@ bool Plater::is_multi_extruder_ams_empty() return true; } -// BBS: add multiple plate reslice logic +//BBS: add multiple plate reslice logic void Plater::reslice() { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(", Line %1%: enter, process_completed_with_error=%2%") % __LINE__ % - p->process_completed_with_error; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: enter, process_completed_with_error=%2%")%__LINE__ %p->process_completed_with_error; // There is "invalid data" button instead "slice now" - if (p->process_completed_with_error == p->partplate_list.get_curr_plate_index()) { + if (p->process_completed_with_error == p->partplate_list.get_curr_plate_index()) + { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": process_completed_with_error, return directly"); reset_gcode_toolpaths(); return; @@ -19234,7 +19213,8 @@ void Plater::reslice() // get stopped. unsigned timeout_ms = 10000; if (!stop_queue(this->get_ui_job_worker(), timeout_ms)) { - BOOST_LOG_TRIVIAL(error) << "Could not stop UI job within " << timeout_ms << " milliseconds timeout!"; + BOOST_LOG_TRIVIAL(error) << "Could not stop UI job within " + << timeout_ms << " milliseconds timeout!"; return; } @@ -19249,33 +19229,32 @@ void Plater::reslice() object->sla_points_status = sla::PointsStatus::Generating; } - // FIXME Don't reslice if export of G-code or sending to OctoPrint is running. - // bitmask of UpdateBackgroundProcessReturnState + //FIXME Don't reslice if export of G-code or sending to OctoPrint is running. + // bitmask of UpdateBackgroundProcessReturnState unsigned int state = this->p->update_background_process(true); if (state & priv::UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE) this->p->view3D->reload_scene(false); // If the SLA processing of just a single object's supports is running, restart slicing for the whole object. this->p->background_process.set_task(PrintBase::TaskParams()); // Only restarts if the state is valid. - // BBS: jusdge the result + //BBS: jusdge the result bool result = this->p->restart_background_process(state | priv::UPDATE_BACKGROUND_PROCESS_FORCE_RESTART); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(", Line %1%: restart background,state=%2%, result=%3%") % __LINE__ % state % result; - if ((state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) != 0) { - // BBS: add logs - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(": state %1% is UPDATE_BACKGROUND_PROCESS_INVALID, can not slice") % state; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: restart background,state=%2%, result=%3%")%__LINE__%state %result; + if ((state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) != 0) + { + //BBS: add logs + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": state %1% is UPDATE_BACKGROUND_PROCESS_INVALID, can not slice") % state; p->update_fff_scene_only_shells(); return; } - if ((!result) && p->m_slice_all && (p->m_cur_slice_plate < (p->partplate_list.get_plate_count() - 1))) { - // slice next - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ - << boost::format(": in slicing all, current plate %1% already sliced, skip to next") % - p->m_cur_slice_plate; - SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, SlicingProcessCompletedEvent::Finished, nullptr); + if ((!result) && p->m_slice_all && (p->m_cur_slice_plate < (p->partplate_list.get_plate_count() - 1))) + { + //slice next + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": in slicing all, current plate %1% already sliced, skip to next") % p->m_cur_slice_plate ; + SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, + SlicingProcessCompletedEvent::Finished, nullptr); // Post the "complete" callback message, so that it will slice the next plate soon wxQueueEvent(this, evt.Clone()); p->m_is_slicing = true; @@ -19290,31 +19269,32 @@ void Plater::reslice() bool clean_gcode_toolpaths = true; // BBS - if (p->background_process.running()) { - // p->ready_to_slice = false; + if (p->background_process.running()) + { + //p->ready_to_slice = false; p->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": background process is running, m_is_slicing is true"); - } else if (!p->background_process.empty() && !p->background_process.idle()) { - // p->show_action_buttons(true); - // p->ready_to_slice = true; + } + else if (!p->background_process.empty() && !p->background_process.idle()) { + //p->show_action_buttons(true); + //p->ready_to_slice = true; p->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, true); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": background process changes to not_idle, set ready_to_slice back to true"); - } else { - // BBS: add reset logic for empty plate - PartPlate* current_plate = p->background_process.get_current_plate(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": background process changes to not_idle, set ready_to_slice back to true"); + } + else { + //BBS: add reset logic for empty plate + PartPlate * current_plate = p->background_process.get_current_plate(); if (!current_plate->has_printable_instances()) { clean_gcode_toolpaths = true; current_plate->update_slice_result_valid_state(false); - } else { + } + else { clean_gcode_toolpaths = false; current_plate->update_slice_result_valid_state(true); } p->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": background process in idle state, use previous result, clean_gcode_toolpaths=%1%") % - clean_gcode_toolpaths; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": background process in idle state, use previous result, clean_gcode_toolpaths=%1%")%clean_gcode_toolpaths; } if (clean_gcode_toolpaths) @@ -19322,8 +19302,7 @@ void Plater::reslice() p->preview->reload_print(); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": finished, started slicing for plate %1%") % p->partplate_list.get_curr_plate_index(); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": finished, started slicing for plate %1%") % p->partplate_list.get_curr_plate_index(); record_slice_preset("slicing"); } @@ -19331,12 +19310,14 @@ void Plater::reslice() void Plater::record_slice_preset(std::string action) { // record slice preset - try { + try + { json j; auto printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset_with_vendor_profile().preset; if (printer_preset.is_system) { j["printer_preset_name"] = printer_preset.name; - } else { + } + else { j["printer_preset_name"] = printer_preset.config.opt_string("inherits"); } const t_config_enum_values* keys_map = print_config_def.get("curr_bed_type")->enum_keys_map; @@ -19353,7 +19334,8 @@ void Plater::record_slice_preset(std::string action) auto filament_preset = wxGetApp().preset_bundle->filaments.find_preset(filament_presets[i]); if (filament_preset->is_system) { j["filament_preset_" + std::to_string(i)] = filament_preset->name; - } else { + } + else { j["filament_preset_" + std::to_string(i)] = filament_preset->config.opt_string("inherits"); } } @@ -19361,12 +19343,12 @@ void Plater::record_slice_preset(std::string action) Preset& print_preset = wxGetApp().preset_bundle->prints.get_edited_preset(); if (print_preset.is_system) { j["process_preset"] = print_preset.name; - } else { + } + else { j["process_preset"] = print_preset.config.opt_string("inherits"); } j["support_type"] = ConfigOptionEnum::get_enum_names().at(print_preset.config.opt_enum("support_type")); - j["sparse_infill_pattern"] = ConfigOptionEnum::get_enum_names().at( - print_preset.config.opt_enum("sparse_infill_pattern")); + j["sparse_infill_pattern"] = ConfigOptionEnum::get_enum_names().at(print_preset.config.opt_enum("sparse_infill_pattern")); j["sparse_infill_density"] = print_preset.config.opt("sparse_infill_density")->value; j["brim_type"] = ConfigOptionEnum::get_enum_names().at(print_preset.config.opt_enum("brim_type")); @@ -19374,7 +19356,7 @@ void Plater::record_slice_preset(std::string action) if (p->background_process.fff_print()) { const DynamicPrintConfig& full_config = p->background_process.fff_print()->full_print_config(); - json values = json::array(); + json values = json::array(); if (full_config.has("different_settings_to_system")) { std::vector different_values = full_config.option("different_settings_to_system")->values; for (auto& item : different_values) { @@ -19384,26 +19366,28 @@ void Plater::record_slice_preset(std::string action) j["different_settings_to_system"] = values; } - j["record_event"] = action; + j["record_event"] = action; NetworkAgent* agent = wxGetApp().getAgent(); - } catch (...) { + } + catch (...) + { return; } } -// BBS: add project slicing related logic +//BBS: add project slicing related logic int Plater::start_next_slice() { // Stop arrange and (or) optimize rotation tasks. - // this->stop_jobs(); + //this->stop_jobs(); - // FIXME Don't reslice if export of G-code or sending to OctoPrint is running. - // bitmask of UpdateBackgroundProcessReturnState + //FIXME Don't reslice if export of G-code or sending to OctoPrint is running. + // bitmask of UpdateBackgroundProcessReturnState unsigned int state = this->p->update_background_process(true, false, false); if (state & priv::UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE) this->p->view3D->reload_scene(false); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": update_background_process returns %1%") % state; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": update_background_process returns %1%")%state; if (!p->partplate_list.get_curr_plate()->can_slice()) { p->process_completed_with_error = p->partplate_list.get_curr_plate_index(); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": found invalidated apply in update_background_process."); @@ -19412,27 +19396,34 @@ int Plater::start_next_slice() // Only restarts if the state is valid. bool result = this->p->restart_background_process(state | priv::UPDATE_BACKGROUND_PROCESS_FORCE_RESTART); - if (!result) { - // slice next - SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, SlicingProcessCompletedEvent::Finished, nullptr); + if (!result) + { + //slice next + SlicingProcessCompletedEvent evt(EVT_PROCESS_COMPLETED, 0, + SlicingProcessCompletedEvent::Finished, nullptr); // Post the "complete" callback message, so that it will slice the next plate soon wxQueueEvent(this, evt.Clone()); } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restart_background_process returns %1%") % result; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": restart_background_process returns %1%")%result; return 0; } -void Plater::reslice_SLA_supports(const ModelObject& object, bool postpone_error_messages) -{ reslice_SLA_until_step(slaposPad, object, postpone_error_messages); } -void Plater::reslice_SLA_hollowing(const ModelObject& object, bool postpone_error_messages) -{ reslice_SLA_until_step(slaposDrillHoles, object, postpone_error_messages); } - -void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject& object, bool postpone_error_messages) +void Plater::reslice_SLA_supports(const ModelObject &object, bool postpone_error_messages) { - // FIXME Don't reslice if export of G-code or sending to OctoPrint is running. - // bitmask of UpdateBackgroundProcessReturnState + reslice_SLA_until_step(slaposPad, object, postpone_error_messages); +} + +void Plater::reslice_SLA_hollowing(const ModelObject &object, bool postpone_error_messages) +{ + reslice_SLA_until_step(slaposDrillHoles, object, postpone_error_messages); +} + +void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject &object, bool postpone_error_messages) +{ + //FIXME Don't reslice if export of G-code or sending to OctoPrint is running. + // bitmask of UpdateBackgroundProcessReturnState unsigned int state = this->p->update_background_process(true, postpone_error_messages); if (state & priv::UPDATE_BACKGROUND_PROCESS_REFRESH_SCENE) this->p->view3D->reload_scene(false); @@ -19448,7 +19439,7 @@ void Plater::reslice_SLA_until_step(SLAPrintObjectStep step, const ModelObject& // Otherwise calculate everything, but start with the provided object. if (!this->p->background_processing_enabled()) { task.single_model_instance_only = true; - task.to_object_step = step; + task.to_object_step = step; } this->p->background_process.set_task(task); // and let the background processing start. @@ -19459,7 +19450,7 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) // if physical_printer is selected, send gcode for this printer // DynamicPrintConfig* physical_printer_config = wxGetApp().preset_bundle->physical_printers.get_selected_printer_config(); DynamicPrintConfig* physical_printer_config = &Slic3r::GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; - if (!physical_printer_config || p->model.objects.empty()) + if (! physical_printer_config || p->model.objects.empty()) return; PrintHostJob upload_job(physical_printer_config); @@ -19468,7 +19459,7 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) // Orca: the use_3mf printer option makes us send a .gcode.3mf to the printer const auto* use_3mf_opt = physical_printer_config->option("use_3mf"); - const bool use_3mf = use_3mf_opt != nullptr && use_3mf_opt->value; + const bool use_3mf = use_3mf_opt != nullptr && use_3mf_opt->value; upload_job.upload_data.use_3mf = use_3mf; // Orca: the concrete plate to export/send (PLATE_CURRENT_IDX resolves to the current plate). @@ -19482,7 +19473,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) unsigned int state = this->p->update_restart_background_process(false, false); if (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID) return; - default_output_file = this->p->background_process.output_filepath_for_project(into_path(this->p->get_project_filename(".3mf"))); + default_output_file = this->p->background_process.output_filepath_for_project( + into_path(this->p->get_project_filename(".3mf"))); } catch (const Slic3r::PlaceholderParserError& ex) { // Show the error with monospaced font. show_error(this, ex.what(), true); @@ -19518,8 +19510,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) } { - auto preset_bundle = wxGetApp().preset_bundle; - auto config = get_app_config(); + auto preset_bundle = wxGetApp().preset_bundle; + auto config = get_app_config(); const auto host_type_opt = physical_printer_config->option>("host_type"); const auto host_type = host_type_opt != nullptr ? host_type_opt->value : htElegooLink; @@ -19534,8 +19526,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) storage_paths, storage_names, config->get_bool("open_device_tab_post_upload")); } else if (host_type == htCrealityPrint) { - pDlg = std::make_unique(default_output_file, upload_job.printhost->get_post_upload_actions(), - groups, storage_paths, storage_names, + pDlg = std::make_unique(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, + storage_paths, storage_names, config->get_bool("open_device_tab_post_upload"), upload_job.printhost.get()); } else if (flashforge_local_api) { @@ -19546,10 +19538,10 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) } std::vector slots; - bool supports_material_station = false; + bool supports_material_station = false; { wxBusyCursor wait; - wxString msg; + wxString msg; if (!flashforge_host->fetch_material_slots(slots, &supports_material_station, msg)) { show_error(this, msg.empty() ? _L("Unable to log in to the Flashforge printer.") : msg, false); return; @@ -19557,10 +19549,10 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) } std::vector project_filaments; - PlateDataPtrs plate_data_list; - DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config(); - const auto* filament_color = dynamic_cast(cfg.option("filament_colour")); - const auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); + PlateDataPtrs plate_data_list; + DynamicPrintConfig cfg = wxGetApp().preset_bundle->full_config(); + const auto* filament_color = dynamic_cast(cfg.option("filament_colour")); + const auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); auto enrich_project_filaments = [&](std::vector& filaments) { for (auto& filament : filaments) { if (filament.id < 0) @@ -19569,7 +19561,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) std::string display_filament_type; try { filament.type = cfg.get_filament_type(display_filament_type, filament.id); - } catch (...) {} + } catch (...) { + } if (filament.type.empty()) filament.type = display_filament_type; @@ -19584,9 +19577,7 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) }; p->partplate_list.store_to_3mf_structure(plate_data_list, true, plate_idx); - PlateData* selected_plate_data = (resolved_plate_idx >= 0 && resolved_plate_idx < static_cast(plate_data_list.size())) ? - plate_data_list[resolved_plate_idx] : - nullptr; + PlateData* selected_plate_data = (resolved_plate_idx >= 0 && resolved_plate_idx < static_cast(plate_data_list.size())) ? plate_data_list[resolved_plate_idx] : nullptr; if (selected_plate_data == nullptr && !plate_data_list.empty()) selected_plate_data = plate_data_list.front(); @@ -19602,10 +19593,13 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) enrich_project_filaments(project_filaments); release_PlateData_list(plate_data_list); - pDlg = std::make_unique(default_output_file, upload_job.printhost->get_post_upload_actions(), - groups, storage_paths, storage_names, - config->get_bool("open_device_tab_post_upload"), flashforge_host, - supports_material_station, std::move(slots), project_filaments); + pDlg = std::make_unique(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, + storage_paths, storage_names, + config->get_bool("open_device_tab_post_upload"), + flashforge_host, + supports_material_station, + std::move(slots), + project_filaments); } else { pDlg = std::make_unique(default_output_file, upload_job.printhost->get_post_upload_actions(), groups, storage_paths, storage_names, config->get_bool("open_device_tab_post_upload")); @@ -19618,11 +19612,11 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) config->set_bool("open_device_tab_post_upload", pDlg->switch_to_device_tab()); // PrintHostUpload upload_data; - upload_job.switch_to_device_tab = pDlg->switch_to_device_tab(); - upload_job.upload_data.upload_path = pDlg->filename(); - upload_job.upload_data.post_action = pDlg->post_action(); - upload_job.upload_data.group = pDlg->group(); - upload_job.upload_data.storage = pDlg->storage(); + upload_job.switch_to_device_tab = pDlg->switch_to_device_tab(); + upload_job.upload_data.upload_path = pDlg->filename(); + upload_job.upload_data.post_action = pDlg->post_action(); + upload_job.upload_data.group = pDlg->group(); + upload_job.upload_data.storage = pDlg->storage(); upload_job.upload_data.extended_info = pDlg->extendedInfo(); // Orca: gcode inside a .gcode.3mf is index-coded (Metadata/plate_.gcode) and a bundle may // carry several of them, so the upload must name which plate to print via a 1-based plateindex. @@ -19636,10 +19630,8 @@ void Plater::send_gcode_legacy(int plate_idx, Export3mfProgressFn proFn) } // Show "Is printer clean" dialog for PrusaConnect - Upload and print. - if (std::string(upload_job.printhost->get_name()) == "PrusaConnect" && - upload_job.upload_data.post_action == PrintHostPostUploadAction::StartPrint) { - GUI::MessageDialog dlg(nullptr, _L("Is the printer ready? Is the print sheet in place, empty and clean?"), _L("Upload and Print"), - wxOK | wxCANCEL); + if (std::string(upload_job.printhost->get_name()) == "PrusaConnect" && upload_job.upload_data.post_action == PrintHostPostUploadAction::StartPrint) { + GUI::MessageDialog dlg(nullptr, _L("Is the printer ready? Is the print sheet in place, empty and clean?"), _L("Upload and Print"), wxOK | wxCANCEL); if (dlg.ShowModal() != wxID_OK) return; } @@ -19669,14 +19661,15 @@ int Plater::send_gcode(int plate_idx, Export3mfProgressFn proFn) try { p->m_print_job_data._3mf_path = fs::path(plate->get_tmp_gcode_path()); p->m_print_job_data._3mf_path.replace_extension("3mf"); - } catch (std::exception&) { + } + catch (std::exception&) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } SaveStrategy strategy = SaveStrategy::Silence | SaveStrategy::SkipModel | SaveStrategy::WithGcode | SaveStrategy::SkipAuxiliary; #if !BBL_RELEASE_TO_PUBLIC - // only save model in QA environment + //only save model in QA environment std::string sel = get_app_config()->get("iot_environment"); if (sel == ENV_PRE_HOST) strategy = SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode; @@ -19696,19 +19689,20 @@ int Plater::export_config_3mf(int plate_idx, Export3mfProgressFn proFn) PartPlate* plate = get_partplate_list().get_curr_plate(); try { p->m_print_job_data._3mf_config_path = fs::path(plate->get_temp_config_3mf_path()); - } catch (std::exception&) { + } + catch (std::exception&) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } SaveStrategy strategy = SaveStrategy::Silence | SaveStrategy::SkipModel | SaveStrategy::WithSliceInfo | SaveStrategy::SkipAuxiliary; - result = export_3mf(p->m_print_job_data._3mf_config_path, strategy, plate_idx, proFn); + result = export_3mf(p->m_print_job_data._3mf_config_path, strategy, plate_idx, proFn); return result; } -// BBS -void Plater::send_calibration_job_finished(wxCommandEvent& evt) +//BBS +void Plater::send_calibration_job_finished(wxCommandEvent & evt) { p->main_frame->request_select_tab(TAB_ID_CALIBRATION); auto calibration_panel = p->main_frame->m_calibration; @@ -19722,9 +19716,9 @@ void Plater::send_calibration_job_finished(wxCommandEvent& evt) evt.Skip(); } -void Plater::print_job_finished(wxCommandEvent& evt) +void Plater::print_job_finished(wxCommandEvent &evt) { - // start print failed + //start print failed if (p) { #ifdef __APPLE__ p->hide_select_machine_dlg(); @@ -19737,60 +19731,63 @@ void Plater::print_job_finished(wxCommandEvent& evt) #endif // __APPLE__ } + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) - return; + if (!dev) return; dev->set_selected_machine(evt.GetString().ToStdString()); p->main_frame->request_select_tab(TAB_ID_MONITOR); - // jump to monitor and select device status panel + //jump to monitor and select device status panel MonitorPanel* curr_monitor = p->main_frame->m_monitor; - if (curr_monitor) - curr_monitor->get_tabpanel()->ChangeSelection(MonitorPanel::PrinterTab::PT_STATUS); + if(curr_monitor) + curr_monitor->get_tabpanel()->ChangeSelection(MonitorPanel::PrinterTab::PT_STATUS); } void Plater::send_job_finished(wxCommandEvent& evt) { Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev) - return; - // dev->set_selected_machine(evt.GetString().ToStdString()); + if (!dev) return; + //dev->set_selected_machine(evt.GetString().ToStdString()); send_gcode_finish(evt.GetString()); p->hide_send_to_printer_dlg(); - // p->main_frame->request_select_tab(TAB_ID_MONITOR); + //p->main_frame->request_select_tab(TAB_ID_MONITOR); ////jump to monitor and select device status panel - // MonitorPanel* curr_monitor = p->main_frame->m_monitor; - // if (curr_monitor) - // curr_monitor->get_tabpanel()->ChangeSelection(MonitorPanel::PrinterTab::PT_STATUS); + //MonitorPanel* curr_monitor = p->main_frame->m_monitor; + //if (curr_monitor) + // curr_monitor->get_tabpanel()->ChangeSelection(MonitorPanel::PrinterTab::PT_STATUS); } -void Plater::publish_job_finished(wxCommandEvent& evt) +void Plater::publish_job_finished(wxCommandEvent &evt) { p->m_publish_dlg->EndModal(wxID_OK); - // GUI::wxGetApp().load_url(evt.GetString()); - // GUI::wxGetApp().open_publish_page_dialog(evt.GetString()); + // GUI::wxGetApp().load_url(evt.GetString()); + //GUI::wxGetApp().open_publish_page_dialog(evt.GetString()); } // Called when the Eject button is pressed. void Plater::eject_drive() { - wxBusyCursor wait; + wxBusyCursor wait; wxGetApp().removable_drive_manager()->set_and_verify_last_save_path(p->last_output_dir_path); - wxGetApp().removable_drive_manager()->eject_drive(); + wxGetApp().removable_drive_manager()->eject_drive(); } -void Plater::take_snapshot(const std::string& snapshot_name) { p->take_snapshot(snapshot_name); } -// void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); } -void Plater::take_snapshot(const std::string& snapshot_name, UndoRedo::SnapshotType snapshot_type) -{ p->take_snapshot(snapshot_name, snapshot_type); } -// void Plater::take_snapshot(const wxString &snapshot_name, UndoRedo::SnapshotType snapshot_type) { p->take_snapshot(snapshot_name, -// snapshot_type); } +void Plater::take_snapshot(const std::string &snapshot_name) { p->take_snapshot(snapshot_name); } +//void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); } +void Plater::take_snapshot(const std::string &snapshot_name, UndoRedo::SnapshotType snapshot_type) { p->take_snapshot(snapshot_name, snapshot_type); } +//void Plater::take_snapshot(const wxString &snapshot_name, UndoRedo::SnapshotType snapshot_type) { p->take_snapshot(snapshot_name, snapshot_type); } void Plater::suppress_snapshots() { p->suppress_snapshots(); } void Plater::allow_snapshots() { p->allow_snapshots(); } // BBS: single snapshot -void Plater::single_snapshots_enter(SingleSnapshot* single) { p->single_snapshots_enter(single); } -void Plater::single_snapshots_leave(SingleSnapshot* single) { p->single_snapshots_leave(single); } +void Plater::single_snapshots_enter(SingleSnapshot *single) +{ + p->single_snapshots_enter(single); +} +void Plater::single_snapshots_leave(SingleSnapshot *single) +{ + p->single_snapshots_leave(single); +} void Plater::undo() { p->undo(); } void Plater::redo() { p->redo(); } void Plater::undo_to(int selection) @@ -19816,9 +19813,9 @@ void Plater::redo_to(int selection) bool Plater::undo_redo_string_getter(const bool is_undo, int idx, const char** out_text) { const std::vector& ss_stack = p->undo_redo_stack().snapshots(); - const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -(++idx) : idx); + const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -(++idx) : idx); - if (0 < idx_in_ss_stack && (size_t) idx_in_ss_stack < ss_stack.size() - 1) { + if (0 < idx_in_ss_stack && (size_t)idx_in_ss_stack < ss_stack.size() - 1) { *out_text = ss_stack[idx_in_ss_stack].name.c_str(); return true; } @@ -19826,19 +19823,18 @@ bool Plater::undo_redo_string_getter(const bool is_undo, int idx, const char** o return false; } -int Plater::update_print_required_data(Slic3r::DynamicPrintConfig config, - Slic3r::Model model, - Slic3r::PlateDataPtrs plate_data_list, - std::string file_name, - std::string file_path) -{ return p->update_print_required_data(config, model, plate_data_list, file_name, file_path); } +int Plater::update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path) +{ + return p->update_print_required_data(config, model, plate_data_list, file_name, file_path); +} + void Plater::undo_redo_topmost_string_getter(const bool is_undo, std::string& out_text) { const std::vector& ss_stack = p->undo_redo_stack().snapshots(); - const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -1 : 0); + const int idx_in_ss_stack = p->get_active_snapshot_index() + (is_undo ? -1 : 0); - if (0 < idx_in_ss_stack && (size_t) idx_in_ss_stack < ss_stack.size() - 1) { + if (0 < idx_in_ss_stack && (size_t)idx_in_ss_stack < ss_stack.size() - 1) { out_text = ss_stack[idx_in_ss_stack].name; return; } @@ -19850,7 +19846,7 @@ bool Plater::search_string_getter(int idx, const char** label, const char** tool { const Search::OptionsSearcher& search_list = p->sidebar->get_searcher(); - if (0 <= idx && (size_t) idx < search_list.size()) { + if (0 <= idx && (size_t)idx < search_list.size()) { search_list[idx].get_marked_label_and_tooltip(label, tooltip); return true; } @@ -19877,7 +19873,7 @@ void Plater::on_filament_count_change(size_t num_filaments) sidebar().on_filament_count_change(num_filaments); sidebar().obj_list()->update_objects_list_filament_column(num_filaments); - Slic3r::GUI::PartPlateList& plate_list = get_partplate_list(); + Slic3r::GUI::PartPlateList &plate_list = get_partplate_list(); plate_list.set_filament_count(num_filaments); for (int i = 0; i < plate_list.get_plate_count(); ++i) { PartPlate* part_plate = plate_list.get_plate(i); @@ -19891,16 +19887,13 @@ void Plater::on_filament_count_change(size_t num_filaments) } } -void Plater::on_filaments_delete(size_t num_filaments, - size_t filament_id, - int replace_filament_id, - const std::vector& is_mixed_before_delete) +void Plater::on_filaments_delete(size_t num_filaments, size_t filament_id, int replace_filament_id, const std::vector& is_mixed_before_delete) { // only update elements in plater update_filament_colors_in_full_config(); // update fisrt print sequence and other layer sequence - // move to partplate->on_filament_deleted + //move to partplate->on_filament_deleted /*Slic3r::GUI::PartPlateList &plate_list = get_partplate_list(); for (int i = 0; i < plate_list.get_plate_count(); ++i) { PartPlate *part_plate = plate_list.get_plate(i); @@ -19911,13 +19904,12 @@ void Plater::on_filaments_delete(size_t num_filaments, // A volume assigned to a mixed slot legitimately sits past the physical filament count, so // the paint cleanup must know which slots were mixed. Callers that already shrank the arrays // pass the pre-delete flags; otherwise read the current ones. - const auto& is_mixed = is_mixed_before_delete.empty() ? - wxGetApp().preset_bundle->project_config.option("filament_is_mixed")->values : - is_mixed_before_delete; - for (ModelObject* mo : wxGetApp().model().objects) { - for (ModelVolume* mv : mo->volumes) { - mv->update_extruder_count_when_delete_filament(num_filaments, filament_id + 1, replace_filament_id + 1, - is_mixed); // this function is 1 base + const auto &is_mixed = is_mixed_before_delete.empty() + ? wxGetApp().preset_bundle->project_config.option("filament_is_mixed")->values + : is_mixed_before_delete; + for (ModelObject *mo : wxGetApp().model().objects) { + for (ModelVolume *mv : mo->volumes) { + mv->update_extruder_count_when_delete_filament(num_filaments, filament_id + 1, replace_filament_id + 1, is_mixed); // this function is 1 base } } @@ -19927,10 +19919,10 @@ void Plater::on_filaments_delete(size_t num_filaments, sidebar().obj_list()->update_objects_list_filament_column_when_delete_filament(filament_id, num_filaments, replace_filament_id); // update global support filament - static const char* keys[] = {"support_filament", "support_interface_filament"}; + static const char *keys[] = {"support_filament", "support_interface_filament"}; for (auto key : keys) if (p->config->has(key)) { - if (p->config->opt_int(key) == filament_id + 1) + if(p->config->opt_int(key) == filament_id + 1) (*(p->config)).erase(key); else { int new_value = p->config->opt_int(key) > filament_id ? p->config->opt_int(key) - 1 : p->config->opt_int(key); @@ -19948,7 +19940,7 @@ void Plater::on_filaments_delete(size_t num_filaments, }); if (replace_filament_id == -1) item->second.gcodes.erase(iter, item->second.gcodes.end()); - else if (iter != item->second.gcodes.end()) { + else if(iter != item->second.gcodes.end()) { iter->extruder = replace_filament_id + 1; } @@ -19961,10 +19953,10 @@ void Plater::on_filaments_delete(size_t num_filaments, std::vector Plater::get_extruders_colors() { - unsigned char rgba_color[4] = {}; - std::vector colors = get_extruder_colors_from_plater_config(); + unsigned char rgba_color[4] = {}; + std::vector colors = get_extruder_colors_from_plater_config(); std::vector colors_out(colors.size()); - for (const std::string& color : colors) { + for (const std::string &color : colors) { Slic3r::GUI::BitmapCache::parse_color4(color, rgba_color); size_t color_idx = &color - &colors.front(); colors_out[color_idx] = { @@ -19977,21 +19969,24 @@ std::vector Plater::get_extruders_colors() return colors_out; } -void Plater::on_bed_type_change(BedType bed_type) { sidebar().on_bed_type_change(bed_type); } +void Plater::on_bed_type_change(BedType bed_type) +{ + sidebar().on_bed_type_change(bed_type); +} bool Plater::update_filament_colors_in_full_config() { - DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config; - const auto& full_config = wxGetApp().preset_bundle->full_config(); - ConfigOptionStrings* color_opt = project_config.option("filament_colour"); + DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config; + const auto& full_config = wxGetApp().preset_bundle->full_config(); + ConfigOptionStrings* color_opt = project_config.option("filament_colour"); const ConfigOptionStrings* type_opt = full_config.option("filament_type"); p->config->option("filament_colour")->values = color_opt->values; - p->config->option("filament_type")->values = type_opt->values; + p->config->option("filament_type")->values = type_opt->values; return true; } -void Plater::config_change_notification(const DynamicPrintConfig& config, const std::string& key) +void Plater::config_change_notification(const DynamicPrintConfig &config, const std::string& key) { GLCanvas3D* view3d_canvas = get_view3D_canvas3D(); if (key == std::string("print_sequence")) { @@ -20001,23 +19996,24 @@ void Plater::config_change_notification(const DynamicPrintConfig& config, const if (seq_print->value == PrintSequence::ByObject) { std::string info_text = _u8L("Print By Object: \nWe suggest using auto-arrange to avoid collisions when printing."); notify_manager->bbl_show_seqprintinfo_notification(info_text); - } else + } + else notify_manager->bbl_close_seqprintinfo_notification(); } } // notification for more options } -void Plater::on_config_change(const DynamicPrintConfig& config) +void Plater::on_config_change(const DynamicPrintConfig &config) { - bool update_scheduled = false; + bool update_scheduled = false; bool bed_shape_changed = false; - // bool print_sequence_changed = false; + //bool print_sequence_changed = false; t_config_option_keys diff_keys = p->config->diff(config); size_t old_nozzle_size = 1, new_nozzle_size = 1; - auto* opt_old = p->config->option("nozzle_diameter"); - auto* opt_new = config.option("nozzle_diameter"); + auto * opt_old = p->config->option("nozzle_diameter"); + auto * opt_new = config.option("nozzle_diameter"); if (opt_old && opt_new) { old_nozzle_size = opt_old->values.size(); new_nozzle_size = opt_new->values.size(); @@ -20059,34 +20055,43 @@ void Plater::on_config_change(const DynamicPrintConfig& config) p->reset_gcode_toolpaths(); p->view3D->get_canvas3d()->reset_sequential_print_clearance(); p->preview->get_canvas3d()->reset_volumes(); - // BBS: invalid all the slice results + //BBS: invalid all the slice results p->partplate_list.invalid_all_slice_result(); } - // BBS: add bed_exclude_area - else if (opt_key == "printable_area" || opt_key == "bed_exclude_area" || opt_key == "bed_custom_texture" || - opt_key == "bed_custom_model" || opt_key == "extruder_clearance_height_to_lid" || - opt_key == "extruder_clearance_height_to_rod") { + //BBS: add bed_exclude_area + else if (opt_key == "printable_area" || opt_key == "bed_exclude_area" + || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model" + || opt_key == "extruder_clearance_height_to_lid" + || opt_key == "extruder_clearance_height_to_rod") { bed_shape_changed = true; - update_scheduled = true; - } else if (opt_key == "bed_shape" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") { + update_scheduled = true; + } + else if (opt_key == "bed_shape" || opt_key == "bed_custom_texture" || opt_key == "bed_custom_model") { bed_shape_changed = true; - update_scheduled = true; - } else if (boost::starts_with(opt_key, "enable_prime_tower") || boost::starts_with(opt_key, "prime_tower") || - boost::starts_with(opt_key, "wipe_tower") || opt_key == "filament_minimal_purge_on_wipe_tower" || - opt_key == "single_extruder_multi_material" || - // BBS - opt_key == "prime_volume") { update_scheduled = true; - } else if (opt_key == "extruder_colour") { + } + else if (boost::starts_with(opt_key, "enable_prime_tower") || + boost::starts_with(opt_key, "prime_tower") || + boost::starts_with(opt_key, "wipe_tower") || + opt_key == "filament_minimal_purge_on_wipe_tower" || + opt_key == "single_extruder_multi_material" || + // BBS + opt_key == "prime_volume") { update_scheduled = true; - // p->sidebar->obj_list()->update_extruder_colors(); - } else if (opt_key == "printable_height") { + } + else if(opt_key == "extruder_colour") { + update_scheduled = true; + //p->sidebar->obj_list()->update_extruder_colors(); + } + else if (opt_key == "printable_height") { bed_shape_changed = true; - update_scheduled = true; - } else if (opt_key == "print_sequence") { update_scheduled = true; - // print_sequence_changed = true; - } else if (opt_key == "printer_model") { + } + else if (opt_key == "print_sequence") { + update_scheduled = true; + //print_sequence_changed = true; + } + else if (opt_key == "printer_model") { p->reset_gcode_toolpaths(); if (old_nozzle_size != new_nozzle_size) { update_flush_volume_matrix(old_nozzle_size, new_nozzle_size); @@ -20094,11 +20099,12 @@ void Plater::on_config_change(const DynamicPrintConfig& config) // update to force bed selection(for texturing) bed_shape_changed = true; - update_scheduled = true; + update_scheduled = true; } // Orca: update when *_filament changed - else if (opt_key == "support_interface_filament" || opt_key == "support_filament" || opt_key == "outer_wall_filament_id" || - opt_key == "inner_wall_filament_id" || opt_key == "sparse_infill_filament_id" || opt_key == "internal_solid_filament_id" || + else if (opt_key == "support_interface_filament" || opt_key == "support_filament" || + opt_key == "outer_wall_filament_id" || opt_key == "inner_wall_filament_id" || + opt_key == "sparse_infill_filament_id" || opt_key == "internal_solid_filament_id" || opt_key == "top_surface_filament_id" || opt_key == "bottom_surface_filament_id") { update_scheduled = true; } @@ -20121,45 +20127,42 @@ void Plater::on_config_change(const DynamicPrintConfig& config) void Plater::update_flush_volume_matrix(size_t old_nozzle_size, size_t new_nozzle_size) { - size_t nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Slic3r::DynamicPrintConfig* project_config = &wxGetApp().preset_bundle->project_config; + size_t nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); + Slic3r::DynamicPrintConfig *project_config = &wxGetApp().preset_bundle->project_config; // Verify whether it is the first time start Studio - size_t filament_nums = project_config->option("filament_colour")->values.size(); + size_t filament_nums = project_config->option("filament_colour")->values.size(); size_t flush_volume_size = project_config->option("flush_volumes_matrix")->values.size(); assert(nozzle_nums == new_nozzle_size); if (old_nozzle_size < new_nozzle_size) { - std::vector first_flush_volume_mtx = - get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); + + std::vector first_flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); if (first_flush_volume_mtx.size() == filament_nums * filament_nums * new_nozzle_size) { // load file - set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, first_flush_volume_mtx, -1, - new_nozzle_size); + set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, first_flush_volume_mtx, -1, new_nozzle_size); } else { first_flush_volume_mtx.resize(filament_nums * filament_nums, 0); std::vector flush_volume_mtx; for (size_t i = 0; i < new_nozzle_size; ++i) { flush_volume_mtx.insert(flush_volume_mtx.end(), first_flush_volume_mtx.begin(), first_flush_volume_mtx.end()); } - set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, flush_volume_mtx, -1, - new_nozzle_size); + set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, flush_volume_mtx, -1, new_nozzle_size); } std::vector flush_multipliers = project_config->option("flush_multiplier")->values; flush_multipliers.resize(nozzle_nums, 1.f); project_config->option("flush_multiplier")->values = flush_multipliers; - } else if (old_nozzle_size > new_nozzle_size) { + } + else if (old_nozzle_size > new_nozzle_size) { std::vector new_flush_volume_mtx; for (size_t i = 0; i < new_nozzle_size; ++i) { - std::vector flush_volume_mtx = - get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); + std::vector flush_volume_mtx = get_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, -1, old_nozzle_size); flush_volume_mtx.resize(filament_nums * filament_nums, 0); new_flush_volume_mtx.insert(new_flush_volume_mtx.end(), flush_volume_mtx.begin(), flush_volume_mtx.end()); } std::vector flush_multipliers = project_config->option("flush_multiplier")->values; flush_multipliers.resize(nozzle_nums, 1.f); - set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, new_flush_volume_mtx, -1, - new_nozzle_size); + set_flush_volumes_matrix(project_config->option("flush_volumes_matrix")->values, new_flush_volume_mtx, -1, new_nozzle_size); project_config->option("flush_multiplier")->values = flush_multipliers; } } @@ -20173,43 +20176,32 @@ void Plater::set_bed_shape() const if (curr->is_system) texture_filename = PresetUtils::system_printer_bed_texture(*curr); else { - auto* printer_model = curr->config.opt("printer_model"); - if (printer_model != nullptr && !printer_model->value.empty()) { + auto *printer_model = curr->config.opt("printer_model"); + if (printer_model != nullptr && ! printer_model->value.empty()) { texture_filename = bundle->get_texture_for_printer_model(printer_model->value); } } } set_bed_shape(p->config->option("printable_area")->values, - // BBS: add bed exclude areas - p->config->option("bed_exclude_area")->values, - p->config->option("wrapping_exclude_area")->values, - p->config->option("printable_height")->value, - p->config->option("extruder_printable_area")->values, - p->config->option("extruder_printable_height")->values, - p->config->option("bed_custom_texture")->value.empty() ? - texture_filename : - p->config->option("bed_custom_texture")->value, - p->config->option("bed_custom_model")->value); + //BBS: add bed exclude areas + p->config->option("bed_exclude_area")->values, + p->config->option("wrapping_exclude_area")->values, + p->config->option("printable_height")->value, + p->config->option("extruder_printable_area")->values, + p->config->option("extruder_printable_height")->values, + p->config->option("bed_custom_texture")->value.empty() ? texture_filename : p->config->option("bed_custom_texture")->value, + p->config->option("bed_custom_model")->value); } -// BBS: add bed exclude area -void Plater::set_bed_shape(const Pointfs& shape, - const Pointfs& exclude_area, - const Pointfs& wrapping_exclude_area, - const double printable_height, - std::vector extruder_areas, - std::vector extruder_heights, - const std::string& custom_texture, - const std::string& custom_model, - bool force_as_custom) const +//BBS: add bed exclude area +void Plater::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_area, const Pointfs& wrapping_exclude_area, const double printable_height, std::vector extruder_areas, std::vector extruder_heights, const std::string& custom_texture, const std::string& custom_model, bool force_as_custom) const { - p->set_bed_shape(make_counter_clockwise(shape), exclude_area, wrapping_exclude_area, printable_height, extruder_areas, extruder_heights, - custom_texture, custom_model, force_as_custom); + p->set_bed_shape(make_counter_clockwise(shape), exclude_area, wrapping_exclude_area, printable_height, extruder_areas, extruder_heights, custom_texture, custom_model, force_as_custom); } void Plater::force_filament_colors_update() { -// BBS: filament_color logic has been moved out of filament setting +//BBS: filament_color logic has been moved out of filament setting #if 0 bool update_scheduled = false; DynamicPrintConfig* config = p->config; @@ -20242,12 +20234,15 @@ void Plater::force_filament_colors_update() void Plater::force_print_bed_update() { - // Fill in the printer model key with something which cannot possibly be valid, so that Plater::on_config_change() will update the print - // bed once a new Printer profile config is loaded. + // Fill in the printer model key with something which cannot possibly be valid, so that Plater::on_config_change() will update the print bed + // once a new Printer profile config is loaded. p->config->opt_string("printer_model", true) = "bbl_empty"; } -void Plater::on_activate() { this->p->show_delayed_error_message(); } +void Plater::on_activate() +{ + this->p->show_delayed_error_message(); +} // Get vector of extruder colors considering filament color, if extruder color is undefined. std::vector Plater::get_extruder_colors_from_plater_config(const GCodeProcessorResult* const result) const @@ -20270,9 +20265,8 @@ namespace { // A gradient mixed filament fades between its two components over Z, so the UI shows it as a // two-tone swatch rather than one blended colour. Resolve each slot to its from/to endpoint // colours; non-gradient slots are left untouched. -struct MixedGradientSlot -{ - bool is_gradient = false; +struct MixedGradientSlot { + bool is_gradient = false; std::string color_from; std::string color_to; }; @@ -20285,16 +20279,12 @@ std::vector parse_mixed_gradient_slots(const Slic3r::DynamicP const auto* mixed_comp = config.option("filament_mixed_components"); const auto* grad_range = config.option("filament_mixed_gradient_range"); const auto* fil_colour = config.option("filament_colour"); - if (!is_mixed || !mixed_grad || !mixed_comp || !fil_colour) - return result; + if (!is_mixed || !mixed_grad || !mixed_comp || !fil_colour) return result; for (size_t i = 0; i < slot_count && i < is_mixed->values.size(); ++i) { - if (!is_mixed->values[i]) - continue; - if (i >= mixed_grad->values.size() || !mixed_grad->values[i]) - continue; - if (i >= mixed_comp->values.size()) - continue; + if (!is_mixed->values[i]) continue; + if (i >= mixed_grad->values.size() || !mixed_grad->values[i]) continue; + if (i >= mixed_comp->values.size()) continue; std::vector comp_ids; std::istringstream iss(mixed_comp->values[i]); @@ -20304,8 +20294,7 @@ std::vector parse_mixed_gradient_slots(const Slic3r::DynamicP if (std::sscanf(tok.c_str(), "%u", &v) == 1) comp_ids.push_back(v); } - if (comp_ids.size() != 2) - continue; + if (comp_ids.size() != 2) continue; int direction = 0; if (grad_range && i < grad_range->values.size()) { @@ -20315,11 +20304,13 @@ std::vector parse_mixed_gradient_slots(const Slic3r::DynamicP direction = (v0 > v1) ? 0 : 1; } - unsigned int from_id = (direction == 0) ? comp_ids[0] : comp_ids[1]; - unsigned int to_id = (direction == 0) ? comp_ids[1] : comp_ids[0]; + unsigned int from_id = (direction == 0) ? comp_ids[0] : comp_ids[1]; + unsigned int to_id = (direction == 0) ? comp_ids[1] : comp_ids[0]; result[i].is_gradient = true; - result[i].color_from = (from_id >= 1 && from_id <= fil_colour->values.size()) ? fil_colour->values[from_id - 1] : "#D9D9D9"; - result[i].color_to = (to_id >= 1 && to_id <= fil_colour->values.size()) ? fil_colour->values[to_id - 1] : "#D9D9D9"; + result[i].color_from = (from_id >= 1 && from_id <= fil_colour->values.size()) + ? fil_colour->values[from_id - 1] : "#D9D9D9"; + result[i].color_to = (to_id >= 1 && to_id <= fil_colour->values.size()) + ? fil_colour->values[to_id - 1] : "#D9D9D9"; } return result; } @@ -20330,8 +20321,7 @@ std::vector Plater::get_filament_colors_render_info() const { const Slic3r::DynamicPrintConfig* config = &wxGetApp().preset_bundle->project_config; std::vector color_packs; - if (!config->has("filament_multi_colour")) - return color_packs; + if (!config->has("filament_multi_colour")) return color_packs; color_packs = (config->option("filament_multi_colour"))->values; @@ -20346,16 +20336,14 @@ std::vector Plater::get_filament_colors_render_info() const std::vector Plater::get_filament_color_render_type() const { - const Slic3r::DynamicPrintConfig* config = &wxGetApp().preset_bundle->project_config; - std::vector ctype; - if (!config->has("filament_colour_type")) - return ctype; + const Slic3r::DynamicPrintConfig *config = &wxGetApp().preset_bundle->project_config; + std::vector ctype; + if (!config->has("filament_colour_type")) return ctype; ctype = (config->option("filament_colour_type"))->values; auto slots = parse_mixed_gradient_slots(*config, ctype.size()); - while (ctype.size() < slots.size()) - ctype.push_back("1"); + while (ctype.size() < slots.size()) ctype.push_back("1"); for (size_t i = 0; i < ctype.size() && i < slots.size(); ++i) { if (slots[i].is_gradient) ctype[i] = "0"; @@ -20371,11 +20359,12 @@ const std::vector>& Plater::get_filament_gradient_ramps() // are built from. The cache is static rather than a Plater member because the extruder icons // ask for the ramps from MenuFactory::init(), which runs while this Plater is still inside its // own constructor, so wxGetApp().plater_ is not assigned yet. - static std::string s_ramps_key; + static std::string s_ramps_key; static std::vector> s_ramps; - static const char* ramp_keys[] = {"filament_is_mixed", "filament_mixed_gradient", "filament_mixed_components", - "filament_colour", "filament_mixed_gradient_range", "filament_mixed_gradient_curve"}; + static const char* ramp_keys[] = {"filament_is_mixed", "filament_mixed_gradient", + "filament_mixed_components", "filament_colour", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve"}; const Slic3r::DynamicPrintConfig& config = wxGetApp().preset_bundle->project_config; std::string key; @@ -20387,8 +20376,8 @@ const std::vector>& Plater::get_filament_gradient_ramps() // 64 bands outresolve every swatch drawn from this, all of which resample it down to their // own height, so one cached resolution serves the icons and both ImGui filament bars. - const auto* colour_opt = config.option("filament_colour"); - const size_t n = colour_opt ? colour_opt->values.size() : 0; + const auto* colour_opt = config.option("filament_colour"); + const size_t n = colour_opt ? colour_opt->values.size() : 0; s_ramps.assign(n, {}); for (size_t i = 0; i < n; ++i) s_ramps[i] = mixed_gradient_ramp(config, i, 64); @@ -20409,8 +20398,9 @@ std::vector Plater::get_colors_for_color_print(const GCodeProcessor if (code.type == CustomGCode::ColorChange) colors.emplace_back(code.color); } - } else { - // BBS + } + else { + //BBS colors.reserve(colors.size() + p->model.get_curr_plate_custom_gcodes().gcodes.size()); for (const CustomGCode::Item& code : p->model.get_curr_plate_custom_gcodes().gcodes) { if (code.type == CustomGCode::ColorChange) @@ -20423,23 +20413,23 @@ std::vector Plater::get_colors_for_color_print(const GCodeProcessor void Plater::set_global_filament_map_mode(FilamentMapMode mode) { - auto& project_config = wxGetApp().preset_bundle->project_config; - auto mode_ptr = project_config.option>("filament_map_mode"); + auto& project_config = wxGetApp().preset_bundle->project_config; + auto mode_ptr = project_config.option>("filament_map_mode"); FilamentMapMode old_mode = mode_ptr->value; - if (mode != old_mode) + if(mode != old_mode) on_filament_map_mode_change(); mode_ptr->value = mode; } void Plater::set_global_filament_map(const std::vector& filament_map) { - auto& project_config = wxGetApp().preset_bundle->project_config; + auto& project_config = wxGetApp().preset_bundle->project_config; project_config.option("filament_map")->values = filament_map; } void Plater::set_global_filament_volume_map(const std::vector& filament_volume_map) { - auto& project_config = wxGetApp().preset_bundle->project_config; + auto& project_config = wxGetApp().preset_bundle->project_config; project_config.option("filament_volume_map")->values = filament_volume_map; } @@ -20455,6 +20445,7 @@ std::vector Plater::get_global_filament_volume_map() const return project_config.option("filament_volume_map")->values; } + FilamentMapMode Plater::get_global_filament_map_mode() const { auto& project_config = wxGetApp().preset_bundle->project_config; @@ -20464,16 +20455,19 @@ FilamentMapMode Plater::get_global_filament_map_mode() const void Plater::on_filament_map_mode_change() { auto& plate_list = this->get_partplate_list(); - int plate_count = plate_list.get_plate_count(); + int plate_count = plate_list.get_plate_count(); for (int idx = 0; idx < plate_count; ++idx) { - auto plate = plate_list.get_plate(idx); + auto plate=plate_list.get_plate(idx); auto plate_map_mode = plate->get_filament_map_mode(); if (plate_map_mode == fmmDefault) plate->clear_filament_map(); } } -wxWindow* Plater::get_select_machine_dialog() { return p->m_select_machine_dlg; } +wxWindow* Plater::get_select_machine_dialog() +{ + return p->m_select_machine_dlg; +} void Plater::update_print_error_info(int code, std::string msg, std::string extra) { @@ -20488,20 +20482,40 @@ void Plater::update_print_error_info(int code, std::string msg, std::string extr p->main_frame->m_calibration->update_print_error_info(code, msg, extra); } -wxString Plater::get_project_filename(const wxString& extension) const { return p->get_project_filename(extension); } +wxString Plater::get_project_filename(const wxString& extension) const +{ + return p->get_project_filename(extension); +} -wxString Plater::get_export_gcode_filename(const wxString& extension, bool only_filename, bool export_all) const -{ return p->get_export_gcode_filename(extension, only_filename, export_all); } +wxString Plater::get_export_gcode_filename(const wxString & extension, bool only_filename, bool export_all) const +{ + return p->get_export_gcode_filename(extension, only_filename, export_all); +} -void Plater::set_project_filename(const wxString& filename) { p->set_project_filename(filename); } +void Plater::set_project_filename(const wxString& filename) +{ + p->set_project_filename(filename); +} -bool Plater::is_export_gcode_scheduled() const { return p->background_process.is_export_scheduled(); } +bool Plater::is_export_gcode_scheduled() const +{ + return p->background_process.is_export_scheduled(); +} -const Selection& Plater::get_selection() const { return p->get_selection(); } +const Selection &Plater::get_selection() const +{ + return p->get_selection(); +} -int Plater::get_selected_object_idx() { return p->get_selected_object_idx(); } +int Plater::get_selected_object_idx() +{ + return p->get_selected_object_idx(); +} -bool Plater::is_single_full_object_selection() const { return p->get_selection().is_single_full_object(); } +bool Plater::is_single_full_object_selection() const +{ + return p->get_selection().is_single_full_object(); +} GLCanvas3D* Plater::canvas3D() { @@ -20515,9 +20529,15 @@ const GLCanvas3D* Plater::canvas3D() const return p->get_current_canvas3D(); } -GLCanvas3D* Plater::get_view3D_canvas3D() { return p ? p->view3D->get_canvas3d() : nullptr; } +GLCanvas3D* Plater::get_view3D_canvas3D() +{ + return p ? p->view3D->get_canvas3d() : nullptr; +} -GLCanvas3D* Plater::get_preview_canvas3D() { return p->preview->get_canvas3d(); } +GLCanvas3D* Plater::get_preview_canvas3D() +{ + return p->preview->get_canvas3d(); +} GLCanvas3D* Plater::get_assmeble_canvas3D() { @@ -20526,36 +20546,51 @@ GLCanvas3D* Plater::get_assmeble_canvas3D() return nullptr; } -GLCanvas3D* Plater::get_current_canvas3D(bool exclude_preview) { return p->get_current_canvas3D(exclude_preview); } +GLCanvas3D* Plater::get_current_canvas3D(bool exclude_preview) +{ + return p->get_current_canvas3D(exclude_preview); +} void Plater::arrange() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle()) { p->take_snapshot(_u8L("Arrange")); replace_job(w, std::make_unique()); } } -void Plater::set_current_canvas_as_dirty() { p->set_current_canvas_as_dirty(); } +void Plater::set_current_canvas_as_dirty() +{ + p->set_current_canvas_as_dirty(); +} -void Plater::unbind_canvas_event_handlers() { p->unbind_canvas_event_handlers(); } +void Plater::unbind_canvas_event_handlers() +{ + p->unbind_canvas_event_handlers(); +} -void Plater::reset_canvas_volumes() { p->reset_canvas_volumes(); } +void Plater::reset_canvas_volumes() +{ + p->reset_canvas_volumes(); +} -PrinterTechnology Plater::printer_technology() const { return p->printer_technology; } +PrinterTechnology Plater::printer_technology() const +{ + return p->printer_technology; +} -const DynamicPrintConfig* Plater::config() const { return p->config; } +const DynamicPrintConfig * Plater::config() const { return p->config; } bool Plater::set_printer_technology(PrinterTechnology printer_technology) { p->printer_technology = printer_technology; - bool ret = p->background_process.select_technology(printer_technology); + bool ret = p->background_process.select_technology(printer_technology); if (ret) { // Update the active presets. } - // FIXME for SLA synchronize - // p->background_process.apply(Model)! + //FIXME for SLA synchronize + //p->background_process.apply(Model)! if (printer_technology == ptSLA) { for (ModelObject* model_object : p->model.objects) { @@ -20564,7 +20599,7 @@ bool Plater::set_printer_technology(PrinterTechnology printer_technology) } p->label_btn_export = printer_technology == ptFFF ? L("Export G-code") : L("Export"); - p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer"); + p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer"); if (wxGetApp().mainframe != nullptr) wxGetApp().mainframe->update_menubar(); @@ -20585,8 +20620,7 @@ void Plater::clear_before_change_mesh(int obj_idx) // may be different and they would make no sense. bool paint_removed = false; for (ModelVolume* mv : mo->volumes) { - paint_removed |= !mv->supported_facets.empty() || !mv->seam_facets.empty() || !mv->mmu_segmentation_facets.empty() || - !mv->fuzzy_skin_facets.empty(); + paint_removed |= ! mv->supported_facets.empty() || ! mv->seam_facets.empty() || ! mv->mmu_segmentation_facets.empty() || !mv->fuzzy_skin_facets.empty(); mv->supported_facets.reset(); mv->seam_facets.reset(); mv->mmu_segmentation_facets.reset(); @@ -20594,9 +20628,10 @@ void Plater::clear_before_change_mesh(int obj_idx) } if (paint_removed) { // snapshot_time is captured by copy so the lambda knows where to undo/redo to. - get_notification_manager()->push_notification(NotificationType::CustomSupportsAndSeamRemovedAfterRepair, - NotificationManager::NotificationLevel::PrintInfoNotificationLevel, - _u8L("Custom supports and color painting were removed before repairing.")); + get_notification_manager()->push_notification( + NotificationType::CustomSupportsAndSeamRemovedAfterRepair, + NotificationManager::NotificationLevel::PrintInfoNotificationLevel, + _u8L("Custom supports and color painting were removed before repairing.")); } } @@ -20609,8 +20644,7 @@ void Plater::changed_mesh(int obj_idx) p->schedule_background_process(); } -void Plater::changed_object(ModelObject& object) -{ +void Plater::changed_object(ModelObject &object){ assert(object.get_model() == &p->model); // is object from same model? object.invalidate_bounding_box(); @@ -20626,7 +20660,7 @@ void Plater::changed_object(ModelObject& object) // update print p->schedule_background_process(); - + // Check outside bed get_current_canvas3D()->requires_check_outside_state(); } @@ -20635,7 +20669,7 @@ void Plater::changed_object(int obj_idx) { if (obj_idx < 0) return; - ModelObject* object = p->model.objects[obj_idx]; + ModelObject *object = p->model.objects[obj_idx]; if (object == nullptr) return; changed_object(*object); @@ -20657,7 +20691,8 @@ void Plater::changed_objects(const std::vector& object_idxs) // Update the SLAPrint from the current Model, so that the reload_scene() // pulls the correct data, update the 3D scene. this->p->update_restart_background_process(true, false); - } else { + } + else { p->view3D->reload_scene(false); p->view3D->get_canvas3d()->update_instance_printable_state_for_objects(object_idxs); } @@ -20666,7 +20701,7 @@ void Plater::changed_objects(const std::vector& object_idxs) this->p->schedule_background_process(); } -void Plater::schedule_background_process(bool schedule /* = true*/) +void Plater::schedule_background_process(bool schedule/* = true*/) { if (schedule) this->p->schedule_background_process(); @@ -20674,7 +20709,10 @@ void Plater::schedule_background_process(bool schedule /* = true*/) this->p->suppressed_backround_processing_update = false; } -bool Plater::is_background_process_update_scheduled() const { return this->p->background_process_timer.IsRunning(); } +bool Plater::is_background_process_update_scheduled() const +{ + return this->p->background_process_timer.IsRunning(); +} void Plater::suppress_background_process(const bool stop_background_process) { @@ -20687,29 +20725,28 @@ void Plater::suppress_background_process(const bool stop_background_process) // Expose the slicing process to the device GUI. BackgroundSlicingProcess& Plater::background_process() { return p->background_process; } -void Plater::center_selection() { p->center_selection(); } -void Plater::drop_selection() { p->drop_selection(); } -void Plater::mirror(Axis axis) { p->mirror(axis); } -void Plater::split_object(bool auto_drop) { p->split_object(auto_drop); } -void Plater::split_volume() { p->split_volume(); } +void Plater::center_selection() { p->center_selection(); } +void Plater::drop_selection() { p->drop_selection(); } +void Plater::mirror(Axis axis) { p->mirror(axis); } +void Plater::split_object(bool auto_drop) { p->split_object(auto_drop); } +void Plater::split_volume() { p->split_volume(); } void Plater::optimize_rotation() { - auto& w = get_ui_job_worker(); + auto &w = get_ui_job_worker(); if (w.is_idle()) { p->take_snapshot(_u8L("Optimize Rotation")); replace_job(w, std::make_unique()); } } -void Plater::update_menus() { p->menus.update(); } +void Plater::update_menus() { p->menus.update(); } -wxString Plater::get_selected_printer_name_in_combox() -{ - PresetBundle* preset_bundle = wxGetApp().preset_bundle; - std::string printer_model = preset_bundle->printers.get_selected_preset().config.option("printer_model")->value; +wxString Plater::get_selected_printer_name_in_combox() { + PresetBundle * preset_bundle = wxGetApp().preset_bundle; + std::string printer_model = preset_bundle->printers.get_selected_preset().config.option("printer_model")->value; return printer_model; } -void Plater::pop_warning_and_go_to_device_page(wxString printer_name, PrinterWarningType type, const wxString& title) +void Plater::pop_warning_and_go_to_device_page(wxString printer_name, PrinterWarningType type, const wxString &title) { printer_name.Replace("Bambu Lab", "", false); wxString content; @@ -20723,16 +20760,14 @@ void Plater::pop_warning_and_go_to_device_page(wxString printer_name, PrinterWar _L("OrcaSlicer can't connect to %s. Please check if the printer is powered on and connected to the network."), printer_name); } } else if (type == PrinterWarningType::INCONSISTENT) { - content = wxString::Format(_L("The currently connected printer on the device page is not %s. Please switch to %s before syncing."), - printer_name, printer_name); + content = wxString::Format(_L("The currently connected printer on the device page is not %s. Please switch to %s before syncing."), printer_name, printer_name); } else if (type == PrinterWarningType::UNINSTALL_FILAMENT) { content = _L("There are no filaments on the printer. Please load the filaments on the printer first."); } else if (type == PrinterWarningType::EMPTY_FILAMENT) { - content = _L("The filaments on the printer are all unknown types. Please go to the printer screen or software device page to set " - "the filament type."); + content = _L("The filaments on the printer are all unknown types. Please go to the printer screen or software device page to set the filament type."); } MessageDialog dlg(this, content, title, wxOK | wxFORWARD | wxICON_WARNING, _L("Device Page")); - auto result = dlg.ShowModal(); + auto result = dlg.ShowModal(); if (result == wxFORWARD) { wxGetApp().mainframe->select_tab(TAB_ID_MONITOR); } @@ -20743,13 +20778,13 @@ bool Plater::is_same_printer_for_connected_and_selected(bool popup_warning) if (!wxGetApp().getDeviceManager()) { return false; } - MachineObject* obj = wxGetApp().getDeviceManager()->get_selected_machine(); + MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine(); if (obj == nullptr) { return false; } if (!check_printer_initialized(obj, true, popup_warning)) return false; - Preset* machine_preset = get_printer_preset(obj); + Preset * machine_preset = get_printer_preset(obj); if (!machine_preset) return false; @@ -20763,7 +20798,7 @@ bool Plater::is_same_printer_for_connected_and_selected(bool popup_warning) return true; } // BBS -// void Plater::show_action_buttons(const bool ready_to_slice) const { p->show_action_buttons(ready_to_slice); } +//void Plater::show_action_buttons(const bool ready_to_slice) const { p->show_action_buttons(ready_to_slice); } void Plater::fill_color(int extruder_id) { @@ -20772,7 +20807,7 @@ void Plater::fill_color(int extruder_id) } } -// BBS +//BBS void Plater::cut_selection_to_clipboard() { Plater::TakeSnapshot snapshot(this, "Cut Selected Objects"); @@ -20804,7 +20839,7 @@ void Plater::paste_from_clipboard() p->view3D->get_canvas3d()->get_selection().paste_from_clipboard(); } -// BBS: add clone +//BBS: add clone void Plater::clone_selection() { if (is_selection_empty()) @@ -20815,13 +20850,13 @@ void Plater::clone_selection() std::vector Plater::get_empty_cells(const Vec2f step) { - PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); BoundingBoxf3 build_volume = plate->get_build_volume(true); Vec2d vmin(build_volume.min.x(), build_volume.min.y()), vmax(build_volume.max.x(), build_volume.max.y()); BoundingBoxf bbox(vmin, vmax); std::vector cells; - auto min_x = step(0) / 2; // start_point.x() - step(0) * int((start_point.x() - bbox.min.x()) / step(0)); - auto min_y = step(1) / 2; // start_point.y() - step(1) * int((start_point.y() - bbox.min.y()) / step(1)); + auto min_x = step(0)/2;// start_point.x() - step(0) * int((start_point.x() - bbox.min.x()) / step(0)); + auto min_y = step(1)/2;// start_point.y() - step(1) * int((start_point.y() - bbox.min.y()) / step(1)); auto& exclude_box3s = plate->get_exclude_areas(); std::vector exclude_boxs; for (auto& box : exclude_box3s) { @@ -20838,14 +20873,14 @@ std::vector Plater::get_empty_cells(const Vec2f step) break; } } - if (in_exclude) + if(in_exclude) continue; cells.emplace_back(x, y); } return cells; } -void Plater::search(bool plater_is_active, Preset::Type type, wxWindow* tag, TextInput* etag, wxWindow* stag) +void Plater::search(bool plater_is_active, Preset::Type type, wxWindow *tag, TextInput *etag, wxWindow *stag) { if (plater_is_active) { if (is_preview_shown()) @@ -20856,12 +20891,13 @@ void Plater::search(bool plater_is_active, Preset::Type type, wxWindow* tag, Tex wxKeyEvent evt; #ifdef __APPLE__ evt.m_keyCode = 'f'; -#else /* __APPLE__ */ +#else /* __APPLE__ */ evt.m_keyCode = WXK_CONTROL_F; #endif /* __APPLE__ */ evt.SetControlDown(true); canvas3D()->on_char(evt); - } else + } + else p->sidebar->get_searcher().show_dialog(type, tag, etag, stag); } @@ -20884,8 +20920,7 @@ void Plater::sys_color_changed() p->preview->sys_color_changed(); p->sidebar->sys_color_changed(); p->menus.sys_color_changed(); - if (p->m_select_machine_dlg) - p->m_select_machine_dlg->sys_color_changed(); + if (p->m_select_machine_dlg) p->m_select_machine_dlg->sys_color_changed(); Layout(); GetParent()->Layout(); @@ -20904,48 +20939,60 @@ void Plater::enable_view_toolbar(bool enable) } #endif -bool Plater::init_collapse_toolbar() { return p->init_collapse_toolbar(); } +bool Plater::init_collapse_toolbar() +{ + return p->init_collapse_toolbar(); +} -const Camera& Plater::get_camera() const { return p->camera; } +const Camera& Plater::get_camera() const +{ + return p->camera; +} -Camera& Plater::get_camera() { return p->camera; } +Camera& Plater::get_camera() +{ + return p->camera; +} -// BBS: partplate list related functions -PartPlateList& Plater::get_partplate_list() { return p->partplate_list; } +//BBS: partplate list related functions +PartPlateList& Plater::get_partplate_list() +{ + return p->partplate_list; +} void Plater::apply_background_progress() { - PartPlate* part_plate = p->partplate_list.get_curr_plate(); - int plate_index = p->partplate_list.get_curr_plate_index(); - bool result_valid = part_plate->is_slice_result_valid(); + PartPlate* part_plate = p->partplate_list.get_curr_plate(); + int plate_index = p->partplate_list.get_curr_plate_index(); + bool result_valid = part_plate->is_slice_result_valid(); const auto& preset_bundle = wxGetApp().preset_bundle; - // always apply the current plate's print + //always apply the current plate's print Print::ApplyStatus invalidated; if (preset_bundle->get_printer_extruder_count() > 1) { - std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); + std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); std::vector f_volume_maps = part_plate->get_filament_volume_maps(); if (f_volume_maps.empty()) { f_volume_maps = preset_bundle->get_default_nozzle_volume_types_for_filaments(f_maps); } invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false, f_maps, f_volume_maps)); - } else + } + else invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false)); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" %1%: plate %2%, after apply, invalidated= %3%, previous result_valid %4% ") % __LINE__ % - plate_index % invalidated % result_valid; - if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, after apply, invalidated= %3%, previous result_valid %4% ") % __LINE__ % plate_index % invalidated % result_valid; + if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) + { part_plate->update_slice_result_valid_state(false); - // p->ready_to_slice = true; + //p->ready_to_slice = true; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, true); } } -// BBS: select Plate +//BBS: select Plate int Plater::select_plate(int plate_index, bool need_slice) { int ret; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, need_slice %3% ") % __LINE__ % plate_index % need_slice; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, need_slice %3% ")%__LINE__ %plate_index %need_slice; take_snapshot("select partplate!"); ret = p->partplate_list.select_plate(plate_index); if (!ret) { @@ -20954,106 +21001,124 @@ int Plater::select_plate(int plate_index, bool need_slice) } const auto& preset_bundle = wxGetApp().preset_bundle; - if ((!ret) && (p->background_process.can_switch_print())) { - // select successfully + if ((!ret) && (p->background_process.can_switch_print())) + { + //select successfully p->partplate_list.update_slice_context_to_current_plate(p->background_process); p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); p->update_print_volume_state(); - PartPlate* part_plate = p->partplate_list.get_curr_plate(); - bool result_valid = part_plate->is_slice_result_valid(); - PrintBase* print = nullptr; + PartPlate* part_plate = p->partplate_list.get_curr_plate(); + bool result_valid = part_plate->is_slice_result_valid(); + PrintBase* print = nullptr; GCodeResult* gcode_result = nullptr; Print::ApplyStatus invalidated; part_plate->get_print(&print, &gcode_result, NULL); - // always apply the current plate's print + //always apply the current plate's print if (preset_bundle->get_printer_extruder_count() > 1) { - std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); + std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); std::vector f_volume_maps = part_plate->get_filament_volume_maps(); if (f_volume_maps.empty()) { f_volume_maps = preset_bundle->get_default_nozzle_volume_types_for_filaments(f_maps); } invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false, f_maps, f_volume_maps)); - } else + } + else invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false)); bool model_fits, validate_err; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" %1%: plate %2%, after apply, invalidated= %3%, previous result_valid %4% ") % __LINE__ % - plate_index % invalidated % result_valid; - if (result_valid) { - if (is_preview_shown()) { - if (need_slice) { // from preview's thumbnail - if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) || (gcode_result->moves.empty())) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, after apply, invalidated= %3%, previous result_valid %4% ")%__LINE__ %plate_index %invalidated %result_valid; + if (result_valid) + { + if (is_preview_shown()) + { + if (need_slice) { //from preview's thumbnail + if ((invalidated & PrintBase::APPLY_STATUS_INVALIDATED) || (gcode_result->moves.empty())){ if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) part_plate->update_slice_result_valid_state(false); p->process_completed_with_error = -1; - p->m_slice_all = false; + p->m_slice_all = false; reset_gcode_toolpaths(); reslice(); - } else { + } + else { validate_current_plate(model_fits, validate_err); - // just refresh_print + //just refresh_print reload_print(); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false, true); } - } else { // from multiple slice's next - // do nothing } - } else { + else {// from multiple slice's next + //do nothing + } + } + else + { validate_current_plate(model_fits, validate_err); - if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) { + if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) + { part_plate->update_slice_result_valid_state(false); // BBS - // p->show_action_buttons(true); - // p->ready_to_slice = true; + //p->show_action_buttons(true); + //p->ready_to_slice = true; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, true); - } else { + } + else + { // BBS - // p->show_action_buttons(false); - // p->ready_to_slice = false; + //p->show_action_buttons(false); + //p->ready_to_slice = false; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); reload_print(); } } - } else { - // check inside status - // model_fits = p->view3D->get_canvas3d()->check_volumes_outside_state() != ModelInstancePVS_Partly_Outside; - // bool validate_err = false; + } + else + { + //check inside status + //model_fits = p->view3D->get_canvas3d()->check_volumes_outside_state() != ModelInstancePVS_Partly_Outside; + //bool validate_err = false; validate_current_plate(model_fits, validate_err); if (model_fits && !validate_err) { p->process_completed_with_error = -1; - } else { + } + else { p->process_completed_with_error = p->partplate_list.get_curr_plate_index(); } - if (is_preview_shown()) { - if (need_slice) { - // p->process_completed_with_error = -1; + if (is_preview_shown()) + { + if (need_slice) + { + //p->process_completed_with_error = -1; p->m_slice_all = false; reset_gcode_toolpaths(); if (model_fits && !validate_err) { - if (!check_ams_status(false)) { + if (!check_ams_status(false)){ return ret; } reslice(); - } else { + } + else { p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); - // sometimes the previous print's sliced result is still valid, but the newly added object is laid over the boundary - // then the print toolpath will be shown, so we should not refresh print here, only onload shell - // refresh_print(); + //sometimes the previous print's sliced result is still valid, but the newly added object is laid over the boundary + //then the print toolpath will be shown, so we should not refresh print here, only onload shell + //refresh_print(); p->update_fff_scene_only_shells(); } - } else { - // p->ready_to_slice = false; + } + else { + //p->ready_to_slice = false; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); reload_print(); } - } else { - // validate_current_plate(model_fits, validate_err); - // check inside status + } + else + { + //validate_current_plate(model_fits, validate_err); + //check inside status /*if (model_fits && !validate_err){ p->process_completed_with_error = -1; } @@ -21062,13 +21127,16 @@ int Plater::select_plate(int plate_index, bool need_slice) }*/ // BBS: don't show action buttons - // p->show_action_buttons(true); - // p->ready_to_slice = true; - if (model_fits && part_plate->has_printable_instances()) { - // p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, true)); + //p->show_action_buttons(true); + //p->ready_to_slice = true; + if (model_fits && part_plate->has_printable_instances()) + { + //p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, true)); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, true); - } else { - // p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); + } + else + { + //p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); } } @@ -21078,7 +21146,7 @@ int Plater::select_plate(int plate_index, bool need_slice) SimpleEvent event(EVT_GLCANVAS_PLATE_SELECT); p->on_plate_selected(event); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, return %3%") % __LINE__ % plate_index % ret; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: plate %2%, return %3%")%__LINE__ %plate_index %ret; return ret; } @@ -21089,12 +21157,13 @@ int Plater::select_sliced_plate(int plate_index, bool skip_zoom) Freeze(); ret = select_plate(plate_index, true); - if (ret) { + if (ret) + { BOOST_LOG_TRIVIAL(error) << "select_plate error for plate_idx=" << plate_index; Thaw(); return -1; } - if (skip_zoom) + if(skip_zoom) p->partplate_list.select_plate_view(); Thaw(); @@ -21110,13 +21179,11 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) { ObjectFilamentResults object_results; ModelInstanceEPrintVolumeState state = p->view3D->get_canvas3d()->check_volumes_outside_state(&object_results); - model_fits = (state != ModelInstancePVS_Partly_Outside); + model_fits = (state != ModelInstancePVS_Partly_Outside); - PartPlate* cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); - if (model_fits) { // TPU check - bool tpu_valid = cur_plate->check_tpu_printable_status(wxGetApp().preset_bundle->full_config(), - wxGetApp().preset_bundle->get_used_tpu_filaments( - cur_plate->get_extruders(true))); + PartPlate *cur_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); + if (model_fits) { // TPU check + bool tpu_valid = cur_plate->check_tpu_printable_status(wxGetApp().preset_bundle->full_config(), wxGetApp().preset_bundle->get_used_tpu_filaments(cur_plate->get_extruders(true))); model_fits &= tpu_valid; } @@ -21126,23 +21193,19 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) model_fits &= filament_printable; } - model_fits = model_fits && object_results.filaments.empty(); + model_fits = model_fits && object_results.filaments.empty(); validate_error = false; if (p->printer_technology == ptFFF) { - // std::string plater_text = _u8L("An object is laid over the boundary of plate or exceeds the height limit.\n" - // "Please solve the problem by moving it totally on or off the plate, and confirming that the height is within the - // build volume.");; + //std::string plater_text = _u8L("An object is laid over the boundary of plate or exceeds the height limit.\n" + // "Please solve the problem by moving it totally on or off the plate, and confirming that the height is within the build volume.");; std::vector warnings; Polygons polygons; std::vector> height_polygons; - p->background_process.fff_print()->set_check_multi_filaments_compatibility( - wxGetApp().app_config->get("enable_high_low_temp_mixed_printing") == "false"); + p->background_process.fff_print()->set_check_multi_filaments_compatibility(wxGetApp().app_config->get("enable_high_low_temp_mixed_printing") == "false"); StringObjectException err = p->background_process.validate(&warnings, &polygons, &height_polygons); // update string by type post_process_string_object_exception(err); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": validate err=%1%, warnings=%2%, model_fits %3%") % err.string % warnings.size() % - model_fits; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": validate err=%1%, warnings=%2%, model_fits %3%")%err.string%warnings.size() %model_fits; if (err.string.empty()) { p->partplate_list.get_curr_plate()->update_apply_result_invalid(false); @@ -21154,13 +21217,14 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) p->view3D->get_canvas3d()->reset_sequential_print_clearance(); p->view3D->get_canvas3d()->set_as_dirty(); p->view3D->get_canvas3d()->request_extra_frame(); - } else { + } + else { // The print is not valid. p->partplate_list.get_curr_plate()->update_apply_result_invalid(true); // Show error as notification. p->notification_manager->push_validate_error_notification(err); p->process_validation_warnings(warnings); - // model_fits = false; + //model_fits = false; validate_error = true; p->view3D->get_canvas3d()->set_sequential_print_clearance_visible(true); p->view3D->get_canvas3d()->set_sequential_print_clearance_render_fill(true); @@ -21170,25 +21234,25 @@ void Plater::validate_current_plate(bool& model_fits, bool& validate_error) std::string clashed_text = get_object_clashed_text(); if (state == ModelInstancePVS_Partly_Outside) { p->notification_manager->push_plater_error_notification(clashed_text); - } else { + } + else { p->notification_manager->close_plater_error_notification(clashed_text); } - std::string left_unprintable_text = get_left_extruder_unprintable_text(), - right_unprintable_text = get_right_extruder_unprintable_text(); - if (!left_unprintable_text.empty()) { - p->notification_manager->bbl_show_filament_map_invalid_notification_before_slice(NotificationType::LeftExtruderUnprintableError, - left_unprintable_text); - } else { - p->notification_manager->bbl_close_filament_map_invalid_notification_before_slice( - NotificationType::LeftExtruderUnprintableError); + std::string left_unprintable_text = get_left_extruder_unprintable_text(), right_unprintable_text = get_right_extruder_unprintable_text(); + if (!left_unprintable_text.empty()) + { + p->notification_manager->bbl_show_filament_map_invalid_notification_before_slice(NotificationType::LeftExtruderUnprintableError, left_unprintable_text); + } + else { + p->notification_manager->bbl_close_filament_map_invalid_notification_before_slice(NotificationType::LeftExtruderUnprintableError); } - if (!right_unprintable_text.empty()) { - p->notification_manager->bbl_show_filament_map_invalid_notification_before_slice(NotificationType::RightExtruderUnprintableError, - right_unprintable_text); - } else { - p->notification_manager->bbl_close_filament_map_invalid_notification_before_slice( - NotificationType::RightExtruderUnprintableError); + if (!right_unprintable_text.empty()) + { + p->notification_manager->bbl_show_filament_map_invalid_notification_before_slice(NotificationType::RightExtruderUnprintableError,right_unprintable_text); + } + else { + p->notification_manager->bbl_close_filament_map_invalid_notification_before_slice(NotificationType::RightExtruderUnprintableError); } /*if (state == ModelInstancePVS_Limited) { @@ -21246,18 +21310,16 @@ bool Plater::refresh_missing_plugin_block(bool* block_toggled) std::vector refs = missing_refs(missing); std::sort(refs.begin(), refs.end()); std::string sig; - for (const std::string& r : refs) { - sig += r; - sig += '\n'; - } + for (const std::string& r : refs) { sig += r; sig += '\n'; } return sig; }; // Show/refresh the non-closable notification for one missing set. Only (re)create it when the // set changes; pushing every validate would close+recreate it (flicker, reset hover) since // validate runs on many triggers. shown_sig also gates plugin-load re-validation. - const auto update = [&](NotificationType type, const std::vector& missing, std::string* shown_sig, - const std::string& header, const std::string& resolve_label, + const auto update = [&](NotificationType type, const std::vector& missing, + std::string* shown_sig, const std::string& header, + const std::string& resolve_label, std::function resolve_action) { if (missing.empty()) { if (!shown_sig->empty()) { @@ -21272,49 +21334,46 @@ bool Plater::refresh_missing_plugin_block(bool* block_toggled) for (const auto& m : missing) body.emplace_back(JumpTo{m.ref.capability_name, m.opt, m.opt_type}); - p->notification_manager->push_plugin_missing_notification(type, header, resolve_label, std::move(body), - std::move(resolve_action)); + p->notification_manager->push_plugin_missing_notification( + type, header, resolve_label, std::move(body), std::move(resolve_action)); *shown_sig = sig; } }; - const std::vector missing_cloud = get_missing_cloud_plugins(); - const std::vector missing_local = get_missing_local_plugins(); + const std::vector missing_cloud = get_missing_cloud_plugins(); + const std::vector missing_local = get_missing_local_plugins(); const std::vector missing_cloud_refs = missing_refs(missing_cloud); const std::vector missing_local_refs = missing_refs(missing_local); - update(NotificationType::OrcaCloudPluginMissingError, missing_cloud, &p->m_cloud_missing_shown_sig, - _u8L("OrcaCloud plugins required by the current preset are not installed:"), _u8L("Install Plugins"), - [this, missing_cloud_refs](wxEvtHandler*) { - install_missing_cloud_plugins(missing_cloud_refs); - return false; - }); + update(NotificationType::OrcaCloudPluginMissingError, missing_cloud, + &p->m_cloud_missing_shown_sig, + _u8L("OrcaCloud plugins required by the current preset are not installed:"), + _u8L("Install Plugins"), + [this, missing_cloud_refs](wxEvtHandler*) { install_missing_cloud_plugins(missing_cloud_refs); return false; }); // "Find on OrcaCloud" is only a suggestion: it opens the browser but cannot resolve the missing // plugin in-session, so it never closes the notification or unblocks slicing. The user resolves a // local plugin by installing it or by changing the setting that needs it. - update(NotificationType::OrcaLocalPluginMissingError, missing_local, &p->m_local_missing_shown_sig, - _u8L("Local plugins required by the current preset are missing:"), _u8L("Find on OrcaCloud"), - [missing_local_refs](wxEvtHandler*) { - open_missing_plugins_on_cloud(missing_local_refs); - return false; - }); + update(NotificationType::OrcaLocalPluginMissingError, missing_local, + &p->m_local_missing_shown_sig, + _u8L("Local plugins required by the current preset are missing:"), + _u8L("Find on OrcaCloud"), + [missing_local_refs](wxEvtHandler*) { open_missing_plugins_on_cloud(missing_local_refs); return false; }); - const std::vector inactive = get_inactive_plugins(); - const std::vector broken = get_broken_plugins(); - const std::vector inactive_refs = missing_refs(inactive); - const std::vector broken_refs = missing_refs(broken); + const std::vector inactive = get_inactive_plugins(); + const std::vector broken = get_broken_plugins(); + const std::vector inactive_refs = missing_refs(inactive); + const std::vector broken_refs = missing_refs(broken); - update(NotificationType::OrcaPluginInactiveError, inactive, &p->m_inactive_shown_sig, - _u8L("Plugins required by the current preset are not activated:"), _u8L("Activate Now"), [this, inactive_refs](wxEvtHandler*) { - enable_inactive_plugins(inactive_refs); - return false; - }); - update(NotificationType::OrcaPluginCapabilityUnavailableError, broken, &p->m_broken_shown_sig, - _u8L("The installed plugin does not provide the required capability — it may be outdated:"), _u8L("Find on OrcaCloud"), - [broken_refs](wxEvtHandler*) { - open_missing_plugins_on_cloud(broken_refs); - return false; - }); + update(NotificationType::OrcaPluginInactiveError, inactive, + &p->m_inactive_shown_sig, + _u8L("Plugins required by the current preset are not activated:"), + _u8L("Activate Now"), + [this, inactive_refs](wxEvtHandler*) { enable_inactive_plugins(inactive_refs); return false; }); + update(NotificationType::OrcaPluginCapabilityUnavailableError, broken, + &p->m_broken_shown_sig, + _u8L("The installed plugin does not provide the required capability — it may be outdated:"), + _u8L("Find on OrcaCloud"), + [broken_refs](wxEvtHandler*) { open_missing_plugins_on_cloud(broken_refs); return false; }); const bool blocked = has_missing_plugins() || has_inactive_plugins() || has_broken_plugins(); if (block_toggled) @@ -21326,8 +21385,8 @@ void Plater::revalidate_current_plate_if_plugins_missing() { // Only do work while a missing-plugin notification is up, so the plugin-load hook does not // trigger a full validation for every plugin that loads during normal startup/use. - if (p->m_local_missing_shown_sig.empty() && p->m_cloud_missing_shown_sig.empty() && p->m_inactive_shown_sig.empty() && - p->m_broken_shown_sig.empty()) + if (p->m_local_missing_shown_sig.empty() && p->m_cloud_missing_shown_sig.empty() && + p->m_inactive_shown_sig.empty() && p->m_broken_shown_sig.empty()) return; bool model_fits = true, validate_error = false; validate_current_plate(model_fits, validate_error); @@ -21344,14 +21403,15 @@ void Plater::install_missing_cloud_plugins(const std::vector& cloud std::atomic cancel{false}; std::atomic finished{false}; std::atomic torn_down{false}; - std::mutex mtx; - std::string message; + std::mutex mtx; + std::string message; }; auto state = std::make_shared(); state->message = _u8L("Preparing to install plugins..."); wxWindow* parent = wxGetApp().mainframe; - auto* dialog = new wxProgressDialog(_L("Installing plugins"), from_u8(state->message), 100, parent, wxPD_APP_MODAL | wxPD_CAN_ABORT); + auto* dialog = new wxProgressDialog(_L("Installing plugins"), from_u8(state->message), 100, + parent, wxPD_APP_MODAL | wxPD_CAN_ABORT); dialog->Pulse(); // UI-thread timer: animate the pulse, observe the Cancel button, and tear down when the worker @@ -21409,8 +21469,7 @@ bool Plater::plugins_block_slicing() const return has_missing_plugins() || has_inactive_plugins() || has_broken_plugins(); } -void Plater::open_platesettings_dialog(wxCommandEvent& evt) -{ +void Plater::open_platesettings_dialog(wxCommandEvent& evt) { int plate_index = evt.GetInt(); PlateSettingsDialog dlg(this, _L("Plate Settings"), evt.GetString() == "only_layer_sequence"); PartPlate* curr_plate = p->partplate_list.get_curr_plate(); @@ -21419,7 +21478,8 @@ void Plater::open_platesettings_dialog(wxCommandEvent& evt) auto curr_print_seq = curr_plate->get_print_seq(); if (curr_print_seq != PrintSequence::ByDefault) { dlg.sync_print_seq(int(curr_print_seq) + 1); - } else + } + else dlg.sync_print_seq(0); auto first_layer_print_seq = curr_plate->get_first_layer_print_sequence(); @@ -21439,8 +21499,8 @@ void Plater::open_platesettings_dialog(wxCommandEvent& evt) dlg.Bind(EVT_SET_BED_TYPE_CONFIRM, [this, plate_index, &dlg](wxCommandEvent& e) { PartPlate* curr_plate = p->partplate_list.get_curr_plate(); - BedType old_bed_type = curr_plate->get_bed_type(); - auto bt_sel = dlg.get_bed_type_choice(); + BedType old_bed_type = curr_plate->get_bed_type(); + auto bt_sel = dlg.get_bed_type_choice(); if (old_bed_type != bt_sel) { curr_plate->set_bed_type(bt_sel); update_project_dirty_from_presets(); @@ -21467,54 +21527,63 @@ void Plater::open_platesettings_dialog(wxCommandEvent& evt) int spiral_sel = dlg.get_spiral_mode_choice(); if (spiral_sel == 1) { curr_plate->set_spiral_vase_mode(true, false); - } else if (spiral_sel == 2) { + } + else if (spiral_sel == 2) { curr_plate->set_spiral_vase_mode(false, false); - } else { + } + else { curr_plate->set_spiral_vase_mode(false, true); } update_project_dirty_from_presets(); set_plater_dirty(true); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format("select print sequence %1% for plate %2% at plate side") % ps_sel % plate_index; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("select print sequence %1% for plate %2% at plate side") % ps_sel % plate_index; auto plate_config = *(curr_plate->config()); wxGetApp().plater()->config_change_notification(plate_config, std::string("print_sequence")); update(); wxGetApp().obj_list()->update_selections(); - }); + }); dlg.set_plate_name(from_u8(curr_plate->get_plate_name())); dlg.ShowModal(); curr_plate->set_plate_name(dlg.get_plate_name().ToUTF8().data()); } -void Plater::open_filament_map_setting_dialog(wxCommandEvent& evt) +void Plater::open_filament_map_setting_dialog(wxCommandEvent &evt) { PartPlate* curr_plate = p->partplate_list.get_curr_plate(); - int value = evt.GetInt(); // 1 means from gcode view - bool need_slice = value == 1; // If from gcode view, should slice + int value = evt.GetInt(); //1 means from gcode view + bool need_slice = value ==1; // If from gcode view, should slice const auto& project_config = wxGetApp().preset_bundle->project_config; - auto filament_colors = config()->option("filament_colour")->values; - auto filament_types = config()->option("filament_type")->values; + auto filament_colors = config()->option("filament_colour")->values; + auto filament_types = config()->option("filament_type")->values; - auto plate_filament_maps = curr_plate->get_real_filament_maps(project_config); - auto plate_filament_map_mode = curr_plate->get_filament_map_mode(); + auto plate_filament_maps = curr_plate->get_real_filament_maps(project_config); + auto plate_filament_map_mode = curr_plate->get_filament_map_mode(); auto plate_filament_volume_maps = curr_plate->get_real_filament_volume_maps(project_config); - if (plate_filament_maps.size() != filament_colors.size()) // refine it later, save filament map to app config + if (plate_filament_maps.size() != filament_colors.size()) // refine it later, save filament map to app config plate_filament_maps.resize(filament_colors.size(), 1); if (plate_filament_volume_maps.size() != filament_colors.size()) plate_filament_volume_maps.resize(filament_colors.size(), 0); - FilamentMapDialog filament_dlg(this, filament_colors, filament_types, plate_filament_maps, plate_filament_volume_maps, - curr_plate->get_extruders(true), plate_filament_map_mode, this->get_machine_sync_status(), false); + FilamentMapDialog filament_dlg(this, + filament_colors, + filament_types, + plate_filament_maps, + plate_filament_volume_maps, + curr_plate->get_extruders(true), + plate_filament_map_mode, + this->get_machine_sync_status(), + false + ); if (filament_dlg.ShowModal() == wxID_OK) { std::vector new_filament_maps = filament_dlg.get_filament_maps(); std::vector old_filament_maps = curr_plate->get_real_filament_maps(project_config); - FilamentMapMode old_map_mode = curr_plate->get_filament_map_mode(); - FilamentMapMode new_map_mode = filament_dlg.get_mode(); + FilamentMapMode old_map_mode = curr_plate->get_filament_map_mode(); + FilamentMapMode new_map_mode = filament_dlg.get_mode(); std::vector new_filament_volume_maps = filament_dlg.get_filament_volume_maps(); std::vector old_filament_volume_maps = curr_plate->get_real_filament_volume_maps(project_config); @@ -21523,18 +21592,20 @@ void Plater::open_filament_map_setting_dialog(wxCommandEvent& evt) curr_plate->set_filament_map_mode(new_map_mode); } - if (new_map_mode == fmmManual) { + if (new_map_mode == fmmManual){ curr_plate->set_filament_maps(new_filament_maps); curr_plate->set_filament_volume_maps(new_filament_volume_maps); } - bool need_invalidate = (old_map_mode != new_map_mode || old_filament_maps != new_filament_maps || + bool need_invalidate = (old_map_mode != new_map_mode || + old_filament_maps != new_filament_maps || old_filament_volume_maps != new_filament_volume_maps); if (need_invalidate) { if (need_slice) { wxPostEvent(this, SimpleEvent(EVT_GLTOOLBAR_SLICE_PLATE)); - } else { + } + else { curr_plate->update_slice_result_valid_state(false); set_plater_dirty(true); update(); @@ -21544,7 +21615,8 @@ void Plater::open_filament_map_setting_dialog(wxCommandEvent& evt) return; } -// BBS: select Plate by hover_id + +//BBS: select Plate by hover_id int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModidyPlateName) { int ret; @@ -21553,121 +21625,145 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi plate_index = hover_id / PartPlate::GRABBER_COUNT; action = isModidyPlateName ? PartPlate::PLATE_NAME_HOVER_ID : hover_id % PartPlate::GRABBER_COUNT; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": enter, hover_id %1%, plate_index %2%, action %3%") % hover_id % plate_index % action; - if (action == 0) { - // select plate + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": enter, hover_id %1%, plate_index %2%, action %3%")%hover_id % plate_index %action; + if (action == 0) + { + //select plate ret = p->partplate_list.select_plate(plate_index); if (!ret) { SimpleEvent event(EVT_GLCANVAS_PLATE_SELECT); p->on_plate_selected(event); } - if ((!ret) && (p->background_process.can_switch_print())) { - // select successfully + if ((!ret)&&(p->background_process.can_switch_print())) + { + //select successfully p->partplate_list.update_slice_context_to_current_plate(p->background_process); p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); p->update_print_volume_state(); - PartPlate* part_plate = p->partplate_list.get_curr_plate(); - bool result_valid = part_plate->is_slice_result_valid(); - PrintBase* print = nullptr; + PartPlate* part_plate = p->partplate_list.get_curr_plate(); + bool result_valid = part_plate->is_slice_result_valid(); + PrintBase* print = nullptr; GCodeResult* gcode_result = nullptr; Print::ApplyStatus invalidated; const auto& preset_bundle = wxGetApp().preset_bundle; part_plate->get_print(&print, &gcode_result, NULL); - // always apply the current plate's print + //always apply the current plate's print if (preset_bundle->get_printer_extruder_count() > 1) { - std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); + std::vector f_maps = part_plate->get_real_filament_maps(preset_bundle->project_config); std::vector f_volume_maps = part_plate->get_filament_volume_maps(); if (f_volume_maps.empty()) { f_volume_maps = preset_bundle->get_default_nozzle_volume_types_for_filaments(f_maps); } invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false, f_maps, f_volume_maps)); - } else + } + else invalidated = p->background_process.apply(this->model(), preset_bundle->full_config(false)); bool model_fits, validate_err; validate_current_plate(model_fits, validate_err); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(" %1%: after apply, invalidated= %2%, previous result_valid %3% ") % __LINE__ % - invalidated % result_valid; - if (result_valid) { - if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) { - // bool model_fits, validate_err; - // validate_current_plate(model_fits, validate_err); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: after apply, invalidated= %2%, previous result_valid %3% ")%__LINE__ % invalidated %result_valid; + if (result_valid) + { + if (invalidated & PrintBase::APPLY_STATUS_INVALIDATED) + { + //bool model_fits, validate_err; + //validate_current_plate(model_fits, validate_err); part_plate->update_slice_result_valid_state(false); // BBS - // p->show_action_buttons(true); - // p->ready_to_slice = true; + //p->show_action_buttons(true); + //p->ready_to_slice = true; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, true); - } else { + } + else + { // BBS - // p->show_action_buttons(false); - // validate_current_plate(model_fits, validate_err); - // p->ready_to_slice = false; + //p->show_action_buttons(false); + //validate_current_plate(model_fits, validate_err); + //p->ready_to_slice = false; p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); reload_print(); } - } else { - // check inside status - if (model_fits && !validate_err) { + } + else + { + //check inside status + if (model_fits && !validate_err){ p->process_completed_with_error = -1; - } else { + } + else { p->process_completed_with_error = p->partplate_list.get_curr_plate_index(); } // BBS: don't show action buttons - // p->show_action_buttons(true); - // p->ready_to_slice = true; - if (model_fits && part_plate->has_printable_instances()) { - // p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, true)); + //p->show_action_buttons(true); + //p->ready_to_slice = true; + if (model_fits && part_plate->has_printable_instances()) + { + //p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, true)); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": will set can_slice to true"); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, true); - } else { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ - << boost::format(": will set can_slice to false, has_printable_instances %1%") % - part_plate->has_printable_instances(); - // p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); + } + else + { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": will set can_slice to false, has_printable_instances %1%")%part_plate->has_printable_instances(); + //p->view3D->get_canvas3d()->post_event(Event(EVT_GLCANVAS_ENABLE_ACTION_BUTTONS, false)); p->main_frame->update_slice_print_status(MainFrame::eEventPlateUpdate, false); } } } - } else if ((action == 1) && (!right_click)) { - // delete plate + } + else if ((action == 1)&&(!right_click)) + { + //delete plate ret = delete_plate(plate_index); - } else if ((action == 2) && (!right_click)) { - // arrange the plate - // take_snapshot("select_orient partplate"); + } + else if ((action == 2)&&(!right_click)) + { + //arrange the plate + //take_snapshot("select_orient partplate"); ret = select_plate(plate_index); - if (!ret) { + if (!ret) + { set_prepare_state(Job::PREPARE_STATE_MENU); orient(); - } else { + } + else + { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index; ret = -1; } - } else if ((action == 3) && (!right_click)) { - // arrange the plate - // take_snapshot("select_arrange partplate"); + } + else if ((action == 3)&&(!right_click)) + { + //arrange the plate + //take_snapshot("select_arrange partplate"); ret = select_plate(plate_index); - if (!ret) { + if (!ret) + { if (last_arrange_job_is_finished()) { set_prepare_state(Job::PREPARE_STATE_MENU); arrange(); } - } else { + } + else + { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index; ret = -1; } - } else if ((action == 4) && (!right_click)) { - // lock the plate + } + else if ((action == 4)&&(!right_click)) + { + //lock the plate take_snapshot("lock partplate"); ret = p->partplate_list.lock_plate(plate_index, !p->partplate_list.is_locked(plate_index)); - } else if ((action == 5) && (!right_click)) { + } + else if ((action == 5)&&(!right_click)) + { // set the plate type ret = select_plate(plate_index); if (!ret) { @@ -21681,10 +21777,11 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index; ret = -1; } - } else if ((action == PartPlate::PLATE_FILAMENT_MAP_ID) && (!right_click)) { + } + else if ((action == PartPlate::PLATE_FILAMENT_MAP_ID) && (!right_click)) { ret = select_plate(plate_index); if (!ret) { - PartPlate* curr_plate = p->partplate_list.get_curr_plate(); + PartPlate * curr_plate = p->partplate_list.get_curr_plate(); wxCommandEvent evt(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG); evt.SetInt(0); // 0 means not from gcodeviewer evt.SetEventObject(this); @@ -21693,17 +21790,18 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "can not select plate %1%" << plate_index; ret = -1; } - } else if ((action == 6) && (!right_click)) { + } + else if ((action == 6) && (!right_click)) { // set the plate type ret = select_plate(plate_index); if (!ret) { PlateNameEditDialog dlg(this, wxID_ANY, _L("Edit Plate Name")); - PartPlate* curr_plate = p->partplate_list.get_curr_plate(); + PartPlate * curr_plate = p->partplate_list.get_curr_plate(); wxString curr_plate_name = from_u8(curr_plate->get_plate_name()); dlg.set_plate_name(curr_plate_name); - int result = dlg.ShowModal(); + int result=dlg.ShowModal(); if (result == wxID_YES) { wxString dlg_plate_name = dlg.get_plate_name(); curr_plate->set_plate_name(dlg_plate_name.ToUTF8().data()); @@ -21715,7 +21813,7 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi } else if ((action == 7) && (!right_click)) { // move plate to the front take_snapshot("move plate to the front"); - ret = p->partplate_list.move_plate_to_index(plate_index, 0); + ret = p->partplate_list.move_plate_to_index(plate_index,0); p->partplate_list.update_slice_context_to_current_plate(p->background_process); p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); p->sidebar->obj_list()->reload_all_plates(); @@ -21724,12 +21822,13 @@ int Plater::select_plate_by_hover_id(int hover_id, bool right_click, bool isModi p->partplate_list.select_plate(0); } - else { + else + { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "invalid action %1%, with right_click=%2%" << action << right_click; ret = -1; } - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: return %2%") % __LINE__ % ret; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" %1%: return %2%")%__LINE__ % ret; return ret; } @@ -21741,12 +21840,12 @@ int Plater::duplicate_plate(int plate_index) ret = p->partplate_list.duplicate_plate(index); - // need to call update + //need to call update update(); return ret; } -// BBS: delete the plate, index= -1 means the current plate +//BBS: delete the plate, index= -1 means the current plate int Plater::delete_plate(int plate_index) { int index = plate_index, ret; @@ -21757,41 +21856,47 @@ int Plater::delete_plate(int plate_index) take_snapshot("delete partplate"); ret = p->partplate_list.delete_plate(index); - // BBS: update the current print to the current plate + //BBS: update the current print to the current plate p->partplate_list.update_slice_context_to_current_plate(p->background_process); p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); p->sidebar->obj_list()->reload_all_plates(); // BBS update default view - // get_camera().select_view("topfront"); - // get_camera().requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; + //get_camera().select_view("topfront"); + //get_camera().requires_zoom_to_plate = REQUIRES_ZOOM_TO_ALL_PLATE; - // need to call update + //need to call update update(); return ret; } -// BBS: set bed positions -void Plater::set_bed_position(Vec2d& pos) { p->bed.set_position(pos); } +//BBS: set bed positions +void Plater::set_bed_position(Vec2d& pos) +{ + p->bed.set_position(pos); +} -// BBS: is the background process slicing currently -bool Plater::is_background_process_slicing() const { return p->m_is_slicing; } +//BBS: is the background process slicing currently +bool Plater::is_background_process_slicing() const +{ + return p->m_is_slicing; +} -// BBS: update slicing context +//BBS: update slicing context void Plater::update_slicing_context_to_current_partplate() { p->partplate_list.update_slice_context_to_current_plate(p->background_process); p->preview->update_gcode_result(p->partplate_list.get_current_slice_result()); } -// BBS: show object info +//BBS: show object info void Plater::show_object_info() { - NotificationManager* notify_manager = get_notification_manager(); - const Selection& selection = get_selection(); - int selCount = selection.get_volume_idxs().size(); - ModelObjectPtrs objects = model().objects; - int obj_idx = selection.get_object_idx(); + NotificationManager *notify_manager = get_notification_manager(); + const Selection& selection = get_selection(); + int selCount = selection.get_volume_idxs().size(); + ModelObjectPtrs objects = model().objects; + int obj_idx = selection.get_object_idx(); std::string info_text; if (selCount > 1 && !selection.is_single_full_object()) { @@ -21804,22 +21909,25 @@ void Plater::show_object_info() } notify_manager->bbl_show_objectsinfo_notification(info_text, false, !(p->current_panel == p->view3D)); return; - } else if (objects.empty() || (obj_idx < 0) || (obj_idx >= objects.size()) || - objects[obj_idx]->volumes.empty() || // hack to avoid crash when deleting the last object on the bed - (selection.is_single_full_object() && objects[obj_idx]->instances.size() > 1) || - !(selection.is_single_full_instance() || selection.is_single_volume())) { + } + else if (objects.empty() || (obj_idx < 0) || (obj_idx >= objects.size()) || + objects[obj_idx]->volumes.empty() ||// hack to avoid crash when deleting the last object on the bed + (selection.is_single_full_object() && objects[obj_idx]->instances.size()> 1) || + !(selection.is_single_full_instance() || selection.is_single_volume())) + { notify_manager->bbl_close_objectsinfo_notification(); return; } const ModelObject* model_object = objects[obj_idx]; - int inst_idx = selection.get_instance_idx(); - if ((inst_idx < 0) || (inst_idx >= model_object->instances.size())) { + int inst_idx = selection.get_instance_idx(); + if ((inst_idx < 0) || (inst_idx >= model_object->instances.size())) + { notify_manager->bbl_close_objectsinfo_notification(); return; } bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; - double koef = imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0f; + double koef = imperial_units ? GizmoObjectManipulation::mm_to_in : 1.0f; ModelVolume* vol = nullptr; Transform3d t; @@ -21828,60 +21936,65 @@ void Plater::show_object_info() if (selection.is_single_volume()) { std::vector obj_idxs, vol_idxs; wxGetApp().obj_list()->get_selection_indexes(obj_idxs, vol_idxs); - if (vol_idxs.size() != 1) { - // corner case when merge/split/remove + if (vol_idxs.size() != 1) + { + //corner case when merge/split/remove return; } vol = model_object->volumes[vol_idxs[0]]; - t = model_object->instances[inst_idx]->get_matrix() * vol->get_matrix(); + t = model_object->instances[inst_idx]->get_matrix() * vol->get_matrix(); info_text += (boost::format(_utf8(L("Part name: %1%\n"))) % vol->name).str(); face_count = static_cast(vol->mesh().facets_count()); - size = vol->get_convex_hull().transformed_bounding_box(t).size(); - } else { - // int obj_idx, vol_idx; - // wxGetApp().obj_list()->get_selected_item_indexes(obj_idx, vol_idx); - // if (obj_idx < 0) { - // //corner case when merge/split/remove - // return; - // } + size = vol->get_convex_hull().transformed_bounding_box(t).size(); + } + else { + //int obj_idx, vol_idx; + //wxGetApp().obj_list()->get_selected_item_indexes(obj_idx, vol_idx); + //if (obj_idx < 0) { + // //corner case when merge/split/remove + // return; + //} info_text += (boost::format(_utf8(L("Object name: %1%\n"))) % model_object->name).str(); face_count = static_cast(model_object->facets_count()); - size = model_object->instance_convex_hull_bounding_box(inst_idx).size(); + size = model_object->instance_convex_hull_bounding_box(inst_idx).size(); } - // Vec3d size = vol ? vol->mesh().transformed_bounding_box(t).size() : model_object->instance_bounding_box(inst_idx).size(); + //Vec3d size = vol ? vol->mesh().transformed_bounding_box(t).size() : model_object->instance_bounding_box(inst_idx).size(); if (imperial_units) - info_text += (boost::format(_utf8(L("Size: %1% x %2% x %3% in\n"))) % (size(0) * koef) % (size(1) * koef) % (size(2) * koef)).str(); + info_text += (boost::format(_utf8(L("Size: %1% x %2% x %3% in\n"))) %(size(0)*koef) %(size(1)*koef) %(size(2)*koef)).str(); else - info_text += (boost::format(_utf8(L("Size: %1% x %2% x %3% mm\n"))) % size(0) % size(1) % size(2)).str(); + info_text += (boost::format(_utf8(L("Size: %1% x %2% x %3% mm\n"))) %size(0) %size(1) %size(2)).str(); const TriangleMeshStats& stats = vol ? vol->mesh().stats() : model_object->get_object_stl_stats(); - double volume_val = stats.volume; + double volume_val = stats.volume; if (vol) volume_val *= std::fabs(t.matrix().block(0, 0, 3, 3).determinant()); - volume_val = volume_val * pow(koef, 3); + volume_val = volume_val * pow(koef,3); if (imperial_units) - info_text += (boost::format(_utf8(L("Volume: %1% in³\n"))) % volume_val).str(); + info_text += (boost::format(_utf8(L("Volume: %1% in³\n"))) %volume_val).str(); else - info_text += (boost::format(_utf8(L("Volume: %1% mm³\n"))) % volume_val).str(); - info_text += (boost::format(_utf8(L("Triangles: %1%\n"))) % face_count).str(); + info_text += (boost::format(_utf8(L("Volume: %1% mm³\n"))) %volume_val).str(); + info_text += (boost::format(_utf8(L("Triangles: %1%\n"))) %face_count).str(); wxString info_manifold; int non_manifold_edges = 0; - auto mesh_errors = p->sidebar->obj_list()->get_mesh_errors_info(&info_manifold, &non_manifold_edges); + auto mesh_errors = p->sidebar->obj_list()->get_mesh_errors_info(&info_manifold, &non_manifold_edges); - if (non_manifold_edges > 0) { - info_manifold += "\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh."); - } + if (non_manifold_edges > 0) { + info_manifold += "\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh."); + } info_manifold = "" + info_manifold + ""; info_text += into_u8(info_manifold); notify_manager->bbl_show_objectsinfo_notification(info_text, non_manifold_edges > 0, !(p->current_panel == p->view3D)); } -bool Plater::show_publish_dialog(bool show) { return p->show_publish_dlg(show); } +bool Plater::show_publish_dialog(bool show) +{ + return p->show_publish_dlg(show); +} -void Plater::post_process_string_object_exception(StringObjectException& err) +void Plater::post_process_string_object_exception(StringObjectException &err) { PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (err.type == StringExceptionType::STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE) { @@ -21904,9 +22017,8 @@ void Plater::post_process_string_object_exception(StringObjectException& err) break; } } - err.string = format(_L("Plate %d: %s is not suggested for use printing filament %s (%s). If you still want to do this " - "print job, please set this filament\'s bed temperature to a number that is not zero."), - err.params[0], err.params[1], err.params[2], filament_name); + err.string = format(_L("Plate %d: %s is not suggested for use printing filament %s (%s). If you still want to do this print job, please set this filament\'s bed temperature to a number that is not zero."), + err.params[0], err.params[1], err.params[2], filament_name); err.string += "\n"; } } catch (...) { @@ -21917,8 +22029,10 @@ void Plater::post_process_string_object_exception(StringObjectException& err) return; } -void Plater::update_objects_position_when_select_preset(const std::function& select_prest) -{ p->update_objects_position_when_select_preset(select_prest); } +void Plater::update_objects_position_when_select_preset(const std::function &select_prest) +{ + p->update_objects_position_when_select_preset(select_prest); +} bool Plater::check_ams_status(bool is_slice_all) { @@ -21926,7 +22040,8 @@ bool Plater::check_ams_status(bool is_slice_all) if (!p->check_ams_status_impl(is_slice_all)) { m_check_status = 0; return false; - } else { + } + else { m_check_status = 1; } } @@ -21936,33 +22051,32 @@ bool Plater::check_ams_status(bool is_slice_all) void Plater::update_machine_sync_status() { - DeviceManager* dev_maneger = wxGetApp().getDeviceManager(); + DeviceManager *dev_maneger = wxGetApp().getDeviceManager(); if (!dev_maneger) { GUI::wxGetApp().sidebar().update_sync_status(nullptr); return; } - MachineObject* obj = wxGetApp().getDeviceManager()->get_selected_machine(); + MachineObject *obj = wxGetApp().getDeviceManager()->get_selected_machine(); GUI::wxGetApp().sidebar().update_sync_status(obj); } -bool Plater::get_machine_sync_status() { return p->get_machine_sync_status(); } +bool Plater::get_machine_sync_status() +{ + return p->get_machine_sync_status(); +} void Plater::update_filament_volume_map(int extruder_id, int volume_type) { // Hybrid is a per-extruder mix, not a per-filament volume; reset the affected filaments // to Standard so the manual grouping dialog starts from a concrete assignment. - int selected_volume_type = volume_type == static_cast(NozzleVolumeType::nvtHybrid) ? - static_cast(NozzleVolumeType::nvtStandard) : - volume_type; - auto& partplate_list = get_partplate_list(); + int selected_volume_type = volume_type == static_cast(NozzleVolumeType::nvtHybrid) ? static_cast(NozzleVolumeType::nvtStandard) : volume_type; + auto& partplate_list = get_partplate_list(); for (int idx = 0; idx < partplate_list.get_plate_count(); ++idx) { auto plate = partplate_list.get_plate(idx); - if (!plate) - continue; + if (!plate) continue; auto filament_map = plate->get_filament_maps(); auto filament_volume_map = plate->get_filament_volume_maps(); - if (filament_map.empty() || filament_volume_map.empty()) - continue; + if (filament_map.empty() || filament_volume_map.empty()) continue; if (filament_volume_map.size() < filament_map.size()) { filament_volume_map.resize(filament_map.size(), static_cast(NozzleVolumeType::nvtStandard)); } @@ -21982,10 +22096,16 @@ void Plater::init_environment_texture() p->environment_texture.load_from_file(resources_dir() + "/images/Pmetal_001.png", false, GLTexture::SingleThreaded, false); } -unsigned int Plater::get_environment_texture_id() const { return p->environment_texture.get_id(); } +unsigned int Plater::get_environment_texture_id() const +{ + return p->environment_texture.get_id(); +} #endif // ENABLE_ENVIRONMENT_MAP -const BuildVolume& Plater::build_volume() const { return p->bed.build_volume(); } +const BuildVolume& Plater::build_volume() const +{ + return p->bed.build_volume(); +} // BBS #if 0 @@ -22000,24 +22120,42 @@ GLToolbar& Plater::get_view_toolbar() } #endif -const GLToolbar& Plater::get_collapse_toolbar() const { return p->collapse_toolbar; } +const GLToolbar& Plater::get_collapse_toolbar() const +{ + return p->collapse_toolbar; +} -GLToolbar& Plater::get_collapse_toolbar() { return p->collapse_toolbar; } +GLToolbar& Plater::get_collapse_toolbar() +{ + return p->collapse_toolbar; +} -void Plater::update_preview_bottom_toolbar() { p->update_preview_bottom_toolbar(); } +void Plater::update_preview_bottom_toolbar() +{ + p->update_preview_bottom_toolbar(); +} void Plater::reset_gcode_toolpaths() { - // BBS: add some logs + //BBS: add some logs BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": reset the gcode viewer's toolpaths"); p->reset_gcode_toolpaths(); } -const Mouse3DController& Plater::get_mouse3d_controller() const { return p->mouse3d_controller; } +const Mouse3DController& Plater::get_mouse3d_controller() const +{ + return p->mouse3d_controller; +} -Mouse3DController& Plater::get_mouse3d_controller() { return p->mouse3d_controller; } +Mouse3DController& Plater::get_mouse3d_controller() +{ + return p->mouse3d_controller; +} -NotificationManager* Plater::get_notification_manager() { return p->notification_manager.get(); } +NotificationManager * Plater::get_notification_manager() +{ + return p->notification_manager.get(); +} DailyTipsWindow* Plater::get_dailytips() const { @@ -22025,11 +22163,20 @@ DailyTipsWindow* Plater::get_dailytips() const return dailytips_win; } -const NotificationManager* Plater::get_notification_manager() const { return p->notification_manager.get(); } +const NotificationManager * Plater::get_notification_manager() const +{ + return p->notification_manager.get(); +} -void Plater::init_notification_manager() { p->init_notification_manager(); } +void Plater::init_notification_manager() +{ + p->init_notification_manager(); +} -void Plater::show_status_message(std::string s) { BOOST_LOG_TRIVIAL(trace) << "show_status_message:" << s; } +void Plater::show_status_message(std::string s) +{ + BOOST_LOG_TRIVIAL(trace) << "show_status_message:" << s; +} bool Plater::can_delete() const { return p->can_delete(); } bool Plater::can_delete_all() const { return p->can_delete_all(); } @@ -22048,10 +22195,9 @@ bool Plater::can_arrange() const { return p->can_arrange(); } bool Plater::can_layers_editing() const { return p->can_layers_editing(); } bool Plater::can_paste_from_clipboard() const { - if (!IsShown() || !p->is_view3D_shown()) - return false; + if (!IsShown() || !p->is_view3D_shown()) return false; - const Selection& selection = p->view3D->get_canvas3d()->get_selection(); + const Selection& selection = p->view3D->get_canvas3d()->get_selection(); const Selection::Clipboard& clipboard = selection.get_clipboard(); if (clipboard.is_empty() && p->sidebar->obj_list()->clipboard_is_empty()) @@ -22070,7 +22216,7 @@ bool Plater::can_paste_from_clipboard() const return true; } -// BBS support cut +//BBS support cut bool Plater::can_cut_to_clipboard() const { if (is_selection_empty()) @@ -22096,7 +22242,7 @@ bool Plater::can_copy_to_clipboard() const bool Plater::can_undo() const { return IsShown() && p->is_view3D_shown() && p->undo_redo_stack().has_undo_snapshot(); } bool Plater::can_redo() const { return IsShown() && p->is_view3D_shown() && p->undo_redo_stack().has_redo_snapshot(); } bool Plater::can_reload_from_disk() const { return p->can_reload_from_disk(); } -// BBS +//BBS bool Plater::can_fillcolor() const { return p->can_fillcolor(); } bool Plater::has_assmeble_view() const { return p->has_assemble_view(); } bool Plater::can_replace_with_stl() const { return p->can_replace_with_stl(); } @@ -22113,33 +22259,53 @@ void Plater::enter_gizmos_stack() { p->enter_gizmos_stack(); } bool Plater::leave_gizmos_stack() { return p->leave_gizmos_stack(); } // BBS: return false if not changed bool Plater::inside_snapshot_capture() { return p->inside_snapshot_capture(); } -void Plater::toggle_render_statistic_dialog() { p->show_render_statistic_dialog = !p->show_render_statistic_dialog; } +void Plater::toggle_render_statistic_dialog() +{ + p->show_render_statistic_dialog = !p->show_render_statistic_dialog; +} -bool Plater::is_render_statistic_dialog_visible() const { return p->show_render_statistic_dialog; } +bool Plater::is_render_statistic_dialog_visible() const +{ + return p->show_render_statistic_dialog; +} -void Plater::toggle_show_wireframe() { p->show_wireframe = !p->show_wireframe; } +void Plater::toggle_show_wireframe() +{ + p->show_wireframe = !p->show_wireframe; +} -bool Plater::is_show_wireframe() const { return p->show_wireframe; } +bool Plater::is_show_wireframe() const +{ + return p->show_wireframe; +} -void Plater::enable_wireframe(bool status) { p->wireframe_enabled = status; } +void Plater::enable_wireframe(bool status) +{ + p->wireframe_enabled = status; +} + +bool Plater::is_wireframe_enabled() const +{ + return p->wireframe_enabled; +} -bool Plater::is_wireframe_enabled() const { return p->wireframe_enabled; } /*Plater::TakeSnapshot::TakeSnapshot(Plater *plater, const std::string &snapshot_name) : TakeSnapshot(plater, from_u8(snapshot_name)) {} Plater::TakeSnapshot::TakeSnapshot(Plater* plater, const std::string& snapshot_name, UndoRedo::SnapshotType snapshot_type) : TakeSnapshot(plater, from_u8(snapshot_name), snapshot_type) {}*/ + // Wrapper around wxWindow::PopupMenu to suppress error messages popping out while tracking the popup menu. -bool Plater::PopupMenu(wxMenu* menu, const wxPoint& pos) +bool Plater::PopupMenu(wxMenu *menu, const wxPoint& pos) { // Don't want to wake up and trigger reslicing while tracking the pop-up menu. SuppressBackgroundProcessingUpdate sbpu; // When tracking a pop-up menu, postpone error messages from the slicing result. m_tracking_popup_menu = true; - bool out = wxGetApp().mainframe->PopupMenu(menu, pos); + bool out = wxGetApp().mainframe->PopupMenu(menu, pos); m_tracking_popup_menu = false; - if (!m_tracking_popup_menu_error_message.empty()) { + if (! m_tracking_popup_menu_error_message.empty()) { // Don't know whether the CallAfter is necessary, but it should not hurt. // The menus likely sends out some commands, so we may be safer if the dialog is shown after the menu command is processed. wxString message = std::move(m_tracking_popup_menu_error_message); @@ -22148,19 +22314,27 @@ bool Plater::PopupMenu(wxMenu* menu, const wxPoint& pos) } return out; } -void Plater::bring_instance_forward() { p->bring_instance_forward(); } +void Plater::bring_instance_forward() +{ + p->bring_instance_forward(); +} -bool Plater::need_update() const { return p->need_update(); } +bool Plater::need_update() const +{ + return p->need_update(); +} -void Plater::set_need_update(bool need_update) { p->set_need_update(need_update); } +void Plater::set_need_update(bool need_update) +{ + p->set_need_update(need_update); +} // BBS -// BBS: add popup logic for table object +//BBS: add popup logic for table object bool Plater::PopupObjectTable(int object_id, int volume_id, const wxPoint& position) { - if (dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER))->m_extruders_count > 1) { - MessageDialog dlg(this, _L("Currently, the object configuration form cannot be used with a multiple-extruder printer."), - _L("Not available"), wxOK | wxICON_WARNING); + if (dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER))->m_extruders_count > 1) { + MessageDialog dlg(this, _L("Currently, the object configuration form cannot be used with a multiple-extruder printer."), _L("Not available"), wxOK | wxICON_WARNING); dlg.ShowModal(); return false; } @@ -22171,34 +22345,41 @@ bool Plater::PopupObjectTableBySelection() { wxDataViewItem item; int obj_idx, vol_idx; - const wxPoint pos = wxPoint(0, 0); // Fake position + const wxPoint pos = wxPoint(0, 0); //Fake position wxGetApp().obj_list()->get_selected_item_indexes(obj_idx, vol_idx, item); return p->PopupObjectTable(obj_idx, vol_idx, pos); } -void Plater::update_title_dirty_status() { p->update_title_dirty_status(); } +void Plater::update_title_dirty_status() +{ + p->update_title_dirty_status(); +} -wxMenu* Plater::plate_menu() { return p->menus.plate_menu(); } -wxMenu* Plater::object_menu() { return p->menus.object_menu(); } -wxMenu* Plater::part_menu() { return p->menus.part_menu(); } -wxMenu* Plater::text_part_menu() { return p->menus.text_part_menu(); } -wxMenu* Plater::svg_part_menu() { return p->menus.svg_part_menu(); } -wxMenu* Plater::sla_object_menu() { return p->menus.sla_object_menu(); } -wxMenu* Plater::default_menu() { return p->menus.default_menu(); } -wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); } -wxMenu* Plater::layer_menu() { return p->menus.layer_menu(); } -wxMenu* Plater::multi_selection_menu() { return p->menus.multi_selection_menu(); } -wxMenu* Plater::filament_action_menu(int active_filament_menu_id) { return p->menus.filament_action_menu(active_filament_menu_id); } -int Plater::GetPlateIndexByRightMenuInLeftUI() { return p->m_is_RightClickInLeftUI; } -void Plater::SetPlateIndexByRightMenuInLeftUI(int index) { p->m_is_RightClickInLeftUI = index; } -SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() - : m_was_scheduled(wxGetApp().plater()->is_background_process_update_scheduled()) -{ wxGetApp().plater()->suppress_background_process(m_was_scheduled); } + +wxMenu* Plater::plate_menu() { return p->menus.plate_menu(); } +wxMenu* Plater::object_menu() { return p->menus.object_menu(); } +wxMenu* Plater::part_menu() { return p->menus.part_menu(); } +wxMenu* Plater::text_part_menu() { return p->menus.text_part_menu(); } +wxMenu* Plater::svg_part_menu() { return p->menus.svg_part_menu(); } +wxMenu* Plater::sla_object_menu() { return p->menus.sla_object_menu(); } +wxMenu* Plater::default_menu() { return p->menus.default_menu(); } +wxMenu* Plater::instance_menu() { return p->menus.instance_menu(); } +wxMenu* Plater::layer_menu() { return p->menus.layer_menu(); } +wxMenu* Plater::multi_selection_menu() { return p->menus.multi_selection_menu(); } +wxMenu *Plater::filament_action_menu(int active_filament_menu_id) { return p->menus.filament_action_menu(active_filament_menu_id); } +int Plater::GetPlateIndexByRightMenuInLeftUI() { return p->m_is_RightClickInLeftUI; } +void Plater::SetPlateIndexByRightMenuInLeftUI(int index) { p->m_is_RightClickInLeftUI = index; } +SuppressBackgroundProcessingUpdate::SuppressBackgroundProcessingUpdate() : + m_was_scheduled(wxGetApp().plater()->is_background_process_update_scheduled()) +{ + wxGetApp().plater()->suppress_background_process(m_was_scheduled); +} SuppressBackgroundProcessingUpdate::~SuppressBackgroundProcessingUpdate() -{ wxGetApp().plater()->schedule_background_process(m_was_scheduled); } -wxString get_view_type_string(Camera::ViewAngleType type) { + wxGetApp().plater()->schedule_background_process(m_was_scheduled); +} +wxString get_view_type_string(Camera::ViewAngleType type) { switch (type) { case Slic3r::GUI::Camera::ViewAngleType::Iso: return _L("isometric"); case Slic3r::GUI::Camera::ViewAngleType::Top_Front: return _L("top_front"); @@ -22211,12 +22392,11 @@ wxString get_view_type_string(Camera::ViewAngleType type) default: return ""; } } -wxArrayString get_all_camera_view_type() -{ +wxArrayString get_all_camera_view_type() { wxArrayString all_types; - for (size_t i = 0; i < (int) Camera::ViewAngleType::Count_ViewAngleType; i++) { + for (size_t i = 0; i < (int)Camera::ViewAngleType::Count_ViewAngleType; i++) { all_types.Add(get_view_type_string((Camera::ViewAngleType) i)); } return all_types; } -}} // namespace Slic3r::GUI +}} // namespace Slic3r::GUI diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index d30b40004d..5c38859a12 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -866,6 +866,65 @@ SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer ta } } +// A minimal published 3MF must not leak the slicer tags of the source project. The exporter seeds +// metadata_item_map from the input file's metadata_items, so re-publishing a project opened from a +// regular Orca/BBS 3MF (the typical remix flow) must strip the Application / OrcaSlicer tags it +// came with, otherwise old receivers route onto the baked-in "old version" popup. +SCENARIO("MinimalPublished strips slicer tags carried by the source project", "[3mf]") { + GIVEN("a model loaded from a regular Orca/BBS 3MF whose metadata carries the slicer tags") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items["Application"] = "BambuStudio-2.0.0"; + model.model_info->metadata_items["OrcaSlicer"] = "2.1.0"; + + ScopedTemporaryDir backup_dir("orca_strip_tags"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored using SaveStrategy::MinimalPublished and reloaded") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector loaded_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &loaded_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the source slicer tags are stripped, not carried through") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items.count("Application") == 0); + REQUIRE(dst_model.model_info->metadata_items.count("OrcaSlicer") == 0); + // The published marker itself must survive. + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + } + THEN("the file classifies as a generic 3MF without a version popup") { + REQUIRE_FALSE(is_bbl_3mf); + REQUIRE_FALSE(is_orca_3mf); + REQUIRE_FALSE(file_version.valid()); + } + release_PlateData_list(dst_plates); + } + } +} + // An entry masks the non-published slots to their defaults so publishing slot 1 never leaks slot // 0's value into the file. Both a full entry (the whole-slot key list) and a partial entry (a // per-slot key) go through the same masking path in filter_published_config (keys and full_keys @@ -938,6 +997,40 @@ SCENARIO("Unmaskable keys are dropped from the published payload instead of leak } } +// A per-extruder printer key carrying a "#N" variant (e.g. retraction_length#1) must not serialize +// every extruder's value: the base is masked to the author's extruder and the other slots are +// restored to their option default, matching the material-side slot-masking invariant. A bare +// printer base key (no variant) keeps whole-vector serialization. +SCENARIO("Published per-extruder printer keys mask the other extruders to their defaults", "[3mf]") { + GIVEN("a full print configuration with three extruders carrying per-extruder retraction values") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + // Non-default values on the un-selected slots, so a leak is distinguishable from the mask + // restoring the option default (retraction_length defaults to {0.8}). + full_cfg.opt("retraction_length")->values = { 3.0, 1.2, 4.0 }; + + WHEN("filtering with only extruder 1's retraction_length checked") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, { "retraction_length#1" }, {}); + + THEN("the author's extruder value survives") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[1], Catch::Matchers::WithinAbs(1.2, 1e-6)); + } + THEN("the other extruders are masked to their default") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[0], Catch::Matchers::WithinAbs(0.8, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[2], Catch::Matchers::WithinAbs(0.8, 1e-6)); + } + } + WHEN("filtering the bare base key without a '#N' variant") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, { "retraction_length" }, {}); + + THEN("the whole vector is serialized unmasked") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[0], Catch::Matchers::WithinAbs(3.0, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[1], Catch::Matchers::WithinAbs(1.2, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[2], Catch::Matchers::WithinAbs(4.0, 1e-6)); + } + } + } +} + // The extended per-entry fields (full dump list, published type and colour) travel inside the // published_material_keys metadata and round-trip unchanged. SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { From bcff39661cb4c58104ee82c558b2e62484c0db19 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Thu, 3 Sep 2026 13:40:58 +0800 Subject: [PATCH 091/208] Comments and dead code cleanup --- src/libslic3r/PresetBundle.cpp | 75 ++++++++-------------------- src/libslic3r/PublishSettings.hpp | 55 ++++++++------------ src/slic3r/GUI/KBShortcutsDialog.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 19 +++++-- 4 files changed, 57 insertions(+), 94 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index e4bafd0071..4c4114345e 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5220,29 +5220,18 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // Material pass: positional per-slot entries. The author published, per slot, either the // entire filament (full) or specific keys plus optionally a curated type and/or colour. - // - full: the slot always lands on a freshly created standalone detached copy - // ("Detach from parent", project-embedded, universally compatible, within-load - // deduped) - handled up front in the entry loop below; no library preset is ever - // reused or mutated; - // - partial: a type requirement gates the application - on type match (or no - // requirement) the keys are applied onto the slot's effective preset; on mismatch - // the slot is replaced with the best visible candidate, scored by the published - // identity (exact preset name resolved through the collection's name machinery, - // then exact setting_id, exact filament_id, then vendor+type, then type only); a - // preset no other slot references wins on equal scores; with no replacement - // available the receiver's material is kept and the keys are reported as skipped; - // - colour: applied to the slot regardless of the type gate. - // - capacity: on a non-SEMM receiver whose printer has fewer nozzles than the - // authored slot needs, the entry becomes an empty mixed-filament placeholder - // appended at the tail (the GUI flags it; the user assigns components from their - // own filaments); on a single-physical-slot receiver it is dropped and reported - // instead, since an empty mix could never be edited there. + // - full: lands on a freshly created standalone detached copy (no library preset used + // or mutated); + // - partial: a type requirement gates application; on mismatch the slot is replaced + // with the best visible candidate by published identity (exact name, setting_id, + // filament_id, vendor+type, type); with no replacement the receiver's material is + // kept and the keys are reported as skipped; + // - colour: applied regardless of the type gate. + // - capacity: past the printer's physical nozzles the entry becomes an empty + // mixed-filament placeholder; on a single-physical-slot receiver it is dropped. // Applied partial values land on the collection's edited layer when the slot references - // it and that layer survives the load (visible as a modification, revertible, the user's - // unsaved edits preserved), otherwise on the stored preset in place. - // To keep slot-to-slot aliasing (several slots referencing one preset) from leaking one - // slot's values into another, published slots sharing a preset with another slot are - // re-pointed at distinct presets before the values are applied. + // it and that layer survives the load, otherwise on the stored preset in place. Slots + // aliasing a shared preset are re-pointed at distinct presets before the values apply. { // Grow the receiver's slots only as far as the highest published slot (never // shrink, never pull filler materials for unpublished slots). @@ -5281,26 +5270,13 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool grow_target = std::max(grow_target, size_t(entry.slot) + 1); } // Mixed-filament definitions live in project-level virtual slots, so applying one - // positionally onto a receiver slot that holds a real, physical filament would - // silently convert hardware-backed state into a virtual mix. Compute each mixed - // entry's destination before anything consumes entry.slot (growth, seeding, - // de-aliasing, the overlay below): - // - a definition landing on a receiver slot that already carries a mixed - // definition keeps its place (a like-for-like override of a virtual slot); - // - everything else goes through one monotone append counter preserving author - // order: dest = max(authored, next_free). With a receiver shorter than the - // publish this keeps the authored positions intact; past them (or around a - // collision with a real filament) the mixes pack onto consecutive fresh slots - // AFTER every positional (real-filament) territory. The definition's cells are - // shifted inside the file-side per-slot mixed arrays so they stay readable - // from the new index. No existing slot changes meaning. - // - destinations are also capped: appends past the extruder limit are dropped - // and reported instead of being forced onto a physical filament. - // Physical entries past the printer's capacity join the same append counter - // (dest = next_free, packed consecutively at the tail - never max(authored, - // next_free), which would grow filler physical slots past the capacity) and are - // flagged mixed_placeholder: they become empty mixed-filament placeholders the - // GUI flags for the user to assign components to. + // positionally onto a receiver slot holding a real filament would convert hardware + // state into a virtual mix. Compute each entry's destination before anything + // consumes entry.slot: a definition on a slot that already holds a mixed definition + // keeps its place (like-for-like); everything else follows one monotone append + // counter preserving author order (dest = max(authored, next_free)). Appends past + // the extruder limit are dropped and reported. Physical entries past capacity join + // the same counter as mixed_placeholder empties the GUI flags for assignment. size_t next_free_slot = this->filament_presets.size(); bool any_mixed_relocated = false; // All authored-slot -> destination moves decided by this pass, applied to the @@ -5441,20 +5417,12 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool const auto it = exact_name_by_slot.find(slot); return it == exact_name_by_slot.end() ? std::string() : it->second; }; - std::set used_preset_names(this->filament_presets.begin(), this->filament_presets.end()); // Mirror first_visible_idx()'s start index so suppressed default presets are // never picked as a slot material. const size_t first_candidate = this->filaments.is_default_suppressed() ? this->filaments.num_default_presets() : 0; - // Candidate preference for a published entry: exact preset name (the raw author - // name and the collection-resolved name - renames, removed vendor-generic - // library fallback - both identify the exact preset, unambiguous even when ids - // are shared between variants or missing from older files), then the trimmed - // bare form / alias ("Generic PLA" from "Generic PLA @System"): a same-family - // match that must never outrank the exact preset, then exact setting_id - // (variant-level, since "Generic PLA" and "Generic PLA Matte" share - // filament_id), then exact filament_id, then vendor+type, then type only (a - // type-only pick may surface an unrelated preset, e.g. a different vendor's - // PLA). + // Candidate preference for a published entry: exact preset name (raw author and + // collection-resolved), then trimmed bare form / alias, then exact setting_id + // (variant-level), then exact filament_id, then vendor+type, then type only. auto candidate_score = [](const Preset& candidate, const PublishedMaterialEntry& entry, const std::string& resolved_name) -> int { // Exact preset name: raw and collection-resolved forms both outrank the @@ -5512,7 +5480,6 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool initial_preset = this->filament_presets.empty() ? this->filaments.first_visible().name : this->filament_presets.back(); this->filament_presets.emplace_back(initial_preset); - used_preset_names.insert(initial_preset); } // Published slots that alias another slot (multi-extruder with one filament) // get re-pointed at distinct presets: the overlay writes onto the slot's diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp index d7f2c13c5f..60ea9a8354 100644 --- a/src/libslic3r/PublishSettings.hpp +++ b/src/libslic3r/PublishSettings.hpp @@ -10,20 +10,16 @@ class PresetBundle; std::string publish_base_key(const std::string &key); // Structural keys that are never applied onto the receiver's presets when loading a published -// 3MF (single source of truth for the denylist): applying them would rewrite the user's preset -// inheritance/structure. filament_ids is nevertheless exported via the identity list in -// filter_published_config because 3MF validation needs it - exported, never applied. +// 3MF (single source of truth for the denylist); applying them would rewrite the user's preset +// inheritance/structure. filament_ids is still exported via the identity list (3MF validation +// needs it) - exported, never applied. const std::set& publish_structural_keys(); // The mixed-color filament project keys (parallel per-slot arrays, see PresetBundle's -// s_project_options): a mixed slot's full definition - which slots it blends, the sublayer -// ratios and the optional Z-gradient description. A published mixed slot always serializes -// these keys; on import they are applied into the receiver's project_config (not a filament -// preset), so the mix survives the round-trip. +// s_project_options). Import applies them into project_config, not a filament preset. const std::set& publish_mixed_keys(); -// One row of the printer tab's "Retraction" / "Z-Hop" optgroups (key + tab icon id), kept -// together so the tab can later be migrated onto these lists. +// One row of the printer tab's "Retraction" / "Z-Hop" optgroups (config key + tab icon id). struct PublishablePrinterOption { const char *key; // config key, e.g. "retraction_length" const char *icon; // tab icon id, e.g. "printer_extruder_retraction#length" @@ -33,8 +29,8 @@ struct PublishablePrinterOption { const std::vector& publishable_printer_retraction_options(); const std::vector& publishable_printer_z_hop_options(); -// Union of the two optgroup option lists; the published-3MF overlay applies printer keys only -// when their base key is in this allowlist (anything else is contract-excluded). +// Union of the two optgroup option lists; printer keys apply on import only if their base +// key is in this allowlist. const std::set& publishable_printer_keys(); // Union of setting keys differing from the base/system preset across the current print, @@ -60,32 +56,25 @@ struct PublishedMaterialEntry { // 0-based author filament slot; -1 (hand-crafted files) is skipped. int slot{-1}; std::vector keys; - // "Full Publish": the whole filament preset (full_keys) is published. On the receiver - // Full Publish always creates a standalone parentless copy (libslic3r's "Detach from - // parent"): a new project-embedded preset ("Preset Inside Project") with the full - // resolved config, universally compatible (compatible_printers/condition cleared). - // It lives inside the loaded project only - never written to the user's library, - // no existing preset is ever selected-by-reference or mutated. Identical Full - // entries inside one load share one created instance (within-load dedup). + // "Full Publish": the whole filament preset (full_keys) is published. On the receiver Full + // Publish always creates a standalone parentless copy (libslic3r's "Detach from parent"), + // universally compatible and project-embedded only - never written to the user's library. + // Identical Full entries within one load share one created instance (within-load dedup). bool full{false}; // All non-structural filament keys of the author's slot preset; values travel in the file // config, masked to the author's slot index. std::vector full_keys; // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on a - // partial entry's mismatch the slot is replaced with a same-type filament from the - // receiver's library. Full entries consult no gate: they detach unconditionally, and the - // copy carries whatever values the payload bakes. + // partial entry's mismatch the slot is replaced with a same-type filament. Full entries + // consult no gate. bool publish_type{false}; std::string publish_type_value; // Required filament colour, applied on load regardless of the type match. bool publish_color{false}; std::string color; - // Import-side only, never serialized: the entry's authored slot sits past the receiver - // printer's physical filament capacity, so instead of growing a physical slot the entry - // is appended as an empty mixed-filament placeholder (virtual tail slot; the GUI flags - // it and the user assigns components from their own filaments). The flag also keeps the - // entry out of the payload mixed-definition validation and the value-apply passes, - // which only make sense for a slot that carries a real material. + // Import-side only, never serialized: the authored slot sits past the receiver's physical + // capacity, so the entry is appended as an empty mixed-filament placeholder (virtual tail + // slot; the GUI flags it for the user to assign components). bool mixed_placeholder{false}; }; @@ -93,16 +82,12 @@ struct PublishedMaterialEntry { std::string normalize_filament_type(const std::string& type); class DynamicPrintConfig; -// Clear the compatibility lists/conditions on a filament config so it is compatible -// with every printer and every print profile. A detached published material is -// universally compatible by construction: the baseline clone may carry machine-specific -// restrictions. Empty lists + empty conditions => compatible with everything -// (see is_compatible_with_printer, Preset.cpp:840). +// Clear the compatibility lists/conditions on a filament config so it is universally +// compatible once detached (empty lists + empty conditions = compatible with everything). void make_publish_universal(DynamicPrintConfig &config); -// Naming base for a detached published-material copy: "Generic PLA @System" -> -// "Generic PLA" (truncate at the first '@' variant tail, right-trimmed). Unchanged -// when the name carries no '@'. Empty result means "fall back to identity fields". +// Naming base for a detached published-material copy: "Generic PLA @System" -> "Generic PLA" +// (truncate/right-trim at the first '@' tail). Empty result means "fall back to identity". std::string publish_material_base_name(const std::string &preset_name); // Minimal DynamicPrintConfig for a published 3MF export: only the selected published keys, diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index df69fa5434..2f882e35aa 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -174,7 +174,7 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "O", L("Open Project") }, { ctrl + "S", L("Save Project") }, { ctrl + shift + "S", L("Save Project as")}, - { ctrl + shift + "E", L("Publish") }, + { ctrl + shift + "E", L("Publish 3MF") }, // File>Import { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, // File>Export diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0d2c5ac4c9..a1915a1200 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -15300,11 +15300,12 @@ void Plater::load_project(wxString const& filename2, if (using_exported_file()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " using ecported set project filename: " << filename; p->set_project_filename(filename); - } else if (loaded_published) { + } else if (loaded_published && !res.empty()) { // A "published" 3MF loads as a new project: its path must not become the project // filename (Save/Ctrl-S prompts for a destination instead of overwriting it); // reset() already cleared the project name, so restore the default title and keep - // the file in recents. + // the file in recents. Only on a successful load (res not empty): a failed or + // cancelled load must not pollute "Recently opened". p->set_project_name(_L("Untitled")); if (!filename.IsEmpty()) wxGetApp().mainframe->add_to_recent_projects(filename); @@ -18316,8 +18317,18 @@ int Plater::export_published_3mf(const std::vector& published_keys, DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); std::string payload; - for (const std::string& key : filtered_cfg.keys()) - payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; + for (const std::string& key : filtered_cfg.keys()) { + // A value containing a newline would break the INI written below (read_ini throws), + // so load_from_ini_string discards the whole settings block on import. Skip such + // keys instead of silently dropping every setting. + std::string value = filtered_cfg.opt_serialize(key); + if (value.find('\n') != std::string::npos) { + BOOST_LOG_TRIVIAL(warning) << "publish: dropping key \"" << key + << "\" from the published payload (value contains a newline)"; + continue; + } + payload += key + " = " + value + "\n"; + } model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = std::move(payload); // Same file layout as save_project(), plus Silence (so export_3mf does not set the project From 904796cf24eb64a336bdae22263260822b2be818 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Thu, 3 Sep 2026 14:12:51 +0800 Subject: [PATCH 092/208] Correctness fixes. Remove hard-coded appends for printer settings --- src/libslic3r/Format/bbs_3mf.cpp | 119 +++++++++++++++++++++++++------ src/slic3r/GUI/Plater.cpp | 6 +- src/slic3r/GUI/Tab.cpp | 31 +++----- 3 files changed, 111 insertions(+), 45 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 4b9c666ce0..20e63e9d5e 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -6999,16 +6999,24 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // as From_Other and import the geometry silently. if (m_minimal_published) { // metadata_item_map is seeded from the input file's metadata_items above, so a - // project opened from a regular Orca/BBS 3MF still carries the Application / - // OrcaSlicer tags it came with. Erase them: skipping the overwrite is not enough, - // and an empty value would still emit a "present-looking" tag to old receivers. + // project opened from a regular Orca/BBS 3MF still carries the slicer-identifying + // tags it came with. Erase every one of them - not just the two most common - + // so a published 3MF is fully tag-less: old receivers classify it as From_Other + // and import the geometry silently instead of showing a baked-in "old version" + // popup, and no version marker survives to seed a later re-save. metadata_item_map.erase(BBL_APPLICATION_TAG); metadata_item_map.erase(ORCASLICER_TAG); + metadata_item_map.erase(BBS_3MF_VERSION); + metadata_item_map.erase(BBS_3MF_VERSION1); } else { metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); } } - metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); + // The Bambu 3MF version marker is part of the slicer identity: omit it for a minimal + // published file along with the tags erased above (skipping the overwrite alone would + // leave the value the source file seeded into metadata_item_map). + if (!m_minimal_published) + metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); if (!model.mk_name.empty()) { metadata_item_map[BBL_MAKERLAB_TAG] = xml_escape(model.mk_name); @@ -7031,10 +7039,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) BOOST_LOG_TRIVIAL(info) << "bbs_3mf: save key= " << item.first << ", value = " << item.second; stream << " <" << METADATA_TAG << " name=\"" << item.first << "\">" << xml_escape(item.second) << "\n"; - if (item.first == BBL_APPLICATION_TAG) { + if (item.first == BBL_APPLICATION_TAG && !m_minimal_published) { // The OrcaSlicer tag is only written for files that carry the Application // tag, which a minimal published 3MF erases (see the map assignment above): - // the branch below is unreachable in minimal mode. + // the explicit !m_minimal_published guard keeps the tag-less guarantee from + // depending on that erase happening to run first. stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" << xml_escape(SoftFever_VERSION) << "\n"; } @@ -9213,6 +9222,68 @@ std::string bbs_3mf_get_thumbnail(const char *path) return data; } +namespace { + +// Parses just the model-file elements, mirroring the importer's +// _handle_start_metadata/_handle_end_metadata (attribute-order independent, entity-unescaped, +// whitespace tolerant). Stops the parser as soon as the published flag node is read so the +// geometry/resources that follow are skipped, which keeps the per-file cost small. +struct PublishedXmlProbe +{ + XML_Parser parser{nullptr}; + bool in_metadata{false}; + bool found{false}; + bool published{false}; + std::string curr_name; + std::string curr_value; + + static std::string attribute(const char** attrs, const char* key) + { + if (attrs == nullptr) + return std::string(); + // expat hands the attrs as a NULL-terminated {name, value, ...} array. + for (unsigned int a = 0; attrs[a] != nullptr; a += 2) + if (::strcmp(attrs[a], key) == 0 && attrs[a + 1] != nullptr) + return attrs[a + 1]; + return std::string(); + } + + static void XMLCALL start(void* user_data, const char* name, const char** attrs) + { + auto* self = static_cast(user_data); + if (::strcmp(name, METADATA_TAG) == 0) { + self->in_metadata = true; + self->curr_name = attribute(attrs, NAME_ATTR); + self->curr_value.clear(); + } else { + self->in_metadata = false; + } + } + + static void XMLCALL characters(void* user_data, const XML_Char* s, int len) + { + auto* self = static_cast(user_data); + if (self->in_metadata) + self->curr_value.append(s, len); + } + + static void XMLCALL end(void* user_data, const char* name) + { + auto* self = static_cast(user_data); + if (!self->in_metadata || ::strcmp(name, METADATA_TAG) != 0) + return; + self->in_metadata = false; + if (self->curr_name == ORCA_PUBLISHED_TAG) { + self->published = is_published_3mf_flag(xml_unescape(self->curr_value)); + self->found = true; + if (self->parser != nullptr) + XML_StopParser(self->parser, false); + } + } +}; + +} // namespace + bool bbs_3mf_is_published(const std::string &path) { mz_zip_archive archive; @@ -9234,7 +9305,8 @@ bool bbs_3mf_is_published(const std::string &path) if (!open_zip_reader(&archive, path)) return false; - // Read just the model XML and locate the published metadata node; no geometry parsing. + // Read just the model XML (the metadata node sits before the resources, so the probe below + // stops early) rather than by a raw substring match; no geometry parsing. int index = mz_zip_reader_locate_file(&archive, MODEL_FILE.c_str(), nullptr, 0); if (index < 0) return false; @@ -9245,22 +9317,29 @@ bool bbs_3mf_is_published(const std::string &path) if (!mz_zip_reader_extract_to_mem(&archive, index, xml.data(), xml.size(), 0)) return false; - const std::string needle = std::string(""; - size_t pos = xml.find(needle); - if (pos == std::string::npos) - return false; - pos += needle.size(); - size_t end = xml.find("", pos); - if (end == std::string::npos) + XML_Parser parser = XML_ParserCreate(nullptr); + if (parser == nullptr) return false; - size_t value_begin = pos, value_end = end; - while (value_begin < value_end && (xml[value_begin] == ' ' || xml[value_begin] == '\t' || xml[value_begin] == '\n' || xml[value_begin] == '\r')) - ++value_begin; - while (value_end > value_begin && (xml[value_end - 1] == ' ' || xml[value_end - 1] == '\t' || xml[value_end - 1] == '\n' || xml[value_end - 1] == '\r')) - --value_end; + PublishedXmlProbe probe; + probe.parser = parser; + XML_SetUserData(parser, &probe); + XML_SetElementHandler(parser, PublishedXmlProbe::start, PublishedXmlProbe::end); + XML_SetCharacterDataHandler(parser, PublishedXmlProbe::characters); + // Never resolve external entities from a file we are only probing. + XML_SetExternalEntityRefHandler(parser, nullptr); + XML_SetEntityDeclHandler(parser, nullptr); - return is_published_3mf_flag(xml.substr(value_begin, value_end - value_begin)); + const XML_Status status = XML_Parse(parser, xml.data(), static_cast(xml.size()), 1); + // XML_StopParser(parser, false) from the end handler makes XML_Parse return + // XML_STATUS_ERROR with XML_ERROR_ABORTED - treat that as success (we stopped on the flag). + const bool parse_ok = (status == XML_STATUS_OK) || + (XML_GetErrorCode(parser) == XML_ERROR_ABORTED && probe.found); + XML_ParserFree(parser); + + if (!parse_ok) + return false; + return probe.published; } bool load_gcode_3mf_from_stream(std::istream &data, DynamicPrintConfig *config, Model *model, PlateDataPtrs *plate_data_list, Semver *file_version) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a1915a1200..86815bb7ab 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -8752,7 +8752,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ } Semver old_version(1, 5, 9); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && (file_version < old_version) && load_model && load_config && !config_loaded.empty()) { + // A published 3MF has no project config to migrate: skip the old-version + // translations even if a slicer tag slipped through classification. + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && (file_version < old_version) && !published_config.published && load_model && load_config && !config_loaded.empty()) { translate_old = true; partplate_list.get_plate_size(current_width, current_depth, current_height); } @@ -8854,7 +8856,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ { // BBS: modify the prime tower params for old version file Semver old_version3(2, 0, 0); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && file_version < old_version3) { + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && !published_config.published && file_version < old_version3) { double old_filament_prime_volume = 0.; int filament_count = 0; { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 96382855ad..962d59d9ca 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -7,6 +7,7 @@ #include "libslic3r/FilamentMixer.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/PublishSettings.hpp" #include "libslic3r/GCode/GCodeProcessor.hpp" #include "Search.hpp" @@ -5699,32 +5700,16 @@ if (is_marlin_flavor) optgroup->append_single_option_line("extruder_offset", "printer_extruder_basic_information#extruder-offset-position", extruder_idx); //BBS: don't show retract related config menu in machine page - // Keep this optgroup's options in sync with publishable_printer_retraction_options() - // in libslic3r/PublishSettings.hpp: the published-3MF printer allowlist is its union - // with the Z-Hop optgroup below. + // These optgroups are built from publishable_printer_retraction/z_hop_options() so the + // published-3MF printer allowlist (their union in libslic3r/PublishSettings.hpp) can + // never drift from what the machine page actually shows. optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); - optgroup->append_single_option_line("retraction_length", "printer_extruder_retraction#length", extruder_idx); - optgroup->append_single_option_line("retract_restart_extra", "printer_extruder_retraction#extra-length-on-restart", extruder_idx); - optgroup->append_single_option_line("retraction_speed", "printer_extruder_retraction#retraction-speed", extruder_idx); - optgroup->append_single_option_line("deretraction_speed", "printer_extruder_retraction#deretraction-speed", extruder_idx); - optgroup->append_single_option_line("retraction_minimum_travel", "printer_extruder_retraction#travel-distance-threshold", extruder_idx); - optgroup->append_single_option_line("retract_when_changing_layer", "printer_extruder_retraction#retract-on-layer-change", extruder_idx); - optgroup->append_single_option_line("wipe", "printer_extruder_retraction#wipe-while-retracting", extruder_idx); - optgroup->append_single_option_line("wipe_distance", "printer_extruder_retraction#wipe-distance", extruder_idx); - optgroup->append_single_option_line("retract_before_wipe", "printer_extruder_retraction#retract-amount-before-wipe", extruder_idx); - // Orca - optgroup->append_single_option_line("retract_after_wipe", "printer_extruder_retraction#retract-amount-after-wipe", extruder_idx); + for (const PublishablePrinterOption& opt : publishable_printer_retraction_options()) + optgroup->append_single_option_line(opt.key, opt.icon, extruder_idx); - // Keep this optgroup's options in sync with publishable_printer_z_hop_options() - // in libslic3r/PublishSettings.hpp: the published-3MF printer allowlist is its union - // with the Retraction optgroup above. optgroup = page->new_optgroup(L("Z-Hop"), L"param_extruder_lift_enforcement"); - optgroup->append_single_option_line("retract_lift_enforce", "printer_extruder_z_hop#on-surfaces", extruder_idx); - optgroup->append_single_option_line("z_hop_types", "printer_extruder_z_hop#z-hop-type", extruder_idx); - optgroup->append_single_option_line("z_hop", "printer_extruder_z_hop#z-hop-height", extruder_idx); - optgroup->append_single_option_line("travel_slope", "printer_extruder_z_hop#traveling-angle", extruder_idx); - optgroup->append_single_option_line("retract_lift_above", "printer_extruder_z_hop#only-lift-z-above", extruder_idx); - optgroup->append_single_option_line("retract_lift_below", "printer_extruder_z_hop#only-lift-z-below", extruder_idx); + for (const PublishablePrinterOption& opt : publishable_printer_z_hop_options()) + optgroup->append_single_option_line(opt.key, opt.icon, extruder_idx); optgroup = page->new_optgroup(L("Retraction when switching material"), L"param_retraction_material_change"); optgroup->append_single_option_line("retract_length_toolchange", "printer_extruder_retraction#retraction-when-switching-materials", extruder_idx); From 07dafaf299492203e0a30bf444f64142632f6833 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Thu, 3 Sep 2026 17:13:09 +0800 Subject: [PATCH 093/208] fix: default enable-ota flag and fixing startup missing vendor --- src/libslic3r/AppConfig.cpp | 5 +++++ src/slic3r/Utils/PresetUpdater.cpp | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 020fc0662d..39fffd57a5 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -638,6 +638,11 @@ void AppConfig::set_defaults() set_bool("use_printer_agents", false); } + if (get("enable_ota").empty()) + { + set_bool("enable_ota", false); + } + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 42bd346222..d05c7b9586 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1090,9 +1090,6 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const AppConfig *app_config = GUI::wxGetApp().app_config; - if (!app_config->get_bool("enable_ota")) - return; - const auto enabled_vendors = app_config->vendors(); std::set bundles; From fdc0ee18f11f22766e1e22e66fe0304fedadb086 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 3 Sep 2026 17:47:29 +0800 Subject: [PATCH 094/208] fix vendor version --- resources/profiles/Afinia.json | 2 +- resources/profiles/Chuanying.json | 2 +- resources/profiles/Comgrow.json | 2 +- resources/profiles/Creality.json | 2 +- resources/profiles/Cubicon.json | 2 +- resources/profiles/Custom.json | 2 +- resources/profiles/Dremel.json | 2 +- resources/profiles/Elegoo.json | 2 +- resources/profiles/Eryone.json | 2 +- resources/profiles/FLSun.json | 2 +- resources/profiles/Flashforge.json | 2 +- resources/profiles/LH.json | 2 +- resources/profiles/LONGER.json | 2 +- resources/profiles/Qidi.json | 2 +- resources/profiles/RH3D.json | 2 +- resources/profiles/Ratrig.json | 2 +- resources/profiles/SeeMeCNC.json | 2 +- resources/profiles/Snapmaker.json | 2 +- resources/profiles/Volumic.json | 2 +- resources/profiles/WonderMaker.json | 2 +- resources/profiles/iQ.json | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/resources/profiles/Afinia.json b/resources/profiles/Afinia.json index a11cc0ecf6..517d0148c3 100644 --- a/resources/profiles/Afinia.json +++ b/resources/profiles/Afinia.json @@ -1,6 +1,6 @@ { "name": "Afinia", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Afinia configurations", "machine_model_list": [ diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index d994843f60..f32b4f84ae 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.04.00.04", + "version": "02.04.00.03", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index e3eb237518..d506431ce8 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.04.00.05", + "version": "02.04.00.04", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 7db87efed7..23b8b3799b 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.79", + "version": "02.03.02.77", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index 9f2100a187..1fca49355c 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 7eba013111..a8cef36ca5 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index 3d804f6a1b..71f13d0dc8 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.04.00.03", + "version": "02.04.00.02", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 3813f93348..c5412c53bd 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,6 +1,6 @@ { "name": "Elegoo", - "version": "02.04.00.06", + "version": "02.04.00.07", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ diff --git a/resources/profiles/Eryone.json b/resources/profiles/Eryone.json index b3bec6e892..488ba18337 100644 --- a/resources/profiles/Eryone.json +++ b/resources/profiles/Eryone.json @@ -1,6 +1,6 @@ { "name": "Eryone", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Eryone configurations", "machine_model_list": [ diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 67ce8c2583..1e0c76d458 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.04.00.04", + "version": "02.04.00.03", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index e754ca729a..f3923c435a 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.07", + "version": "02.04.00.05", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ diff --git a/resources/profiles/LH.json b/resources/profiles/LH.json index 12f8c4cbda..99a7049fa5 100644 --- a/resources/profiles/LH.json +++ b/resources/profiles/LH.json @@ -1,7 +1,7 @@ { "name": "LH", "url": "https://github.com/lhndo/LH-Stinger", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "LH 3D Printer Configuration", "machine_model_list": [ diff --git a/resources/profiles/LONGER.json b/resources/profiles/LONGER.json index 723bb43e91..dbf3cc3277 100644 --- a/resources/profiles/LONGER.json +++ b/resources/profiles/LONGER.json @@ -1,6 +1,6 @@ { "name": "LONGER", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "LONGER configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index a831bb268c..f49413601a 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.14", + "version": "02.04.00.12", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/RH3D.json b/resources/profiles/RH3D.json index fc8aa57484..4cb9ab573e 100644 --- a/resources/profiles/RH3D.json +++ b/resources/profiles/RH3D.json @@ -1,6 +1,6 @@ { "name": "RH3D", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "RH3D - printer profiles", "machine_model_list": [ diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index a2b792ebdd..dbe4c3cc56 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.05", + "version": "02.04.00.03", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ diff --git a/resources/profiles/SeeMeCNC.json b/resources/profiles/SeeMeCNC.json index e3674f8709..4bc30dee93 100644 --- a/resources/profiles/SeeMeCNC.json +++ b/resources/profiles/SeeMeCNC.json @@ -1,6 +1,6 @@ { "name": "SeeMeCNC", - "version": "2.4.0.02", + "version": "2.4.0.03", "force_update": "1", "description": "SeeMeCNC configurations - Full profile set for Artemis, BOSSdelta, and RostockMAX printers", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 50aaad2715..65b1d12a3a 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.11", + "version": "02.04.00.10", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Volumic.json b/resources/profiles/Volumic.json index 08a313b008..af7aa294bc 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,6 +1,6 @@ { "name": "Volumic", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ diff --git a/resources/profiles/WonderMaker.json b/resources/profiles/WonderMaker.json index c65bc82729..0eeffdb045 100755 --- a/resources/profiles/WonderMaker.json +++ b/resources/profiles/WonderMaker.json @@ -1,7 +1,7 @@ { "name": "WonderMaker", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "WonderMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json index 4afcb18328..050a0a2eb2 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -1,6 +1,6 @@ { "name": "innovatiQ", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "1", "description": "innovatiQ configuration", "machine_model_list": [ From 7c9b38ba04ce63f8181258c0f32ff2911e87c04f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 3 Sep 2026 21:03:42 +0800 Subject: [PATCH 095/208] remove retired_filament_ids.json --- docs/HLSD/filament_id.md | 121 +- resources/profiles/retired_filament_ids.json | 6983 ----------------- scripts/assign_filament_ids.py | 548 +- scripts/check_profile.ps1 | 2 +- scripts/check_profile.sh | 2 +- scripts/tests/test_filament_id.py | 544 +- src/libslic3r/Preset.cpp | 54 - src/libslic3r/Preset.hpp | 17 - src/libslic3r/PresetBundle.cpp | 25 - src/slic3r/GUI/CaliHistoryDialog.cpp | 8 +- src/slic3r/GUI/DeviceManager.cpp | 22 +- src/slic3r/GUI/PresetComboBoxes.cpp | 7 - src/slic3r/Utils/QidiPrinterAgent.cpp | 12 +- task.md | 13 - tests/libslic3r/CMakeLists.txt | 1 - .../libslic3r/test_filament_id_succession.cpp | 69 - 16 files changed, 119 insertions(+), 8309 deletions(-) delete mode 100644 resources/profiles/retired_filament_ids.json delete mode 100644 task.md delete mode 100644 tests/libslic3r/test_filament_id_succession.cpp diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md index 0dfc5471b0..980d830d7d 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -23,8 +23,9 @@ When a printer reports what a tray holds (Bambu AMS, Qidi box, Creality CFS, Klipper, Snapmaker), OrcaSlicer matches the reported id against the filament presets compatible with that printer to select the right profile; other features — tray display names, support-material detection, vitrification warnings, multi-nozzle filament grouping — -look up material properties by id alone. When an id has been retired, a shipped succession -ledger forwards it to its successor so old trays and records keep resolving. +look up material properties by id alone. An id that changes is not forwarded anywhere: a +tray or record still holding the old value falls back to matching by material type until the +user re-selects the filament, so identity changes are made deliberately and rarely. This page is the rule for authoring `filament_id` in system profiles (`resources/profiles/**`). CI enforces everything below; the short version is: @@ -33,13 +34,13 @@ This page is the rule for authoring `filament_id` in system profiles > **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. -## The design, in three pieces +## The design, in two pieces Because several consumers match **globally by id alone, first hit wins** (see the next section), any two materials sharing one id feed wrong data somewhere — a wrong tray name, a wrong support-material flag, a wrong nozzle grouping — and inside one printer a duplicated id makes AMS spool matching a coin toss. Hand-written ids produce such collisions constantly, so -the system is built to make them impossible and to make identity corrections safe: +the system is built to make them impossible: 1. **Deterministic minting.** An id is a pure hash of the product's identity — no registry to maintain, no next-free-number ceremony, no way for two concurrent PRs to race for the same @@ -48,9 +49,6 @@ the system is built to make them impossible and to make identity corrections saf `scripts/filament_id_snapshot.json` exactly, so every change to ids, claims (which bundles ship which id, and for which family), or product identity surfaces as a reviewable diff to one file — the maintainer gate. -3. **A shipped succession ledger.** Ids live outside the tree too — on device trays, in - calibration records, in user presets, in project files. When an id is retired, the ledger - forwards it to its successor so none of those references degrade to a generic fallback. ## Who consumes the id @@ -60,9 +58,8 @@ friends) resolves it to a preset. The matcher is printer-scoped and first-match- scanning only compatible family roots — system roots plus user-made custom filaments, which are user roots carrying their own `P*` ids; a preset derived from another resolves through its root and never matches directly — it picks the first one whose `filament_id` equals the -tray's and retries once through the succession ledger on a miss. Only then does it fall back -by filament type: a system `Generic ` preset (matched by name, then by type -similarity), else the slot's previous selection, else any compatible system generic or, +tray's. On a miss it falls back by filament type: a system `Generic ` preset +(matched by name, then by type similarity), else the slot's previous selection, else any compatible system generic or, failing that, any compatible system preset, else the slot is skipped — every fallback selection surfaces a user-visible notice. @@ -75,7 +72,7 @@ pattern, with the device-reported tray material id flowing through the shared ma | Ecosystem | Where the tray id comes from today | | --- | --- | | Bambu AMS | the device itself (RFID / user tray setting) — the `GF*` catalog | -| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name — then translated through the succession ledger to the family's minted id (the `QD_*` values themselves no longer exist as preset ids — see the reserved-namespaces section) | +| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name. No preset carries a `QD_*` value, so the slot currently resolves by filament type; mapping the composed id onto the family's minted id belongs in the agent | | Creality CFS | runtime brand/type scoring returns the winning preset's id | | Klipper (AFC / Happy Hare) | runtime lookup by filament type | | Snapmaker | runtime color/vendor/type match | @@ -155,12 +152,12 @@ the `Generic X` base name, write no id key). e.g. `Generic PLA @Sovol SV08 MAX` inherits `Generic PLA @System` and lists three Sovol nozzles. A vendor-*branded* filament never rides a generic family id. 5. **Ids follow the product identity.** The id is a pure function of the product triple - `(filament_vendor, filament_type, family name)` — correcting any of them re-mints the id - **by design** (via `--remint `; the exact sequence is in the FAQ), and - `--update-snapshot` records the old id in the shipped succession ledger with its successor - so device trays, calibration records, and user presets keep resolving (`renamed_from` - still gates preset-*name* compatibility as before). A shipped id is never recycled for a - different material: retired ids are blocked forever. + `(filament_vendor, filament_type, family name)`, so correcting any of them re-mints the id + **by design** (via `--remint `; the exact sequence is in the FAQ). Nothing forwards + the old value, so anything outside the tree that stored it — a device tray, a calibration + record, a saved project — falls back to matching by filament type until the user re-selects + the filament. Re-mint deliberately, and only to fix a genuinely wrong identity. + (`renamed_from` still gates preset-*name* compatibility, as before.) ## Minting — nobody invents ids @@ -191,7 +188,7 @@ Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrz by ten bundles — most by independent declarations converging on the same mint, the rest purely through inheritance from the OFL family. -On the rare collision with any existing or retired id, the minter salts the input (`…/1`, +On the rare collision with an existing id, the minter salts the input (`…/1`, `…/2`, …) until free, and the result is frozen in the profile file. Salting is also used deliberately: a *salt split* keeps two presets of one product on distinct ids where a single id would be AMS-ambiguous on the same printer — the "selectable alongside" situation from the @@ -224,14 +221,6 @@ normally only used by id migrations): *same* triple is legal by design — that is the point. - `--drop-redundant-ids VENDOR` deletes declarations that merely re-declare an inherited OrcaFilamentLibrary id. -- `--add-hint "OLD=NEW"` records a succession hint for an id a foreign catalog owns - (`GF*` only — see the ledger section). -- `--retire "OLD=NEW"` records succession for a shipped id that vanished while another - declarer kept it alive — lineage the automatic claim vote (see the succession-ledger - section) can no longer see. -- `--forget-never-shipped FILE` (with `--update-snapshot`) — given a JSON list of ids that - never shipped in any release, drops them from the lineage entirely (no retirement entry) - and splices succession chains that pointed through them. - `--profiles DIR` points the tooling at a different profile tree (default `resources/profiles`). @@ -248,10 +237,9 @@ or device contract owns it. | Space | Status | Rule | | --- | --- | --- | | `GF*` | Bambu AMS/RFID catalog — the one remaining *island* | BBL vendor only; a claim by anyone else is refused unless the snapshot sanctions that exact claim (via `--allow-shared-catalog` — see the CI section) | -| `QD_*` | Qidi device protocol — *dissolved island* | declarable by **nobody**, Qidi included; every shipped `QD_*` id is retired in the ledger with a live successor | +| `QD_*` | Qidi device protocol | declarable by **nobody**, Qidi included: the box composes these ids at runtime and they are not preset ids | | `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | | every already-shipped id | frozen in the snapshot (grandfathered) | frozen as-is; new claims need maintainer sign-off | -| every retired id | `resources/profiles/retired_filament_ids.json` | never used again, for anything | The two device namespaces, in detail: @@ -259,43 +247,14 @@ The two device namespaces, in detail: declarations are frozen as-is and never re-minted. BBL also carries several dozen grandfathered legacy codes that are neither `GF*` nor `OF*` (the `BETA` family's `B*` ids, plus `Generic SBS`'s legacy `BFLSBS99`) — frozen the same way, via the snapshot. -- **Qidi (`QD_*`) — dissolved.** `QD_*` is a device-*protocol* namespace, not a preset id - space: the Qidi box path composes `QD___` ids at runtime (slot - vendor and type indices reported by the device, the series digit inferred client-side - from the printer model/name), and the Qidi agent translates a composed id through the - succession ledger to the family's minted id. Qidi presets themselves carry ordinary minted - `OF*` ids (generics share the OFL ids), and all 204 `QD_*` ids that ever shipped sit in - the ledger as retired entries with live successors — which is also what makes CI refuse - any future `QD_*` occurrence permanently. The alternative — treating per-series protocol ids - as preset ids — would put one product under five ids (`QIDI PLA Rapido` would be `QD_0_1_1` - through `QD_4_1_1`), exactly the fragmentation the mint rule removes. - -## The succession ledger - -`resources/profiles/retired_filament_ids.json` ships with the app and has two maps: - -- **`retired`** — ids Orca owned and withdrew. Each maps to - `{"claims": [...], "successor": }`; successor chains are followed to the live end. - When `--update-snapshot` retires a vanished id, it picks the successor by an automatic - *claim vote*: every old claim whose family still exists votes for that family's current id, - most votes wins. Alongside the deliberate re-mints, this map carries the whole pre-rule - legacy — old ad-hoc vendor codes, Creality's and Snapmaker's numeric ids, and the 204 - `QD_*` protocol ids. -- **`hints`** — the same forwarding for ids Orca *cannot* retire because a foreign island owns - them and may legitimately keep shipping them. That means `GF*` only: e.g. - `GFL99 → OFDSrzZ8` forwards Bambu's Generic PLA catalog id to the OFL generic family on - installs where no live preset carries `GFL99`. - -The client consults the ledger **only on resolution miss** — AMS tray sync and the sync-AMS -dialog's filament listing, the sidebar AMS dropdown, tray-id type lookup, calibration -history, the global filament-id preset lookup, and the Qidi box path. A live preset always -wins first, so BBL installs resolve `GF*` natively and behavior is unchanged wherever the -raw id still exists. This on-miss rule is what makes -identity-driven re-mints (structure rule 5) safe: the old id keeps resolving to the family's -current preset instead of degrading to a `Generic ` fallback. The file is append-only in -its keys — entries are never removed and a retired id never returns — and maintained -exclusively by `--update-snapshot` / `--add-hint` / `--retire` (`--forget-never-shipped`, an -`--update-snapshot` mode, may rewrite an existing entry's successor when splicing chains). +- **Qidi (`QD_*`).** `QD_*` is a device-*protocol* namespace, not a preset id space: the + Qidi box path composes `QD___` ids at runtime (slot vendor and + type indices reported by the device, the series digit inferred client-side from the printer + model/name). Qidi presets carry ordinary minted `OF*` ids (generics share the OFL ids), so + a composed id matches no preset and the slot falls back to filament type; translating it to + the family's id belongs in `QidiPrinterAgent`. The alternative — treating per-series + protocol ids as preset ids — would put one product under five ids (`QIDI PLA Rapido` would + be `QD_0_1_1` through `QD_4_1_1`), exactly the fragmentation the mint rule removes. ## How CI enforces this @@ -319,11 +278,6 @@ The checks, in brief: - **Mint conformance** — a non-grandfathered `OF*` id must equal the mint (or a low salt iteration) of its declarer's product triple; the error prints the expected id to paste into the family root. -- **Retired reuse** — any tree id present in the `retired` map of - `resources/profiles/retired_filament_ids.json` is an error, with no grandfathering (keys in - the same file's `hints` map may legitimately stay live — BBL still ships them). Ids that - fully vanish from the tree are appended to the `retired` map by `--update-snapshot`; ids - are only ever added there, never removed or reused. - **Alias hygiene** — a vendor preset riding an OFL family id must keep the library preset's base name (a rename re-exposes the library preset, since alias shadowing is name-based), a non-empty `compatible_printers` (an empty one shadows nothing), and no own id key @@ -331,12 +285,8 @@ The checks, in brief: - **Triple integrity** — every declarer outside the BBL island must resolve a non-empty `filament_vendor` and `filament_type` (generics use `"Generic"`), and all declarers of one family within a bundle must agree on the triple. -- **Succession integrity** — retired successor chains terminate at a live id (or null) with - no cycles; `hints` keys stay in the island namespace (`GF*`), are never also retired, and - their chains end at a live tree id. - **Reserved namespaces** — `GF*` outside BBL, `P<7-hex>` or `"null"` anywhere, unless that - exact claim is grandfathered in the snapshot; `QD_*` anywhere, with no exception (all are - retired). + exact claim is grandfathered in the snapshot; `QD_*` anywhere, with no exception. - **Structure** — no `filament_id` key on newly instantiated presets; no new declared-vs-inherited id drift; every instantiated system filament must resolve an effective id through its `inherits` chain (recall: an id-less one is a hard load error in @@ -364,18 +314,15 @@ ambiguity check behind structure rule 3. - **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 fix a family's `filament_vendor` or `filament_type`.** Fix the config, run - `--remint ` then `--update-snapshot`: the id re-derives from the corrected identity - and the old id lands in the succession ledger pointing at the new one. Commit the profile, - snapshot, and ledger diffs together. -- **I need to rename a family.** Renames need one extra step, because the succession vote - follows family names (`renamed_from` gates preset-name compatibility but is not read by the - id tooling): rename the presets (adding `renamed_from`), run `--update-snapshot` once to - sanction the renamed claims on the old id, then `--remint `, then `--update-snapshot` - again — the old id now lands in the ledger pointing at the new one. Re-minting first would - retire the old id *heirless* (successor `null`), which cannot be repaired afterwards. -- **Can I reuse a `QD_*` id for a Qidi profile?** No — nobody can. The namespace is a - dissolved island: the device still composes those ids at runtime, and the succession ledger - translates them to the families' minted ids. Author Qidi filaments like any other vendor's. + `--remint ` then `--update-snapshot`, and commit the profile and snapshot diffs + together. The id re-derives from the corrected identity, and nothing forwards the old + value, so a tray or record still holding it falls back to matching by filament type. +- **I need to rename a family.** Rename the presets (adding `renamed_from`, which keeps the + preset *name* resolving), then `--remint `, then `--update-snapshot`. The id follows + the new family name; as with any identity fix, the old id is not forwarded. +- **Can I reuse a `QD_*` id for a Qidi profile?** No — nobody can. It is the device protocol's + own id space: the box composes those values at runtime and no preset carries one. Author + Qidi filaments like any other vendor's. - **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. diff --git a/resources/profiles/retired_filament_ids.json b/resources/profiles/retired_filament_ids.json deleted file mode 100644 index 7f5dda5901..0000000000 --- a/resources/profiles/retired_filament_ids.json +++ /dev/null @@ -1,6983 +0,0 @@ -{ - "hints": { - "GFA00_01": "OF9HCdyQ", - "GFA03": "OFjXrKFO", - "GFA50_01": "OF7OqDp3", - "GFA99": "OF0yFLkY", - "GFASA": "OF0yFLkY", - "GFB00_01": "OFNQKF0M", - "GFB01_01": "OFdrYBmI", - "GFB98": "OFLPAxz3", - "GFB98_01": "OFUaVAdj", - "GFB98_2": "OFoJcr46", - "GFB98_3": "OFoJcr46", - "GFB98_4": "OFoJcr46", - "GFB98_5": "OFK4LdYI", - "GFB98_6": "OFK4LdYI", - "GFB98_7": "OFK4LdYI", - "GFB99": "OFY9muEs", - "GFB99_01": "OFNLXV8X", - "GFB99_2": "OFvGc67v", - "GFB99_3": "OFvGc67v", - "GFB99_4": "OFvGc67v", - "GFB99_5": "OFvGc67v", - "GFB99_6": "OFyeSq8A", - "GFB99_7": "OFyeSq8A", - "GFC00_01": "OFdXVjGZ", - "GFC98": "OFjz0a3m", - "GFC99": "OFLakOUI", - "GFC99_01": "OFN7aNHe", - "GFC99_1": "OF97ru74", - "GFC99_2": "OF97ru74", - "GFC99_3": "OF97ru74", - "GFC99_4": "OF97ru74", - "GFC99_5": "OFq5QANf", - "GFC99_6": "OFq5QANf", - "GFG00_01": "OFObyktP", - "GFG03": "OF3F63OE", - "GFG96": "OF7lOgYF", - "GFG97": "OFu1evlr", - "GFG97-01": "OFTKFAZ4", - "GFG98": "OFoYSJKi", - "GFG98_01": "OFWadebJ", - "GFG99": "OFYPdQJh", - "GFG99_01": "OF1uR1t2", - "GFG99_2": "OF1Id239", - "GFG99_3": "OF1Id239", - "GFG99_4": "OF1Id239", - "GFG99_5": "OF1Id239", - "GFG99_6": "OFOKYhi6", - "GFG99_7": "OFOKYhi6", - "GFL100": "OFBpcB0a", - "GFL106": "OFDSrzZ8", - "GFL108": "OFDSrzZ8", - "GFL204": "OFY9muEs", - "GFL206": "OFY9muEs", - "GFL208": "OFY9muEs", - "GFL304": "OFYPdQJh", - "GFL306": "OFYPdQJh", - "GFL308": "OFYPdQJh", - "GFL404": "OFg8ndtj", - "GFL406": "OFg8ndtj", - "GFL408": "OFg8ndtj", - "GFL504": "OFsP8PKH", - "GFL506": "OFsP8PKH", - "GFL508": "OFsP8PKH", - "GFL71": "OF0omtEb", - "GFL72": "OFFZ458u", - "GFL73": "OFeVzkSU", - "GFL74": "OF0VpkBM", - "GFL75": "OFnXwW8l", - "GFL76": "OF6H51Xx", - "GFL77": "OFtFtiS0", - "GFL78": "OFelDBgv", - "GFL79": "OF5oXk4M", - "GFL80": "OFHknN4v", - "GFL94": "OFrGJ4tR", - "GFL95": "OFmpMwxS", - "GFL95_01": "OFodPDxO", - "GFL96": "OFesA6rF", - "GFL96_01": "OF0GIkJm", - "GFL97": "OFCp3Bgo", - "GFL98": "OFWbdGsC", - "GFL98_01": "OFgVJhVt", - "GFL98_1": "OFQ7I5vC", - "GFL98_3": "OFQ7I5vC", - "GFL98_4": "OFQ7I5vC", - "GFL98_5": "OFQ7I5vC", - "GFL99": "OFDSrzZ8", - "GFL99_01": "OFuSwKgm", - "GFL99_2": "OFiCHnso", - "GFL99_3": "OFiCHnso", - "GFL99_4": "OFiCHnso", - "GFL99_5": "OFiCHnso", - "GFL99_6": "OFl4ItvQ", - "GFL99_7": "OFl4ItvQ", - "GFLLK10PETG": "OFYPdQJh", - "GFLLK10PLA": "OFDSrzZ8", - "GFLLK10PPETG": "OFYPdQJh", - "GFLLK10PPLA": "OFDSrzZ8", - "GFLSBS99": "OFhQfUQY", - "GFN05_01": "OFe8tuNb", - "GFN96": "OF8Tlg47", - "GFN96_01": "OFptvi3F", - "GFN97": "OF8tPByX", - "GFN97_01": "OFSPdsuW", - "GFN98": "OFQLcbps", - "GFN98_02": "OFHa3RZT", - "GFN98_1": "OFfznI0Q", - "GFN98_2": "OFfznI0Q", - "GFN98_3": "OFfznI0Q", - "GFN98_4": "OFfznI0Q", - "GFN99": "OFg8ndtj", - "GFN99_01": "OFQswlnF", - "GFN99_1": "OFIy3kLw", - "GFN99_2": "OFIy3kLw", - "GFN99_3": "OFIy3kLw", - "GFN99_4": "OFIy3kLw", - "GFOT001": "OFxA1p01", - "GFOT002": "OFGkyftV", - "GFOT003": "OF1Pke8t", - "GFOT004": "OFMZvH0z", - "GFOT005": "OF2pj5l5", - "GFOT006": "OFcfQk4h", - "GFOT008": "OFcvKkrs", - "GFOT009": "OFM91vZs", - "GFP95": "OFNiSLfL", - "GFP95_01": "OFkYkQGO", - "GFP96": "OFXkm8q1", - "GFP96_01": "OFMTBcnz", - "GFP97": "OF1UNk9P", - "GFP97_01": "OF3s929u", - "GFP98": "OFd0Fv0k", - "GFP98_01": "OFkUaDnU", - "GFP99": "OFPklMI1", - "GFP99_01": "OFKuTr12", - "GFPA": "OFzS7zt4", - "GFPA6-CF": "OFQe7sAx", - "GFPAHT-CF": "OFaEuvNF", - "GFPC": "OFZtkHRq", - "GFPC-CF": "OFeIyhUx", - "GFPC-GF": "OFxJRuVF", - "GFPEBA": "OFjLAYgO", - "GFPET-CF": "OFRhCTUg", - "GFPETG": "OFYPdQJh", - "GFPETG-1": "OFIeCuXj", - "GFPETG-CF": "OF9UJOGF", - "GFPLA Glow": "OF5PtjTp", - "GFPLA Translucent": "OF7c9fln", - "GFPLA-CF": "OFZ0mR5b", - "GFPVA": "OFTkj6DR", - "GFR98": "OF74KeQR", - "GFR98_01": "OFxvKuYW", - "GFR99": "OFCD8qiU", - "GFR99_01": "OFrnJJEa", - "GFS04_01": "OFyreocX", - "GFS97": "OFo2UF2C", - "GFS97_01": "OFGDaEHO", - "GFS98": "OFsFon5l", - "GFS98_01": "OFW9uIkE", - "GFS99": "OFDvXujf", - "GFS99_01": "OFMZAoqa", - "GFS99_1": "OFcCzEkS", - "GFS99_2": "OFcCzEkS", - "GFS99_3": "OFcCzEkS", - "GFS99_4": "OFcCzEkS", - "GFS99_5": "OFoT8F7Y", - "GFS99_6": "OFoT8F7Y", - "GFSEP001": "OFtudokz", - "GFSEP002": "OFf5awy4", - "GFSEP003": "OFbP8zEO", - "GFSEP004": "OFrFBEfd", - "GFSEP005": "OFvzvwCu", - "GFSEP006": "OFH2nN08", - "GFSEP007": "OFPc4zVY", - "GFSEP008": "OFkzr35f", - "GFSEP009": "OFHfzQXo", - "GFSEP010": "OFhWhL1i", - "GFSEP011": "OFx8Lmsd", - "GFSEP012": "OFRiFnfQ", - "GFSEP013": "OFhfd722", - "GFSEP014": "OFIegjmD", - "GFSEP015": "OFvVy7yo", - "GFSEP016": "OFTOPcx0", - "GFSEP017": "OFXCBZTA", - "GFSEP018": "OFlSNkhc", - "GFSL99": "OFqOk9Ww", - "GFT01_01": "OFCnywiC", - "GFT97_01": "OFvPomQf", - "GFT98_01": "OFGzUNbm", - "GFTPU 95A": "OFML2aVd", - "GFTPU for ACE": "OF0FfcAG", - "GFU01_01": "OFDJU6R3", - "GFU99": "OFgbpcy9", - "GFU99_01": "OFCVUEaV", - "GFU99_2": "OFbenYUK", - "GFU99_3": "OFU3zwPc" - }, - "retired": { - "00001": { - "claims": [ - "Creality/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "00002": { - "claims": [ - "Creality/Generic PLA-Silk" - ], - "successor": "OFi6PfUM" - }, - "00003": { - "claims": [ - "Creality/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "00004": { - "claims": [ - "Creality/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "00005": { - "claims": [ - "Creality/Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "00006": { - "claims": [ - "Creality/Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "00007": { - "claims": [ - "Creality/Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "00008": { - "claims": [ - "Creality/Generic PA" - ], - "successor": "OFg8ndtj" - }, - "00009": { - "claims": [ - "Creality/Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "00010": { - "claims": [ - "Creality/Generic BVOH" - ], - "successor": "OFo2UF2C" - }, - "00011": { - "claims": [ - "Creality/Generic PVA" - ], - "successor": "OFDvXujf" - }, - "00012": { - "claims": [ - "Creality/Generic HIPS" - ], - "successor": "OFsFon5l" - }, - "00013": { - "claims": [ - "Creality/Generic PET-CF" - ], - "successor": "OFQdaVZS" - }, - "00014": { - "claims": [ - "Creality/Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "00015": { - "claims": [ - "Creality/Generic PA6-CF" - ], - "successor": "OFhTPf6L" - }, - "00016": { - "claims": [ - "Creality/Generic PAHT-CF" - ], - "successor": "OFH7b12v" - }, - "00017": { - "claims": [ - "Creality/Generic PPS" - ], - "successor": "OFq9svOz" - }, - "00018": { - "claims": [ - "Creality/Generic PPS-CF" - ], - "successor": "OF6rdQ6M" - }, - "00019": { - "claims": [ - "Creality/Generic PP" - ], - "successor": "OF1UNk9P" - }, - "00020": { - "claims": [ - "Creality/Generic PET" - ], - "successor": "OF6MOPWx" - }, - "00021": { - "claims": [ - "Creality/Generic PC" - ], - "successor": "OFLakOUI" - }, - "00022": { - "claims": [ - "Creality/Generic PA612-CF" - ], - "successor": "OF8eaY7j" - }, - "00023": { - "claims": [ - "Creality/Generic Support for PA" - ], - "successor": "OFDtop41" - }, - "00024": { - "claims": [ - "Creality/Generic Support for PLA" - ], - "successor": "OFin64Qg" - }, - "00025": { - "claims": [ - "Creality/Generic PA12-CF" - ], - "successor": "OFM4iJlv" - }, - "00026": { - "claims": [ - "Creality/Generic TPU 64D" - ], - "successor": "OFF3cuzT" - }, - "00027": { - "claims": [ - "Creality/Generic PETG-GF" - ], - "successor": "OFyLWVF3" - }, - "00031": { - "claims": [ - "Creality/Generic PP-CF" - ], - "successor": "OFXkm8q1" - }, - "00032": { - "claims": [ - "Creality/Generic PCTG" - ], - "successor": "OFu1evlr" - }, - "00033": { - "claims": [ - "Creality/Generic ASA-CF" - ], - "successor": "OF53eLVD" - }, - "00034": { - "claims": [ - "Creality/Generic PA6-GF" - ], - "successor": "OFh9u9c0" - }, - "00035": { - "claims": [ - "Creality/eSUN PLA-LW" - ], - "successor": "OFi5RSve" - }, - "01001": { - "claims": [ - "Creality/Creality Hyper PLA", - "Creality/Hyper PLA" - ], - "successor": "OFAIrQXu" - }, - "01002": { - "claims": [ - "Creality/Hyper L-W PLA" - ], - "successor": "OF70zbGS" - }, - "01003": { - "claims": [ - "Creality/Hyper Luminous" - ], - "successor": "OFC1PzXz" - }, - "01004": { - "claims": [ - "Creality/Hyper Stardust" - ], - "successor": "OFXnToSX" - }, - "01601": { - "claims": [ - "Creality/Soleyin Ultra PLA" - ], - "successor": "OF02UAVh" - }, - "02001": { - "claims": [ - "Creality/Creality Hyper PLA-CF", - "Creality/Hyper PLA-CF" - ], - "successor": "OFGwT5Av" - }, - "03001": { - "claims": [ - "Creality/Creality Hyper ABS", - "Creality/Hyper ABS" - ], - "successor": "OF8GnyFU" - }, - "04001": { - "claims": [ - "Creality/CR-PLA", - "Creality/Creality Generic PLA" - ], - "successor": "OFACSw9O" - }, - "05001": { - "claims": [ - "Creality/CR-Silk", - "Creality/Creality Silk PLA" - ], - "successor": "OF3OMgrI" - }, - "06001": { - "claims": [ - "Creality/CR-PETG", - "Creality/Creality Generic PETG" - ], - "successor": "OF3WQaKK" - }, - "06002": { - "claims": [ - "Creality/Hyper PETG" - ], - "successor": "OFujZSdh" - }, - "06003": { - "claims": [ - "Creality/Hyper PETG-CF" - ], - "successor": "OFusbWjj" - }, - "06004": { - "claims": [ - "Creality/Hyper PETG-GF" - ], - "successor": "OFLgwqp2" - }, - "06005": { - "claims": [ - "Creality/Soleyin Basic PETG" - ], - "successor": "OFBLktDy" - }, - "07001": { - "claims": [ - "Creality/CR-ABS", - "Creality/Creality Generic ABS" - ], - "successor": "OFGwZmgS" - }, - "07002": { - "claims": [ - "Creality/Hyper PC" - ], - "successor": "OFUF7oA4" - }, - "08001": { - "claims": [ - "Creality/Ender-PLA" - ], - "successor": "OFWao3Ic" - }, - "09001": { - "claims": [ - "Creality/EN-PLA+" - ], - "successor": "OFks6esg" - }, - "09002": { - "claims": [ - "Creality/ENDER FAST PLA" - ], - "successor": "OFfSqS4R" - }, - "10001": { - "claims": [ - "Creality/Creality Generic TPU", - "Creality/HP-TPU" - ], - "successor": "OFGcMkEB" - }, - "1009481135": { - "claims": [ - "Snapmaker/Snapmaker J1 PET" - ], - "successor": "OF8Jl6NT" - }, - "1042511226": { - "claims": [ - "Snapmaker/Snapmaker Dual PETG-CF" - ], - "successor": "OF3msXEa" - }, - "10425112260": { - "claims": [ - "Snapmaker/Snapmaker PETG-CF" - ], - "successor": "OFOwQuZM" - }, - "11001": { - "claims": [ - "Creality/CR-Nylon", - "Creality/Creality Generic PA" - ], - "successor": "OFMqYusc" - }, - "1172603684": { - "claims": [ - "Snapmaker/Snapmaker J1 PETG" - ], - "successor": "OFQMTRc8" - }, - "1181363872": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA Silk" - ], - "successor": "OFyj3m13" - }, - "11813638720": { - "claims": [ - "Snapmaker/Snapmaker PLA Silk" - ], - "successor": "OFWgFOjn" - }, - "1192769348": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA Matte" - ], - "successor": "OFY3AB7j" - }, - "12002": { - "claims": [ - "Creality/Hyper PPA-CF" - ], - "successor": "OFNvBIL0" - }, - "12003": { - "claims": [ - "Creality/Hyper PAHT-CF" - ], - "successor": "OF4APyxe" - }, - "12004": { - "claims": [ - "Creality/Hyper PA612-CF" - ], - "successor": "OFhkN0a7" - }, - "12005": { - "claims": [ - "Creality/Hyper PA6-CF" - ], - "successor": "OFn2GlhY" - }, - "1207881278": { - "claims": [ - "Snapmaker/Snapmaker Dual Breakaway" - ], - "successor": "OFfmHUkQ" - }, - "1210173120": { - "claims": [ - "Snapmaker/Snapmaker J1 PA-CF" - ], - "successor": "OFYEtXuk" - }, - "1223824394": { - "claims": [ - "Snapmaker/Snapmaker J1 ABS" - ], - "successor": "OFy14TRA" - }, - "1247172706": { - "claims": [ - "Snapmaker/Snapmaker Dual ASA" - ], - "successor": "OFKUEXPA" - }, - "12471727060": { - "claims": [ - "Snapmaker/Snapmaker ASA" - ], - "successor": "OF1d7c3A" - }, - "13001": { - "claims": [ - "Creality/CR-PLA Carbon" - ], - "successor": "OFrM4hdm" - }, - "1344609062": { - "claims": [ - "Snapmaker/Snapmaker PVA" - ], - "successor": "OFyhjiNs" - }, - "1355502217": { - "claims": [ - "Snapmaker/Snapmaker PETG-CF" - ], - "successor": "OFOwQuZM" - }, - "1393866034": { - "claims": [ - "Snapmaker/PolyLite Dual PLA", - "Snapmaker/PolyLite J1 PLA", - "Snapmaker/PolyLite PLA" - ], - "successor": "OF5CgdDq" - }, - "14001": { - "claims": [ - "Creality/CR-PLA Matte" - ], - "successor": "OFM0xjBG" - }, - "1417031127": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA" - ], - "successor": "OFZivHGL" - }, - "14170311270": { - "claims": [ - "Snapmaker/Snapmaker PLA" - ], - "successor": "OFlufQpZ" - }, - "141703112701": { - "claims": [ - "Snapmaker/Snapmaker PLA SnapSpeed" - ], - "successor": "OFwhLMs4" - }, - "1417031127011": { - "claims": [ - "Snapmaker/Snapmaker PLA Lite" - ], - "successor": "OFEOnBj6" - }, - "144877656": { - "claims": [ - "Snapmaker/Snapmaker J1 ASA" - ], - "successor": "OFt7SngH" - }, - "1480063856": { - "claims": [ - "Snapmaker/Snapmaker TPU" - ], - "successor": "OF65InrS" - }, - "15001": { - "claims": [ - "Creality/CR-PLA Fluo" - ], - "successor": "OFgpQwkk" - }, - "1528786603": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA Silk" - ], - "successor": "OFQ1KzO8" - }, - "16001": { - "claims": [ - "Creality/CR-TPU" - ], - "successor": "OFG2RkhN" - }, - "1655727393": { - "claims": [ - "Snapmaker/Snapmaker PLA Silk" - ], - "successor": "OFWgFOjn" - }, - "168223792": { - "claims": [ - "Snapmaker/Snapmaker Dual ABS" - ], - "successor": "OFJhT2fd" - }, - "1682237920": { - "claims": [ - "Snapmaker/Snapmaker ABS" - ], - "successor": "OF72YYTd" - }, - "1695556157": { - "claims": [ - "Snapmaker/Snapmaker PLA Eco" - ], - "successor": "OFpu74Qe" - }, - "17001": { - "claims": [ - "Creality/CR-Wood" - ], - "successor": "OFGxC8gB" - }, - "1702147325": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA-CF" - ], - "successor": "OF6ATsCF" - }, - "17021473250": { - "claims": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "successor": "OFhQf8ou" - }, - "18001": { - "claims": [ - "Creality/HP Ultra PLA" - ], - "successor": "OFCJpR7a" - }, - "1895495477": { - "claims": [ - "Snapmaker/Snapmaker PETG" - ], - "successor": "OF4WB37S" - }, - "19001": { - "claims": [ - "Creality/Creality Generic ASA", - "Creality/HP-ASA" - ], - "successor": "OFPHLnoe" - }, - "200803790": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA Eco" - ], - "successor": "OFyPG8v2" - }, - "2008037900": { - "claims": [ - "Snapmaker/Snapmaker PLA Eco" - ], - "successor": "OFpu74Qe" - }, - "2029994346": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA Metal" - ], - "successor": "OFg3cWVt" - }, - "20299943460": { - "claims": [ - "Snapmaker/Snapmaker PLA Metal" - ], - "successor": "OFtybfNX" - }, - "2128577941": { - "claims": [ - "Snapmaker/Snapmaker Dual PET" - ], - "successor": "OFUIfGoh" - }, - "21285779410": { - "claims": [ - "Snapmaker/Snapmaker PET" - ], - "successor": "OFQYaiGg" - }, - "2209001062": { - "claims": [ - "Snapmaker/Snapmaker Dual PETG" - ], - "successor": "OFBlFMVp" - }, - "22090010620": { - "claims": [ - "Snapmaker/Snapmaker PETG" - ], - "successor": "OF4WB37S" - }, - "2549587591": { - "claims": [ - "Snapmaker/Snapmaker PET" - ], - "successor": "OFQYaiGg" - }, - "2742961008": { - "claims": [ - "Snapmaker/Snapmaker ASA" - ], - "successor": "OF1d7c3A" - }, - "29001": { - "claims": [ - "Creality/Hyper Marble" - ], - "successor": "OFLzx3J4" - }, - "2971656290": { - "claims": [ - "Snapmaker/Snapmaker Dual TPU" - ], - "successor": "OFjkdnyN" - }, - "29716562900": { - "claims": [ - "Snapmaker/Snapmaker TPU" - ], - "successor": "OF65InrS" - }, - "297165629001": { - "claims": [ - "Snapmaker/Snapmaker TPU 95A" - ], - "successor": "OFKo87c6" - }, - "3104636980": { - "claims": [ - "Snapmaker/Snapmaker Dual PVA" - ], - "successor": "OFDKIKyw" - }, - "31046369800": { - "claims": [ - "Snapmaker/Snapmaker PVA" - ], - "successor": "OFyhjiNs" - }, - "3177068229": { - "claims": [ - "Snapmaker/Snapmaker PLA" - ], - "successor": "OFlufQpZ" - }, - "3383257822": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA Eco" - ], - "successor": "OFLbdkrE" - }, - "3492897526": { - "claims": [ - "Snapmaker/Snapmaker J1 Breakaway" - ], - "successor": "OFeTATC7" - }, - "3493177425": { - "claims": [ - "Snapmaker/Snapmaker Dual PA-CF" - ], - "successor": "OFRooa0F" - }, - "34931774250": { - "claims": [ - "Snapmaker/Snapmaker PA-CF" - ], - "successor": "OFEmsric" - }, - "3503790988": { - "claims": [ - "Snapmaker/Snapmaker Dual PLA Matte" - ], - "successor": "OFlIsW6f" - }, - "377675245": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA" - ], - "successor": "OFSa39yP" - }, - "3806593857": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA-CF" - ], - "successor": "OFdD5Wbu" - }, - "3811508002": { - "claims": [ - "Snapmaker/Snapmaker ABS" - ], - "successor": "OF72YYTd" - }, - "3864371306": { - "claims": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "successor": "OFhQf8ou" - }, - "4012961186": { - "claims": [ - "Snapmaker/Snapmaker J1 PLA Metal" - ], - "successor": "OFt0JbR7" - }, - "4092268632": { - "claims": [ - "Snapmaker/Snapmaker J1 TPU" - ], - "successor": "OFyrnlUn" - }, - "4227461134": { - "claims": [ - "Snapmaker/Snapmaker Breakaway Support For PLA", - "Snapmaker/Snapmaker J1 PVA" - ], - "successor": "OF6TuVAg" - }, - "4235401834": { - "claims": [ - "Snapmaker/Snapmaker J1 PETG-CF" - ], - "successor": "OFxYB4Sw" - }, - "581236806": { - "claims": [ - "Snapmaker/Snapmaker PA-CF" - ], - "successor": "OFEmsric" - }, - "AZ01-1": { - "claims": [ - "BBL/AliZ PETG-CF", - "OrcaFilamentLibrary/AliZ PETG-CF" - ], - "successor": "OFJOFnOZ" - }, - "AZ01-2": { - "claims": [ - "BBL/AliZ PETG-Metal", - "OrcaFilamentLibrary/AliZ PETG-Metal" - ], - "successor": "OFOABq7t" - }, - "AliZ001": { - "claims": [ - "BBL/AliZ PETG", - "OrcaFilamentLibrary/AliZ PETG" - ], - "successor": "OFocyw69" - }, - "AliZ002": { - "claims": [ - "BBL/AliZ PLA", - "OrcaFilamentLibrary/AliZ PLA" - ], - "successor": "OFyxayW4" - }, - "AliZ003": { - "claims": [ - "BBL/AliZ PA-CF", - "OrcaFilamentLibrary/AliZ PA-CF" - ], - "successor": "OFd4zw5l" - }, - "BSFI001": { - "claims": [ - "Blocks/Blocks Generic PLA" - ], - "successor": "OFNYewRS" - }, - "BSFI002": { - "claims": [ - "Blocks/Blocks Generic PETG" - ], - "successor": "OFrgGex8" - }, - "BSFI003": { - "claims": [ - "Blocks/Blocks Generic TPU" - ], - "successor": "OFMEbuBE" - }, - "BSFI004": { - "claims": [ - "Blocks/Blocks Generic ABS" - ], - "successor": "OFma52eS" - }, - "BSFI005": { - "claims": [ - "Blocks/Blocks Generic ASA" - ], - "successor": "OFB9dx27" - }, - "BSFI006": { - "claims": [ - "Blocks/Blocks Generic PA" - ], - "successor": "OFiUSDih" - }, - "BSFI007": { - "claims": [ - "Blocks/Blocks Generic PA-CF" - ], - "successor": "OF8bLDu7" - }, - "BSFI008": { - "claims": [ - "Blocks/Blocks Generic PC" - ], - "successor": "OFahE7HP" - }, - "BSFI009": { - "claims": [ - "Blocks/Blocks Generic PVA" - ], - "successor": "OFiorRtJ" - }, - "BSFI010": { - "claims": [ - "Blocks/Blocks Generic PLA-CF" - ], - "successor": "OFupq0tY" - }, - "CX30DB20": { - "claims": [ - "BBL/COEX TPE 30D", - "OrcaFilamentLibrary/COEX TPE 30D" - ], - "successor": "OFVptRxp" - }, - "CX40DB20": { - "claims": [ - "BBL/COEX TPE 40D", - "OrcaFilamentLibrary/COEX TPE 40D" - ], - "successor": "OFfnXFie" - }, - "CX60AB17": { - "claims": [ - "BBL/COEX TPU 60A", - "OrcaFilamentLibrary/COEX TPU 60A" - ], - "successor": "OFE0NFRh" - }, - "CX60DB19": { - "claims": [ - "BBL/COEX TPE 60D", - "OrcaFilamentLibrary/COEX TPE 60D" - ], - "successor": "OFfr4XNO" - }, - "CXABPB09": { - "claims": [ - "BBL/COEX ABS PRIME", - "OrcaFilamentLibrary/COEX ABS PRIME" - ], - "successor": "OFuWCQXN" - }, - "CXABSB01": { - "claims": [ - "BBL/COEX ABS", - "OrcaFilamentLibrary/COEX ABS" - ], - "successor": "OF99UMPq" - }, - "CXASAB04": { - "claims": [ - "BBL/COEX ASA PRIME", - "OrcaFilamentLibrary/COEX ASA PRIME" - ], - "successor": "OFtpXCCv" - }, - "CXPACB23": { - "claims": [ - "BBL/COEX NYLEX PA6-CF", - "OrcaFilamentLibrary/COEX NYLEX PA6-CF" - ], - "successor": "OF0NgY1y" - }, - "CXPAUB21": { - "claims": [ - "BBL/COEX NYLEX UNFILLED " - ], - "successor": "OFJs1ToM" - }, - "CXPCTB15": { - "claims": [ - "BBL/COEX PCTG PRIME", - "OrcaFilamentLibrary/COEX PCTG PRIME" - ], - "successor": "OFwu7IAG" - }, - "CXPETB13": { - "claims": [ - "BBL/COEX PETG", - "OrcaFilamentLibrary/COEX PETG" - ], - "successor": "OFvTVZc3" - }, - "CXPLAB02": { - "claims": [ - "BBL/COEX PLA", - "OrcaFilamentLibrary/COEX PLA" - ], - "successor": "OFhlCNqq" - }, - "CXPLAB08": { - "claims": [ - "BBL/COEX PLA PRIME", - "OrcaFilamentLibrary/COEX PLA PRIME" - ], - "successor": "OFd2vX0G" - }, - "CXPLSB03": { - "claims": [ - "BBL/COEX PLA+Silk", - "OrcaFilamentLibrary/COEX PLA+Silk" - ], - "successor": "OF0pzFLc" - }, - "DFL99": { - "claims": [ - "Volumic/Désactivé" - ], - "successor": "OFCuaCer" - }, - "DREMC001": { - "claims": [], - "successor": null - }, - "DREMC002": { - "claims": [], - "successor": null - }, - "DREMC003": { - "claims": [], - "successor": null - }, - "DREMC004": { - "claims": [], - "successor": null - }, - "DREMC005": { - "claims": [], - "successor": null - }, - "DREMC006": { - "claims": [ - "OrcaFilamentLibrary/DREMC PA6-CF" - ], - "successor": "OFsoykbm" - }, - "DREMC007": { - "claims": [], - "successor": null - }, - "DREMC008": { - "claims": [], - "successor": null - }, - "DREMC009": { - "claims": [ - "OrcaFilamentLibrary/DREMC ABS-GF" - ], - "successor": "OFCidU7j" - }, - "DREMC010": { - "claims": [ - "OrcaFilamentLibrary/DREMC PPA-CF" - ], - "successor": "OFiWaoqD" - }, - "DREMC011": { - "claims": [], - "successor": null - }, - "DREMC012": { - "claims": [], - "successor": null - }, - "DREMC013": { - "claims": [], - "successor": null - }, - "E1001": { - "claims": [ - "Creality/eSUN PLA+" - ], - "successor": "OFqINlYj" - }, - "E1002": { - "claims": [ - "Creality/eSUN PLA-Silk" - ], - "successor": "OFIRUqWi" - }, - "E1003": { - "claims": [ - "Creality/eSUN PLA-Matte" - ], - "successor": "OFDETOM6" - }, - "E1004": { - "claims": [ - "Creality/eSUN PLA-Lite" - ], - "successor": "OFhbolij" - }, - "E1005": { - "claims": [ - "Creality/eSUN PLA-CF" - ], - "successor": "OFnHc3D6" - }, - "E1006": { - "claims": [ - "Creality/eSUN PLA-HS" - ], - "successor": "OFOHOf2F" - }, - "E2001": { - "claims": [ - "Creality/eSUN PETG" - ], - "successor": "OF3kBrdA" - }, - "E2002": { - "claims": [ - "Creality/eSUN PETG+HS" - ], - "successor": "OFrdZ0cK" - }, - "E2003": { - "claims": [ - "Creality/eSUN PETG-Basic" - ], - "successor": "OFFbQscs" - }, - "E3001": { - "claims": [ - "Creality/eSUN ABS+" - ], - "successor": "OFTXduCM" - }, - "E4001": { - "claims": [ - "Creality/eSUN ASA+" - ], - "successor": "OFUmS5z5" - }, - "E8001": { - "claims": [ - "Creality/eSUN PET-Basic" - ], - "successor": "OFHaYaB1" - }, - "EABSB00": { - "claims": [ - "Elegoo/Elegoo ABS" - ], - "successor": "OFxOHhZw" - }, - "EASAB00": { - "claims": [ - "Elegoo/Elegoo ASA" - ], - "successor": "OFobDOW5" - }, - "EFL33": { - "claims": [ - "Eryone/Eryone PP-CF" - ], - "successor": "OFbh7HcA" - }, - "EFL40": { - "claims": [ - "Eryone/Eryone PLA-CF" - ], - "successor": "OFilAA3b" - }, - "EFL43": { - "claims": [ - "Eryone/Eryone PETG-CF" - ], - "successor": "OFNstOna" - }, - "EFL71": { - "claims": [ - "Eryone/Eryone PA" - ], - "successor": "OFS4jbj3" - }, - "EFL72": { - "claims": [ - "Eryone/Eryone PA-CF" - ], - "successor": "OFp9wdmf" - }, - "EFL73": { - "claims": [ - "Eryone/Eryone PA-GF" - ], - "successor": "OFkq7rPy" - }, - "EFL81": { - "claims": [ - "Eryone/Eryone ABS-CF" - ], - "successor": "OFQ1zgm3" - }, - "EFL82": { - "claims": [ - "Eryone/Eryone ASA-CF" - ], - "successor": "OFwyt1xt" - }, - "EFL90": { - "claims": [ - "Eryone/Eryone PLA" - ], - "successor": "OFmKU2Ha" - }, - "EFL91": { - "claims": [ - "Eryone/Eryone ABS" - ], - "successor": "OFOzwywz" - }, - "EFL92": { - "claims": [ - "Eryone/Eryone ASA" - ], - "successor": "OFVtIasg" - }, - "EFL93": { - "claims": [ - "Eryone/Eryone PETG" - ], - "successor": "OF8kJys9" - }, - "EFL941": { - "claims": [ - "Eryone/Eryone Silk PLA" - ], - "successor": "OF7nBAd3" - }, - "EFL95": { - "claims": [ - "Eryone/Eryone TPU" - ], - "successor": "OFhUjPA5" - }, - "EPAHTB00": { - "claims": [ - "Elegoo/Elegoo PAHT-CF" - ], - "successor": "OF0h7ERL" - }, - "EPCB00": { - "claims": [ - "Elegoo/Elegoo PC" - ], - "successor": "OFUyDDNv" - }, - "EPETGB00": { - "claims": [ - "Elegoo/Elegoo PETG" - ], - "successor": "OFLcd093" - }, - "EPLAB00": { - "claims": [ - "Elegoo/Elegoo PLA" - ], - "successor": "OFvgE0Zh" - }, - "ESN02": { - "claims": [ - "OrcaFilamentLibrary/eSUN ePLA-LW" - ], - "successor": "OFRzR5mi" - }, - "ESN03": { - "claims": [ - "OrcaFilamentLibrary/eSUN PETG" - ], - "successor": "OF3kBrdA" - }, - "ETPUB00": { - "claims": [ - "Elegoo/Elegoo TPU 95A" - ], - "successor": "OFmhJs5V" - }, - "FDPLAST01": { - "claims": [ - "OrcaFilamentLibrary/FDplast ABS" - ], - "successor": "OFjorDcx" - }, - "FDPLAST02": { - "claims": [ - "OrcaFilamentLibrary/FDplast HIPS" - ], - "successor": "OFmJAd3A" - }, - "FDPLAST03": { - "claims": [ - "OrcaFilamentLibrary/FDplast PETG" - ], - "successor": "OFfJSCzm" - }, - "FDPLAST04": { - "claims": [ - "OrcaFilamentLibrary/FDplast PLA" - ], - "successor": "OFtr8eZw" - }, - "FDPLAST05": { - "claims": [ - "OrcaFilamentLibrary/FDplast SBS" - ], - "successor": "OFtRn8X8" - }, - "FDPLAST06": { - "claims": [ - "OrcaFilamentLibrary/FDplast TPU" - ], - "successor": "OFfmZrI3" - }, - "FFF01": { - "claims": [ - "Flashforge/Flashforge PLA" - ], - "successor": "OFDKgoqx" - }, - "FFF02": { - "claims": [ - "Flashforge/Flashforge ABS" - ], - "successor": "OF5SJ3jz" - }, - "FFF03": { - "claims": [ - "Flashforge/Flashforge PETG", - "Flashforge/Generic PETG" - ], - "successor": "OFMpxamb" - }, - "FFG01": { - "claims": [ - "Flashforge/Flashforge Generic PLA" - ], - "successor": "OFtTHNTj" - }, - "FILAR0001": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Bronce" - ], - "successor": "OFWTRJ1K" - }, - "FILAR0002": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Gris Plata" - ], - "successor": "OFKKajh6" - }, - "FILAR0003": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Cobre" - ], - "successor": "OFNemJM6" - }, - "FILAR0004": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Titanio" - ], - "successor": "OFQWIKbV" - }, - "FILAR0005": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Tabaco" - ], - "successor": "OFjT9PkZ" - }, - "FILAR0006": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" - ], - "successor": "OFWwF7K7" - }, - "FILAR0007": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Manteca" - ], - "successor": "OFexaZU2" - }, - "FILAR0008": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Marron Oxido" - ], - "successor": "OFAt6ec0" - }, - "FILAR0009": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Carpincho" - ], - "successor": "OFKWWgyp" - }, - "FILAR0010": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" - ], - "successor": "OFPqX3x2" - }, - "FILAR0011": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" - ], - "successor": "OFZ4QbfK" - }, - "FILAR0012": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Piel" - ], - "successor": "OFsDXRpS" - }, - "FILAR0013": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Verde FilAr" - ], - "successor": "OFvPPMxL" - }, - "FILAR0014": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Verde Manzana" - ], - "successor": "OFdb8YNz" - }, - "FILAR0015": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Verde Pixel" - ], - "successor": "OFkGvN4d" - }, - "FILAR0016": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Verde Oliva" - ], - "successor": "OFkoLUtR" - }, - "FILAR0017": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" - ], - "successor": "OFHAccHz" - }, - "FILAR0018": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Calido" - ], - "successor": "OFKTSiYF" - }, - "FILAR0019": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Negro Azabache" - ], - "successor": "OFgMWJ8T" - }, - "FILAR0020": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" - ], - "successor": "OFKZ9skj" - }, - "FILAR0021": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" - ], - "successor": "OFaEesXQ" - }, - "FILAR0022": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" - ], - "successor": "OF8aFWfQ" - }, - "FILAR0023": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" - ], - "successor": "OFP26zNb" - }, - "FILAR0024": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" - ], - "successor": "OFTlRzpe" - }, - "FILAR0025": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" - ], - "successor": "OFIamQnD" - }, - "FILAR0026": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Azul Francia" - ], - "successor": "OFnYVFk2" - }, - "FILAR0027": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" - ], - "successor": "OFaDOaNt" - }, - "FILAR0028": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Oro" - ], - "successor": "OF5nlfKY" - }, - "FILAR0029": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA Dorado" - ], - "successor": "OF5P4jgA" - }, - "FILAR0030": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" - ], - "successor": "OFj3bTjw" - }, - "FILAR0031": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Azul" - ], - "successor": "OF5vgi2G" - }, - "FILAR0032": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Beige" - ], - "successor": "OFGcLA5R" - }, - "FILAR0033": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Blanco" - ], - "successor": "OFtefokm" - }, - "FILAR0034": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Bordo" - ], - "successor": "OFiDpM1B" - }, - "FILAR0035": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" - ], - "successor": "OFqtx549" - }, - "FILAR0036": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" - ], - "successor": "OFdzlrhi" - }, - "FILAR0037": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Gris" - ], - "successor": "OFGVwfK0" - }, - "FILAR0038": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Marron" - ], - "successor": "OF8jh0Lk" - }, - "FILAR0039": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Naranja" - ], - "successor": "OFmaeU4a" - }, - "FILAR0040": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Negro" - ], - "successor": "OFufTAK9" - }, - "FILAR0041": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Piel" - ], - "successor": "OFfZcoKr" - }, - "FILAR0042": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rojo" - ], - "successor": "OFIBXa0k" - }, - "FILAR0043": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rosa" - ], - "successor": "OFausr3F" - }, - "FILAR0044": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Uva" - ], - "successor": "OFEZ449N" - }, - "FILAR0045": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Verde" - ], - "successor": "OFCjG251" - }, - "FILAR0046": { - "claims": [ - "OrcaFilamentLibrary/FilAr PLA-mate Violeta" - ], - "successor": "OF2EK9F1" - }, - "FILAR0047": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" - ], - "successor": "OFt6e0US" - }, - "FILAR0048": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" - ], - "successor": "OF0Vtzaw" - }, - "FILAR0049": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Azul Boreal" - ], - "successor": "OFNU9YIW" - }, - "FILAR0050": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Azul Francia" - ], - "successor": "OF44VYzK" - }, - "FILAR0051": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Azul Imperial" - ], - "successor": "OF2Z1nT5" - }, - "FILAR0052": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" - ], - "successor": "OFsXQXbs" - }, - "FILAR0053": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Cian" - ], - "successor": "OFnejEt4" - }, - "FILAR0054": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Coral" - ], - "successor": "OFysxCep" - }, - "FILAR0055": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Cristal" - ], - "successor": "OFJQDUk3" - }, - "FILAR0056": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" - ], - "successor": "OFybzvQN" - }, - "FILAR0057": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Gris Plata" - ], - "successor": "OFgpLTMR" - }, - "FILAR0058": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Magenta" - ], - "successor": "OFurdQxc" - }, - "FILAR0059": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Negro Azabache" - ], - "successor": "OFq8gfS4" - }, - "FILAR0060": { - "claims": [ - "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" - ], - "successor": "OFPbyOSk" - }, - "FILARB01": { - "claims": [], - "successor": null - }, - "FILARB02": { - "claims": [], - "successor": null - }, - "FILARB03": { - "claims": [], - "successor": null - }, - "FILL3D001": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PLA Turbo" - ], - "successor": "OFoSknDB" - }, - "FILL3D002": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PLA Basic" - ], - "successor": "OFDpW3J8" - }, - "FILL3D003": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PETG" - ], - "successor": "OFQbjX3s" - }, - "FILL3D004": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PP" - ], - "successor": "OFPWPlSC" - }, - "FILL3D005": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PPCF" - ], - "successor": "OFg8hMzT" - }, - "FILL3D006": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PA" - ], - "successor": "OFJNeELv" - }, - "FILL3D007": { - "claims": [ - "OrcaFilamentLibrary/FILL3D PETG CF" - ], - "successor": "OFOiJfLM" - }, - "GABSB00": { - "claims": [ - "Elegoo/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "GASAB00": { - "claims": [ - "Elegoo/Generic ASA", - "Elegoo/Generic ASA-CF" - ], - "successor": "OFLPAxz3" - }, - "GFABS": { - "claims": [ - "Anycubic/Anycubic ABS" - ], - "successor": "OF223rZv" - }, - "GFL92": { - "claims": [ - "Anycubic/Anycubic PLA" - ], - "successor": "OFmjN2bc" - }, - "GFL93": { - "claims": [ - "Anycubic/Anycubic PLA+" - ], - "successor": "OFnmp6rt" - }, - "GFPLA": { - "claims": [ - "Anycubic/Anycubic PLA" - ], - "successor": "OFmjN2bc" - }, - "GFPLA High Speed": { - "claims": [ - "Anycubic/Anycubic PLA High Speed" - ], - "successor": "OFjVOWfJ" - }, - "GFPLA Matte": { - "claims": [ - "Anycubic/Anycubic PLA Matte" - ], - "successor": "OFIE3vOf" - }, - "GFPLA Silk": { - "claims": [ - "Anycubic/Anycubic PLA Silk" - ], - "successor": "OFFwJWea" - }, - "GFPLA+": { - "claims": [ - "Anycubic/Anycubic PLA+" - ], - "successor": "OFnmp6rt" - }, - "GPAB00": { - "claims": [ - "Elegoo/Generic PA" - ], - "successor": "OFg8ndtj" - }, - "GPCB00": { - "claims": [ - "Elegoo/Generic PC" - ], - "successor": "OFLakOUI" - }, - "GPETB00": { - "claims": [ - "Elegoo/Generic PET" - ], - "successor": "OF6MOPWx" - }, - "GPETGB00": { - "claims": [ - "Elegoo/Generic PETG", - "Elegoo/Generic PETG-CF" - ], - "successor": "OFYPdQJh" - }, - "GPLAB00": { - "claims": [ - "Elegoo/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "Generic ABS @E3NG v1.2S": { - "claims": [ - "RH3D/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "Generic ABS @MK4S": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S HF0.4": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S HF0.5": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S HF0.6": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ABS @MK4S HF0.8": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Generic ASA @E3NG v1.2S": { - "claims": [ - "RH3D/Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "Generic FLEX @MK4S": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Generic FLEX @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Generic FLEX @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Generic PCCF @E3NG v1.2S": { - "claims": [ - "RH3D/Generic PCCF" - ], - "successor": "OFC5f4Ay" - }, - "Generic PETG @E3NG v1.2S": { - "claims": [ - "RH3D/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "Generic PETG @MK4S": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S HF0.4": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S HF0.5": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S HF0.6": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PETG @MK4S HF0.8": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Generic PLA @E3NG v1.2S": { - "claims": [ - "RH3D/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "Generic PLA @MK4S": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S HF0.4": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S HF0.5": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S HF0.6": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA @MK4S HF0.8": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Generic PLA Silk @MK4S": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Generic PLA Silk @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Generic PLA Silk @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Generic TPU @E3NG v1.2S": { - "claims": [ - "RH3D/Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "IQM1": { - "claims": [ - "iQ/Fiberthree PACF Pro P1" - ], - "successor": "OFjUGUIK" - }, - "IQM1011": { - "claims": [ - "iQ/VXL90 TiQ2 P2" - ], - "successor": "OFOJPAAS" - }, - "IQM2": { - "claims": [ - "iQ/Material4Print ABS Natur P1" - ], - "successor": "OFJWKoYG" - }, - "IQM3": { - "claims": [ - "iQ/Polymaker PETG Polymax black P1" - ], - "successor": "OFaeIx7W" - }, - "IQM7": { - "claims": [ - "iQ/Fiberthree PACF Pro P2" - ], - "successor": "OF6kj4jI" - }, - "LHF_abs": { - "claims": [ - "LH/LHS ABS" - ], - "successor": "OFztQ7rO" - }, - "LHF_asa": { - "claims": [ - "LH/LHS ASA" - ], - "successor": "OFaP2SsH" - }, - "LHF_ftpuf": { - "claims": [ - "LH/LHS TPU Foamy 78A" - ], - "successor": "OFngcE81" - }, - "LHF_pccf": { - "claims": [ - "LH/LHS PC CF" - ], - "successor": "OFu0fjPJ" - }, - "LHF_pctg": { - "claims": [ - "LH/LHS PCTG" - ], - "successor": "OFBJAdLw" - }, - "LHF_petg": { - "claims": [ - "LH/LHS PETG" - ], - "successor": "OFRJ325z" - }, - "LHF_pla": { - "claims": [ - "LH/LHS PLA" - ], - "successor": "OFyoBZdm" - }, - "LHF_ptpu_pl": { - "claims": [ - "LH/LHS TPU" - ], - "successor": "OFIZMQwM" - }, - "NIT01": { - "claims": [ - "OrcaFilamentLibrary/NIT ABS" - ], - "successor": "OFhWc5Bv" - }, - "NIT02": { - "claims": [ - "OrcaFilamentLibrary/NIT PLA" - ], - "successor": "OFwRJ4g0" - }, - "NIT03": { - "claims": [ - "OrcaFilamentLibrary/NIT PETG" - ], - "successor": "OFJu1XwK" - }, - "OEABSB00": { - "claims": [ - "OrcaFilamentLibrary/Elegoo ABS" - ], - "successor": "OFxOHhZw" - }, - "OEASAB00": { - "claims": [ - "OrcaFilamentLibrary/Elegoo ASA" - ], - "successor": "OFobDOW5" - }, - "OEPAHTB0": { - "claims": [ - "OrcaFilamentLibrary/Elegoo PAHT-CF" - ], - "successor": "OF0h7ERL" - }, - "OEPCB00": { - "claims": [ - "OrcaFilamentLibrary/Elegoo PC" - ], - "successor": "OFUyDDNv" - }, - "OEPETGB0": { - "claims": [ - "OrcaFilamentLibrary/Elegoo PETG" - ], - "successor": "OFLcd093" - }, - "OEPLAB00": { - "claims": [ - "OrcaFilamentLibrary/Elegoo PLA" - ], - "successor": "OFvgE0Zh" - }, - "OETPUB00": { - "claims": [ - "OrcaFilamentLibrary/Elegoo TPU 95A" - ], - "successor": "OFmhJs5V" - }, - "OF016CJw": { - "claims": [ - "Sovol/Sovol SV08 ABS" - ], - "successor": "OFY9muEs" - }, - "OF0GIkJm": { - "claims": [ - "Tiertime/Tiertime Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OF0zx94L": { - "claims": [ - "Vzbot/Vzbot Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OF1Id239": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF1OZujR": { - "claims": [ - "Flashforge/Flashforge Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OF1bQyX2": { - "claims": [ - "Flashforge/Flashforge PLA Matte" - ], - "successor": "OF6qAuyi" - }, - "OF1daEUW": { - "claims": [ - "Anker/Anker Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OF1uR1t2": { - "claims": [ - "Tiertime/Tiertime Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF2RjrWH": { - "claims": [ - "Flashforge/FusRock Generic PAHT-GF" - ], - "successor": "OFcVLpNA" - }, - "OF2bZtyg": { - "claims": [ - "Flashforge/Flashforge PLA-CF" - ], - "successor": "OF9cAwMK" - }, - "OF2mgDsI": { - "claims": [ - "Vzbot/Vzbot Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OF3P0BQA": { - "claims": [ - "Anker/Anker Generic ABS", - "Anker/Anker Generic ABS 0.2 nozzle", - "Anker/Anker Generic ABS 0.25 nozzle" - ], - "successor": "OFY9muEs" - }, - "OF3s929u": { - "claims": [ - "Tiertime/Tiertime Generic PP" - ], - "successor": "OF1UNk9P" - }, - "OF3wxlw9": { - "claims": [ - "CoLiDo/CoLiDo Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF41jaTh": { - "claims": [ - "Flashforge/Flashforge TPU-90A" - ], - "successor": "OFwlZ7gH" - }, - "OF42ZDpN": { - "claims": [ - "Flashforge/FusRock PAHT" - ], - "successor": "OF7pjCsO" - }, - "OF48L671": { - "claims": [ - "Ratrig/RatRig Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OF4Mf5Gz": { - "claims": [ - "Creality/Creality Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF4XAUnp": { - "claims": [ - "Vzbot/Vzbot Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OF4oCRKe": { - "claims": [ - "DeltaMaker/DeltaMaker Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF4xhTuK": { - "claims": [ - "OrcaArena/OrcaArena Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OF4zzGwp": { - "claims": [ - "Flashforge/FusRock Generic PET-GF" - ], - "successor": "OFzwA5Z9" - }, - "OF51XQar": { - "claims": [ - "CONSTRUCT3D/C1 Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OF5E5KNA": { - "claims": [ - "SecKit/SecKit Generic PC" - ], - "successor": "OFLakOUI" - }, - "OF5NQFKI": { - "claims": [ - "Flashforge/Flashforge PLA Galaxy" - ], - "successor": "OFJJ0Ar3" - }, - "OF5Zk4e1": { - "claims": [ - "Anycubic/Anycubic Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OF5vzBhb": { - "claims": [ - "Chuanying/Chuanying Generic PLA", - "Chuanying/Chuanying PLA" - ], - "successor": "OFDSrzZ8" - }, - "OF5w29Kq": { - "claims": [ - "Flashforge/Flashforge HS PETG" - ], - "successor": "OFDxxTpW" - }, - "OF67EdL5": { - "claims": [ - "Sovol/Sovol SV06 ACE ABS" - ], - "successor": "OFY9muEs" - }, - "OF6Fpw1E": { - "claims": [ - "Comgrow/Comgrow Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OF6K467o": { - "claims": [ - "InfiMech/InfiMech Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OF6KELDx": { - "claims": [ - "Co Print/CoPrint Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OF6O67Xk": { - "claims": [ - "Lulzbot/Lulzbot 2.85mm ABS" - ], - "successor": "OFY9muEs" - }, - "OF6VgL2U": { - "claims": [ - "Phrozen/Phrozen PLA" - ], - "successor": "OFDSrzZ8" - }, - "OF6WddJ1": { - "claims": [ - "Flashforge/FusRock S-PAHT" - ], - "successor": "OFCn83wF" - }, - "OF6ooviO": { - "claims": [ - "FLSun/FLSun S1 TPU" - ], - "successor": "OFgbpcy9" - }, - "OF6rMr3U": { - "claims": [ - "Flashforge/FusRock Generic S-Multi" - ], - "successor": "OF0AquDh" - }, - "OF6tKa1Z": { - "claims": [ - "Anker/Anker Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OF6ueBwd": { - "claims": [ - "Flashforge/Flashforge PLA Pro" - ], - "successor": "OFm4SivL" - }, - "OF6vKLaU": { - "claims": [ - "Artillery/Artillery Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OF6xLvYg": { - "claims": [ - "InfiMech/InfiMech Generic PC" - ], - "successor": "OFLakOUI" - }, - "OF6zAVFj": { - "claims": [ - "Sovol/Sovol Zero TPU" - ], - "successor": "OFgbpcy9" - }, - "OF7VJMYM": { - "claims": [ - "Sovol/Sovol Zero PLA Basic" - ], - "successor": "OFDSrzZ8" - }, - "OF7g2vYQ": { - "claims": [ - "Co Print/CoPrint Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OF7uE5KB": { - "claims": [ - "Anker/Anker Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OF8CXrvm": { - "claims": [ - "SecKit/SecKit Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OF8bLDu7": { - "claims": [ - "Blocks/Blocks Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OF8eQjjt": { - "claims": [ - "Lulzbot/Lulzbot 2.85mm PETG" - ], - "successor": "OFYPdQJh" - }, - "OF97ru74": { - "claims": [ - "Prusa/Prusa Generic PC" - ], - "successor": "OFLakOUI" - }, - "OF995YXg": { - "claims": [ - "Flashforge/Flashforge TPU-64D" - ], - "successor": "OF8GtyKJ" - }, - "OF9fOPpd": { - "claims": [ - "Vzbot/Vzbot Generic PC" - ], - "successor": "OFLakOUI" - }, - "OF9z5LZ9": { - "claims": [ - "FLSun/FLSun S1 PETG" - ], - "successor": "OFYPdQJh" - }, - "OFACSw9O": { - "claims": [ - "Creality/Creality Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFAf9pJF": { - "claims": [ - "Flashforge/Flashforge TPU 95A" - ], - "successor": "OFSqIcJC" - }, - "OFB09fpe": { - "claims": [ - "Ratrig/RatRig Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFB0a3hT": { - "claims": [ - "Anker/Anker Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFB1Tv1E": { - "claims": [ - "Anycubic/Anycubic Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFB8wSps": { - "claims": [ - "Flashforge/FusRock PET-CF" - ], - "successor": "OFDu1qE7" - }, - "OFB9dx27": { - "claims": [ - "Blocks/Blocks Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFBC32Wb": { - "claims": [ - "Flashforge/FusRock PET" - ], - "successor": "OFKTGKJU" - }, - "OFBIadjM": { - "claims": [ - "Chuanying/Chuanying ASA", - "Chuanying/Chuanying Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFBK6zAi": { - "claims": [ - "Flashforge/Flashforge PETG-CF" - ], - "successor": "OFuFEtKX" - }, - "OFBpcB0a": { - "claims": [ - "TwoTrees/TwoTrees Generic HS PLA" - ], - "successor": "OFvxghTE" - }, - "OFBtlI8M": { - "claims": [ - "FlyingBear/FlyingBear Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFC20UMj": { - "claims": [ - "Flashforge/Flashforge Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFCEA7Nt": { - "claims": [ - "Sovol/Sovol SV06 Plus ACE ABS" - ], - "successor": "OFY9muEs" - }, - "OFCVUEaV": { - "claims": [ - "Tiertime/Tiertime Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFCaJHAA": { - "claims": [ - "Flashforge/FusRock Generic S-PAHT" - ], - "successor": "OFCn83wF" - }, - "OFCcsYtf": { - "claims": [ - "FLSun/FLSun Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFCu3jES": { - "claims": [], - "successor": null - }, - "OFD2JNS1": { - "claims": [ - "Dremel/Dremel Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFD6kN7F": { - "claims": [ - "OrcaArena/OrcaArena Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFDeTsJw": { - "claims": [ - "Chuanying/Chuanying Generic HIPS" - ], - "successor": "OFsFon5l" - }, - "OFEE1Dld": { - "claims": [ - "Artillery/Artillery Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFEMfQsX": { - "claims": [ - "Flashforge/Flashforge PETG Basic" - ], - "successor": "OFYYeMyQ" - }, - "OFENzGSm": { - "claims": [ - "FLSun/FLSun T1 TPU" - ], - "successor": "OFgbpcy9" - }, - "OFETFWx7": { - "claims": [ - "SecKit/SecKit Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFEZNNw1": { - "claims": [ - "Ratrig/RatRig Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFF73Bvp": { - "claims": [ - "SecKit/SecKit Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFFC0VqZ": { - "claims": [ - "Ratrig/RatRig BigNozzle PCTG" - ], - "successor": "OFYfAcLY" - }, - "OFFZ0BBL": { - "claims": [ - "FlyingBear/FlyingBear Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFFxZ7hZ": { - "claims": [ - "Chuanying/Chuanying Generic PLA-CF10" - ], - "successor": "OFX2zcrM" - }, - "OFGDaEHO": { - "claims": [ - "Tiertime/Tiertime Generic BVOH" - ], - "successor": "OFo2UF2C" - }, - "OFGGyAgJ": { - "claims": [ - "Vzbot/Vzbot Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFGKLoUm": { - "claims": [ - "Anycubic/Anycubic Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFGLeiNL": { - "claims": [], - "successor": null - }, - "OFGPJxnt": { - "claims": [ - "Anker/Anker Generic PC", - "Anker/Anker Generic PC 0.2 nozzle", - "Anker/Anker Generic PC 0.25 nozzle" - ], - "successor": "OFLakOUI" - }, - "OFGzUNbm": { - "claims": [ - "Tiertime/Tiertime Generic PPS-CF" - ], - "successor": "OF6rdQ6M" - }, - "OFH5UH6P": { - "claims": [ - "Flashforge/Flashforge ABS-GF" - ], - "successor": "OFojbdhR" - }, - "OFH6Pjxe": { - "claims": [ - "Flashforge/Flashforge PLA Matte" - ], - "successor": "OF6qAuyi" - }, - "OFHFZ1Te": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFHQUAoZ": { - "claims": [ - "FLSun/FLSun Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFHTVfaU": { - "claims": [ - "Sovol/Sovol Zero PETG" - ], - "successor": "OFYPdQJh" - }, - "OFHUnLY2": { - "claims": [ - "Vzbot/Vzbot Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFHa3RZT": { - "claims": [ - "Tiertime/Tiertime Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFI80Hct": { - "claims": [ - "Anycubic/Anycubic Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFIK0xFa": { - "claims": [ - "FLSun/FLSun S1 ASA" - ], - "successor": "OFLPAxz3" - }, - "OFIYTy8S": { - "claims": [ - "Anker/Anker Generic PLA+", - "Anker/Anker Generic PLA+ 0.2 nozzle", - "Anker/Anker Generic PLA+ 0.25 nozzle" - ], - "successor": "OFEWYR89" - }, - "OFIda816": { - "claims": [ - "Vzbot/Vzbot Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFIeCuXj": { - "claims": [ - "Peopoly/Peopoly Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFIieIka": { - "claims": [ - "Flashforge/Polymaker CoPA" - ], - "successor": "OFQyyO0l" - }, - "OFIxitiU": { - "claims": [ - "Flashforge/Flashforge PLA Basic" - ], - "successor": "OFJ3F2jm" - }, - "OFIy3kLw": { - "claims": [ - "Prusa/Prusa Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFJ80y1e": { - "claims": [ - "FLSun/FLSun T1 PETG" - ], - "successor": "OFYPdQJh" - }, - "OFJJpaLS": { - "claims": [ - "FLSun/FLSun Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFJSksUs": { - "claims": [ - "FLSun/FLSun Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFJVFpJz": { - "claims": [ - "Sovol/Sovol Zero PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFJfv07m": { - "claims": [ - "Sovol/Sovol SV06 ACE TPU" - ], - "successor": "OFgbpcy9" - }, - "OFK01afJ": { - "claims": [ - "Qidi/Qidi Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFK4LdYI": { - "claims": [ - "Prusa/Prusa Generic ASA HF" - ], - "successor": "OFzRtFM9" - }, - "OFK74HJD": { - "claims": [ - "Flashforge/Flashforge PLA Pro" - ], - "successor": "OFm4SivL" - }, - "OFKNAhls": { - "claims": [ - "Qidi/Qidi Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFKo87c6": { - "claims": [ - "Snapmaker/Snapmaker TPU 95A" - ], - "successor": "OFvmwTZE" - }, - "OFKpQTJI": { - "claims": [ - "Flashforge/Flashforge TPU 65D" - ], - "successor": "OFSDfduA" - }, - "OFKuTr12": { - "claims": [ - "Tiertime/Tiertime Generic PE" - ], - "successor": "OFPklMI1" - }, - "OFKyCgaK": { - "claims": [ - "Anycubic/Anycubic Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFLBUkwC": { - "claims": [ - "Vzbot/Vzbot Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFLDSqqi": { - "claims": [ - "Flashforge/Flashforge Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFLSBS99": { - "claims": [ - "OrcaFilamentLibrary/Generic SBS" - ], - "successor": "OFhQfUQY" - }, - "OFLYDIb8": { - "claims": [ - "Flashforge/Flashforge PLA Silk" - ], - "successor": "OFgjgN35" - }, - "OFLrdHse": { - "claims": [ - "Flashforge/Flashforge Generic HS PLA" - ], - "successor": "OFvxghTE" - }, - "OFLuczRG": { - "claims": [ - "Creality/Creality Generic ASA-CF" - ], - "successor": "OF53eLVD" - }, - "OFM87w9T": { - "claims": [ - "Tiertime/Tiertime Generic SBS" - ], - "successor": "OFhQfUQY" - }, - "OFMEbuBE": { - "claims": [ - "Blocks/Blocks Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFMIma8C": { - "claims": [ - "Flashforge/Flashforge PLA Luminous" - ], - "successor": "OFdqkWtz" - }, - "OFMIurFh": { - "claims": [ - "Creality/Creality HF Generic Speed PLA" - ], - "successor": "OFXmv5p0" - }, - "OFMTBcnz": { - "claims": [ - "Tiertime/Tiertime Generic PP-CF" - ], - "successor": "OFXkm8q1" - }, - "OFMZAoqa": { - "claims": [ - "Tiertime/Tiertime Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFMgJQCZ": { - "claims": [ - "Anker/Anker Generic PA", - "Anker/Anker Generic PA 0.2 nozzle", - "Anker/Anker Generic PA 0.25 nozzle" - ], - "successor": "OFg8ndtj" - }, - "OFMoLF46": { - "claims": [ - "FLSun/FLSun Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFMqYusc": { - "claims": [ - "Creality/Creality Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFMyLYV8": { - "claims": [ - "Flashforge/Flashforge PETG Transparent" - ], - "successor": "OFwjMiKL" - }, - "OFN7aNHe": { - "claims": [ - "Tiertime/Tiertime Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFNLXV8X": { - "claims": [ - "Tiertime/Tiertime Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFNOxcYl": { - "claims": [ - "Ratrig/RatRig Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFNW4ZTC": { - "claims": [ - "Creality/Creality Generic PLA Wood" - ], - "successor": "OFIKZxPF" - }, - "OFNWcJsM": { - "claims": [ - "Comgrow/Comgrow T300 PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFNWnx2c": { - "claims": [ - "Flashforge/Flashforge TPU-95A" - ], - "successor": "OFx0WlzS" - }, - "OFNX8GI1": { - "claims": [ - "Sovol/Sovol Zero ABS" - ], - "successor": "OFY9muEs" - }, - "OFNYewRS": { - "claims": [ - "Blocks/Blocks Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFNZYgLA": { - "claims": [ - "Qidi/Qidi Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFNZjrLo": { - "claims": [ - "Sovol/Sovol SV06 Plus ACE PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFNcdCrm": { - "claims": [ - "Anycubic/Anycubic Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFNiSLfL": { - "claims": [ - "OrcaFilamentLibrary/Generic PP-GF" - ], - "successor": "OFsijjtH" - }, - "OFNn21yM": { - "claims": [ - "Vzbot/Vzbot Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFOKYhi6": { - "claims": [ - "Prusa/Prusa Generic PETG HF" - ], - "successor": "OF7lOgYF" - }, - "OFPQfNAf": { - "claims": [ - "Flashforge/Flashforge PETG Pro" - ], - "successor": "OFXiArjA" - }, - "OFPdhDlK": { - "claims": [ - "Anycubic/Anycubic Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFPjOUtz": { - "claims": [ - "Flashforge/FusRock Generic PAHT-CF" - ], - "successor": "OFKW5hEW" - }, - "OFPryWt5": { - "claims": [ - "Lulzbot/Lulzbot 2.85mm PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFPy0Ogq": { - "claims": [ - "Qidi/Qidi Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFQ7I5vC": { - "claims": [ - "Prusa/Prusa Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFQ9qnkd": { - "claims": [ - "FLSun/FLSun T1 PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OFQC8Vna": { - "claims": [ - "Flashforge/Flashforge Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OFQTrLXB": { - "claims": [ - "Qidi/Qidi Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFQZeyZv": { - "claims": [ - "Flashforge/Flashforge PLA Buint Ti" - ], - "successor": "OF8O09RG" - }, - "OFQbqeN7": { - "claims": [ - "Qidi/Qidi Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFQiq4fb": { - "claims": [ - "Flashforge/Flashforge PVA" - ], - "successor": "OFaaddbQ" - }, - "OFQswlnF": { - "claims": [ - "Tiertime/Tiertime Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFRDLNM9": { - "claims": [ - "Peopoly/Peopoly Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFRPEs5o": { - "claims": [ - "Flashforge/Flashforge Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFRi7v0b": { - "claims": [ - "Sovol/Sovol SV08 PETG" - ], - "successor": "OFYPdQJh" - }, - "OFRiyes1": { - "claims": [ - "Anker/Anker Generic ASA", - "Anker/Anker Generic ASA 0.2 nozzle", - "Anker/Anker Generic ASA 0.25 nozzle" - ], - "successor": "OFLPAxz3" - }, - "OFRujL0v": { - "claims": [ - "Flashforge/FusRock Generic PET-CF" - ], - "successor": "OFDu1qE7" - }, - "OFRusgEn": { - "claims": [ - "Chuanying/Chuanying Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFRzsaDK": { - "claims": [ - "FlyingBear/FlyingBear Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFS8JF3S": { - "claims": [ - "Qidi/Qidi Generic PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OFSDFYs4": { - "claims": [ - "Creality/Creality Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFSGbf2I": { - "claims": [ - "Anycubic/Anycubic Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFSPdsuW": { - "claims": [ - "Tiertime/Tiertime Generic PPA-CF" - ], - "successor": "OF8tPByX" - }, - "OFSStjay": { - "claims": [ - "FLSun/FLSun S1 PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFSTCno1": { - "claims": [ - "re3D/re3D Greengate rPETG" - ], - "successor": "OFmCOW2Y" - }, - "OFShw1X8": { - "claims": [ - "Flashforge/Flashforge ABS Basic" - ], - "successor": "OFibWuBd" - }, - "OFTKFAZ4": { - "claims": [ - "Tiertime/Tiertime Generic PCTG" - ], - "successor": "OFu1evlr" - }, - "OFTvvox9": { - "claims": [ - "Sovol/Sovol SV06 ACE PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFU0n0zW": { - "claims": [ - "FLSun/FLSun T1 PLA Generic" - ], - "successor": "OFDSrzZ8" - }, - "OFU3zwPc": { - "claims": [ - "Prusa/Prusa Generic TPU HF" - ], - "successor": "OFnT7Qpb" - }, - "OFU5N9jI": { - "claims": [ - "OrcaArena/OrcaArena Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFU6fjbi": { - "claims": [ - "Co Print/CoPrint Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFUCpLaL": { - "claims": [ - "Flashforge/FlashForge PPS" - ], - "successor": "OFlgMgNM" - }, - "OFUScM0D": { - "claims": [ - "Flashforge/FusRock S-Multi" - ], - "successor": "OF0AquDh" - }, - "OFUWRqwb": { - "claims": [ - "Creality/Creality Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFUaVAdj": { - "claims": [ - "Tiertime/Tiertime Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFUrStd6": { - "claims": [ - "Ratrig/RatRig Generic PCTG" - ], - "successor": "OFu1evlr" - }, - "OFUtGagr": { - "claims": [ - "Artillery/Artillery Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFV0KrAG": { - "claims": [ - "FLSun/FLSun T1 ABS" - ], - "successor": "OFY9muEs" - }, - "OFVKADz5": { - "claims": [ - "Comgrow/Comgrow Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFVqZ2H0": { - "claims": [ - "FLSun/FLSun Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFW9uIkE": { - "claims": [ - "Tiertime/Tiertime Generic HIPS" - ], - "successor": "OFsFon5l" - }, - "OFWIr7ZE": { - "claims": [ - "CoLiDo/CoLiDo Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFWY6vBh": { - "claims": [ - "Anycubic/Anycubic Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFWadebJ": { - "claims": [ - "Tiertime/Tiertime Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OFWbbuRY": { - "claims": [ - "InfiMech/InfiMech Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFWnSvGu": { - "claims": [ - "Flashforge/Flashforge ASA-GF" - ], - "successor": "OFrZDhVt" - }, - "OFWof1Ap": { - "claims": [ - "FLSun/FLSun Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFWukXja": { - "claims": [ - "Qidi/Qidi Generic TPU 95A" - ], - "successor": "OFjiXpyf" - }, - "OFWzr7m0": { - "claims": [ - "Anycubic/Anycubic Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFXXUHSG": { - "claims": [ - "Chuanying/Chuanying Generic PETG-CF10" - ], - "successor": "OFO5djrM" - }, - "OFXhZ3uY": { - "claims": [ - "OrcaArena/OrcaArena Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFXuwtnq": { - "claims": [ - "Co Print/CoPrint Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFXyyfX6": { - "claims": [ - "Anker/Anker Generic PLA Silk", - "Anker/Anker Generic PLA Silk 0.2 nozzle", - "Anker/Anker Generic PLA Silk 0.25 nozzle" - ], - "successor": "OFesA6rF" - }, - "OFYHzKyS": { - "claims": [ - "Vzbot/Vzbot Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFYPdJ7t": { - "claims": [ - "Creality/Creality Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFYfAcLY": { - "claims": [ - "Ratrig/Generic PCTG BigNozzle" - ], - "successor": "OFXW4CDh" - }, - "OFYl0c8v": { - "claims": [ - "Flashforge/Flashforge Generic HIPS" - ], - "successor": "OFsFon5l" - }, - "OFYlZMmy": { - "claims": [ - "Chuanying/Chuanying Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFYlthXI": { - "claims": [ - "Flashforge/Flashforge Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFYtS9zg": { - "claims": [ - "Flashforge/FusRock PAHT-CF" - ], - "successor": "OFKW5hEW" - }, - "OFYvSO1W": { - "claims": [ - "Flashforge/Flashforge Generic PLA-Silk" - ], - "successor": "OFi6PfUM" - }, - "OFZ1hANN": { - "claims": [ - "Flashforge/FusRock Generic NexPA-CF25" - ], - "successor": "OFjt8dDO" - }, - "OFZ4fTO8": { - "claims": [ - "CONSTRUCT3D/C1 Generic High Flow PETG" - ], - "successor": "OFNjku08" - }, - "OFZHgTVI": { - "claims": [ - "Flashforge/Flashforge Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFZPlCck": { - "claims": [ - "Chuanying/Chuanying Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFZsChIG": { - "claims": [ - "Qidi/Qidi Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFa9X7yl": { - "claims": [ - "Flashforge/FusRock S-PAHT" - ], - "successor": "OFCn83wF" - }, - "OFaBwRvT": { - "claims": [ - "Flashforge/Flashforge ASA Basic" - ], - "successor": "OFFFg2Pf" - }, - "OFaFNP2U": { - "claims": [ - "Sovol/Sovol SV07 PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFaU2JxD": { - "claims": [ - "Dremel/Dremel Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFahE7HP": { - "claims": [ - "Blocks/Blocks Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFaz8VoR": { - "claims": [ - "Flashforge/Flashforge HIPS" - ], - "successor": "OFvaLVML" - }, - "OFbeeFkl": { - "claims": [ - "OrcaArena/OrcaArena Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFbenYUK": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFbjtPQy": { - "claims": [ - "FLSun/FLSun T1 ASA" - ], - "successor": "OFLPAxz3" - }, - "OFbt04e0": { - "claims": [ - "DeltaMaker/DeltaMaker Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFc0xiCz": { - "claims": [ - "InfiMech/InfiMech Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFcCzEkS": { - "claims": [ - "Prusa/Prusa Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFcJ7AKd": { - "claims": [ - "Sovol/Sovol SV08 PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFcdqaWI": { - "claims": [ - "Sovol/Sovol Zero PC" - ], - "successor": "OFLakOUI" - }, - "OFctbSkL": { - "claims": [ - "Blocks/Blocks Generic ASA-CF" - ], - "successor": "OF53eLVD" - }, - "OFd10YeG": { - "claims": [ - "Ratrig/RatRig Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFdEIwxy": { - "claims": [ - "Flashforge/Flashforge Generic PLA-CF10" - ], - "successor": "OFX2zcrM" - }, - "OFdHsxB4": { - "claims": [ - "TwoTrees/TwoTrees Generic 95A TPU" - ], - "successor": "OF6MMR8P" - }, - "OFdLdGgJ": { - "claims": [ - "OrcaArena/OrcaArena Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFdOWhCa": { - "claims": [ - "Ratrig/RatRig Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFdXgp2K": { - "claims": [ - "Chuanying/Chuanying Generic HS PLA", - "Chuanying/Chuanying HS PLA" - ], - "successor": "OFvxghTE" - }, - "OFdlGycb": { - "claims": [ - "CoLiDo/CoLiDo Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFe6sfXS": { - "claims": [ - "Flashforge/FlashForge PC" - ], - "successor": "OFWXCbVF" - }, - "OFe7Sx5B": { - "claims": [ - "Sovol/Sovol SV06 ACE PETG" - ], - "successor": "OFYPdQJh" - }, - "OFe8UJXH": { - "claims": [ - "Creality/Creality Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFeDfaCh": { - "claims": [ - "CoLiDo/CoLiDo Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFeJjoKF": { - "claims": [ - "FLSun/FLSun Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFeK2vkS": { - "claims": [ - "Chuanying/Chuanying Generic PLA-Silk", - "Chuanying/Chuanying PLA-SILK" - ], - "successor": "OFi6PfUM" - }, - "OFec7Qiw": { - "claims": [ - "Flashforge/Flashforge PLA Sparkle" - ], - "successor": "OFV5c8hG" - }, - "OFetENFF": { - "claims": [ - "OrcaArena/OrcaArena Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFfZ0lTS": { - "claims": [ - "Qidi/Qidi Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OFfegVpA": { - "claims": [ - "Flashforge/Polymaker Generic S1" - ], - "successor": "OFaDsTE0" - }, - "OFfxFQf9": { - "claims": [ - "Chuanying/Chuanying Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFfznI0Q": { - "claims": [ - "Prusa/Prusa Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFgSEwOZ": { - "claims": [ - "OrcaArena/OrcaArena Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFgSPtDn": { - "claims": [ - "MagicMaker/MM Generic PEEK" - ], - "successor": "OFz5oHgf" - }, - "OFgVJhVt": { - "claims": [ - "Tiertime/Tiertime Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFgcryz4": { - "claims": [ - "Ratrig/RatRig BigNozzle ASA" - ], - "successor": "OF4GM5qX" - }, - "OFgf4gZa": { - "claims": [ - "Flashforge/Flashforge PA" - ], - "successor": "OFEvEfw5" - }, - "OFgvOmM2": { - "claims": [ - "Anker/Anker Generic PETG", - "Anker/Anker Generic PETG 0.2 nozzle", - "Anker/Anker Generic PETG 0.25 nozzle" - ], - "successor": "OFYPdQJh" - }, - "OFhcrFw9": { - "claims": [ - "Creality/Creality Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFi7Bf0F": { - "claims": [ - "Flashforge/Flashforge ABS-CF" - ], - "successor": "OFYTIMbj" - }, - "OFiCHnso": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFiUSDih": { - "claims": [ - "Blocks/Blocks Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFifxPW1": { - "claims": [ - "DeltaMaker/DeltaMaker Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFiorRtJ": { - "claims": [ - "Blocks/Blocks Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFiuJSmy": { - "claims": [ - "Ratrig/RatRig BigNozzle PLA" - ], - "successor": "OFqFRiLb" - }, - "OFixgF4N": { - "claims": [ - "Flashforge/FusRock S-Multi" - ], - "successor": "OF0AquDh" - }, - "OFjoIVZ6": { - "claims": [ - "FlyingBear/FlyingBear Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFkUaDnU": { - "claims": [ - "Tiertime/Tiertime Generic PE-CF" - ], - "successor": "OFd0Fv0k" - }, - "OFkWaWRo": { - "claims": [ - "Sovol/Sovol SV06 Plus ACE TPU" - ], - "successor": "OFgbpcy9" - }, - "OFkYkQGO": { - "claims": [ - "Tiertime/Tiertime Generic PP-GF" - ], - "successor": "OFsijjtH" - }, - "OFkwIWwc": { - "claims": [ - "Flashforge/Flashforge PLA Color Change" - ], - "successor": "OFMkAW6r" - }, - "OFl2SXmv": { - "claims": [ - "Prusa/Prusa Generic FLEX" - ], - "successor": "OFbPuPKY" - }, - "OFl4ItvQ": { - "claims": [ - "Prusa/Prusa Generic PLA HF" - ], - "successor": "OFZr862X" - }, - "OFl7nOAf": { - "claims": [ - "Sovol/Sovol SV06 Plus ACE PETG" - ], - "successor": "OFYPdQJh" - }, - "OFlLmUeV": { - "claims": [ - "Ginger Additive/Ginger Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFlNWVr5": { - "claims": [ - "Flashforge/Flashforge Generic PETG-CF10" - ], - "successor": "OFO5djrM" - }, - "OFlXJxX1": { - "claims": [ - "Chuanying/Chuanying PETG" - ], - "successor": "OFYPdQJh" - }, - "OFlx52rn": { - "claims": [ - "Ratrig/RatRig Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFmQkb3c": { - "claims": [ - "Flashforge/Flashforge HS PLA Burnt Ti" - ], - "successor": "OF8O09RG" - }, - "OFma52eS": { - "claims": [ - "Blocks/Blocks Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFmexHIS": { - "claims": [ - "Ratrig/RatRig BigNozzle PETG" - ], - "successor": "OFvD0Qqt" - }, - "OFmhWhEf": { - "claims": [ - "Creality/Creality HF Generic PLA" - ], - "successor": "OFZr862X" - }, - "OFmnJNqY": { - "claims": [ - "OrcaArena/OrcaArena Generic PA" - ], - "successor": "OFg8ndtj" - }, - "OFmzftED": { - "claims": [ - "OrcaArena/OrcaArena Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFnMv3W5": { - "claims": [ - "Flashforge/Flashforge HS PLA" - ], - "successor": "OFIK2H3G" - }, - "OFndmfJ1": { - "claims": [ - "Anker/Anker Generic PLA", - "Anker/Anker Generic PLA 0.2 nozzle", - "Anker/Anker Generic PLA 0.25 nozzle" - ], - "successor": "OFDSrzZ8" - }, - "OFnfBvn5": { - "claims": [ - "Artillery/Artillery Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFnh79eM": { - "claims": [ - "SecKit/SecKit Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFoDgVnY": { - "claims": [ - "FLSun/FLSun S1 PLA Generic" - ], - "successor": "OFDSrzZ8" - }, - "OFoJcr46": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFoT8F7Y": { - "claims": [ - "Prusa/Prusa Generic PVA HF" - ], - "successor": "OFDwBwO5" - }, - "OFoVZg32": { - "claims": [ - "SecKit/SecKit Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OFodPDxO": { - "claims": [ - "Tiertime/Tiertime Generic PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OFogbnCb": { - "claims": [ - "Flashforge/FlashForge PPS-CF" - ], - "successor": "OFTSXxzE" - }, - "OFoqrHTw": { - "claims": [ - "FLSun/FLSun S1 PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OFp8gtPH": { - "claims": [ - "Creality/Creality Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFpAaY6w": { - "claims": [ - "Creality/Creality Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFpBV2Ma": { - "claims": [ - "Qidi/Tinmorry PETG-ECO" - ], - "successor": "OFYE7YZw" - }, - "OFpSYJLI": { - "claims": [ - "Creality/Creality Generic PLA Matte" - ], - "successor": "OFmY0l6t" - }, - "OFptvi3F": { - "claims": [ - "Tiertime/Tiertime Generic PPA-GF" - ], - "successor": "OF8Tlg47" - }, - "OFq5QANf": { - "claims": [ - "Prusa/Prusa Generic PC HF" - ], - "successor": "OFwwAQnA" - }, - "OFqKmLJe": { - "claims": [ - "Creality/Creality Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OFqOk9Ww": { - "claims": [ - "Peopoly/Peopoly Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFqS8fzK": { - "claims": [ - "SecKit/SecKit Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFrO2zyn": { - "claims": [ - "Creality/Creality Generic PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OFrQqCwL": { - "claims": [ - "InfiMech/InfiMech Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFrgGex8": { - "claims": [ - "Blocks/Blocks Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFrh4bBH": { - "claims": [ - "SecKit/SecKit Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFrnJJEa": { - "claims": [ - "Tiertime/Tiertime Generic EVA" - ], - "successor": "OFCD8qiU" - }, - "OFrnkURQ": { - "claims": [ - "Flashforge/Flashforge PLA Metal" - ], - "successor": "OFAebKg8" - }, - "OFrrMLDw": { - "claims": [ - "Flashforge/Flashforge Generic PLA-SILK" - ], - "successor": "OFkf1HHw" - }, - "OFs1sNLz": { - "claims": [ - "Chuanying/Chuanying ABS" - ], - "successor": "OFY9muEs" - }, - "OFs2ReMr": { - "claims": [ - "InfiMech/InfiMech Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFsCbVbN": { - "claims": [ - "Anker/Anker Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFsF96Gt": { - "claims": [ - "FLSun/FLSun Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFsGqI4y": { - "claims": [ - "Ginger Additive/Ginger Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFsNJjpc": { - "claims": [ - "Ratrig/RatRig BigNozzle TPU" - ], - "successor": "OF5tX6va" - }, - "OFsXOMoX": { - "claims": [ - "Qidi/Qidi Generic PLA+" - ], - "successor": "OFEWYR89" - }, - "OFsoQ12i": { - "claims": [ - "Comgrow/Comgrow Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFsxRSwr": { - "claims": [ - "Ratrig/RatRig Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFsxlLdo": { - "claims": [ - "Qidi/Qidi Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OFtP1rqJ": { - "claims": [ - "FLSun/FLSun Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFtTHNTj": { - "claims": [ - "Flashforge/Flashforge Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFtplX8o": { - "claims": [ - "Ratrig/RatRig BigNozzle ABS" - ], - "successor": "OFnyHfcv" - }, - "OFtsVp4v": { - "claims": [ - "SecKit/SecKit Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OFu79SUH": { - "claims": [ - "Qidi/Qidi Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFuFqYyG": { - "claims": [ - "Flashforge/Flashforge PAHT-CF" - ], - "successor": "OFKW5hEW" - }, - "OFuGRMNV": { - "claims": [ - "Flashforge/Flashforge PA-CF" - ], - "successor": "OFGxuI0n" - }, - "OFuSwKgm": { - "claims": [ - "Tiertime/Tiertime Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OFuUJyRx": { - "claims": [ - "FLSun/FLSun T1 PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFupq0tY": { - "claims": [ - "Blocks/Blocks Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFv4VZCd": { - "claims": [ - "Qidi/Qidi Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFvGc67v": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFvPomQf": { - "claims": [ - "Tiertime/Tiertime Generic PPS" - ], - "successor": "OFq9svOz" - }, - "OFvVxvzZ": { - "claims": [ - "Flashforge/Flashforge PLA Metal" - ], - "successor": "OFAebKg8" - }, - "OFwMFLAm": { - "claims": [ - "Artillery/Artillery Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFwpkvqf": { - "claims": [ - "OrcaArena/OrcaArena Generic PETG-CF" - ], - "successor": "OFoYSJKi" - }, - "OFwxpmHM": { - "claims": [ - "Flashforge/Polymaker Generic CoPA" - ], - "successor": "OFQyyO0l" - }, - "OFx0ZzFV": { - "claims": [ - "OrcaArena/OrcaArena Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OFxMGIPt": { - "claims": [ - "Flashforge/Flashforge PPS" - ], - "successor": "OFlgMgNM" - }, - "OFxTMg1d": { - "claims": [ - "FlyingBear/FlyingBear Generic PC" - ], - "successor": "OFLakOUI" - }, - "OFxg7n2G": { - "claims": [ - "Ratrig/RatRig Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFxvKuYW": { - "claims": [ - "Tiertime/Tiertime Generic PHA" - ], - "successor": "OF74KeQR" - }, - "OFy4ajVZ": { - "claims": [ - "Qidi/Qidi Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OFyCToOV": { - "claims": [ - "Sovol/Sovol SV08 TPU" - ], - "successor": "OFgbpcy9" - }, - "OFyFRojy": { - "claims": [ - "Ratrig/RatRig Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OFyK5Lt9": { - "claims": [ - "Artillery/Artillery Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFyeSq8A": { - "claims": [ - "Prusa/Prusa Generic ABS HF" - ], - "successor": "OF55jHAJ" - }, - "OFyySVby": { - "claims": [ - "SecKit/SecKit Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OFz3q5Xz": { - "claims": [ - "CONSTRUCT3D/C1 Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFzXURfo": { - "claims": [ - "FlyingBear/FlyingBear Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "OFzzmK2Q": { - "claims": [ - "FLSun/FLSun S1 ABS" - ], - "successor": "OFY9muEs" - }, - "OGFA00": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Basic" - ], - "successor": "OFoiVqVM" - }, - "OGFA01": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Matte" - ], - "successor": "OFXIbw5D" - }, - "OGFA02": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Metal" - ], - "successor": "OFrKLeE3" - }, - "OGFA03": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Impact" - ], - "successor": "OFTGHyNC" - }, - "OGFA05": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Silk" - ], - "successor": "OFEGNJD4" - }, - "OGFA06": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Silk+" - ], - "successor": "OFUanySo" - }, - "OGFA07": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Marble" - ], - "successor": "OF9OlTWH" - }, - "OGFA08": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Sparkle" - ], - "successor": "OFDxfPgH" - }, - "OGFA09": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Tough" - ], - "successor": "OFaQMgRH" - }, - "OGFA11": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Aero" - ], - "successor": "OFBSW57R" - }, - "OGFA12": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Glow" - ], - "successor": "OFEkPBwx" - }, - "OGFA13": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Dynamic" - ], - "successor": "OFDGigEI" - }, - "OGFA15": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Galaxy" - ], - "successor": "OFQ3e56w" - }, - "OGFA16": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA Wood" - ], - "successor": "OFMjtqTC" - }, - "OGFA50": { - "claims": [ - "OrcaFilamentLibrary/Bambu PLA-CF" - ], - "successor": "OFEswT5W" - }, - "OGFB00": { - "claims": [ - "OrcaFilamentLibrary/Bambu ABS" - ], - "successor": "OFhuaUQB" - }, - "OGFB01": { - "claims": [ - "OrcaFilamentLibrary/Bambu ASA" - ], - "successor": "OFfBpSRI" - }, - "OGFB02": { - "claims": [ - "OrcaFilamentLibrary/Bambu ASA-Aero" - ], - "successor": "OFXzQ4yL" - }, - "OGFB50": { - "claims": [ - "OrcaFilamentLibrary/Bambu ABS-GF" - ], - "successor": "OFknl9Iz" - }, - "OGFB51": { - "claims": [ - "OrcaFilamentLibrary/Bambu ASA-CF" - ], - "successor": "OF0wBGNx" - }, - "OGFB60": { - "claims": [ - "OrcaFilamentLibrary/PolyLite ABS" - ], - "successor": "OFOvv91M" - }, - "OGFB61": { - "claims": [ - "OrcaFilamentLibrary/PolyLite ASA" - ], - "successor": "OFvrXuV7" - }, - "OGFB98": { - "claims": [ - "Custom/Generic ASA", - "OrcaFilamentLibrary/Generic ASA" - ], - "successor": "OFLPAxz3" - }, - "OGFB99": { - "claims": [ - "Custom/Generic ABS", - "OrcaFilamentLibrary/Generic ABS", - "Sovol/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "OGFC00": { - "claims": [ - "OrcaFilamentLibrary/Bambu PC" - ], - "successor": "OFKhMPeX" - }, - "OGFC01": { - "claims": [ - "OrcaFilamentLibrary/Bambu PC FR" - ], - "successor": "OFg57Nmc" - }, - "OGFC99": { - "claims": [], - "successor": "OFLakOUI" - }, - "OGFG00": { - "claims": [ - "OrcaFilamentLibrary/Bambu PETG Basic" - ], - "successor": "OFFvzqcd" - }, - "OGFG01": { - "claims": [ - "OrcaFilamentLibrary/Bambu PETG Translucent" - ], - "successor": "OFwPrlCM" - }, - "OGFG02": { - "claims": [ - "OrcaFilamentLibrary/Bambu PETG HF" - ], - "successor": "OFovEIbw" - }, - "OGFG50": { - "claims": [ - "OrcaFilamentLibrary/Bambu PETG-CF" - ], - "successor": "OFTRZ8Y4" - }, - "OGFG60": { - "claims": [ - "OrcaFilamentLibrary/PolyLite PETG" - ], - "successor": "OF0UJcb6" - }, - "OGFG97": { - "claims": [ - "OrcaFilamentLibrary/Generic PCTG" - ], - "successor": "OFu1evlr" - }, - "OGFG99": { - "claims": [], - "successor": "OFYPdQJh" - }, - "OGFGG300": { - "claims": [ - "OrcaFilamentLibrary/GreenGate3D PETG" - ], - "successor": "OFhMO9Kh" - }, - "OGFL00": { - "claims": [ - "OrcaFilamentLibrary/PolyLite PLA" - ], - "successor": "OF5CgdDq" - }, - "OGFL00-1": { - "claims": [ - "OrcaFilamentLibrary/PolyTerra Dual PLA" - ], - "successor": "OFCccVrQ" - }, - "OGFL01": { - "claims": [ - "OrcaFilamentLibrary/PolyTerra PLA", - "Snapmaker/PolyTerra PLA" - ], - "successor": "OFW29a9R" - }, - "OGFL03": { - "claims": [ - "OrcaFilamentLibrary/eSUN PLA+" - ], - "successor": "OFqINlYj" - }, - "OGFL04": { - "claims": [ - "OrcaFilamentLibrary/Overture PLA" - ], - "successor": "OFc3xdm9" - }, - "OGFL05": { - "claims": [ - "OrcaFilamentLibrary/Overture Matte PLA" - ], - "successor": "OFBw6eEG" - }, - "OGFL06": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PETG-ESD" - ], - "successor": "OFcytyoA" - }, - "OGFL50": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PA6-CF" - ], - "successor": "OFkOviHk" - }, - "OGFL51": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PA6-GF" - ], - "successor": "OFwaYjL6" - }, - "OGFL52": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PA12-CF" - ], - "successor": "OFX0ycRQ" - }, - "OGFL53": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PA612-CF" - ], - "successor": "OFS2tn6G" - }, - "OGFL54": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PET-CF" - ], - "successor": "OFHWSM21" - }, - "OGFL55": { - "claims": [ - "OrcaFilamentLibrary/Fiberon PETG-rCF" - ], - "successor": "OFk8t9mz" - }, - "OGFL95": { - "claims": [ - "OrcaFilamentLibrary/Generic PLA High Speed" - ], - "successor": "OFmpMwxS" - }, - "OGFL96": { - "claims": [ - "Flashforge/Generic PLA Silk", - "Sovol/Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "OGFL98": { - "claims": [ - "OrcaFilamentLibrary/Generic PLA-CF" - ], - "successor": "OFWbdGsC" - }, - "OGFL99": { - "claims": [ - "Flashforge/Generic PLA", - "OrcaFilamentLibrary/Generic PLA", - "Sovol/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "OGFLC99": { - "claims": [ - "OrcaFilamentLibrary/Generic CoPE" - ], - "successor": "OFjt9en1" - }, - "OGFN03": { - "claims": [ - "OrcaFilamentLibrary/Bambu PA-CF" - ], - "successor": "OFFNYwWR" - }, - "OGFN04": { - "claims": [ - "OrcaFilamentLibrary/Bambu PAHT-CF" - ], - "successor": "OF2VFe4J" - }, - "OGFN05": { - "claims": [ - "OrcaFilamentLibrary/Bambu PA6-CF" - ], - "successor": "OFniMuTN" - }, - "OGFN06": { - "claims": [ - "OrcaFilamentLibrary/Bambu PPA-CF" - ], - "successor": "OF54B0S0" - }, - "OGFN08": { - "claims": [ - "OrcaFilamentLibrary/Bambu PA6-GF" - ], - "successor": "OFNk8bxk" - }, - "OGFN96": { - "claims": [ - "OrcaFilamentLibrary/Generic PPA-GF" - ], - "successor": "OF8Tlg47" - }, - "OGFN97": { - "claims": [ - "OrcaFilamentLibrary/Generic PPA-CF" - ], - "successor": "OF8tPByX" - }, - "OGFN98": { - "claims": [ - "Custom/Generic PA-CF", - "OrcaFilamentLibrary/Generic PA-CF" - ], - "successor": "OFQLcbps" - }, - "OGFN99": { - "claims": [], - "successor": "OFg8ndtj" - }, - "OGFNMK00": { - "claims": [ - "OrcaFilamentLibrary/Numakers PLA+" - ], - "successor": "OFqGRZyH" - }, - "OGFP97": { - "claims": [ - "OrcaFilamentLibrary/Generic PP" - ], - "successor": "OF1UNk9P" - }, - "OGFP99": { - "claims": [ - "OrcaFilamentLibrary/Generic PE" - ], - "successor": "OFPklMI1" - }, - "OGFPM001": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA" - ], - "successor": "OFsRDvTM" - }, - "OGFPM002": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Matte" - ], - "successor": "OFrOh600" - }, - "OGFPM003": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Marble" - ], - "successor": "OFKiSMWR" - }, - "OGFPM004": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Silk" - ], - "successor": "OFS8lTQt" - }, - "OGFPM005": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Satin" - ], - "successor": "OFPkCJKE" - }, - "OGFPM006": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Translucent" - ], - "successor": "OFCIUsWh" - }, - "OGFPM007": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Galaxy" - ], - "successor": "OFFkCLBl" - }, - "OGFPM008": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Celestial" - ], - "successor": "OFRiYgMK" - }, - "OGFPM009": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Starlight" - ], - "successor": "OFC78WGQ" - }, - "OGFPM010": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Glow" - ], - "successor": "OF0gGRWk" - }, - "OGFPM011": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Luminous" - ], - "successor": "OF0kCNDK" - }, - "OGFPM012": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Metallic" - ], - "successor": "OFjb0wos" - }, - "OGFPM013": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Neon" - ], - "successor": "OFO1GEq6" - }, - "OGFPM014": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA UV Shift" - ], - "successor": "OF1N1qMK" - }, - "OGFPM015": { - "claims": [ - "OrcaFilamentLibrary/Panchroma PLA Temp Shift" - ], - "successor": "OFhASRWj" - }, - "OGFPM016": { - "claims": [ - "OrcaFilamentLibrary/Panchroma CoPE" - ], - "successor": "OFqw2PQA" - }, - "OGFPM017": { - "claims": [ - "OrcaFilamentLibrary/Polymaker HT-PLA" - ], - "successor": "OFPoyiFs" - }, - "OGFPM018": { - "claims": [ - "OrcaFilamentLibrary/Polymaker HT-PLA-GF" - ], - "successor": "OFlwmqrC" - }, - "OGFPM019": { - "claims": [ - "OrcaFilamentLibrary/PolyLite PLA Pro" - ], - "successor": "OFF9OKoY" - }, - "OGFR00": { - "claims": [ - "OrcaFilamentLibrary/FusRock ABS-GF" - ], - "successor": "OFmn9NZL" - }, - "OGFR98": { - "claims": [ - "OrcaFilamentLibrary/Generic PHA" - ], - "successor": "OF74KeQR" - }, - "OGFR99": { - "claims": [ - "OrcaFilamentLibrary/Generic EVA" - ], - "successor": "OFCD8qiU" - }, - "OGFS00": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support W" - ], - "successor": "OFsHSVZc" - }, - "OGFS01": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support G" - ], - "successor": "OFQHiNJs" - }, - "OGFS02": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support For PLA" - ], - "successor": "OFAnyRUI" - }, - "OGFS03": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support For PA/PET" - ], - "successor": "OFMTK0UC" - }, - "OGFS04": { - "claims": [ - "OrcaFilamentLibrary/Bambu PVA" - ], - "successor": "OFzyIxba" - }, - "OGFS05": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support For PLA/PETG" - ], - "successor": "OFIfnzxC" - }, - "OGFS06": { - "claims": [ - "OrcaFilamentLibrary/Bambu Support for ABS" - ], - "successor": "OFf6mfQO" - }, - "OGFS97": { - "claims": [ - "Flashforge/Generic BVOH", - "OrcaFilamentLibrary/Generic BVOH" - ], - "successor": "OFo2UF2C" - }, - "OGFS98": { - "claims": [ - "OrcaFilamentLibrary/Generic HIPS" - ], - "successor": "OFsFon5l" - }, - "OGFS99": { - "claims": [ - "OrcaFilamentLibrary/Generic PVA" - ], - "successor": "OFDvXujf" - }, - "OGFSNL02": { - "claims": [ - "OrcaFilamentLibrary/SUNLU PLA Matte" - ], - "successor": "OFpW4gdi" - }, - "OGFSNL03": { - "claims": [ - "OrcaFilamentLibrary/SUNLU PLA+" - ], - "successor": "OFMUWNkp" - }, - "OGFSNL04": { - "claims": [ - "OrcaFilamentLibrary/SUNLU PLA+ 2.0" - ], - "successor": "OFHmPYRy" - }, - "OGFSNL05": { - "claims": [ - "OrcaFilamentLibrary/SUNLU Silk PLA+" - ], - "successor": "OFpPGSKG" - }, - "OGFSNL06": { - "claims": [ - "OrcaFilamentLibrary/SUNLU PLA Marble" - ], - "successor": "OFxUwUeW" - }, - "OGFSNL07": { - "claims": [ - "OrcaFilamentLibrary/SUNLU Wood PLA" - ], - "successor": "OFLJ8S6I" - }, - "OGFSNL08": { - "claims": [ - "Sovol/SUNLU PETG" - ], - "successor": "OF2GCW1l" - }, - "OGFT01": { - "claims": [ - "OrcaFilamentLibrary/Bambu PET-CF" - ], - "successor": "OFHa48An" - }, - "OGFT02": { - "claims": [], - "successor": null - }, - "OGFU00": { - "claims": [ - "OrcaFilamentLibrary/Bambu TPU 95A HF" - ], - "successor": "OFvKUnLh" - }, - "OGFU01": { - "claims": [ - "OrcaFilamentLibrary/Bambu TPU 95A" - ], - "successor": "OFVCkX5w" - }, - "OGFU99": { - "claims": [ - "OrcaFilamentLibrary/Generic TPU", - "Sovol/Generic TPU" - ], - "successor": "OFgbpcy9" - }, - "OVTABS08": { - "claims": [ - "OrcaFilamentLibrary/Overture ABS Basic" - ], - "successor": "OFDvqJ6n" - }, - "P1001": { - "claims": [ - "Creality/Panchroma PLA Satin" - ], - "successor": "OFPkCJKE" - }, - "P1002": { - "claims": [ - "Creality/PolySonic PLA Pro" - ], - "successor": "OFKbdiiJ" - }, - "P1003": { - "claims": [ - "Creality/Panchroma PLA Matte" - ], - "successor": "OFrOh600" - }, - "P1004": { - "claims": [ - "Creality/PolySonic PLA" - ], - "successor": "OF66KUAN" - }, - "P11851ba": { - "claims": [ - "Artillery/Artillery PET" - ], - "successor": "OFb5EEM3" - }, - "P284941e": { - "claims": [ - "Artillery/Artillery PETG", - "Artillery/Artillery PETG Basic" - ], - "successor": "OFilnglt" - }, - "P2fbf0c0": { - "claims": [ - "Artillery/Artillery TPU" - ], - "successor": "OFcJDtTx" - }, - "P39db358": { - "claims": [ - "Artillery/Artillery ABS" - ], - "successor": "OFgXgt98" - }, - "P510cfa0": { - "claims": [ - "Cubicon/Cubicon PLA" - ], - "successor": "OFEwRwmL" - }, - "P510cfa1": { - "claims": [ - "Cubicon/Cubicon PLA+" - ], - "successor": "OF7tt7DO" - }, - "P510cfa2": { - "claims": [ - "Cubicon/Cubicon PLAi21" - ], - "successor": "OFRhBryT" - }, - "P510cfb0": { - "claims": [ - "Cubicon/Cubicon ABS" - ], - "successor": "OFpDo5Ix" - }, - "P510cfb1": { - "claims": [ - "Cubicon/Cubicon ABS-A100" - ], - "successor": "OFy8tYJE" - }, - "P510cfb2": { - "claims": [ - "Cubicon/Cubicon ABSk" - ], - "successor": "OForhBi4" - }, - "P510cfc0": { - "claims": [ - "Cubicon/Cubicon PETG" - ], - "successor": "OFoBTKmn" - }, - "P510cfd0": { - "claims": [ - "Cubicon/Cubicon PA-CF" - ], - "successor": "OFiEz2XI" - }, - "P510eff9": { - "claims": [ - "Ginger Additive/Ginger Generic PETG" - ], - "successor": "OFsGqI4y" - }, - "P8163162": { - "claims": [ - "Artillery/Artillery PVA" - ], - "successor": "OFkx5MEe" - }, - "P87436f6": { - "claims": [ - "Artillery/Artillery ASA" - ], - "successor": "OF5YVJXH" - }, - "Pfcf9c4c": { - "claims": [ - "Artillery/Artillery PLA" - ], - "successor": "OFzY7N3Z" - }, - "Prusa Generic ABS @CORE One": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ABS @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusa Generic ABS" - ], - "successor": "OFvGc67v" - }, - "Prusa Generic ASA @CORE One": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic ASA @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusa Generic PETG @CORE One": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PETG @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusa Generic PETG" - ], - "successor": "OF1Id239" - }, - "Prusa Generic PLA @CORE One": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusa Generic PLA" - ], - "successor": "OFiCHnso" - }, - "Prusa Generic PLA Silk @CORE One": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Prusa Generic PLA Silk @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Prusa Generic PLA Silk @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic PLA Silk" - ], - "successor": "OFHFZ1Te" - }, - "Prusa Generic TPU @CORE One": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Prusa Generic TPU @CORE One 0.6": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Prusa Generic TPU @CORE One 0.8": { - "claims": [ - "Prusa/Prusa Generic TPU" - ], - "successor": "OFbenYUK" - }, - "Prusament ASA @CORE One": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One 0.6": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One 0.8": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusament ASA" - ], - "successor": "OFmFwUWM" - }, - "Prusament ASA @MK4S": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S 0.6": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S 0.8": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S HF0.4": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S HF0.5": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S HF0.6": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament ASA @MK4S HF0.8": { - "claims": [ - "Prusa/Prusa Generic ASA" - ], - "successor": "OFoJcr46" - }, - "Prusament PA-CF @CORE One": { - "claims": [ - "Prusa/Prusament PA-CF" - ], - "successor": "OF54SvEe" - }, - "Prusament PA-CF @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PA-CF" - ], - "successor": "OF54SvEe" - }, - "Prusament PA-CF @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PA-CF" - ], - "successor": "OF54SvEe" - }, - "Prusament PC Blend @CORE One": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC Blend @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusament PC Blend" - ], - "successor": "OFvDbkFq" - }, - "Prusament PC-CF @CORE One": { - "claims": [ - "Prusa/Prusament PC-CF" - ], - "successor": "OFjz0a3m" - }, - "Prusament PC-CF @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PC-CF" - ], - "successor": "OFjz0a3m" - }, - "Prusament PC-CF @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PC-CF" - ], - "successor": "OFjz0a3m" - }, - "Prusament PETG @CORE One": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PETG @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusament PETG" - ], - "successor": "OFkR8E2c" - }, - "Prusament PLA @CORE One": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One HF 0.4": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One HF 0.5": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One HF 0.6": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PLA @CORE One HF 0.8": { - "claims": [ - "Prusa/Prusament PLA" - ], - "successor": "OFnO4wnf" - }, - "Prusament PVB @CORE One": { - "claims": [ - "Prusa/Prusament PVB" - ], - "successor": "OFh7mvPO" - }, - "Prusament PVB @CORE One 0.6": { - "claims": [ - "Prusa/Prusament PVB" - ], - "successor": "OFh7mvPO" - }, - "Prusament PVB @CORE One 0.8": { - "claims": [ - "Prusa/Prusament PVB" - ], - "successor": "OFh7mvPO" - }, - "Prusament rPLA @CORE One": { - "claims": [ - "Prusa/Prusament rPLA" - ], - "successor": "OFWRITFw" - }, - "Prusament rPLA @CORE One 0.6": { - "claims": [ - "Prusa/Prusament rPLA" - ], - "successor": "OFWRITFw" - }, - "Prusament rPLA @CORE One 0.8": { - "claims": [ - "Prusa/Prusament rPLA" - ], - "successor": "OFWRITFw" - }, - "QD_0_1_1": { - "claims": [ - "Qidi/QIDI PLA Rapido" - ], - "successor": "OFKIQO2W" - }, - "QD_0_1_15": { - "claims": [ - "Qidi/QIDI TPU-GF" - ], - "successor": "OF9EHUKK" - }, - "QD_0_1_2": { - "claims": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "successor": "OF3IKafc" - }, - "QD_0_1_20": { - "claims": [ - "Qidi/QIDI ASA-CF" - ], - "successor": "OF1W7c76" - }, - "QD_0_1_24": { - "claims": [ - "Qidi/QIDI PA-Ultra" - ], - "successor": "OFlN6DL1" - }, - "QD_0_1_26": { - "claims": [ - "Qidi/QIDI UltraPA-CF25" - ], - "successor": "OF9PELEb" - }, - "QD_0_1_27": { - "claims": [ - "Qidi/QIDI PA12-CF" - ], - "successor": "OFn6WpN7" - }, - "QD_0_1_3": { - "claims": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "successor": "OFANFm4x" - }, - "QD_0_1_30": { - "claims": [ - "Qidi/QIDI PAHT-CF" - ], - "successor": "OFKgmsqE" - }, - "QD_0_1_31": { - "claims": [ - "Qidi/QIDI PAHT-GF" - ], - "successor": "OFo15hcT" - }, - "QD_0_1_32": { - "claims": [ - "Qidi/QIDI Support For PAHT" - ], - "successor": "OFXn3Vd9" - }, - "QD_0_1_33": { - "claims": [ - "Qidi/QIDI Support For PET/PA" - ], - "successor": "OFqcL5UF" - }, - "QD_0_1_34": { - "claims": [ - "Qidi/Qidi PC-ABS-FR" - ], - "successor": "OFjD3YTW" - }, - "QD_0_1_36": { - "claims": [ - "Qidi/QIDI PEBA 95A" - ], - "successor": "OFhiJE7Y" - }, - "QD_0_1_37": { - "claims": [ - "Qidi/QIDI PET-CF" - ], - "successor": "OFKfJTwL" - }, - "QD_0_1_38": { - "claims": [ - "Qidi/QIDI PET-GF" - ], - "successor": "OFhx4uOG" - }, - "QD_0_1_39": { - "claims": [ - "Qidi/QIDI PETG Basic" - ], - "successor": "OFuJ49uH" - }, - "QD_0_1_4": { - "claims": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "successor": "OFW5FqkL" - }, - "QD_0_1_40": { - "claims": [ - "Qidi/QIDI PETG Tough" - ], - "successor": "OFQ40XeN" - }, - "QD_0_1_41": { - "claims": [ - "Qidi/QIDI PETG Rapido" - ], - "successor": "OF4S3To3" - }, - "QD_0_1_42": { - "claims": [ - "Qidi/QIDI PETG-CF" - ], - "successor": "OF4iWKrE" - }, - "QD_0_1_43": { - "claims": [ - "Qidi/QIDI PETG-GF" - ], - "successor": "OFdtPd9h" - }, - "QD_0_1_44": { - "claims": [ - "Qidi/QIDI PPS-CF" - ], - "successor": "OFZOuWrO" - }, - "QD_0_1_45": { - "claims": [ - "Qidi/QIDI PETG Translucent" - ], - "successor": "OFf0MkD5" - }, - "QD_0_1_46": { - "claims": [ - "Qidi/QIDI PPS-GF" - ], - "successor": "OFp57RRC" - }, - "QD_0_1_49": { - "claims": [ - "Qidi/QIDI TPU-Aero" - ], - "successor": "OFMDHOcT" - }, - "QD_0_1_5": { - "claims": [ - "Qidi/QIDI PLA-CF" - ], - "successor": "OFhWrAuP" - }, - "QD_0_1_50": { - "claims": [ - "Qidi/Qidi TPU 95A-HF" - ], - "successor": "OFzAWsca" - }, - "QD_0_1_6": { - "claims": [ - "Qidi/QIDI WOOD Rapido" - ], - "successor": "OFvdZ2bx" - }, - "QD_0_1_7": { - "claims": [ - "Qidi/QIDI PLA Basic" - ], - "successor": "OF4nQ62r" - }, - "QD_0_1_8": { - "claims": [ - "Qidi/QIDI PLA Matte Basic" - ], - "successor": "OFughwKn" - }, - "QD_1_0_1": { - "claims": [ - "Qidi/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "QD_1_0_11": { - "claims": [ - "Qidi/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "QD_1_0_23": { - "claims": [ - "Qidi/Generic PC" - ], - "successor": "OFLakOUI" - }, - "QD_1_0_4": { - "claims": [ - "Qidi/Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "QD_1_0_41": { - "claims": [ - "Qidi/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "QD_1_0_50": { - "claims": [ - "Qidi/Generic TPU 95A" - ], - "successor": "OFjiXpyf" - }, - "QD_1_1_1": { - "claims": [ - "Qidi/QIDI PLA Rapido" - ], - "successor": "OFKIQO2W" - }, - "QD_1_1_11": { - "claims": [ - "Qidi/QIDI ABS Rapido" - ], - "successor": "OFT2jon4" - }, - "QD_1_1_12": { - "claims": [ - "Qidi/QIDI ABS-GF" - ], - "successor": "OFt3HtlG" - }, - "QD_1_1_13": { - "claims": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "successor": "OFeCJqxx" - }, - "QD_1_1_14": { - "claims": [ - "Qidi/QIDI ABS Odorless" - ], - "successor": "OFma5TXH" - }, - "QD_1_1_15": { - "claims": [ - "Qidi/QIDI TPU-GF" - ], - "successor": "OF9EHUKK" - }, - "QD_1_1_18": { - "claims": [ - "Qidi/QIDI ASA" - ], - "successor": "OFTsHNQi" - }, - "QD_1_1_19": { - "claims": [ - "Qidi/QIDI ASA-Aero" - ], - "successor": "OFu1E4ur" - }, - "QD_1_1_2": { - "claims": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "successor": "OF3IKafc" - }, - "QD_1_1_20": { - "claims": [ - "Qidi/QIDI ASA-CF" - ], - "successor": "OF1W7c76" - }, - "QD_1_1_24": { - "claims": [ - "Qidi/QIDI UltraPA" - ], - "successor": "OFWDe7YH" - }, - "QD_1_1_26": { - "claims": [ - "Qidi/QIDI UltraPA-CF25" - ], - "successor": "OF9PELEb" - }, - "QD_1_1_27": { - "claims": [ - "Qidi/QIDI PA12-CF" - ], - "successor": "OFn6WpN7" - }, - "QD_1_1_3": { - "claims": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "successor": "OFANFm4x" - }, - "QD_1_1_30": { - "claims": [ - "Qidi/QIDI PAHT-CF" - ], - "successor": "OFKgmsqE" - }, - "QD_1_1_31": { - "claims": [ - "Qidi/QIDI PAHT-GF" - ], - "successor": "OFo15hcT" - }, - "QD_1_1_32": { - "claims": [ - "Qidi/QIDI Support For PAHT" - ], - "successor": "OFXn3Vd9" - }, - "QD_1_1_33": { - "claims": [ - "Qidi/QIDI Support For PET/PA" - ], - "successor": "OFqcL5UF" - }, - "QD_1_1_34": { - "claims": [ - "Qidi/QIDI PC-ABS-FR" - ], - "successor": "OFFAWVf0" - }, - "QD_1_1_36": { - "claims": [ - "Qidi/QIDI PEBA 95A" - ], - "successor": "OFhiJE7Y" - }, - "QD_1_1_37": { - "claims": [ - "Qidi/QIDI PET-CF" - ], - "successor": "OFKfJTwL" - }, - "QD_1_1_38": { - "claims": [ - "Qidi/QIDI PET-GF" - ], - "successor": "OFhx4uOG" - }, - "QD_1_1_39": { - "claims": [ - "Qidi/QIDI PETG Basic" - ], - "successor": "OFuJ49uH" - }, - "QD_1_1_4": { - "claims": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "successor": "OFW5FqkL" - }, - "QD_1_1_40": { - "claims": [ - "Qidi/QIDI PETG Tough" - ], - "successor": "OFQ40XeN" - }, - "QD_1_1_41": { - "claims": [ - "Qidi/QIDI PETG Rapido" - ], - "successor": "OF4S3To3" - }, - "QD_1_1_42": { - "claims": [ - "Qidi/QIDI PETG-CF" - ], - "successor": "OF4iWKrE" - }, - "QD_1_1_43": { - "claims": [ - "Qidi/QIDI PETG-GF" - ], - "successor": "OFdtPd9h" - }, - "QD_1_1_44": { - "claims": [ - "Qidi/QIDI PPS-CF" - ], - "successor": "OFZOuWrO" - }, - "QD_1_1_45": { - "claims": [ - "Qidi/QIDI PETG Translucent" - ], - "successor": "OFf0MkD5" - }, - "QD_1_1_46": { - "claims": [ - "Qidi/QIDI PPS-GF" - ], - "successor": "OFp57RRC" - }, - "QD_1_1_49": { - "claims": [ - "Qidi/QIDI TPU-Aero" - ], - "successor": "OFMDHOcT" - }, - "QD_1_1_5": { - "claims": [ - "Qidi/QIDI PLA-CF" - ], - "successor": "OFhWrAuP" - }, - "QD_1_1_50": { - "claims": [ - "Qidi/QIDI TPU 95A-HF" - ], - "successor": "OFR1XLMN" - }, - "QD_1_1_6": { - "claims": [ - "Qidi/QIDI WOOD Rapido" - ], - "successor": "OFvdZ2bx" - }, - "QD_1_1_7": { - "claims": [ - "Qidi/QIDI PLA Basic" - ], - "successor": "OF4nQ62r" - }, - "QD_1_1_8": { - "claims": [ - "Qidi/QIDI PLA Matte Basic" - ], - "successor": "OFughwKn" - }, - "QD_2_0_1": { - "claims": [ - "Qidi/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "QD_2_0_11": { - "claims": [ - "Qidi/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "QD_2_0_23": { - "claims": [ - "Qidi/Generic PC" - ], - "successor": "OFLakOUI" - }, - "QD_2_0_4": { - "claims": [ - "Qidi/Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "QD_2_0_41": { - "claims": [ - "Qidi/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "QD_2_0_50": { - "claims": [ - "Qidi/Generic TPU 95A" - ], - "successor": "OFjiXpyf" - }, - "QD_2_1_1": { - "claims": [ - "Qidi/QIDI PLA Rapido" - ], - "successor": "OFKIQO2W" - }, - "QD_2_1_11": { - "claims": [ - "Qidi/QIDI ABS Rapido" - ], - "successor": "OFT2jon4" - }, - "QD_2_1_12": { - "claims": [ - "Qidi/QIDI ABS-GF" - ], - "successor": "OFt3HtlG" - }, - "QD_2_1_13": { - "claims": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "successor": "OFeCJqxx" - }, - "QD_2_1_14": { - "claims": [ - "Qidi/QIDI ABS Odorless" - ], - "successor": "OFma5TXH" - }, - "QD_2_1_15": { - "claims": [ - "Qidi/QIDI TPU-GF" - ], - "successor": "OF9EHUKK" - }, - "QD_2_1_18": { - "claims": [ - "Qidi/QIDI ASA" - ], - "successor": "OFTsHNQi" - }, - "QD_2_1_19": { - "claims": [ - "Qidi/QIDI ASA-Aero" - ], - "successor": "OFu1E4ur" - }, - "QD_2_1_2": { - "claims": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "successor": "OF3IKafc" - }, - "QD_2_1_20": { - "claims": [ - "Qidi/QIDI ASA-CF" - ], - "successor": "OF1W7c76" - }, - "QD_2_1_24": { - "claims": [ - "Qidi/QIDI UltraPA" - ], - "successor": "OFWDe7YH" - }, - "QD_2_1_26": { - "claims": [ - "Qidi/QIDI UltraPA-CF25" - ], - "successor": "OF9PELEb" - }, - "QD_2_1_27": { - "claims": [ - "Qidi/QIDI PA12-CF" - ], - "successor": "OFn6WpN7" - }, - "QD_2_1_3": { - "claims": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "successor": "OFANFm4x" - }, - "QD_2_1_30": { - "claims": [ - "Qidi/QIDI PAHT-CF" - ], - "successor": "OFKgmsqE" - }, - "QD_2_1_31": { - "claims": [ - "Qidi/QIDI PAHT-GF" - ], - "successor": "OFo15hcT" - }, - "QD_2_1_32": { - "claims": [ - "Qidi/QIDI Support For PAHT" - ], - "successor": "OFXn3Vd9" - }, - "QD_2_1_33": { - "claims": [ - "Qidi/QIDI Support For PET/PA" - ], - "successor": "OFqcL5UF" - }, - "QD_2_1_34": { - "claims": [ - "Qidi/QIDI PC-ABS-FR" - ], - "successor": "OFFAWVf0" - }, - "QD_2_1_36": { - "claims": [ - "Qidi/QIDI PEBA 95A" - ], - "successor": "OFhiJE7Y" - }, - "QD_2_1_37": { - "claims": [ - "Qidi/QIDI PET-CF" - ], - "successor": "OFKfJTwL" - }, - "QD_2_1_38": { - "claims": [ - "Qidi/QIDI PET-GF" - ], - "successor": "OFhx4uOG" - }, - "QD_2_1_39": { - "claims": [ - "Qidi/QIDI PETG Basic" - ], - "successor": "OFuJ49uH" - }, - "QD_2_1_4": { - "claims": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "successor": "OFW5FqkL" - }, - "QD_2_1_40": { - "claims": [ - "Qidi/QIDI PETG Tough" - ], - "successor": "OFQ40XeN" - }, - "QD_2_1_41": { - "claims": [ - "Qidi/QIDI PETG Rapido" - ], - "successor": "OF4S3To3" - }, - "QD_2_1_42": { - "claims": [ - "Qidi/QIDI PETG-CF" - ], - "successor": "OF4iWKrE" - }, - "QD_2_1_43": { - "claims": [ - "Qidi/QIDI PETG-GF" - ], - "successor": "OFdtPd9h" - }, - "QD_2_1_44": { - "claims": [ - "Qidi/QIDI PPS-CF" - ], - "successor": "OFZOuWrO" - }, - "QD_2_1_45": { - "claims": [ - "Qidi/QIDI PETG Translucent" - ], - "successor": "OFf0MkD5" - }, - "QD_2_1_46": { - "claims": [ - "Qidi/QIDI PPS-GF" - ], - "successor": "OFp57RRC" - }, - "QD_2_1_49": { - "claims": [ - "Qidi/QIDI TPU-Aero" - ], - "successor": "OFMDHOcT" - }, - "QD_2_1_5": { - "claims": [ - "Qidi/QIDI PLA-CF" - ], - "successor": "OFhWrAuP" - }, - "QD_2_1_50": { - "claims": [ - "Qidi/QIDI TPU 95A-HF" - ], - "successor": "OFR1XLMN" - }, - "QD_2_1_6": { - "claims": [ - "Qidi/QIDI WOOD Rapido" - ], - "successor": "OFvdZ2bx" - }, - "QD_2_1_7": { - "claims": [ - "Qidi/QIDI PLA Basic" - ], - "successor": "OF4nQ62r" - }, - "QD_2_1_8": { - "claims": [ - "Qidi/QIDI PLA Matte Basic" - ], - "successor": "OFughwKn" - }, - "QD_3_0_1": { - "claims": [ - "Qidi/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "QD_3_0_11": { - "claims": [ - "Qidi/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "QD_3_0_23": { - "claims": [ - "Qidi/Generic PC" - ], - "successor": "OFLakOUI" - }, - "QD_3_0_4": { - "claims": [ - "Qidi/Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "QD_3_0_41": { - "claims": [ - "Qidi/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "QD_3_0_50": { - "claims": [ - "Qidi/Generic TPU 95A" - ], - "successor": "OFjiXpyf" - }, - "QD_3_1_1": { - "claims": [ - "Qidi/QIDI PLA Rapido" - ], - "successor": "OFKIQO2W" - }, - "QD_3_1_11": { - "claims": [ - "Qidi/QIDI ABS Rapido" - ], - "successor": "OFT2jon4" - }, - "QD_3_1_12": { - "claims": [ - "Qidi/QIDI ABS-GF" - ], - "successor": "OFt3HtlG" - }, - "QD_3_1_13": { - "claims": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "successor": "OFeCJqxx" - }, - "QD_3_1_14": { - "claims": [ - "Qidi/QIDI ABS Odorless" - ], - "successor": "OFma5TXH" - }, - "QD_3_1_15": { - "claims": [ - "Qidi/QIDI TPU-GF" - ], - "successor": "OF9EHUKK" - }, - "QD_3_1_18": { - "claims": [ - "Qidi/QIDI ASA" - ], - "successor": "OFTsHNQi" - }, - "QD_3_1_19": { - "claims": [ - "Qidi/QIDI ASA-Aero" - ], - "successor": "OFu1E4ur" - }, - "QD_3_1_2": { - "claims": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "successor": "OF3IKafc" - }, - "QD_3_1_20": { - "claims": [ - "Qidi/QIDI ASA-CF" - ], - "successor": "OF1W7c76" - }, - "QD_3_1_24": { - "claims": [ - "Qidi/QIDI UltraPA" - ], - "successor": "OFWDe7YH" - }, - "QD_3_1_26": { - "claims": [ - "Qidi/QIDI UltraPA-CF25" - ], - "successor": "OF9PELEb" - }, - "QD_3_1_27": { - "claims": [ - "Qidi/QIDI PA12-CF" - ], - "successor": "OFn6WpN7" - }, - "QD_3_1_3": { - "claims": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "successor": "OFANFm4x" - }, - "QD_3_1_30": { - "claims": [ - "Qidi/QIDI PAHT-CF" - ], - "successor": "OFKgmsqE" - }, - "QD_3_1_31": { - "claims": [ - "Qidi/QIDI PAHT-GF" - ], - "successor": "OFo15hcT" - }, - "QD_3_1_32": { - "claims": [ - "Qidi/QIDI Support For PAHT" - ], - "successor": "OFXn3Vd9" - }, - "QD_3_1_33": { - "claims": [ - "Qidi/QIDI Support For PET/PA" - ], - "successor": "OFqcL5UF" - }, - "QD_3_1_34": { - "claims": [ - "Qidi/QIDI PC/ABS-FR" - ], - "successor": "OFDIrhbu" - }, - "QD_3_1_36": { - "claims": [ - "Qidi/QIDI PEBA 95A" - ], - "successor": "OFhiJE7Y" - }, - "QD_3_1_37": { - "claims": [ - "Qidi/QIDI PET-CF" - ], - "successor": "OFKfJTwL" - }, - "QD_3_1_38": { - "claims": [ - "Qidi/QIDI PET-GF" - ], - "successor": "OFhx4uOG" - }, - "QD_3_1_39": { - "claims": [ - "Qidi/QIDI PETG Basic" - ], - "successor": "OFuJ49uH" - }, - "QD_3_1_4": { - "claims": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "successor": "OFW5FqkL" - }, - "QD_3_1_40": { - "claims": [ - "Qidi/QIDI PETG Tough" - ], - "successor": "OFQ40XeN" - }, - "QD_3_1_41": { - "claims": [ - "Qidi/QIDI PETG Rapido" - ], - "successor": "OF4S3To3" - }, - "QD_3_1_42": { - "claims": [ - "Qidi/QIDI PETG-CF" - ], - "successor": "OF4iWKrE" - }, - "QD_3_1_43": { - "claims": [ - "Qidi/QIDI PETG-GF" - ], - "successor": "OFdtPd9h" - }, - "QD_3_1_44": { - "claims": [ - "Qidi/QIDI PPS-CF" - ], - "successor": "OFZOuWrO" - }, - "QD_3_1_45": { - "claims": [ - "Qidi/QIDI PETG Translucent" - ], - "successor": "OFf0MkD5" - }, - "QD_3_1_46": { - "claims": [ - "Qidi/QIDI PPS-GF" - ], - "successor": "OFp57RRC" - }, - "QD_3_1_49": { - "claims": [ - "Qidi/QIDI TPU-Aero" - ], - "successor": "OFMDHOcT" - }, - "QD_3_1_5": { - "claims": [ - "Qidi/QIDI PLA-CF" - ], - "successor": "OFhWrAuP" - }, - "QD_3_1_50": { - "claims": [ - "Qidi/QIDI TPU 95A-HF" - ], - "successor": "OFR1XLMN" - }, - "QD_3_1_6": { - "claims": [ - "Qidi/QIDI WOOD Rapido" - ], - "successor": "OFvdZ2bx" - }, - "QD_3_1_7": { - "claims": [ - "Qidi/QIDI PLA Basic" - ], - "successor": "OF4nQ62r" - }, - "QD_3_1_8": { - "claims": [ - "Qidi/QIDI PLA Matte Basic" - ], - "successor": "OFughwKn" - }, - "QD_4_0_1": { - "claims": [ - "Qidi/Generic PLA" - ], - "successor": "OFDSrzZ8" - }, - "QD_4_0_11": { - "claims": [ - "Qidi/Generic ABS" - ], - "successor": "OFY9muEs" - }, - "QD_4_0_23": { - "claims": [ - "Qidi/Generic PC" - ], - "successor": "OFLakOUI" - }, - "QD_4_0_4": { - "claims": [ - "Qidi/Generic PLA Silk" - ], - "successor": "OFesA6rF" - }, - "QD_4_0_41": { - "claims": [ - "Qidi/Generic PETG" - ], - "successor": "OFYPdQJh" - }, - "QD_4_0_50": { - "claims": [ - "Qidi/Generic TPU 95A" - ], - "successor": "OFjiXpyf" - }, - "QD_4_1_1": { - "claims": [ - "Qidi/QIDI PLA Rapido" - ], - "successor": "OFKIQO2W" - }, - "QD_4_1_11": { - "claims": [ - "Qidi/QIDI ABS Rapido" - ], - "successor": "OFT2jon4" - }, - "QD_4_1_12": { - "claims": [ - "Qidi/QIDI ABS-GF" - ], - "successor": "OFt3HtlG" - }, - "QD_4_1_13": { - "claims": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "successor": "OFeCJqxx" - }, - "QD_4_1_14": { - "claims": [ - "Qidi/QIDI ABS Odorless" - ], - "successor": "OFma5TXH" - }, - "QD_4_1_15": { - "claims": [ - "Qidi/QIDI TPU-GF" - ], - "successor": "OF9EHUKK" - }, - "QD_4_1_18": { - "claims": [ - "Qidi/QIDI ASA" - ], - "successor": "OFTsHNQi" - }, - "QD_4_1_19": { - "claims": [ - "Qidi/QIDI ASA-Aero" - ], - "successor": "OFu1E4ur" - }, - "QD_4_1_2": { - "claims": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "successor": "OF3IKafc" - }, - "QD_4_1_20": { - "claims": [ - "Qidi/QIDI ASA-CF" - ], - "successor": "OF1W7c76" - }, - "QD_4_1_24": { - "claims": [ - "Qidi/QIDI UltraPA" - ], - "successor": "OFWDe7YH" - }, - "QD_4_1_25": { - "claims": [ - "Qidi/QIDI PA6-CF" - ], - "successor": "OFZ3K2cL" - }, - "QD_4_1_26": { - "claims": [ - "Qidi/QIDI UltraPA-CF25" - ], - "successor": "OF9PELEb" - }, - "QD_4_1_27": { - "claims": [ - "Qidi/QIDI PA12-CF" - ], - "successor": "OFn6WpN7" - }, - "QD_4_1_3": { - "claims": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "successor": "OFANFm4x" - }, - "QD_4_1_30": { - "claims": [ - "Qidi/QIDI PAHT-CF" - ], - "successor": "OFKgmsqE" - }, - "QD_4_1_31": { - "claims": [ - "Qidi/QIDI PAHT-GF" - ], - "successor": "OFo15hcT" - }, - "QD_4_1_32": { - "claims": [ - "Qidi/QIDI Support For PAHT" - ], - "successor": "OFXn3Vd9" - }, - "QD_4_1_33": { - "claims": [ - "Qidi/QIDI Support For PET/PA" - ], - "successor": "OFqcL5UF" - }, - "QD_4_1_34": { - "claims": [ - "Qidi/QIDI PC/ABS-FR" - ], - "successor": "OFDIrhbu" - }, - "QD_4_1_36": { - "claims": [ - "Qidi/QIDI PEBA 95A" - ], - "successor": "OFhiJE7Y" - }, - "QD_4_1_37": { - "claims": [ - "Qidi/QIDI PET-CF" - ], - "successor": "OFKfJTwL" - }, - "QD_4_1_38": { - "claims": [ - "Qidi/QIDI PET-GF" - ], - "successor": "OFhx4uOG" - }, - "QD_4_1_39": { - "claims": [ - "Qidi/QIDI PETG Basic" - ], - "successor": "OFuJ49uH" - }, - "QD_4_1_4": { - "claims": [ - "Qidi/QIDI PLA Silk" - ], - "successor": "OF2TQpOO" - }, - "QD_4_1_40": { - "claims": [ - "Qidi/QIDI PETG Tough" - ], - "successor": "OFQ40XeN" - }, - "QD_4_1_41": { - "claims": [ - "Qidi/QIDI PETG Rapido" - ], - "successor": "OF4S3To3" - }, - "QD_4_1_42": { - "claims": [ - "Qidi/QIDI PETG-CF" - ], - "successor": "OF4iWKrE" - }, - "QD_4_1_43": { - "claims": [ - "Qidi/QIDI PETG-GF" - ], - "successor": "OFdtPd9h" - }, - "QD_4_1_44": { - "claims": [ - "Qidi/QIDI PPS-CF" - ], - "successor": "OFZOuWrO" - }, - "QD_4_1_45": { - "claims": [ - "Qidi/QIDI PETG Translucent" - ], - "successor": "OFf0MkD5" - }, - "QD_4_1_46": { - "claims": [ - "Qidi/QIDI PPS-GF" - ], - "successor": "OFp57RRC" - }, - "QD_4_1_49": { - "claims": [ - "Qidi/QIDI TPU-Aero" - ], - "successor": "OFMDHOcT" - }, - "QD_4_1_5": { - "claims": [ - "Qidi/QIDI PLA-CF" - ], - "successor": "OFhWrAuP" - }, - "QD_4_1_50": { - "claims": [ - "Qidi/QIDI TPU 95A-HF" - ], - "successor": "OFR1XLMN" - }, - "QD_4_1_6": { - "claims": [ - "Qidi/QIDI WOOD Rapido" - ], - "successor": "OFvdZ2bx" - }, - "QD_4_1_7": { - "claims": [ - "Qidi/QIDI PLA Basic" - ], - "successor": "OF4nQ62r" - }, - "QD_4_1_8": { - "claims": [ - "Qidi/QIDI PLA Matte Basic" - ], - "successor": "OFughwKn" - }, - "SMCFB001": { - "claims": [ - "SeeMeCNC/SeeMeCNC ABS" - ], - "successor": "OFR0gODA" - }, - "SMCFG001": { - "claims": [ - "SeeMeCNC/SeeMeCNC PETG" - ], - "successor": "OFxDHUX8" - }, - "SMCFG002": { - "claims": [ - "SeeMeCNC/SeeMeCNC PETG-CF" - ], - "successor": "OFaRjiIm" - }, - "SMCFL001": { - "claims": [ - "SeeMeCNC/SeeMeCNC PLA" - ], - "successor": "OFbSChKb" - }, - "SMCFN001": { - "claims": [ - "SeeMeCNC/SeeMeCNC PA-CF" - ], - "successor": "OF0b7M1z" - }, - "SMCFU001": { - "claims": [ - "SeeMeCNC/SeeMeCNC TPU" - ], - "successor": "OFyFyLIp" - }, - "VLMNT01": { - "claims": [ - "OrcaFilamentLibrary/Valment PLA" - ], - "successor": "OFDe8uyM" - }, - "VLMNT02": { - "claims": [ - "OrcaFilamentLibrary/Valment PLA Silk" - ], - "successor": "OFpBlrvY" - }, - "VLMNT03": { - "claims": [ - "OrcaFilamentLibrary/Valment PLA-CF" - ], - "successor": "OFfq5YXA" - }, - "VLMNT04": { - "claims": [ - "OrcaFilamentLibrary/Valment PLA Galaxy" - ], - "successor": "OFB5SmWk" - } - } -} diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 34ff667ed0..46a138253c 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 """ Mint deterministic filament_id values for OrcaSlicer system filament products and -validate the tree against the sanctioned-state ledger. +validate the tree against the sanctioned-state snapshot. -Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan_v3.md): +Policy (companion to assign_vendor_setting_ids.py; see docs/HLSD/filament_id.md): * filament_id is a PRODUCT id: one commercial product line = one id, shared by all of that material's per-printer/per-nozzle variants in every bundle. OrcaFilamentLibrary (OFL) is the product catalog: a family's id is declared @@ -19,34 +19,22 @@ Policy (companion to assign_vendor_setting_ids.py; see filament_id_plan_v3.md): filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, "filament_product///") ) 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. Identity changes (a family rename, a filament_vendor/filament_type - fix) change the id BY DESIGN — the succession ledger keeps old ids - resolving. + hand; on the astronomically rare collision with an existing id the input + is salted ("/1", "/2", ...) until free and the result is frozen in file. + Identity changes (a family rename, a filament_vendor/filament_type fix) + change the id BY DESIGN. * Reserved id spaces that are never minted into or altered: - GF* Bambu AMS/RFID catalog (vendor BBL untouchable) - - QD_* Qidi device protocol (dissolved island, plan v4: - every shipped QD_* id is retired in the ledger and - the QidiPrinterAgent translates device-composed - QD_* ids through the succession walk; no preset - may ever declare one again) + - QD_* Qidi device protocol: the box composes these ids + at runtime, they are not preset ids, and no + preset may declare one - 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 (ids, + * scripts/filament_id_snapshot.json is the sanctioned-state snapshot (ids, claims and declared triples): it must exactly equal the tree-derived state at all times, so any id/claim/triple change shows up as a reviewable diff to - that file (the maintainer gate). Ids that fully vanish from the tree are - appended to the SHIPPED succession ledger - resources/profiles/retired_filament_ids.json as - {"claims": [...], "successor": } — successor picked by the mode - rule over the vanished id's old claims — and the runtime follows those - chains (plus cross-island "hints" for ids Orca cannot retire, e.g. GF*) - on resolution miss. A retired id may never be used again for anything. - Vanished ids in a FOREIGN island's space (GF*) are released with a - hint instead of retired: the island's catalog owns them and may - legitimately (re)ship them. + that file (the maintainer gate). The effective-id resolution below is loader-faithful (PresetBundle.cpp load_vendor_configs_from_json): own filament_id key, else walk `inherits` within @@ -59,16 +47,7 @@ Run from anywhere: python3 scripts/assign_filament_ids.py rewrites a valid existing id; a no-op on a fully-idded tree --mint "Vendor/Type/Family" print the id that triple would mint; touches nothing - --update-snapshot regenerate the snapshot from the tree; retire vanished ids - with a mode-rule successor (--forget-never-shipped FILE - drops listed never-shipped ids from lineage instead) - --add-hint "OLD=NEW" - record a cross-island succession hint (standalone) - --retire "OLD=NEW" - retire a vanished non-island shipped id with an explicit - successor (standalone; for lineage the claim vote can no - longer see because the claims migrated while another - declarer kept the id alive) + --update-snapshot regenerate the snapshot from the tree --remint VENDOR re-derive VENDOR's declared ids from their triples and rewrite mismatches in place (repeatable) --drop-redundant-ids VENDOR @@ -96,10 +75,6 @@ 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") -# The succession ledger ships with the app (resources/) so the runtime can -# follow retired->successor chains and cross-island hints on resolution miss. -RETIRED_PATH = os.path.join(PROFILES_DIR, "retired_filament_ids.json") -RETIRED_REL = "resources/profiles/retired_filament_ids.json" OFL = "OrcaFilamentLibrary" @@ -171,7 +146,7 @@ def generate_filament_id(filament_vendor, filament_type, family, salt=0): def mint_filament_id(filament_vendor, filament_type, family, taken): - """Mint the product's id, salting past any id in `taken` (existing + retired).""" + """Mint the product's id, salting past any id in `taken`.""" for salt in range(10000): candidate = generate_filament_id(filament_vendor, filament_type, family, salt) if candidate not in taken: @@ -193,7 +168,7 @@ 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, and the retired_filament_ids.json ledger.) + which has no user.json index.) """ profiles_dir = str(profiles_dir) return sorted( @@ -250,7 +225,7 @@ def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=False, 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). + id its inherits chain would resolve WITHOUT the declaration — check 6b 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 @@ -379,7 +354,6 @@ def analyze_tree(profiles_dir): triples = {} # fid -> set of triples of its non-island declarers declarer_triples = [] # (vendor, rec, fid, triple) per non-island declarer family_triples = {} # (vendor, family) -> {triple: [declarer names]} - renamed_claims = {} # "Vendor/OldFamily" -> set of ids the rename now carries for vendor, filaments in vendors.items(): occurring = vendor_ids.setdefault(vendor, set()) @@ -413,19 +387,12 @@ def analyze_tree(profiles_dir): continue occurring.add(eff) ids.setdefault(eff, set()).add(f"{vendor}/{base_name(rec['name'])}") - # A renamed preset keeps voting under the names it used to have, so - # the id its old family carried retires to the id the rename minted. - renamed = rec.get("renamed_from") - for old in (renamed if isinstance(renamed, str) else "").split(";"): - if old.strip(): - renamed_claims.setdefault( - f"{vendor}/{base_name(old.strip())}", set()).add(eff) if rec.get("filament_id"): instantiated_with_id.append(f"{vendor}/{rec['name']}") if vendor != OFL and rec["ofl_entry"] and eff in ofl_declared: alias_candidates.append((vendor, rec, rec["ofl_entry"], False)) - # Alias hygiene (check 5): a vendor preset that rides an OFL family (its id + # Alias hygiene (check 4): a vendor preset that rides an OFL family (its id # resolves through OFL) is matched to the OFL preset by ALIAS (base name); # renaming it re-exposes the OFL preset and creates a live duplicate, empty # compatible_printers cannot claim any printer, and declaring its own @@ -452,7 +419,7 @@ def analyze_tree(profiles_dir): "empty compatible_printers cannot shadow the OFL preset anywhere", rec["file"])) - # Cross-bundle triple divergence (check 8, warning only): the same family + # Cross-bundle triple divergence (check 7, warning only): the same family # name declared in several bundles with different triples cannot converge # on one id until the divergence is fixed. name_bundles = {} @@ -468,7 +435,6 @@ def analyze_tree(profiles_dir): "vendors": vendors, "read_errors": read_errors, "ids": {fid: sorted(claims) for fid, claims in ids.items()}, - "renamed_claims": {claim: sorted(fids) for claim, fids in renamed_claims.items()}, "vendor_ids": vendor_ids, "declared_ids": declared_ids, "instantiated_with_id": sorted(instantiated_with_id), @@ -488,7 +454,7 @@ def analyze_tree(profiles_dir): # --------------------------------------------------------------------------- -# Snapshot / succession-ledger IO +# Snapshot IO # --------------------------------------------------------------------------- def snapshot_from_analysis(analysis): @@ -515,102 +481,13 @@ def load_snapshot(path): return data -def load_ledger(path): - """The shipped succession ledger: - {"retired": {id: {"claims": [...], "successor": id|None}}, "hints": {id: id}}. - Empty maps when the file is absent. - """ - if not os.path.exists(path): - return {"retired": {}, "hints": {}} - data = load_json(path) - return {"retired": data.get("retired", {}), "hints": data.get("hints", {})} - - -def load_retired(path): - """The ledger's retired map (see load_ledger); {} when the file is absent.""" - return load_ledger(path)["retired"] - - -def write_ledger(path, obj): +def write_snapshot(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") -def claim_effective_ids(analysis): - """Reverse of analysis["ids"]: claim "Vendor/Family" -> set of effective ids. - - A preset's "renamed_from" names count as claims of that preset too, so an id - whose family was renamed still finds a successor in the claim vote. - """ - claim_ids = {} - for fid, claims in analysis["ids"].items(): - for claim in claims: - claim_ids.setdefault(claim, set()).add(fid) - for claim, fids in analysis.get("renamed_claims", {}).items(): - if claim not in claim_ids: - claim_ids[claim] = set(fids) - return claim_ids - - -def successor_by_mode(claims, claim_ids): - """Mode rule for a retiring id's successor: every old claim whose family - still exists votes for the family's current effective id(s); most votes - wins, ties break to the lexicographically smallest id, no votes -> None. - Returns (successor_or_None, vote_counts). - """ - counts = {} - for claim in claims: - for fid in claim_ids.get(claim, ()): - counts[fid] = counts.get(fid, 0) + 1 - if not counts: - return None, counts - best = max(counts.values()) - return min(f for f, n in counts.items() if n == best), counts - - -def migrate_retired_entries(old_retired, claim_ids): - """One-shot v3 schema migration: list-valued entries {id: [claims]} become - {id: {"claims": [...], "successor": }}; object entries - pass through untouched. - """ - migrated = {} - for fid, entry in old_retired.items(): - if isinstance(entry, dict): - migrated[fid] = entry - continue - successor, _counts = successor_by_mode(entry, claim_ids) - migrated[fid] = {"claims": sorted(entry), "successor": successor} - return migrated - - -def follow_succession(fid, seen, retired, hints, live): - """Follow retired->successor / hints->target forwarding starting at `fid`. - - Returns (status, node): "null" (chain ended on an heirless retirement), - "live" (reached a live tree id), "cycle", or "dead-end" (an id that is - neither live nor forwarded anywhere). `seen` pre-seeds the cycle guard. - """ - seen = set(seen) - cur = fid - while True: - if cur is None: - return "null", None - if cur in seen: - return "cycle", cur - seen.add(cur) - if cur in live: - return "live", cur - entry = retired.get(cur) - if entry is not None: - cur = entry.get("successor") if isinstance(entry, dict) else None - elif cur in hints: - cur = hints[cur] - else: - return "dead-end", cur - - # --------------------------------------------------------------------------- # Reserved namespaces # --------------------------------------------------------------------------- @@ -631,7 +508,7 @@ def reserved_space_desc(fid, owner): if owner: return f"owned by {owner}" if fid.startswith("QD_"): - return "Qidi device protocol; dissolved island — ids are retired, never declarable" + return "Qidi device protocol; composed by the device, never a preset id" return "reserved for user-custom presets" @@ -639,8 +516,7 @@ def reserved_space_desc(fid, owner): # 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): +def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_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 @@ -651,23 +527,19 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 3. Mint conformance: a non-island OF-format declaration must equal the mint of the declarer's triple or a salted iteration, unless that exact (id, triple) pair is grandfathered in the snapshot. - 4. Retired ids may never occur again. - 5. Alias hygiene: a vendor preset riding an OFL family must keep the OFL + 4. Alias hygiene: a vendor preset riding an OFL family must keep the OFL base name, claim printers via non-empty compatible_printers, and declare no filament_id key of its own. - 6. Reserved namespaces (GF* for BBL; QD_*/P-hex/"null" for nobody) must not + 5. Reserved namespaces (GF* for BBL; QD_*/P-hex/"null" for nobody) must not be claimed by other vendors, except claims grandfathered in the snapshot. - 7. Structure ratchet: (a) no NEW instantiated preset carries its own + 6. 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++). - 8. Triple integrity: (a) every non-island declarer resolves non-empty + 7. Triple integrity: (a) every non-island declarer resolves non-empty filament_vendor and filament_type (hard error, no grandfathering); (b) declarers of one (bundle, family) resolve identical triples, unless grandfathered in snapshot triple_exceptions; cross-bundle divergence on the same family name is a warning only. - 9. Succession integrity: retired successor chains terminate at a live id or - null without cycles; hint keys are live island-declared ids and hint - chains terminate live. """ _utf8_console() errors = 0 @@ -676,10 +548,6 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, if snapshot is None: print_error(f"filament_id snapshot not found at {snapshot_path}; {UPDATE_HINT}") return 1 - ledger = load_ledger(retired_path) - retired = ledger["retired"] - hints = ledger["hints"] - for msg in analysis["read_errors"]: print_error(msg) errors += 1 @@ -717,8 +585,8 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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"(shipped ids retire through the succession ledger); {UPDATE_HINT}") + f'filament_id stability: snapshot id "{fid}" vanished from the tree; ' + f"{UPDATE_HINT}") errors += 1 continue for claim in snap_ids[fid]: @@ -761,16 +629,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"family root (or, for an intentionally kept id, {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"({RETIRED_REL}) and may never be reused") - errors += 1 - - # -- 5. alias hygiene for presets riding OFL families -------------------- + # -- 4. alias hygiene for presets riding OFL families -------------------- exceptions = set(snapshot["alias_exceptions"]) for vendor, name, entry, reason, file in analysis["alias_violations"]: if f"{vendor}/{name}" in exceptions: @@ -782,7 +641,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"gets its own minted id") errors += 1 - # -- 6. reserved namespaces ---------------------------------------------- + # -- 5. reserved namespaces ---------------------------------------------- for fid in sorted(tree_ids): is_reserved, owner = reserved_space_owner(fid) if not is_reserved: @@ -799,7 +658,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"({space}) and must not be claimed by system presets of other vendors") errors += 1 - # -- 7. structure ratchet ------------------------------------------------- + # -- 6. structure ratchet ------------------------------------------------- grandfathered = set(snapshot["instantiated_with_id"]) for key in analysis["instantiated_with_id"]: if key not in grandfathered: @@ -827,7 +686,7 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f'"{vendor}/{base_name(name)}": "{expected}", salted if taken)') errors += 1 - # -- 8. triple integrity --------------------------------------------------- + # -- 7. triple integrity --------------------------------------------------- for vendor, rec, fid, triple in sorted( analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): if triple[0] and triple[1]: @@ -860,62 +719,6 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"({detail}); bundles of one product converge on one id only once " f"their triples agree") - # -- 9. succession integrity (ledger-internal) ----------------------------- - live = set(tree_ids) - for fid in sorted(retired): - entry = retired[fid] - if (not isinstance(entry, dict) - or not isinstance(entry.get("claims", []), list) - or not (entry.get("successor") is None - or isinstance(entry.get("successor"), str))): - print_error( - f'retired entry "{fid}" ({RETIRED_REL}) is not of the form ' - f'{{"claims": [...], "successor": }}') - errors += 1 - continue - status, node = follow_succession(entry.get("successor"), {fid}, retired, hints, live) - if status == "cycle": - print_error( - f'succession chain of retired id "{fid}" cycles at "{node}" ({RETIRED_REL})') - errors += 1 - elif status == "dead-end": - print_error( - f'succession chain of retired id "{fid}" dead-ends at "{node}", which is ' - f"neither a live tree id nor retired/hinted ({RETIRED_REL})") - errors += 1 - for key in sorted(hints): - target = hints[key] - _is_reserved, island = reserved_space_owner(key) - if island is None: - print_error( - f'hint key "{key}" ({RETIRED_REL}) is not in an island id space ' - f"(GF*); non-island ids are retired with a successor instead") - errors += 1 - continue - if key in retired: - print_error( - f'hint key "{key}" ({RETIRED_REL}) is also retired; an id is either ' - f"retired (Orca-owned) or hinted (island-owned), never both") - errors += 1 - continue - # A hint key may be absent from the tree (released to its island); when - # live, only island vendors may declare it. - outsiders = sorted( - v for v in analysis["declared_ids"] - if key in analysis["declared_ids"][v] and not is_island_declaration(v, key)) - if outsiders: - print_error( - f'hint key "{key}" ({RETIRED_REL}) is declared by non-island vendor(s) ' - f"{outsiders}; hints apply only once no non-island vendor declares the " - f"id — re-mint those declarers first") - errors += 1 - status, node = follow_succession(target, {key}, retired, hints, live) - if status != "live": - print_error( - f'hint "{key}" -> "{target}" ({RETIRED_REL}) must chain-terminate at a ' - f"live tree id (got {status} at \"{node}\")") - errors += 1 - return errors @@ -924,18 +727,8 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # --------------------------------------------------------------------------- def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - retired_path=RETIRED_PATH, allow_shared_catalog=False, - forget_path=None): - """Regenerate the snapshot from the tree; retire ids that fully vanished. - - Vanished ids gain a succession-ledger entry whose successor is picked by - the mode rule over their old claims (None when the family died heirless); - vanished ids in a foreign island's space (GF*) are released with a - hint instead — the island catalog owns them, so they must stay mintable - there and must never be blocked by check 4. - --forget-never-shipped lists ids to drop from lineage instead of retiring - (never shipped => nothing outside the tree references them); succession - chains through them are spliced to their mode-rule successor. + allow_shared_catalog=False): + """Regenerate the snapshot from the tree. Refuses to sanction NEW reserved-namespace ids (or new claims on them) for non-owner vendors unless --allow-shared-catalog is passed. Idempotent: a @@ -948,21 +741,6 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, old_snap = load_snapshot(snapshot_path) old_ids = old_snap["ids"] if old_snap else {} - forget = set() - if forget_path: - data = load_json(forget_path) - if not isinstance(data, list) or not all(isinstance(x, str) for x in data): - print_error(f"--forget-never-shipped expects a JSON list of ids: {forget_path}") - return 1 - forget = set(data) - still_live = sorted(forget & set(new_snap["ids"])) - if still_live: - for fid in still_live: - print_error( - f'--forget-never-shipped: id "{fid}" is still in the tree and can ' - f"neither be forgotten nor retired") - return 1 - # Gate: new reserved-namespace ids / claims for non-owner vendors. refusals = [] for fid, claims in sorted(new_snap["ids"].items()): @@ -990,72 +768,6 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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). - ledger = load_ledger(retired_path) - retired = ledger["retired"] - 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"({RETIRED_REL} 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), with a - # mode-rule successor so devices and user presets keep resolving. Vanished - # ids in a FOREIGN island's reserved space (GF*) are never retired — - # the island's catalog still owns them and may legitimately (re)ship them — - # they are RELEASED, with a succession hint so they keep resolving on miss. - claim_ids = claim_effective_ids(analysis) - newly_retired = [] - forgotten = [] - released = [] - for fid in sorted(old_ids): - if fid in new_snap["ids"]: - continue - if fid in forget: - forgotten.append(fid) - print_info(f'forgotten (never shipped): "{fid}" — no retirement entry') - continue - _is_reserved, island = reserved_space_owner(fid) - if island is not None: - successor, _counts = successor_by_mode(old_ids[fid], claim_ids) - if successor and fid not in ledger["hints"]: - ledger["hints"][fid] = successor - released.append(fid) - print_info( - f'released to the {island} island space: "{fid}"' - + (f' — hint -> "{ledger["hints"][fid]}"' if fid in ledger["hints"] - else " (no successor computable; --add-hint if one is needed)")) - continue - entry = retired.get(fid) - if not isinstance(entry, dict): - successor, counts = successor_by_mode(old_ids[fid], claim_ids) - if len(counts) > 1: - losers = sorted(set(counts) - {successor}) - print_warning( - f'retiring "{fid}": successor "{successor}" won the claim vote ' - f"({counts[successor]}); losing candidate(s): {', '.join(losers)}") - entry = {"claims": list(entry) if entry else [], "successor": successor} - entry["claims"] = sorted(set(entry["claims"]) | set(old_ids[fid])) - retired[fid] = entry - newly_retired.append(fid) - - # Splice succession chains through forgotten ids so they stay live. - spliced = [] - for fid in sorted(retired): - entry = retired[fid] - successor = entry.get("successor") if isinstance(entry, dict) else None - if successor in forget: - new_successor, _counts = successor_by_mode(old_ids.get(successor, []), claim_ids) - entry["successor"] = new_successor - spliced.append(fid) - print_info( - f'spliced succession: "{fid}" -> {json.dumps(new_successor)} ' - f'(through forgotten "{successor}")') - # Diff summary. added_ids = sorted(set(new_snap["ids"]) - set(old_ids)) removed_ids = sorted(set(old_ids) - set(new_snap["ids"])) @@ -1071,22 +783,12 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, changed = new_snap != old_snap if changed: - write_ledger(snapshot_path, new_snap) - if newly_retired or spliced or released or not os.path.exists(retired_path): - write_ledger(retired_path, {"retired": retired, "hints": ledger["hints"]}) + write_snapshot(snapshot_path, new_snap) 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"declared triples : {len(new_snap['triples'])}") - print_info(f"ids retired now : {len(newly_retired)}" + - (f" ({', '.join(newly_retired)})" if newly_retired else "")) - if forgotten: - print_info(f"ids forgotten : {len(forgotten)} ({', '.join(forgotten)})") - if released: - print_info(f"ids released : {len(released)} ({', '.join(released)})") - if spliced: - print_info(f"chains spliced : {len(spliced)} ({', '.join(spliced)})") for section in ("instantiated_with_id", "id_overrides", "alias_exceptions", "triple_exceptions"): before, after = len(old_snap.get(section, [])), len(new_snap[section]) @@ -1098,125 +800,6 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, return 0 -def add_hints(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): - """--add-hint "OLD=NEW": forward an island-space id to a live id. - - OLD must sit in an island id space (GF*), must not be retired, and — - when live in the tree — may be declared only by island vendors (Orca cannot - retire it). An absent OLD is fine: island catalogs own ids Orca never - shipped or has released. NEW must be live in the tree. All pairs validate - before anything is written. Returns 0 on success. - """ - _utf8_console() - analysis = analyze_tree(profiles_dir) - errors = 0 - for msg in analysis["read_errors"]: - print_error(msg) - errors += 1 - ledger = load_ledger(retired_path) - live = set(analysis["ids"]) - parsed = [] - for pair in pairs: - if "=" not in pair: - print_error(f'--add-hint expects "OLD=NEW", got "{pair}"') - errors += 1 - continue - old, new = pair.split("=", 1) - _is_reserved, island = reserved_space_owner(old) - outsiders = sorted( - v for v in analysis["declared_ids"] - if old in analysis["declared_ids"][v] and not is_island_declaration(v, old)) - if old in ledger["retired"]: - print_error(f'--add-hint: "{old}" is retired; its succession entry already forwards it') - errors += 1 - elif island is None: - print_error( - f'--add-hint: "{old}" is not in an island id space (GF*); ' - f"non-island ids are retired with a successor by --update-snapshot") - errors += 1 - elif outsiders: - print_error( - f'--add-hint: "{old}" is declared by non-island vendor(s) {outsiders}; ' - f"hints apply only once no non-island vendor declares the id — re-mint " - f"those declarers first") - errors += 1 - elif new not in live: - print_error(f'--add-hint: target "{new}" is not a live tree id') - errors += 1 - else: - parsed.append((old, new)) - if errors: - return 1 - for old, new in parsed: - ledger["hints"][old] = new - print_info(f'hint added: "{old}" -> "{new}"') - write_ledger(retired_path, {"retired": ledger["retired"], "hints": ledger["hints"]}) - return 0 - - -def retire_ids(pairs, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): - """--retire "OLD=NEW": retire a vanished non-island id with an explicit successor. - - For shipped ids whose lineage the claim vote can no longer see: the id - vanished from the tree in an earlier phase's shadow — another declarer kept - it alive while its claims migrated — so no --update-snapshot run ever saw - the id vanish while its claims could still vote. OLD must be absent from - the tree (declared or effective) and outside every reserved id space - (island ids forward via --add-hint; user-custom ids are never system ids), - and must not already be retired or hinted. NEW must be a live tree id. - Appends {"claims": [], "successor": NEW}. All pairs validate before - anything is written. Returns 0 on success. - """ - _utf8_console() - analysis = analyze_tree(profiles_dir) - errors = 0 - for msg in analysis["read_errors"]: - print_error(msg) - errors += 1 - ledger = load_ledger(retired_path) - live = set(analysis["ids"]) - declared_anywhere = set() - for vids in analysis["declared_ids"].values(): - declared_anywhere |= set(vids) - parsed = [] - for pair in pairs: - if "=" not in pair: - print_error(f'--retire expects "OLD=NEW", got "{pair}"') - errors += 1 - continue - old, new = pair.split("=", 1) - is_reserved, _island = reserved_space_owner(old) - if old in ledger["retired"]: - print_error(f'--retire: "{old}" is already retired') - errors += 1 - elif old in ledger["hints"]: - print_error(f'--retire: "{old}" is a hint key; it already forwards') - errors += 1 - elif is_reserved: - print_error( - f'--retire: "{old}" sits in a reserved id space; island ids ' - f"forward via --add-hint, user-custom ids are never retired") - errors += 1 - elif old in live or old in declared_anywhere: - print_error( - f'--retire: "{old}" still lives in the tree; re-mint or delete ' - f"its declarers first (an id that vanishes normally gets its " - f"successor voted by --update-snapshot)") - errors += 1 - elif new not in live: - print_error(f'--retire: successor "{new}" is not a live tree id') - errors += 1 - else: - parsed.append((old, new)) - if errors: - return 1 - for old, new in parsed: - ledger["retired"][old] = {"claims": [], "successor": new} - print_info(f'retired: "{old}" -> "{new}"') - write_ledger(retired_path, {"retired": ledger["retired"], "hints": ledger["hints"]}) - return 0 - - # --------------------------------------------------------------------------- # Byte-preserving profile edits # --------------------------------------------------------------------------- @@ -1313,8 +896,7 @@ def remove_filament_id(path, old_id): # Default run: mint + insert ids for id-less families # --------------------------------------------------------------------------- -def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - retired_path=RETIRED_PATH): +def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_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 @@ -1346,9 +928,9 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, "nothing to do (0 files changed)") return 0, errors - # Ids already spoken for: whole tree (declared or effective) + ledgers. + # Ids already spoken for: the whole tree (declared or effective) + snapshot. snapshot = load_snapshot(snapshot_path) or {"ids": {}} - taken = set(snapshot["ids"]) | set(load_retired(retired_path)) + taken = set(snapshot["ids"]) for occurring in analysis["vendor_ids"].values(): taken |= occurring @@ -1427,7 +1009,7 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # --remint / --drop-redundant-ids (v3.1/v3.2 migration modes) # --------------------------------------------------------------------------- -def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_PATH): +def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): """Re-derive every non-island declared id in the given vendors from its triple; rewrite mismatching declarations in place (byte-preserving). Never touches the snapshot — run --update-snapshot afterwards and review the diff. @@ -1435,8 +1017,8 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_ A declaration already equal to ANY salt iteration of its own triple is mint-conformant (check 3) and left alone — deliberate salt splits (distinct presets of one product kept apart for per-printer AMS matching) survive. - A candidate id is blocked when it is a retired key, a hints key, or occurs - in the tree with any triple set other than exactly {T}. Equal-triple reuse + A candidate id is blocked when it occurs in the tree with any triple set + other than exactly {T}. Equal-triple reuse is convergence: the same product must end up under the same id everywhere. Returns (rewritten, errors). """ @@ -1455,8 +1037,6 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_ print_error(f"--remint: unknown vendor {v!r}") return 0, errors + len(unknown) - ledger = load_ledger(retired_path) - blocked_keys = set(ledger["retired"]) | set(ledger["hints"]) occurring = set() for vids in analysis["vendor_ids"].values(): occurring |= vids @@ -1470,8 +1050,6 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR, retired_path=RETIRED_ return assigned[triple] for salt in range(10000): cand = generate_filament_id(*triple, salt=salt) - if cand in blocked_keys: - continue if cand in occurring and triple_sets.get(cand, set()) != {triple}: continue if run_taken.get(cand, triple) != triple: @@ -1570,27 +1148,13 @@ def main(argv=None): help="print the id the (filament_vendor, filament_type, " "family name) triple would mint; 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 with a " - "mode-rule successor") + help="regenerate scripts/filament_id_snapshot.json from " + "the tree") 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("--forget-never-shipped", metavar="JSON_FILE", - help="with --update-snapshot: vanished ids listed in the file " - "(JSON list) are dropped without a retirement entry and " - "succession chains are spliced through them; refused if " - "a listed id is still in the tree") - parser.add_argument("--add-hint", metavar='"OLD=NEW"', action="append", - help="record a cross-island succession hint (island-owned " - "live id -> live id) in the shipped ledger; standalone, " - "repeatable") - parser.add_argument("--retire", metavar='"OLD=NEW"', action="append", - help="retire a vanished non-island shipped id with an " - "explicit successor (for lineage the claim vote can " - "no longer see); standalone, repeatable") parser.add_argument("--remint", metavar="VENDOR", action="append", help="re-derive VENDOR's declared filament_ids from their " "triples and rewrite mismatches in place; repeatable") @@ -1602,35 +1166,22 @@ def main(argv=None): help="profiles directory (default: resources/profiles)") args = parser.parse_args(argv) - if args.forget_never_shipped and not args.update_snapshot: - parser.error("--forget-never-shipped requires --update-snapshot") if args.mint: parts = args.mint.split("/", 2) if len(parts) != 3 or not all(parts): parser.error('--mint expects "filament_vendor/filament_type/family_name" ' - "with all three components non-empty (check 8 rejects empty " + "with all three components non-empty (check 7 rejects empty " "vendor/type in the tree)") snapshot = load_snapshot(SNAPSHOT_PATH) or {"ids": {}} - taken = set(snapshot["ids"]) | set(load_retired(RETIRED_PATH)) + taken = set(snapshot["ids"]) print(mint_filament_id(parts[0], parts[1], parts[2], taken)) return 0 - if args.add_hint: - if (args.update_snapshot or args.check or args.remint - or args.drop_redundant_ids or args.retire): - parser.error("--add-hint runs standalone") - return add_hints(args.add_hint, args.profiles, RETIRED_PATH) - - if args.retire: - if args.update_snapshot or args.check or args.remint or args.drop_redundant_ids: - parser.error("--retire runs standalone") - return retire_ids(args.retire, args.profiles, RETIRED_PATH) - if args.remint: if args.update_snapshot or args.check or args.drop_redundant_ids: parser.error("--remint cannot be combined with other modes") - _changed, errors = remint_vendors(args.remint, args.profiles, RETIRED_PATH) + _changed, errors = remint_vendors(args.remint, args.profiles) return 1 if errors else 0 if args.drop_redundant_ids: @@ -1640,19 +1191,18 @@ def main(argv=None): return 1 if errors else 0 if args.update_snapshot: - return update_snapshot(args.profiles, SNAPSHOT_PATH, RETIRED_PATH, - allow_shared_catalog=args.allow_shared_catalog, - forget_path=args.forget_never_shipped) + return update_snapshot(args.profiles, SNAPSHOT_PATH, + allow_shared_catalog=args.allow_shared_catalog) if args.check: - errors = check_filament_ids(args.profiles, SNAPSHOT_PATH, RETIRED_PATH) + errors = check_filament_ids(args.profiles, SNAPSHOT_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) + _changed, errors = assign_missing_ids(args.profiles, SNAPSHOT_PATH) return 1 if errors else 0 diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 index 9c9bb6c506..66ed33c31d 100644 --- a/scripts/check_profile.ps1 +++ b/scripts/check_profile.ps1 @@ -187,7 +187,7 @@ $ProfilesDir = (Resolve-Path -LiteralPath $ProfilesDir).Path # validator compares the .json stem case-sensitively, while Windows' case-insensitive # filesystem would let "creality" pass a path test and then match no vendor. A vendor is a # .json with a sibling directory; that pair is also what tells one apart from -# blacklist.json and retired_filament_ids.json, which sit in the same folder. +# blacklist.json, which sits in the same folder. if ($Vendor) { $found = $false $suggestion = '' diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh index cb56258c9f..51c8599b60 100755 --- a/scripts/check_profile.sh +++ b/scripts/check_profile.sh @@ -138,7 +138,7 @@ PROFILES_DIR="$(cd -- "${PROFILES_DIR}" && pwd)" # validator compares the .json stem case-sensitively, while a case-insensitive filesystem # (macOS, Windows) would let "creality" pass a file test and then match no vendor. A vendor is a # .json with a sibling / directory; that pair is also what tells one apart from -# blacklist.json and retired_filament_ids.json, which sit in the same folder. +# blacklist.json, which sits in the same folder. if [ -n "${VENDOR}" ]; then wanted="$(printf '%s' "${VENDOR}" | tr '[:upper:]' '[:lower:]')" found="" diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 41df9c582e..ef61992784 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -54,14 +54,13 @@ def preset(name, filament_id=None, inherits=None, instantiation=True, class SyntheticTree: - """A throwaway resources/profiles-shaped directory plus ledger paths.""" + """A throwaway resources/profiles-shaped directory plus a snapshot path.""" 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) @@ -109,37 +108,31 @@ class SyntheticTree: with open(idx_path, "w", encoding="utf-8") as f: json.dump(index, f, indent=4, ensure_ascii=False) - def write_ledger(self, retired=None, hints=None): - afi.write_ledger(self.retired, {"retired": retired or {}, - "hints": hints or {}}) - # -- pipeline wrappers --------------------------------------------------- - def update_snapshot(self, allow_shared_catalog=False, forget_path=None): + 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, - forget_path=forget_path) + rc = afi.update_snapshot(self.profiles, self.snapshot, + 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) + errors = afi.check_filament_ids(self.profiles, self.snapshot) 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) + changed, errors = afi.assign_missing_ids(self.profiles, self.snapshot) return changed, errors, buf.getvalue() def remint(self, vendors): buf = io.StringIO() with contextlib.redirect_stdout(buf): - changed, errors = afi.remint_vendors(vendors, self.profiles, self.retired) + changed, errors = afi.remint_vendors(vendors, self.profiles) return changed, errors, buf.getvalue() def drop_redundant(self, vendor): @@ -148,19 +141,6 @@ class SyntheticTree: dropped, errors = afi.drop_redundant_ids(vendor, self.profiles) return dropped, errors, buf.getvalue() - def add_hint(self, pairs): - buf = io.StringIO() - with contextlib.redirect_stdout(buf): - rc = afi.add_hints(pairs, self.profiles, self.retired) - return rc, buf.getvalue() - - def retire(self, pairs): - buf = io.StringIO() - with contextlib.redirect_stdout(buf): - rc = afi.retire_ids(pairs, self.profiles, self.retired) - return rc, buf.getvalue() - - def make_clean_tree(): """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic.""" t = SyntheticTree() @@ -196,7 +176,7 @@ class SyntheticTreeCase(unittest.TestCase): class TestMint(unittest.TestCase): def test_namespace_literal(self): - # Frozen: derived from the setting_id namespace; baked into the ledger. + # Frozen: derived from the setting_id namespace; baked into the snapshot. self.assertEqual(afi.FILAMENT_ID_NAMESPACE, uuid.UUID("c4d3ff49-4c32-5534-a3e3-00894157ab97")) @@ -401,7 +381,7 @@ class TestTripleResolution(unittest.TestCase): class TestReservedSpaces(unittest.TestCase): def test_owners(self): self.assertEqual(afi.reserved_space_owner("GFL99"), (True, "BBL")) - # dissolved island (plan v4): reserved, but no vendor may declare it + # Qidi device protocol: reserved, but no vendor may declare it self.assertEqual(afi.reserved_space_owner("QD_X4_PLA"), (True, None)) self.assertEqual(afi.reserved_space_owner("P1234abc"), (True, None)) self.assertEqual(afi.reserved_space_owner("pAbCdEf1"), (True, None)) # case-insensitive @@ -412,7 +392,7 @@ class TestReservedSpaces(unittest.TestCase): def test_island_declarations(self): self.assertTrue(afi.is_island_declaration("BBL", "GFL99")) self.assertTrue(afi.is_island_declaration("BBL", "OF5CgdDq")) - # dissolved island (plan v4): Qidi declarations mint like any other + # Qidi presets mint like any other vendor's: self.assertFalse(afi.is_island_declaration("Qidi", "QD_X4_PLA")) self.assertFalse(afi.is_island_declaration("Qidi", "OF5CgdDq")) self.assertFalse(afi.is_island_declaration("VendorA", "GFL99")) @@ -503,15 +483,7 @@ class TestChecks(SyntheticTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check4_retired_id_reuse(self): - self.t.write_ledger(retired={"AX01": {"claims": ["VendorA/APLA"], - "successor": None}}) - errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn("retired", out) - self.assertIn("AX01", out) - - def test_check5_renamed_tuned_generic(self): + def test_check4_renamed_tuned_generic(self): self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="Generic PLA @System", compatible_printers=["P1"])) @@ -520,7 +492,7 @@ class TestChecks(SyntheticTreeCase): self.assertIn("rename re-exposes the OFL preset", out) self.assertIn("Tuned PLA @P1", out) - def test_check5_empty_compatible_printers(self): + def test_check4_empty_compatible_printers(self): self.t.write_preset("VendorA", preset("Generic PLA @P2", inherits="Generic PLA @System", compatible_printers=[])) @@ -528,7 +500,7 @@ class TestChecks(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn("cannot shadow the OFL preset", out) - def test_check5_own_id_key_on_ofl_rider(self): + def test_check4_own_id_key_on_ofl_rider(self): # A vendor root that declares its own id while inheriting an OFL family # forks the family off the catalog id. self.t.write_preset("VendorA", preset("GPLA @base", filament_id="AX77", @@ -540,7 +512,7 @@ class TestChecks(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn('declares its own filament_id "AX77"', out) - def test_check5_applies_to_non_generic_ofl_families(self): + def test_check4_applies_to_non_generic_ofl_families(self): fid = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") self.t.write_preset(OFL, preset("poly_pla_base", filament_id=fid, instantiation=False, @@ -559,7 +531,7 @@ class TestChecks(SyntheticTreeCase): self.assertIn("rename re-exposes the OFL preset", out) self.assertIn("PolyX PLA @P1", out) - def test_check5_exception_is_grandfathered(self): + def test_check4_exception_is_grandfathered(self): self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="Generic PLA @System", compatible_printers=["P1"])) @@ -568,9 +540,9 @@ class TestChecks(SyntheticTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check6_reserved_namespace_claims(self): + def test_check5_reserved_namespace_claims(self): for fid, marker in [("GFX99", "owned by BBL"), - ("QD_X_PLA", "dissolved island"), + ("QD_X_PLA", "composed by the device"), ("P1a2b3c4", "user-custom"), ("null", "user-custom")]: with self.subTest(fid=fid): @@ -586,7 +558,7 @@ class TestChecks(SyntheticTreeCase): self.assertIn("reserved id space", out) self.assertIn(marker, out) - def test_check7a_instantiated_preset_with_own_key(self): + def test_check6a_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"]), @@ -595,7 +567,7 @@ class TestChecks(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn("declares its own filament_id key", out) - def test_check7b_declared_vs_inherited_drift(self): + def test_check6b_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"]), @@ -604,7 +576,7 @@ class TestChecks(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn('declares filament_id "AX02" but its inherits chain resolves "AX01"', out) - def test_check7c_unresolvable_instantiated_filament(self): + def test_check6c_unresolvable_instantiated_filament(self): self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) errors, out = self.t.check() self.assertGreater(errors, 0) @@ -618,8 +590,8 @@ class TestChecks(SyntheticTreeCase): self.assertIn("snapshot not found", out) -class TestCheck8(SyntheticTreeCase): - def test_8a_empty_vendor_is_hard_error(self): +class TestCheck7(SyntheticTreeCase): + def test_7a_empty_vendor_is_hard_error(self): fid = afi.generate_filament_id("", "PLA", "NVPLA") self.t.write_preset("VendorA", preset("NVPLA @base", filament_id=fid, instantiation=False, @@ -637,7 +609,7 @@ class TestCheck8(SyntheticTreeCase): self.assertEqual(errors, 1, out) self.assertIn("resolves empty filament_vendor", out) - def test_8b_divergent_family_triples(self): + def test_7b_divergent_family_triples(self): id1 = afi.generate_filament_id("MV", "PLA", "MPLA") id2 = afi.generate_filament_id("MV", "PETG", "MPLA") self.t.write_preset("VendorA", preset("MPLA @base1", filament_id=id1, @@ -660,7 +632,7 @@ class TestCheck8(SyntheticTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_8_cross_bundle_divergence_is_warning_only(self): + def test_7_cross_bundle_divergence_is_warning_only(self): fid = afi.generate_filament_id("BV", "PETG", "APLA") self.t.add_vendor("VendorB", [ preset("APLA @base", filament_id=fid, instantiation=False, @@ -677,125 +649,6 @@ class TestCheck8(SyntheticTreeCase): self.assertIn('"APLA"', out) -class TestCheck9(SyntheticTreeCase): - def test_ok_chain_null_and_live(self): - self.t.write_ledger(retired={ - "R1": {"claims": ["VendorA/Gone1"], "successor": "AX01"}, - "R2": {"claims": ["VendorA/Gone2"], "successor": "R1"}, - "R3": {"claims": ["VendorA/Gone3"], "successor": None}, - }) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_cycle_is_an_error(self): - self.t.write_ledger(retired={ - "C1": {"claims": [], "successor": "C2"}, - "C2": {"claims": [], "successor": "C1"}, - }) - errors, out = self.t.check() - self.assertEqual(errors, 2, out) - self.assertIn("cycles", out) - - def test_dead_end_is_an_error(self): - self.t.write_ledger(retired={ - "D1": {"claims": [], "successor": "OFnope99"}, - }) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("dead-ends", out) - self.assertIn("OFnope99", out) - - def test_hint_key_must_be_in_island_space(self): - self.t.write_ledger(hints={"AX01": "OGFL99"}) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("not in an island id space", out) - - def test_hint_key_may_be_absent_island_id(self): - # Released / never-shipped island-catalog ids are valid hint keys. - self.t.write_ledger(hints={"GFXX99": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_hint_key_must_not_be_retired_too(self): - self.t.write_ledger(retired={"GFXX99": {"claims": [], "successor": "AX01"}}, - hints={"GFXX99": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("never both", out) - - def test_live_hint_key_with_non_island_declarer_is_an_error(self): - self.t.write_preset("VendorA", preset( - "GPLA @base", filament_id="GFZZ01", instantiation=False, - filament_vendor="Generic", filament_type="PLA")) - self.t.write_preset("VendorA", preset( - "GPLA @P1", inherits="GPLA @base", - compatible_printers=["P1 0.4 nozzle"])) - rc, _out = self.t.update_snapshot(allow_shared_catalog=True) - self.assertEqual(rc, 0) - self.t.write_ledger(hints={"GFZZ01": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("re-mint those declarers first", out) - - def test_island_hint_ok_and_value_must_chain_live(self): - self.t.add_vendor("BBL", [ - preset("BPLA @base", filament_id="GFB01", instantiation=False), - preset("BPLA @X1C", inherits="BPLA @base", - compatible_printers=["X1C 0.4 nozzle"]), - ]) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.t.write_ledger(hints={"GFB01": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - # A hint chain ending on a null retirement is dead for the runtime. - self.t.write_ledger(retired={"R9": {"claims": [], "successor": None}}, - hints={"GFB01": "R9"}) - errors, out = self.t.check() - self.assertEqual(errors, 1, out) - self.assertIn("chain-terminate at a live tree id", out) - - -# --------------------------------------------------------------------------- -# successor mode rule + ledger schema migration -# --------------------------------------------------------------------------- - -class TestSuccessorMode(unittest.TestCase): - def test_majority_wins(self): - claim_ids = {"V/A": {"ID1"}, "V/B": {"ID1"}, "V/C": {"ID2"}} - succ, counts = afi.successor_by_mode(["V/A", "V/B", "V/C"], claim_ids) - self.assertEqual(succ, "ID1") - self.assertEqual(counts, {"ID1": 2, "ID2": 1}) - - def test_tie_breaks_lexicographically(self): - claim_ids = {"V/A": {"IDB"}, "V/B": {"IDA"}} - succ, counts = afi.successor_by_mode(["V/A", "V/B"], claim_ids) - self.assertEqual(succ, "IDA") - self.assertEqual(counts, {"IDA": 1, "IDB": 1}) - - def test_no_surviving_family_means_null(self): - self.assertEqual(afi.successor_by_mode(["V/GONE"], {}), (None, {})) - self.assertEqual(afi.successor_by_mode([], {"V/A": {"ID1"}}), (None, {})) - - -class TestLedgerMigration(SyntheticTreeCase): - def test_backfill_successors_via_mode_rule(self): - analysis = afi.analyze_tree(self.t.profiles) - claim_ids = afi.claim_effective_ids(analysis) - old = { - "X9": ["VendorA/APLA"], # family lives on - "Y9": ["VendorA/GONE"], # family died - "Z9": {"claims": ["kept"], "successor": "AX01"}, # already migrated - } - migrated = afi.migrate_retired_entries(old, claim_ids) - self.assertEqual(migrated["X9"], - {"claims": ["VendorA/APLA"], "successor": "AX01"}) - self.assertEqual(migrated["Y9"], - {"claims": ["VendorA/GONE"], "successor": None}) - self.assertEqual(migrated["Z9"], old["Z9"]) - - # --------------------------------------------------------------------------- # --update-snapshot # --------------------------------------------------------------------------- @@ -820,108 +673,6 @@ class TestUpdateSnapshot(SyntheticTreeCase): self.assertEqual(snap["triples"]["OGFL99"], [["Generic", "PLA", "fdm_pla"]]) self.assertEqual(snap["triple_exceptions"], []) - def test_vanished_island_id_released_with_hint_not_retired(self): - self.t.write_preset("VendorA", preset( - "GPLA @base", filament_id="GFZZ01", instantiation=False, - filament_vendor="Generic", filament_type="PLA")) - self.t.write_preset("VendorA", preset( - "GPLA @P1", inherits="GPLA @base", - compatible_printers=["P1 0.4 nozzle"])) - rc, _out = self.t.update_snapshot(allow_shared_catalog=True) - self.assertEqual(rc, 0) - # The family re-mints away from the island id: released, not retired. - self.t.write_preset("VendorA", preset( - "GPLA @base", filament_id="OFaaaaaa", instantiation=False, - filament_vendor="Generic", filament_type="PLA"), register=False) - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.assertIn("released to the BBL island space", out) - ledger = afi.load_ledger(self.t.retired) - self.assertNotIn("GFZZ01", ledger["retired"]) - self.assertEqual(ledger["hints"].get("GFZZ01"), "OFaaaaaa") - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - # The island may legitimately (re)ship a released id later. - self.t.add_vendor("BBL", [ - preset("BPLA @base", filament_id="GFZZ01", instantiation=False), - preset("BPLA @X1C", inherits="BPLA @base", - compatible_printers=["X1C 0.4 nozzle"]), - ]) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_vanished_id_is_retired_with_null_successor(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)["retired"] - self.assertEqual(retired, - {"AX01": {"claims": ["VendorA/APLA"], "successor": None}}) - snap = load_json_file(self.t.snapshot) - self.assertNotIn("AX01", snap["ids"]) - self.assertNotIn("AX01", snap["triples"]) - # 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) - self.assertEqual(retired, load_json_file(self.t.retired)["retired"]) - # ... and a retired id may never be minted again - self.assertNotIn(afi.mint_filament_id("AVendor", "PLA", "APLA", - set(retired)), retired) - - def test_vanished_id_successor_follows_surviving_family(self): - # The family lives on under a new id (a re-mint): the mode rule finds it. - self.t.write_preset("VendorA", preset("APLA @base", filament_id="AXNEW", - instantiation=False, - filament_vendor="AVendor", - filament_type="PLA"), - register=False) - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 0) - retired = load_json_file(self.t.retired)["retired"] - self.assertEqual(retired["AX01"], - {"claims": ["VendorA/APLA"], "successor": "AXNEW"}) - - def test_multi_candidate_retirement_warns_and_ties_break(self): - self.t.write_preset("VendorA", preset("SHRD @base", filament_id="SH01", - instantiation=False, - filament_vendor="SV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("CH1 @P1", inherits="SHRD @base", - compatible_printers=["P1"])) - self.t.write_preset("VendorA", preset("CH2 @P1", inherits="SHRD @base", - compatible_printers=["P1"])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - # Split the two families onto their own roots and drop the shared id. - self.t.write_preset("VendorA", preset("CH1 @base", filament_id="SA01", - instantiation=False, - filament_vendor="SV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("CH2 @base", filament_id="SB01", - instantiation=False, - filament_vendor="SV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("CH1 @P1", inherits="CH1 @base", - compatible_printers=["P1"]), - register=False) - self.t.write_preset("VendorA", preset("CH2 @P1", inherits="CH2 @base", - compatible_printers=["P1"]), - register=False) - self.t.remove_preset("VendorA", "SHRD @base") - rc, out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.assertIn("[WARNING]", out) - self.assertIn("SB01", out) # the losing candidate is named - retired = load_json_file(self.t.retired)["retired"] - self.assertEqual(retired["SH01"]["successor"], "SA01") - self.assertEqual(retired["SH01"]["claims"], - ["VendorA/CH1", "VendorA/CH2"]) - def test_refuses_new_reserved_namespace_claims(self): self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", instantiation=False, @@ -942,181 +693,6 @@ class TestUpdateSnapshot(SyntheticTreeCase): self.assertEqual(snap["ids"]["GFX99"], ["VendorA/CNEW"]) -class TestForgetNeverShipped(SyntheticTreeCase): - def forget_file(self, ids): - path = os.path.join(self.t.dir, "forget.json") - with open(path, "w", encoding="utf-8") as f: - json.dump(ids, f) - return path - - def test_refuses_when_listed_id_is_live(self): - with open(self.t.snapshot, "rb") as f: - before = f.read() - rc, out = self.t.update_snapshot(forget_path=self.forget_file(["AX01"])) - self.assertEqual(rc, 1) - self.assertIn("still in the tree", out) - with open(self.t.snapshot, "rb") as f: - self.assertEqual(f.read(), before) - - def test_forgotten_id_is_not_retired(self): - self.t.write_preset("VendorA", preset("ZN @base", filament_id="Y999", - instantiation=False, - filament_vendor="ZV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("ZN @P1", inherits="ZN @base", - compatible_printers=["P1"])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.t.remove_preset("VendorA", "ZN @base") - self.t.remove_preset("VendorA", "ZN @P1") - rc, out = self.t.update_snapshot(forget_path=self.forget_file(["Y999"])) - self.assertEqual(rc, 0) - self.assertIn("forgotten (never shipped)", out) - self.assertNotIn("Y999", load_json_file(self.t.retired)["retired"]) - self.assertNotIn("Y999", load_json_file(self.t.snapshot)["ids"]) - - def test_splices_chains_through_forgotten_id(self): - self.t.write_preset("VendorA", preset("ZN @base", filament_id="Y999", - instantiation=False, - filament_vendor="ZV", - filament_type="PLA")) - self.t.write_preset("VendorA", preset("ZN @P1", inherits="ZN @base", - compatible_printers=["P1"])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - # A shipped id already forwards to Y999, which turns out never shipped. - self.t.write_ledger(retired={ - "OLD1": {"claims": ["VendorA/ZN"], "successor": "Y999"}}) - # The family re-mints to NEWZ and Y999 vanishes. - self.t.write_preset("VendorA", preset("ZN @base", filament_id="NEWZ", - instantiation=False, - filament_vendor="ZV", - filament_type="PLA"), - register=False) - rc, out = self.t.update_snapshot(forget_path=self.forget_file(["Y999"])) - self.assertEqual(rc, 0) - self.assertIn("spliced succession", out) - retired = load_json_file(self.t.retired)["retired"] - self.assertNotIn("Y999", retired) - self.assertEqual(retired["OLD1"], - {"claims": ["VendorA/ZN"], "successor": "NEWZ"}) - - -# --------------------------------------------------------------------------- -# --add-hint -# --------------------------------------------------------------------------- - -class TestAddHint(SyntheticTreeCase): - def add_bbl(self): - self.t.add_vendor("BBL", [ - preset("BPLA @base", filament_id="GFB01", instantiation=False), - preset("BPLA @X1C", inherits="BPLA @base", - compatible_printers=["X1C 0.4 nozzle"]), - ]) - rc, _out = self.t.update_snapshot() - assert rc == 0 - - def test_adds_island_hint(self): - self.add_bbl() - rc, out = self.t.add_hint(["GFB01=AX01"]) - self.assertEqual(rc, 0, out) - self.assertEqual(load_json_file(self.t.retired)["hints"], - {"GFB01": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_rejects_non_island_old(self): - rc, out = self.t.add_hint(["AX01=OGFL99"]) - self.assertEqual(rc, 1) - self.assertIn("not in an island id space", out) - self.assertEqual(afi.load_ledger(self.t.retired)["hints"], {}) - - def test_accepts_absent_island_old(self): - # Island catalogs own ids Orca never shipped (or has released). - rc, out = self.t.add_hint(["GFXX99=AX01"]) - self.assertEqual(rc, 0, out) - self.assertEqual(load_json_file(self.t.retired)["hints"], - {"GFXX99": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_rejects_retired_old(self): - self.t.write_ledger(retired={"ROLD": {"claims": [], "successor": None}}) - rc, out = self.t.add_hint(["ROLD=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("is retired", out) - - def test_rejects_dead_target(self): - self.add_bbl() - rc, out = self.t.add_hint(["GFB01=OFnope99"]) - self.assertEqual(rc, 1) - self.assertIn("not a live tree id", out) - - def test_rejects_malformed_pair(self): - rc, out = self.t.add_hint(["GFB01"]) - self.assertEqual(rc, 1) - self.assertIn('expects "OLD=NEW"', out) - - -class TestRetire(SyntheticTreeCase): - def test_retires_vanished_id_with_successor(self): - rc, out = self.t.retire(["OFOLD001=AX01"]) - self.assertEqual(rc, 0, out) - self.assertEqual(load_json_file(self.t.retired)["retired"]["OFOLD001"], - {"claims": [], "successor": "AX01"}) - errors, out = self.t.check() - self.assertEqual(errors, 0, out) - - def test_rejects_live_old(self): - rc, out = self.t.retire(["AX01=OGFL99"]) - self.assertEqual(rc, 1) - self.assertIn("still lives in the tree", out) - self.assertEqual(afi.load_ledger(self.t.retired)["retired"], {}) - - def test_rejects_declaration_only_old(self): - # The inert-fork case: an id declared by a claim-less root still lives - # in the tree; the declaration must be deleted before --retire. - self.t.write_preset("VendorA", preset("ZOLD @base", filament_id="ZDECL01", - instantiation=False, - filament_vendor="ZV", - filament_type="PLA")) - rc, out = self.t.retire(["ZDECL01=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("still lives in the tree", out) - - def test_rejects_island_space_old(self): - rc, out = self.t.retire(["GFXX99=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("reserved id space", out) - - def test_rejects_user_space_old(self): - rc, out = self.t.retire(["P1234ABC=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("reserved id space", out) - - def test_rejects_already_retired_old(self): - self.t.write_ledger(retired={"ROLD": {"claims": [], "successor": None}}) - rc, out = self.t.retire(["ROLD=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("already retired", out) - - def test_rejects_hinted_old(self): - self.t.write_ledger(hints={"HOLD": "AX01"}) - rc, out = self.t.retire(["HOLD=AX01"]) - self.assertEqual(rc, 1) - self.assertIn("hint key", out) - - def test_rejects_dead_successor(self): - rc, out = self.t.retire(["OFOLD001=OFnope99"]) - self.assertEqual(rc, 1) - self.assertIn("not a live tree id", out) - - def test_rejects_malformed_pair(self): - rc, out = self.t.retire(["OFOLD001"]) - self.assertEqual(rc, 1) - self.assertIn('expects "OLD=NEW"', out) - - # --------------------------------------------------------------------------- # default run: mint + insert # --------------------------------------------------------------------------- @@ -1373,24 +949,6 @@ class TestRemint(SyntheticTreeCase): a = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(a["filament_id"], want) - def test_blocked_by_retired_id(self): - want0 = afi.generate_filament_id(*self.TRIPLE) - self.t.write_ledger(retired={want0: {"claims": [], "successor": None}}) - changed, errors, _out = self.t.remint(["VendorA"]) - self.assertEqual((changed, errors), (1, 0)) - root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) - self.assertEqual(root["filament_id"], - afi.generate_filament_id(*self.TRIPLE, salt=1)) - - def test_blocked_by_hint_key(self): - want0 = afi.generate_filament_id(*self.TRIPLE) - self.t.write_ledger(hints={want0: "AX01"}) - changed, errors, _out = self.t.remint(["VendorA"]) - self.assertEqual((changed, errors), (1, 0)) - root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) - self.assertEqual(root["filament_id"], - afi.generate_filament_id(*self.TRIPLE, salt=1)) - def test_blocked_by_other_triple_occurrence(self): want0 = afi.generate_filament_id(*self.TRIPLE) self.t.add_vendor("VendorB", [ @@ -1481,63 +1039,11 @@ class TestRealTree(unittest.TestCase): self.assertEqual(analysis["missing_effective"], []) self.assertEqual(analysis["read_errors"], []) - # Code<->ledger lockstep for the Qidi box (plan v4 SS2): the QD_* literals - # QidiPrinterAgent::map_filament_type_to_setting_id returns must stay - # retired ledger keys whose chains end at a live preset id, because the - # agent resolves them through resolve_filament_id_succession() at runtime. - def test_qidi_agent_fallback_ids_resolve_through_ledger(self): - cpp = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "QidiPrinterAgent.cpp") - with open(cpp, encoding="utf-8") as f: - src = f.read() - m = re.search( - r"map_filament_type_to_setting_id\(const std::string& filament_type\)" - r"\s*\{(.*?)\n\}", src, re.DOTALL) - self.assertIsNotNone(m, "map_filament_type_to_setting_id not found in QidiPrinterAgent.cpp") - qd_ids = re.findall(r'return "(QD_[0-9_]+)";', m.group(1)) - self.assertTrue(qd_ids, "no QD_* literals parsed from map_filament_type_to_setting_id") - ledger = afi.load_ledger(afi.RETIRED_PATH) - live = set(afi.analyze_tree(REAL_PROFILES)["ids"]) - for fid in qd_ids: - self.assertIn(fid, ledger["retired"], f'"{fid}" must be a retired ledger key') - status, node = afi.follow_succession( - fid, set(), ledger["retired"], ledger["hints"], live) - self.assertEqual( - status, "live", - f'"{fid}" succession must end at a live id (got {status} at "{node}")') - - # --------------------------------------------------------------------------- # review-fix regressions # --------------------------------------------------------------------------- class TestReviewFixes(SyntheticTreeCase): - def test_update_snapshot_refuses_retired_id_reuse(self): - fid = afi.generate_filament_id("LV", "PLA", "LONER") - self.t.write_preset("VendorA", preset("LONER @base", filament_id=fid, - instantiation=False, - filament_vendor="LV", - filament_type="PLA")) - 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, - filament_vendor="LV", - filament_type="PLA")) - 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): # An OFL family carries its own minted OF id and a vendor tunes it # correctly (same base name, non-empty printers). The new claim must @@ -1565,7 +1071,7 @@ class TestReviewFixes(SyntheticTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check7c_prints_expected_mint(self): + def test_check6c_prints_expected_mint(self): self.t.write_preset("VendorA", preset("Orphan PLA @P1", compatible_printers=["P1 0.4 nozzle"], filament_vendor="OV", diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 7306d0db07..304c8957d5 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -572,60 +572,6 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::str return std::string(out, 16); } -std::string follow_filament_id_succession(const std::string& id, const std::map& forwards) -{ - auto it = forwards.find(id); - if (it == forwards.end()) - return std::string(); - std::set visited { id }; - std::string current = id; - while (it != forwards.end() && visited.insert(it->second).second) { - current = it->second; - it = forwards.find(current); - } - // it == end(): current is the live end of the chain; otherwise the ledger is - // cyclic and current is the last id reached before a repeat. - return current; -} - -const std::map& filament_id_succession_map() -{ - // Loaded once; C++11 magic-static initialization makes this thread-safe. - // Succession is a best-effort miss-path fallback, so a missing or corrupt - // ledger is not an error for the client - it just yields an empty map. - static const std::map forwards = []() { - std::map map; - const std::string path = Slic3r::resources_dir() + "/profiles/retired_filament_ids.json"; - boost::nowide::ifstream file(path.c_str()); - if (!file.is_open()) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": cannot open " << path; - return map; - } - try { - nlohmann::json ledger; - file >> ledger; - if (ledger.contains("retired") && ledger["retired"].is_object()) - for (auto& [old_id, entry] : ledger["retired"].items()) - if (entry.is_object() && entry.contains("successor") && entry["successor"].is_string()) - map[old_id] = entry["successor"].get(); - if (ledger.contains("hints") && ledger["hints"].is_object()) - for (auto& [old_id, target] : ledger["hints"].items()) - if (target.is_string()) - map[old_id] = target.get(); - } catch (...) { - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": failed to parse " << path; - map.clear(); - } - return map; - }(); - return forwards; -} - -std::string resolve_filament_id_succession(const std::string& id) -{ - return follow_filament_id_succession(id, filament_id_succession_map()); -} - std::string Preset::get_iot_type_string(Preset::Type type) { switch (type) { diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index ca1513a4bb..c9b3197a6f 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -101,23 +101,6 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::string& type, const std::string& name); -// Succession forwarding for retired/renamed filament_ids, backed by the shipped -// ledger resources/profiles/retired_filament_ids.json. Consulted on a filament_id -// resolution miss only, so live ids always resolve natively first. -// -// Pure chain walk over `forwards` (old id -> successor). Returns the final id of the -// chain, or an empty string when `id` has no entry. Cycle-guarded: on a malformed -// cyclic ledger it stops at the last id reached before any repeat (a self-loop -// returns `id` itself). -std::string follow_filament_id_succession(const std::string& id, - const std::map& forwards); -// Forwarding map loaded once (thread-safe) from the ledger, merging -// "retired" {id -> non-null successor} and "hints" {island-owned id -> live id}. -// A missing or corrupt file yields an empty map. -const std::map& filament_id_succession_map(); -// Convenience: follow_filament_id_succession(id, filament_id_succession_map()). -std::string resolve_filament_id_succession(const std::string& id); - enum ConfigFileType { CONFIG_FILE_TYPE_UNKNOWN, diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index c6cd6d28dd..5542191964 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -801,12 +801,6 @@ std::optional PresetBundle::get_filament_by_filament_id(const } } } - // Miss: a retired/renamed id may forward to a live successor through the shipped - // succession ledger. resolve() returns a chain-final id, so the retry below cannot - // recurse further (a malformed cyclic ledger yields a non-final id, rejected here). - const std::string successor = resolve_filament_id_succession(filament_id); - if (!successor.empty() && resolve_filament_id_succession(successor).empty()) - return get_filament_by_filament_id(successor, printer_name); return std::nullopt; } @@ -3420,15 +3414,6 @@ 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()) { - // Retired/renamed ids forward to a live successor through the shipped succession ledger. - const std::string successor = resolve_filament_id_succession(filament_id); - if (!successor.empty()) { - iter = std::find_if(filaments.begin(), filaments.end(), - [this, &successor](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == successor; }); - warn_ambiguous_filament_id_match(filaments, iter, successor); - } - } 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); @@ -3532,16 +3517,6 @@ unsigned int PresetBundle::sync_ams_list(std::vectorfilaments; @@ -103,12 +103,6 @@ static wxString get_preset_name_by_filament_id(std::string filament_id, bool fol } } } - if (preset_name.empty() && follow_succession) { - // Retired/renamed ids forward to a live successor through the shipped succession ledger. - const std::string successor = resolve_filament_id_succession(filament_id); - if (!successor.empty()) - preset_name = get_preset_name_by_filament_id(successor, false); - } return preset_name; } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 2e814a84e2..b28e410557 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -2764,22 +2764,14 @@ std::string MachineObject::setting_id_to_type(std::string setting_id, std::strin std::string type; PresetBundle* preset_bundle = GUI::wxGetApp().preset_bundle; if (preset_bundle) { - auto lookup_system_type = [preset_bundle](const std::string &id) { - std::string display_filament_type; - for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - if (it->filament_id.compare(id) == 0 && it->is_system) { - it->config.get_filament_type(display_filament_type); - break; - } + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { + + if (it->filament_id.compare(setting_id) == 0 && it->is_system) { + std::string display_filament_type; + it->config.get_filament_type(display_filament_type); + type = display_filament_type; + break; } - return display_filament_type; - }; - type = lookup_system_type(setting_id); - if (type.empty()) { - // Retired/renamed ids forward to a live successor through the shipped succession ledger. - const std::string successor = resolve_filament_id_succession(setting_id); - if (!successor.empty()) - type = lookup_system_type(successor); } } diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 338095b462..837f4ebe0c 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -556,13 +556,6 @@ bool PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) } auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id, this](auto &f) { return f.is_compatible && m_collection->get_preset_base(f) == &f && f.filament_id == filament_id; }); - if (iter == filaments.end()) { - // Retired/renamed ids forward to a live successor through the shipped succession ledger. - const std::string successor = resolve_filament_id_succession(filament_id); - if (!successor.empty()) - iter = std::find_if(filaments.begin(), filaments.end(), - [&successor, this](auto &f) { return f.is_compatible && m_collection->get_preset_base(f) == &f && f.filament_id == successor; }); - } if (iter == filaments.end()) { auto filament_type = tray.opt_string("filament_type", 0u); if (!filament_type.empty()) { diff --git a/src/slic3r/Utils/QidiPrinterAgent.cpp b/src/slic3r/Utils/QidiPrinterAgent.cpp index 22b8d37735..6b05480194 100644 --- a/src/slic3r/Utils/QidiPrinterAgent.cpp +++ b/src/slic3r/Utils/QidiPrinterAgent.cpp @@ -188,13 +188,7 @@ bool QidiPrinterAgent::fetch_slot_info(const std::string& base_url, } else if (!setting_id.empty() && has_visible_base_preset(bundle->filaments, setting_id)) { tray.tray_info_idx = setting_id; } else { - // Retired QD_* protocol ids forward to their minted successors via the shipped ledger. - const std::string successor = setting_id.empty() ? std::string() - : resolve_filament_id_succession(setting_id); - if (!successor.empty() && has_visible_base_preset(bundle->filaments, successor)) - tray.tray_info_idx = successor; - else - tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); + tray.tray_info_idx = bundle->filaments.filament_id_by_type(tray.tray_type); } // Look up color from dictionary @@ -330,10 +324,6 @@ void QidiPrinterAgent::parse_filament_sections(const std::string& content, std:: std::string QidiPrinterAgent::map_filament_type_to_setting_id(const std::string& filament_type) { - // These QD_* protocol ids no longer appear on any preset: they are retired ledger keys - // that parse_box_status resolves through resolve_filament_id_succession(). Each literal - // must stay a ledger key whose chain ends at a live preset id — - // scripts/tests/test_filament_id.py parses this function and enforces that. const std::string upper = trim_and_upper(filament_type); if (upper == "PLA") { diff --git a/task.md b/task.md deleted file mode 100644 index b563759767..0000000000 --- a/task.md +++ /dev/null @@ -1,13 +0,0 @@ -check commit c2e91cb86ce013dc0486419f21620975c220c3be and it's related PR. -currently most of the system profiles didn't follow the Bambu's profiles rule of filemant id. -we want to come up a rule for filament id generation for all vendors and a fixing plan for existing system profiles so that there is no ambiguous filament ids for any given printer. - -We have two major goals: -### goal 1 -figure out a strategy or filament id generation rule. we want to follow bambu's rule but they only care about their own profiles while we need to consider generic. and the filament id generation rule should be easy to understand and maintain for not just us but other profiles creators too. either a determistic rule by using script like setting_id rule. or a documented rule so developers can refer when manually creating profiles. and figure out a way to fix migrate/fix existing filament ids in current profiles. note: bambu profiles shouldn't be touch to maintain interoperbitly with their AMS. - -### goal 2 -in existing system profiles, the ambiguous can caused by different error patterns: -1. legit sub type don't have unique filament id due to copy-paste when creating profiles. in this case, we should assign filament unique filament id to it. -2. generic and specific filament with legit same filament id adds same printer into it's compatible_printers. in this case we should remove the printer from the generic filament's compatible_printers. -3. we need to figure out more error patterns and figure out the fix strategy diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 7093f44405..bf3981f519 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -16,7 +16,6 @@ add_executable(${_TEST_NAME}_tests test_toolordering_nozzle_group.cpp test_preset_bundle_loading.cpp test_preset_setting_id.cpp - test_filament_id_succession.cpp test_preset_diff.cpp test_vendor_cache.cpp test_elephant_foot_compensation.cpp diff --git a/tests/libslic3r/test_filament_id_succession.cpp b/tests/libslic3r/test_filament_id_succession.cpp deleted file mode 100644 index 12fa82f9bb..0000000000 --- a/tests/libslic3r/test_filament_id_succession.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include - -#include "libslic3r/Preset.hpp" - -using namespace Slic3r; - -// Pure-function coverage of the succession chain walk (follow_filament_id_succession). -// The ledger-file loader (filament_id_succession_map) is deliberately untested here so -// the test carries no resources-dir dependency. -TEST_CASE("filament_id succession follows forwarding chains", "[Preset][filament_id]") { - SECTION("empty map returns empty") { - const std::map empty; - CHECK(follow_filament_id_succession("OFabc123", empty).empty()); - CHECK(follow_filament_id_succession("", empty).empty()); - } - - const std::map forwards = { - {"OFold001", "OFnew001"}, - {"OFchainA", "OFchainB"}, - {"OFchainB", "OFchainC"}, - {"OFchainC", "OFlive00"}, - }; - - SECTION("absent id returns empty") { - CHECK(follow_filament_id_succession("GFL99", forwards).empty()); - } - - SECTION("single hop resolves to the successor") { - CHECK(follow_filament_id_succession("OFold001", forwards) == "OFnew001"); - } - - SECTION("multi-hop chain resolves to the live end") { - CHECK(follow_filament_id_succession("OFchainA", forwards) == "OFlive00"); - CHECK(follow_filament_id_succession("OFchainB", forwards) == "OFlive00"); - CHECK(follow_filament_id_succession("OFchainC", forwards) == "OFlive00"); - } - - // QidiPrinterAgent resolves device-composed QD_* protocol ids through this same walk; - // the map key format carries no OF assumption. - SECTION("device-protocol QD_* keys forward like any other id") { - const std::map qd = {{"QD_2_1_11", "OFnew001"}}; - CHECK(follow_filament_id_succession("QD_2_1_11", qd) == "OFnew001"); - CHECK(follow_filament_id_succession("QD_2_1_12", qd).empty()); - } -} - -// Cycles are a ledger-validation error (script check 9) and never ship, but the client -// walk must still terminate on corrupt data: it stops at the last id reached before any -// id would repeat. -TEST_CASE("filament_id succession terminates on malformed cycles", "[Preset][filament_id]") { - SECTION("two-node cycle returns the last id before revisiting") { - const std::map cycle = {{"A", "B"}, {"B", "A"}}; - CHECK(follow_filament_id_succession("A", cycle) == "B"); - CHECK(follow_filament_id_succession("B", cycle) == "A"); - } - - SECTION("cycle entered through a tail stops before re-entering it") { - // T -> A -> B -> C -> A: stops at C, the last id reached before repeating A. - const std::map cycle = { - {"T", "A"}, {"A", "B"}, {"B", "C"}, {"C", "A"}}; - CHECK(follow_filament_id_succession("T", cycle) == "C"); - CHECK(follow_filament_id_succession("A", cycle) == "C"); - } - - SECTION("self-loop returns the id itself") { - const std::map loop = {{"A", "A"}}; - CHECK(follow_filament_id_succession("A", loop) == "A"); - } -} From df101ead91da5643413a291eb2c8bccffa73d2db Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 00:29:52 +0800 Subject: [PATCH 096/208] fix more issues --- .../Creality/machine/Creality K1 SE.json | 2 +- .../Creality/machine/Creality K1C.json | 2 +- .../Creality/machine/Creality K2 Plus.json | 2 +- .../Creality/machine/Creality K2 Pro.json | 2 +- .../Creality/machine/Creality K2.json | 2 +- .../machine/Flashforge Guider 3 Ultra.json | 2 +- .../machine/D12 230 PRO M2 DIRECT.json | 2 +- .../machine/D12 230 PRO SMARTPAD DIRECT.json | 2 +- .../machine/D12 300 PRO M2 DIRECT.json | 2 +- .../machine/D12 300 PRO SMARTPAD DIRECT.json | 2 +- .../machine/D12 500 PRO M2 DIRECT.json | 2 +- .../machine/D12 500 PRO SMARTPAD DIRECT.json | 2 +- .../OrcaSlicer_profile_validator.cpp | 2 +- src/slic3r/Utils/CrealityPrintAgent.cpp | 79 ++++++++-- tests/slic3rutils/CMakeLists.txt | 1 + tests/slic3rutils/test_creality_cfs_match.cpp | 141 ++++++++++++++++++ 16 files changed, 218 insertions(+), 29 deletions(-) create mode 100644 tests/slic3rutils/test_creality_cfs_match.cpp diff --git a/resources/profiles/Creality/machine/Creality K1 SE.json b/resources/profiles/Creality/machine/Creality K1 SE.json index 9f6806ee46..1cb9769e0e 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE.json +++ b/resources/profiles/Creality/machine/Creality K1 SE.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1se_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ABS @K1 SE-all;Generic ASA @Creality K1-all;Generic ASA @K1 SE-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PETG @K1 SE-all;Generic PLA @Creality K1-all;Generic PLA @K1 SE-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic PLA-CF @K1 SE-all;Generic TPU @Creality K1-all;Generic TPU @K1 SE-all" } diff --git a/resources/profiles/Creality/machine/Creality K1C.json b/resources/profiles/Creality/machine/Creality K1C.json index 4283aabfd4..18e80dab92 100644 --- a/resources/profiles/Creality/machine/Creality K1C.json +++ b/resources/profiles/Creality/machine/Creality K1C.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1c_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ABS @K1C-all;Generic ASA @Creality K1-all;Generic ASA @K1C-all;Generic PA-CF @Creality K1-all;Generic PA-CF @K1C-all;Generic PC @Creality K1-all;Generic PC @K1C-all;Generic PETG @Creality K1-all;Generic PETG @K1C-all;Generic PLA @Creality K1-all;Generic PLA @K1C-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic PLA-CF @K1C-all;Generic TPU @Creality K1-all;Generic TPU @K1C-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 Plus.json b/resources/profiles/Creality/machine/Creality K2 Plus.json index d70e5e517a..ea4430128a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2plus_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2 Plus-all;Generic ASA @Creality K2-all;Generic ASA @K2 Plus-all;Generic PETG @Creality K2-all;Generic PETG @K2 Plus-all;Generic PLA @Creality K2-all;Generic PLA @K2 Plus-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 Pro.json b/resources/profiles/Creality/machine/Creality K2 Pro.json index 3df797399b..937117d11d 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2pro_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2 Pro-all;Generic ASA @Creality K2-all;Generic ASA @K2 Pro-all;Generic PETG @Creality K2-all;Generic PETG @K2 Pro-all;Generic PLA @Creality K2-all;Generic PLA @K2 Pro-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2.json b/resources/profiles/Creality/machine/Creality K2.json index 3ea29942b7..cc852576fe 100644 --- a/resources/profiles/Creality/machine/Creality K2.json +++ b/resources/profiles/Creality/machine/Creality K2.json @@ -9,5 +9,5 @@ "default_bed_type": "Textured PEI Plate", "bed_texture": "creality_k2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2-all;Generic ASA @Creality K2-all;Generic ASA @K2-all;Generic PETG @Creality K2-all;Generic PETG @K2-all;Generic PLA @Creality K2-all;Generic PLA @K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json index c95215a762..a830f2db98 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g3u_buildplate_model.stl", "bed_texture": "flashforge_g3u_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" + "default_materials": "FusRock NexPA-CF25;FusRock PAHT-CF;FusRock PAHT-CF @G3U 0.6 Nozzle;FusRock PET-CF;FusRock PET-CF @G3U 0.6 Nozzle;FusRock S-Multi;FusRock S-PAHT;Generic ABS @Flashforge G3U;Generic ABS @Flashforge G3U 0.6 Nozzle;Generic ASA @Flashforge G3U;Generic ASA @Flashforge G3U 0.6 Nozzle;Generic HIPS @Flashforge;Generic HIPS @Flashforge G3U 0.6 Nozzle;Generic PETG @Flashforge G3U;Generic PETG @Flashforge G3U 0.6 Nozzle;Generic PETG @Flashforge G3U 0.8 Nozzle;Generic PETG-CF @Flashforge G3U;Generic PETG-CF @Flashforge G3U 0.6 Nozzle;Generic PETG-CF @Flashforge G3U 0.8 Nozzle;Generic PLA @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA-CF @Flashforge G3U 0.6 Nozzle;Generic PLA-CF @Flashforge G3U 0.8 Nozzle;Generic PVA @Flashforge;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json index 45e7243ee3..cf912002ee 100644 --- a/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-230_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json index b74b11321e..24a798c531 100644 --- a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-230_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json index a51f0bafbf..7447f4481b 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-300_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json index 563d05ca53..8290a99d9e 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-300_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json index d54d0d6e51..3c85fac7eb 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-500_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json index 2fe6842bc8..3588797494 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-500_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/src/dev-utils/OrcaSlicer_profile_validator.cpp b/src/dev-utils/OrcaSlicer_profile_validator.cpp index 21c6b33180..67d0ba444d 100644 --- a/src/dev-utils/OrcaSlicer_profile_validator.cpp +++ b/src/dev-utils/OrcaSlicer_profile_validator.cpp @@ -392,7 +392,7 @@ int main(int argc, char* argv[]) ("generate_presets,g", po::value()->default_value(false), "Generate user presets for mock test") ("slice,s", po::bool_switch()->default_value(false), "Slice a two-colour cube through every printer to expand all custom g-code (catches placeholder/flow errors that static checks miss). Off unless this flag is present.") ("outdir,o", po::value()->default_value(""), "With -s, also save each printer's g-code to this folder (as __.gcode) for manual inspection. Optional.") - ("check_filament_subtypes,f", po::bool_switch()->default_value(false), "Also flag printers with duplicate (ambiguous) filament subtypes. Off unless this flag is present.") + ("check_filament_subtypes,f", po::bool_switch()->default_value(true), "Also flag printers with duplicate (ambiguous) filament subtypes. Off unless this flag is present.") ("log_level,l", po::value()->default_value(2), "Log level. Optional, default is 2 (warning). Higher values produce more detailed logs."); // clang-format on diff --git a/src/slic3r/Utils/CrealityPrintAgent.cpp b/src/slic3r/Utils/CrealityPrintAgent.cpp index 55d99ff07b..9b3bd5843e 100644 --- a/src/slic3r/Utils/CrealityPrintAgent.cpp +++ b/src/slic3r/Utils/CrealityPrintAgent.cpp @@ -8,7 +8,9 @@ #include #include +#include #include +#include namespace Slic3r { @@ -16,6 +18,12 @@ namespace { constexpr const char* CrealityPrintAgent_VERSION = "0.1.0"; +std::string to_lower(std::string s) +{ + for (auto& c : s) c = static_cast(std::tolower(static_cast(c))); + return s; +} + bool has_visible_base_preset(const PresetCollection& filaments, const std::string& filament_id) { for (const auto& p : filaments.get_presets()) { @@ -27,19 +35,47 @@ bool has_visible_base_preset(const PresetCollection& filaments, const std::strin return false; } +// Lower-case words of a preset name with the "@scope" suffix dropped: +// "Generic PLA Matte @Creality K2-all" -> {"generic", "pla", "matte"}. +std::vector name_words(const std::string& name) +{ + std::vector words; + std::string word; + for (char c : name.substr(0, name.find('@'))) { + if (std::isalnum(static_cast(c))) { + word += static_cast(std::tolower(static_cast(c))); + } else if (!word.empty()) { + words.push_back(word); + word.clear(); + } + } + if (!word.empty()) + words.push_back(word); + return words; +} + } // namespace // Score visible compatible filament presets against the CFS spool metadata and // return the best-matching filament_id. Scoring: // +20 preset name contains brand_name as a substring // (e.g. "Hyper PLA" in "Hyper PLA @Creality K2 0.4 nozzle") -// +10 preset name contains the vendor substring (e.g. "Creality") -// Tiebreak: prefer the SYSTEM (shipped) preset over user copies. Brand- -// specific system presets carry their own filament_id; user copies of -// generic presets inherit a generic filament_id from their parent, so -// preferring the user copy can collapse a brand-specific match back to -// "Generic PLA" via the inherited id. Plus: this code targets upstream -// OrcaSlicer where shipping the user's local tuning would be wrong. +// +10 the preset belongs to the spool's vendor - by its owning VendorProfile OR by +// its name. The profile test is what finds the vendor's own generics, which are +// named "Generic @" and do not repeat the vendor; the name test +// still finds a third party filament shipped inside that vendor's bundle, which +// carries the bundle owner's profile but names its real brand. +// -5 per word of the preset name the spool never mentioned ("generic" excepted - +// it marks the unbranded base product rather than a qualifier), so the least +// specific preset that still explains the spool wins. Without it a spool +// reporting only "PLA" scores "Generic PLA High Speed" and "Generic PLA Matte" +// exactly as high as "Generic PLA"; those are three products with three +// filament_ids, so whichever sorted first won and the printer got the wrong +// one. Applied after the score gate, so it only reorders genuine matches. +// Tiebreak: prefer the SYSTEM (shipped) preset over user copies, then by name so the +// winner never depends on how std::sort leaves equal elements. User copies of generic +// presets inherit a generic filament_id from their parent, so preferring the user copy +// can collapse a brand-specific match back to "Generic PLA" via the inherited id. // Requires the preset's declared filament_type to equal the spool's base type // (PLA/PETG/ABS/...) so we never auto-pick a PETG preset for a PLA spool. // Falls back to filaments.filament_id_by_type(base_type) when nothing scores. @@ -48,15 +84,17 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi const std::string& brand_name, const std::string& base_type) { - auto to_lower = [](std::string s) { - for (auto& c : s) c = static_cast(std::tolower(static_cast(c))); - return s; - }; - const std::string vendor_lower = to_lower(vendor); const std::string brand_lower = to_lower(brand_name); const std::string type_lower = to_lower(base_type); + // Everything the spool told us about itself, as words. A word in a preset's name + // that is not in here is a qualifier the spool never claimed. + std::set spool_words{"generic"}; + for (const std::string& src : {brand_lower, vendor_lower, type_lower}) + for (auto& w : name_words(src)) + spool_words.insert(std::move(w)); + struct Match { const Preset* preset; int score; @@ -83,11 +121,20 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi int score = 0; if (!brand_lower.empty() && name_lower.find(brand_lower) != std::string::npos) score += 20; - if (!vendor_lower.empty() && name_lower.find(vendor_lower) != std::string::npos) + // Profile OR name - neither alone covers both the vendor's own generics and the + // third party filaments shipped inside its bundle. See the header comment. + if (!vendor_lower.empty() + && ((p.vendor != nullptr && to_lower(p.vendor->name) == vendor_lower) + || name_lower.find(vendor_lower) != std::string::npos)) score += 10; - if (score > 0) - matches.push_back({&p, score, !p.is_system && !p.is_default}); + if (score == 0) continue; + + for (const auto& w : name_words(p.name)) + if (spool_words.count(w) == 0) + score -= 5; + + matches.push_back({&p, score, !p.is_system && !p.is_default}); } if (matches.empty()) { @@ -105,7 +152,7 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi [](const Match& a, const Match& b) { if (a.score != b.score) return a.score > b.score; if (a.is_user != b.is_user) return !a.is_user; // prefer system over user - return false; + return a.preset->name < b.preset->name; // keep the winner deterministic }); BOOST_LOG_TRIVIAL(info) diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index ebbd62b820..eca1af2b86 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -1,6 +1,7 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp + test_creality_cfs_match.cpp test_dev_mapping.cpp test_filament_bitmap_utils.cpp test_network_versions.cpp diff --git a/tests/slic3rutils/test_creality_cfs_match.cpp b/tests/slic3rutils/test_creality_cfs_match.cpp new file mode 100644 index 0000000000..06606684b7 --- /dev/null +++ b/tests/slic3rutils/test_creality_cfs_match.cpp @@ -0,0 +1,141 @@ +#include + +#include "libslic3r/Preset.hpp" +#include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "slic3r/Utils/CrealityPrintAgent.hpp" + +using namespace Slic3r; + +namespace { + +// A standalone filament collection, built the same way PresetBundle builds its own, so the +// CFS matcher can be exercised without loading the shipped profiles or touching a printer. +struct FilamentTestCollection : public PresetCollection +{ + FilamentTestCollection() + : PresetCollection(Preset::TYPE_FILAMENT, Preset::filament_options(), + static_cast(FullPrintConfig::defaults())) + {} +}; + +struct FilamentSpec +{ + const char *name; + const char *filament_id; + const char *filament_type; + bool is_library = false; // belongs to the Orca Filament Library, not the printer vendor + bool is_system = true; +}; + +// Load the specs into the collection, then stamp the fields the matcher reads. Done in a second +// pass because load_preset() keeps m_presets sorted, so a reference taken during the first pass +// can be left dangling by a later load. +void populate(PresetCollection &filaments, const std::vector &specs, + const VendorProfile &vendor, const VendorProfile &library) +{ + for (const FilamentSpec &spec : specs) { + DynamicPrintConfig config(filaments.default_preset().config); + config.option("filament_type", true)->values = {spec.filament_type}; + filaments.load_preset(std::string(), spec.name, config, /*select=*/false); + } + for (auto it = filaments.begin(); it != filaments.end(); ++it) { + const auto spec = std::find_if(specs.begin(), specs.end(), + [&](const FilamentSpec &s) { return it->name == s.name; }); + if (spec == specs.end()) + continue; + it->filament_id = spec->filament_id; + it->vendor = spec->is_library ? &library : &vendor; + it->is_system = spec->is_system; + it->is_default = false; + it->is_visible = true; + it->is_compatible = true; + } +} + +// What a stock K2 with a 0.4 nozzle sees after the filament_id rework: the vendor's plain generics +// carry no "Creality" in their name (they are "Generic @"), while the subtype +// variants that do keep a vendor scope are separate products with their own filament_ids. +const std::vector k2_stock_nozzle{ + {"AliZ PLA @System", "ALIZ-PLA", "PLA", /*is_library=*/true}, + {"Generic PETG @K2-all", "PETG-GENERIC", "PETG"}, + {"Generic PLA @K2-all", "PLA-GENERIC", "PLA"}, + {"Generic PLA High Speed @Creality K2-all","PLA-HS", "PLA"}, + {"Generic PLA Matte @Creality K2-all", "PLA-MATTE", "PLA"}, + {"Generic PLA Silk @Creality K2-all", "PLA-SILK", "PLA"}, + {"Hyper PLA @K2-all", "PLA-HYPER", "PLA"}, +}; + +std::string match(const std::vector &specs, const std::string &spool_vendor, + const std::string &spool_name, const std::string &base_type) +{ + FilamentTestCollection filaments; + VendorProfile vendor("Creality"); + VendorProfile library(PresetBundle::ORCA_FILAMENT_LIBRARY); + vendor.name = "Creality"; + library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + populate(filaments, specs, vendor, library); + return CrealityPrintAgent::match_filament_preset(filaments, spool_vendor, spool_name, base_type); +} + +} // namespace + +// Orca: a CFS spool that names no recognised product must map to the vendor's plain generic. The +// subtype variants ("High Speed", "Matte", "Silk") score just as well on vendor alone, and since +// each is its own product with its own filament_id, letting one of them win sends the printer the +// id of a filament the user does not have loaded. +TEST_CASE("An unbranded CFS spool maps to the vendor's plain generic, not a subtype", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "", "PLA") == "PLA-GENERIC"); +} + +// Orca: the vendor bonus reads the preset's owning VendorProfile. "Generic PETG @K2-all" does not +// repeat "Creality" anywhere in its name, so a name based vendor test scored nothing for it and the +// spool fell through to the collection wide first-of-type - an unrelated third party PETG. +TEST_CASE("A CFS spool matches its vendor's presets even when the name omits the vendor", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "", "PETG") == "PETG-GENERIC"); +} + +TEST_CASE("A branded CFS spool still beats the generic", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "Hyper PLA", "PLA") == "PLA-HYPER"); +} + +// Orca: the specificity penalty must not stop a spool that genuinely asks for a subtype from +// getting it - only unclaimed qualifiers are penalised. +TEST_CASE("A CFS spool that names a subtype gets that subtype", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "Generic PLA Silk", "PLA") == "PLA-SILK"); + CHECK(match(k2_stock_nozzle, "Creality", "Generic PLA Matte", "PLA") == "PLA-MATTE"); +} + +// Orca: a third party spool matches no preset by brand or vendor, so it falls back to the first +// visible preset of the same type rather than returning nothing. Which one that is depends on the +// collection's ordering, so only the type is pinned here - what matters is that a PLA spool never +// comes back empty and never comes back as another material. +TEST_CASE("A CFS spool from an unknown vendor falls back to a preset of the same type", "[CFS][Creality]") +{ + const std::string matched = match(k2_stock_nozzle, "SomeOtherBrand", "", "PLA"); + REQUIRE_FALSE(matched.empty()); + const auto spec = std::find_if(k2_stock_nozzle.begin(), k2_stock_nozzle.end(), + [&](const FilamentSpec &s) { return matched == s.filament_id; }); + REQUIRE(spec != k2_stock_nozzle.end()); + CHECK(std::string(spec->filament_type) == "PLA"); +} + + +// Orca: Creality's bundle also ships third party filaments ("eSUN PLA+ @K2 Plus-all"). Those carry +// Creality's VendorProfile but name their real brand, so the vendor bonus has to accept a name +// match as well as a profile match - otherwise an eSUN spool stops matching its own preset. +TEST_CASE("A third party spool matches its preset inside the printer vendor's bundle", "[CFS][Creality]") +{ + const std::vector with_third_party{ + {"Generic PLA @K2-all", "PLA-GENERIC", "PLA"}, + {"eSUN PLA+ @K2 Plus-all", "ESUN-PLA", "PLA"}, // shipped by Creality, branded eSUN + }; + CHECK(match(with_third_party, "eSUN", "", "PLA") == "ESUN-PLA"); + // ... and a Creality spool still prefers Creality's own generic over the eSUN preset, which + // carries Creality's profile too but adds a brand word the spool never claimed. + CHECK(match(with_third_party, "Creality", "", "PLA") == "PLA-GENERIC"); +} From a4382ce3b335c7be6367dfc996510d723ceaa0c1 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 01:06:04 +0800 Subject: [PATCH 097/208] reanme --- resources/profiles/TwoTrees.json | 4 ++-- ...K1.json => Generic TPU 95A @TwoTrees SK1.json} | 6 +++--- .../profiles/TwoTrees/machine/TwoTrees SK1.json | 2 +- scripts/filament_id_snapshot.json | 15 +++------------ 4 files changed, 9 insertions(+), 18 deletions(-) rename resources/profiles/TwoTrees/filament/{Generic 95A TPU @TwoTrees SK1.json => Generic TPU 95A @TwoTrees SK1.json} (85%) diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index 5c8349181f..3cd77c911b 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -81,8 +81,8 @@ ], "filament_list": [ { - "name": "Generic 95A TPU @TwoTrees SK1", - "sub_path": "filament/Generic 95A TPU @TwoTrees SK1.json" + "name": "Generic TPU 95A @TwoTrees SK1", + "sub_path": "filament/Generic TPU 95A @TwoTrees SK1.json" }, { "name": "Generic HS PLA @TwoTrees SK1", diff --git a/resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json b/resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json similarity index 85% rename from resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json rename to resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json index 46b9d1f100..6f0221b92c 100644 --- a/resources/profiles/TwoTrees/filament/Generic 95A TPU @TwoTrees SK1.json +++ b/resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json @@ -1,11 +1,11 @@ { "type": "filament", - "name": "Generic 95A TPU @TwoTrees SK1", + "name": "Generic TPU 95A @TwoTrees SK1", "inherits": "fdm_filament_tpu", "renamed_from": "TwoTrees Generic 95A TPU @SK1;TwoTrees Generic 95A TPU SK1", "from": "system", - "setting_id": "LR7ufBEnGhieNdB7", - "filament_id": "OF6MMR8P", + "setting_id": "hAqaYYR7xzkcr2xC", + "filament_id": "OFjiXpyf", "instantiation": "true", "compatible_printers": [ "TwoTrees SK1 0.4 nozzle" diff --git a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json index 964d47c813..5674e7c408 100644 --- a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json +++ b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json @@ -8,5 +8,5 @@ "bed_model": "TwoTrees SK1_buildplate_model.stl", "bed_texture": "TwoTrees SK1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Generic 95A TPU @TwoTrees SK1;TwoTrees Generic PETG @SK1;Generic HS PLA @TwoTrees SK1;TwoTrees Generic PLA @SK1;TwoTrees Generic PLA-CF @SK1;TwoTrees Generic PLA Matte @SK1;TwoTrees Generic PLA Silk @SK1" + "default_materials": "Generic TPU 95A @TwoTrees SK1;TwoTrees Generic PETG @SK1;Generic HS PLA @TwoTrees SK1;TwoTrees Generic PLA @SK1;TwoTrees Generic PLA-CF @SK1;TwoTrees Generic PLA Matte @SK1;TwoTrees Generic PLA Silk @SK1" } diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index efaffb0654..9a4b4a2abd 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1776,9 +1776,6 @@ "Elegoo/Elegoo PETG Translucent", "OrcaFilamentLibrary/Elegoo PETG Translucent" ], - "OF6MMR8P": [ - "TwoTrees/Generic 95A TPU" - ], "OF6MOPWx": [ "Creality/Generic PET", "Elegoo/Generic PET", @@ -3662,7 +3659,8 @@ "Cubicon/Cubicon PLA" ], "OFjiXpyf": [ - "Qidi/Generic TPU 95A" + "Qidi/Generic TPU 95A", + "TwoTrees/Generic TPU 95A" ], "OFjkdnyN": [ "Snapmaker/Snapmaker Dual TPU" @@ -6879,8 +6877,8 @@ "Tiertime/Tiertime PVA@300HS", "Tiertime/Tiertime TPU 95A", "Tiertime/Tiertime TPU 95A@300HS", - "TwoTrees/Generic 95A TPU @TwoTrees SK1", "TwoTrees/Generic HS PLA @TwoTrees SK1", + "TwoTrees/Generic TPU 95A @TwoTrees SK1", "Volumic/Désactivé", "Volumic/PA6 CF20 (Performance)", "Volumic/PETG ESD (Performance)", @@ -7574,13 +7572,6 @@ "Elegoo PETG Translucent" ] ], - "OF6MMR8P": [ - [ - "Generic", - "TPU", - "Generic 95A TPU" - ] - ], "OF6MOPWx": [ [ "Generic", From 25e020f5c927350a7491aef21c318604d00d1abc Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 13:31:19 +0800 Subject: [PATCH 098/208] Add the generated map from Orca filament ids to Bambu catalog ids scripts/update_bambu_filament_ids.py derives resources/printers/bambu_filament_ids.json from BambuStudio's own shipped BBL bundle (cloned from upstream, or read from a local checkout via --bambustudio-dir), pairing each Bambu catalog id with the Orca filament_id we already ship for that product where we ship one, else a freshly generated one. Nothing reads the map yet; later work uses it to translate ids at the Bambu printer boundary. --- resources/printers/bambu_filament_ids.json | 607 +++++++++++++++++++++ scripts/tests/test_filament_id.py | 133 +++++ scripts/update_bambu_filament_ids.py | 291 ++++++++++ 3 files changed, 1031 insertions(+) create mode 100644 resources/printers/bambu_filament_ids.json create mode 100644 scripts/update_bambu_filament_ids.py diff --git a/resources/printers/bambu_filament_ids.json b/resources/printers/bambu_filament_ids.json new file mode 100644 index 0000000000..b21946f1a3 --- /dev/null +++ b/resources/printers/bambu_filament_ids.json @@ -0,0 +1,607 @@ +{ + "bambustudio_commit": "66e405477", + "filaments": { + "OF0UJcb6": { + "bambu_id": "GFG60", + "name": "PolyLite PETG", + "type": "PETG", + "vendor": "Polymaker" + }, + "OF0wBGNx": { + "bambu_id": "GFB51", + "name": "Bambu ASA-CF", + "type": "ASA-CF", + "vendor": "Bambu Lab" + }, + "OF1UNk9P": { + "bambu_id": "GFP97", + "name": "Generic PP", + "type": "PP", + "vendor": "Generic" + }, + "OF2GCW1l": { + "bambu_id": "GFSNL08", + "name": "SUNLU PETG", + "type": "PETG", + "vendor": "SUNLU" + }, + "OF2VFe4J": { + "bambu_id": "GFN04", + "name": "Bambu PAHT-CF", + "type": "PA-CF", + "vendor": "Bambu Lab" + }, + "OF342jVN": { + "bambu_id": "GFA10", + "name": "Bambu PLA Tough+", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OF4RvVuU": { + "bambu_id": "GFT02", + "name": "Bambu PPS-CF", + "type": "PPS-CF", + "vendor": "Bambu Lab" + }, + "OF54B0S0": { + "bambu_id": "GFN06", + "name": "Bambu PPA-CF", + "type": "PPA-CF", + "vendor": "Bambu Lab" + }, + "OF5CgdDq": { + "bambu_id": "GFL00", + "name": "PolyLite PLA", + "type": "PLA", + "vendor": "Polymaker" + }, + "OF6rdQ6M": { + "bambu_id": "GFT98", + "name": "Generic PPS-CF", + "type": "PPS-CF", + "vendor": "Generic" + }, + "OF74KeQR": { + "bambu_id": "GFR98", + "name": "Generic PHA", + "type": "PHA", + "vendor": "Generic" + }, + "OF7lOgYF": { + "bambu_id": "GFG96", + "name": "Generic PETG HF", + "type": "PETG", + "vendor": "Generic" + }, + "OF8Tlg47": { + "bambu_id": "GFN96", + "name": "Generic PPA-GF", + "type": "PPA-GF", + "vendor": "Generic" + }, + "OF8tPByX": { + "bambu_id": "GFN97", + "name": "Generic PPA-CF", + "type": "PPA-CF", + "vendor": "Generic" + }, + "OF9OlTWH": { + "bambu_id": "GFA07", + "name": "Bambu PLA Marble", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFAnyRUI": { + "bambu_id": "GFS02", + "name": "Bambu Support For PLA", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFBSW57R": { + "bambu_id": "GFA11", + "name": "Bambu PLA Aero", + "type": "PLA-AERO", + "vendor": "Bambu Lab" + }, + "OFBw6eEG": { + "bambu_id": "GFL05", + "name": "Overture Matte PLA", + "type": "PLA", + "vendor": "Overture" + }, + "OFCD8qiU": { + "bambu_id": "GFR99", + "name": "Generic EVA", + "type": "EVA", + "vendor": "Generic" + }, + "OFDGigEI": { + "bambu_id": "GFA13", + "name": "Bambu PLA Dynamic", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFDSrzZ8": { + "bambu_id": "GFL99", + "name": "Generic PLA", + "type": "PLA", + "vendor": "Generic" + }, + "OFDvXujf": { + "bambu_id": "GFS99", + "name": "Generic PVA", + "type": "PVA", + "vendor": "Generic" + }, + "OFDxfPgH": { + "bambu_id": "GFA08", + "name": "Bambu PLA Sparkle", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEGNJD4": { + "bambu_id": "GFA05", + "name": "Bambu PLA Silk", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEkPBwx": { + "bambu_id": "GFA12", + "name": "Bambu PLA Glow", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEswT5W": { + "bambu_id": "GFA50", + "name": "Bambu PLA-CF", + "type": "PLA-CF", + "vendor": "Bambu Lab" + }, + "OFFNYwWR": { + "bambu_id": "GFN03", + "name": "Bambu PA-CF", + "type": "PA-CF", + "vendor": "Bambu Lab" + }, + "OFFbSnCD": { + "bambu_id": "GFA17", + "name": "Bambu PLA Translucent", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFFvzqcd": { + "bambu_id": "GFG00", + "name": "Bambu PETG Basic", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFHWSM21": { + "bambu_id": "GFL54", + "name": "Fiberon PET-CF", + "type": "PET-CF", + "vendor": "Polymaker" + }, + "OFHa48An": { + "bambu_id": "GFT01", + "name": "Bambu PET-CF", + "type": "PET-CF", + "vendor": "Bambu Lab" + }, + "OFHmPYRy": { + "bambu_id": "GFSNL04", + "name": "SUNLU PLA+ 2.0", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFIBbYO5": { + "bambu_id": "GFU02", + "name": "Bambu TPU for AMS", + "type": "TPU-AMS", + "vendor": "Bambu Lab" + }, + "OFIfnzxC": { + "bambu_id": "GFS05", + "name": "Bambu Support For PLA/PETG", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFKhMPeX": { + "bambu_id": "GFC00", + "name": "Bambu PC", + "type": "PC", + "vendor": "Bambu Lab" + }, + "OFLJ8S6I": { + "bambu_id": "GFSNL07", + "name": "SUNLU Wood PLA", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFLPAxz3": { + "bambu_id": "GFB98", + "name": "Generic ASA", + "type": "ASA", + "vendor": "Generic" + }, + "OFLakOUI": { + "bambu_id": "GFC99", + "name": "Generic PC", + "type": "PC", + "vendor": "Generic" + }, + "OFMTK0UC": { + "bambu_id": "GFS03", + "name": "Bambu Support For PA/PET", + "type": "PA", + "vendor": "Bambu Lab" + }, + "OFMUWNkp": { + "bambu_id": "GFSNL03", + "name": "SUNLU PLA+", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFMjtqTC": { + "bambu_id": "GFA16", + "name": "Bambu PLA Wood", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFNk8bxk": { + "bambu_id": "GFN08", + "name": "Bambu PA6-GF", + "type": "PA-GF", + "vendor": "Bambu Lab" + }, + "OFOvv91M": { + "bambu_id": "GFB60", + "name": "PolyLite ABS", + "type": "ABS", + "vendor": "Polymaker" + }, + "OFPklMI1": { + "bambu_id": "GFP99", + "name": "Generic PE", + "type": "PE", + "vendor": "Generic" + }, + "OFQ3e56w": { + "bambu_id": "GFA15", + "name": "Bambu PLA Galaxy", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFQHiNJs": { + "bambu_id": "GFS01", + "name": "Bambu Support G", + "type": "PA", + "vendor": "Bambu Lab" + }, + "OFQLcbps": { + "bambu_id": "GFN98", + "name": "Generic PA-CF", + "type": "PA-CF", + "vendor": "Generic" + }, + "OFS2tn6G": { + "bambu_id": "GFL53", + "name": "Fiberon PA612-CF", + "type": "PA", + "vendor": "Polymaker" + }, + "OFTHDCqA": { + "bambu_id": "GFA19", + "name": "Bambu PLA Pure", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFTRZ8Y4": { + "bambu_id": "GFG50", + "name": "Bambu PETG-CF", + "type": "PETG-CF", + "vendor": "Bambu Lab" + }, + "OFUanySo": { + "bambu_id": "GFA06", + "name": "Bambu PLA Silk+", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFVCkX5w": { + "bambu_id": "GFU01", + "name": "Bambu TPU 95A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFW29a9R": { + "bambu_id": "GFL01", + "name": "PolyTerra PLA", + "type": "PLA", + "vendor": "Polymaker" + }, + "OFWbdGsC": { + "bambu_id": "GFL98", + "name": "Generic PLA-CF", + "type": "PLA-CF", + "vendor": "Generic" + }, + "OFX0ycRQ": { + "bambu_id": "GFL52", + "name": "Fiberon PA12-CF", + "type": "PA-CF", + "vendor": "Polymaker" + }, + "OFXIbw5D": { + "bambu_id": "GFA01", + "name": "Bambu PLA Matte", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFXkm8q1": { + "bambu_id": "GFP96", + "name": "Generic PP-CF", + "type": "PP-CF", + "vendor": "Generic" + }, + "OFXzQ4yL": { + "bambu_id": "GFB02", + "name": "Bambu ASA-Aero", + "type": "ASA-AERO", + "vendor": "Bambu Lab" + }, + "OFY9muEs": { + "bambu_id": "GFB99", + "name": "Generic ABS", + "type": "ABS", + "vendor": "Generic" + }, + "OFYPdQJh": { + "bambu_id": "GFG99", + "name": "Generic PETG", + "type": "PETG", + "vendor": "Generic" + }, + "OFaQMgRH": { + "bambu_id": "GFA09", + "name": "Bambu PLA Tough", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFc3xdm9": { + "bambu_id": "GFL04", + "name": "Overture PLA", + "type": "PLA", + "vendor": "Overture" + }, + "OFcytyoA": { + "bambu_id": "GFL06", + "name": "Fiberon PETG-ESD", + "type": "PETG", + "vendor": "Polymaker" + }, + "OFd0Fv0k": { + "bambu_id": "GFP98", + "name": "Generic PE-CF", + "type": "PE-CF", + "vendor": "Generic" + }, + "OFdyfQvU": { + "bambu_id": "GFG03", + "name": "Bambu PETG Matte", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFesA6rF": { + "bambu_id": "GFL96", + "name": "Generic PLA Silk", + "type": "PLA", + "vendor": "Generic" + }, + "OFf6mfQO": { + "bambu_id": "GFS06", + "name": "Bambu Support for ABS", + "type": "ABS", + "vendor": "Bambu Lab" + }, + "OFfBpSRI": { + "bambu_id": "GFB01", + "name": "Bambu ASA", + "type": "ASA", + "vendor": "Bambu Lab" + }, + "OFg57Nmc": { + "bambu_id": "GFC01", + "name": "Bambu PC FR", + "type": "PC", + "vendor": "Bambu Lab" + }, + "OFg8ndtj": { + "bambu_id": "GFN99", + "name": "Generic PA", + "type": "PA", + "vendor": "Generic" + }, + "OFgbpcy9": { + "bambu_id": "GFU99", + "name": "Generic TPU", + "type": "TPU", + "vendor": "Generic" + }, + "OFhuaUQB": { + "bambu_id": "GFB00", + "name": "Bambu ABS", + "type": "ABS", + "vendor": "Bambu Lab" + }, + "OFk8t9mz": { + "bambu_id": "GFL55", + "name": "Fiberon PETG-rCF", + "type": "PETG-CF", + "vendor": "Polymaker" + }, + "OFkOviHk": { + "bambu_id": "GFL50", + "name": "Fiberon PA6-CF", + "type": "PA6-CF", + "vendor": "Polymaker" + }, + "OFknl9Iz": { + "bambu_id": "GFB50", + "name": "Bambu ABS-GF", + "type": "ABS-GF", + "vendor": "Bambu Lab" + }, + "OFlfuj2k": { + "bambu_id": "GFU04", + "name": "Bambu TPU 85A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFmN2lvw": { + "bambu_id": "GFU98", + "name": "Generic TPU for AMS", + "type": "TPU-AMS", + "vendor": "Generic" + }, + "OFmpMwxS": { + "bambu_id": "GFL95", + "name": "Generic PLA High Speed", + "type": "PLA", + "vendor": "Generic" + }, + "OFnfxTvi": { + "bambu_id": "GFA18", + "name": "Bambu PLA Lite", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFniMuTN": { + "bambu_id": "GFN05", + "name": "Bambu PA6-CF", + "type": "PA6-CF", + "vendor": "Bambu Lab" + }, + "OFo2UF2C": { + "bambu_id": "GFS97", + "name": "Generic BVOH", + "type": "BVOH", + "vendor": "Generic" + }, + "OFoYSJKi": { + "bambu_id": "GFG98", + "name": "Generic PETG-CF", + "type": "PETG-CF", + "vendor": "Generic" + }, + "OFoiVqVM": { + "bambu_id": "GFA00", + "name": "Bambu PLA Basic", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFovEIbw": { + "bambu_id": "GFG02", + "name": "Bambu PETG HF", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFpPGSKG": { + "bambu_id": "GFSNL05", + "name": "SUNLU Silk PLA+", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFpW4gdi": { + "bambu_id": "GFSNL02", + "name": "SUNLU PLA Matte", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFq9svOz": { + "bambu_id": "GFT97", + "name": "Generic PPS", + "type": "PPS", + "vendor": "Generic" + }, + "OFqINlYj": { + "bambu_id": "GFL03", + "name": "eSUN PLA+", + "type": "PLA", + "vendor": "eSUN" + }, + "OFrKLeE3": { + "bambu_id": "GFA02", + "name": "Bambu PLA Metal", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFsFon5l": { + "bambu_id": "GFS98", + "name": "Generic HIPS", + "type": "HIPS", + "vendor": "Generic" + }, + "OFsHSVZc": { + "bambu_id": "GFS00", + "name": "Bambu Support W", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFsijjtH": { + "bambu_id": "GFP95", + "name": "Generic PP-GF", + "type": "PP-GF", + "vendor": "Generic" + }, + "OFtkLO6q": { + "bambu_id": "GFU03", + "name": "Bambu TPU 90A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFu1evlr": { + "bambu_id": "GFG97", + "name": "Generic PCTG", + "type": "PCTG", + "vendor": "Generic" + }, + "OFvKUnLh": { + "bambu_id": "GFU00", + "name": "Bambu TPU 95A HF", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFvrXuV7": { + "bambu_id": "GFB61", + "name": "PolyLite ASA", + "type": "ASA", + "vendor": "Polymaker" + }, + "OFwPrlCM": { + "bambu_id": "GFG01", + "name": "Bambu PETG Translucent", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFwaYjL6": { + "bambu_id": "GFL51", + "name": "Fiberon PA6-GF", + "type": "PA-GF", + "vendor": "Polymaker" + }, + "OFxUwUeW": { + "bambu_id": "GFSNL06", + "name": "SUNLU PLA Marble", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFzyIxba": { + "bambu_id": "GFS04", + "name": "Bambu PVA", + "type": "PVA", + "vendor": "Bambu Lab" + } + }, + "generated": "2026-09-04", + "source": "https://github.com/bambulab/BambuStudio" +} diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index ef61992784..2ff0e42a7c 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -18,6 +18,7 @@ import uuid sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) import assign_filament_ids as afi # noqa: E402 +import update_bambu_filament_ids as ubfi # noqa: E402 REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") @@ -1081,5 +1082,137 @@ class TestReviewFixes(SyntheticTreeCase): self.assertIn(afi.generate_filament_id("OV", "PLA", "Orphan PLA"), out) +# --------------------------------------------------------------------------- +# scripts/update_bambu_filament_ids.py: the generated Bambu catalog id map +# --------------------------------------------------------------------------- + +class TestBambuMap(unittest.TestCase): + def _bs_tree(self, families): + # families: list of (family, bambu_id, vendor, type); builds a minimal BBL bundle + # with an @base per family carrying the id and one instantiated child. + t = SyntheticTree() + self.addCleanup(t.cleanup) + presets = [] + for family, bambu_id, vendor, ftype in families: + presets.append(preset(f"{family} @base", filament_id=bambu_id, + instantiation=False, filament_vendor=vendor, + filament_type=ftype)) + presets.append(preset(f"{family} @P1", inherits=f"{family} @base", + compatible_printers=["P1 0.4 nozzle"])) + t.add_vendor("BBL", presets) + filaments, errors = afi.load_vendor_filaments(t.profiles, "BBL") + self.assertEqual(errors, []) + return filaments + + def test_one_row_per_family(self): + rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")]), {}) + self.assertEqual(rows, {afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS"): + {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}}) + + def test_shared_bambu_id_is_an_error(self): + with self.assertRaises(SystemExit): + ubfi.derive_rows(self._bs_tree([("A", "GFX00", "V", "PLA"), ("B", "GFX00", "V", "PLA")]), {}) + + def test_reuses_the_id_we_ship_for_that_triple(self): + rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")]), + {("Bambu Lab", "ABS", "Bambu ABS"): "OFsalted1"}) + self.assertIn("OFsalted1", rows) + + @unittest.skipUnless(os.path.isdir("/Users/lijiang/codes/BambuStudio/resources/profiles"), "no local clone") + def test_local_clone_yields_the_catalog(self): + rows = ubfi.derive_rows(afi.load_vendor_filaments("/Users/lijiang/codes/BambuStudio/resources/profiles", "BBL")[0], {}) + self.assertEqual(len(rows), 100) + self.assertEqual(len({r["bambu_id"] for r in rows.values()}), 100) + + +class TestOrcaTriplesFromAnalysis(unittest.TestCase): + def _tree(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", [ + # Same triple declared under two different ids on purpose: mirrors + # a real, sanctioned case (Cubicon's xCeler line keeps its own id + # per printer instead of inheriting the family's @base id). + # Ambiguous, but must stay harmless unless something needs it. + preset("Ambig PLA @base", filament_id="OF111111", instantiation=False, + filament_vendor="V", filament_type="PLA"), + preset("Ambig PLA @P1", filament_id="OF222222", inherits="Ambig PLA @base", + compatible_printers=["P1"]), + # An unambiguous family elsewhere in the same tree. + preset("Needed PLA @base", filament_id="OF333333", instantiation=False, + filament_vendor="V2", filament_type="PLA"), + preset("Needed PLA @P1", inherits="Needed PLA @base", + compatible_printers=["P1"]), + ]) + return afi.analyze_tree(t.profiles) + + def test_ambiguity_outside_needed_triples_is_ignored(self): + analysis = self._tree() + result = ubfi.orca_triples_from_analysis(analysis, {("V2", "PLA", "Needed PLA")}) + self.assertEqual(result, {("V2", "PLA", "Needed PLA"): "OF333333"}) + + def test_ambiguity_inside_needed_triples_is_an_error(self): + analysis = self._tree() + with self.assertRaises(SystemExit): + ubfi.orca_triples_from_analysis(analysis, {("V", "PLA", "Ambig PLA")}) + + +class TestWriteMap(unittest.TestCase): + def test_format(self): + d = tempfile.mkdtemp(prefix="bambu_map_test_") + self.addCleanup(shutil.rmtree, d, ignore_errors=True) + # nested, not-yet-existing directory: write_map must create it + path = os.path.join(d, "out", "bambu_filament_ids.json") + rows = {"OFabc123": {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}} + + ubfi.write_map(path, rows, "66e405477", "2026-09-04") + + with open(path, "rb") as f: + raw = f.read() + self.assertTrue(raw.endswith(b"\n")) + self.assertNotIn(b"\r", raw) + text = raw.decode("utf-8") + self.assertEqual(json.loads(text), { + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": rows, + }) + # sorted top-level keys + self.assertLess(text.index('"bambustudio_commit"'), text.index('"filaments"')) + self.assertLess(text.index('"filaments"'), text.index('"generated"')) + self.assertLess(text.index('"generated"'), text.index('"source"')) + + +class TestDriftReport(unittest.TestCase): + def test_reports_both_directions(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("BBL", [ + preset("Match PLA @base", filament_id="GFX01", instantiation=False, + filament_vendor="V", filament_type="PLA"), + preset("Match PLA @P1", inherits="Match PLA @base", + compatible_printers=["P1"]), + preset("Orphan PLA @base", filament_id="GFX03", instantiation=False, + filament_vendor="V", filament_type="PLA"), + preset("Orphan PLA @P1", inherits="Orphan PLA @base", + compatible_printers=["P1"]), + ]) + rows = { + # matches the BBL bundle's "Match PLA" family: no drift either way + "OFmatch01": {"bambu_id": "GFX01", "vendor": "V", "type": "PLA", "name": "Match PLA"}, + # no family of this identity in the BBL bundle above + "OFghost01": {"bambu_id": "GFX02", "vendor": "V", "type": "PLA", "name": "Upstream Only PLA"}, + } + orca_analysis = afi.analyze_tree(t.profiles) + + lines = ubfi.drift_report(rows, orca_analysis) + + report = "\n".join(lines) + self.assertIn("Upstream Only PLA", report) + self.assertIn("Orca BBL families with no row: 1", report) + self.assertNotIn("Match PLA", report) # the matched family is not drift + + if __name__ == "__main__": unittest.main() diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py new file mode 100644 index 0000000000..744fcc0401 --- /dev/null +++ b/scripts/update_bambu_filament_ids.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python3 +""" +Generate resources/printers/bambu_filament_ids.json: the map from Orca's +content-addressed filament_id ("OF" + 6 base62 chars, see assign_filament_ids.py) +to Bambu Lab's own AMS/RFID catalog id ("GF..." etc.) for the subset of filament +products Bambu ships. + +The map is generated from BambuStudio's OWN shipped BBL bundle, never from +Orca's: Orca's BBL bundle is a fork of Bambu's, tuned and extended +independently, so it is not the source of truth for Bambu's catalog ids. +Nothing in OrcaSlicer consumes this map yet; it exists so a later change can +translate an id only where it crosses to or from a Bambu printer, without +hand-maintaining the correspondence. + +One row per BambuStudio filament PRODUCT: one commercial line = one +"@base"-declared filament_id, shared by every per-printer/per-nozzle +instantiation of it (BambuStudio follows the same one-product-one-id shape +Orca's own filament_id policy does). A row's key reuses whatever OF id Orca +already ships for that same (filament_vendor, filament_type, family) triple; +a triple Orca does not ship anywhere yet gets a freshly generated one. + +Map format: +{ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": { + "OFhuaUQB": {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"} + } +} + +Run from anywhere: python3 scripts/update_bambu_filament_ids.py + (default) shallow-clone BambuStudio's master branch (sparse: just + the BBL filament bundle) and regenerate the map + --bambustudio-dir DIR + read DIR (a BambuStudio resources/profiles checkout) + instead of cloning + --ref REF clone this BambuStudio ref instead of master + --output PATH write here instead of resources/printers/bambu_filament_ids.json + +After writing, an informational drift report is printed: BambuStudio families +Orca ships nothing with the same identity for, and a count of Orca's own BBL +families that matched no BambuStudio row. Neither blocks the write; both are +for a human to read. +""" + +import argparse +import json +import os +import shutil +import subprocess +import sys +import tempfile +import datetime + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from assign_filament_ids import ( # noqa: E402 + OFL, + OF_ID_RE, + PROFILES_DIR, + analyze_tree, + base_name, + generate_filament_id, + load_vendor_filaments, + print_error, + print_info, + print_success, + resolve_filament_id, + resolve_triple, +) + +SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__)) +BAMBU_MAP_PATH = os.path.normpath( + os.path.join(SCRIPTS_DIR, "..", "resources", "printers", "bambu_filament_ids.json")) + +BAMBUSTUDIO_REPO = "https://github.com/bambulab/BambuStudio" + + +# --------------------------------------------------------------------------- +# Row derivation +# --------------------------------------------------------------------------- + +def derive_rows(bs_filaments, orca_triples): + """orca_triples: {(vendor, type, family): orca_id} built from analyze_tree()["triples"].""" + by_family = {} # family -> (bambu_id, triple) + for rec in bs_filaments.values(): + if not rec["instantiation"]: + continue + bambu_id, _src, _entry = resolve_filament_id(rec["name"], bs_filaments, {}) + if not bambu_id: + continue + family = base_name(rec["name"]) + triple = resolve_triple(rec["name"], bs_filaments, {}) + prev = by_family.setdefault(family, (bambu_id, triple)) + if prev != (bambu_id, triple): + raise SystemExit(f"BambuStudio family {family!r} is not one product: {prev} vs {(bambu_id, triple)}") + rows, seen = {}, {} + for family, (bambu_id, triple) in sorted(by_family.items()): + if bambu_id in seen: + raise SystemExit(f"Bambu id {bambu_id} is shared by {seen[bambu_id]!r} and {family!r}") + seen[bambu_id] = family + orca_id = orca_triples.get(triple) or generate_filament_id(*triple) # reuse a salted id if we ship one + rows[orca_id] = {"bambu_id": bambu_id, "vendor": triple[0], "type": triple[1], "name": triple[2]} + return rows + + +def orca_triples_from_analysis(orca_analysis, needed_triples): + """{(vendor, type, family): orca_id}, inverted from analyze_tree()["triples"] + (id -> [[vendor, type, family], ...]) and restricted to `needed_triples` + (the triples BambuStudio's own bundle ships, i.e. the only ones derive_rows + will ever look up). + + Kept to ids matching the OF format: our own BBL bundle still declares + Bambu's GF ids today (analyze_tree already excludes those as BBL-island + declarations), but filtering here too means a future triple shipped under + a non-OF scheme can never key a map row, which must always be keyed by + the OF id the BBL bundle receives once it is re-minted onto the OF space. + + A needed triple owned by more than one OF id would make derive_rows's + reuse step a guess, so that is a hard error rather than a silent pick. + Restricting the scan to needed_triples matters for that check: elsewhere + in the tree one triple legitimately resolves two different ids on purpose + (e.g. Cubicon's xCeler line declares its own id per printer instead of + inheriting its family's, sanctioned in scripts/filament_id_snapshot.json) + and that pre-existing, Bambu-unrelated divergence must not block a map + that never reads it. + """ + needed_triples = set(needed_triples) + result = {} + for fid, triple_list in orca_analysis["triples"].items(): + if not OF_ID_RE.match(fid): + continue + for triple in triple_list: + triple = tuple(triple) + if triple not in needed_triples: + continue + owner = result.get(triple) + if owner and owner != fid: + raise SystemExit( + f"Orca triple {triple} resolves to more than one filament_id: " + f"{owner!r} and {fid!r}") + result[triple] = fid + return result + + +# --------------------------------------------------------------------------- +# Drift report (informational only) +# --------------------------------------------------------------------------- + +def drift_report(rows, orca_analysis): + """Two triple-identity comparisons between the map just derived and Orca's + own BBL bundle (never id-based: the two bundles assign filament_id + independently, so only the (vendor, type, name) identity is comparable). + + Returns print-ready lines: one per BambuStudio row triple with no + same-triple family in Orca's BBL bundle (upstream ships it, we ship + nothing with that identity there — sometimes a genuinely missing product, + sometimes a renamed one), then a count of Orca's own BBL families that + matched no BambuStudio row (Orca-only products, e.g. a name-drifted + duplicate of one already counted in the first list). + """ + row_triples = {(r["vendor"], r["type"], r["name"]) for r in rows.values()} + + bbl_filaments = orca_analysis["vendors"].get("BBL", {}) + ofl_filaments = orca_analysis["vendors"].get(OFL, {}) + orca_families = {} + for rec in bbl_filaments.values(): + if not rec["instantiation"]: + continue + triple = resolve_triple(rec["name"], bbl_filaments, ofl_filaments) + orca_families.setdefault(base_name(rec["name"]), triple) + + lines = [] + for triple in sorted(row_triples - set(orca_families.values())): + lines.append(f'upstream ships {triple[2]!r} ({triple[0]}/{triple[1]}), ' + "we ship nothing with that identity") + orca_only = [family for family, triple in orca_families.items() if triple not in row_triples] + lines.append(f"Orca BBL families with no row: {len(orca_only)} Orca-only product(s)") + return lines + + +# --------------------------------------------------------------------------- +# Map IO +# --------------------------------------------------------------------------- + +def write_map(path, rows, commit, date): + """Write the map: sorted keys, indent 2, LF, trailing newline.""" + payload = { + "source": BAMBUSTUDIO_REPO, + "bambustudio_commit": commit, + "generated": date, + "filaments": rows, + } + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(payload, f, indent=2, ensure_ascii=False, sort_keys=True) + f.write("\n") + + +# --------------------------------------------------------------------------- +# BambuStudio fetch +# --------------------------------------------------------------------------- + +def run(command, cwd=None): + """Run a command, streaming its output; raise SystemExit on failure.""" + print("+ " + " ".join(command)) + try: + subprocess.run(command, cwd=cwd, check=True) + except subprocess.CalledProcessError as e: + raise SystemExit(f"command failed ({e.returncode}): {' '.join(command)}") from e + + +def run_out(command, cwd=None): + """Run a command and return its stripped stdout; raise SystemExit on failure.""" + try: + result = subprocess.run(command, cwd=cwd, check=True, capture_output=True, text=True) + except subprocess.CalledProcessError as e: + raise SystemExit( + f"command failed ({e.returncode}): {' '.join(command)}\n{e.stderr}") from e + return result.stdout.strip() + + +def fetch_bambustudio(ref, workdir): + run(["git", "clone", "--depth=1", "--filter=blob:none", "--sparse", "--branch", ref, + BAMBUSTUDIO_REPO + ".git", workdir]) + run(["git", "-C", workdir, "sparse-checkout", "set", "--no-cone", + "resources/profiles/BBL.json", "resources/profiles/BBL/filament"]) + return os.path.join(workdir, "resources", "profiles"), run_out(["git", "-C", workdir, "rev-parse", "--short", "HEAD"]) + + +def local_dir_commit(dir_path): + """git rev-parse --short HEAD of dir_path, or "local" when it is not a repo.""" + result = subprocess.run(["git", "-C", dir_path, "rev-parse", "--short", "HEAD"], + capture_output=True, text=True) + return result.stdout.strip() if result.returncode == 0 else "local" + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +def main(argv=None): + parser = argparse.ArgumentParser( + description="Regenerate resources/printers/bambu_filament_ids.json from " + "BambuStudio's shipped BBL bundle.") + source = parser.add_mutually_exclusive_group() + source.add_argument("--bambustudio-dir", metavar="DIR", + help="a BambuStudio resources/profiles directory to read " + "instead of cloning") + source.add_argument("--ref", default="master", + help='BambuStudio git ref to shallow-clone when ' + '--bambustudio-dir is not given (default: "master")') + parser.add_argument("--output", default=BAMBU_MAP_PATH, + help="output path (default: resources/printers/bambu_filament_ids.json)") + args = parser.parse_args(argv) + + workdir = None + if args.bambustudio_dir: + profiles_dir = args.bambustudio_dir + commit = local_dir_commit(profiles_dir) + else: + workdir = tempfile.mkdtemp(prefix="bambustudio_") + profiles_dir, commit = fetch_bambustudio(args.ref, workdir) + + try: + bs_filaments, errors = load_vendor_filaments(profiles_dir, "BBL") + if errors: + for e in errors: + print_error(e) + raise SystemExit("unreadable BambuStudio filament profile(s)") + + orca_analysis = analyze_tree(PROFILES_DIR) + needed_triples = {resolve_triple(rec["name"], bs_filaments, {}) + for rec in bs_filaments.values() if rec["instantiation"]} + orca_triples = orca_triples_from_analysis(orca_analysis, needed_triples) + + rows = derive_rows(bs_filaments, orca_triples) + write_map(args.output, rows, commit, datetime.date.today().isoformat()) + print_success(f"wrote {len(rows)} row(s) to {args.output} (BambuStudio @ {commit})") + + for line in drift_report(rows, orca_analysis): + print_info(line) + finally: + if workdir: + shutil.rmtree(workdir, ignore_errors=True) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) From 40cc3340b1ccbc94a3aca9d7146641efd3cce021 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 14:25:00 +0800 Subject: [PATCH 099/208] Content-address Bambu filament ids and check profiles against the catalog map Every vendor's filament_id declarations, Bambu's own bundle included, are now minted and checked the same way: the GF* catalog space is reserved but ownerless, format is validated unconditionally with no snapshot or BBL exemption, and both --remint and the default assign pass treat a non-OF declaration as one needing a fresh mint (so a future BambuStudio sync self-heals instead of needing a manual pass). A new check validates resources/printers/bambu_filament_ids.json against the tree it describes: that it parses, carries its header, keys only OF ids, maps each Bambu id once, and agrees with the tree on every product it shares. The redundant BBL/OFL carve-out in the profile checker's length check is dropped too, so it runs the same way for every vendor. The BBL bundle itself hasn't been touched yet and still declares its old GF ids, so TestRealTree.test_shipped_snapshot_matches_tree is expected to fail here (209 declarations flagged) until the next commit re-mints the bundle onto OF ids. --- scripts/assign_filament_ids.py | 193 ++++++++++++++++++++-------- scripts/orca_extra_profile_check.py | 17 +-- scripts/tests/test_filament_id.py | 179 +++++++++++++++++++++----- 3 files changed, 297 insertions(+), 92 deletions(-) diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 46a138253c..cc3adeab4a 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -24,7 +24,10 @@ Policy (companion to assign_vendor_setting_ids.py; see docs/HLSD/filament_id.md) Identity changes (a family rename, a filament_vendor/filament_type fix) change the id BY DESIGN. * Reserved id spaces that are never minted into or altered: - - GF* Bambu AMS/RFID catalog (vendor BBL untouchable) + - GF* Bambu AMS/RFID catalog: frozen, no preset of any + vendor (including BBL) may declare one; the + generated resources/printers/bambu_filament_ids.json + carries the correspondence instead - QD_* Qidi device protocol: the box composes these ids at runtime, they are not preset ids, and no preset may declare one @@ -43,8 +46,9 @@ OFL it stays in OFL; a vendor chain that dead-ends id-less retries its direct parent in the OFL map. filament_vendor / filament_type resolve the same way. 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 + (default) mint + insert ids for id-less families, mint + replace + non-OF-format declarations; idempotent, never rewrites a + valid OF-format id; a no-op once every family has one --mint "Vendor/Type/Family" print the id that triple would mint; touches nothing --update-snapshot regenerate the snapshot from the tree @@ -75,6 +79,10 @@ 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") +# Same path update_bambu_filament_ids.BAMBU_MAP_PATH computes; kept as a sibling +# constant (not imported) because that module imports FROM this one already. +BAMBU_MAP_PATH = os.path.normpath( + os.path.join(SCRIPTS_DIR, "..", "resources", "printers", "bambu_filament_ids.json")) OFL = "OrcaFilamentLibrary" @@ -89,6 +97,7 @@ BASE_NAME_RE = re.compile(r"\s?@.*$") MAX_CHECK_SALT = 8 UPDATE_HINT = 'run "python scripts/assign_filament_ids.py --update-snapshot" and commit the diff for maintainer review' +BAMBU_MAP_HINT = 'regenerate the map with "python scripts/update_bambu_filament_ids.py" and commit the diff for maintainer review' # Same output helpers/format as orca_extra_profile_check.py (not imported from @@ -304,12 +313,6 @@ def resolve_triple(name, filaments, ofl_filaments): base_name(name)) -def is_island_declaration(vendor, fid): - """Declarations frozen outside the OF mint domain: all of BBL (the QD_* - island was dissolved by plan v4 — Qidi declarations mint like any other).""" - return vendor == "BBL" - - def analyze_tree(profiles_dir): """Load every vendor bundle and derive the full filament_id state. @@ -351,8 +354,8 @@ def analyze_tree(profiles_dir): overrides = [] # (vendor, name, declared, inherited, file) missing_effective = [] # (vendor, name, file) instantiated presets resolving no id alias_candidates = [] # (vendor, rec, ofl_entry, own_key) presets riding an OFL family - triples = {} # fid -> set of triples of its non-island declarers - declarer_triples = [] # (vendor, rec, fid, triple) per non-island declarer + triples = {} # fid -> set of triples of its declarers + declarer_triples = [] # (vendor, rec, fid, triple) per declarer family_triples = {} # (vendor, family) -> {triple: [declarer names]} for vendor, filaments in vendors.items(): @@ -363,14 +366,13 @@ def analyze_tree(profiles_dir): occurring.add(fid) declared_ids.setdefault(vendor, set()).add(fid) ids.setdefault(fid, set()) - if not is_island_declaration(vendor, fid): - triple = resolve_triple(rec["name"], filaments, ofl_filaments) - rec["triple"] = triple - declarer_triples.append((vendor, rec, fid, triple)) - triples.setdefault(fid, set()).add(triple) - family_triples.setdefault( - (vendor, base_name(rec["name"])), {}).setdefault( - triple, []).append(rec["name"]) + triple = resolve_triple(rec["name"], filaments, ofl_filaments) + rec["triple"] = triple + declarer_triples.append((vendor, rec, fid, triple)) + triples.setdefault(fid, set()).add(triple) + family_triples.setdefault( + (vendor, base_name(rec["name"])), {}).setdefault( + triple, []).append(rec["name"]) if rec.get("inherits"): inherited, _src, skip_entry = resolve_filament_id( rec["name"], filaments, ofl_filaments, skip_own=True) @@ -495,7 +497,7 @@ def write_snapshot(path, obj): def reserved_space_owner(fid): """(is_reserved, owner_vendor or None) for the frozen id spaces.""" if fid.startswith("GF"): - return True, "BBL" + return True, None # Bambu AMS/RFID catalog: frozen, no vendor (not even BBL) may declare it if fid.startswith("QD_"): return True, None # dissolved Qidi device-protocol space: NO vendor may declare it if USER_CUSTOM_ID_RE.match(fid) or fid == "null": @@ -507,6 +509,8 @@ def reserved_space_desc(fid, owner): """Human description of a reserved space for error messages.""" if owner: return f"owned by {owner}" + if fid.startswith("GF"): + return "Bambu AMS/RFID catalog; frozen, no preset may declare it" if fid.startswith("QD_"): return "Qidi device protocol; composed by the device, never a preset id" return "reserved for user-custom presets" @@ -516,30 +520,35 @@ def reserved_space_desc(fid, owner): # Checks (imported and called tree-wide by orca_extra_profile_check.py) # --------------------------------------------------------------------------- -def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): +def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, + map_path=BAMBU_MAP_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. + 1. Format: every id occurring in the tree (declared or effective) must + match ^OF[0-9A-Za-z]{6}$. No exceptions: not the snapshot, not BBL. 2. Snapshot equality, both directions: the tree-derived id->families multimap AND the id->triples map of the declarers must equal the snapshot exactly (the snapshot diff is the maintainer gate). - 3. Mint conformance: a non-island OF-format declaration must equal the mint - of the declarer's triple or a salted iteration, unless that exact - (id, triple) pair is grandfathered in the snapshot. + 3. Mint conformance: an OF-format declaration must equal the mint of the + declarer's triple or a salted iteration, unless that exact (id, triple) + pair is grandfathered in the snapshot. 4. Alias hygiene: a vendor preset riding an OFL family must keep the OFL base name, claim printers via non-empty compatible_printers, and declare no filament_id key of its own. - 5. Reserved namespaces (GF* for BBL; QD_*/P-hex/"null" for nobody) must not - be claimed by other vendors, except claims grandfathered in the snapshot. + 5. Reserved namespaces (GF*/QD_*/P-hex/"null", all ownerless) must not be + claimed by any vendor, except claims grandfathered in the snapshot. 6. 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++). - 7. Triple integrity: (a) every non-island declarer resolves non-empty - filament_vendor and filament_type (hard error, no grandfathering); - (b) declarers of one (bundle, family) resolve identical triples, unless - grandfathered in snapshot triple_exceptions; cross-bundle divergence on - the same family name is a warning only. + 7. Triple integrity: (a) every declarer resolves non-empty filament_vendor + and filament_type (hard error, no grandfathering); (b) declarers of one + (bundle, family) resolve identical triples, unless grandfathered in + snapshot triple_exceptions; cross-bundle divergence on the same family + name is a warning only. + 8. Bambu catalog map: resources/printers/bambu_filament_ids.json must parse, + carry source/bambustudio_commit/generated, key only OF-format ids, map + each Bambu id at most once, and for every row whose key the tree claims, + the tree's triple for that id must equal the row's (vendor, type, name). """ _utf8_console() errors = 0 @@ -558,14 +567,12 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): # -- 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": + if OF_ID_RE.match(fid): 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)') + f'filament_id "{fid}" ({vendor}) is not a minted "OF" id; new ' + f'family ids must come from "python scripts/assign_filament_ids.py" ' + f'(see --mint)') errors += 1 # -- 2. snapshot equality (both directions) ----------------------------- @@ -719,6 +726,43 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): f"({detail}); bundles of one product converge on one id only once " f"their triples agree") + # -- 8. Bambu catalog map -------------------------------------------------- + try: + bambu_map = load_json(map_path) + except (OSError, ValueError) as e: + print_error(f"Bambu catalog map {map_path} does not parse ({e}); {BAMBU_MAP_HINT}") + errors += 1 + else: + for key in ("source", "bambustudio_commit", "generated"): + if not bambu_map.get(key): + print_error(f'Bambu catalog map {map_path} is missing "{key}"; {BAMBU_MAP_HINT}') + errors += 1 + rows = bambu_map.get("filaments", {}) + bambu_id_owners = {} + for fid, row in sorted(rows.items()): + if not OF_ID_RE.match(fid): + print_error(f'Bambu catalog map key "{fid}" is not a minted "OF" id; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + bambu_id = row.get("bambu_id") + if bambu_id in bambu_id_owners: + print_error( + f'Bambu catalog map: Bambu id "{bambu_id}" is mapped by both ' + f'"{bambu_id_owners[bambu_id]}" and "{fid}"; {BAMBU_MAP_HINT}') + errors += 1 + else: + bambu_id_owners[bambu_id] = fid + claimed = tree_triples.get(fid) + if not claimed: + continue # a product BambuStudio ships that the tree does not (yet) + row_triple = [row.get("vendor", ""), row.get("type", ""), row.get("name", "")] + if row_triple not in claimed: + print_error( + f'Bambu catalog map row "{fid}" claims triple "{"/".join(row_triple)}" ' + f'but the tree declares "{"; ".join("/".join(t) for t in claimed)}" for ' + f"that id; {BAMBU_MAP_HINT}") + errors += 1 + return errors @@ -897,13 +941,25 @@ def remove_filament_id(path, old_id): # --------------------------------------------------------------------------- def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): - """Mint + insert ids for id-less families. Never rewrites a valid existing id. + """Mint + insert ids for id-less families; mint + replace non-OF-format + declarations. Never rewrites a valid (OF-format) existing id. A family = (vendor, base name) group over instantiated filaments with no effective id. The minted id is a pure function of the family's triple — (filament_vendor, filament_type) resolved on the root(s), family name — and 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. + + A declaration whose value is not OF-format (e.g. a vendor bundle synced + from an upstream source that ships its own catalog ids, such as BBL's GF*) + is treated the same as a missing family: a fresh id is minted for the + declarer's triple and the value is replaced in place (declarers that share + one triple across several per-printer roots converge on the same id, same + as the multi-root families above). This is what makes a future BBL sync + self-healing: upstream files arrive with GF ids, this pass replaces them, + and the generated Bambu catalog map (keyed by the ids this mints) already + knows the resulting rows. + Returns (files_changed, errors). """ analysis = analyze_tree(profiles_dir) @@ -923,9 +979,17 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): 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)") + # Declarations whose value is not OF-format: treated as missing too (see + # docstring). Grouped by triple, not by (vendor, family), so declarers + # that legitimately share one triple across several files converge on one + # freshly minted id instead of each getting their own. + non_of_declarers = [ + (vendor, rec, fid, triple) for vendor, rec, fid, triple in analysis["declarer_triples"] + if not OF_ID_RE.match(fid)] + + if not families and not non_of_declarers: + print_success("every instantiated filament already resolves an OF-format " + "filament_id; nothing to do (0 files changed)") return 0, errors # Ids already spoken for: the whole tree (declared or effective) + snapshot. @@ -998,7 +1062,34 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): files_changed += 1 print_info(f'family "{vendor}/{family}": filament_id "{new_id}" -> {root["file"]}') + # Non-OF-format declarations: mint once per triple, rewrite every declarer + # that shares it (see docstring). + declarations_reminted = 0 + assigned = {} # triple -> id chosen this run + for vendor, rec, fid, triple in sorted(non_of_declarers, key=lambda x: (x[0], x[1]["file"])): + fvendor, ftype, family = triple + if not fvendor or not ftype: + missing = " and ".join( + k for k, v in (("filament_vendor", fvendor), + ("filament_type", ftype)) if not v) + print_error( + f'cannot re-mint "{rec["file"]}" (non-OF filament_id "{fid}"): resolves ' + f'empty {missing}; the mint key needs both (generic materials use ' + f'filament_vendor "Generic")') + errors += 1 + continue + if triple not in assigned: + assigned[triple] = mint_filament_id(fvendor, ftype, family, taken) + taken.add(assigned[triple]) + new_id = assigned[triple] + rewrite_filament_id(rec["path"], fid, new_id) + files_changed += 1 + declarations_reminted += 1 + print_info(f'family "{vendor}/{family}": non-OF filament_id "{fid}" -> "{new_id}" ' + f'({rec["file"]})') + print_info(f"families minted : {families_minted}") + print_info(f"non-OF reminted : {declarations_reminted}") print_info(f"files changed : {files_changed}") if files_changed: print_warning(f"now {UPDATE_HINT}") @@ -1010,9 +1101,12 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): # --------------------------------------------------------------------------- def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): - """Re-derive every non-island declared id in the given vendors from its - triple; rewrite mismatching declarations in place (byte-preserving). Never - touches the snapshot — run --update-snapshot afterwards and review the diff. + """Re-derive every declared id in the given vendors from its triple; + rewrite mismatching declarations in place (byte-preserving). Never touches + the snapshot — run --update-snapshot afterwards and review the diff. + Accepts BBL like any other vendor: the GF* catalog is reserved and + ownerless, so BBL's own declarations mint OF ids the same as everyone + else's. A declaration already equal to ANY salt iteration of its own triple is mint-conformant (check 3) and left alone — deliberate salt splits (distinct @@ -1028,9 +1122,6 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): for msg in analysis["read_errors"]: print_error(msg) errors += 1 - if "BBL" in vendor_list: - print_error("--remint BBL is forbidden (the GF* catalog is frozen)") - return 0, errors + 1 unknown = sorted(set(vendor_list) - set(analysis["vendors"])) if unknown: for v in unknown: @@ -1067,8 +1158,6 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): key=lambda r: r["file"]) for rec in recs: fid = rec["filament_id"] - if is_island_declaration(vendor, fid): - continue scanned += 1 # Any salt iteration of the declarer's own triple is already # mint-conformant (check 3) — leave it. This keeps deliberate salt @@ -1117,7 +1206,7 @@ def drop_redundant_ids(vendor, profiles_dir=PROFILES_DIR): dropped = 0 for rec in sorted(vendor_map.values(), key=lambda r: r["file"]): fid = rec.get("filament_id") - if not fid or is_island_declaration(vendor, fid) or not rec.get("inherits"): + if not fid or not rec.get("inherits"): continue resolved, _src, entry = resolve_filament_id( rec["name"], vendor_map, ofl_map, skip_own=True) diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index 0bca29a985..62bd8c2916 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -290,19 +290,14 @@ def check_name_consistency(profiles_dir, vendor_name): return error_count, 0 -def check_filament_id(vendor, vendor_folder): +def check_filament_id(vendor_folder): """ - Make sure filament_id is not longer than 8 characters, otherwise AMS won't work properly + 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. + Runs tree-wide, every vendor alike: check_filament_ids (assign_filament_ids.py) + already requires every id in the tree to match the fixed-length "OF" format, + so this is a redundant belt-and-suspenders check, not a substitute for it. """ - if vendor not in ('BBL', 'OrcaFilamentLibrary'): - return 0 - error = 0 vendor_path = Path(vendor_folder) if not vendor_path.exists(): @@ -602,7 +597,7 @@ def main(): errors_found += check_vector_type_keys(profiles_dir, vendor_name) - errors_found += check_filament_id(vendor_name, vendor_path / "filament") + errors_found += check_filament_id(vendor_path / "filament") checked_vendor_count += 1 if args.vendor: diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 2ff0e42a7c..3d668d4fc3 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -118,10 +118,11 @@ class SyntheticTree: allow_shared_catalog=allow_shared_catalog) return rc, buf.getvalue() - def check(self): + def check(self, map_path=None): buf = io.StringIO() + kwargs = {} if map_path is None else {"map_path": map_path} with contextlib.redirect_stdout(buf): - errors = afi.check_filament_ids(self.profiles, self.snapshot) + errors = afi.check_filament_ids(self.profiles, self.snapshot, **kwargs) return errors, buf.getvalue() def assign(self): @@ -142,17 +143,24 @@ class SyntheticTree: dropped, errors = afi.drop_redundant_ids(vendor, self.profiles) return dropped, errors, buf.getvalue() -def make_clean_tree(): - """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic.""" +def make_clean_tree(apla_id="AX01", generic_id="OGFL99"): + """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic. + + apla_id/generic_id default to arbitrary non-OF placeholders (grandfathered + into the snapshot below) since most tests only need "already assigned, + don't touch". TestAssign passes real OF-format ids instead: assign_missing_ids + now treats a non-OF declaration as missing and remints it, so a non-OF + baseline would no longer be a no-op there. + """ t = SyntheticTree() t.add_vendor(OFL, [ - preset("fdm_pla", filament_id="OGFL99", instantiation=False, + preset("fdm_pla", filament_id=generic_id, instantiation=False, filament_vendor="Generic", filament_type="PLA"), preset("Generic PLA @System", inherits="fdm_pla", compatible_printers=[]), ]) t.add_vendor("VendorA", [ - preset("APLA @base", filament_id="AX01", instantiation=False, + preset("APLA @base", filament_id=apla_id, instantiation=False, filament_vendor="AVendor", filament_type="PLA"), preset("APLA @P1", inherits="APLA @base", compatible_printers=["P1 0.4 nozzle"]), @@ -171,6 +179,21 @@ class SyntheticTreeCase(unittest.TestCase): self.addCleanup(self.t.cleanup) +class OfCleanTreeCase(unittest.TestCase): + """Like SyntheticTreeCase, but the baseline family/generic already carry + real OF-format ids (check 1 now rejects "AX01"/"OGFL99" unconditionally, + with no snapshot exemption), so an otherwise-untouched tree still passes + check_filament_ids. Tests that specifically need a non-OF baseline to + remint or drop (TestRemint, TestDropRedundantIds, TestUpdateSnapshot) keep + using SyntheticTreeCase instead. + """ + def setUp(self): + self.t = make_clean_tree( + apla_id=afi.generate_filament_id("AVendor", "PLA", "APLA"), + generic_id=afi.generate_filament_id("Generic", "PLA", "fdm_pla")) + self.addCleanup(self.t.cleanup) + + # --------------------------------------------------------------------------- # mint # --------------------------------------------------------------------------- @@ -376,12 +399,13 @@ class TestTripleResolution(unittest.TestCase): # --------------------------------------------------------------------------- -# reserved namespaces / islands +# reserved namespaces # --------------------------------------------------------------------------- class TestReservedSpaces(unittest.TestCase): def test_owners(self): - self.assertEqual(afi.reserved_space_owner("GFL99"), (True, "BBL")) + # Bambu AMS/RFID catalog: reserved, but no vendor (not even BBL) may declare it + self.assertEqual(afi.reserved_space_owner("GFL99"), (True, None)) # Qidi device protocol: reserved, but no vendor may declare it self.assertEqual(afi.reserved_space_owner("QD_X4_PLA"), (True, None)) self.assertEqual(afi.reserved_space_owner("P1234abc"), (True, None)) @@ -390,20 +414,15 @@ class TestReservedSpaces(unittest.TestCase): self.assertEqual(afi.reserved_space_owner("OF5CgdDq"), (False, None)) self.assertEqual(afi.reserved_space_owner("P1234abcd"), (False, None)) # 8 hex chars: not the user space - def test_island_declarations(self): - self.assertTrue(afi.is_island_declaration("BBL", "GFL99")) - self.assertTrue(afi.is_island_declaration("BBL", "OF5CgdDq")) - # Qidi presets mint like any other vendor's: - self.assertFalse(afi.is_island_declaration("Qidi", "QD_X4_PLA")) - self.assertFalse(afi.is_island_declaration("Qidi", "OF5CgdDq")) - self.assertFalse(afi.is_island_declaration("VendorA", "GFL99")) + def test_gf_is_reserved_and_ownerless(self): + self.assertEqual(afi.reserved_space_owner("GFA00"), (True, None)) # --------------------------------------------------------------------------- # checks on synthetic trees # --------------------------------------------------------------------------- -class TestChecks(SyntheticTreeCase): +class TestChecks(OfCleanTreeCase): def test_clean_tree_is_silent(self): errors, out = self.t.check() self.assertEqual(errors, 0, out) @@ -418,7 +437,7 @@ class TestChecks(SyntheticTreeCase): compatible_printers=["P1"])) errors, out = self.t.check() self.assertGreater(errors, 0) - self.assertIn("neither grandfathered in the snapshot", out) + self.assertIn('is not a minted "OF" id', out) self.assertIn("BOGUS_9", out) def test_check2_new_claim_needs_snapshot_update(self): @@ -437,7 +456,8 @@ class TestChecks(SyntheticTreeCase): self.assertIn('"VendorA/APLA"', out) def test_check2_triple_change_needs_snapshot_update(self): - self.t.write_preset("VendorA", preset("APLA @base", filament_id="AX01", + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("APLA @base", filament_id=apla_id, instantiation=False, filament_vendor="AVendor", filament_type="PETG"), @@ -542,7 +562,7 @@ class TestChecks(SyntheticTreeCase): self.assertEqual(errors, 0, out) def test_check5_reserved_namespace_claims(self): - for fid, marker in [("GFX99", "owned by BBL"), + for fid, marker in [("GFX99", "Bambu AMS/RFID catalog"), ("QD_X_PLA", "composed by the device"), ("P1a2b3c4", "user-custom"), ("null", "user-custom")]: @@ -560,7 +580,10 @@ class TestChecks(SyntheticTreeCase): self.assertIn(marker, out) def test_check6a_instantiated_preset_with_own_key(self): - self.t.write_preset("VendorA", preset("APLA @P1", filament_id="AX01", + # Same value the child would already resolve through inherits: this + # isolates check 6a (own key present) from check 6b (value drift). + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("APLA @P1", filament_id=apla_id, inherits="APLA @base", compatible_printers=["P1 0.4 nozzle"]), register=False) @@ -569,13 +592,16 @@ class TestChecks(SyntheticTreeCase): self.assertIn("declares its own filament_id key", out) def test_check6b_declared_vs_inherited_drift(self): - self.t.write_preset("VendorA", preset("APLA @P1", filament_id="AX02", + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + drifted = afi.generate_filament_id("AVendor", "PLA", "APLA", salt=1) + self.t.write_preset("VendorA", preset("APLA @P1", filament_id=drifted, 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) + self.assertIn(f'declares filament_id "{drifted}" but its inherits chain resolves ' + f'"{apla_id}"', out) def test_check6c_unresolvable_instantiated_filament(self): self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) @@ -591,7 +617,7 @@ class TestChecks(SyntheticTreeCase): self.assertIn("snapshot not found", out) -class TestCheck7(SyntheticTreeCase): +class TestCheck7(OfCleanTreeCase): def test_7a_empty_vendor_is_hard_error(self): fid = afi.generate_filament_id("", "PLA", "NVPLA") self.t.write_preset("VendorA", preset("NVPLA @base", filament_id=fid, @@ -650,6 +676,43 @@ class TestCheck7(SyntheticTreeCase): self.assertIn('"APLA"', out) +class TestCheck8(OfCleanTreeCase): + def _write_map(self, rows): + path = os.path.join(self.t.dir, "bambu_filament_ids.json") + ubfi.write_map(path, rows, "testcommit", "2026-09-04") + return path + + def test_row_triple_must_match_tree(self): + fid = afi.generate_filament_id("V", "PLA", "Foo") + self.t.write_preset("VendorA", preset("Foo @base", filament_id=fid, + instantiation=False, + filament_vendor="V", filament_type="PLA")) + self.t.write_preset("VendorA", preset("Foo @P1", inherits="Foo @base", + compatible_printers=["P1"])) + map_path = self._write_map( + {fid: {"bambu_id": "GFZ00", "vendor": "V", "type": "PLA", "name": "Bar"}}) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("regenerate the map", out) + + def test_duplicate_bambu_id_is_an_error(self): + map_path = self._write_map({ + "OFaaaaaa": {"bambu_id": "GFZ00", "vendor": "V", "type": "PLA", "name": "Foo"}, + "OFbbbbbb": {"bambu_id": "GFZ00", "vendor": "V", "type": "PETG", "name": "Bar"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("GFZ00", out) + + def test_row_for_unshipped_product_is_fine(self): + map_path = self._write_map({ + "OFcccccc": {"bambu_id": "GFZ99", "vendor": "Nobody", "type": "PLA", + "name": "Ships Nothing"}, + }) + errors, out = self.t.check(map_path) + self.assertEqual(errors, 0, out) + + # --------------------------------------------------------------------------- # --update-snapshot # --------------------------------------------------------------------------- @@ -698,7 +761,7 @@ class TestUpdateSnapshot(SyntheticTreeCase): # default run: mint + insert # --------------------------------------------------------------------------- -class TestAssign(SyntheticTreeCase): +class TestAssign(OfCleanTreeCase): def test_noop_on_fully_idded_tree(self): changed, errors, out = self.t.assign() self.assertEqual((changed, errors), (0, 0)) @@ -771,6 +834,56 @@ class TestAssign(SyntheticTreeCase): self.assertGreater(errors, 0) self.assertIn("shared with famil", out) + def test_non_of_declaration_is_treated_as_missing(self): + # A declaration that isn't OF-format (e.g. a vendor bundle synced from + # an upstream catalog, like BBL's GF ids) is reminted like a missing + # family, not left alone. + self.t.write_preset("VendorA", preset("Synced PLA @base", filament_id="GFZZ00", + instantiation=False, + filament_vendor="ZV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("Synced PLA @P1", + inherits="Synced PLA @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + path = self.t.preset_path("VendorA", "Synced PLA @base") + root = load_json_file(path) + want = afi.generate_filament_id("ZV", "PLA", "Synced PLA") + self.assertEqual(root["filament_id"], want) + # the value was replaced in place, not appended as a second key + raw = open(path, encoding="utf-8").read() + self.assertEqual(raw.count('"filament_id"'), 1) + # idempotent: the id is OF-format now, so a second run is a no-op + changed, errors, _out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + + def test_non_of_multi_root_family_converges_on_one_id(self): + # Two per-printer roots of one product (same triple), both carrying + # the SAME non-OF id — the shape a synced vendor bundle ships (e.g. + # BambuStudio's own per-printer @base files). They must converge on + # one freshly minted id, not split into two. + self.t.write_preset("VendorA", preset("Synced ABS @P1base", filament_id="GFSYNC0", + instantiation=False, + filament_vendor="ZV", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Synced ABS @P2base", filament_id="GFSYNC0", + instantiation=False, + filament_vendor="ZV", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Synced ABS @P1", + inherits="Synced ABS @P1base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Synced ABS @P2", + inherits="Synced ABS @P2base", + compatible_printers=["P2"])) + changed, errors, out = self.t.assign() + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 2) + want = afi.generate_filament_id("ZV", "ABS", "Synced ABS") + b1 = load_json_file(self.t.preset_path("VendorA", "Synced ABS @P1base")) + b2 = load_json_file(self.t.preset_path("VendorA", "Synced ABS @P2base")) + self.assertEqual(b1["filament_id"], want) + self.assertEqual(b2["filament_id"], want) + # --------------------------------------------------------------------------- # byte-preserving profile edits @@ -962,11 +1075,19 @@ class TestRemint(SyntheticTreeCase): self.assertEqual(root["filament_id"], afi.generate_filament_id(*self.TRIPLE, salt=1)) - def test_bbl_is_forbidden(self): + def test_bbl_is_reminted_like_any_vendor(self): + self.t.add_vendor("BBL", [ + preset("Bambu ABS @base", filament_id="GFB00", instantiation=False, + filament_vendor="Bambu Lab", filament_type="ABS"), + preset("Bambu ABS @P1", inherits="Bambu ABS @base", + compatible_printers=["P1"]), + ]) changed, errors, out = self.t.remint(["BBL"]) - self.assertEqual(changed, 0) - self.assertGreater(errors, 0) - self.assertIn("forbidden", out) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + root = load_json_file(self.t.preset_path("BBL", "Bambu ABS @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS")) # --------------------------------------------------------------------------- @@ -1044,7 +1165,7 @@ class TestRealTree(unittest.TestCase): # review-fix regressions # --------------------------------------------------------------------------- -class TestReviewFixes(SyntheticTreeCase): +class TestReviewFixes(OfCleanTreeCase): def test_check3_skips_of_id_inherited_from_other_vendor(self): # An OFL family carries its own minted OF id and a vendor tunes it # correctly (same base name, non-empty printers). The new claim must From c6ab725584362cc951c3fde3acf9905b34b86f9b Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Fri, 4 Sep 2026 14:41:20 +0800 Subject: [PATCH 100/208] Fixes issue with mixed filament being loaded into a real slot --- src/libslic3r/PresetBundle.cpp | 149 ++++++++++++- .../libslic3r/test_preset_bundle_loading.cpp | 209 ++++++++++++++++++ 2 files changed, 354 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index da5696840b..dab0dd4de3 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4759,6 +4759,98 @@ static void apply_mixed_config_relocations(DynamicPrintConfig& } } +// Relocate the per-slot cells of the receiver's OWN mixed-filament definitions (the ones that +// pre-existed in project_config) onto fresh tail slots, clearing each vacated source cell so an +// incoming published real filament can claim it. Unlike apply_mixed_config_relocations - which +// moves the incoming file's config and leaves sources alone - a displaced receiver mix must not +// keep its mixed flag in the physical region: the source slot becomes a physical slot, so its +// mixed flag and definition are reset, while its swatch colour and mapping travel with the +// definition to the tail slot. Reads come from a frozen snapshot so an earlier move's +// destination never overwrites a later move's still-unread source (sources sit in the physical +// region and destinations past it, so they cannot overlap, but the snapshot keeps the helper +// safe for any future reordering). +static void apply_receiver_mix_relocations(DynamicPrintConfig& config, + std::vector>& ams_multi_color_filment, + const std::vector>& moves) +{ + if (moves.empty()) + return; + + auto move_bools = [&](const char* key, bool clear_source) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto [from, to] : moves) { + const bool cell = from < frozen->values.size() ? frozen->values[from] : false; + if (live->values.size() <= to) + live->values.resize(to + 1, false); + live->values[to] = cell; + if (clear_source && from < live->values.size()) + live->values[from] = false; + } + }; + auto move_strings = [&](const char* key, bool clear_source) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto [from, to] : moves) { + const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); + if (live->values.size() <= to) + live->values.resize(to + 1, std::string{}); + live->values[to] = cell; + if (clear_source && from < live->values.size()) + live->values[from] = std::string{}; + } + }; + auto move_ints = [&](const char* key) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto [from, to] : moves) { + const int cell = from < frozen->values.size() ? frozen->values[from] : 0; + if (live->values.size() <= to) + live->values.resize(to + 1, 0); + live->values[to] = cell; + } + }; + + // Mixed-definition cells: move to the tail and clear the source - the vacated physical slot + // no longer holds a mix. + move_bools("filament_is_mixed", true); + move_strings("filament_mixed_components", true); + move_strings("filament_mixed_sublayer_ratios", true); + move_bools("filament_mixed_gradient", true); + move_strings("filament_mixed_gradient_range", true); + move_strings("filament_mixed_gradient_curve", true); + move_bools("filament_mixed_gradient_per_part", true); + // Swatch colour and mapping travel with the definition; the source colour is left for the + // incoming real's publish_color (or the slot's resolved preset) to fill in. + move_strings("filament_colour", false); + move_strings("filament_multi_colour", false); + move_strings("filament_colour_type", false); + move_ints("filament_map"); + move_ints("filament_nozzle_map"); + move_ints("filament_volume_map"); + { + const std::vector> frozen = ams_multi_color_filment; + for (const auto [from, to] : moves) { + const std::vector cell = from < frozen.size() ? frozen[from] : std::vector(); + if (ams_multi_color_filment.size() <= to) + ams_multi_color_filment.resize(to + 1, std::vector{}); + ams_multi_color_filment[to] = cell; + } + } +} + //convert the old filament preset to new one after split static void convert_filament_preset_name(std::string& machine_name, std::string& filament_name) @@ -5287,7 +5379,24 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // counter preserving author order (dest = max(authored, next_free)). Appends past // the extruder limit are dropped and reported. Physical entries past capacity join // the same counter as mixed_placeholder empties the GUI flags for assignment. - size_t next_free_slot = this->filament_presets.size(); + // + // The finished project keeps the physical-first invariant (see the sidebar's + // add_custom_filament: mixed slots always sit at the tail, physical slots packed + // first). That invariant must survive an import, so every receiver mixed slot that + // would end up inside (or ahead of) the incoming physical region is displaced to a + // fresh tail slot, and the tail allocator starts at the physical boundary rather + // than the receiver's slot count - otherwise a relocated mix can collide with a + // keep-placed new real slot. + size_t physical_boundary = this->num_physical_filaments(); + for (const PublishedMaterialEntry& entry : published_config->material_keys) + // Mirror the payload-real keep-place decision below: a real keeps its authored + // slot when that slot already exists on the receiver, or lies within the + // printer's physical capacity. Both end up as physical slots at index + // entry.slot, so they bound the physical region even past the capacity. + if (entry.slot >= 0 && !is_mixed_definition(entry) && + (size_t(entry.slot) < this->filament_presets.size() || size_t(entry.slot) < physical_capacity)) + physical_boundary = std::max(physical_boundary, size_t(entry.slot) + 1); + size_t next_free_slot = std::max(physical_boundary, this->filament_presets.size()); bool any_mixed_relocated = false; // All authored-slot -> destination moves decided by this pass, applied to the // incoming config in one batched snapshot step below (an earlier move's @@ -5295,6 +5404,33 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // onto consecutive slots, so incremental in-place shifts would overwrite a // definition that has not been moved yet). std::vector> mixed_moves; + // Receiver-mix relocations land in project_config, not the incoming config, so they + // get their own move list, applied below after the arrays grow. The swept set lets + // the payload loop below treat a displaced receiver mix as the physical slot it will + // become (a payload mix like-for-like overriding such a slot must itself relocate). + std::vector> receiver_mix_moves; + std::set swept_mix_slots; + for (size_t slot = 0; slot < this->filament_presets.size(); ++slot) { + if (!this->is_mixed_filament(slot)) + continue; + // Slot 0 is the receiver's base filament and is never a virtual mix; the + // sidebar's physical-first layout guarantees it, so never displace it. + if (slot == 0) + continue; + if (slot >= physical_boundary) + continue; // already lives in the tail region + const size_t dest = next_free_slot++; + swept_mix_slots.insert(slot); + receiver_mix_moves.emplace_back(slot, dest); + any_mixed_relocated = true; + // A payload mix authored at the same slot (a mix inside the physical region) is + // processed after this sweep and overrides its own destination below. + published_config->mixed_slot_relocations.insert_or_assign(int(slot), int(dest)); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + " -> slot " + + std::to_string(dest) + ": mixed filament"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated receiver mixed filament slot " << slot + << " -> " << dest << " (physical-first rebalance)"; + } for (auto entry_it = published_config->material_keys.begin(); entry_it != published_config->material_keys.end();) { PublishedMaterialEntry& entry = *entry_it; if (entry.slot < 0) { @@ -5310,7 +5446,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // above the printer's capacity (pre-existing state is never shrunk). bool keep_place = false; if (is_payload_mix) - keep_place = this->is_mixed_filament(size_t(entry.slot)); + keep_place = this->is_mixed_filament(size_t(entry.slot)) && swept_mix_slots.count(size_t(entry.slot)) == 0; else keep_place = size_t(entry.slot) < this->filament_presets.size() || size_t(entry.slot) < physical_capacity; @@ -5357,7 +5493,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool entry.slot = dest_slot; any_mixed_relocated = true; mixed_moves.emplace_back(size_t(authored_slot), size_t(entry.slot)); - published_config->mixed_slot_relocations.emplace(authored_slot, entry.slot); + published_config->mixed_slot_relocations.insert_or_assign(authored_slot, entry.slot); published_config->material_replacements.emplace_back("slot " + std::to_string(authored_slot) + " -> slot " + std::to_string(entry.slot) + ": mixed filament"); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated mixed filament slot " << authored_slot @@ -5374,7 +5510,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool if (dest_slot != authored_slot) { entry.slot = dest_slot; mixed_moves.emplace_back(size_t(authored_slot), size_t(dest_slot)); - published_config->mixed_slot_relocations.emplace(authored_slot, dest_slot); + published_config->mixed_slot_relocations.insert_or_assign(authored_slot, dest_slot); } published_config->material_replacements.emplace_back( (dest_slot != authored_slot ? @@ -5725,6 +5861,11 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool // slots wrote to it; that compound case is not chased.) const bool edited_survives_load = this->filament_presets.empty() || this->filament_presets.front() == this->filaments.get_edited_preset().name; + // Displaced receiver mixes (see the physical-first rebalance above): move their + // per-slot cells onto the grown tail slots and reset the vacated physical slots, + // so the incoming real filaments can claim them. Runs before mixed_final_slots is + // built, so the rebalanced layout is what the mix validation sees. + apply_receiver_mix_relocations(this->project_config, this->ams_multi_color_filment, receiver_mix_moves); // Final layout for mix-definition validation: every slot that will hold a // mixed definition once this load completes - the receiver's own virtual // slots, each published mixed entry's final (possibly relocated) slot, and diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 9526a64b02..f7971cd1d2 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -2980,6 +2980,215 @@ TEST_CASE("Published 3MF relocates a mixed filament instead of overwriting a phy } } +// A receiver that already owns a MIXED filament must keep the physical-first invariant after a +// published-3MF import: when incoming physical filaments would land on (or ahead of) the +// receiver's mixed slot, that mix is displaced to a fresh tail slot instead of being left +// interleaved with them (the R,M,R bug). +TEST_CASE("Published 3MF relocates the receiver's mixed filament past the incoming physical slots", "[Preset][Bundle][Published]") +{ + // Build the receiver's tool-changer with three slots, the third being the receiver's own + // mixed filament. A SEMM (single_extruder_multi_material) receiver sizes its slot list by + // hand, so a lower slot count than the printer's nozzle count is preserved on load - a + // non-SEMM tool-changer would top the preset list up to the nozzle count and shift the + // expected sizes (the rebalance logic under test is the same either way). + auto make_receiver = [](PresetBundle &bundle, const std::string &components, const std::string &ratios) { + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3, "#123456"); + bundle.printers.get_edited_preset().config.opt("single_extruder_multi_material", true)->value = true; + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = components; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = ratios; + bundle.project_config.opt("filament_colour")->values[2] = "#800080"; + bundle.project_config.opt("filament_multi_colour")->values[2] = "#800080"; + }; + auto make_real_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + // A four-physical author project with no mixed slots (colour publish only), as in the + // reported Ferrari reference file. + auto make_config_4_real = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#000000", "#FFFFFF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + // [R, R, M] + four colour-only physical slots at authored 0..3 -> [R, R, R, R, M]. + { + PresetBundle bundle; + make_receiver(bundle, "1,2", "0.5,0.5"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#000000"), + make_real_entry(2, "#FFFFFF"), make_real_entry(3, "#FFFF00") }; + DynamicPrintConfig config = make_config_4_real(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grows by one extra virtual slot; the mix lands at the tail. + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + // The definition travelled with its swatch colour; the vacated slot 2 became physical. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4] == "1,2"); + CHECK(components[2].empty()); + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 5); + CHECK(colour[4] == "#800080"); + CHECK(colour[2] == "#FFFFFF"); + CHECK(pub.mixed_slot_relocations.at(2) == 4); + bool relocated_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 2 -> slot 4") != std::string::npos && + message.find("mixed filament") != std::string::npos) + relocated_reported = true; + CHECK(relocated_reported); + CHECK(pub.skipped_keys.empty()); + } + + // [R, R, M] plus a payload mix authored at slot 3: the receiver mix (displaced to slot 3) sits + // ahead of the appended payload mix (slot 4), preserving physical-first tail ordering. + { + PresetBundle bundle; + make_receiver(bundle, "1,2", "0.5,0.5"); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#000000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + // Authored slot 3 is a payload mixed definition blending slots 1 and 3. + config.opt("filament_is_mixed")->values = { 0, 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "1,3" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 0, 1 }; + + PublishedMaterialEntry mix; + mix.slot = 3; + mix.filament_type = "PLA"; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#000000"), + make_real_entry(2, "#0000FF"), mix }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK_FALSE(is_mixed[2]); + CHECK(is_mixed[3]); // receiver's mix, displaced to slot 3 first + CHECK(is_mixed[4]); // payload's mix, appended after + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[3] == "1,2"); + CHECK(components[4] == "1,3"); + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(2) == 3); + CHECK(pub.mixed_slot_relocations.at(3) == 4); + CHECK(pub.skipped_keys.empty()); + } +} + +// Multiple receiver mixed slots interleaved with multiple incoming physical slots all rebalance +// onto consecutive tail slots in index order (no cascade/overlap). +TEST_CASE("Published 3MF rebalances several receiver mixed slots past the physical region", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3, "#123456"); + bundle.printers.get_edited_preset().config.opt("single_extruder_multi_material", true)->value = true; + // Receiver: slot 1 and slot 2 are mixed. + bundle.project_config.opt("filament_is_mixed")->values[1] = 1; + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[1] = "1,2"; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,3"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[1] = "0.5,0.5"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.4,0.6"; + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#00AA00", "#0000FF" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99" }; + + auto make_real_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#00AA00"), make_real_entry(2, "#0000FF") }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 3; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[3]); + CHECK(is_mixed[4]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[3] == "1,2"); + CHECK(components[4] == "1,3"); + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(1) == 3); + CHECK(pub.mixed_slot_relocations.at(2) == 4); + CHECK(pub.skipped_keys.empty()); +} + // The receiver's printer gates how many PHYSICAL filament slots a published 3MF may add: a // non-SEMM tool-changer feeds filament N from nozzle N, so a published slot past the nozzle // count cannot become a physical filament. It becomes an empty mixed-filament placeholder From db3d684ee00fab86f817eaa6d858157c0cc735de Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 14:42:57 +0800 Subject: [PATCH 101/208] Scope the filament AMS length check to presets the vendor bundle references The tree-wide length check (freed from its BBL/OFL carve-out last commit) was flagging 21 pre-existing SeeMeCNC files that no vendor index references and that therefore never load, turning CI red for files with no bearing on what ships. The rule now only fires on presets a vendor's filament_list actually references; every .json under the vendor's filament directory is still parsed through the duplicate-key hook, so that coverage is unchanged. Also removed a duplicated BAMBU_MAP_PATH definition: update_bambu_filament_ids.py now imports the constant from assign_filament_ids.py, which it already imports several other constants from, instead of recomputing the same path independently. --- scripts/assign_filament_ids.py | 4 +-- scripts/orca_extra_profile_check.py | 37 +++++++++++++++++++++------- scripts/update_bambu_filament_ids.py | 5 +--- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index cc3adeab4a..7ce907f816 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -79,8 +79,8 @@ 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") -# Same path update_bambu_filament_ids.BAMBU_MAP_PATH computes; kept as a sibling -# constant (not imported) because that module imports FROM this one already. +# The single source of truth for the map path; update_bambu_filament_ids.py +# imports this rather than recomputing it. BAMBU_MAP_PATH = os.path.normpath( os.path.join(SCRIPTS_DIR, "..", "resources", "printers", "bambu_filament_ids.json")) diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index 62bd8c2916..285b2fbf64 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -290,19 +290,38 @@ def check_name_consistency(profiles_dir, vendor_name): return error_count, 0 -def check_filament_id(vendor_folder): +def check_filament_id(profiles_dir, vendor_name): """ Make sure filament_id is not longer than 8 characters, otherwise AMS won't work properly. - Runs tree-wide, every vendor alike: check_filament_ids (assign_filament_ids.py) - already requires every id in the tree to match the fixed-length "OF" format, - so this is a redundant belt-and-suspenders check, not a substitute for it. + Runs tree-wide, every vendor alike (BBL included: the id format is what + matters, not the vendor). Every .json file under the vendor's filament + directory is still parsed through the duplicate-key hook below, so that + coverage is unchanged; only the length rule itself is scoped to presets + the vendor's index (.json filament_list) actually references. A + file the index does not reference never loads, so its filament_id length + cannot break AMS -- and some vendors (e.g. SeeMeCNC) ship such orphaned + files pre-dating this check, with no bearing on what ships. """ error = 0 - vendor_path = Path(vendor_folder) + vendor_path = profiles_dir / vendor_name / "filament" if not vendor_path.exists(): return 0 + referenced = set() + vendor_file = profiles_dir / (vendor_name + ".json") + if vendor_file.exists(): + try: + with open(vendor_file, 'r', encoding='UTF-8') as fp: + index = json.load(fp) + for entry in index.get('filament_list', []): + sub_path = entry.get('sub_path') + if sub_path: + referenced.add((profiles_dir / vendor_name / sub_path).resolve()) + except Exception as e: + print_error(f"Error loading vendor profile {vendor_file}: {e}") + error += 1 + # Use rglob to recursively find .json files. for file_path in vendor_path.rglob("*.json"): try: @@ -320,13 +339,13 @@ def check_filament_id(vendor_folder): if 'filament_id' not in data: continue - + filament_id = data['filament_id'] - if len(filament_id) > 8: + if len(filament_id) > 8 and file_path.resolve() in referenced: error += 1 print_error(f"Filament id too long \"{filament_id}\": {file_path}") - + return error def check_obsolete_keys(profiles_dir, vendor_name): @@ -597,7 +616,7 @@ def main(): errors_found += check_vector_type_keys(profiles_dir, vendor_name) - errors_found += check_filament_id(vendor_path / "filament") + errors_found += check_filament_id(profiles_dir, vendor_name) checked_vendor_count += 1 if args.vendor: diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index 744fcc0401..cd5e05e3bc 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -55,6 +55,7 @@ import datetime sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from assign_filament_ids import ( # noqa: E402 + BAMBU_MAP_PATH, OFL, OF_ID_RE, PROFILES_DIR, @@ -69,10 +70,6 @@ from assign_filament_ids import ( # noqa: E402 resolve_triple, ) -SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__)) -BAMBU_MAP_PATH = os.path.normpath( - os.path.join(SCRIPTS_DIR, "..", "resources", "printers", "bambu_filament_ids.json")) - BAMBUSTUDIO_REPO = "https://github.com/bambulab/BambuStudio" From 9df23cab625d483f8746658d376d4607b10d2f11 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Fri, 4 Sep 2026 14:59:53 +0800 Subject: [PATCH 102/208] fix: opc updates being discarded --- src/slic3r/Utils/PresetUpdater.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index d05c7b9586..017deb0fc9 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -780,11 +780,15 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) const fs::path cached_vendor_json = cache_profile_path / (vendor_id + ".json"); const fs::path cached_vendor_folder = cache_profile_path / vendor_id; - if (!fs::is_regular_file(cached_vendor_json) || !fs::is_directory(cached_vendor_folder) || - fs::is_empty(cached_vendor_folder)) { + + const fs::path cached_vendor_opc = cache_profile_path / (vendor_id + ".opc"); + + bool is_json_update = fs::is_regular_file(cached_vendor_json) && fs::is_directory(cached_vendor_folder) && !fs::is_empty(cached_vendor_folder); + bool is_opc_update = fs::is_regular_file(cached_vendor_opc); + if (!is_json_update && !is_opc_update) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] rejected update for " << vendor_id << ": expected " << vendor_id << ".json and a non-empty " - << vendor_id << " directory"; + << vendor_id << " directory, or OPC update format."; fs::remove_all(cached_vendor_folder, ec); fs::remove(cached_vendor_json, ec); return; From ec207e67a31784eaa9c803190a8f9db2abf7b3b8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 15:01:58 +0800 Subject: [PATCH 103/208] Mint content-addressed ids for the Bambu bundle --- resources/profiles/BBL.json | 2 +- .../BBL/filament/BETA/BETA ABS @base.json | 2 +- .../BBL/filament/BETA/BETA ASA @base.json | 2 +- .../BBL/filament/BETA/BETA HIPS @base.json | 2 +- .../BBL/filament/BETA/BETA PAHT-CF @base.json | 2 +- .../filament/BETA/BETA PEBA 90A @base.json | 2 +- .../BBL/filament/BETA/BETA PETG @base.json | 2 +- .../BETA/BETA PETG Fluorescence @base.json | 2 +- .../BETA/BETA PETG Glitter @base.json | 2 +- .../filament/BETA/BETA PETG Glow @base.json | 2 +- .../BETA/BETA PETG Gradient @base.json | 2 +- .../BBL/filament/BETA/BETA PETG HF @base.json | 2 +- .../BETA PETG Heat Color Change @base.json | 2 +- .../filament/BETA/BETA PETG Marble @base.json | 2 +- .../filament/BETA/BETA PETG Matte @base.json | 2 +- .../BETA/BETA PETG Metallic @base.json | 2 +- .../BETA/BETA PETG Transparent @base.json | 2 +- .../BETA/BETA PETG UV Color Change @base.json | 2 +- .../BBL/filament/BETA/BETA PETG-CF @base.json | 2 +- .../BBL/filament/BETA/BETA PETG-GF @base.json | 2 +- .../filament/BETA/BETA PLA Basic @base.json | 2 +- .../BETA/BETA PLA Chameleon @base.json | 2 +- .../BETA/BETA PLA Fluorescence @base.json | 2 +- .../filament/BETA/BETA PLA Glitter @base.json | 2 +- .../filament/BETA/BETA PLA Glow @base.json | 2 +- .../BETA/BETA PLA Gradient @base.json | 2 +- .../BETA PLA Heat Color Change @base.json | 2 +- .../BETA/BETA PLA High Speed @base.json | 2 +- .../BETA/BETA PLA High Temp @base.json | 2 +- .../filament/BETA/BETA PLA Marble @base.json | 2 +- .../filament/BETA/BETA PLA Matte @base.json | 2 +- .../filament/BETA/BETA PLA Metal @base.json | 2 +- .../BETA/BETA PLA Metallic @base.json | 2 +- .../BBL/filament/BETA/BETA PLA PRO @base.json | 2 +- .../filament/BETA/BETA PLA Silk @base.json | 2 +- .../filament/BETA/BETA PLA Silk+ @base.json | 2 +- .../BETA/BETA PLA Transparent @base.json | 2 +- .../BETA/BETA PLA UV Color Change @base.json | 2 +- .../filament/BETA/BETA PLA Wood @base.json | 2 +- .../filament/BETA/BETA PLA Youth @base.json | 2 +- .../BBL/filament/BETA/BETA PLA-CF @base.json | 2 +- .../BBL/filament/BETA/BETA TPU 90A @base.json | 2 +- .../BBL/filament/BETA/BETA TPU 95A @base.json | 2 +- .../BBL/filament/BETA/BETA TPU 98A @base.json | 2 +- .../filament/BETA/BETA TPU Matte @base.json | 2 +- .../BBL/filament/Bambu ABS @base.json | 2 +- .../BBL/filament/Bambu ABS-GF @base.json | 2 +- .../BBL/filament/Bambu ASA @base.json | 2 +- .../BBL/filament/Bambu ASA-Aero @base.json | 2 +- .../BBL/filament/Bambu ASA-CF @base.json | 2 +- .../BBL/filament/Bambu PA-CF @base.json | 2 +- .../BBL/filament/Bambu PA6-CF @base.json | 2 +- .../BBL/filament/Bambu PA6-GF @base.json | 2 +- .../BBL/filament/Bambu PAHT-CF @base.json | 2 +- .../profiles/BBL/filament/Bambu PC @base.json | 2 +- .../BBL/filament/Bambu PC FR @base.json | 2 +- .../BBL/filament/Bambu PET-CF @base.json | 2 +- .../BBL/filament/Bambu PETG Basic @base.json | 2 +- .../BBL/filament/Bambu PETG HF @base.json | 2 +- .../Bambu PETG Translucent @base.json | 2 +- .../BBL/filament/Bambu PETG-CF @base.json | 2 +- .../BBL/filament/Bambu PLA Aero @base.json | 2 +- .../BBL/filament/Bambu PLA Basic @base.json | 2 +- .../BBL/filament/Bambu PLA Dynamic @base.json | 2 +- .../BBL/filament/Bambu PLA Galaxy @base.json | 2 +- .../BBL/filament/Bambu PLA Glow @base.json | 2 +- .../BBL/filament/Bambu PLA Lite @base.json | 2 +- .../BBL/filament/Bambu PLA Marble @base.json | 2 +- .../BBL/filament/Bambu PLA Matte @base.json | 2 +- .../BBL/filament/Bambu PLA Metal @base.json | 2 +- .../BBL/filament/Bambu PLA Pure @base.json | 2 +- .../BBL/filament/Bambu PLA Silk @base.json | 2 +- .../BBL/filament/Bambu PLA Silk+ @base.json | 2 +- .../BBL/filament/Bambu PLA Sparkle @base.json | 2 +- .../BBL/filament/Bambu PLA Tough @base.json | 2 +- .../BBL/filament/Bambu PLA Tough+ @base.json | 2 +- .../filament/Bambu PLA Translucent @base.json | 2 +- .../BBL/filament/Bambu PLA Wood @base.json | 2 +- .../BBL/filament/Bambu PLA-CF @base.json | 2 +- .../BBL/filament/Bambu PPA-CF @base.json | 2 +- .../BBL/filament/Bambu PPS-CF @base.json | 2 +- .../BBL/filament/Bambu PVA @base.json | 2 +- .../Bambu Support For PA PET @base.json | 2 +- .../filament/Bambu Support For PLA @base.json | 2 +- .../Bambu Support For PLA-PETG @base.json | 2 +- .../BBL/filament/Bambu Support G @base.json | 2 +- .../BBL/filament/Bambu Support W @base.json | 2 +- .../filament/Bambu Support for ABS @base.json | 2 +- .../BBL/filament/Bambu TPU 85A @base.json | 2 +- .../BBL/filament/Bambu TPU 90A @base.json | 2 +- .../BBL/filament/Bambu TPU 95A @base.json | 2 +- .../BBL/filament/Bambu TPU 95A HF @base.json | 2 +- .../BBL/filament/Bambu TPU for AMS @base.json | 2 +- .../FusRock/FusRock ABS-GF @base.json | 2 +- .../BBL/filament/Generic ABS @base.json | 2 +- .../BBL/filament/Generic ASA @base.json | 2 +- .../BBL/filament/Generic BVOH @base.json | 2 +- .../BBL/filament/Generic EVA @base.json | 2 +- .../BBL/filament/Generic HIPS @base.json | 2 +- .../BBL/filament/Generic PA @base.json | 2 +- .../BBL/filament/Generic PA-CF @base.json | 2 +- .../BBL/filament/Generic PC @base.json | 2 +- .../BBL/filament/Generic PCTG @base.json | 2 +- .../BBL/filament/Generic PE @base.json | 2 +- .../BBL/filament/Generic PE-CF @base.json | 2 +- .../BBL/filament/Generic PETG @base.json | 2 +- .../BBL/filament/Generic PETG HF @base.json | 2 +- .../BBL/filament/Generic PETG-CF @base.json | 2 +- .../BBL/filament/Generic PHA @base.json | 2 +- .../BBL/filament/Generic PLA @base.json | 2 +- .../Generic PLA High Speed @base.json | 2 +- .../BBL/filament/Generic PLA Silk @base.json | 2 +- .../BBL/filament/Generic PLA-CF @base.json | 2 +- .../BBL/filament/Generic PP @base.json | 2 +- .../BBL/filament/Generic PP-CF @base.json | 2 +- .../BBL/filament/Generic PP-GF @base.json | 2 +- .../BBL/filament/Generic PPA-CF @base.json | 2 +- .../BBL/filament/Generic PPA-GF @base.json | 2 +- .../BBL/filament/Generic PPS @base.json | 2 +- .../BBL/filament/Generic PPS-CF @base.json | 2 +- .../BBL/filament/Generic PVA @base.json | 2 +- .../BBL/filament/Generic SBS @base.json | 2 +- .../profiles/BBL/filament/Generic SBS.json | 2 +- .../BBL/filament/Generic TPU @base.json | 2 +- .../filament/Generic TPU for AMS @base.json | 2 +- .../Numakers/Numakers PLA+ @base.json | 2 +- .../Overture/Overture Matte PLA @base.json | 2 +- .../filament/Overture/Overture PLA @base.json | 2 +- .../Overture/Overture PLA Pro @base.json | 2 +- .../Polymaker/Fiberon PA12-CF @base.json | 2 +- .../Polymaker/Fiberon PA12-CF10 @base.json | 2 +- .../Polymaker/Fiberon PA6-CF @base.json | 2 +- .../Polymaker/Fiberon PA6-CF20 @base.json | 2 +- .../Polymaker/Fiberon PA6-GF @base.json | 2 +- .../Polymaker/Fiberon PA6-GF25 @base.json | 2 +- .../Polymaker/Fiberon PA612-CF @base.json | 2 +- .../Polymaker/Fiberon PA612-CF15 @base.json | 2 +- .../Polymaker/Fiberon PET-CF @base.json | 2 +- .../Polymaker/Fiberon PET-CF17 @base.json | 2 +- .../Polymaker/Fiberon PETG-ESD @base.json | 2 +- .../Polymaker/Fiberon PETG-rCF @base.json | 2 +- .../Polymaker/Fiberon PETG-rCF08 @base.json | 2 +- .../Polymaker/Panchroma CoPE @base.json | 2 +- .../Polymaker/Panchroma PLA @base.json | 2 +- .../Panchroma PLA Celestial @base.json | 2 +- .../Polymaker/Panchroma PLA Galaxy @base.json | 2 +- .../Polymaker/Panchroma PLA Glow @base.json | 2 +- .../Panchroma PLA Luminous @base.json | 2 +- .../Polymaker/Panchroma PLA Marble @base.json | 2 +- .../Polymaker/Panchroma PLA Matte @base.json | 2 +- .../Panchroma PLA Metallic @base.json | 2 +- .../Polymaker/Panchroma PLA Neon @base.json | 2 +- .../Polymaker/Panchroma PLA Satin @base.json | 2 +- .../Polymaker/Panchroma PLA Silk @base.json | 2 +- .../Panchroma PLA Starlight @base.json | 2 +- .../Panchroma PLA Temp Shift @base.json | 2 +- .../Panchroma PLA Translucent @base.json | 2 +- .../Panchroma PLA UV Shift @base.json | 2 +- .../Polymaker/PolyLite ABS @base.json | 2 +- .../Polymaker/PolyLite ASA @base.json | 2 +- .../Polymaker/PolyLite CosPLA @base.json | 2 +- .../Polymaker/PolyLite PETG @base.json | 2 +- .../Polymaker/PolyLite PLA @base.json | 2 +- .../Polymaker/PolyLite PLA Galaxy @base.json | 2 +- .../Polymaker/PolyLite PLA Glow @base.json | 2 +- .../PolyLite PLA Luminous @base.json | 2 +- .../Polymaker/PolyLite PLA Neon @base.json | 2 +- .../Polymaker/PolyLite PLA Pro @base.json | 2 +- .../PolyLite PLA Starlight @base.json | 2 +- .../PolyLite PLA Translucent @base.json | 2 +- .../Polymaker/PolyTerra PLA @base.json | 2 +- .../Polymaker/PolyTerra PLA Marble @base.json | 2 +- .../Polymaker/PolyTerra PLA+ @base.json | 2 +- .../Polymaker/Polymaker HT-PLA @base.json | 2 +- .../Polymaker/Polymaker HT-PLA-GF @base.json | 2 +- .../SUNLU/SUNLU Marble PLA @base.json | 2 +- .../BBL/filament/SUNLU/SUNLU PETG @base.json | 2 +- .../filament/SUNLU/SUNLU PLA Matte @base.json | 2 +- .../filament/SUNLU/SUNLU PLA+ 2.0 @base.json | 2 +- .../BBL/filament/SUNLU/SUNLU PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Silk PLA+ @base.json | 2 +- .../filament/SUNLU/SUNLU Wood PLA @base.json | 2 +- .../filament/addnorth/addnorth ABS rABS.json | 2 +- .../addnorth/addnorth PA Adura FDA.json | 2 +- .../filament/addnorth/addnorth PA Adura.json | 2 +- .../addnorth/addnorth PA-CF Adura X.json | 2 +- .../addnorth/addnorth PA6 Addlantis.json | 2 +- .../addnorth/addnorth PC BLend HT LCF.json | 2 +- .../filament/addnorth/addnorth PETG Base.json | 2 +- .../filament/addnorth/addnorth PETG ESD.json | 2 +- .../addnorth/addnorth PETG Economy.json | 2 +- .../addnorth/addnorth PETG Flame v0.json | 2 +- .../addnorth/addnorth PETG PRO Matte.json | 2 +- .../addnorth/addnorth PETG rPETG Matte.json | 2 +- .../addnorth/addnorth PETG-CF Rigid X.json | 2 +- .../filament/addnorth/addnorth PLA E-PLA.json | 2 +- .../addnorth/addnorth PLA Economy.json | 2 +- .../addnorth PLA HT-PLA PRO Matte.json | 2 +- .../addnorth/addnorth PLA Premium Silk.json | 2 +- .../addnorth/addnorth PLA Textura.json | 2 +- .../filament/addnorth/addnorth PLA Wood.json | 2 +- .../addnorth PLA X-PLA High Speed.json | 2 +- .../filament/addnorth/addnorth PLA X-PLA.json | 2 +- .../addnorth/addnorth PLA rPLA RE-ADD.json | 2 +- .../addnorth PLA-CF Carbon Fiber.json | 2 +- .../addnorth/addnorth PVDF Adamant S1.json | 2 +- .../addnorth/addnorth TPU EasyFlex.json | 2 +- .../addnorth/addnorth TPU Pro Matte 85A.json | 2 +- .../addnorth/addnorth TPU Pro Matte 95A.json | 2 +- .../BBL/filament/eSUN/eSUN PLA+ @base.json | 2 +- scripts/filament_id_snapshot.json | 1584 ++++++++++------- 211 files changed, 1167 insertions(+), 837 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index a2e72e00cb..723a907f52 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "02.01.00.23", + "version": "02.01.00.24", "force_update": "0", "description": "BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA ABS @base.json b/resources/profiles/BBL/filament/BETA/BETA ABS @base.json index 38e7aa5c12..bbed068703 100644 --- a/resources/profiles/BBL/filament/BETA/BETA ABS @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA ABS @base.json @@ -3,7 +3,7 @@ "name": "BETA ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "BABB00", + "filament_id": "OFjUXn67", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA ASA @base.json b/resources/profiles/BBL/filament/BETA/BETA ASA @base.json index a36f654b02..a525f16bb1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA ASA @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA ASA @base.json @@ -3,7 +3,7 @@ "name": "BETA ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "BASB00", + "filament_id": "OFZqZMuv", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json b/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json index 2647bc3397..4d244f9fe1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json @@ -3,7 +3,7 @@ "name": "BETA HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "BHIB00", + "filament_id": "OFlmxlDG", "instantiation": "false", "filament_is_support": [ "1" diff --git a/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json index c0116f418c..1c140e3720 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "BPAB00", + "filament_id": "OF6qw3Wb", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json b/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json index d92ceb29b1..fe1d3cd5b6 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json @@ -3,7 +3,7 @@ "name": "BETA PEBA 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BPBB00", + "filament_id": "OFI2MKy7", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG @base.json index 9d15c065f5..07a25f9233 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB00", + "filament_id": "OFrqMlGt", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json index b9b0032612..b79699b9fc 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Fluorescence @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB02", + "filament_id": "OFYGrfHY", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json index 70d84d21d3..c6b7b96de5 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Glitter @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB03", + "filament_id": "OFjogeYN", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json index 7da99e23fc..30c8cc2783 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Glow @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB04", + "filament_id": "OFFfJ09N", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json index 6f6e891503..cff77a0d6c 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Gradient @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB05", + "filament_id": "OFNk8AvA", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json index 1ce6e4299e..b7aa43b6b5 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB06", + "filament_id": "OFxqf79Q", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json index 32a62c63b7..254cf9e4c1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Heat Color Change @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB01", + "filament_id": "OFyPTnSk", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json index 30c79b2db5..335a3f59b2 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Marble @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB07", + "filament_id": "OF4XTfoI", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json index c7278e20dd..52a838f323 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Matte @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB08", + "filament_id": "OFnpX8uh", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json index b2d9ce8524..9c276bcf4d 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Metallic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB09", + "filament_id": "OFz1a1fy", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json index 6378e0cfdd..781d69af3a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Transparent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB10", + "filament_id": "OFmt513L", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json index 53717f5be3..42fa3bd62b 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG UV Color Change @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB11", + "filament_id": "OFKyNkQz", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json index 165d5a56b8..8e3514f0ad 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB12", + "filament_id": "OFtndTHe", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json index 6261eaa7d2..d530f7a1d7 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG-GF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB13", + "filament_id": "OFSiCZP3", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json index 1653813bc1..429ecceda1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB00", + "filament_id": "OFuvOt0r", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json index cb618e7bd0..5054237514 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Chameleon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB02", + "filament_id": "OFW8M3CY", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json index 684ce8866f..d9198287aa 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Fluorescence @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB04", + "filament_id": "OF4PKvem", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json index d180d4fb04..545a34dd92 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Glitter @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB05", + "filament_id": "OFcnWTJB", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json index 05657ebd86..6be0a9da33 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB06", + "filament_id": "OFGc9l16", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json index f6cb4e3193..9609ff08d3 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Gradient @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB07", + "filament_id": "OF5LAnla", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json index 6f55ffdab8..958b999d91 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Heat Color Change @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB03", + "filament_id": "OFSfm8iP", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json index 604604cb04..7b93695099 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA High Speed @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB20", + "filament_id": "OF3PDEw3", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json index 7ac72d59fa..d900b28794 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA High Temp @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB18", + "filament_id": "OF5BXhHF", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json index c27f1b4fd1..a472446d9a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB08", + "filament_id": "OFKYBAWe", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json index d67331d549..32bd79b43b 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB09", + "filament_id": "OFwc74ck", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json index 3a5668800d..607e20fa4e 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB10", + "filament_id": "OF03RK6r", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json index 5c1c8f3ddf..c03bc0a8c7 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB11", + "filament_id": "OFkHbjUv", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json index 340b2c88ec..6938382062 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA PRO @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB12", + "filament_id": "OFMzRg65", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json index fb445eed6b..a0c61acd51 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB13", + "filament_id": "OFeF4UNh", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json index 3320396323..0bedc9186a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB01", + "filament_id": "OF8QdQwS", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json index ce0c342852..be62c10734 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Transparent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB14", + "filament_id": "OFJnEaCp", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json index 033d1ef2ce..d95a0d8411 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA UV Color Change @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB15", + "filament_id": "OFpdjFI3", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json index 471c5709cd..c5eeae9995 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB19", + "filament_id": "OFGVxj2A", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json index b63dc707e0..5fa118d566 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Youth @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB16", + "filament_id": "OFF5o7b2", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json index 88028090da..f0f632adfa 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB17", + "filament_id": "OFLqgSuX", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json index 6664874f99..bba256fd74 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB00", + "filament_id": "OF6Yn69v", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json index 2ec4a56075..87f7757c3f 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB02", + "filament_id": "OFK7830e", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json index 58ef5a5c21..cd106a6bf6 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 98A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB03", + "filament_id": "OFzaq7Yg", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json index 20d773373f..272e9be1ed 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU Matte @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB01", + "filament_id": "OF4QZANi", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu ABS @base.json b/resources/profiles/BBL/filament/Bambu ABS @base.json index 4940032f5e..5f395440eb 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @base.json +++ b/resources/profiles/BBL/filament/Bambu ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB00", + "filament_id": "OFhuaUQB", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @base.json b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json index b93c7e82cf..a14581034d 100644 --- a/resources/profiles/BBL/filament/Bambu ABS-GF @base.json +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB50", + "filament_id": "OFknl9Iz", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA @base.json b/resources/profiles/BBL/filament/Bambu ASA @base.json index 31d4c2d758..5e66d50419 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB01", + "filament_id": "OFfBpSRI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json index 1a36118d7f..43c69be716 100644 --- a/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-Aero @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB02", + "filament_id": "OFXzQ4yL", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: ASA Aero Printing Guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA-CF @base.json b/resources/profiles/BBL/filament/Bambu ASA-CF @base.json index 69624032bb..bf957889b6 100644 --- a/resources/profiles/BBL/filament/Bambu ASA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB51", + "filament_id": "OF0wBGNx", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/BBL/filament/Bambu PA-CF @base.json b/resources/profiles/BBL/filament/Bambu PA-CF @base.json index 587812d37b..47e1cc6ae1 100644 --- a/resources/profiles/BBL/filament/Bambu PA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN03", + "filament_id": "OFFNYwWR", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PA6-CF @base.json b/resources/profiles/BBL/filament/Bambu PA6-CF @base.json index 10737491fe..0bb143c6ef 100644 --- a/resources/profiles/BBL/filament/Bambu PA6-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN05", + "filament_id": "OFniMuTN", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @base.json b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json index 1997ec6a1e..2f9a674e54 100644 --- a/resources/profiles/BBL/filament/Bambu PA6-GF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN08", + "filament_id": "OFNk8bxk", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json index 28b1391f84..80c0599caa 100644 --- a/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN04", + "filament_id": "OF2VFe4J", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PC @base.json b/resources/profiles/BBL/filament/Bambu PC @base.json index 4bf37c3adb..ee235b17d6 100644 --- a/resources/profiles/BBL/filament/Bambu PC @base.json +++ b/resources/profiles/BBL/filament/Bambu PC @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC00", + "filament_id": "OFKhMPeX", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/BBL/filament/Bambu PC FR @base.json b/resources/profiles/BBL/filament/Bambu PC FR @base.json index 5c10a4e424..0ee463d08f 100644 --- a/resources/profiles/BBL/filament/Bambu PC FR @base.json +++ b/resources/profiles/BBL/filament/Bambu PC FR @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC FR @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC01", + "filament_id": "OFg57Nmc", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @base.json b/resources/profiles/BBL/filament/Bambu PET-CF @base.json index ff8b40070f..c84d423f0e 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFT01", + "filament_id": "OFHa48An", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json index fd33eb2191..619483a4b4 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG00", + "filament_id": "OFFvzqcd", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @base.json b/resources/profiles/BBL/filament/Bambu PETG HF @base.json index e05c34035b..1c12d679fd 100644 --- a/resources/profiles/BBL/filament/Bambu PETG HF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG02", + "filament_id": "OFovEIbw", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json index 8cb30c5583..372c2e5c26 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Translucent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG01", + "filament_id": "OFwPrlCM", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json index da39340dcb..9c1d80768d 100644 --- a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG50", + "filament_id": "OFTRZ8Y4", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PLA Aero @base.json b/resources/profiles/BBL/filament/Bambu PLA Aero @base.json index ea1315636a..b941bed495 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Aero @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Aero @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA11", + "filament_id": "OFBSW57R", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: Instructions for printing RC model with foaming PLA (PLA Aero).", "fan_min_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json index f05bdb20e4..6d25d0ece0 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA00", + "filament_id": "OFoiVqVM", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json b/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json index a5a1306eef..b21b156082 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Dynamic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA13", + "filament_id": "OFDGigEI", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json b/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json index 046610b2e2..baeb6a1ab8 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA15", + "filament_id": "OFQ3e56w", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Glow @base.json b/resources/profiles/BBL/filament/Bambu PLA Glow @base.json index 005d759df2..7556361f81 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA12", + "filament_id": "OFEkPBwx", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Lite @base.json b/resources/profiles/BBL/filament/Bambu PLA Lite @base.json index 72c3bb4e4f..4a21717d9e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Lite @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Lite @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Lite @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA18", + "filament_id": "OFnfxTvi", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PLA Marble @base.json b/resources/profiles/BBL/filament/Bambu PLA Marble @base.json index 6dd5f815dc..4c9ecb2ff5 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA07", + "filament_id": "OF9OlTWH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json index 15fb527bde..e98b6c3633 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA01", + "filament_id": "OFXIbw5D", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json index 630ffcd61f..9a12d97f4d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA02", + "filament_id": "OFrKLeE3", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Pure @base.json b/resources/profiles/BBL/filament/Bambu PLA Pure @base.json index ae1b796a47..f947b2efaa 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Pure @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Pure @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Pure @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA19", + "filament_id": "OFTHDCqA", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json index cfe83dabdd..da20a689ee 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA05", + "filament_id": "OFEGNJD4", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json index c81147eb58..17a7e21b79 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA06", + "filament_id": "OFUanySo", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json b/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json index ae49d594fd..6ecad9584e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA08", + "filament_id": "OFDxfPgH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough @base.json b/resources/profiles/BBL/filament/Bambu PLA Tough @base.json index 9710767264..09b71a842d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA09", + "filament_id": "OFaQMgRH", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json b/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json index 9b1b0b167e..ccc534d02f 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA10", + "filament_id": "OF342jVN", "instantiation": "false", "additional_cooling_fan_speed": [ "80" diff --git a/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json b/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json index d32d781e70..ada0a501fc 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA17", + "filament_id": "OFFbSnCD", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Wood @base.json b/resources/profiles/BBL/filament/Bambu PLA Wood @base.json index 882e00dc0a..3ba638569b 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Wood @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA16", + "filament_id": "OFMjtqTC", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json index e24e6a11af..5567889cae 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA50", + "filament_id": "OFEswT5W", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PPA-CF @base.json b/resources/profiles/BBL/filament/Bambu PPA-CF @base.json index a7efc6a3c3..48355afad1 100644 --- a/resources/profiles/BBL/filament/Bambu PPA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN06", + "filament_id": "OF54B0S0", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "impact_strength_z": [ diff --git a/resources/profiles/BBL/filament/Bambu PPS-CF @base.json b/resources/profiles/BBL/filament/Bambu PPS-CF @base.json index a94234bb34..3985fcbe02 100644 --- a/resources/profiles/BBL/filament/Bambu PPS-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT02", + "filament_id": "OF4RvVuU", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu PVA @base.json b/resources/profiles/BBL/filament/Bambu PVA @base.json index fea0298ccc..1c6e0f2201 100644 --- a/resources/profiles/BBL/filament/Bambu PVA @base.json +++ b/resources/profiles/BBL/filament/Bambu PVA @base.json @@ -3,7 +3,7 @@ "name": "Bambu PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS04", + "filament_id": "OFzyIxba", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json b/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json index d199cdb0a0..70724ff11f 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PA/PET @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS03", + "filament_id": "OFMTK0UC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA @base.json b/resources/profiles/BBL/filament/Bambu Support For PLA @base.json index 9bfdef5bf9..495291a3cf 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PLA @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PLA @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS02", + "filament_id": "OFAnyRUI", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json index 38443f5be3..6a6ff6aa6b 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA/PETG @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS05", + "filament_id": "OFIfnzxC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support G @base.json b/resources/profiles/BBL/filament/Bambu Support G @base.json index 9cb01972b8..38c7f500f5 100644 --- a/resources/profiles/BBL/filament/Bambu Support G @base.json +++ b/resources/profiles/BBL/filament/Bambu Support G @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS01", + "filament_id": "OFQHiNJs", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support W @base.json b/resources/profiles/BBL/filament/Bambu Support W @base.json index e847cd1865..1391587ef0 100644 --- a/resources/profiles/BBL/filament/Bambu Support W @base.json +++ b/resources/profiles/BBL/filament/Bambu Support W @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS00", + "filament_id": "OFsHSVZc", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu Support for ABS @base.json b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json index bc8867db2a..25f62a07c3 100644 --- a/resources/profiles/BBL/filament/Bambu Support for ABS @base.json +++ b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support for ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFS06", + "filament_id": "OFf6mfQO", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 85A @base.json b/resources/profiles/BBL/filament/Bambu TPU 85A @base.json index bc8c9f698c..fc7f67bc45 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 85A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 85A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 85A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU04", + "filament_id": "OFlfuj2k", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 90A @base.json b/resources/profiles/BBL/filament/Bambu TPU 90A @base.json index 191d06e562..2f2ae95b02 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 90A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 90A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU03", + "filament_id": "OFtkLO6q", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json index 2670e250e9..7d94b0256c 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU01", + "filament_id": "OFVCkX5w", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json index 7610fa2bf3..9f977eb5b2 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A HF @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU00", + "filament_id": "OFvKUnLh", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json b/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json index 21a1e70fea..5f0b03329f 100644 --- a/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU for AMS @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU02", + "filament_id": "OFIBbYO5", "instantiation": "false", "description": "If you are to print a kind of soft TPU, please don't slice with this profile, and it is only for TPU that has high enough hardness (not less than 55D) and is compatible with the AMS. To get better printing quality, please refer to this wiki: TPU printing guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json b/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json index e9e45915f4..95a8fd47ea 100644 --- a/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json +++ b/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "FusRock ABS-GF @base", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFR00", + "filament_id": "OFmn9NZL", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).", "filament_extruder_variant": [ diff --git a/resources/profiles/BBL/filament/Generic ABS @base.json b/resources/profiles/BBL/filament/Generic ABS @base.json index 4a30d790f8..d15a7cdfea 100644 --- a/resources/profiles/BBL/filament/Generic ABS @base.json +++ b/resources/profiles/BBL/filament/Generic ABS @base.json @@ -3,7 +3,7 @@ "name": "Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFY9muEs", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic ASA @base.json b/resources/profiles/BBL/filament/Generic ASA @base.json index e1acd0504d..699fc64f7c 100644 --- a/resources/profiles/BBL/filament/Generic ASA @base.json +++ b/resources/profiles/BBL/filament/Generic ASA @base.json @@ -3,7 +3,7 @@ "name": "Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB98", + "filament_id": "OFLPAxz3", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Generic BVOH @base.json b/resources/profiles/BBL/filament/Generic BVOH @base.json index 848e67c6c9..4a0fdf358e 100644 --- a/resources/profiles/BBL/filament/Generic BVOH @base.json +++ b/resources/profiles/BBL/filament/Generic BVOH @base.json @@ -3,7 +3,7 @@ "name": "Generic BVOH @base", "inherits": "fdm_filament_bvoh", "from": "system", - "filament_id": "GFS97", + "filament_id": "OFo2UF2C", "instantiation": "false", "filament_adhesiveness_category": [ "797" diff --git a/resources/profiles/BBL/filament/Generic EVA @base.json b/resources/profiles/BBL/filament/Generic EVA @base.json index 8799903ab5..79308d5d37 100644 --- a/resources/profiles/BBL/filament/Generic EVA @base.json +++ b/resources/profiles/BBL/filament/Generic EVA @base.json @@ -3,7 +3,7 @@ "name": "Generic EVA @base", "inherits": "fdm_filament_eva", "from": "system", - "filament_id": "GFR99", + "filament_id": "OFCD8qiU", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/BBL/filament/Generic HIPS @base.json b/resources/profiles/BBL/filament/Generic HIPS @base.json index c4147f8098..a0df005ecc 100644 --- a/resources/profiles/BBL/filament/Generic HIPS @base.json +++ b/resources/profiles/BBL/filament/Generic HIPS @base.json @@ -3,7 +3,7 @@ "name": "Generic HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "GFS98", + "filament_id": "OFsFon5l", "instantiation": "false", "filament_is_support": [ "1" diff --git a/resources/profiles/BBL/filament/Generic PA @base.json b/resources/profiles/BBL/filament/Generic PA @base.json index fe819487b0..e6dad20449 100644 --- a/resources/profiles/BBL/filament/Generic PA @base.json +++ b/resources/profiles/BBL/filament/Generic PA @base.json @@ -3,7 +3,7 @@ "name": "Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99", + "filament_id": "OFg8ndtj", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "chamber_temperatures": [ diff --git a/resources/profiles/BBL/filament/Generic PA-CF @base.json b/resources/profiles/BBL/filament/Generic PA-CF @base.json index 6fdbd0c8bb..7c77ffe482 100644 --- a/resources/profiles/BBL/filament/Generic PA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN98", + "filament_id": "OFQLcbps", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Generic PC @base.json b/resources/profiles/BBL/filament/Generic PC @base.json index a98c5a4183..b61c2296b5 100644 --- a/resources/profiles/BBL/filament/Generic PC @base.json +++ b/resources/profiles/BBL/filament/Generic PC @base.json @@ -3,7 +3,7 @@ "name": "Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC99", + "filament_id": "OFLakOUI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PCTG @base.json b/resources/profiles/BBL/filament/Generic PCTG @base.json index e8b7c1ce0a..2eea3496a3 100644 --- a/resources/profiles/BBL/filament/Generic PCTG @base.json +++ b/resources/profiles/BBL/filament/Generic PCTG @base.json @@ -3,7 +3,7 @@ "name": "Generic PCTG @base", "inherits": "fdm_filament_pctg", "from": "system", - "filament_id": "GFG97", + "filament_id": "OFu1evlr", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PE @base.json b/resources/profiles/BBL/filament/Generic PE @base.json index 22a5162c90..d9bdfc84a5 100644 --- a/resources/profiles/BBL/filament/Generic PE @base.json +++ b/resources/profiles/BBL/filament/Generic PE @base.json @@ -3,7 +3,7 @@ "name": "Generic PE @base", "inherits": "fdm_filament_pe", "from": "system", - "filament_id": "GFP99", + "filament_id": "OFPklMI1", "instantiation": "false", "filament_cost": [ "40.99" diff --git a/resources/profiles/BBL/filament/Generic PE-CF @base.json b/resources/profiles/BBL/filament/Generic PE-CF @base.json index 6dafa3535a..655a30e41e 100644 --- a/resources/profiles/BBL/filament/Generic PE-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PE-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PE-CF @base", "inherits": "fdm_filament_pe", "from": "system", - "filament_id": "GFP98", + "filament_id": "OFd0Fv0k", "instantiation": "false", "filament_cost": [ "65.99" diff --git a/resources/profiles/BBL/filament/Generic PETG @base.json b/resources/profiles/BBL/filament/Generic PETG @base.json index 8d59f692a3..9fce0893ce 100644 --- a/resources/profiles/BBL/filament/Generic PETG @base.json +++ b/resources/profiles/BBL/filament/Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFYPdQJh", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PETG HF @base.json b/resources/profiles/BBL/filament/Generic PETG HF @base.json index 6a5ce9f063..c756285013 100644 --- a/resources/profiles/BBL/filament/Generic PETG HF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG96", + "filament_id": "OF7lOgYF", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index c1d7338bd4..4f2f6ed3f9 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG98", + "filament_id": "OFoYSJKi", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PHA @base.json b/resources/profiles/BBL/filament/Generic PHA @base.json index 8e3a7e5f6a..fe2373ff7c 100644 --- a/resources/profiles/BBL/filament/Generic PHA @base.json +++ b/resources/profiles/BBL/filament/Generic PHA @base.json @@ -3,6 +3,6 @@ "name": "Generic PHA @base", "inherits": "fdm_filament_pha", "from": "system", - "filament_id": "GFR98", + "filament_id": "OF74KeQR", "instantiation": "false" } diff --git a/resources/profiles/BBL/filament/Generic PLA @base.json b/resources/profiles/BBL/filament/Generic PLA @base.json index f5c584bc3e..8e166fe212 100644 --- a/resources/profiles/BBL/filament/Generic PLA @base.json +++ b/resources/profiles/BBL/filament/Generic PLA @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFDSrzZ8", "instantiation": "false", "description": "The generic presets are conservatively tuned for compatibility with a wider range of filaments. For higher printing quality and speeds, please use Bambu filaments with Bambu presets.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PLA High Speed @base.json b/resources/profiles/BBL/filament/Generic PLA High Speed @base.json index f03e30f5ec..9fd751ae44 100644 --- a/resources/profiles/BBL/filament/Generic PLA High Speed @base.json +++ b/resources/profiles/BBL/filament/Generic PLA High Speed @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA High Speed @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL95", + "filament_id": "OFmpMwxS", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/Generic PLA Silk @base.json b/resources/profiles/BBL/filament/Generic PLA Silk @base.json index 4dfe033cb3..41bc486e88 100644 --- a/resources/profiles/BBL/filament/Generic PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Generic PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL96", + "filament_id": "OFesA6rF", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PLA-CF @base.json b/resources/profiles/BBL/filament/Generic PLA-CF @base.json index 8f59df41a8..ffbcaad864 100644 --- a/resources/profiles/BBL/filament/Generic PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL98", + "filament_id": "OFWbdGsC", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PP @base.json b/resources/profiles/BBL/filament/Generic PP @base.json index 14c266404a..94847d67e9 100644 --- a/resources/profiles/BBL/filament/Generic PP @base.json +++ b/resources/profiles/BBL/filament/Generic PP @base.json @@ -3,6 +3,6 @@ "name": "Generic PP @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP97", + "filament_id": "OF1UNk9P", "instantiation": "false" } diff --git a/resources/profiles/BBL/filament/Generic PP-CF @base.json b/resources/profiles/BBL/filament/Generic PP-CF @base.json index 307793d371..e04ee56b6d 100644 --- a/resources/profiles/BBL/filament/Generic PP-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PP-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PP-CF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP96", + "filament_id": "OFXkm8q1", "instantiation": "false", "filament_cost": [ "77.99" diff --git a/resources/profiles/BBL/filament/Generic PP-GF @base.json b/resources/profiles/BBL/filament/Generic PP-GF @base.json index d17fa31d68..5d82e8223a 100644 --- a/resources/profiles/BBL/filament/Generic PP-GF @base.json +++ b/resources/profiles/BBL/filament/Generic PP-GF @base.json @@ -3,7 +3,7 @@ "name": "Generic PP-GF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP95", + "filament_id": "OFsijjtH", "instantiation": "false", "filament_cost": [ "59.99" diff --git a/resources/profiles/BBL/filament/Generic PPA-CF @base.json b/resources/profiles/BBL/filament/Generic PPA-CF @base.json index 6287533414..78ad9bca5e 100644 --- a/resources/profiles/BBL/filament/Generic PPA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN97", + "filament_id": "OF8tPByX", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/BBL/filament/Generic PPA-GF @base.json b/resources/profiles/BBL/filament/Generic PPA-GF @base.json index 6220abbeef..72ff99cd16 100644 --- a/resources/profiles/BBL/filament/Generic PPA-GF @base.json +++ b/resources/profiles/BBL/filament/Generic PPA-GF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPA-GF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN96", + "filament_id": "OF8Tlg47", "instantiation": "false", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/BBL/filament/Generic PPS @base.json b/resources/profiles/BBL/filament/Generic PPS @base.json index 882fea94e0..08ba73cba8 100644 --- a/resources/profiles/BBL/filament/Generic PPS @base.json +++ b/resources/profiles/BBL/filament/Generic PPS @base.json @@ -3,7 +3,7 @@ "name": "Generic PPS @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT97", + "filament_id": "OFq9svOz", "instantiation": "false", "filament_dev_chamber_drying_bed_temperature": [ "90" diff --git a/resources/profiles/BBL/filament/Generic PPS-CF @base.json b/resources/profiles/BBL/filament/Generic PPS-CF @base.json index f003a7b470..76aab2de8b 100644 --- a/resources/profiles/BBL/filament/Generic PPS-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT98", + "filament_id": "OF6rdQ6M", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Generic PVA @base.json b/resources/profiles/BBL/filament/Generic PVA @base.json index ca3dae82a4..4021f07f45 100644 --- a/resources/profiles/BBL/filament/Generic PVA @base.json +++ b/resources/profiles/BBL/filament/Generic PVA @base.json @@ -3,7 +3,7 @@ "name": "Generic PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS99", + "filament_id": "OFDvXujf", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic SBS @base.json b/resources/profiles/BBL/filament/Generic SBS @base.json index 6decbf2213..fbf9b8a403 100644 --- a/resources/profiles/BBL/filament/Generic SBS @base.json +++ b/resources/profiles/BBL/filament/Generic SBS @base.json @@ -3,7 +3,7 @@ "name": "Generic SBS @base", "inherits": "fdm_filament_sbs", "from": "system", - "filament_id": "GFLSBS99", + "filament_id": "OFhQfUQY", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/Generic SBS.json b/resources/profiles/BBL/filament/Generic SBS.json index 2e38a46fde..ffa36a9abb 100644 --- a/resources/profiles/BBL/filament/Generic SBS.json +++ b/resources/profiles/BBL/filament/Generic SBS.json @@ -4,7 +4,7 @@ "inherits": "Generic SBS @base", "from": "system", "setting_id": "BFLSBS99-1", - "filament_id": "BFLSBS99", + "filament_id": "OFhQfUQY", "instantiation": "true", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Generic TPU @base.json b/resources/profiles/BBL/filament/Generic TPU @base.json index 78fe4c1b1a..f2bc7049aa 100644 --- a/resources/profiles/BBL/filament/Generic TPU @base.json +++ b/resources/profiles/BBL/filament/Generic TPU @base.json @@ -3,7 +3,7 @@ "name": "Generic TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99", + "filament_id": "OFgbpcy9", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/BBL/filament/Generic TPU for AMS @base.json b/resources/profiles/BBL/filament/Generic TPU for AMS @base.json index eb42aa3df2..1432bdfbe2 100644 --- a/resources/profiles/BBL/filament/Generic TPU for AMS @base.json +++ b/resources/profiles/BBL/filament/Generic TPU for AMS @base.json @@ -3,7 +3,7 @@ "name": "Generic TPU for AMS @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU98", + "filament_id": "OFmN2lvw", "instantiation": "false", "description": "If you are to print a kind of soft TPU, please don't slice with this profile, and it is only for TPU that has high enough hardness (not less than 55D) and is compatible with the AMS. To get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json b/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json index 91080469cd..b77157064b 100644 --- a/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json +++ b/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Numakers PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFNMK00", + "filament_id": "OFqGRZyH", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json b/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json index 469116c778..bccfb1f17b 100644 --- a/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Matte PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL05", + "filament_id": "OFBw6eEG", "instantiation": "false", "filament_cost": [ "24.52" diff --git a/resources/profiles/BBL/filament/Overture/Overture PLA @base.json b/resources/profiles/BBL/filament/Overture/Overture PLA @base.json index c31f99f8c8..0f302d4798 100644 --- a/resources/profiles/BBL/filament/Overture/Overture PLA @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL04", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_cost": [ "24.15" diff --git a/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json b/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json index 80525e03b2..454c36e7b0 100644 --- a/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT001", + "filament_id": "OFxA1p01", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json index d98490f1d7..a5aa03bf9b 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL52", + "filament_id": "OFX0ycRQ", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json index 368abf5570..674d5acb38 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF10 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL56", + "filament_id": "OFvxIS9g", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json index d0424d164b..823e8a0ff1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL50", + "filament_id": "OFkOviHk", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json index 65fee6a5bb..f28ee154b8 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF20 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json index 6ad501fdfc..607b1c8e00 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL51", + "filament_id": "OFwaYjL6", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json index af2b6d92e1..426e4175db 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF25 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL58", + "filament_id": "OF5B9sUc", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json index bd7d52f415..3765f754f5 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL53", + "filament_id": "OFS2tn6G", "instantiation": "false", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json index dc7194aad0..310a2229d9 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF15 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL59", + "filament_id": "OFcBl0nJ", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json index 365ebb2fd7..2ca2a42d04 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL54", + "filament_id": "OFHWSM21", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json index adcbf5c9ef..d55b7d2daf 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF17 @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL60", + "filament_id": "OFAc0Pr3", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json index 11c846ff78..b459cc68a1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json index f5674437e8..f052304624 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL55", + "filament_id": "OFk8t9mz", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json index da9cdeb43c..fe8eca06cb 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF08 @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL61", + "filament_id": "OFw4WD4T", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json index b79b34db77..e3e21d17a1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json index 284ad94032..5f4c2682db 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json index 5a1bfdd22a..18382eb7a0 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json index 6cc9094d1a..bf84a536a4 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json index c1ded4c198..ab3032ad57 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json index 8c9a74ad88..14a805212e 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json index cf1574fa9c..63680ba1b7 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json index 71dda06b1e..33d880ac08 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json index 6cda256ff4..89ce745162 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json index 3d8f857e56..bd8f5fc0d6 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json index 6af2ad1bbe..c8ef69cf88 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Satin @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json index b21d127b41..94c2cb7c0b 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json index 57ddbd09b3..8622a109f2 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json index 322f91be2b..d0d6f6b057 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json index 7c7e5eedb7..ac8842d912 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json index 5ab8d5b81c..986b46fd5d 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json index 8e1ec42a79..11be66397d 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB60", + "filament_id": "OFOvv91M", "instantiation": "false", "filament_cost": [ "26.9" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json index 88e453e0e5..026efbfb61 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB61", + "filament_id": "OFvrXuV7", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json index 18f38f0c68..92739d13bb 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite CosPLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL62", + "filament_id": "OFJgijky", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json index 87e9a1194a..365f5f1460 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json index cbfe608b4e..55ea664946 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json index 9480b33392..90996083f1 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL63", + "filament_id": "OFvyB0Bz", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json index ab4b717dbb..3a70d3a83f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL64", + "filament_id": "OF5umxxT", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json index a6bb2746c1..14131c0348 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL65", + "filament_id": "OFBoSWxb", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json index 5a0ec60465..b9fc01a700 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL66", + "filament_id": "OFitS8al", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json index bf2867a702..93c6cf8c9f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json index ecc73602c3..3c8a79ed3f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL67", + "filament_id": "OFIxOuOu", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json index f5f9c89720..9a6155e283 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL68", + "filament_id": "OFy02QHU", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json index e844afc545..3b13c5b55c 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json index 2b64adc51c..ea65b41ec4 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL69", + "filament_id": "OFxe4rXr", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json index 15fccef9e3..1d322a6c3e 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL70", + "filament_id": "OFEjbwqG", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json index 22b1a0d5ce..94ab2b2fd9 100644 --- a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json index 55173547e9..585a6dd554 100644 --- a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "filament_cost": [ "32.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json index 099f90ce9c..d2f34323a0 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json index 523468391e..6e3eaf356e 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json index f99bbc84bf..f3b92cdb2f 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index 47f103af84..d2b1087f28 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json index ffe454c74f..c46fb9affc 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json index e83ae1a411..22e7994783 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json index 8cc3cd97a7..e13c06ceb8 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json index 2889bc0a39..ecc4aa62f4 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @base", "from": "system", "setting_id": "GF_ANRA_00", - "filament_id": "GF_ANRA", + "filament_id": "OFzk5oAo", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json index 9da0cc2b6e..3d4fbe9c88 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANAF_00", - "filament_id": "GF_ANAF", + "filament_id": "OFSw6Mor", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json index 037ae82eed..5486b65d44 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANAD_00", - "filament_id": "GF_ANAD", + "filament_id": "OFWK0Y9A", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json b/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json index 3b8f50c799..1881e454f5 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @base", "from": "system", "setting_id": "GF_ANAX_00", - "filament_id": "GF_ANAX", + "filament_id": "OFBsbMMF", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json index dc5e815df5..e0696d14fe 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANLA_00", - "filament_id": "GF_ANLA", + "filament_id": "OF1ID4N1", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json b/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json index e1e67fbb71..d64bb0629e 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json @@ -4,7 +4,7 @@ "inherits": "Generic PC @base", "from": "system", "setting_id": "GF_ANPBX_00", - "filament_id": "GF_ANPBX", + "filament_id": "OFhN09f0", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json index 288368dd07..6a4af4f908 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPE_00", - "filament_id": "GF_ANPE", + "filament_id": "OFHHwrd1", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json index 060ffe6b56..ff647879dc 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANEG_00", - "filament_id": "GF_ANEG", + "filament_id": "OFUtiVRn", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json index c83d353302..fdbaa361f2 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANGE_00", - "filament_id": "GF_ANGE", + "filament_id": "OFZGrQTU", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json index 96aec4f471..12849a851d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPF_00", - "filament_id": "GF_ANPF", + "filament_id": "OF0EYBWQ", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json index a73d5ae48a..bdbecc7722 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPM_00", - "filament_id": "GF_ANPM", + "filament_id": "OFU5JPDy", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json index 1c4f092d54..a466f88b0a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANRM_00", - "filament_id": "GF_ANRM", + "filament_id": "OFqTwtXM", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json index 927ef1ca6e..a5c78fe215 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @base", "from": "system", "setting_id": "GF_ANRX_00", - "filament_id": "GF_ANRX", + "filament_id": "OFAcJkl1", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json index d008217fcf..f32705ba65 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANEP_00", - "filament_id": "GF_ANEP", + "filament_id": "OF71b7qO", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json index 51b2924577..fa2c0e9ae0 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANPL_00", - "filament_id": "GF_ANPL", + "filament_id": "OFZJft47", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json index 5ab0cc036a..1dc1796d4b 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANHTP_00", - "filament_id": "GF_ANHTP", + "filament_id": "OFVDWuxl", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json index caa3fb10ed..f64767d1e3 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA Silk @base", "from": "system", "setting_id": "GF_ANPS_00", - "filament_id": "GF_ANPS", + "filament_id": "OFOQCfVa", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json index 97c7026910..1bbfb305b2 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANTE_00", - "filament_id": "GF_ANTE", + "filament_id": "OFRFhdqy", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json index faa711ee14..99ec158160 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANPLW_00", - "filament_id": "GF_ANPLW", + "filament_id": "OFN8QBhu", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json index 3ffec96061..ffe91af773 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA High Speed @base", "from": "system", "setting_id": "GF_ANXPH_00", - "filament_id": "GF_ANXPH", + "filament_id": "OFLjDYxH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json index b8016af159..073b96a224 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANXP_00", - "filament_id": "GF_ANXP", + "filament_id": "OFtdVZpV", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json index ad47884179..b6a2695235 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANRPL_00", - "filament_id": "GF_ANRPL", + "filament_id": "OFnBvPhb", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json index 608be46906..7910e3c772 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA-CF @base", "from": "system", "setting_id": "GF_ANPCF_00", - "filament_id": "GF_ANPCF", + "filament_id": "OFcpa50Z", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json index 8ca7e5e5ab..13604f5832 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANPV_00", - "filament_id": "GF_ANPV", + "filament_id": "OFQ5TxZ2", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json index 05c7af8947..d8a9ca5ca3 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANEF_00", - "filament_id": "GF_ANEF", + "filament_id": "OFO6GMJ3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json index e6236ed79a..f4d1beac7d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANTA_00", - "filament_id": "GF_ANTA", + "filament_id": "OFvcIGee", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json index 6b971b7d5c..61d6100a71 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANTM_00", - "filament_id": "GF_ANTM", + "filament_id": "OFyJjkek", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json b/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json index 544608b91a..6820e79489 100644 --- a/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json +++ b/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL03", + "filament_id": "OFqINlYj", "instantiation": "false", "filament_cost": [ "22.99" diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 9a4b4a2abd..cf4d13c987 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -135,7 +135,6 @@ "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", "Artillery/Artillery TPU", "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "BBL/Generic SBS", "BBL/addnorth ABS rABS", "BBL/addnorth PA Adura", "BBL/addnorth PA Adura FDA", @@ -877,637 +876,18 @@ "Z-Bolt/Generic ABS HT @Z-Bolt Base" ], "ids": { - "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" - ], - "BTUB00": [ - "BBL/BETA TPU 90A" - ], - "BTUB01": [ - "BBL/BETA TPU Matte" - ], - "BTUB02": [ - "BBL/BETA TPU 95A" - ], - "BTUB03": [ - "BBL/BETA TPU 98A" - ], - "GFA00": [ - "BBL/Bambu PLA Basic" - ], - "GFA01": [ - "BBL/Bambu PLA Matte" - ], - "GFA02": [ - "BBL/Bambu PLA Metal" - ], - "GFA05": [ - "BBL/Bambu PLA Silk" - ], - "GFA06": [ - "BBL/Bambu PLA Silk+" - ], - "GFA07": [ - "BBL/Bambu PLA Marble" - ], - "GFA08": [ - "BBL/Bambu PLA Sparkle" - ], - "GFA09": [ - "BBL/Bambu 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" - ], - "GFA17": [ - "BBL/Bambu PLA Translucent" - ], - "GFA18": [ - "BBL/Bambu PLA Lite" - ], - "GFA19": [ - "BBL/Bambu PLA Pure" - ], - "GFA50": [ - "BBL/Bambu PLA-CF" - ], - "GFB00": [ - "BBL/Bambu ABS" - ], - "GFB01": [ - "BBL/Bambu 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": [ - "BBL/Generic ASA" - ], - "GFB99": [ - "BBL/Generic ABS" - ], - "GFC00": [ - "BBL/Bambu PC" - ], - "GFC01": [ - "BBL/Bambu PC FR" - ], - "GFC99": [ - "BBL/Generic PC" - ], - "GFG00": [ - "BBL/Bambu PETG Basic" - ], - "GFG01": [ - "BBL/Bambu PETG Translucent" - ], - "GFG02": [ - "BBL/Bambu PETG HF" - ], - "GFG50": [ - "BBL/Bambu PETG-CF" - ], - "GFG60": [ - "BBL/PolyLite PETG" - ], - "GFG96": [ - "BBL/Generic PETG HF" - ], - "GFG97": [ - "BBL/Generic PCTG" - ], - "GFG98": [ - "BBL/Generic PETG-CF" - ], - "GFG99": [ - "BBL/Generic PETG" - ], - "GFL00": [ - "BBL/PolyLite PLA" - ], - "GFL01": [ - "BBL/PolyTerra PLA" - ], - "GFL03": [ - "BBL/eSUN PLA+" - ], - "GFL04": [ - "BBL/Overture PLA" - ], - "GFL05": [ - "BBL/Overture Matte PLA" - ], - "GFL06": [ - "BBL/Fiberon PETG-ESD" - ], - "GFL50": [ - "BBL/Fiberon PA6-CF" - ], - "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" - ], - "GFL57": [ - "BBL/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" - ], - "GFL63": [ - "BBL/PolyLite PLA Galaxy" - ], - "GFL64": [ - "BBL/PolyLite PLA Glow" - ], - "GFL65": [ - "BBL/PolyLite PLA Luminous" - ], - "GFL66": [ - "BBL/PolyLite PLA Neon" - ], - "GFL67": [ - "BBL/PolyLite PLA Starlight" - ], - "GFL68": [ - "BBL/PolyLite PLA Translucent" - ], - "GFL69": [ - "BBL/PolyTerra PLA Marble" - ], - "GFL70": [ - "BBL/PolyTerra PLA+" - ], - "GFL95": [ - "BBL/Generic PLA High Speed" - ], - "GFL96": [ - "BBL/Generic PLA Silk" - ], - "GFL98": [ - "BBL/Generic PLA-CF" - ], - "GFL99": [ - "BBL/Generic PLA" - ], - "GFLSBS99": [], - "GFN03": [ - "BBL/Bambu PA-CF" - ], - "GFN04": [ - "BBL/Bambu PAHT-CF" - ], - "GFN05": [ - "BBL/Bambu PA6-CF" - ], - "GFN06": [ - "BBL/Bambu PPA-CF" - ], - "GFN08": [ - "BBL/Bambu PA6-GF" - ], - "GFN96": [ - "BBL/Generic PPA-GF" - ], - "GFN97": [ - "BBL/Generic PPA-CF" - ], - "GFN98": [ - "BBL/Generic PA-CF" - ], - "GFN99": [ - "BBL/Generic PA" - ], - "GFNMK00": [ - "BBL/Numakers PLA+" - ], - "GFOT001": [ - "BBL/Overture PLA Pro" - ], - "GFP95": [ - "BBL/Generic PP-GF" - ], - "GFP96": [ - "BBL/Generic PP-CF" - ], - "GFP97": [ - "BBL/Generic PP" - ], - "GFP98": [ - "BBL/Generic PE-CF" - ], - "GFP99": [ - "BBL/Generic PE" - ], - "GFPM001": [ - "BBL/Panchroma PLA" - ], - "GFPM002": [ - "BBL/Panchroma PLA Matte" - ], - "GFPM003": [ - "BBL/Panchroma PLA Marble" - ], - "GFPM004": [ - "BBL/Panchroma PLA Silk" - ], - "GFPM005": [ - "BBL/Panchroma PLA Satin" - ], - "GFPM006": [ - "BBL/Panchroma PLA Translucent" - ], - "GFPM007": [ - "BBL/Panchroma PLA Galaxy" - ], - "GFPM008": [ - "BBL/Panchroma PLA Celestial" - ], - "GFPM009": [ - "BBL/Panchroma PLA Starlight" - ], - "GFPM010": [ - "BBL/Panchroma PLA Glow" - ], - "GFPM011": [ - "BBL/Panchroma PLA Luminous" - ], - "GFPM012": [ - "BBL/Panchroma PLA Metallic" - ], - "GFPM013": [ - "BBL/Panchroma PLA Neon" - ], - "GFPM014": [ - "BBL/Panchroma PLA UV Shift" - ], - "GFPM015": [ - "BBL/Panchroma PLA Temp Shift" - ], - "GFPM016": [ - "BBL/Panchroma CoPE" - ], - "GFPM017": [ - "BBL/Polymaker HT-PLA" - ], - "GFPM018": [ - "BBL/Polymaker HT-PLA-GF" - ], - "GFPM019": [ - "BBL/PolyLite PLA Pro" - ], - "GFR00": [ - "BBL/FusRock ABS-GF" - ], - "GFR98": [ - "BBL/Generic PHA" - ], - "GFR99": [ - "BBL/Generic EVA" - ], - "GFS00": [ - "BBL/Bambu Support W" - ], - "GFS01": [ - "BBL/Bambu Support G" - ], - "GFS02": [ - "BBL/Bambu Support For PLA" - ], - "GFS03": [ - "BBL/Bambu Support For PA/PET" - ], - "GFS04": [ - "BBL/Bambu PVA" - ], - "GFS05": [ - "BBL/Bambu Support For PLA/PETG" - ], - "GFS06": [ - "BBL/Bambu Support for ABS" - ], - "GFS97": [ - "BBL/Generic BVOH" - ], - "GFS98": [ - "BBL/Generic HIPS" - ], - "GFS99": [ - "BBL/Generic PVA" - ], - "GFSNL02": [ - "BBL/SUNLU PLA Matte" - ], - "GFSNL03": [ - "BBL/SUNLU PLA+" - ], - "GFSNL04": [ - "BBL/SUNLU PLA+ 2.0" - ], - "GFSNL05": [ - "BBL/SUNLU Silk PLA+" - ], - "GFSNL06": [ - "BBL/SUNLU PLA Marble" - ], - "GFSNL07": [ - "BBL/SUNLU Wood PLA" - ], - "GFSNL08": [ - "BBL/SUNLU PETG" - ], - "GFT01": [ - "BBL/Bambu PET-CF" - ], - "GFT02": [ - "BBL/Bambu PPS-CF" - ], - "GFT97": [ - "BBL/Generic PPS" - ], - "GFT98": [ - "BBL/Generic PPS-CF" - ], - "GFU00": [ - "BBL/Bambu TPU 95A HF" - ], - "GFU01": [ - "BBL/Bambu 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": [ - "BBL/Generic TPU" - ], - "GF_ANAD": [ - "BBL/addnorth PA Adura" - ], - "GF_ANAF": [ - "BBL/addnorth PA Adura FDA" - ], - "GF_ANAX": [ - "BBL/addnorth PA-CF Adura X" - ], - "GF_ANEF": [ - "BBL/addnorth TPU EasyFlex" - ], - "GF_ANEG": [ - "BBL/addnorth PETG ESD" - ], - "GF_ANEP": [ - "BBL/addnorth PLA E-PLA" - ], - "GF_ANGE": [ - "BBL/addnorth PETG Economy" - ], - "GF_ANHTP": [ - "BBL/addnorth PLA HT-PLA PRO Matte" - ], - "GF_ANLA": [ - "BBL/addnorth PA6 Addlantis" - ], - "GF_ANPBX": [ - "BBL/addnorth PC BLend HT LCF" - ], - "GF_ANPCF": [ - "BBL/addnorth PLA-CF Carbon Fiber" - ], - "GF_ANPE": [ - "BBL/addnorth PETG Base" - ], - "GF_ANPF": [ - "BBL/addnorth PETG Flame v0" - ], - "GF_ANPL": [ - "BBL/addnorth PLA Economy" - ], - "GF_ANPLW": [ - "BBL/addnorth PLA Wood" - ], - "GF_ANPM": [ - "BBL/addnorth PETG PRO Matte" - ], - "GF_ANPS": [ - "BBL/addnorth PLA Premium Silk" - ], - "GF_ANPV": [ - "BBL/addnorth PVDF Adamant S1" - ], - "GF_ANRA": [ - "BBL/addnorth ABS rABS" - ], - "GF_ANRM": [ - "BBL/addnorth PETG rPETG Matte" - ], - "GF_ANRPL": [ - "BBL/addnorth PLA rPLA RE-ADD" - ], - "GF_ANRX": [ - "BBL/addnorth PETG-CF Rigid X" - ], - "GF_ANTA": [ - "BBL/addnorth TPU Pro Matte 85A" - ], - "GF_ANTE": [ - "BBL/addnorth PLA Textura" - ], - "GF_ANTM": [ - "BBL/addnorth TPU Pro Matte 95A" - ], - "GF_ANXP": [ - "BBL/addnorth PLA X-PLA" - ], - "GF_ANXPH": [ - "BBL/addnorth PLA X-PLA High Speed" - ], "OF02UAVh": [ "Creality/Soleyin Ultra PLA" ], + "OF03RK6r": [ + "BBL/BETA PLA Metal" + ], "OF0AquDh": [ "Flashforge/FusRock S-Multi" ], + "OF0EYBWQ": [ + "BBL/addnorth PETG Flame v0" + ], "OF0FfcAG": [ "Anycubic/Anycubic TPU for ACE" ], @@ -1519,6 +899,7 @@ "Artillery/Artillery PLA Tough" ], "OF0UJcb6": [ + "BBL/PolyLite PETG", "OrcaFilamentLibrary/PolyLite PETG", "Snapmaker/PolyLite PETG" ], @@ -1535,6 +916,7 @@ "InfiMech/InfiMech ABS" ], "OF0gGRWk": [ + "BBL/Panchroma PLA Glow", "OrcaFilamentLibrary/Panchroma PLA Glow", "Snapmaker/Panchroma PLA Glow" ], @@ -1543,6 +925,7 @@ "OrcaFilamentLibrary/Elegoo PAHT-CF" ], "OF0kCNDK": [ + "BBL/Panchroma PLA Luminous", "OrcaFilamentLibrary/Panchroma PLA Luminous", "Snapmaker/Panchroma PLA Luminous" ], @@ -1557,6 +940,7 @@ "Qidi/QIDI ABS Rapido 0.8 nozzle" ], "OF0wBGNx": [ + "BBL/Bambu ASA-CF", "OrcaFilamentLibrary/Bambu ASA-CF" ], "OF0wz84w": [ @@ -1568,7 +952,11 @@ "OF112FvY": [ "Anycubic/Generic PETG Basic" ], + "OF1ID4N1": [ + "BBL/addnorth PA6 Addlantis" + ], "OF1N1qMK": [ + "BBL/Panchroma PLA UV Shift", "OrcaFilamentLibrary/Panchroma PLA UV Shift", "Snapmaker/Panchroma PLA UV Shift" ], @@ -1577,6 +965,7 @@ "OrcaFilamentLibrary/Overture Easy PLA" ], "OF1UNk9P": [ + "BBL/Generic PP", "Creality/Generic PP", "OrcaFilamentLibrary/Generic PP", "Tiertime/Generic PP" @@ -1604,6 +993,7 @@ "OrcaFilamentLibrary/FilAr PLA-mate Violeta" ], "OF2GCW1l": [ + "BBL/SUNLU PETG", "Flashforge/SUNLU PETG", "OrcaFilamentLibrary/SUNLU PETG", "Sovol/SUNLU PETG" @@ -1612,6 +1002,7 @@ "Qidi/QIDI PLA Silk" ], "OF2VFe4J": [ + "BBL/Bambu PAHT-CF", "OrcaFilamentLibrary/Bambu PAHT-CF" ], "OF2Z1nT5": [ @@ -1629,6 +1020,9 @@ "Elegoo/Elegoo Rapid TPU 95A", "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" ], + "OF342jVN": [ + "BBL/Bambu PLA Tough+" + ], "OF3F63OE": [ "re3D/re3D PETG" ], @@ -1638,6 +1032,9 @@ "OF3OMgrI": [ "Creality/CR-Silk" ], + "OF3PDEw3": [ + "BBL/BETA PLA High Speed" + ], "OF3WQaKK": [ "Creality/CR-PETG" ], @@ -1676,13 +1073,24 @@ "OF4Nhggz": [ "Artillery/Artillery PLA Basic+" ], - "OF4RvVuU": [], + "OF4PKvem": [ + "BBL/BETA PLA Fluorescence" + ], + "OF4QZANi": [ + "BBL/BETA TPU Matte" + ], + "OF4RvVuU": [ + "BBL/Bambu PPS-CF" + ], "OF4S3To3": [ "Qidi/QIDI PETG Rapido" ], "OF4WB37S": [ "Snapmaker/Snapmaker PETG" ], + "OF4XTfoI": [ + "BBL/BETA PETG Marble" + ], "OF4f8vVp": [ "WonderMaker/WonderMaker PET-CF" ], @@ -1701,6 +1109,7 @@ "Elegoo/Generic ASA-CF" ], "OF54B0S0": [ + "BBL/Bambu PPA-CF", "OrcaFilamentLibrary/Bambu PPA-CF" ], "OF54SvEe": [ @@ -1709,15 +1118,25 @@ "OF55jHAJ": [ "Prusa/Generic ABS HF" ], + "OF5B9sUc": [ + "BBL/Fiberon PA6-GF25" + ], "OF5BN24W": [ "Flashforge/Flashforge PPA-GF" ], + "OF5BXhHF": [ + "BBL/BETA PLA High Temp" + ], "OF5CgdDq": [ + "BBL/PolyLite PLA", "OrcaArena/PolyLite PLA", "OrcaFilamentLibrary/PolyLite PLA", "Qidi/PolyLite PLA", "Snapmaker/PolyLite PLA" ], + "OF5LAnla": [ + "BBL/BETA PLA Gradient" + ], "OF5NqBfC": [ "Wanhao France/YUMI PETG" ], @@ -1754,6 +1173,7 @@ "Ratrig/Generic TPU BigNozzle" ], "OF5umxxT": [ + "BBL/PolyLite PLA Glow", "Snapmaker/PolyLite PLA Glow" ], "OF5vgi2G": [ @@ -1785,23 +1205,34 @@ "Snapmaker/Snapmaker Breakaway Support For PLA", "Snapmaker/Snapmaker J1 PVA" ], + "OF6Yn69v": [ + "BBL/BETA TPU 90A" + ], "OF6kj4jI": [ "iQ/Fiberthree PACF Pro P2" ], "OF6qAuyi": [ "Flashforge/Flashforge PLA Matte" ], + "OF6qw3Wb": [ + "BBL/BETA PAHT-CF" + ], "OF6rdQ6M": [ + "BBL/Generic PPS-CF", "Creality/Generic PPS-CF", "Tiertime/Generic PPS-CF" ], "OF70zbGS": [ "Creality/Hyper L-W PLA" ], + "OF71b7qO": [ + "BBL/addnorth PLA E-PLA" + ], "OF72YYTd": [ "Snapmaker/Snapmaker ABS" ], "OF74KeQR": [ + "BBL/Generic PHA", "OrcaFilamentLibrary/Generic PHA", "Tiertime/Generic PHA" ], @@ -1821,6 +1252,7 @@ "Anycubic/Anycubic PLA Translucent" ], "OF7lOgYF": [ + "BBL/Generic PETG HF", "OrcaFilamentLibrary/Generic PETG HF", "Prusa/Generic PETG HF" ], @@ -1851,7 +1283,11 @@ "OF8O09RG": [ "Flashforge/Flashforge HS PLA Burnt Ti" ], + "OF8QdQwS": [ + "BBL/BETA PLA Silk+" + ], "OF8Tlg47": [ + "BBL/Generic PPA-GF", "OrcaFilamentLibrary/Generic PPA-GF", "Tiertime/Generic PPA-GF" ], @@ -1871,6 +1307,7 @@ "Eryone/Eryone PETG" ], "OF8tPByX": [ + "BBL/Generic PPA-CF", "OrcaFilamentLibrary/Generic PPA-CF", "Tiertime/Generic PPA-CF" ], @@ -1889,6 +1326,7 @@ "Afinia/Afinia PLA" ], "OF9OlTWH": [ + "BBL/Bambu PLA Marble", "OrcaFilamentLibrary/Bambu PLA Marble" ], "OF9PELEb": [ @@ -1924,10 +1362,17 @@ "OFAZllAN": [ "Artillery/Artillery PLA-CF" ], + "OFAc0Pr3": [ + "BBL/Fiberon PET-CF17" + ], + "OFAcJkl1": [ + "BBL/addnorth PETG-CF Rigid X" + ], "OFAebKg8": [ "Flashforge/Flashforge PLA Metal" ], "OFAnyRUI": [ + "BBL/Bambu Support For PLA", "OrcaFilamentLibrary/Bambu Support For PLA" ], "OFAt6ec0": [ @@ -1946,6 +1391,7 @@ "Creality/Soleyin Basic PETG" ], "OFBSW57R": [ + "BBL/Bambu PLA Aero", "OrcaFilamentLibrary/Bambu PLA Aero" ], "OFBUIlZ7": [ @@ -1956,9 +1402,14 @@ "Snapmaker/Snapmaker Dual PETG" ], "OFBoSWxb": [ + "BBL/PolyLite PLA Luminous", "Snapmaker/PolyLite PLA Luminous" ], + "OFBsbMMF": [ + "BBL/addnorth PA-CF Adura X" + ], "OFBw6eEG": [ + "BBL/Overture Matte PLA", "OrcaFilamentLibrary/Overture Matte PLA" ], "OFC1PzXz": [ @@ -1968,14 +1419,17 @@ "RH3D/Generic PCCF" ], "OFC78WGQ": [ + "BBL/Panchroma PLA Starlight", "OrcaFilamentLibrary/Panchroma PLA Starlight", "Snapmaker/Panchroma PLA Starlight" ], "OFCD8qiU": [ + "BBL/Generic EVA", "OrcaFilamentLibrary/Generic EVA", "Tiertime/Generic EVA" ], "OFCIUsWh": [ + "BBL/Panchroma PLA Translucent", "OrcaFilamentLibrary/Panchroma PLA Translucent", "Snapmaker/Panchroma PLA Translucent" ], @@ -2024,6 +1478,7 @@ "OrcaFilamentLibrary/eSUN PLA-Matte" ], "OFDGigEI": [ + "BBL/Bambu PLA Dynamic", "OrcaFilamentLibrary/Bambu PLA Dynamic" ], "OFDIrhbu": [ @@ -2046,6 +1501,7 @@ "Anker/Generic PLA", "Anycubic/Generic PLA", "Artillery/Generic PLA", + "BBL/Generic PLA", "Blocks/Generic PLA", "CONSTRUCT3D/Generic PLA", "Chuanying/Generic PLA", @@ -2099,6 +1555,7 @@ "OFDvXujf": [ "Anker/Generic PVA", "Anycubic/Generic PVA", + "BBL/Generic PVA", "Blocks/Generic PVA", "Chuanying/Generic PVA", "Creality/Generic PVA", @@ -2121,6 +1578,7 @@ "Prusa/Generic PVA HF" ], "OFDxfPgH": [ + "BBL/Bambu PLA Sparkle", "OrcaFilamentLibrary/Bambu PLA Sparkle" ], "OFDxxTpW": [ @@ -2131,6 +1589,7 @@ "OrcaFilamentLibrary/COEX TPU 60A" ], "OFEGNJD4": [ + "BBL/Bambu PLA Silk", "OrcaFilamentLibrary/Bambu PLA Silk" ], "OFEOnBj6": [ @@ -2148,6 +1607,7 @@ ], "OFEabreg": [ "Anycubic/Fiberon PA6-CF20", + "BBL/Fiberon PA6-CF20", "Snapmaker/Fiberon PA6-CF20" ], "OFEbIx49": [ @@ -2158,9 +1618,11 @@ "Cubicon/Cubicon PC" ], "OFEjbwqG": [ + "BBL/PolyTerra PLA+", "Snapmaker/PolyTerra PLA+" ], "OFEkPBwx": [ + "BBL/Bambu PLA Glow", "OrcaFilamentLibrary/Bambu PLA Glow" ], "OFEmsric": [ @@ -2170,6 +1632,7 @@ "Peopoly/Peopoly Lancer PLA-C" ], "OFEswT5W": [ + "BBL/Bambu PLA-CF", "OrcaFilamentLibrary/Bambu PLA-CF" ], "OFEvEfw5": [ @@ -2181,7 +1644,11 @@ "OFF3cuzT": [ "Creality/Generic TPU 64D" ], + "OFF5o7b2": [ + "BBL/BETA PLA Youth" + ], "OFF9OKoY": [ + "BBL/PolyLite PLA Pro", "OrcaFilamentLibrary/PolyLite PLA Pro", "Snapmaker/PolyLite PLA Pro" ], @@ -2195,6 +1662,7 @@ "Flashforge/Flashforge ASA Basic" ], "OFFNYwWR": [ + "BBL/Bambu PA-CF", "OrcaFilamentLibrary/Bambu PA-CF" ], "OFFP4ORR": [ @@ -2209,11 +1677,19 @@ "OFFbQscs": [ "Creality/eSUN PETG-Basic" ], + "OFFbSnCD": [ + "BBL/Bambu PLA Translucent" + ], + "OFFfJ09N": [ + "BBL/BETA PETG Glow" + ], "OFFkCLBl": [ + "BBL/Panchroma PLA Galaxy", "OrcaFilamentLibrary/Panchroma PLA Galaxy", "Snapmaker/Panchroma PLA Galaxy" ], "OFFvzqcd": [ + "BBL/Bambu PETG Basic", "OrcaFilamentLibrary/Bambu PETG Basic" ], "OFFwJWea": [ @@ -2235,6 +1711,12 @@ "OFGVwfK0": [ "OrcaFilamentLibrary/FilAr PLA-mate Gris" ], + "OFGVxj2A": [ + "BBL/BETA PLA Wood" + ], + "OFGc9l16": [ + "BBL/BETA PLA Glow" + ], "OFGcLA5R": [ "OrcaFilamentLibrary/FilAr PLA-mate Beige" ], @@ -2272,10 +1754,15 @@ "OFHAccHz": [ "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" ], + "OFHHwrd1": [ + "BBL/addnorth PETG Base" + ], "OFHWSM21": [ + "BBL/Fiberon PET-CF", "OrcaFilamentLibrary/Fiberon PET-CF" ], "OFHa48An": [ + "BBL/Bambu PET-CF", "OrcaFilamentLibrary/Bambu PET-CF" ], "OFHaYaB1": [ @@ -2292,15 +1779,22 @@ "Snapmaker/Polymaker PLA Pro Metallic" ], "OFHmPYRy": [ + "BBL/SUNLU PLA+ 2.0", "Flashforge/SUNLU PLA+ 2.0", "OrcaFilamentLibrary/SUNLU PLA+ 2.0" ], + "OFI2MKy7": [ + "BBL/BETA PEBA 90A" + ], "OFI6WZpn": [ "OrcaArena/Arena Support W" ], "OFIBXa0k": [ "OrcaFilamentLibrary/FilAr PLA-mate Rojo" ], + "OFIBbYO5": [ + "BBL/Bambu TPU for AMS" + ], "OFIE3vOf": [ "Anycubic/Anycubic PLA Matte" ], @@ -2332,12 +1826,14 @@ "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" ], "OFIfnzxC": [ + "BBL/Bambu Support For PLA/PETG", "OrcaFilamentLibrary/Bambu Support For PLA/PETG" ], "OFIgbDHq": [ "Anycubic/Anycubic PLA Luminous" ], "OFIxOuOu": [ + "BBL/PolyLite PLA Starlight", "Snapmaker/PolyLite PLA Starlight" ], "OFJ3F2jm": [ @@ -2368,11 +1864,15 @@ "Flashforge/Generic TPU-90A" ], "OFJgijky": [ + "BBL/PolyLite CosPLA", "Snapmaker/PolyLite CosPLA" ], "OFJhT2fd": [ "Snapmaker/Snapmaker Dual ABS" ], + "OFJnEaCp": [ + "BBL/BETA PLA Transparent" + ], "OFJrvXth": [ "Snapmaker/Snapmaker ABS Benchy" ], @@ -2385,6 +1885,9 @@ "OFJxSqO4": [ "Wanhao France/YUMI PLA Direct Drive" ], + "OFK7830e": [ + "BBL/BETA TPU 95A" + ], "OFK8XHPn": [ "Qidi/Overture ABS" ], @@ -2409,6 +1912,9 @@ "OFKWWgyp": [ "OrcaFilamentLibrary/FilAr PLA Carpincho" ], + "OFKYBAWe": [ + "BBL/BETA PLA Marble" + ], "OFKZ9skj": [ "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" ], @@ -2422,12 +1928,17 @@ "Qidi/QIDI PAHT-CF" ], "OFKhMPeX": [ + "BBL/Bambu PC", "OrcaFilamentLibrary/Bambu PC" ], "OFKiSMWR": [ + "BBL/Panchroma PLA Marble", "OrcaFilamentLibrary/Panchroma PLA Marble", "Snapmaker/Panchroma PLA Marble" ], + "OFKyNkQz": [ + "BBL/BETA PETG UV Color Change" + ], "OFL9aRjN": [ "Snapmaker/Snapmaker PETG HF" ], @@ -2438,6 +1949,7 @@ "Flashforge/Flashforge PPA-CF" ], "OFLJ8S6I": [ + "BBL/SUNLU Wood PLA", "Flashforge/SUNLU Wood PLA", "OrcaFilamentLibrary/SUNLU Wood PLA" ], @@ -2449,6 +1961,7 @@ "Anker/Generic ASA", "Anycubic/Generic ASA", "Artillery/Generic ASA", + "BBL/Generic ASA", "Blocks/Generic ASA", "Chuanying/Generic ASA", "Creality/Generic ASA", @@ -2479,6 +1992,7 @@ "OFLakOUI": [ "Anker/Generic PC", "Anycubic/Generic PC", + "BBL/Generic PC", "Blocks/Generic PC", "Creality/Generic PC", "Custom/Generic PC", @@ -2512,6 +2026,12 @@ "OFLgwqp2": [ "Creality/Hyper PETG-GF" ], + "OFLjDYxH": [ + "BBL/addnorth PLA X-PLA High Speed" + ], + "OFLqgSuX": [ + "BBL/BETA PLA-CF" + ], "OFLzx3J4": [ "Creality/Hyper Marble" ], @@ -2538,9 +2058,11 @@ "Artillery/Artillery PA" ], "OFMTK0UC": [ + "BBL/Bambu Support For PA/PET", "OrcaFilamentLibrary/Bambu Support For PA/PET" ], "OFMUWNkp": [ + "BBL/SUNLU PLA+", "Flashforge/SUNLU PLA+", "OrcaFilamentLibrary/SUNLU PLA+" ], @@ -2549,6 +2071,7 @@ "OrcaFilamentLibrary/Overture Rock PLA" ], "OFMjtqTC": [ + "BBL/Bambu PLA Wood", "OrcaFilamentLibrary/Bambu PLA Wood" ], "OFMkAW6r": [ @@ -2563,6 +2086,12 @@ "OFMuXBmO": [ "OrcaFilamentLibrary/Elas PLA Basic" ], + "OFMzRg65": [ + "BBL/BETA PLA PRO" + ], + "OFN8QBhu": [ + "BBL/addnorth PLA Wood" + ], "OFN9fefN": [ "Cubicon/Cubicon ABS-A100" ], @@ -2587,7 +2116,11 @@ "OFNjku08": [ "CONSTRUCT3D/Generic High Flow PETG" ], + "OFNk8AvA": [ + "BBL/BETA PETG Gradient" + ], "OFNk8bxk": [ + "BBL/Bambu PA6-GF", "OrcaFilamentLibrary/Bambu PA6-GF" ], "OFNstOna": [ @@ -2597,6 +2130,7 @@ "Creality/Hyper PPA-CF" ], "OFO1GEq6": [ + "BBL/Panchroma PLA Neon", "OrcaFilamentLibrary/Panchroma PLA Neon", "Snapmaker/Panchroma PLA Neon" ], @@ -2604,6 +2138,9 @@ "Chuanying/Generic PETG-CF10", "Flashforge/Generic PETG-CF10" ], + "OFO6GMJ3": [ + "BBL/addnorth TPU EasyFlex" + ], "OFOABq7t": [ "BBL/AliZ PETG-Metal", "OrcaFilamentLibrary/AliZ PETG-Metal" @@ -2620,6 +2157,9 @@ "OFOPU1xv": [ "Snapmaker/Snapmaker PLA Full Spectrum" ], + "OFOQCfVa": [ + "BBL/addnorth PLA Premium Silk" + ], "OFObG16Q": [ "InfiMech/InfiMech PLA Basic" ], @@ -2640,6 +2180,7 @@ "Qidi/QIDI ABS Rapido 0.2 nozzle" ], "OFOvv91M": [ + "BBL/PolyLite ABS", "OrcaFilamentLibrary/PolyLite ABS", "Qidi/PolyLite ABS" ], @@ -2668,15 +2209,18 @@ "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" ], "OFPkCJKE": [ + "BBL/Panchroma PLA Satin", "Creality/Panchroma PLA Satin", "OrcaFilamentLibrary/Panchroma PLA Satin", "Snapmaker/Panchroma PLA Satin" ], "OFPklMI1": [ + "BBL/Generic PE", "OrcaFilamentLibrary/Generic PE", "Tiertime/Generic PE" ], "OFPoyiFs": [ + "BBL/Polymaker HT-PLA", "OrcaFilamentLibrary/Polymaker HT-PLA", "Snapmaker/Polymaker HT-PLA" ], @@ -2690,11 +2234,15 @@ "Eryone/Eryone ABS-CF" ], "OFQ3e56w": [ + "BBL/Bambu PLA Galaxy", "OrcaFilamentLibrary/Bambu PLA Galaxy" ], "OFQ40XeN": [ "Qidi/QIDI PETG Tough" ], + "OFQ5TxZ2": [ + "BBL/addnorth PVDF Adamant S1" + ], "OFQEGL7z": [ "FlyingBear/FlyingBear PA-CF" ], @@ -2702,11 +2250,13 @@ "OrcaArena/Arena TPU 95A" ], "OFQHiNJs": [ + "BBL/Bambu Support G", "OrcaFilamentLibrary/Bambu Support G" ], "OFQLcbps": [ "Anker/Generic PA-CF", "Anycubic/Generic PA-CF", + "BBL/Generic PA-CF", "Blocks/Generic PA-CF", "Creality/Generic PA-CF", "Custom/Generic PA-CF", @@ -2753,6 +2303,9 @@ "OFR1XLMN": [ "Qidi/QIDI TPU 95A-HF" ], + "OFRFhdqy": [ + "BBL/addnorth PLA Textura" + ], "OFRJ325z": [ "LH/LHS PETG" ], @@ -2766,6 +2319,7 @@ "OrcaFilamentLibrary/Eolas Prints PETG Transition" ], "OFRiYgMK": [ + "BBL/Panchroma PLA Celestial", "OrcaFilamentLibrary/Panchroma PLA Celestial", "Snapmaker/Panchroma PLA Celestial" ], @@ -2788,12 +2342,14 @@ "OrcaFilamentLibrary/eSUN ePLA-LW" ], "OFS2tn6G": [ + "BBL/Fiberon PA612-CF", "OrcaFilamentLibrary/Fiberon PA612-CF" ], "OFS4jbj3": [ "Eryone/Eryone PA" ], "OFS8lTQt": [ + "BBL/Panchroma PLA Silk", "OrcaFilamentLibrary/Panchroma PLA Silk", "Snapmaker/Panchroma PLA Silk" ], @@ -2806,9 +2362,18 @@ "OFSbGfsz": [ "OrcaArena/Arena PLA Basic" ], + "OFSfm8iP": [ + "BBL/BETA PLA Heat Color Change" + ], + "OFSiCZP3": [ + "BBL/BETA PETG-GF" + ], "OFSqIcJC": [ "Flashforge/Flashforge TPU 95A" ], + "OFSw6Mor": [ + "BBL/addnorth PA Adura FDA" + ], "OFSwbBWS": [], "OFT2jon4": [ "Qidi/QIDI ABS Rapido" @@ -2816,10 +2381,14 @@ "OFTGHyNC": [ "OrcaFilamentLibrary/Bambu PLA Impact" ], + "OFTHDCqA": [ + "BBL/Bambu PLA Pure" + ], "OFTOPcx0": [ "OrcaFilamentLibrary/Eolas Prints TPU Transition" ], "OFTRZ8Y4": [ + "BBL/Bambu PETG-CF", "OrcaFilamentLibrary/Bambu PETG-CF" ], "OFTSXxzE": [ @@ -2856,6 +2425,9 @@ "OFU3QXL7": [ "re3D/re3D PC" ], + "OFU5JPDy": [ + "BBL/addnorth PETG PRO Matte" + ], "OFU7CKZt": [ "Volumic/Volumic ASA Ultra (Performance)" ], @@ -2875,11 +2447,15 @@ "Anycubic/Anycubic PEBA 95A" ], "OFUanySo": [ + "BBL/Bambu PLA Silk+", "OrcaFilamentLibrary/Bambu PLA Silk+" ], "OFUmS5z5": [ "Creality/eSUN ASA+" ], + "OFUtiVRn": [ + "BBL/addnorth PETG ESD" + ], "OFUyDDNv": [ "Elegoo/Elegoo PC", "OrcaFilamentLibrary/Elegoo PC" @@ -2900,8 +2476,12 @@ "OFV8Mxqx": [], "OFVBlUFH": [], "OFVCkX5w": [ + "BBL/Bambu TPU 95A", "OrcaFilamentLibrary/Bambu TPU 95A" ], + "OFVDWuxl": [ + "BBL/addnorth PLA HT-PLA PRO Matte" + ], "OFVHMFJX": [ "Qidi/QIDI PETG Tough 0.2 nozzle" ], @@ -2913,6 +2493,7 @@ "Eryone/Eryone ASA" ], "OFW29a9R": [ + "BBL/PolyTerra PLA", "OrcaArena/PolyTerra PLA", "OrcaFilamentLibrary/PolyTerra PLA", "Snapmaker/PolyTerra PLA" @@ -2920,12 +2501,18 @@ "OFW5FqkL": [ "Qidi/QIDI PLA Rapido Silk" ], + "OFW8M3CY": [ + "BBL/BETA PLA Chameleon" + ], "OFW8lqnb": [ "Snapmaker/Snapmaker PETG Translucent" ], "OFWDe7YH": [ "Qidi/QIDI UltraPA" ], + "OFWK0Y9A": [ + "BBL/addnorth PA Adura" + ], "OFWRITFw": [ "Prusa/Prusament rPLA" ], @@ -2952,6 +2539,7 @@ "Anker/Generic PLA-CF", "Anycubic/Generic PLA-CF", "Artillery/Generic PLA-CF", + "BBL/Generic PLA-CF", "Blocks/Generic PLA-CF", "Creality/Generic PLA-CF", "Custom/Generic PLA-CF", @@ -2976,6 +2564,7 @@ "re3D/re3D PETG" ], "OFX0ycRQ": [ + "BBL/Fiberon PA12-CF", "OrcaFilamentLibrary/Fiberon PA12-CF" ], "OFX2zcrM": [ @@ -2986,6 +2575,7 @@ "OrcaFilamentLibrary/Eolas Prints ABS" ], "OFXIbw5D": [ + "BBL/Bambu PLA Matte", "OrcaFilamentLibrary/Bambu PLA Matte" ], "OFXJ9iom": [ @@ -3010,6 +2600,7 @@ "Artillery/Artillery PLA Basic" ], "OFXkm8q1": [ + "BBL/Generic PP-CF", "Creality/Generic PP-CF", "OrcaFilamentLibrary/Generic PP-CF", "Tiertime/Generic PP-CF" @@ -3031,6 +2622,7 @@ "OrcaFilamentLibrary/Elegoo PLA Silk" ], "OFXzQ4yL": [ + "BBL/Bambu ASA-Aero", "OrcaFilamentLibrary/Bambu ASA-Aero" ], "OFY0F5qA": [ @@ -3046,6 +2638,7 @@ "Anker/Generic ABS", "Anycubic/Generic ABS", "Artillery/Generic ABS", + "BBL/Generic ABS", "Blocks/Generic ABS", "Chuanying/Generic ABS", "Co Print/Generic ABS", @@ -3082,10 +2675,14 @@ "OrcaFilamentLibrary/PolyLite Dual PLA", "Snapmaker/PolyLite Dual PLA" ], + "OFYGrfHY": [ + "BBL/BETA PETG Fluorescence" + ], "OFYPdQJh": [ "Anker/Generic PETG", "Anycubic/Generic PETG", "Artillery/Generic PETG", + "BBL/Generic PETG", "Blocks/Generic PETG", "CONSTRUCT3D/Generic PETG", "Chuanying/Generic PETG", @@ -3142,6 +2739,12 @@ "OFZ4QbfK": [ "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" ], + "OFZGrQTU": [ + "BBL/addnorth PETG Economy" + ], + "OFZJft47": [ + "BBL/addnorth PLA Economy" + ], "OFZLtWYs": [ "Qidi/QIDI ABS-GF25" ], @@ -3151,6 +2754,9 @@ "OFZivHGL": [ "Snapmaker/Snapmaker Dual PLA" ], + "OFZqZMuv": [ + "BBL/BETA ASA" + ], "OFZr862X": [ "Creality/Generic PLA HF", "Prusa/Generic PLA HF" @@ -3180,6 +2786,7 @@ "LH/LHS ASA" ], "OFaQMgRH": [ + "BBL/Bambu PLA Tough", "OrcaFilamentLibrary/Bambu PLA Tough" ], "OFaRjiIm": [ @@ -3222,6 +2829,7 @@ "Eryone/Eryone PP-CF" ], "OFc3xdm9": [ + "BBL/Overture PLA", "OrcaFilamentLibrary/Overture PLA", "Qidi/Overture PLA" ], @@ -3231,6 +2839,9 @@ "OFcBJQcC": [ "Snapmaker/Snapmaker Dual TPU High-Flow" ], + "OFcBl0nJ": [ + "BBL/Fiberon PA612-CF15" + ], "OFcJDtTx": [ "Artillery/Artillery TPU" ], @@ -3244,9 +2855,15 @@ "BBL/Overture Air PLA", "OrcaFilamentLibrary/Overture Air PLA" ], + "OFcnWTJB": [ + "BBL/BETA PLA Glitter" + ], "OFcogyWl": [ "WonderMaker/WonderMaker PLA Metal" ], + "OFcpa50Z": [ + "BBL/addnorth PLA-CF Carbon Fiber" + ], "OFctg8r1": [ "CoLiDo/CoLiDo PLA+" ], @@ -3255,10 +2872,12 @@ "OrcaFilamentLibrary/Overture TPU" ], "OFcytyoA": [ + "BBL/Fiberon PETG-ESD", "OrcaFilamentLibrary/Fiberon PETG-ESD", "Snapmaker/Fiberon PETG-ESD" ], "OFd0Fv0k": [ + "BBL/Generic PE-CF", "OrcaFilamentLibrary/Generic PE-CF", "Tiertime/Generic PE-CF" ], @@ -3313,6 +2932,9 @@ "OFeCJqxx": [ "Qidi/QIDI ABS Rapido Metal" ], + "OFeF4UNh": [ + "BBL/BETA PLA Silk" + ], "OFeIyhUx": [ "Anycubic/Anycubic PC-CF" ], @@ -3333,6 +2955,7 @@ ], "OFesA6rF": [ "Anker/Generic PLA Silk", + "BBL/Generic PLA Silk", "Creality/Generic PLA Silk", "FLSun/Generic PLA Silk", "Flashforge/Generic PLA Silk", @@ -3359,12 +2982,14 @@ "InfiMech/InfiMech PC" ], "OFf6mfQO": [ + "BBL/Bambu Support for ABS", "OrcaFilamentLibrary/Bambu Support for ABS" ], "OFf6ynfH": [ "FlyingBear/FlyingBear PETG Basic" ], "OFfBpSRI": [ + "BBL/Bambu ASA", "OrcaFilamentLibrary/Bambu ASA" ], "OFfD87Gy": [ @@ -3419,6 +3044,7 @@ "Snapmaker/Snapmaker Dual PLA Metal" ], "OFg57Nmc": [ + "BBL/Bambu PC FR", "OrcaFilamentLibrary/Bambu PC FR" ], "OFg8hMzT": [ @@ -3427,6 +3053,7 @@ "OFg8ndtj": [ "Anker/Generic PA", "Anycubic/Generic PA", + "BBL/Generic PA", "Blocks/Generic PA", "Creality/Generic PA", "Custom/Generic PA", @@ -3461,6 +3088,7 @@ "Anker/Generic TPU", "Anycubic/Generic TPU", "Artillery/Generic TPU", + "BBL/Generic TPU", "Blocks/Generic TPU", "Chuanying/Generic TPU", "Co Print/Generic TPU", @@ -3514,12 +3142,16 @@ "Creality/Generic PA6-GF" ], "OFhASRWj": [ + "BBL/Panchroma PLA Temp Shift", "OrcaFilamentLibrary/Panchroma PLA Temp Shift", "Snapmaker/Panchroma PLA Temp Shift" ], "OFhMO9Kh": [ "OrcaFilamentLibrary/GreenGate3D PETG" ], + "OFhN09f0": [ + "BBL/addnorth PC BLend HT LCF" + ], "OFhO5aEJ": [ "Ratrig/RatRig PunkFil ABS" ], @@ -3527,6 +3159,7 @@ "Snapmaker/Snapmaker PLA-CF" ], "OFhQfUQY": [ + "BBL/Generic SBS", "OrcaFilamentLibrary/Generic SBS", "Tiertime/Generic SBS" ], @@ -3570,6 +3203,7 @@ "Snapmaker/Snapmaker PLA Basic" ], "OFhuaUQB": [ + "BBL/Bambu ABS", "OrcaFilamentLibrary/Bambu ABS", "Qidi/Bambu ABS" ], @@ -3615,6 +3249,7 @@ "Creality/Generic Support for PLA" ], "OFitS8al": [ + "BBL/PolyLite PLA Neon", "Snapmaker/PolyLite PLA Neon" ], "OFiwEbze": [ @@ -3645,6 +3280,9 @@ "OFjUGUIK": [ "iQ/Fiberthree PACF Pro P1" ], + "OFjUXn67": [ + "BBL/BETA ABS" + ], "OFjVOWfJ": [ "Anycubic/Anycubic PLA High Speed" ], @@ -3652,6 +3290,7 @@ "OrcaArena/Arena PLA Impact" ], "OFjb0wos": [ + "BBL/Panchroma PLA Metallic", "OrcaFilamentLibrary/Panchroma PLA Metallic", "Snapmaker/Panchroma PLA Metallic" ], @@ -3668,6 +3307,9 @@ "OFjoAe0R": [ "Qidi/Qidi PLA-CF" ], + "OFjogeYN": [ + "BBL/BETA PETG Glitter" + ], "OFjorDcx": [ "OrcaFilamentLibrary/FDplast ABS" ], @@ -3681,6 +3323,7 @@ "Prusa/Prusament PC-CF" ], "OFk8t9mz": [ + "BBL/Fiberon PETG-rCF", "OrcaFilamentLibrary/Fiberon PETG-rCF" ], "OFkAltI8": [ @@ -3693,7 +3336,11 @@ "OFkGvN4d": [ "OrcaFilamentLibrary/FilAr PLA Verde Pixel" ], + "OFkHbjUv": [ + "BBL/BETA PLA Metallic" + ], "OFkOviHk": [ + "BBL/Fiberon PA6-CF", "OrcaFilamentLibrary/Fiberon PA6-CF" ], "OFkR8E2c": [ @@ -3711,6 +3358,7 @@ "InfiMech/Other PLA Hyper" ], "OFknl9Iz": [ + "BBL/Bambu ABS-GF", "OrcaFilamentLibrary/Bambu ABS-GF" ], "OFkoLUtR": [ @@ -3744,12 +3392,18 @@ "OFlSNkhc": [ "OrcaFilamentLibrary/Eolas Prints ASA" ], + "OFlfuj2k": [ + "BBL/Bambu TPU 85A" + ], "OFlgMgNM": [ "Flashforge/Flashforge PPS" ], "OFllmFhT": [ "Elegoo/Generic PETG PRO" ], + "OFlmxlDG": [ + "BBL/BETA HIPS" + ], "OFln72PT": [ "Elegoo/Elegoo PLA-CF", "OrcaFilamentLibrary/Elegoo PLA-CF" @@ -3762,6 +3416,7 @@ "Snapmaker/Snapmaker PLA" ], "OFlwmqrC": [ + "BBL/Polymaker HT-PLA-GF", "OrcaFilamentLibrary/Polymaker HT-PLA-GF", "Snapmaker/Polymaker HT-PLA-GF" ], @@ -3793,6 +3448,9 @@ "OFmKU2Ha": [ "Eryone/Eryone PLA" ], + "OFmN2lvw": [ + "BBL/Generic TPU for AMS" + ], "OFmY0l6t": [ "Creality/Generic PLA Matte", "Elegoo/Generic PLA Matte", @@ -3815,9 +3473,11 @@ "Anycubic/Anycubic PLA" ], "OFmn9NZL": [ + "BBL/FusRock ABS-GF", "OrcaFilamentLibrary/FusRock ABS-GF" ], "OFmpMwxS": [ + "BBL/Generic PLA High Speed", "Creality/Generic PLA High Speed", "FLSun/Generic PLA High Speed", "Flashforge/Generic PLA High Speed", @@ -3825,6 +3485,9 @@ "Qidi/Generic PLA High Speed", "Tiertime/Generic PLA High Speed" ], + "OFmt513L": [ + "BBL/BETA PETG Transparent" + ], "OFmveLWz": [ "Elegoo/Elegoo PETG-GF", "OrcaFilamentLibrary/Elegoo PETG-GF" @@ -3839,6 +3502,9 @@ "OFn6WpN7": [ "Qidi/QIDI PA12-CF" ], + "OFnBvPhb": [ + "BBL/addnorth PLA rPLA RE-ADD" + ], "OFnHc3D6": [ "Creality/eSUN PLA-CF" ], @@ -3869,15 +3535,22 @@ "OFnejEt4": [ "OrcaFilamentLibrary/FilAr PETG Cian" ], + "OFnfxTvi": [ + "BBL/Bambu PLA Lite" + ], "OFngcE81": [ "LH/LHS TPU Foamy 78A" ], "OFniMuTN": [ + "BBL/Bambu PA6-CF", "OrcaFilamentLibrary/Bambu PA6-CF" ], "OFnmp6rt": [ "Anycubic/Anycubic PLA+" ], + "OFnpX8uh": [ + "BBL/BETA PETG Matte" + ], "OFnyHfcv": [ "Ratrig/Generic ABS BigNozzle" ], @@ -3885,6 +3558,7 @@ "Qidi/QIDI PAHT-GF" ], "OFo2UF2C": [ + "BBL/Generic BVOH", "Creality/Generic BVOH", "Flashforge/Generic BVOH", "OrcaFilamentLibrary/Generic BVOH", @@ -3901,6 +3575,7 @@ ], "OFoYSJKi": [ "Anker/Generic PETG-CF", + "BBL/Generic PETG-CF", "Creality/Generic PETG-CF", "Elegoo/Generic PETG-CF", "Flashforge/Generic PETG-CF", @@ -3918,6 +3593,7 @@ "OrcaFilamentLibrary/AliZ PETG" ], "OFoiVqVM": [ + "BBL/Bambu PLA Basic", "OrcaFilamentLibrary/Bambu PLA Basic" ], "OFojbdhR": [ @@ -3927,6 +3603,7 @@ "Cubicon/Cubicon ABSk" ], "OFovEIbw": [ + "BBL/Bambu PETG HF", "OrcaFilamentLibrary/Bambu PETG HF" ], "OFp4ETDP": [ @@ -3945,6 +3622,7 @@ "Cubicon/Cubicon ABS" ], "OFpPGSKG": [ + "BBL/SUNLU Silk PLA+", "Flashforge/SUNLU Silk PLA+", "OrcaFilamentLibrary/SUNLU Silk PLA+" ], @@ -3952,9 +3630,13 @@ "Peopoly/Peopoly Lancer PETG-C" ], "OFpW4gdi": [ + "BBL/SUNLU PLA Matte", "Flashforge/SUNLU PLA Matte", "OrcaFilamentLibrary/SUNLU PLA Matte" ], + "OFpdjFI3": [ + "BBL/BETA PLA UV Color Change" + ], "OFpu74Qe": [ "Snapmaker/Snapmaker PLA Eco" ], @@ -3968,6 +3650,7 @@ "OrcaFilamentLibrary/FilAr PETG Negro Azabache" ], "OFq9svOz": [ + "BBL/Generic PPS", "Creality/Generic PPS", "Tiertime/Generic PPS" ], @@ -3975,12 +3658,17 @@ "Ratrig/Generic PLA BigNozzle" ], "OFqGRZyH": [ + "BBL/Numakers PLA+", "OrcaFilamentLibrary/Numakers PLA+" ], "OFqINlYj": [ + "BBL/eSUN PLA+", "Creality/eSUN PLA+", "OrcaFilamentLibrary/eSUN PLA+" ], + "OFqTwtXM": [ + "BBL/addnorth PETG rPETG Matte" + ], "OFqcL5UF": [ "Qidi/QIDI Support For PET/PA" ], @@ -3988,6 +3676,7 @@ "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" ], "OFqw2PQA": [ + "BBL/Panchroma CoPE", "OrcaFilamentLibrary/Panchroma CoPE", "Snapmaker/Panchroma CoPE" ], @@ -3998,6 +3687,7 @@ "Anycubic/Anycubic PLA Slik" ], "OFrKLeE3": [ + "BBL/Bambu PLA Metal", "OrcaFilamentLibrary/Bambu PLA Metal" ], "OFrLiqiM": [ @@ -4007,6 +3697,7 @@ "Creality/CR-PLA Carbon" ], "OFrOh600": [ + "BBL/Panchroma PLA Matte", "Creality/Panchroma PLA Matte", "OrcaFilamentLibrary/Panchroma PLA Matte", "Snapmaker/Panchroma PLA Matte" @@ -4020,6 +3711,9 @@ "OFrjacXf": [ "Flashforge/Flashforge PET-CF" ], + "OFrqMlGt": [ + "BBL/BETA PETG" + ], "OFrr67nG": [ "OrcaArena/Arena PC" ], @@ -4041,6 +3735,7 @@ "Volumic/Volumic PP Ultra" ], "OFsFon5l": [ + "BBL/Generic HIPS", "Chuanying/Generic HIPS", "Creality/Generic HIPS", "Flashforge/Generic HIPS", @@ -4048,6 +3743,7 @@ "Tiertime/Generic HIPS" ], "OFsHSVZc": [ + "BBL/Bambu Support W", "OrcaFilamentLibrary/Bambu Support W" ], "OFsP8PKH": [ @@ -4055,6 +3751,7 @@ ], "OFsRDvTM": [ "Anycubic/Panchroma PLA", + "BBL/Panchroma PLA", "OrcaFilamentLibrary/Panchroma PLA", "Snapmaker/Panchroma PLA" ], @@ -4062,6 +3759,7 @@ "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" ], "OFsijjtH": [ + "BBL/Generic PP-GF", "OrcaFilamentLibrary/Generic PP-GF", "Tiertime/Generic PP-GF" ], @@ -4096,9 +3794,18 @@ "OFtRn8X8": [ "OrcaFilamentLibrary/FDplast SBS" ], + "OFtdVZpV": [ + "BBL/addnorth PLA X-PLA" + ], "OFtefokm": [ "OrcaFilamentLibrary/FilAr PLA-mate Blanco" ], + "OFtkLO6q": [ + "BBL/Bambu TPU 90A" + ], + "OFtndTHe": [ + "BBL/BETA PETG-CF" + ], "OFtpXCCv": [ "BBL/COEX ASA PRIME", "OrcaFilamentLibrary/COEX ASA PRIME" @@ -4122,6 +3829,7 @@ "Qidi/QIDI ASA-Aero" ], "OFu1evlr": [ + "BBL/Generic PCTG", "Creality/Generic PCTG", "OrcaFilamentLibrary/Generic PCTG", "Ratrig/Generic PCTG", @@ -4168,6 +3876,9 @@ "OFusbWjj": [ "Creality/Hyper PETG-CF" ], + "OFuvOt0r": [ + "BBL/BETA PLA Basic" + ], "OFuxH0Uz": [ "Volumic/Volumic FLEX93 Ultra" ], @@ -4178,6 +3889,7 @@ "Prusa/Prusament PC Blend" ], "OFvKUnLh": [ + "BBL/Bambu TPU 95A HF", "OrcaFilamentLibrary/Bambu TPU 95A HF" ], "OFvLppPU": [ @@ -4196,6 +3908,9 @@ "OFvaLVML": [ "Flashforge/Flashforge HIPS" ], + "OFvcIGee": [ + "BBL/addnorth TPU Pro Matte 85A" + ], "OFvdZ2bx": [ "Qidi/QIDI WOOD Rapido" ], @@ -4207,9 +3922,11 @@ "Snapmaker/Snapmaker TPU 95A" ], "OFvrXuV7": [ + "BBL/PolyLite ASA", "OrcaFilamentLibrary/PolyLite ASA" ], "OFvxIS9g": [ + "BBL/Fiberon PA12-CF10", "Snapmaker/Fiberon PA12-CF10" ], "OFvxghTE": [ @@ -4218,16 +3935,21 @@ "TwoTrees/Generic HS PLA" ], "OFvyB0Bz": [ + "BBL/PolyLite PLA Galaxy", "Snapmaker/PolyLite PLA Galaxy" ], "OFvzvwCu": [ "OrcaFilamentLibrary/Eolas Prints PLA High Speed" ], + "OFw4WD4T": [ + "BBL/Fiberon PETG-rCF08" + ], "OFwJ0qu2": [], "OFwLBAGf": [ "Qidi/HATCHBOX ABS" ], "OFwPrlCM": [ + "BBL/Bambu PETG Translucent", "OrcaFilamentLibrary/Bambu PETG Translucent" ], "OFwRJ4g0": [ @@ -4238,11 +3960,15 @@ "InfiMech/Other TPU" ], "OFwaYjL6": [ + "BBL/Fiberon PA6-GF", "OrcaFilamentLibrary/Fiberon PA6-GF" ], "OFwbsgWj": [ "re3D/re3D PC" ], + "OFwc74ck": [ + "BBL/BETA PLA Matte" + ], "OFwhLMs4": [ "Snapmaker/Snapmaker PLA SnapSpeed" ], @@ -4269,6 +3995,7 @@ "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" ], "OFxA1p01": [ + "BBL/Overture PLA Pro", "OrcaFilamentLibrary/Overture PLA Pro" ], "OFxDHUX8": [ @@ -4282,6 +4009,7 @@ "OrcaFilamentLibrary/Elegoo ABS" ], "OFxUwUeW": [ + "BBL/SUNLU PLA Marble", "Flashforge/SUNLU PLA Marble", "OrcaFilamentLibrary/SUNLU PLA Marble" ], @@ -4289,9 +4017,14 @@ "Snapmaker/Snapmaker J1 PETG-CF" ], "OFxe4rXr": [ + "BBL/PolyTerra PLA Marble", "Snapmaker/PolyTerra PLA Marble" ], + "OFxqf79Q": [ + "BBL/BETA PETG HF" + ], "OFy02QHU": [ + "BBL/PolyLite PLA Translucent", "Snapmaker/PolyLite PLA Translucent" ], "OFy14TRA": [ @@ -4312,12 +4045,18 @@ "OFyHgT60": [ "OrcaArena/Arena PLA Sparkle" ], + "OFyJjkek": [ + "BBL/addnorth TPU Pro Matte 95A" + ], "OFyLWVF3": [ "Creality/Generic PETG-GF" ], "OFyPG8v2": [ "Snapmaker/Snapmaker Dual PLA Eco" ], + "OFyPTnSk": [ + "BBL/BETA PETG Heat Color Change" + ], "OFyQwdaM": [ "Volumic/Volumic ABS Ultra (Performance)" ], @@ -4356,6 +4095,9 @@ "BBL/AliZ PLA", "OrcaFilamentLibrary/AliZ PLA" ], + "OFz1a1fy": [ + "BBL/BETA PETG Metallic" + ], "OFz5oHgf": [ "MagicMaker/Generic PEEK" ], @@ -4374,6 +4116,12 @@ "OFzY7N3Z": [ "Artillery/Artillery PLA" ], + "OFzaq7Yg": [ + "BBL/BETA TPU 98A" + ], + "OFzk5oAo": [ + "BBL/addnorth ABS rABS" + ], "OFzrUUxc": [], "OFztQ7rO": [ "LH/LHS ABS" @@ -4382,6 +4130,7 @@ "Flashforge/FusRock PET-GF" ], "OFzyIxba": [ + "BBL/Bambu PVA", "OrcaFilamentLibrary/Bambu PVA" ] }, @@ -6977,6 +6726,13 @@ "Soleyin Ultra PLA" ] ], + "OF03RK6r": [ + [ + "BETA", + "PLA", + "BETA PLA Metal" + ] + ], "OF0AquDh": [ [ "FusRock", @@ -6984,6 +6740,13 @@ "FusRock S-Multi" ] ], + "OF0EYBWQ": [ + [ + "addnorth", + "PETG", + "addnorth PETG Flame v0" + ] + ], "OF0FfcAG": [ [ "Anycubic", @@ -7110,6 +6873,13 @@ "Generic PETG Basic" ] ], + "OF1ID4N1": [ + [ + "addnorth", + "PA6", + "addnorth PA6 Addlantis" + ] + ], "OF1N1qMK": [ [ "Polymaker", @@ -7236,6 +7006,13 @@ "Elegoo Rapid TPU 95A" ] ], + "OF342jVN": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Tough+" + ] + ], "OF3F63OE": [ [ "re3D", @@ -7257,6 +7034,13 @@ "CR-Silk" ] ], + "OF3PDEw3": [ + [ + "BETA", + "PLA", + "BETA PLA High Speed" + ] + ], "OF3WQaKK": [ [ "Creality", @@ -7348,6 +7132,20 @@ "Artillery PLA Basic+" ] ], + "OF4PKvem": [ + [ + "BETA", + "PLA", + "BETA PLA Fluorescence" + ] + ], + "OF4QZANi": [ + [ + "BETA", + "TPU", + "BETA TPU Matte" + ] + ], "OF4RvVuU": [ [ "Bambu Lab", @@ -7369,6 +7167,13 @@ "Snapmaker PETG" ] ], + "OF4XTfoI": [ + [ + "BETA", + "PETG", + "BETA PETG Marble" + ] + ], "OF4f8vVp": [ [ "WonderMaker", @@ -7425,6 +7230,13 @@ "Generic ABS HF" ] ], + "OF5B9sUc": [ + [ + "Polymaker", + "PA-GF", + "Fiberon PA6-GF25" + ] + ], "OF5BN24W": [ [ "Flashforge", @@ -7432,6 +7244,13 @@ "Flashforge PPA-GF" ] ], + "OF5BXhHF": [ + [ + "BETA", + "PLA", + "BETA PLA High Temp" + ] + ], "OF5CgdDq": [ [ "Polymaker", @@ -7439,6 +7258,13 @@ "PolyLite PLA" ] ], + "OF5LAnla": [ + [ + "BETA", + "PLA", + "BETA PLA Gradient" + ] + ], "OF5NqBfC": [ [ "Yumi", @@ -7586,6 +7412,13 @@ "Snapmaker J1 PVA" ] ], + "OF6Yn69v": [ + [ + "BETA", + "TPU", + "BETA TPU 90A" + ] + ], "OF6kj4jI": [ [ "iQ Materials", @@ -7600,6 +7433,13 @@ "Flashforge PLA Matte" ] ], + "OF6qw3Wb": [ + [ + "BETA", + "PA-CF", + "BETA PAHT-CF" + ] + ], "OF6rdQ6M": [ [ "Generic", @@ -7614,6 +7454,13 @@ "Hyper L-W PLA" ] ], + "OF71b7qO": [ + [ + "addnorth", + "PLA", + "addnorth PLA E-PLA" + ] + ], "OF72YYTd": [ [ "Snapmaker", @@ -7733,6 +7580,13 @@ "Flashforge HS PLA Burnt Ti" ] ], + "OF8QdQwS": [ + [ + "BETA", + "PLA", + "BETA PLA Silk+" + ] + ], "OF8Tlg47": [ [ "Generic", @@ -7901,6 +7755,20 @@ "Artillery PLA-CF" ] ], + "OFAc0Pr3": [ + [ + "Polymaker", + "PET-CF", + "Fiberon PET-CF17" + ] + ], + "OFAcJkl1": [ + [ + "addnorth", + "PETG-CF", + "addnorth PETG-CF Rigid X" + ] + ], "OFAebKg8": [ [ "Flashforge", @@ -7978,6 +7846,13 @@ "PolyLite PLA Luminous" ] ], + "OFBsbMMF": [ + [ + "addnorth", + "PA-CF", + "addnorth PA-CF Adura X" + ] + ], "OFBw6eEG": [ [ "Overture", @@ -8370,6 +8245,13 @@ "Generic TPU 64D" ] ], + "OFF5o7b2": [ + [ + "BETA", + "PLA", + "BETA PLA Youth" + ] + ], "OFF9OKoY": [ [ "Polymaker", @@ -8433,6 +8315,20 @@ "eSUN PETG-Basic" ] ], + "OFFbSnCD": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Translucent" + ] + ], + "OFFfJ09N": [ + [ + "BETA", + "PETG", + "BETA PETG Glow" + ] + ], "OFFkCLBl": [ [ "Polymaker", @@ -8489,6 +8385,20 @@ "FilAr PLA-mate Gris" ] ], + "OFGVxj2A": [ + [ + "BETA", + "PLA", + "BETA PLA Wood" + ] + ], + "OFGc9l16": [ + [ + "BETA", + "PLA", + "BETA PLA Glow" + ] + ], "OFGcLA5R": [ [ "FilAr", @@ -8573,6 +8483,13 @@ "FilAr PLA Blanco Antartida" ] ], + "OFHHwrd1": [ + [ + "addnorth", + "PETG", + "addnorth PETG Base" + ] + ], "OFHWSM21": [ [ "Polymaker", @@ -8622,6 +8539,13 @@ "SUNLU PLA+ 2.0" ] ], + "OFI2MKy7": [ + [ + "BETA", + "TPU", + "BETA PEBA 90A" + ] + ], "OFI6WZpn": [ [ "Orca Arena", @@ -8636,6 +8560,13 @@ "FilAr PLA-mate Rojo" ] ], + "OFIBbYO5": [ + [ + "Bambu Lab", + "TPU-AMS", + "Bambu TPU for AMS" + ] + ], "OFIE3vOf": [ [ "Anycubic", @@ -8811,6 +8742,13 @@ "Snapmaker Dual ABS" ] ], + "OFJnEaCp": [ + [ + "BETA", + "PLA", + "BETA PLA Transparent" + ] + ], "OFJrvXth": [ [ "Snapmaker", @@ -8839,6 +8777,13 @@ "YUMI PLA Direct Drive" ] ], + "OFK7830e": [ + [ + "BETA", + "TPU", + "BETA TPU 95A" + ] + ], "OFK8XHPn": [ [ "Overture", @@ -8895,6 +8840,13 @@ "FilAr PLA Carpincho" ] ], + "OFKYBAWe": [ + [ + "BETA", + "PLA", + "BETA PLA Marble" + ] + ], "OFKZ9skj": [ [ "FilAr", @@ -8937,6 +8889,13 @@ "Panchroma PLA Marble" ] ], + "OFKyNkQz": [ + [ + "BETA", + "PETG", + "BETA PETG UV Color Change" + ] + ], "OFL9aRjN": [ [ "Snapmaker", @@ -9049,6 +9008,20 @@ "Hyper PETG-GF" ] ], + "OFLjDYxH": [ + [ + "addnorth", + "PLA", + "addnorth PLA X-PLA High Speed" + ] + ], + "OFLqgSuX": [ + [ + "BETA", + "PLA-CF", + "BETA PLA-CF" + ] + ], "OFLzx3J4": [ [ "Creality", @@ -9161,6 +9134,20 @@ "Elas PLA Basic" ] ], + "OFMzRg65": [ + [ + "BETA", + "PLA", + "BETA PLA PRO" + ] + ], + "OFN8QBhu": [ + [ + "addnorth", + "PLA", + "addnorth PLA Wood" + ] + ], "OFN9fefN": [ [ "Cubicon", @@ -9217,6 +9204,13 @@ "Generic High Flow PETG" ] ], + "OFNk8AvA": [ + [ + "BETA", + "PETG", + "BETA PETG Gradient" + ] + ], "OFNk8bxk": [ [ "Bambu Lab", @@ -9252,6 +9246,13 @@ "Generic PETG-CF10" ] ], + "OFO6GMJ3": [ + [ + "addnorth", + "TPU", + "addnorth TPU EasyFlex" + ] + ], "OFOABq7t": [ [ "Aliz", @@ -9287,6 +9288,13 @@ "Snapmaker PLA Full Spectrum" ] ], + "OFOQCfVa": [ + [ + "addnorth", + "PLA", + "addnorth PLA Premium Silk" + ] + ], "OFObG16Q": [ [ "InfiMech", @@ -9448,6 +9456,13 @@ "QIDI PETG Tough" ] ], + "OFQ5TxZ2": [ + [ + "addnorth", + "PA", + "addnorth PVDF Adamant S1" + ] + ], "OFQEGL7z": [ [ "FlyingBear", @@ -9546,6 +9561,13 @@ "QIDI TPU 95A-HF" ] ], + "OFRFhdqy": [ + [ + "addnorth", + "PLA", + "addnorth PLA Textura" + ] + ], "OFRJ325z": [ [ "LH Stinger", @@ -9665,6 +9687,20 @@ "Arena PLA Basic" ] ], + "OFSfm8iP": [ + [ + "BETA", + "PLA", + "BETA PLA Heat Color Change" + ] + ], + "OFSiCZP3": [ + [ + "BETA", + "PETG-CF", + "BETA PETG-GF" + ] + ], "OFSqIcJC": [ [ "Flashforge", @@ -9672,6 +9708,13 @@ "Flashforge TPU 95A" ] ], + "OFSw6Mor": [ + [ + "addnorth", + "PA", + "addnorth PA Adura FDA" + ] + ], "OFSwbBWS": [ [ "DREMC", @@ -9693,6 +9736,13 @@ "Bambu PLA Impact" ] ], + "OFTHDCqA": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Pure" + ] + ], "OFTOPcx0": [ [ "Eolas Prints", @@ -9784,6 +9834,13 @@ "re3D PC" ] ], + "OFU5JPDy": [ + [ + "addnorth", + "PETG", + "addnorth PETG PRO Matte" + ] + ], "OFU7CKZt": [ [ "Volumic", @@ -9840,6 +9897,13 @@ "eSUN ASA+" ] ], + "OFUtiVRn": [ + [ + "addnorth", + "PETG", + "addnorth PETG ESD" + ] + ], "OFUyDDNv": [ [ "Elegoo", @@ -9896,6 +9960,13 @@ "Bambu TPU 95A" ] ], + "OFVDWuxl": [ + [ + "addnorth", + "PLA", + "addnorth PLA HT-PLA PRO Matte" + ] + ], "OFVHMFJX": [ [ "QIDI", @@ -9931,6 +10002,13 @@ "QIDI PLA Rapido Silk" ] ], + "OFW8M3CY": [ + [ + "BETA", + "PLA", + "BETA PLA Chameleon" + ] + ], "OFW8lqnb": [ [ "Snapmaker", @@ -9945,6 +10023,13 @@ "QIDI UltraPA" ] ], + "OFWK0Y9A": [ + [ + "addnorth", + "PA", + "addnorth PA Adura" + ] + ], "OFWRITFw": [ [ "Prusa Polymers", @@ -10197,6 +10282,13 @@ "PolyLite Dual PLA" ] ], + "OFYGrfHY": [ + [ + "BETA", + "PETG", + "BETA PETG Fluorescence" + ] + ], "OFYPdQJh": [ [ "Generic", @@ -10267,6 +10359,20 @@ "FilAr PLA Rosa Flamenco" ] ], + "OFZGrQTU": [ + [ + "addnorth", + "PETG", + "addnorth PETG Economy" + ] + ], + "OFZJft47": [ + [ + "addnorth", + "PLA", + "addnorth PLA Economy" + ] + ], "OFZLtWYs": [ [ "QIDI", @@ -10288,6 +10394,13 @@ "Snapmaker Dual PLA" ] ], + "OFZqZMuv": [ + [ + "BETA", + "ASA", + "BETA ASA" + ] + ], "OFZr862X": [ [ "Generic", @@ -10470,6 +10583,13 @@ "Snapmaker Dual TPU High-Flow" ] ], + "OFcBl0nJ": [ + [ + "Polymaker", + "PA-CF", + "Fiberon PA612-CF15" + ] + ], "OFcJDtTx": [ [ "Artillery", @@ -10498,6 +10618,13 @@ "Overture Air PLA" ] ], + "OFcnWTJB": [ + [ + "BETA", + "PLA", + "BETA PLA Glitter" + ] + ], "OFcogyWl": [ [ "WonderMaker", @@ -10505,6 +10632,13 @@ "WonderMaker PLA Metal" ] ], + "OFcpa50Z": [ + [ + "addnorth", + "PLA-CF", + "addnorth PLA-CF Carbon Fiber" + ] + ], "OFctg8r1": [ [ "CoLiDo", @@ -10652,6 +10786,13 @@ "QIDI ABS Rapido Metal" ] ], + "OFeF4UNh": [ + [ + "BETA", + "PLA", + "BETA PLA Silk" + ] + ], "OFeIyhUx": [ [ "Anycubic", @@ -11016,6 +11157,13 @@ "GreenGate3D PETG" ] ], + "OFhN09f0": [ + [ + "addnorth", + "PC", + "addnorth PC BLend HT LCF" + ] + ], "OFhO5aEJ": [ [ "RatRig", @@ -11289,6 +11437,13 @@ "Fiberthree PACF Pro P1" ] ], + "OFjUXn67": [ + [ + "BETA", + "ABS", + "BETA ABS" + ] + ], "OFjVOWfJ": [ [ "Anycubic", @@ -11338,6 +11493,13 @@ "Qidi PLA-CF" ] ], + "OFjogeYN": [ + [ + "BETA", + "PETG", + "BETA PETG Glitter" + ] + ], "OFjorDcx": [ [ "FDplast", @@ -11394,6 +11556,13 @@ "FilAr PLA Verde Pixel" ] ], + "OFkHbjUv": [ + [ + "BETA", + "PLA", + "BETA PLA Metallic" + ] + ], "OFkOviHk": [ [ "Polymaker", @@ -11506,6 +11675,13 @@ "Eolas Prints ASA" ] ], + "OFlfuj2k": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 85A" + ] + ], "OFlgMgNM": [ [ "Flashforge", @@ -11520,6 +11696,13 @@ "Generic PETG PRO" ] ], + "OFlmxlDG": [ + [ + "BETA", + "HIPS", + "BETA HIPS" + ] + ], "OFln72PT": [ [ "Elegoo", @@ -11611,6 +11794,13 @@ "Eryone PLA" ] ], + "OFmN2lvw": [ + [ + "Generic", + "TPU-AMS", + "Generic TPU for AMS" + ] + ], "OFmY0l6t": [ [ "Generic", @@ -11667,6 +11857,13 @@ "Generic PLA High Speed" ] ], + "OFmt513L": [ + [ + "BETA", + "PETG", + "BETA PETG Transparent" + ] + ], "OFmveLWz": [ [ "Elegoo", @@ -11695,6 +11892,13 @@ "QIDI PA12-CF" ] ], + "OFnBvPhb": [ + [ + "addnorth", + "PLA", + "addnorth PLA rPLA RE-ADD" + ] + ], "OFnHc3D6": [ [ "eSUN", @@ -11765,6 +11969,13 @@ "FilAr PETG Cian" ] ], + "OFnfxTvi": [ + [ + "Bambu Lab", + "PLA", + "Bambu PLA Lite" + ] + ], "OFngcE81": [ [ "LH Stinger", @@ -11786,6 +11997,13 @@ "Anycubic PLA+" ] ], + "OFnpX8uh": [ + [ + "BETA", + "PETG", + "BETA PETG Matte" + ] + ], "OFnyHfcv": [ [ "Generic", @@ -11933,6 +12151,13 @@ "SUNLU PLA Matte" ] ], + "OFpdjFI3": [ + [ + "BETA", + "PLA", + "BETA PLA UV Color Change" + ] + ], "OFpu74Qe": [ [ "Snapmaker", @@ -11989,6 +12214,13 @@ "eSUN PLA+" ] ], + "OFqTwtXM": [ + [ + "addnorth", + "PETG", + "addnorth PETG rPETG Matte" + ] + ], "OFqcL5UF": [ [ "QIDI", @@ -12073,6 +12305,13 @@ "Flashforge PET-CF" ] ], + "OFrqMlGt": [ + [ + "BETA", + "PETG", + "BETA PETG" + ] + ], "OFrr67nG": [ [ "Orca Arena", @@ -12234,6 +12473,13 @@ "FDplast SBS" ] ], + "OFtdVZpV": [ + [ + "addnorth", + "PLA", + "addnorth PLA X-PLA" + ] + ], "OFtefokm": [ [ "FilAr", @@ -12241,6 +12487,20 @@ "FilAr PLA-mate Blanco" ] ], + "OFtkLO6q": [ + [ + "Bambu Lab", + "TPU", + "Bambu TPU 90A" + ] + ], + "OFtndTHe": [ + [ + "BETA", + "PETG-CF", + "BETA PETG-CF" + ] + ], "OFtpXCCv": [ [ "COEX 3D", @@ -12388,6 +12648,13 @@ "Hyper PETG-CF" ] ], + "OFuvOt0r": [ + [ + "BETA", + "PLA", + "BETA PLA Basic" + ] + ], "OFuxH0Uz": [ [ "Volumic", @@ -12451,6 +12718,13 @@ "Flashforge HIPS" ] ], + "OFvcIGee": [ + [ + "addnorth", + "TPU", + "addnorth TPU Pro Matte 85A" + ] + ], "OFvdZ2bx": [ [ "QIDI", @@ -12507,6 +12781,13 @@ "Eolas Prints PLA High Speed" ] ], + "OFw4WD4T": [ + [ + "Polymaker", + "PETG-CF", + "Fiberon PETG-rCF08" + ] + ], "OFwJ0qu2": [ [ "DREMC", @@ -12556,6 +12837,13 @@ "re3D PC" ] ], + "OFwc74ck": [ + [ + "BETA", + "PLA", + "BETA PLA Matte" + ] + ], "OFwhLMs4": [ [ "Snapmaker", @@ -12661,6 +12949,13 @@ "PolyTerra PLA Marble" ] ], + "OFxqf79Q": [ + [ + "BETA", + "PETG", + "BETA PETG HF" + ] + ], "OFy02QHU": [ [ "Polymaker", @@ -12710,6 +13005,13 @@ "Arena PLA Sparkle" ] ], + "OFyJjkek": [ + [ + "addnorth", + "TPU", + "addnorth TPU Pro Matte 95A" + ] + ], "OFyLWVF3": [ [ "Generic", @@ -12724,6 +13026,13 @@ "Snapmaker Dual PLA Eco" ] ], + "OFyPTnSk": [ + [ + "BETA", + "PETG", + "BETA PETG Heat Color Change" + ] + ], "OFyQwdaM": [ [ "Volumic", @@ -12808,6 +13117,13 @@ "AliZ PLA" ] ], + "OFz1a1fy": [ + [ + "BETA", + "PETG", + "BETA PETG Metallic" + ] + ], "OFz5oHgf": [ [ "Generic", @@ -12850,6 +13166,20 @@ "Artillery PLA" ] ], + "OFzaq7Yg": [ + [ + "BETA", + "TPU", + "BETA TPU 98A" + ] + ], + "OFzk5oAo": [ + [ + "addnorth", + "ABS", + "addnorth ABS rABS" + ] + ], "OFzrUUxc": [ [ "DREMC", From 1170b048e81a04b5a9700d2f3d3e9d5e41b06577 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Fri, 4 Sep 2026 23:24:59 +0800 Subject: [PATCH 104/208] [CLI]: Fix Plate Config Reading and BuildVolume Height Checks (#15479) * Fix incorrect early exit for CLI mode no-support preventing parameters from being read * Use PartPlate's m_height to allow CLI to perform proper BuildVolume check * Add safeguard against extruder_pintable_heights and extruder_areas vector size mismatch * Preserve printable_height precision in PartPlate/PartPlateList * Fixed multiple BuildVolume warning issue, and keep check_outside diff minimal --- src/OrcaSlicer.cpp | 3 +- src/libslic3r/BuildVolume.cpp | 10 ++++-- src/slic3r/GUI/PartPlate.cpp | 53 ++++++++++++++-------------- src/slic3r/GUI/PartPlate.hpp | 14 ++++---- src/slic3r/GUI/Plater.cpp | 3 +- tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_buildvolume.cpp | 40 +++++++++++++++++++++ 7 files changed, 85 insertions(+), 39 deletions(-) create mode 100644 tests/libslic3r/test_buildvolume.cpp diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 3c45331c20..dcd5ec0082 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -5199,7 +5199,8 @@ int CLI::run(int argc, char **argv) Vec3d wipe_tower_size = cur_plate->estimate_wipe_tower_size(m_print_config, w, v, new_extruder_count, filaments_cnt, false, enable_wrapping); Vec3d plate_origin = cur_plate->get_origin(); - int plate_width, plate_depth, plate_height; + int plate_width, plate_depth; + double plate_height; partplate_list.get_plate_size(plate_width, plate_depth, plate_height); float depth = wipe_tower_size(1); float margin = 15.f, wp_brim_width = 0.f; diff --git a/src/libslic3r/BuildVolume.cpp b/src/libslic3r/BuildVolume.cpp index 1ac200d9c8..15e6668bae 100644 --- a/src/libslic3r/BuildVolume.cpp +++ b/src/libslic3r/BuildVolume.cpp @@ -13,7 +13,6 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double : m_bed_shape(printable_area), m_max_print_height(printable_height), m_extruder_shapes(extruder_areas), m_extruder_printable_height(extruder_printable_heights) { assert(printable_height >= 0); - //assert(extruder_printable_heights.size() == extruder_areas.size()); m_polygon = Polygon::new_scale(printable_area); assert(m_polygon.is_counter_clockwise()); @@ -86,6 +85,9 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double m_shared_volume.data[2] = m_bboxf.max.x(); m_shared_volume.data[3] = m_bboxf.max.y(); m_shared_volume.zs[1] = m_bboxf.max.z(); + if (extruder_printable_heights.size() < m_extruder_shapes.size()) + BOOST_LOG_TRIVIAL(warning) << boost::format("extruder_printable_height has only %1% entries but extruder_printable_area has %2%, falling back to the bed printable_height for the missing ones") + % extruder_printable_heights.size() % m_extruder_shapes.size(); for (unsigned int index = 0; index < m_extruder_shapes.size(); index++) { std::vector& extruder_shape = m_extruder_shapes[index]; @@ -100,7 +102,9 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double return; } - if ((extruder_shape == printable_area)&&(extruder_printable_heights[index] == printable_height)) { + const double extruder_height = index < extruder_printable_heights.size() ? extruder_printable_heights[index] : printable_height; + + if ((extruder_shape == printable_area)&&(extruder_height == printable_height)) { extruder_volume.same_with_bed = true; extruder_volume.type = m_type; extruder_volume.bbox = m_bbox; @@ -113,7 +117,7 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double double poly_area = poly.area(); extruder_volume.bbox = get_extents(poly); BoundingBoxf temp_bboxf = get_extents(extruder_shape); - extruder_volume.bboxf = BoundingBoxf3{ to_3d(temp_bboxf.min, 0.), to_3d(temp_bboxf.max, extruder_printable_heights[index]) }; + extruder_volume.bboxf = BoundingBoxf3{ to_3d(temp_bboxf.min, 0.), to_3d(temp_bboxf.max, extruder_height) }; if (extruder_shape.size() >= 4 && std::abs((poly_area - double(extruder_volume.bbox.size().x()) * double(extruder_volume.bbox.size().y()))) < sqr(SCALED_EPSILON)) { diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 59a857816e..849aa4e31a 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -157,7 +157,7 @@ PartPlate::PartPlate() init(); } -PartPlate::PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, int height, Plater* platerObj, Model* modelObj, bool printable, PrinterTechnology tech) +PartPlate::PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, double height, Plater* platerObj, Model* modelObj, bool printable, PrinterTechnology tech) :m_partplate_list(partplate_list), m_plater(platerObj), m_model(modelObj), printer_technology(tech), m_origin(origin), m_width(width), m_depth(depth), m_height(height), m_printable(printable) { init(); @@ -1757,26 +1757,25 @@ std::vector PartPlate::get_extruders_under_cli(bool conside_custom_gcode, D else obj_support = glb_support; - if (!obj_support) - continue; + if (obj_support) { + int obj_support_intf_extr = 0; + const ConfigOption* support_intf_extr_opt = object->config.option("support_interface_filament"); + if (support_intf_extr_opt != nullptr) + obj_support_intf_extr = support_intf_extr_opt->getInt(); + if (obj_support_intf_extr != 0) + plate_extruders.push_back(obj_support_intf_extr); + else if (glb_support_intf_extr != 0) + plate_extruders.push_back(glb_support_intf_extr); - int obj_support_intf_extr = 0; - const ConfigOption* support_intf_extr_opt = object->config.option("support_interface_filament"); - if (support_intf_extr_opt != nullptr) - obj_support_intf_extr = support_intf_extr_opt->getInt(); - if (obj_support_intf_extr != 0) - plate_extruders.push_back(obj_support_intf_extr); - else if (glb_support_intf_extr != 0) - plate_extruders.push_back(glb_support_intf_extr); - - int obj_support_extr = 0; - const ConfigOption* support_extr_opt = object->config.option("support_filament"); - if (support_extr_opt != nullptr) - obj_support_extr = support_extr_opt->getInt(); - if (obj_support_extr != 0) - plate_extruders.push_back(obj_support_extr); - else if (glb_support_extr != 0) - plate_extruders.push_back(glb_support_extr); + int obj_support_extr = 0; + const ConfigOption* support_extr_opt = object->config.option("support_filament"); + if (support_extr_opt != nullptr) + obj_support_extr = support_extr_opt->getInt(); + if (obj_support_extr != 0) + plate_extruders.push_back(obj_support_extr); + else if (glb_support_extr != 0) + plate_extruders.push_back(glb_support_extr); + } int obj_outer_wall_extr = 0; if (const ConfigOption* wall_opt = object->config.option("outer_wall_filament_id"); wall_opt != nullptr) @@ -2473,7 +2472,7 @@ void PartPlate::clear(bool clear_sliced_result) /* size and position related functions*/ //set position and size -void PartPlate::set_pos_and_size(Vec3d& origin, int width, int depth, int height, bool with_instance_move, bool do_clear) +void PartPlate::set_pos_and_size(Vec3d& origin, int width, int depth, double height, bool with_instance_move, bool do_clear) { bool size_changed = false; //size changed means the machine changed bool pos_changed = false; @@ -2772,10 +2771,10 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi if (instance_box.min.z() < SINKING_Z_THRESHOLD) { // Orca: For sinking object, we use a more expensive algorithm so part below build plate won't be considered - // m_plater is null in CLI mode. - if (m_plater && plate_box.intersects(instance_box)) { + // m_height mirrors the printer's printable height and is set in CLI mode too, unlike m_plater. + if (plate_box.intersects(instance_box)) { // TODO: FIXME: this does not take exclusion area into account - const BuildVolume build_volume(get_shape(), m_plater->build_volume().printable_height(), m_extruder_areas, m_extruder_heights); + const BuildVolume build_volume(get_shape(), m_height, m_extruder_areas, m_extruder_heights); const auto state = instance->calc_print_volume_state(build_volume); outside = state == ModelInstancePVS_Partly_Outside; } @@ -4099,7 +4098,7 @@ void PartPlate::on_filament_deleted(int filament_count, int filament_id) /* PartPlate List related functions*/ -PartPlateList::PartPlateList(int width, int depth, int height, Plater* platerObj, Model* modelObj, PrinterTechnology tech) +PartPlateList::PartPlateList(int width, int depth, double height, Plater* platerObj, Model* modelObj, PrinterTechnology tech) :m_plate_width(width), m_plate_depth(depth), m_plate_height(height), m_plater(platerObj), m_model(modelObj), printer_technology(tech), unprintable_plate(this, Vec3d(0.0 + width * (1. + LOGICAL_PART_PLATE_GAP), 0.0, 0.0), width, depth, height, platerObj, modelObj, false, tech) { @@ -4544,7 +4543,7 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini } //this may be happened after machine changed -void PartPlateList::reset_size(int width, int depth, int height, bool reload_objects, bool update_shapes) +void PartPlateList::reset_size(int width, int depth, double height, bool reload_objects, bool update_shapes) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":before size: plate_width %1%, plate_depth %2%, plate_height %3%") % m_plate_width % m_plate_depth % m_plate_height; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":after size: plate_width %1%, plate_depth %2%, plate_height %3%") % width % depth % height; @@ -6699,7 +6698,7 @@ int PartPlateList::load_gcode_files() //BoundingBoxf3 print_volume = m_plate_list[i]->get_bounding_box(false); //print_volume.max(2) = this->m_plate_height; //print_volume.min(2) = -1e10; - m_model->update_print_volume_state({m_plate_list[i]->get_shape(), (double)this->m_plate_height, m_plate_list[i]->get_extruder_areas(), m_plate_list[i]->get_extruder_heights() }); + m_model->update_print_volume_state({m_plate_list[i]->get_shape(), this->m_plate_height, m_plate_list[i]->get_extruder_areas(), m_plate_list[i]->get_extruder_heights() }); if (!m_plate_list[i]->load_gcode_from_file(m_plate_list[i]->m_gcode_path_from_3mf)) ret ++; diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 58c0f95b87..8ad2f4a7d1 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -96,7 +96,7 @@ private: Vec3d m_origin; int m_width; int m_depth; - int m_height; + double m_height; float m_height_to_lid; float m_height_to_rod; bool m_printable; @@ -227,7 +227,7 @@ public: static void load_render_colors(); PartPlate(); - PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, int height, Plater* platerObj, Model* modelObj, bool printable=true, PrinterTechnology tech = ptFFF); + PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, double height, Plater* platerObj, Model* modelObj, bool printable=true, PrinterTechnology tech = ptFFF); ~PartPlate(); bool operator<(PartPlate&) const; @@ -328,7 +328,7 @@ public: Vec3d get_center_origin(); /* size and position related functions*/ //set position and size - void set_pos_and_size(Vec3d& origin, int width, int depth, int height, bool with_instance_move, bool do_clear = true); + void set_pos_and_size(Vec3d& origin, int width, int depth, double height, bool with_instance_move, bool do_clear = true); // BBS Vec2d get_size() const { return Vec2d(m_width, m_depth); } @@ -590,7 +590,7 @@ class PartPlateList : public ObjectBase int m_plate_width; int m_plate_depth; - int m_plate_height; + double m_plate_height; float m_height_to_lid; float m_height_to_rod; @@ -698,12 +698,12 @@ public: static bool is_load_cali_texture; static bool is_load_extruder_only_area_textures; - PartPlateList(int width, int depth, int height, Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); + PartPlateList(int width, int depth, double height, Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); PartPlateList(Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); ~PartPlateList(); //this may be happened after machine changed - void reset_size(int width, int depth, int height, bool reload_objects = true, bool update_shapes = false); + void reset_size(int width, int depth, double height, bool reload_objects = true, bool update_shapes = false); //clear all the instances in the plate, but keep the plates void clear(bool delete_plates = false, bool release_print_list = false, bool except_locked = false, int plate_index = -1); //clear all the instances in the plate, and delete the plates, only keep the first default plate @@ -717,7 +717,7 @@ public: //get the plate stride double plate_stride_x(); double plate_stride_y(); - void get_plate_size(int& width, int& depth, int& height) { + void get_plate_size(int& width, int& depth, double& height) { width = m_plate_width; depth = m_plate_depth; height = m_plate_height; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0347803dbc..156cc2388c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -8278,7 +8278,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ bool dlg_cont = true; bool is_user_cancel = false; bool translate_old = false; - int current_width = 0, current_depth = 0, current_height = 0, project_filament_count = 1; + int current_width = 0, current_depth = 0, project_filament_count = 1; + double current_height = 0; if (input_files.empty()) return std::vector(); diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index bf3981f519..5d3e301ea7 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(${_TEST_NAME}_tests test_arachne_walls.cpp test_arrange.cpp test_bambu_networking.cpp + test_buildvolume.cpp test_calib.cpp test_clipper_offset.cpp test_clipper_utils.cpp diff --git a/tests/libslic3r/test_buildvolume.cpp b/tests/libslic3r/test_buildvolume.cpp new file mode 100644 index 0000000000..b2e8040d68 --- /dev/null +++ b/tests/libslic3r/test_buildvolume.cpp @@ -0,0 +1,40 @@ +#include + +#include "libslic3r/BuildVolume.hpp" + +using namespace Slic3r; + +static std::vector rect_area(double w, double d) +{ + return { { 0., 0. }, { w, 0. }, { w, d }, { 0., d } }; +} + +// extruder_printable_height and extruder_printable_area are independent config options, so a +// profile can leave the heights short. BuildVolume must not index past the end of the heights. +TEST_CASE("BuildVolume falls back to the bed height when extruder_printable_height is short", "[BuildVolume]") +{ + const std::vector bed = rect_area(200., 200.); + const std::vector> areas = { rect_area(200., 200.), rect_area(100., 200.) }; + const std::vector heights = { 180. }; + + const BuildVolume build_volume(bed, 250., areas, heights); + + REQUIRE(build_volume.get_extruder_area_count() == 2); + // The extruder with a height of its own keeps it, and differs from the bed, so it gets its own volume. + CHECK_THAT(build_volume.get_extruder_area_volume(0).bboxf.max.z(), Catch::Matchers::WithinAbs(180., 1e-6)); + // The extruder without one falls back to the bed's printable_height instead of reading out of range. + CHECK_THAT(build_volume.get_extruder_area_volume(1).bboxf.max.z(), Catch::Matchers::WithinAbs(250., 1e-6)); +} + +TEST_CASE("BuildVolume keeps per-extruder heights when both vectors match", "[BuildVolume]") +{ + const std::vector bed = rect_area(200., 200.); + const std::vector> areas = { rect_area(120., 200.), rect_area(100., 200.) }; + const std::vector heights = { 180., 200.5 }; + + const BuildVolume build_volume(bed, 250., areas, heights); + + REQUIRE(build_volume.get_extruder_area_count() == 2); + CHECK_THAT(build_volume.get_extruder_area_volume(0).bboxf.max.z(), Catch::Matchers::WithinAbs(180., 1e-6)); + CHECK_THAT(build_volume.get_extruder_area_volume(1).bboxf.max.z(), Catch::Matchers::WithinAbs(200.5, 1e-6)); +} From 134b9ad96e21500eccce9b7ce26a8fb16e4b1cf3 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Sat, 5 Sep 2026 17:47:58 +0300 Subject: [PATCH 105/208] Fix organic tree support generating one less bottom interface layer than defined (#15525) --- src/libslic3r/Support/SupportCommon.cpp | 12 +++++++----- src/libslic3r/Support/TreeModelVolumes.cpp | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index b6df219866..8dae218da0 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -65,11 +65,13 @@ std::pair generate_interfa const bool smooth_supports = support_params.support_style != smsGrid; SupportGeneratorLayersPtr &interface_layers = base_and_interface_layers.first; SupportGeneratorLayersPtr &base_interface_layers = base_and_interface_layers.second; - // The user-facing interface layer counts include the contact layer. Internally, - // contact layers are generated separately, so only the remaining layers are - // projected into intermediate interface/base-interface layers here. - const size_t num_top_interface_layers = support_params.has_top_contacts ? support_params.num_top_interface_layers - 1 : 0; - const size_t num_bottom_interface_layers = support_params.has_bottom_contacts ? support_params.num_bottom_interface_layers - 1 : 0; + // Contacts printed separately consume one requested interface layer. Organic + // bottom contacts are projection seeds and are not printed separately. + const bool organic_tree = support_params.support_style == smsTreeOrganic; + const size_t num_top_interface_layers = support_params.has_top_contacts ? + support_params.num_top_interface_layers - 1 : 0; + const size_t num_bottom_interface_layers = support_params.has_bottom_contacts ? + support_params.num_bottom_interface_layers - (organic_tree ? 0 : 1) : 0; const size_t num_top_base_interface_layers = std::min(support_params.num_top_base_interface_layers, num_top_interface_layers); const size_t num_bottom_base_interface_layers = std::min(support_params.num_bottom_base_interface_layers, num_bottom_interface_layers); const size_t num_top_interface_layers_only = num_top_interface_layers - num_top_base_interface_layers; diff --git a/src/libslic3r/Support/TreeModelVolumes.cpp b/src/libslic3r/Support/TreeModelVolumes.cpp index 7a769c77d1..70c33aab0d 100644 --- a/src/libslic3r/Support/TreeModelVolumes.cpp +++ b/src/libslic3r/Support/TreeModelVolumes.cpp @@ -32,7 +32,7 @@ namespace Slic3r::TreeSupport3D using namespace std::literals; // or warning -// had to use a define beacuse the macro processing inside macro BOOST_LOG_TRIVIAL() +// had to use a define because the macro processing inside macro BOOST_LOG_TRIVIAL() #define error_level_not_in_cache debug //FIXME Machine border is currently ignored. From 0224741105e2f6c52a171b3d975cbe68047c710d Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Sat, 5 Sep 2026 17:48:35 +0300 Subject: [PATCH 106/208] Fix organic support being printed into object top surfaces (#15539) --- src/libslic3r/Support/SupportCommon.cpp | 48 +++++++++++++------------ 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index 8dae218da0..e734608803 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -1654,28 +1654,32 @@ void generate_support_toolpaths( if (top_contact_layer.could_merge(interface_layer) && ! raft_layer) top_contact_layer.merge(std::move(interface_layer)); } - if (!bottom_interfaces && support_params.can_merge_support_regions) { - if (base_layer.could_merge(bottom_contact_layer)) - base_layer.merge(std::move(bottom_contact_layer)); - else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging) - base_layer = std::move(bottom_contact_layer); - } else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) { - if (top_interfaces && bottom_interfaces) { - top_contact_layer.merge(std::move(bottom_contact_layer)); - } else if (bottom_interfaces) { - top_contact_layer.set_polygons_to_extrude( - diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude())); - } else { - bottom_contact_layer.set_polygons_to_extrude( - diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude())); - } - } else if (bottom_contact_layer.could_merge(interface_layer) && ! organic_tree) { - const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface; - if (bottom_interfaces && interface_layer_is_bottom) { - bottom_contact_layer.merge(std::move(interface_layer)); - } else { - bottom_contact_layer.set_polygons_to_extrude( - diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude())); + // Orca: Organic bottom contacts are projection seeds, not same-layer toolpaths. + // Do not merge them into another same-layer support region. + if (!organic_tree) { + if (!bottom_interfaces && support_params.can_merge_support_regions) { + if (base_layer.could_merge(bottom_contact_layer)) + base_layer.merge(std::move(bottom_contact_layer)); + else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging) + base_layer = std::move(bottom_contact_layer); + } else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) { + if (top_interfaces && bottom_interfaces) { + top_contact_layer.merge(std::move(bottom_contact_layer)); + } else if (bottom_interfaces) { + top_contact_layer.set_polygons_to_extrude( + diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude())); + } else { + bottom_contact_layer.set_polygons_to_extrude( + diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude())); + } + } else if (bottom_contact_layer.could_merge(interface_layer)) { + const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface; + if (bottom_interfaces && interface_layer_is_bottom) { + bottom_contact_layer.merge(std::move(interface_layer)); + } else { + bottom_contact_layer.set_polygons_to_extrude( + diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude())); + } } } From 2ad9c87dda2624af447903663a0562e6ee5ce89e Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 5 Sep 2026 12:08:38 -0500 Subject: [PATCH 107/208] fix: GIT_COMMIT_HASH forces full rebuilds and defeats compiler caching (#15537) --- CMakeLists.txt | 27 -------------- build_win.bat | 2 +- src/dev-utils/BaseException.cpp | 3 +- src/libslic3r/libslic3r_version.h.in | 3 -- src/slic3r/CMakeLists.txt | 14 ++++++++ src/slic3r/GUI/AboutDialog.cpp | 3 +- src/slic3r/GUI/BuildCommit.cpp | 9 +++++ src/slic3r/GUI/BuildCommit.hpp | 15 ++++++++ src/slic3r/GUI/GUI_App.cpp | 3 +- src/slic3r/GUI/TroubleshootDialog.cpp | 7 ++-- src/slic3r/GitCommitHash.cmake | 51 +++++++++++++++++++++++++++ 11 files changed, 100 insertions(+), 37 deletions(-) create mode 100644 src/slic3r/GUI/BuildCommit.cpp create mode 100644 src/slic3r/GUI/BuildCommit.hpp create mode 100644 src/slic3r/GitCommitHash.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 972627d0c2..78dd2586da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -95,33 +95,6 @@ else () add_compile_definitions("$<$:WXINSPECTOR_DISABLE>") endif () -find_package(Git) -if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") - message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") - if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Convert the given hash to short hash - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - else() - # No .git directory (e.g., Flatpak sandbox) — truncate directly - string(SUBSTRING "$ENV{git_commit_hash}" 0 7 GIT_COMMIT_HASH) - endif() - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") -elseif(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Check current Git commit hash - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") -endif() - if(DEFINED ENV{SLIC3R_STATIC}) set(SLIC3R_STATIC_INITIAL $ENV{SLIC3R_STATIC}) else() diff --git a/build_win.bat b/build_win.bat index 15399d5e3d..c447d8a71f 100644 --- a/build_win.bat +++ b/build_win.bat @@ -875,7 +875,7 @@ REM get_str_len -> length in %ret% echo ORCA_DEPS_CMAKE_ARGS Extra arguments for the deps configure echo ORCA_SLICER_CMAKE_ARGS Extra arguments for the slicer configure echo ORCA_UPDATER_SIG_KEY Update signing key baked into the slicer - echo git_commit_hash Revision to stamp, so a commit does not rebuild everything + echo git_commit_hash Revision to stamp into the build, as CI does echo NINJA_STATUS Ninja progress format, if you want your own echo debugscript Set to ON to trace this script echo. diff --git a/src/dev-utils/BaseException.cpp b/src/dev-utils/BaseException.cpp index efb7a98245..048eadf151 100644 --- a/src/dev-utils/BaseException.cpp +++ b/src/dev-utils/BaseException.cpp @@ -9,6 +9,7 @@ #include #include +#include "git_commit_hash.h" #include "libslic3r_version.h" static std::string g_log_folder; @@ -39,7 +40,7 @@ CBaseException::CBaseException(HANDLE hProcess, WORD wPID, LPCTSTR lpSymbolPath, output_file->open(log_filename, std::ios::out | std::ios::app); // Output app build info in crash log so we could look for the correct PDB files - OutputString(_T("%s\n\n"), _T(SLIC3R_APP_NAME " " SoftFever_VERSION " Build " GIT_COMMIT_HASH)); + OutputString(_T("%s\n\n"), _T(SLIC3R_APP_NAME " " SoftFever_VERSION " Build " GIT_COMMIT_HASH GIT_COMMIT_SUFFIX)); } } diff --git a/src/libslic3r/libslic3r_version.h.in b/src/libslic3r/libslic3r_version.h.in index 750e092d28..df83e813c9 100644 --- a/src/libslic3r/libslic3r_version.h.in +++ b/src/libslic3r/libslic3r_version.h.in @@ -5,9 +5,6 @@ #define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@" #define SLIC3R_VERSION "@SLIC3R_VERSION@" #define SoftFever_VERSION "@SoftFever_VERSION@" -#ifndef GIT_COMMIT_HASH - #define GIT_COMMIT_HASH "0000000" // 0000000 means uninitialized -#endif #define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@" //#define SLIC3R_RC_VERSION "@SLIC3R_VERSION@" #define BBL_INTERNAL_TESTING @BBL_INTERNAL_TESTING@ diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 140b1cec39..1e39e30b0d 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -63,6 +63,8 @@ set(SLIC3R_GUI_SOURCES GUI/BitmapComboBox.hpp GUI/BonjourDialog.cpp GUI/BonjourDialog.hpp + GUI/BuildCommit.cpp + GUI/BuildCommit.hpp GUI/CrealityDiscoveryDialog.cpp GUI/CrealityDiscoveryDialog.hpp GUI/calib_dlg.cpp @@ -845,6 +847,18 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) +# Only BuildCommit.cpp includes the generated header, plus BaseException.cpp on +# Windows. Both build into libslic3r_gui, so the header only has to exist before +# that target builds. +set(_git_commit_hash_header "${CMAKE_CURRENT_BINARY_DIR}/git_commit_hash.h") +add_custom_target(git_commit_hash_header + BYPRODUCTS "${_git_commit_hash_header}" + COMMAND ${CMAKE_COMMAND} + "-DSOURCE_DIR=${CMAKE_SOURCE_DIR}" + "-DOUT_FILE=${_git_commit_hash_header}" + -P "${CMAKE_CURRENT_LIST_DIR}/GitCommitHash.cmake" + COMMENT "Resolving the git commit hash") +add_dependencies(libslic3r_gui git_commit_hash_header) if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0") set(_opengl_link_lib "") diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index a4f0f06d65..9e1cefbc84 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -3,6 +3,7 @@ #include "libslic3r/Utils.hpp" #include "libslic3r/Color.hpp" +#include "BuildCommit.hpp" #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" @@ -245,7 +246,7 @@ AboutDialog::AboutDialog() vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5)); auto version_string = std::string(SoftFever_VERSION); // _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); - wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", std::string(GIT_COMMIT_HASH)), wxDefaultPosition, wxDefaultSize); + wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", build_commit_label), wxDefaultPosition, wxDefaultSize); credits_string->SetFont(_build_string_font); wxFont version_font = GetFont(); version_font = version_font.Scaled(1.85f); // SetPointSize(20) not works on macOS because it uses a 72 PPI reference diff --git a/src/slic3r/GUI/BuildCommit.cpp b/src/slic3r/GUI/BuildCommit.cpp new file mode 100644 index 0000000000..adfe66af68 --- /dev/null +++ b/src/slic3r/GUI/BuildCommit.cpp @@ -0,0 +1,9 @@ +#include "BuildCommit.hpp" +#include "git_commit_hash.h" + +namespace Slic3r { namespace GUI { + +const char *const build_commit_hash = GIT_COMMIT_HASH; +const char *const build_commit_label = GIT_COMMIT_HASH GIT_COMMIT_SUFFIX; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/BuildCommit.hpp b/src/slic3r/GUI/BuildCommit.hpp new file mode 100644 index 0000000000..0450e710c9 --- /dev/null +++ b/src/slic3r/GUI/BuildCommit.hpp @@ -0,0 +1,15 @@ +#pragma once + +// Read these rather than including git_commit_hash.h, which changes with every +// commit and rebuilds everything that includes it. + +namespace Slic3r { namespace GUI { + +// The commit alone, safe to use in a commit URL. +extern const char *const build_commit_hash; + +// The same, with "-dirty" when the build had uncommitted changes. Use this +// wherever the build is shown to a person. +extern const char *const build_commit_label; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d661b012a3..5b80a866ca 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -9,6 +9,7 @@ #include "slic3r/GUI/TaskManager.hpp" #include "format.hpp" #include "libslic3r_version.h" +#include "BuildCommit.hpp" #include "Downloader.hpp" #include #include @@ -2580,7 +2581,7 @@ void GUI_App::init_app_config() set_log_path_and_level(log_filename, 3); #endif - BOOST_LOG_TRIVIAL(info) << boost::format("gui mode, Current OrcaSlicer Version %1% build %2%") % SoftFever_VERSION % GIT_COMMIT_HASH; + BOOST_LOG_TRIVIAL(info) << boost::format("gui mode, Current OrcaSlicer Version %1% build %2%") % SoftFever_VERSION % build_commit_label; //BBS: remove GCodeViewer as seperate APP logic if (!app_config) diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index a8c36eb975..5acb75c6ea 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -1,6 +1,7 @@ #include "TroubleshootDialog.hpp" #include "I18N.hpp" +#include "BuildCommit.hpp" #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" @@ -137,9 +138,9 @@ TroubleshootDialog::TroubleshootDialog() version->SetFont(version_font); version->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); - auto build = new Button(this, wxString(GIT_COMMIT_HASH)); + auto build = new Button(this, wxString(build_commit_label)); build->SetStyle(ButtonStyle::Regular, ButtonType::Window); - auto hash_url = "https://github.com/OrcaSlicer/OrcaSlicer/commit/" + wxString(GIT_COMMIT_HASH); + auto hash_url = "https://github.com/OrcaSlicer/OrcaSlicer/commit/" + wxString(build_commit_hash); build->SetToolTip(hash_url); build->Bind(wxEVT_BUTTON, [hash_url](wxCommandEvent &e) { wxLaunchDefaultBrowser(hash_url); @@ -371,7 +372,7 @@ wxString TroubleshootDialog::GetSysInfoAll() { wxString info; info += "Version : " + wxString(SoftFever_VERSION) + "\n" - + "Build : " + wxString(GIT_COMMIT_HASH) + "\n" + + "Build : " + wxString(build_commit_label) + "\n" + "Package : " + GetPackageType() + "\n" + "Platform : " + GetOSinfo() + "\n" + "Processor : " + GetCPUinfo() + "\n" diff --git a/src/slic3r/GitCommitHash.cmake b/src/slic3r/GitCommitHash.cmake new file mode 100644 index 0000000000..9302885e6a --- /dev/null +++ b/src/slic3r/GitCommitHash.cmake @@ -0,0 +1,51 @@ +# Writes GIT_COMMIT_HASH and GIT_COMMIT_SUFFIX into a generated header. +# GIT_COMMIT_SUFFIX is "-dirty" for a build with uncommitted changes, and empty +# otherwise. +# +# A custom target runs this at the start of every build, which picks up a new +# commit without a reconfigure. The header is rewritten only when the value +# changes. +# +# Inputs: SOURCE_DIR, OUT_FILE. + +find_package(Git QUIET) + +set(HASH "") +set(SUFFIX "") + +if (DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") + if (GIT_FOUND AND EXISTS "${SOURCE_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" + WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + # No .git directory (e.g. Flatpak sandbox) - truncate directly + string(SUBSTRING "$ENV{git_commit_hash}" 0 7 HASH) + endif () +elseif (GIT_FOUND AND EXISTS "${SOURCE_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet HEAD + WORKING_DIRECTORY ${SOURCE_DIR} RESULT_VARIABLE DIRTY ERROR_QUIET) + if (DIRTY EQUAL 1) + set(SUFFIX "-dirty") + endif () +endif () + +if (NOT HASH) + set(HASH "0000000") # uninitialized +endif () + +message(STATUS "Build commit: ${HASH}${SUFFIX}") + +string(CONCAT CONTENT + "#pragma once\n" + "#define GIT_COMMIT_HASH \"${HASH}\"\n" + "#define GIT_COMMIT_SUFFIX \"${SUFFIX}\"\n") + +set(OLD "") +if (EXISTS "${OUT_FILE}") + file(READ "${OUT_FILE}" OLD) +endif () +if (NOT OLD STREQUAL CONTENT) + file(WRITE "${OUT_FILE}" "${CONTENT}") +endif () From 067dfa35c6b2f15f82554f9eeb72b510df2e7218 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 5 Sep 2026 12:14:59 -0500 Subject: [PATCH 108/208] fix: make Windows debug builds work (#15353) Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- deps/python3/python3.cmake | 8 ++------ deps/python3/stage_windows.cmake | 20 +++----------------- src/CMakeLists.txt | 13 ++++++++++++- src/slic3r/plugin/PluginAuditManager.hpp | 3 ++- src/slic3r/plugin/PythonInterpreter.hpp | 3 ++- 5 files changed, 21 insertions(+), 26 deletions(-) diff --git a/deps/python3/python3.cmake b/deps/python3/python3.cmake index e93045fe45..d926c7e888 100644 --- a/deps/python3/python3.cmake +++ b/deps/python3/python3.cmake @@ -53,12 +53,9 @@ if(WIN32) set(_python_pcbuild_output_dir win32) endif() + # pybind11 undefines _DEBUG around Python.h so a debug build links the + # release python3xx.lib; Py_DEBUG could not load release plugin modules. set(_python_pcbuild_config Release) - set(_python_layout_debug OFF) - if(DEFINED DEP_DEBUG AND DEP_DEBUG) - set(_python_pcbuild_config Debug) - set(_python_layout_debug ON) - endif() # CPython's PCbuild needs a 64-bit-hosted toolchain: find_msbuild.bat picks the # 32-bit Bin\MSBuild.exe, whose x86 cl.exe/link.exe run out of address space @@ -101,7 +98,6 @@ if(WIN32) -DPYTHON_BUILD_DIR=/PCbuild/${_python_pcbuild_output_dir} -DPYTHON_DEST_DIR=${DESTDIR}/libpython -DPYTHON_LAYOUT_ARCH=${_python_layout_arch} - -DPYTHON_DEBUG=${_python_layout_debug} -P ${CMAKE_CURRENT_LIST_DIR}/stage_windows.cmake ) elseif(APPLE) diff --git a/deps/python3/stage_windows.cmake b/deps/python3/stage_windows.cmake index b127f06b68..758e0be9f3 100644 --- a/deps/python3/stage_windows.cmake +++ b/deps/python3/stage_windows.cmake @@ -9,9 +9,6 @@ foreach(_var PYTHON_SOURCE_DIR PYTHON_BUILD_DIR PYTHON_DEST_DIR PYTHON_LAYOUT_AR endforeach() set(_python_exe "${PYTHON_BUILD_DIR}/python.exe") -if(PYTHON_DEBUG) - set(_python_exe "${PYTHON_BUILD_DIR}/python_d.exe") -endif() if(NOT EXISTS "${_python_exe}") message(FATAL_ERROR "Built Python executable not found: ${_python_exe}") @@ -49,22 +46,11 @@ endif() set(_required_files "${PYTHON_DEST_DIR}/Lib/encodings/__init__.py" "${PYTHON_DEST_DIR}/include/Python.h" + "${PYTHON_DEST_DIR}/python.exe" + "${PYTHON_DEST_DIR}/python${_python_abi}.dll" + "${PYTHON_DEST_DIR}/libs/python${_python_abi}.lib" ) -if(PYTHON_DEBUG) - list(APPEND _required_files - "${PYTHON_DEST_DIR}/python_d.exe" - "${PYTHON_DEST_DIR}/python${_python_abi}_d.dll" - "${PYTHON_DEST_DIR}/libs/python${_python_abi}_d.lib" - ) -else() - list(APPEND _required_files - "${PYTHON_DEST_DIR}/python.exe" - "${PYTHON_DEST_DIR}/python${_python_abi}.dll" - "${PYTHON_DEST_DIR}/libs/python${_python_abi}.lib" - ) -endif() - foreach(_required_file IN LISTS _required_files) if(NOT EXISTS "${_required_file}") message(FATAL_ERROR "Staged Python file missing: ${_required_file}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0036af0a8c..f0de57f12c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,7 +33,8 @@ if (SLIC3R_GUI) set (wxWidgets_CONFIG_OPTIONS "--toolkit=gtk${SLIC3R_GTK}") find_package(wxWidgets 3.3 REQUIRED COMPONENTS base core adv html gl aui net media webview) else () - find_package(wxWidgets 3.3 CONFIG REQUIRED COMPONENTS html adv gl core base webview aui net media) + # propgrid is required by wxInspector. + find_package(wxWidgets 3.3 CONFIG REQUIRED COMPONENTS html adv gl core base webview aui net media propgrid) endif () if(UNIX) @@ -90,6 +91,16 @@ if (SLIC3R_GUI) # list(REMOVE_ITEM wxWidgets_LIBRARIES oleacc) find_package(wxInspector REQUIRED) + + # wxInspector's exported interface names the release wxWidgets import + # libraries, which a Debug build cannot link. wx is linked above instead. + get_target_property(_wxinspector_interface wxInspector::wxInspector INTERFACE_LINK_LIBRARIES) + if (_wxinspector_interface) + list(FILTER _wxinspector_interface EXCLUDE REGEX "wx(base|msw)3[0-9]u[_.]") + set_target_properties(wxInspector::wxInspector PROPERTIES + INTERFACE_LINK_LIBRARIES "${_wxinspector_interface}") + endif () + list(APPEND wxWidgets_LIBRARIES "wxInspector::wxInspector") message(STATUS "wx libs: ${wxWidgets_LIBRARIES}") diff --git a/src/slic3r/plugin/PluginAuditManager.hpp b/src/slic3r/plugin/PluginAuditManager.hpp index d6751a57fd..153f9d6107 100644 --- a/src/slic3r/plugin/PluginAuditManager.hpp +++ b/src/slic3r/plugin/PluginAuditManager.hpp @@ -1,7 +1,8 @@ #ifndef slic3r_PluginAuditManager_hpp_ #define slic3r_PluginAuditManager_hpp_ -#include +// Via pybind11 so this file requests the same python3xx.lib as everything else. +#include #include #include #include diff --git a/src/slic3r/plugin/PythonInterpreter.hpp b/src/slic3r/plugin/PythonInterpreter.hpp index ff69ce6846..e15aa91598 100644 --- a/src/slic3r/plugin/PythonInterpreter.hpp +++ b/src/slic3r/plugin/PythonInterpreter.hpp @@ -1,7 +1,8 @@ #ifndef slic3r_PythonInterpreter_hpp_ #define slic3r_PythonInterpreter_hpp_ -#include +// Via pybind11 so this file requests the same python3xx.lib as everything else. +#include #include #include #include From cd011e6385c9a86977108c5820b02688f8925acd Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Sat, 5 Sep 2026 15:22:05 -0300 Subject: [PATCH 109/208] Fix CHB parciall bridge (#15387) --- src/libslic3r/PerimeterGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 9037118f0c..a6b38889a5 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -2127,7 +2127,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim bridgeable_filtered = union_ex(offset_ex(remaining, perimeter_spacing), bridgeable_filtered); bridgeable_filtered = offset_ex(bridgeable_filtered, -perimeter_spacing); bridgeable_filtered = diff_ex(bridgeable_filtered, remaining, ApplySafetyOffset::Yes); - bridgeable_filtered = opening_ex(bridgeable_filtered, perimeter_spacing); // filter noise from the diff_ex + bridgeable_filtered = opening_ex(bridgeable_filtered, ext_perimeter_width / 2); // filter noise from the diff_ex bridgeable_filtered = offset_ex(bridgeable_filtered, perimeter_spacing); // restore the size to the original bridgeable area // Safety measure: Keep the bridge mask from intruding deeper into the // supported anchor region than the explicit anchor overlap. From 5302f703c07f63c456cb8dd8da2746c224e40e64 Mon Sep 17 00:00:00 2001 From: Wegerich Date: Sat, 5 Sep 2026 19:36:10 +0100 Subject: [PATCH 110/208] Automatically disable scarf seams when activating retraction calibration (#15543) --- src/slic3r/GUI/Plater.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 156cc2388c..7f1e6ab400 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -16268,6 +16268,7 @@ void Plater::calib_retraction(const Calib_Params& params) obj->config.set_key_value("wall_sequence", new ConfigOptionEnum(WallSequence::InnerOuter)); obj->config.set_key_value("overhang_reverse", new ConfigOptionBool(false)); obj->config.set_key_value("precise_z_height", new ConfigOptionBool(false)); + obj->config.set_key_value("seam_slope_type", new ConfigOptionEnum(SeamScarfType::None)); changed_objects({ 0 }); From 6014f3fb43502ce9dcbfd2abb6f087f6eef76033 Mon Sep 17 00:00:00 2001 From: ocidburn <79639602+ocidburn@users.noreply.github.com> Date: Sat, 5 Sep 2026 22:05:11 +0200 Subject: [PATCH 111/208] Fix: guard the fifth null deref of the same kind, on the project-settings path (#15451) --- src/libslic3r/Config.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index a2756a9f8e..394cfb5b74 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -1049,7 +1049,8 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex std::vector& different_settings = this->option("different_settings_to_system", true)->values; size_t size = different_settings.size(); if (size == 0) { - size = this->option("filament_settings_id")->values.size() + 2; + const auto *filament_ids = this->option("filament_settings_id"); + size = (filament_ids ? filament_ids->values.size() : 0) + 2; different_settings.resize(size); } From 71e4e191917d70a7a508a1a3f322730b6a79d86d Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 6 Sep 2026 00:17:42 +0300 Subject: [PATCH 112/208] Fix crash on startup if mixed filament has invalid component (#15432) --- src/slic3r/GUI/Plater.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 7f1e6ab400..90206a438c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3988,16 +3988,16 @@ void Sidebar::update_mixed_filament_list() p->m_panel_mixed_warning->Show(false); // Show/dismiss 3D canvas notification for broken mixed filaments - if (has_mixed && !broken_set.empty()) { - auto* notify = wxGetApp().plater()->get_notification_manager(); - if (notify) + auto* notify = plater->get_notification_manager(); + GLCanvas3D* view3d_canvas = plater->get_view3D_canvas3D(); + if(view3d_canvas && view3d_canvas->is_initialized() && notify){ + if (has_mixed && !broken_set.empty()) { notify->push_notification(NotificationType::BBLMixedFilamentBroken, NotificationManager::NotificationLevel::ErrorNotificationLevel, _u8L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); - } else { - auto* notify = wxGetApp().plater()->get_notification_manager(); - if (notify) + } else { notify->close_notification_of_type(NotificationType::BBLMixedFilamentBroken); + } } if (has_mixed) { From c0c2cc5068bff9ef5e5f4e4138fa25fa1f4e65d2 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 5 Sep 2026 20:11:40 -0500 Subject: [PATCH 113/208] fix: Virtual Camera Tools install downloads the network plugin (#15540) --- src/slic3r/GUI/MediaPlayCtrl.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 71fbcb054b..0d75c3770d 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -494,13 +494,13 @@ void MediaPlayCtrl::ToggleStream() DownloadProgressDialog2(MediaPlayCtrl *ctrl) : DownloadProgressDialog(_L("Downloading Virtual Camera Tools")), ctrl(ctrl) {} struct UpgradeNetworkJob2 : UpgradeNetworkJob { - UpgradeNetworkJob2(std::shared_ptr pri) : UpgradeNetworkJob() { + UpgradeNetworkJob2() { name = "cameratools"; package_name = "camera_tools.zip"; } }; - std::shared_ptr make_job(std::shared_ptr pri) - { return std::make_shared(pri); } + std::unique_ptr make_job() override + { return std::make_unique(); } void on_finish() override { ctrl->CallAfter([ctrl = this->ctrl] { ctrl->ToggleStream(); }); From 4aa0e1d60b6f32ea84a4cfebbf1cfa93f87988e5 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 4 Sep 2026 22:10:48 +0800 Subject: [PATCH 114/208] Translate filament ids at the printer boundary Orca content-addresses every system filament, Bambu's included, but a printer, its AMS and its vendor's cloud know only that vendor's own catalog ids. The printer agent now translates between the two: outbound MQTT and FTP traffic, the AMS mapping sent with a print job, and the ids written into a 3mf bound for the printer all leave in the printer's own ids, while status messages, loaded projects and SD-card prints arrive in Orca's. An id with no mapping passes through unchanged, and an agent whose printers already speak Orca's ids translates nothing at all. Bambu's map is generated from BambuStudio's own shipped bundle; a missing or unreadable file leaves every lookup an identity rather than taking the app down. The profile check validates the map's shape, and profile CI now runs on the paths that can change it. docs/HLSD/filament_id.md records the places the map deliberately does not reach. --- .github/workflows/check_profiles.yml | 4 + docs/HLSD/filament_id.md | 223 +++++++++++++++--- scripts/assign_filament_ids.py | 19 +- scripts/tests/test_filament_id.py | 55 +++++ scripts/update_bambu_filament_ids.py | 6 +- src/OrcaSlicer.cpp | 22 ++ src/slic3r/GUI/AMSDryControl.cpp | 15 +- src/slic3r/GUI/AMSMaterialsSetting.cpp | 10 +- src/slic3r/GUI/ColorDecomposeSupport.cpp | 44 +++- .../GUI/DeviceCore/DevFilaBlackList.cpp | 7 +- src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp | 15 +- src/slic3r/GUI/DeviceManager.cpp | 11 +- src/slic3r/GUI/Plater.cpp | 9 + src/slic3r/GUI/PresetComboBoxes.cpp | 9 +- src/slic3r/GUI/SelectMachine.cpp | 16 +- src/slic3r/Utils/BBLPrinterAgent.cpp | 117 ++++++++- src/slic3r/Utils/BBLPrinterAgent.hpp | 14 ++ src/slic3r/Utils/CalibUtils.cpp | 26 +- src/slic3r/Utils/IPrinterAgent.hpp | 10 + src/slic3r/Utils/NetworkAgent.cpp | 14 ++ src/slic3r/Utils/NetworkAgent.hpp | 2 + tests/slic3rutils/CMakeLists.txt | 1 + tests/slic3rutils/test_bambu_filament_ids.cpp | 81 +++++++ 23 files changed, 652 insertions(+), 78 deletions(-) create mode 100644 tests/slic3rutils/test_bambu_filament_ids.cpp diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index 0c0750c610..b855d09da7 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -9,6 +9,10 @@ on: - release/* paths: - 'resources/profiles/**' + # The extra JSON check also validates resources/printers/bambu_filament_ids.json, + # and lives in scripts/, so a PR touching only those must still run this workflow. + - 'resources/printers/**' + - 'scripts/**' - ".github/workflows/check_profiles.yml" workflow_dispatch: diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md index 980d830d7d..4c1c1f7443 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -64,14 +64,15 @@ failing that, any compatible system preset, else the slot is skipped — every f selection surfaces a user-visible notice. Today only the Bambu AMS integration follows this pattern end to end — the device itself -reports the id, and the pipeline does all the matching. The other device integrations still -synthesize a preset id client-side in their agents (by type, brand, or color lookups against -the loaded presets) before the pipeline runs; they are intended to converge on the same -pattern, with the device-reported tray material id flowing through the shared matcher. +reports the id, `BBLPrinterAgent` translates it out of Bambu's catalog into ours, and the +pipeline does all the matching. The other device integrations still synthesize a preset id +client-side in their agents (by type, brand, or color lookups against the loaded presets) +before the pipeline runs; they are intended to converge on the same pattern, with the +device-reported tray material id flowing through the shared matcher. | Ecosystem | Where the tray id comes from today | | --- | --- | -| Bambu AMS | the device itself (RFID / user tray setting) — the `GF*` catalog | +| Bambu AMS | the device itself (RFID / user tray setting), in Bambu's own `GF*` catalog; `BBLPrinterAgent` rewrites it into our id before the matcher sees it (see [The Bambu catalog map](#the-bambu-catalog-map)) | | Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name. No preset carries a `QD_*` value, so the slot currently resolves by filament type; mapping the composed id onto the family's minted id belongs in the agent | | Creality CFS | runtime brand/type scoring returns the winning preset's id | | Klipper (AFC / Happy Hare) | runtime lookup by filament type | @@ -205,20 +206,23 @@ python scripts/assign_filament_ids.py --check # 4. verify — the sam # 5. Commit the profile edits together with scripts/filament_id_snapshot.json. ``` -The default run is idempotent and never rewrites a valid existing id; it edits profile files -byte-preservingly (indentation, BOM, and line endings intact) and re-parses them to fail -loudly. `--mint "filament_vendor/filament_type/family_name"` prints the id a **new** mint of -that triple would get, without touching anything — note that for a triple whose id already -exists it prints the next *free* salt iteration, not the live id (asking for +The default run mints ids for id-less families and replaces any declaration that is not in +`OF` format; it never rewrites a valid `OF` id, so it is idempotent and a no-op once every +family has one. It edits profile files byte-preservingly (indentation, BOM, and line endings +intact) and re-parses them to fail loudly. +`--mint "filament_vendor/filament_type/family_name"` prints the id a **new** mint of that +triple would get, without touching anything — note that for a triple whose id already exists +it prints the next *free* salt iteration, not the live id (asking for `Polymaker/PLA/PolyLite PLA` today prints the salt-1 id, because `OF5CgdDq` is taken). Maintenance modes (`--remint` is also the step for identity fixes — see the FAQ; the rest are normally only used by id migrations): -- `--remint VENDOR` re-derives a vendor's declared ids from their triples. A declaration - already equal to a salt iteration of its own triple is conformant and left alone, so - deliberate salt splits survive; convergence onto an id another bundle already uses for the - *same* triple is legal by design — that is the point. +- `--remint VENDOR` re-derives a vendor's declared ids from their triples — any vendor, BBL + included, since no bundle is exempt from the mint rule. A declaration already equal to a + salt iteration of its own triple is conformant and left alone, so deliberate salt splits + survive; convergence onto an id another bundle already uses for the *same* triple is legal + by design — that is the point. - `--drop-redundant-ids VENDOR` deletes declarations that merely re-declare an inherited OrcaFilamentLibrary id. - `--profiles DIR` points the tooling at a different profile tree (default @@ -231,22 +235,26 @@ diff. ## Reserved namespaces — never mint or hand-write into -An **island** is a frozen id namespace exempt from the mint rule because an external catalog -or device contract owns it. +A **reserved namespace** is an id space no system profile may declare, because an external +catalog or a device protocol owns the values. None of them has an owning vendor: there is no +bundle — not even the one whose printers use the catalog — that may write one into a profile. | Space | Status | Rule | | --- | --- | --- | -| `GF*` | Bambu AMS/RFID catalog — the one remaining *island* | BBL vendor only; a claim by anyone else is refused unless the snapshot sanctions that exact claim (via `--allow-shared-catalog` — see the CI section) | +| `GF*` | Bambu AMS/RFID catalog | declarable by **nobody**, BBL included: Bambu's own ids live in the generated catalog map, never in a profile | | `QD_*` | Qidi device protocol | declarable by **nobody**, Qidi included: the box composes these ids at runtime and they are not preset ids | | `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | | every already-shipped id | frozen in the snapshot (grandfathered) | frozen as-is; new claims need maintainer sign-off | The two device namespaces, in detail: -- **BBL (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, so BBL - declarations are frozen as-is and never re-minted. BBL also carries several dozen - grandfathered legacy codes that are neither `GF*` nor `OF*` (the `BETA` family's `B*` ids, - plus `Generic SBS`'s legacy `BFLSBS99`) — frozen the same way, via the snapshot. +- **Bambu (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, which is a + reason to keep it out of the profiles rather than to let one bundle own it. Every BBL family + mints an `OF` id from its triple like every other vendor's, and the correspondence to Bambu's + catalog ids lives in one generated file the app applies at the printer boundary — the next + section. Nothing under `resources/profiles/**` carries a `GF*` id today and the snapshot + grandfathers none, so a `GF*` id appearing anywhere in the tree is a mistake, whoever wrote + it. - **Qidi (`QD_*`).** `QD_*` is a device-*protocol* namespace, not a preset id space: the Qidi box path composes `QD___` ids at runtime (slot vendor and type indices reported by the device, the series digit inferred client-side from the printer @@ -256,6 +264,142 @@ The two device namespaces, in detail: protocol ids as preset ids — would put one product under five ids (`QIDI PLA Rapido` would be `QD_0_1_1` through `QD_4_1_1`), exactly the fragmentation the mint rule removes. +## The Bambu catalog map + +Bambu's printers, its AMS and its cloud know only Bambu's own catalog ids. Our profiles carry +minted `OF` ids like every other vendor's, so one generated file records the correspondence and +the app applies it **only where an id crosses to or from a Bambu printer**. + +**The file** is `resources/printers/bambu_filament_ids.json` — a header plus one row per +catalogued product, keyed by our id: + +```json +{ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": { + "OFhuaUQB": { "bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS" } + } +} +``` + +It ships in `resources/printers/`, next to `filaments_blacklist.json` — deliberately not in +`resources/profiles/`, where the loader reads every top-level `.json` as a vendor index. It +holds 100 rows today, one per product BambuStudio ships, and the correspondence is +one-to-one in both directions. + +**It is generated, never hand-edited.** `python scripts/update_bambu_filament_ids.py` rebuilds +it from **BambuStudio's own shipped BBL bundle** — a sparse shallow clone of upstream `master`, +or `--bambustudio-dir `. Our BBL bundle is a fork of +Bambu's, tuned and extended independently, so it is not the source of truth for Bambu's ids. +A row's key is whatever id our tree already mints for that same +`(filament_vendor, filament_type, family)` triple; a product we do not ship gets a freshly +generated key and the row sits inert until some bundle claims that triple — `OFdyfQvU` / +`GFG03`, "Bambu PETG Matte", is such a row today. + +**Regenerate it in the same commit as every BBL profile sync**, and read the drift report it +prints. Two lines, both informational, neither blocking the write: + +```text +upstream ships 'Bambu PETG Matte' (Bambu Lab/PETG), we ship nothing with that identity +Orca BBL families with no row: 135 Orca-only product(s) +``` + +The first names each upstream product our BBL bundle has no same-identity family for — +sometimes a genuinely missing product, sometimes a name drift a follow-up rename would +converge. The second counts our own BBL families that matched no row: 135 of 234 today, of +which 109 send an `OF` id on the wire and 26 already rode `OF` ids inherited from the +OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 109 was the +one-off size of the transition and stopped being computable from the tree once the BBL bundle +was re-minted, so do not "fix" the report to print it. + +**Check 8** lives in `check_filament_ids`, so profile CI runs it alongside the other seven. It +holds the file to its contract: it parses, carries `source` / `bambustudio_commit` / +`generated`, keys only `OF`-format ids, maps each Bambu id at most once, and — for every row +whose key the tree actually claims — agrees with the tree on that id's `(vendor, type, name)` +triple. A row for a product we do not ship is skipped, not an error. The remedy it prints is +always the same: regenerate the map and commit the diff for review. + +### The runtime rule: swap on hit + +Outbound, our id with a row becomes Bambu's; inbound, Bambu's id with a row becomes ours. +Everything else is forwarded untouched — an `OF` id with no row, a Bambu id for a product we do +not ship, a `P`-hex user id, `"null"`, an empty string. Translation is confined to the +boundary: nothing between the boundaries ever holds a Bambu id. + +Translating one value is a capability of the printer agent: `IPrinterAgent` declares +`to_orca_filament_id` and `from_orca_filament_id` returning their argument, and `BBLPrinterAgent` +overrides them with Bambu's map, so an agent whose printers already speak our ids inherits the +identity default and translates nothing. `NetworkAgent` forwards both to the live agent, so the +comparison sites below reach them through `wxGetApp().getAgent()` and leave an id untranslated +while no agent is live. Whole documents are Bambu's business alone: +`BBLPrinterAgent::to_orca_payload` and `from_orca_payload` rewrite every string under +`tray_info_idx`, `filament_id` or `filamentId` at any depth; text that does not parse, or carries +none of those keys, comes back unchanged. The map is loaded once, lazily; a missing or malformed +file degrades to identity with a log line rather than failing. + +| Boundary | Where it translates | +| --- | --- | +| Everything the agent sends | `BBLPrinterAgent::send_message` and `send_message_to_printer`, plus `PrintParams::ams_mapping_info` in `dispatch_start` — the funnel all five `start_*` calls share | +| Everything the agent receives | `set_on_message_fn` and `set_on_local_message_fn` wrap their callback, so `MachineObject::parse_json` and everything downstream see our ids only | +| 3mf export | `Plater::export_3mf` writes Bambu's ids into `slice_info.config`, gated on `preset_bundle.is_bbl_vendor()` — the printer reads that file and knows only its own catalog, and no other vendor's export is affected. The CLI has its own writer in `OrcaSlicer.cpp`; it does the same, gated on the `printer_model` prefix that already decides `Print::is_BBL_printer()` for that run | +| Project ingest | `Plater::priv::load_files` reverse-maps the project's `filament_ids` before the bundle ingests them, so a project saved by an older Orca or by BambuStudio still resolves the same presets | +| Prints from the printer's SD card | `SelectMachineDialog::update_print_required_data` reverse-maps each plate's slice-info ids as it adopts the plates, so the AMS mapping dialog pairs them with trays | +| Bambu-specific comparisons | `CalibUtils.cpp`, `DeviceManager.cpp`, `DeviceCore/DevFilaSystem.cpp`, `DeviceCore/DevFilaBlackList.cpp`, `SelectMachine.cpp`, `AMSDryControl.cpp`, `AMSMaterialsSetting.cpp`, `PresetComboBoxes.cpp`, `ColorDecomposeSupport.cpp` | + +That last row is the rule to follow when a new Bambu-specific behaviour is added: **translate +the value you are about to compare, never the table you compare it against.** The shipped data +those sites read is Bambu's and stays verbatim — `white_fila_ids` in +`resources/printers/filaments_blacklist.json`, the calibration id lists in +`resources/printers/.json`, `fila_id` in +`resources/profiles/BBL/filament/filaments_color_codes.json`. + +`tests/slic3rutils/test_bambu_filament_ids.cpp` covers the lookups, the payload rewrite and the +Bambu-specific rules. `orcaslicer_discover_tests` registers a Catch2 tag as a CTest **label**, +not as part of the test name, so `-R` matches nothing here and the filter is `-L`: + +```bash +ctest --test-dir /tests/slic3rutils -L BambuFilamentIds +``` + +### Three places the map deliberately does not reach + +The map and its lookups live in the GUI library, which libslic3r cannot link against and which a +GUI-less build does not link at all. Three consequences are known and documented; none is worth +pulling the map down into libslic3r for. + +- **The support display type in `PrintConfig.cpp`.** `DynamicPrintConfig::get_filament_type` + picks `PLA-S` / `Sup.PLA` and `PA-S` / `Sup.PA` for a support filament by testing + `filament_id` against `GFS00` and `GFS01`, and otherwise falls back on `filament_type` — a + fallback that returns those same two pairs for `"PLA"` and `"PA"`. Bambu Support W inherits + `fdm_filament_pla` and Bambu Support G inherits `fdm_filament_pa`, so with their `OF` ids the + fallback produces exactly what the id branches produced. (The only config that ever carries a + singular `filament_id` key is the AMS tray config built in `Plater.cpp`, and that one never + reaches this function.) These two lines are the only mention of a Bambu id anywhere in + libslic3r, and they need no change. +- **Config imports.** `PresetBundle::import_presets` (File ▸ Import ▸ Import Configs, for + `.json` / `.zip` / `.orca_filament` / `.orca_printer` / `.orca_bundle`) and + `PresetBundle::load_config_file` (the CLI's `--load-settings` of a G-code file with an + embedded config) both parse inside libslic3r, out of the GUI's reach, so a Bambu id carried + in such a file lands on the imported preset untranslated. The effect is bounded: that preset + does not auto-match an AMS tray while the stale id is live, and the id does not survive + being saved — `Preset::save` writes a `filament_id` key only for a preset whose `inherits` is + empty, and on the next load an inheriting preset takes its parent's id. A known gap, and not + a regression: nothing forwarded a stale id before either. +- **A build configured without the GUI.** `target_link_libraries(OrcaSlicer libslic3r_gui)` sits + inside `if (SLIC3R_GUI)` in `src/CMakeLists.txt`, so the lookups are not linkable when the GUI + is off. The CLI's 3mf writer in `src/OrcaSlicer.cpp` therefore guards its translation with + `#ifdef SLIC3R_GUI`, and a 3mf that such a build slices for a Bambu printer carries our `OF` + ids in `slice_info.config` rather than Bambu's. Every shipped build enables the GUI, so this + reaches only a purpose-built GUI-less binary. + +One more thing worth recording before it is rediscovered: +`SyncAmsInfoDialog::update_print_required_data` is a structural twin of the SD-card function +above and carries no translation. It has no callers today and its plate list is only ever read +for `printer_model_id`, so it is not a live gap — but wiring it up without adding the reverse +map would silently reproduce the bug. + ## How CI enforces this Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via @@ -271,7 +415,8 @@ checks ratchet all new profiles to the clean rules. The checks, in brief: -- **Format** — every id is either in the snapshot, `OF` + 6 base62 chars, or BBL's. +- **Format** — every id occurring in the tree is `OF` + 6 base62 chars. No exceptions: not a + grandfathered snapshot entry, not BBL. - **Snapshot equality** — tree claims == snapshot claims **and** tree triples == snapshot triples, both directions: any `filament_vendor`/`filament_type`/family-name change surfaces as a snapshot diff. @@ -282,22 +427,34 @@ The checks, in brief: base name (a rename re-exposes the library preset, since alias shadowing is name-based), a non-empty `compatible_printers` (an empty one shadows nothing), and no own id key (structure rule 4). -- **Triple integrity** — every declarer outside the BBL island must resolve a non-empty - `filament_vendor` and `filament_type` (generics use `"Generic"`), and all declarers of one - family within a bundle must agree on the triple. -- **Reserved namespaces** — `GF*` outside BBL, `P<7-hex>` or `"null"` anywhere, unless that - exact claim is grandfathered in the snapshot; `QD_*` anywhere, with no exception. +- **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and + `filament_type` (generics use `"Generic"`), and all declarers of one family within a + bundle must agree on the triple. +- **Reserved namespaces** — `GF*`, `QD_*`, `P<7-hex>` or `"null"` claimed by any vendor, + BBL and Qidi included, unless that exact claim is grandfathered in the snapshot (none is + today). - **Structure** — no `filament_id` key on newly instantiated presets; no new declared-vs-inherited id drift; every instantiated system filament must resolve an effective id through its `inherits` chain (recall: an id-less one is a hard load error in C++ that discards the whole vendor bundle). +- **Bambu catalog map** — `resources/printers/bambu_filament_ids.json` parses, carries its + `source` / `bambustudio_commit` / `generated` header, keys only `OF`-format ids, maps each + Bambu id at most once, and agrees with the tree on the triple of every row whose key the + tree claims. See [The Bambu catalog map](#the-bambu-catalog-map); the remedy is always to + regenerate, never to hand-edit. -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 via a *declared* id is caught by the mint-conformance -check; sharing through inheritance carries no declaration to check and surfaces only as a new -claim in the snapshot diff — which is exactly why that diff is the gate. +Any new claim on a **reserved namespace** — a profile that declares a `GF*`, `QD_*` or +`P<7-hex>` id, whatever its vendor — is refused by `--update-snapshot` unless you pass +`--allow-shared-catalog`, and even then it lands in the snapshot diff for maintainer review. +There is no such claim in the tree today and adding one should be a last resort: for a +Bambu-cataloged product, the catalog map is where the correspondence belongs. Any other new +sharing via a *declared* id is caught by the mint-conformance check; sharing through +inheritance carries no declaration to check and surfaces only as a new claim in the snapshot +diff — which is exactly why that diff is the gate. + +`orca_extra_profile_check.py` separately holds every declared id to the AMS 8-character limit, +tree-wide and for every vendor alike, scoped to the presets a vendor's index actually +references (a file the index never loads cannot break AMS matching). Complementing the Python checks, CI also runs the C++ profile validator with `-f` (`check_filament_subtypes`): it loads the bundle exactly as the app does and flags any printer diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index 7ce907f816..d410242277 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -729,6 +729,8 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # -- 8. Bambu catalog map -------------------------------------------------- try: bambu_map = load_json(map_path) + if not isinstance(bambu_map, dict): + raise ValueError("top level is not a JSON object") except (OSError, ValueError) as e: print_error(f"Bambu catalog map {map_path} does not parse ({e}); {BAMBU_MAP_HINT}") errors += 1 @@ -737,7 +739,15 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, if not bambu_map.get(key): print_error(f'Bambu catalog map {map_path} is missing "{key}"; {BAMBU_MAP_HINT}') errors += 1 - rows = bambu_map.get("filaments", {}) + rows = bambu_map.get("filaments") + # An empty or absent section is not a well-formed map: it makes every runtime + # translation silently degrade to identity (BBLPrinterAgent logs nothing for it), + # and it is what a regeneration against the wrong --bambustudio-dir writes. + if not isinstance(rows, dict) or not rows: + print_error(f'Bambu catalog map {map_path} declares no "filaments" rows; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + rows = {} bambu_id_owners = {} for fid, row in sorted(rows.items()): if not OF_ID_RE.match(fid): @@ -745,7 +755,12 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"{BAMBU_MAP_HINT}") errors += 1 bambu_id = row.get("bambu_id") - if bambu_id in bambu_id_owners: + if not bambu_id: + # An empty id would map the empty string to a real filament at runtime. + print_error(f'Bambu catalog map row "{fid}" declares no "bambu_id"; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + elif bambu_id in bambu_id_owners: print_error( f'Bambu catalog map: Bambu id "{bambu_id}" is mapped by both ' f'"{bambu_id_owners[bambu_id]}" and "{fid}"; {BAMBU_MAP_HINT}') diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index 3d668d4fc3..b9291e9433 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -682,6 +682,13 @@ class TestCheck8(OfCleanTreeCase): ubfi.write_map(path, rows, "testcommit", "2026-09-04") return path + def _write_raw_map(self, payload): + """Write a map write_map() would never produce (hand-edited or mis-generated).""" + path = os.path.join(self.t.dir, "bambu_filament_ids.json") + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(payload, f, indent=2, ensure_ascii=False, sort_keys=True) + return path + def test_row_triple_must_match_tree(self): fid = afi.generate_filament_id("V", "PLA", "Foo") self.t.write_preset("VendorA", preset("Foo @base", filament_id=fid, @@ -712,6 +719,54 @@ class TestCheck8(OfCleanTreeCase): errors, out = self.t.check(map_path) self.assertEqual(errors, 0, out) + def test_non_object_top_level_is_a_clean_error(self): + # A hand-edited map that is a list (or any non-object) must report the map, + # not raise AttributeError out of the check. + map_path = self._write_raw_map([{"bambu_id": "GFZ00"}]) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("does not parse", out) + self.assertIn("regenerate the map", out) + + def test_empty_filaments_section_is_an_error(self): + # What a regeneration against the wrong --bambustudio-dir writes: a well-formed + # header with zero rows. At runtime every translation silently becomes identity. + map_path = self._write_map({}) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('no "filaments" rows', out) + + def test_absent_filaments_section_is_an_error(self): + map_path = self._write_raw_map({ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "testcommit", + "generated": "2026-09-04", + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('no "filaments" rows', out) + + def test_row_without_bambu_id_is_an_error(self): + # Two such rows used to collide on None and be reported as a duplicate id. + map_path = self._write_map({ + "OFaaaaaa": {"vendor": "V", "type": "PLA", "name": "Foo"}, + "OFbbbbbb": {"vendor": "V", "type": "PETG", "name": "Bar"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('"OFaaaaaa" declares no "bambu_id"', out) + self.assertIn('"OFbbbbbb" declares no "bambu_id"', out) + self.assertNotIn("mapped by both", out) + + def test_empty_bambu_id_is_an_error(self): + # "" would land in the runtime map and translate an empty tray id into a filament. + map_path = self._write_map({ + "OFaaaaaa": {"bambu_id": "", "vendor": "V", "type": "PLA", "name": "Foo"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('declares no "bambu_id"', out) + # --------------------------------------------------------------------------- # --update-snapshot diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index cd5e05e3bc..fc195a3f9c 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -8,9 +8,9 @@ products Bambu ships. The map is generated from BambuStudio's OWN shipped BBL bundle, never from Orca's: Orca's BBL bundle is a fork of Bambu's, tuned and extended independently, so it is not the source of truth for Bambu's catalog ids. -Nothing in OrcaSlicer consumes this map yet; it exists so a later change can -translate an id only where it crosses to or from a Bambu printer, without -hand-maintaining the correspondence. +src/slic3r/Utils/BBLPrinterAgent.cpp loads it at runtime and translates an id +only where it crosses to or from a Bambu printer, so the correspondence never +has to be hand-maintained. See docs/HLSD/filament_id.md. One row per BambuStudio filament PRODUCT: one commercial line = one "@base"-declared filament_id, shared by every per-printer/per-nozzle diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 33669abcf2..2e39f802cf 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -100,6 +100,10 @@ using namespace nlohmann; #ifdef SLIC3R_GUI #include "slic3r/GUI/GUI_Init.hpp" + // BBLPrinterAgent::from_orca_filament_id(); the map and its lookups live in libslic3r_gui, + // which only a SLIC3R_GUI build links (see target_link_libraries(OrcaSlicer libslic3r_gui) + // in CMakeLists). + #include "slic3r/Utils/BBLPrinterAgent.hpp" #endif /* SLIC3R_GUI */ using namespace Slic3r; @@ -6504,6 +6508,20 @@ int CLI::run(int argc, char **argv) std::string nozzle_diameter_str; if (nozzle_diameter_option) nozzle_diameter_str = nozzle_diameter_option->serialize(); +#ifdef SLIC3R_GUI + // A Bambu printer reads slice_info.config and knows only its own catalog ids. The GUI + // gates the same translation on PresetBundle::is_bbl_vendor(); the CLI has no + // PresetBundle, so reuse the printer_model prefix that already decides + // Print::is_BBL_printer() for this same run. + auto* printer_model_option = dynamic_cast(m_print_config.option("printer_model")); + const bool is_bbl_printer = printer_model_option && printer_model_option->value.compare(0, 9, "Bambu Lab") == 0; + // No wxApp on the CLI path, so there is no live agent to ask; the translator is stateless + // over a lazily loaded map, so one instance serves every plate and filament below. + // ORCA TODO: this assumes Bambu's is the only agent with a catalog of its own. Once another + // agent carries one, resolve the agent from the selected printer the way + // GUI_App::resolve_printer_agent_id does, rather than hard-coding BBLPrinterAgent here. + const BBLPrinterAgent bbl_agent; +#endif /* SLIC3R_GUI */ for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; @@ -6520,6 +6538,10 @@ int CLI::run(int argc, char **argv) it->type = m_print_config.get_filament_type(display_filament_type, it->id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; it->filament_id = filament_id?filament_id->get_at(it->id):""; +#ifdef SLIC3R_GUI + if (is_bbl_printer) + it->filament_id = bbl_agent.from_orca_filament_id(it->filament_id); +#endif /* SLIC3R_GUI */ } if (!plate_data->plate_thumbnail.is_valid()) { diff --git a/src/slic3r/GUI/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index a668a33c76..c191e24eac 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -1511,6 +1511,10 @@ void AMSDryCtrWin::update_filament_guide_info(DevAms* dev_ams) m_temperature_input->GetValue().ToLong(&input_temp); bool can_start = true; + // "GFA00" is Bambu's PLA id; GetFilamentDryingPreset is keyed by our OF ids. + auto* agent = wxGetApp().getAgent(); + const std::string pla_filament_id = agent ? agent->to_orca_filament_id("GFA00") : std::string("GFA00"); + int slot_count = 0, empty_count = 0; for (auto& tray_pair : dev_ams->GetTrays()) { if (!tray_pair.second) { @@ -1526,13 +1530,15 @@ void AMSDryCtrWin::update_filament_guide_info(DevAms* dev_ams) wxString filament_type = tray_pair.second->get_display_filament_type(); DevFilamentDryingPreset preset; if (filament_type.IsEmpty()) { - auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(pla_filament_id); + if (!fallback_preset) continue; // no PLA preset (e.g. the id map is missing): skip, don't throw preset = fallback_preset.value(); filament_type = "?"; } else if (preset_opt.has_value()) { preset = preset_opt.value(); } else { - auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(pla_filament_id); + if (!fallback_preset) continue; preset = fallback_preset.value(); } std::string icon_path = "dev_ams_dry_ctr_enable"; @@ -1683,9 +1689,10 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj) // Select recommended drying temperature and default filament float min_dry_temp = std::numeric_limits::max(); - std::string default_filament_id = "GFA00"; + auto* agent = wxGetApp().getAgent(); + std::string default_filament_id = agent ? agent->to_orca_filament_id("GFA00") : std::string("GFA00"); // compared against m_tray_ids[i].filament_id (our OF ids) below bool has_ready = false; - const auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + const auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(default_filament_id); for (const auto& tray_pair : dev_ams->GetTrays()) { if (!tray_pair.second || !tray_pair.second->is_tray_info_ready()) continue; has_ready = true; diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index ed532e91a8..1748617789 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -815,7 +815,10 @@ void AMSMaterialsSetting::set_color(wxColour color) fila_color.m_colors.insert(color); fila_color.EndSet(m_clr_picker->ctype); auto clr_query = GUI::wxGetApp().get_filament_color_code_query(); - m_clr_name->SetLabelText(clr_query->GetFilaColorName(ams_filament_id, fila_color)); + // ams_filament_id is our OF id; GetFilaColorName looks up filaments_color_codes.json, + // downloaded from Bambu and keyed by the printer's own ids, so translate for this lookup only. + auto* agent = GUI::wxGetApp().getAgent(); + m_clr_name->SetLabelText(clr_query->GetFilaColorName(agent ? agent->from_orca_filament_id(ams_filament_id) : ams_filament_id, fila_color)); } void AMSMaterialsSetting::set_empty_color(wxColour color) @@ -836,7 +839,10 @@ void AMSMaterialsSetting::set_colors(std::vector colors) for (const auto& clr : colors) { fila_color.m_colors.insert(clr); } fila_color.EndSet(m_clr_picker->ctype); auto clr_query = GUI::wxGetApp().get_filament_color_code_query(); - m_clr_name->SetLabelText(clr_query->GetFilaColorName(ams_filament_id, fila_color)); + // ams_filament_id is our OF id; GetFilaColorName looks up filaments_color_codes.json, + // downloaded from Bambu and keyed by the printer's own ids, so translate for this lookup only. + auto* agent = GUI::wxGetApp().getAgent(); + m_clr_name->SetLabelText(clr_query->GetFilaColorName(agent ? agent->from_orca_filament_id(ams_filament_id) : ams_filament_id, fila_color)); } } diff --git a/src/slic3r/GUI/ColorDecomposeSupport.cpp b/src/slic3r/GUI/ColorDecomposeSupport.cpp index e8fb4c9082..6621b97059 100644 --- a/src/slic3r/GUI/ColorDecomposeSupport.cpp +++ b/src/slic3r/GUI/ColorDecomposeSupport.cpp @@ -62,10 +62,16 @@ std::string decompose_basic_type_from_source(size_t source_config_idx, auto& project_config = wxGetApp().preset_bundle->project_config; if (auto* filament_id_opt = project_config.option("filament_id")) { if (source_config_idx < filament_id_opt->values.size()) { - const std::string& filament_id = filament_id_opt->values[source_config_idx]; - if (filament_id == kDecomposePetgFilamentId) + // Dead in practice: "filament_id" is not in PresetBundle's s_project_options, so this + // option() lookup (create=false) always returns null and the block never runs. Kept as + // found, with the translation the values would need: they would be our OF ids, and the + // two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string& orca_filament_id = filament_id_opt->values[source_config_idx]; + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(orca_filament_id) : orca_filament_id; + if (printer_filament_id == kDecomposePetgFilamentId) return kDecomposePetgBasicType; - if (filament_id == kDecomposePlaFilamentId) + if (printer_filament_id == kDecomposePlaFilamentId) return kDecomposePlaBasicType; } } @@ -82,9 +88,14 @@ std::string decompose_basic_type_from_source(size_t source_config_idx, std::string decompose_basic_filament_id(const std::string& basic_type) { - if (basic_type == kDecomposePetgBasicType) - return kDecomposePetgFilamentId; - return kDecomposePlaFilamentId; + // The result becomes DecomposeOfficialComponent::filament_id, which the rest of this file + // reads as one of our OF ids (translating back before it compares against the printer's + // ids), so translate on the way out; kDecompose*FilamentId itself stays the printer-side + // literal. The only place that would carry it further, project_config's "filament_id", is + // dead code: that key is not in PresetBundle's s_project_options. + const std::string printer_filament_id = basic_type == kDecomposePetgBasicType ? kDecomposePetgFilamentId : kDecomposePlaFilamentId; + auto* agent = wxGetApp().getAgent(); + return agent ? agent->to_orca_filament_id(printer_filament_id) : printer_filament_id; } void set_created_standard_component_metadata(size_t config_idx, const DecomposeOfficialComponent& component) @@ -98,8 +109,11 @@ void set_created_standard_component_metadata(size_t config_idx, const DecomposeO } } - const std::string type = component.filament_id == kDecomposePetgFilamentId ? kDecomposePetgShortType : - component.filament_id == kDecomposePlaFilamentId ? kDecomposePlaShortType : ""; + // component.filament_id is our OF id; the two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(component.filament_id) : component.filament_id; + const std::string type = printer_filament_id == kDecomposePetgFilamentId ? kDecomposePetgShortType : + printer_filament_id == kDecomposePlaFilamentId ? kDecomposePlaShortType : ""; if (!type.empty()) { if (auto* type_opt = project_config.option("filament_type")) { while (type_opt->values.size() <= config_idx) @@ -151,7 +165,12 @@ DecomposeOfficialComponent lookup_decompose_official_component( continue; if (item.contains("fila_color") && item["fila_color"].is_array() && !item["fila_color"].empty()) result.color_hex = decompose_normalize_color_hex(item["fila_color"][0].get()); - result.filament_id = item.value("fila_id", result.filament_id); + // fila_id from this shipped, Bambu-keyed color table is a printer-side id; translate it so + // result.filament_id stays an OF id like the rest of this struct (the fallback default, + // result.filament_id, is already OF and passes through unchanged). + const std::string fila_id = item.value("fila_id", result.filament_id); + auto* agent = wxGetApp().getAgent(); + result.filament_id = agent ? agent->to_orca_filament_id(fila_id) : fila_id; return result; } } @@ -211,8 +230,11 @@ int find_existing_decompose_component( auto* type_opt = project_config.option("filament_type"); const PresetBundle& preset_bundle = *wxGetApp().preset_bundle; const size_t num_physical = physical_colors.size(); - const std::string expected_basic_type = component.filament_id == kDecomposePetgFilamentId ? kDecomposePetgBasicType : - component.filament_id == kDecomposePlaFilamentId ? kDecomposePlaBasicType : ""; + // component.filament_id is our OF id; the two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(component.filament_id) : component.filament_id; + const std::string expected_basic_type = printer_filament_id == kDecomposePetgFilamentId ? kDecomposePetgBasicType : + printer_filament_id == kDecomposePlaFilamentId ? kDecomposePlaBasicType : ""; const std::string expected_short_type = expected_basic_type == kDecomposePetgBasicType ? kDecomposePetgShortType : expected_basic_type == kDecomposePlaBasicType ? kDecomposePlaShortType : ""; const std::string expected_preset_part = expected_basic_type.empty() ? "" : std::string(kDecomposeBambuPresetPrefix) + expected_basic_type; diff --git a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp index e75622720c..b59499d9d9 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp @@ -241,8 +241,11 @@ void check_filaments(const DevFilaBlacklist::CheckFilamentInfo& check_info, DevF std::set white_fila_ids = filament_item.contains("white_fila_ids") ? filament_item["white_fila_ids"].get>() : std::set(); if (!white_fila_ids.empty() && !check_info.fila_id.empty()) { - auto it = std::find_if(white_fila_ids.begin(), white_fila_ids.end(), [&check_info](const std::string& white_fila_id) { - return white_fila_id == check_info.fila_id; + // check_info.fila_id is our OF id; white_fila_ids in filaments_blacklist.json holds the printer's own. + auto* agent = Slic3r::GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(check_info.fila_id) : check_info.fila_id; + auto it = std::find_if(white_fila_ids.begin(), white_fila_ids.end(), [&printer_filament_id](const std::string& white_fila_id) { + return white_fila_id == printer_filament_id; }); if (it != white_fila_ids.end()) { continue; } } diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp index 806af9d5f0..e0a230969b 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp @@ -5,6 +5,7 @@ // TODO: remove this include #include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/I18N.hpp" +#include "slic3r/GUI/GUI_App.hpp" #include "DevUtil.h" #include "DevUtilBackend.h" @@ -95,7 +96,12 @@ std::string DevAmsTray::get_filament_type() if (m_fila_type == "Sup.ABS") { return "ABS-S"; } if (m_fila_type == "Support W") { return "PLA-S"; } if (m_fila_type == "Support G") { return "PA-S"; } - if (m_fila_type == "Support") { if (setting_id == "GFS00") { m_fila_type = "PLA-S"; } else if (setting_id == "GFS01") { m_fila_type = "PA-S"; } else { return "PLA-S"; } } + // setting_id is our OF id; GFS00/GFS01 are the printer's own support-filament ids. + if (m_fila_type == "Support") { + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(setting_id) : setting_id; + if (printer_filament_id == "GFS00") { m_fila_type = "PLA-S"; } else if (printer_filament_id == "GFS01") { m_fila_type = "PA-S"; } else { return "PLA-S"; } + } return m_fila_type; } @@ -654,11 +660,14 @@ void DevFilaSystemParser::ParseV1_0(const json& jj, MachineObject* obj, DevFilaS curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); //std::string type = (*tray_it)["tray_type"].get(); std::string type = MachineObject::setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); - if (curr_tray->setting_id == "GFS00") + // curr_tray->setting_id is our OF id; GFS00/GFS01 are the printer's own support-filament ids. + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(curr_tray->setting_id) : curr_tray->setting_id; + if (printer_filament_id == "GFS00") { curr_tray->m_fila_type = "PLA-S"; } - else if (curr_tray->setting_id == "GFS01") + else if (printer_filament_id == "GFS01") { curr_tray->m_fila_type = "PA-S"; } diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b28e410557..782574c220 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -110,7 +110,9 @@ bool Slic3r::is_stringing_prone_filament(const std::string& filament_id, float n if (filament_id.empty()) return false; const auto* set = pick_stringing_set(nozzle_diameter); if (!set) return false; - return set->count(filament_id) > 0; + // filament_id is one of our content-addressed OF ids; the table above is keyed by the printer's own. + auto* agent = Slic3r::GUI::wxGetApp().getAgent(); + return set->count(agent ? agent->from_orca_filament_id(filament_id) : filament_id) > 0; } wxString Slic3r::get_stage_string(int stage) @@ -5048,10 +5050,13 @@ DevAmsTray MachineObject::parse_vt_tray(json vtray) vt_tray.setting_id = vtray["tray_info_idx"].get(); //std::string type = vtray["tray_type"].get(); std::string type = setting_id_to_type(vt_tray.setting_id, vtray["tray_type"].get()); - if (vt_tray.setting_id == "GFS00") { + // vt_tray.setting_id is our OF id (translated on the way in); the two support ids below are the printer's own. + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(vt_tray.setting_id) : vt_tray.setting_id; + if (printer_filament_id == "GFS00") { vt_tray.m_fila_type = "PLA-S"; } - else if (vt_tray.setting_id == "GFS01") { + else if (printer_filament_id == "GFS01") { vt_tray.m_fila_type = "PA-S"; } else { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0347803dbc..ff10b26b6d 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -8823,6 +8823,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (wipe_tower_y_opt) file_wipe_tower_y = *wipe_tower_y_opt; + if (auto* agent = wxGetApp().getAgent()) { + if (auto* ids = config.opt("filament_ids")) + for (std::string& id : ids->values) + id = agent->to_orca_filament_id(id); + } preset_bundle->load_config_model(filename.string(), std::move(config), file_version); ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); @@ -18669,6 +18674,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy nozzle_diameter_str = nozzle_diameter_option->serialize(); std::string printer_model_id = preset_bundle.printers.get_edited_preset().get_printer_type(&preset_bundle); + // The printer reads slice_info.config and knows only its own catalog ids. + auto* id_agent = preset_bundle.is_bbl_vendor() ? wxGetApp().getAgent() : nullptr; for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; @@ -18678,6 +18685,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy std::string display_filament_type; it->type = cfg.get_filament_type(display_filament_type, it->id); it->filament_id = filament_id_opt ? filament_id_opt->get_at(it->id) : ""; + if (id_agent) + it->filament_id = id_agent->from_orca_filament_id(it->filament_id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 837f4ebe0c..ac419073d7 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -873,10 +873,15 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset auto fila_type = Preset::remove_suffix_modified(GetValue().ToUTF8().data()); bool is_official = boost::algorithm::starts_with(fila_type, "Bambu"); if (is_official) { - // Get filament_id from filament_presets + // Get filament_id from filament_presets. FilamentPickerDialog looks up + // filaments_color_codes.json, which is downloaded from Bambu and keyed by the + // printer's own ids, so translate our OF id (the "GFA00" fallback is already one). const std::string& preset_name = m_preset_bundle->filament_presets[m_filament_idx]; const Preset* selected_preset = m_collection->find_preset(preset_name); - wxString fila_id = selected_preset ? wxString::FromUTF8(selected_preset->filament_id) : "GFA00"; + auto* agent = wxGetApp().getAgent(); + wxString fila_id = "GFA00"; + if (selected_preset) + fila_id = wxString::FromUTF8(agent ? agent->from_orca_filament_id(selected_preset->filament_id) : selected_preset->filament_id); FilamentColor fila_color = get_cur_color_info(); // Show filament picker dialog diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 199de9236e..e70ba84225 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3845,8 +3845,12 @@ int SelectMachineDialog::update_print_required_data(Slic3r::DynamicPrintConfig c m_required_data_config = config; m_required_data_model = model; //m_required_data_plate_data_list = plate_data_list; + auto* agent = wxGetApp().getAgent(); for (auto i = 0; i < plate_data_list.size(); i++) { if (!plate_data_list[i]->gcode_file.empty()) { + if (agent) + for (auto& info : plate_data_list[i]->slice_filaments_info) + info.filament_id = agent->to_orca_filament_id(info.filament_id); m_required_data_plate_data_list.push_back(plate_data_list[i]); } } @@ -5051,8 +5055,11 @@ void SelectMachineDialog::update_show_status(MachineObject* obj_) const auto& warning_tpu_filaments = DevPrinterConfigUtil::get_value_from_config>(obj_->printer_type, "auto_on_cali_warning_tpu_filaments"); if (!warning_tpu_filaments.empty()) { + auto* agent = wxGetApp().getAgent(); for (const auto& fila : m_ams_mapping_result) { - if (std::find(warning_tpu_filaments.begin(), warning_tpu_filaments.end(), fila.filament_id) != warning_tpu_filaments.end()) { + // fila.filament_id is our OF id; the printer config list holds the printer's own. + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(fila.filament_id) : fila.filament_id; + if (std::find(warning_tpu_filaments.begin(), warning_tpu_filaments.end(), printer_filament_id) != warning_tpu_filaments.end()) { show_status(PrintDialogStatus::PrintStatusTPUUnsuggestCali, { _L("If 'Dynamic Flow Calibration' is set to Auto/On, the system will use the manual calibration value or the default value and skip the flow calibration process. You can perform a manual flow calibration for TPU filament on the 'Calibration' page.") }); break; @@ -5208,9 +5215,12 @@ bool SelectMachineDialog::can_support_pa_auto_cali() std::vector unsupport_auto_cali_filaments = DevPrinterConfigUtil::get_unsupport_auto_cali_filaments(obj->printer_type); if (!unsupport_auto_cali_filaments.empty()) { + auto* agent = wxGetApp().getAgent(); auto iter = std::find_if(m_filaments.begin(), m_filaments.end(), - [&unsupport_auto_cali_filaments](const FilamentInfo &item) { - auto iter = std::find(unsupport_auto_cali_filaments.begin(), unsupport_auto_cali_filaments.end(), item.filament_id); + [&unsupport_auto_cali_filaments, agent](const FilamentInfo &item) { + // item.filament_id is our OF id; the printer config list holds the printer's own. + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(item.filament_id) : item.filament_id; + auto iter = std::find(unsupport_auto_cali_filaments.begin(), unsupport_auto_cali_filaments.end(), printer_filament_id); return iter != unsupport_auto_cali_filaments.end(); }); diff --git a/src/slic3r/Utils/BBLPrinterAgent.cpp b/src/slic3r/Utils/BBLPrinterAgent.cpp index ef85e0a1ff..5e73edf84c 100644 --- a/src/slic3r/Utils/BBLPrinterAgent.cpp +++ b/src/slic3r/Utils/BBLPrinterAgent.cpp @@ -1,11 +1,121 @@ #include "BBLPrinterAgent.hpp" #include "BBLNetworkPlugin.hpp" #include "NetworkAgentFactory.hpp" +#include "libslic3r/Utils.hpp" #include +#include +#include +using json = nlohmann::json; + +#include namespace Slic3r { +namespace { + +// Bambu's own catalog ids for every filament this app ships, Bambu's own included, since Orca +// content-addresses those too. Keyed both ways so each of the four translation entry points +// below is a single lookup. Loaded once per process, on first use. A missing or malformed file +// logs once and leaves both maps empty, so every translation degrades to identity. Same shape +// as DevFilaBlacklist::load_filaments_blacklist_config. +struct BambuFilamentIdMap { std::unordered_map to_bambu, to_orca; }; + +const BambuFilamentIdMap& bambu_filament_id_map() +{ + static const BambuFilamentIdMap map = [] { + BambuFilamentIdMap m; + const std::string path = resources_dir() + "/printers/bambu_filament_ids.json"; + try { + boost::nowide::ifstream file(path); + if (!file.is_open()) { + BOOST_LOG_TRIVIAL(warning) << "Bambu filament id map not found, ids pass through untranslated: " << path; + return m; + } + json doc; + file >> doc; + for (const auto& [orca_filament_id, row] : doc.at("filaments").items()) { + const std::string bambu_id = row.at("bambu_id").get(); + m.to_bambu.emplace(orca_filament_id, bambu_id); + m.to_orca.emplace(bambu_id, orca_filament_id); + } + } catch (const std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "Bambu filament id map unreadable, ids pass through untranslated: " << e.what(); + m = {}; + } + return m; + }(); + return map; +} + +// Rewrites every string under "tray_info_idx", "filament_id" or "filamentId", at any depth, in place. +void rewrite_filament_ids(json& j, const std::unordered_map& map) +{ + if (j.is_object()) { + for (auto& [key, value] : j.items()) { + if (value.is_string() && (key == "tray_info_idx" || key == "filament_id" || key == "filamentId")) { + auto it = map.find(value.get_ref()); + if (it != map.end()) + value = it->second; + } else + rewrite_filament_ids(value, map); + } + } else if (j.is_array()) + for (auto& element : j) + rewrite_filament_ids(element, map); +} + +// Text that does not parse as JSON, or that mentions none of the id keys, comes back byte-identical. +std::string rewrite_filament_ids(std::string text, const std::unordered_map& map) +{ + if (map.empty() || (text.find("tray_info_idx") == std::string::npos && text.find("filament_id") == std::string::npos && + text.find("filamentId") == std::string::npos)) + return text; // nothing to map, skip the parse (moved, not copied) + try { + json j = json::parse(text); + rewrite_filament_ids(j, map); + return j.dump(); + } catch (const std::exception&) { + return text; // not JSON: forward as received + } +} + +// Wraps an inbound message callback so every Bambu id it delivers arrives already translated. +// A null fn is a deregistration (see GUI_App.cpp's shutdown phase 1 and NetworkAgent::apply_printer_callbacks +// clearing callbacks with {}), and must stay null rather than become a live wrapper around an empty target. +OnMessageFn to_orca_messages(OnMessageFn fn) +{ + if (!fn) + return fn; + return [fn = std::move(fn)](std::string dev_id, std::string msg) { fn(std::move(dev_id), BBLPrinterAgent::to_orca_payload(std::move(msg))); }; +} + +} // namespace + +std::string BBLPrinterAgent::to_orca_filament_id(const std::string& printer_filament_id) const +{ + const auto& map = bambu_filament_id_map().to_orca; + auto it = map.find(printer_filament_id); + return it != map.end() ? it->second : printer_filament_id; +} + +std::string BBLPrinterAgent::from_orca_filament_id(const std::string& orca_filament_id) const +{ + const auto& map = bambu_filament_id_map().to_bambu; + auto it = map.find(orca_filament_id); + return it != map.end() ? it->second : orca_filament_id; +} + +std::string BBLPrinterAgent::to_orca_payload(std::string json_text) +{ + return rewrite_filament_ids(std::move(json_text), bambu_filament_id_map().to_orca); +} + +std::string BBLPrinterAgent::from_orca_payload(std::string json_text) +{ + return rewrite_filament_ids(std::move(json_text), bambu_filament_id_map().to_bambu); +} + BBLPrinterAgent::BBLPrinterAgent() = default; BBLPrinterAgent::~BBLPrinterAgent() = default; @@ -22,6 +132,7 @@ void BBLPrinterAgent::set_cloud_agent(std::shared_ptr cloud) int BBLPrinterAgent::send_message(std::string dev_id, std::string json_str, int qos, int flag) { + json_str = from_orca_payload(std::move(json_str)); auto& plugin = BBLNetworkPlugin::instance(); auto agent = plugin.get_agent(); auto func = plugin.get_send_message(); @@ -67,6 +178,7 @@ int BBLPrinterAgent::disconnect_printer() int BBLPrinterAgent::send_message_to_printer(std::string dev_id, std::string json_str, int qos, int flag) { + json_str = from_orca_payload(std::move(json_str)); auto& plugin = BBLNetworkPlugin::instance(); auto agent = plugin.get_agent(); auto func = plugin.get_send_message_to_printer(); @@ -321,6 +433,7 @@ int dispatch_start(CurrentFn func, PrintParams& params, const CallbackFns&... ca auto agent = plugin.get_agent(); if (!func || !agent) return -1; + params.ams_mapping_info = BBLPrinterAgent::from_orca_payload(std::move(params.ams_mapping_info)); switch (plugin.network_abi()) { case NetworkAbi::Legacy: return reinterpret_cast(func)(agent, BBLNetworkPlugin::as_legacy(params), callbacks...); @@ -408,7 +521,7 @@ int BBLPrinterAgent::set_on_message_fn(OnMessageFn fn) auto agent = plugin.get_agent(); auto func = plugin.get_set_on_message_fn(); if (func && agent) { - return func(agent, fn); + return func(agent, to_orca_messages(std::move(fn))); } return -1; } @@ -441,7 +554,7 @@ int BBLPrinterAgent::set_on_local_message_fn(OnMessageFn fn) auto agent = plugin.get_agent(); auto func = plugin.get_set_on_local_message_fn(); if (func && agent) { - return func(agent, fn); + return func(agent, to_orca_messages(std::move(fn))); } return -1; } diff --git a/src/slic3r/Utils/BBLPrinterAgent.hpp b/src/slic3r/Utils/BBLPrinterAgent.hpp index a8880bf6bf..83e21bb6d8 100644 --- a/src/slic3r/Utils/BBLPrinterAgent.hpp +++ b/src/slic3r/Utils/BBLPrinterAgent.hpp @@ -84,6 +84,20 @@ public: int set_queue_on_main_fn(QueueOnMainFn fn) override; FilamentSyncMode get_filament_sync_mode() const override; + // Bambu's own catalog ids. Orca content-addresses every system filament, Bambu's included; + // the printer, the AMS and Bambu's cloud know only Bambu's ids, so this agent translates at + // the boundary through resources/printers/bambu_filament_ids.json (generated by + // scripts/update_bambu_filament_ids.py). An id without a map row is returned as it is. + std::string to_orca_filament_id(const std::string& printer_filament_id) const override; + std::string from_orca_filament_id(const std::string& orca_filament_id) const override; + + // Rewrite every string under "tray_info_idx", "filament_id" or "filamentId", at any depth, + // in a JSON document (an MQTT payload or PrintParams::ams_mapping_info). Text that does not + // parse, or contains none of the keys, is returned unchanged. + // Taken by value: most outbound traffic carries no filament id and is moved straight back out. + static std::string to_orca_payload(std::string json_text); + static std::string from_orca_payload(std::string json_text); + private: std::shared_ptr m_cloud_agent; }; diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 473f62337f..499228d13c 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -62,22 +62,29 @@ std::vector not_support_auto_pa_cali_filaments = { void get_default_k_n_value(const std::string &filament_id, float &k, float &n) { - if (filament_id.compare("GFU01") == 0) { + // filament_id is our OF id; the literals below are the printer's own. An id the agent has + // no mapping for (e.g. a caller still on the old id) passes through unchanged. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(filament_id) : filament_id; + if (printer_filament_id.compare("GFU01") == 0) { /* TPU 95A */ k = 0.25; n = 1.0; - } else if (filament_id.compare("GFU03") == 0) { + } else if (printer_filament_id.compare("GFU03") == 0) { /* TPU 90A */ k = 0.35; n = 1.0; - } else if (filament_id.compare("GFU04") == 0) { + } else if (printer_filament_id.compare("GFU04") == 0) { /* TPU 85A */ k = 0.65; n = 1.0; - } else if (filament_id.compare("GFG00") == 0 || filament_id.compare("GFG01") == 0 || filament_id.compare("GFG60") == 0 || filament_id.compare("GFL06") == 0 || - filament_id.compare("GFL55") == 0 || filament_id.compare("GFG99") == 0 || filament_id.compare("GFG98") == 0 || filament_id.compare("GFG97") == 0 || - filament_id.compare("GFG50") == 0 || filament_id.compare("GFU02") == 0 || filament_id.compare("GFU98") == 0 || filament_id.compare("GFS00") == 0 || - filament_id.compare("GFS02") == 0) { + } else if (printer_filament_id.compare("GFG00") == 0 || printer_filament_id.compare("GFG01") == 0 || + printer_filament_id.compare("GFG60") == 0 || printer_filament_id.compare("GFL06") == 0 || + printer_filament_id.compare("GFL55") == 0 || printer_filament_id.compare("GFG99") == 0 || + printer_filament_id.compare("GFG98") == 0 || printer_filament_id.compare("GFG97") == 0 || + printer_filament_id.compare("GFG50") == 0 || printer_filament_id.compare("GFU02") == 0 || + printer_filament_id.compare("GFU98") == 0 || printer_filament_id.compare("GFS00") == 0 || + printer_filament_id.compare("GFS02") == 0) { /* 0.04 filaments */ k = 0.04; n = 1.0; @@ -1393,7 +1400,10 @@ void CalibUtils::calib_retraction(const CalibInfo &calib_info, wxString &error_m bool CalibUtils::is_support_auto_pa_cali(std::string filament_id) { - auto iter = std::find(not_support_auto_pa_cali_filaments.begin(), not_support_auto_pa_cali_filaments.end(), filament_id); + // filament_id is our OF id; not_support_auto_pa_cali_filaments holds the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(filament_id) : filament_id; + auto iter = std::find(not_support_auto_pa_cali_filaments.begin(), not_support_auto_pa_cali_filaments.end(), printer_filament_id); if (iter != not_support_auto_pa_cali_filaments.end()) { return false; } diff --git a/src/slic3r/Utils/IPrinterAgent.hpp b/src/slic3r/Utils/IPrinterAgent.hpp index 0fa3616344..1f0d45dc1e 100644 --- a/src/slic3r/Utils/IPrinterAgent.hpp +++ b/src/slic3r/Utils/IPrinterAgent.hpp @@ -290,6 +290,16 @@ public: * Populates the MachineObject's DevFilaSystem with fetched filament data. */ virtual bool fetch_filament_info(std::string dev_id) { return false; } + + /** + * Translate one filament id across the printer boundary. + * + * Orca content-addresses every system filament; a printer, its AMS and its vendor cloud + * know only that vendor's own catalog ids. An agent whose printers already speak Orca's + * ids leaves them alone, and so does an id with no mapping. + */ + virtual std::string to_orca_filament_id(const std::string& printer_filament_id) const { return printer_filament_id; } + virtual std::string from_orca_filament_id(const std::string& orca_filament_id) const { return orca_filament_id; } }; } // namespace Slic3r diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 0d77e5e660..b15e10c591 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -929,6 +929,20 @@ bool NetworkAgent::fetch_filament_info(std::string dev_id) return false; } +std::string NetworkAgent::to_orca_filament_id(const std::string& printer_filament_id) const +{ + if (m_printer_agent) + return m_printer_agent->to_orca_filament_id(printer_filament_id); + return printer_filament_id; +} + +std::string NetworkAgent::from_orca_filament_id(const std::string& orca_filament_id) const +{ + if (m_printer_agent) + return m_printer_agent->from_orca_filament_id(orca_filament_id); + return orca_filament_id; +} + int NetworkAgent::request_bind_ticket(std::string* ticket) { if (m_printer_agent) diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index d7032b7a20..76128073a4 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -165,6 +165,8 @@ public: int start_sdcard_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); FilamentSyncMode get_filament_sync_mode() const; bool fetch_filament_info(std::string dev_id); + std::string to_orca_filament_id(const std::string& printer_filament_id) const; + std::string from_orca_filament_id(const std::string& orca_filament_id) const; int request_bind_ticket(std::string* ticket); int get_hms_snapshot(std::string dev_id, std::string file_name, std::function callback); diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index eca1af2b86..2ab78f56de 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -1,6 +1,7 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp + test_bambu_filament_ids.cpp test_creality_cfs_match.cpp test_dev_mapping.cpp test_filament_bitmap_utils.cpp diff --git a/tests/slic3rutils/test_bambu_filament_ids.cpp b/tests/slic3rutils/test_bambu_filament_ids.cpp new file mode 100644 index 0000000000..5f6215d7ca --- /dev/null +++ b/tests/slic3rutils/test_bambu_filament_ids.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include + +#include "libslic3r/Utils.hpp" +#include "slic3r/Utils/BBLPrinterAgent.hpp" +#include "slic3r/Utils/OrcaPrinterAgent.hpp" + +using json = nlohmann::json; +using namespace Slic3r; + +namespace { + +// Point resources_dir() at the repo's own tree for the lifetime of a test and restore it +// afterwards, mirroring ScopedResourcesDir (which only ever makes a throwaway directory). +// PROFILES_DIR is /resources/profiles; the map lives in /resources/printers. +struct ScopedRepoResourcesDir +{ + std::string previous{resources_dir()}; + + ScopedRepoResourcesDir() { set_resources_dir(boost::filesystem::path(PROFILES_DIR).parent_path().string()); } + ~ScopedRepoResourcesDir() { set_resources_dir(previous); } + + ScopedRepoResourcesDir(const ScopedRepoResourcesDir&) = delete; + ScopedRepoResourcesDir& operator=(const ScopedRepoResourcesDir&) = delete; +}; + +std::string orca_id_of(const std::string& bambu_id) +{ + boost::nowide::ifstream file(resources_dir() + "/printers/bambu_filament_ids.json"); + json doc; + file >> doc; + for (const auto& [orca_id, row] : doc["filaments"].items()) + if (row["bambu_id"] == bambu_id) + return orca_id; + FAIL("no map row for " << bambu_id); + return {}; +} + +} // namespace + +TEST_CASE("Bambu filament id map is one-to-one and leaves unmapped ids alone", "[BambuFilamentIds]") +{ + const ScopedRepoResourcesDir repo_resources; + const BBLPrinterAgent bbl; + const std::string abs = orca_id_of("GFB00"); // Bambu ABS + REQUIRE(abs.rfind("OF", 0) == 0); + CHECK(bbl.from_orca_filament_id(abs) == "GFB00"); + CHECK(bbl.to_orca_filament_id("GFB00") == abs); + CHECK(bbl.from_orca_filament_id("OFnotarow") == "OFnotarow"); + CHECK(bbl.to_orca_filament_id("GFZZ99") == "GFZZ99"); // Bambu id we do not ship + CHECK(bbl.to_orca_filament_id("P1234567") == "P1234567"); // user root + CHECK(bbl.from_orca_filament_id("") == ""); + + // An agent whose printers already speak our ids inherits IPrinterAgent's identity default. + const OrcaPrinterAgent other{""}; + CHECK(other.from_orca_filament_id(abs) == abs); + CHECK(other.to_orca_filament_id("GFB00") == "GFB00"); +} + +TEST_CASE("Payload rewrite covers nested trays, calibration lists and mapping info", "[BambuFilamentIds]") +{ + const ScopedRepoResourcesDir repo_resources; + const std::string abs = orca_id_of("GFB00"), pla = orca_id_of("GFA00"); + const std::string status = + R"({"print":{"ams":{"ams":[{"tray":[{"tray_info_idx":"GFB00"},{"tray_info_idx":"GFZZ99"}]}]},)" + R"("vt_tray":{"tray_info_idx":"GFA00"},"filaments":[{"filament_id":"GFA00","setting_id":"GFB00"}]}})"; + json inbound = json::parse(BBLPrinterAgent::to_orca_payload(status)); + CHECK(inbound["print"]["ams"]["ams"][0]["tray"][0]["tray_info_idx"] == abs); + CHECK(inbound["print"]["ams"]["ams"][0]["tray"][1]["tray_info_idx"] == "GFZZ99"); // no row: untouched + CHECK(inbound["print"]["vt_tray"]["tray_info_idx"] == pla); + CHECK(inbound["print"]["filaments"][0]["filament_id"] == pla); + CHECK(inbound["print"]["filaments"][0]["setting_id"] == "GFB00"); // not an id key: has a map row but must stay put + CHECK(json::parse(BBLPrinterAgent::from_orca_payload(inbound.dump())) == json::parse(status)); // round trip + + const std::string mapping = R"([{"ams":0,"filamentId":")" + abs + R"(","filamentType":"ABS"}])"; + CHECK(BBLPrinterAgent::from_orca_payload(mapping) == R"([{"ams":0,"filamentId":"GFB00","filamentType":"ABS"}])"); + CHECK(BBLPrinterAgent::from_orca_payload("not json") == "not json"); + CHECK(BBLPrinterAgent::from_orca_payload(R"({"print":{"command":"pushall"}})") == R"({"print":{"command":"pushall"}})"); +} From bf20b041e273f435649b1d6be969e20d41ba09dd Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 5 Sep 2026 23:07:49 +0800 Subject: [PATCH 115/208] Make a filament's id depend only on the filament itself MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A filament_id is now exactly what the preset's own filament_vendor, filament_type and filament name mint, wherever it inherits from. Inheriting settings no longer limits what a preset may claim, so the checks that policed inheritance are gone, and so are the four grandfather lists that held thousands of presets as permanent exceptions. The snapshot records sanctioned state rather than excuses: one entry per id, carrying the product it names beside the presets claiming it. Profiles that disagreed are corrected instead of excused. The Elegoo TPU and PAHT roots were named for a different product than all of their variants and become TPU 95A and PAHT-CF; Elegoo PET-CF gains the filament_type its variants already set; the Snapmaker breakaway support presets get an id of their own rather than riding the PVA chain; and a BBL preset name carrying a doubled space is fixed behind renamed_from. Their ids re-mint from the corrected identities. The tooling and the design note also drop the word "family", which invited reading a brand's Lite and Pro spools as one id. No change to slicing output — only filament_id values, three preset names, the inherits lines following those renames and the vendor indexes move. --- docs/HLSD/filament_id.md | 195 +- resources/profiles/BBL.json | 2 +- .../COEX/COEX NYLEX UNFILLED @BBL X1C.json | 3 +- resources/profiles/Elegoo.json | 8 +- ...T @base.json => Elegoo PAHT-CF @base.json} | 4 +- .../filament/BASE/Elegoo PET-CF @base.json | 7 +- .../BASE/Elegoo Rapid TPU 95A @base.json | 2 +- ...U @base.json => Elegoo TPU 95A @base.json} | 4 +- .../filament/EC/Elegoo PAHT-CF @EC.json | 2 +- .../filament/EC/Elegoo TPU 95A @EC.json | 2 +- .../filament/EC2/Elegoo PAHT-CF @EC2.json | 2 +- .../filament/EC2/Elegoo TPU 95A @EC2.json | 2 +- .../filament/ECC/Elegoo PAHT-CF @ECC.json | 2 +- .../filament/ECC/Elegoo TPU 95A @ECC.json | 2 +- .../filament/ECC2/Elegoo PAHT-CF @ECC2.json | 2 +- .../filament/ECC2/Elegoo TPU 95A @ECC2.json | 2 +- .../EN3SERIES/Elegoo TPU 95A @EN3 Series.json | 2 +- .../EN4SERIES/Elegoo TPU 95A @EN4 Series.json | 2 +- resources/profiles/OrcaFilamentLibrary.json | 8 +- .../Elegoo/Elegoo PAHT-CF @System.json | 2 +- ...T @base.json => Elegoo PAHT-CF @base.json} | 4 +- .../filament/Elegoo/Elegoo PET-CF @base.json | 7 +- .../Elegoo/Elegoo Rapid TPU 95A @base.json | 2 +- .../Elegoo/Elegoo TPU 95A @System.json | 2 +- ...U @base.json => Elegoo TPU 95A @base.json} | 4 +- ...akaway Support For PLA @U1 0.2 nozzle.json | 1 + ...akaway Support For PLA @U1 0.6 nozzle.json | 1 + ...akaway Support For PLA @U1 0.8 nozzle.json | 1 + ...apmaker Breakaway Support For PLA @U1.json | 1 + scripts/assign_filament_ids.py | 574 +- scripts/filament_id_snapshot.json | 21107 ++++++---------- scripts/tests/test_filament_id.py | 290 +- scripts/update_bambu_filament_ids.py | 47 +- 33 files changed, 8463 insertions(+), 13833 deletions(-) rename resources/profiles/Elegoo/filament/BASE/{Elegoo PAHT @base.json => Elegoo PAHT-CF @base.json} (94%) rename resources/profiles/Elegoo/filament/BASE/{Elegoo TPU @base.json => Elegoo TPU 95A @base.json} (85%) rename resources/profiles/OrcaFilamentLibrary/filament/Elegoo/{Elegoo PAHT @base.json => Elegoo PAHT-CF @base.json} (95%) rename resources/profiles/OrcaFilamentLibrary/filament/Elegoo/{Elegoo TPU @base.json => Elegoo TPU 95A @base.json} (89%) diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md index 4c1c1f7443..eaf9de4a6c 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -1,19 +1,21 @@ # 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, in every profile bundle that ships it. +`filament_id` identifies one **filament product**: one named spool product = one id, shared by +all of that product's per-printer / per-nozzle variants, in every profile bundle that ships it. 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`), and it is never per-bundle either — PolyLite PLA carries the same id whether the preset lives in the -OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. +OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. The granularity is the name on the spool, +not the brand behind it: `AAA PLA Lite` and `AAA PLA Pro` are two filaments with two ids, not +variants of one. **How it is generated:** an id is computed, never invented. `scripts/assign_filament_ids.py` mints it as a deterministic hash of the product's identity — the triple -`(filament_vendor, filament_type, family name)`, where the family name is the preset name +`(filament_vendor, filament_type, filament name)`, where the filament name is the preset name with its `@...` variant suffix stripped — producing an 8-character `OF*` code that is the same for that product in every bundle, in every PR, on every machine. For example, Polymaker's PolyLite PLA presets (`PolyLite PLA @base`, `PolyLite PLA@Q2-Series`, …) resolve -`filament_vendor` `Polymaker`, `filament_type` `PLA`, and family name `PolyLite PLA`; hashing +`filament_vendor` `Polymaker`, `filament_type` `PLA`, and filament name `PolyLite PLA`; hashing `filament_product/Polymaker/PLA/PolyLite PLA` yields `OF5CgdDq`, and that is the id the OrcaFilamentLibrary, OrcaArena, Qidi, and Snapmaker bundles all arrive at independently (derivation details in the Minting section). @@ -31,8 +33,8 @@ 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. +> **Never write a `filament_id` value by hand.** A new filament gets its id from +> `python scripts/assign_filament_ids.py`; one already in the tree has one — inherit it. ## The design, in two pieces @@ -47,7 +49,7 @@ the system is built to make them impossible: number, and no way to get it wrong by hand, because you never write it by hand. 2. **A sanctioned snapshot.** The complete id landscape derived from the tree must equal `scripts/filament_id_snapshot.json` exactly, so every change to ids, claims (which bundles - ship which id, and for which family), or product identity surfaces as a reviewable diff to + ship which id, and for which filament), or product identity surfaces as a reviewable diff to one file — the maintainer gate. ## Who consumes the id @@ -55,7 +57,7 @@ the system is built to make them impossible: The canonical consumer is tray-to-preset matching: a device reports a tray material id (`tray_info_idx`), and the shared matching pipeline (`PresetBundle::sync_ams_list` and friends) resolves it to a preset. The matcher is printer-scoped and first-match-wins: -scanning only compatible family roots — system roots plus user-made custom filaments, which +scanning only compatible root presets — system roots plus user-made custom filaments, which are user roots carrying their own `P*` ids; a preset derived from another resolves through its root and never matches directly — it picks the first one whose `filament_id` equals the tray's. On a miss it falls back by filament type: a system `Generic ` preset @@ -73,7 +75,7 @@ device-reported tray material id flowing through the shared matcher. | Ecosystem | Where the tray id comes from today | | --- | --- | | Bambu AMS | the device itself (RFID / user tray setting), in Bambu's own `GF*` catalog; `BBLPrinterAgent` rewrites it into our id before the matcher sees it (see [The Bambu catalog map](#the-bambu-catalog-map)) | -| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name. No preset carries a `QD_*` value, so the slot currently resolves by filament type; mapping the composed id onto the family's minted id belongs in the agent | +| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name. No preset carries a `QD_*` value, so the slot currently resolves by filament type; mapping the composed id onto the filament's minted id belongs in the agent | | Creality CFS | runtime brand/type scoring returns the winning preset's id | | Klipper (AFC / Happy Hare) | runtime lookup by filament type | | Snapmaker | runtime color/vendor/type match | @@ -115,45 +117,47 @@ Two more consumer-side facts worth knowing: > **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). +second selectable diameter → **new filament, new id**. The same spool tuned for another printer +or nozzle → **join the existing filament** (keep its base name and inherit it; no id +key needed). Tuning a generic material → **join the OrcaFilamentLibrary filament** (inherit +`Generic X @System` and keep the `Generic X` base name; no id key needed). | Situation | id | | --- | --- | -| Per-printer / per-nozzle variant of an existing material | same id (inherit, never write the key) | +| Per-printer / per-nozzle variant of an existing material | same id (inherit it) | | 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 of the same product (1.75 + 2.85) | sibling family, new id | +| Second diameter of the same product (1.75 + 2.85) | sibling filament, 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 — Qidi's PolyLite PLA has four per-series roots - (`PolyLite PLA@Q2-Series`, `@Q2C-Series`, `@X-Max 4-Series`, `@X-Plus 5-Series`) — and all - of them must declare the *identical* id. This is the authoring rule for new work; a large - grandfathered tail of older presets breaks it in two ways — keys written on instantiated - presets (frozen in the snapshot's `instantiated_with_id` list) and keys that override the - id the preset would inherit from its family (frozen in `id_overrides`) — and CI ratchets - so no new preset joins either tail. -2. **The family name is the base name**: the preset name with everything from the first +1. **Every preset carries the id of its own product, wherever it gets it from.** The id is a + function of the preset's own triple (rule 5), and `inherits` carries settings, never + identity. So a preset may declare the key itself or inherit it from any ancestor — a + ` @base` root, a real (instantiated) preset of the same filament, an + OrcaFilamentLibrary preset — and CI checks one thing: the id it ends up with equals the + mint of *its* triple. The usual shape is one `@base` root (`"instantiation": "false"`) + declaring the key and the per-printer variants inheriting it; a filament may have several + roots — Qidi's PolyLite PLA has four per-series roots (`PolyLite PLA@Q2-Series`, + `@Q2C-Series`, `@X-Max 4-Series`, `@X-Plus 5-Series`) — which then all declare the identical + id. A branded filament that borrows a generic's settings (`Flashforge ABS Basic @FF C5` + inherits `Generic ABS @System`) declares its own id, because its triple is its own. +2. **The filament 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, + are both the filament `MyBrand PLA`. +3. **Within one filament, variants' `compatible_printers` are pairwise disjoint** — per printer, at most one compatible instantiated preset per id, or AMS matching turns ambiguous. The C++ validator's `-f` check 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 — - e.g. `Generic PLA @Sovol SV08 MAX` inherits `Generic PLA @System` and lists three Sovol - nozzles. A vendor-*branded* filament never rides a generic family id. + preset on your printers, and it is what makes its triple — and so its id — the library's) + and sets a non-empty `compatible_printers` — e.g. `Generic PLA @Sovol SV08 MAX` inherits + `Generic PLA @System` and lists three Sovol nozzles. Renaming such a preset makes it a + different product by rule 5, so it then needs its own id. 5. **Ids follow the product identity.** The id is a pure function of the product triple - `(filament_vendor, filament_type, family name)`, so correcting any of them re-mints the id + `(filament_vendor, filament_type, filament name)`, so correcting any of them re-mints the id **by design** (via `--remint `; the exact sequence is in the FAQ). Nothing forwards the old value, so anything outside the tree that stored it — a device tray, a calibration record, a saved project — falls back to matching by filament type until the user re-selects @@ -169,48 +173,48 @@ New ids are deterministic, computed exactly like the `setting_id` precedent FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id") = c4d3ff49-4c32-5534-a3e3-00894157ab97 filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, - "filament_product///") ) + "filament_product///") ) ``` `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; with the `OF` prefix the full id is 8 chars, within the -AMS length limit. The triple comes from the family root's *flattened* config: +AMS length limit. The triple comes from the root preset's *flattened* config: `` is the filament **manufacturer** (`"Polymaker"`, or `"Generic"` for generics — never the printer brand), -`` the material type, `` the root's base name; the two config +`` the material type, `` the root's base name; the two config values are inheritable list options and the first element counts. Content-addressing on that triple is what makes the whole system converge. The key contains no -bundle name, so the same product mints the same id in every bundle — hoisting a family into +bundle name, so the same product mints the same id in every bundle — moving a filament into OrcaFilamentLibrary never changes its id, and two vendors independently shipping the same product arrive at the same id without coordinating. `Polymaker/PLA/PolyLite PLA` mints `OF5CgdDq`, and that one id is declared by the OrcaFilamentLibrary, OrcaArena, Qidi, and Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrzZ8`, claimed -by ten bundles — most by independent declarations converging on the same mint, the rest -purely through inheritance from the OFL family. +by 35 bundles — most by independent declarations converging on the same mint, the rest +purely through inheritance from the OFL preset. On the rare collision with an existing id, the minter salts the input (`…/1`, `…/2`, …) until free, and the result is frozen in the profile file. Salting is also used deliberately: a *salt split* keeps two presets of one product on distinct ids where a single id would be AMS-ambiguous on the same printer — the "selectable alongside" situation from the -table above, resolved without inventing a second family name. The tooling recognizes salt +table above, resolved without inventing a second filament name. The tooling recognizes salt iterations of a triple as conformant and preserves such splits across re-mints. -Workflow for a new family: +Workflow for a new filament: ```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) +# 1. Author the filament with NO filament_id key anywhere. +python scripts/assign_filament_ids.py # 2. mint + insert ids into the root preset(s) python scripts/assign_filament_ids.py --update-snapshot # 3. record the new claims in the snapshot 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. ``` -The default run mints ids for id-less families and replaces any declaration that is not in +The default run mints ids for id-less filaments and replaces any declaration that is not in `OF` format; it never rewrites a valid `OF` id, so it is idempotent and a no-op once every -family has one. It edits profile files byte-preservingly (indentation, BOM, and line endings +filament has one. It edits profile files byte-preservingly (indentation, BOM, and line endings intact) and re-parses them to fail loudly. -`--mint "filament_vendor/filament_type/family_name"` prints the id a **new** mint of that +`--mint "filament_vendor/filament_type/filament_name"` prints the id a **new** mint of that triple would get, without touching anything — note that for a triple whose id already exists it prints the next *free* salt iteration, not the live id (asking for `Polymaker/PLA/PolyLite PLA` today prints the salt-1 id, because `OF5CgdDq` is taken). @@ -228,7 +232,7 @@ normally only used by id migrations): - `--profiles DIR` points the tooling at a different profile tree (default `resources/profiles`). -If you skip the tooling, CI fails and prints the remedy: the expected id for your family and +If you skip the tooling, CI fails and prints the remedy: the expected id for your filament and the instruction to run `python scripts/assign_filament_ids.py`; once the id is minted, the snapshot checks likewise point at `--update-snapshot` and tell you to commit the resulting diff. @@ -244,23 +248,21 @@ bundle — not even the one whose printers use the catalog — that may write on | `GF*` | Bambu AMS/RFID catalog | declarable by **nobody**, BBL included: Bambu's own ids live in the generated catalog map, never in a profile | | `QD_*` | Qidi device protocol | declarable by **nobody**, Qidi included: the box composes these ids at runtime and they are not preset ids | | `P` + 7 hex chars (case-insensitive), `"null"` | user-created custom filaments (`CreatePresetsDialog.cpp`) | never appears in system profiles | -| every already-shipped id | frozen in the snapshot (grandfathered) | frozen as-is; new claims need maintainer sign-off | The two device namespaces, in detail: - **Bambu (`GF*`).** Bambu's device/RFID/cloud catalog is external and opaque, which is a - reason to keep it out of the profiles rather than to let one bundle own it. Every BBL family + reason to keep it out of the profiles rather than to let one bundle own it. Every BBL filament mints an `OF` id from its triple like every other vendor's, and the correspondence to Bambu's catalog ids lives in one generated file the app applies at the printer boundary — the next - section. Nothing under `resources/profiles/**` carries a `GF*` id today and the snapshot - grandfathers none, so a `GF*` id appearing anywhere in the tree is a mistake, whoever wrote - it. + section. Nothing under `resources/profiles/**` carries a `GF*` id today and nothing can be + exempted, so a `GF*` id appearing anywhere in the tree is a mistake, whoever wrote it. - **Qidi (`QD_*`).** `QD_*` is a device-*protocol* namespace, not a preset id space: the Qidi box path composes `QD___` ids at runtime (slot vendor and type indices reported by the device, the series digit inferred client-side from the printer model/name). Qidi presets carry ordinary minted `OF*` ids (generics share the OFL ids), so a composed id matches no preset and the slot falls back to filament type; translating it to - the family's id belongs in `QidiPrinterAgent`. The alternative — treating per-series + the filament's id belongs in `QidiPrinterAgent`. The alternative — treating per-series protocol ids as preset ids — would put one product under five ids (`QIDI PLA Rapido` would be `QD_0_1_1` through `QD_4_1_1`), exactly the fragmentation the mint rule removes. @@ -294,7 +296,7 @@ it from **BambuStudio's own shipped BBL bundle** — a sparse shallow clone of u or `--bambustudio-dir `. Our BBL bundle is a fork of Bambu's, tuned and extended independently, so it is not the source of truth for Bambu's ids. A row's key is whatever id our tree already mints for that same -`(filament_vendor, filament_type, family)` triple; a product we do not ship gets a freshly +`(filament_vendor, filament_type, filament name)` triple; a product we do not ship gets a freshly generated key and the row sits inert until some bundle claims that triple — `OFdyfQvU` / `GFG03`, "Bambu PETG Matte", is such a row today. @@ -303,18 +305,18 @@ prints. Two lines, both informational, neither blocking the write: ```text upstream ships 'Bambu PETG Matte' (Bambu Lab/PETG), we ship nothing with that identity -Orca BBL families with no row: 135 Orca-only product(s) +Orca BBL filaments with no row: 135 Orca-only product(s) ``` -The first names each upstream product our BBL bundle has no same-identity family for — +The first names each upstream product our BBL bundle has no same-identity filament for — sometimes a genuinely missing product, sometimes a name drift a follow-up rename would -converge. The second counts our own BBL families that matched no row: 135 of 234 today, of +converge. The second counts our own BBL filaments that matched no row: 135 of 234 today, of which 109 send an `OF` id on the wire and 26 already rode `OF` ids inherited from the OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 109 was the one-off size of the transition and stopped being computable from the tree once the BBL bundle was re-minted, so do not "fix" the report to print it. -**Check 8** lives in `check_filament_ids`, so profile CI runs it alongside the other seven. It +**Check 6** lives in `check_filament_ids`, so profile CI runs it alongside the other five. It holds the file to its contract: it parses, carries `source` / `bambustudio_commit` / `generated`, keys only `OF`-format ids, maps each Bambu id at most once, and — for every row whose key the tree actually claims — agrees with the tree on that id's `(vendor, type, name)` @@ -408,49 +410,41 @@ Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via 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). Besides the live `ids` and `triples` -maps, the snapshot carries grandfather lists (`instantiated_with_id`, `id_overrides`, -`alias_exceptions`, `triple_exceptions`) that freeze pre-existing structure debt while the -checks ratchet all new profiles to the clean rules. +deterministically (running it twice changes nothing). The snapshot holds one map, `ids`: each +entry is the product the id is minted from (`filament_vendor`, `filament_type`, `name`) and the +`filaments` claiming it (`Vendor/Filament`), and it sanctions *state*, never exceptions: no check +consults it to excuse a preset from a rule, and there is no grandfather list of any kind. The checks, in brief: - **Format** — every id occurring in the tree is `OF` + 6 base62 chars. No exceptions: not a - grandfathered snapshot entry, not BBL. -- **Snapshot equality** — tree claims == snapshot claims **and** tree triples == snapshot - triples, both directions: any `filament_vendor`/`filament_type`/family-name change surfaces - as a snapshot diff. -- **Mint conformance** — a non-grandfathered `OF*` id must equal the mint (or a low salt - iteration) of its declarer's product triple; the error prints the expected id to paste into - the family root. -- **Alias hygiene** — a vendor preset riding an OFL family id must keep the library preset's - base name (a rename re-exposes the library preset, since alias shadowing is name-based), - a non-empty `compatible_printers` (an empty one shadows nothing), and no own id key - (structure rule 4). -- **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and - `filament_type` (generics use `"Generic"`), and all declarers of one family within a - bundle must agree on the triple. + snapshot entry, not BBL. +- **Snapshot equality** — tree claims == snapshot claims **and** each id's declared triple == + its snapshot entry, both directions: any `filament_vendor`/`filament_type`/name change + surfaces as a snapshot diff. +- **Identity** — the id is a function of the triple alone. A declared `OF*` id must equal the + mint (or a low salt iteration) of its declarer's own triple; the id an instantiated preset + *inherits* must equal the mint of *its* own triple, however it inherits it (a root, a real + filament, a library preset — structure rule 1); and every instantiated system filament must + resolve an effective id at all (recall: an id-less one is a hard load error in C++ that + discards the whole vendor bundle). The errors print the expected id. - **Reserved namespaces** — `GF*`, `QD_*`, `P<7-hex>` or `"null"` claimed by any vendor, - BBL and Qidi included, unless that exact claim is grandfathered in the snapshot (none is - today). -- **Structure** — no `filament_id` key on newly instantiated presets; no new - declared-vs-inherited id drift; every instantiated system filament must resolve an - effective id through its `inherits` chain (recall: an id-less one is a hard load error in - C++ that discards the whole vendor bundle). + BBL and Qidi included. +- **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and + `filament_type` (generics use `"Generic"`), and all declarers of one filament within a + bundle must agree on the triple. - **Bambu catalog map** — `resources/printers/bambu_filament_ids.json` parses, carries its `source` / `bambustudio_commit` / `generated` header, keys only `OF`-format ids, maps each Bambu id at most once, and agrees with the tree on the triple of every row whose key the tree claims. See [The Bambu catalog map](#the-bambu-catalog-map); the remedy is always to regenerate, never to hand-edit. -Any new claim on a **reserved namespace** — a profile that declares a `GF*`, `QD_*` or -`P<7-hex>` id, whatever its vendor — is refused by `--update-snapshot` unless you pass -`--allow-shared-catalog`, and even then it lands in the snapshot diff for maintainer review. -There is no such claim in the tree today and adding one should be a last resort: for a -Bambu-cataloged product, the catalog map is where the correspondence belongs. Any other new -sharing via a *declared* id is caught by the mint-conformance check; sharing through -inheritance carries no declaration to check and surfaces only as a new claim in the snapshot -diff — which is exactly why that diff is the gate. +A profile that declares a **reserved-namespace** id — `GF*`, `QD_*` or `P<7-hex>`, whatever +its vendor — cannot pass the format check, so `--update-snapshot` refuses to sanction it +rather than hide the mistake until CI. For a Bambu-cataloged product, the catalog map is where +the correspondence belongs. Any other new sharing via a *declared* id is caught by the identity +check; sharing through inheritance carries no declaration to check and surfaces only as a new +claim in the snapshot diff — which is exactly why that diff is the gate. `orca_extra_profile_check.py` separately holds every declared id to the AMS 8-character limit, tree-wide and for every vendor alike, scoped to the presets a vendor's index actually @@ -463,24 +457,27 @@ ambiguity check behind structure rule 3. ## 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 +- **A new color of an existing product?** Never a new id — colors are not filaments. +- **A second diameter (1.75 mm and 2.85 mm) of the same product?** A sibling filament 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 high-speed tune of an existing material for another printer model?** Same filament: + keep the base name and inherit its root; no id key needed. - **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 fix a family's `filament_vendor` or `filament_type`.** Fix the config, run + `Generic PLA` base name, set `compatible_printers`; no id key needed. +- **A branded filament that borrows a generic's settings?** Fine — inherit `Generic X @System` + (or any real filament) for the settings and declare the id of your own filament; run + `python scripts/assign_filament_ids.py` to mint it. Inheritance never changes the id. +- **I need to fix a filament's `filament_vendor` or `filament_type`.** Fix the config, run `--remint ` then `--update-snapshot`, and commit the profile and snapshot diffs together. The id re-derives from the corrected identity, and nothing forwards the old value, so a tray or record still holding it falls back to matching by filament type. -- **I need to rename a family.** Rename the presets (adding `renamed_from`, which keeps the +- **I need to rename a filament.** Rename the presets (adding `renamed_from`, which keeps the preset *name* resolving), then `--remint `, then `--update-snapshot`. The id follows - the new family name; as with any identity fix, the old id is not forwarded. + the new filament name; as with any identity fix, the old id is not forwarded. - **Can I reuse a `QD_*` id for a Qidi profile?** No — nobody can. It is the device protocol's own id space: the box composes those values at runtime and no preset carries one. Author Qidi filaments like any other vendor's. -- **CI says my family needs an id.** Run `python scripts/assign_filament_ids.py`, then +- **CI says my filament 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 diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 723a907f52..9641788cf7 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -9510,7 +9510,7 @@ "sub_path": "filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json" }, { - "name": "COEX NYLEX UNFILLED @BBL X1C", + "name": "COEX NYLEX UNFILLED @BBL X1C", "sub_path": "filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json" }, { diff --git a/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json index 507a7050fb..082948c7ec 100644 --- a/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json +++ b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json @@ -1,6 +1,7 @@ { "type": "filament", - "name": "COEX NYLEX UNFILLED @BBL X1C", + "name": "COEX NYLEX UNFILLED @BBL X1C", + "renamed_from": "COEX NYLEX UNFILLED @BBL X1C", "inherits": "COEX NYLEX UNFILLED @base", "from": "system", "setting_id": "CXPAUB21_01", diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index c5412c53bd..f85e19bb76 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1241,8 +1241,8 @@ "sub_path": "filament/BASE/Generic ASA @base.json" }, { - "name": "Elegoo TPU @base", - "sub_path": "filament/BASE/Elegoo TPU @base.json" + "name": "Elegoo TPU 95A @base", + "sub_path": "filament/BASE/Elegoo TPU 95A @base.json" }, { "name": "Elegoo PETG @base", @@ -1261,8 +1261,8 @@ "sub_path": "filament/BASE/Elegoo ABS @base.json" }, { - "name": "Elegoo PAHT @base", - "sub_path": "filament/BASE/Elegoo PAHT @base.json" + "name": "Elegoo PAHT-CF @base", + "sub_path": "filament/BASE/Elegoo PAHT-CF @base.json" }, { "name": "Elegoo PC @base", diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json similarity index 94% rename from resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json rename to resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json index a05ee2347c..95bc595f90 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Elegoo PAHT @base", + "name": "Elegoo PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OF0h7ERL", + "filament_id": "OF20kXr5", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json index c1b9e78897..5f9561f5a9 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json @@ -3,6 +3,9 @@ "name": "Elegoo PET-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFV5tNw6", - "instantiation": "false" + "filament_id": "OFe98A1y", + "instantiation": "false", + "filament_type": [ + "PET-CF" + ] } diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json index 58cec037c3..3ffd591fdc 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid TPU 95A @base", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "filament_id": "OF30Ftju", "instantiation": "false" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json similarity index 85% rename from resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json rename to resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json index 08bd3d93af..70cdc0faa0 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Elegoo TPU @base", + "name": "Elegoo TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OFmhJs5V", + "filament_id": "OFqHQNoZ", "instantiation": "false", "filament_max_volumetric_speed": [ "3.6" diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json index d1e05a1372..0b01b2feb3 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @EC", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "ZRd4WPQrh8nC8n7G", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json index 6e9944b30c..ef850ee0d8 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "hqmWADQDYWBuniTB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json index 10d7202698..e1da626c9a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @EC2", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "miv95d8rXD4CAgjC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json index 1389221bce..255eaf6a1a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "6LUQGjzmx0y5A6Qn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json index bf0363b0d7..de12de0612 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @ECC", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "iDRlRpUzPNVYv0lY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json index 870f4dc8ac..7f707f2371 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @ECC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "cOI05FCm8wrkqtDD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json index 5c41f76588..7d52aface9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @ECC2", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "hmTwVvyCAIZI7rSY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json index 86eccaff03..215b9beec9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @ECC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "v0Qj3xMBkUGnxZPi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json index 864845cb2f..8d4c0d5976 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EN3 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "4W6ZheJxNPUPxe1s", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json index 392812ff9a..60f5b55a19 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EN4 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "6pp381J3ahRYYtFE", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index 2f9e6a7f02..c7b203d5f1 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -525,8 +525,8 @@ "sub_path": "filament/DREMC/DREMC PA6-CF @base.json" }, { - "name": "Elegoo PAHT @base", - "sub_path": "filament/Elegoo/Elegoo PAHT @base.json" + "name": "Elegoo PAHT-CF @base", + "sub_path": "filament/Elegoo/Elegoo PAHT-CF @base.json" }, { "name": "FILL3D PA @base", @@ -1169,8 +1169,8 @@ "sub_path": "filament/DREMC/DREMC TPU 95A @base.json" }, { - "name": "Elegoo TPU @base", - "sub_path": "filament/Elegoo/Elegoo TPU @base.json" + "name": "Elegoo TPU 95A @base", + "sub_path": "filament/Elegoo/Elegoo TPU 95A @base.json" }, { "name": "Eolas Prints TPU D60 UV Resistant @System", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json index 7d22d28387..d07ac1dd64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @System", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "S073oXCeOlTEqh6L", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json similarity index 95% rename from resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json rename to resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json index d85796e7b1..7c3abd1cdd 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Elegoo PAHT @base", + "name": "Elegoo PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OF0h7ERL", + "filament_id": "OF20kXr5", "instantiation": "false", "activate_air_filtration": [ "1" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json index c1b9e78897..5f9561f5a9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json @@ -3,6 +3,9 @@ "name": "Elegoo PET-CF @base", "inherits": "Elegoo PETG @base", "from": "system", - "filament_id": "OFV5tNw6", - "instantiation": "false" + "filament_id": "OFe98A1y", + "instantiation": "false", + "filament_type": [ + "PET-CF" + ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json index 58cec037c3..3ffd591fdc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid TPU 95A @base", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "filament_id": "OF30Ftju", "instantiation": "false" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json index fb4260fae0..020bb85945 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @System", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "SLcn59fIZPDl2brJ", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json similarity index 89% rename from resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json rename to resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json index e2fe95548a..4380ee77ce 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json @@ -1,9 +1,9 @@ { "type": "filament", - "name": "Elegoo TPU @base", + "name": "Elegoo TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OFmhJs5V", + "filament_id": "OFqHQNoZ", "instantiation": "false", "filament_density": [ "1.21" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json index db331b0daa..19dc66df4e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "mJoaud6wulT4p8SA", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json index 248c57f6d0..6f800f7b98 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "rKUUREJNhstIU0I2", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json index 47cf80d076..c7a2b01351 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "hQ8jQ5GKQKGKuPew", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json index 9e5d63a63c..eff74ae5ab 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "5DqT3CYUgp1oJD1V", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/scripts/assign_filament_ids.py b/scripts/assign_filament_ids.py index d410242277..e10dbe138e 100755 --- a/scripts/assign_filament_ids.py +++ b/scripts/assign_filament_ids.py @@ -4,24 +4,25 @@ Mint deterministic filament_id values for OrcaSlicer system filament products an validate the tree against the sanctioned-state snapshot. Policy (companion to assign_vendor_setting_ids.py; see docs/HLSD/filament_id.md): - * filament_id is a PRODUCT id: one commercial product line = one id, shared by - all of that material's per-printer/per-nozzle variants in every bundle. - OrcaFilamentLibrary (OFL) is the product catalog: a family's id is declared - once, on its family root (instantiation != "true"); vendor bundles carry - only specializations of OFL families — same base name, non-empty - compatible_printers, no filament_id key — which resolve the OFL id through - the loader's inherits/base-bundle walk. Products OFL does not carry mint - their id in the vendor bundle with the same rule; the key is - bundle-independent, so hoisting a family into OFL never changes its id. - * New ids are content-addressed by the product triple, resolved from the - declaring preset's flattened config (filament_vendor and filament_type are - inheritable list options — first element; family name = preset base name): + * filament_id is a PRODUCT id: one named spool product = one id, shared by all + of that product's per-printer/per-nozzle variants in every bundle. The + granularity is the name on the spool, not the brand: "AAA PLA Lite" and + "AAA PLA Pro" are two products with two ids, not variants of one. The + id is a pure function of the product triple (below), so WHERE a preset gets + it from is irrelevant: it may declare the key itself or inherit it from any + ancestor — a root preset, a real (instantiated) filament, an + OrcaFilamentLibrary (OFL) preset — as long as the id it ends up with is the + mint of its OWN triple. Inheritance carries settings, never identity; the + key is bundle-independent, so moving a filament into OFL never changes it. + * Ids are content-addressed by the product triple, resolved from the preset's + flattened config (filament_vendor and filament_type are inheritable list + options — first element; filament name = preset base name): filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, - "filament_product///") ) + "filament_product///") ) 8 chars total, which satisfies the AMS length limit. Nobody invents ids by hand; on the astronomically rare collision with an existing id the input is salted ("/1", "/2", ...) until free and the result is frozen in file. - Identity changes (a family rename, a filament_vendor/filament_type fix) + Identity changes (a filament rename, a filament_vendor/filament_type fix) change the id BY DESIGN. * Reserved id spaces that are never minted into or altered: - GF* Bambu AMS/RFID catalog: frozen, no preset of any @@ -33,11 +34,12 @@ Policy (companion to assign_vendor_setting_ids.py; see docs/HLSD/filament_id.md) preset may declare one - 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 snapshot (ids, - claims and declared triples): it must exactly equal the tree-derived state - at all times, so any id/claim/triple change shows up as a reviewable diff to - that file (the maintainer gate). + * scripts/filament_id_snapshot.json is the sanctioned-state snapshot: one + entry per id, carrying the product triple it is minted from and the + "Vendor/Filament" presets claiming it. It must exactly equal the tree-derived + state at all times, so any id/claim/triple change shows up as a reviewable + diff to that file (the maintainer gate). It sanctions state, never + exceptions: no check consults it to excuse a preset from the rules above. The effective-id resolution below is loader-faithful (PresetBundle.cpp load_vendor_configs_from_json): own filament_id key, else walk `inherits` within @@ -46,10 +48,10 @@ OFL it stays in OFL; a vendor chain that dead-ends id-less retries its direct parent in the OFL map. filament_vendor / filament_type resolve the same way. Run from anywhere: python3 scripts/assign_filament_ids.py - (default) mint + insert ids for id-less families, mint + replace + (default) mint + insert ids for id-less filaments, mint + replace non-OF-format declarations; idempotent, never rewrites a - valid OF-format id; a no-op once every family has one - --mint "Vendor/Type/Family" + valid OF-format id; a no-op once every filament has one + --mint "Vendor/Type/Filament" print the id that triple would mint; touches nothing --update-snapshot regenerate the snapshot from the tree --remint VENDOR re-derive VENDOR's declared ids from their triples and @@ -90,10 +92,10 @@ 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 +# Filament 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?@.*$") -# Salt iterations accepted by the mint-conformance check (check 3). +# Salt iterations accepted by the identity 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' @@ -130,19 +132,19 @@ def _utf8_console(): # --------------------------------------------------------------------------- def base_name(name): - """Family name of a preset: name with the first "@..." suffix stripped.""" + """Filament name of a preset: name with the first "@..." suffix stripped.""" return BASE_NAME_RE.sub("", name, count=1) -def generate_filament_id(filament_vendor, filament_type, family, salt=0): +def generate_filament_id(filament_vendor, filament_type, filament_name, salt=0): """Deterministic "OF" + 6-char base62 filament_id for a filament product. - input = "filament_product///" + input = "filament_product///" (+ "/" 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_product/{filament_vendor}/{filament_type}/{family}" + key = f"filament_product/{filament_vendor}/{filament_type}/{filament_name}" if salt: key = f"{key}/{salt}" u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) @@ -154,14 +156,19 @@ def generate_filament_id(filament_vendor, filament_type, family, salt=0): return "OF" + "".join(reversed(digits)) -def mint_filament_id(filament_vendor, filament_type, family, taken): +def mint_filament_id(filament_vendor, filament_type, filament_name, taken): """Mint the product's id, salting past any id in `taken`.""" for salt in range(10000): - candidate = generate_filament_id(filament_vendor, filament_type, family, salt) + candidate = generate_filament_id(filament_vendor, filament_type, filament_name, salt) if candidate not in taken: return candidate raise RuntimeError( - f"could not mint a free filament_id for {filament_vendor}/{filament_type}/{family}") + f"could not mint a free filament_id for {filament_vendor}/{filament_type}/{filament_name}") + + +def mint_iterations(triple): + """The ids that count as the mint of `triple`: salt 0..MAX_CHECK_SALT.""" + return {generate_filament_id(*triple, salt=s) for s in range(MAX_CHECK_SALT + 1)} # --------------------------------------------------------------------------- @@ -234,7 +241,8 @@ def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=False, 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 6b drift). + id its inherits chain would resolve WITHOUT the declaration — the + --drop-redundant-ids redundancy test). 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 @@ -307,7 +315,7 @@ def resolve_filament_field(name, field, filaments, ofl_filaments, seen=None, in_ def resolve_triple(name, filaments, ofl_filaments): - """The preset's mint-key triple (filament_vendor, filament_type, family).""" + """The preset's mint-key triple (filament_vendor, filament_type, filament name).""" return (resolve_filament_field(name, "filament_vendor", filaments, ofl_filaments), resolve_filament_field(name, "filament_type", filaments, ofl_filaments), base_name(name)) @@ -317,7 +325,7 @@ 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 + the checks and the assign pass need. All claims are "Vendor/Filament" strings over INSTANTIATED system filaments, tree-wide including OFL and BBL. """ profiles_dir = str(profiles_dir) @@ -325,7 +333,6 @@ def analyze_tree(profiles_dir): ofl_filaments, ofl_errors = ( load_vendor_filaments(profiles_dir, OFL) if OFL in vendor_names else ({}, []) ) - ofl_declared = {r["filament_id"] for r in ofl_filaments.values() if r.get("filament_id")} vendors = {} read_errors = list(ofl_errors) @@ -336,51 +343,39 @@ def analyze_tree(profiles_dir): 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) + eff, src, _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 + # id -> set of "Vendor/Filament" 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. + # none of whose descendants instantiate) keep an empty claim list, so that + # the snapshot exactly equals the tree-derived state. 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, own_key) presets riding an OFL family + inherited = [] # (vendor, rec, eff, triple) instantiated presets inheriting an OF id triples = {} # fid -> set of triples of its declarers declarer_triples = [] # (vendor, rec, fid, triple) per declarer - family_triples = {} # (vendor, family) -> {triple: [declarer names]} + filament_triples = {} # (vendor, filament_name) -> {triple: [declarers]} for vendor, filaments in vendors.items(): occurring = vendor_ids.setdefault(vendor, set()) for rec in filaments.values(): + triple = resolve_triple(rec["name"], filaments, ofl_filaments) + rec["triple"] = triple if rec.get("filament_id"): fid = rec["filament_id"] occurring.add(fid) declared_ids.setdefault(vendor, set()).add(fid) ids.setdefault(fid, set()) - triple = resolve_triple(rec["name"], filaments, ofl_filaments) - rec["triple"] = triple declarer_triples.append((vendor, rec, fid, triple)) triples.setdefault(fid, set()).add(triple) - family_triples.setdefault( + filament_triples.setdefault( (vendor, base_name(rec["name"])), {}).setdefault( triple, []).append(rec["name"]) - if rec.get("inherits"): - inherited, _src, skip_entry = resolve_filament_id( - rec["name"], filaments, ofl_filaments, skip_own=True) - if inherited and inherited != fid: - overrides.append((vendor, rec["name"], fid, inherited, rec["file"])) - if (vendor != OFL and skip_entry and inherited - and inherited in ofl_declared): - alias_candidates.append((vendor, rec, skip_entry, True)) if not rec["instantiation"]: continue eff = rec.get("eff_filament_id") @@ -389,47 +384,28 @@ def analyze_tree(profiles_dir): 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 eff in ofl_declared: - alias_candidates.append((vendor, rec, rec["ofl_entry"], False)) + if not rec.get("filament_id") and OF_ID_RE.match(eff): + inherited.append((vendor, rec, eff, triple)) - # Alias hygiene (check 4): a vendor preset that rides an OFL family (its id - # resolves through OFL) is matched to the OFL preset by ALIAS (base name); - # renaming it re-exposes the OFL preset and creates a live duplicate, empty - # compatible_printers cannot claim any printer, and declaring its own - # filament_id key forks the family off the catalog id. - alias_violations = [] # (vendor, name, ofl_entry, reason, file) - for vendor, rec, entry, own_key in alias_candidates: - expected = base_name(entry) - own_base = base_name(rec["name"]) - if own_key: - alias_violations.append(( - vendor, rec["name"], entry, - f'declares its own filament_id "{rec["filament_id"]}" — dropping the key ' - f"lets it resolve the OFL family's id through inherits", - rec["file"])) - elif 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"])) + # Identity (check 3b): an inherited id must be the mint of the preset's + # OWN triple. A declared id is held to the same rule as a declarer (3a), + # and an id whose declarer already fails 3a is reported there once, not + # again under every preset inheriting it. + unminted = {fid for _v, _r, fid, triple in declarer_triples + if OF_ID_RE.match(fid) and fid not in mint_iterations(triple)} + id_mismatches = [ + (vendor, rec, eff, triple) for vendor, rec, eff, triple in inherited + if eff not in unminted and eff not in mint_iterations(triple)] - # Cross-bundle triple divergence (check 7, warning only): the same family + # Cross-bundle triple divergence (check 5, warning only): the same filament # name declared in several bundles with different triples cannot converge # on one id until the divergence is fixed. name_bundles = {} - for (vendor, family), tmap in family_triples.items(): - name_bundles.setdefault(family, {})[vendor] = frozenset(tmap) + for (vendor, filament_name), tmap in filament_triples.items(): + name_bundles.setdefault(filament_name, {})[vendor] = frozenset(tmap) cross_bundle_triples = [ - (family, {v: sorted(ts) for v, ts in per_vendor.items()}) - for family, per_vendor in sorted(name_bundles.items()) + (filament_name, {v: sorted(ts) for v, ts in per_vendor.items()}) + for filament_name, per_vendor in sorted(name_bundles.items()) if len(per_vendor) > 1 and len(set(per_vendor.values())) > 1 ] @@ -439,18 +415,12 @@ def analyze_tree(profiles_dir): "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), + "id_mismatches": id_mismatches, "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, "triple_sets": triples, "declarer_triples": declarer_triples, - "family_triples": family_triples, - "triple_exceptions": sorted( - f"{v}/{f}" for (v, f), tmap in family_triples.items() if len(tmap) > 1), + "filament_triples": filament_triples, "cross_bundle_triples": cross_bundle_triples, } @@ -460,14 +430,19 @@ def analyze_tree(profiles_dir): # --------------------------------------------------------------------------- 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"], - "triples": analysis["triples"], - "triple_exceptions": analysis["triple_exceptions"], - } + """One entry per id, in id order: the product triple it is minted from and + the "Vendor/Filament" claims on it. Requires exactly one declared triple per + id (update_snapshot refuses any other state; check 3 rejects it anyway).""" + ids = {} + for fid, claims in sorted(analysis["ids"].items()): + [(vendor, ftype, filament_name)] = analysis["triples"][fid] + ids[fid] = {"filaments": sorted(claims), "name": filament_name, + "filament_type": ftype, "filament_vendor": vendor} + return {"ids": ids} + + +def snapshot_triple(entry): + return [entry["filament_vendor"], entry["filament_type"], entry["name"]] def load_snapshot(path): @@ -475,18 +450,15 @@ def load_snapshot(path): if not os.path.exists(path): return None data = load_json(path) - for key in ("ids", "triples"): - data.setdefault(key, {}) - for key in ("instantiated_with_id", "id_overrides", "alias_exceptions", - "triple_exceptions"): - data.setdefault(key, []) + data.setdefault("ids", {}) return data def write_snapshot(path, obj): - """Deterministic serialization: sorted keys, indent 1, LF, trailing newline.""" + """Deterministic serialization: snapshot_from_analysis order, 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) + json.dump(obj, f, indent=1, ensure_ascii=False) f.write("\n") @@ -526,29 +498,27 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 1. Format: every id occurring in the tree (declared or effective) must match ^OF[0-9A-Za-z]{6}$. No exceptions: not the snapshot, not BBL. - 2. Snapshot equality, both directions: the tree-derived id->families multimap - AND the id->triples map of the declarers must equal the snapshot exactly - (the snapshot diff is the maintainer gate). - 3. Mint conformance: an OF-format declaration must equal the mint of the - declarer's triple or a salted iteration, unless that exact (id, triple) - pair is grandfathered in the snapshot. - 4. Alias hygiene: a vendor preset riding an OFL family must keep the OFL - base name, claim printers via non-empty compatible_printers, and declare - no filament_id key of its own. - 5. Reserved namespaces (GF*/QD_*/P-hex/"null", all ownerless) must not be - claimed by any vendor, except claims grandfathered in the snapshot. - 6. 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++). - 7. Triple integrity: (a) every declarer resolves non-empty filament_vendor - and filament_type (hard error, no grandfathering); (b) declarers of one - (bundle, family) resolve identical triples, unless grandfathered in - snapshot triple_exceptions; cross-bundle divergence on the same family - name is a warning only. - 8. Bambu catalog map: resources/printers/bambu_filament_ids.json must parse, + 2. Snapshot equality, both directions: every id in the tree, the filaments + claiming it and the triple its declarers resolve must equal the snapshot + entry exactly (the snapshot diff is the maintainer gate). + 3. Identity: the id is a function of the triple alone. (a) A declared id + must equal the mint of the declarer's own triple or a salted iteration; + (b) the id an instantiated preset inherits must equal the mint of ITS + own triple — how it inherits it (a root, a real filament, an OFL + preset) is irrelevant; (c) every instantiated filament resolves an + effective id at all (an id-less one is a hard load error in C++). + 4. Reserved namespaces (GF*/QD_*/P-hex/"null", all ownerless) must not be + claimed by any vendor. + 5. Triple integrity: (a) every declarer resolves non-empty filament_vendor + and filament_type; (b) declarers of one (bundle, filament) resolve + identical triples; cross-bundle divergence on the same filament name is a + warning only. + 6. Bambu catalog map: resources/printers/bambu_filament_ids.json must parse, carry source/bambustudio_commit/generated, key only OF-format ids, map each Bambu id at most once, and for every row whose key the tree claims, the tree's triple for that id must equal the row's (vendor, type, name). + + Nothing is grandfathered: the snapshot sanctions state, never exceptions. """ _utf8_console() errors = 0 @@ -571,24 +541,36 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, continue print_error( f'filament_id "{fid}" ({vendor}) is not a minted "OF" id; new ' - f'family ids must come from "python scripts/assign_filament_ids.py" ' + f'filament ids must come from "python scripts/assign_filament_ids.py" ' f'(see --mint)') errors += 1 # -- 2. snapshot equality (both directions) ----------------------------- + tree_triples = analysis["triples"] for fid in sorted(tree_ids): - if fid not in snap_ids: + entry = snap_ids.get(fid) + if entry is None: 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]: + if claim not in entry["filaments"]: print_error( f'filament_id "{fid}" claim "{claim}" is not sanctioned by ' f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") errors += 1 + # Every tree id has at least one declarer; the snapshot records one + # triple per id, so a divergent declarer is a mismatch in both directions. + sanctioned = snapshot_triple(entry) + for t in tree_triples[fid]: + if t != sanctioned: + print_error( + f'filament_id "{fid}" triple "{"/".join(t)}" is not sanctioned by ' + f'scripts/filament_id_snapshot.json, which records ' + f'"{"/".join(sanctioned)}"; {UPDATE_HINT}') + errors += 1 for fid in sorted(snap_ids): if fid not in tree_ids: print_error( @@ -596,91 +578,31 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"{UPDATE_HINT}") errors += 1 continue - for claim in snap_ids[fid]: + for claim in snap_ids[fid]["filaments"]: if claim not in tree_ids[fid]: print_error( f'filament_id stability: snapshot claim "{claim}" of id "{fid}" ' f"vanished from the tree; {UPDATE_HINT}") errors += 1 - # ... and the declared triples, both directions. - snap_triples = snapshot["triples"] - tree_triples = analysis["triples"] - for fid in sorted(tree_triples): - for t in tree_triples[fid]: - if t not in snap_triples.get(fid, []): - print_error( - f'filament_id "{fid}" triple "{"/".join(t)}" is not sanctioned by ' - f"scripts/filament_id_snapshot.json; {UPDATE_HINT}") - errors += 1 - for fid in sorted(snap_triples): - for t in snap_triples[fid]: - if t not in tree_triples.get(fid, []): - print_error( - f'filament_id triple stability: snapshot triple "{"/".join(t)}" of ' - f'id "{fid}" vanished from the tree; {UPDATE_HINT}') - errors += 1 - # -- 3. mint conformance for OF-format declarations ---------------------- + # -- 3. identity: the id is a function of the triple alone --------------- for vendor, rec, fid, triple in sorted( analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): - if not OF_ID_RE.match(fid): - continue - if list(triple) in snap_triples.get(fid, []): - continue # grandfathered (id, triple) pair - minted = [generate_filament_id(*triple, salt=s) for s in range(MAX_CHECK_SALT + 1)] - if fid not in minted: - print_error( - f'filament_id "{fid}" declared by "{rec["name"]}" ({rec["file"]}) does ' - f'not match the mint of its triple "{"/".join(triple)}": expected ' - f'"{minted[0]}" (or a salted iteration); paste the expected id into the ' - f"family root (or, for an intentionally kept id, {UPDATE_HINT})") - errors += 1 - - # -- 4. alias hygiene for presets riding OFL families -------------------- - exceptions = set(snapshot["alias_exceptions"]) - for vendor, name, entry, reason, file in analysis["alias_violations"]: - if f"{vendor}/{name}" in exceptions: + if not OF_ID_RE.match(fid) or fid in mint_iterations(triple): continue print_error( - f'preset "{name}" ({file}) rides the OFL family "{entry}" but {reason}; ' - f"a vendor specialization keeps the OFL base name, sets non-empty " - f"compatible_printers and declares no filament_id key — or the family " - f"gets its own minted id") + f'filament_id "{fid}" declared by "{rec["name"]}" ({rec["file"]}) does ' + f'not match the mint of its triple "{"/".join(triple)}": expected ' + f'"{generate_filament_id(*triple)}" (or a salted iteration); paste the ' + f"expected id, or fix the triple and --remint the vendor") errors += 1 - - # -- 5. 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 = reserved_space_desc(fid, owner) - 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 - - # -- 6. 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 + for vendor, rec, eff, triple in sorted( + analysis["id_mismatches"], key=lambda x: (x[0], x[1]["file"])): 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") + f'preset "{rec["name"]}" ({rec["file"]}) inherits filament_id "{eff}" but ' + f'its own triple "{"/".join(triple)}" mints "{generate_filament_id(*triple)}"; ' + f"a preset carries the id of its own product: inherit a preset of the " + f"same filament, or declare its own key") errors += 1 ofl_map = analysis["vendors"].get(OFL, {}) for vendor, name, file in analysis["missing_effective"]: @@ -689,11 +611,26 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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'run "python scripts/assign_filament_ids.py" (expected id for filament ' f'"{vendor}/{base_name(name)}": "{expected}", salted if taken)') errors += 1 - # -- 7. triple integrity --------------------------------------------------- + # -- 4. 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 + space = reserved_space_desc(fid, owner) + 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 + + # -- 5. triple integrity --------------------------------------------------- for vendor, rec, fid, triple in sorted( analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): if triple[0] and triple[1]: @@ -706,27 +643,27 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, f"resolves empty {missing}; the mint key needs both (generic materials " f'use filament_vendor "Generic")') errors += 1 - triple_exceptions = set(snapshot["triple_exceptions"]) - for (vendor, family), tmap in sorted(analysis["family_triples"].items()): - if len(tmap) < 2 or f"{vendor}/{family}" in triple_exceptions: + for (vendor, filament_name), tmap in sorted(analysis["filament_triples"].items()): + if len(tmap) < 2: continue detail = "; ".join( f'"{"/".join(t)}" ({", ".join(sorted(names))})' for t, names in sorted(tmap.items())) print_error( - f'family "{vendor}/{family}" declarers resolve divergent triples: {detail}; ' - f"declarers of one family must agree on (filament_vendor, filament_type)") + f'filament "{vendor}/{filament_name}" declarers resolve divergent triples: ' + f"{detail}; declarers of one filament must agree on " + f"(filament_vendor, filament_type)") errors += 1 - for family, per_vendor in analysis["cross_bundle_triples"]: + for filament_name, per_vendor in analysis["cross_bundle_triples"]: detail = "; ".join( f'{v}: {", ".join("/".join(t) for t in ts)}' for v, ts in sorted(per_vendor.items())) print_warning( - f'family name "{family}" resolves different triples across bundles ' + f'filament name "{filament_name}" resolves different triples across bundles ' f"({detail}); bundles of one product converge on one id only once " f"their triples agree") - # -- 8. Bambu catalog map -------------------------------------------------- + # -- 6. Bambu catalog map -------------------------------------------------- try: bambu_map = load_json(map_path) if not isinstance(bambu_map, dict): @@ -785,61 +722,52 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, # --update-snapshot # --------------------------------------------------------------------------- -def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - allow_shared_catalog=False): +def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): """Regenerate the snapshot from the tree. - 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. + Refuses to sanction a reserved-namespace id (or a claim on one) and an id + declared under more than one triple: neither can ever pass --check, so + writing it into the snapshot would only hide the mistake until CI. + 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) + + refusals = 0 + for vendor in sorted(analysis["vendor_ids"]): + for fid in sorted(analysis["vendor_ids"][vendor]): + is_reserved, owner = reserved_space_owner(fid) + if is_reserved and vendor != owner: + print_error( + f'refusing to sanction filament_id "{fid}" ({vendor}): reserved id ' + f"space, {reserved_space_desc(fid, owner)}") + refusals += 1 + for fid, ts in sorted(analysis["triples"].items()): + if len(ts) > 1: + print_error( + f'refusing to sanction filament_id "{fid}": declared under {len(ts)} ' + f'triples ({"; ".join("/".join(t) for t in ts)}); one id names one ' + f"product (check 3)") + refusals += 1 + if refusals: + return 1 + 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 = reserved_space_desc(fid, owner) - 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 - # 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()) + len(set(entry["filaments"]) - set(old_ids.get(fid, {}).get("filaments", []))) + for fid, entry 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": [], "triples": {}, - "triple_exceptions": []} - changed = new_snap != old_snap + len(set(entry["filaments"]) - set(new_snap["ids"].get(fid, {}).get("filaments", []))) + for fid, entry in old_ids.items()) + changed = new_snap != (old_snap or {"ids": {}}) if changed: write_snapshot(snapshot_path, new_snap) @@ -847,11 +775,6 @@ def update_snapshot(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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"declared triples : {len(new_snap['triples'])}") - for section in ("instantiated_with_id", "id_overrides", "alias_exceptions", - "triple_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: @@ -952,25 +875,26 @@ def remove_filament_id(path, old_id): # --------------------------------------------------------------------------- -# Default run: mint + insert ids for id-less families +# Default run: mint + insert ids for id-less filaments # --------------------------------------------------------------------------- def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): - """Mint + insert ids for id-less families; mint + replace non-OF-format + """Mint + insert ids for id-less filaments; mint + replace non-OF-format declarations. Never rewrites a valid (OF-format) existing id. - A family = (vendor, base name) group over instantiated filaments with no - effective id. The minted id is a pure function of the family's triple — - (filament_vendor, filament_type) resolved on the root(s), family name — and - 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. + A filament = (vendor, base name) group over instantiated presets with no + effective id. The minted id is a pure function of the filament's triple — + (filament_vendor, filament_type) resolved on the root(s), filament name — + and is inserted into the filament's root(s): the id-less presets of the + SAME filament its members inherit, or the member itself otherwise (a parent + of another filament cannot carry this filament's id — check 3). A declaration whose value is not OF-format (e.g. a vendor bundle synced from an upstream source that ships its own catalog ids, such as BBL's GF*) - is treated the same as a missing family: a fresh id is minted for the + is treated the same as a missing filament: a fresh id is minted for the declarer's triple and the value is replaced in place (declarers that share one triple across several per-printer roots converge on the same id, same - as the multi-root families above). This is what makes a future BBL sync + as the multi-root filaments above). This is what makes a future BBL sync self-healing: upstream files arrive with GF ids, this pass replaces them, and the generated Bambu catalog map (keyed by the ids this mints) already knows the resulting rows. @@ -983,8 +907,8 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): print_error(msg) errors += 1 - # Group id-less instantiated presets into families. - families = {} # (vendor, family) -> [rec] + # Group id-less instantiated presets by filament. + filaments = {} # (vendor, filament_name) -> [rec] for vendor, name, _file in analysis["missing_effective"]: rec = analysis["vendors"][vendor][name] if rec["id_source"] in ("cycle", "dangling"): @@ -992,17 +916,17 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): f'({rec["id_source"]})') errors += 1 continue - families.setdefault((vendor, base_name(name)), []).append(rec) + filaments.setdefault((vendor, base_name(name)), []).append(rec) # Declarations whose value is not OF-format: treated as missing too (see - # docstring). Grouped by triple, not by (vendor, family), so declarers + # docstring). Grouped by triple, not by (vendor, filament), so declarers # that legitimately share one triple across several files converge on one # freshly minted id instead of each getting their own. non_of_declarers = [ (vendor, rec, fid, triple) for vendor, rec, fid, triple in analysis["declarer_triples"] if not OF_ID_RE.match(fid)] - if not families and not non_of_declarers: + if not filaments and not non_of_declarers: print_success("every instantiated filament already resolves an OF-format " "filament_id; nothing to do (0 files changed)") return 0, errors @@ -1013,46 +937,34 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_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] + # Root preset(s): the direct vendor-side parents of the members (id-less by + # construction) that belong to the same filament, or the member itself. + roots = {} # (vendor, filament_name) -> {preset name: rec} + for key, members in sorted(filaments.items()): + vendor, filament_name = key vendor_map = analysis["vendors"][vendor] - family_roots = {} + filament_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"): + if (root is None or root.get("filament_id") + or base_name(root["name"]) != filament_name): 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 + filament_roots[root["name"]] = root + roots[key] = filament_roots ofl_map = analysis["vendors"].get(OFL, {}) 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 + filaments_minted = 0 + for key, filament_roots in sorted(roots.items()): + vendor, filament_name = key vendor_map = analysis["vendors"][vendor] fields = {(resolve_filament_field(n, "filament_vendor", vendor_map, ofl_map), resolve_filament_field(n, "filament_type", vendor_map, ofl_map)) - for n in family_roots} + for n in filament_roots} if len(fields) > 1: print_error( - f'cannot mint for family "{vendor}/{family}": its roots resolve ' + f'cannot mint for filament "{vendor}/{filament_name}": its roots resolve ' f"divergent (filament_vendor, filament_type) pairs {sorted(fields)}; " f"align the fields first") errors += 1 @@ -1063,26 +975,27 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): k for k, v in (("filament_vendor", fvendor), ("filament_type", ftype)) if not v) print_error( - f'cannot mint for family "{vendor}/{family}": it resolves empty ' + f'cannot mint for filament "{vendor}/{filament_name}": it resolves empty ' f'{missing}; the mint key needs both (generic materials use ' f'filament_vendor "Generic")') errors += 1 continue - new_id = mint_filament_id(fvendor, ftype, family, taken) + new_id = mint_filament_id(fvendor, ftype, filament_name, taken) taken.add(new_id) - families_minted += 1 - for name in sorted(family_roots): - root = family_roots[name] + filaments_minted += 1 + for name in sorted(filament_roots): + root = filament_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'filament "{vendor}/{filament_name}": filament_id "{new_id}" ' + f'-> {root["file"]}') # Non-OF-format declarations: mint once per triple, rewrite every declarer # that shares it (see docstring). declarations_reminted = 0 assigned = {} # triple -> id chosen this run for vendor, rec, fid, triple in sorted(non_of_declarers, key=lambda x: (x[0], x[1]["file"])): - fvendor, ftype, family = triple + fvendor, ftype, filament_name = triple if not fvendor or not ftype: missing = " and ".join( k for k, v in (("filament_vendor", fvendor), @@ -1094,16 +1007,16 @@ def assign_missing_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH): errors += 1 continue if triple not in assigned: - assigned[triple] = mint_filament_id(fvendor, ftype, family, taken) + assigned[triple] = mint_filament_id(fvendor, ftype, filament_name, taken) taken.add(assigned[triple]) new_id = assigned[triple] rewrite_filament_id(rec["path"], fid, new_id) files_changed += 1 declarations_reminted += 1 - print_info(f'family "{vendor}/{family}": non-OF filament_id "{fid}" -> "{new_id}" ' - f'({rec["file"]})') + print_info(f'filament "{vendor}/{filament_name}": non-OF filament_id "{fid}" ' + f'-> "{new_id}" ({rec["file"]})') - print_info(f"families minted : {families_minted}") + print_info(f"filaments minted : {filaments_minted}") print_info(f"non-OF reminted : {declarations_reminted}") print_info(f"files changed : {files_changed}") if files_changed: @@ -1178,8 +1091,7 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): # mint-conformant (check 3) — leave it. This keeps deliberate salt # splits (two presets of one product that must stay distinct for # per-printer AMS matching, validator -f) stable across re-mints. - if fid in {generate_filament_id(*rec["triple"], salt=s) - for s in range(MAX_CHECK_SALT + 1)}: + if fid in mint_iterations(rec["triple"]): continue want = want_id(rec["triple"]) if fid == want: @@ -1197,8 +1109,8 @@ def remint_vendors(vendor_list, profiles_dir=PROFILES_DIR): def drop_redundant_ids(vendor, profiles_dir=PROFILES_DIR): """Delete filament_id declarations in `vendor` that merely re-declare an OFL - family's id path: ignoring its own key, the preset's inherits chain enters - OFL and resolves an OFL-declared id, and the preset keeps the OFL family's + filament's id path: ignoring its own key, the preset's inherits chain enters + OFL and resolves an OFL-declared id, and the preset keeps the OFL filament's base name. Such a preset is a specialization and rides the OFL id (v3.2(b)). Never touches the snapshot. Returns (dropped, errors). """ @@ -1246,25 +1158,22 @@ def drop_redundant_ids(vendor, profiles_dir=PROFILES_DIR): 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/Type/Family"', + description="Mint deterministic filament_id values for id-less filaments " + "and validate the tree against the sanctioned snapshot.") + parser.add_argument("--mint", metavar='"Vendor/Type/Filament"', help="print the id the (filament_vendor, filament_type, " - "family name) triple would mint; touches nothing") + "filament name) triple would mint; touches nothing") parser.add_argument("--update-snapshot", action="store_true", help="regenerate scripts/filament_id_snapshot.json from " "the tree") 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("--remint", metavar="VENDOR", action="append", help="re-derive VENDOR's declared filament_ids from their " "triples and rewrite mismatches in place; repeatable") parser.add_argument("--drop-redundant-ids", metavar="VENDOR", help="delete filament_id declarations in VENDOR that " - "re-declare the OFL family id they already resolve " + "re-declare the OFL filament id they already resolve " "through inherits") parser.add_argument("--profiles", default=PROFILES_DIR, help="profiles directory (default: resources/profiles)") @@ -1274,8 +1183,8 @@ def main(argv=None): if args.mint: parts = args.mint.split("/", 2) if len(parts) != 3 or not all(parts): - parser.error('--mint expects "filament_vendor/filament_type/family_name" ' - "with all three components non-empty (check 7 rejects empty " + parser.error('--mint expects "filament_vendor/filament_type/filament_name" ' + "with all three components non-empty (check 5 rejects empty " "vendor/type in the tree)") snapshot = load_snapshot(SNAPSHOT_PATH) or {"ids": {}} taken = set(snapshot["ids"]) @@ -1295,8 +1204,7 @@ def main(argv=None): return 1 if errors else 0 if args.update_snapshot: - return update_snapshot(args.profiles, SNAPSHOT_PATH, - allow_shared_catalog=args.allow_shared_catalog) + return update_snapshot(args.profiles, SNAPSHOT_PATH) if args.check: errors = check_filament_ids(args.profiles, SNAPSHOT_PATH) diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index cf4d13c987..9b0c64f473 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1,13212 +1,7903 @@ { - "alias_exceptions": [ - "BBL/COEX NYLEX UNFILLED @BBL X1C", - "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 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 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 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 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", - "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", - "Snapmaker/PolyTerra J1 PLA", - "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", - "Sovol/Generic PLA Silk @Sovol SV08 MAX", - "Sovol/Polymaker PETG @Sovol SV08 MAX", - "Sovol/SUNLU PETG @Sovol SV08 MAX", - "Sovol/Sovol Zero PETG HS Nozzle", - "Sovol/Sovol Zero PLA Basic HS Nozzle", - "Sovol/Sovol Zero PLA Silk HS Nozzle" - ], - "id_overrides": [ - "Anycubic/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic PETG @Anycubic Kobra 3 0.4 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 Neo 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 High Speed @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Anycubic PLA+ @Anycubic Kobra 3 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", - "Artillery/Artillery ABS", - "Artillery/Artillery ABS @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery ASA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PET @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PETG", - "Artillery/Artillery PETG @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Basic", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Matte", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Silk", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Tough", - "Artillery/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery TPU", - "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "BBL/addnorth ABS rABS", - "BBL/addnorth PA Adura", - "BBL/addnorth PA Adura FDA", - "BBL/addnorth PA-CF Adura X", - "BBL/addnorth PA6 Addlantis", - "BBL/addnorth PC BLend HT LCF", - "BBL/addnorth PETG Base", - "BBL/addnorth PETG ESD", - "BBL/addnorth PETG Economy", - "BBL/addnorth PETG Flame v0", - "BBL/addnorth PETG PRO Matte", - "BBL/addnorth PETG rPETG Matte", - "BBL/addnorth PETG-CF Rigid X", - "BBL/addnorth PLA E-PLA", - "BBL/addnorth PLA Economy", - "BBL/addnorth PLA HT-PLA PRO Matte", - "BBL/addnorth PLA Premium Silk", - "BBL/addnorth PLA Textura", - "BBL/addnorth PLA Wood", - "BBL/addnorth PLA X-PLA", - "BBL/addnorth PLA X-PLA High Speed", - "BBL/addnorth PLA rPLA RE-ADD", - "BBL/addnorth PLA-CF Carbon Fiber", - "BBL/addnorth PVDF Adamant S1", - "BBL/addnorth TPU EasyFlex", - "BBL/addnorth TPU Pro Matte 85A", - "BBL/addnorth TPU Pro Matte 95A", - "Chuanying/Generic HIPS @Chuanying", - "Chuanying/Generic PVA @Chuanying", - "Co Print/Generic ABS @CoPrint", - "Co Print/Generic PETG @CoPrint", - "Co Print/Generic TPU @CoPrint", - "Creality/Generic ASA-CF @Creality Hi-all", - "Creality/Generic PETG-CF @Creality Hi-all", - "Creality/Generic PLA High Speed @Creality Ender-3V3-all", - "Creality/Generic PLA High Speed @Creality Hi-all", - "Creality/Generic PLA High Speed @Creality K1-all", - "Creality/Generic PLA High Speed @Creality K2-all", - "Creality/Generic PLA Matte @Creality Ender-3V3-all", - "Creality/Generic PLA Matte @Creality Hi-all", - "Creality/Generic PLA Matte @Creality K1-all", - "Creality/Generic PLA Matte @Creality K2-all", - "Creality/Generic PLA Silk @Creality Ender-3V3-all", - "Creality/Generic PLA Silk @Creality Hi-all", - "Creality/Generic PLA Silk @Creality K1-all", - "Creality/Generic PLA Silk @Creality K2-all", - "Creality/Generic PLA Wood @Creality Hi-all", - "Cubicon/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @base", - "Cubicon/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABSk @base", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PC @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA+ @base", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @base", - "Elegoo/Elegoo ASA-CF @base", - "Elegoo/Elegoo PC-FR @base", - "Elegoo/Elegoo PET-CF @base", - "Elegoo/Elegoo PETG HF @base", - "Elegoo/Elegoo PETG PRO @base", - "Elegoo/Elegoo PETG Translucent @base", - "Elegoo/Elegoo PETG-CF @base", - "Elegoo/Elegoo PETG-GF @base", - "Elegoo/Elegoo PLA Basic @base", - "Elegoo/Elegoo PLA Galaxy @base", - "Elegoo/Elegoo PLA Glow @base", - "Elegoo/Elegoo PLA Marble @base", - "Elegoo/Elegoo PLA Matte @base", - "Elegoo/Elegoo PLA PRO @base", - "Elegoo/Elegoo PLA Silk @base", - "Elegoo/Elegoo PLA Sparkle @base", - "Elegoo/Elegoo PLA Translucent2 @base", - "Elegoo/Elegoo PLA Wood @base", - "Elegoo/Elegoo PLA+ @base", - "Elegoo/Elegoo PLA-CF @base", - "Elegoo/Elegoo Rapid PETG @base", - "Elegoo/Elegoo Rapid PLA+ @base", - "Elegoo/Elegoo Rapid TPU 95A @base", - "Elegoo/Generic ABS-CF @Elegoo Centauri", - "Elegoo/Generic ASA-CF @Elegoo Centauri", - "Elegoo/Generic PA6-CF @Elegoo", - "Elegoo/Generic PC-CF @Elegoo", - "Elegoo/Generic PET-CF @Elegoo Centauri", - "Elegoo/Generic PETG PRO @Elegoo", - "Elegoo/Generic PETG-CF @Elegoo Centauri", - "Elegoo/Generic PLA Matte @Elegoo", - "Flashforge/Flashforge ABS @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge ABS Basic", - "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge ABS Basic @FF C5", - "Flashforge/Flashforge ABS Basic @FF C5P", - "Flashforge/Flashforge ABS Basic @FF G4", - "Flashforge/Flashforge ABS Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 HF", - "Flashforge/Flashforge ABS Basic @FF G4P", - "Flashforge/Flashforge ABS Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P HF", - "Flashforge/Flashforge ABS-CF @FF G4", - "Flashforge/Flashforge ABS-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge ABS-CF @FF G4P", - "Flashforge/Flashforge ABS-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ABS-GF @FF C5", - "Flashforge/Flashforge ABS-GF @FF C5P", - "Flashforge/Flashforge ASA @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge ASA Basic", - "Flashforge/Flashforge ASA Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge ASA Basic @FF C5", - "Flashforge/Flashforge ASA Basic @FF C5P", - "Flashforge/Flashforge ASA Basic @FF G4", - "Flashforge/Flashforge ASA Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 HF", - "Flashforge/Flashforge ASA Basic @FF G4P", - "Flashforge/Flashforge ASA Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P HF", - "Flashforge/Flashforge ASA-CF", - "Flashforge/Flashforge ASA-CF @FF C5", - "Flashforge/Flashforge ASA-CF @FF C5P", - "Flashforge/Flashforge ASA-CF @FF G4", - "Flashforge/Flashforge ASA-CF @FF G4P", - "Flashforge/Flashforge ASA-GF @FF C5", - "Flashforge/Flashforge ASA-GF @FF C5P", - "Flashforge/Flashforge HIPS @FF C5", - "Flashforge/Flashforge HIPS @FF C5P", - "Flashforge/Flashforge HIPS @FF G4", - "Flashforge/Flashforge HIPS @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4 0.6 nozzle", - "Flashforge/Flashforge HIPS @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4 HF", - "Flashforge/Flashforge HIPS @FF G4P", - "Flashforge/Flashforge HIPS @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HIPS @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4P HF", - "Flashforge/Flashforge HS PETG", - "Flashforge/Flashforge HS PETG @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X", - "Flashforge/Flashforge HS PETG @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge HS PETG @FF C5", - "Flashforge/Flashforge HS PETG @FF C5P", - "Flashforge/Flashforge HS PETG @FF G4", - "Flashforge/Flashforge HS PETG @FF G4 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4 HF", - "Flashforge/Flashforge HS PETG @FF G4P", - "Flashforge/Flashforge HS PETG @FF G4P 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4P HF", - "Flashforge/Flashforge HS PLA", - "Flashforge/Flashforge HS PLA @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X", - "Flashforge/Flashforge HS PLA @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge HS PLA @FF C5", - "Flashforge/Flashforge HS PLA @FF C5P", - "Flashforge/Flashforge HS PLA @FF G4", - "Flashforge/Flashforge HS PLA @FF G4 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4 HF", - "Flashforge/Flashforge HS PLA @FF G4P", - "Flashforge/Flashforge HS PLA @FF G4P 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4P HF", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 HF", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P HF", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PA @FF G4", - "Flashforge/Flashforge PA @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PA @FF G4 HF", - "Flashforge/Flashforge PA @FF G4P", - "Flashforge/Flashforge PA @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PA @FF G4P HF", - "Flashforge/Flashforge PA-CF @FF C5", - "Flashforge/Flashforge PA-CF @FF C5P", - "Flashforge/Flashforge PA-CF @FF G4", - "Flashforge/Flashforge PA-CF @FF G4P", - "Flashforge/Flashforge PA12-CF", - "Flashforge/Flashforge PA6-CF", - "Flashforge/Flashforge PA66-CF", - "Flashforge/Flashforge PC @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PC @FF G4 0.6 nozzle", - "Flashforge/Flashforge PC @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PC @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PC @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PC @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PET-CF", - "Flashforge/Flashforge PET-CF @FF C5", - "Flashforge/Flashforge PET-CF @FF C5P", - "Flashforge/Flashforge PETG @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge PETG Basic", - "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Pro", - "Flashforge/Flashforge PETG Pro @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG Pro @FF C5", - "Flashforge/Flashforge PETG Pro @FF C5P", - "Flashforge/Flashforge PETG Pro @FF G4", - "Flashforge/Flashforge PETG Pro @FF G4 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 HF", - "Flashforge/Flashforge PETG Pro @FF G4P", - "Flashforge/Flashforge PETG Pro @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P HF", - "Flashforge/Flashforge PETG Transparent", - "Flashforge/Flashforge PETG Transparent @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG Transparent @FF C5", - "Flashforge/Flashforge PETG Transparent @FF C5P", - "Flashforge/Flashforge PETG Transparent @FF G4", - "Flashforge/Flashforge PETG Transparent @FF G4 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 HF", - "Flashforge/Flashforge PETG Transparent @FF G4P", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P HF", - "Flashforge/Flashforge PETG-CF", - "Flashforge/Flashforge PETG-CF @FF AD5X", - "Flashforge/Flashforge PETG-CF @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG-CF @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG-CF @FF C5", - "Flashforge/Flashforge PETG-CF @FF C5P", - "Flashforge/Flashforge PETG-CF @FF G4", - "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG-CF @FF G4P", - "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Basic", - "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Basic @FF C5", - "Flashforge/Flashforge PLA Basic @FF C5P", - "Flashforge/Flashforge PLA Basic @FF G4", - "Flashforge/Flashforge PLA Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 HF", - "Flashforge/Flashforge PLA Basic @FF G4P", - "Flashforge/Flashforge PLA Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P HF", - "Flashforge/Flashforge PLA Color Change", - "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Color Change @FF C5", - "Flashforge/Flashforge PLA Color Change @FF C5P", - "Flashforge/Flashforge PLA Color Change @FF G4", - "Flashforge/Flashforge PLA Color Change @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 HF", - "Flashforge/Flashforge PLA Color Change @FF G4P", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P HF", - "Flashforge/Flashforge PLA Galaxy", - "Flashforge/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF C5", - "Flashforge/Flashforge PLA Galaxy @FF C5P", - "Flashforge/Flashforge PLA Galaxy @FF G4", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 HF", - "Flashforge/Flashforge PLA Galaxy @FF G4P", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P HF", - "Flashforge/Flashforge PLA Luminous", - "Flashforge/Flashforge PLA Luminous @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Luminous @FF C5", - "Flashforge/Flashforge PLA Luminous @FF C5P", - "Flashforge/Flashforge PLA Luminous @FF G4", - "Flashforge/Flashforge PLA Luminous @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 HF", - "Flashforge/Flashforge PLA Luminous @FF G4P", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P HF", - "Flashforge/Flashforge PLA Matte", - "Flashforge/Flashforge PLA Matte @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Matte @FF C5", - "Flashforge/Flashforge PLA Matte @FF C5P", - "Flashforge/Flashforge PLA Matte @FF G4", - "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 HF", - "Flashforge/Flashforge PLA Matte @FF G4P", - "Flashforge/Flashforge PLA Matte @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P HF", - "Flashforge/Flashforge PLA Metal", - "Flashforge/Flashforge PLA Metal @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Metal @FF C5", - "Flashforge/Flashforge PLA Metal @FF C5P", - "Flashforge/Flashforge PLA Metal @FF G4", - "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 HF", - "Flashforge/Flashforge PLA Metal @FF G4P", - "Flashforge/Flashforge PLA Metal @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P HF", - "Flashforge/Flashforge PLA Pro", - "Flashforge/Flashforge PLA Pro @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Pro @FF C5", - "Flashforge/Flashforge PLA Pro @FF C5P", - "Flashforge/Flashforge PLA Pro @FF G4", - "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 HF", - "Flashforge/Flashforge PLA Pro @FF G4P", - "Flashforge/Flashforge PLA Pro @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P HF", - "Flashforge/Flashforge PLA Silk", - "Flashforge/Flashforge PLA Silk @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Silk @FF C5", - "Flashforge/Flashforge PLA Silk @FF C5P", - "Flashforge/Flashforge PLA Silk @FF G4", - "Flashforge/Flashforge PLA Silk @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 HF", - "Flashforge/Flashforge PLA Silk @FF G4P", - "Flashforge/Flashforge PLA Silk @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P HF", - "Flashforge/Flashforge PLA Sparkle", - "Flashforge/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 HF", - "Flashforge/Flashforge PLA Sparkle @FF G4P", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P HF", - "Flashforge/Flashforge PLA-CF", - "Flashforge/Flashforge PLA-CF @FF AD5X", - "Flashforge/Flashforge PLA-CF @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA-CF @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA-CF @FF C5", - "Flashforge/Flashforge PLA-CF @FF C5P", - "Flashforge/Flashforge PLA-CF @FF G4", - "Flashforge/Flashforge PLA-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA-CF @FF G4P", - "Flashforge/Flashforge PLA-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", - "Flashforge/Flashforge PPA-CF", - "Flashforge/Flashforge PPA-CF @FF C5", - "Flashforge/Flashforge PPA-CF @FF C5P", - "Flashforge/Flashforge PPA-GF", - "Flashforge/Flashforge PPS @FF G4", - "Flashforge/Flashforge PPS @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PPS @FF G4 0.6 nozzle", - "Flashforge/Flashforge PPS @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PPS @FF G4P", - "Flashforge/Flashforge PPS @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PPS @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PPS @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PPS-CF", - "Flashforge/Flashforge PPS-CF @FF C5", - "Flashforge/Flashforge PPS-CF @FF C5P", - "Flashforge/Flashforge PPS-CF @FF G4", - "Flashforge/Flashforge PPS-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PPS-CF @FF G4P", - "Flashforge/Flashforge PPS-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PVA @FF C5", - "Flashforge/Flashforge PVA @FF C5P", - "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4 0.6 nozzle", - "Flashforge/Flashforge TPU 65D @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.6 nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge TPU 95A", - "Flashforge/Flashforge TPU 95A @FF AD5X", - "Flashforge/Flashforge TPU 95A @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4", - "Flashforge/Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P", - "Flashforge/Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P 0.8 HF nozzle", - "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 NexPA-CF25", - "Flashforge/FusRock PAHT @FF G4 0.6 HF nozzle", - "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", - "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", - "Flashforge/FusRock PAHT-CF", - "Flashforge/FusRock PAHT-CF @FF C5", - "Flashforge/FusRock PAHT-CF @FF C5P", - "Flashforge/FusRock PAHT-CF @FF G4", - "Flashforge/FusRock PAHT-CF @FF G4P", - "Flashforge/FusRock PAHT-CF @G3U 0.6 Nozzle", - "Flashforge/FusRock PAHT-GF", - "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", - "Flashforge/FusRock PET-CF", - "Flashforge/FusRock PET-CF @FF G4", - "Flashforge/FusRock PET-CF @FF G4P", - "Flashforge/FusRock PET-CF @G3U 0.6 Nozzle", - "Flashforge/FusRock PET-GF", - "Flashforge/FusRock S-Multi", - "Flashforge/FusRock S-Multi @FF C5", - "Flashforge/FusRock S-Multi @FF C5P", - "Flashforge/FusRock S-Multi @G3U 0.6 Nozzle", - "Flashforge/FusRock S-PAHT", - "Flashforge/FusRock S-PAHT @FF C5", - "Flashforge/FusRock S-PAHT @FF C5P", - "Flashforge/FusRock S-PAHT @G3U 0.6 Nozzle", - "Flashforge/Generic ASA @Flashforge G3U", - "Flashforge/Generic HIPS @Flashforge", - "Flashforge/Generic HIPS @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PET @FF G4", - "Flashforge/Generic PET @FF G4 0.6 HF nozzle", - "Flashforge/Generic PET @FF G4 0.6 nozzle", - "Flashforge/Generic PET @FF G4 0.8 HF nozzle", - "Flashforge/Generic PET @FF G4P", - "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", - "Flashforge/Generic PET @FF G4P 0.6 nozzle", - "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", - "Flashforge/Generic PETG-CF @Flashforge G3U", - "Flashforge/Generic PETG-CF @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PETG-CF @Flashforge G3U 0.8 Nozzle", - "Flashforge/Generic PLA High Speed @Flashforge AD4", - "Flashforge/Generic PLA Silk @Flashforge AD4", - "Flashforge/Generic PLA-CF @Flashforge G3U", - "Flashforge/Generic PLA-CF @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PLA-CF @Flashforge G3U 0.8 Nozzle", - "Flashforge/Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "Flashforge/Generic PVA @Flashforge", - "Flashforge/Generic TPU 85A @FF AD5X", - "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", - "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", - "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", - "Flashforge/Polymaker CoPA", - "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", - "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", - "Flashforge/Polymaker S1", - "OrcaFilamentLibrary/AliZ PETG-CF @base", - "OrcaFilamentLibrary/AliZ PETG-Metal @base", - "OrcaFilamentLibrary/Elegoo ASA-CF @base", - "OrcaFilamentLibrary/Elegoo PC-FR @base", - "OrcaFilamentLibrary/Elegoo PET-CF @base", - "OrcaFilamentLibrary/Elegoo PETG HF @base", - "OrcaFilamentLibrary/Elegoo PETG PRO @base", - "OrcaFilamentLibrary/Elegoo PETG Translucent @base", - "OrcaFilamentLibrary/Elegoo PETG-CF @base", - "OrcaFilamentLibrary/Elegoo PETG-GF @base", - "OrcaFilamentLibrary/Elegoo PLA Basic @base", - "OrcaFilamentLibrary/Elegoo PLA Galaxy @base", - "OrcaFilamentLibrary/Elegoo PLA Glow @base", - "OrcaFilamentLibrary/Elegoo PLA Marble @base", - "OrcaFilamentLibrary/Elegoo PLA Matte @base", - "OrcaFilamentLibrary/Elegoo PLA PRO @base", - "OrcaFilamentLibrary/Elegoo PLA Silk @base", - "OrcaFilamentLibrary/Elegoo PLA Sparkle @base", - "OrcaFilamentLibrary/Elegoo PLA Translucent2 @base", - "OrcaFilamentLibrary/Elegoo PLA Wood @base", - "OrcaFilamentLibrary/Elegoo PLA+ @base", - "OrcaFilamentLibrary/Elegoo PLA-CF @base", - "OrcaFilamentLibrary/Elegoo Rapid PETG @base", - "OrcaFilamentLibrary/Elegoo Rapid PLA+ @base", - "OrcaFilamentLibrary/Elegoo Rapid TPU 95A @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 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/PolyLite Dual PLA @base", - "OrcaFilamentLibrary/PolyTerra Dual PLA @System", - "Prusa/Generic PLA Silk @Prusa MK4S", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "Qidi/QIDI ABS Rapido 0.2 nozzle", - "Qidi/QIDI ABS Rapido 0.6 nozzle", - "Qidi/QIDI ABS Rapido 0.8 nozzle", - "Qidi/QIDI PETG Tough 0.2 nozzle", - "Qidi/QIDI PETG Tough 0.6 nozzle", - "Qidi/QIDI PETG Tough 0.8 nozzle", - "Qidi/QIDI PLA Rapido 0.2 nozzle", - "Qidi/QIDI PLA Rapido 0.8 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", - "Snapmaker/PolyLite Dual PLA @0.2 nozzle", - "Snapmaker/PolyLite J1 PLA", - "Snapmaker/PolyLite J1 PLA @0.2 nozzle", - "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", - "Snapmaker/PolyTerra J1 PLA", - "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", - "Snapmaker/Polymaker General PLA Family @U1", - "Snapmaker/Polymaker Silk PLA Family @U1", - "Snapmaker/Polymaker Tough PLA Family @U1", - "Snapmaker/Snapmaker ABS Benchy @U1", - "Snapmaker/Snapmaker Dual ABS Benchy", - "Snapmaker/Snapmaker Dual TPE", - "Snapmaker/Snapmaker Dual TPU High-Flow", - "Snapmaker/Snapmaker J1 ABS Benchy", - "Snapmaker/Snapmaker J1 TPE", - "Snapmaker/Snapmaker J1 TPU High-Flow", - "Snapmaker/Snapmaker PET @Dual", - "Snapmaker/Snapmaker PLA Full Spectrum @U1 0.4 nozzle", - "Snapmaker/Snapmaker PLA Matte @U1", - "Snapmaker/Snapmaker PLA Silk @U1", - "Snapmaker/Snapmaker PLA Silk @U1 0.2 nozzle", - "Snapmaker/Snapmaker PLA Silk @U1 0.6 nozzle", - "Snapmaker/Snapmaker PLA Silk @U1 0.8 nozzle", - "Snapmaker/Snapmaker TPE", - "Snapmaker/Snapmaker TPE @U1", - "Snapmaker/Snapmaker TPU High-Flow @U1", - "Sovol/Generic PLA Silk @Sovol SV08 MAX", - "Sovol/Polymaker PETG @Sovol SV08 MAX", - "Sovol/SUNLU PETG @Sovol SV08 MAX", - "Sovol/Sovol Zero PETG HS Nozzle", - "Sovol/Sovol Zero PLA Basic HS Nozzle", - "Sovol/Sovol Zero PLA Silk HS Nozzle", - "Wanhao France/YUMI PETG", - "Wanhao France/YUMI PLA Bowden", - "Wanhao France/YUMI PLA Direct Drive", - "Z-Bolt/Generic ABS HT @Z-Bolt Base" - ], "ids": { - "OF02UAVh": [ - "Creality/Soleyin Ultra PLA" - ], - "OF03RK6r": [ - "BBL/BETA PLA Metal" - ], - "OF0AquDh": [ - "Flashforge/FusRock S-Multi" - ], - "OF0EYBWQ": [ - "BBL/addnorth PETG Flame v0" - ], - "OF0FfcAG": [ - "Anycubic/Anycubic TPU for ACE" - ], - "OF0NgY1y": [ - "BBL/COEX NYLEX PA6-CF", - "OrcaFilamentLibrary/COEX NYLEX PA6-CF" - ], - "OF0R5Wc7": [ - "Artillery/Artillery PLA Tough" - ], - "OF0UJcb6": [ - "BBL/PolyLite PETG", - "OrcaFilamentLibrary/PolyLite PETG", - "Snapmaker/PolyLite PETG" - ], - "OF0VpkBM": [ - "Snapmaker/PolyLite PETG Translucent" - ], - "OF0Vtzaw": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" - ], - "OF0b7M1z": [ - "SeeMeCNC/SeeMeCNC PA-CF" - ], - "OF0c7mnL": [ - "InfiMech/InfiMech ABS" - ], - "OF0gGRWk": [ - "BBL/Panchroma PLA Glow", - "OrcaFilamentLibrary/Panchroma PLA Glow", - "Snapmaker/Panchroma PLA Glow" - ], - "OF0h7ERL": [ - "Elegoo/Elegoo PAHT-CF", - "OrcaFilamentLibrary/Elegoo PAHT-CF" - ], - "OF0kCNDK": [ - "BBL/Panchroma PLA Luminous", - "OrcaFilamentLibrary/Panchroma PLA Luminous", - "Snapmaker/Panchroma PLA Luminous" - ], - "OF0omtEb": [ - "Snapmaker/Fiberon ASA-CF08" - ], - "OF0pzFLc": [ - "BBL/COEX PLA+Silk", - "OrcaFilamentLibrary/COEX PLA+Silk" - ], - "OF0w7OpJ": [ - "Qidi/QIDI ABS Rapido 0.8 nozzle" - ], - "OF0wBGNx": [ - "BBL/Bambu ASA-CF", - "OrcaFilamentLibrary/Bambu ASA-CF" - ], - "OF0wz84w": [ - "Qidi/QIDI ABS Rapido 0.6 nozzle" - ], - "OF0yFLkY": [ - "Anycubic/Anycubic ASA" - ], - "OF112FvY": [ - "Anycubic/Generic PETG Basic" - ], - "OF1ID4N1": [ - "BBL/addnorth PA6 Addlantis" - ], - "OF1N1qMK": [ - "BBL/Panchroma PLA UV Shift", - "OrcaFilamentLibrary/Panchroma PLA UV Shift", - "Snapmaker/Panchroma PLA UV Shift" - ], - "OF1Pke8t": [ - "BBL/Overture Easy PLA", - "OrcaFilamentLibrary/Overture Easy PLA" - ], - "OF1UNk9P": [ - "BBL/Generic PP", - "Creality/Generic PP", - "OrcaFilamentLibrary/Generic PP", - "Tiertime/Generic PP" - ], - "OF1W7c76": [ - "Qidi/QIDI ASA-CF" - ], - "OF1d7c3A": [ - "Snapmaker/Snapmaker ASA" - ], - "OF1dpPrW": [ - "Qidi/Bambu PLA" - ], - "OF1hznGB": [ - "Elegoo/Elegoo PLA PRO", - "OrcaFilamentLibrary/Elegoo PLA PRO" - ], - "OF223rZv": [ - "Anycubic/Anycubic ABS" - ], - "OF2EB9Iz": [ - "Volumic/Volumic ASA Ultra" - ], - "OF2EK9F1": [ - "OrcaFilamentLibrary/FilAr PLA-mate Violeta" - ], - "OF2GCW1l": [ - "BBL/SUNLU PETG", - "Flashforge/SUNLU PETG", - "OrcaFilamentLibrary/SUNLU PETG", - "Sovol/SUNLU PETG" - ], - "OF2TQpOO": [ - "Qidi/QIDI PLA Silk" - ], - "OF2VFe4J": [ - "BBL/Bambu PAHT-CF", - "OrcaFilamentLibrary/Bambu PAHT-CF" - ], - "OF2Z1nT5": [ - "OrcaFilamentLibrary/FilAr PETG Azul Imperial" - ], - "OF2hfMcG": [ - "OrcaArena/Arena PLA-CF" - ], - "OF2pj5l5": [ - "BBL/Overture Super PLA+", - "OrcaFilamentLibrary/Overture Super PLA+" - ], - "OF2xccEe": [], - "OF30Ftju": [ - "Elegoo/Elegoo Rapid TPU 95A", - "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" - ], - "OF342jVN": [ - "BBL/Bambu PLA Tough+" - ], - "OF3F63OE": [ - "re3D/re3D PETG" - ], - "OF3IKafc": [ - "Qidi/QIDI PLA Rapido Matte" - ], - "OF3OMgrI": [ - "Creality/CR-Silk" - ], - "OF3PDEw3": [ - "BBL/BETA PLA High Speed" - ], - "OF3WQaKK": [ - "Creality/CR-PETG" - ], - "OF3dJf4E": [ - "Volumic/Volumic PLA Ultra (Performance)" - ], - "OF3fwO8b": [ - "FlyingBear/FlyingBear PLA Basic" - ], - "OF3kBrdA": [ - "Creality/eSUN PETG", - "OrcaFilamentLibrary/eSUN PETG" - ], - "OF3msXEa": [ - "Snapmaker/Snapmaker Dual PETG-CF" - ], - "OF3ydJTT": [ - "InfiMech/InfiMech PLA Hyper" - ], - "OF43Raws": [ - "Snapmaker/PolyTerra J1 PLA" - ], - "OF44ERDr": [ - "Snapmaker/Polymaker General PLA Family" - ], - "OF44VYzK": [ - "OrcaFilamentLibrary/FilAr PETG Azul Francia" - ], - "OF4APyxe": [ - "Creality/Hyper PAHT-CF" - ], - "OF4GM5qX": [ - "Ratrig/Generic ASA BigNozzle" - ], - "OF4KsW72": [], - "OF4Nhggz": [ - "Artillery/Artillery PLA Basic+" - ], - "OF4PKvem": [ - "BBL/BETA PLA Fluorescence" - ], - "OF4QZANi": [ - "BBL/BETA TPU Matte" - ], - "OF4RvVuU": [ - "BBL/Bambu PPS-CF" - ], - "OF4S3To3": [ - "Qidi/QIDI PETG Rapido" - ], - "OF4WB37S": [ - "Snapmaker/Snapmaker PETG" - ], - "OF4XTfoI": [ - "BBL/BETA PETG Marble" - ], - "OF4f8vVp": [ - "WonderMaker/WonderMaker PET-CF" - ], - "OF4iWKrE": [ - "Qidi/QIDI PETG-CF" - ], - "OF4nQ62r": [ - "Qidi/QIDI PLA Basic" - ], - "OF4ulo9Y": [ - "WonderMaker/WonderMaker PVA" - ], - "OF53eLVD": [ - "Blocks/Generic ASA-CF", - "Creality/Generic ASA-CF", - "Elegoo/Generic ASA-CF" - ], - "OF54B0S0": [ - "BBL/Bambu PPA-CF", - "OrcaFilamentLibrary/Bambu PPA-CF" - ], - "OF54SvEe": [ - "Prusa/Prusament PA-CF" - ], - "OF55jHAJ": [ - "Prusa/Generic ABS HF" - ], - "OF5B9sUc": [ - "BBL/Fiberon PA6-GF25" - ], - "OF5BN24W": [ - "Flashforge/Flashforge PPA-GF" - ], - "OF5BXhHF": [ - "BBL/BETA PLA High Temp" - ], - "OF5CgdDq": [ - "BBL/PolyLite PLA", - "OrcaArena/PolyLite PLA", - "OrcaFilamentLibrary/PolyLite PLA", - "Qidi/PolyLite PLA", - "Snapmaker/PolyLite PLA" - ], - "OF5LAnla": [ - "BBL/BETA PLA Gradient" - ], - "OF5NqBfC": [ - "Wanhao France/YUMI PETG" - ], - "OF5P4jgA": [ - "OrcaFilamentLibrary/FilAr PLA Dorado" - ], - "OF5PtjTp": [ - "Anycubic/Anycubic PLA Glow" - ], - "OF5SJ3jz": [ - "Flashforge/Flashforge ABS" - ], - "OF5YVJXH": [ - "Artillery/Artillery ASA" - ], - "OF5c6nq3": [ - "Flashforge/Generic TPU-64D" - ], - "OF5lGPup": [ - "WonderMaker/WonderMaker PETG Basic" - ], - "OF5nlfKY": [ - "OrcaFilamentLibrary/FilAr PLA Oro" - ], - "OF5oNRED": [ - "Eryone/Eryone PP" - ], - "OF5oXk4M": [ - "Anycubic/Polymaker PLA Pro", - "Snapmaker/Polymaker PLA Pro" - ], - "OF5rnhjh": [], - "OF5tX6va": [ - "Ratrig/Generic TPU BigNozzle" - ], - "OF5umxxT": [ - "BBL/PolyLite PLA Glow", - "Snapmaker/PolyLite PLA Glow" - ], - "OF5vgi2G": [ - "OrcaFilamentLibrary/FilAr PLA-mate Azul" - ], - "OF65InrS": [ - "Snapmaker/Snapmaker TPU" - ], - "OF66KUAN": [ - "Creality/PolySonic PLA" - ], - "OF6ATsCF": [ - "Snapmaker/Snapmaker Dual PLA-CF" - ], - "OF6H51Xx": [ - "Snapmaker/Polymaker PETG", - "Sovol/Polymaker PETG" - ], - "OF6Ll8lK": [ - "Elegoo/Elegoo PETG Translucent", - "OrcaFilamentLibrary/Elegoo PETG Translucent" - ], - "OF6MOPWx": [ - "Creality/Generic PET", - "Elegoo/Generic PET", - "Flashforge/Generic PET" - ], - "OF6TuVAg": [ - "Snapmaker/Snapmaker Breakaway Support For PLA", - "Snapmaker/Snapmaker J1 PVA" - ], - "OF6Yn69v": [ - "BBL/BETA TPU 90A" - ], - "OF6kj4jI": [ - "iQ/Fiberthree PACF Pro P2" - ], - "OF6qAuyi": [ - "Flashforge/Flashforge PLA Matte" - ], - "OF6qw3Wb": [ - "BBL/BETA PAHT-CF" - ], - "OF6rdQ6M": [ - "BBL/Generic PPS-CF", - "Creality/Generic PPS-CF", - "Tiertime/Generic PPS-CF" - ], - "OF70zbGS": [ - "Creality/Hyper L-W PLA" - ], - "OF71b7qO": [ - "BBL/addnorth PLA E-PLA" - ], - "OF72YYTd": [ - "Snapmaker/Snapmaker ABS" - ], - "OF74KeQR": [ - "BBL/Generic PHA", - "OrcaFilamentLibrary/Generic PHA", - "Tiertime/Generic PHA" - ], - "OF79Fbo6": [ - "Cubicon/Cubicon PC" - ], - "OF7H3VJM": [ - "OrcaFilamentLibrary/eSUN PLA-Marble" - ], - "OF7OqDp3": [ - "Tiertime/Tiertime PLA-CF" - ], - "OF7SliVn": [ - "Snapmaker/PolyLite J1 PLA" - ], - "OF7c9fln": [ - "Anycubic/Anycubic PLA Translucent" - ], - "OF7lOgYF": [ - "BBL/Generic PETG HF", - "OrcaFilamentLibrary/Generic PETG HF", - "Prusa/Generic PETG HF" - ], - "OF7lwj52": [ - "CoLiDo/CoLiDo PETG" - ], - "OF7nBAd3": [ - "Eryone/Eryone Silk PLA" - ], - "OF7pjCsO": [ - "Flashforge/FusRock PAHT" - ], - "OF7tt7DO": [ - "Cubicon/Cubicon PLA+" - ], - "OF8GnyFU": [ - "Creality/Hyper ABS" - ], - "OF8GtyKJ": [ - "Flashforge/Flashforge TPU-64D" - ], - "OF8Hx3Pi": [ - "Cubicon/Cubicon PETG" - ], - "OF8Jl6NT": [ - "Snapmaker/Snapmaker J1 PET" - ], - "OF8O09RG": [ - "Flashforge/Flashforge HS PLA Burnt Ti" - ], - "OF8QdQwS": [ - "BBL/BETA PLA Silk+" - ], - "OF8Tlg47": [ - "BBL/Generic PPA-GF", - "OrcaFilamentLibrary/Generic PPA-GF", - "Tiertime/Generic PPA-GF" - ], - "OF8aFWfQ": [ - "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" - ], - "OF8dCquh": [ - "Snapmaker/Snapmaker J1 ABS Benchy" - ], - "OF8eaY7j": [ - "Creality/Generic PA612-CF" - ], - "OF8jh0Lk": [ - "OrcaFilamentLibrary/FilAr PLA-mate Marron" - ], - "OF8kJys9": [ - "Eryone/Eryone PETG" - ], - "OF8tPByX": [ - "BBL/Generic PPA-CF", - "OrcaFilamentLibrary/Generic PPA-CF", - "Tiertime/Generic PPA-CF" - ], - "OF8wE5l7": [ - "Artillery/Artillery PETG Basic" - ], - "OF99UMPq": [ - "BBL/COEX ABS", - "OrcaFilamentLibrary/COEX ABS" - ], - "OF99vXPs": [], - "OF9EHUKK": [ - "Qidi/QIDI TPU-GF" - ], - "OF9HCdyQ": [ - "Afinia/Afinia PLA" - ], - "OF9OlTWH": [ - "BBL/Bambu PLA Marble", - "OrcaFilamentLibrary/Bambu PLA Marble" - ], - "OF9PELEb": [ - "Qidi/QIDI UltraPA-CF25" - ], - "OF9UJOGF": [ - "Anycubic/Anycubic PETG-CF" - ], - "OF9cAwMK": [ - "Flashforge/Flashforge PLA-CF" - ], - "OF9emAI9": [ - "Ratrig/RatRig PunkFil PETG" - ], - "OFA026vt": [ - "OrcaArena/Arena PA-CF" - ], - "OFAC7Wyu": [ - "Artillery/Artillery PLA Matte" - ], - "OFAIBCLJ": [ - "Elegoo/Generic ABS-CF" - ], - "OFAIrQXu": [ - "Creality/Creality Hyper PLA" - ], - "OFANFm4x": [ - "Qidi/QIDI PLA Rapido Metal" - ], - "OFAO9A7J": [ - "Sovol/Sovol Zero PLA Silk HS Nozzle" - ], - "OFAZllAN": [ - "Artillery/Artillery PLA-CF" - ], - "OFAc0Pr3": [ - "BBL/Fiberon PET-CF17" - ], - "OFAcJkl1": [ - "BBL/addnorth PETG-CF Rigid X" - ], - "OFAebKg8": [ - "Flashforge/Flashforge PLA Metal" - ], - "OFAnyRUI": [ - "BBL/Bambu Support For PLA", - "OrcaFilamentLibrary/Bambu Support For PLA" - ], - "OFAt6ec0": [ - "OrcaFilamentLibrary/FilAr PLA Marron Oxido" - ], - "OFB5SmWk": [ - "OrcaFilamentLibrary/Valment PLA Galaxy" - ], - "OFBBgw7B": [ - "WonderMaker/WonderMaker PLA Wood" - ], - "OFBJAdLw": [ - "LH/LHS PCTG" - ], - "OFBLktDy": [ - "Creality/Soleyin Basic PETG" - ], - "OFBSW57R": [ - "BBL/Bambu PLA Aero", - "OrcaFilamentLibrary/Bambu PLA Aero" - ], - "OFBUIlZ7": [ - "Elegoo/Elegoo PLA+", - "OrcaFilamentLibrary/Elegoo PLA+" - ], - "OFBlFMVp": [ - "Snapmaker/Snapmaker Dual PETG" - ], - "OFBoSWxb": [ - "BBL/PolyLite PLA Luminous", - "Snapmaker/PolyLite PLA Luminous" - ], - "OFBsbMMF": [ - "BBL/addnorth PA-CF Adura X" - ], - "OFBw6eEG": [ - "BBL/Overture Matte PLA", - "OrcaFilamentLibrary/Overture Matte PLA" - ], - "OFC1PzXz": [ - "Creality/Hyper Luminous" - ], - "OFC5f4Ay": [ - "RH3D/Generic PCCF" - ], - "OFC78WGQ": [ - "BBL/Panchroma PLA Starlight", - "OrcaFilamentLibrary/Panchroma PLA Starlight", - "Snapmaker/Panchroma PLA Starlight" - ], - "OFCD8qiU": [ - "BBL/Generic EVA", - "OrcaFilamentLibrary/Generic EVA", - "Tiertime/Generic EVA" - ], - "OFCIUsWh": [ - "BBL/Panchroma PLA Translucent", - "OrcaFilamentLibrary/Panchroma PLA Translucent", - "Snapmaker/Panchroma PLA Translucent" - ], - "OFCJpR7a": [ - "Creality/HP Ultra PLA" - ], - "OFCZsqXg": [ - "Creality/Hyper PLA" - ], - "OFCccVrQ": [ - "OrcaFilamentLibrary/PolyTerra Dual PLA", - "Snapmaker/PolyTerra Dual PLA" - ], - "OFCidU7j": [ - "OrcaFilamentLibrary/DREMC ABS-GF" - ], - "OFCjG251": [ - "OrcaFilamentLibrary/FilAr PLA-mate Verde" - ], - "OFCn83wF": [ - "Flashforge/FusRock S-PAHT" - ], - "OFCnywiC": [ - "Tiertime/Tiertime PET-CF" - ], - "OFCoRobU": [ - "OrcaFilamentLibrary/Elas ASA" - ], - "OFCp3Bgo": [ - "Anycubic/Anycubic PLA SE" - ], - "OFCuaCer": [ - "Volumic/Désactivé" - ], - "OFD21ije": [ - "Cubicon/Cubicon PA-CF" - ], - "OFD8loeT": [ - "re3D/re3D rPETG" - ], - "OFD9taow": [ - "FlyingBear/FlyingBear PLA Hyper" - ], - "OFDETOM6": [ - "Creality/eSUN PLA-Matte", - "OrcaFilamentLibrary/eSUN PLA-Matte" - ], - "OFDGigEI": [ - "BBL/Bambu PLA Dynamic", - "OrcaFilamentLibrary/Bambu PLA Dynamic" - ], - "OFDIrhbu": [ - "Qidi/QIDI PC/ABS-FR" - ], - "OFDJU6R3": [ - "Afinia/Afinia TPU" - ], - "OFDKIKyw": [ - "Snapmaker/Snapmaker Dual PVA" - ], - "OFDKgoqx": [ - "Flashforge/Flashforge PLA" - ], - "OFDRpXLZ": [ - "FlyingBear/Other PETG", - "InfiMech/Other PETG" - ], - "OFDSrzZ8": [ - "Anker/Generic PLA", - "Anycubic/Generic PLA", - "Artillery/Generic PLA", - "BBL/Generic PLA", - "Blocks/Generic PLA", - "CONSTRUCT3D/Generic PLA", - "Chuanying/Generic PLA", - "Co Print/Generic PLA", - "CoLiDo/Generic PLA", - "Comgrow/Generic PLA", - "Creality/Generic PLA", - "Custom/Generic PLA", - "DeltaMaker/Generic PLA", - "Dremel/Generic PLA", - "Elegoo/Generic PLA", - "FLSun/Generic PLA", - "Flashforge/Generic PLA", - "FlyingBear/Generic PLA", - "Ginger Additive/Generic PLA", - "InfiMech/Generic PLA", - "LONGER/Generic PLA", - "Lulzbot/Generic PLA", - "OrcaArena/Generic PLA", - "OrcaFilamentLibrary/Generic PLA", - "Peopoly/Generic PLA", - "Phrozen/Generic PLA", - "Prusa/Generic PLA", - "Qidi/Generic PLA", - "RH3D/Generic PLA", - "Ratrig/Generic PLA", - "SecKit/Generic PLA", - "Sovol/Generic PLA", - "Tiertime/Generic PLA", - "Vzbot/Generic PLA", - "Z-Bolt/Generic PLA" - ], - "OFDdEaoL": [ - "re3D/re3D PLA" - ], - "OFDe8uyM": [ - "OrcaFilamentLibrary/Valment PLA" - ], - "OFDgQaca": [ - "FlyingBear/FlyingBear PETG" - ], - "OFDpW3J8": [ - "OrcaFilamentLibrary/FILL3D PLA Basic" - ], - "OFDtop41": [ - "Creality/Generic Support for PA" - ], - "OFDu1qE7": [ - "Flashforge/FusRock PET-CF" - ], - "OFDvXujf": [ - "Anker/Generic PVA", - "Anycubic/Generic PVA", - "BBL/Generic PVA", - "Blocks/Generic PVA", - "Chuanying/Generic PVA", - "Creality/Generic PVA", - "Custom/Generic PVA", - "FLSun/Generic PVA", - "Flashforge/Generic PVA", - "OrcaArena/Generic PVA", - "OrcaFilamentLibrary/Generic PVA", - "Prusa/Generic PVA", - "Qidi/Generic PVA", - "Ratrig/Generic PVA", - "SecKit/Generic PVA", - "Tiertime/Generic PVA", - "Vzbot/Generic PVA" - ], - "OFDvqJ6n": [ - "OrcaFilamentLibrary/Overture ABS Basic" - ], - "OFDwBwO5": [ - "Prusa/Generic PVA HF" - ], - "OFDxfPgH": [ - "BBL/Bambu PLA Sparkle", - "OrcaFilamentLibrary/Bambu PLA Sparkle" - ], - "OFDxxTpW": [ - "Flashforge/Flashforge HS PETG" - ], - "OFE0NFRh": [ - "BBL/COEX TPU 60A", - "OrcaFilamentLibrary/COEX TPU 60A" - ], - "OFEGNJD4": [ - "BBL/Bambu PLA Silk", - "OrcaFilamentLibrary/Bambu PLA Silk" - ], - "OFEOnBj6": [ - "Snapmaker/Snapmaker PLA Lite" - ], - "OFEWYR89": [ - "Anker/Generic PLA+", - "Qidi/Generic PLA+" - ], - "OFEZ449N": [ - "OrcaFilamentLibrary/FilAr PLA-mate Uva" - ], - "OFEZpel7": [ - "Volumic/PPS Carbone (Performance)" - ], - "OFEabreg": [ - "Anycubic/Fiberon PA6-CF20", - "BBL/Fiberon PA6-CF20", - "Snapmaker/Fiberon PA6-CF20" - ], - "OFEbIx49": [ - "WonderMaker/WonderMaker PLA Marble" - ], - "OFEhuUNq": [], - "OFEj7sca": [ - "Cubicon/Cubicon PC" - ], - "OFEjbwqG": [ - "BBL/PolyTerra PLA+", - "Snapmaker/PolyTerra PLA+" - ], - "OFEkPBwx": [ - "BBL/Bambu PLA Glow", - "OrcaFilamentLibrary/Bambu PLA Glow" - ], - "OFEmsric": [ - "Snapmaker/Snapmaker PA-CF" - ], - "OFEnbt6D": [ - "Peopoly/Peopoly Lancer PLA-C" - ], - "OFEswT5W": [ - "BBL/Bambu PLA-CF", - "OrcaFilamentLibrary/Bambu PLA-CF" - ], - "OFEvEfw5": [ - "Flashforge/Flashforge PA" - ], - "OFEwRwmL": [ - "Cubicon/Cubicon PLA" - ], - "OFF3cuzT": [ - "Creality/Generic TPU 64D" - ], - "OFF5o7b2": [ - "BBL/BETA PLA Youth" - ], - "OFF9OKoY": [ - "BBL/PolyLite PLA Pro", - "OrcaFilamentLibrary/PolyLite PLA Pro", - "Snapmaker/PolyLite PLA Pro" - ], - "OFF9cgY5": [ - "Snapmaker/Snapmaker PLA Matte" - ], - "OFFAWVf0": [ - "Qidi/QIDI PC-ABS-FR" - ], - "OFFFg2Pf": [ - "Flashforge/Flashforge ASA Basic" - ], - "OFFNYwWR": [ - "BBL/Bambu PA-CF", - "OrcaFilamentLibrary/Bambu PA-CF" - ], - "OFFP4ORR": [ - "Creality/Creality Hyper ABS" - ], - "OFFX1DRD": [ - "FlyingBear/FlyingBear PC" - ], - "OFFZ458u": [ - "Snapmaker/Fiberon PA612-ESD" - ], - "OFFbQscs": [ - "Creality/eSUN PETG-Basic" - ], - "OFFbSnCD": [ - "BBL/Bambu PLA Translucent" - ], - "OFFfJ09N": [ - "BBL/BETA PETG Glow" - ], - "OFFkCLBl": [ - "BBL/Panchroma PLA Galaxy", - "OrcaFilamentLibrary/Panchroma PLA Galaxy", - "Snapmaker/Panchroma PLA Galaxy" - ], - "OFFvzqcd": [ - "BBL/Bambu PETG Basic", - "OrcaFilamentLibrary/Bambu PETG Basic" - ], - "OFFwJWea": [ - "Anycubic/Anycubic PLA Silk" - ], - "OFG0kOKX": [ - "Volumic/Volumic PETG Ultra" - ], - "OFG2RkhN": [ - "Creality/CR-TPU" - ], - "OFG4do34": [ - "Qidi/Qidi ASA-Aero" - ], - "OFGJ1nxs": [ - "FlyingBear/Other PLA", - "InfiMech/Other PLA" - ], - "OFGVwfK0": [ - "OrcaFilamentLibrary/FilAr PLA-mate Gris" - ], - "OFGVxj2A": [ - "BBL/BETA PLA Wood" - ], - "OFGc9l16": [ - "BBL/BETA PLA Glow" - ], - "OFGcLA5R": [ - "OrcaFilamentLibrary/FilAr PLA-mate Beige" - ], - "OFGcMkEB": [ - "Creality/HP-TPU" - ], - "OFGdP6Na": [ - "Volumic/Volumic PVA" - ], - "OFGkyftV": [ - "BBL/Overture Silk PLA", - "OrcaFilamentLibrary/Overture Silk PLA" - ], - "OFGwT5Av": [ - "Creality/Creality Hyper PLA-CF" - ], - "OFGwZmgS": [ - "Creality/CR-ABS" - ], - "OFGxC8gB": [ - "Creality/CR-Wood" - ], - "OFGxuI0n": [ - "Flashforge/Flashforge PA-CF" - ], - "OFH2nN08": [ - "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" - ], - "OFH57ibH": [ - "Snapmaker/Polymaker Silk PLA Family" - ], - "OFH7b12v": [ - "Creality/Generic PAHT-CF" - ], - "OFHAccHz": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" - ], - "OFHHwrd1": [ - "BBL/addnorth PETG Base" - ], - "OFHWSM21": [ - "BBL/Fiberon PET-CF", - "OrcaFilamentLibrary/Fiberon PET-CF" - ], - "OFHa48An": [ - "BBL/Bambu PET-CF", - "OrcaFilamentLibrary/Bambu PET-CF" - ], - "OFHaYaB1": [ - "Creality/eSUN PET-Basic" - ], - "OFHf2lKK": [ - "FlyingBear/FlyingBear TPU Basic" - ], - "OFHfzQXo": [ - "OrcaFilamentLibrary/Eolas Prints PLA Transition" - ], - "OFHknN4v": [ - "Anycubic/Polymaker PLA Pro Metallic", - "Snapmaker/Polymaker PLA Pro Metallic" - ], - "OFHmPYRy": [ - "BBL/SUNLU PLA+ 2.0", - "Flashforge/SUNLU PLA+ 2.0", - "OrcaFilamentLibrary/SUNLU PLA+ 2.0" - ], - "OFI2MKy7": [ - "BBL/BETA PEBA 90A" - ], - "OFI6WZpn": [ - "OrcaArena/Arena Support W" - ], - "OFIBXa0k": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rojo" - ], - "OFIBbYO5": [ - "BBL/Bambu TPU for AMS" - ], - "OFIE3vOf": [ - "Anycubic/Anycubic PLA Matte" - ], - "OFIK2H3G": [ - "Flashforge/Flashforge HS PLA" - ], - "OFIKZxPF": [ - "Creality/Generic PLA Wood" - ], - "OFIPjqHt": [ - "OrcaArena/Arena Support G" - ], - "OFIRUqWi": [ - "Creality/eSUN PLA-Silk" - ], - "OFIVWJPm": [ - "InfiMech/InfiMech TPU" - ], - "OFIWMSGX": [ - "Qidi/HATCHBOX PETG" - ], - "OFIZMQwM": [ - "LH/LHS TPU" - ], - "OFIamQnD": [ - "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" - ], - "OFIegjmD": [ - "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" - ], - "OFIfnzxC": [ - "BBL/Bambu Support For PLA/PETG", - "OrcaFilamentLibrary/Bambu Support For PLA/PETG" - ], - "OFIgbDHq": [ - "Anycubic/Anycubic PLA Luminous" - ], - "OFIxOuOu": [ - "BBL/PolyLite PLA Starlight", - "Snapmaker/PolyLite PLA Starlight" - ], - "OFJ3F2jm": [ - "Flashforge/Flashforge PLA Basic" - ], - "OFJ3HRsR": [ - "OrcaArena/Arena ABS" - ], - "OFJHBEGD": [], - "OFJJ0Ar3": [ - "Flashforge/Flashforge PLA Galaxy" - ], - "OFJNeELv": [ - "OrcaFilamentLibrary/FILL3D PA" - ], - "OFJOFnOZ": [ - "BBL/AliZ PETG-CF", - "OrcaFilamentLibrary/AliZ PETG-CF" - ], - "OFJQDUk3": [ - "OrcaFilamentLibrary/FilAr PETG Cristal" - ], - "OFJS560n": [], - "OFJWKoYG": [ - "iQ/Material4Print ABS Natur P1" - ], - "OFJYpVAQ": [ - "Flashforge/Generic TPU-90A" - ], - "OFJgijky": [ - "BBL/PolyLite CosPLA", - "Snapmaker/PolyLite CosPLA" - ], - "OFJhT2fd": [ - "Snapmaker/Snapmaker Dual ABS" - ], - "OFJnEaCp": [ - "BBL/BETA PLA Transparent" - ], - "OFJrvXth": [ - "Snapmaker/Snapmaker ABS Benchy" - ], - "OFJs1ToM": [ - "BBL/COEX NYLEX UNFILLED " - ], - "OFJu1XwK": [ - "OrcaFilamentLibrary/NIT PETG" - ], - "OFJxSqO4": [ - "Wanhao France/YUMI PLA Direct Drive" - ], - "OFK7830e": [ - "BBL/BETA TPU 95A" - ], - "OFK8XHPn": [ - "Qidi/Overture ABS" - ], - "OFKIQO2W": [ - "Qidi/QIDI PLA Rapido" - ], - "OFKKajh6": [ - "OrcaFilamentLibrary/FilAr PLA Gris Plata" - ], - "OFKTGKJU": [ - "Flashforge/FusRock PET" - ], - "OFKTSiYF": [ - "OrcaFilamentLibrary/FilAr PLA Blanco Calido" - ], - "OFKUEXPA": [ - "Snapmaker/Snapmaker Dual ASA" - ], - "OFKW5hEW": [ - "Flashforge/FusRock PAHT-CF" - ], - "OFKWWgyp": [ - "OrcaFilamentLibrary/FilAr PLA Carpincho" - ], - "OFKYBAWe": [ - "BBL/BETA PLA Marble" - ], - "OFKZ9skj": [ - "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" - ], - "OFKbdiiJ": [ - "Creality/PolySonic PLA Pro" - ], - "OFKfJTwL": [ - "Qidi/QIDI PET-CF" - ], - "OFKgmsqE": [ - "Qidi/QIDI PAHT-CF" - ], - "OFKhMPeX": [ - "BBL/Bambu PC", - "OrcaFilamentLibrary/Bambu PC" - ], - "OFKiSMWR": [ - "BBL/Panchroma PLA Marble", - "OrcaFilamentLibrary/Panchroma PLA Marble", - "Snapmaker/Panchroma PLA Marble" - ], - "OFKyNkQz": [ - "BBL/BETA PETG UV Color Change" - ], - "OFL9aRjN": [ - "Snapmaker/Snapmaker PETG HF" - ], - "OFLAXKqP": [ - "WonderMaker/WonderMaker TPU 95A" - ], - "OFLC1oRH": [ - "Flashforge/Flashforge PPA-CF" - ], - "OFLJ8S6I": [ - "BBL/SUNLU Wood PLA", - "Flashforge/SUNLU Wood PLA", - "OrcaFilamentLibrary/SUNLU Wood PLA" - ], - "OFLNgV3C": [], - "OFLOf6Sc": [ - "Tiertime/Tiertime TPU 95A" - ], - "OFLPAxz3": [ - "Anker/Generic ASA", - "Anycubic/Generic ASA", - "Artillery/Generic ASA", - "BBL/Generic ASA", - "Blocks/Generic ASA", - "Chuanying/Generic ASA", - "Creality/Generic ASA", - "Custom/Generic ASA", - "Elegoo/Generic ASA", - "FLSun/Generic ASA", - "Flashforge/Generic ASA", - "OrcaArena/Generic ASA", - "OrcaFilamentLibrary/Generic ASA", - "Prusa/Generic ASA", - "Qidi/Generic ASA", - "RH3D/Generic ASA", - "Ratrig/Generic ASA", - "SecKit/Generic ASA", - "Tiertime/Generic ASA", - "Vzbot/Generic ASA" - ], - "OFLTYJW0": [ - "Snapmaker/Snapmaker PLA Translucent" - ], - "OFLXvuMr": [ - "Elegoo/Elegoo Rapid PETG", - "OrcaFilamentLibrary/Elegoo Rapid PETG" - ], - "OFLYDngx": [ - "Qidi/Bambu PETG" - ], - "OFLakOUI": [ - "Anker/Generic PC", - "Anycubic/Generic PC", - "BBL/Generic PC", - "Blocks/Generic PC", - "Creality/Generic PC", - "Custom/Generic PC", - "Elegoo/Generic PC", - "FLSun/Generic PC", - "FlyingBear/Generic PC", - "InfiMech/Generic PC", - "OrcaArena/Generic PC", - "OrcaFilamentLibrary/Generic PC", - "Prusa/Generic PC", - "Qidi/Generic PC", - "Ratrig/Generic PC", - "SecKit/Generic PC", - "Sovol/Generic PC", - "Tiertime/Generic PC", - "Vzbot/Generic PC" - ], - "OFLbXwoL": [ - "Artillery/Artillery PLA Silk" - ], - "OFLbdkrE": [ - "Snapmaker/Snapmaker J1 PLA Eco" - ], - "OFLcd093": [ - "Elegoo/Elegoo PETG", - "OrcaFilamentLibrary/Elegoo PETG" - ], - "OFLfywkp": [ - "Afinia/Afinia ABS+" - ], - "OFLgwqp2": [ - "Creality/Hyper PETG-GF" - ], - "OFLjDYxH": [ - "BBL/addnorth PLA X-PLA High Speed" - ], - "OFLqgSuX": [ - "BBL/BETA PLA-CF" - ], - "OFLzx3J4": [ - "Creality/Hyper Marble" - ], - "OFM0xjBG": [ - "Creality/CR-PLA Matte" - ], - "OFM4iJlv": [ - "Creality/Generic PA12-CF" - ], - "OFM91vZs": [ - "BBL/Overture ASA", - "OrcaFilamentLibrary/Overture ASA" - ], - "OFMDHOcT": [ - "Qidi/QIDI TPU-Aero" - ], - "OFMK5gVo": [ - "WonderMaker/WonderMaker PLA Basic" - ], - "OFML2aVd": [ - "Anycubic/Anycubic TPU 95A" - ], - "OFMSvS8z": [ - "Artillery/Artillery PA" - ], - "OFMTK0UC": [ - "BBL/Bambu Support For PA/PET", - "OrcaFilamentLibrary/Bambu Support For PA/PET" - ], - "OFMUWNkp": [ - "BBL/SUNLU PLA+", - "Flashforge/SUNLU PLA+", - "OrcaFilamentLibrary/SUNLU PLA+" - ], - "OFMZvH0z": [ - "BBL/Overture Rock PLA", - "OrcaFilamentLibrary/Overture Rock PLA" - ], - "OFMjtqTC": [ - "BBL/Bambu PLA Wood", - "OrcaFilamentLibrary/Bambu PLA Wood" - ], - "OFMkAW6r": [ - "Flashforge/Flashforge PLA Color Change" - ], - "OFMpxamb": [ - "Flashforge/Flashforge PETG" - ], - "OFMsDGbs": [ - "Anycubic/Anycubic TPU" - ], - "OFMuXBmO": [ - "OrcaFilamentLibrary/Elas PLA Basic" - ], - "OFMzRg65": [ - "BBL/BETA PLA PRO" - ], - "OFN8QBhu": [ - "BBL/addnorth PLA Wood" - ], - "OFN9fefN": [ - "Cubicon/Cubicon ABS-A100" - ], - "OFNBlAPT": [ - "OrcaArena/Arena PETG Basic" - ], - "OFNGTH3w": [ - "Tiertime/Tiertime PLA" - ], - "OFNQKF0M": [ - "Tiertime/Tiertime ABS" - ], - "OFNSYu5h": [ - "Volumic/Volumic PP Ultra (Performance)" - ], - "OFNU9YIW": [ - "OrcaFilamentLibrary/FilAr PETG Azul Boreal" - ], - "OFNemJM6": [ - "OrcaFilamentLibrary/FilAr PLA Cobre" - ], - "OFNjku08": [ - "CONSTRUCT3D/Generic High Flow PETG" - ], - "OFNk8AvA": [ - "BBL/BETA PETG Gradient" - ], - "OFNk8bxk": [ - "BBL/Bambu PA6-GF", - "OrcaFilamentLibrary/Bambu PA6-GF" - ], - "OFNstOna": [ - "Eryone/Eryone PETG-CF" - ], - "OFNvBIL0": [ - "Creality/Hyper PPA-CF" - ], - "OFO1GEq6": [ - "BBL/Panchroma PLA Neon", - "OrcaFilamentLibrary/Panchroma PLA Neon", - "Snapmaker/Panchroma PLA Neon" - ], - "OFO5djrM": [ - "Chuanying/Generic PETG-CF10", - "Flashforge/Generic PETG-CF10" - ], - "OFO6GMJ3": [ - "BBL/addnorth TPU EasyFlex" - ], - "OFOABq7t": [ - "BBL/AliZ PETG-Metal", - "OrcaFilamentLibrary/AliZ PETG-Metal" - ], - "OFOAdMCB": [ - "OrcaArena/Arena PLA Metal" - ], - "OFOHOf2F": [ - "Creality/eSUN PLA-HS" - ], - "OFOJPAAS": [ - "iQ/VXL90 TiQ2 P2" - ], - "OFOPU1xv": [ - "Snapmaker/Snapmaker PLA Full Spectrum" - ], - "OFOQCfVa": [ - "BBL/addnorth PLA Premium Silk" - ], - "OFObG16Q": [ - "InfiMech/InfiMech PLA Basic" - ], - "OFObyktP": [ - "Tiertime/Tiertime PETG" - ], - "OFOiJfLM": [ - "OrcaFilamentLibrary/FILL3D PETG CF" - ], - "OFOnSNt3": [ - "Artillery/Artillery PETG-CF" - ], - "OFOsHDnB": [ - "Elegoo/Elegoo PETG PRO", - "OrcaFilamentLibrary/Elegoo PETG PRO" - ], - "OFOuEEvv": [ - "Qidi/QIDI ABS Rapido 0.2 nozzle" - ], - "OFOvv91M": [ - "BBL/PolyLite ABS", - "OrcaFilamentLibrary/PolyLite ABS", - "Qidi/PolyLite ABS" - ], - "OFOwQuZM": [ - "Snapmaker/Snapmaker PETG-CF" - ], - "OFOzwywz": [ - "Eryone/Eryone ABS" - ], - "OFP26zNb": [ - "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" - ], - "OFPHLnoe": [ - "Creality/HP-ASA" - ], - "OFPWPlSC": [ - "OrcaFilamentLibrary/FILL3D PP" - ], - "OFPYDWgC": [ - "Peopoly/Peopoly Lancer PET-CF" - ], - "OFPbyOSk": [ - "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" - ], - "OFPc4zVY": [ - "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" - ], - "OFPkCJKE": [ - "BBL/Panchroma PLA Satin", - "Creality/Panchroma PLA Satin", - "OrcaFilamentLibrary/Panchroma PLA Satin", - "Snapmaker/Panchroma PLA Satin" - ], - "OFPklMI1": [ - "BBL/Generic PE", - "OrcaFilamentLibrary/Generic PE", - "Tiertime/Generic PE" - ], - "OFPoyiFs": [ - "BBL/Polymaker HT-PLA", - "OrcaFilamentLibrary/Polymaker HT-PLA", - "Snapmaker/Polymaker HT-PLA" - ], - "OFPqX3x2": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" - ], - "OFQ1KzO8": [ - "Snapmaker/Snapmaker J1 PLA Silk" - ], - "OFQ1zgm3": [ - "Eryone/Eryone ABS-CF" - ], - "OFQ3e56w": [ - "BBL/Bambu PLA Galaxy", - "OrcaFilamentLibrary/Bambu PLA Galaxy" - ], - "OFQ40XeN": [ - "Qidi/QIDI PETG Tough" - ], - "OFQ5TxZ2": [ - "BBL/addnorth PVDF Adamant S1" - ], - "OFQEGL7z": [ - "FlyingBear/FlyingBear PA-CF" - ], - "OFQGvU2G": [ - "OrcaArena/Arena TPU 95A" - ], - "OFQHiNJs": [ - "BBL/Bambu Support G", - "OrcaFilamentLibrary/Bambu Support G" - ], - "OFQLcbps": [ - "Anker/Generic PA-CF", - "Anycubic/Generic PA-CF", - "BBL/Generic PA-CF", - "Blocks/Generic PA-CF", - "Creality/Generic PA-CF", - "Custom/Generic PA-CF", - "FLSun/Generic PA-CF", - "FlyingBear/Generic PA-CF", - "InfiMech/Generic PA-CF", - "OrcaArena/Generic PA-CF", - "OrcaFilamentLibrary/Generic PA-CF", - "Prusa/Generic PA-CF", - "Qidi/Generic PA-CF", - "Ratrig/Generic PA-CF", - "SecKit/Generic PA-CF", - "Tiertime/Generic PA-CF", - "Vzbot/Generic PA-CF" - ], - "OFQMTRc8": [ - "Snapmaker/Snapmaker J1 PETG" - ], - "OFQMsFfF": [ - "Qidi/QIDI ABS-GF10" - ], - "OFQWIKbV": [ - "OrcaFilamentLibrary/FilAr PLA Titanio" - ], - "OFQYaiGg": [ - "Snapmaker/Snapmaker PET" - ], - "OFQbjX3s": [ - "OrcaFilamentLibrary/FILL3D PETG" - ], - "OFQdaVZS": [ - "Creality/Generic PET-CF", - "Elegoo/Generic PET-CF" - ], - "OFQe7sAx": [ - "Anycubic/Anycubic PA6-CF" - ], - "OFQyyO0l": [ - "Flashforge/Polymaker CoPA" - ], - "OFR0gODA": [ - "SeeMeCNC/SeeMeCNC ABS" - ], - "OFR1XLMN": [ - "Qidi/QIDI TPU 95A-HF" - ], - "OFRFhdqy": [ - "BBL/addnorth PLA Textura" - ], - "OFRJ325z": [ - "LH/LHS PETG" - ], - "OFRhBryT": [ - "Cubicon/Cubicon PLAi21" - ], - "OFRhCTUg": [ - "Anycubic/Anycubic PET-CF" - ], - "OFRiFnfQ": [ - "OrcaFilamentLibrary/Eolas Prints PETG Transition" - ], - "OFRiYgMK": [ - "BBL/Panchroma PLA Celestial", - "OrcaFilamentLibrary/Panchroma PLA Celestial", - "Snapmaker/Panchroma PLA Celestial" - ], - "OFRkjhxK": [ - "Volumic/Volumic PVA-BVOH (Performance)" - ], - "OFRmGKVX": [ - "Cubicon/Cubicon PLA+" - ], - "OFRooa0F": [ - "Snapmaker/Snapmaker Dual PA-CF" - ], - "OFRpAZ1P": [ - "DeltaMaker/DeltaMaker Brand PLA" - ], - "OFRyOsZj": [ - "re3D/re3D PLA" - ], - "OFRzR5mi": [ - "OrcaFilamentLibrary/eSUN ePLA-LW" - ], - "OFS2tn6G": [ - "BBL/Fiberon PA612-CF", - "OrcaFilamentLibrary/Fiberon PA612-CF" - ], - "OFS4jbj3": [ - "Eryone/Eryone PA" - ], - "OFS8lTQt": [ - "BBL/Panchroma PLA Silk", - "OrcaFilamentLibrary/Panchroma PLA Silk", - "Snapmaker/Panchroma PLA Silk" - ], - "OFSDfduA": [ - "Flashforge/Flashforge TPU 65D" - ], - "OFSa39yP": [ - "Snapmaker/Snapmaker J1 PLA" - ], - "OFSbGfsz": [ - "OrcaArena/Arena PLA Basic" - ], - "OFSfm8iP": [ - "BBL/BETA PLA Heat Color Change" - ], - "OFSiCZP3": [ - "BBL/BETA PETG-GF" - ], - "OFSqIcJC": [ - "Flashforge/Flashforge TPU 95A" - ], - "OFSw6Mor": [ - "BBL/addnorth PA Adura FDA" - ], - "OFSwbBWS": [], - "OFT2jon4": [ - "Qidi/QIDI ABS Rapido" - ], - "OFTGHyNC": [ - "OrcaFilamentLibrary/Bambu PLA Impact" - ], - "OFTHDCqA": [ - "BBL/Bambu PLA Pure" - ], - "OFTOPcx0": [ - "OrcaFilamentLibrary/Eolas Prints TPU Transition" - ], - "OFTRZ8Y4": [ - "BBL/Bambu PETG-CF", - "OrcaFilamentLibrary/Bambu PETG-CF" - ], - "OFTSXxzE": [ - "Flashforge/Flashforge PPS-CF" - ], - "OFTXduCM": [ - "Creality/eSUN ABS+" - ], - "OFTcE0nA": [ - "OrcaFilamentLibrary/eSUN PLA-Basic" - ], - "OFTdauIq": [ - "Volumic/Volumic PCTG Ultra (Performance)" - ], - "OFTkj6DR": [ - "Anycubic/Anycubic PVA" - ], - "OFTlRzpe": [ - "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" - ], - "OFTnWzBs": [ - "Creality/Hyper PLA-CF" - ], - "OFTs8peJ": [ - "Snapmaker/Snapmaker Dual TPE" - ], - "OFTsHNQi": [ - "Qidi/QIDI ASA" - ], - "OFU1zPxE": [ - "Elegoo/Elegoo PLA Galaxy", - "OrcaFilamentLibrary/Elegoo PLA Galaxy" - ], - "OFU3QXL7": [ - "re3D/re3D PC" - ], - "OFU5JPDy": [ - "BBL/addnorth PETG PRO Matte" - ], - "OFU7CKZt": [ - "Volumic/Volumic ASA Ultra (Performance)" - ], - "OFUF7oA4": [ - "Creality/Hyper PC" - ], - "OFUH1aee": [ - "Volumic/Volumic FLEX93 Ultra (Performance)" - ], - "OFUIfGoh": [ - "Snapmaker/Snapmaker Dual PET" - ], - "OFUYCqtB": [ - "InfiMech/InfiMech PLA" - ], - "OFUaHEO9": [ - "Anycubic/Anycubic PEBA 95A" - ], - "OFUanySo": [ - "BBL/Bambu PLA Silk+", - "OrcaFilamentLibrary/Bambu PLA Silk+" - ], - "OFUmS5z5": [ - "Creality/eSUN ASA+" - ], - "OFUtiVRn": [ - "BBL/addnorth PETG ESD" - ], - "OFUyDDNv": [ - "Elegoo/Elegoo PC", - "OrcaFilamentLibrary/Elegoo PC" - ], - "OFV5Q7j2": [ - "Snapmaker/Snapmaker J1 TPE" - ], - "OFV5c8hG": [ - "Flashforge/Flashforge PLA Sparkle" - ], - "OFV5tNw6": [ - "Elegoo/Elegoo PET-CF", - "OrcaFilamentLibrary/Elegoo PET-CF" - ], - "OFV5wEMe": [ - "Afinia/Afinia ABS" - ], - "OFV8Mxqx": [], - "OFVBlUFH": [], - "OFVCkX5w": [ - "BBL/Bambu TPU 95A", - "OrcaFilamentLibrary/Bambu TPU 95A" - ], - "OFVDWuxl": [ - "BBL/addnorth PLA HT-PLA PRO Matte" - ], - "OFVHMFJX": [ - "Qidi/QIDI PETG Tough 0.2 nozzle" - ], - "OFVptRxp": [ - "BBL/COEX TPE 30D", - "OrcaFilamentLibrary/COEX TPE 30D" - ], - "OFVtIasg": [ - "Eryone/Eryone ASA" - ], - "OFW29a9R": [ - "BBL/PolyTerra PLA", - "OrcaArena/PolyTerra PLA", - "OrcaFilamentLibrary/PolyTerra PLA", - "Snapmaker/PolyTerra PLA" - ], - "OFW5FqkL": [ - "Qidi/QIDI PLA Rapido Silk" - ], - "OFW8M3CY": [ - "BBL/BETA PLA Chameleon" - ], - "OFW8lqnb": [ - "Snapmaker/Snapmaker PETG Translucent" - ], - "OFWDe7YH": [ - "Qidi/QIDI UltraPA" - ], - "OFWK0Y9A": [ - "BBL/addnorth PA Adura" - ], - "OFWRITFw": [ - "Prusa/Prusament rPLA" - ], - "OFWTAEjH": [ - "Snapmaker/Snapmaker TPE" - ], - "OFWTRJ1K": [ - "OrcaFilamentLibrary/FilAr PLA Bronce" - ], - "OFWXCbVF": [ - "Flashforge/Flashforge PC" - ], - "OFWYtgCa": [ - "Elegoo/Elegoo PLA Wood", - "OrcaFilamentLibrary/Elegoo PLA Wood" - ], - "OFWa0NiB": [ - "Volumic/Volumic NYLON Ultra" - ], - "OFWao3Ic": [ - "Creality/Ender-PLA" - ], - "OFWbdGsC": [ - "Anker/Generic PLA-CF", - "Anycubic/Generic PLA-CF", - "Artillery/Generic PLA-CF", - "BBL/Generic PLA-CF", - "Blocks/Generic PLA-CF", - "Creality/Generic PLA-CF", - "Custom/Generic PLA-CF", - "FLSun/Generic PLA-CF", - "Flashforge/Generic PLA-CF", - "OrcaArena/Generic PLA-CF", - "OrcaFilamentLibrary/Generic PLA-CF", - "Prusa/Generic PLA-CF", - "Qidi/Generic PLA-CF", - "Ratrig/Generic PLA-CF", - "SecKit/Generic PLA-CF", - "Tiertime/Generic PLA-CF", - "Vzbot/Generic PLA-CF" - ], - "OFWgFOjn": [ - "Snapmaker/Snapmaker PLA Silk" - ], - "OFWwF7K7": [ - "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" - ], - "OFX0etlv": [ - "re3D/re3D PETG" - ], - "OFX0ycRQ": [ - "BBL/Fiberon PA12-CF", - "OrcaFilamentLibrary/Fiberon PA12-CF" - ], - "OFX2zcrM": [ - "Chuanying/Generic PLA-CF10", - "Flashforge/Generic PLA-CF10" - ], - "OFXCBZTA": [ - "OrcaFilamentLibrary/Eolas Prints ABS" - ], - "OFXIbw5D": [ - "BBL/Bambu PLA Matte", - "OrcaFilamentLibrary/Bambu PLA Matte" - ], - "OFXJ9iom": [ - "iQ/Grauts HPP4GF25 P1" - ], - "OFXSvqOX": [ - "Snapmaker/Snapmaker TPU 95A HF" - ], - "OFXTPuqV": [ - "OrcaFilamentLibrary/Elas PETG Basic" - ], - "OFXW4CDh": [ - "Ratrig/Generic PCTG BigNozzle" - ], - "OFXi59OX": [ - "Afinia/Afinia Value ABS" - ], - "OFXiArjA": [ - "Flashforge/Flashforge PETG Pro" - ], - "OFXk1emJ": [ - "Artillery/Artillery PLA Basic" - ], - "OFXkm8q1": [ - "BBL/Generic PP-CF", - "Creality/Generic PP-CF", - "OrcaFilamentLibrary/Generic PP-CF", - "Tiertime/Generic PP-CF" - ], - "OFXmv5p0": [ - "Creality/Generic Speed PLA" - ], - "OFXn3Vd9": [ - "Qidi/QIDI Support For PAHT" - ], - "OFXnToSX": [ - "Creality/Hyper Stardust" - ], - "OFXuGxvQ": [ - "Volumic/Volumic PLA Ultra" - ], - "OFXz7Mwx": [ - "Elegoo/Elegoo PLA Silk", - "OrcaFilamentLibrary/Elegoo PLA Silk" - ], - "OFXzQ4yL": [ - "BBL/Bambu ASA-Aero", - "OrcaFilamentLibrary/Bambu ASA-Aero" - ], - "OFY0F5qA": [ - "Volumic/Volumic PETG Ultra carbone (Performance)" - ], - "OFY3AB7j": [ - "Snapmaker/Snapmaker J1 PLA Matte" - ], - "OFY7jxcS": [ - "Snapmaker/Snapmaker TPU 90A" - ], - "OFY9muEs": [ - "Anker/Generic ABS", - "Anycubic/Generic ABS", - "Artillery/Generic ABS", - "BBL/Generic ABS", - "Blocks/Generic ABS", - "Chuanying/Generic ABS", - "Co Print/Generic ABS", - "CoLiDo/Generic ABS", - "Comgrow/Generic ABS", - "Creality/Generic ABS", - "Custom/Generic ABS", - "Elegoo/Generic ABS", - "FLSun/Generic ABS", - "Flashforge/Generic ABS", - "FlyingBear/Generic ABS", - "InfiMech/Generic ABS", - "Lulzbot/Generic ABS", - "OrcaArena/Generic ABS", - "OrcaFilamentLibrary/Generic ABS", - "Peopoly/Generic ABS", - "Prusa/Generic ABS", - "Qidi/Generic ABS", - "RH3D/Generic ABS", - "Ratrig/Generic ABS", - "SecKit/Generic ABS", - "Sovol/Generic ABS", - "Tiertime/Generic ABS", - "Vzbot/Generic ABS", - "Z-Bolt/Generic ABS" - ], - "OFYE7YZw": [ - "Qidi/Tinmorry PETG-ECO" - ], - "OFYEtXuk": [ - "Snapmaker/Snapmaker J1 PA-CF" - ], - "OFYGbPHX": [ - "OrcaFilamentLibrary/PolyLite Dual PLA", - "Snapmaker/PolyLite Dual PLA" - ], - "OFYGrfHY": [ - "BBL/BETA PETG Fluorescence" - ], - "OFYPdQJh": [ - "Anker/Generic PETG", - "Anycubic/Generic PETG", - "Artillery/Generic PETG", - "BBL/Generic PETG", - "Blocks/Generic PETG", - "CONSTRUCT3D/Generic PETG", - "Chuanying/Generic PETG", - "Co Print/Generic PETG", - "CoLiDo/Generic PETG", - "Comgrow/Generic PETG", - "Creality/Generic PETG", - "Custom/Generic PETG", - "DeltaMaker/Generic PETG", - "Elegoo/Generic PETG", - "FLSun/Generic PETG", - "Flashforge/Generic PETG", - "FlyingBear/Generic PETG", - "Ginger Additive/Generic PETG", - "InfiMech/Generic PETG", - "LONGER/Generic PETG", - "Lulzbot/Generic PETG", - "OrcaArena/Generic PETG", - "OrcaFilamentLibrary/Generic PETG", - "Peopoly/Generic PETG", - "Prusa/Generic PETG", - "Qidi/Generic PETG", - "RH3D/Generic PETG", - "Ratrig/Generic PETG", - "SecKit/Generic PETG", - "Sovol/Generic PETG", - "Tiertime/Generic PETG", - "Vzbot/Generic PETG", - "Z-Bolt/Generic PETG" - ], - "OFYTIMbj": [ - "Flashforge/Flashforge ABS-CF" - ], - "OFYYeMyQ": [ - "Flashforge/Flashforge PETG Basic" - ], - "OFYd5uS3": [], - "OFYezc6s": [ - "FlyingBear/FlyingBear TPU" - ], - "OFYuowge": [ - "FlyingBear/Other ABS", - "InfiMech/Other ABS" - ], - "OFZ0mR5b": [ - "Anycubic/Anycubic PLA-CF" - ], - "OFZ2LuAi": [ - "Wanhao France/YUMI PLA Bowden" - ], - "OFZ3K2cL": [ - "Qidi/QIDI PA6-CF" - ], - "OFZ4QbfK": [ - "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" - ], - "OFZGrQTU": [ - "BBL/addnorth PETG Economy" - ], - "OFZJft47": [ - "BBL/addnorth PLA Economy" - ], - "OFZLtWYs": [ - "Qidi/QIDI ABS-GF25" - ], - "OFZOuWrO": [ - "Qidi/QIDI PPS-CF" - ], - "OFZivHGL": [ - "Snapmaker/Snapmaker Dual PLA" - ], - "OFZqZMuv": [ - "BBL/BETA ASA" - ], - "OFZr862X": [ - "Creality/Generic PLA HF", - "Prusa/Generic PLA HF" - ], - "OFZtOQtl": [ - "Flashforge/Flashforge PA6-CF" - ], - "OFZtkHRq": [ - "Anycubic/Anycubic PC" - ], - "OFaDOaNt": [ - "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" - ], - "OFaDsTE0": [ - "Flashforge/Polymaker S1" - ], - "OFaEesXQ": [ - "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" - ], - "OFaEuvNF": [ - "Anycubic/Anycubic PAHT-CF" - ], - "OFaHjk1V": [ - "Volumic/Volumic PC" - ], - "OFaP2SsH": [ - "LH/LHS ASA" - ], - "OFaQMgRH": [ - "BBL/Bambu PLA Tough", - "OrcaFilamentLibrary/Bambu PLA Tough" - ], - "OFaRjiIm": [ - "SeeMeCNC/SeeMeCNC PETG-CF" - ], - "OFaYz8iE": [ - "OrcaFilamentLibrary/Elas PLA Pro" - ], - "OFaaddbQ": [ - "Flashforge/Flashforge PVA" - ], - "OFaeIx7W": [ - "iQ/Polymaker PETG Polymax black P1" - ], - "OFafO6VM": [ - "Elegoo/Generic PC-CF" - ], - "OFafocjw": [ - "Cubicon/Cubicon ABS" - ], - "OFausr3F": [ - "OrcaFilamentLibrary/FilAr PLA-mate Rosa" - ], - "OFb5EEM3": [ - "Artillery/Artillery PET" - ], - "OFbP8zEO": [ - "OrcaFilamentLibrary/Eolas Prints PLA Silk" - ], - "OFbPuPKY": [ - "Prusa/Generic FLEX" - ], - "OFbSChKb": [ - "SeeMeCNC/SeeMeCNC PLA" - ], - "OFbSZBOi": [ - "InfiMech/InfiMech TPU Basic" - ], - "OFbh7HcA": [ - "Eryone/Eryone PP-CF" - ], - "OFc3xdm9": [ - "BBL/Overture PLA", - "OrcaFilamentLibrary/Overture PLA", - "Qidi/Overture PLA" - ], - "OFc87pL3": [ - "OrcaArena/Arena PET-CF" - ], - "OFcBJQcC": [ - "Snapmaker/Snapmaker Dual TPU High-Flow" - ], - "OFcBl0nJ": [ - "BBL/Fiberon PA612-CF15" - ], - "OFcJDtTx": [ - "Artillery/Artillery TPU" - ], - "OFcKtw8W": [ - "Volumic/PA6 CF20 (Performance)" - ], - "OFcVLpNA": [ - "Flashforge/FusRock PAHT-GF" - ], - "OFcfQk4h": [ - "BBL/Overture Air PLA", - "OrcaFilamentLibrary/Overture Air PLA" - ], - "OFcnWTJB": [ - "BBL/BETA PLA Glitter" - ], - "OFcogyWl": [ - "WonderMaker/WonderMaker PLA Metal" - ], - "OFcpa50Z": [ - "BBL/addnorth PLA-CF Carbon Fiber" - ], - "OFctg8r1": [ - "CoLiDo/CoLiDo PLA+" - ], - "OFcvKkrs": [ - "BBL/Overture TPU", - "OrcaFilamentLibrary/Overture TPU" - ], - "OFcytyoA": [ - "BBL/Fiberon PETG-ESD", - "OrcaFilamentLibrary/Fiberon PETG-ESD", - "Snapmaker/Fiberon PETG-ESD" - ], - "OFd0Fv0k": [ - "BBL/Generic PE-CF", - "OrcaFilamentLibrary/Generic PE-CF", - "Tiertime/Generic PE-CF" - ], - "OFd2vX0G": [ - "BBL/COEX PLA PRIME", - "OrcaFilamentLibrary/COEX PLA PRIME" - ], - "OFd4zw5l": [ - "BBL/AliZ PA-CF", - "OrcaFilamentLibrary/AliZ PA-CF" - ], - "OFdD5Wbu": [ - "Snapmaker/Snapmaker J1 PLA-CF" - ], - "OFdI4zMo": [], - "OFdXVjGZ": [ - "Tiertime/Tiertime PC" - ], - "OFdb8YNz": [ - "OrcaFilamentLibrary/FilAr PLA Verde Manzana" - ], - "OFdd8ZqJ": [ - "Snapmaker/Snapmaker PLA Wood" - ], - "OFdkWDiy": [ - "Cubicon/Cubicon PLAi21" - ], - "OFdqkWtz": [ - "Flashforge/Flashforge PLA Luminous" - ], - "OFdrYBmI": [ - "Tiertime/Tiertime ASA" - ], - "OFdtPd9h": [ - "Qidi/QIDI PETG-GF" - ], - "OFdzlrhi": [ - "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" - ], - "OFe61n6v": [ - "Ratrig/RatRig PunkFil PETG CF" - ], - "OFe8tuNb": [ - "Tiertime/Tiertime PA6-CF" - ], - "OFe8yBMG": [ - "Qidi/QIDI PETG Tough 0.6 nozzle" - ], - "OFeAxvEt": [ - "Snapmaker/Snapmaker Dual ABS Benchy" - ], - "OFeCJqxx": [ - "Qidi/QIDI ABS Rapido Metal" - ], - "OFeF4UNh": [ - "BBL/BETA PLA Silk" - ], - "OFeIyhUx": [ - "Anycubic/Anycubic PC-CF" - ], - "OFeTATC7": [ - "Snapmaker/Snapmaker J1 Breakaway" - ], - "OFeVzkSU": [ - "Snapmaker/Fiberon PPS-GF20" - ], - "OFeelsSM": [ - "Qidi/HATCHBOX PLA" - ], - "OFelDBgv": [ - "Snapmaker/Polymaker PLA" - ], - "OFepU7Tl": [ - "WonderMaker/WonderMaker PLA Matte" - ], - "OFesA6rF": [ - "Anker/Generic PLA Silk", - "BBL/Generic PLA Silk", - "Creality/Generic PLA Silk", - "FLSun/Generic PLA Silk", - "Flashforge/Generic PLA Silk", - "OrcaArena/Generic PLA Silk", - "OrcaFilamentLibrary/Generic PLA Silk", - "Prusa/Generic PLA Silk", - "Qidi/Generic PLA Silk", - "Sovol/Generic PLA Silk", - "Tiertime/Generic PLA Silk" - ], - "OFexaZU2": [ - "OrcaFilamentLibrary/FilAr PLA Manteca" - ], - "OFf0MkD5": [ - "Qidi/QIDI PETG Translucent" - ], - "OFf52D4e": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "OFf5awy4": [ - "OrcaFilamentLibrary/Eolas Prints PLA Matte" - ], - "OFf6ZEvu": [ - "InfiMech/InfiMech PC" - ], - "OFf6mfQO": [ - "BBL/Bambu Support for ABS", - "OrcaFilamentLibrary/Bambu Support for ABS" - ], - "OFf6ynfH": [ - "FlyingBear/FlyingBear PETG Basic" - ], - "OFfBpSRI": [ - "BBL/Bambu ASA", - "OrcaFilamentLibrary/Bambu ASA" - ], - "OFfD87Gy": [ - "Snapmaker/Snapmaker PLA Glow" - ], - "OFfHGM1D": [ - "re3D/re3D rPP" - ], - "OFfJSCzm": [ - "OrcaFilamentLibrary/FDplast PETG" - ], - "OFfSqS4R": [ - "Creality/ENDER FAST PLA" - ], - "OFfYHK5z": [ - "Qidi/Polymaker PLA-HT" - ], - "OFfZcoKr": [ - "OrcaFilamentLibrary/FilAr PLA-mate Piel" - ], - "OFfb10SK": [ - "Artillery/Artillery PC" - ], - "OFfmHUkQ": [ - "Snapmaker/Snapmaker Dual Breakaway" - ], - "OFfmZrI3": [ - "OrcaFilamentLibrary/FDplast TPU" - ], - "OFfnXFie": [ - "BBL/COEX TPE 40D", - "OrcaFilamentLibrary/COEX TPE 40D" - ], - "OFfq5YXA": [ - "OrcaFilamentLibrary/Valment PLA-CF" - ], - "OFfr4XNO": [ - "BBL/COEX TPE 60D", - "OrcaFilamentLibrary/COEX TPE 60D" - ], - "OFfr6JDF": [ - "Qidi/QIDI PETG Tough 0.8 nozzle" - ], - "OFfuhviw": [ - "Elegoo/Elegoo PLA Marble", - "OrcaFilamentLibrary/Elegoo PLA Marble" - ], - "OFfuih8e": [ - "Creality/Creality Silk PLA" - ], - "OFg3cWVt": [ - "Snapmaker/Snapmaker Dual PLA Metal" - ], - "OFg57Nmc": [ - "BBL/Bambu PC FR", - "OrcaFilamentLibrary/Bambu PC FR" - ], - "OFg8hMzT": [ - "OrcaFilamentLibrary/FILL3D PPCF" - ], - "OFg8ndtj": [ - "Anker/Generic PA", - "Anycubic/Generic PA", - "BBL/Generic PA", - "Blocks/Generic PA", - "Creality/Generic PA", - "Custom/Generic PA", - "Elegoo/Generic PA", - "FLSun/Generic PA", - "OrcaArena/Generic PA", - "OrcaFilamentLibrary/Generic PA", - "Prusa/Generic PA", - "Qidi/Generic PA", - "Ratrig/Generic PA", - "SecKit/Generic PA", - "Tiertime/Generic PA", - "Vzbot/Generic PA", - "Z-Bolt/Generic PA" - ], - "OFgHh8ly": [ - "Afinia/Afinia Value PLA" - ], - "OFgMWJ8T": [ - "OrcaFilamentLibrary/FilAr PLA Negro Azabache" - ], - "OFgSbX7E": [ - "Volumic/Volumic PC (Performance)" - ], - "OFgVQkqW": [ - "Cubicon/Cubicon ABSk" - ], - "OFgXgt98": [ - "Artillery/Artillery ABS" - ], - "OFgbpcy9": [ - "Anker/Generic TPU", - "Anycubic/Generic TPU", - "Artillery/Generic TPU", - "BBL/Generic TPU", - "Blocks/Generic TPU", - "Chuanying/Generic TPU", - "Co Print/Generic TPU", - "CoLiDo/Generic TPU", - "Creality/Generic TPU", - "Custom/Generic TPU", - "DeltaMaker/Generic TPU", - "FLSun/Generic TPU", - "Flashforge/Generic TPU", - "FlyingBear/Generic TPU", - "InfiMech/Generic TPU", - "OrcaArena/Generic TPU", - "OrcaFilamentLibrary/Generic TPU", - "Prusa/Generic TPU", - "Qidi/Generic TPU", - "RH3D/Generic TPU", - "Ratrig/Generic TPU", - "SecKit/Generic TPU", - "Sovol/Generic TPU", - "Tiertime/Generic TPU", - "Vzbot/Generic TPU" - ], - "OFgdaBOt": [ - "Snapmaker/Polymaker Tough PLA Family" - ], - "OFgeM7nD": [ - "Flashforge/Flashforge PA12-CF" - ], - "OFgjgN35": [ - "Flashforge/Flashforge PLA Silk" - ], - "OFglhKLM": [ - "Qidi/QIDI PLA Rapido 0.8 nozzle" - ], - "OFgpLTMR": [ - "OrcaFilamentLibrary/FilAr PETG Gris Plata" - ], - "OFgpQwkk": [ - "Creality/CR-PLA Fluo" - ], - "OFgptDSf": [ - "OrcaArena/Arena PLA Matte" - ], - "OFgyPlwU": [ - "Snapmaker/Snapmaker TPU High-Flow" - ], - "OFh7mvPO": [ - "Prusa/Prusament PVB" - ], - "OFh9u9c0": [ - "Creality/Generic PA6-GF" - ], - "OFhASRWj": [ - "BBL/Panchroma PLA Temp Shift", - "OrcaFilamentLibrary/Panchroma PLA Temp Shift", - "Snapmaker/Panchroma PLA Temp Shift" - ], - "OFhMO9Kh": [ - "OrcaFilamentLibrary/GreenGate3D PETG" - ], - "OFhN09f0": [ - "BBL/addnorth PC BLend HT LCF" - ], - "OFhO5aEJ": [ - "Ratrig/RatRig PunkFil ABS" - ], - "OFhQf8ou": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "OFhQfUQY": [ - "BBL/Generic SBS", - "OrcaFilamentLibrary/Generic SBS", - "Tiertime/Generic SBS" - ], - "OFhTPf6L": [ - "Creality/Generic PA6-CF", - "Elegoo/Generic PA6-CF" - ], - "OFhUjPA5": [ - "Eryone/Eryone TPU" - ], - "OFhWc5Bv": [ - "OrcaFilamentLibrary/NIT ABS" - ], - "OFhWhL1i": [ - "OrcaFilamentLibrary/Eolas Prints PETG" - ], - "OFhWrAuP": [ - "Qidi/QIDI PLA-CF" - ], - "OFhbolij": [ - "Creality/eSUN PLA-Lite" - ], - "OFhcYzR8": [ - "Elegoo/Elegoo PLA Sparkle", - "OrcaFilamentLibrary/Elegoo PLA Sparkle" - ], - "OFhfd722": [ - "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" - ], - "OFhiJE7Y": [ - "Qidi/QIDI PEBA 95A" - ], - "OFhkN0a7": [ - "Creality/Hyper PA612-CF" - ], - "OFhlCNqq": [ - "BBL/COEX PLA", - "OrcaFilamentLibrary/COEX PLA" - ], - "OFhmxnYw": [ - "Snapmaker/Snapmaker PLA Basic" - ], - "OFhuaUQB": [ - "BBL/Bambu ABS", - "OrcaFilamentLibrary/Bambu ABS", - "Qidi/Bambu ABS" - ], - "OFhwiZ50": [ - "Qidi/QIDI PLA Rapido 0.2 nozzle" - ], - "OFhx4uOG": [ - "Qidi/QIDI PET-GF" - ], - "OFi5RSve": [ - "Creality/eSUN PLA-LW" - ], - "OFi6PfUM": [ - "Chuanying/Generic PLA-Silk", - "Creality/Generic PLA-Silk", - "Flashforge/Generic PLA-Silk" - ], - "OFi90KlM": [ - "Volumic/Volumic NYLON Ultra (Performance)" - ], - "OFiDpM1B": [ - "OrcaFilamentLibrary/FilAr PLA-mate Bordo" - ], - "OFiEz2XI": [ - "Cubicon/Cubicon PA-CF" - ], - "OFiWaoqD": [ - "OrcaFilamentLibrary/DREMC PPA-CF" - ], - "OFibWuBd": [ - "Flashforge/Flashforge ABS Basic" - ], - "OFilAA3b": [ - "Eryone/Eryone PLA-CF" - ], - "OFilD4bP": [ - "FlyingBear/FlyingBear PLA" - ], - "OFilnglt": [ - "Artillery/Artillery PETG" - ], - "OFin64Qg": [ - "Creality/Generic Support for PLA" - ], - "OFitS8al": [ - "BBL/PolyLite PLA Neon", - "Snapmaker/PolyLite PLA Neon" - ], - "OFiwEbze": [ - "Volumic/PETG ESD (Performance)" - ], - "OFj3bTjw": [ - "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" - ], - "OFj64R5U": [ - "Peopoly/Peopoly Lancer ABS-GF" - ], - "OFjD3YTW": [ - "Qidi/Qidi PC-ABS-FR" - ], - "OFjHrAX0": [ - "WonderMaker/WonderMaker ABS" - ], - "OFjLAYgO": [ - "Anycubic/Anycubic PEBA" - ], - "OFjPXrXO": [ - "Elegoo/Elegoo PLA Glow", - "OrcaFilamentLibrary/Elegoo PLA Glow" - ], - "OFjT9PkZ": [ - "OrcaFilamentLibrary/FilAr PLA Tabaco" - ], - "OFjUGUIK": [ - "iQ/Fiberthree PACF Pro P1" - ], - "OFjUXn67": [ - "BBL/BETA ABS" - ], - "OFjVOWfJ": [ - "Anycubic/Anycubic PLA High Speed" - ], - "OFjXrKFO": [ - "OrcaArena/Arena PLA Impact" - ], - "OFjb0wos": [ - "BBL/Panchroma PLA Metallic", - "OrcaFilamentLibrary/Panchroma PLA Metallic", - "Snapmaker/Panchroma PLA Metallic" - ], - "OFjcwUEm": [ - "Cubicon/Cubicon PLA" - ], - "OFjiXpyf": [ - "Qidi/Generic TPU 95A", - "TwoTrees/Generic TPU 95A" - ], - "OFjkdnyN": [ - "Snapmaker/Snapmaker Dual TPU" - ], - "OFjoAe0R": [ - "Qidi/Qidi PLA-CF" - ], - "OFjogeYN": [ - "BBL/BETA PETG Glitter" - ], - "OFjorDcx": [ - "OrcaFilamentLibrary/FDplast ABS" - ], - "OFjt8dDO": [ - "Flashforge/FusRock NexPA-CF25" - ], - "OFjt9en1": [ - "OrcaFilamentLibrary/Generic CoPE" - ], - "OFjz0a3m": [ - "Prusa/Prusament PC-CF" - ], - "OFk8t9mz": [ - "BBL/Fiberon PETG-rCF", - "OrcaFilamentLibrary/Fiberon PETG-rCF" - ], - "OFkAltI8": [ - "FlyingBear/Other PA-CF", - "InfiMech/Other PA-CF" - ], - "OFkGp50Y": [ - "Volumic/Volumic UNIVERSAL Ultra (Performance)" - ], - "OFkGvN4d": [ - "OrcaFilamentLibrary/FilAr PLA Verde Pixel" - ], - "OFkHbjUv": [ - "BBL/BETA PLA Metallic" - ], - "OFkOviHk": [ - "BBL/Fiberon PA6-CF", - "OrcaFilamentLibrary/Fiberon PA6-CF" - ], - "OFkR8E2c": [ - "Prusa/Prusament PETG" - ], - "OFkf1HHw": [ - "Flashforge/Generic PLA-SILK" - ], - "OFkhhUS0": [ - "Elegoo/Elegoo Rapid PLA+", - "OrcaFilamentLibrary/Elegoo Rapid PLA+" - ], - "OFklJcWK": [ - "FlyingBear/Other PLA Hyper", - "InfiMech/Other PLA Hyper" - ], - "OFknl9Iz": [ - "BBL/Bambu ABS-GF", - "OrcaFilamentLibrary/Bambu ABS-GF" - ], - "OFkoLUtR": [ - "OrcaFilamentLibrary/FilAr PLA Verde Oliva" - ], - "OFkq7rPy": [ - "Eryone/Eryone PA-GF" - ], - "OFks6esg": [ - "Creality/EN-PLA+" - ], - "OFkx5MEe": [ - "Artillery/Artillery PVA" - ], - "OFkzr35f": [ - "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" - ], - "OFlBoEfL": [ - "Snapmaker/Snapmaker J1 TPU High-Flow" - ], - "OFlIsW6f": [ - "Snapmaker/Snapmaker Dual PLA Matte" - ], - "OFlN6DL1": [ - "Qidi/QIDI PA-Ultra" - ], - "OFlP3KWq": [ - "Elegoo/Elegoo PETG HF", - "OrcaFilamentLibrary/Elegoo PETG HF" - ], - "OFlSNkhc": [ - "OrcaFilamentLibrary/Eolas Prints ASA" - ], - "OFlfuj2k": [ - "BBL/Bambu TPU 85A" - ], - "OFlgMgNM": [ - "Flashforge/Flashforge PPS" - ], - "OFllmFhT": [ - "Elegoo/Generic PETG PRO" - ], - "OFlmxlDG": [ - "BBL/BETA HIPS" - ], - "OFln72PT": [ - "Elegoo/Elegoo PLA-CF", - "OrcaFilamentLibrary/Elegoo PLA-CF" - ], - "OFlsTpJG": [ - "Elegoo/Elegoo PC-FR", - "OrcaFilamentLibrary/Elegoo PC-FR" - ], - "OFlufQpZ": [ - "Snapmaker/Snapmaker PLA" - ], - "OFlwmqrC": [ - "BBL/Polymaker HT-PLA-GF", - "OrcaFilamentLibrary/Polymaker HT-PLA-GF", - "Snapmaker/Polymaker HT-PLA-GF" - ], - "OFm06H6V": [ - "Elegoo/Elegoo PLA Basic", - "OrcaFilamentLibrary/Elegoo PLA Basic" - ], - "OFm4SivL": [ - "Flashforge/Flashforge PLA Pro" - ], - "OFm4ysMO": [ - "FlyingBear/FlyingBear ABS" - ], - "OFm70lLt": [ - "CoLiDo/CoLiDo PLA" - ], - "OFm8rqoY": [ - "re3D/re3D rPP" - ], - "OFmCOW2Y": [ - "re3D/re3D rPETG" - ], - "OFmFwUWM": [ - "Prusa/Prusament ASA" - ], - "OFmJAd3A": [ - "OrcaFilamentLibrary/FDplast HIPS" - ], - "OFmKU2Ha": [ - "Eryone/Eryone PLA" - ], - "OFmN2lvw": [ - "BBL/Generic TPU for AMS" - ], - "OFmY0l6t": [ - "Creality/Generic PLA Matte", - "Elegoo/Generic PLA Matte", - "OrcaFilamentLibrary/Generic PLA Matte" - ], - "OFma5TXH": [ - "Qidi/QIDI ABS Odorless" - ], - "OFmaeU4a": [ - "OrcaFilamentLibrary/FilAr PLA-mate Naranja" - ], - "OFmfizbq": [ - "OrcaArena/Arena PLA Silk" - ], - "OFmhJs5V": [ - "Elegoo/Elegoo TPU 95A", - "OrcaFilamentLibrary/Elegoo TPU 95A" - ], - "OFmjN2bc": [ - "Anycubic/Anycubic PLA" - ], - "OFmn9NZL": [ - "BBL/FusRock ABS-GF", - "OrcaFilamentLibrary/FusRock ABS-GF" - ], - "OFmpMwxS": [ - "BBL/Generic PLA High Speed", - "Creality/Generic PLA High Speed", - "FLSun/Generic PLA High Speed", - "Flashforge/Generic PLA High Speed", - "OrcaFilamentLibrary/Generic PLA High Speed", - "Qidi/Generic PLA High Speed", - "Tiertime/Generic PLA High Speed" - ], - "OFmt513L": [ - "BBL/BETA PETG Transparent" - ], - "OFmveLWz": [ - "Elegoo/Elegoo PETG-GF", - "OrcaFilamentLibrary/Elegoo PETG-GF" - ], - "OFn1QaY3": [ - "Elegoo/Elegoo PLA Translucent2", - "OrcaFilamentLibrary/Elegoo PLA Translucent2" - ], - "OFn2GlhY": [ - "Creality/Hyper PA6-CF" - ], - "OFn6WpN7": [ - "Qidi/QIDI PA12-CF" - ], - "OFnBvPhb": [ - "BBL/addnorth PLA rPLA RE-ADD" - ], - "OFnHc3D6": [ - "Creality/eSUN PLA-CF" - ], - "OFnO4wnf": [ - "Prusa/Prusament PLA" - ], - "OFnSeLHk": [ - "CoLiDo/CoLiDo PLA Silk" - ], - "OFnT7Qpb": [ - "Prusa/Generic TPU HF" - ], - "OFnXrkhA": [ - "InfiMech/InfiMech PA-CF" - ], - "OFnXwW8l": [ - "Snapmaker/PolyLite PLA Pro Metallic" - ], - "OFnYVFk2": [ - "OrcaFilamentLibrary/FilAr PLA Azul Francia" - ], - "OFncpm7O": [ - "WonderMaker/WonderMaker PLA Silk" - ], - "OFneOFWe": [ - "CoLiDo/CoLiDo ABS" - ], - "OFnejEt4": [ - "OrcaFilamentLibrary/FilAr PETG Cian" - ], - "OFnfxTvi": [ - "BBL/Bambu PLA Lite" - ], - "OFngcE81": [ - "LH/LHS TPU Foamy 78A" - ], - "OFniMuTN": [ - "BBL/Bambu PA6-CF", - "OrcaFilamentLibrary/Bambu PA6-CF" - ], - "OFnmp6rt": [ - "Anycubic/Anycubic PLA+" - ], - "OFnpX8uh": [ - "BBL/BETA PETG Matte" - ], - "OFnyHfcv": [ - "Ratrig/Generic ABS BigNozzle" - ], - "OFo15hcT": [ - "Qidi/QIDI PAHT-GF" - ], - "OFo2UF2C": [ - "BBL/Generic BVOH", - "Creality/Generic BVOH", - "Flashforge/Generic BVOH", - "OrcaFilamentLibrary/Generic BVOH", - "Tiertime/Generic BVOH" - ], - "OFo6n2pB": [ - "Anycubic/Anycubic PETG" - ], - "OFoBTKmn": [ - "Cubicon/Cubicon PETG" - ], - "OFoSknDB": [ - "OrcaFilamentLibrary/FILL3D PLA Turbo" - ], - "OFoYSJKi": [ - "Anker/Generic PETG-CF", - "BBL/Generic PETG-CF", - "Creality/Generic PETG-CF", - "Elegoo/Generic PETG-CF", - "Flashforge/Generic PETG-CF", - "OrcaArena/Generic PETG-CF", - "OrcaFilamentLibrary/Generic PETG-CF", - "Qidi/Generic PETG-CF", - "Tiertime/Generic PETG-CF" - ], - "OFobDOW5": [ - "Elegoo/Elegoo ASA", - "OrcaFilamentLibrary/Elegoo ASA" - ], - "OFocyw69": [ - "BBL/AliZ PETG", - "OrcaFilamentLibrary/AliZ PETG" - ], - "OFoiVqVM": [ - "BBL/Bambu PLA Basic", - "OrcaFilamentLibrary/Bambu PLA Basic" - ], - "OFojbdhR": [ - "Flashforge/Flashforge ABS-GF" - ], - "OForhBi4": [ - "Cubicon/Cubicon ABSk" - ], - "OFovEIbw": [ - "BBL/Bambu PETG HF", - "OrcaFilamentLibrary/Bambu PETG HF" - ], - "OFp4ETDP": [ - "Creality/CR-PLA" - ], - "OFp57RRC": [ - "Qidi/QIDI PPS-GF" - ], - "OFp9wdmf": [ - "Eryone/Eryone PA-CF" - ], - "OFpBlrvY": [ - "OrcaFilamentLibrary/Valment PLA Silk" - ], - "OFpDo5Ix": [ - "Cubicon/Cubicon ABS" - ], - "OFpPGSKG": [ - "BBL/SUNLU Silk PLA+", - "Flashforge/SUNLU Silk PLA+", - "OrcaFilamentLibrary/SUNLU Silk PLA+" - ], - "OFpPJSHE": [ - "Peopoly/Peopoly Lancer PETG-C" - ], - "OFpW4gdi": [ - "BBL/SUNLU PLA Matte", - "Flashforge/SUNLU PLA Matte", - "OrcaFilamentLibrary/SUNLU PLA Matte" - ], - "OFpdjFI3": [ - "BBL/BETA PLA UV Color Change" - ], - "OFpu74Qe": [ - "Snapmaker/Snapmaker PLA Eco" - ], - "OFpumhCM": [ - "Volumic/Volumic UNIVERSAL Ultra" - ], - "OFq0TY7C": [ - "Flashforge/Flashforge ASA-CF" - ], - "OFq8gfS4": [ - "OrcaFilamentLibrary/FilAr PETG Negro Azabache" - ], - "OFq9svOz": [ - "BBL/Generic PPS", - "Creality/Generic PPS", - "Tiertime/Generic PPS" - ], - "OFqFRiLb": [ - "Ratrig/Generic PLA BigNozzle" - ], - "OFqGRZyH": [ - "BBL/Numakers PLA+", - "OrcaFilamentLibrary/Numakers PLA+" - ], - "OFqINlYj": [ - "BBL/eSUN PLA+", - "Creality/eSUN PLA+", - "OrcaFilamentLibrary/eSUN PLA+" - ], - "OFqTwtXM": [ - "BBL/addnorth PETG rPETG Matte" - ], - "OFqcL5UF": [ - "Qidi/QIDI Support For PET/PA" - ], - "OFqtx549": [ - "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" - ], - "OFqw2PQA": [ - "BBL/Panchroma CoPE", - "OrcaFilamentLibrary/Panchroma CoPE", - "Snapmaker/Panchroma CoPE" - ], - "OFrFBEfd": [ - "OrcaFilamentLibrary/Eolas Prints PLA Neon" - ], - "OFrGJ4tR": [ - "Anycubic/Anycubic PLA Slik" - ], - "OFrKLeE3": [ - "BBL/Bambu PLA Metal", - "OrcaFilamentLibrary/Bambu PLA Metal" - ], - "OFrLiqiM": [ - "InfiMech/InfiMech PETG" - ], - "OFrM4hdm": [ - "Creality/CR-PLA Carbon" - ], - "OFrOh600": [ - "BBL/Panchroma PLA Matte", - "Creality/Panchroma PLA Matte", - "OrcaFilamentLibrary/Panchroma PLA Matte", - "Snapmaker/Panchroma PLA Matte" - ], - "OFrZDhVt": [ - "Flashforge/Flashforge ASA-GF" - ], - "OFrdZ0cK": [ - "Creality/eSUN PETG+HS" - ], - "OFrjacXf": [ - "Flashforge/Flashforge PET-CF" - ], - "OFrqMlGt": [ - "BBL/BETA PETG" - ], - "OFrr67nG": [ - "OrcaArena/Arena PC" - ], - "OFryjl35": [ - "Elegoo/Elegoo ASA-CF", - "OrcaFilamentLibrary/Elegoo ASA-CF" - ], - "OFsB2lxm": [ - "Elegoo/Elegoo PLA Matte", - "OrcaFilamentLibrary/Elegoo PLA Matte" - ], - "OFsD974q": [ - "Volumic/Volumic PETG Ultra (Performance)" - ], - "OFsDXRpS": [ - "OrcaFilamentLibrary/FilAr PLA Piel" - ], - "OFsFo7ms": [ - "Volumic/Volumic PP Ultra" - ], - "OFsFon5l": [ - "BBL/Generic HIPS", - "Chuanying/Generic HIPS", - "Creality/Generic HIPS", - "Flashforge/Generic HIPS", - "OrcaFilamentLibrary/Generic HIPS", - "Tiertime/Generic HIPS" - ], - "OFsHSVZc": [ - "BBL/Bambu Support W", - "OrcaFilamentLibrary/Bambu Support W" - ], - "OFsP8PKH": [ - "Z-Bolt/Generic ABS HT" - ], - "OFsRDvTM": [ - "Anycubic/Panchroma PLA", - "BBL/Panchroma PLA", - "OrcaFilamentLibrary/Panchroma PLA", - "Snapmaker/Panchroma PLA" - ], - "OFsXQXbs": [ - "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" - ], - "OFsijjtH": [ - "BBL/Generic PP-GF", - "OrcaFilamentLibrary/Generic PP-GF", - "Tiertime/Generic PP-GF" - ], - "OFsoykbm": [ - "OrcaFilamentLibrary/DREMC PA6-CF" - ], - "OFt0JbR7": [ - "Snapmaker/Snapmaker J1 PLA Metal" - ], - "OFt3HtlG": [ - "Qidi/QIDI ABS-GF" - ], - "OFt6e0US": [ - "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" - ], - "OFt7SngH": [ - "Snapmaker/Snapmaker J1 ASA" - ], - "OFtFtiS0": [ - "Snapmaker/Polymaker PETG Galaxy" - ], - "OFtGC1ye": [ - "Artillery/Artillery PA-CF" - ], - "OFtKeKa9": [ - "OrcaArena/Arena PLA Tough" - ], - "OFtOPlK6": [ - "OrcaArena/Arena PAHT-CF" - ], - "OFtOoWIj": [], - "OFtRn8X8": [ - "OrcaFilamentLibrary/FDplast SBS" - ], - "OFtdVZpV": [ - "BBL/addnorth PLA X-PLA" - ], - "OFtefokm": [ - "OrcaFilamentLibrary/FilAr PLA-mate Blanco" - ], - "OFtkLO6q": [ - "BBL/Bambu TPU 90A" - ], - "OFtndTHe": [ - "BBL/BETA PETG-CF" - ], - "OFtpXCCv": [ - "BBL/COEX ASA PRIME", - "OrcaFilamentLibrary/COEX ASA PRIME" - ], - "OFtr8eZw": [ - "OrcaFilamentLibrary/FDplast PLA" - ], - "OFtudokz": [ - "OrcaFilamentLibrary/Eolas Prints PLA Premium" - ], - "OFtybfNX": [ - "Snapmaker/Snapmaker PLA Metal" - ], - "OFu08yGN": [ - "Volumic/Volumic PETG Ultra carbone" - ], - "OFu0fjPJ": [ - "LH/LHS PC CF" - ], - "OFu1E4ur": [ - "Qidi/QIDI ASA-Aero" - ], - "OFu1evlr": [ - "BBL/Generic PCTG", - "Creality/Generic PCTG", - "OrcaFilamentLibrary/Generic PCTG", - "Ratrig/Generic PCTG", - "Tiertime/Generic PCTG" - ], - "OFuFEtKX": [ - "Flashforge/Flashforge PETG-CF" - ], - "OFuJ49uH": [ - "Qidi/QIDI PETG Basic" - ], - "OFuO0cAP": [ - "OrcaArena/Arena PETG-CF" - ], - "OFuUuIhR": [ - "Elegoo/Elegoo PETG-CF", - "OrcaFilamentLibrary/Elegoo PETG-CF" - ], - "OFuV79ru": [ - "Flashforge/Flashforge PA66-CF" - ], - "OFuWCQXN": [ - "BBL/COEX ABS PRIME", - "OrcaFilamentLibrary/COEX ABS PRIME" - ], - "OFuehn62": [ - "OrcaArena/Arena PLA Marble" - ], - "OFufTAK9": [ - "OrcaFilamentLibrary/FilAr PLA-mate Negro" - ], - "OFughwKn": [ - "Qidi/QIDI PLA Matte Basic" - ], - "OFujZSdh": [ - "Creality/Hyper PETG" - ], - "OFulOdT2": [ - "Flashforge/Generic TPU 85A" - ], - "OFurdQxc": [ - "OrcaFilamentLibrary/FilAr PETG Magenta" - ], - "OFusbWjj": [ - "Creality/Hyper PETG-CF" - ], - "OFuvOt0r": [ - "BBL/BETA PLA Basic" - ], - "OFuxH0Uz": [ - "Volumic/Volumic FLEX93 Ultra" - ], - "OFvD0Qqt": [ - "Ratrig/Generic PETG BigNozzle" - ], - "OFvDbkFq": [ - "Prusa/Prusament PC Blend" - ], - "OFvKUnLh": [ - "BBL/Bambu TPU 95A HF", - "OrcaFilamentLibrary/Bambu TPU 95A HF" - ], - "OFvLppPU": [ - "Creality/CR-Nylon" - ], - "OFvPPMxL": [ - "OrcaFilamentLibrary/FilAr PLA Verde FilAr" - ], - "OFvTVZc3": [ - "BBL/COEX PETG", - "OrcaFilamentLibrary/COEX PETG" - ], - "OFvVy7yo": [ - "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" - ], - "OFvaLVML": [ - "Flashforge/Flashforge HIPS" - ], - "OFvcIGee": [ - "BBL/addnorth TPU Pro Matte 85A" - ], - "OFvdZ2bx": [ - "Qidi/QIDI WOOD Rapido" - ], - "OFvgE0Zh": [ - "Elegoo/Elegoo PLA", - "OrcaFilamentLibrary/Elegoo PLA" - ], - "OFvmwTZE": [ - "Snapmaker/Snapmaker TPU 95A" - ], - "OFvrXuV7": [ - "BBL/PolyLite ASA", - "OrcaFilamentLibrary/PolyLite ASA" - ], - "OFvxIS9g": [ - "BBL/Fiberon PA12-CF10", - "Snapmaker/Fiberon PA12-CF10" - ], - "OFvxghTE": [ - "Chuanying/Generic HS PLA", - "Flashforge/Generic HS PLA", - "TwoTrees/Generic HS PLA" - ], - "OFvyB0Bz": [ - "BBL/PolyLite PLA Galaxy", - "Snapmaker/PolyLite PLA Galaxy" - ], - "OFvzvwCu": [ - "OrcaFilamentLibrary/Eolas Prints PLA High Speed" - ], - "OFw4WD4T": [ - "BBL/Fiberon PETG-rCF08" - ], - "OFwJ0qu2": [], - "OFwLBAGf": [ - "Qidi/HATCHBOX ABS" - ], - "OFwPrlCM": [ - "BBL/Bambu PETG Translucent", - "OrcaFilamentLibrary/Bambu PETG Translucent" - ], - "OFwRJ4g0": [ - "OrcaFilamentLibrary/NIT PLA" - ], - "OFwVVKEV": [ - "FlyingBear/Other TPU", - "InfiMech/Other TPU" - ], - "OFwaYjL6": [ - "BBL/Fiberon PA6-GF", - "OrcaFilamentLibrary/Fiberon PA6-GF" - ], - "OFwbsgWj": [ - "re3D/re3D PC" - ], - "OFwc74ck": [ - "BBL/BETA PLA Matte" - ], - "OFwhLMs4": [ - "Snapmaker/Snapmaker PLA SnapSpeed" - ], - "OFwjMiKL": [ - "Flashforge/Flashforge PETG Transparent" - ], - "OFwlZ7gH": [ - "Flashforge/Flashforge TPU-90A" - ], - "OFwu7IAG": [ - "BBL/COEX PCTG PRIME", - "OrcaFilamentLibrary/COEX PCTG PRIME" - ], - "OFwwAQnA": [ - "Prusa/Generic PC HF" - ], - "OFwyt1xt": [ - "Eryone/Eryone ASA-CF" - ], - "OFx0WlzS": [ - "Flashforge/Flashforge TPU-95A" - ], - "OFx8Lmsd": [ - "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" - ], - "OFxA1p01": [ - "BBL/Overture PLA Pro", - "OrcaFilamentLibrary/Overture PLA Pro" - ], - "OFxDHUX8": [ - "SeeMeCNC/SeeMeCNC PETG" - ], - "OFxJRuVF": [ - "Anycubic/Anycubic PC-GF" - ], - "OFxOHhZw": [ - "Elegoo/Elegoo ABS", - "OrcaFilamentLibrary/Elegoo ABS" - ], - "OFxUwUeW": [ - "BBL/SUNLU PLA Marble", - "Flashforge/SUNLU PLA Marble", - "OrcaFilamentLibrary/SUNLU PLA Marble" - ], - "OFxYB4Sw": [ - "Snapmaker/Snapmaker J1 PETG-CF" - ], - "OFxe4rXr": [ - "BBL/PolyTerra PLA Marble", - "Snapmaker/PolyTerra PLA Marble" - ], - "OFxqf79Q": [ - "BBL/BETA PETG HF" - ], - "OFy02QHU": [ - "BBL/PolyLite PLA Translucent", - "Snapmaker/PolyLite PLA Translucent" - ], - "OFy14TRA": [ - "Snapmaker/Snapmaker J1 ABS" - ], - "OFy3sW6j": [ - "WonderMaker/WonderMaker ASA" - ], - "OFy48TOp": [ - "Flashforge/Generic TPU-95A" - ], - "OFy8tYJE": [ - "Cubicon/Cubicon ABS-A100" - ], - "OFyFyLIp": [ - "SeeMeCNC/SeeMeCNC TPU" - ], - "OFyHgT60": [ - "OrcaArena/Arena PLA Sparkle" - ], - "OFyJjkek": [ - "BBL/addnorth TPU Pro Matte 95A" - ], - "OFyLWVF3": [ - "Creality/Generic PETG-GF" - ], - "OFyPG8v2": [ - "Snapmaker/Snapmaker Dual PLA Eco" - ], - "OFyPTnSk": [ - "BBL/BETA PETG Heat Color Change" - ], - "OFyQwdaM": [ - "Volumic/Volumic ABS Ultra (Performance)" - ], - "OFyRCIMh": [ - "FlyingBear/Other PC", - "InfiMech/Other PC" - ], - "OFyUJI3q": [ - "Volumic/Volumic ABS Ultra" - ], - "OFybzvQN": [ - "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" - ], - "OFyhjiNs": [ - "Snapmaker/Snapmaker PVA" - ], - "OFyj3m13": [ - "Snapmaker/Snapmaker Dual PLA Silk" - ], - "OFymnal9": [ - "Sovol/Sovol Zero PETG HS Nozzle" - ], - "OFyoBZdm": [ - "LH/LHS PLA" - ], - "OFyreocX": [ - "Tiertime/Tiertime PVA" - ], - "OFyrnlUn": [ - "Snapmaker/Snapmaker J1 TPU" - ], - "OFysxCep": [ - "OrcaFilamentLibrary/FilAr PETG Coral" - ], - "OFyxayW4": [ - "BBL/AliZ PLA", - "OrcaFilamentLibrary/AliZ PLA" - ], - "OFz1a1fy": [ - "BBL/BETA PETG Metallic" - ], - "OFz5oHgf": [ - "MagicMaker/Generic PEEK" - ], - "OFzAWsca": [ - "Qidi/Qidi TPU 95A-HF" - ], - "OFzB4uOs": [ - "Sovol/Sovol Zero PLA Basic HS Nozzle" - ], - "OFzRtFM9": [ - "Prusa/Generic ASA HF" - ], - "OFzS7zt4": [ - "Anycubic/Anycubic PA" - ], - "OFzY7N3Z": [ - "Artillery/Artillery PLA" - ], - "OFzaq7Yg": [ - "BBL/BETA TPU 98A" - ], - "OFzk5oAo": [ - "BBL/addnorth ABS rABS" - ], - "OFzrUUxc": [], - "OFztQ7rO": [ - "LH/LHS ABS" - ], - "OFzwA5Z9": [ - "Flashforge/FusRock PET-GF" - ], - "OFzyIxba": [ - "BBL/Bambu PVA", - "OrcaFilamentLibrary/Bambu PVA" - ] - }, - "instantiated_with_id": [ - "Afinia/Afinia ABS+@HS", - "Afinia/Afinia ABS@HS", - "Afinia/Afinia PLA@HS", - "Afinia/Afinia TPU@HS", - "Afinia/Afinia Value ABS@HS", - "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 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", - "Anycubic/Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "Anycubic/Generic ASA @Anycubic", - "Anycubic/Generic PA @Anycubic", - "Anycubic/Generic PA-CF @Anycubic", - "Anycubic/Generic PC @Anycubic", - "Anycubic/Generic PETG @Anycubic", - "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 PLA @Anycubic", - "Anycubic/Generic PLA-CF @Anycubic", - "Anycubic/Generic PVA @Anycubic", - "Anycubic/Generic TPU @Anycubic", - "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/Artillery ABS @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery ABS @Artillery M1 Pro 0.4 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.4 nozzle", - "Artillery/Artillery ASA @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery ASA @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PC @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PET @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PET @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PET @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PET @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PETG", - "Artillery/Artillery PETG @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PETG @Artillery M1 Pro 0.4 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.4 nozzle", - "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PETG-CF @Artillery M1 Pro 0.4 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 PLA Basic", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Matte", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Silk", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery PLA Tough", - "Artillery/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PVA @Artillery M1 Pro 0.2 nozzle", - "Artillery/Artillery PVA @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery PVA @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery PVA @Artillery M1 Pro 0.8 nozzle", - "Artillery/Artillery TPU", - "Artillery/Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "Artillery/Artillery TPU @Artillery M1 Pro 0.6 nozzle", - "Artillery/Artillery TPU @Artillery M1 Pro 0.8 nozzle", - "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", - "BBL/Generic SBS", - "BBL/addnorth ABS rABS", - "BBL/addnorth PA Adura", - "BBL/addnorth PA Adura FDA", - "BBL/addnorth PA-CF Adura X", - "BBL/addnorth PA6 Addlantis", - "BBL/addnorth PC BLend HT LCF", - "BBL/addnorth PETG Base", - "BBL/addnorth PETG ESD", - "BBL/addnorth PETG Economy", - "BBL/addnorth PETG Flame v0", - "BBL/addnorth PETG PRO Matte", - "BBL/addnorth PETG rPETG Matte", - "BBL/addnorth PETG-CF Rigid X", - "BBL/addnorth PLA E-PLA", - "BBL/addnorth PLA Economy", - "BBL/addnorth PLA HT-PLA PRO Matte", - "BBL/addnorth PLA Premium Silk", - "BBL/addnorth PLA Textura", - "BBL/addnorth PLA Wood", - "BBL/addnorth PLA X-PLA", - "BBL/addnorth PLA X-PLA High Speed", - "BBL/addnorth PLA rPLA RE-ADD", - "BBL/addnorth PLA-CF Carbon Fiber", - "BBL/addnorth PVDF Adamant S1", - "BBL/addnorth TPU EasyFlex", - "BBL/addnorth TPU Pro Matte 85A", - "BBL/addnorth TPU Pro Matte 95A", - "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 @Blocks", - "CONSTRUCT3D/Generic High Flow PETG @C1", - "CONSTRUCT3D/Generic PETG @C1", - "CONSTRUCT3D/Generic PLA @C1", - "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", - "Co Print/Generic ABS @CoPrint", - "Co Print/Generic PETG @CoPrint", - "Co Print/Generic PLA @CoPrint", - "Co Print/Generic TPU @CoPrint", - "CoLiDo/CoLiDo ABS @CoLiDo SR1", - "CoLiDo/CoLiDo PETG @CoLiDo SR1", - "CoLiDo/CoLiDo PLA @CoLiDo SR1", - "CoLiDo/CoLiDo PLA Silk @CoLiDo SR1", - "CoLiDo/CoLiDo PLA+ @CoLiDo DIY 4.0 V2", - "CoLiDo/Generic ABS @CoLiDo DIY 4.0", - "CoLiDo/Generic ABS @CoLiDo X16", - "CoLiDo/Generic PETG @CoLiDo DIY 4.0", - "CoLiDo/Generic PETG @CoLiDo X16", - "CoLiDo/Generic PLA @CoLiDo DIY 4.0", - "CoLiDo/Generic PLA @CoLiDo X16", - "CoLiDo/Generic TPU @CoLiDo DIY 4.0", - "CoLiDo/Generic TPU @CoLiDo X16", - "Comgrow/Generic ABS @Comgrow", - "Comgrow/Generic PETG @Comgrow", - "Comgrow/Generic PLA @Comgrow", - "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 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 @Creality", - "Creality/Generic ABS @Creality Ender-5Max-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 @Creality", - "Creality/Generic ASA @Creality Ender-5Max-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 @Creality Hi-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 @Creality Ender-5Max-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 @Creality", - "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 @Creality", - "Creality/Generic PETG @Creality Ender-5Max-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 @Creality Hi-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 @Creality", - "Creality/Generic PLA @Creality Ender-5Max-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 HF @Creality", - "Creality/Generic PLA High Speed @Creality Ender-3V3-all", - "Creality/Generic PLA High Speed @Creality Hi-all", - "Creality/Generic PLA High Speed @Creality K1-all", - "Creality/Generic PLA High Speed @Creality K2-all", - "Creality/Generic PLA Matte @Creality Ender-3V3-all", - "Creality/Generic PLA Matte @Creality Hi-all", - "Creality/Generic PLA Matte @Creality K1-all", - "Creality/Generic PLA Matte @Creality K2-all", - "Creality/Generic PLA Silk @Creality Ender-3V3-all", - "Creality/Generic PLA Silk @Creality Hi-all", - "Creality/Generic PLA Silk @Creality K1-all", - "Creality/Generic PLA Silk @Creality K2-all", - "Creality/Generic PLA Wood @Creality Hi-all", - "Creality/Generic PLA-CF @Creality", - "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 Speed PLA @Creality HF", - "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 @Creality", - "Creality/Generic TPU @Creality Ender-5Max-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 @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABS @base", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABS-A100 @base", - "Cubicon/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon ABSk @base", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PA-CF @base", - "Cubicon/Cubicon PC @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PC @base", - "Cubicon/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PETG @base", - "Cubicon/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA @base", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLA+ @base", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle", - "Cubicon/Cubicon PLAi21 @base", - "DeltaMaker/DeltaMaker Brand PLA", - "DeltaMaker/Generic PETG @DeltaMaker", - "DeltaMaker/Generic PLA @DeltaMaker", - "DeltaMaker/Generic TPU @DeltaMaker", - "Dremel/Generic PLA @Dremel 3D20 all", - "Dremel/Generic PLA @Dremel 3D40 all", - "Dremel/Generic PLA @Dremel 3D45 all", - "Elegoo/Generic ABS-CF @Elegoo Centauri", - "Elegoo/Generic ASA-CF @Elegoo Centauri", - "Elegoo/Generic PA6-CF @Elegoo", - "Elegoo/Generic PC-CF @Elegoo", - "Elegoo/Generic PET-CF @Elegoo Centauri", - "Elegoo/Generic PETG PRO @Elegoo", - "Elegoo/Generic PETG-CF @Elegoo Centauri", - "Elegoo/Generic PLA Matte @Elegoo", - "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/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 @FLSun S1", - "FLSun/Generic PLA @FLSun T1", - "FLSun/Generic PLA-CF @FLSun", - "FLSun/Generic PVA @FLSun", - "FLSun/Generic TPU @FLSun", - "Flashforge/Flashforge ABS", - "Flashforge/Flashforge ABS Basic", - "Flashforge/Flashforge ABS Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge ABS Basic @FF C5", - "Flashforge/Flashforge ABS Basic @FF C5P", - "Flashforge/Flashforge ABS Basic @FF G4", - "Flashforge/Flashforge ABS Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4 HF", - "Flashforge/Flashforge ABS Basic @FF G4P", - "Flashforge/Flashforge ABS Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge ABS Basic @FF G4P HF", - "Flashforge/Flashforge ABS-CF @FF G4", - "Flashforge/Flashforge ABS-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge ABS-CF @FF G4P", - "Flashforge/Flashforge ABS-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ABS-GF @FF C5", - "Flashforge/Flashforge ABS-GF @FF C5P", - "Flashforge/Flashforge ASA Basic", - "Flashforge/Flashforge ASA Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge ASA Basic @FF C5", - "Flashforge/Flashforge ASA Basic @FF C5P", - "Flashforge/Flashforge ASA Basic @FF G4", - "Flashforge/Flashforge ASA Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4 HF", - "Flashforge/Flashforge ASA Basic @FF G4P", - "Flashforge/Flashforge ASA Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge ASA Basic @FF G4P HF", - "Flashforge/Flashforge ASA-CF", - "Flashforge/Flashforge ASA-CF @FF C5", - "Flashforge/Flashforge ASA-CF @FF C5P", - "Flashforge/Flashforge ASA-CF @FF G4", - "Flashforge/Flashforge ASA-CF @FF G4P", - "Flashforge/Flashforge ASA-GF @FF C5", - "Flashforge/Flashforge ASA-GF @FF C5P", - "Flashforge/Flashforge HIPS @FF C5", - "Flashforge/Flashforge HIPS @FF C5P", - "Flashforge/Flashforge HIPS @FF G4", - "Flashforge/Flashforge HIPS @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4 0.6 nozzle", - "Flashforge/Flashforge HIPS @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4 HF", - "Flashforge/Flashforge HIPS @FF G4P", - "Flashforge/Flashforge HIPS @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HIPS @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HIPS @FF G4P HF", - "Flashforge/Flashforge HS PETG", - "Flashforge/Flashforge HS PETG @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X", - "Flashforge/Flashforge HS PETG @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge HS PETG @FF C5", - "Flashforge/Flashforge HS PETG @FF C5P", - "Flashforge/Flashforge HS PETG @FF G4", - "Flashforge/Flashforge HS PETG @FF G4 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4 HF", - "Flashforge/Flashforge HS PETG @FF G4P", - "Flashforge/Flashforge HS PETG @FF G4P 0.25 nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HS PETG @FF G4P HF", - "Flashforge/Flashforge HS PLA", - "Flashforge/Flashforge HS PLA @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X", - "Flashforge/Flashforge HS PLA @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge HS PLA @FF C5", - "Flashforge/Flashforge HS PLA @FF C5P", - "Flashforge/Flashforge HS PLA @FF G4", - "Flashforge/Flashforge HS PLA @FF G4 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4 HF", - "Flashforge/Flashforge HS PLA @FF G4P", - "Flashforge/Flashforge HS PLA @FF G4P 0.25 nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PLA @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA @FF G4P HF", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4 HF", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti @FF G4P HF", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", - "Flashforge/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PA @FF G4", - "Flashforge/Flashforge PA @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PA @FF G4 HF", - "Flashforge/Flashforge PA @FF G4P", - "Flashforge/Flashforge PA @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PA @FF G4P HF", - "Flashforge/Flashforge PA-CF @FF C5", - "Flashforge/Flashforge PA-CF @FF C5P", - "Flashforge/Flashforge PA-CF @FF G4", - "Flashforge/Flashforge PA-CF @FF G4P", - "Flashforge/Flashforge PA12-CF", - "Flashforge/Flashforge PA6-CF", - "Flashforge/Flashforge PA66-CF", - "Flashforge/Flashforge PC @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PC @FF G4 0.6 nozzle", - "Flashforge/Flashforge PC @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PC @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PC @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PC @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PET-CF", - "Flashforge/Flashforge PET-CF @FF C5", - "Flashforge/Flashforge PET-CF @FF C5P", - "Flashforge/Flashforge PETG", - "Flashforge/Flashforge PETG Basic", - "Flashforge/Flashforge PETG Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Pro", - "Flashforge/Flashforge PETG Pro @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG Pro @FF C5", - "Flashforge/Flashforge PETG Pro @FF C5P", - "Flashforge/Flashforge PETG Pro @FF G4", - "Flashforge/Flashforge PETG Pro @FF G4 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4 HF", - "Flashforge/Flashforge PETG Pro @FF G4P", - "Flashforge/Flashforge PETG Pro @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PETG Pro @FF G4P HF", - "Flashforge/Flashforge PETG Transparent", - "Flashforge/Flashforge PETG Transparent @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG Transparent @FF C5", - "Flashforge/Flashforge PETG Transparent @FF C5P", - "Flashforge/Flashforge PETG Transparent @FF G4", - "Flashforge/Flashforge PETG Transparent @FF G4 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4 HF", - "Flashforge/Flashforge PETG Transparent @FF G4P", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PETG Transparent @FF G4P HF", - "Flashforge/Flashforge PETG-CF", - "Flashforge/Flashforge PETG-CF @FF AD5X", - "Flashforge/Flashforge PETG-CF @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PETG-CF @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PETG-CF @FF C5", - "Flashforge/Flashforge PETG-CF @FF C5P", - "Flashforge/Flashforge PETG-CF @FF G4", - "Flashforge/Flashforge PETG-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PETG-CF @FF G4P", - "Flashforge/Flashforge PETG-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA", - "Flashforge/Flashforge PLA Basic", - "Flashforge/Flashforge PLA Basic @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Basic @FF C5", - "Flashforge/Flashforge PLA Basic @FF C5P", - "Flashforge/Flashforge PLA Basic @FF G4", - "Flashforge/Flashforge PLA Basic @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4 HF", - "Flashforge/Flashforge PLA Basic @FF G4P", - "Flashforge/Flashforge PLA Basic @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Basic @FF G4P HF", - "Flashforge/Flashforge PLA Color Change", - "Flashforge/Flashforge PLA Color Change @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Color Change @FF C5", - "Flashforge/Flashforge PLA Color Change @FF C5P", - "Flashforge/Flashforge PLA Color Change @FF G4", - "Flashforge/Flashforge PLA Color Change @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4 HF", - "Flashforge/Flashforge PLA Color Change @FF G4P", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Color Change @FF G4P HF", - "Flashforge/Flashforge PLA Galaxy", - "Flashforge/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF C5", - "Flashforge/Flashforge PLA Galaxy @FF C5P", - "Flashforge/Flashforge PLA Galaxy @FF G4", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4 HF", - "Flashforge/Flashforge PLA Galaxy @FF G4P", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Galaxy @FF G4P HF", - "Flashforge/Flashforge PLA Luminous", - "Flashforge/Flashforge PLA Luminous @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Luminous @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Luminous @FF C5", - "Flashforge/Flashforge PLA Luminous @FF C5P", - "Flashforge/Flashforge PLA Luminous @FF G4", - "Flashforge/Flashforge PLA Luminous @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4 HF", - "Flashforge/Flashforge PLA Luminous @FF G4P", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Luminous @FF G4P HF", - "Flashforge/Flashforge PLA Matte", - "Flashforge/Flashforge PLA Matte @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Matte @FF C5", - "Flashforge/Flashforge PLA Matte @FF C5P", - "Flashforge/Flashforge PLA Matte @FF G4", - "Flashforge/Flashforge PLA Matte @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4 HF", - "Flashforge/Flashforge PLA Matte @FF G4P", - "Flashforge/Flashforge PLA Matte @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Matte @FF G4P HF", - "Flashforge/Flashforge PLA Metal", - "Flashforge/Flashforge PLA Metal @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Metal @FF C5", - "Flashforge/Flashforge PLA Metal @FF C5P", - "Flashforge/Flashforge PLA Metal @FF G4", - "Flashforge/Flashforge PLA Metal @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4 HF", - "Flashforge/Flashforge PLA Metal @FF G4P", - "Flashforge/Flashforge PLA Metal @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Metal @FF G4P HF", - "Flashforge/Flashforge PLA Pro", - "Flashforge/Flashforge PLA Pro @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Pro @FF C5", - "Flashforge/Flashforge PLA Pro @FF C5P", - "Flashforge/Flashforge PLA Pro @FF G4", - "Flashforge/Flashforge PLA Pro @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4 HF", - "Flashforge/Flashforge PLA Pro @FF G4P", - "Flashforge/Flashforge PLA Pro @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Pro @FF G4P HF", - "Flashforge/Flashforge PLA Silk", - "Flashforge/Flashforge PLA Silk @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Silk @FF C5", - "Flashforge/Flashforge PLA Silk @FF C5P", - "Flashforge/Flashforge PLA Silk @FF G4", - "Flashforge/Flashforge PLA Silk @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4 HF", - "Flashforge/Flashforge PLA Silk @FF G4P", - "Flashforge/Flashforge PLA Silk @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PLA Silk @FF G4P HF", - "Flashforge/Flashforge PLA Sparkle", - "Flashforge/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4 HF", - "Flashforge/Flashforge PLA Sparkle @FF G4P", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.25 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PLA Sparkle @FF G4P HF", - "Flashforge/Flashforge PLA-CF", - "Flashforge/Flashforge PLA-CF @FF AD5X", - "Flashforge/Flashforge PLA-CF @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge PLA-CF @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge PLA-CF @FF C5", - "Flashforge/Flashforge PLA-CF @FF C5P", - "Flashforge/Flashforge PLA-CF @FF G4", - "Flashforge/Flashforge PLA-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PLA-CF @FF G4P", - "Flashforge/Flashforge PLA-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PPA-CF", - "Flashforge/Flashforge PPA-CF @FF C5", - "Flashforge/Flashforge PPA-CF @FF C5P", - "Flashforge/Flashforge PPA-GF", - "Flashforge/Flashforge PPS @FF G4", - "Flashforge/Flashforge PPS @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge PPS @FF G4 0.6 nozzle", - "Flashforge/Flashforge PPS @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge PPS @FF G4P", - "Flashforge/Flashforge PPS @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge PPS @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PPS @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge PPS-CF", - "Flashforge/Flashforge PPS-CF @FF C5", - "Flashforge/Flashforge PPS-CF @FF C5P", - "Flashforge/Flashforge PPS-CF @FF G4", - "Flashforge/Flashforge PPS-CF @FF G4 0.6 nozzle", - "Flashforge/Flashforge PPS-CF @FF G4P", - "Flashforge/Flashforge PPS-CF @FF G4P 0.6 nozzle", - "Flashforge/Flashforge PVA @FF C5", - "Flashforge/Flashforge PVA @FF C5P", - "Flashforge/Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4 0.6 nozzle", - "Flashforge/Flashforge TPU 65D @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.6 nozzle", - "Flashforge/Flashforge TPU 65D @FF G4P 0.8 HF nozzle", - "Flashforge/Flashforge TPU 95A", - "Flashforge/Flashforge TPU 95A @FF AD5X", - "Flashforge/Flashforge TPU 95A @FF AD5X 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF AD5X 0.8 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4", - "Flashforge/Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4 0.8 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P", - "Flashforge/Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P 0.6 nozzle", - "Flashforge/Flashforge TPU 95A @FF G4P 0.8 HF nozzle", - "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 NexPA-CF25", - "Flashforge/FusRock PAHT @FF G4 0.6 HF nozzle", - "Flashforge/FusRock PAHT @FF G4 0.6 nozzle", - "Flashforge/FusRock PAHT @FF G4 0.8 HF nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.6 HF nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.6 nozzle", - "Flashforge/FusRock PAHT @FF G4P 0.8 HF nozzle", - "Flashforge/FusRock PAHT-CF", - "Flashforge/FusRock PAHT-CF @FF C5", - "Flashforge/FusRock PAHT-CF @FF C5P", - "Flashforge/FusRock PAHT-CF @FF G4", - "Flashforge/FusRock PAHT-CF @FF G4 0.6 nozzle", - "Flashforge/FusRock PAHT-CF @FF G4P", - "Flashforge/FusRock PAHT-CF @FF G4P 0.6 nozzle", - "Flashforge/FusRock PAHT-CF @G3U 0.6 Nozzle", - "Flashforge/FusRock PAHT-GF", - "Flashforge/FusRock PET @FF G4P 0.8 HF nozzle", - "Flashforge/FusRock PET-CF", - "Flashforge/FusRock PET-CF @FF G4", - "Flashforge/FusRock PET-CF @FF G4 0.6 nozzle", - "Flashforge/FusRock PET-CF @FF G4P", - "Flashforge/FusRock PET-CF @FF G4P 0.6 nozzle", - "Flashforge/FusRock PET-CF @G3U 0.6 Nozzle", - "Flashforge/FusRock PET-GF", - "Flashforge/FusRock S-Multi", - "Flashforge/FusRock S-Multi @FF C5", - "Flashforge/FusRock S-Multi @FF C5P", - "Flashforge/FusRock S-Multi @G3U 0.6 Nozzle", - "Flashforge/FusRock S-PAHT", - "Flashforge/FusRock S-PAHT @FF C5", - "Flashforge/FusRock S-PAHT @FF C5P", - "Flashforge/FusRock S-PAHT @G3U 0.6 Nozzle", - "Flashforge/Generic ABS @FF AD5M 0.25 Nozzle", - "Flashforge/Generic ABS @Flashforge", - "Flashforge/Generic ABS @Flashforge AD4", - "Flashforge/Generic ABS @Flashforge G3U", - "Flashforge/Generic ABS @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic ASA @FF AD5M 0.25 Nozzle", - "Flashforge/Generic ASA @Flashforge", - "Flashforge/Generic ASA @Flashforge AD4", - "Flashforge/Generic ASA @Flashforge G3U", - "Flashforge/Generic ASA @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic HIPS @Flashforge", - "Flashforge/Generic HIPS @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic HS PLA @FF AD5M 0.25 Nozzle", - "Flashforge/Generic HS PLA @Flashforge", - "Flashforge/Generic PET @FF G4", - "Flashforge/Generic PET @FF G4 0.6 HF nozzle", - "Flashforge/Generic PET @FF G4 0.6 nozzle", - "Flashforge/Generic PET @FF G4 0.8 HF nozzle", - "Flashforge/Generic PET @FF G4P", - "Flashforge/Generic PET @FF G4P 0.6 HF nozzle", - "Flashforge/Generic PET @FF G4P 0.6 nozzle", - "Flashforge/Generic PET @FF G4P 0.8 HF nozzle", - "Flashforge/Generic PETG @FF AD5M 0.25 Nozzle", - "Flashforge/Generic PETG @Flashforge", - "Flashforge/Generic PETG @Flashforge AD4", - "Flashforge/Generic PETG @Flashforge Artemis", - "Flashforge/Generic PETG @Flashforge G3U", - "Flashforge/Generic PETG @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PETG @Flashforge G3U 0.8 Nozzle", - "Flashforge/Generic PETG-CF @Flashforge G3U", - "Flashforge/Generic PETG-CF @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PETG-CF @Flashforge G3U 0.8 Nozzle", - "Flashforge/Generic PETG-CF10 @Flashforge", - "Flashforge/Generic PETG-CF10 @Flashforge AD4", - "Flashforge/Generic PLA @Flashforge", - "Flashforge/Generic PLA @Flashforge AD4", - "Flashforge/Generic PLA @Flashforge G3U", - "Flashforge/Generic PLA High Speed @Flashforge AD4", - "Flashforge/Generic PLA Silk @Flashforge AD4", - "Flashforge/Generic PLA-CF @Flashforge G3U", - "Flashforge/Generic PLA-CF @Flashforge G3U 0.6 Nozzle", - "Flashforge/Generic PLA-CF @Flashforge G3U 0.8 Nozzle", - "Flashforge/Generic PLA-CF10 @Flashforge", - "Flashforge/Generic PLA-CF10 @Flashforge AD4", - "Flashforge/Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "Flashforge/Generic PLA-Silk @Flashforge", - "Flashforge/Generic PVA @Flashforge", - "Flashforge/Generic TPU 85A @FF AD5X", - "Flashforge/Generic TPU 85A @FF AD5X 0.6 nozzle", - "Flashforge/Generic TPU 85A @FF AD5X 0.8 nozzle", - "Flashforge/Generic TPU @Flashforge", - "Flashforge/Generic TPU @Flashforge AD4", - "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", - "Flashforge/Polymaker CoPA", - "Flashforge/Polymaker CoPA @FF G4 0.6 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4 0.6 nozzle", - "Flashforge/Polymaker CoPA @FF G4 0.8 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.6 HF nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.6 nozzle", - "Flashforge/Polymaker CoPA @FF G4P 0.8 HF nozzle", - "Flashforge/Polymaker S1", - "FlyingBear/FlyingBear ABS @Ghost7", - "FlyingBear/FlyingBear ABS @S1", - "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/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/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", - "Ginger Additive/Generic PETG @Ginger", - "Ginger Additive/Generic PLA @Ginger", - "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/InfiMech ABS @EX", - "InfiMech/InfiMech ABS @EX+APS", - "InfiMech/InfiMech ABS @HSN", - "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", - "MagicMaker/Generic PEEK @MM", - "OrcaArena/Generic PA @OrcaArena", - "OrcaArena/Generic PA-CF @OrcaArena", - "OrcaArena/Generic TPU @OrcaArena", - "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 BVOH @System", - "OrcaFilamentLibrary/Generic CoPE @System", - "OrcaFilamentLibrary/Generic EVA @System", - "OrcaFilamentLibrary/Generic HIPS @System", - "OrcaFilamentLibrary/Generic PA @System", - "OrcaFilamentLibrary/Generic PA-CF @System", - "OrcaFilamentLibrary/Generic PC @System", - "OrcaFilamentLibrary/Generic PCTG @System", - "OrcaFilamentLibrary/Generic PE @System", - "OrcaFilamentLibrary/Generic PETG @System", - "OrcaFilamentLibrary/Generic PHA @System", - "OrcaFilamentLibrary/Generic PLA @System", - "OrcaFilamentLibrary/Generic PLA High Speed @System", - "OrcaFilamentLibrary/Generic PLA Silk @System", - "OrcaFilamentLibrary/Generic PLA-CF @System", - "OrcaFilamentLibrary/Generic PP @System", - "OrcaFilamentLibrary/Generic PPA-CF @System", - "OrcaFilamentLibrary/Generic PPA-GF @System", - "OrcaFilamentLibrary/Generic PVA @System", - "OrcaFilamentLibrary/Generic SBS @System", - "OrcaFilamentLibrary/Generic TPU @System", - "OrcaFilamentLibrary/PolyLite PLA @System", - "OrcaFilamentLibrary/PolyTerra Dual PLA @System", - "OrcaFilamentLibrary/eSUN ePLA-LW @System", - "Peopoly/Generic ABS @Peopoly", - "Peopoly/Generic PETG @Peopoly", - "Peopoly/Generic PLA @Peopoly", - "Peopoly/Peopoly Lancer ABS-GF", - "Peopoly/Peopoly Lancer PET-CF", - "Peopoly/Peopoly Lancer PETG-C", - "Peopoly/Peopoly Lancer PLA-C", - "Prusa/Generic ABS @Prusa CORE One", - "Prusa/Generic ABS @Prusa CORE One 0.6", - "Prusa/Generic ABS @Prusa CORE One 0.8", - "Prusa/Generic ABS @Prusa CORE One HF 0.4", - "Prusa/Generic ABS @Prusa CORE One HF 0.5", - "Prusa/Generic ABS @Prusa CORE One HF 0.6", - "Prusa/Generic ABS @Prusa CORE One HF 0.8", - "Prusa/Generic ABS @Prusa MK3.5", - "Prusa/Generic ABS @Prusa MK3.5 0.25", - "Prusa/Generic ABS @Prusa MK3.5 0.6", - "Prusa/Generic ABS @Prusa MK3.5 0.8", - "Prusa/Generic ABS @Prusa MK4S", - "Prusa/Generic ABS @Prusa MK4S 0.6", - "Prusa/Generic ABS @Prusa MK4S 0.8", - "Prusa/Generic ABS @Prusa MK4S HF0.4", - "Prusa/Generic ABS @Prusa MK4S HF0.5", - "Prusa/Generic ABS @Prusa MK4S HF0.6", - "Prusa/Generic ABS @Prusa MK4S HF0.8", - "Prusa/Generic ABS HF @Prusa MK3.5", - "Prusa/Generic ABS HF @Prusa MK3.5 0.6", - "Prusa/Generic ABS HF @Prusa MK3.5 0.8", - "Prusa/Generic ASA @Prusa", - "Prusa/Generic ASA @Prusa CORE One", - "Prusa/Generic ASA @Prusa CORE One 0.6", - "Prusa/Generic ASA @Prusa CORE One 0.8", - "Prusa/Generic ASA @Prusa CORE One HF 0.4", - "Prusa/Generic ASA @Prusa CORE One HF 0.5", - "Prusa/Generic ASA @Prusa CORE One HF 0.6", - "Prusa/Generic ASA @Prusa CORE One HF 0.8", - "Prusa/Generic ASA @Prusa MINIIS", - "Prusa/Generic ASA @Prusa MINIIS 0.25", - "Prusa/Generic ASA @Prusa MINIIS 0.6", - "Prusa/Generic ASA @Prusa MINIIS 0.8", - "Prusa/Generic ASA @Prusa MK3.5", - "Prusa/Generic ASA @Prusa MK3.5 0.25", - "Prusa/Generic ASA @Prusa MK3.5 0.6", - "Prusa/Generic ASA @Prusa MK3.5 0.8", - "Prusa/Generic ASA @Prusa MK4", - "Prusa/Generic ASA @Prusa MK4S", - "Prusa/Generic ASA @Prusa MK4S 0.6", - "Prusa/Generic ASA @Prusa MK4S 0.8", - "Prusa/Generic ASA @Prusa MK4S HF0.4", - "Prusa/Generic ASA @Prusa MK4S HF0.5", - "Prusa/Generic ASA @Prusa MK4S HF0.6", - "Prusa/Generic ASA @Prusa MK4S HF0.8", - "Prusa/Generic ASA HF @Prusa MK3.5", - "Prusa/Generic ASA HF @Prusa MK3.5 0.6", - "Prusa/Generic ASA HF @Prusa MK3.5 0.8", - "Prusa/Generic FLEX @Prusa XL", - "Prusa/Generic FLEX @Prusa XL 5T", - "Prusa/Generic PA @Prusa MK3.5", - "Prusa/Generic PA @Prusa MK3.5 0.25", - "Prusa/Generic PA @Prusa MK3.5 0.6", - "Prusa/Generic PA @Prusa MK3.5 0.8", - "Prusa/Generic PA-CF @Prusa MK3.5", - "Prusa/Generic PA-CF @Prusa MK3.5 0.25", - "Prusa/Generic PA-CF @Prusa MK3.5 0.6", - "Prusa/Generic PA-CF @Prusa MK3.5 0.8", - "Prusa/Generic PC @Prusa", - "Prusa/Generic PC @Prusa MINIIS", - "Prusa/Generic PC @Prusa MINIIS 0.25", - "Prusa/Generic PC @Prusa MINIIS 0.6", - "Prusa/Generic PC @Prusa MINIIS 0.8", - "Prusa/Generic PC @Prusa MK3.5", - "Prusa/Generic PC @Prusa MK3.5 0.25", - "Prusa/Generic PC @Prusa MK3.5 0.6", - "Prusa/Generic PC @Prusa MK3.5 0.8", - "Prusa/Generic PC HF @Prusa MK3.5", - "Prusa/Generic PC HF @Prusa MK3.5 0.6", - "Prusa/Generic PC HF @Prusa MK3.5 0.8", - "Prusa/Generic PETG @Prusa CORE One", - "Prusa/Generic PETG @Prusa CORE One 0.6", - "Prusa/Generic PETG @Prusa CORE One 0.8", - "Prusa/Generic PETG @Prusa CORE One HF 0.4", - "Prusa/Generic PETG @Prusa CORE One HF 0.5", - "Prusa/Generic PETG @Prusa CORE One HF 0.6", - "Prusa/Generic PETG @Prusa CORE One HF 0.8", - "Prusa/Generic PETG @Prusa MK3.5", - "Prusa/Generic PETG @Prusa MK3.5 0.25", - "Prusa/Generic PETG @Prusa MK3.5 0.6", - "Prusa/Generic PETG @Prusa MK3.5 0.8", - "Prusa/Generic PETG @Prusa MK4S", - "Prusa/Generic PETG @Prusa MK4S 0.6", - "Prusa/Generic PETG @Prusa MK4S 0.8", - "Prusa/Generic PETG @Prusa MK4S HF0.4", - "Prusa/Generic PETG @Prusa MK4S HF0.5", - "Prusa/Generic PETG @Prusa MK4S HF0.6", - "Prusa/Generic PETG @Prusa MK4S HF0.8", - "Prusa/Generic PETG HF @Prusa MK3.5", - "Prusa/Generic PETG HF @Prusa MK3.5 0.6", - "Prusa/Generic PETG HF @Prusa MK3.5 0.8", - "Prusa/Generic PLA @Prusa CORE One", - "Prusa/Generic PLA @Prusa CORE One 0.6", - "Prusa/Generic PLA @Prusa CORE One 0.8", - "Prusa/Generic PLA @Prusa CORE One HF 0.4", - "Prusa/Generic PLA @Prusa CORE One HF 0.5", - "Prusa/Generic PLA @Prusa CORE One HF 0.6", - "Prusa/Generic PLA @Prusa CORE One HF 0.8", - "Prusa/Generic PLA @Prusa MK3.5", - "Prusa/Generic PLA @Prusa MK3.5 0.25", - "Prusa/Generic PLA @Prusa MK3.5 0.6", - "Prusa/Generic PLA @Prusa MK3.5 0.8", - "Prusa/Generic PLA @Prusa MK4S", - "Prusa/Generic PLA @Prusa MK4S 0.6", - "Prusa/Generic PLA @Prusa MK4S 0.8", - "Prusa/Generic PLA @Prusa MK4S HF0.4", - "Prusa/Generic PLA @Prusa MK4S HF0.5", - "Prusa/Generic PLA @Prusa MK4S HF0.6", - "Prusa/Generic PLA @Prusa MK4S HF0.8", - "Prusa/Generic PLA HF @Prusa MK3.5", - "Prusa/Generic PLA HF @Prusa MK3.5 0.6", - "Prusa/Generic PLA HF @Prusa MK3.5 0.8", - "Prusa/Generic PLA Silk @Prusa CORE One", - "Prusa/Generic PLA Silk @Prusa CORE One 0.6", - "Prusa/Generic PLA Silk @Prusa CORE One 0.8", - "Prusa/Generic PLA Silk @Prusa MK4S", - "Prusa/Generic PLA Silk @Prusa MK4S 0.6", - "Prusa/Generic PLA Silk @Prusa MK4S 0.8", - "Prusa/Generic PLA-CF @Prusa MK3.5", - "Prusa/Generic PLA-CF @Prusa MK3.5 0.25", - "Prusa/Generic PLA-CF @Prusa MK3.5 0.6", - "Prusa/Generic PLA-CF @Prusa MK3.5 0.8", - "Prusa/Generic PVA @Prusa MK3.5", - "Prusa/Generic PVA @Prusa MK3.5 0.25", - "Prusa/Generic PVA @Prusa MK3.5 0.6", - "Prusa/Generic PVA @Prusa MK3.5 0.8", - "Prusa/Generic PVA HF @Prusa MK3.5", - "Prusa/Generic PVA HF @Prusa MK3.5 0.6", - "Prusa/Generic PVA HF @Prusa MK3.5 0.8", - "Prusa/Generic TPU @Prusa CORE One", - "Prusa/Generic TPU @Prusa CORE One 0.6", - "Prusa/Generic TPU @Prusa CORE One 0.8", - "Prusa/Generic TPU @Prusa MK3.5", - "Prusa/Generic TPU @Prusa MK4S", - "Prusa/Generic TPU @Prusa MK4S 0.6", - "Prusa/Generic TPU @Prusa MK4S 0.8", - "Prusa/Generic TPU HF @Prusa 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 ASA @XL", - "Prusa/Prusament ASA @XL 5T", - "Prusa/Prusament PA-CF @CORE One", - "Prusa/Prusament PA-CF @CORE One 0.6", - "Prusa/Prusament PA-CF @CORE One 0.8", - "Prusa/Prusament PA-CF @XL", - "Prusa/Prusament PA-CF @XL 5T", - "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 Blend @XL", - "Prusa/Prusament PC Blend @XL 5T", - "Prusa/Prusament PC-CF @CORE One", - "Prusa/Prusament PC-CF @CORE One 0.6", - "Prusa/Prusament PC-CF @CORE One 0.8", - "Prusa/Prusament PC-CF @XL", - "Prusa/Prusament PC-CF @XL 5T", - "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 PVB @XL", - "Prusa/Prusament PVB @XL 5T", - "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/Generic ABS @Qidi", - "Qidi/Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic ABS @Qidi X-Max 3 0.2 nozzle", - "Qidi/Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "Qidi/Generic ABS @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic ABS @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "Qidi/Generic ASA @Qidi", - "Qidi/Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic ASA @Qidi X-Max 3 0.2 nozzle", - "Qidi/Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "Qidi/Generic ASA @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic ASA @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "Qidi/Generic PA @Qidi", - "Qidi/Generic PA-CF @Qidi", - "Qidi/Generic PC @Qidi", - "Qidi/Generic PC @Qidi 0.2 nozzle", - "Qidi/Generic PC @Qidi 0.8 nozzle", - "Qidi/Generic PC @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic PC @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic PC @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic PC @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic PC @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PC @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PC @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PC @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic PETG @Qidi", - "Qidi/Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic PETG @Qidi X-Max 3 0.2 nozzle", - "Qidi/Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "Qidi/Generic PETG @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PETG @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "Qidi/Generic PETG-CF @Qidi", - "Qidi/Generic PLA @Qidi", - "Qidi/Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic PLA @Qidi X-Max 3 0.2 nozzle", - "Qidi/Generic PLA @Qidi X-Max 3 0.6 nozzle", - "Qidi/Generic PLA @Qidi X-Max 3 0.8 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 3 0.6 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "Qidi/Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "Qidi/Generic PLA @Qidi X-Smart 3 0.8 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic PLA Silk @Qidi", - "Qidi/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PLA+ @Qidi", - "Qidi/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "Qidi/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "Qidi/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic PLA+ @Qidi X-Max 3 0.2 nozzle", - "Qidi/Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "Qidi/Generic PLA+ @Qidi X-Max 3 0.8 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", - "Qidi/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", - "Qidi/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "Qidi/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", - "Qidi/Generic PLA-CF @Qidi", - "Qidi/Generic PVA @Qidi", - "Qidi/Generic TPU 95A @Qidi", - "Qidi/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "Qidi/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", - "Qidi/Generic TPU @Qidi", - "Qidi/Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "Qidi/Generic TPU @Qidi X-Plus 4 0.4 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 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/Generic ABS @RatRig", - "Ratrig/Generic ABS BigNozzle @RatRig", - "Ratrig/Generic ASA @RatRig", - "Ratrig/Generic ASA BigNozzle @RatRig", - "Ratrig/Generic PA @RatRig", - "Ratrig/Generic PA-CF @RatRig", - "Ratrig/Generic PC @RatRig", - "Ratrig/Generic PCTG @RatRig", - "Ratrig/Generic PCTG BigNozzle @RatRig", - "Ratrig/Generic PETG @RatRig", - "Ratrig/Generic PETG BigNozzle @RatRig", - "Ratrig/Generic PLA @RatRig", - "Ratrig/Generic PLA BigNozzle @RatRig", - "Ratrig/Generic PLA-CF @RatRig", - "Ratrig/Generic PVA @RatRig", - "Ratrig/Generic TPU @RatRig", - "Ratrig/Generic TPU BigNozzle @RatRig", - "Ratrig/RatRig PunkFil ABS", - "Ratrig/RatRig PunkFil PETG", - "Ratrig/RatRig PunkFil PETG CF", - "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 @SecKit", - "SeeMeCNC/SeeMeCNC ABS", - "SeeMeCNC/SeeMeCNC PA-CF", - "SeeMeCNC/SeeMeCNC PETG", - "SeeMeCNC/SeeMeCNC PETG-CF", - "SeeMeCNC/SeeMeCNC PLA", - "SeeMeCNC/SeeMeCNC TPU", - "Snapmaker/PolyLite Dual PLA @0.2 nozzle", - "Snapmaker/PolyLite J1 PLA", - "Snapmaker/PolyLite J1 PLA @0.2 nozzle", - "Snapmaker/PolyTerra Dual PLA @0.2 nozzle", - "Snapmaker/PolyTerra J1 PLA", - "Snapmaker/PolyTerra J1 PLA @0.2 nozzle", - "Snapmaker/Polymaker General PLA Family @U1", - "Snapmaker/Polymaker Silk PLA Family @U1", - "Snapmaker/Polymaker Tough PLA Family @U1", - "Snapmaker/Snapmaker ABS Benchy @U1", - "Snapmaker/Snapmaker Dual ABS Benchy", - "Snapmaker/Snapmaker Dual TPE", - "Snapmaker/Snapmaker Dual TPU High-Flow", - "Snapmaker/Snapmaker J1 ABS Benchy", - "Snapmaker/Snapmaker J1 TPE", - "Snapmaker/Snapmaker J1 TPU High-Flow", - "Snapmaker/Snapmaker PET @Dual", - "Snapmaker/Snapmaker PLA Full Spectrum @U1 0.4 nozzle", - "Snapmaker/Snapmaker PLA Matte @U1", - "Snapmaker/Snapmaker PLA Silk @U1", - "Snapmaker/Snapmaker PLA Silk @U1 0.2 nozzle", - "Snapmaker/Snapmaker PLA Silk @U1 0.6 nozzle", - "Snapmaker/Snapmaker PLA Silk @U1 0.8 nozzle", - "Snapmaker/Snapmaker PLA Wood @U1 0.4 nozzle", - "Snapmaker/Snapmaker PLA Wood @U1 0.6 nozzle", - "Snapmaker/Snapmaker PLA Wood @U1 0.8 nozzle", - "Snapmaker/Snapmaker PLA-CF @U1 0.4 nozzle", - "Snapmaker/Snapmaker PLA-CF @U1 0.6 nozzle", - "Snapmaker/Snapmaker PLA-CF @U1 0.8 nozzle", - "Snapmaker/Snapmaker TPE", - "Snapmaker/Snapmaker TPE @U1", - "Snapmaker/Snapmaker TPU 90A @U1", - "Snapmaker/Snapmaker TPU 90A @U1 0.6 nozzle", - "Snapmaker/Snapmaker TPU 90A @U1 0.8 nozzle", - "Snapmaker/Snapmaker TPU 95A HF @U1", - "Snapmaker/Snapmaker TPU 95A HF @U1 0.6 nozzle", - "Snapmaker/Snapmaker TPU 95A HF @U1 0.8 nozzle", - "Snapmaker/Snapmaker TPU High-Flow @U1", - "Sovol/Generic PLA Silk @Sovol SV08 MAX", - "Sovol/Polymaker PETG @Sovol SV08 MAX", - "Sovol/SUNLU PETG @Sovol SV08 MAX", - "Sovol/Sovol Zero PETG HS Nozzle", - "Sovol/Sovol Zero PLA Basic HS Nozzle", - "Sovol/Sovol Zero PLA Silk HS Nozzle", - "Tiertime/Generic ABS @Tiertime", - "Tiertime/Generic ABS @Tiertime 300HS", - "Tiertime/Generic ASA @Tiertime", - "Tiertime/Generic ASA @Tiertime 300HS", - "Tiertime/Generic BVOH @Tiertime", - "Tiertime/Generic BVOH @Tiertime 300HS", - "Tiertime/Generic EVA @Tiertime", - "Tiertime/Generic EVA @Tiertime 300HS", - "Tiertime/Generic HIPS @Tiertime", - "Tiertime/Generic HIPS @Tiertime 300HS", - "Tiertime/Generic PA @Tiertime", - "Tiertime/Generic PA @Tiertime 300HS", - "Tiertime/Generic PA-CF @Tiertime", - "Tiertime/Generic PA-CF @Tiertime 300HS", - "Tiertime/Generic PC @Tiertime", - "Tiertime/Generic PC @Tiertime 300HS", - "Tiertime/Generic PCTG @Tiertime", - "Tiertime/Generic PCTG @Tiertime 300HS", - "Tiertime/Generic PE @Tiertime", - "Tiertime/Generic PE @Tiertime 300HS", - "Tiertime/Generic PE-CF @Tiertime", - "Tiertime/Generic PE-CF @Tiertime 300HS", - "Tiertime/Generic PETG @Tiertime", - "Tiertime/Generic PETG @Tiertime 300HS", - "Tiertime/Generic PETG-CF @Tiertime", - "Tiertime/Generic PETG-CF @Tiertime 300HS", - "Tiertime/Generic PHA @Tiertime", - "Tiertime/Generic PHA @Tiertime 300HS", - "Tiertime/Generic PLA @Tiertime", - "Tiertime/Generic PLA @Tiertime 300HS", - "Tiertime/Generic PLA High Speed @Tiertime", - "Tiertime/Generic PLA High Speed @Tiertime 300HS", - "Tiertime/Generic PLA Silk @Tiertime", - "Tiertime/Generic PLA Silk @Tiertime 300HS", - "Tiertime/Generic PLA-CF @Tiertime", - "Tiertime/Generic PLA-CF @Tiertime 300HS", - "Tiertime/Generic PP @Tiertime", - "Tiertime/Generic PP @Tiertime 300HS", - "Tiertime/Generic PP-CF @Tiertime", - "Tiertime/Generic PP-CF @Tiertime 300HS", - "Tiertime/Generic PP-GF @Tiertime", - "Tiertime/Generic PP-GF @Tiertime 300HS", - "Tiertime/Generic PPA-CF @Tiertime", - "Tiertime/Generic PPA-CF @Tiertime 300HS", - "Tiertime/Generic PPA-GF @Tiertime", - "Tiertime/Generic PPA-GF @Tiertime 300HS", - "Tiertime/Generic PPS @Tiertime", - "Tiertime/Generic PPS @Tiertime 300HS", - "Tiertime/Generic PPS-CF @Tiertime", - "Tiertime/Generic PPS-CF @Tiertime 300HS", - "Tiertime/Generic PVA @Tiertime", - "Tiertime/Generic PVA @Tiertime 300HS", - "Tiertime/Generic SBS @Tiertime", - "Tiertime/Generic SBS @Tiertime 300HS", - "Tiertime/Generic TPU @Tiertime", - "Tiertime/Generic TPU @Tiertime 300HS", - "Tiertime/Tiertime ABS", - "Tiertime/Tiertime ABS@300HS", - "Tiertime/Tiertime ASA", - "Tiertime/Tiertime ASA@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/Generic HS PLA @TwoTrees SK1", - "TwoTrees/Generic TPU 95A @TwoTrees 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/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 @Vzbot", - "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 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 rPETG", - "re3D/re3D rPETG @0.8 nozzle", - "re3D/re3D rPETG @1.75 nozzle", - "re3D/re3D rPP", - "re3D/re3D rPP @0.8 nozzle", - "re3D/re3D rPP @1.75 nozzle" - ], - "triple_exceptions": [], - "triples": { - "OF02UAVh": [ - [ - "Creality", - "PLA", - "Soleyin Ultra PLA" - ] - ], - "OF03RK6r": [ - [ - "BETA", - "PLA", - "BETA PLA Metal" - ] - ], - "OF0AquDh": [ - [ - "FusRock", - "PA", - "FusRock S-Multi" - ] - ], - "OF0EYBWQ": [ - [ - "addnorth", - "PETG", - "addnorth PETG Flame v0" - ] - ], - "OF0FfcAG": [ - [ - "Anycubic", - "TPU", - "Anycubic TPU for ACE" - ] - ], - "OF0NgY1y": [ - [ - "COEX 3D", - "PA-CF", - "COEX NYLEX PA6-CF" - ] - ], - "OF0R5Wc7": [ - [ - "Artillery", - "PLA Tough", - "Artillery PLA Tough" - ] - ], - "OF0UJcb6": [ - [ - "Polymaker", - "PETG", - "PolyLite PETG" - ] - ], - "OF0VpkBM": [ - [ - "Polymaker", - "PETG", - "PolyLite PETG Translucent" - ] - ], - "OF0Vtzaw": [ - [ - "FilAr", - "PETG", - "FilAr PETG Amarillo Radiante" - ] - ], - "OF0b7M1z": [ - [ - "SeeMeCNC", - "PA-CF", - "SeeMeCNC PA-CF" - ] - ], - "OF0c7mnL": [ - [ - "InfiMech", - "ABS", - "InfiMech ABS" - ] - ], - "OF0gGRWk": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Glow" - ] - ], - "OF0h7ERL": [ - [ - "Elegoo", - "PA", - "Elegoo PAHT" - ] - ], - "OF0kCNDK": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Luminous" - ] - ], - "OF0omtEb": [ - [ - "Polymaker", - "ASA", - "Fiberon ASA-CF08" - ] - ], - "OF0pzFLc": [ - [ - "COEX 3D", - "PLA", - "COEX PLA+Silk" - ] - ], - "OF0w7OpJ": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido 0.8 nozzle" - ] - ], - "OF0wBGNx": [ - [ - "Bambu Lab", - "ASA-CF", - "Bambu ASA-CF" - ] - ], - "OF0wz84w": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido 0.6 nozzle" - ] - ], - "OF0yFLkY": [ - [ - "Anycubic", - "ASA", - "Anycubic ASA" - ] - ], - "OF112FvY": [ - [ - "Generic", - "PETG", - "Generic PETG Basic" - ] - ], - "OF1ID4N1": [ - [ - "addnorth", - "PA6", - "addnorth PA6 Addlantis" - ] - ], - "OF1N1qMK": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA UV Shift" - ] - ], - "OF1Pke8t": [ - [ - "Overture", - "PLA", - "Overture Easy PLA" - ] - ], - "OF1UNk9P": [ - [ - "Generic", - "PP", - "Generic PP" - ] - ], - "OF1W7c76": [ - [ - "QIDI", - "ASA-CF", - "QIDI ASA-CF" - ] - ], - "OF1d7c3A": [ - [ - "Snapmaker", - "ASA", - "Snapmaker ASA" - ] - ], - "OF1dpPrW": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA" - ] - ], - "OF1hznGB": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA PRO" - ] - ], - "OF223rZv": [ - [ - "Anycubic", - "ABS", - "Anycubic ABS" - ] - ], - "OF2EB9Iz": [ - [ - "Volumic", - "ASA", - "Volumic ASA Ultra" - ] - ], - "OF2EK9F1": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Violeta" - ] - ], - "OF2GCW1l": [ - [ - "SUNLU", - "PETG", - "SUNLU PETG" - ] - ], - "OF2TQpOO": [ - [ - "QIDI", - "PLA", - "QIDI PLA Silk" - ] - ], - "OF2VFe4J": [ - [ - "Bambu Lab", - "PA-CF", - "Bambu PAHT-CF" - ] - ], - "OF2Z1nT5": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Imperial" - ] - ], - "OF2hfMcG": [ - [ - "Orca Arena", - "PLA-CF", - "Arena PLA-CF" - ] - ], - "OF2pj5l5": [ - [ - "Overture", - "PLA", - "Overture Super PLA+" - ] - ], - "OF2xccEe": [ - [ - "DREMC", - "ASA", - "DREMC ASA GF" - ] - ], - "OF30Ftju": [ - [ - "Elegoo", - "TPU", - "Elegoo Rapid TPU 95A" - ] - ], - "OF342jVN": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Tough+" - ] - ], - "OF3F63OE": [ - [ - "re3D", - "PETG", - "re3D PETG" - ] - ], - "OF3IKafc": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Matte" - ] - ], - "OF3OMgrI": [ - [ - "Creality", - "PLA", - "CR-Silk" - ] - ], - "OF3PDEw3": [ - [ - "BETA", - "PLA", - "BETA PLA High Speed" - ] - ], - "OF3WQaKK": [ - [ - "Creality", - "PETG", - "CR-PETG" - ] - ], - "OF3dJf4E": [ - [ - "Volumic", - "PLA", - "Volumic PLA Ultra (Performance)" - ] - ], - "OF3fwO8b": [ - [ - "FlyingBear", - "PLA", - "FlyingBear PLA Basic" - ] - ], - "OF3kBrdA": [ - [ - "eSUN", - "PETG", - "eSUN PETG" - ] - ], - "OF3msXEa": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker Dual PETG-CF" - ] - ], - "OF3ydJTT": [ - [ - "InfiMech", - "PLA", - "InfiMech PLA Hyper" - ] - ], - "OF43Raws": [ - [ - "Polymaker", - "PLA", - "PolyTerra J1 PLA" - ] - ], - "OF44ERDr": [ - [ - "Polymaker", - "PLA", - "Polymaker General PLA Family" - ] - ], - "OF44VYzK": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Francia" - ] - ], - "OF4APyxe": [ - [ - "Creality", - "PA-CF", - "Hyper PAHT-CF" - ] - ], - "OF4GM5qX": [ - [ - "Generic", - "ASA", - "Generic ASA BigNozzle" - ] - ], - "OF4KsW72": [ - [ - "FilAr", - "PLA", - "FilAr PLA" - ] - ], - "OF4Nhggz": [ - [ - "Artillery", - "PLA Basic+", - "Artillery PLA Basic+" - ] - ], - "OF4PKvem": [ - [ - "BETA", - "PLA", - "BETA PLA Fluorescence" - ] - ], - "OF4QZANi": [ - [ - "BETA", - "TPU", - "BETA TPU Matte" - ] - ], - "OF4RvVuU": [ - [ - "Bambu Lab", - "PPS-CF", - "Bambu PPS-CF" - ] - ], - "OF4S3To3": [ - [ - "QIDI", - "PETG", - "QIDI PETG Rapido" - ] - ], - "OF4WB37S": [ - [ - "Snapmaker", - "PETG", - "Snapmaker PETG" - ] - ], - "OF4XTfoI": [ - [ - "BETA", - "PETG", - "BETA PETG Marble" - ] - ], - "OF4f8vVp": [ - [ - "WonderMaker", - "PET-CF", - "WonderMaker PET-CF" - ] - ], - "OF4iWKrE": [ - [ - "QIDI", - "PETG-CF", - "QIDI PETG-CF" - ] - ], - "OF4nQ62r": [ - [ - "QIDI", - "PLA", - "QIDI PLA Basic" - ] - ], - "OF4ulo9Y": [ - [ - "WonderMaker", - "PVA", - "WonderMaker PVA" - ] - ], - "OF53eLVD": [ - [ - "Generic", - "ASA-CF", - "Generic ASA-CF" - ] - ], - "OF54B0S0": [ - [ - "Bambu Lab", - "PPA-CF", - "Bambu PPA-CF" - ] - ], - "OF54SvEe": [ - [ - "Prusa Polymers", - "PA11-CF", - "Prusament PA-CF" - ] - ], - "OF55jHAJ": [ - [ - "Generic", - "ABS", - "Generic ABS HF" - ] - ], - "OF5B9sUc": [ - [ - "Polymaker", - "PA-GF", - "Fiberon PA6-GF25" - ] - ], - "OF5BN24W": [ - [ - "Flashforge", - "PPA-GF", - "Flashforge PPA-GF" - ] - ], - "OF5BXhHF": [ - [ - "BETA", - "PLA", - "BETA PLA High Temp" - ] - ], - "OF5CgdDq": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA" - ] - ], - "OF5LAnla": [ - [ - "BETA", - "PLA", - "BETA PLA Gradient" - ] - ], - "OF5NqBfC": [ - [ - "Yumi", - "PETG", - "YUMI PETG" - ] - ], - "OF5P4jgA": [ - [ - "FilAr", - "PLA", - "FilAr PLA Dorado" - ] - ], - "OF5PtjTp": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Glow" - ] - ], - "OF5SJ3jz": [ - [ - "Flashforge", - "ABS", - "Flashforge ABS" - ] - ], - "OF5YVJXH": [ - [ - "Artillery", - "ASA", - "Artillery ASA" - ] - ], - "OF5c6nq3": [ - [ - "Generic", - "TPU-64D", - "Generic TPU-64D" - ] - ], - "OF5lGPup": [ - [ - "WonderMaker", - "PETG", - "WonderMaker PETG Basic" - ] - ], - "OF5nlfKY": [ - [ - "FilAr", - "PLA", - "FilAr PLA Oro" - ] - ], - "OF5oNRED": [ - [ - "Eryone", - "PP", - "Eryone PP" - ] - ], - "OF5oXk4M": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA Pro" - ] - ], - "OF5rnhjh": [ - [ - "FilAr", - "PETG", - "FilAr PETG" - ] - ], - "OF5tX6va": [ - [ - "Generic", - "TPU", - "Generic TPU BigNozzle" - ] - ], - "OF5umxxT": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Glow" - ] - ], - "OF5vgi2G": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Azul" - ] - ], - "OF65InrS": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU" - ] - ], - "OF66KUAN": [ - [ - "Polymaker", - "PLA", - "PolySonic PLA" - ] - ], - "OF6ATsCF": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker Dual PLA-CF" - ] - ], - "OF6H51Xx": [ - [ - "Polymaker", - "PETG", - "Polymaker PETG" - ] - ], - "OF6Ll8lK": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG Translucent" - ] - ], - "OF6MOPWx": [ - [ - "Generic", - "PET", - "Generic PET" - ] - ], - "OF6TuVAg": [ - [ - "Snapmaker", - "PVA", - "Snapmaker J1 PVA" - ] - ], - "OF6Yn69v": [ - [ - "BETA", - "TPU", - "BETA TPU 90A" - ] - ], - "OF6kj4jI": [ - [ - "iQ Materials", - "PACF Pro", - "Fiberthree PACF Pro P2" - ] - ], - "OF6qAuyi": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Matte" - ] - ], - "OF6qw3Wb": [ - [ - "BETA", - "PA-CF", - "BETA PAHT-CF" - ] - ], - "OF6rdQ6M": [ - [ - "Generic", - "PPS-CF", - "Generic PPS-CF" - ] - ], - "OF70zbGS": [ - [ - "Creality", - "PLA", - "Hyper L-W PLA" - ] - ], - "OF71b7qO": [ - [ - "addnorth", - "PLA", - "addnorth PLA E-PLA" - ] - ], - "OF72YYTd": [ - [ - "Snapmaker", - "ABS", - "Snapmaker ABS" - ] - ], - "OF74KeQR": [ - [ - "Generic", - "PHA", - "Generic PHA" - ] - ], - "OF79Fbo6": [ - [ - "Cubicon", - "PC", - "Cubicon PC" - ] - ], - "OF7H3VJM": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Marble" - ] - ], - "OF7OqDp3": [ - [ - "Tiertime", - "PLA-CF", - "Tiertime PLA-CF" - ] - ], - "OF7SliVn": [ - [ - "Polymaker", - "PLA", - "PolyLite J1 PLA" - ] - ], - "OF7c9fln": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Translucent" - ] - ], - "OF7lOgYF": [ - [ - "Generic", - "PETG", - "Generic PETG HF" - ] - ], - "OF7lwj52": [ - [ - "CoLiDo", - "PETG", - "CoLiDo PETG" - ] - ], - "OF7nBAd3": [ - [ - "Eryone", - "PLA Silk", - "Eryone Silk PLA" - ] - ], - "OF7pjCsO": [ - [ - "FusRock", - "PAHT", - "FusRock PAHT" - ] - ], - "OF7tt7DO": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA+" - ] - ], - "OF8GnyFU": [ - [ - "Creality", - "ABS", - "Hyper ABS" - ] - ], - "OF8GtyKJ": [ - [ - "Flashforge", - "TPU-64D", - "Flashforge TPU-64D" - ] - ], - "OF8Hx3Pi": [ - [ - "Cubicon", - "PETG", - "Cubicon PETG" - ] - ], - "OF8Jl6NT": [ - [ - "Snapmaker", - "PET", - "Snapmaker J1 PET" - ] - ], - "OF8O09RG": [ - [ - "Flashforge", - "PLA", - "Flashforge HS PLA Burnt Ti" - ] - ], - "OF8QdQwS": [ - [ - "BETA", - "PLA", - "BETA PLA Silk+" - ] - ], - "OF8Tlg47": [ - [ - "Generic", - "PPA-GF", - "Generic PPA-GF" - ] - ], - "OF8aFWfQ": [ - [ - "FilAr", - "PLA", - "FilAr PLA Amarillo Lirio" - ] - ], - "OF8dCquh": [ - [ - "Snapmaker", - "ABS", - "Snapmaker J1 ABS Benchy" - ] - ], - "OF8eaY7j": [ - [ - "Generic", - "PA-CF", - "Generic PA612-CF" - ] - ], - "OF8jh0Lk": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Marron" - ] - ], - "OF8kJys9": [ - [ - "Eryone", - "PETG", - "Eryone PETG" - ] - ], - "OF8tPByX": [ - [ - "Generic", - "PPA-CF", - "Generic PPA-CF" - ] - ], - "OF8wE5l7": [ - [ - "Artillery", - "PETG Basic", - "Artillery PETG Basic" - ] - ], - "OF99UMPq": [ - [ - "COEX 3D", - "ABS", - "COEX ABS" - ] - ], - "OF99vXPs": [ - [ - "DREMC", - "ABS", - "DREMC ABS+" - ] - ], - "OF9EHUKK": [ - [ - "QIDI", - "TPU-GF", - "QIDI TPU-GF" - ] - ], - "OF9HCdyQ": [ - [ - "Afinia", - "PLA", - "Afinia PLA" - ] - ], - "OF9OlTWH": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Marble" - ] - ], - "OF9PELEb": [ - [ - "QIDI", - "UltraPA-CF25", - "QIDI UltraPA-CF25" - ] - ], - "OF9UJOGF": [ - [ - "Anycubic", - "PETG-CF", - "Anycubic PETG-CF" - ] - ], - "OF9cAwMK": [ - [ - "Flashforge", - "PLA-CF", - "Flashforge PLA-CF" - ] - ], - "OF9emAI9": [ - [ - "RatRig", - "PETG", - "RatRig PunkFil PETG" - ] - ], - "OFA026vt": [ - [ - "Orca Arena", - "PA-CF", - "Arena PA-CF" - ] - ], - "OFAC7Wyu": [ - [ - "Artillery", - "PLA Matte", - "Artillery PLA Matte" - ] - ], - "OFAIBCLJ": [ - [ - "Generic", - "ABS-CF", - "Generic ABS-CF" - ] - ], - "OFAIrQXu": [ - [ - "Creality", - "PLA", - "Creality Hyper PLA" - ] - ], - "OFANFm4x": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Metal" - ] - ], - "OFAO9A7J": [ - [ - "Generic", - "PLA", - "Sovol Zero PLA Silk HS Nozzle" - ] - ], - "OFAZllAN": [ - [ - "Artillery", - "PLA-CF", - "Artillery PLA-CF" - ] - ], - "OFAc0Pr3": [ - [ - "Polymaker", - "PET-CF", - "Fiberon PET-CF17" - ] - ], - "OFAcJkl1": [ - [ - "addnorth", - "PETG-CF", - "addnorth PETG-CF Rigid X" - ] - ], - "OFAebKg8": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Metal" - ] - ], - "OFAnyRUI": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support For PLA" - ] - ], - "OFAt6ec0": [ - [ - "FilAr", - "PLA", - "FilAr PLA Marron Oxido" - ] - ], - "OFB5SmWk": [ - [ - "Valment", - "PLA", - "Valment PLA Galaxy" - ] - ], - "OFBBgw7B": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Wood" - ] - ], - "OFBJAdLw": [ - [ - "LH Stinger", - "PCTG", - "LHS PCTG" - ] - ], - "OFBLktDy": [ - [ - "Creality", - "PETG", - "Soleyin Basic PETG" - ] - ], - "OFBSW57R": [ - [ - "Bambu Lab", - "PLA-AERO", - "Bambu PLA Aero" - ] - ], - "OFBUIlZ7": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA+" - ] - ], - "OFBlFMVp": [ - [ - "Snapmaker", - "PETG", - "Snapmaker Dual PETG" - ] - ], - "OFBoSWxb": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Luminous" - ] - ], - "OFBsbMMF": [ - [ - "addnorth", - "PA-CF", - "addnorth PA-CF Adura X" - ] - ], - "OFBw6eEG": [ - [ - "Overture", - "PLA", - "Overture Matte PLA" - ] - ], - "OFC1PzXz": [ - [ - "Creality", - "PLA", - "Hyper Luminous" - ] - ], - "OFC5f4Ay": [ - [ - "Generic", - "PC-CF", - "Generic PCCF" - ] - ], - "OFC78WGQ": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Starlight" - ] - ], - "OFCD8qiU": [ - [ - "Generic", - "EVA", - "Generic EVA" - ] - ], - "OFCIUsWh": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Translucent" - ] - ], - "OFCJpR7a": [ - [ - "Creality", - "PLA", - "HP Ultra PLA" - ] - ], - "OFCZsqXg": [ - [ - "Creality", - "PLA", - "Hyper PLA" - ] - ], - "OFCccVrQ": [ - [ - "Polymaker", - "PLA", - "PolyTerra Dual PLA" - ] - ], - "OFCidU7j": [ - [ - "DREMC", - "ABS-GF", - "DREMC ABS-GF" - ] - ], - "OFCjG251": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Verde" - ] - ], - "OFCn83wF": [ - [ - "FusRock", - "PAHT", - "FusRock S-PAHT" - ] - ], - "OFCnywiC": [ - [ - "Tiertime", - "PET-CF", - "Tiertime PET-CF" - ] - ], - "OFCoRobU": [ - [ - "Elas", - "ASA", - "Elas ASA" - ] - ], - "OFCp3Bgo": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA SE" - ] - ], - "OFCuaCer": [ - [ - "Volumic", - "PLA", - "Désactivé" - ] - ], - "OFD21ije": [ - [ - "Cubicon", - "PA", - "Cubicon PA-CF" - ] - ], - "OFD8loeT": [ - [ - "re3D", - "PETG", - "re3D rPETG" - ] - ], - "OFD9taow": [ - [ - "FlyingBear", - "PLA", - "FlyingBear PLA Hyper" - ] - ], - "OFDETOM6": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Matte" - ] - ], - "OFDGigEI": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Dynamic" - ] - ], - "OFDIrhbu": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC/ABS-FR" - ] - ], - "OFDJU6R3": [ - [ - "Afinia", - "TPU", - "Afinia TPU" - ] - ], - "OFDKIKyw": [ - [ - "Snapmaker", - "PVA", - "Snapmaker Dual PVA" - ] - ], - "OFDKgoqx": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA" - ] - ], - "OFDRpXLZ": [ - [ - "Other", - "PETG", - "Other PETG" - ] - ], - "OFDSrzZ8": [ - [ - "Generic", - "PLA", - "Generic PLA" - ] - ], - "OFDdEaoL": [ - [ - "re3D", - "PLA", - "re3D PLA" - ] - ], - "OFDe8uyM": [ - [ - "Valment", - "PLA", - "Valment PLA" - ] - ], - "OFDgQaca": [ - [ - "FlyingBear", - "PETG", - "FlyingBear PETG" - ] - ], - "OFDpW3J8": [ - [ - "FILL3D", - "PLA", - "FILL3D PLA Basic" - ] - ], - "OFDtop41": [ - [ - "Generic", - "PA", - "Generic Support for PA" - ] - ], - "OFDu1qE7": [ - [ - "FusRock", - "PET-CF", - "FusRock PET-CF" - ] - ], - "OFDvXujf": [ - [ - "Generic", - "PVA", - "Generic PVA" - ] - ], - "OFDvqJ6n": [ - [ - "Overture", - "ABS", - "Overture ABS Basic" - ] - ], - "OFDwBwO5": [ - [ - "Generic", - "PVA", - "Generic PVA HF" - ] - ], - "OFDxfPgH": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Sparkle" - ] - ], - "OFDxxTpW": [ - [ - "Flashforge", - "PETG", - "Flashforge HS PETG" - ] - ], - "OFE0NFRh": [ - [ - "COEX 3D", - "TPU", - "COEX TPU 60A" - ] - ], - "OFEGNJD4": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Silk" - ] - ], - "OFEOnBj6": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Lite" - ] - ], - "OFEWYR89": [ - [ - "Generic", - "PLA", - "Generic PLA+" - ] - ], - "OFEZ449N": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Uva" - ] - ], - "OFEZpel7": [ - [ - "Volumic", - "PPS-CF", - "PPS Carbone (Performance)" - ] - ], - "OFEabreg": [ - [ - "Polymaker", - "PA6-CF", - "Fiberon PA6-CF20" - ] - ], - "OFEbIx49": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Marble" - ] - ], - "OFEhuUNq": [ - [ - "DREMC", - "PA-CF", - "DREMC PA12-CF" - ] - ], - "OFEj7sca": [ - [ - "Cubicon", - "PC", - "Cubicon PC" - ] - ], - "OFEjbwqG": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA+" - ] - ], - "OFEkPBwx": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Glow" - ] - ], - "OFEmsric": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker PA-CF" - ] - ], - "OFEnbt6D": [ - [ - "Peopoly", - "PLA", - "Peopoly Lancer PLA-C" - ] - ], - "OFEswT5W": [ - [ - "Bambu Lab", - "PLA-CF", - "Bambu PLA-CF" - ] - ], - "OFEvEfw5": [ - [ - "Flashforge", - "PA", - "Flashforge PA" - ] - ], - "OFEwRwmL": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA" - ] - ], - "OFF3cuzT": [ - [ - "Generic", - "TPU", - "Generic TPU 64D" - ] - ], - "OFF5o7b2": [ - [ - "BETA", - "PLA", - "BETA PLA Youth" - ] - ], - "OFF9OKoY": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Pro" - ] - ], - "OFF9cgY5": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Matte" - ] - ], - "OFFAWVf0": [ - [ - "QIDI", - "PC-ABS-FR", - "QIDI PC-ABS-FR" - ] - ], - "OFFFg2Pf": [ - [ - "Flashforge", - "ASA", - "Flashforge ASA Basic" - ] - ], - "OFFNYwWR": [ - [ - "Bambu Lab", - "PA-CF", - "Bambu PA-CF" - ] - ], - "OFFP4ORR": [ - [ - "Creality", - "ABS", - "Creality Hyper ABS" - ] - ], - "OFFX1DRD": [ - [ - "FlyingBear", - "PC", - "FlyingBear PC" - ] - ], - "OFFZ458u": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA612-ESD" - ] - ], - "OFFbQscs": [ - [ - "eSUN", - "PETG", - "eSUN PETG-Basic" - ] - ], - "OFFbSnCD": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Translucent" - ] - ], - "OFFfJ09N": [ - [ - "BETA", - "PETG", - "BETA PETG Glow" - ] - ], - "OFFkCLBl": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Galaxy" - ] - ], - "OFFvzqcd": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG Basic" - ] - ], - "OFFwJWea": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Silk" - ] - ], - "OFG0kOKX": [ - [ - "Volumic", - "PETG", - "Volumic PETG Ultra" - ] - ], - "OFG2RkhN": [ - [ - "Creality", - "TPU", - "CR-TPU" - ] - ], - "OFG4do34": [ - [ - "QIDI", - "ASA-AERO", - "Qidi ASA-Aero" - ] - ], - "OFGJ1nxs": [ - [ - "Other", - "PLA", - "Other PLA" - ] - ], - "OFGVwfK0": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Gris" - ] - ], - "OFGVxj2A": [ - [ - "BETA", - "PLA", - "BETA PLA Wood" - ] - ], - "OFGc9l16": [ - [ - "BETA", - "PLA", - "BETA PLA Glow" - ] - ], - "OFGcLA5R": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Beige" - ] - ], - "OFGcMkEB": [ - [ - "Creality", - "TPU", - "HP-TPU" - ] - ], - "OFGdP6Na": [ - [ - "Volumic", - "PVA", - "Volumic PVA" - ] - ], - "OFGkyftV": [ - [ - "Overture", - "PLA", - "Overture Silk PLA" - ] - ], - "OFGwT5Av": [ - [ - "Creality", - "PLA-CF", - "Creality Hyper PLA-CF" - ] - ], - "OFGwZmgS": [ - [ - "Creality", - "ABS", - "CR-ABS" - ] - ], - "OFGxC8gB": [ - [ - "Creality", - "PLA", - "CR-Wood" - ] - ], - "OFGxuI0n": [ - [ - "Flashforge", - "PA-CF", - "Flashforge PA-CF" - ] - ], - "OFH2nN08": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA INGEO 850" - ] - ], - "OFH57ibH": [ - [ - "Polymaker", - "PLA", - "Polymaker Silk PLA Family" - ] - ], - "OFH7b12v": [ - [ - "Generic", - "PA-CF", - "Generic PAHT-CF" - ] - ], - "OFHAccHz": [ - [ - "FilAr", - "PLA", - "FilAr PLA Blanco Antartida" - ] - ], - "OFHHwrd1": [ - [ - "addnorth", - "PETG", - "addnorth PETG Base" - ] - ], - "OFHWSM21": [ - [ - "Polymaker", - "PET-CF", - "Fiberon PET-CF" - ] - ], - "OFHa48An": [ - [ - "Bambu Lab", - "PET-CF", - "Bambu PET-CF" - ] - ], - "OFHaYaB1": [ - [ - "eSUN", - "PET", - "eSUN PET-Basic" - ] - ], - "OFHf2lKK": [ - [ - "FlyingBear", - "TPU", - "FlyingBear TPU Basic" - ] - ], - "OFHfzQXo": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Transition" - ] - ], - "OFHknN4v": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA Pro Metallic" - ] - ], - "OFHmPYRy": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+ 2.0" - ] - ], - "OFI2MKy7": [ - [ - "BETA", - "TPU", - "BETA PEBA 90A" - ] - ], - "OFI6WZpn": [ - [ - "Orca Arena", - "PLA", - "Arena Support W" - ] - ], - "OFIBXa0k": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Rojo" - ] - ], - "OFIBbYO5": [ - [ - "Bambu Lab", - "TPU-AMS", - "Bambu TPU for AMS" - ] - ], - "OFIE3vOf": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Matte" - ] - ], - "OFIK2H3G": [ - [ - "Flashforge", - "PLA", - "Flashforge HS PLA" - ] - ], - "OFIKZxPF": [ - [ - "Generic", - "PLA", - "Generic PLA Wood" - ] - ], - "OFIPjqHt": [ - [ - "Orca Arena", - "PA", - "Arena Support G" - ] - ], - "OFIRUqWi": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Silk" - ] - ], - "OFIVWJPm": [ - [ - "InfiMech", - "TPU", - "InfiMech TPU" - ] - ], - "OFIWMSGX": [ - [ - "HATCHBOX", - "PETG", - "HATCHBOX PETG" - ] - ], - "OFIZMQwM": [ - [ - "LH Stinger", - "TPU", - "LHS TPU" - ] - ], - "OFIamQnD": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Ceniza" - ] - ], - "OFIegjmD": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Flex D53" - ] - ], - "OFIfnzxC": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support For PLA/PETG" - ] - ], - "OFIgbDHq": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Luminous" - ] - ], - "OFIxOuOu": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Starlight" - ] - ], - "OFJ3F2jm": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Basic" - ] - ], - "OFJ3HRsR": [ - [ - "Orca Arena", - "ABS", - "Arena ABS" - ] - ], - "OFJHBEGD": [ - [ - "DREMC", - "PLA", - "DREMC PLA+ HS" - ] - ], - "OFJJ0Ar3": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Galaxy" - ] - ], - "OFJNeELv": [ - [ - "FILL3D", - "PA", - "FILL3D PA" - ] - ], - "OFJOFnOZ": [ - [ - "Aliz", - "PETG-CF", - "AliZ PETG-CF" - ] - ], - "OFJQDUk3": [ - [ - "FilAr", - "PETG", - "FilAr PETG Cristal" - ] - ], - "OFJS560n": [ - [ - "Flashforge", - "ASA", - "Flashforge ASA" - ] - ], - "OFJWKoYG": [ - [ - "iQ Materials", - "ABS Material4Print Natur", - "Material4Print ABS Natur P1" - ] - ], - "OFJYpVAQ": [ - [ - "Generic", - "TPU-90A", - "Generic TPU-90A" - ] - ], - "OFJgijky": [ - [ - "Polymaker", - "PLA", - "PolyLite CosPLA" - ] - ], - "OFJhT2fd": [ - [ - "Snapmaker", - "ABS", - "Snapmaker Dual ABS" - ] - ], - "OFJnEaCp": [ - [ - "BETA", - "PLA", - "BETA PLA Transparent" - ] - ], - "OFJrvXth": [ - [ - "Snapmaker", - "ABS", - "Snapmaker ABS Benchy" - ] - ], - "OFJs1ToM": [ - [ - "COEX 3D", - "PA", - "COEX NYLEX UNFILLED" - ] - ], - "OFJu1XwK": [ - [ - "NIT", - "PETG", - "NIT PETG" - ] - ], - "OFJxSqO4": [ - [ - "Yumi", - "PLA", - "YUMI PLA Direct Drive" - ] - ], - "OFK7830e": [ - [ - "BETA", - "TPU", - "BETA TPU 95A" - ] - ], - "OFK8XHPn": [ - [ - "Overture", - "ABS", - "Overture ABS" - ] - ], - "OFKIQO2W": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido" - ] - ], - "OFKKajh6": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Plata" - ] - ], - "OFKTGKJU": [ - [ - "FusRock", - "PET", - "FusRock PET" - ] - ], - "OFKTSiYF": [ - [ - "FilAr", - "PLA", - "FilAr PLA Blanco Calido" - ] - ], - "OFKUEXPA": [ - [ - "Snapmaker", - "ASA", - "Snapmaker Dual ASA" - ] - ], - "OFKW5hEW": [ - [ - "FusRock", - "PAHT-CF", - "FusRock PAHT-CF" - ] - ], - "OFKWWgyp": [ - [ - "FilAr", - "PLA", - "FilAr PLA Carpincho" - ] - ], - "OFKYBAWe": [ - [ - "BETA", - "PLA", - "BETA PLA Marble" - ] - ], - "OFKZ9skj": [ - [ - "FilAr", - "PLA", - "FilAr PLA Naranja Tigre" - ] - ], - "OFKbdiiJ": [ - [ - "Polymaker", - "PLA", - "PolySonic PLA Pro" - ] - ], - "OFKfJTwL": [ - [ - "QIDI", - "PET-CF", - "QIDI PET-CF" - ] - ], - "OFKgmsqE": [ - [ - "QIDI", - "PAHT-CF", - "QIDI PAHT-CF" - ] - ], - "OFKhMPeX": [ - [ - "Bambu Lab", - "PC", - "Bambu PC" - ] - ], - "OFKiSMWR": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Marble" - ] - ], - "OFKyNkQz": [ - [ - "BETA", - "PETG", - "BETA PETG UV Color Change" - ] - ], - "OFL9aRjN": [ - [ - "Snapmaker", - "PETG", - "Snapmaker PETG HF" - ] - ], - "OFLAXKqP": [ - [ - "WonderMaker", - "TPU", - "WonderMaker TPU 95A" - ] - ], - "OFLC1oRH": [ - [ - "Flashforge", - "PPA-CF", - "Flashforge PPA-CF" - ] - ], - "OFLJ8S6I": [ - [ - "SUNLU", - "PLA", - "SUNLU Wood PLA" - ] - ], - "OFLNgV3C": [ - [ - "DREMC", - "ASA", - "DREMC ASA" - ] - ], - "OFLOf6Sc": [ - [ - "Tiertime", - "TPU", - "Tiertime TPU 95A" - ] - ], - "OFLPAxz3": [ - [ - "Generic", - "ASA", - "Generic ASA" - ] - ], - "OFLTYJW0": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Translucent" - ] - ], - "OFLXvuMr": [ - [ - "Elegoo", - "PETG", - "Elegoo Rapid PETG" - ] - ], - "OFLYDngx": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG" - ] - ], - "OFLakOUI": [ - [ - "Generic", - "PC", - "Generic PC" - ] - ], - "OFLbXwoL": [ - [ - "Artillery", - "PLA Silk", - "Artillery PLA Silk" - ] - ], - "OFLbdkrE": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Eco" - ] - ], - "OFLcd093": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG" - ] - ], - "OFLfywkp": [ - [ - "Afinia", - "ABS", - "Afinia ABS+" - ] - ], - "OFLgwqp2": [ - [ - "Creality", - "PETG-GF", - "Hyper PETG-GF" - ] - ], - "OFLjDYxH": [ - [ - "addnorth", - "PLA", - "addnorth PLA X-PLA High Speed" - ] - ], - "OFLqgSuX": [ - [ - "BETA", - "PLA-CF", - "BETA PLA-CF" - ] - ], - "OFLzx3J4": [ - [ - "Creality", - "PLA", - "Hyper Marble" - ] - ], - "OFM0xjBG": [ - [ - "Creality", - "PLA", - "CR-PLA Matte" - ] - ], - "OFM4iJlv": [ - [ - "Generic", - "PA-CF", - "Generic PA12-CF" - ] - ], - "OFM91vZs": [ - [ - "Overture", - "ASA", - "Overture ASA" - ] - ], - "OFMDHOcT": [ - [ - "QIDI", - "TPU-AERO", - "QIDI TPU-Aero" - ] - ], - "OFMK5gVo": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Basic" - ] - ], - "OFML2aVd": [ - [ - "Anycubic", - "TPU", - "Anycubic TPU 95A" - ] - ], - "OFMSvS8z": [ - [ - "Artillery", - "PA", - "Artillery PA" - ] - ], - "OFMTK0UC": [ - [ - "Bambu Lab", - "PA", - "Bambu Support For PA/PET" - ] - ], - "OFMUWNkp": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA+" - ] - ], - "OFMZvH0z": [ - [ - "Overture", - "PLA", - "Overture Rock PLA" - ] - ], - "OFMjtqTC": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Wood" - ] - ], - "OFMkAW6r": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Color Change" - ] - ], - "OFMpxamb": [ - [ - "Flashforge", - "PETG", - "Flashforge PETG" - ] - ], - "OFMsDGbs": [ - [ - "Anycubic", - "TPU", - "Anycubic TPU" - ] - ], - "OFMuXBmO": [ - [ - "Elas", - "PLA", - "Elas PLA Basic" - ] - ], - "OFMzRg65": [ - [ - "BETA", - "PLA", - "BETA PLA PRO" - ] - ], - "OFN8QBhu": [ - [ - "addnorth", - "PLA", - "addnorth PLA Wood" - ] - ], - "OFN9fefN": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS-A100" - ] - ], - "OFNBlAPT": [ - [ - "Orca Arena", - "PETG", - "Arena PETG Basic" - ] - ], - "OFNGTH3w": [ - [ - "Tiertime", - "PLA", - "Tiertime PLA" - ] - ], - "OFNQKF0M": [ - [ - "Tiertime", - "ABS", - "Tiertime ABS" - ] - ], - "OFNSYu5h": [ - [ - "Volumic", - "PP", - "Volumic PP Ultra (Performance)" - ] - ], - "OFNU9YIW": [ - [ - "FilAr", - "PETG", - "FilAr PETG Azul Boreal" - ] - ], - "OFNemJM6": [ - [ - "FilAr", - "PLA", - "FilAr PLA Cobre" - ] - ], - "OFNjku08": [ - [ - "Generic", - "PETG", - "Generic High Flow PETG" - ] - ], - "OFNk8AvA": [ - [ - "BETA", - "PETG", - "BETA PETG Gradient" - ] - ], - "OFNk8bxk": [ - [ - "Bambu Lab", - "PA-GF", - "Bambu PA6-GF" - ] - ], - "OFNstOna": [ - [ - "Eryone", - "PETG-CF", - "Eryone PETG-CF" - ] - ], - "OFNvBIL0": [ - [ - "Creality", - "PA-CF", - "Hyper PPA-CF" - ] - ], - "OFO1GEq6": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Neon" - ] - ], - "OFO5djrM": [ - [ - "Generic", - "PETG-CF", - "Generic PETG-CF10" - ] - ], - "OFO6GMJ3": [ - [ - "addnorth", - "TPU", - "addnorth TPU EasyFlex" - ] - ], - "OFOABq7t": [ - [ - "Aliz", - "PETG", - "AliZ PETG-Metal" - ] - ], - "OFOAdMCB": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Metal" - ] - ], - "OFOHOf2F": [ - [ - "eSUN", - "PLA", - "eSUN PLA-HS" - ] - ], - "OFOJPAAS": [ - [ - "iQ Materials", - "VXL90 Xioneer", - "VXL90 TiQ2 P2" - ] - ], - "OFOPU1xv": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Full Spectrum" - ] - ], - "OFOQCfVa": [ - [ - "addnorth", - "PLA", - "addnorth PLA Premium Silk" - ] - ], - "OFObG16Q": [ - [ - "InfiMech", - "PLA", - "InfiMech PLA Basic" - ] - ], - "OFObyktP": [ - [ - "Tiertime", - "PETG", - "Tiertime PETG" - ] - ], - "OFOiJfLM": [ - [ - "FILL3D", - "PETG-CF", - "FILL3D PETG CF" - ] - ], - "OFOnSNt3": [ - [ - "Artillery", - "PETG-CF", - "Artillery PETG-CF" - ] - ], - "OFOsHDnB": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG PRO" - ] - ], - "OFOuEEvv": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido 0.2 nozzle" - ] - ], - "OFOvv91M": [ - [ - "Polymaker", - "ABS", - "PolyLite ABS" - ] - ], - "OFOwQuZM": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker PETG-CF" - ] - ], - "OFOzwywz": [ - [ - "Eryone", - "ABS", - "Eryone ABS" - ] - ], - "OFP26zNb": [ - [ - "FilAr", - "PLA", - "FilAr PLA Violeta Jacaranda" - ] - ], - "OFPHLnoe": [ - [ - "Creality", - "ASA", - "HP-ASA" - ] - ], - "OFPWPlSC": [ - [ - "FILL3D", - "PP", - "FILL3D PP" - ] - ], - "OFPYDWgC": [ - [ - "Peopoly", - "PET-CF", - "Peopoly Lancer PET-CF" - ] - ], - "OFPbyOSk": [ - [ - "FilAr", - "PETG", - "FilAr PETG Rojo Carmesi" - ] - ], - "OFPc4zVY": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA INGEO 870" - ] - ], - "OFPkCJKE": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Satin" - ] - ], - "OFPklMI1": [ - [ - "Generic", - "PE", - "Generic PE" - ] - ], - "OFPoyiFs": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA" - ] - ], - "OFPqX3x2": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rosa Amaranto" - ] - ], - "OFQ1KzO8": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Silk" - ] - ], - "OFQ1zgm3": [ - [ - "Eryone", - "ABS-CF", - "Eryone ABS-CF" - ] - ], - "OFQ3e56w": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Galaxy" - ] - ], - "OFQ40XeN": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough" - ] - ], - "OFQ5TxZ2": [ - [ - "addnorth", - "PA", - "addnorth PVDF Adamant S1" - ] - ], - "OFQEGL7z": [ - [ - "FlyingBear", - "PA-CF", - "FlyingBear PA-CF" - ] - ], - "OFQGvU2G": [ - [ - "Orca Arena", - "TPU", - "Arena TPU 95A" - ] - ], - "OFQHiNJs": [ - [ - "Bambu Lab", - "PA", - "Bambu Support G" - ] - ], - "OFQLcbps": [ - [ - "Generic", - "PA-CF", - "Generic PA-CF" - ] - ], - "OFQMTRc8": [ - [ - "Snapmaker", - "PETG", - "Snapmaker J1 PETG" - ] - ], - "OFQMsFfF": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF10" - ] - ], - "OFQWIKbV": [ - [ - "FilAr", - "PLA", - "FilAr PLA Titanio" - ] - ], - "OFQYaiGg": [ - [ - "Snapmaker", - "PET", - "Snapmaker PET" - ] - ], - "OFQbjX3s": [ - [ - "FILL3D", - "PETG", - "FILL3D PETG" - ] - ], - "OFQdaVZS": [ - [ - "Generic", - "PET-CF", - "Generic PET-CF" - ] - ], - "OFQe7sAx": [ - [ - "Anycubic", - "PA6-CF", - "Anycubic PA6-CF" - ] - ], - "OFQyyO0l": [ - [ - "Polymaker", - "PA", - "Polymaker CoPA" - ] - ], - "OFR0gODA": [ - [ - "SeeMeCNC", - "ABS", - "SeeMeCNC ABS" - ] - ], - "OFR1XLMN": [ - [ - "QIDI", - "TPU", - "QIDI TPU 95A-HF" - ] - ], - "OFRFhdqy": [ - [ - "addnorth", - "PLA", - "addnorth PLA Textura" - ] - ], - "OFRJ325z": [ - [ - "LH Stinger", - "PETG", - "LHS PETG" - ] - ], - "OFRhBryT": [ - [ - "Cubicon", - "PLA", - "Cubicon PLAi21" - ] - ], - "OFRhCTUg": [ - [ - "Anycubic", - "PET-CF", - "Anycubic PET-CF" - ] - ], - "OFRiFnfQ": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG Transition" - ] - ], - "OFRiYgMK": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Celestial" - ] - ], - "OFRkjhxK": [ - [ - "Volumic", - "PVA", - "Volumic PVA-BVOH (Performance)" - ] - ], - "OFRmGKVX": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA+" - ] - ], - "OFRooa0F": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker Dual PA-CF" - ] - ], - "OFRpAZ1P": [ - [ - "DeltaMaker", - "PLA", - "DeltaMaker Brand PLA" - ] - ], - "OFRyOsZj": [ - [ - "re3D", - "PLA", - "re3D PLA" - ] - ], - "OFRzR5mi": [ - [ - "eSUN", - "PLA-AERO", - "eSUN ePLA-LW" - ] - ], - "OFS2tn6G": [ - [ - "Polymaker", - "PA", - "Fiberon PA612-CF" - ] - ], - "OFS4jbj3": [ - [ - "Eryone", - "PA", - "Eryone PA" - ] - ], - "OFS8lTQt": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Silk" - ] - ], - "OFSDfduA": [ - [ - "Flashforge", - "TPU", - "Flashforge TPU 65D" - ] - ], - "OFSa39yP": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA" - ] - ], - "OFSbGfsz": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Basic" - ] - ], - "OFSfm8iP": [ - [ - "BETA", - "PLA", - "BETA PLA Heat Color Change" - ] - ], - "OFSiCZP3": [ - [ - "BETA", - "PETG-CF", - "BETA PETG-GF" - ] - ], - "OFSqIcJC": [ - [ - "Flashforge", - "TPU", - "Flashforge TPU 95A" - ] - ], - "OFSw6Mor": [ - [ - "addnorth", - "PA", - "addnorth PA Adura FDA" - ] - ], - "OFSwbBWS": [ - [ - "DREMC", - "PLA", - "DREMC PLA+" - ] - ], - "OFT2jon4": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido" - ] - ], - "OFTGHyNC": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Impact" - ] - ], - "OFTHDCqA": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Pure" - ] - ], - "OFTOPcx0": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Transition" - ] - ], - "OFTRZ8Y4": [ - [ - "Bambu Lab", - "PETG-CF", - "Bambu PETG-CF" - ] - ], - "OFTSXxzE": [ - [ - "Flashforge", - "PPS-CF", - "Flashforge PPS-CF" - ] - ], - "OFTXduCM": [ - [ - "eSUN", - "ABS", - "eSUN ABS+" - ] - ], - "OFTcE0nA": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Basic" - ] - ], - "OFTdauIq": [ - [ - "Volumic", - "PETG", - "Volumic PCTG Ultra (Performance)" - ] - ], - "OFTkj6DR": [ - [ - "Anycubic", - "PVA", - "Anycubic PVA" - ] - ], - "OFTlRzpe": [ - [ - "FilAr", - "PLA", - "FilAr PLA Gris Pizarra" - ] - ], - "OFTnWzBs": [ - [ - "Creality", - "PLA-CF", - "Hyper PLA-CF" - ] - ], - "OFTs8peJ": [ - [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPE" - ] - ], - "OFTsHNQi": [ - [ - "QIDI", - "ASA", - "QIDI ASA" - ] - ], - "OFU1zPxE": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Galaxy" - ] - ], - "OFU3QXL7": [ - [ - "re3D", - "PC", - "re3D PC" - ] - ], - "OFU5JPDy": [ - [ - "addnorth", - "PETG", - "addnorth PETG PRO Matte" - ] - ], - "OFU7CKZt": [ - [ - "Volumic", - "ASA", - "Volumic ASA Ultra (Performance)" - ] - ], - "OFUF7oA4": [ - [ - "Creality", - "PC", - "Hyper PC" - ] - ], - "OFUH1aee": [ - [ - "Volumic", - "TPU", - "Volumic FLEX93 Ultra (Performance)" - ] - ], - "OFUIfGoh": [ - [ - "Snapmaker", - "PET", - "Snapmaker Dual PET" - ] - ], - "OFUYCqtB": [ - [ - "InfiMech", - "PLA", - "InfiMech PLA" - ] - ], - "OFUaHEO9": [ - [ - "Anycubic", - "PEBA", - "Anycubic PEBA 95A" - ] - ], - "OFUanySo": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Silk+" - ] - ], - "OFUmS5z5": [ - [ - "eSUN", - "ASA", - "eSUN ASA+" - ] - ], - "OFUtiVRn": [ - [ - "addnorth", - "PETG", - "addnorth PETG ESD" - ] - ], - "OFUyDDNv": [ - [ - "Elegoo", - "PC", - "Elegoo PC" - ] - ], - "OFV5Q7j2": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPE" - ] - ], - "OFV5c8hG": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Sparkle" - ] - ], - "OFV5tNw6": [ - [ - "Elegoo", - "PETG", - "Elegoo PET-CF" - ] - ], - "OFV5wEMe": [ - [ - "Afinia", - "ABS", - "Afinia ABS" - ] - ], - "OFV8Mxqx": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA-SILK" - ] - ], - "OFVBlUFH": [ - [ - "DREMC", - "PETG", - "DREMC PETG" - ] - ], - "OFVCkX5w": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 95A" - ] - ], - "OFVDWuxl": [ - [ - "addnorth", - "PLA", - "addnorth PLA HT-PLA PRO Matte" - ] - ], - "OFVHMFJX": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough 0.2 nozzle" - ] - ], - "OFVptRxp": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 30D" - ] - ], - "OFVtIasg": [ - [ - "Eryone", - "ASA", - "Eryone ASA" - ] - ], - "OFW29a9R": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA" - ] - ], - "OFW5FqkL": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido Silk" - ] - ], - "OFW8M3CY": [ - [ - "BETA", - "PLA", - "BETA PLA Chameleon" - ] - ], - "OFW8lqnb": [ - [ - "Snapmaker", - "PETG", - "Snapmaker PETG Translucent" - ] - ], - "OFWDe7YH": [ - [ - "QIDI", - "UltraPA", - "QIDI UltraPA" - ] - ], - "OFWK0Y9A": [ - [ - "addnorth", - "PA", - "addnorth PA Adura" - ] - ], - "OFWRITFw": [ - [ - "Prusa Polymers", - "PLA", - "Prusament rPLA" - ] - ], - "OFWTAEjH": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPE" - ] - ], - "OFWTRJ1K": [ - [ - "FilAr", - "PLA", - "FilAr PLA Bronce" - ] - ], - "OFWXCbVF": [ - [ - "Flashforge", - "PC", - "Flashforge PC" - ] - ], - "OFWYtgCa": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Wood" - ] - ], - "OFWa0NiB": [ - [ - "Volumic", - "PA", - "Volumic NYLON Ultra" - ] - ], - "OFWao3Ic": [ - [ - "Creality", - "PLA", - "Ender-PLA" - ] - ], - "OFWbdGsC": [ - [ - "Generic", - "PLA-CF", - "Generic PLA-CF" - ] - ], - "OFWgFOjn": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Silk" - ] - ], - "OFWwF7K7": [ - [ - "FilAr", - "PLA", - "FilAr PLA Cafe con Leche" - ] - ], - "OFX0etlv": [ - [ - "re3D", - "PETG", - "re3D PETG" - ] - ], - "OFX0ycRQ": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA12-CF" - ] - ], - "OFX2zcrM": [ - [ - "Generic", - "PLA-CF", - "Generic PLA-CF10" - ] - ], - "OFXCBZTA": [ - [ - "Eolas Prints", - "ABS", - "Eolas Prints ABS" - ] - ], - "OFXIbw5D": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Matte" - ] - ], - "OFXJ9iom": [ - [ - "iQ Materials", - "HPP4GF25", - "Grauts HPP4GF25 P1" - ] - ], - "OFXSvqOX": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU 95A HF" - ] - ], - "OFXTPuqV": [ - [ - "Elas", - "PETG", - "Elas PETG Basic" - ] - ], - "OFXW4CDh": [ - [ - "Generic", - "PCTG", - "Generic PCTG BigNozzle" - ] - ], - "OFXi59OX": [ - [ - "Afinia", - "ABS", - "Afinia Value ABS" - ] - ], - "OFXiArjA": [ - [ - "Flashforge", - "PETG", - "Flashforge PETG Pro" - ] - ], - "OFXk1emJ": [ - [ - "Artillery", - "PLA Basic", - "Artillery PLA Basic" - ] - ], - "OFXkm8q1": [ - [ - "Generic", - "PP-CF", - "Generic PP-CF" - ] - ], - "OFXmv5p0": [ - [ - "Generic", - "PLA", - "Generic Speed PLA" - ] - ], - "OFXn3Vd9": [ - [ - "QIDI", - "PAHT-S", - "QIDI Support For PAHT" - ] - ], - "OFXnToSX": [ - [ - "Creality", - "PLA", - "Hyper Stardust" - ] - ], - "OFXuGxvQ": [ - [ - "Volumic", - "PLA", - "Volumic PLA Ultra" - ] - ], - "OFXz7Mwx": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Silk" - ] - ], - "OFXzQ4yL": [ - [ - "Bambu Lab", - "ASA-AERO", - "Bambu ASA-Aero" - ] - ], - "OFY0F5qA": [ - [ - "Volumic", - "PETG", - "Volumic PETG Ultra carbone (Performance)" - ] - ], - "OFY3AB7j": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Matte" - ] - ], - "OFY7jxcS": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU 90A" - ] - ], - "OFY9muEs": [ - [ - "Generic", - "ABS", - "Generic ABS" - ] - ], - "OFYE7YZw": [ - [ - "Tinmorry", - "PETG", - "Tinmorry PETG-ECO" - ] - ], - "OFYEtXuk": [ - [ - "Snapmaker", - "PA-CF", - "Snapmaker J1 PA-CF" - ] - ], - "OFYGbPHX": [ - [ - "Polymaker", - "PLA", - "PolyLite Dual PLA" - ] - ], - "OFYGrfHY": [ - [ - "BETA", - "PETG", - "BETA PETG Fluorescence" - ] - ], - "OFYPdQJh": [ - [ - "Generic", - "PETG", - "Generic PETG" - ] - ], - "OFYTIMbj": [ - [ - "Flashforge", - "ABS-CF", - "Flashforge ABS-CF" - ] - ], - "OFYYeMyQ": [ - [ - "Flashforge", - "PETG", - "Flashforge PETG Basic" - ] - ], - "OFYd5uS3": [ - [ - "DREMC", - "TPU", - "DREMC TPU 95A" - ] - ], - "OFYezc6s": [ - [ - "FlyingBear", - "TPU", - "FlyingBear TPU" - ] - ], - "OFYuowge": [ - [ - "Other", - "ABS", - "Other ABS" - ] - ], - "OFZ0mR5b": [ - [ - "Anycubic", - "PLA-CF", - "Anycubic PLA-CF" - ] - ], - "OFZ2LuAi": [ - [ - "Yumi", - "PLA", - "YUMI PLA Bowden" - ] - ], - "OFZ3K2cL": [ - [ - "QIDI", - "PA6-CF", - "QIDI PA6-CF" - ] - ], - "OFZ4QbfK": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rosa Flamenco" - ] - ], - "OFZGrQTU": [ - [ - "addnorth", - "PETG", - "addnorth PETG Economy" - ] - ], - "OFZJft47": [ - [ - "addnorth", - "PLA", - "addnorth PLA Economy" - ] - ], - "OFZLtWYs": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF25" - ] - ], - "OFZOuWrO": [ - [ - "QIDI", - "PPS-CF", - "QIDI PPS-CF" - ] - ], - "OFZivHGL": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA" - ] - ], - "OFZqZMuv": [ - [ - "BETA", - "ASA", - "BETA ASA" - ] - ], - "OFZr862X": [ - [ - "Generic", - "PLA", - "Generic PLA HF" - ] - ], - "OFZtOQtl": [ - [ - "Flashforge", - "PA6-CF", - "Flashforge PA6-CF" - ] - ], - "OFZtkHRq": [ - [ - "Anycubic", - "PC", - "Anycubic PC" - ] - ], - "OFaDOaNt": [ - [ - "FilAr", - "PLA", - "FilAr PLA Celeste Cielo" - ] - ], - "OFaDsTE0": [ - [ - "Polymaker", - "PA", - "Polymaker S1" - ] - ], - "OFaEesXQ": [ - [ - "FilAr", - "PLA", - "FilAr PLA Rojo de Carreras" - ] - ], - "OFaEuvNF": [ - [ - "Anycubic", - "PAHT-CF", - "Anycubic PAHT-CF" - ] - ], - "OFaHjk1V": [ - [ - "Volumic", - "PC", - "Volumic PC" - ] - ], - "OFaP2SsH": [ - [ - "LH Stinger", - "ASA", - "LHS ASA" - ] - ], - "OFaQMgRH": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Tough" - ] - ], - "OFaRjiIm": [ - [ - "SeeMeCNC", - "PETG-CF", - "SeeMeCNC PETG-CF" - ] - ], - "OFaYz8iE": [ - [ - "Elas", - "PLA", - "Elas PLA Pro" - ] - ], - "OFaaddbQ": [ - [ - "Flashforge", - "PVA", - "Flashforge PVA" - ] - ], - "OFaeIx7W": [ - [ - "iQ Materials", - "PETG Polymax", - "Polymaker PETG Polymax black P1" - ] - ], - "OFafO6VM": [ - [ - "Generic", - "PC-CF", - "Generic PC-CF" - ] - ], - "OFafocjw": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS" - ] - ], - "OFausr3F": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Rosa" - ] - ], - "OFb5EEM3": [ - [ - "Artillery", - "PET", - "Artillery PET" - ] - ], - "OFbP8zEO": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Silk" - ] - ], - "OFbPuPKY": [ - [ - "Generic", - "FLEX", - "Generic FLEX" - ] - ], - "OFbSChKb": [ - [ - "SeeMeCNC", - "PLA", - "SeeMeCNC PLA" - ] - ], - "OFbSZBOi": [ - [ - "InfiMech", - "TPU", - "InfiMech TPU Basic" - ] - ], - "OFbh7HcA": [ - [ - "Eryone", - "PP-CF", - "Eryone PP-CF" - ] - ], - "OFc3xdm9": [ - [ - "Overture", - "PLA", - "Overture PLA" - ] - ], - "OFc87pL3": [ - [ - "Orca Arena", - "PET-CF", - "Arena PET-CF" - ] - ], - "OFcBJQcC": [ - [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPU High-Flow" - ] - ], - "OFcBl0nJ": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA612-CF15" - ] - ], - "OFcJDtTx": [ - [ - "Artillery", - "TPU", - "Artillery TPU" - ] - ], - "OFcKtw8W": [ - [ - "Volumic", - "PA6-CF", - "PA6 CF20 (Performance)" - ] - ], - "OFcVLpNA": [ - [ - "FusRock", - "PAHT-GF", - "FusRock PAHT-GF" - ] - ], - "OFcfQk4h": [ - [ - "Overture", - "PLA", - "Overture Air PLA" - ] - ], - "OFcnWTJB": [ - [ - "BETA", - "PLA", - "BETA PLA Glitter" - ] - ], - "OFcogyWl": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Metal" - ] - ], - "OFcpa50Z": [ - [ - "addnorth", - "PLA-CF", - "addnorth PLA-CF Carbon Fiber" - ] - ], - "OFctg8r1": [ - [ - "CoLiDo", - "PLA", - "CoLiDo PLA+" - ] - ], - "OFcvKkrs": [ - [ - "Overture", - "TPU", - "Overture TPU" - ] - ], - "OFcytyoA": [ - [ - "Polymaker", - "PETG", - "Fiberon PETG-ESD" - ] - ], - "OFd0Fv0k": [ - [ - "Generic", - "PE-CF", - "Generic PE-CF" - ] - ], - "OFd2vX0G": [ - [ - "COEX 3D", - "PLA", - "COEX PLA PRIME" - ] - ], - "OFd4zw5l": [ - [ - "Aliz", - "PA-CF", - "AliZ PA-CF" - ] - ], - "OFdD5Wbu": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker J1 PLA-CF" - ] - ], - "OFdI4zMo": [ - [ - "DREMC", - "ASA", - "DREMC ASA CF" - ] - ], - "OFdXVjGZ": [ - [ - "Tiertime", - "PC", - "Tiertime PC" - ] - ], - "OFdb8YNz": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Manzana" - ] - ], - "OFdd8ZqJ": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Wood" - ] - ], - "OFdkWDiy": [ - [ - "Cubicon", - "PLA", - "Cubicon PLAi21" - ] - ], - "OFdqkWtz": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Luminous" - ] - ], - "OFdrYBmI": [ - [ - "Tiertime", - "ASA", - "Tiertime ASA" - ] - ], - "OFdtPd9h": [ - [ - "QIDI", - "PETG-GF", - "QIDI PETG-GF" - ] - ], - "OFdzlrhi": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Chocolate" - ] - ], - "OFe61n6v": [ - [ - "RatRig", - "PETG-CF10", - "RatRig PunkFil PETG CF" - ] - ], - "OFe8tuNb": [ - [ - "Tiertime", - "PA6-CF", - "Tiertime PA6-CF" - ] - ], - "OFe8yBMG": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough 0.6 nozzle" - ] - ], - "OFeAxvEt": [ - [ - "Snapmaker", - "ABS", - "Snapmaker Dual ABS Benchy" - ] - ], - "OFeCJqxx": [ - [ - "QIDI", - "ABS", - "QIDI ABS Rapido Metal" - ] - ], - "OFeF4UNh": [ - [ - "BETA", - "PLA", - "BETA PLA Silk" - ] - ], - "OFeIyhUx": [ - [ - "Anycubic", - "PC-CF", - "Anycubic PC-CF" - ] - ], - "OFeTATC7": [ - [ - "Snapmaker", - "Breakaway Support", - "Snapmaker J1 Breakaway" - ] - ], - "OFeVzkSU": [ - [ - "Polymaker", - "ABS", - "Fiberon PPS-GF20" - ] - ], - "OFeelsSM": [ - [ - "HATCHBOX", - "PLA", - "HATCHBOX PLA" - ] - ], - "OFelDBgv": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA" - ] - ], - "OFepU7Tl": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Matte" - ] - ], - "OFesA6rF": [ - [ - "Generic", - "PLA", - "Generic PLA Silk" - ] - ], - "OFexaZU2": [ - [ - "FilAr", - "PLA", - "FilAr PLA Manteca" - ] - ], - "OFf0MkD5": [ - [ - "QIDI", - "PETG", - "QIDI PETG Translucent" - ] - ], - "OFf52D4e": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker PLA-CF" - ] - ], - "OFf5awy4": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Matte" - ] - ], - "OFf6ZEvu": [ - [ - "InfiMech", - "PC", - "InfiMech PC" - ] - ], - "OFf6mfQO": [ - [ - "Bambu Lab", - "ABS", - "Bambu Support for ABS" - ] - ], - "OFf6ynfH": [ - [ - "FlyingBear", - "PETG Basic", - "FlyingBear PETG Basic" - ] - ], - "OFfBpSRI": [ - [ - "Bambu Lab", - "ASA", - "Bambu ASA" - ] - ], - "OFfD87Gy": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Glow" - ] - ], - "OFfHGM1D": [ - [ - "re3D", - "PP", - "re3D rPP" - ] - ], - "OFfJSCzm": [ - [ - "FDplast", - "PETG", - "FDplast PETG" - ] - ], - "OFfSqS4R": [ - [ - "Creality", - "PLA", - "ENDER FAST PLA" - ] - ], - "OFfYHK5z": [ - [ - "Polymaker", - "PLA", - "Polymaker PLA-HT" - ] - ], - "OFfZcoKr": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Piel" - ] - ], - "OFfb10SK": [ - [ - "Artillery", - "PC", - "Artillery PC" - ] - ], - "OFfmHUkQ": [ - [ - "Snapmaker", - "Breakaway Support", - "Snapmaker Dual Breakaway" - ] - ], - "OFfmZrI3": [ - [ - "FDplast", - "TPU", - "FDplast TPU" - ] - ], - "OFfnXFie": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 40D" - ] - ], - "OFfq5YXA": [ - [ - "Valment", - "PLA-CF", - "Valment PLA-CF" - ] - ], - "OFfr4XNO": [ - [ - "COEX 3D", - "TPU", - "COEX TPE 60D" - ] - ], - "OFfr6JDF": [ - [ - "QIDI", - "PETG", - "QIDI PETG Tough 0.8 nozzle" - ] - ], - "OFfuhviw": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Marble" - ] - ], - "OFfuih8e": [ - [ - "Creality", - "PLA", - "Creality Silk PLA" - ] - ], - "OFg3cWVt": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Metal" - ] - ], - "OFg57Nmc": [ - [ - "Bambu Lab", - "PC", - "Bambu PC FR" - ] - ], - "OFg8hMzT": [ - [ - "FILL3D", - "PP", - "FILL3D PPCF" - ] - ], - "OFg8ndtj": [ - [ - "Generic", - "PA", - "Generic PA" - ] - ], - "OFgHh8ly": [ - [ - "Afinia", - "PLA", - "Afinia Value PLA" - ] - ], - "OFgMWJ8T": [ - [ - "FilAr", - "PLA", - "FilAr PLA Negro Azabache" - ] - ], - "OFgSbX7E": [ - [ - "Volumic", - "PC", - "Volumic PC (Performance)" - ] - ], - "OFgVQkqW": [ - [ - "Cubicon", - "ABS", - "Cubicon ABSk" - ] - ], - "OFgXgt98": [ - [ - "Artillery", - "ABS", - "Artillery ABS" - ] - ], - "OFgbpcy9": [ - [ - "Generic", - "TPU", - "Generic TPU" - ] - ], - "OFgdaBOt": [ - [ - "Polymaker", - "PLA", - "Polymaker Tough PLA Family" - ] - ], - "OFgeM7nD": [ - [ - "Flashforge", - "PA-CF", - "Flashforge PA12-CF" - ] - ], - "OFgjgN35": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Silk" - ] - ], - "OFglhKLM": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido 0.8 nozzle" - ] - ], - "OFgpLTMR": [ - [ - "FilAr", - "PETG", - "FilAr PETG Gris Plata" - ] - ], - "OFgpQwkk": [ - [ - "Creality", - "PLA", - "CR-PLA Fluo" - ] - ], - "OFgptDSf": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Matte" - ] - ], - "OFgyPlwU": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU High-Flow" - ] - ], - "OFh7mvPO": [ - [ - "Prusa Polymers", - "PVB", - "Prusament PVB" - ] - ], - "OFh9u9c0": [ - [ - "Generic", - "PA-GF", - "Generic PA6-GF" - ] - ], - "OFhASRWj": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Temp Shift" - ] - ], - "OFhMO9Kh": [ - [ - "GreenGate3D", - "PETG", - "GreenGate3D PETG" - ] - ], - "OFhN09f0": [ - [ - "addnorth", - "PC", - "addnorth PC BLend HT LCF" - ] - ], - "OFhO5aEJ": [ - [ - "RatRig", - "ABS", - "RatRig PunkFil ABS" - ] - ], - "OFhQf8ou": [ - [ - "Snapmaker", - "PLA-CF", - "Snapmaker PLA-CF" - ] - ], - "OFhQfUQY": [ - [ - "Generic", - "SBS", - "Generic SBS" - ] - ], - "OFhTPf6L": [ - [ - "Generic", - "PA6-CF", - "Generic PA6-CF" - ] - ], - "OFhUjPA5": [ - [ - "Eryone", - "TPU", - "Eryone TPU" - ] - ], - "OFhWc5Bv": [ - [ - "NIT", - "ABS", - "NIT ABS" - ] - ], - "OFhWhL1i": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG" - ] - ], - "OFhWrAuP": [ - [ - "QIDI", - "PLA-CF", - "QIDI PLA-CF" - ] - ], - "OFhbolij": [ - [ - "eSUN", - "PLA", - "eSUN PLA-Lite" - ] - ], - "OFhcYzR8": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Sparkle" - ] - ], - "OFhfd722": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU Flex 93A" - ] - ], - "OFhiJE7Y": [ - [ - "QIDI", - "PEBA", - "QIDI PEBA 95A" - ] - ], - "OFhkN0a7": [ - [ - "Creality", - "PA-CF", - "Hyper PA612-CF" - ] - ], - "OFhlCNqq": [ - [ - "COEX 3D", - "PLA", - "COEX PLA" - ] - ], - "OFhmxnYw": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Basic" - ] - ], - "OFhuaUQB": [ - [ - "Bambu Lab", - "ABS", - "Bambu ABS" - ] - ], - "OFhwiZ50": [ - [ - "QIDI", - "PLA", - "QIDI PLA Rapido 0.2 nozzle" - ] - ], - "OFhx4uOG": [ - [ - "QIDI", - "PET-GF", - "QIDI PET-GF" - ] - ], - "OFi5RSve": [ - [ - "eSUN", - "PLA", - "eSUN PLA-LW" - ] - ], - "OFi6PfUM": [ - [ - "Generic", - "PLA", - "Generic PLA-Silk" - ] - ], - "OFi90KlM": [ - [ - "Volumic", - "PA", - "Volumic NYLON Ultra (Performance)" - ] - ], - "OFiDpM1B": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Bordo" - ] - ], - "OFiEz2XI": [ - [ - "Cubicon", - "PA", - "Cubicon PA-CF" - ] - ], - "OFiWaoqD": [ - [ - "DREMC", - "PPA-CF", - "DREMC PPA-CF" - ] - ], - "OFibWuBd": [ - [ - "Flashforge", - "ABS", - "Flashforge ABS Basic" - ] - ], - "OFilAA3b": [ - [ - "Eryone", - "PLA-CF", - "Eryone PLA-CF" - ] - ], - "OFilD4bP": [ - [ - "FlyingBear", - "PLA", - "FlyingBear PLA" - ] - ], - "OFilnglt": [ - [ - "Artillery", - "PETG", - "Artillery PETG" - ] - ], - "OFin64Qg": [ - [ - "Generic", - "PLA", - "Generic Support for PLA" - ] - ], - "OFitS8al": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Neon" - ] - ], - "OFiwEbze": [ - [ - "Volumic", - "PETG-ESD", - "PETG ESD (Performance)" - ] - ], - "OFj3bTjw": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Amarillo" - ] - ], - "OFj64R5U": [ - [ - "Peopoly", - "ABS", - "Peopoly Lancer ABS-GF" - ] - ], - "OFjD3YTW": [ - [ - "QIDI", - "PC-ABS-FR", - "Qidi PC-ABS-FR" - ] - ], - "OFjHrAX0": [ - [ - "WonderMaker", - "ABS", - "WonderMaker ABS" - ] - ], - "OFjLAYgO": [ - [ - "Anycubic", - "PEBA", - "Anycubic PEBA" - ] - ], - "OFjPXrXO": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Glow" - ] - ], - "OFjT9PkZ": [ - [ - "FilAr", - "PLA", - "FilAr PLA Tabaco" - ] - ], - "OFjUGUIK": [ - [ - "iQ Materials", - "PACF Pro", - "Fiberthree PACF Pro P1" - ] - ], - "OFjUXn67": [ - [ - "BETA", - "ABS", - "BETA ABS" - ] - ], - "OFjVOWfJ": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA High Speed" - ] - ], - "OFjXrKFO": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Impact" - ] - ], - "OFjb0wos": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Metallic" - ] - ], - "OFjcwUEm": [ - [ - "Cubicon", - "PLA", - "Cubicon PLA" - ] - ], - "OFjiXpyf": [ - [ - "Generic", - "TPU", - "Generic TPU 95A" - ] - ], - "OFjkdnyN": [ - [ - "Snapmaker", - "TPU", - "Snapmaker Dual TPU" - ] - ], - "OFjoAe0R": [ - [ - "QIDI", - "PLA-CF", - "Qidi PLA-CF" - ] - ], - "OFjogeYN": [ - [ - "BETA", - "PETG", - "BETA PETG Glitter" - ] - ], - "OFjorDcx": [ - [ - "FDplast", - "ABS", - "FDplast ABS" - ] - ], - "OFjt8dDO": [ - [ - "FusRock", - "PA-CF", - "FusRock NexPA-CF25" - ] - ], - "OFjt9en1": [ - [ - "Generic", - "CoPE", - "Generic CoPE" - ] - ], - "OFjz0a3m": [ - [ - "Prusa Polymers", - "PC-CF", - "Prusament PC-CF" - ] - ], - "OFk8t9mz": [ - [ - "Polymaker", - "PETG-CF", - "Fiberon PETG-rCF" - ] - ], - "OFkAltI8": [ - [ - "Other", - "PA-CF", - "Other PA-CF" - ] - ], - "OFkGp50Y": [ - [ - "Volumic", - "UNIV", - "Volumic UNIVERSAL Ultra (Performance)" - ] - ], - "OFkGvN4d": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Pixel" - ] - ], - "OFkHbjUv": [ - [ - "BETA", - "PLA", - "BETA PLA Metallic" - ] - ], - "OFkOviHk": [ - [ - "Polymaker", - "PA6-CF", - "Fiberon PA6-CF" - ] - ], - "OFkR8E2c": [ - [ - "Prusa Polymers", - "PETG", - "Prusament PETG" - ] - ], - "OFkf1HHw": [ - [ - "Generic", - "PLA", - "Generic PLA-SILK" - ] - ], - "OFkhhUS0": [ - [ - "Elegoo", - "PLA", - "Elegoo Rapid PLA+" - ] - ], - "OFklJcWK": [ - [ - "Other", - "PLA", - "Other PLA Hyper" - ] - ], - "OFknl9Iz": [ - [ - "Bambu Lab", - "ABS-GF", - "Bambu ABS-GF" - ] - ], - "OFkoLUtR": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde Oliva" - ] - ], - "OFkq7rPy": [ - [ - "Eryone", - "PA-GF", - "Eryone PA-GF" - ] - ], - "OFks6esg": [ - [ - "Creality", - "PLA", - "EN-PLA+" - ] - ], - "OFkx5MEe": [ - [ - "Artillery", - "PVA", - "Artillery PVA" - ] - ], - "OFkzr35f": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Antibacterial" - ] - ], - "OFlBoEfL": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPU High-Flow" - ] - ], - "OFlIsW6f": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Matte" - ] - ], - "OFlN6DL1": [ - [ - "QIDI", - "UltraPA", - "QIDI PA-Ultra" - ] - ], - "OFlP3KWq": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG HF" - ] - ], - "OFlSNkhc": [ - [ - "Eolas Prints", - "ASA", - "Eolas Prints ASA" - ] - ], - "OFlfuj2k": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 85A" - ] - ], - "OFlgMgNM": [ - [ - "Flashforge", - "PPS", - "Flashforge PPS" - ] - ], - "OFllmFhT": [ - [ - "Generic", - "PETG", - "Generic PETG PRO" - ] - ], - "OFlmxlDG": [ - [ - "BETA", - "HIPS", - "BETA HIPS" - ] - ], - "OFln72PT": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA-CF" - ] - ], - "OFlsTpJG": [ - [ - "Elegoo", - "PC", - "Elegoo PC-FR" - ] - ], - "OFlufQpZ": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA" - ] - ], - "OFlwmqrC": [ - [ - "Polymaker", - "PLA", - "Polymaker HT-PLA-GF" - ] - ], - "OFm06H6V": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Basic" - ] - ], - "OFm4SivL": [ - [ - "Flashforge", - "PLA", - "Flashforge PLA Pro" - ] - ], - "OFm4ysMO": [ - [ - "FlyingBear", - "ABS", - "FlyingBear ABS" - ] - ], - "OFm70lLt": [ - [ - "CoLiDo", - "PLA", - "CoLiDo PLA" - ] - ], - "OFm8rqoY": [ - [ - "re3D", - "PP", - "re3D rPP" - ] - ], - "OFmCOW2Y": [ - [ - "re3D", - "PETG", - "re3D rPETG" - ] - ], - "OFmFwUWM": [ - [ - "Prusa Polymers", - "ASA", - "Prusament ASA" - ] - ], - "OFmJAd3A": [ - [ - "FDplast", - "HIPS", - "FDplast HIPS" - ] - ], - "OFmKU2Ha": [ - [ - "Eryone", - "PLA", - "Eryone PLA" - ] - ], - "OFmN2lvw": [ - [ - "Generic", - "TPU-AMS", - "Generic TPU for AMS" - ] - ], - "OFmY0l6t": [ - [ - "Generic", - "PLA", - "Generic PLA Matte" - ] - ], - "OFma5TXH": [ - [ - "QIDI", - "ABS", - "QIDI ABS Odorless" - ] - ], - "OFmaeU4a": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Naranja" - ] - ], - "OFmfizbq": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Silk" - ] - ], - "OFmhJs5V": [ - [ - "Elegoo", - "TPU", - "Elegoo TPU" - ] - ], - "OFmjN2bc": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA" - ] - ], - "OFmn9NZL": [ - [ - "FusRock", - "ABS-GF", - "FusRock ABS-GF" - ] - ], - "OFmpMwxS": [ - [ - "Generic", - "PLA", - "Generic PLA High Speed" - ] - ], - "OFmt513L": [ - [ - "BETA", - "PETG", - "BETA PETG Transparent" - ] - ], - "OFmveLWz": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG-GF" - ] - ], - "OFn1QaY3": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Translucent2" - ] - ], - "OFn2GlhY": [ - [ - "Creality", - "PA-CF", - "Hyper PA6-CF" - ] - ], - "OFn6WpN7": [ - [ - "QIDI", - "PA12-CF", - "QIDI PA12-CF" - ] - ], - "OFnBvPhb": [ - [ - "addnorth", - "PLA", - "addnorth PLA rPLA RE-ADD" - ] - ], - "OFnHc3D6": [ - [ - "eSUN", - "PLA-CF", - "eSUN PLA-CF" - ] - ], - "OFnO4wnf": [ - [ - "Prusa Polymers", - "PLA", - "Prusament PLA" - ] - ], - "OFnSeLHk": [ - [ - "CoLiDo", - "PLA", - "CoLiDo PLA Silk" - ] - ], - "OFnT7Qpb": [ - [ - "Generic", - "TPU", - "Generic TPU HF" - ] - ], - "OFnXrkhA": [ - [ - "InfiMech", - "PA-CF", - "InfiMech PA-CF" - ] - ], - "OFnXwW8l": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Pro Metallic" - ] - ], - "OFnYVFk2": [ - [ - "FilAr", - "PLA", - "FilAr PLA Azul Francia" - ] - ], - "OFncpm7O": [ - [ - "WonderMaker", - "PLA", - "WonderMaker PLA Silk" - ] - ], - "OFneOFWe": [ - [ - "CoLiDo", - "ABS", - "CoLiDo ABS" - ] - ], - "OFnejEt4": [ - [ - "FilAr", - "PETG", - "FilAr PETG Cian" - ] - ], - "OFnfxTvi": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Lite" - ] - ], - "OFngcE81": [ - [ - "LH Stinger", - "TPU", - "LHS TPU Foamy 78A" - ] - ], - "OFniMuTN": [ - [ - "Bambu Lab", - "PA6-CF", - "Bambu PA6-CF" - ] - ], - "OFnmp6rt": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA+" - ] - ], - "OFnpX8uh": [ - [ - "BETA", - "PETG", - "BETA PETG Matte" - ] - ], - "OFnyHfcv": [ - [ - "Generic", - "ABS", - "Generic ABS BigNozzle" - ] - ], - "OFo15hcT": [ - [ - "QIDI", - "PAHT-GF", - "QIDI PAHT-GF" - ] - ], - "OFo2UF2C": [ - [ - "Generic", - "BVOH", - "Generic BVOH" - ] - ], - "OFo6n2pB": [ - [ - "Anycubic", - "PETG", - "Anycubic PETG" - ] - ], - "OFoBTKmn": [ - [ - "Cubicon", - "PETG", - "Cubicon PETG" - ] - ], - "OFoSknDB": [ - [ - "FILL3D", - "PLA", - "FILL3D PLA Turbo" - ] - ], - "OFoYSJKi": [ - [ - "Generic", - "PETG-CF", - "Generic PETG-CF" - ] - ], - "OFobDOW5": [ - [ - "Elegoo", - "ASA", - "Elegoo ASA" - ] - ], - "OFocyw69": [ - [ - "Aliz", - "PETG", - "AliZ PETG" - ] - ], - "OFoiVqVM": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Basic" - ] - ], - "OFojbdhR": [ - [ - "Flashforge", - "ABS-GF", - "Flashforge ABS-GF" - ] - ], - "OForhBi4": [ - [ - "Cubicon", - "ABS", - "Cubicon ABSk" - ] - ], - "OFovEIbw": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG HF" - ] - ], - "OFp4ETDP": [ - [ - "Creality", - "PLA", - "CR-PLA" - ] - ], - "OFp57RRC": [ - [ - "QIDI", - "PPS-GF", - "QIDI PPS-GF" - ] - ], - "OFp9wdmf": [ - [ - "Eryone", - "PA-CF", - "Eryone PA-CF" - ] - ], - "OFpBlrvY": [ - [ - "Valment", - "PLA", - "Valment PLA Silk" - ] - ], - "OFpDo5Ix": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS" - ] - ], - "OFpPGSKG": [ - [ - "SUNLU", - "PLA", - "SUNLU Silk PLA+" - ] - ], - "OFpPJSHE": [ - [ - "Peopoly", - "PETG", - "Peopoly Lancer PETG-C" - ] - ], - "OFpW4gdi": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Matte" - ] - ], - "OFpdjFI3": [ - [ - "BETA", - "PLA", - "BETA PLA UV Color Change" - ] - ], - "OFpu74Qe": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Eco" - ] - ], - "OFpumhCM": [ - [ - "Volumic", - "UNIV", - "Volumic UNIVERSAL Ultra" - ] - ], - "OFq0TY7C": [ - [ - "Flashforge", - "ASA-CF", - "Flashforge ASA-CF" - ] - ], - "OFq8gfS4": [ - [ - "FilAr", - "PETG", - "FilAr PETG Negro Azabache" - ] - ], - "OFq9svOz": [ - [ - "Generic", - "PPS", - "Generic PPS" - ] - ], - "OFqFRiLb": [ - [ - "Generic", - "PLA", - "Generic PLA BigNozzle" - ] - ], - "OFqGRZyH": [ - [ - "Numakers", - "PLA", - "Numakers PLA+" - ] - ], - "OFqINlYj": [ - [ - "eSUN", - "PLA", - "eSUN PLA+" - ] - ], - "OFqTwtXM": [ - [ - "addnorth", - "PETG", - "addnorth PETG rPETG Matte" - ] - ], - "OFqcL5UF": [ - [ - "QIDI", - "PA-S", - "QIDI Support For PET/PA" - ] - ], - "OFqtx549": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Celeste Cielo" - ] - ], - "OFqw2PQA": [ - [ - "Polymaker", - "PLA", - "Panchroma CoPE" - ] - ], - "OFrFBEfd": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Neon" - ] - ], - "OFrGJ4tR": [ - [ - "Anycubic", - "PLA", - "Anycubic PLA Slik" - ] - ], - "OFrKLeE3": [ - [ - "Bambu Lab", - "PLA", - "Bambu PLA Metal" - ] - ], - "OFrLiqiM": [ - [ - "InfiMech", - "PETG", - "InfiMech PETG" - ] - ], - "OFrM4hdm": [ - [ - "Creality", - "PLA-CF", - "CR-PLA Carbon" - ] - ], - "OFrOh600": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA Matte" - ] - ], - "OFrZDhVt": [ - [ - "Flashforge", - "ASA-GF", - "Flashforge ASA-GF" - ] - ], - "OFrdZ0cK": [ - [ - "eSUN", - "PETG", - "eSUN PETG+HS" - ] - ], - "OFrjacXf": [ - [ - "Flashforge", - "PET-CF", - "Flashforge PET-CF" - ] - ], - "OFrqMlGt": [ - [ - "BETA", - "PETG", - "BETA PETG" - ] - ], - "OFrr67nG": [ - [ - "Orca Arena", - "PC", - "Arena PC" - ] - ], - "OFryjl35": [ - [ - "Elegoo", - "ASA", - "Elegoo ASA-CF" - ] - ], - "OFsB2lxm": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA Matte" - ] - ], - "OFsD974q": [ - [ - "Volumic", - "PETG", - "Volumic PETG Ultra (Performance)" - ] - ], - "OFsDXRpS": [ - [ - "FilAr", - "PLA", - "FilAr PLA Piel" - ] - ], - "OFsFo7ms": [ - [ - "Volumic", - "PP", - "Volumic PP Ultra" - ] - ], - "OFsFon5l": [ - [ - "Generic", - "HIPS", - "Generic HIPS" - ] - ], - "OFsHSVZc": [ - [ - "Bambu Lab", - "PLA", - "Bambu Support W" - ] - ], - "OFsP8PKH": [ - [ - "Generic", - "ABS", - "Generic ABS HT" - ] - ], - "OFsRDvTM": [ - [ - "Polymaker", - "PLA", - "Panchroma PLA" - ] - ], - "OFsXQXbs": [ - [ - "FilAr", - "PETG", - "FilAr PETG Blanco Antartida" - ] - ], - "OFsijjtH": [ - [ - "Generic", - "PP-GF", - "Generic PP-GF" - ] - ], - "OFsoykbm": [ - [ - "DREMC", - "PA6-CF", - "DREMC PA6-CF" - ] - ], - "OFt0JbR7": [ - [ - "Snapmaker", - "PLA", - "Snapmaker J1 PLA Metal" - ] - ], - "OFt3HtlG": [ - [ - "QIDI", - "ABS-GF", - "QIDI ABS-GF" - ] - ], - "OFt6e0US": [ - [ - "FilAr", - "PETG", - "FilAr PETG Amarillo Lima" - ] - ], - "OFt7SngH": [ - [ - "Snapmaker", - "ASA", - "Snapmaker J1 ASA" - ] - ], - "OFtFtiS0": [ - [ - "Polymaker", - "PETG", - "Polymaker PETG Galaxy" - ] - ], - "OFtGC1ye": [ - [ - "Artillery", - "PA-CF", - "Artillery PA-CF" - ] - ], - "OFtKeKa9": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Tough" - ] - ], - "OFtOPlK6": [ - [ - "Orca Arena", - "PA-CF", - "Arena PAHT-CF" - ] - ], - "OFtOoWIj": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate" - ] - ], - "OFtRn8X8": [ - [ - "FDplast", - "SBS", - "FDplast SBS" - ] - ], - "OFtdVZpV": [ - [ - "addnorth", - "PLA", - "addnorth PLA X-PLA" - ] - ], - "OFtefokm": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Blanco" - ] - ], - "OFtkLO6q": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 90A" - ] - ], - "OFtndTHe": [ - [ - "BETA", - "PETG-CF", - "BETA PETG-CF" - ] - ], - "OFtpXCCv": [ - [ - "COEX 3D", - "ASA", - "COEX ASA PRIME" - ] - ], - "OFtr8eZw": [ - [ - "FDplast", - "PLA", - "FDplast PLA" - ] - ], - "OFtudokz": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA Premium" - ] - ], - "OFtybfNX": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA Metal" - ] - ], - "OFu08yGN": [ - [ - "Volumic", - "PETG", - "Volumic PETG Ultra carbone" - ] - ], - "OFu0fjPJ": [ - [ - "LH Stinger", - "PC", - "LHS PC CF" - ] - ], - "OFu1E4ur": [ - [ - "QIDI", - "ASA-AERO", - "QIDI ASA-Aero" - ] - ], - "OFu1evlr": [ - [ - "Generic", - "PCTG", - "Generic PCTG" - ] - ], - "OFuFEtKX": [ - [ - "Flashforge", - "PETG-CF", - "Flashforge PETG-CF" - ] - ], - "OFuJ49uH": [ - [ - "QIDI", - "PETG", - "QIDI PETG Basic" - ] - ], - "OFuO0cAP": [ - [ - "Orca Arena", - "PETG-CF", - "Arena PETG-CF" - ] - ], - "OFuUuIhR": [ - [ - "Elegoo", - "PETG", - "Elegoo PETG-CF" - ] - ], - "OFuV79ru": [ - [ - "Flashforge", - "PA-CF", - "Flashforge PA66-CF" - ] - ], - "OFuWCQXN": [ - [ - "COEX 3D", - "ABS", - "COEX ABS PRIME" - ] - ], - "OFuehn62": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Marble" - ] - ], - "OFufTAK9": [ - [ - "FilAr", - "PLA", - "FilAr PLA-mate Negro" - ] - ], - "OFughwKn": [ - [ - "QIDI", - "PLA", - "QIDI PLA Matte Basic" - ] - ], - "OFujZSdh": [ - [ - "Creality", - "PETG", - "Hyper PETG" - ] - ], - "OFulOdT2": [ - [ - "Generic", - "TPU", - "Generic TPU 85A" - ] - ], - "OFurdQxc": [ - [ - "FilAr", - "PETG", - "FilAr PETG Magenta" - ] - ], - "OFusbWjj": [ - [ - "Creality", - "PETG-CF", - "Hyper PETG-CF" - ] - ], - "OFuvOt0r": [ - [ - "BETA", - "PLA", - "BETA PLA Basic" - ] - ], - "OFuxH0Uz": [ - [ - "Volumic", - "TPU", - "Volumic FLEX93 Ultra" - ] - ], - "OFvD0Qqt": [ - [ - "Generic", - "PETG", - "Generic PETG BigNozzle" - ] - ], - "OFvDbkFq": [ - [ - "Prusa Polymers", - "PC", - "Prusament PC Blend" - ] - ], - "OFvKUnLh": [ - [ - "Bambu Lab", - "TPU", - "Bambu TPU 95A HF" - ] - ], - "OFvLppPU": [ - [ - "Creality", - "PA", - "CR-Nylon" - ] - ], - "OFvPPMxL": [ - [ - "FilAr", - "PLA", - "FilAr PLA Verde FilAr" - ] - ], - "OFvTVZc3": [ - [ - "COEX 3D", - "PETG", - "COEX PETG" - ] - ], - "OFvVy7yo": [ - [ - "Eolas Prints", - "TPU", - "Eolas Prints TPU D60 UV Resistant" - ] - ], - "OFvaLVML": [ - [ - "Flashforge", - "HIPS", - "Flashforge HIPS" - ] - ], - "OFvcIGee": [ - [ - "addnorth", - "TPU", - "addnorth TPU Pro Matte 85A" - ] - ], - "OFvdZ2bx": [ - [ - "QIDI", - "PLA", - "QIDI WOOD Rapido" - ] - ], - "OFvgE0Zh": [ - [ - "Elegoo", - "PLA", - "Elegoo PLA" - ] - ], - "OFvmwTZE": [ - [ - "Snapmaker", - "TPU", - "Snapmaker TPU 95A" - ] - ], - "OFvrXuV7": [ - [ - "Polymaker", - "ASA", - "PolyLite ASA" - ] - ], - "OFvxIS9g": [ - [ - "Polymaker", - "PA-CF", - "Fiberon PA12-CF10" - ] - ], - "OFvxghTE": [ - [ - "Generic", - "PLA", - "Generic HS PLA" - ] - ], - "OFvyB0Bz": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Galaxy" - ] - ], - "OFvzvwCu": [ - [ - "Eolas Prints", - "PLA", - "Eolas Prints PLA High Speed" - ] - ], - "OFw4WD4T": [ - [ - "Polymaker", - "PETG-CF", - "Fiberon PETG-rCF08" - ] - ], - "OFwJ0qu2": [ - [ - "DREMC", - "PET-CF", - "DREMC PET-CF" - ] - ], - "OFwLBAGf": [ - [ - "HATCHBOX", - "ABS", - "HATCHBOX ABS" - ] - ], - "OFwPrlCM": [ - [ - "Bambu Lab", - "PETG", - "Bambu PETG Translucent" - ] - ], - "OFwRJ4g0": [ - [ - "NIT", - "PLA", - "NIT PLA" - ] - ], - "OFwVVKEV": [ - [ - "Other", - "TPU", - "Other TPU" - ] - ], - "OFwaYjL6": [ - [ - "Polymaker", - "PA-GF", - "Fiberon PA6-GF" - ] - ], - "OFwbsgWj": [ - [ - "re3D", - "PC", - "re3D PC" - ] - ], - "OFwc74ck": [ - [ - "BETA", - "PLA", - "BETA PLA Matte" - ] - ], - "OFwhLMs4": [ - [ - "Snapmaker", - "PLA", - "Snapmaker PLA SnapSpeed" - ] - ], - "OFwjMiKL": [ - [ - "Flashforge", - "PETG", - "Flashforge PETG Transparent" - ] - ], - "OFwlZ7gH": [ - [ - "Flashforge", - "TPU-90A", - "Flashforge TPU-90A" - ] - ], - "OFwu7IAG": [ - [ - "COEX 3D", - "PCTG", - "COEX PCTG PRIME" - ] - ], - "OFwwAQnA": [ - [ - "Generic", - "PC", - "Generic PC HF" - ] - ], - "OFwyt1xt": [ - [ - "Eryone", - "ASA-CF", - "Eryone ASA-CF" - ] - ], - "OFx0WlzS": [ - [ - "Flashforge", - "TPU-95A", - "Flashforge TPU-95A" - ] - ], - "OFx8Lmsd": [ - [ - "Eolas Prints", - "PETG", - "Eolas Prints PETG UV Resistant" - ] - ], - "OFxA1p01": [ - [ - "Overture", - "PLA", - "Overture PLA Pro" - ] - ], - "OFxDHUX8": [ - [ - "SeeMeCNC", - "PETG", - "SeeMeCNC PETG" - ] - ], - "OFxJRuVF": [ - [ - "Anycubic", - "PC-GF", - "Anycubic PC-GF" - ] - ], - "OFxOHhZw": [ - [ - "Elegoo", - "ABS", - "Elegoo ABS" - ] - ], - "OFxUwUeW": [ - [ - "SUNLU", - "PLA", - "SUNLU PLA Marble" - ] - ], - "OFxYB4Sw": [ - [ - "Snapmaker", - "PETG-CF", - "Snapmaker J1 PETG-CF" - ] - ], - "OFxe4rXr": [ - [ - "Polymaker", - "PLA", - "PolyTerra PLA Marble" - ] - ], - "OFxqf79Q": [ - [ - "BETA", - "PETG", - "BETA PETG HF" - ] - ], - "OFy02QHU": [ - [ - "Polymaker", - "PLA", - "PolyLite PLA Translucent" - ] - ], - "OFy14TRA": [ - [ - "Snapmaker", - "ABS", - "Snapmaker J1 ABS" - ] - ], - "OFy3sW6j": [ - [ - "WonderMaker", - "ASA", - "WonderMaker ASA" - ] - ], - "OFy48TOp": [ - [ - "Generic", - "TPU-95A", - "Generic TPU-95A" - ] - ], - "OFy8tYJE": [ - [ - "Cubicon", - "ABS", - "Cubicon ABS-A100" - ] - ], - "OFyFyLIp": [ - [ - "SeeMeCNC", - "TPU", - "SeeMeCNC TPU" - ] - ], - "OFyHgT60": [ - [ - "Orca Arena", - "PLA", - "Arena PLA Sparkle" - ] - ], - "OFyJjkek": [ - [ - "addnorth", - "TPU", - "addnorth TPU Pro Matte 95A" - ] - ], - "OFyLWVF3": [ - [ - "Generic", - "PETG-GF", - "Generic PETG-GF" - ] - ], - "OFyPG8v2": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Eco" - ] - ], - "OFyPTnSk": [ - [ - "BETA", - "PETG", - "BETA PETG Heat Color Change" - ] - ], - "OFyQwdaM": [ - [ - "Volumic", - "ABS", - "Volumic ABS Ultra (Performance)" - ] - ], - "OFyRCIMh": [ - [ - "Other", - "PC", - "Other PC" - ] - ], - "OFyUJI3q": [ - [ - "Volumic", - "ABS", - "Volumic ABS Ultra" - ] - ], - "OFybzvQN": [ - [ - "FilAr", - "PETG", - "FilAr PETG Gris Ceniza" - ] - ], - "OFyhjiNs": [ - [ - "Snapmaker", - "PVA", - "Snapmaker PVA" - ] - ], - "OFyj3m13": [ - [ - "Snapmaker", - "PLA", - "Snapmaker Dual PLA Silk" - ] - ], - "OFymnal9": [ - [ - "Generic", - "PETG", - "Sovol Zero PETG HS Nozzle" - ] - ], - "OFyoBZdm": [ - [ - "LH Stinger", - "PLA", - "LHS PLA" - ] - ], - "OFyreocX": [ - [ - "Tiertime", - "PVA", - "Tiertime PVA" - ] - ], - "OFyrnlUn": [ - [ - "Snapmaker", - "TPU", - "Snapmaker J1 TPU" - ] - ], - "OFysxCep": [ - [ - "FilAr", - "PETG", - "FilAr PETG Coral" - ] - ], - "OFyxayW4": [ - [ - "Aliz", - "PLA", - "AliZ PLA" - ] - ], - "OFz1a1fy": [ - [ - "BETA", - "PETG", - "BETA PETG Metallic" - ] - ], - "OFz5oHgf": [ - [ - "Generic", - "PEEK", - "Generic PEEK" - ] - ], - "OFzAWsca": [ - [ - "QIDI", - "TPU", - "Qidi TPU 95A-HF" - ] - ], - "OFzB4uOs": [ - [ - "Generic", - "PLA", - "Sovol Zero PLA Basic HS Nozzle" - ] - ], - "OFzRtFM9": [ - [ - "Generic", - "ASA", - "Generic ASA HF" - ] - ], - "OFzS7zt4": [ - [ - "Anycubic", - "PA", - "Anycubic PA" - ] - ], - "OFzY7N3Z": [ - [ - "Artillery", - "PLA", - "Artillery PLA" - ] - ], - "OFzaq7Yg": [ - [ - "BETA", - "TPU", - "BETA TPU 98A" - ] - ], - "OFzk5oAo": [ - [ - "addnorth", - "ABS", - "addnorth ABS rABS" - ] - ], - "OFzrUUxc": [ - [ - "DREMC", - "ABS", - "DREMC ABS" - ] - ], - "OFztQ7rO": [ - [ - "LH Stinger", - "ASA", - "LHS ABS" - ] - ], - "OFzwA5Z9": [ - [ - "FusRock", - "PET-GF", - "FusRock PET-GF" - ] - ], - "OFzyIxba": [ - [ - "Bambu Lab", - "PVA", - "Bambu PVA" - ] - ] + "OF02UAVh": { + "filaments": [ + "Creality/Soleyin Ultra PLA" + ], + "name": "Soleyin Ultra PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OF03RK6r": { + "filaments": [ + "BBL/BETA PLA Metal" + ], + "name": "BETA PLA Metal", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF0AquDh": { + "filaments": [ + "Flashforge/FusRock S-Multi" + ], + "name": "FusRock S-Multi", + "filament_type": "PA", + "filament_vendor": "FusRock" + }, + "OF0EYBWQ": { + "filaments": [ + "BBL/addnorth PETG Flame v0" + ], + "name": "addnorth PETG Flame v0", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OF0FfcAG": { + "filaments": [ + "Anycubic/Anycubic TPU for ACE" + ], + "name": "Anycubic TPU for ACE", + "filament_type": "TPU", + "filament_vendor": "Anycubic" + }, + "OF0NgY1y": { + "filaments": [ + "BBL/COEX NYLEX PA6-CF", + "OrcaFilamentLibrary/COEX NYLEX PA6-CF" + ], + "name": "COEX NYLEX PA6-CF", + "filament_type": "PA-CF", + "filament_vendor": "COEX 3D" + }, + "OF0R5Wc7": { + "filaments": [ + "Artillery/Artillery PLA Tough" + ], + "name": "Artillery PLA Tough", + "filament_type": "PLA Tough", + "filament_vendor": "Artillery" + }, + "OF0UJcb6": { + "filaments": [ + "BBL/PolyLite PETG", + "OrcaFilamentLibrary/PolyLite PETG", + "Snapmaker/PolyLite PETG" + ], + "name": "PolyLite PETG", + "filament_type": "PETG", + "filament_vendor": "Polymaker" + }, + "OF0VpkBM": { + "filaments": [ + "Snapmaker/PolyLite PETG Translucent" + ], + "name": "PolyLite PETG Translucent", + "filament_type": "PETG", + "filament_vendor": "Polymaker" + }, + "OF0Vtzaw": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Radiante" + ], + "name": "FilAr PETG Amarillo Radiante", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OF0b7M1z": { + "filaments": [ + "SeeMeCNC/SeeMeCNC PA-CF" + ], + "name": "SeeMeCNC PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "SeeMeCNC" + }, + "OF0c7mnL": { + "filaments": [ + "InfiMech/InfiMech ABS" + ], + "name": "InfiMech ABS", + "filament_type": "ABS", + "filament_vendor": "InfiMech" + }, + "OF0gGRWk": { + "filaments": [ + "BBL/Panchroma PLA Glow", + "OrcaFilamentLibrary/Panchroma PLA Glow", + "Snapmaker/Panchroma PLA Glow" + ], + "name": "Panchroma PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF0kCNDK": { + "filaments": [ + "BBL/Panchroma PLA Luminous", + "OrcaFilamentLibrary/Panchroma PLA Luminous", + "Snapmaker/Panchroma PLA Luminous" + ], + "name": "Panchroma PLA Luminous", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF0omtEb": { + "filaments": [ + "Snapmaker/Fiberon ASA-CF08" + ], + "name": "Fiberon ASA-CF08", + "filament_type": "ASA", + "filament_vendor": "Polymaker" + }, + "OF0pzFLc": { + "filaments": [ + "BBL/COEX PLA+Silk", + "OrcaFilamentLibrary/COEX PLA+Silk" + ], + "name": "COEX PLA+Silk", + "filament_type": "PLA", + "filament_vendor": "COEX 3D" + }, + "OF0w7OpJ": { + "filaments": [ + "Qidi/QIDI ABS Rapido 0.8 nozzle" + ], + "name": "QIDI ABS Rapido 0.8 nozzle", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OF0wBGNx": { + "filaments": [ + "BBL/Bambu ASA-CF", + "OrcaFilamentLibrary/Bambu ASA-CF" + ], + "name": "Bambu ASA-CF", + "filament_type": "ASA-CF", + "filament_vendor": "Bambu Lab" + }, + "OF0wz84w": { + "filaments": [ + "Qidi/QIDI ABS Rapido 0.6 nozzle" + ], + "name": "QIDI ABS Rapido 0.6 nozzle", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OF0yFLkY": { + "filaments": [ + "Anycubic/Anycubic ASA" + ], + "name": "Anycubic ASA", + "filament_type": "ASA", + "filament_vendor": "Anycubic" + }, + "OF112FvY": { + "filaments": [ + "Anycubic/Generic PETG Basic" + ], + "name": "Generic PETG Basic", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OF1ID4N1": { + "filaments": [ + "BBL/addnorth PA6 Addlantis" + ], + "name": "addnorth PA6 Addlantis", + "filament_type": "PA6", + "filament_vendor": "addnorth" + }, + "OF1N1qMK": { + "filaments": [ + "BBL/Panchroma PLA UV Shift", + "OrcaFilamentLibrary/Panchroma PLA UV Shift", + "Snapmaker/Panchroma PLA UV Shift" + ], + "name": "Panchroma PLA UV Shift", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF1Pke8t": { + "filaments": [ + "BBL/Overture Easy PLA", + "OrcaFilamentLibrary/Overture Easy PLA" + ], + "name": "Overture Easy PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OF1UNk9P": { + "filaments": [ + "BBL/Generic PP", + "Creality/Generic PP", + "OrcaFilamentLibrary/Generic PP", + "Tiertime/Generic PP" + ], + "name": "Generic PP", + "filament_type": "PP", + "filament_vendor": "Generic" + }, + "OF1W7c76": { + "filaments": [ + "Qidi/QIDI ASA-CF" + ], + "name": "QIDI ASA-CF", + "filament_type": "ASA-CF", + "filament_vendor": "QIDI" + }, + "OF1d7c3A": { + "filaments": [ + "Snapmaker/Snapmaker ASA" + ], + "name": "Snapmaker ASA", + "filament_type": "ASA", + "filament_vendor": "Snapmaker" + }, + "OF1dpPrW": { + "filaments": [ + "Qidi/Bambu PLA" + ], + "name": "Bambu PLA", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OF1hznGB": { + "filaments": [ + "Elegoo/Elegoo PLA PRO", + "OrcaFilamentLibrary/Elegoo PLA PRO" + ], + "name": "Elegoo PLA PRO", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OF20kXr5": { + "filaments": [ + "Elegoo/Elegoo PAHT-CF", + "OrcaFilamentLibrary/Elegoo PAHT-CF" + ], + "name": "Elegoo PAHT-CF", + "filament_type": "PA", + "filament_vendor": "Elegoo" + }, + "OF223rZv": { + "filaments": [ + "Anycubic/Anycubic ABS" + ], + "name": "Anycubic ABS", + "filament_type": "ABS", + "filament_vendor": "Anycubic" + }, + "OF2EB9Iz": { + "filaments": [ + "Volumic/Volumic ASA Ultra" + ], + "name": "Volumic ASA Ultra", + "filament_type": "ASA", + "filament_vendor": "Volumic" + }, + "OF2EK9F1": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Violeta" + ], + "name": "FilAr PLA-mate Violeta", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF2GCW1l": { + "filaments": [ + "BBL/SUNLU PETG", + "Flashforge/SUNLU PETG", + "OrcaFilamentLibrary/SUNLU PETG", + "Sovol/SUNLU PETG" + ], + "name": "SUNLU PETG", + "filament_type": "PETG", + "filament_vendor": "SUNLU" + }, + "OF2TQpOO": { + "filaments": [ + "Qidi/QIDI PLA Silk" + ], + "name": "QIDI PLA Silk", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OF2VFe4J": { + "filaments": [ + "BBL/Bambu PAHT-CF", + "OrcaFilamentLibrary/Bambu PAHT-CF" + ], + "name": "Bambu PAHT-CF", + "filament_type": "PA-CF", + "filament_vendor": "Bambu Lab" + }, + "OF2Z1nT5": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Azul Imperial" + ], + "name": "FilAr PETG Azul Imperial", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OF2hfMcG": { + "filaments": [ + "OrcaArena/Arena PLA-CF" + ], + "name": "Arena PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Orca Arena" + }, + "OF2pj5l5": { + "filaments": [ + "BBL/Overture Super PLA+", + "OrcaFilamentLibrary/Overture Super PLA+" + ], + "name": "Overture Super PLA+", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OF2xccEe": { + "filaments": [], + "name": "DREMC ASA GF", + "filament_type": "ASA", + "filament_vendor": "DREMC" + }, + "OF30Ftju": { + "filaments": [ + "Elegoo/Elegoo Rapid TPU 95A", + "OrcaFilamentLibrary/Elegoo Rapid TPU 95A" + ], + "name": "Elegoo Rapid TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Elegoo" + }, + "OF342jVN": { + "filaments": [ + "BBL/Bambu PLA Tough+" + ], + "name": "Bambu PLA Tough+", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OF3F63OE": { + "filaments": [ + "re3D/re3D PETG" + ], + "name": "re3D PETG", + "filament_type": "PETG", + "filament_vendor": "re3D" + }, + "OF3IKafc": { + "filaments": [ + "Qidi/QIDI PLA Rapido Matte" + ], + "name": "QIDI PLA Rapido Matte", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OF3OMgrI": { + "filaments": [ + "Creality/CR-Silk" + ], + "name": "CR-Silk", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OF3PDEw3": { + "filaments": [ + "BBL/BETA PLA High Speed" + ], + "name": "BETA PLA High Speed", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF3WQaKK": { + "filaments": [ + "Creality/CR-PETG" + ], + "name": "CR-PETG", + "filament_type": "PETG", + "filament_vendor": "Creality" + }, + "OF3dJf4E": { + "filaments": [ + "Volumic/Volumic PLA Ultra (Performance)" + ], + "name": "Volumic PLA Ultra (Performance)", + "filament_type": "PLA", + "filament_vendor": "Volumic" + }, + "OF3fwO8b": { + "filaments": [ + "FlyingBear/FlyingBear PLA Basic" + ], + "name": "FlyingBear PLA Basic", + "filament_type": "PLA", + "filament_vendor": "FlyingBear" + }, + "OF3kBrdA": { + "filaments": [ + "Creality/eSUN PETG", + "OrcaFilamentLibrary/eSUN PETG" + ], + "name": "eSUN PETG", + "filament_type": "PETG", + "filament_vendor": "eSUN" + }, + "OF3msXEa": { + "filaments": [ + "Snapmaker/Snapmaker Dual PETG-CF" + ], + "name": "Snapmaker Dual PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Snapmaker" + }, + "OF3ydJTT": { + "filaments": [ + "InfiMech/InfiMech PLA Hyper" + ], + "name": "InfiMech PLA Hyper", + "filament_type": "PLA", + "filament_vendor": "InfiMech" + }, + "OF43Raws": { + "filaments": [ + "Snapmaker/PolyTerra J1 PLA" + ], + "name": "PolyTerra J1 PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF44ERDr": { + "filaments": [ + "Snapmaker/Polymaker General PLA Family" + ], + "name": "Polymaker General PLA Family", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF44VYzK": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Azul Francia" + ], + "name": "FilAr PETG Azul Francia", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OF4APyxe": { + "filaments": [ + "Creality/Hyper PAHT-CF" + ], + "name": "Hyper PAHT-CF", + "filament_type": "PA-CF", + "filament_vendor": "Creality" + }, + "OF4GM5qX": { + "filaments": [ + "Ratrig/Generic ASA BigNozzle" + ], + "name": "Generic ASA BigNozzle", + "filament_type": "ASA", + "filament_vendor": "Generic" + }, + "OF4KsW72": { + "filaments": [], + "name": "FilAr PLA", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF4Nhggz": { + "filaments": [ + "Artillery/Artillery PLA Basic+" + ], + "name": "Artillery PLA Basic+", + "filament_type": "PLA Basic+", + "filament_vendor": "Artillery" + }, + "OF4PKvem": { + "filaments": [ + "BBL/BETA PLA Fluorescence" + ], + "name": "BETA PLA Fluorescence", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF4QZANi": { + "filaments": [ + "BBL/BETA TPU Matte" + ], + "name": "BETA TPU Matte", + "filament_type": "TPU", + "filament_vendor": "BETA" + }, + "OF4RvVuU": { + "filaments": [ + "BBL/Bambu PPS-CF" + ], + "name": "Bambu PPS-CF", + "filament_type": "PPS-CF", + "filament_vendor": "Bambu Lab" + }, + "OF4S3To3": { + "filaments": [ + "Qidi/QIDI PETG Rapido" + ], + "name": "QIDI PETG Rapido", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OF4WB37S": { + "filaments": [ + "Snapmaker/Snapmaker PETG" + ], + "name": "Snapmaker PETG", + "filament_type": "PETG", + "filament_vendor": "Snapmaker" + }, + "OF4XTfoI": { + "filaments": [ + "BBL/BETA PETG Marble" + ], + "name": "BETA PETG Marble", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OF4f8vVp": { + "filaments": [ + "WonderMaker/WonderMaker PET-CF" + ], + "name": "WonderMaker PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "WonderMaker" + }, + "OF4iWKrE": { + "filaments": [ + "Qidi/QIDI PETG-CF" + ], + "name": "QIDI PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "QIDI" + }, + "OF4nQ62r": { + "filaments": [ + "Qidi/QIDI PLA Basic" + ], + "name": "QIDI PLA Basic", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OF4ulo9Y": { + "filaments": [ + "WonderMaker/WonderMaker PVA" + ], + "name": "WonderMaker PVA", + "filament_type": "PVA", + "filament_vendor": "WonderMaker" + }, + "OF53eLVD": { + "filaments": [ + "Blocks/Generic ASA-CF", + "Creality/Generic ASA-CF", + "Elegoo/Generic ASA-CF" + ], + "name": "Generic ASA-CF", + "filament_type": "ASA-CF", + "filament_vendor": "Generic" + }, + "OF54B0S0": { + "filaments": [ + "BBL/Bambu PPA-CF", + "OrcaFilamentLibrary/Bambu PPA-CF" + ], + "name": "Bambu PPA-CF", + "filament_type": "PPA-CF", + "filament_vendor": "Bambu Lab" + }, + "OF54SvEe": { + "filaments": [ + "Prusa/Prusament PA-CF" + ], + "name": "Prusament PA-CF", + "filament_type": "PA11-CF", + "filament_vendor": "Prusa Polymers" + }, + "OF55jHAJ": { + "filaments": [ + "Prusa/Generic ABS HF" + ], + "name": "Generic ABS HF", + "filament_type": "ABS", + "filament_vendor": "Generic" + }, + "OF5B9sUc": { + "filaments": [ + "BBL/Fiberon PA6-GF25" + ], + "name": "Fiberon PA6-GF25", + "filament_type": "PA-GF", + "filament_vendor": "Polymaker" + }, + "OF5BN24W": { + "filaments": [ + "Flashforge/Flashforge PPA-GF" + ], + "name": "Flashforge PPA-GF", + "filament_type": "PPA-GF", + "filament_vendor": "Flashforge" + }, + "OF5BXhHF": { + "filaments": [ + "BBL/BETA PLA High Temp" + ], + "name": "BETA PLA High Temp", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF5CgdDq": { + "filaments": [ + "BBL/PolyLite PLA", + "OrcaArena/PolyLite PLA", + "OrcaFilamentLibrary/PolyLite PLA", + "Qidi/PolyLite PLA", + "Snapmaker/PolyLite PLA" + ], + "name": "PolyLite PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF5LAnla": { + "filaments": [ + "BBL/BETA PLA Gradient" + ], + "name": "BETA PLA Gradient", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF5NqBfC": { + "filaments": [ + "Wanhao France/YUMI PETG" + ], + "name": "YUMI PETG", + "filament_type": "PETG", + "filament_vendor": "Yumi" + }, + "OF5P4jgA": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Dorado" + ], + "name": "FilAr PLA Dorado", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF5PtjTp": { + "filaments": [ + "Anycubic/Anycubic PLA Glow" + ], + "name": "Anycubic PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OF5SJ3jz": { + "filaments": [ + "Flashforge/Flashforge ABS" + ], + "name": "Flashforge ABS", + "filament_type": "ABS", + "filament_vendor": "Flashforge" + }, + "OF5YVJXH": { + "filaments": [ + "Artillery/Artillery ASA" + ], + "name": "Artillery ASA", + "filament_type": "ASA", + "filament_vendor": "Artillery" + }, + "OF5c6nq3": { + "filaments": [ + "Flashforge/Generic TPU-64D" + ], + "name": "Generic TPU-64D", + "filament_type": "TPU-64D", + "filament_vendor": "Generic" + }, + "OF5lGPup": { + "filaments": [ + "WonderMaker/WonderMaker PETG Basic" + ], + "name": "WonderMaker PETG Basic", + "filament_type": "PETG", + "filament_vendor": "WonderMaker" + }, + "OF5nlfKY": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Oro" + ], + "name": "FilAr PLA Oro", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF5oNRED": { + "filaments": [ + "Eryone/Eryone PP" + ], + "name": "Eryone PP", + "filament_type": "PP", + "filament_vendor": "Eryone" + }, + "OF5oXk4M": { + "filaments": [ + "Anycubic/Polymaker PLA Pro", + "Snapmaker/Polymaker PLA Pro" + ], + "name": "Polymaker PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF5rnhjh": { + "filaments": [], + "name": "FilAr PETG", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OF5tX6va": { + "filaments": [ + "Ratrig/Generic TPU BigNozzle" + ], + "name": "Generic TPU BigNozzle", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OF5umxxT": { + "filaments": [ + "BBL/PolyLite PLA Glow", + "Snapmaker/PolyLite PLA Glow" + ], + "name": "PolyLite PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF5vgi2G": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Azul" + ], + "name": "FilAr PLA-mate Azul", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF65InrS": { + "filaments": [ + "Snapmaker/Snapmaker TPU" + ], + "name": "Snapmaker TPU", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OF66KUAN": { + "filaments": [ + "Creality/PolySonic PLA" + ], + "name": "PolySonic PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF6ATsCF": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA-CF" + ], + "name": "Snapmaker Dual PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Snapmaker" + }, + "OF6H51Xx": { + "filaments": [ + "Snapmaker/Polymaker PETG", + "Sovol/Polymaker PETG" + ], + "name": "Polymaker PETG", + "filament_type": "PETG", + "filament_vendor": "Polymaker" + }, + "OF6Ll8lK": { + "filaments": [ + "Elegoo/Elegoo PETG Translucent", + "OrcaFilamentLibrary/Elegoo PETG Translucent" + ], + "name": "Elegoo PETG Translucent", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OF6MOPWx": { + "filaments": [ + "Creality/Generic PET", + "Elegoo/Generic PET", + "Flashforge/Generic PET" + ], + "name": "Generic PET", + "filament_type": "PET", + "filament_vendor": "Generic" + }, + "OF6TuVAg": { + "filaments": [ + "Snapmaker/Snapmaker J1 PVA" + ], + "name": "Snapmaker J1 PVA", + "filament_type": "PVA", + "filament_vendor": "Snapmaker" + }, + "OF6Yn69v": { + "filaments": [ + "BBL/BETA TPU 90A" + ], + "name": "BETA TPU 90A", + "filament_type": "TPU", + "filament_vendor": "BETA" + }, + "OF6kj4jI": { + "filaments": [ + "iQ/Fiberthree PACF Pro P2" + ], + "name": "Fiberthree PACF Pro P2", + "filament_type": "PACF Pro", + "filament_vendor": "iQ Materials" + }, + "OF6qAuyi": { + "filaments": [ + "Flashforge/Flashforge PLA Matte" + ], + "name": "Flashforge PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OF6qw3Wb": { + "filaments": [ + "BBL/BETA PAHT-CF" + ], + "name": "BETA PAHT-CF", + "filament_type": "PA-CF", + "filament_vendor": "BETA" + }, + "OF6rdQ6M": { + "filaments": [ + "BBL/Generic PPS-CF", + "Creality/Generic PPS-CF", + "Tiertime/Generic PPS-CF" + ], + "name": "Generic PPS-CF", + "filament_type": "PPS-CF", + "filament_vendor": "Generic" + }, + "OF70zbGS": { + "filaments": [ + "Creality/Hyper L-W PLA" + ], + "name": "Hyper L-W PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OF71b7qO": { + "filaments": [ + "BBL/addnorth PLA E-PLA" + ], + "name": "addnorth PLA E-PLA", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OF72YYTd": { + "filaments": [ + "Snapmaker/Snapmaker ABS" + ], + "name": "Snapmaker ABS", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OF74KeQR": { + "filaments": [ + "BBL/Generic PHA", + "OrcaFilamentLibrary/Generic PHA", + "Tiertime/Generic PHA" + ], + "name": "Generic PHA", + "filament_type": "PHA", + "filament_vendor": "Generic" + }, + "OF79Fbo6": { + "filaments": [ + "Cubicon/Cubicon PC" + ], + "name": "Cubicon PC", + "filament_type": "PC", + "filament_vendor": "Cubicon" + }, + "OF7H3VJM": { + "filaments": [ + "OrcaFilamentLibrary/eSUN PLA-Marble" + ], + "name": "eSUN PLA-Marble", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OF7OqDp3": { + "filaments": [ + "Tiertime/Tiertime PLA-CF" + ], + "name": "Tiertime PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Tiertime" + }, + "OF7SliVn": { + "filaments": [ + "Snapmaker/PolyLite J1 PLA" + ], + "name": "PolyLite J1 PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OF7c9fln": { + "filaments": [ + "Anycubic/Anycubic PLA Translucent" + ], + "name": "Anycubic PLA Translucent", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OF7lOgYF": { + "filaments": [ + "BBL/Generic PETG HF", + "OrcaFilamentLibrary/Generic PETG HF", + "Prusa/Generic PETG HF" + ], + "name": "Generic PETG HF", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OF7lwj52": { + "filaments": [ + "CoLiDo/CoLiDo PETG" + ], + "name": "CoLiDo PETG", + "filament_type": "PETG", + "filament_vendor": "CoLiDo" + }, + "OF7nBAd3": { + "filaments": [ + "Eryone/Eryone Silk PLA" + ], + "name": "Eryone Silk PLA", + "filament_type": "PLA Silk", + "filament_vendor": "Eryone" + }, + "OF7pjCsO": { + "filaments": [ + "Flashforge/FusRock PAHT" + ], + "name": "FusRock PAHT", + "filament_type": "PAHT", + "filament_vendor": "FusRock" + }, + "OF7tt7DO": { + "filaments": [ + "Cubicon/Cubicon PLA+" + ], + "name": "Cubicon PLA+", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OF8GnyFU": { + "filaments": [ + "Creality/Hyper ABS" + ], + "name": "Hyper ABS", + "filament_type": "ABS", + "filament_vendor": "Creality" + }, + "OF8GtyKJ": { + "filaments": [ + "Flashforge/Flashforge TPU-64D" + ], + "name": "Flashforge TPU-64D", + "filament_type": "TPU-64D", + "filament_vendor": "Flashforge" + }, + "OF8Hx3Pi": { + "filaments": [ + "Cubicon/Cubicon PETG" + ], + "name": "Cubicon PETG", + "filament_type": "PETG", + "filament_vendor": "Cubicon" + }, + "OF8Jl6NT": { + "filaments": [ + "Snapmaker/Snapmaker J1 PET" + ], + "name": "Snapmaker J1 PET", + "filament_type": "PET", + "filament_vendor": "Snapmaker" + }, + "OF8O09RG": { + "filaments": [ + "Flashforge/Flashforge HS PLA Burnt Ti" + ], + "name": "Flashforge HS PLA Burnt Ti", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OF8QdQwS": { + "filaments": [ + "BBL/BETA PLA Silk+" + ], + "name": "BETA PLA Silk+", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OF8Tlg47": { + "filaments": [ + "BBL/Generic PPA-GF", + "OrcaFilamentLibrary/Generic PPA-GF", + "Tiertime/Generic PPA-GF" + ], + "name": "Generic PPA-GF", + "filament_type": "PPA-GF", + "filament_vendor": "Generic" + }, + "OF8aFWfQ": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Amarillo Lirio" + ], + "name": "FilAr PLA Amarillo Lirio", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF8dCquh": { + "filaments": [ + "Snapmaker/Snapmaker J1 ABS Benchy" + ], + "name": "Snapmaker J1 ABS Benchy", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OF8eaY7j": { + "filaments": [ + "Creality/Generic PA612-CF" + ], + "name": "Generic PA612-CF", + "filament_type": "PA-CF", + "filament_vendor": "Generic" + }, + "OF8jh0Lk": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Marron" + ], + "name": "FilAr PLA-mate Marron", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OF8kJys9": { + "filaments": [ + "Eryone/Eryone PETG" + ], + "name": "Eryone PETG", + "filament_type": "PETG", + "filament_vendor": "Eryone" + }, + "OF8tPByX": { + "filaments": [ + "BBL/Generic PPA-CF", + "OrcaFilamentLibrary/Generic PPA-CF", + "Tiertime/Generic PPA-CF" + ], + "name": "Generic PPA-CF", + "filament_type": "PPA-CF", + "filament_vendor": "Generic" + }, + "OF8wE5l7": { + "filaments": [ + "Artillery/Artillery PETG Basic" + ], + "name": "Artillery PETG Basic", + "filament_type": "PETG Basic", + "filament_vendor": "Artillery" + }, + "OF99UMPq": { + "filaments": [ + "BBL/COEX ABS", + "OrcaFilamentLibrary/COEX ABS" + ], + "name": "COEX ABS", + "filament_type": "ABS", + "filament_vendor": "COEX 3D" + }, + "OF99vXPs": { + "filaments": [], + "name": "DREMC ABS+", + "filament_type": "ABS", + "filament_vendor": "DREMC" + }, + "OF9EHUKK": { + "filaments": [ + "Qidi/QIDI TPU-GF" + ], + "name": "QIDI TPU-GF", + "filament_type": "TPU-GF", + "filament_vendor": "QIDI" + }, + "OF9HCdyQ": { + "filaments": [ + "Afinia/Afinia PLA" + ], + "name": "Afinia PLA", + "filament_type": "PLA", + "filament_vendor": "Afinia" + }, + "OF9OlTWH": { + "filaments": [ + "BBL/Bambu PLA Marble", + "OrcaFilamentLibrary/Bambu PLA Marble" + ], + "name": "Bambu PLA Marble", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OF9PELEb": { + "filaments": [ + "Qidi/QIDI UltraPA-CF25" + ], + "name": "QIDI UltraPA-CF25", + "filament_type": "UltraPA-CF25", + "filament_vendor": "QIDI" + }, + "OF9UJOGF": { + "filaments": [ + "Anycubic/Anycubic PETG-CF" + ], + "name": "Anycubic PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Anycubic" + }, + "OF9cAwMK": { + "filaments": [ + "Flashforge/Flashforge PLA-CF" + ], + "name": "Flashforge PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Flashforge" + }, + "OF9emAI9": { + "filaments": [ + "Ratrig/RatRig PunkFil PETG" + ], + "name": "RatRig PunkFil PETG", + "filament_type": "PETG", + "filament_vendor": "RatRig" + }, + "OFA026vt": { + "filaments": [ + "OrcaArena/Arena PA-CF" + ], + "name": "Arena PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Orca Arena" + }, + "OFAC7Wyu": { + "filaments": [ + "Artillery/Artillery PLA Matte" + ], + "name": "Artillery PLA Matte", + "filament_type": "PLA Matte", + "filament_vendor": "Artillery" + }, + "OFAIBCLJ": { + "filaments": [ + "Elegoo/Generic ABS-CF" + ], + "name": "Generic ABS-CF", + "filament_type": "ABS-CF", + "filament_vendor": "Generic" + }, + "OFAIrQXu": { + "filaments": [ + "Creality/Creality Hyper PLA" + ], + "name": "Creality Hyper PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFANFm4x": { + "filaments": [ + "Qidi/QIDI PLA Rapido Metal" + ], + "name": "QIDI PLA Rapido Metal", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFAO9A7J": { + "filaments": [ + "Sovol/Sovol Zero PLA Silk HS Nozzle" + ], + "name": "Sovol Zero PLA Silk HS Nozzle", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFAZllAN": { + "filaments": [ + "Artillery/Artillery PLA-CF" + ], + "name": "Artillery PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Artillery" + }, + "OFAc0Pr3": { + "filaments": [ + "BBL/Fiberon PET-CF17" + ], + "name": "Fiberon PET-CF17", + "filament_type": "PET-CF", + "filament_vendor": "Polymaker" + }, + "OFAcJkl1": { + "filaments": [ + "BBL/addnorth PETG-CF Rigid X" + ], + "name": "addnorth PETG-CF Rigid X", + "filament_type": "PETG-CF", + "filament_vendor": "addnorth" + }, + "OFAebKg8": { + "filaments": [ + "Flashforge/Flashforge PLA Metal" + ], + "name": "Flashforge PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFAnyRUI": { + "filaments": [ + "BBL/Bambu Support For PLA", + "OrcaFilamentLibrary/Bambu Support For PLA" + ], + "name": "Bambu Support For PLA", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFAt6ec0": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Marron Oxido" + ], + "name": "FilAr PLA Marron Oxido", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFB5SmWk": { + "filaments": [ + "OrcaFilamentLibrary/Valment PLA Galaxy" + ], + "name": "Valment PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Valment" + }, + "OFBBgw7B": { + "filaments": [ + "WonderMaker/WonderMaker PLA Wood" + ], + "name": "WonderMaker PLA Wood", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFBJAdLw": { + "filaments": [ + "LH/LHS PCTG" + ], + "name": "LHS PCTG", + "filament_type": "PCTG", + "filament_vendor": "LH Stinger" + }, + "OFBLktDy": { + "filaments": [ + "Creality/Soleyin Basic PETG" + ], + "name": "Soleyin Basic PETG", + "filament_type": "PETG", + "filament_vendor": "Creality" + }, + "OFBSW57R": { + "filaments": [ + "BBL/Bambu PLA Aero", + "OrcaFilamentLibrary/Bambu PLA Aero" + ], + "name": "Bambu PLA Aero", + "filament_type": "PLA-AERO", + "filament_vendor": "Bambu Lab" + }, + "OFBUIlZ7": { + "filaments": [ + "Elegoo/Elegoo PLA+", + "OrcaFilamentLibrary/Elegoo PLA+" + ], + "name": "Elegoo PLA+", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFBlFMVp": { + "filaments": [ + "Snapmaker/Snapmaker Dual PETG" + ], + "name": "Snapmaker Dual PETG", + "filament_type": "PETG", + "filament_vendor": "Snapmaker" + }, + "OFBoSWxb": { + "filaments": [ + "BBL/PolyLite PLA Luminous", + "Snapmaker/PolyLite PLA Luminous" + ], + "name": "PolyLite PLA Luminous", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFBsbMMF": { + "filaments": [ + "BBL/addnorth PA-CF Adura X" + ], + "name": "addnorth PA-CF Adura X", + "filament_type": "PA-CF", + "filament_vendor": "addnorth" + }, + "OFBw6eEG": { + "filaments": [ + "BBL/Overture Matte PLA", + "OrcaFilamentLibrary/Overture Matte PLA" + ], + "name": "Overture Matte PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFC1PzXz": { + "filaments": [ + "Creality/Hyper Luminous" + ], + "name": "Hyper Luminous", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFC5f4Ay": { + "filaments": [ + "RH3D/Generic PCCF" + ], + "name": "Generic PCCF", + "filament_type": "PC-CF", + "filament_vendor": "Generic" + }, + "OFC78WGQ": { + "filaments": [ + "BBL/Panchroma PLA Starlight", + "OrcaFilamentLibrary/Panchroma PLA Starlight", + "Snapmaker/Panchroma PLA Starlight" + ], + "name": "Panchroma PLA Starlight", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFCD8qiU": { + "filaments": [ + "BBL/Generic EVA", + "OrcaFilamentLibrary/Generic EVA", + "Tiertime/Generic EVA" + ], + "name": "Generic EVA", + "filament_type": "EVA", + "filament_vendor": "Generic" + }, + "OFCIUsWh": { + "filaments": [ + "BBL/Panchroma PLA Translucent", + "OrcaFilamentLibrary/Panchroma PLA Translucent", + "Snapmaker/Panchroma PLA Translucent" + ], + "name": "Panchroma PLA Translucent", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFCJpR7a": { + "filaments": [ + "Creality/HP Ultra PLA" + ], + "name": "HP Ultra PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFCZsqXg": { + "filaments": [ + "Creality/Hyper PLA" + ], + "name": "Hyper PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFCccVrQ": { + "filaments": [ + "OrcaFilamentLibrary/PolyTerra Dual PLA", + "Snapmaker/PolyTerra Dual PLA" + ], + "name": "PolyTerra Dual PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFCidU7j": { + "filaments": [ + "OrcaFilamentLibrary/DREMC ABS-GF" + ], + "name": "DREMC ABS-GF", + "filament_type": "ABS-GF", + "filament_vendor": "DREMC" + }, + "OFCjG251": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Verde" + ], + "name": "FilAr PLA-mate Verde", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFCn83wF": { + "filaments": [ + "Flashforge/FusRock S-PAHT" + ], + "name": "FusRock S-PAHT", + "filament_type": "PAHT", + "filament_vendor": "FusRock" + }, + "OFCnywiC": { + "filaments": [ + "Tiertime/Tiertime PET-CF" + ], + "name": "Tiertime PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Tiertime" + }, + "OFCoRobU": { + "filaments": [ + "OrcaFilamentLibrary/Elas ASA" + ], + "name": "Elas ASA", + "filament_type": "ASA", + "filament_vendor": "Elas" + }, + "OFCp3Bgo": { + "filaments": [ + "Anycubic/Anycubic PLA SE" + ], + "name": "Anycubic PLA SE", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFCuaCer": { + "filaments": [ + "Volumic/Désactivé" + ], + "name": "Désactivé", + "filament_type": "PLA", + "filament_vendor": "Volumic" + }, + "OFD21ije": { + "filaments": [ + "Cubicon/Cubicon PA-CF" + ], + "name": "Cubicon PA-CF", + "filament_type": "PA", + "filament_vendor": "Cubicon" + }, + "OFD8loeT": { + "filaments": [ + "re3D/re3D rPETG" + ], + "name": "re3D rPETG", + "filament_type": "PETG", + "filament_vendor": "re3D" + }, + "OFD9taow": { + "filaments": [ + "FlyingBear/FlyingBear PLA Hyper" + ], + "name": "FlyingBear PLA Hyper", + "filament_type": "PLA", + "filament_vendor": "FlyingBear" + }, + "OFDETOM6": { + "filaments": [ + "Creality/eSUN PLA-Matte", + "OrcaFilamentLibrary/eSUN PLA-Matte" + ], + "name": "eSUN PLA-Matte", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFDGigEI": { + "filaments": [ + "BBL/Bambu PLA Dynamic", + "OrcaFilamentLibrary/Bambu PLA Dynamic" + ], + "name": "Bambu PLA Dynamic", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFDIrhbu": { + "filaments": [ + "Qidi/QIDI PC/ABS-FR" + ], + "name": "QIDI PC/ABS-FR", + "filament_type": "PC-ABS-FR", + "filament_vendor": "QIDI" + }, + "OFDJU6R3": { + "filaments": [ + "Afinia/Afinia TPU" + ], + "name": "Afinia TPU", + "filament_type": "TPU", + "filament_vendor": "Afinia" + }, + "OFDKIKyw": { + "filaments": [ + "Snapmaker/Snapmaker Dual PVA" + ], + "name": "Snapmaker Dual PVA", + "filament_type": "PVA", + "filament_vendor": "Snapmaker" + }, + "OFDKgoqx": { + "filaments": [ + "Flashforge/Flashforge PLA" + ], + "name": "Flashforge PLA", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFDRpXLZ": { + "filaments": [ + "FlyingBear/Other PETG", + "InfiMech/Other PETG" + ], + "name": "Other PETG", + "filament_type": "PETG", + "filament_vendor": "Other" + }, + "OFDSrzZ8": { + "filaments": [ + "Anker/Generic PLA", + "Anycubic/Generic PLA", + "Artillery/Generic PLA", + "BBL/Generic PLA", + "Blocks/Generic PLA", + "CONSTRUCT3D/Generic PLA", + "Chuanying/Generic PLA", + "Co Print/Generic PLA", + "CoLiDo/Generic PLA", + "Comgrow/Generic PLA", + "Creality/Generic PLA", + "Custom/Generic PLA", + "DeltaMaker/Generic PLA", + "Dremel/Generic PLA", + "Elegoo/Generic PLA", + "FLSun/Generic PLA", + "Flashforge/Generic PLA", + "FlyingBear/Generic PLA", + "Ginger Additive/Generic PLA", + "InfiMech/Generic PLA", + "LONGER/Generic PLA", + "Lulzbot/Generic PLA", + "OrcaArena/Generic PLA", + "OrcaFilamentLibrary/Generic PLA", + "Peopoly/Generic PLA", + "Phrozen/Generic PLA", + "Prusa/Generic PLA", + "Qidi/Generic PLA", + "RH3D/Generic PLA", + "Ratrig/Generic PLA", + "SecKit/Generic PLA", + "Sovol/Generic PLA", + "Tiertime/Generic PLA", + "Vzbot/Generic PLA", + "Z-Bolt/Generic PLA" + ], + "name": "Generic PLA", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFDdEaoL": { + "filaments": [ + "re3D/re3D PLA" + ], + "name": "re3D PLA", + "filament_type": "PLA", + "filament_vendor": "re3D" + }, + "OFDe8uyM": { + "filaments": [ + "OrcaFilamentLibrary/Valment PLA" + ], + "name": "Valment PLA", + "filament_type": "PLA", + "filament_vendor": "Valment" + }, + "OFDgQaca": { + "filaments": [ + "FlyingBear/FlyingBear PETG" + ], + "name": "FlyingBear PETG", + "filament_type": "PETG", + "filament_vendor": "FlyingBear" + }, + "OFDpW3J8": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PLA Basic" + ], + "name": "FILL3D PLA Basic", + "filament_type": "PLA", + "filament_vendor": "FILL3D" + }, + "OFDtop41": { + "filaments": [ + "Creality/Generic Support for PA" + ], + "name": "Generic Support for PA", + "filament_type": "PA", + "filament_vendor": "Generic" + }, + "OFDu1qE7": { + "filaments": [ + "Flashforge/FusRock PET-CF" + ], + "name": "FusRock PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "FusRock" + }, + "OFDvXujf": { + "filaments": [ + "Anker/Generic PVA", + "Anycubic/Generic PVA", + "BBL/Generic PVA", + "Blocks/Generic PVA", + "Chuanying/Generic PVA", + "Creality/Generic PVA", + "Custom/Generic PVA", + "FLSun/Generic PVA", + "Flashforge/Generic PVA", + "OrcaArena/Generic PVA", + "OrcaFilamentLibrary/Generic PVA", + "Prusa/Generic PVA", + "Qidi/Generic PVA", + "Ratrig/Generic PVA", + "SecKit/Generic PVA", + "Tiertime/Generic PVA", + "Vzbot/Generic PVA" + ], + "name": "Generic PVA", + "filament_type": "PVA", + "filament_vendor": "Generic" + }, + "OFDvqJ6n": { + "filaments": [ + "OrcaFilamentLibrary/Overture ABS Basic" + ], + "name": "Overture ABS Basic", + "filament_type": "ABS", + "filament_vendor": "Overture" + }, + "OFDwBwO5": { + "filaments": [ + "Prusa/Generic PVA HF" + ], + "name": "Generic PVA HF", + "filament_type": "PVA", + "filament_vendor": "Generic" + }, + "OFDxfPgH": { + "filaments": [ + "BBL/Bambu PLA Sparkle", + "OrcaFilamentLibrary/Bambu PLA Sparkle" + ], + "name": "Bambu PLA Sparkle", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFDxxTpW": { + "filaments": [ + "Flashforge/Flashforge HS PETG" + ], + "name": "Flashforge HS PETG", + "filament_type": "PETG", + "filament_vendor": "Flashforge" + }, + "OFE0NFRh": { + "filaments": [ + "BBL/COEX TPU 60A", + "OrcaFilamentLibrary/COEX TPU 60A" + ], + "name": "COEX TPU 60A", + "filament_type": "TPU", + "filament_vendor": "COEX 3D" + }, + "OFEGNJD4": { + "filaments": [ + "BBL/Bambu PLA Silk", + "OrcaFilamentLibrary/Bambu PLA Silk" + ], + "name": "Bambu PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFEOnBj6": { + "filaments": [ + "Snapmaker/Snapmaker PLA Lite" + ], + "name": "Snapmaker PLA Lite", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFEWYR89": { + "filaments": [ + "Anker/Generic PLA+", + "Qidi/Generic PLA+" + ], + "name": "Generic PLA+", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFEZ449N": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Uva" + ], + "name": "FilAr PLA-mate Uva", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFEZpel7": { + "filaments": [ + "Volumic/PPS Carbone (Performance)" + ], + "name": "PPS Carbone (Performance)", + "filament_type": "PPS-CF", + "filament_vendor": "Volumic" + }, + "OFEabreg": { + "filaments": [ + "Anycubic/Fiberon PA6-CF20", + "BBL/Fiberon PA6-CF20", + "Snapmaker/Fiberon PA6-CF20" + ], + "name": "Fiberon PA6-CF20", + "filament_type": "PA6-CF", + "filament_vendor": "Polymaker" + }, + "OFEbIx49": { + "filaments": [ + "WonderMaker/WonderMaker PLA Marble" + ], + "name": "WonderMaker PLA Marble", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFEhuUNq": { + "filaments": [], + "name": "DREMC PA12-CF", + "filament_type": "PA-CF", + "filament_vendor": "DREMC" + }, + "OFEj7sca": { + "filaments": [ + "Cubicon/Cubicon PC" + ], + "name": "Cubicon PC", + "filament_type": "PC", + "filament_vendor": "Cubicon" + }, + "OFEjbwqG": { + "filaments": [ + "BBL/PolyTerra PLA+", + "Snapmaker/PolyTerra PLA+" + ], + "name": "PolyTerra PLA+", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFEkPBwx": { + "filaments": [ + "BBL/Bambu PLA Glow", + "OrcaFilamentLibrary/Bambu PLA Glow" + ], + "name": "Bambu PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFEmsric": { + "filaments": [ + "Snapmaker/Snapmaker PA-CF" + ], + "name": "Snapmaker PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Snapmaker" + }, + "OFEnbt6D": { + "filaments": [ + "Peopoly/Peopoly Lancer PLA-C" + ], + "name": "Peopoly Lancer PLA-C", + "filament_type": "PLA", + "filament_vendor": "Peopoly" + }, + "OFEswT5W": { + "filaments": [ + "BBL/Bambu PLA-CF", + "OrcaFilamentLibrary/Bambu PLA-CF" + ], + "name": "Bambu PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Bambu Lab" + }, + "OFEvEfw5": { + "filaments": [ + "Flashforge/Flashforge PA" + ], + "name": "Flashforge PA", + "filament_type": "PA", + "filament_vendor": "Flashforge" + }, + "OFEwRwmL": { + "filaments": [ + "Cubicon/Cubicon PLA" + ], + "name": "Cubicon PLA", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OFF3cuzT": { + "filaments": [ + "Creality/Generic TPU 64D" + ], + "name": "Generic TPU 64D", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OFF5o7b2": { + "filaments": [ + "BBL/BETA PLA Youth" + ], + "name": "BETA PLA Youth", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFF9OKoY": { + "filaments": [ + "BBL/PolyLite PLA Pro", + "OrcaFilamentLibrary/PolyLite PLA Pro", + "Snapmaker/PolyLite PLA Pro" + ], + "name": "PolyLite PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFF9cgY5": { + "filaments": [ + "Snapmaker/Snapmaker PLA Matte" + ], + "name": "Snapmaker PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFFAWVf0": { + "filaments": [ + "Qidi/QIDI PC-ABS-FR" + ], + "name": "QIDI PC-ABS-FR", + "filament_type": "PC-ABS-FR", + "filament_vendor": "QIDI" + }, + "OFFFg2Pf": { + "filaments": [ + "Flashforge/Flashforge ASA Basic" + ], + "name": "Flashforge ASA Basic", + "filament_type": "ASA", + "filament_vendor": "Flashforge" + }, + "OFFNYwWR": { + "filaments": [ + "BBL/Bambu PA-CF", + "OrcaFilamentLibrary/Bambu PA-CF" + ], + "name": "Bambu PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Bambu Lab" + }, + "OFFP4ORR": { + "filaments": [ + "Creality/Creality Hyper ABS" + ], + "name": "Creality Hyper ABS", + "filament_type": "ABS", + "filament_vendor": "Creality" + }, + "OFFX1DRD": { + "filaments": [ + "FlyingBear/FlyingBear PC" + ], + "name": "FlyingBear PC", + "filament_type": "PC", + "filament_vendor": "FlyingBear" + }, + "OFFZ458u": { + "filaments": [ + "Snapmaker/Fiberon PA612-ESD" + ], + "name": "Fiberon PA612-ESD", + "filament_type": "PA-CF", + "filament_vendor": "Polymaker" + }, + "OFFbQscs": { + "filaments": [ + "Creality/eSUN PETG-Basic" + ], + "name": "eSUN PETG-Basic", + "filament_type": "PETG", + "filament_vendor": "eSUN" + }, + "OFFbSnCD": { + "filaments": [ + "BBL/Bambu PLA Translucent" + ], + "name": "Bambu PLA Translucent", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFFfJ09N": { + "filaments": [ + "BBL/BETA PETG Glow" + ], + "name": "BETA PETG Glow", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFFkCLBl": { + "filaments": [ + "BBL/Panchroma PLA Galaxy", + "OrcaFilamentLibrary/Panchroma PLA Galaxy", + "Snapmaker/Panchroma PLA Galaxy" + ], + "name": "Panchroma PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFFvzqcd": { + "filaments": [ + "BBL/Bambu PETG Basic", + "OrcaFilamentLibrary/Bambu PETG Basic" + ], + "name": "Bambu PETG Basic", + "filament_type": "PETG", + "filament_vendor": "Bambu Lab" + }, + "OFFwJWea": { + "filaments": [ + "Anycubic/Anycubic PLA Silk" + ], + "name": "Anycubic PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFG0kOKX": { + "filaments": [ + "Volumic/Volumic PETG Ultra" + ], + "name": "Volumic PETG Ultra", + "filament_type": "PETG", + "filament_vendor": "Volumic" + }, + "OFG2RkhN": { + "filaments": [ + "Creality/CR-TPU" + ], + "name": "CR-TPU", + "filament_type": "TPU", + "filament_vendor": "Creality" + }, + "OFG4do34": { + "filaments": [ + "Qidi/Qidi ASA-Aero" + ], + "name": "Qidi ASA-Aero", + "filament_type": "ASA-AERO", + "filament_vendor": "QIDI" + }, + "OFGJ1nxs": { + "filaments": [ + "FlyingBear/Other PLA", + "InfiMech/Other PLA" + ], + "name": "Other PLA", + "filament_type": "PLA", + "filament_vendor": "Other" + }, + "OFGVwfK0": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Gris" + ], + "name": "FilAr PLA-mate Gris", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFGVxj2A": { + "filaments": [ + "BBL/BETA PLA Wood" + ], + "name": "BETA PLA Wood", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFGc9l16": { + "filaments": [ + "BBL/BETA PLA Glow" + ], + "name": "BETA PLA Glow", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFGcLA5R": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Beige" + ], + "name": "FilAr PLA-mate Beige", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFGcMkEB": { + "filaments": [ + "Creality/HP-TPU" + ], + "name": "HP-TPU", + "filament_type": "TPU", + "filament_vendor": "Creality" + }, + "OFGdP6Na": { + "filaments": [ + "Volumic/Volumic PVA" + ], + "name": "Volumic PVA", + "filament_type": "PVA", + "filament_vendor": "Volumic" + }, + "OFGkyftV": { + "filaments": [ + "BBL/Overture Silk PLA", + "OrcaFilamentLibrary/Overture Silk PLA" + ], + "name": "Overture Silk PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFGwT5Av": { + "filaments": [ + "Creality/Creality Hyper PLA-CF" + ], + "name": "Creality Hyper PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Creality" + }, + "OFGwZmgS": { + "filaments": [ + "Creality/CR-ABS" + ], + "name": "CR-ABS", + "filament_type": "ABS", + "filament_vendor": "Creality" + }, + "OFGxC8gB": { + "filaments": [ + "Creality/CR-Wood" + ], + "name": "CR-Wood", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFGxuI0n": { + "filaments": [ + "Flashforge/Flashforge PA-CF" + ], + "name": "Flashforge PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Flashforge" + }, + "OFH2nN08": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 850" + ], + "name": "Eolas Prints PLA INGEO 850", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFH57ibH": { + "filaments": [ + "Snapmaker/Polymaker Silk PLA Family" + ], + "name": "Polymaker Silk PLA Family", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFH7b12v": { + "filaments": [ + "Creality/Generic PAHT-CF" + ], + "name": "Generic PAHT-CF", + "filament_type": "PA-CF", + "filament_vendor": "Generic" + }, + "OFHAccHz": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Antartida" + ], + "name": "FilAr PLA Blanco Antartida", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFHHwrd1": { + "filaments": [ + "BBL/addnorth PETG Base" + ], + "name": "addnorth PETG Base", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OFHWSM21": { + "filaments": [ + "BBL/Fiberon PET-CF", + "OrcaFilamentLibrary/Fiberon PET-CF" + ], + "name": "Fiberon PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Polymaker" + }, + "OFHa48An": { + "filaments": [ + "BBL/Bambu PET-CF", + "OrcaFilamentLibrary/Bambu PET-CF" + ], + "name": "Bambu PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Bambu Lab" + }, + "OFHaYaB1": { + "filaments": [ + "Creality/eSUN PET-Basic" + ], + "name": "eSUN PET-Basic", + "filament_type": "PET", + "filament_vendor": "eSUN" + }, + "OFHf2lKK": { + "filaments": [ + "FlyingBear/FlyingBear TPU Basic" + ], + "name": "FlyingBear TPU Basic", + "filament_type": "TPU", + "filament_vendor": "FlyingBear" + }, + "OFHfzQXo": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Transition" + ], + "name": "Eolas Prints PLA Transition", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFHknN4v": { + "filaments": [ + "Anycubic/Polymaker PLA Pro Metallic", + "Snapmaker/Polymaker PLA Pro Metallic" + ], + "name": "Polymaker PLA Pro Metallic", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFHmPYRy": { + "filaments": [ + "BBL/SUNLU PLA+ 2.0", + "Flashforge/SUNLU PLA+ 2.0", + "OrcaFilamentLibrary/SUNLU PLA+ 2.0" + ], + "name": "SUNLU PLA+ 2.0", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFI2MKy7": { + "filaments": [ + "BBL/BETA PEBA 90A" + ], + "name": "BETA PEBA 90A", + "filament_type": "TPU", + "filament_vendor": "BETA" + }, + "OFI6WZpn": { + "filaments": [ + "OrcaArena/Arena Support W" + ], + "name": "Arena Support W", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFIBXa0k": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rojo" + ], + "name": "FilAr PLA-mate Rojo", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFIBbYO5": { + "filaments": [ + "BBL/Bambu TPU for AMS" + ], + "name": "Bambu TPU for AMS", + "filament_type": "TPU-AMS", + "filament_vendor": "Bambu Lab" + }, + "OFIE3vOf": { + "filaments": [ + "Anycubic/Anycubic PLA Matte" + ], + "name": "Anycubic PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFIK2H3G": { + "filaments": [ + "Flashforge/Flashforge HS PLA" + ], + "name": "Flashforge HS PLA", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFIKZxPF": { + "filaments": [ + "Creality/Generic PLA Wood" + ], + "name": "Generic PLA Wood", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFIPjqHt": { + "filaments": [ + "OrcaArena/Arena Support G" + ], + "name": "Arena Support G", + "filament_type": "PA", + "filament_vendor": "Orca Arena" + }, + "OFIRUqWi": { + "filaments": [ + "Creality/eSUN PLA-Silk" + ], + "name": "eSUN PLA-Silk", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFIVWJPm": { + "filaments": [ + "InfiMech/InfiMech TPU" + ], + "name": "InfiMech TPU", + "filament_type": "TPU", + "filament_vendor": "InfiMech" + }, + "OFIWMSGX": { + "filaments": [ + "Qidi/HATCHBOX PETG" + ], + "name": "HATCHBOX PETG", + "filament_type": "PETG", + "filament_vendor": "HATCHBOX" + }, + "OFIZMQwM": { + "filaments": [ + "LH/LHS TPU" + ], + "name": "LHS TPU", + "filament_type": "TPU", + "filament_vendor": "LH Stinger" + }, + "OFIamQnD": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Gris Ceniza" + ], + "name": "FilAr PLA Gris Ceniza", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFIegjmD": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex D53" + ], + "name": "Eolas Prints TPU Flex D53", + "filament_type": "TPU", + "filament_vendor": "Eolas Prints" + }, + "OFIfnzxC": { + "filaments": [ + "BBL/Bambu Support For PLA/PETG", + "OrcaFilamentLibrary/Bambu Support For PLA/PETG" + ], + "name": "Bambu Support For PLA/PETG", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFIgbDHq": { + "filaments": [ + "Anycubic/Anycubic PLA Luminous" + ], + "name": "Anycubic PLA Luminous", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFIxOuOu": { + "filaments": [ + "BBL/PolyLite PLA Starlight", + "Snapmaker/PolyLite PLA Starlight" + ], + "name": "PolyLite PLA Starlight", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFJ3F2jm": { + "filaments": [ + "Flashforge/Flashforge PLA Basic" + ], + "name": "Flashforge PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFJ3HRsR": { + "filaments": [ + "OrcaArena/Arena ABS" + ], + "name": "Arena ABS", + "filament_type": "ABS", + "filament_vendor": "Orca Arena" + }, + "OFJHBEGD": { + "filaments": [], + "name": "DREMC PLA+ HS", + "filament_type": "PLA", + "filament_vendor": "DREMC" + }, + "OFJJ0Ar3": { + "filaments": [ + "Flashforge/Flashforge PLA Galaxy" + ], + "name": "Flashforge PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFJNeELv": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PA" + ], + "name": "FILL3D PA", + "filament_type": "PA", + "filament_vendor": "FILL3D" + }, + "OFJOFnOZ": { + "filaments": [ + "BBL/AliZ PETG-CF", + "OrcaFilamentLibrary/AliZ PETG-CF" + ], + "name": "AliZ PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Aliz" + }, + "OFJQDUk3": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Cristal" + ], + "name": "FilAr PETG Cristal", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFJS560n": { + "filaments": [], + "name": "Flashforge ASA", + "filament_type": "ASA", + "filament_vendor": "Flashforge" + }, + "OFJWKoYG": { + "filaments": [ + "iQ/Material4Print ABS Natur P1" + ], + "name": "Material4Print ABS Natur P1", + "filament_type": "ABS Material4Print Natur", + "filament_vendor": "iQ Materials" + }, + "OFJYpVAQ": { + "filaments": [ + "Flashforge/Generic TPU-90A" + ], + "name": "Generic TPU-90A", + "filament_type": "TPU-90A", + "filament_vendor": "Generic" + }, + "OFJgijky": { + "filaments": [ + "BBL/PolyLite CosPLA", + "Snapmaker/PolyLite CosPLA" + ], + "name": "PolyLite CosPLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFJhT2fd": { + "filaments": [ + "Snapmaker/Snapmaker Dual ABS" + ], + "name": "Snapmaker Dual ABS", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OFJnEaCp": { + "filaments": [ + "BBL/BETA PLA Transparent" + ], + "name": "BETA PLA Transparent", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFJrvXth": { + "filaments": [ + "Snapmaker/Snapmaker ABS Benchy" + ], + "name": "Snapmaker ABS Benchy", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OFJs1ToM": { + "filaments": [ + "BBL/COEX NYLEX UNFILLED" + ], + "name": "COEX NYLEX UNFILLED", + "filament_type": "PA", + "filament_vendor": "COEX 3D" + }, + "OFJu1XwK": { + "filaments": [ + "OrcaFilamentLibrary/NIT PETG" + ], + "name": "NIT PETG", + "filament_type": "PETG", + "filament_vendor": "NIT" + }, + "OFJxSqO4": { + "filaments": [ + "Wanhao France/YUMI PLA Direct Drive" + ], + "name": "YUMI PLA Direct Drive", + "filament_type": "PLA", + "filament_vendor": "Yumi" + }, + "OFK7830e": { + "filaments": [ + "BBL/BETA TPU 95A" + ], + "name": "BETA TPU 95A", + "filament_type": "TPU", + "filament_vendor": "BETA" + }, + "OFK8XHPn": { + "filaments": [ + "Qidi/Overture ABS" + ], + "name": "Overture ABS", + "filament_type": "ABS", + "filament_vendor": "Overture" + }, + "OFKIQO2W": { + "filaments": [ + "Qidi/QIDI PLA Rapido" + ], + "name": "QIDI PLA Rapido", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFKKajh6": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Gris Plata" + ], + "name": "FilAr PLA Gris Plata", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFKTGKJU": { + "filaments": [ + "Flashforge/FusRock PET" + ], + "name": "FusRock PET", + "filament_type": "PET", + "filament_vendor": "FusRock" + }, + "OFKTSiYF": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Blanco Calido" + ], + "name": "FilAr PLA Blanco Calido", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFKUEXPA": { + "filaments": [ + "Snapmaker/Snapmaker Dual ASA" + ], + "name": "Snapmaker Dual ASA", + "filament_type": "ASA", + "filament_vendor": "Snapmaker" + }, + "OFKW5hEW": { + "filaments": [ + "Flashforge/FusRock PAHT-CF" + ], + "name": "FusRock PAHT-CF", + "filament_type": "PAHT-CF", + "filament_vendor": "FusRock" + }, + "OFKWWgyp": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Carpincho" + ], + "name": "FilAr PLA Carpincho", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFKYBAWe": { + "filaments": [ + "BBL/BETA PLA Marble" + ], + "name": "BETA PLA Marble", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFKZ9skj": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Naranja Tigre" + ], + "name": "FilAr PLA Naranja Tigre", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFKbdiiJ": { + "filaments": [ + "Creality/PolySonic PLA Pro" + ], + "name": "PolySonic PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFKfJTwL": { + "filaments": [ + "Qidi/QIDI PET-CF" + ], + "name": "QIDI PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "QIDI" + }, + "OFKgmsqE": { + "filaments": [ + "Qidi/QIDI PAHT-CF" + ], + "name": "QIDI PAHT-CF", + "filament_type": "PAHT-CF", + "filament_vendor": "QIDI" + }, + "OFKhMPeX": { + "filaments": [ + "BBL/Bambu PC", + "OrcaFilamentLibrary/Bambu PC" + ], + "name": "Bambu PC", + "filament_type": "PC", + "filament_vendor": "Bambu Lab" + }, + "OFKiSMWR": { + "filaments": [ + "BBL/Panchroma PLA Marble", + "OrcaFilamentLibrary/Panchroma PLA Marble", + "Snapmaker/Panchroma PLA Marble" + ], + "name": "Panchroma PLA Marble", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFKyNkQz": { + "filaments": [ + "BBL/BETA PETG UV Color Change" + ], + "name": "BETA PETG UV Color Change", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFL9aRjN": { + "filaments": [ + "Snapmaker/Snapmaker PETG HF" + ], + "name": "Snapmaker PETG HF", + "filament_type": "PETG", + "filament_vendor": "Snapmaker" + }, + "OFLAXKqP": { + "filaments": [ + "WonderMaker/WonderMaker TPU 95A" + ], + "name": "WonderMaker TPU 95A", + "filament_type": "TPU", + "filament_vendor": "WonderMaker" + }, + "OFLC1oRH": { + "filaments": [ + "Flashforge/Flashforge PPA-CF" + ], + "name": "Flashforge PPA-CF", + "filament_type": "PPA-CF", + "filament_vendor": "Flashforge" + }, + "OFLJ8S6I": { + "filaments": [ + "BBL/SUNLU Wood PLA", + "Flashforge/SUNLU Wood PLA", + "OrcaFilamentLibrary/SUNLU Wood PLA" + ], + "name": "SUNLU Wood PLA", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFLNgV3C": { + "filaments": [], + "name": "DREMC ASA", + "filament_type": "ASA", + "filament_vendor": "DREMC" + }, + "OFLOf6Sc": { + "filaments": [ + "Tiertime/Tiertime TPU 95A" + ], + "name": "Tiertime TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Tiertime" + }, + "OFLPAxz3": { + "filaments": [ + "Anker/Generic ASA", + "Anycubic/Generic ASA", + "Artillery/Generic ASA", + "BBL/Generic ASA", + "Blocks/Generic ASA", + "Chuanying/Generic ASA", + "Creality/Generic ASA", + "Custom/Generic ASA", + "Elegoo/Generic ASA", + "FLSun/Generic ASA", + "Flashforge/Generic ASA", + "OrcaArena/Generic ASA", + "OrcaFilamentLibrary/Generic ASA", + "Prusa/Generic ASA", + "Qidi/Generic ASA", + "RH3D/Generic ASA", + "Ratrig/Generic ASA", + "SecKit/Generic ASA", + "Tiertime/Generic ASA", + "Vzbot/Generic ASA" + ], + "name": "Generic ASA", + "filament_type": "ASA", + "filament_vendor": "Generic" + }, + "OFLTYJW0": { + "filaments": [ + "Snapmaker/Snapmaker PLA Translucent" + ], + "name": "Snapmaker PLA Translucent", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFLXvuMr": { + "filaments": [ + "Elegoo/Elegoo Rapid PETG", + "OrcaFilamentLibrary/Elegoo Rapid PETG" + ], + "name": "Elegoo Rapid PETG", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFLYDngx": { + "filaments": [ + "Qidi/Bambu PETG" + ], + "name": "Bambu PETG", + "filament_type": "PETG", + "filament_vendor": "Bambu Lab" + }, + "OFLakOUI": { + "filaments": [ + "Anker/Generic PC", + "Anycubic/Generic PC", + "BBL/Generic PC", + "Blocks/Generic PC", + "Creality/Generic PC", + "Custom/Generic PC", + "Elegoo/Generic PC", + "FLSun/Generic PC", + "FlyingBear/Generic PC", + "InfiMech/Generic PC", + "OrcaArena/Generic PC", + "OrcaFilamentLibrary/Generic PC", + "Prusa/Generic PC", + "Qidi/Generic PC", + "Ratrig/Generic PC", + "SecKit/Generic PC", + "Sovol/Generic PC", + "Tiertime/Generic PC", + "Vzbot/Generic PC" + ], + "name": "Generic PC", + "filament_type": "PC", + "filament_vendor": "Generic" + }, + "OFLbXwoL": { + "filaments": [ + "Artillery/Artillery PLA Silk" + ], + "name": "Artillery PLA Silk", + "filament_type": "PLA Silk", + "filament_vendor": "Artillery" + }, + "OFLbdkrE": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA Eco" + ], + "name": "Snapmaker J1 PLA Eco", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFLcd093": { + "filaments": [ + "Elegoo/Elegoo PETG", + "OrcaFilamentLibrary/Elegoo PETG" + ], + "name": "Elegoo PETG", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFLfywkp": { + "filaments": [ + "Afinia/Afinia ABS+" + ], + "name": "Afinia ABS+", + "filament_type": "ABS", + "filament_vendor": "Afinia" + }, + "OFLgwqp2": { + "filaments": [ + "Creality/Hyper PETG-GF" + ], + "name": "Hyper PETG-GF", + "filament_type": "PETG-GF", + "filament_vendor": "Creality" + }, + "OFLjDYxH": { + "filaments": [ + "BBL/addnorth PLA X-PLA High Speed" + ], + "name": "addnorth PLA X-PLA High Speed", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFLqgSuX": { + "filaments": [ + "BBL/BETA PLA-CF" + ], + "name": "BETA PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "BETA" + }, + "OFLzx3J4": { + "filaments": [ + "Creality/Hyper Marble" + ], + "name": "Hyper Marble", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFM0xjBG": { + "filaments": [ + "Creality/CR-PLA Matte" + ], + "name": "CR-PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFM4iJlv": { + "filaments": [ + "Creality/Generic PA12-CF" + ], + "name": "Generic PA12-CF", + "filament_type": "PA-CF", + "filament_vendor": "Generic" + }, + "OFM91vZs": { + "filaments": [ + "BBL/Overture ASA", + "OrcaFilamentLibrary/Overture ASA" + ], + "name": "Overture ASA", + "filament_type": "ASA", + "filament_vendor": "Overture" + }, + "OFMDHOcT": { + "filaments": [ + "Qidi/QIDI TPU-Aero" + ], + "name": "QIDI TPU-Aero", + "filament_type": "TPU-AERO", + "filament_vendor": "QIDI" + }, + "OFMK5gVo": { + "filaments": [ + "WonderMaker/WonderMaker PLA Basic" + ], + "name": "WonderMaker PLA Basic", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFML2aVd": { + "filaments": [ + "Anycubic/Anycubic TPU 95A" + ], + "name": "Anycubic TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Anycubic" + }, + "OFMSvS8z": { + "filaments": [ + "Artillery/Artillery PA" + ], + "name": "Artillery PA", + "filament_type": "PA", + "filament_vendor": "Artillery" + }, + "OFMTK0UC": { + "filaments": [ + "BBL/Bambu Support For PA/PET", + "OrcaFilamentLibrary/Bambu Support For PA/PET" + ], + "name": "Bambu Support For PA/PET", + "filament_type": "PA", + "filament_vendor": "Bambu Lab" + }, + "OFMUWNkp": { + "filaments": [ + "BBL/SUNLU PLA+", + "Flashforge/SUNLU PLA+", + "OrcaFilamentLibrary/SUNLU PLA+" + ], + "name": "SUNLU PLA+", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFMZvH0z": { + "filaments": [ + "BBL/Overture Rock PLA", + "OrcaFilamentLibrary/Overture Rock PLA" + ], + "name": "Overture Rock PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFMjtqTC": { + "filaments": [ + "BBL/Bambu PLA Wood", + "OrcaFilamentLibrary/Bambu PLA Wood" + ], + "name": "Bambu PLA Wood", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFMkAW6r": { + "filaments": [ + "Flashforge/Flashforge PLA Color Change" + ], + "name": "Flashforge PLA Color Change", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFMpxamb": { + "filaments": [ + "Flashforge/Flashforge PETG" + ], + "name": "Flashforge PETG", + "filament_type": "PETG", + "filament_vendor": "Flashforge" + }, + "OFMsDGbs": { + "filaments": [ + "Anycubic/Anycubic TPU" + ], + "name": "Anycubic TPU", + "filament_type": "TPU", + "filament_vendor": "Anycubic" + }, + "OFMuXBmO": { + "filaments": [ + "OrcaFilamentLibrary/Elas PLA Basic" + ], + "name": "Elas PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Elas" + }, + "OFMzRg65": { + "filaments": [ + "BBL/BETA PLA PRO" + ], + "name": "BETA PLA PRO", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFN8QBhu": { + "filaments": [ + "BBL/addnorth PLA Wood" + ], + "name": "addnorth PLA Wood", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFN9fefN": { + "filaments": [ + "Cubicon/Cubicon ABS-A100" + ], + "name": "Cubicon ABS-A100", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFNBlAPT": { + "filaments": [ + "OrcaArena/Arena PETG Basic" + ], + "name": "Arena PETG Basic", + "filament_type": "PETG", + "filament_vendor": "Orca Arena" + }, + "OFNGTH3w": { + "filaments": [ + "Tiertime/Tiertime PLA" + ], + "name": "Tiertime PLA", + "filament_type": "PLA", + "filament_vendor": "Tiertime" + }, + "OFNQKF0M": { + "filaments": [ + "Tiertime/Tiertime ABS" + ], + "name": "Tiertime ABS", + "filament_type": "ABS", + "filament_vendor": "Tiertime" + }, + "OFNSYu5h": { + "filaments": [ + "Volumic/Volumic PP Ultra (Performance)" + ], + "name": "Volumic PP Ultra (Performance)", + "filament_type": "PP", + "filament_vendor": "Volumic" + }, + "OFNU9YIW": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Azul Boreal" + ], + "name": "FilAr PETG Azul Boreal", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFNemJM6": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Cobre" + ], + "name": "FilAr PLA Cobre", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFNjku08": { + "filaments": [ + "CONSTRUCT3D/Generic High Flow PETG" + ], + "name": "Generic High Flow PETG", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OFNk8AvA": { + "filaments": [ + "BBL/BETA PETG Gradient" + ], + "name": "BETA PETG Gradient", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFNk8bxk": { + "filaments": [ + "BBL/Bambu PA6-GF", + "OrcaFilamentLibrary/Bambu PA6-GF" + ], + "name": "Bambu PA6-GF", + "filament_type": "PA-GF", + "filament_vendor": "Bambu Lab" + }, + "OFNstOna": { + "filaments": [ + "Eryone/Eryone PETG-CF" + ], + "name": "Eryone PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Eryone" + }, + "OFNvBIL0": { + "filaments": [ + "Creality/Hyper PPA-CF" + ], + "name": "Hyper PPA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Creality" + }, + "OFO1GEq6": { + "filaments": [ + "BBL/Panchroma PLA Neon", + "OrcaFilamentLibrary/Panchroma PLA Neon", + "Snapmaker/Panchroma PLA Neon" + ], + "name": "Panchroma PLA Neon", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFO5djrM": { + "filaments": [ + "Chuanying/Generic PETG-CF10", + "Flashforge/Generic PETG-CF10" + ], + "name": "Generic PETG-CF10", + "filament_type": "PETG-CF", + "filament_vendor": "Generic" + }, + "OFO6GMJ3": { + "filaments": [ + "BBL/addnorth TPU EasyFlex" + ], + "name": "addnorth TPU EasyFlex", + "filament_type": "TPU", + "filament_vendor": "addnorth" + }, + "OFOABq7t": { + "filaments": [ + "BBL/AliZ PETG-Metal", + "OrcaFilamentLibrary/AliZ PETG-Metal" + ], + "name": "AliZ PETG-Metal", + "filament_type": "PETG", + "filament_vendor": "Aliz" + }, + "OFOAdMCB": { + "filaments": [ + "OrcaArena/Arena PLA Metal" + ], + "name": "Arena PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFOHOf2F": { + "filaments": [ + "Creality/eSUN PLA-HS" + ], + "name": "eSUN PLA-HS", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFOJPAAS": { + "filaments": [ + "iQ/VXL90 TiQ2 P2" + ], + "name": "VXL90 TiQ2 P2", + "filament_type": "VXL90 Xioneer", + "filament_vendor": "iQ Materials" + }, + "OFOPU1xv": { + "filaments": [ + "Snapmaker/Snapmaker PLA Full Spectrum" + ], + "name": "Snapmaker PLA Full Spectrum", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFOQCfVa": { + "filaments": [ + "BBL/addnorth PLA Premium Silk" + ], + "name": "addnorth PLA Premium Silk", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFObG16Q": { + "filaments": [ + "InfiMech/InfiMech PLA Basic" + ], + "name": "InfiMech PLA Basic", + "filament_type": "PLA", + "filament_vendor": "InfiMech" + }, + "OFObyktP": { + "filaments": [ + "Tiertime/Tiertime PETG" + ], + "name": "Tiertime PETG", + "filament_type": "PETG", + "filament_vendor": "Tiertime" + }, + "OFOiJfLM": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PETG CF" + ], + "name": "FILL3D PETG CF", + "filament_type": "PETG-CF", + "filament_vendor": "FILL3D" + }, + "OFOnSNt3": { + "filaments": [ + "Artillery/Artillery PETG-CF" + ], + "name": "Artillery PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Artillery" + }, + "OFOsHDnB": { + "filaments": [ + "Elegoo/Elegoo PETG PRO", + "OrcaFilamentLibrary/Elegoo PETG PRO" + ], + "name": "Elegoo PETG PRO", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFOuEEvv": { + "filaments": [ + "Qidi/QIDI ABS Rapido 0.2 nozzle" + ], + "name": "QIDI ABS Rapido 0.2 nozzle", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OFOvv91M": { + "filaments": [ + "BBL/PolyLite ABS", + "OrcaFilamentLibrary/PolyLite ABS", + "Qidi/PolyLite ABS" + ], + "name": "PolyLite ABS", + "filament_type": "ABS", + "filament_vendor": "Polymaker" + }, + "OFOwQuZM": { + "filaments": [ + "Snapmaker/Snapmaker PETG-CF" + ], + "name": "Snapmaker PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Snapmaker" + }, + "OFOzwywz": { + "filaments": [ + "Eryone/Eryone ABS" + ], + "name": "Eryone ABS", + "filament_type": "ABS", + "filament_vendor": "Eryone" + }, + "OFP26zNb": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Violeta Jacaranda" + ], + "name": "FilAr PLA Violeta Jacaranda", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFPHLnoe": { + "filaments": [ + "Creality/HP-ASA" + ], + "name": "HP-ASA", + "filament_type": "ASA", + "filament_vendor": "Creality" + }, + "OFPWPlSC": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PP" + ], + "name": "FILL3D PP", + "filament_type": "PP", + "filament_vendor": "FILL3D" + }, + "OFPYDWgC": { + "filaments": [ + "Peopoly/Peopoly Lancer PET-CF" + ], + "name": "Peopoly Lancer PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Peopoly" + }, + "OFPbyOSk": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Rojo Carmesi" + ], + "name": "FilAr PETG Rojo Carmesi", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFPc4zVY": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA INGEO 870" + ], + "name": "Eolas Prints PLA INGEO 870", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFPkCJKE": { + "filaments": [ + "BBL/Panchroma PLA Satin", + "Creality/Panchroma PLA Satin", + "OrcaFilamentLibrary/Panchroma PLA Satin", + "Snapmaker/Panchroma PLA Satin" + ], + "name": "Panchroma PLA Satin", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFPklMI1": { + "filaments": [ + "BBL/Generic PE", + "OrcaFilamentLibrary/Generic PE", + "Tiertime/Generic PE" + ], + "name": "Generic PE", + "filament_type": "PE", + "filament_vendor": "Generic" + }, + "OFPoyiFs": { + "filaments": [ + "BBL/Polymaker HT-PLA", + "OrcaFilamentLibrary/Polymaker HT-PLA", + "Snapmaker/Polymaker HT-PLA" + ], + "name": "Polymaker HT-PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFPqX3x2": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Amaranto" + ], + "name": "FilAr PLA Rosa Amaranto", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFQ1KzO8": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA Silk" + ], + "name": "Snapmaker J1 PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFQ1zgm3": { + "filaments": [ + "Eryone/Eryone ABS-CF" + ], + "name": "Eryone ABS-CF", + "filament_type": "ABS-CF", + "filament_vendor": "Eryone" + }, + "OFQ3e56w": { + "filaments": [ + "BBL/Bambu PLA Galaxy", + "OrcaFilamentLibrary/Bambu PLA Galaxy" + ], + "name": "Bambu PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFQ40XeN": { + "filaments": [ + "Qidi/QIDI PETG Tough" + ], + "name": "QIDI PETG Tough", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFQ5TxZ2": { + "filaments": [ + "BBL/addnorth PVDF Adamant S1" + ], + "name": "addnorth PVDF Adamant S1", + "filament_type": "PA", + "filament_vendor": "addnorth" + }, + "OFQEGL7z": { + "filaments": [ + "FlyingBear/FlyingBear PA-CF" + ], + "name": "FlyingBear PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "FlyingBear" + }, + "OFQGvU2G": { + "filaments": [ + "OrcaArena/Arena TPU 95A" + ], + "name": "Arena TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Orca Arena" + }, + "OFQHiNJs": { + "filaments": [ + "BBL/Bambu Support G", + "OrcaFilamentLibrary/Bambu Support G" + ], + "name": "Bambu Support G", + "filament_type": "PA", + "filament_vendor": "Bambu Lab" + }, + "OFQLcbps": { + "filaments": [ + "Anker/Generic PA-CF", + "Anycubic/Generic PA-CF", + "BBL/Generic PA-CF", + "Blocks/Generic PA-CF", + "Creality/Generic PA-CF", + "Custom/Generic PA-CF", + "FLSun/Generic PA-CF", + "FlyingBear/Generic PA-CF", + "InfiMech/Generic PA-CF", + "OrcaArena/Generic PA-CF", + "OrcaFilamentLibrary/Generic PA-CF", + "Prusa/Generic PA-CF", + "Qidi/Generic PA-CF", + "Ratrig/Generic PA-CF", + "SecKit/Generic PA-CF", + "Tiertime/Generic PA-CF", + "Vzbot/Generic PA-CF" + ], + "name": "Generic PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Generic" + }, + "OFQMTRc8": { + "filaments": [ + "Snapmaker/Snapmaker J1 PETG" + ], + "name": "Snapmaker J1 PETG", + "filament_type": "PETG", + "filament_vendor": "Snapmaker" + }, + "OFQMsFfF": { + "filaments": [ + "Qidi/QIDI ABS-GF10" + ], + "name": "QIDI ABS-GF10", + "filament_type": "ABS-GF", + "filament_vendor": "QIDI" + }, + "OFQWIKbV": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Titanio" + ], + "name": "FilAr PLA Titanio", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFQYaiGg": { + "filaments": [ + "Snapmaker/Snapmaker PET" + ], + "name": "Snapmaker PET", + "filament_type": "PET", + "filament_vendor": "Snapmaker" + }, + "OFQbjX3s": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PETG" + ], + "name": "FILL3D PETG", + "filament_type": "PETG", + "filament_vendor": "FILL3D" + }, + "OFQdaVZS": { + "filaments": [ + "Creality/Generic PET-CF", + "Elegoo/Generic PET-CF" + ], + "name": "Generic PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Generic" + }, + "OFQe7sAx": { + "filaments": [ + "Anycubic/Anycubic PA6-CF" + ], + "name": "Anycubic PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Anycubic" + }, + "OFQyyO0l": { + "filaments": [ + "Flashforge/Polymaker CoPA" + ], + "name": "Polymaker CoPA", + "filament_type": "PA", + "filament_vendor": "Polymaker" + }, + "OFR0gODA": { + "filaments": [ + "SeeMeCNC/SeeMeCNC ABS" + ], + "name": "SeeMeCNC ABS", + "filament_type": "ABS", + "filament_vendor": "SeeMeCNC" + }, + "OFR1XLMN": { + "filaments": [ + "Qidi/QIDI TPU 95A-HF" + ], + "name": "QIDI TPU 95A-HF", + "filament_type": "TPU", + "filament_vendor": "QIDI" + }, + "OFRFhdqy": { + "filaments": [ + "BBL/addnorth PLA Textura" + ], + "name": "addnorth PLA Textura", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFRJ325z": { + "filaments": [ + "LH/LHS PETG" + ], + "name": "LHS PETG", + "filament_type": "PETG", + "filament_vendor": "LH Stinger" + }, + "OFRhBryT": { + "filaments": [ + "Cubicon/Cubicon PLAi21" + ], + "name": "Cubicon PLAi21", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OFRhCTUg": { + "filaments": [ + "Anycubic/Anycubic PET-CF" + ], + "name": "Anycubic PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Anycubic" + }, + "OFRiFnfQ": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PETG Transition" + ], + "name": "Eolas Prints PETG Transition", + "filament_type": "PETG", + "filament_vendor": "Eolas Prints" + }, + "OFRiYgMK": { + "filaments": [ + "BBL/Panchroma PLA Celestial", + "OrcaFilamentLibrary/Panchroma PLA Celestial", + "Snapmaker/Panchroma PLA Celestial" + ], + "name": "Panchroma PLA Celestial", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFRkjhxK": { + "filaments": [ + "Volumic/Volumic PVA-BVOH (Performance)" + ], + "name": "Volumic PVA-BVOH (Performance)", + "filament_type": "PVA", + "filament_vendor": "Volumic" + }, + "OFRmGKVX": { + "filaments": [ + "Cubicon/Cubicon PLA+" + ], + "name": "Cubicon PLA+", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OFRooa0F": { + "filaments": [ + "Snapmaker/Snapmaker Dual PA-CF" + ], + "name": "Snapmaker Dual PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Snapmaker" + }, + "OFRpAZ1P": { + "filaments": [ + "DeltaMaker/DeltaMaker Brand PLA" + ], + "name": "DeltaMaker Brand PLA", + "filament_type": "PLA", + "filament_vendor": "DeltaMaker" + }, + "OFRyOsZj": { + "filaments": [ + "re3D/re3D PLA" + ], + "name": "re3D PLA", + "filament_type": "PLA", + "filament_vendor": "re3D" + }, + "OFRzR5mi": { + "filaments": [ + "OrcaFilamentLibrary/eSUN ePLA-LW" + ], + "name": "eSUN ePLA-LW", + "filament_type": "PLA-AERO", + "filament_vendor": "eSUN" + }, + "OFS2tn6G": { + "filaments": [ + "BBL/Fiberon PA612-CF", + "OrcaFilamentLibrary/Fiberon PA612-CF" + ], + "name": "Fiberon PA612-CF", + "filament_type": "PA", + "filament_vendor": "Polymaker" + }, + "OFS4jbj3": { + "filaments": [ + "Eryone/Eryone PA" + ], + "name": "Eryone PA", + "filament_type": "PA", + "filament_vendor": "Eryone" + }, + "OFS8lTQt": { + "filaments": [ + "BBL/Panchroma PLA Silk", + "OrcaFilamentLibrary/Panchroma PLA Silk", + "Snapmaker/Panchroma PLA Silk" + ], + "name": "Panchroma PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFSDfduA": { + "filaments": [ + "Flashforge/Flashforge TPU 65D" + ], + "name": "Flashforge TPU 65D", + "filament_type": "TPU", + "filament_vendor": "Flashforge" + }, + "OFSa39yP": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA" + ], + "name": "Snapmaker J1 PLA", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFSbGfsz": { + "filaments": [ + "OrcaArena/Arena PLA Basic" + ], + "name": "Arena PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFSfm8iP": { + "filaments": [ + "BBL/BETA PLA Heat Color Change" + ], + "name": "BETA PLA Heat Color Change", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFSiCZP3": { + "filaments": [ + "BBL/BETA PETG-GF" + ], + "name": "BETA PETG-GF", + "filament_type": "PETG-CF", + "filament_vendor": "BETA" + }, + "OFSqIcJC": { + "filaments": [ + "Flashforge/Flashforge TPU 95A" + ], + "name": "Flashforge TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Flashforge" + }, + "OFSw6Mor": { + "filaments": [ + "BBL/addnorth PA Adura FDA" + ], + "name": "addnorth PA Adura FDA", + "filament_type": "PA", + "filament_vendor": "addnorth" + }, + "OFSwbBWS": { + "filaments": [], + "name": "DREMC PLA+", + "filament_type": "PLA", + "filament_vendor": "DREMC" + }, + "OFT2jon4": { + "filaments": [ + "Qidi/QIDI ABS Rapido" + ], + "name": "QIDI ABS Rapido", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OFTGHyNC": { + "filaments": [ + "OrcaFilamentLibrary/Bambu PLA Impact" + ], + "name": "Bambu PLA Impact", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFTHDCqA": { + "filaments": [ + "BBL/Bambu PLA Pure" + ], + "name": "Bambu PLA Pure", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFTOPcx0": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints TPU Transition" + ], + "name": "Eolas Prints TPU Transition", + "filament_type": "TPU", + "filament_vendor": "Eolas Prints" + }, + "OFTRZ8Y4": { + "filaments": [ + "BBL/Bambu PETG-CF", + "OrcaFilamentLibrary/Bambu PETG-CF" + ], + "name": "Bambu PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Bambu Lab" + }, + "OFTSXxzE": { + "filaments": [ + "Flashforge/Flashforge PPS-CF" + ], + "name": "Flashforge PPS-CF", + "filament_type": "PPS-CF", + "filament_vendor": "Flashforge" + }, + "OFTXduCM": { + "filaments": [ + "Creality/eSUN ABS+" + ], + "name": "eSUN ABS+", + "filament_type": "ABS", + "filament_vendor": "eSUN" + }, + "OFTcE0nA": { + "filaments": [ + "OrcaFilamentLibrary/eSUN PLA-Basic" + ], + "name": "eSUN PLA-Basic", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFTdauIq": { + "filaments": [ + "Volumic/Volumic PCTG Ultra (Performance)" + ], + "name": "Volumic PCTG Ultra (Performance)", + "filament_type": "PETG", + "filament_vendor": "Volumic" + }, + "OFTkj6DR": { + "filaments": [ + "Anycubic/Anycubic PVA" + ], + "name": "Anycubic PVA", + "filament_type": "PVA", + "filament_vendor": "Anycubic" + }, + "OFTlRzpe": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Gris Pizarra" + ], + "name": "FilAr PLA Gris Pizarra", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFTnWzBs": { + "filaments": [ + "Creality/Hyper PLA-CF" + ], + "name": "Hyper PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Creality" + }, + "OFTs8peJ": { + "filaments": [ + "Snapmaker/Snapmaker Dual TPE" + ], + "name": "Snapmaker Dual TPE", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFTsHNQi": { + "filaments": [ + "Qidi/QIDI ASA" + ], + "name": "QIDI ASA", + "filament_type": "ASA", + "filament_vendor": "QIDI" + }, + "OFU1zPxE": { + "filaments": [ + "Elegoo/Elegoo PLA Galaxy", + "OrcaFilamentLibrary/Elegoo PLA Galaxy" + ], + "name": "Elegoo PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFU3QXL7": { + "filaments": [ + "re3D/re3D PC" + ], + "name": "re3D PC", + "filament_type": "PC", + "filament_vendor": "re3D" + }, + "OFU5JPDy": { + "filaments": [ + "BBL/addnorth PETG PRO Matte" + ], + "name": "addnorth PETG PRO Matte", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OFU7CKZt": { + "filaments": [ + "Volumic/Volumic ASA Ultra (Performance)" + ], + "name": "Volumic ASA Ultra (Performance)", + "filament_type": "ASA", + "filament_vendor": "Volumic" + }, + "OFUF7oA4": { + "filaments": [ + "Creality/Hyper PC" + ], + "name": "Hyper PC", + "filament_type": "PC", + "filament_vendor": "Creality" + }, + "OFUH1aee": { + "filaments": [ + "Volumic/Volumic FLEX93 Ultra (Performance)" + ], + "name": "Volumic FLEX93 Ultra (Performance)", + "filament_type": "TPU", + "filament_vendor": "Volumic" + }, + "OFUIfGoh": { + "filaments": [ + "Snapmaker/Snapmaker Dual PET" + ], + "name": "Snapmaker Dual PET", + "filament_type": "PET", + "filament_vendor": "Snapmaker" + }, + "OFUYCqtB": { + "filaments": [ + "InfiMech/InfiMech PLA" + ], + "name": "InfiMech PLA", + "filament_type": "PLA", + "filament_vendor": "InfiMech" + }, + "OFUaHEO9": { + "filaments": [ + "Anycubic/Anycubic PEBA 95A" + ], + "name": "Anycubic PEBA 95A", + "filament_type": "PEBA", + "filament_vendor": "Anycubic" + }, + "OFUanySo": { + "filaments": [ + "BBL/Bambu PLA Silk+", + "OrcaFilamentLibrary/Bambu PLA Silk+" + ], + "name": "Bambu PLA Silk+", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFUmS5z5": { + "filaments": [ + "Creality/eSUN ASA+" + ], + "name": "eSUN ASA+", + "filament_type": "ASA", + "filament_vendor": "eSUN" + }, + "OFUtiVRn": { + "filaments": [ + "BBL/addnorth PETG ESD" + ], + "name": "addnorth PETG ESD", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OFUyDDNv": { + "filaments": [ + "Elegoo/Elegoo PC", + "OrcaFilamentLibrary/Elegoo PC" + ], + "name": "Elegoo PC", + "filament_type": "PC", + "filament_vendor": "Elegoo" + }, + "OFV5Q7j2": { + "filaments": [ + "Snapmaker/Snapmaker J1 TPE" + ], + "name": "Snapmaker J1 TPE", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFV5c8hG": { + "filaments": [ + "Flashforge/Flashforge PLA Sparkle" + ], + "name": "Flashforge PLA Sparkle", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFV5wEMe": { + "filaments": [ + "Afinia/Afinia ABS" + ], + "name": "Afinia ABS", + "filament_type": "ABS", + "filament_vendor": "Afinia" + }, + "OFV8Mxqx": { + "filaments": [], + "name": "Flashforge PLA-SILK", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFVBlUFH": { + "filaments": [], + "name": "DREMC PETG", + "filament_type": "PETG", + "filament_vendor": "DREMC" + }, + "OFVCkX5w": { + "filaments": [ + "BBL/Bambu TPU 95A", + "OrcaFilamentLibrary/Bambu TPU 95A" + ], + "name": "Bambu TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Bambu Lab" + }, + "OFVDWuxl": { + "filaments": [ + "BBL/addnorth PLA HT-PLA PRO Matte" + ], + "name": "addnorth PLA HT-PLA PRO Matte", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFVHMFJX": { + "filaments": [ + "Qidi/QIDI PETG Tough 0.2 nozzle" + ], + "name": "QIDI PETG Tough 0.2 nozzle", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFVptRxp": { + "filaments": [ + "BBL/COEX TPE 30D", + "OrcaFilamentLibrary/COEX TPE 30D" + ], + "name": "COEX TPE 30D", + "filament_type": "TPU", + "filament_vendor": "COEX 3D" + }, + "OFVtIasg": { + "filaments": [ + "Eryone/Eryone ASA" + ], + "name": "Eryone ASA", + "filament_type": "ASA", + "filament_vendor": "Eryone" + }, + "OFW29a9R": { + "filaments": [ + "BBL/PolyTerra PLA", + "OrcaArena/PolyTerra PLA", + "OrcaFilamentLibrary/PolyTerra PLA", + "Snapmaker/PolyTerra PLA" + ], + "name": "PolyTerra PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFW5FqkL": { + "filaments": [ + "Qidi/QIDI PLA Rapido Silk" + ], + "name": "QIDI PLA Rapido Silk", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFW8M3CY": { + "filaments": [ + "BBL/BETA PLA Chameleon" + ], + "name": "BETA PLA Chameleon", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFW8lqnb": { + "filaments": [ + "Snapmaker/Snapmaker PETG Translucent" + ], + "name": "Snapmaker PETG Translucent", + "filament_type": "PETG", + "filament_vendor": "Snapmaker" + }, + "OFWDe7YH": { + "filaments": [ + "Qidi/QIDI UltraPA" + ], + "name": "QIDI UltraPA", + "filament_type": "UltraPA", + "filament_vendor": "QIDI" + }, + "OFWK0Y9A": { + "filaments": [ + "BBL/addnorth PA Adura" + ], + "name": "addnorth PA Adura", + "filament_type": "PA", + "filament_vendor": "addnorth" + }, + "OFWRITFw": { + "filaments": [ + "Prusa/Prusament rPLA" + ], + "name": "Prusament rPLA", + "filament_type": "PLA", + "filament_vendor": "Prusa Polymers" + }, + "OFWTAEjH": { + "filaments": [ + "Snapmaker/Snapmaker TPE" + ], + "name": "Snapmaker TPE", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFWTRJ1K": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Bronce" + ], + "name": "FilAr PLA Bronce", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFWXCbVF": { + "filaments": [ + "Flashforge/Flashforge PC" + ], + "name": "Flashforge PC", + "filament_type": "PC", + "filament_vendor": "Flashforge" + }, + "OFWYtgCa": { + "filaments": [ + "Elegoo/Elegoo PLA Wood", + "OrcaFilamentLibrary/Elegoo PLA Wood" + ], + "name": "Elegoo PLA Wood", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFWa0NiB": { + "filaments": [ + "Volumic/Volumic NYLON Ultra" + ], + "name": "Volumic NYLON Ultra", + "filament_type": "PA", + "filament_vendor": "Volumic" + }, + "OFWao3Ic": { + "filaments": [ + "Creality/Ender-PLA" + ], + "name": "Ender-PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFWbdGsC": { + "filaments": [ + "Anker/Generic PLA-CF", + "Anycubic/Generic PLA-CF", + "Artillery/Generic PLA-CF", + "BBL/Generic PLA-CF", + "Blocks/Generic PLA-CF", + "Creality/Generic PLA-CF", + "Custom/Generic PLA-CF", + "FLSun/Generic PLA-CF", + "Flashforge/Generic PLA-CF", + "OrcaArena/Generic PLA-CF", + "OrcaFilamentLibrary/Generic PLA-CF", + "Prusa/Generic PLA-CF", + "Qidi/Generic PLA-CF", + "Ratrig/Generic PLA-CF", + "SecKit/Generic PLA-CF", + "Tiertime/Generic PLA-CF", + "Vzbot/Generic PLA-CF" + ], + "name": "Generic PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Generic" + }, + "OFWgFOjn": { + "filaments": [ + "Snapmaker/Snapmaker PLA Silk" + ], + "name": "Snapmaker PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFWwF7K7": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Cafe con Leche" + ], + "name": "FilAr PLA Cafe con Leche", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFX0etlv": { + "filaments": [ + "re3D/re3D PETG" + ], + "name": "re3D PETG", + "filament_type": "PETG", + "filament_vendor": "re3D" + }, + "OFX0ycRQ": { + "filaments": [ + "BBL/Fiberon PA12-CF", + "OrcaFilamentLibrary/Fiberon PA12-CF" + ], + "name": "Fiberon PA12-CF", + "filament_type": "PA-CF", + "filament_vendor": "Polymaker" + }, + "OFX2zcrM": { + "filaments": [ + "Chuanying/Generic PLA-CF10", + "Flashforge/Generic PLA-CF10" + ], + "name": "Generic PLA-CF10", + "filament_type": "PLA-CF", + "filament_vendor": "Generic" + }, + "OFXCBZTA": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints ABS" + ], + "name": "Eolas Prints ABS", + "filament_type": "ABS", + "filament_vendor": "Eolas Prints" + }, + "OFXIbw5D": { + "filaments": [ + "BBL/Bambu PLA Matte", + "OrcaFilamentLibrary/Bambu PLA Matte" + ], + "name": "Bambu PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFXJ9iom": { + "filaments": [ + "iQ/Grauts HPP4GF25 P1" + ], + "name": "Grauts HPP4GF25 P1", + "filament_type": "HPP4GF25", + "filament_vendor": "iQ Materials" + }, + "OFXSvqOX": { + "filaments": [ + "Snapmaker/Snapmaker TPU 95A HF" + ], + "name": "Snapmaker TPU 95A HF", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFXTPuqV": { + "filaments": [ + "OrcaFilamentLibrary/Elas PETG Basic" + ], + "name": "Elas PETG Basic", + "filament_type": "PETG", + "filament_vendor": "Elas" + }, + "OFXW4CDh": { + "filaments": [ + "Ratrig/Generic PCTG BigNozzle" + ], + "name": "Generic PCTG BigNozzle", + "filament_type": "PCTG", + "filament_vendor": "Generic" + }, + "OFXi59OX": { + "filaments": [ + "Afinia/Afinia Value ABS" + ], + "name": "Afinia Value ABS", + "filament_type": "ABS", + "filament_vendor": "Afinia" + }, + "OFXiArjA": { + "filaments": [ + "Flashforge/Flashforge PETG Pro" + ], + "name": "Flashforge PETG Pro", + "filament_type": "PETG", + "filament_vendor": "Flashforge" + }, + "OFXk1emJ": { + "filaments": [ + "Artillery/Artillery PLA Basic" + ], + "name": "Artillery PLA Basic", + "filament_type": "PLA Basic", + "filament_vendor": "Artillery" + }, + "OFXkm8q1": { + "filaments": [ + "BBL/Generic PP-CF", + "Creality/Generic PP-CF", + "OrcaFilamentLibrary/Generic PP-CF", + "Tiertime/Generic PP-CF" + ], + "name": "Generic PP-CF", + "filament_type": "PP-CF", + "filament_vendor": "Generic" + }, + "OFXmv5p0": { + "filaments": [ + "Creality/Generic Speed PLA" + ], + "name": "Generic Speed PLA", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFXn3Vd9": { + "filaments": [ + "Qidi/QIDI Support For PAHT" + ], + "name": "QIDI Support For PAHT", + "filament_type": "PAHT-S", + "filament_vendor": "QIDI" + }, + "OFXnToSX": { + "filaments": [ + "Creality/Hyper Stardust" + ], + "name": "Hyper Stardust", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFXuGxvQ": { + "filaments": [ + "Volumic/Volumic PLA Ultra" + ], + "name": "Volumic PLA Ultra", + "filament_type": "PLA", + "filament_vendor": "Volumic" + }, + "OFXz7Mwx": { + "filaments": [ + "Elegoo/Elegoo PLA Silk", + "OrcaFilamentLibrary/Elegoo PLA Silk" + ], + "name": "Elegoo PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFXzQ4yL": { + "filaments": [ + "BBL/Bambu ASA-Aero", + "OrcaFilamentLibrary/Bambu ASA-Aero" + ], + "name": "Bambu ASA-Aero", + "filament_type": "ASA-AERO", + "filament_vendor": "Bambu Lab" + }, + "OFY0F5qA": { + "filaments": [ + "Volumic/Volumic PETG Ultra carbone (Performance)" + ], + "name": "Volumic PETG Ultra carbone (Performance)", + "filament_type": "PETG", + "filament_vendor": "Volumic" + }, + "OFY3AB7j": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA Matte" + ], + "name": "Snapmaker J1 PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFY7jxcS": { + "filaments": [ + "Snapmaker/Snapmaker TPU 90A" + ], + "name": "Snapmaker TPU 90A", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFY9muEs": { + "filaments": [ + "Anker/Generic ABS", + "Anycubic/Generic ABS", + "Artillery/Generic ABS", + "BBL/Generic ABS", + "Blocks/Generic ABS", + "Chuanying/Generic ABS", + "Co Print/Generic ABS", + "CoLiDo/Generic ABS", + "Comgrow/Generic ABS", + "Creality/Generic ABS", + "Custom/Generic ABS", + "Elegoo/Generic ABS", + "FLSun/Generic ABS", + "Flashforge/Generic ABS", + "FlyingBear/Generic ABS", + "InfiMech/Generic ABS", + "Lulzbot/Generic ABS", + "OrcaArena/Generic ABS", + "OrcaFilamentLibrary/Generic ABS", + "Peopoly/Generic ABS", + "Prusa/Generic ABS", + "Qidi/Generic ABS", + "RH3D/Generic ABS", + "Ratrig/Generic ABS", + "SecKit/Generic ABS", + "Sovol/Generic ABS", + "Tiertime/Generic ABS", + "Vzbot/Generic ABS", + "Z-Bolt/Generic ABS" + ], + "name": "Generic ABS", + "filament_type": "ABS", + "filament_vendor": "Generic" + }, + "OFYE7YZw": { + "filaments": [ + "Qidi/Tinmorry PETG-ECO" + ], + "name": "Tinmorry PETG-ECO", + "filament_type": "PETG", + "filament_vendor": "Tinmorry" + }, + "OFYEtXuk": { + "filaments": [ + "Snapmaker/Snapmaker J1 PA-CF" + ], + "name": "Snapmaker J1 PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Snapmaker" + }, + "OFYGbPHX": { + "filaments": [ + "OrcaFilamentLibrary/PolyLite Dual PLA", + "Snapmaker/PolyLite Dual PLA" + ], + "name": "PolyLite Dual PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFYGrfHY": { + "filaments": [ + "BBL/BETA PETG Fluorescence" + ], + "name": "BETA PETG Fluorescence", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFYPdQJh": { + "filaments": [ + "Anker/Generic PETG", + "Anycubic/Generic PETG", + "Artillery/Generic PETG", + "BBL/Generic PETG", + "Blocks/Generic PETG", + "CONSTRUCT3D/Generic PETG", + "Chuanying/Generic PETG", + "Co Print/Generic PETG", + "CoLiDo/Generic PETG", + "Comgrow/Generic PETG", + "Creality/Generic PETG", + "Custom/Generic PETG", + "DeltaMaker/Generic PETG", + "Elegoo/Generic PETG", + "FLSun/Generic PETG", + "Flashforge/Generic PETG", + "FlyingBear/Generic PETG", + "Ginger Additive/Generic PETG", + "InfiMech/Generic PETG", + "LONGER/Generic PETG", + "Lulzbot/Generic PETG", + "OrcaArena/Generic PETG", + "OrcaFilamentLibrary/Generic PETG", + "Peopoly/Generic PETG", + "Prusa/Generic PETG", + "Qidi/Generic PETG", + "RH3D/Generic PETG", + "Ratrig/Generic PETG", + "SecKit/Generic PETG", + "Sovol/Generic PETG", + "Tiertime/Generic PETG", + "Vzbot/Generic PETG", + "Z-Bolt/Generic PETG" + ], + "name": "Generic PETG", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OFYTIMbj": { + "filaments": [ + "Flashforge/Flashforge ABS-CF" + ], + "name": "Flashforge ABS-CF", + "filament_type": "ABS-CF", + "filament_vendor": "Flashforge" + }, + "OFYYeMyQ": { + "filaments": [ + "Flashforge/Flashforge PETG Basic" + ], + "name": "Flashforge PETG Basic", + "filament_type": "PETG", + "filament_vendor": "Flashforge" + }, + "OFYd5uS3": { + "filaments": [], + "name": "DREMC TPU 95A", + "filament_type": "TPU", + "filament_vendor": "DREMC" + }, + "OFYezc6s": { + "filaments": [ + "FlyingBear/FlyingBear TPU" + ], + "name": "FlyingBear TPU", + "filament_type": "TPU", + "filament_vendor": "FlyingBear" + }, + "OFYuowge": { + "filaments": [ + "FlyingBear/Other ABS", + "InfiMech/Other ABS" + ], + "name": "Other ABS", + "filament_type": "ABS", + "filament_vendor": "Other" + }, + "OFZ0mR5b": { + "filaments": [ + "Anycubic/Anycubic PLA-CF" + ], + "name": "Anycubic PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Anycubic" + }, + "OFZ2LuAi": { + "filaments": [ + "Wanhao France/YUMI PLA Bowden" + ], + "name": "YUMI PLA Bowden", + "filament_type": "PLA", + "filament_vendor": "Yumi" + }, + "OFZ3K2cL": { + "filaments": [ + "Qidi/QIDI PA6-CF" + ], + "name": "QIDI PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "QIDI" + }, + "OFZ4QbfK": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Rosa Flamenco" + ], + "name": "FilAr PLA Rosa Flamenco", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFZGrQTU": { + "filaments": [ + "BBL/addnorth PETG Economy" + ], + "name": "addnorth PETG Economy", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OFZJft47": { + "filaments": [ + "BBL/addnorth PLA Economy" + ], + "name": "addnorth PLA Economy", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFZLtWYs": { + "filaments": [ + "Qidi/QIDI ABS-GF25" + ], + "name": "QIDI ABS-GF25", + "filament_type": "ABS-GF", + "filament_vendor": "QIDI" + }, + "OFZOuWrO": { + "filaments": [ + "Qidi/QIDI PPS-CF" + ], + "name": "QIDI PPS-CF", + "filament_type": "PPS-CF", + "filament_vendor": "QIDI" + }, + "OFZivHGL": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA" + ], + "name": "Snapmaker Dual PLA", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFZqZMuv": { + "filaments": [ + "BBL/BETA ASA" + ], + "name": "BETA ASA", + "filament_type": "ASA", + "filament_vendor": "BETA" + }, + "OFZr862X": { + "filaments": [ + "Creality/Generic PLA HF", + "Prusa/Generic PLA HF" + ], + "name": "Generic PLA HF", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFZtOQtl": { + "filaments": [ + "Flashforge/Flashforge PA6-CF" + ], + "name": "Flashforge PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Flashforge" + }, + "OFZtkHRq": { + "filaments": [ + "Anycubic/Anycubic PC" + ], + "name": "Anycubic PC", + "filament_type": "PC", + "filament_vendor": "Anycubic" + }, + "OFaDOaNt": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Celeste Cielo" + ], + "name": "FilAr PLA Celeste Cielo", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFaDsTE0": { + "filaments": [ + "Flashforge/Polymaker S1" + ], + "name": "Polymaker S1", + "filament_type": "PA", + "filament_vendor": "Polymaker" + }, + "OFaEesXQ": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Rojo de Carreras" + ], + "name": "FilAr PLA Rojo de Carreras", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFaEuvNF": { + "filaments": [ + "Anycubic/Anycubic PAHT-CF" + ], + "name": "Anycubic PAHT-CF", + "filament_type": "PAHT-CF", + "filament_vendor": "Anycubic" + }, + "OFaHjk1V": { + "filaments": [ + "Volumic/Volumic PC" + ], + "name": "Volumic PC", + "filament_type": "PC", + "filament_vendor": "Volumic" + }, + "OFaP2SsH": { + "filaments": [ + "LH/LHS ASA" + ], + "name": "LHS ASA", + "filament_type": "ASA", + "filament_vendor": "LH Stinger" + }, + "OFaQMgRH": { + "filaments": [ + "BBL/Bambu PLA Tough", + "OrcaFilamentLibrary/Bambu PLA Tough" + ], + "name": "Bambu PLA Tough", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFaRjiIm": { + "filaments": [ + "SeeMeCNC/SeeMeCNC PETG-CF" + ], + "name": "SeeMeCNC PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "SeeMeCNC" + }, + "OFaYz8iE": { + "filaments": [ + "OrcaFilamentLibrary/Elas PLA Pro" + ], + "name": "Elas PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Elas" + }, + "OFaaddbQ": { + "filaments": [ + "Flashforge/Flashforge PVA" + ], + "name": "Flashforge PVA", + "filament_type": "PVA", + "filament_vendor": "Flashforge" + }, + "OFaeIx7W": { + "filaments": [ + "iQ/Polymaker PETG Polymax black P1" + ], + "name": "Polymaker PETG Polymax black P1", + "filament_type": "PETG Polymax", + "filament_vendor": "iQ Materials" + }, + "OFafO6VM": { + "filaments": [ + "Elegoo/Generic PC-CF" + ], + "name": "Generic PC-CF", + "filament_type": "PC-CF", + "filament_vendor": "Generic" + }, + "OFafocjw": { + "filaments": [ + "Cubicon/Cubicon ABS" + ], + "name": "Cubicon ABS", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFausr3F": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Rosa" + ], + "name": "FilAr PLA-mate Rosa", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFb5EEM3": { + "filaments": [ + "Artillery/Artillery PET" + ], + "name": "Artillery PET", + "filament_type": "PET", + "filament_vendor": "Artillery" + }, + "OFbP8zEO": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Silk" + ], + "name": "Eolas Prints PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFbPuPKY": { + "filaments": [ + "Prusa/Generic FLEX" + ], + "name": "Generic FLEX", + "filament_type": "FLEX", + "filament_vendor": "Generic" + }, + "OFbSChKb": { + "filaments": [ + "SeeMeCNC/SeeMeCNC PLA" + ], + "name": "SeeMeCNC PLA", + "filament_type": "PLA", + "filament_vendor": "SeeMeCNC" + }, + "OFbSZBOi": { + "filaments": [ + "InfiMech/InfiMech TPU Basic" + ], + "name": "InfiMech TPU Basic", + "filament_type": "TPU", + "filament_vendor": "InfiMech" + }, + "OFbh7HcA": { + "filaments": [ + "Eryone/Eryone PP-CF" + ], + "name": "Eryone PP-CF", + "filament_type": "PP-CF", + "filament_vendor": "Eryone" + }, + "OFc3xdm9": { + "filaments": [ + "BBL/Overture PLA", + "OrcaFilamentLibrary/Overture PLA", + "Qidi/Overture PLA" + ], + "name": "Overture PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFc87pL3": { + "filaments": [ + "OrcaArena/Arena PET-CF" + ], + "name": "Arena PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Orca Arena" + }, + "OFcBJQcC": { + "filaments": [ + "Snapmaker/Snapmaker Dual TPU High-Flow" + ], + "name": "Snapmaker Dual TPU High-Flow", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFcBl0nJ": { + "filaments": [ + "BBL/Fiberon PA612-CF15" + ], + "name": "Fiberon PA612-CF15", + "filament_type": "PA-CF", + "filament_vendor": "Polymaker" + }, + "OFcJDtTx": { + "filaments": [ + "Artillery/Artillery TPU" + ], + "name": "Artillery TPU", + "filament_type": "TPU", + "filament_vendor": "Artillery" + }, + "OFcKtw8W": { + "filaments": [ + "Volumic/PA6 CF20 (Performance)" + ], + "name": "PA6 CF20 (Performance)", + "filament_type": "PA6-CF", + "filament_vendor": "Volumic" + }, + "OFcVLpNA": { + "filaments": [ + "Flashforge/FusRock PAHT-GF" + ], + "name": "FusRock PAHT-GF", + "filament_type": "PAHT-GF", + "filament_vendor": "FusRock" + }, + "OFcfQk4h": { + "filaments": [ + "BBL/Overture Air PLA", + "OrcaFilamentLibrary/Overture Air PLA" + ], + "name": "Overture Air PLA", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFcnWTJB": { + "filaments": [ + "BBL/BETA PLA Glitter" + ], + "name": "BETA PLA Glitter", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFcogyWl": { + "filaments": [ + "WonderMaker/WonderMaker PLA Metal" + ], + "name": "WonderMaker PLA Metal", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFcpa50Z": { + "filaments": [ + "BBL/addnorth PLA-CF Carbon Fiber" + ], + "name": "addnorth PLA-CF Carbon Fiber", + "filament_type": "PLA-CF", + "filament_vendor": "addnorth" + }, + "OFctg8r1": { + "filaments": [ + "CoLiDo/CoLiDo PLA+" + ], + "name": "CoLiDo PLA+", + "filament_type": "PLA", + "filament_vendor": "CoLiDo" + }, + "OFcvKkrs": { + "filaments": [ + "BBL/Overture TPU", + "OrcaFilamentLibrary/Overture TPU" + ], + "name": "Overture TPU", + "filament_type": "TPU", + "filament_vendor": "Overture" + }, + "OFcytyoA": { + "filaments": [ + "BBL/Fiberon PETG-ESD", + "OrcaFilamentLibrary/Fiberon PETG-ESD", + "Snapmaker/Fiberon PETG-ESD" + ], + "name": "Fiberon PETG-ESD", + "filament_type": "PETG", + "filament_vendor": "Polymaker" + }, + "OFd0Fv0k": { + "filaments": [ + "BBL/Generic PE-CF", + "OrcaFilamentLibrary/Generic PE-CF", + "Tiertime/Generic PE-CF" + ], + "name": "Generic PE-CF", + "filament_type": "PE-CF", + "filament_vendor": "Generic" + }, + "OFd2vX0G": { + "filaments": [ + "BBL/COEX PLA PRIME", + "OrcaFilamentLibrary/COEX PLA PRIME" + ], + "name": "COEX PLA PRIME", + "filament_type": "PLA", + "filament_vendor": "COEX 3D" + }, + "OFd4zw5l": { + "filaments": [ + "BBL/AliZ PA-CF", + "OrcaFilamentLibrary/AliZ PA-CF" + ], + "name": "AliZ PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Aliz" + }, + "OFdD5Wbu": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA-CF" + ], + "name": "Snapmaker J1 PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Snapmaker" + }, + "OFdI4zMo": { + "filaments": [], + "name": "DREMC ASA CF", + "filament_type": "ASA", + "filament_vendor": "DREMC" + }, + "OFdXVjGZ": { + "filaments": [ + "Tiertime/Tiertime PC" + ], + "name": "Tiertime PC", + "filament_type": "PC", + "filament_vendor": "Tiertime" + }, + "OFdb8YNz": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Verde Manzana" + ], + "name": "FilAr PLA Verde Manzana", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFdd8ZqJ": { + "filaments": [ + "Snapmaker/Snapmaker PLA Wood" + ], + "name": "Snapmaker PLA Wood", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFdkWDiy": { + "filaments": [ + "Cubicon/Cubicon PLAi21" + ], + "name": "Cubicon PLAi21", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OFdqkWtz": { + "filaments": [ + "Flashforge/Flashforge PLA Luminous" + ], + "name": "Flashforge PLA Luminous", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFdrYBmI": { + "filaments": [ + "Tiertime/Tiertime ASA" + ], + "name": "Tiertime ASA", + "filament_type": "ASA", + "filament_vendor": "Tiertime" + }, + "OFdtPd9h": { + "filaments": [ + "Qidi/QIDI PETG-GF" + ], + "name": "QIDI PETG-GF", + "filament_type": "PETG-GF", + "filament_vendor": "QIDI" + }, + "OFdzlrhi": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Chocolate" + ], + "name": "FilAr PLA-mate Chocolate", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFe61n6v": { + "filaments": [ + "Ratrig/RatRig PunkFil PETG CF" + ], + "name": "RatRig PunkFil PETG CF", + "filament_type": "PETG-CF10", + "filament_vendor": "RatRig" + }, + "OFe8tuNb": { + "filaments": [ + "Tiertime/Tiertime PA6-CF" + ], + "name": "Tiertime PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Tiertime" + }, + "OFe8yBMG": { + "filaments": [ + "Qidi/QIDI PETG Tough 0.6 nozzle" + ], + "name": "QIDI PETG Tough 0.6 nozzle", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFe98A1y": { + "filaments": [ + "Elegoo/Elegoo PET-CF", + "OrcaFilamentLibrary/Elegoo PET-CF" + ], + "name": "Elegoo PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Elegoo" + }, + "OFeAxvEt": { + "filaments": [ + "Snapmaker/Snapmaker Dual ABS Benchy" + ], + "name": "Snapmaker Dual ABS Benchy", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OFeCJqxx": { + "filaments": [ + "Qidi/QIDI ABS Rapido Metal" + ], + "name": "QIDI ABS Rapido Metal", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OFeF4UNh": { + "filaments": [ + "BBL/BETA PLA Silk" + ], + "name": "BETA PLA Silk", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFeIyhUx": { + "filaments": [ + "Anycubic/Anycubic PC-CF" + ], + "name": "Anycubic PC-CF", + "filament_type": "PC-CF", + "filament_vendor": "Anycubic" + }, + "OFeTATC7": { + "filaments": [ + "Snapmaker/Snapmaker J1 Breakaway" + ], + "name": "Snapmaker J1 Breakaway", + "filament_type": "Breakaway Support", + "filament_vendor": "Snapmaker" + }, + "OFeVzkSU": { + "filaments": [ + "Snapmaker/Fiberon PPS-GF20" + ], + "name": "Fiberon PPS-GF20", + "filament_type": "ABS", + "filament_vendor": "Polymaker" + }, + "OFeelsSM": { + "filaments": [ + "Qidi/HATCHBOX PLA" + ], + "name": "HATCHBOX PLA", + "filament_type": "PLA", + "filament_vendor": "HATCHBOX" + }, + "OFelDBgv": { + "filaments": [ + "Snapmaker/Polymaker PLA" + ], + "name": "Polymaker PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFepU7Tl": { + "filaments": [ + "WonderMaker/WonderMaker PLA Matte" + ], + "name": "WonderMaker PLA Matte", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFesA6rF": { + "filaments": [ + "Anker/Generic PLA Silk", + "BBL/Generic PLA Silk", + "Creality/Generic PLA Silk", + "FLSun/Generic PLA Silk", + "Flashforge/Generic PLA Silk", + "OrcaArena/Generic PLA Silk", + "OrcaFilamentLibrary/Generic PLA Silk", + "Prusa/Generic PLA Silk", + "Qidi/Generic PLA Silk", + "Sovol/Generic PLA Silk", + "Tiertime/Generic PLA Silk" + ], + "name": "Generic PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFexaZU2": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Manteca" + ], + "name": "FilAr PLA Manteca", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFf0MkD5": { + "filaments": [ + "Qidi/QIDI PETG Translucent" + ], + "name": "QIDI PETG Translucent", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFf52D4e": { + "filaments": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "name": "Snapmaker PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Snapmaker" + }, + "OFf5awy4": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Matte" + ], + "name": "Eolas Prints PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFf6ZEvu": { + "filaments": [ + "InfiMech/InfiMech PC" + ], + "name": "InfiMech PC", + "filament_type": "PC", + "filament_vendor": "InfiMech" + }, + "OFf6mfQO": { + "filaments": [ + "BBL/Bambu Support for ABS", + "OrcaFilamentLibrary/Bambu Support for ABS" + ], + "name": "Bambu Support for ABS", + "filament_type": "ABS", + "filament_vendor": "Bambu Lab" + }, + "OFf6ynfH": { + "filaments": [ + "FlyingBear/FlyingBear PETG Basic" + ], + "name": "FlyingBear PETG Basic", + "filament_type": "PETG Basic", + "filament_vendor": "FlyingBear" + }, + "OFfBpSRI": { + "filaments": [ + "BBL/Bambu ASA", + "OrcaFilamentLibrary/Bambu ASA" + ], + "name": "Bambu ASA", + "filament_type": "ASA", + "filament_vendor": "Bambu Lab" + }, + "OFfD87Gy": { + "filaments": [ + "Snapmaker/Snapmaker PLA Glow" + ], + "name": "Snapmaker PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFfHGM1D": { + "filaments": [ + "re3D/re3D rPP" + ], + "name": "re3D rPP", + "filament_type": "PP", + "filament_vendor": "re3D" + }, + "OFfJSCzm": { + "filaments": [ + "OrcaFilamentLibrary/FDplast PETG" + ], + "name": "FDplast PETG", + "filament_type": "PETG", + "filament_vendor": "FDplast" + }, + "OFfSqS4R": { + "filaments": [ + "Creality/ENDER FAST PLA" + ], + "name": "ENDER FAST PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFfYHK5z": { + "filaments": [ + "Qidi/Polymaker PLA-HT" + ], + "name": "Polymaker PLA-HT", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFfZcoKr": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Piel" + ], + "name": "FilAr PLA-mate Piel", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFfb10SK": { + "filaments": [ + "Artillery/Artillery PC" + ], + "name": "Artillery PC", + "filament_type": "PC", + "filament_vendor": "Artillery" + }, + "OFfmHUkQ": { + "filaments": [ + "Snapmaker/Snapmaker Dual Breakaway" + ], + "name": "Snapmaker Dual Breakaway", + "filament_type": "Breakaway Support", + "filament_vendor": "Snapmaker" + }, + "OFfmZrI3": { + "filaments": [ + "OrcaFilamentLibrary/FDplast TPU" + ], + "name": "FDplast TPU", + "filament_type": "TPU", + "filament_vendor": "FDplast" + }, + "OFfnXFie": { + "filaments": [ + "BBL/COEX TPE 40D", + "OrcaFilamentLibrary/COEX TPE 40D" + ], + "name": "COEX TPE 40D", + "filament_type": "TPU", + "filament_vendor": "COEX 3D" + }, + "OFfq5YXA": { + "filaments": [ + "OrcaFilamentLibrary/Valment PLA-CF" + ], + "name": "Valment PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Valment" + }, + "OFfr4XNO": { + "filaments": [ + "BBL/COEX TPE 60D", + "OrcaFilamentLibrary/COEX TPE 60D" + ], + "name": "COEX TPE 60D", + "filament_type": "TPU", + "filament_vendor": "COEX 3D" + }, + "OFfr6JDF": { + "filaments": [ + "Qidi/QIDI PETG Tough 0.8 nozzle" + ], + "name": "QIDI PETG Tough 0.8 nozzle", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFfuhviw": { + "filaments": [ + "Elegoo/Elegoo PLA Marble", + "OrcaFilamentLibrary/Elegoo PLA Marble" + ], + "name": "Elegoo PLA Marble", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFfuih8e": { + "filaments": [ + "Creality/Creality Silk PLA" + ], + "name": "Creality Silk PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFg3cWVt": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA Metal" + ], + "name": "Snapmaker Dual PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFg57Nmc": { + "filaments": [ + "BBL/Bambu PC FR", + "OrcaFilamentLibrary/Bambu PC FR" + ], + "name": "Bambu PC FR", + "filament_type": "PC", + "filament_vendor": "Bambu Lab" + }, + "OFg8hMzT": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PPCF" + ], + "name": "FILL3D PPCF", + "filament_type": "PP", + "filament_vendor": "FILL3D" + }, + "OFg8ndtj": { + "filaments": [ + "Anker/Generic PA", + "Anycubic/Generic PA", + "BBL/Generic PA", + "Blocks/Generic PA", + "Creality/Generic PA", + "Custom/Generic PA", + "Elegoo/Generic PA", + "FLSun/Generic PA", + "OrcaArena/Generic PA", + "OrcaFilamentLibrary/Generic PA", + "Prusa/Generic PA", + "Qidi/Generic PA", + "Ratrig/Generic PA", + "SecKit/Generic PA", + "Tiertime/Generic PA", + "Vzbot/Generic PA", + "Z-Bolt/Generic PA" + ], + "name": "Generic PA", + "filament_type": "PA", + "filament_vendor": "Generic" + }, + "OFgHh8ly": { + "filaments": [ + "Afinia/Afinia Value PLA" + ], + "name": "Afinia Value PLA", + "filament_type": "PLA", + "filament_vendor": "Afinia" + }, + "OFgMWJ8T": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Negro Azabache" + ], + "name": "FilAr PLA Negro Azabache", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFgSbX7E": { + "filaments": [ + "Volumic/Volumic PC (Performance)" + ], + "name": "Volumic PC (Performance)", + "filament_type": "PC", + "filament_vendor": "Volumic" + }, + "OFgVQkqW": { + "filaments": [ + "Cubicon/Cubicon ABSk" + ], + "name": "Cubicon ABSk", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFgXgt98": { + "filaments": [ + "Artillery/Artillery ABS" + ], + "name": "Artillery ABS", + "filament_type": "ABS", + "filament_vendor": "Artillery" + }, + "OFgbpcy9": { + "filaments": [ + "Anker/Generic TPU", + "Anycubic/Generic TPU", + "Artillery/Generic TPU", + "BBL/Generic TPU", + "Blocks/Generic TPU", + "Chuanying/Generic TPU", + "Co Print/Generic TPU", + "CoLiDo/Generic TPU", + "Creality/Generic TPU", + "Custom/Generic TPU", + "DeltaMaker/Generic TPU", + "FLSun/Generic TPU", + "Flashforge/Generic TPU", + "FlyingBear/Generic TPU", + "InfiMech/Generic TPU", + "OrcaArena/Generic TPU", + "OrcaFilamentLibrary/Generic TPU", + "Prusa/Generic TPU", + "Qidi/Generic TPU", + "RH3D/Generic TPU", + "Ratrig/Generic TPU", + "SecKit/Generic TPU", + "Sovol/Generic TPU", + "Tiertime/Generic TPU", + "Vzbot/Generic TPU" + ], + "name": "Generic TPU", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OFgdaBOt": { + "filaments": [ + "Snapmaker/Polymaker Tough PLA Family" + ], + "name": "Polymaker Tough PLA Family", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFgeM7nD": { + "filaments": [ + "Flashforge/Flashforge PA12-CF" + ], + "name": "Flashforge PA12-CF", + "filament_type": "PA-CF", + "filament_vendor": "Flashforge" + }, + "OFgjgN35": { + "filaments": [ + "Flashforge/Flashforge PLA Silk" + ], + "name": "Flashforge PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFglhKLM": { + "filaments": [ + "Qidi/QIDI PLA Rapido 0.8 nozzle" + ], + "name": "QIDI PLA Rapido 0.8 nozzle", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFgpLTMR": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Gris Plata" + ], + "name": "FilAr PETG Gris Plata", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFgpQwkk": { + "filaments": [ + "Creality/CR-PLA Fluo" + ], + "name": "CR-PLA Fluo", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFgptDSf": { + "filaments": [ + "OrcaArena/Arena PLA Matte" + ], + "name": "Arena PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFgyPlwU": { + "filaments": [ + "Snapmaker/Snapmaker TPU High-Flow" + ], + "name": "Snapmaker TPU High-Flow", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFh7mvPO": { + "filaments": [ + "Prusa/Prusament PVB" + ], + "name": "Prusament PVB", + "filament_type": "PVB", + "filament_vendor": "Prusa Polymers" + }, + "OFh9u9c0": { + "filaments": [ + "Creality/Generic PA6-GF" + ], + "name": "Generic PA6-GF", + "filament_type": "PA-GF", + "filament_vendor": "Generic" + }, + "OFhASRWj": { + "filaments": [ + "BBL/Panchroma PLA Temp Shift", + "OrcaFilamentLibrary/Panchroma PLA Temp Shift", + "Snapmaker/Panchroma PLA Temp Shift" + ], + "name": "Panchroma PLA Temp Shift", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFhMO9Kh": { + "filaments": [ + "OrcaFilamentLibrary/GreenGate3D PETG" + ], + "name": "GreenGate3D PETG", + "filament_type": "PETG", + "filament_vendor": "GreenGate3D" + }, + "OFhN09f0": { + "filaments": [ + "BBL/addnorth PC BLend HT LCF" + ], + "name": "addnorth PC BLend HT LCF", + "filament_type": "PC", + "filament_vendor": "addnorth" + }, + "OFhO5aEJ": { + "filaments": [ + "Ratrig/RatRig PunkFil ABS" + ], + "name": "RatRig PunkFil ABS", + "filament_type": "ABS", + "filament_vendor": "RatRig" + }, + "OFhQf8ou": { + "filaments": [ + "Snapmaker/Snapmaker PLA-CF" + ], + "name": "Snapmaker PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Snapmaker" + }, + "OFhQfUQY": { + "filaments": [ + "BBL/Generic SBS", + "OrcaFilamentLibrary/Generic SBS", + "Tiertime/Generic SBS" + ], + "name": "Generic SBS", + "filament_type": "SBS", + "filament_vendor": "Generic" + }, + "OFhTPf6L": { + "filaments": [ + "Creality/Generic PA6-CF", + "Elegoo/Generic PA6-CF" + ], + "name": "Generic PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Generic" + }, + "OFhUjPA5": { + "filaments": [ + "Eryone/Eryone TPU" + ], + "name": "Eryone TPU", + "filament_type": "TPU", + "filament_vendor": "Eryone" + }, + "OFhWc5Bv": { + "filaments": [ + "OrcaFilamentLibrary/NIT ABS" + ], + "name": "NIT ABS", + "filament_type": "ABS", + "filament_vendor": "NIT" + }, + "OFhWhL1i": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PETG" + ], + "name": "Eolas Prints PETG", + "filament_type": "PETG", + "filament_vendor": "Eolas Prints" + }, + "OFhWrAuP": { + "filaments": [ + "Qidi/QIDI PLA-CF" + ], + "name": "QIDI PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "QIDI" + }, + "OFhbolij": { + "filaments": [ + "Creality/eSUN PLA-Lite" + ], + "name": "eSUN PLA-Lite", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFhcYzR8": { + "filaments": [ + "Elegoo/Elegoo PLA Sparkle", + "OrcaFilamentLibrary/Elegoo PLA Sparkle" + ], + "name": "Elegoo PLA Sparkle", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFhfd722": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints TPU Flex 93A" + ], + "name": "Eolas Prints TPU Flex 93A", + "filament_type": "TPU", + "filament_vendor": "Eolas Prints" + }, + "OFhiJE7Y": { + "filaments": [ + "Qidi/QIDI PEBA 95A" + ], + "name": "QIDI PEBA 95A", + "filament_type": "PEBA", + "filament_vendor": "QIDI" + }, + "OFhkN0a7": { + "filaments": [ + "Creality/Hyper PA612-CF" + ], + "name": "Hyper PA612-CF", + "filament_type": "PA-CF", + "filament_vendor": "Creality" + }, + "OFhlCNqq": { + "filaments": [ + "BBL/COEX PLA", + "OrcaFilamentLibrary/COEX PLA" + ], + "name": "COEX PLA", + "filament_type": "PLA", + "filament_vendor": "COEX 3D" + }, + "OFhmxnYw": { + "filaments": [ + "Snapmaker/Snapmaker PLA Basic" + ], + "name": "Snapmaker PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFhuaUQB": { + "filaments": [ + "BBL/Bambu ABS", + "OrcaFilamentLibrary/Bambu ABS", + "Qidi/Bambu ABS" + ], + "name": "Bambu ABS", + "filament_type": "ABS", + "filament_vendor": "Bambu Lab" + }, + "OFhwiZ50": { + "filaments": [ + "Qidi/QIDI PLA Rapido 0.2 nozzle" + ], + "name": "QIDI PLA Rapido 0.2 nozzle", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFhx4uOG": { + "filaments": [ + "Qidi/QIDI PET-GF" + ], + "name": "QIDI PET-GF", + "filament_type": "PET-GF", + "filament_vendor": "QIDI" + }, + "OFi5RSve": { + "filaments": [ + "Creality/eSUN PLA-LW" + ], + "name": "eSUN PLA-LW", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFi6PfUM": { + "filaments": [ + "Chuanying/Generic PLA-Silk", + "Creality/Generic PLA-Silk", + "Flashforge/Generic PLA-Silk" + ], + "name": "Generic PLA-Silk", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFi90KlM": { + "filaments": [ + "Volumic/Volumic NYLON Ultra (Performance)" + ], + "name": "Volumic NYLON Ultra (Performance)", + "filament_type": "PA", + "filament_vendor": "Volumic" + }, + "OFiDpM1B": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Bordo" + ], + "name": "FilAr PLA-mate Bordo", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFiEz2XI": { + "filaments": [ + "Cubicon/Cubicon PA-CF" + ], + "name": "Cubicon PA-CF", + "filament_type": "PA", + "filament_vendor": "Cubicon" + }, + "OFiWaoqD": { + "filaments": [ + "OrcaFilamentLibrary/DREMC PPA-CF" + ], + "name": "DREMC PPA-CF", + "filament_type": "PPA-CF", + "filament_vendor": "DREMC" + }, + "OFibWuBd": { + "filaments": [ + "Flashforge/Flashforge ABS Basic" + ], + "name": "Flashforge ABS Basic", + "filament_type": "ABS", + "filament_vendor": "Flashforge" + }, + "OFilAA3b": { + "filaments": [ + "Eryone/Eryone PLA-CF" + ], + "name": "Eryone PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "Eryone" + }, + "OFilD4bP": { + "filaments": [ + "FlyingBear/FlyingBear PLA" + ], + "name": "FlyingBear PLA", + "filament_type": "PLA", + "filament_vendor": "FlyingBear" + }, + "OFilnglt": { + "filaments": [ + "Artillery/Artillery PETG" + ], + "name": "Artillery PETG", + "filament_type": "PETG", + "filament_vendor": "Artillery" + }, + "OFin64Qg": { + "filaments": [ + "Creality/Generic Support for PLA" + ], + "name": "Generic Support for PLA", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFitS8al": { + "filaments": [ + "BBL/PolyLite PLA Neon", + "Snapmaker/PolyLite PLA Neon" + ], + "name": "PolyLite PLA Neon", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFiwEbze": { + "filaments": [ + "Volumic/PETG ESD (Performance)" + ], + "name": "PETG ESD (Performance)", + "filament_type": "PETG-ESD", + "filament_vendor": "Volumic" + }, + "OFj3bTjw": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Amarillo" + ], + "name": "FilAr PLA-mate Amarillo", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFj64R5U": { + "filaments": [ + "Peopoly/Peopoly Lancer ABS-GF" + ], + "name": "Peopoly Lancer ABS-GF", + "filament_type": "ABS", + "filament_vendor": "Peopoly" + }, + "OFjD3YTW": { + "filaments": [ + "Qidi/Qidi PC-ABS-FR" + ], + "name": "Qidi PC-ABS-FR", + "filament_type": "PC-ABS-FR", + "filament_vendor": "QIDI" + }, + "OFjHrAX0": { + "filaments": [ + "WonderMaker/WonderMaker ABS" + ], + "name": "WonderMaker ABS", + "filament_type": "ABS", + "filament_vendor": "WonderMaker" + }, + "OFjLAYgO": { + "filaments": [ + "Anycubic/Anycubic PEBA" + ], + "name": "Anycubic PEBA", + "filament_type": "PEBA", + "filament_vendor": "Anycubic" + }, + "OFjPXrXO": { + "filaments": [ + "Elegoo/Elegoo PLA Glow", + "OrcaFilamentLibrary/Elegoo PLA Glow" + ], + "name": "Elegoo PLA Glow", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFjT9PkZ": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Tabaco" + ], + "name": "FilAr PLA Tabaco", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFjUGUIK": { + "filaments": [ + "iQ/Fiberthree PACF Pro P1" + ], + "name": "Fiberthree PACF Pro P1", + "filament_type": "PACF Pro", + "filament_vendor": "iQ Materials" + }, + "OFjUXn67": { + "filaments": [ + "BBL/BETA ABS" + ], + "name": "BETA ABS", + "filament_type": "ABS", + "filament_vendor": "BETA" + }, + "OFjVOWfJ": { + "filaments": [ + "Anycubic/Anycubic PLA High Speed" + ], + "name": "Anycubic PLA High Speed", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFjXrKFO": { + "filaments": [ + "OrcaArena/Arena PLA Impact" + ], + "name": "Arena PLA Impact", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFjb0wos": { + "filaments": [ + "BBL/Panchroma PLA Metallic", + "OrcaFilamentLibrary/Panchroma PLA Metallic", + "Snapmaker/Panchroma PLA Metallic" + ], + "name": "Panchroma PLA Metallic", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFjcwUEm": { + "filaments": [ + "Cubicon/Cubicon PLA" + ], + "name": "Cubicon PLA", + "filament_type": "PLA", + "filament_vendor": "Cubicon" + }, + "OFjiXpyf": { + "filaments": [ + "Qidi/Generic TPU 95A", + "TwoTrees/Generic TPU 95A" + ], + "name": "Generic TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OFjkdnyN": { + "filaments": [ + "Snapmaker/Snapmaker Dual TPU" + ], + "name": "Snapmaker Dual TPU", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFjoAe0R": { + "filaments": [ + "Qidi/Qidi PLA-CF" + ], + "name": "Qidi PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "QIDI" + }, + "OFjogeYN": { + "filaments": [ + "BBL/BETA PETG Glitter" + ], + "name": "BETA PETG Glitter", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFjorDcx": { + "filaments": [ + "OrcaFilamentLibrary/FDplast ABS" + ], + "name": "FDplast ABS", + "filament_type": "ABS", + "filament_vendor": "FDplast" + }, + "OFjt8dDO": { + "filaments": [ + "Flashforge/FusRock NexPA-CF25" + ], + "name": "FusRock NexPA-CF25", + "filament_type": "PA-CF", + "filament_vendor": "FusRock" + }, + "OFjt9en1": { + "filaments": [ + "OrcaFilamentLibrary/Generic CoPE" + ], + "name": "Generic CoPE", + "filament_type": "CoPE", + "filament_vendor": "Generic" + }, + "OFjz0a3m": { + "filaments": [ + "Prusa/Prusament PC-CF" + ], + "name": "Prusament PC-CF", + "filament_type": "PC-CF", + "filament_vendor": "Prusa Polymers" + }, + "OFk8t9mz": { + "filaments": [ + "BBL/Fiberon PETG-rCF", + "OrcaFilamentLibrary/Fiberon PETG-rCF" + ], + "name": "Fiberon PETG-rCF", + "filament_type": "PETG-CF", + "filament_vendor": "Polymaker" + }, + "OFkAltI8": { + "filaments": [ + "FlyingBear/Other PA-CF", + "InfiMech/Other PA-CF" + ], + "name": "Other PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Other" + }, + "OFkGp50Y": { + "filaments": [ + "Volumic/Volumic UNIVERSAL Ultra (Performance)" + ], + "name": "Volumic UNIVERSAL Ultra (Performance)", + "filament_type": "UNIV", + "filament_vendor": "Volumic" + }, + "OFkGvN4d": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Verde Pixel" + ], + "name": "FilAr PLA Verde Pixel", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFkHbjUv": { + "filaments": [ + "BBL/BETA PLA Metallic" + ], + "name": "BETA PLA Metallic", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFkOviHk": { + "filaments": [ + "BBL/Fiberon PA6-CF", + "OrcaFilamentLibrary/Fiberon PA6-CF" + ], + "name": "Fiberon PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Polymaker" + }, + "OFkR8E2c": { + "filaments": [ + "Prusa/Prusament PETG" + ], + "name": "Prusament PETG", + "filament_type": "PETG", + "filament_vendor": "Prusa Polymers" + }, + "OFkf1HHw": { + "filaments": [ + "Flashforge/Generic PLA-SILK" + ], + "name": "Generic PLA-SILK", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFkhhUS0": { + "filaments": [ + "Elegoo/Elegoo Rapid PLA+", + "OrcaFilamentLibrary/Elegoo Rapid PLA+" + ], + "name": "Elegoo Rapid PLA+", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFklJcWK": { + "filaments": [ + "FlyingBear/Other PLA Hyper", + "InfiMech/Other PLA Hyper" + ], + "name": "Other PLA Hyper", + "filament_type": "PLA", + "filament_vendor": "Other" + }, + "OFknl9Iz": { + "filaments": [ + "BBL/Bambu ABS-GF", + "OrcaFilamentLibrary/Bambu ABS-GF" + ], + "name": "Bambu ABS-GF", + "filament_type": "ABS-GF", + "filament_vendor": "Bambu Lab" + }, + "OFkoLUtR": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Verde Oliva" + ], + "name": "FilAr PLA Verde Oliva", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFkq7rPy": { + "filaments": [ + "Eryone/Eryone PA-GF" + ], + "name": "Eryone PA-GF", + "filament_type": "PA-GF", + "filament_vendor": "Eryone" + }, + "OFks6esg": { + "filaments": [ + "Creality/EN-PLA+" + ], + "name": "EN-PLA+", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFkx5MEe": { + "filaments": [ + "Artillery/Artillery PVA" + ], + "name": "Artillery PVA", + "filament_type": "PVA", + "filament_vendor": "Artillery" + }, + "OFkzr35f": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Antibacterial" + ], + "name": "Eolas Prints PLA Antibacterial", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFlBoEfL": { + "filaments": [ + "Snapmaker/Snapmaker J1 TPU High-Flow" + ], + "name": "Snapmaker J1 TPU High-Flow", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFlIsW6f": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA Matte" + ], + "name": "Snapmaker Dual PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFlN6DL1": { + "filaments": [ + "Qidi/QIDI PA-Ultra" + ], + "name": "QIDI PA-Ultra", + "filament_type": "UltraPA", + "filament_vendor": "QIDI" + }, + "OFlP3KWq": { + "filaments": [ + "Elegoo/Elegoo PETG HF", + "OrcaFilamentLibrary/Elegoo PETG HF" + ], + "name": "Elegoo PETG HF", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFlSNkhc": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints ASA" + ], + "name": "Eolas Prints ASA", + "filament_type": "ASA", + "filament_vendor": "Eolas Prints" + }, + "OFlfuj2k": { + "filaments": [ + "BBL/Bambu TPU 85A" + ], + "name": "Bambu TPU 85A", + "filament_type": "TPU", + "filament_vendor": "Bambu Lab" + }, + "OFlgMgNM": { + "filaments": [ + "Flashforge/Flashforge PPS" + ], + "name": "Flashforge PPS", + "filament_type": "PPS", + "filament_vendor": "Flashforge" + }, + "OFllmFhT": { + "filaments": [ + "Elegoo/Generic PETG PRO" + ], + "name": "Generic PETG PRO", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OFlmxlDG": { + "filaments": [ + "BBL/BETA HIPS" + ], + "name": "BETA HIPS", + "filament_type": "HIPS", + "filament_vendor": "BETA" + }, + "OFln72PT": { + "filaments": [ + "Elegoo/Elegoo PLA-CF", + "OrcaFilamentLibrary/Elegoo PLA-CF" + ], + "name": "Elegoo PLA-CF", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFlsTpJG": { + "filaments": [ + "Elegoo/Elegoo PC-FR", + "OrcaFilamentLibrary/Elegoo PC-FR" + ], + "name": "Elegoo PC-FR", + "filament_type": "PC", + "filament_vendor": "Elegoo" + }, + "OFlufQpZ": { + "filaments": [ + "Snapmaker/Snapmaker PLA" + ], + "name": "Snapmaker PLA", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFlwmqrC": { + "filaments": [ + "BBL/Polymaker HT-PLA-GF", + "OrcaFilamentLibrary/Polymaker HT-PLA-GF", + "Snapmaker/Polymaker HT-PLA-GF" + ], + "name": "Polymaker HT-PLA-GF", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFm06H6V": { + "filaments": [ + "Elegoo/Elegoo PLA Basic", + "OrcaFilamentLibrary/Elegoo PLA Basic" + ], + "name": "Elegoo PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFm4SivL": { + "filaments": [ + "Flashforge/Flashforge PLA Pro" + ], + "name": "Flashforge PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Flashforge" + }, + "OFm4ysMO": { + "filaments": [ + "FlyingBear/FlyingBear ABS" + ], + "name": "FlyingBear ABS", + "filament_type": "ABS", + "filament_vendor": "FlyingBear" + }, + "OFm70lLt": { + "filaments": [ + "CoLiDo/CoLiDo PLA" + ], + "name": "CoLiDo PLA", + "filament_type": "PLA", + "filament_vendor": "CoLiDo" + }, + "OFm8rqoY": { + "filaments": [ + "re3D/re3D rPP" + ], + "name": "re3D rPP", + "filament_type": "PP", + "filament_vendor": "re3D" + }, + "OFmCOW2Y": { + "filaments": [ + "re3D/re3D rPETG" + ], + "name": "re3D rPETG", + "filament_type": "PETG", + "filament_vendor": "re3D" + }, + "OFmFwUWM": { + "filaments": [ + "Prusa/Prusament ASA" + ], + "name": "Prusament ASA", + "filament_type": "ASA", + "filament_vendor": "Prusa Polymers" + }, + "OFmJAd3A": { + "filaments": [ + "OrcaFilamentLibrary/FDplast HIPS" + ], + "name": "FDplast HIPS", + "filament_type": "HIPS", + "filament_vendor": "FDplast" + }, + "OFmKU2Ha": { + "filaments": [ + "Eryone/Eryone PLA" + ], + "name": "Eryone PLA", + "filament_type": "PLA", + "filament_vendor": "Eryone" + }, + "OFmN2lvw": { + "filaments": [ + "BBL/Generic TPU for AMS" + ], + "name": "Generic TPU for AMS", + "filament_type": "TPU-AMS", + "filament_vendor": "Generic" + }, + "OFmY0l6t": { + "filaments": [ + "Creality/Generic PLA Matte", + "Elegoo/Generic PLA Matte", + "OrcaFilamentLibrary/Generic PLA Matte" + ], + "name": "Generic PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFma5TXH": { + "filaments": [ + "Qidi/QIDI ABS Odorless" + ], + "name": "QIDI ABS Odorless", + "filament_type": "ABS", + "filament_vendor": "QIDI" + }, + "OFmaeU4a": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Naranja" + ], + "name": "FilAr PLA-mate Naranja", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFmfizbq": { + "filaments": [ + "OrcaArena/Arena PLA Silk" + ], + "name": "Arena PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFmjN2bc": { + "filaments": [ + "Anycubic/Anycubic PLA" + ], + "name": "Anycubic PLA", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFmn9NZL": { + "filaments": [ + "BBL/FusRock ABS-GF", + "OrcaFilamentLibrary/FusRock ABS-GF" + ], + "name": "FusRock ABS-GF", + "filament_type": "ABS-GF", + "filament_vendor": "FusRock" + }, + "OFmpMwxS": { + "filaments": [ + "BBL/Generic PLA High Speed", + "Creality/Generic PLA High Speed", + "FLSun/Generic PLA High Speed", + "Flashforge/Generic PLA High Speed", + "OrcaFilamentLibrary/Generic PLA High Speed", + "Qidi/Generic PLA High Speed", + "Tiertime/Generic PLA High Speed" + ], + "name": "Generic PLA High Speed", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFmt513L": { + "filaments": [ + "BBL/BETA PETG Transparent" + ], + "name": "BETA PETG Transparent", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFmveLWz": { + "filaments": [ + "Elegoo/Elegoo PETG-GF", + "OrcaFilamentLibrary/Elegoo PETG-GF" + ], + "name": "Elegoo PETG-GF", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFn1QaY3": { + "filaments": [ + "Elegoo/Elegoo PLA Translucent2", + "OrcaFilamentLibrary/Elegoo PLA Translucent2" + ], + "name": "Elegoo PLA Translucent2", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFn2GlhY": { + "filaments": [ + "Creality/Hyper PA6-CF" + ], + "name": "Hyper PA6-CF", + "filament_type": "PA-CF", + "filament_vendor": "Creality" + }, + "OFn6WpN7": { + "filaments": [ + "Qidi/QIDI PA12-CF" + ], + "name": "QIDI PA12-CF", + "filament_type": "PA12-CF", + "filament_vendor": "QIDI" + }, + "OFnBvPhb": { + "filaments": [ + "BBL/addnorth PLA rPLA RE-ADD" + ], + "name": "addnorth PLA rPLA RE-ADD", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFnHc3D6": { + "filaments": [ + "Creality/eSUN PLA-CF" + ], + "name": "eSUN PLA-CF", + "filament_type": "PLA-CF", + "filament_vendor": "eSUN" + }, + "OFnO4wnf": { + "filaments": [ + "Prusa/Prusament PLA" + ], + "name": "Prusament PLA", + "filament_type": "PLA", + "filament_vendor": "Prusa Polymers" + }, + "OFnSeLHk": { + "filaments": [ + "CoLiDo/CoLiDo PLA Silk" + ], + "name": "CoLiDo PLA Silk", + "filament_type": "PLA", + "filament_vendor": "CoLiDo" + }, + "OFnT7Qpb": { + "filaments": [ + "Prusa/Generic TPU HF" + ], + "name": "Generic TPU HF", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OFnXrkhA": { + "filaments": [ + "InfiMech/InfiMech PA-CF" + ], + "name": "InfiMech PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "InfiMech" + }, + "OFnXwW8l": { + "filaments": [ + "Snapmaker/PolyLite PLA Pro Metallic" + ], + "name": "PolyLite PLA Pro Metallic", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFnYVFk2": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Azul Francia" + ], + "name": "FilAr PLA Azul Francia", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFncpm7O": { + "filaments": [ + "WonderMaker/WonderMaker PLA Silk" + ], + "name": "WonderMaker PLA Silk", + "filament_type": "PLA", + "filament_vendor": "WonderMaker" + }, + "OFneOFWe": { + "filaments": [ + "CoLiDo/CoLiDo ABS" + ], + "name": "CoLiDo ABS", + "filament_type": "ABS", + "filament_vendor": "CoLiDo" + }, + "OFnejEt4": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Cian" + ], + "name": "FilAr PETG Cian", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFnfxTvi": { + "filaments": [ + "BBL/Bambu PLA Lite" + ], + "name": "Bambu PLA Lite", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFngcE81": { + "filaments": [ + "LH/LHS TPU Foamy 78A" + ], + "name": "LHS TPU Foamy 78A", + "filament_type": "TPU", + "filament_vendor": "LH Stinger" + }, + "OFniMuTN": { + "filaments": [ + "BBL/Bambu PA6-CF", + "OrcaFilamentLibrary/Bambu PA6-CF" + ], + "name": "Bambu PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "Bambu Lab" + }, + "OFnmp2pO": { + "filaments": [ + "Snapmaker/Snapmaker Breakaway Support For PLA" + ], + "name": "Snapmaker Breakaway Support For PLA", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFnmp6rt": { + "filaments": [ + "Anycubic/Anycubic PLA+" + ], + "name": "Anycubic PLA+", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFnpX8uh": { + "filaments": [ + "BBL/BETA PETG Matte" + ], + "name": "BETA PETG Matte", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFnyHfcv": { + "filaments": [ + "Ratrig/Generic ABS BigNozzle" + ], + "name": "Generic ABS BigNozzle", + "filament_type": "ABS", + "filament_vendor": "Generic" + }, + "OFo15hcT": { + "filaments": [ + "Qidi/QIDI PAHT-GF" + ], + "name": "QIDI PAHT-GF", + "filament_type": "PAHT-GF", + "filament_vendor": "QIDI" + }, + "OFo2UF2C": { + "filaments": [ + "BBL/Generic BVOH", + "Creality/Generic BVOH", + "Flashforge/Generic BVOH", + "OrcaFilamentLibrary/Generic BVOH", + "Tiertime/Generic BVOH" + ], + "name": "Generic BVOH", + "filament_type": "BVOH", + "filament_vendor": "Generic" + }, + "OFo6n2pB": { + "filaments": [ + "Anycubic/Anycubic PETG" + ], + "name": "Anycubic PETG", + "filament_type": "PETG", + "filament_vendor": "Anycubic" + }, + "OFoBTKmn": { + "filaments": [ + "Cubicon/Cubicon PETG" + ], + "name": "Cubicon PETG", + "filament_type": "PETG", + "filament_vendor": "Cubicon" + }, + "OFoSknDB": { + "filaments": [ + "OrcaFilamentLibrary/FILL3D PLA Turbo" + ], + "name": "FILL3D PLA Turbo", + "filament_type": "PLA", + "filament_vendor": "FILL3D" + }, + "OFoYSJKi": { + "filaments": [ + "Anker/Generic PETG-CF", + "BBL/Generic PETG-CF", + "Creality/Generic PETG-CF", + "Elegoo/Generic PETG-CF", + "Flashforge/Generic PETG-CF", + "OrcaArena/Generic PETG-CF", + "OrcaFilamentLibrary/Generic PETG-CF", + "Qidi/Generic PETG-CF", + "Tiertime/Generic PETG-CF" + ], + "name": "Generic PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Generic" + }, + "OFobDOW5": { + "filaments": [ + "Elegoo/Elegoo ASA", + "OrcaFilamentLibrary/Elegoo ASA" + ], + "name": "Elegoo ASA", + "filament_type": "ASA", + "filament_vendor": "Elegoo" + }, + "OFocyw69": { + "filaments": [ + "BBL/AliZ PETG", + "OrcaFilamentLibrary/AliZ PETG" + ], + "name": "AliZ PETG", + "filament_type": "PETG", + "filament_vendor": "Aliz" + }, + "OFoiVqVM": { + "filaments": [ + "BBL/Bambu PLA Basic", + "OrcaFilamentLibrary/Bambu PLA Basic" + ], + "name": "Bambu PLA Basic", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFojbdhR": { + "filaments": [ + "Flashforge/Flashforge ABS-GF" + ], + "name": "Flashforge ABS-GF", + "filament_type": "ABS-GF", + "filament_vendor": "Flashforge" + }, + "OForhBi4": { + "filaments": [ + "Cubicon/Cubicon ABSk" + ], + "name": "Cubicon ABSk", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFovEIbw": { + "filaments": [ + "BBL/Bambu PETG HF", + "OrcaFilamentLibrary/Bambu PETG HF" + ], + "name": "Bambu PETG HF", + "filament_type": "PETG", + "filament_vendor": "Bambu Lab" + }, + "OFp4ETDP": { + "filaments": [ + "Creality/CR-PLA" + ], + "name": "CR-PLA", + "filament_type": "PLA", + "filament_vendor": "Creality" + }, + "OFp57RRC": { + "filaments": [ + "Qidi/QIDI PPS-GF" + ], + "name": "QIDI PPS-GF", + "filament_type": "PPS-GF", + "filament_vendor": "QIDI" + }, + "OFp9wdmf": { + "filaments": [ + "Eryone/Eryone PA-CF" + ], + "name": "Eryone PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Eryone" + }, + "OFpBlrvY": { + "filaments": [ + "OrcaFilamentLibrary/Valment PLA Silk" + ], + "name": "Valment PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Valment" + }, + "OFpDo5Ix": { + "filaments": [ + "Cubicon/Cubicon ABS" + ], + "name": "Cubicon ABS", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFpPGSKG": { + "filaments": [ + "BBL/SUNLU Silk PLA+", + "Flashforge/SUNLU Silk PLA+", + "OrcaFilamentLibrary/SUNLU Silk PLA+" + ], + "name": "SUNLU Silk PLA+", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFpPJSHE": { + "filaments": [ + "Peopoly/Peopoly Lancer PETG-C" + ], + "name": "Peopoly Lancer PETG-C", + "filament_type": "PETG", + "filament_vendor": "Peopoly" + }, + "OFpW4gdi": { + "filaments": [ + "BBL/SUNLU PLA Matte", + "Flashforge/SUNLU PLA Matte", + "OrcaFilamentLibrary/SUNLU PLA Matte" + ], + "name": "SUNLU PLA Matte", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFpdjFI3": { + "filaments": [ + "BBL/BETA PLA UV Color Change" + ], + "name": "BETA PLA UV Color Change", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFpu74Qe": { + "filaments": [ + "Snapmaker/Snapmaker PLA Eco" + ], + "name": "Snapmaker PLA Eco", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFpumhCM": { + "filaments": [ + "Volumic/Volumic UNIVERSAL Ultra" + ], + "name": "Volumic UNIVERSAL Ultra", + "filament_type": "UNIV", + "filament_vendor": "Volumic" + }, + "OFq0TY7C": { + "filaments": [ + "Flashforge/Flashforge ASA-CF" + ], + "name": "Flashforge ASA-CF", + "filament_type": "ASA-CF", + "filament_vendor": "Flashforge" + }, + "OFq8gfS4": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Negro Azabache" + ], + "name": "FilAr PETG Negro Azabache", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFq9svOz": { + "filaments": [ + "BBL/Generic PPS", + "Creality/Generic PPS", + "Tiertime/Generic PPS" + ], + "name": "Generic PPS", + "filament_type": "PPS", + "filament_vendor": "Generic" + }, + "OFqFRiLb": { + "filaments": [ + "Ratrig/Generic PLA BigNozzle" + ], + "name": "Generic PLA BigNozzle", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFqGRZyH": { + "filaments": [ + "BBL/Numakers PLA+", + "OrcaFilamentLibrary/Numakers PLA+" + ], + "name": "Numakers PLA+", + "filament_type": "PLA", + "filament_vendor": "Numakers" + }, + "OFqHQNoZ": { + "filaments": [ + "Elegoo/Elegoo TPU 95A", + "OrcaFilamentLibrary/Elegoo TPU 95A" + ], + "name": "Elegoo TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Elegoo" + }, + "OFqINlYj": { + "filaments": [ + "BBL/eSUN PLA+", + "Creality/eSUN PLA+", + "OrcaFilamentLibrary/eSUN PLA+" + ], + "name": "eSUN PLA+", + "filament_type": "PLA", + "filament_vendor": "eSUN" + }, + "OFqTwtXM": { + "filaments": [ + "BBL/addnorth PETG rPETG Matte" + ], + "name": "addnorth PETG rPETG Matte", + "filament_type": "PETG", + "filament_vendor": "addnorth" + }, + "OFqcL5UF": { + "filaments": [ + "Qidi/QIDI Support For PET/PA" + ], + "name": "QIDI Support For PET/PA", + "filament_type": "PA-S", + "filament_vendor": "QIDI" + }, + "OFqtx549": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Celeste Cielo" + ], + "name": "FilAr PLA-mate Celeste Cielo", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFqw2PQA": { + "filaments": [ + "BBL/Panchroma CoPE", + "OrcaFilamentLibrary/Panchroma CoPE", + "Snapmaker/Panchroma CoPE" + ], + "name": "Panchroma CoPE", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFrFBEfd": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Neon" + ], + "name": "Eolas Prints PLA Neon", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFrGJ4tR": { + "filaments": [ + "Anycubic/Anycubic PLA Slik" + ], + "name": "Anycubic PLA Slik", + "filament_type": "PLA", + "filament_vendor": "Anycubic" + }, + "OFrKLeE3": { + "filaments": [ + "BBL/Bambu PLA Metal", + "OrcaFilamentLibrary/Bambu PLA Metal" + ], + "name": "Bambu PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFrLiqiM": { + "filaments": [ + "InfiMech/InfiMech PETG" + ], + "name": "InfiMech PETG", + "filament_type": "PETG", + "filament_vendor": "InfiMech" + }, + "OFrM4hdm": { + "filaments": [ + "Creality/CR-PLA Carbon" + ], + "name": "CR-PLA Carbon", + "filament_type": "PLA-CF", + "filament_vendor": "Creality" + }, + "OFrOh600": { + "filaments": [ + "BBL/Panchroma PLA Matte", + "Creality/Panchroma PLA Matte", + "OrcaFilamentLibrary/Panchroma PLA Matte", + "Snapmaker/Panchroma PLA Matte" + ], + "name": "Panchroma PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFrZDhVt": { + "filaments": [ + "Flashforge/Flashforge ASA-GF" + ], + "name": "Flashforge ASA-GF", + "filament_type": "ASA-GF", + "filament_vendor": "Flashforge" + }, + "OFrdZ0cK": { + "filaments": [ + "Creality/eSUN PETG+HS" + ], + "name": "eSUN PETG+HS", + "filament_type": "PETG", + "filament_vendor": "eSUN" + }, + "OFrjacXf": { + "filaments": [ + "Flashforge/Flashforge PET-CF" + ], + "name": "Flashforge PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "Flashforge" + }, + "OFrqMlGt": { + "filaments": [ + "BBL/BETA PETG" + ], + "name": "BETA PETG", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFrr67nG": { + "filaments": [ + "OrcaArena/Arena PC" + ], + "name": "Arena PC", + "filament_type": "PC", + "filament_vendor": "Orca Arena" + }, + "OFryjl35": { + "filaments": [ + "Elegoo/Elegoo ASA-CF", + "OrcaFilamentLibrary/Elegoo ASA-CF" + ], + "name": "Elegoo ASA-CF", + "filament_type": "ASA", + "filament_vendor": "Elegoo" + }, + "OFsB2lxm": { + "filaments": [ + "Elegoo/Elegoo PLA Matte", + "OrcaFilamentLibrary/Elegoo PLA Matte" + ], + "name": "Elegoo PLA Matte", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFsD974q": { + "filaments": [ + "Volumic/Volumic PETG Ultra (Performance)" + ], + "name": "Volumic PETG Ultra (Performance)", + "filament_type": "PETG", + "filament_vendor": "Volumic" + }, + "OFsDXRpS": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Piel" + ], + "name": "FilAr PLA Piel", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFsFo7ms": { + "filaments": [ + "Volumic/Volumic PP Ultra" + ], + "name": "Volumic PP Ultra", + "filament_type": "PP", + "filament_vendor": "Volumic" + }, + "OFsFon5l": { + "filaments": [ + "BBL/Generic HIPS", + "Chuanying/Generic HIPS", + "Creality/Generic HIPS", + "Flashforge/Generic HIPS", + "OrcaFilamentLibrary/Generic HIPS", + "Tiertime/Generic HIPS" + ], + "name": "Generic HIPS", + "filament_type": "HIPS", + "filament_vendor": "Generic" + }, + "OFsHSVZc": { + "filaments": [ + "BBL/Bambu Support W", + "OrcaFilamentLibrary/Bambu Support W" + ], + "name": "Bambu Support W", + "filament_type": "PLA", + "filament_vendor": "Bambu Lab" + }, + "OFsP8PKH": { + "filaments": [ + "Z-Bolt/Generic ABS HT" + ], + "name": "Generic ABS HT", + "filament_type": "ABS", + "filament_vendor": "Generic" + }, + "OFsRDvTM": { + "filaments": [ + "Anycubic/Panchroma PLA", + "BBL/Panchroma PLA", + "OrcaFilamentLibrary/Panchroma PLA", + "Snapmaker/Panchroma PLA" + ], + "name": "Panchroma PLA", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFsXQXbs": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Blanco Antartida" + ], + "name": "FilAr PETG Blanco Antartida", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFsijjtH": { + "filaments": [ + "BBL/Generic PP-GF", + "OrcaFilamentLibrary/Generic PP-GF", + "Tiertime/Generic PP-GF" + ], + "name": "Generic PP-GF", + "filament_type": "PP-GF", + "filament_vendor": "Generic" + }, + "OFsoykbm": { + "filaments": [ + "OrcaFilamentLibrary/DREMC PA6-CF" + ], + "name": "DREMC PA6-CF", + "filament_type": "PA6-CF", + "filament_vendor": "DREMC" + }, + "OFt0JbR7": { + "filaments": [ + "Snapmaker/Snapmaker J1 PLA Metal" + ], + "name": "Snapmaker J1 PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFt3HtlG": { + "filaments": [ + "Qidi/QIDI ABS-GF" + ], + "name": "QIDI ABS-GF", + "filament_type": "ABS-GF", + "filament_vendor": "QIDI" + }, + "OFt6e0US": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Amarillo Lima" + ], + "name": "FilAr PETG Amarillo Lima", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFt7SngH": { + "filaments": [ + "Snapmaker/Snapmaker J1 ASA" + ], + "name": "Snapmaker J1 ASA", + "filament_type": "ASA", + "filament_vendor": "Snapmaker" + }, + "OFtFtiS0": { + "filaments": [ + "Snapmaker/Polymaker PETG Galaxy" + ], + "name": "Polymaker PETG Galaxy", + "filament_type": "PETG", + "filament_vendor": "Polymaker" + }, + "OFtGC1ye": { + "filaments": [ + "Artillery/Artillery PA-CF" + ], + "name": "Artillery PA-CF", + "filament_type": "PA-CF", + "filament_vendor": "Artillery" + }, + "OFtKeKa9": { + "filaments": [ + "OrcaArena/Arena PLA Tough" + ], + "name": "Arena PLA Tough", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFtOPlK6": { + "filaments": [ + "OrcaArena/Arena PAHT-CF" + ], + "name": "Arena PAHT-CF", + "filament_type": "PA-CF", + "filament_vendor": "Orca Arena" + }, + "OFtOoWIj": { + "filaments": [], + "name": "FilAr PLA-mate", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFtRn8X8": { + "filaments": [ + "OrcaFilamentLibrary/FDplast SBS" + ], + "name": "FDplast SBS", + "filament_type": "SBS", + "filament_vendor": "FDplast" + }, + "OFtdVZpV": { + "filaments": [ + "BBL/addnorth PLA X-PLA" + ], + "name": "addnorth PLA X-PLA", + "filament_type": "PLA", + "filament_vendor": "addnorth" + }, + "OFtefokm": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Blanco" + ], + "name": "FilAr PLA-mate Blanco", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFtkLO6q": { + "filaments": [ + "BBL/Bambu TPU 90A" + ], + "name": "Bambu TPU 90A", + "filament_type": "TPU", + "filament_vendor": "Bambu Lab" + }, + "OFtndTHe": { + "filaments": [ + "BBL/BETA PETG-CF" + ], + "name": "BETA PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "BETA" + }, + "OFtpXCCv": { + "filaments": [ + "BBL/COEX ASA PRIME", + "OrcaFilamentLibrary/COEX ASA PRIME" + ], + "name": "COEX ASA PRIME", + "filament_type": "ASA", + "filament_vendor": "COEX 3D" + }, + "OFtr8eZw": { + "filaments": [ + "OrcaFilamentLibrary/FDplast PLA" + ], + "name": "FDplast PLA", + "filament_type": "PLA", + "filament_vendor": "FDplast" + }, + "OFtudokz": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA Premium" + ], + "name": "Eolas Prints PLA Premium", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFtybfNX": { + "filaments": [ + "Snapmaker/Snapmaker PLA Metal" + ], + "name": "Snapmaker PLA Metal", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFu08yGN": { + "filaments": [ + "Volumic/Volumic PETG Ultra carbone" + ], + "name": "Volumic PETG Ultra carbone", + "filament_type": "PETG", + "filament_vendor": "Volumic" + }, + "OFu0fjPJ": { + "filaments": [ + "LH/LHS PC CF" + ], + "name": "LHS PC CF", + "filament_type": "PC", + "filament_vendor": "LH Stinger" + }, + "OFu1E4ur": { + "filaments": [ + "Qidi/QIDI ASA-Aero" + ], + "name": "QIDI ASA-Aero", + "filament_type": "ASA-AERO", + "filament_vendor": "QIDI" + }, + "OFu1evlr": { + "filaments": [ + "BBL/Generic PCTG", + "Creality/Generic PCTG", + "OrcaFilamentLibrary/Generic PCTG", + "Ratrig/Generic PCTG", + "Tiertime/Generic PCTG" + ], + "name": "Generic PCTG", + "filament_type": "PCTG", + "filament_vendor": "Generic" + }, + "OFuFEtKX": { + "filaments": [ + "Flashforge/Flashforge PETG-CF" + ], + "name": "Flashforge PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Flashforge" + }, + "OFuJ49uH": { + "filaments": [ + "Qidi/QIDI PETG Basic" + ], + "name": "QIDI PETG Basic", + "filament_type": "PETG", + "filament_vendor": "QIDI" + }, + "OFuO0cAP": { + "filaments": [ + "OrcaArena/Arena PETG-CF" + ], + "name": "Arena PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Orca Arena" + }, + "OFuUuIhR": { + "filaments": [ + "Elegoo/Elegoo PETG-CF", + "OrcaFilamentLibrary/Elegoo PETG-CF" + ], + "name": "Elegoo PETG-CF", + "filament_type": "PETG", + "filament_vendor": "Elegoo" + }, + "OFuV79ru": { + "filaments": [ + "Flashforge/Flashforge PA66-CF" + ], + "name": "Flashforge PA66-CF", + "filament_type": "PA-CF", + "filament_vendor": "Flashforge" + }, + "OFuWCQXN": { + "filaments": [ + "BBL/COEX ABS PRIME", + "OrcaFilamentLibrary/COEX ABS PRIME" + ], + "name": "COEX ABS PRIME", + "filament_type": "ABS", + "filament_vendor": "COEX 3D" + }, + "OFuehn62": { + "filaments": [ + "OrcaArena/Arena PLA Marble" + ], + "name": "Arena PLA Marble", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFufTAK9": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA-mate Negro" + ], + "name": "FilAr PLA-mate Negro", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFughwKn": { + "filaments": [ + "Qidi/QIDI PLA Matte Basic" + ], + "name": "QIDI PLA Matte Basic", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFujZSdh": { + "filaments": [ + "Creality/Hyper PETG" + ], + "name": "Hyper PETG", + "filament_type": "PETG", + "filament_vendor": "Creality" + }, + "OFulOdT2": { + "filaments": [ + "Flashforge/Generic TPU 85A" + ], + "name": "Generic TPU 85A", + "filament_type": "TPU", + "filament_vendor": "Generic" + }, + "OFurdQxc": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Magenta" + ], + "name": "FilAr PETG Magenta", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFusbWjj": { + "filaments": [ + "Creality/Hyper PETG-CF" + ], + "name": "Hyper PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Creality" + }, + "OFuvOt0r": { + "filaments": [ + "BBL/BETA PLA Basic" + ], + "name": "BETA PLA Basic", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFuxH0Uz": { + "filaments": [ + "Volumic/Volumic FLEX93 Ultra" + ], + "name": "Volumic FLEX93 Ultra", + "filament_type": "TPU", + "filament_vendor": "Volumic" + }, + "OFvD0Qqt": { + "filaments": [ + "Ratrig/Generic PETG BigNozzle" + ], + "name": "Generic PETG BigNozzle", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OFvDbkFq": { + "filaments": [ + "Prusa/Prusament PC Blend" + ], + "name": "Prusament PC Blend", + "filament_type": "PC", + "filament_vendor": "Prusa Polymers" + }, + "OFvKUnLh": { + "filaments": [ + "BBL/Bambu TPU 95A HF", + "OrcaFilamentLibrary/Bambu TPU 95A HF" + ], + "name": "Bambu TPU 95A HF", + "filament_type": "TPU", + "filament_vendor": "Bambu Lab" + }, + "OFvLppPU": { + "filaments": [ + "Creality/CR-Nylon" + ], + "name": "CR-Nylon", + "filament_type": "PA", + "filament_vendor": "Creality" + }, + "OFvPPMxL": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PLA Verde FilAr" + ], + "name": "FilAr PLA Verde FilAr", + "filament_type": "PLA", + "filament_vendor": "FilAr" + }, + "OFvTVZc3": { + "filaments": [ + "BBL/COEX PETG", + "OrcaFilamentLibrary/COEX PETG" + ], + "name": "COEX PETG", + "filament_type": "PETG", + "filament_vendor": "COEX 3D" + }, + "OFvVy7yo": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints TPU D60 UV Resistant" + ], + "name": "Eolas Prints TPU D60 UV Resistant", + "filament_type": "TPU", + "filament_vendor": "Eolas Prints" + }, + "OFvaLVML": { + "filaments": [ + "Flashforge/Flashforge HIPS" + ], + "name": "Flashforge HIPS", + "filament_type": "HIPS", + "filament_vendor": "Flashforge" + }, + "OFvcIGee": { + "filaments": [ + "BBL/addnorth TPU Pro Matte 85A" + ], + "name": "addnorth TPU Pro Matte 85A", + "filament_type": "TPU", + "filament_vendor": "addnorth" + }, + "OFvdZ2bx": { + "filaments": [ + "Qidi/QIDI WOOD Rapido" + ], + "name": "QIDI WOOD Rapido", + "filament_type": "PLA", + "filament_vendor": "QIDI" + }, + "OFvgE0Zh": { + "filaments": [ + "Elegoo/Elegoo PLA", + "OrcaFilamentLibrary/Elegoo PLA" + ], + "name": "Elegoo PLA", + "filament_type": "PLA", + "filament_vendor": "Elegoo" + }, + "OFvmwTZE": { + "filaments": [ + "Snapmaker/Snapmaker TPU 95A" + ], + "name": "Snapmaker TPU 95A", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFvrXuV7": { + "filaments": [ + "BBL/PolyLite ASA", + "OrcaFilamentLibrary/PolyLite ASA" + ], + "name": "PolyLite ASA", + "filament_type": "ASA", + "filament_vendor": "Polymaker" + }, + "OFvxIS9g": { + "filaments": [ + "BBL/Fiberon PA12-CF10", + "Snapmaker/Fiberon PA12-CF10" + ], + "name": "Fiberon PA12-CF10", + "filament_type": "PA-CF", + "filament_vendor": "Polymaker" + }, + "OFvxghTE": { + "filaments": [ + "Chuanying/Generic HS PLA", + "Flashforge/Generic HS PLA", + "TwoTrees/Generic HS PLA" + ], + "name": "Generic HS PLA", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFvyB0Bz": { + "filaments": [ + "BBL/PolyLite PLA Galaxy", + "Snapmaker/PolyLite PLA Galaxy" + ], + "name": "PolyLite PLA Galaxy", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFvzvwCu": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PLA High Speed" + ], + "name": "Eolas Prints PLA High Speed", + "filament_type": "PLA", + "filament_vendor": "Eolas Prints" + }, + "OFw4WD4T": { + "filaments": [ + "BBL/Fiberon PETG-rCF08" + ], + "name": "Fiberon PETG-rCF08", + "filament_type": "PETG-CF", + "filament_vendor": "Polymaker" + }, + "OFwJ0qu2": { + "filaments": [], + "name": "DREMC PET-CF", + "filament_type": "PET-CF", + "filament_vendor": "DREMC" + }, + "OFwLBAGf": { + "filaments": [ + "Qidi/HATCHBOX ABS" + ], + "name": "HATCHBOX ABS", + "filament_type": "ABS", + "filament_vendor": "HATCHBOX" + }, + "OFwPrlCM": { + "filaments": [ + "BBL/Bambu PETG Translucent", + "OrcaFilamentLibrary/Bambu PETG Translucent" + ], + "name": "Bambu PETG Translucent", + "filament_type": "PETG", + "filament_vendor": "Bambu Lab" + }, + "OFwRJ4g0": { + "filaments": [ + "OrcaFilamentLibrary/NIT PLA" + ], + "name": "NIT PLA", + "filament_type": "PLA", + "filament_vendor": "NIT" + }, + "OFwVVKEV": { + "filaments": [ + "FlyingBear/Other TPU", + "InfiMech/Other TPU" + ], + "name": "Other TPU", + "filament_type": "TPU", + "filament_vendor": "Other" + }, + "OFwaYjL6": { + "filaments": [ + "BBL/Fiberon PA6-GF", + "OrcaFilamentLibrary/Fiberon PA6-GF" + ], + "name": "Fiberon PA6-GF", + "filament_type": "PA-GF", + "filament_vendor": "Polymaker" + }, + "OFwbsgWj": { + "filaments": [ + "re3D/re3D PC" + ], + "name": "re3D PC", + "filament_type": "PC", + "filament_vendor": "re3D" + }, + "OFwc74ck": { + "filaments": [ + "BBL/BETA PLA Matte" + ], + "name": "BETA PLA Matte", + "filament_type": "PLA", + "filament_vendor": "BETA" + }, + "OFwhLMs4": { + "filaments": [ + "Snapmaker/Snapmaker PLA SnapSpeed" + ], + "name": "Snapmaker PLA SnapSpeed", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFwjMiKL": { + "filaments": [ + "Flashforge/Flashforge PETG Transparent" + ], + "name": "Flashforge PETG Transparent", + "filament_type": "PETG", + "filament_vendor": "Flashforge" + }, + "OFwlZ7gH": { + "filaments": [ + "Flashforge/Flashforge TPU-90A" + ], + "name": "Flashforge TPU-90A", + "filament_type": "TPU-90A", + "filament_vendor": "Flashforge" + }, + "OFwu7IAG": { + "filaments": [ + "BBL/COEX PCTG PRIME", + "OrcaFilamentLibrary/COEX PCTG PRIME" + ], + "name": "COEX PCTG PRIME", + "filament_type": "PCTG", + "filament_vendor": "COEX 3D" + }, + "OFwwAQnA": { + "filaments": [ + "Prusa/Generic PC HF" + ], + "name": "Generic PC HF", + "filament_type": "PC", + "filament_vendor": "Generic" + }, + "OFwyt1xt": { + "filaments": [ + "Eryone/Eryone ASA-CF" + ], + "name": "Eryone ASA-CF", + "filament_type": "ASA-CF", + "filament_vendor": "Eryone" + }, + "OFx0WlzS": { + "filaments": [ + "Flashforge/Flashforge TPU-95A" + ], + "name": "Flashforge TPU-95A", + "filament_type": "TPU-95A", + "filament_vendor": "Flashforge" + }, + "OFx8Lmsd": { + "filaments": [ + "OrcaFilamentLibrary/Eolas Prints PETG UV Resistant" + ], + "name": "Eolas Prints PETG UV Resistant", + "filament_type": "PETG", + "filament_vendor": "Eolas Prints" + }, + "OFxA1p01": { + "filaments": [ + "BBL/Overture PLA Pro", + "OrcaFilamentLibrary/Overture PLA Pro" + ], + "name": "Overture PLA Pro", + "filament_type": "PLA", + "filament_vendor": "Overture" + }, + "OFxDHUX8": { + "filaments": [ + "SeeMeCNC/SeeMeCNC PETG" + ], + "name": "SeeMeCNC PETG", + "filament_type": "PETG", + "filament_vendor": "SeeMeCNC" + }, + "OFxJRuVF": { + "filaments": [ + "Anycubic/Anycubic PC-GF" + ], + "name": "Anycubic PC-GF", + "filament_type": "PC-GF", + "filament_vendor": "Anycubic" + }, + "OFxOHhZw": { + "filaments": [ + "Elegoo/Elegoo ABS", + "OrcaFilamentLibrary/Elegoo ABS" + ], + "name": "Elegoo ABS", + "filament_type": "ABS", + "filament_vendor": "Elegoo" + }, + "OFxUwUeW": { + "filaments": [ + "BBL/SUNLU PLA Marble", + "Flashforge/SUNLU PLA Marble", + "OrcaFilamentLibrary/SUNLU PLA Marble" + ], + "name": "SUNLU PLA Marble", + "filament_type": "PLA", + "filament_vendor": "SUNLU" + }, + "OFxYB4Sw": { + "filaments": [ + "Snapmaker/Snapmaker J1 PETG-CF" + ], + "name": "Snapmaker J1 PETG-CF", + "filament_type": "PETG-CF", + "filament_vendor": "Snapmaker" + }, + "OFxe4rXr": { + "filaments": [ + "BBL/PolyTerra PLA Marble", + "Snapmaker/PolyTerra PLA Marble" + ], + "name": "PolyTerra PLA Marble", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFxqf79Q": { + "filaments": [ + "BBL/BETA PETG HF" + ], + "name": "BETA PETG HF", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFy02QHU": { + "filaments": [ + "BBL/PolyLite PLA Translucent", + "Snapmaker/PolyLite PLA Translucent" + ], + "name": "PolyLite PLA Translucent", + "filament_type": "PLA", + "filament_vendor": "Polymaker" + }, + "OFy14TRA": { + "filaments": [ + "Snapmaker/Snapmaker J1 ABS" + ], + "name": "Snapmaker J1 ABS", + "filament_type": "ABS", + "filament_vendor": "Snapmaker" + }, + "OFy3sW6j": { + "filaments": [ + "WonderMaker/WonderMaker ASA" + ], + "name": "WonderMaker ASA", + "filament_type": "ASA", + "filament_vendor": "WonderMaker" + }, + "OFy48TOp": { + "filaments": [ + "Flashforge/Generic TPU-95A" + ], + "name": "Generic TPU-95A", + "filament_type": "TPU-95A", + "filament_vendor": "Generic" + }, + "OFy8tYJE": { + "filaments": [ + "Cubicon/Cubicon ABS-A100" + ], + "name": "Cubicon ABS-A100", + "filament_type": "ABS", + "filament_vendor": "Cubicon" + }, + "OFyFyLIp": { + "filaments": [ + "SeeMeCNC/SeeMeCNC TPU" + ], + "name": "SeeMeCNC TPU", + "filament_type": "TPU", + "filament_vendor": "SeeMeCNC" + }, + "OFyHgT60": { + "filaments": [ + "OrcaArena/Arena PLA Sparkle" + ], + "name": "Arena PLA Sparkle", + "filament_type": "PLA", + "filament_vendor": "Orca Arena" + }, + "OFyJjkek": { + "filaments": [ + "BBL/addnorth TPU Pro Matte 95A" + ], + "name": "addnorth TPU Pro Matte 95A", + "filament_type": "TPU", + "filament_vendor": "addnorth" + }, + "OFyLWVF3": { + "filaments": [ + "Creality/Generic PETG-GF" + ], + "name": "Generic PETG-GF", + "filament_type": "PETG-GF", + "filament_vendor": "Generic" + }, + "OFyPG8v2": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA Eco" + ], + "name": "Snapmaker Dual PLA Eco", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFyPTnSk": { + "filaments": [ + "BBL/BETA PETG Heat Color Change" + ], + "name": "BETA PETG Heat Color Change", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFyQwdaM": { + "filaments": [ + "Volumic/Volumic ABS Ultra (Performance)" + ], + "name": "Volumic ABS Ultra (Performance)", + "filament_type": "ABS", + "filament_vendor": "Volumic" + }, + "OFyRCIMh": { + "filaments": [ + "FlyingBear/Other PC", + "InfiMech/Other PC" + ], + "name": "Other PC", + "filament_type": "PC", + "filament_vendor": "Other" + }, + "OFyUJI3q": { + "filaments": [ + "Volumic/Volumic ABS Ultra" + ], + "name": "Volumic ABS Ultra", + "filament_type": "ABS", + "filament_vendor": "Volumic" + }, + "OFybzvQN": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Gris Ceniza" + ], + "name": "FilAr PETG Gris Ceniza", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFyhjiNs": { + "filaments": [ + "Snapmaker/Snapmaker PVA" + ], + "name": "Snapmaker PVA", + "filament_type": "PVA", + "filament_vendor": "Snapmaker" + }, + "OFyj3m13": { + "filaments": [ + "Snapmaker/Snapmaker Dual PLA Silk" + ], + "name": "Snapmaker Dual PLA Silk", + "filament_type": "PLA", + "filament_vendor": "Snapmaker" + }, + "OFymnal9": { + "filaments": [ + "Sovol/Sovol Zero PETG HS Nozzle" + ], + "name": "Sovol Zero PETG HS Nozzle", + "filament_type": "PETG", + "filament_vendor": "Generic" + }, + "OFyoBZdm": { + "filaments": [ + "LH/LHS PLA" + ], + "name": "LHS PLA", + "filament_type": "PLA", + "filament_vendor": "LH Stinger" + }, + "OFyreocX": { + "filaments": [ + "Tiertime/Tiertime PVA" + ], + "name": "Tiertime PVA", + "filament_type": "PVA", + "filament_vendor": "Tiertime" + }, + "OFyrnlUn": { + "filaments": [ + "Snapmaker/Snapmaker J1 TPU" + ], + "name": "Snapmaker J1 TPU", + "filament_type": "TPU", + "filament_vendor": "Snapmaker" + }, + "OFysxCep": { + "filaments": [ + "OrcaFilamentLibrary/FilAr PETG Coral" + ], + "name": "FilAr PETG Coral", + "filament_type": "PETG", + "filament_vendor": "FilAr" + }, + "OFyxayW4": { + "filaments": [ + "BBL/AliZ PLA", + "OrcaFilamentLibrary/AliZ PLA" + ], + "name": "AliZ PLA", + "filament_type": "PLA", + "filament_vendor": "Aliz" + }, + "OFz1a1fy": { + "filaments": [ + "BBL/BETA PETG Metallic" + ], + "name": "BETA PETG Metallic", + "filament_type": "PETG", + "filament_vendor": "BETA" + }, + "OFz5oHgf": { + "filaments": [ + "MagicMaker/Generic PEEK" + ], + "name": "Generic PEEK", + "filament_type": "PEEK", + "filament_vendor": "Generic" + }, + "OFzAWsca": { + "filaments": [ + "Qidi/Qidi TPU 95A-HF" + ], + "name": "Qidi TPU 95A-HF", + "filament_type": "TPU", + "filament_vendor": "QIDI" + }, + "OFzB4uOs": { + "filaments": [ + "Sovol/Sovol Zero PLA Basic HS Nozzle" + ], + "name": "Sovol Zero PLA Basic HS Nozzle", + "filament_type": "PLA", + "filament_vendor": "Generic" + }, + "OFzRtFM9": { + "filaments": [ + "Prusa/Generic ASA HF" + ], + "name": "Generic ASA HF", + "filament_type": "ASA", + "filament_vendor": "Generic" + }, + "OFzS7zt4": { + "filaments": [ + "Anycubic/Anycubic PA" + ], + "name": "Anycubic PA", + "filament_type": "PA", + "filament_vendor": "Anycubic" + }, + "OFzY7N3Z": { + "filaments": [ + "Artillery/Artillery PLA" + ], + "name": "Artillery PLA", + "filament_type": "PLA", + "filament_vendor": "Artillery" + }, + "OFzaq7Yg": { + "filaments": [ + "BBL/BETA TPU 98A" + ], + "name": "BETA TPU 98A", + "filament_type": "TPU", + "filament_vendor": "BETA" + }, + "OFzk5oAo": { + "filaments": [ + "BBL/addnorth ABS rABS" + ], + "name": "addnorth ABS rABS", + "filament_type": "ABS", + "filament_vendor": "addnorth" + }, + "OFzrUUxc": { + "filaments": [], + "name": "DREMC ABS", + "filament_type": "ABS", + "filament_vendor": "DREMC" + }, + "OFztQ7rO": { + "filaments": [ + "LH/LHS ABS" + ], + "name": "LHS ABS", + "filament_type": "ASA", + "filament_vendor": "LH Stinger" + }, + "OFzwA5Z9": { + "filaments": [ + "Flashforge/FusRock PET-GF" + ], + "name": "FusRock PET-GF", + "filament_type": "PET-GF", + "filament_vendor": "FusRock" + }, + "OFzyIxba": { + "filaments": [ + "BBL/Bambu PVA", + "OrcaFilamentLibrary/Bambu PVA" + ], + "name": "Bambu PVA", + "filament_type": "PVA", + "filament_vendor": "Bambu Lab" + } } } diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index b9291e9433..37c7d16772 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -111,11 +111,10 @@ class SyntheticTree: # -- pipeline wrappers --------------------------------------------------- - def update_snapshot(self, allow_shared_catalog=False): + def update_snapshot(self): buf = io.StringIO() with contextlib.redirect_stdout(buf): - rc = afi.update_snapshot(self.profiles, self.snapshot, - allow_shared_catalog=allow_shared_catalog) + rc = afi.update_snapshot(self.profiles, self.snapshot) return rc, buf.getvalue() def check(self, map_path=None): @@ -144,19 +143,18 @@ class SyntheticTree: return dropped, errors, buf.getvalue() def make_clean_tree(apla_id="AX01", generic_id="OGFL99"): - """Baseline tree: OFL base+generic, a vendor family, a clean tuned generic. + """Baseline tree: OFL base+generic, a vendor filament, a clean tuned generic. - apla_id/generic_id default to arbitrary non-OF placeholders (grandfathered - into the snapshot below) since most tests only need "already assigned, - don't touch". TestAssign passes real OF-format ids instead: assign_missing_ids - now treats a non-OF declaration as missing and remints it, so a non-OF - baseline would no longer be a no-op there. + apla_id/generic_id default to arbitrary non-OF placeholders (sanctioned by + the snapshot below) since most tests only need "already assigned, don't + touch" and never run the checks. TestAssign and the check tests pass real + OF-format ids instead (OfCleanTreeCase). """ t = SyntheticTree() t.add_vendor(OFL, [ - preset("fdm_pla", filament_id=generic_id, instantiation=False, + preset("Generic PLA @base", filament_id=generic_id, instantiation=False, filament_vendor="Generic", filament_type="PLA"), - preset("Generic PLA @System", inherits="fdm_pla", + preset("Generic PLA @System", inherits="Generic PLA @base", compatible_printers=[]), ]) t.add_vendor("VendorA", [ @@ -180,7 +178,7 @@ class SyntheticTreeCase(unittest.TestCase): class OfCleanTreeCase(unittest.TestCase): - """Like SyntheticTreeCase, but the baseline family/generic already carry + """Like SyntheticTreeCase, but the baseline filament/generic already carry real OF-format ids (check 1 now rejects "AX01"/"OGFL99" unconditionally, with no snapshot exemption), so an otherwise-untouched tree still passes check_filament_ids. Tests that specifically need a non-OF baseline to @@ -190,7 +188,7 @@ class OfCleanTreeCase(unittest.TestCase): def setUp(self): self.t = make_clean_tree( apla_id=afi.generate_filament_id("AVendor", "PLA", "APLA"), - generic_id=afi.generate_filament_id("Generic", "PLA", "fdm_pla")) + generic_id=afi.generate_filament_id("Generic", "PLA", "Generic PLA")) self.addCleanup(self.t.cleanup) @@ -206,7 +204,7 @@ class TestMint(unittest.TestCase): def test_known_vector(self): # Hardcoded, independently computed vectors: freeze prefix, input string - # layout ("filament_product///") and base62 tail. + # layout ("filament_product///") and base62 tail. self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA"), "OF5CgdDq") self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA", @@ -247,7 +245,7 @@ class TestMint(unittest.TestCase): class TestBaseName(unittest.TestCase): - def test_family_derivation(self): + def test_filament_name_derivation(self): cases = [ ("X @base", "X"), ("Afinia PLA@HS", "Afinia PLA"), @@ -256,8 +254,8 @@ class TestBaseName(unittest.TestCase): ("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) + for name, filament_name in cases: + self.assertEqual(afi.base_name(name), filament_name, msg=name) # --------------------------------------------------------------------------- @@ -465,7 +463,17 @@ class TestChecks(OfCleanTreeCase): errors, out = self.t.check() self.assertGreater(errors, 0) self.assertIn('triple "AVendor/PETG/APLA" is not sanctioned', out) - self.assertIn('triple stability: snapshot triple "AVendor/PLA/APLA"', out) + self.assertIn('which records "AVendor/PLA/APLA"', out) + # Sanctioning the new triple is not enough: the old id is no longer its + # mint (check 3, nothing grandfathered) — the identity fix is a re-mint, + # reported once on the root, not again under the variant inheriting it. + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("does not match the mint of its triple", out) + _changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() @@ -492,8 +500,8 @@ class TestChecks(OfCleanTreeCase): _errors, out = self.t.check() # check 2 still wants a snapshot update self.assertNotIn("does not match the mint", out) - def test_check3_grandfathered_id_triple_pair(self): - # A non-conforming (id, triple) pair sanctioned by the snapshot passes. + def test_check3_no_grandfathering_of_a_wrong_declaration(self): + # Sanctioning the tree does not excuse a declaration from its mint. self.t.write_preset("VendorA", preset("CNEW @base", filament_id="OFZZZZZZ", instantiation=False, filament_vendor="CV", filament_type="PLA")) @@ -502,66 +510,72 @@ class TestChecks(OfCleanTreeCase): rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() - self.assertEqual(errors, 0, out) + self.assertEqual(errors, 1, out) + self.assertIn("does not match the mint of its triple", out) - def test_check4_renamed_tuned_generic(self): + def test_check3_inherited_id_must_be_the_mint_of_own_triple(self): + # A preset of another filament inheriting APLA's root takes APLA's id, + # which is not the mint of ITS triple (AVendor/PLA/Tuned PLA). + self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="APLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('"Tuned PLA @P1" (VendorA/filament/Tuned PLA @P1.json) inherits ' + 'filament_id "%s"' % afi.generate_filament_id("AVendor", "PLA", "APLA"), + out) + self.assertIn('mints "%s"' % afi.generate_filament_id("AVendor", "PLA", "Tuned PLA"), + out) + # ... and sanctioning the tree does not excuse it either. + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + + def test_check3_renamed_tuned_generic_is_an_identity_error(self): + # Riding the OFL generic under another base name: same rule, same error. 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) + self.assertIn("inherits filament_id", out) - def test_check4_empty_compatible_printers(self): - self.t.write_preset("VendorA", preset("Generic PLA @P2", - inherits="Generic PLA @System", - compatible_printers=[])) + def test_check3_own_key_on_an_instantiated_preset_is_fine(self): + # Where the id comes from is irrelevant: a variant may carry the key. + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("APLA @P1", filament_id=apla_id, + inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + register=False) errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn("cannot shadow the OFL preset", out) + self.assertEqual(errors, 0, out) - def test_check4_own_id_key_on_ofl_rider(self): - # A vendor root that declares its own id while inheriting an OFL family - # forks the family off the catalog id. - self.t.write_preset("VendorA", preset("GPLA @base", filament_id="AX77", - instantiation=False, - inherits="Generic PLA @System")) - self.t.write_preset("VendorA", preset("GPLA @P1", inherits="GPLA @base", - compatible_printers=["P1"])) - errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn('declares its own filament_id "AX77"', out) - - def test_check4_applies_to_non_generic_ofl_families(self): - fid = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") - self.t.write_preset(OFL, preset("poly_pla_base", filament_id=fid, - instantiation=False, - filament_vendor="Polymaker", - filament_type="PLA")) - self.t.write_preset(OFL, preset("PolyLite PLA @System", - inherits="poly_pla_base", - compatible_printers=[])) - rc, _out = self.t.update_snapshot() - self.assertEqual(rc, 0) - self.t.write_preset("VendorA", preset("PolyX PLA @P1", - inherits="PolyLite 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("PolyX PLA @P1", out) - - def test_check4_exception_is_grandfathered(self): - self.t.write_preset("VendorA", preset("Tuned PLA @P1", + def test_check3_inheriting_a_real_filament_of_another_product_is_fine(self): + # A branded product may inherit the OFL generic (an instantiated + # preset) for its settings; it declares its own triple's id. + fid = afi.generate_filament_id("BV", "PLA", "Branded PLA") + self.t.write_preset("VendorA", preset("Branded PLA @P1", filament_id=fid, inherits="Generic PLA @System", + filament_vendor="BV", compatible_printers=["P1"])) rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 0, out) + # With a wrong key it is a plain mint mismatch: the parent plays no + # part in the verdict. + drifted = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("Branded PLA @P1", filament_id=drifted, + inherits="Generic PLA @System", + filament_vendor="BV", + compatible_printers=["P1"]), + register=False) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("does not match the mint of its triple", out) - def test_check5_reserved_namespace_claims(self): + def test_check4_reserved_namespace_claims(self): for fid, marker in [("GFX99", "Bambu AMS/RFID catalog"), ("QD_X_PLA", "composed by the device"), ("P1a2b3c4", "user-custom"), @@ -579,31 +593,7 @@ class TestChecks(OfCleanTreeCase): self.assertIn("reserved id space", out) self.assertIn(marker, out) - def test_check6a_instantiated_preset_with_own_key(self): - # Same value the child would already resolve through inherits: this - # isolates check 6a (own key present) from check 6b (value drift). - apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") - self.t.write_preset("VendorA", preset("APLA @P1", filament_id=apla_id, - 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_check6b_declared_vs_inherited_drift(self): - apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") - drifted = afi.generate_filament_id("AVendor", "PLA", "APLA", salt=1) - self.t.write_preset("VendorA", preset("APLA @P1", filament_id=drifted, - inherits="APLA @base", - compatible_printers=["P1 0.4 nozzle"]), - register=False) - errors, out = self.t.check() - self.assertGreater(errors, 0) - self.assertIn(f'declares filament_id "{drifted}" but its inherits chain resolves ' - f'"{apla_id}"', out) - - def test_check6c_unresolvable_instantiated_filament(self): + def test_check3c_unresolvable_instantiated_filament(self): self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) errors, out = self.t.check() self.assertGreater(errors, 0) @@ -617,8 +607,8 @@ class TestChecks(OfCleanTreeCase): self.assertIn("snapshot not found", out) -class TestCheck7(OfCleanTreeCase): - def test_7a_empty_vendor_is_hard_error(self): +class TestCheck5(OfCleanTreeCase): + def test_5a_empty_vendor_is_hard_error(self): fid = afi.generate_filament_id("", "PLA", "NVPLA") self.t.write_preset("VendorA", preset("NVPLA @base", filament_id=fid, instantiation=False, @@ -629,14 +619,14 @@ class TestCheck7(OfCleanTreeCase): self.assertGreater(errors, 0) self.assertIn("resolves empty filament_vendor", out) self.assertIn('filament_vendor "Generic"', out) - # No grandfathering: sanctioning the tree does not silence check 8a. + # No grandfathering: sanctioning the tree does not silence check 5a. rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() self.assertEqual(errors, 1, out) self.assertIn("resolves empty filament_vendor", out) - def test_7b_divergent_family_triples(self): + def test_5b_divergent_filament_triples(self): id1 = afi.generate_filament_id("MV", "PLA", "MPLA") id2 = afi.generate_filament_id("MV", "PETG", "MPLA") self.t.write_preset("VendorA", preset("MPLA @base1", filament_id=id1, @@ -652,14 +642,14 @@ class TestCheck7(OfCleanTreeCase): self.assertIn("divergent triples", out) self.assertIn("MV/PLA/MPLA", out) self.assertIn("MV/PETG/MPLA", out) - # ... until --update-snapshot grandfathers the family in triple_exceptions. + # No grandfathering: sanctioning the tree does not silence check 5b. rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) - self.assertIn("VendorA/MPLA", load_json_file(self.t.snapshot)["triple_exceptions"]) errors, out = self.t.check() - self.assertEqual(errors, 0, out) + self.assertEqual(errors, 1, out) + self.assertIn("divergent triples", out) - def test_7_cross_bundle_divergence_is_warning_only(self): + def test_5_cross_bundle_divergence_is_warning_only(self): fid = afi.generate_filament_id("BV", "PETG", "APLA") self.t.add_vendor("VendorB", [ preset("APLA @base", filament_id=fid, instantiation=False, @@ -676,7 +666,7 @@ class TestCheck7(OfCleanTreeCase): self.assertIn('"APLA"', out) -class TestCheck8(OfCleanTreeCase): +class TestCheck6(OfCleanTreeCase): def _write_map(self, rows): path = os.path.join(self.t.dir, "bambu_filament_ids.json") ubfi.write_map(path, rows, "testcommit", "2026-09-04") @@ -784,15 +774,36 @@ class TestUpdateSnapshot(SyntheticTreeCase): self.assertTrue(first.endswith(b"\n")) self.assertNotIn(b"\r", first) snap = json.loads(first.decode("utf-8")) + self.assertEqual(list(snap), ["ids"]) # state only, no exception lists 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"]) - self.assertEqual(snap["triples"]["AX01"], [["AVendor", "PLA", "APLA"]]) - self.assertEqual(snap["triples"]["OGFL99"], [["Generic", "PLA", "fdm_pla"]]) - self.assertEqual(snap["triple_exceptions"], []) + self.assertEqual(snap["ids"]["AX01"], { + "filaments": ["VendorA/APLA"], "name": "APLA", + "filament_type": "PLA", "filament_vendor": "AVendor"}) + self.assertEqual(snap["ids"]["OGFL99"], { + "filaments": ["OrcaFilamentLibrary/Generic PLA", "VendorA/Generic PLA"], + "name": "Generic PLA", "filament_type": "PLA", "filament_vendor": "Generic"}) + # Key order is part of the on-disk format. + self.assertEqual(list(snap["ids"]["AX01"]), + ["filaments", "name", "filament_type", "filament_vendor"]) - def test_refuses_new_reserved_namespace_claims(self): + def test_refuses_an_id_declared_under_two_triples(self): + # VendorB re-declares APLA's id for a different product: one id, two + # triples. No single entry can describe it, and check 3 rejects it anyway. + self.t.add_vendor("VendorB", [ + preset("BPLA @base", filament_id="AX01", instantiation=False, + filament_vendor="BVendor", filament_type="PLA"), + preset("BPLA @P1", inherits="BPLA @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 filament_id "AX01": declared under 2 triples ' + '(AVendor/PLA/APLA; BVendor/PLA/BPLA)', out) + with open(self.t.snapshot, "rb") as f: + self.assertEqual(f.read(), before) # nothing written on refusal + + def test_refuses_reserved_namespace_ids(self): self.t.write_preset("VendorA", preset("CNEW @base", filament_id="GFX99", instantiation=False, filament_vendor="CV", @@ -806,10 +817,6 @@ class TestUpdateSnapshot(SyntheticTreeCase): 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"]) # --------------------------------------------------------------------------- @@ -822,7 +829,7 @@ class TestAssign(OfCleanTreeCase): 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): + def test_mints_into_filament_root_and_rootless_member(self): self.t.write_preset("VendorA", preset("FNEW @base", instantiation=False, filament_vendor="FV", filament_type="PLA")) @@ -850,7 +857,7 @@ class TestAssign(OfCleanTreeCase): self.assertEqual((changed, errors), (0, 0)) self.assertIn("nothing to do", out) - def test_refuses_family_with_incomplete_triple(self): + def test_refuses_filament_with_incomplete_triple(self): self.t.write_preset("VendorA", preset("ENEW @base", instantiation=False)) self.t.write_preset("VendorA", preset("ENEW @P1", inherits="ENEW @base", compatible_printers=["P1"])) @@ -860,7 +867,7 @@ class TestAssign(OfCleanTreeCase): self.assertIn("resolves empty filament_vendor and filament_type", out) self.assertIn("mint key needs both", out) - def test_refuses_family_with_divergent_root_fields(self): + def test_refuses_filament_with_divergent_root_fields(self): self.t.write_preset("VendorA", preset("HNEW @base1", instantiation=False, filament_vendor="HV", filament_type="PLA")) @@ -876,7 +883,10 @@ class TestAssign(OfCleanTreeCase): self.assertGreater(errors, 0) self.assertIn("divergent (filament_vendor, filament_type)", out) - def test_shared_root_between_families_is_refused(self): + def test_parent_of_another_filament_never_receives_the_key(self): + # Members whose id-less parent belongs to another filament (here one + # parent shared by two filaments) carry the key themselves: the + # parent's own triple would mint a different id (check 3). self.t.write_preset("VendorA", preset("shared_base", instantiation=False, filament_vendor="SV", filament_type="PLA")) @@ -885,14 +895,24 @@ class TestAssign(OfCleanTreeCase): 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) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 2) + for filament_name in ("HNEW", "INEW"): + member = load_json_file(self.t.preset_path("VendorA", f"{filament_name} @P1")) + self.assertEqual(member["filament_id"], + afi.generate_filament_id("SV", "PLA", filament_name)) + parent = load_json_file(self.t.preset_path("VendorA", "shared_base")) + self.assertNotIn("filament_id", parent) + # ... and the tree they leave behind passes the identity check. + rc, _out = self.t.update_snapshot() + self.assertEqual(rc, 0) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) def test_non_of_declaration_is_treated_as_missing(self): # A declaration that isn't OF-format (e.g. a vendor bundle synced from # an upstream catalog, like BBL's GF ids) is reminted like a missing - # family, not left alone. + # filament, not left alone. self.t.write_preset("VendorA", preset("Synced PLA @base", filament_id="GFZZ00", instantiation=False, filament_vendor="ZV", filament_type="PLA")) @@ -913,7 +933,7 @@ class TestAssign(OfCleanTreeCase): changed, errors, _out = self.t.assign() self.assertEqual((changed, errors), (0, 0)) - def test_non_of_multi_root_family_converges_on_one_id(self): + def test_non_of_multi_root_filament_converges_on_one_id(self): # Two per-printer roots of one product (same triple), both carrying # the SAME non-OF id — the shape a synced vendor bundle ships (e.g. # BambuStudio's own per-printer @base files). They must converge on @@ -1068,7 +1088,7 @@ class TestRemint(SyntheticTreeCase): root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(root["filament_id"], want) # OFL was not part of the run - ofl_root = load_json_file(self.t.preset_path(OFL, "fdm_pla")) + ofl_root = load_json_file(self.t.preset_path(OFL, "Generic PLA @base")) self.assertEqual(ofl_root["filament_id"], "OGFL99") # idempotent: a second run over the same vendor rewrites nothing changed, errors, _out = self.t.remint(["VendorA"]) @@ -1170,7 +1190,7 @@ class TestDropRedundantIds(SyntheticTreeCase): self.assertNotIn("filament_id", gone) kept = load_json_file(self.t.preset_path("VendorA", "Tuned PLA @P3")) self.assertEqual(kept["filament_id"], "OGFL99") - # vendor-rooted families are untouched + # vendor-rooted filaments are untouched root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(root["filament_id"], "AX01") @@ -1196,7 +1216,7 @@ class TestMintCli(unittest.TestCase): def test_requires_exactly_three_parts(self): with self.assertRaises(SystemExit), \ contextlib.redirect_stderr(io.StringIO()): - afi.main(["--mint", "Vendor/Family"]) + afi.main(["--mint", "Vendor/Filament"]) # --------------------------------------------------------------------------- @@ -1222,7 +1242,7 @@ class TestRealTree(unittest.TestCase): class TestReviewFixes(OfCleanTreeCase): def test_check3_skips_of_id_inherited_from_other_vendor(self): - # An OFL family carries its own minted OF id and a vendor tunes it + # An OFL filament 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("Generic", "PLA", "Generic PLA Matte") @@ -1248,7 +1268,7 @@ class TestReviewFixes(OfCleanTreeCase): errors, out = self.t.check() self.assertEqual(errors, 0, out) - def test_check6c_prints_expected_mint(self): + def test_check3c_prints_expected_mint(self): self.t.write_preset("VendorA", preset("Orphan PLA @P1", compatible_printers=["P1 0.4 nozzle"], filament_vendor="OV", @@ -1263,24 +1283,24 @@ class TestReviewFixes(OfCleanTreeCase): # --------------------------------------------------------------------------- class TestBambuMap(unittest.TestCase): - def _bs_tree(self, families): - # families: list of (family, bambu_id, vendor, type); builds a minimal BBL bundle - # with an @base per family carrying the id and one instantiated child. + def _bs_tree(self, filaments): + # filaments: list of (name, bambu_id, vendor, type); builds a minimal BBL + # bundle with an @base per filament carrying the id and one instantiated child. t = SyntheticTree() self.addCleanup(t.cleanup) presets = [] - for family, bambu_id, vendor, ftype in families: - presets.append(preset(f"{family} @base", filament_id=bambu_id, + for filament_name, bambu_id, vendor, ftype in filaments: + presets.append(preset(f"{filament_name} @base", filament_id=bambu_id, instantiation=False, filament_vendor=vendor, filament_type=ftype)) - presets.append(preset(f"{family} @P1", inherits=f"{family} @base", + presets.append(preset(f"{filament_name} @P1", inherits=f"{filament_name} @base", compatible_printers=["P1 0.4 nozzle"])) t.add_vendor("BBL", presets) filaments, errors = afi.load_vendor_filaments(t.profiles, "BBL") self.assertEqual(errors, []) return filaments - def test_one_row_per_family(self): + def test_one_row_per_filament(self): rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")]), {}) self.assertEqual(rows, {afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS"): {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}}) @@ -1308,13 +1328,13 @@ class TestOrcaTriplesFromAnalysis(unittest.TestCase): t.add_vendor("VendorA", [ # Same triple declared under two different ids on purpose: mirrors # a real, sanctioned case (Cubicon's xCeler line keeps its own id - # per printer instead of inheriting the family's @base id). + # per printer instead of inheriting the filament's @base id). # Ambiguous, but must stay harmless unless something needs it. preset("Ambig PLA @base", filament_id="OF111111", instantiation=False, filament_vendor="V", filament_type="PLA"), preset("Ambig PLA @P1", filament_id="OF222222", inherits="Ambig PLA @base", compatible_printers=["P1"]), - # An unambiguous family elsewhere in the same tree. + # An unambiguous filament elsewhere in the same tree. preset("Needed PLA @base", filament_id="OF333333", instantiation=False, filament_vendor="V2", filament_type="PLA"), preset("Needed PLA @P1", inherits="Needed PLA @base", @@ -1375,9 +1395,9 @@ class TestDriftReport(unittest.TestCase): compatible_printers=["P1"]), ]) rows = { - # matches the BBL bundle's "Match PLA" family: no drift either way + # matches the BBL bundle's "Match PLA" filament: no drift either way "OFmatch01": {"bambu_id": "GFX01", "vendor": "V", "type": "PLA", "name": "Match PLA"}, - # no family of this identity in the BBL bundle above + # no filament of this identity in the BBL bundle above "OFghost01": {"bambu_id": "GFX02", "vendor": "V", "type": "PLA", "name": "Upstream Only PLA"}, } orca_analysis = afi.analyze_tree(t.profiles) @@ -1386,8 +1406,8 @@ class TestDriftReport(unittest.TestCase): report = "\n".join(lines) self.assertIn("Upstream Only PLA", report) - self.assertIn("Orca BBL families with no row: 1", report) - self.assertNotIn("Match PLA", report) # the matched family is not drift + self.assertIn("Orca BBL filaments with no row: 1", report) + self.assertNotIn("Match PLA", report) # the matched filament is not drift if __name__ == "__main__": diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index fc195a3f9c..7a4a67d2a3 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -12,11 +12,11 @@ src/slic3r/Utils/BBLPrinterAgent.cpp loads it at runtime and translates an id only where it crosses to or from a Bambu printer, so the correspondence never has to be hand-maintained. See docs/HLSD/filament_id.md. -One row per BambuStudio filament PRODUCT: one commercial line = one +One row per BambuStudio filament PRODUCT: one named spool product = one "@base"-declared filament_id, shared by every per-printer/per-nozzle instantiation of it (BambuStudio follows the same one-product-one-id shape Orca's own filament_id policy does). A row's key reuses whatever OF id Orca -already ships for that same (filament_vendor, filament_type, family) triple; +already ships for that same (filament_vendor, filament_type, filament) triple; a triple Orca does not ship anywhere yet gets a freshly generated one. Map format: @@ -38,9 +38,9 @@ Run from anywhere: python3 scripts/update_bambu_filament_ids.py --ref REF clone this BambuStudio ref instead of master --output PATH write here instead of resources/printers/bambu_filament_ids.json -After writing, an informational drift report is printed: BambuStudio families +After writing, an informational drift report is printed: BambuStudio filaments Orca ships nothing with the same identity for, and a count of Orca's own BBL -families that matched no BambuStudio row. Neither blocks the write; both are +filaments that matched no BambuStudio row. Neither blocks the write; both are for a human to read. """ @@ -78,32 +78,34 @@ BAMBUSTUDIO_REPO = "https://github.com/bambulab/BambuStudio" # --------------------------------------------------------------------------- def derive_rows(bs_filaments, orca_triples): - """orca_triples: {(vendor, type, family): orca_id} built from analyze_tree()["triples"].""" - by_family = {} # family -> (bambu_id, triple) + """orca_triples: {(vendor, type, name): orca_id} from analyze_tree()["triples"].""" + by_filament = {} # filament_name -> (bambu_id, triple) for rec in bs_filaments.values(): if not rec["instantiation"]: continue bambu_id, _src, _entry = resolve_filament_id(rec["name"], bs_filaments, {}) if not bambu_id: continue - family = base_name(rec["name"]) + filament_name = base_name(rec["name"]) triple = resolve_triple(rec["name"], bs_filaments, {}) - prev = by_family.setdefault(family, (bambu_id, triple)) + prev = by_filament.setdefault(filament_name, (bambu_id, triple)) if prev != (bambu_id, triple): - raise SystemExit(f"BambuStudio family {family!r} is not one product: {prev} vs {(bambu_id, triple)}") + raise SystemExit(f"BambuStudio filament {filament_name!r} is not one " + f"product: {prev} vs {(bambu_id, triple)}") rows, seen = {}, {} - for family, (bambu_id, triple) in sorted(by_family.items()): + for filament_name, (bambu_id, triple) in sorted(by_filament.items()): if bambu_id in seen: - raise SystemExit(f"Bambu id {bambu_id} is shared by {seen[bambu_id]!r} and {family!r}") - seen[bambu_id] = family + raise SystemExit(f"Bambu id {bambu_id} is shared by " + f"{seen[bambu_id]!r} and {filament_name!r}") + seen[bambu_id] = filament_name orca_id = orca_triples.get(triple) or generate_filament_id(*triple) # reuse a salted id if we ship one rows[orca_id] = {"bambu_id": bambu_id, "vendor": triple[0], "type": triple[1], "name": triple[2]} return rows def orca_triples_from_analysis(orca_analysis, needed_triples): - """{(vendor, type, family): orca_id}, inverted from analyze_tree()["triples"] - (id -> [[vendor, type, family], ...]) and restricted to `needed_triples` + """{(vendor, type, name): orca_id}, inverted from analyze_tree()["triples"] + (id -> [[vendor, type, name], ...]) and restricted to `needed_triples` (the triples BambuStudio's own bundle ships, i.e. the only ones derive_rows will ever look up). @@ -118,7 +120,7 @@ def orca_triples_from_analysis(orca_analysis, needed_triples): Restricting the scan to needed_triples matters for that check: elsewhere in the tree one triple legitimately resolves two different ids on purpose (e.g. Cubicon's xCeler line declares its own id per printer instead of - inheriting its family's, sanctioned in scripts/filament_id_snapshot.json) + inheriting its root's, sanctioned in scripts/filament_id_snapshot.json) and that pre-existing, Bambu-unrelated divergence must not block a map that never reads it. """ @@ -150,9 +152,9 @@ def drift_report(rows, orca_analysis): independently, so only the (vendor, type, name) identity is comparable). Returns print-ready lines: one per BambuStudio row triple with no - same-triple family in Orca's BBL bundle (upstream ships it, we ship + same-triple filament in Orca's BBL bundle (upstream ships it, we ship nothing with that identity there — sometimes a genuinely missing product, - sometimes a renamed one), then a count of Orca's own BBL families that + sometimes a renamed one), then a count of Orca's own BBL filaments that matched no BambuStudio row (Orca-only products, e.g. a name-drifted duplicate of one already counted in the first list). """ @@ -160,19 +162,20 @@ def drift_report(rows, orca_analysis): bbl_filaments = orca_analysis["vendors"].get("BBL", {}) ofl_filaments = orca_analysis["vendors"].get(OFL, {}) - orca_families = {} + orca_filaments = {} for rec in bbl_filaments.values(): if not rec["instantiation"]: continue triple = resolve_triple(rec["name"], bbl_filaments, ofl_filaments) - orca_families.setdefault(base_name(rec["name"]), triple) + orca_filaments.setdefault(base_name(rec["name"]), triple) lines = [] - for triple in sorted(row_triples - set(orca_families.values())): + for triple in sorted(row_triples - set(orca_filaments.values())): lines.append(f'upstream ships {triple[2]!r} ({triple[0]}/{triple[1]}), ' "we ship nothing with that identity") - orca_only = [family for family, triple in orca_families.items() if triple not in row_triples] - lines.append(f"Orca BBL families with no row: {len(orca_only)} Orca-only product(s)") + orca_only = [name for name, triple in orca_filaments.items() + if triple not in row_triples] + lines.append(f"Orca BBL filaments with no row: {len(orca_only)} Orca-only product(s)") return lines From 0b6bbd85bd269277e940f09b906481ae9b16ac0c Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 6 Sep 2026 09:08:57 -0500 Subject: [PATCH 116/208] build: clear 75 warnings - hidden base overloads (#15542) --- src/libslic3r/Int128.hpp | 1 - src/slic3r/GUI/AMSMaterialsSetting.cpp | 5 --- src/slic3r/GUI/AMSMaterialsSetting.hpp | 1 - src/slic3r/GUI/AMSSetting.cpp | 4 +- src/slic3r/GUI/AMSSetting.hpp | 2 +- .../GUI/DeviceTab/uiAMSBestPositionPopup.cpp | 2 +- .../GUI/DeviceTab/uiAMSBestPositionPopup.hpp | 2 +- .../GUI/DeviceTab/uiAmsHumidityPopup.cpp | 2 +- src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h | 4 +- .../GUI/DeviceTab/wgtDeviceNozzleRack.cpp | 4 +- .../GUI/DeviceTab/wgtDeviceNozzleRack.h | 2 +- .../GUI/DeviceTab/wgtDeviceNozzleSelect.cpp | 2 +- src/slic3r/GUI/FilamentMapPanel.cpp | 44 +++++-------------- src/slic3r/GUI/FilamentMapPanel.hpp | 11 ++--- src/slic3r/GUI/SelectMachine.cpp | 4 +- src/slic3r/GUI/SendToPrinter.cpp | 2 +- .../GUI/SlicingProgressNotification.cpp | 12 ++--- .../GUI/SlicingProgressNotification.hpp | 4 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 4 +- src/slic3r/GUI/Widgets/AnimaController.cpp | 2 +- src/slic3r/GUI/Widgets/AnimaController.hpp | 2 +- src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp | 2 +- src/slic3r/GUI/Widgets/MultiNozzleSync.cpp | 2 +- src/slic3r/GUI/Widgets/RadioBox.cpp | 5 --- src/slic3r/GUI/Widgets/RadioBox.hpp | 4 -- 25 files changed, 45 insertions(+), 84 deletions(-) diff --git a/src/libslic3r/Int128.hpp b/src/libslic3r/Int128.hpp index f8951f20f9..e7238ca745 100644 --- a/src/libslic3r/Int128.hpp +++ b/src/libslic3r/Int128.hpp @@ -125,7 +125,6 @@ public: /******************************************** Splitting the 128bit number into two 64bit words *********************************************/ Int128(int64_t lo = 0) : m_lo((uint64_t)lo), m_hi((lo < 0) ? -1 : 0) {} - Int128(const Int128 &val) : m_lo(val.m_lo), m_hi(val.m_hi) {} Int128(const int64_t& hi, const uint64_t& lo) : m_lo(lo), m_hi(hi) {} Int128& operator = (const int64_t &val) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 2e436e8462..e0b7f1ddeb 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -1938,11 +1938,6 @@ void ColorPickerPopup::paintEvent(wxPaintEvent& evt) void ColorPickerPopup::OnDismiss() {} -void ColorPickerPopup::Popup() -{ - PopupWindow::Popup(); -} - bool ColorPickerPopup::ProcessLeftDown(wxMouseEvent& event) { return PopupWindow::ProcessLeftDown(event); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 81167884a7..2cbd58e9a9 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -85,7 +85,6 @@ public: void set_ams_colours(std::vector ams); void set_def_colour(wxColour col); void paintEvent(wxPaintEvent& evt); - void Popup(); virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index d8760cfcf6..9ba9031f19 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -292,7 +292,7 @@ void AMSSetting::UpdateByObj(MachineObject* obj) update_ams_img(obj); - m_ams_type->Update(obj); + m_ams_type->UpdateInfo(obj); //m_ams_arrange_order->Update(obj); update_insert_material_read_mode(obj); m_sizer_remain_block->Show(obj->is_support_update_remain); @@ -624,7 +624,7 @@ void AMSSettingTypePanel::CreateGui() Fit(); } -void AMSSettingTypePanel::Update(const MachineObject* obj) +void AMSSettingTypePanel::UpdateInfo(const MachineObject* obj) { if (!obj) { Show(false); diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 69630c59d2..e157c947ae 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -110,7 +110,7 @@ public: ~AMSSettingTypePanel(); public: - void Update(const MachineObject* obj); + void UpdateInfo(const MachineObject* obj); private: void CreateGui(); diff --git a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp index a258a2178a..8505a559d6 100644 --- a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp +++ b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp @@ -705,7 +705,7 @@ ReselectMachineDialog::ReselectMachineDialog(wxWindow* parent) Centre(); } -void ReselectMachineDialog::Update(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time) +void ReselectMachineDialog::UpdateInfo(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time) { if (suggestText) diff --git a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp index be8f957c94..265666bb12 100644 --- a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp +++ b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp @@ -188,7 +188,7 @@ class ReselectMachineDialog : public wxDialog public: ReselectMachineDialog(wxWindow* parent); ~ReselectMachineDialog(); - void Update(MachineObject* obj, + void UpdateInfo(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time); diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp index 259506612d..e33987af33 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp @@ -98,7 +98,7 @@ void uiAmsPercentHumidityDryPopup::Create() Refresh(); } -void uiAmsPercentHumidityDryPopup::Update(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature) +void uiAmsPercentHumidityDryPopup::UpdateInfo(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature) { if (m_humidity_level != humidiy_level || m_humidity_percent != humidity_percent || m_left_dry_time != left_dry_time || m_current_temperature != current_temperature) diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h index a109381c86..867e6ac118 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h @@ -38,14 +38,14 @@ public: ~uiAmsPercentHumidityDryPopup() = default; public: - void Update(uiAmsHumidityInfo *info) { m_ams_id = info->ams_id; Update(info->humidity_display_idx, info->humidity_percent, info->left_dry_time, info->current_temperature); }; + void UpdateInfo(uiAmsHumidityInfo *info) { m_ams_id = info->ams_id; UpdateInfo(info->humidity_display_idx, info->humidity_percent, info->left_dry_time, info->current_temperature); }; std::string get_owner_ams_id() const { return m_ams_id; } void msw_rescale(); private: - void Update(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature); + void UpdateInfo(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature); void UpdateContents(); void Create(); diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp index 1e40a71150..44394866c8 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp @@ -399,7 +399,7 @@ void wgtDeviceNozzleRackArea::UpdateNozzleItems(const std::unordered_mapUpdate(nozzle_rack); + iter.second->UpdateInfo(nozzle_rack); } /*update nozzle possition and background*/ @@ -837,7 +837,7 @@ void wgtDeviceNozzleRackNozzleItem::SetSelected(bool selected) } } -void wgtDeviceNozzleRackNozzleItem::Update(const std::shared_ptr rack, bool on_rack /*= true*/) +void wgtDeviceNozzleRackNozzleItem::UpdateInfo(const std::shared_ptr rack, bool on_rack /*= true*/) { m_rack = rack; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h index 385fa6be48..16cd311120 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h @@ -200,7 +200,7 @@ public: wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id); public: - void Update(const std::shared_ptr rack, bool on_rack = true); // on_rack is false means extruder nozzle + void UpdateInfo(const std::shared_ptr rack, bool on_rack = true); // on_rack is false means extruder nozzle int GetNozzleId() const { return m_nozzle_id; } void SetDisplayIdText(const wxString& text) { m_nozzle_label_id->SetLabel(text);}; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp index 4dc072d721..f351e7af2b 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp @@ -114,7 +114,7 @@ static void s_update_nozzle_info(wgtDeviceNozzleRackNozzleItem* item, std::shared_ptr rack, const DevNozzle& nozzle_info) { - item->Update(rack, nozzle_info.IsOnRack()); + item->UpdateInfo(rack, nozzle_info.IsOnRack()); if (nozzle_info.IsUnknown()) { if (item->GetToolTipText() != _L("Nozzle information needs to be read")) { item->SetToolTip(_L("Nozzle information needs to be read")); diff --git a/src/slic3r/GUI/FilamentMapPanel.cpp b/src/slic3r/GUI/FilamentMapPanel.cpp index ed63016438..81117bc2a6 100644 --- a/src/slic3r/GUI/FilamentMapPanel.cpp +++ b/src/slic3r/GUI/FilamentMapPanel.cpp @@ -642,19 +642,12 @@ void FilamentMapBtnPanel::Select(bool selected) Refresh(); } -void GUI::FilamentMapBtnPanel::Hide() +bool GUI::FilamentMapBtnPanel::Show(bool show) { - m_btn->Hide(); - m_label->Hide(); - m_detail->Hide(); - wxPanel::Hide(); -} -void GUI::FilamentMapBtnPanel::Show() -{ - m_btn->Show(); - m_label->Show(); - m_detail->Show(); - wxPanel::Show(); + m_btn->Show(show); + m_label->Show(show); + m_detail->Show(show); + return wxPanel::Show(show); } FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced) : wxPanel(parent) @@ -694,18 +687,11 @@ FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mod Layout(); GUI::wxGetApp().UpdateDarkUIWin(this); } -void FilamentMapAutoPanel::Hide() +bool FilamentMapAutoPanel::Show(bool show) { - m_flush_panel->Hide(); - m_match_panel->Hide(); - wxPanel::Hide(); -} - -void FilamentMapAutoPanel::Show() -{ - m_flush_panel->Show(); - m_match_panel->Show(); - wxPanel::Show(); + m_flush_panel->Show(show); + m_match_panel->Show(show); + return wxPanel::Show(show); } void FilamentMapAutoPanel::UpdateStatus() @@ -743,16 +729,10 @@ FilamentMapDefaultPanel::FilamentMapDefaultPanel(wxWindow *parent) : wxPanel(par GUI::wxGetApp().UpdateDarkUIWin(this); } -void FilamentMapDefaultPanel::Hide() +bool FilamentMapDefaultPanel::Show(bool show) { - m_label->Hide(); - wxPanel::Hide(); -} - -void FilamentMapDefaultPanel::Show() -{ - m_label->Show(); - wxPanel::Show(); + m_label->Show(show); + return wxPanel::Show(show); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/FilamentMapPanel.hpp b/src/slic3r/GUI/FilamentMapPanel.hpp index a0caf8e78b..ce7c8010a3 100644 --- a/src/slic3r/GUI/FilamentMapPanel.hpp +++ b/src/slic3r/GUI/FilamentMapPanel.hpp @@ -69,10 +69,9 @@ class FilamentMapBtnPanel : public wxPanel { public: FilamentMapBtnPanel(wxWindow *parent, const wxString &label, const wxString &detail, const std::string &icon_path); - void Hide(); - void Show(); + bool Show(bool show = true) override; void Select(bool selected); - bool Enable(bool enable); + bool Enable(bool enable) override; bool IsEnabled() const { return m_enabled; } protected: void OnPaint(wxPaintEvent &event); @@ -99,8 +98,7 @@ class FilamentMapAutoPanel : public wxPanel { public: FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced); - void Hide(); - void Show(); + bool Show(bool show = true) override; FilamentMapMode GetMode() const { return m_mode; } private: @@ -116,8 +114,7 @@ class FilamentMapDefaultPanel : public wxPanel { public: FilamentMapDefaultPanel(wxWindow *parent); - void Hide(); - void Show(); + bool Show(bool show = true) override; private: Label *m_label; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 199de9236e..ddd352a582 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2176,7 +2176,7 @@ void SelectMachineDialog::on_reselect_dialog_btn_clicked(wxMouseEvent&) best_pos_map[slot.id] = pos.value(); } } - m_best_pos_dialog->Update(obj, best_pos_map, m_ams_mapping_result, text); + m_best_pos_dialog->UpdateInfo(obj, best_pos_map, m_ams_mapping_result, text); m_best_pos_dialog->ShowModal(); } @@ -2201,7 +2201,7 @@ void SelectMachineDialog::update_best_pos_dialog(wxCommandEvent& evt) best_pos_map[slot.id] = pos.value(); } } - m_best_pos_dialog->Update(obj_, best_pos_map, m_ams_mapping_result, text); + m_best_pos_dialog->UpdateInfo(obj_, best_pos_map, m_ams_mapping_result, text); } void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector params, wxString wiki_url) diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index a63d96ffce..c4db0423ab 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -1391,7 +1391,7 @@ void SendToPrinterDialog::show_status(PrintDialogStatus status, std::vectorShow(); m_animaicon->Stop(); - m_animaicon->Enable(); + m_animaicon->ShowEnabledIcon(); Layout(); Enable_Send_Button(false); diff --git a/src/slic3r/GUI/SlicingProgressNotification.cpp b/src/slic3r/GUI/SlicingProgressNotification.cpp index 6d7c6d7ecd..539da41024 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.cpp +++ b/src/slic3r/GUI/SlicingProgressNotification.cpp @@ -259,8 +259,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas // ImVec2 view_dailytips_text_pos = m_window_pos + ImVec2(text_left_margin_x, m_window_height / 2.0f + m_line_height * 0.2f); // bbl_render_left_sign(imgui, m_window_width, m_window_height, m_window_pos.x + m_window_width, m_window_pos.y); - // render_text(text_pos); - // render_close_button(button_pos, button_size); + // render_progress_text(text_pos); + // render_progress_close_button(button_pos, button_size); // render_show_dailytips(view_dailytips_text_pos); //} @@ -278,8 +278,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas ImVec2 button_pos = child_window_pos + ImVec2(progress_panel_width - button_size.x, progress_panel_height - text_bottom - button_size.y / 2.0f); ImVec2 text_pos = ImVec2(progress_bar_pos.x, progress_bar_pos.y - m_line_height * (1.2f + m_lines_count - 1)); - render_text(text_pos); - render_close_button(button_pos, button_size); + render_progress_text(text_pos); + render_progress_close_button(button_pos, button_size); if (m_sp_state == SlicingProgressState::SP_PROGRESS) { render_bar(progress_bar_pos, progress_bar_size); render_cancel_button(button_pos, button_size); @@ -319,7 +319,7 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas ImGui::PopStyleColor(3); } -void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_text(const ImVec2& pos) +void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_progress_text(const ImVec2& pos) { ImGuiWrapper& imgui = *wxGetApp().imgui(); float scale = imgui.get_font_size() / 15.0f; @@ -462,7 +462,7 @@ void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_cance } } -void NotificationManager::SlicingProgressNotification::render_close_button(const ImVec2& pos, const ImVec2& size) +void NotificationManager::SlicingProgressNotification::render_progress_close_button(const ImVec2& pos, const ImVec2& size) { if (m_sp_state == SlicingProgressState::SP_CANCELLED || m_sp_state == SlicingProgressState::SP_COMPLETED) { ImGuiWrapper& imgui = *wxGetApp().imgui(); diff --git a/src/slic3r/GUI/SlicingProgressNotification.hpp b/src/slic3r/GUI/SlicingProgressNotification.hpp index 44f2bbd32b..6a7ede1e2e 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.hpp +++ b/src/slic3r/GUI/SlicingProgressNotification.hpp @@ -53,10 +53,10 @@ protected: void init() override; void render(GLCanvas3D& canvas, float initial_y, bool move_from_overlay, float overlay_width, float right_margin) override; /* PARAMS: pos is relative to screen */ - void render_text(const ImVec2& pos); + void render_progress_text(const ImVec2& pos); void render_bar(const ImVec2& pos, const ImVec2& size); void render_cancel_button(const ImVec2& pos, const ImVec2& size); - void render_close_button(const ImVec2& pos, const ImVec2& size); + void render_progress_close_button(const ImVec2& pos, const ImVec2& size); void render_dailytips_panel(const ImVec2& pos, const ImVec2& size); void render_show_dailytips(const ImVec2& pos); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 41f14b6a11..7ba24fd991 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -278,7 +278,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_dry_ctr_win->Move(popup_pos); m_ams_dry_ctr_win->ShowModal(); } else { - m_percent_humidity_dry_popup->Update(info); + m_percent_humidity_dry_popup->UpdateInfo(info); wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint popup_pos(img_pos.x - m_percent_humidity_dry_popup->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); @@ -1034,7 +1034,7 @@ void AMSControl::UpdateAms(const std::string &series_name, humidity_info.humidity_percent = the_info.humidity_raw; humidity_info.left_dry_time = the_info.left_dray_time; humidity_info.current_temperature = the_info.current_temperature; - m_percent_humidity_dry_popup->Update(&humidity_info); + m_percent_humidity_dry_popup->UpdateInfo(&humidity_info); break; } } diff --git a/src/slic3r/GUI/Widgets/AnimaController.cpp b/src/slic3r/GUI/Widgets/AnimaController.cpp index acf78c01f5..d5f665cde1 100644 --- a/src/slic3r/GUI/Widgets/AnimaController.cpp +++ b/src/slic3r/GUI/Widgets/AnimaController.cpp @@ -78,7 +78,7 @@ void AnimaIcon::Stop() m_timer->Stop(); } -void AnimaIcon::Enable() +void AnimaIcon::ShowEnabledIcon() { if (m_bitmap) { m_bitmap->SetBitmap(m_image_enable); } } diff --git a/src/slic3r/GUI/Widgets/AnimaController.hpp b/src/slic3r/GUI/Widgets/AnimaController.hpp index e2f67ff8a6..daf8f95314 100644 --- a/src/slic3r/GUI/Widgets/AnimaController.hpp +++ b/src/slic3r/GUI/Widgets/AnimaController.hpp @@ -13,7 +13,7 @@ public: void Play(); void Stop(); - void Enable(); + void ShowEnabledIcon(); bool IsPlaying() const { return IsRunning(); }; bool IsRunning() const; diff --git a/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp b/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp index 735a118a20..63968a57c5 100644 --- a/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp +++ b/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp @@ -17,7 +17,7 @@ public: void paintEvent(wxPaintEvent &evt); - void SetLabel(wxString msg){m_msg = msg;}; + void SetLabel(const wxString &msg) override { m_msg = msg; } }; #endif diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp index 518bda1d19..20944df553 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp @@ -600,7 +600,7 @@ StaticBox* HotEndTable::CreateNozzleBox(const std::vector& nozzle_indices) void HotEndTable::UpdateNozzleItems(const std::unordered_map& nozzle_items, std::shared_ptr nozzle_rack) { for (auto& item : nozzle_items) - item.second->Update(nozzle_rack); + item.second->UpdateInfo(nozzle_rack); } void HotEndTable::OnPaint(wxPaintEvent& evt) diff --git a/src/slic3r/GUI/Widgets/RadioBox.cpp b/src/slic3r/GUI/Widgets/RadioBox.cpp index 7f20b8724c..f00447e0ec 100644 --- a/src/slic3r/GUI/Widgets/RadioBox.cpp +++ b/src/slic3r/GUI/Widgets/RadioBox.cpp @@ -36,11 +36,6 @@ void RadioBox::SetValue(bool value) update(); } -bool RadioBox::GetValue() -{ - return wxBitmapToggleButton::GetValue(); -} - void RadioBox::Rescale() { diff --git a/src/slic3r/GUI/Widgets/RadioBox.hpp b/src/slic3r/GUI/Widgets/RadioBox.hpp index b2c03aae15..a34bd594dd 100644 --- a/src/slic3r/GUI/Widgets/RadioBox.hpp +++ b/src/slic3r/GUI/Widgets/RadioBox.hpp @@ -15,14 +15,10 @@ public: public: void SetValue(bool value) override; - bool GetValue(); void Rescale(); bool Disable() { return wxBitmapToggleButton::Disable(); } - bool Enable() { - return wxBitmapToggleButton::Enable(); - } private: void update(); From 85dc86642588eb5c872ad6e0278b16ad70027fef Mon Sep 17 00:00:00 2001 From: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Date: Sun, 6 Sep 2026 11:36:23 -0300 Subject: [PATCH 117/208] Spiral Inset infill (spiral-concentric infill) (#15085) Co-authored-by: Ian Bassi --- resources/images/param_spiralinset.svg | 1 + src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/Fill/Fill.cpp | 6 +- src/libslic3r/Fill/FillBase.cpp | 2 + src/libslic3r/Fill/FillSpiralInset.cpp | 426 ++++++++++++++++++ src/libslic3r/Fill/FillSpiralInset.hpp | 37 ++ src/libslic3r/Layer.cpp | 1 + src/libslic3r/PrintConfig.cpp | 10 +- src/libslic3r/PrintConfig.hpp | 4 +- src/libslic3r/Support/SupportParameters.hpp | 2 + src/slic3r/GUI/ConfigManipulation.cpp | 13 +- tests/fff_print/test_fill.cpp | 207 +++++++++ .../test_config_variant_expansion.cpp | 6 + 13 files changed, 708 insertions(+), 9 deletions(-) create mode 100644 resources/images/param_spiralinset.svg create mode 100644 src/libslic3r/Fill/FillSpiralInset.cpp create mode 100644 src/libslic3r/Fill/FillSpiralInset.hpp diff --git a/resources/images/param_spiralinset.svg b/resources/images/param_spiralinset.svg new file mode 100644 index 0000000000..6ec1ab36aa --- /dev/null +++ b/resources/images/param_spiralinset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 2880a3cc6b..c33b7be429 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -147,6 +147,8 @@ set(lisbslic3r_sources Fill/FillBase.hpp Fill/FillConcentric.cpp Fill/FillConcentric.hpp + Fill/FillSpiralInset.cpp + Fill/FillSpiralInset.hpp Fill/FillConcentricInternal.cpp Fill/FillConcentricInternal.hpp Fill/FillCornerSmoothing.cpp diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 0888e1bb55..dc772580ca 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -950,7 +950,7 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p params.extruder = region_config.internal_solid_filament_id; // Orca: forced fill order applies only to top/bottom surfaces filled with a // center-based pattern; everything else stays at Default to keep batching together. - if (params.pattern == ipConcentric || params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral) { + if (params.pattern == ipConcentric || params.pattern == ipSpiralInset || params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral) { if (params.extrusion_role == erTopSolidInfill) params.fill_order = region_config.top_surface_fill_order.value; else if (params.extrusion_role == erBottomSurface) @@ -1332,7 +1332,8 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.anchor_length = surface_fill.params.anchor_length; params.anchor_length_max = surface_fill.params.anchor_length_max; params.resolution = resolution; - params.use_arachne = surface_fill.params.pattern == ipConcentric || surface_fill.params.pattern == ipConcentricInternal; + params.use_arachne = surface_fill.params.pattern == ipConcentric || surface_fill.params.pattern == ipSpiralInset || + surface_fill.params.pattern == ipConcentricInternal; params.layer_height = layerm->layer()->height; params.lateral_lattice_angle_1 = surface_fill.params.lateral_lattice_angle_1; params.lateral_lattice_angle_2 = surface_fill.params.lateral_lattice_angle_2; @@ -1515,6 +1516,7 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc case ipCubic: case ipLine: case ipConcentric: + case ipSpiralInset: case ipHoneycomb: case ipLateralHoneycomb: case ip3DHoneycomb: diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 45157ec42d..2b307007b8 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -15,6 +15,7 @@ #include "FillBase.hpp" #include "FillConcentric.hpp" +#include "FillSpiralInset.hpp" #include "FillHoneycomb.hpp" #include "Fill3DHoneycomb.hpp" #include "FillGyroid.hpp" @@ -41,6 +42,7 @@ Fill* Fill::new_from_type(const InfillPattern type) { switch (type) { case ipConcentric: return new FillConcentric(); + case ipSpiralInset: return new FillSpiralInset(); case ipHoneycomb: return new FillHoneycomb(); case ipLateralHoneycomb: return new FillLateralHoneycomb(); case ip3DHoneycomb: return new Fill3DHoneycomb(); diff --git a/src/libslic3r/Fill/FillSpiralInset.cpp b/src/libslic3r/Fill/FillSpiralInset.cpp new file mode 100644 index 0000000000..e6323c2572 --- /dev/null +++ b/src/libslic3r/Fill/FillSpiralInset.cpp @@ -0,0 +1,426 @@ +#include "../ClipperUtils.hpp" +#include "../ExPolygon.hpp" +#include "../Surface.hpp" +#include "../VariableWidth.hpp" +#include "Arachne/WallToolPaths.hpp" + +#include "FillSpiralInset.hpp" + +#include +#include +#include + +namespace Slic3r { + +// Index of the corner the spiral should start at. Every following loop is split at the point nearest +// the end of the one before it, so this choice propagates inwards and decides where the whole spiral +// hands over from ring to ring. A tight corner is the worst place for it: there the next ring +// retreats along the bisector by spacing/sin(angle), so the spiral has to strike out several spacings +// to reach it instead of stepping across to a ring running parallel one spacing away. +// +// A right angle is taken first when the loop has one. It clips cleanly, since the trimming below +// scales with 1/sin(angle) and so is at its shortest and least sensitive there, and it holds its +// shape as the loop is offset inwards, which keeps the handover in the same place ring after ring. +// Failing that the widest corner is the flattest stretch on offer, which is the next best handover. +// A straight point is no corner at all and only turns up as an artefact of the offsetting, so it is +// skipped. +static int find_spiral_start_corner(const Polygon& loop) +{ + const size_t n = loop.points.size(); + if (n < 3) + return 0; + + // cos(85 deg): a corner within five degrees of square counts as a right angle. + static const double right_angle_cos = 0.08716; + // cos(179 deg): anything flatter than this counts as a straight point rather than a corner. + static const double straight_cos = -0.99985; + + // Only convex corners qualify. A reflex corner spans the same angle between its two edges but + // bulges the other way, so the next ring in steps away from it along the bisector instead of + // hugging it, and starting there hands over across a long diagonal on every single ring. Loops + // arrive counter-clockwise, in which case a convex corner turns left, but check the winding + // rather than trust it. A closed loop always has at least one convex corner. + const double convex_turn = loop.is_counter_clockwise() ? 1.0 : -1.0; + + double best_right_cos = right_angle_cos; + int best_right = -1; + double best_wide_cos = 1.0; + int best_wide = -1; + for (size_t i = 0; i < n; ++i) { + const Point& p_prev = loop.points[(i - 1 + n) % n]; + const Point& p = loop.points[i]; + const Point& p_next = loop.points[(i + 1) % n]; + + Vec2d e_in = (p - p_prev).cast(); + Vec2d e_out = (p_next - p).cast(); + double len1 = e_in.norm(); + double len2 = e_out.norm(); + if (len1 < 1e-6 || len2 < 1e-6) + continue; + if (convex_turn * (e_in.x() * e_out.y() - e_in.y() * e_out.x()) <= 0.0) + continue; + + // Cosine of the angle the two edges span at the corner: 1 at a spike, 0 square, -1 straight. + double cos_val = -e_in.dot(e_out) / (len1 * len2); + if (std::abs(cos_val) < best_right_cos) { + best_right_cos = std::abs(cos_val); + best_right = int(i); + } + if (cos_val > straight_cos && cos_val < best_wide_cos) { + best_wide_cos = cos_val; + best_wide = int(i); + } + } + if (best_right >= 0) + return best_right; + // A loop smooth enough to have no corner at all, a circle say, hands over equally well anywhere. + return best_wide < 0 ? 0 : best_wide; +} + +// Length to trim off the end of a loop so that it does not overlap the start of the next one. +// The theoretical gap is distance/sin(alpha), alpha being the angle between the last segment of the +// loop and the first segment of the next one. +static double loop_clip_length(const Polyline& loop_path, const double gap) +{ + const Point& p_prev = loop_path.points[loop_path.points.size() - 2]; + const Point& p_last = loop_path.points.back(); + const Point& p_next = loop_path.points[1]; + Vec2d v1 = (p_last - p_prev).cast(); + Vec2d v2 = (p_next - p_last).cast(); + if (v1.norm() < 1e-6 || v2.norm() < 1e-6) + return gap; + + double alpha = std::atan2(std::abs(v1.x() * v2.y() - v1.y() * v2.x()), v1.dot(v2)); + // Outside 45deg < alpha < 120deg the 1/sin(alpha) term would clip far too much, so fall back to the plain gap. + return (alpha > M_PI / 4 && alpha < 2 * M_PI / 3) ? gap / std::sin(alpha) : gap; +} + +// The chaining below drives two kinds of loop: the plain offset polygons of the classic path, and +// Arachne's variable width walls. These are the only four steps that differ between them. Widths run +// two per segment, so every point added or removed takes a pair with it. +static Polyline open_loop(const Polygon& loop, int start_index) { return loop.split_at_index(start_index); } + +static ThickPolyline open_loop(const Arachne::ExtrusionLine& loop, int start_index) +{ + ThickPolyline path = Arachne::to_thick_polyline(loop); + // start_at_index() rotates a closed path, and wants it closed with a matching width at both ends. + if (path.points.front() != path.points.back()) { + const coordf_t w_first = path.width.front(), w_last = path.width.back(); + path.points.emplace_back(path.points.front()); + path.width.emplace_back(w_last); + path.width.emplace_back(w_first); + } + path.start_at_index(start_index); + return path; +} + +static void clip_path_end(Polyline& path, double distance) { path.clip_end(distance); } + +static void clip_path_end(ThickPolyline& path, double distance) +{ + // Polyline::clip_end() knows nothing about the widths, so walk back trimming the two together. + while (distance > 0 && path.points.size() >= 2) { + const Point last = path.points.back(); + const coordf_t w_end = path.width.back(); + path.points.pop_back(); + path.width.pop_back(); + const coordf_t w_start = path.width.back(); + path.width.pop_back(); + + const Vec2d v = (path.points.back() - last).cast(); + const double len = v.norm(); + if (len > distance) { + const double t = distance / len; + path.points.emplace_back((last.cast() + v * t).cast()); + path.width.emplace_back(w_start); + path.width.emplace_back(w_start + (w_end - w_start) * (1.0 - t)); + return; + } + distance -= len; + } + path.clear(); +} + +static void append_path(Polyline& dst, Polyline&& src) { dst.append(std::move(src)); } + +static void append_path(ThickPolyline& dst, ThickPolyline&& src) +{ + if (dst.empty()) { + dst = std::move(src); + return; + } + if (dst.points.back() == src.points.front()) { + // Carrying straight on from the same point, so there is no run across to give a width to. + src.points.erase(src.points.begin()); + src.width.erase(src.width.begin(), src.width.begin() + 2); + } else { + // The run across to the next loop tapers between the two ends it joins. + const coordf_t w_from = dst.width.back(), w_to = src.width.front(); + dst.width.emplace_back(w_from); + dst.width.emplace_back(w_to); + } + append(dst.points, std::move(src.points)); + append(dst.width, std::move(src.width)); +} + +// The classic loops all carry the same width, so the innermost one of an island can still ring an +// unfilled pin hole, which the spiral plugs by running into the middle. Arachne's walls widen to take +// up whatever is left over, so there is nothing there to plug and the stub would only double back +// over the wall that just filled it. +static bool leaves_a_centre_hole(const Polygon&) { return true; } +static bool leaves_a_centre_hole(const Arachne::ExtrusionLine&) { return false; } + +static void append_path_point(Polyline& path, const Point& point) { path.points.emplace_back(point); } + +static void append_path_point(ThickPolyline& path, const Point& point) +{ + const coordf_t w = path.width.back(); + path.points.emplace_back(point); + path.width.emplace_back(w); + path.width.emplace_back(w); +} + +// Chain the loops of one surface into as few continuous spirals as its shape allows. The loops arrive +// ordered outside in, depth first, each paired with its outline in loop_outlines; every decision here +// is made on those outlines, so the two kinds of loop take exactly the same route. +template +static std::vector generate_spiral_insets(const FillParams& params, + const std::vector& loops, + const Polygons& loop_outlines, + const coord_t distance, + const ExPolygon& original_expoly) +{ + std::vector output; + PathType spiral; + Point current_pos(0, 0); + // Index into loops of the innermost loop appended to the spiral currently being built. + int innermost_loop = -1; + + // Whether the spiral can run straight from one point to the other. The run across is extruded, + // not travelled, so it has to be a genuine step over to the ring alongside: + // - up to a ring spacing and a half it cannot leave the material, and needs no check at all, + // which covers all but a few of the loops; + // - beyond that it is tested against the surface, which catches the points that are close in a + // straight line but separated by a hole or a notch; + // - past four spacings it is refused outright. A handover does stretch at a corner, where the + // next ring retreats along the bisector by spacing/sin(angle), but four spacings is already a + // fifteen degree wedge, and down a wedge that tight the run across would trace the bisector, + // which is where the tail is filled from anyway. Anything longer is a traverse across the + // surface that prints over what it crosses. Breaking the spiral leaves the G-code to travel it. + const double free_hop = 1.5 * double(distance); + const double max_hop = 4.0 * double(distance); + auto reachable = [&](const Point& from, const Point& to) { + const double hop = from.distance_to(to); + if (hop > max_hop) + return false; + return hop <= free_hop || original_expoly.contains(Line(from, to)); + }; + + // The centre point plugs the pin hole left in the middle of an island, it is not meant to + // traverse it, so it is only worth adding when the innermost loop has shrunk to about a ring. + const double max_center_stub = 2.0 * double(distance); + + // Emit the spiral built so far as one path and start over on a fresh island. + auto flush_spiral = [&]() { + if (spiral.empty()) + return; + // Run into the middle of the innermost loop so the island's centre is filled instead of being + // left as a pin hole. Only where there is a hole to fill: the loop has to still enclose open + // space once its own bead is accounted for, or the stub just runs back over that bead. And + // the point has to sit inside the loop and be reachable, or it runs off across the surface. + if (innermost_loop >= 0 && leaves_a_centre_hole(*loops[innermost_loop])) { + const Polygon& innermost = loop_outlines[innermost_loop]; + const Point centroid = innermost.centroid(); + if (!offset(innermost, -float(0.5 * double(distance))).empty() && centroid != spiral.last_point() && + spiral.last_point().distance_to(centroid) <= max_center_stub && innermost.contains(centroid) && + reachable(spiral.last_point(), centroid)) + append_path_point(spiral, centroid); + } + output.emplace_back(std::move(spiral)); + spiral.clear(); + innermost_loop = -1; + current_pos = Point(0, 0); + }; + + for (size_t i = 0; i < loops.size(); ++i) { + const Polygon& outline = loop_outlines[i]; + if (outline.points.empty()) + continue; + + // The loop is opened into a path with the split point repeated at both ends, so a usable one + // has at least 3 points. Both kinds of loop share the outline's indices, hence its start point. + PathType loop_path = open_loop(*loops[i], spiral.empty() ? find_spiral_start_corner(outline) : + current_pos.nearest_point_index(outline.points)); + if (loop_path.size() < 3) + continue; + + // Island jumping: the loops are ordered by their nesting, depth first, so the next one + // continues the current spiral exactly when it lies inside the one just laid down. Distance + // cannot stand in for that test: at a sharp corner the next ring retreats along the bisector + // by spacing/sin(angle), which leaves it several spacings away while still being the very + // next ring in, and the spiral would break off at every spike. + const bool same_island = innermost_loop >= 0 && loop_outlines[innermost_loop].contains(loop_path.points.front()); + if (!spiral.empty() && (!same_island || !reachable(spiral.last_point(), loop_path.points.front()))) { + flush_spiral(); + loop_path = open_loop(*loops[i], find_spiral_start_corner(outline)); + if (loop_path.size() < 3) + continue; + } + + // Clip the end of the loop to leave room for the run into the next one. The last loop of the + // surface has no successor, so it only gives up half of the gap. + clip_path_end(loop_path, loop_clip_length(loop_path, (i + 1 == loops.size() ? 0.5 : 1.0) * double(distance))); + // Clipping empties the path when the loop is shorter than the clipping length, which happens + // on the degenerate slivers that offsetting leaves behind. Such a loop carries no extrusion. + if (loop_path.size() < 2) + continue; + + append_path(spiral, std::move(loop_path)); + innermost_loop = int(i); + current_pos = spiral.last_point(); + } + + flush_spiral(); + + // An outward fill order runs every spiral from its centre to its outer edge, innermost island first. + if (params.fill_order != SurfaceFillOrder::Inward) { + for (PathType& path : output) + path.reverse(); + std::reverse(output.begin(), output.end()); + } + + return output; +} + +void FillSpiralInset::_fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + Polylines& polylines_out) +{ + BoundingBox bounding_box = expolygon.contour.bounding_box(); + + coord_t min_spacing = scale_(this->spacing); + coord_t distance = coord_t(min_spacing / params.density); + + if (params.density > 0.9999f && !params.dont_adjust) { + distance = this->_adjust_solid_spacing(bounding_box.size()(0), distance); + this->spacing = unscale(distance); + } + + Polygons loops = to_polygons(expolygon); + + ExPolygons last{std::move(expolygon)}; + while (!last.empty()) { + last = offset2_ex(last, -(distance + min_spacing / 2), +min_spacing / 2); + append(loops, to_polygons(last)); + } + + // Orders the loops outside in, depth first, which is the order the chaining below expects. + loops = union_pt_chained_outside_in(loops); + + std::vector loop_refs; + loop_refs.reserve(loops.size()); + for (const Polygon& loop : loops) + loop_refs.emplace_back(&loop); + + Polylines spiral_result = generate_spiral_insets(params, loop_refs, loops, distance, expolygon); + + append(polylines_out, spiral_result); +} + +void FillSpiralInset::_fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + ThickPolylines& thick_polylines_out) +{ + assert(params.use_arachne); + assert(this->print_config != nullptr && this->print_object_config != nullptr); + + // Only a solid surface is worth the variable width walls; a sparse one falls back to plain loops. + if (params.density <= 0.9999f || params.dont_adjust) { + Polylines polylines; + this->_fill_surface_single(params, thickness_layers, direction, expolygon, polylines); + append(thick_polylines_out, to_thick_polylines(std::move(polylines), scaled(this->spacing))); + return; + } + + // no rotation is supported for this infill pattern + Point bbox_size = expolygon.contour.bounding_box().size(); + coord_t min_spacing = scaled(this->spacing); + + coord_t loops_count = std::max(bbox_size.x(), bbox_size.y()) / min_spacing + 1; + Polygons polygons = offset(expolygon, float(min_spacing) / 2.f); + + double min_nozzle_diameter = *std::min_element(print_config->nozzle_diameter.values.begin(), print_config->nozzle_diameter.values.end()); + Arachne::WallToolPathsParams input_params; + input_params.min_bead_width = 0.85 * min_nozzle_diameter; + input_params.min_feature_size = 0.25 * min_nozzle_diameter; + input_params.wall_transition_length = 1.0 * min_nozzle_diameter; + input_params.wall_transition_angle = 10; + input_params.wall_transition_filter_deviation = 0.25 * min_nozzle_diameter; + input_params.wall_distribution_count = 1; + + Arachne::WallToolPaths wallToolPaths(polygons, min_spacing, min_spacing, loops_count, 0, params.layer_height, input_params); + std::vector walls_by_inset = wallToolPaths.getToolPaths(); + + // Open walls are the thin features Arachne fits between the closed ones. They cannot join a + // spiral, so they go out as they are; leaving them behind is what would put the gaps back. + std::vector walls; + Polygons wall_outlines; + ThickPolylines open_walls; + for (const Arachne::VariableWidthLines& inset : walls_by_inset) + for (const Arachne::ExtrusionLine& wall : inset) { + if (wall.empty()) + continue; + if (wall.is_closed) { + walls.emplace_back(&wall); + wall_outlines.emplace_back(wall.toPolygon()); + } else { + open_walls.emplace_back(Arachne::to_thick_polyline(wall)); + } + } + + // Arachne hands the walls back grouped by inset, which is not their nesting: around a hole the + // wall of a given inset lies inside the wall of that same inset around the contour. Nest them by + // containment instead, so the spiral follows one island all the way in before starting the next, + // the same order union_pt_chained_outside_in gives the classic path above. + const size_t wall_count = walls.size(); + std::vector nesting_depth(wall_count, 0), parent(wall_count, -1); + std::vector inside(wall_count * wall_count, 0); + for (size_t i = 0; i < wall_count; ++i) + for (size_t j = 0; j < wall_count; ++j) + if (i != j && wall_outlines[j].contains(walls[i]->junctions.front().p)) { + inside[i * wall_count + j] = 1; + ++nesting_depth[i]; + } + // The innermost of the walls containing this one, which is the deepest of them, is its parent. + for (size_t i = 0; i < wall_count; ++i) + for (size_t j = 0; j < wall_count; ++j) + if (inside[i * wall_count + j] && (parent[i] < 0 || nesting_depth[parent[i]] < nesting_depth[j])) + parent[i] = int(j); + + std::vector ordered; + Polygons outlines; + ordered.reserve(wall_count); + outlines.reserve(wall_count); + std::function descend = [&](int idx) { + ordered.emplace_back(walls[idx]); + outlines.emplace_back(wall_outlines[idx]); + for (size_t k = 0; k < wall_count; ++k) + if (parent[k] == idx) + descend(int(k)); + }; + for (size_t i = 0; i < wall_count; ++i) + if (parent[i] < 0) + descend(int(i)); + + ThickPolylines spiral_result = + generate_spiral_insets(params, ordered, outlines, min_spacing, expolygon); + + append(thick_polylines_out, std::move(spiral_result)); + append(thick_polylines_out, std::move(open_walls)); +} + +} // namespace Slic3r diff --git a/src/libslic3r/Fill/FillSpiralInset.hpp b/src/libslic3r/Fill/FillSpiralInset.hpp new file mode 100644 index 0000000000..eb799ec2f3 --- /dev/null +++ b/src/libslic3r/Fill/FillSpiralInset.hpp @@ -0,0 +1,37 @@ +#ifndef slic3r_FillSpiralInset_hpp_ +#define slic3r_FillSpiralInset_hpp_ + +#include "FillBase.hpp" + +namespace Slic3r { + +class FillSpiralInset : public Fill +{ +public: + ~FillSpiralInset() override = default; + bool is_self_crossing() override { return false; } + +protected: + Fill* clone() const override { return new FillSpiralInset(*this); }; + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + Polylines &polylines_out) override; + + // Orca: solid surfaces are filled with Arachne's variable width walls, which widen to take up + // whatever the fixed width loops above would have left over as gaps. + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + ThickPolylines &thick_polylines_out) override; + + bool no_sort() const override { return true; } +}; + +} // namespace Slic3r + +#endif // slic3r_FillSpiralInset_hpp_ diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 87ad11bcf8..1d6c2b0703 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -419,6 +419,7 @@ coordf_t Layer::get_sparse_infill_max_void_area() double spacing = flow.scaled_spacing() * (100 - density) / density; switch (pattern) { case ipConcentric: + case ipSpiralInset: case ipRectilinear: case ipLine: case ipGyroid: diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 100089fd24..1db476eede 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -275,6 +275,7 @@ static t_config_enum_values s_keys_map_InfillPattern { { "tpmsfk", ipTpmsFK }, { "gyroid", ipGyroid }, { "concentric", ipConcentric }, + { "spiralinset", ipSpiralInset }, { "hilbertcurve", ipHilbertCurve }, { "archimedeanchords", ipArchimedeanChords }, { "octagramspiral", ipOctagramSpiral } @@ -371,6 +372,7 @@ static t_config_enum_values s_keys_map_SupportMaterialInterfacePattern { { "auto", smipAuto }, { "rectilinear", smipRectilinear }, { "concentric", smipConcentric }, + { "spiralinset", smipSpiralInset }, { "rectilinear_interlaced", smipRectilinearInterlaced}, { "grid", smipGrid } }; @@ -2292,6 +2294,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("rectilinear"); def->enum_values.push_back("alignedrectilinear"); def->enum_values.push_back("concentric"); + def->enum_values.push_back("spiralinset"); def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); @@ -2300,6 +2303,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Aligned Rectilinear")); def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Spiral Inset")); def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); @@ -2382,7 +2386,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Top surface fill order"); def->category = L("Strength"); def->tooltip = L("Direction in which top surfaces are filled when using a center-based pattern " - "(Concentric, Archimedean Chords, Octagram Spiral).\n" + "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed " "towards the edge where it is least visible. Inward starts at the edge and ends " "with the tight curves at the center.\n" @@ -2401,7 +2405,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Bottom surface fill order"); def->category = L("Strength"); def->tooltip = L("Direction in which bottom surfaces are filled when using a center-based pattern " - "(Concentric, Archimedean Chords, Octagram Spiral).\n" + "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer " "adhesion on build plates where the tight curves at the center may not stick. " "Outward starts at the center, pushing any excess material towards the edge.\n" @@ -6963,11 +6967,13 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("auto"); def->enum_values.push_back("rectilinear"); def->enum_values.push_back("concentric"); + def->enum_values.push_back("spiralinset"); def->enum_values.push_back("rectilinear_interlaced"); def->enum_values.push_back("grid"); def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Spiral Inset")); def->enum_labels.push_back(L("Rectilinear Interlaced")); def->enum_labels.push_back(L("Grid")); def->mode = comAdvanced; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 330151c4d3..f7cbe8b2e5 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -113,7 +113,7 @@ enum InfillPattern : int { ipCubic, ipAdaptiveCubic, ipQuarterCubic, ipSupportCubic, ipLightning, ipHoneycomb, ip3DHoneycomb, ipLateralHoneycomb, ipLateralLattice, ipCrossHatch, ipTpmsD, ipTpmsFK, ipGyroid, - ipConcentric, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, + ipConcentric, ipSpiralInset, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportBase, ipConcentricInternal, ipCount, }; @@ -271,7 +271,7 @@ enum LongRectrationLevel }; enum SupportMaterialInterfacePattern { - smipAuto, smipRectilinear, smipConcentric, smipRectilinearInterlaced, smipGrid + smipAuto, smipRectilinear, smipConcentric, smipSpiralInset, smipRectilinearInterlaced, smipGrid }; // BBS diff --git a/src/libslic3r/Support/SupportParameters.hpp b/src/libslic3r/Support/SupportParameters.hpp index dc0e94ed03..8d43edb444 100644 --- a/src/libslic3r/Support/SupportParameters.hpp +++ b/src/libslic3r/Support/SupportParameters.hpp @@ -141,6 +141,8 @@ struct SupportParameters { this->contact_fill_pattern = ipGrid; else if (object_config.support_interface_pattern == smipRectilinearInterlaced) this->contact_fill_pattern = ipRectilinear; + else if (object_config.support_interface_pattern == smipSpiralInset) + this->contact_fill_pattern = ipSpiralInset; else this->contact_fill_pattern = (object_config.support_interface_pattern == smipAuto && zero_gap_contact_interface) || diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 09b7fcfad4..8eab1c785c 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -741,14 +741,21 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in bool have_infill = config->option("sparse_infill_density")->value > 0; // sparse_infill_filament_id uses the same logic as in Print::extruders() for (auto el : { "sparse_infill_pattern", "infill_combination", "fill_multiline","infill_direction", - "minimum_sparse_infill_area", "sparse_infill_filament_id", "infill_anchor", "infill_anchor_max","infill_shift_step","sparse_infill_rotate_template","symmetric_infill_y_axis"}) + "minimum_sparse_infill_area", "sparse_infill_filament_id","infill_shift_step","sparse_infill_rotate_template","symmetric_infill_y_axis"}) toggle_line(el, have_infill); + InfillPattern pattern = config->opt_enum("sparse_infill_pattern"); + + // Orca: the concentric patterns follow the surface outline instead of crossing it, so there is + // nothing for an infill anchor to attach to. Hide the anchor settings for them. + bool have_infill_anchor = have_infill && pattern != ipConcentric && pattern != ipSpiralInset; + toggle_line("infill_anchor", have_infill_anchor); + toggle_line("infill_anchor_max", have_infill_anchor); + bool have_combined_infill = config->opt_bool("infill_combination") && have_infill; toggle_line("infill_combination_max_layer_height", have_combined_infill); // Infill patterns that support multiline infill. - InfillPattern pattern = config->opt_enum("sparse_infill_pattern"); bool have_multiline_infill_pattern = pattern == ipGyroid || pattern == ipGrid || pattern == ipRectilinear || pattern == ipTpmsD || pattern == ipTpmsFK || pattern == ipCrossHatch || pattern == ipHoneycomb || pattern == ipLateralLattice || pattern == ipLateralHoneycomb || pattern == ipConcentric || pattern == ipCubic || pattern == ipStars || pattern == ipAlignedRectilinear || pattern == ipLightning || pattern == ip3DHoneycomb || pattern == ipAdaptiveCubic || pattern == ipSupportCubic|| pattern == ipTriangles || pattern == ipQuarterCubic|| pattern == ipArchimedeanChords || pattern == ipHilbertCurve || pattern == ipOctagramSpiral; @@ -831,7 +838,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_line("separated_infills", is_internal_infill_separable); // Fill order is only meaningful for the center-based surface fill patterns; hide it otherwise. - auto is_centered_fill = [](InfillPattern p) { return p == ipConcentric || p == ipArchimedeanChords || p == ipOctagramSpiral; }; + auto is_centered_fill = [](InfillPattern p) { return p == ipConcentric || p == ipSpiralInset || p == ipArchimedeanChords || p == ipOctagramSpiral; }; toggle_line("top_surface_fill_order", has_top_shell && is_centered_fill(config->opt_enum("top_surface_pattern"))); toggle_line("bottom_surface_fill_order", has_bottom_shell && is_centered_fill(config->opt_enum("bottom_surface_pattern"))); diff --git a/tests/fff_print/test_fill.cpp b/tests/fff_print/test_fill.cpp index d26639c659..04e5b61831 100644 --- a/tests/fff_print/test_fill.cpp +++ b/tests/fff_print/test_fill.cpp @@ -699,6 +699,213 @@ TEST_CASE("Solid infill direction offsets every layer when no template is set", } } +// Orca: the spiral inset pattern chains the concentric loops into a single continuous path per +// island, so it has to cope with the degenerate loops offsetting leaves behind and it must not join +// loops that only look adjacent. +namespace { + +Slic3r::Polylines spiral_inset_fill(const Slic3r::ExPolygon &surface_shape, double spacing) +{ + std::unique_ptr filler(Slic3r::Fill::new_from_type("spiralinset")); + filler->spacing = spacing; + // Cancel the half-spacing contraction fill_surface() applies, so the filler sees the shape as given. + filler->overlap = 0.5 * spacing; + + Slic3r::FillParams fill_params; + fill_params.density = 1.f; + fill_params.dont_adjust = true; + + Slic3r::Surface surface(Slic3r::stBottom, surface_shape); + return filler->fill_surface(&surface, fill_params); +} + +Slic3r::ExPolygon rectangle(double x, double y, double w, double h) +{ + return Slic3r::ExPolygon({Slic3r::Point::new_scale(x, y), Slic3r::Point::new_scale(x + w, y), + Slic3r::Point::new_scale(x + w, y + h), Slic3r::Point::new_scale(x, y + h)}); +} + +// Area of the surface the toolpaths fail to cover, and the largest single patch of it, in mm2. Each +// bead is measured at its own width so the variable width walls are not sold short. +std::pair uncovered_area(const Slic3r::ExPolygon &surface_shape, const Slic3r::Polygons &covered) +{ + double total = 0, biggest = 0; + for (const Slic3r::ExPolygon &gap : Slic3r::diff_ex(Slic3r::ExPolygons{surface_shape}, Slic3r::union_(covered))) { + const double area = unscale(unscale(gap.area())); + total += area; + biggest = std::max(biggest, area); + } + return {total, biggest}; +} + +Slic3r::Polygons beads_of(const Slic3r::Polylines &paths, double width) +{ + return Slic3r::offset(paths, float(scale_(0.5 * width))); +} + +Slic3r::Polygons beads_of(const Slic3r::ThickPolylines &paths) +{ + Slic3r::Polygons covered; + for (const Slic3r::ThickPolyline &path : paths) + for (size_t i = 0; i + 1 < path.points.size(); ++i) { + Slic3r::Polyline segment; + segment.points = {path.points[i], path.points[i + 1]}; + Slic3r::append(covered, Slic3r::offset(Slic3r::Polylines{segment}, + float(0.5 * std::max(path.width[2 * i], path.width[2 * i + 1])))); + } + return covered; +} + +} // namespace + +TEST_CASE("Spiral inset fill drops loops shorter than the end clipping", "[Fill][Regression]") +{ + // A sliver whose whole perimeter is shorter than the length clipped off the end of a loop, so the + // clipping consumes the path entirely. Such a loop carries no extrusion and must be dropped + // rather than kept as an empty path and read back from. + const double spacing = 0.45; + + Slic3r::Polylines paths; + REQUIRE_NOTHROW(paths = spiral_inset_fill(rectangle(0, 0, 0.05, 0.05), spacing)); + for (const Slic3r::Polyline &path : paths) + CHECK(path.size() >= 2); + + // The same surface at a size the clipping cannot swallow still gets filled. + REQUIRE_NOTHROW(paths = spiral_inset_fill(rectangle(0, 0, 5, 5), spacing)); + REQUIRE(paths.size() == 1); + CHECK(paths.front().size() >= 2); +} + +TEST_CASE("Spiral inset fill keeps separate islands on separate paths", "[Fill]") +{ + // Two lobes joined by a neck narrower than the loop spacing: the inward offsets break the surface + // into two islands, which cannot share one spiral, and no path may leave the surface. + const double spacing = 0.45; + Slic3r::ExPolygon dumbbell = rectangle(0, 0, 6, 6); + dumbbell = Slic3r::union_ex(Slic3r::ExPolygons{dumbbell, rectangle(6, 2.9, 4, 0.2), rectangle(10, 0, 6, 6)}).front(); + + const Slic3r::Polylines paths = spiral_inset_fill(dumbbell, spacing); + REQUIRE(paths.size() >= 2); + + // Inflate by a hair so that loops sitting exactly on the outline still count as contained. + const Slic3r::ExPolygons within = Slic3r::offset_ex(dumbbell, float(SCALED_EPSILON)); + REQUIRE(within.size() == 1); + for (const Slic3r::Polyline &path : paths) { + CHECK(path.size() >= 2); + CHECK(within.front().contains(path)); + } +} + + +TEST_CASE("Spiral inset fill stays connected across sharp corners", "[Fill][Regression]") +{ + // At a corner of half-angle a, the next ring inward retreats along the bisector by spacing/sin(a), + // which leaves it several spacings from the end of the ring it continues. Judging the break by + // distance broke the spiral into loose rings at every spike; nesting is what decides the island. + const double spacing = 0.45; + const Slic3r::ExPolygon spike({Slic3r::Point::new_scale(0, 0), Slic3r::Point::new_scale(30, 0), + Slic3r::Point::new_scale(15, 4)}); + + const Slic3r::Polylines paths = spiral_inset_fill(spike, spacing); + CHECK(paths.size() == 1); + + const Slic3r::ExPolygons within = Slic3r::offset_ex(spike, float(SCALED_EPSILON)); + REQUIRE(within.size() == 1); + for (const Slic3r::Polyline &path : paths) + CHECK(within.front().contains(path)); +} + +TEST_CASE("Spiral inset fill starts on a convex corner", "[Fill][Regression]") +{ + // The only right angle on this outline is the reflex one: the two edges meeting at the origin + // span 90 degrees exactly as a square corner would, but the material lies outside them. The next + // ring in steps away from a reflex corner along the bisector instead of hugging it, so starting + // the spiral there sent it across a long diagonal on every single ring. + const double spacing = 0.45; + const Slic3r::ExPolygon notched({Slic3r::Point::new_scale(0, 0), Slic3r::Point::new_scale(0, 10), + Slic3r::Point::new_scale(-16, 18), Slic3r::Point::new_scale(-16, -2), + Slic3r::Point::new_scale(-8, -16), Slic3r::Point::new_scale(18, -16), + Slic3r::Point::new_scale(10, 0)}); + + const Slic3r::Polylines paths = spiral_inset_fill(notched, spacing); + REQUIRE(paths.size() >= 1); + + // Every edge of the outline is at least 45 degrees off the bisector of that reflex corner, and + // so is every ring offset from it. A long segment running along the bisector can therefore only + // be the spiral striking out across the rings to reach the next one. + for (const Slic3r::Polyline &path : paths) + for (const Slic3r::Line &segment : path.lines()) { + const Vec2d v = (segment.b - segment.a).cast(); + const double direction = std::fmod(std::atan2(v.y(), v.x()) * 180.0 / M_PI + 180.0, 180.0); + if (std::abs(direction - 45.0) > 25.0) + continue; + CAPTURE(direction, unscale(segment.length())); + CHECK(segment.length() <= scale_(1.5 * spacing)); + } +} + +TEST_CASE("Spiral inset fill closes the gaps with variable width walls", "[Fill]") +{ + // Fixed width loops cannot fill a region that is not a whole number of lines across and leave the + // remainder open, which on a ring shows up as a wedge several lines wide. Plain concentric avoids + // that by building solid surfaces out of Arachne's variable width walls, and so must this pattern. + const double spacing = 0.45; + Slic3r::ExPolygon ring = rectangle(0, 0, 24, 24); + Slic3r::Polygon hole; + for (int i = 0; i < 64; ++i) { + const double angle = -2.0 * PI * i / 64.0; // clockwise, so it reads as a hole + hole.points.emplace_back(Slic3r::Point::new_scale(12 + 7.3 * std::cos(angle), 12 + 7.3 * std::sin(angle))); + } + ring.holes.emplace_back(hole); + + Slic3r::PrintConfig print_config; + Slic3r::PrintObjectConfig object_config; + auto make_filler = [&]() { + std::unique_ptr filler(Slic3r::Fill::new_from_type("spiralinset")); + filler->spacing = spacing; + filler->overlap = 0.5 * spacing; // cancel the contraction, so both see the same surface + filler->print_config = &print_config; + filler->print_object_config = &object_config; + return filler; + }; + + Slic3r::FillParams params; + params.density = 1.f; + params.dont_adjust = false; + params.layer_height = 0.2; + + const Slic3r::Surface surface(Slic3r::stTop, ring); + + std::unique_ptr fixed = make_filler(); + const Slic3r::Polylines fixed_width = fixed->fill_surface(&surface, params); + REQUIRE(!fixed_width.empty()); + const auto fixed_gaps = uncovered_area(ring, beads_of(fixed_width, fixed->spacing)); + + params.use_arachne = true; + std::unique_ptr variable = make_filler(); + const Slic3r::ThickPolylines variable_width = variable->fill_surface_arachne(&surface, params); + REQUIRE(!variable_width.empty()); + const auto variable_gaps = uncovered_area(ring, beads_of(variable_width)); + + CAPTURE(fixed_gaps.first, fixed_gaps.second, variable_gaps.first, variable_gaps.second); + // The wedges the fixed width loops leave behind are what the variable width walls take up. + CHECK(variable_gaps.second < 0.5 * fixed_gaps.second); + CHECK(variable_gaps.first < fixed_gaps.first); + + // And it is still a spiral: far fewer paths than the ring has loops. + // And the walls are still chained into spirals rather than printed one path per wall. The ring is + // at its narrowest (12 - 7.3) mm across and is filled from both sides, so it is at least this many + // walls thick there and thicker elsewhere. Arachne's short thin feature walls cannot join a spiral, + // so only the substantial paths count towards this. + const size_t walls_across = size_t(2.0 * (12.0 - 7.3) / spacing); + size_t spirals = 0; + for (const Slic3r::ThickPolyline &path : variable_width) + if (path.length() > scale_(10.0 * spacing)) + ++spirals; + CAPTURE(spirals, walls_across, variable_width.size(), fixed_width.size()); + CHECK(2 * spirals < walls_across); +} + TEST_CASE("Honeycomb infill rounds its cell corners with the smooth factor", "[Fill]") { // A cell whose sides are several times the line width, so that the corners have room to be rounded. diff --git a/tests/libslic3r/test_config_variant_expansion.cpp b/tests/libslic3r/test_config_variant_expansion.cpp index 28901702cc..2469789d5b 100644 --- a/tests/libslic3r/test_config_variant_expansion.cpp +++ b/tests/libslic3r/test_config_variant_expansion.cpp @@ -130,6 +130,12 @@ TEST_CASE("get_config_index_base resolves (volume type, extruder type, id) to a } } +TEST_CASE("support interface pattern registry includes spiral inset", "[Config]") +{ + const auto &values = ConfigOptionEnum::get_enum_values(); + REQUIRE(values.at("spiralinset") == SupportMaterialInterfacePattern::smipSpiralInset); +} + TEST_CASE("get_extruder_nozzle_volume_count reads the per-extruder volume-type layout", "[Config]") { std::vector> nozzle_volume_types; From 0365304ae03b537eaca6c7445947a9116bfcb496 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 6 Sep 2026 13:42:57 -0500 Subject: [PATCH 118/208] fix: G-code preview drops comment text and cuts non-ASCII lines short (#15448) --- src/slic3r/GUI/GCodeViewer.cpp | 37 +++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index e5a88e4ea4..49477ac7dd 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -785,6 +785,19 @@ void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& fil } } +// Byte offset just past the first count characters of str, or its length if it is shorter. +static size_t utf8_offset(const std::string& str, size_t count) +{ + const char* const begin = str.c_str(); + const char* const end = begin + str.size(); + const char* pos = begin; + for (size_t i = 0; i < count && pos < end; ++i) { + unsigned int codepoint = 0; + pos += ImTextCharFromUtf8(&codepoint, pos, end); + } + return pos - begin; +} + //BBS: GUI refactor: move to right void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, float right, uint64_t curr_line_id) const { @@ -796,23 +809,27 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f // read line from file const size_t start = id == 1 ? 0 : m_lines_ends[id - 2]; const size_t original_len = m_lines_ends[id - 1] - start; - const size_t len = std::min(original_len, (size_t) 55); + // A character is four bytes at most, so 55 of them always fit in 220. + const size_t len = std::min(original_len, (size_t) 55 * 4); std::string gline(m_file.data() + start, len); - // If original line is longer than 55 characters, truncate and append "..." - if (original_len > 55) - gline = gline.substr(0, 52) + "..."; + // If original line is longer than 55 characters, truncate and append "...". + // The cut must land on a character boundary or it leaves half a character behind. + if (len < original_len || utf8_offset(gline, 55) < gline.size()) + gline = gline.substr(0, utf8_offset(gline, 52)) + "..."; std::string command, parameters, comment; - // extract comment - std::vector tokens; - boost::split(tokens, gline, boost::is_any_of(";"), boost::token_compress_on); - command = tokens.front(); - if (tokens.size() > 1) - comment = ";" + tokens.back(); + const size_t comment_start = gline.find(';'); + if (comment_start == std::string::npos) + command = gline; + else { + command = gline.substr(0, comment_start); + comment = gline.substr(comment_start); + } // extract gcode command and parameters if (!command.empty()) { + std::vector tokens; boost::split(tokens, command, boost::is_any_of(" "), boost::token_compress_on); command = tokens.front(); if (tokens.size() > 1) { From 43ce8c5e46c2e82b937f48aa96ce2ea1ac215383 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 6 Sep 2026 16:06:18 -0500 Subject: [PATCH 119/208] fix: SLIC3R_PCH=OFF now builds on Windows, allowing compiler caching (#15552) --- build_win.bat | 66 ++++++++++++++++++++++- scripts/test_build_win.ps1 | 52 +++++++++++++++++- src/libslic3r/BlacklistedLibraryCheck.cpp | 1 + src/libslic3r/CMakeLists.txt | 7 +++ src/libslic3r/MultiPoint.hpp | 1 + src/libslic3r/Print.cpp | 5 ++ src/libslic3r/SLA/Hollowing.cpp | 1 + src/slic3r/CMakeLists.txt | 3 ++ src/slic3r/GUI/DragCanvas.hpp | 1 + src/slic3r/GUI/GUI_App.cpp | 1 + src/slic3r/GUI/OptionsGroup.hpp | 2 +- src/slic3r/GUI/wxMediaCtrl3.h | 3 ++ src/slic3r/Utils/Bonjour.hpp | 1 + src/slic3r/win_platform.hpp | 19 +++++++ 14 files changed, 159 insertions(+), 4 deletions(-) create mode 100644 src/slic3r/win_platform.hpp diff --git a/build_win.bat b/build_win.bat index c447d8a71f..840279e4f3 100644 --- a/build_win.bat +++ b/build_win.bat @@ -52,6 +52,7 @@ call :add_section "Build configuration" call :add_arg config string "" config "release, debug, relwithdebinfo or minsizerel (default: release)" call :add_arg target_arch string "" arch "x64 or arm64 (default: the host architecture)" call :add_arg slicer_asan bool a asan "Build the slicer with ASAN enabled" +call :add_arg no_pch bool "" no-pch "Build without the precompiled header, implied by --cache" call :add_section "Toolchain" call :add_arg use_clang_cl bool l clang-cl "Use clang-cl as the compiler" @@ -60,6 +61,7 @@ call :add_arg use_ninja bool x ninja "Use the Ninja Multi-Config generator" call :add_arg use_msbuild bool "" msbuild "Use the Visual Studio generator (default)" call :add_arg vs_version string "" vs "Visual Studio release: 2019, 2022 or 2026 (default: autodetect)" call :add_arg clang_path string "" clang-path "Path to clang-cl.exe, requires -x (default: the one from Visual Studio)" +call :add_arg cache string "" cache "Compiler cache: ccache, sccache or off, requires -l -x (default: off)" call :add_section "How much gets rebuilt" call :add_arg slicer_target string "" slicer-target "Build one slicer target instead of all, e.g. libslic3r" @@ -391,6 +393,49 @@ if not "%clang_path%" == "" if not "%using_ninja%" == "ON" ( exit /b 1 ) +set "cache_args=" +if "%cache%" == "" goto :cache_ready +if /I "%cache%" == "off" goto :cache_ready +if /I "%cache%" == "ccache" goto :cache_named +if /I "%cache%" == "sccache" goto :cache_named +echo Unknown --cache value "%cache%". Expected ccache, sccache or off. +exit /b 1 + +REM CMake accepts a compiler launcher under any generator but only runs it +REM under Makefile and Ninja. ccache also refuses cl.exe because the build +REM passes /Zi. +:cache_named +REM Only a configure records the launcher, so --no-configure needs none. +if "%no_configure%" == "ON" goto :cache_ready +if "%build_deps%%build_slicer%" == "" goto :cache_ready +if not "%using_ninja%" == "ON" goto :cache_needs_clang +if not "%use_clang_cl%" == "ON" goto :cache_needs_clang +goto :cache_tool + +:cache_needs_clang +echo --cache needs clang-cl and Ninja; add -l -x. +exit /b 1 + +REM Name a full path, so the recorded launcher does not depend on PATH. +:cache_tool +set "cache_exe=" +for /f "tokens=*" %%i in ('where %cache% 2^>nul') do ( + if not defined cache_exe set "cache_exe=%%i" +) +if not defined cache_exe ( + echo %cache% is not on PATH. Install it, or leave --cache off. + exit /b 1 +) +REM Forward slashes, so CMake does not read a backslash as an escape. +set "cache_exe=%cache_exe:\=/%" +set "cache_args=-DCMAKE_C_COMPILER_LAUNCHER="%cache_exe%" -DCMAKE_CXX_COMPILER_LAUNCHER="%cache_exe%"" +REM Neither cache stores a compile that uses a precompiled header. sccache +REM refuses /Fp outright. ccache does too unless its sloppiness is loosened, +REM and even then most hits fall back to the slower preprocessed mode. +set "no_pch=ON" + +:cache_ready + REM Ninja prints [123/456] by default, which says nothing about how far REM along it is or how long is left. %p is a percentage, %w and %W are REM elapsed and remaining, but those two arrived in ninja 1.12 and an @@ -474,6 +519,8 @@ REM real path rather than one glued onto the repository root. for %%p in ("!build_dir!") do set "build_full=%%~fp" echo Configuration: %build_type%, %arch% if not "%clang_exe%" == "" echo Compiler: %clang_exe% +if "%no_pch%" == "ON" echo Precompiled header: off +if not "%cache_args%" == "" echo Compiler cache: %cache_exe% set "SIG_FLAG=" if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" @@ -570,6 +617,10 @@ if "%build_deps%" == "ON" ( %error_check% ) + if not "!cache_args!" == "" ( + set "deps_args=!deps_args! !cache_args!" + ) + if not "%no_configure%" == "ON" ( call :print_and_run cmake -S deps -B "!DEP_TREE!" -G "%generator%" %gen_args% -DCMAKE_BUILD_TYPE=%build_type% !deps_args! %ORCA_DEPS_CMAKE_ARGS% %error_check% @@ -641,6 +692,16 @@ if "%build_slicer%" == "ON" ( set "slicer_args=!slicer_args! -DSLIC3R_ASAN=ON" ) + REM A later -DSLIC3R_PCH=ON in ORCA_SLICER_CMAKE_ARGS still wins, because + REM CMake takes the last definition on the command line. + if "%no_pch%" == "ON" ( + set "slicer_args=!slicer_args! -DSLIC3R_PCH=OFF" + ) + + if not "!cache_args!" == "" ( + set "slicer_args=!slicer_args! !cache_args!" + ) + REM Configuring against a tree that was never built fails deep inside REM package resolution. Name it here instead. Skipped when -d is about to REM build it in this same run, and under a dry run, which configures @@ -870,6 +931,7 @@ REM get_str_len -> length in %ret% echo %script_name% -s --no-configure -j 8 Rebuild quickly while iterating echo %script_name% -s --slicer-target glad Compile one target to check the toolchain echo %script_name% -l -x --run-tests Test that toolchain's build, not the default one + echo %script_name% -s -l -x --cache ccache Rebuild through a compiler cache echo. echo Environment: echo ORCA_DEPS_CMAKE_ARGS Extra arguments for the deps configure @@ -879,8 +941,8 @@ REM get_str_len -> length in %ret% echo NINJA_STATUS Ninja progress format, if you want your own echo debugscript Set to ON to trace this script echo. - echo set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_PCH=OFF -DSLIC3R_MSVC_PDB=OFF - echo $env:ORCA_SLICER_CMAKE_ARGS = '-DSLIC3R_PCH=OFF' (PowerShell) + echo set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_BUILD_SANDBOXES=ON -DSLIC3R_WARNINGS=OFF + echo $env:ORCA_SLICER_CMAKE_ARGS = '-DSLIC3R_BUILD_SANDBOXES=ON' (PowerShell) echo. echo --deps-args and --slicer-args cannot carry a value with spaces; use echo these instead. Neither form supports a value containing an ampersand. diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 index 563430559f..34f64117af 100644 --- a/scripts/test_build_win.ps1 +++ b/scripts/test_build_win.ps1 @@ -92,6 +92,12 @@ New-Item -ItemType Directory -Force -Path $clangDir | Out-Null Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $clangDir 'clang-cl.exe') -Force $clangOnPath = "$clangDir;$env:PATH" +# A ccache that only has to exist. Nothing runs it; the script only locates it. +$cacheDir = Join-Path $fixtures 'cache' +New-Item -ItemType Directory -Force -Path $cacheDir | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $cacheDir 'ccache.exe') -Force +$ccacheOnPath = "$cacheDir;$env:PATH" + # ProgramFiles(x86) is where the script looks for vswhere, so an empty one # stands in for a machine whose Visual Studio has no clang toolset. $noVs = Join-Path $fixtures 'no-vs' @@ -121,7 +127,7 @@ $cases = @( 'Examples:', 'Environment:') } @{ Name = 'the environment section shows what to set'; Args = @('--help'); DryRun = $false Contains = @('ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS', 'ORCA_UPDATER_SIG_KEY', 'NINJA_STATUS', - 'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_PCH=OFF', '(PowerShell)', 'debugscript') } + 'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_BUILD_SANDBOXES=ON', '(PowerShell)', 'debugscript') } @{ Name = 'section headers do not widen the flag column'; Args = @('--help'); DryRun = $false Match = @('^ -d, --deps +Download') } # Windows Terminal opens at 120 columns and wraps at 120, so 119 is the @@ -294,6 +300,14 @@ $cases = @( Contains = @('-DBUILD_TESTS=ON') } @{ Name = '-a enables ASAN for the slicer'; Args = @('-s', '-a') Contains = @('-DSLIC3R_ASAN=ON') } + @{ Name = '--no-pch turns the precompiled header off'; Args = @('-s', '--no-pch') + Contains = @('-DSLIC3R_PCH=OFF') } + @{ Name = '--no-pch says so in the banner'; Args = @('-s', '--no-pch') + Contains = @('Precompiled header: off') } + @{ Name = 'the precompiled header is on unless asked'; Args = @('-s') + NotContains = @('SLIC3R_PCH') } + @{ Name = '--no-pch works without a cache'; Args = @('-s', '--no-pch') + NotContains = @('COMPILER_LAUNCHER') } @{ Name = 'the slicer build runs gettext'; Args = @('-s') Contains = @('run_gettext.bat') } # tools\7z.exe needs a 7z.dll beside it, which the repo does not carry, @@ -324,6 +338,42 @@ $cases = @( @{ Name = 'deps and slicer build in one invocation'; Args = @('-d', '-s', '-x', '-l') Contains = @('cmake -S deps', 'cmake -B "build-clang" ') } + 'the compiler cache' + @{ Name = '--cache needs clang-cl and Ninja'; Args = @('-s', '--cache', 'ccache'); ExpectExit = 1 + Contains = @('needs clang-cl and Ninja') } + # cl.exe is out of scope, since ccache refuses every compile under /Zi. + @{ Name = '--cache under Ninja still needs clang-cl'; Args = @('-s', '-x', '--cache', 'ccache'); ExpectExit = 1 + Contains = @('needs clang-cl and Ninja') } + @{ Name = 'an unknown --cache value is rejected'; Args = @('-s', '-x', '--cache', 'nope'); ExpectExit = 1 + Contains = @('Expected ccache, sccache or off') } + # A bare PATH, since the machine running the tests may have sccache installed. + @{ Name = 'a --cache tool that is not there is caught early'; Args = @('-s', '-l', '-x', '--cache', 'sccache'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('is not on PATH') } + @{ Name = '--cache takes any casing'; Args = @('-s', '-l', '-x', '--cache', 'CCACHE') + Env = @{ PATH = $ccacheOnPath } + Contains = @('ccache.exe') } + @{ Name = '--cache off asks for no launcher'; Args = @('-s', '-x', '--cache', 'off') + NotContains = @('COMPILER_LAUNCHER') } + @{ Name = 'no --cache asks for no launcher'; Args = @('-s', '-x') + NotContains = @('COMPILER_LAUNCHER') } + @{ Name = '--cache turns the precompiled header off'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DSLIC3R_PCH=OFF', 'COMPILER_LAUNCHER') } + # The resolved path, not the bare name, so PATH cannot change it later. + @{ Name = '--cache names the resolved path in the banner'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Match = @('^Compiler cache: .*/ccache\.exe$') } + @{ Name = '--cache reaches the dependency configure too'; Args = @('-d', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DCMAKE_C_COMPILER_LAUNCHER=') } + # Nothing records a launcher without a configure, so the tool is not needed. + # Reaching the cmake check on a bare PATH is what proves it was skipped. + @{ Name = '--no-configure asks for no cache tool'; Args = @('-s', '-l', '-x', '--no-configure', '--cache', 'ccache'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('CMake was not found') + NotContains = @('is not on PATH') } + 'the developer loop' @{ Name = '--slicer-target builds one target'; Args = @('-s', '--slicer-target', 'libslic3r') Contains = @('--config Release --target libslic3r') } diff --git a/src/libslic3r/BlacklistedLibraryCheck.cpp b/src/libslic3r/BlacklistedLibraryCheck.cpp index 938f542497..cf7e6da2aa 100644 --- a/src/libslic3r/BlacklistedLibraryCheck.cpp +++ b/src/libslic3r/BlacklistedLibraryCheck.cpp @@ -1,6 +1,7 @@ #include "BlacklistedLibraryCheck.hpp" #include +#include #include #ifdef WIN32 diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index c33b7be429..d07c42d8f6 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -665,6 +665,13 @@ if(SLIC3R_PROFILE) target_link_libraries(libslic3r PRIVATE Shiny) endif() +if (WIN32) + # Public, since BlacklistedLibraryCheck.hpp includes windows.h. Empty + # WIN32_LEAN_AND_MEAN matches the sources that define it themselves; bare + # NOMINMAX matches the one libigl already passes. + target_compile_definitions(libslic3r PUBLIC "WIN32_LEAN_AND_MEAN=" "NOMINMAX") +endif () + if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) endif () diff --git a/src/libslic3r/MultiPoint.hpp b/src/libslic3r/MultiPoint.hpp index de386b501c..096230d22c 100644 --- a/src/libslic3r/MultiPoint.hpp +++ b/src/libslic3r/MultiPoint.hpp @@ -24,6 +24,7 @@ public: explicit MultiPoint(const Points &_points) : points(_points) {} MultiPoint& operator=(const MultiPoint &other) { points = other.points; return *this; } MultiPoint& operator=(MultiPoint &&other) { points = std::move(other.points); return *this; } + virtual ~MultiPoint() = default; void scale(double factor); void scale(double factor_x, double factor_y); void translate(double x, double y) { this->translate(Point(coord_t(x), coord_t(y))); } diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index e96304e874..aee50db534 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1,3 +1,8 @@ +#ifdef _WIN32 +// Keep this first. A header below reaches boost/regex, whose w32_regex_traits +// needs the Win32 types declared already. +#include +#endif #include "Config.hpp" #include "Exception.hpp" #include "Print.hpp" diff --git a/src/libslic3r/SLA/Hollowing.cpp b/src/libslic3r/SLA/Hollowing.cpp index df62127770..f50cdbced2 100644 --- a/src/libslic3r/SLA/Hollowing.cpp +++ b/src/libslic3r/SLA/Hollowing.cpp @@ -1,4 +1,5 @@ #include +#include #include #include diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 1e39e30b0d..83ad94e563 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -916,6 +916,9 @@ endif () if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) +elseif (MSVC) + # Puts the Windows headers first when the PCH is off. + target_compile_options(libslic3r_gui PRIVATE "/FIslic3r/win_platform.hpp") endif () if (APPLE) diff --git a/src/slic3r/GUI/DragCanvas.hpp b/src/slic3r/GUI/DragCanvas.hpp index aa8d8ddfa8..f39e836673 100644 --- a/src/slic3r/GUI/DragCanvas.hpp +++ b/src/slic3r/GUI/DragCanvas.hpp @@ -3,6 +3,7 @@ #include "wx/bitmap.h" #include "wx/dragimag.h" +#include "wx/panel.h" namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 5b80a866ca..3500493329 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -12,6 +12,7 @@ #include "BuildCommit.hpp" #include "Downloader.hpp" #include +#include #include #include #include diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index c808545145..b20d16aca9 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -199,7 +199,7 @@ public: OptionsGroup(wxWindow *_parent, const wxString &title, const wxString &icon, bool is_tab_opt = false, column_t extra_clmn = nullptr); - ~OptionsGroup() { clear(true); } + virtual ~OptionsGroup() { clear(true); } wxGridSizer* get_grid_sizer() { return m_grid_sizer; } const std::vector& get_lines() { return m_lines; } diff --git a/src/slic3r/GUI/wxMediaCtrl3.h b/src/slic3r/GUI/wxMediaCtrl3.h index 1d64955ffd..ff4595ad32 100644 --- a/src/slic3r/GUI/wxMediaCtrl3.h +++ b/src/slic3r/GUI/wxMediaCtrl3.h @@ -8,6 +8,9 @@ #ifndef wxMediaCtrl3_h #define wxMediaCtrl3_h +#include +#include "wx/window.h" +#include "wx/bitmap.h" #include "wx/uri.h" #include "wx/mediactrl.h" diff --git a/src/slic3r/Utils/Bonjour.hpp b/src/slic3r/Utils/Bonjour.hpp index 50b71791fa..3ef8f0e1a2 100644 --- a/src/slic3r/Utils/Bonjour.hpp +++ b/src/slic3r/Utils/Bonjour.hpp @@ -115,6 +115,7 @@ class UdpSession { public: UdpSession(Bonjour::ReplyFn rfn); + virtual ~UdpSession() = default; virtual void handle_receive(const boost::system::error_code& error, size_t bytes) = 0; std::vector buffer; boost::asio::ip::udp::endpoint remote_endpoint; diff --git a/src/slic3r/win_platform.hpp b/src/slic3r/win_platform.hpp new file mode 100644 index 0000000000..0c5a8e81b2 --- /dev/null +++ b/src/slic3r/win_platform.hpp @@ -0,0 +1,19 @@ +#pragma once + +// Force-included into libslic3r_gui when SLIC3R_PCH is OFF, standing in for +// pchheader.hpp, which includes before anything else. Arriving +// late and transitively, rpcndr.h defines a global `byte` that collides with +// std::byte under `using namespace std`, and the control and URL moniker +// types the GUI uses are never declared. +#ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include + #include + #include +#endif // _WIN32 + From 8d44b680bdc174f3da4a7adfeba62b33fbc7e084 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 6 Sep 2026 18:23:47 -0500 Subject: [PATCH 120/208] fix: bumping the bundled uv version rebuilds the whole GUI library (#15553) --- src/slic3r/CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 83ad94e563..7c25792bb3 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -984,10 +984,6 @@ endif () # Add a definition so that we can tell we are compiling slic3r. target_compile_definitions(libslic3r_gui PRIVATE SLIC3R_CURRENTLY_COMPILING_GUI_MODULE) -if(ORCA_BUNDLED_UV_EXECUTABLE_CONFIG) - target_compile_definitions(libslic3r_gui PRIVATE "ORCA_BUNDLED_UV_EXECUTABLE=\"${ORCA_BUNDLED_UV_EXECUTABLE_CONFIG}\"") -endif() - if (ORCA_BUILD_PYTHON_STUBGEN_MODULE) add_library(orca_stubgen MODULE plugin/PythonPluginBridge.cpp From 3500a1e588fb3618ec1393f094310f181709d4ee Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 10:46:59 +0800 Subject: [PATCH 121/208] unify id generation scripts --- .github/pull_request_template.md | 2 +- docs/HLSD/filament_id.md | 86 +- scripts/assign_vendor_setting_ids.py | 258 ----- scripts/orca_extra_profile_check.py | 20 +- ...assign_filament_ids.py => orca_id_tool.py} | 1009 +++++++++++------ scripts/tests/test_filament_id.py | 696 ++++++++++-- scripts/tests/test_setting_id.py | 902 +++++++++++++++ scripts/update_bambu_filament_ids.py | 4 +- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Preset.hpp | 4 +- src/libslic3r/PresetBundle.cpp | 4 +- tests/libslic3r/test_preset_setting_id.cpp | 6 +- 12 files changed, 2230 insertions(+), 763 deletions(-) delete mode 100644 scripts/assign_vendor_setting_ids.py rename scripts/{assign_filament_ids.py => orca_id_tool.py} (54%) create mode 100644 scripts/tests/test_setting_id.py diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 8b82f51730..cf9799df19 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -20,7 +20,7 @@ > 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`) +- [ ] New filament/material profiles: I wrote **no** `filament_id` key by hand — I ran `python scripts/orca_id_tool.py --generate` and `--update-snapshot` and committed both diffs (see [docs/HLSD/filament_id.md](docs/HLSD/filament_id.md)) -- [ ] New filament/material profiles: I wrote **no** `filament_id` key by hand — I ran `python scripts/orca_id_tool.py --generate` and `--update-snapshot` and committed both diffs (see [docs/HLSD/filament_id.md](docs/HLSD/filament_id.md)) - diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.h b/src/slic3r/GUI/DeviceCore/DevFilaSystem.h index 36354cebbf..51fb744f72 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.h +++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.h @@ -58,7 +58,7 @@ public: std::string id; std::string tag_uid; // tag_uid - std::string setting_id; // tray_info_idx + std::string setting_id; // tray_info_idx, map to the filament_id std::string filament_setting_id; // setting_id std::string m_fila_type; std::string sub_brands; From 494d50bd55dd30f9bfeda2125bae6bdc3fb6e5a0 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 7 Sep 2026 01:16:45 -0500 Subject: [PATCH 123/208] fix: restore Ctrl+drag panning on macOS (#15312) On macOS wxWidgets reports Ctrl+left as a synthetic right button, which is what made Ctrl+drag pan the canvas. #14999 added an unconditional correction of the event's button state from wxGetMouseState(), which reports the physical buttons and knows nothing about that synthesis, so the synthetic right button was overwritten with a plain left button on every event. Ctrl+drag then matched the left button mapping and rotated instead of panning. Apply the correction only when the event carries no button state at all. On macOS wx populates button state only for the mouse-down and mouse-dragged event types, which are also the only ones the Ctrl+left translation touches, so the ImGui capture fix keeps every event it was added for. Fixes #15214 Co-authored-by: Noisyfox --- src/slic3r/GUI/GLCanvas3D.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 7db7e01e9c..6cdc27ed65 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4168,7 +4168,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // https://github.com/OrcaSlicer/OrcaSlicer/pull/14999#issuecomment-5151344759 // We solve this by correcting the state of the event from the actual mouse state querying with `wxGetMouseState()` // so it works like on other platforms. - { + // Only fill in state the event does not carry, to preserve wx's synthetic right button for Ctrl+left. + if (!evt.ButtonIsDown(wxMOUSE_BTN_ANY)) { const auto state = wxGetMouseState(); evt.SetLeftDown(state.LeftIsDown()); evt.SetMiddleDown(state.MiddleIsDown()); From 6943b6ddc3de741d2997fe0f49ef47e6dafb2923 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 15:45:29 +0800 Subject: [PATCH 124/208] Make Cubicon's "@base" filament presets true base profiles Cubicon's nine "@base" presets were the only instantiated ones of the 196 "@base" filament presets in the library; the other 187 are instantiation:false. Being selectable, and claiming xCeler-I and xCeler-Plus, they put two presets of one product on those two printers - which is what forced the nine filament_id salt splits: one product deliberately kept on two ids so AMS matching stayed unambiguous. Flip them to instantiation:false and drop the compatible_printers, setting_id and filament_settings_id that a base has no use for, matching what the other 150 bases carry. The three "@Cubicon xCeler-{I,Mini,Plus} 0.4 nozzle" variants keep one printer each, so every printer still sees exactly one preset per product and they converge on its single id; the nine salted ids retire. A base is not added to the preset collection, so user presets that inherited the selectable "@base" - the v2.3.2-v2.4.2 fixtures have one per material - would lose their parent. renamed_from on the xCeler-I variant, the first model the base ever claimed, redirects them; a preset built on "@base" while printing on an xCeler-Plus narrows to the xCeler-I. The six default_materials / default_filament_profile fields named "Cubicon PLA @Cubicon xCeler-", dropping the " 0.4 nozzle" the presets actually carry, so none of them ever resolved; each model now names its own variant. Claude-Session: https://claude.ai/code/session_01Q3zm9HuyskkSb4hynviV99 --- resources/profiles/Cubicon.json | 2 +- ...icon ABS @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon ABS @base.json | 12 +--- ...ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../filament/Cubicon ABS-A100 @base.json | 12 +--- ...con ABSk @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon ABSk @base.json | 12 +--- ...on PA-CF @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PA-CF @base.json | 12 +--- ...bicon PC @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PC @base.json | 12 +--- ...con PETG @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PETG @base.json | 12 +--- ...icon PLA @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PLA @base.json | 12 +--- ...con PLA+ @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../Cubicon/filament/Cubicon PLA+ @base.json | 12 +--- ...n PLAi21 @Cubicon xCeler-I 0.4 nozzle.json | 1 + .../filament/Cubicon PLAi21 @base.json | 12 +--- .../machine/Cubicon xCeler-I 0.4 nozzle.json | 2 +- .../Cubicon/machine/Cubicon xCeler-I.json | 2 +- .../Cubicon xCeler-Mini 0.4 nozzle.json | 2 +- .../Cubicon/machine/Cubicon xCeler-Mini.json | 2 +- .../Cubicon xCeler-Plus 0.4 nozzle.json | 2 +- .../Cubicon/machine/Cubicon xCeler-Plus.json | 2 +- scripts/filament_id_snapshot.json | 72 ------------------- 26 files changed, 34 insertions(+), 169 deletions(-) diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index 1fca49355c..ffb363c807 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json index 52deadf521..93949a7c80 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS @base", + "renamed_from": "Cubicon ABS @base", "setting_id": "VJEyK87ZYvHmamB9", "filament_id": "OFpDo5Ix", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index 998588dbac..31efe73b11 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABS @base", "inherits": "fdm_filament_abs", - "setting_id": "aZRVIlDze62Bbw81", - "filament_id": "OFafocjw", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFpDo5Ix", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABS @base" - ], "filament_vendor": [ "Cubicon" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json index cc34341ceb..2788688e1b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", + "renamed_from": "Cubicon ABS-A100 @base", "setting_id": "OfiOryklf7FDVCz8", "filament_id": "OFy8tYJE", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index a943b60a8b..5c64ed0fa5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABS-A100 @base", "inherits": "Cubicon ABS @base", - "setting_id": "vGIT4KZvqojIh2up", - "filament_id": "OFN9fefN", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFy8tYJE", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABS-A100 @base" - ], "filament_type": [ "ABS" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json index 0deea7e69f..cdb6324af1 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABSk @base", + "renamed_from": "Cubicon ABSk @base", "setting_id": "TXcodZkab4fofnEn", "filament_id": "OForhBi4", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index a042ecbea3..46a8f2d48c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABSk @base", "inherits": "Cubicon ABS @base", - "setting_id": "UbOUO0K3Y2iRPBtf", - "filament_id": "OFgVQkqW", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OForhBi4", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABSk @base" - ], "filament_type": [ "ABS" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json index c8e56eaa13..09a5d917f4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PA-CF @base", + "renamed_from": "Cubicon PA-CF @base", "setting_id": "nupuIJggdc1EKDqG", "filament_id": "OFiEz2XI", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json index daf2b62754..b9ac6cf4c9 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PA-CF @base", "inherits": "fdm_filament_pa", - "setting_id": "55cJDyCoEudfOePY", - "filament_id": "OFD21ije", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFiEz2XI", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PA-CF @base" - ], "filament_type": [ "PA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json index d115a6da70..e37f5f063c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PC @base", + "renamed_from": "Cubicon PC @base", "setting_id": "c0sUPS0SRYUNjEpB", "filament_id": "OFEj7sca", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index 83e3afb15b..001434a2b1 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PC @base", "inherits": "fdm_filament_pc", - "setting_id": "Mzg6jfwb2nqfGkdV", - "filament_id": "OF79Fbo6", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFEj7sca", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PC @base" - ], "filament_type": [ "PC" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json index 001b4ecf54..db9a90c42d 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PETG @base", + "renamed_from": "Cubicon PETG @base", "setting_id": "dsX01tCkd2Usk104", "filament_id": "OFoBTKmn", "instantiation": "true", diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index cf4ac7a4af..61fc5c647a 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PETG @base", "inherits": "fdm_filament_pet", - "setting_id": "bGfz4phwIdqSz0Hx", - "filament_id": "OF8Hx3Pi", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFoBTKmn", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PETG @base" - ], "filament_type": [ "PETG" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json index 5110547028..3b3c9b1d4c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLA @base", + "renamed_from": "Cubicon PLA @base", "from": "system", "setting_id": "xXJgHAeNf1JdCitr", "filament_id": "OFEwRwmL", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 7dd06c3498..53df18afc5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -3,17 +3,9 @@ "name": "Cubicon PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "setting_id": "ypwdJAu0NlEsWpf4", - "filament_id": "OFjcwUEm", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFEwRwmL", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "CBC_MTC_0" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json index 3acad023d0..3674c61e3f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLA+ @base", + "renamed_from": "Cubicon PLA+ @base", "from": "system", "setting_id": "fNR2Bw3e4TGcWhq0", "filament_id": "OF7tt7DO", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index 5b98d6fcf8..5e7c8dc10b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -2,19 +2,11 @@ "type": "filament", "name": "Cubicon PLA+ @base", "inherits": "Cubicon PLA @base", - "setting_id": "ETnuhiOZRh1jxrVk", - "filament_id": "OFRmGKVX", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OF7tt7DO", + "instantiation": "false", "default_filament_colour": [ "" ], - "filament_settings_id": [ - "Cubicon PLA+ @base" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json index 865d1af0c3..74bff5f995 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLAi21 @base", + "renamed_from": "Cubicon PLAi21 @base", "from": "system", "setting_id": "vcLVF3cglagBfVAF", "filament_id": "OFRhBryT", diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json index 7c851e2a34..39b5b31430 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PLAi21 @base", "inherits": "Cubicon PLA @base", - "setting_id": "mnwC7ijXXV72lBOt", - "filament_id": "OFdkWDiy", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFRhBryT", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PLAi21 @base" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json index 140b31986c..2844a543a4 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-I" + "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json index 0377e94716..64d00c37c4 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-I" + "default_materials": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle" } diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json index 451e4716d2..85bd7be03f 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-Mini" + "Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json index af43717058..bb55969134 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-Mini" + "default_materials": "Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle" } diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json index 483c82be07..9c38452bf5 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-Plus" + "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json index 28bdd1ce65..41bac9acc1 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-Plus" + "default_materials": "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle" } diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 9b0c64f473..76c078a55d 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -899,14 +899,6 @@ "filament_type": "PHA", "filament_vendor": "Generic" }, - "OF79Fbo6": { - "filaments": [ - "Cubicon/Cubicon PC" - ], - "name": "Cubicon PC", - "filament_type": "PC", - "filament_vendor": "Cubicon" - }, "OF7H3VJM": { "filaments": [ "OrcaFilamentLibrary/eSUN PLA-Marble" @@ -997,14 +989,6 @@ "filament_type": "TPU-64D", "filament_vendor": "Flashforge" }, - "OF8Hx3Pi": { - "filaments": [ - "Cubicon/Cubicon PETG" - ], - "name": "Cubicon PETG", - "filament_type": "PETG", - "filament_vendor": "Cubicon" - }, "OF8Jl6NT": { "filaments": [ "Snapmaker/Snapmaker J1 PET" @@ -1477,14 +1461,6 @@ "filament_type": "PLA", "filament_vendor": "Volumic" }, - "OFD21ije": { - "filaments": [ - "Cubicon/Cubicon PA-CF" - ], - "name": "Cubicon PA-CF", - "filament_type": "PA", - "filament_vendor": "Cubicon" - }, "OFD8loeT": { "filaments": [ "re3D/re3D rPETG" @@ -2950,14 +2926,6 @@ "filament_type": "PLA", "filament_vendor": "addnorth" }, - "OFN9fefN": { - "filaments": [ - "Cubicon/Cubicon ABS-A100" - ], - "name": "Cubicon ABS-A100", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, "OFNBlAPT": { "filaments": [ "OrcaArena/Arena PETG Basic" @@ -3514,14 +3482,6 @@ "filament_type": "PVA", "filament_vendor": "Volumic" }, - "OFRmGKVX": { - "filaments": [ - "Cubicon/Cubicon PLA+" - ], - "name": "Cubicon PLA+", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, "OFRooa0F": { "filaments": [ "Snapmaker/Snapmaker Dual PA-CF" @@ -4623,14 +4583,6 @@ "filament_type": "PC-CF", "filament_vendor": "Generic" }, - "OFafocjw": { - "filaments": [ - "Cubicon/Cubicon ABS" - ], - "name": "Cubicon ABS", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, "OFausr3F": { "filaments": [ "OrcaFilamentLibrary/FilAr PLA-mate Rosa" @@ -4871,14 +4823,6 @@ "filament_type": "PLA", "filament_vendor": "Snapmaker" }, - "OFdkWDiy": { - "filaments": [ - "Cubicon/Cubicon PLAi21" - ], - "name": "Cubicon PLAi21", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, "OFdqkWtz": { "filaments": [ "Flashforge/Flashforge PLA Luminous" @@ -5296,14 +5240,6 @@ "filament_type": "PC", "filament_vendor": "Volumic" }, - "OFgVQkqW": { - "filaments": [ - "Cubicon/Cubicon ABSk" - ], - "name": "Cubicon ABSk", - "filament_type": "ABS", - "filament_vendor": "Cubicon" - }, "OFgXgt98": { "filaments": [ "Artillery/Artillery ABS" @@ -5807,14 +5743,6 @@ "filament_type": "PLA", "filament_vendor": "Polymaker" }, - "OFjcwUEm": { - "filaments": [ - "Cubicon/Cubicon PLA" - ], - "name": "Cubicon PLA", - "filament_type": "PLA", - "filament_vendor": "Cubicon" - }, "OFjiXpyf": { "filaments": [ "Qidi/Generic TPU 95A", From eec4ae1e876b75142faa7aede8136b079f70933a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 14:46:26 +0800 Subject: [PATCH 125/208] Retire the untuned re3D umbrella presets superseded by the nozzle variants "Update re:3D profiles" (#13750) added the tuned "@0.4/@0.8 nozzle" and "@0.8/@1.75 nozzle" variants but kept the five original un-suffixed presets, trimming each to a stub that overrides only filament_vendor while still claiming every printer of both nozzles. On any re3D printer the stub was selectable alongside the ~50-key variant that actually tunes the material, which is what forced five filament_id salt splits to keep the pair apart. Drop the stubs. The variants already carry the products' ids, so nothing is re-minted; renamed_from redirects each retired name to the smaller-nozzle variant, and "re3D rPETG @0.8 nozzle" additionally takes over the "re3D Greengate rPETG" mapping that lived on the deleted umbrella. Each printer model's default_materials now lists the variants for its own nozzles rather than the stub. --- resources/profiles/re3D.json | 22 +--------- .../re3D/filament/re3D PC @0.4 nozzle.json | 1 + resources/profiles/re3D/filament/re3D PC.json | 23 ----------- .../re3D/filament/re3D PETG @0.4 nozzle.json | 1 + .../profiles/re3D/filament/re3D PETG.json | 23 ----------- .../re3D/filament/re3D PLA @0.4 nozzle.json | 1 + .../profiles/re3D/filament/re3D PLA.json | 23 ----------- .../re3D/filament/re3D rPETG @0.8 nozzle.json | 2 +- .../profiles/re3D/filament/re3D rPETG.json | 24 ----------- .../re3D/filament/re3D rPP @0.8 nozzle.json | 1 + .../profiles/re3D/filament/re3D rPP.json | 23 ----------- .../machine/re3D Gigabot 4 0.4 nozzle.json | 2 +- .../machine/re3D Gigabot 4 0.8 nozzle.json | 2 +- .../re3D Gigabot 4 XLT 0.4 nozzle.json | 2 +- .../re3D Gigabot 4 XLT 0.8 nozzle.json | 2 +- .../re3D/machine/re3D Gigabot 4 XLT.json | 2 +- .../profiles/re3D/machine/re3D Gigabot 4.json | 2 +- .../re3D/machine/re3D GigabotX 2 XLT.json | 2 +- .../re3D/machine/re3D GigabotX 2.json | 2 +- .../machine/re3D Terabot 4 0.4 nozzle.json | 2 +- .../machine/re3D Terabot 4 0.8 nozzle.json | 2 +- .../profiles/re3D/machine/re3D Terabot 4.json | 2 +- .../re3D/machine/re3D TerabotX 2.json | 2 +- scripts/filament_id_snapshot.json | 40 ------------------- 24 files changed, 18 insertions(+), 190 deletions(-) delete mode 100644 resources/profiles/re3D/filament/re3D PC.json delete mode 100644 resources/profiles/re3D/filament/re3D PETG.json delete mode 100644 resources/profiles/re3D/filament/re3D PLA.json delete mode 100644 resources/profiles/re3D/filament/re3D rPETG.json delete mode 100644 resources/profiles/re3D/filament/re3D rPP.json diff --git a/resources/profiles/re3D.json b/resources/profiles/re3D.json index 9a00807c1a..7a66cb4ce1 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,7 +1,7 @@ { "name": "re3D", "url": "", - "version": "03.00.09", + "version": "03.00.10", "force_update": "0", "description": "re3D configurations", "machine_model_list": [ @@ -93,26 +93,6 @@ "name": "fdm_filament_pc", "sub_path": "filament/fdm_filament_pc.json" }, - { - "name": "re3D PLA", - "sub_path": "filament/re3D PLA.json" - }, - { - "name": "re3D PETG", - "sub_path": "filament/re3D PETG.json" - }, - { - "name": "re3D PC", - "sub_path": "filament/re3D PC.json" - }, - { - "name": "re3D rPETG", - "sub_path": "filament/re3D rPETG.json" - }, - { - "name": "re3D rPP", - "sub_path": "filament/re3D rPP.json" - }, { "name": "re3D PLA @0.4 nozzle", "sub_path": "filament/re3D PLA @0.4 nozzle.json" diff --git a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json index 518e61bb32..aa4a0baa91 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "re3D PC @0.4 nozzle", "from": "system", + "renamed_from": "re3D PC", "instantiation": "true", "inherits": "fdm_filament_pc", "filament_id": "OFU3QXL7", diff --git a/resources/profiles/re3D/filament/re3D PC.json b/resources/profiles/re3D/filament/re3D PC.json deleted file mode 100644 index dbd43758de..0000000000 --- a/resources/profiles/re3D/filament/re3D PC.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_id": "OFwbsgWj", - "setting_id": "eSR00TZTotTvJs8l", - "filament_settings_id": [ - "re3D PC" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json index 19c315897a..444fa42c55 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "re3D PETG @0.4 nozzle", "from": "system", + "renamed_from": "re3D PETG", "instantiation": "true", "inherits": "fdm_filament_pet", "filament_id": "OF3F63OE", diff --git a/resources/profiles/re3D/filament/re3D PETG.json b/resources/profiles/re3D/filament/re3D PETG.json deleted file mode 100644 index 273ef5165b..0000000000 --- a/resources/profiles/re3D/filament/re3D PETG.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "filament_id": "OFX0etlv", - "setting_id": "msXDK31R8KOvqNqK", - "filament_settings_id": [ - "re3D PETG" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json index a5a2868975..0314778218 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "re3D PLA @0.4 nozzle", "from": "system", + "renamed_from": "re3D PLA", "instantiation": "true", "inherits": "fdm_filament_pla", "filament_id": "OFRyOsZj", diff --git a/resources/profiles/re3D/filament/re3D PLA.json b/resources/profiles/re3D/filament/re3D PLA.json deleted file mode 100644 index 7637049e80..0000000000 --- a/resources/profiles/re3D/filament/re3D PLA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_id": "OFDdEaoL", - "setting_id": "nPpDwvFg7WQr7K3t", - "filament_settings_id": [ - "re3D PLA" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json index ffe4277113..5bc3c037bf 100644 --- a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "setting_id": "WlELqPVnuL7DaTxs", "name": "re3D rPETG @0.8 nozzle", "from": "system", - "renamed_from": "re3D Greengate rPETG @0.8 nozzle", + "renamed_from": "re3D Greengate rPETG @0.8 nozzle;re3D rPETG;re3D Greengate rPETG", "instantiation": "true", "inherits": "fdm_filament_pet", "nozzle_temperature_initial_layer": [ diff --git a/resources/profiles/re3D/filament/re3D rPETG.json b/resources/profiles/re3D/filament/re3D rPETG.json deleted file mode 100644 index 85f359d828..0000000000 --- a/resources/profiles/re3D/filament/re3D rPETG.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "re3D rPETG", - "from": "system", - "renamed_from": "re3D Greengate rPETG", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "filament_id": "OFD8loeT", - "setting_id": "6aESuJ2S2Kogd4Lq", - "filament_settings_id": [ - "re3D rPETG" - ], - "compatible_printers": [ - "re3D GigabotX 2 0.8 nozzle", - "re3D GigabotX 2 XLT 0.8 nozzle", - "re3D TerabotX 2 0.8 nozzle", - "re3D GigabotX 2 1.75 nozzle", - "re3D GigabotX 2 XLT 1.75 nozzle", - "re3D TerabotX 2 1.75 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json index ed12ec1a0d..0b8b99eda1 100644 --- a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json @@ -4,6 +4,7 @@ "setting_id": "i9ii0b7qFYWnkGSq", "name": "re3D rPP @0.8 nozzle", "from": "system", + "renamed_from": "re3D rPP", "instantiation": "true", "inherits": "fdm_filament_pp", "filament_type": [ diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json deleted file mode 100644 index c4d2d776a9..0000000000 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D rPP", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pp", - "filament_id": "OFm8rqoY", - "setting_id": "8PB62qm5Cd3SHLf4", - "filament_settings_id": [ - "re3D rPP" - ], - "compatible_printers": [ - "re3D GigabotX 2 0.8 nozzle", - "re3D GigabotX 2 XLT 0.8 nozzle", - "re3D TerabotX 2 0.8 nozzle", - "re3D GigabotX 2 1.75 nozzle", - "re3D GigabotX 2 XLT 1.75 nozzle", - "re3D TerabotX 2 1.75 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json index d14d3c260e..6ab8f4ed61 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json index 9bc78b36ad..e87cdacef1 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json index 56b4030476..dedb29c3e8 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json index a14e730b30..f34890289c 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json index fcad038e3d..fd7858de60 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4.json b/resources/profiles/re3D/machine/re3D Gigabot 4.json index 642fabc7d8..67531b1214 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json index 99800331d9..1b77360139 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2 XLT_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2.json b/resources/profiles/re3D/machine/re3D GigabotX 2.json index 3a1db130b0..20ec4ff207 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json index d24ba564a2..e57e4058af 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "TB4", "printer_model": "re3D Terabot 4", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "915x0", diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json index 6255e84896..c15ac1f8b9 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "TB4", "printer_model": "re3D Terabot 4", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "915x0", diff --git a/resources/profiles/re3D/machine/re3D Terabot 4.json b/resources/profiles/re3D/machine/re3D Terabot 4.json index 725f67470e..eaca67fba0 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D TerabotX 2.json b/resources/profiles/re3D/machine/re3D TerabotX 2.json index f541a62ad7..177c1e05d0 100644 --- a/resources/profiles/re3D/machine/re3D TerabotX 2.json +++ b/resources/profiles/re3D/machine/re3D TerabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D TerabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 76c078a55d..34eb407ef5 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -1461,14 +1461,6 @@ "filament_type": "PLA", "filament_vendor": "Volumic" }, - "OFD8loeT": { - "filaments": [ - "re3D/re3D rPETG" - ], - "name": "re3D rPETG", - "filament_type": "PETG", - "filament_vendor": "re3D" - }, "OFD9taow": { "filaments": [ "FlyingBear/FlyingBear PLA Hyper" @@ -1578,14 +1570,6 @@ "filament_type": "PLA", "filament_vendor": "Generic" }, - "OFDdEaoL": { - "filaments": [ - "re3D/re3D PLA" - ], - "name": "re3D PLA", - "filament_type": "PLA", - "filament_vendor": "re3D" - }, "OFDe8uyM": { "filaments": [ "OrcaFilamentLibrary/Valment PLA" @@ -4049,14 +4033,6 @@ "filament_type": "PLA", "filament_vendor": "FilAr" }, - "OFX0etlv": { - "filaments": [ - "re3D/re3D PETG" - ], - "name": "re3D PETG", - "filament_type": "PETG", - "filament_vendor": "re3D" - }, "OFX0ycRQ": { "filaments": [ "BBL/Fiberon PA12-CF", @@ -6084,14 +6060,6 @@ "filament_type": "PLA", "filament_vendor": "CoLiDo" }, - "OFm8rqoY": { - "filaments": [ - "re3D/re3D rPP" - ], - "name": "re3D rPP", - "filament_type": "PP", - "filament_vendor": "re3D" - }, "OFmCOW2Y": { "filaments": [ "re3D/re3D rPETG" @@ -7387,14 +7355,6 @@ "filament_type": "PA-GF", "filament_vendor": "Polymaker" }, - "OFwbsgWj": { - "filaments": [ - "re3D/re3D PC" - ], - "name": "re3D PC", - "filament_type": "PC", - "filament_vendor": "re3D" - }, "OFwc74ck": { "filaments": [ "BBL/BETA PLA Matte" From 886d43d37a7eb98db7d090fe8cb8399089800b69 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 7 Sep 2026 16:35:36 +0800 Subject: [PATCH 126/208] Fix Support Fill Cost Thresholds Being Frozen By The First Call (#15564) Fix support fill cost thresholds being frozen by the first call --- src/libslic3r/Fill/FillBase.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 2b307007b8..f4615dc640 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -2467,9 +2467,11 @@ void Fill::connect_base_support(Polylines &&infill_ordered, const std::vector arches = evaluate_support_arches(infill_ordered, graph, spacing, params); - static const double cost_low = line_spacing * 1.3; - static const double cost_high = line_spacing * 2.; - static const double cost_veryhigh = line_spacing * 3.; + // Must not be static: line_spacing varies per call (base vs interface fills differ), + // and a static here would fix these to whichever call ran first, order depending on thread count. + const double cost_low = line_spacing * 1.3; + const double cost_high = line_spacing * 2.; + const double cost_veryhigh = line_spacing * 3.; { std::vector selected; From b394ca891f9faa140dbb0480d50d313252b30e76 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 17:29:38 +0800 Subject: [PATCH 127/208] Retire the superseded Snapmaker PLA-CF preset for the U1 0.4 nozzle "Snapmaker PLA-CF @U1" and "Snapmaker PLA-CF @U1 0.4 nozzle" are the same product on the same printer: both pin "Snapmaker U1 (0.4 nozzle)", and only a filament_id salt split kept them apart. The first came with the original U1 profiles (#10225); the second with the tool-changer rework (#15039), which added the 0.4/0.6/0.8 nozzle variants and left the older preset behind. Drop the older one and re-mint the 0.4 variant onto OFhQf8ou, the id its 0.6 and 0.8 siblings already carry, so the product holds one id across the three nozzles; renamed_from redirects the retired name. Users of the retired preset get the #15039 tuning - 39 keys differ, including nozzle 230 -> 240 C, plate 55 -> 65 C and vitrification 150 -> 45 C - which is what the 0.6 and 0.8 variants already ship. "Snapmaker PLA-CF @U1 base" stays. #15039 orphaned it by having the nozzle variants inherit fdm_filament_pla directly, so it is unreferenced, but it is a base in the vendor's own convention - 10 of the 14 @U1 families with nozzle variants wire them to one - and it holds U1 loading and cooling values the variants never set. Wiring them to it would change slicing output, which is Snapmaker's call to make, not this PR's. Claude-Session: https://claude.ai/code/session_01Q3zm9HuyskkSb4hynviV99 --- resources/profiles/Snapmaker.json | 6 +----- .../filament/Snapmaker PLA-CF @U1 0.4 nozzle.json | 3 ++- .../Snapmaker/filament/Snapmaker PLA-CF @U1.json | 14 -------------- scripts/filament_id_snapshot.json | 8 -------- 4 files changed, 3 insertions(+), 28 deletions(-) delete mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 50aaad2715..0407dca2ec 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.11", + "version": "02.04.00.12", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ @@ -1572,10 +1572,6 @@ "name": "Snapmaker PLA Silk @0.2 nozzle", "sub_path": "filament/Snapmaker PLA Silk @0.2 nozzle.json" }, - { - "name": "Snapmaker PLA-CF @U1", - "sub_path": "filament/Snapmaker PLA-CF @U1.json" - }, { "name": "Snapmaker PLA-CF", "sub_path": "filament/Snapmaker PLA-CF.json" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json index 44aeab2a48..9ce38a9782 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json @@ -3,8 +3,9 @@ "name": "Snapmaker PLA-CF @U1 0.4 nozzle", "inherits": "fdm_filament_pla", "from": "system", + "renamed_from": "Snapmaker PLA-CF @U1", "setting_id": "2INwruC3ZVkBTdUT", - "filament_id": "OFf52D4e", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json deleted file mode 100644 index 9091258467..0000000000 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Snapmaker PLA-CF @U1", - "inherits": "Snapmaker PLA-CF @U1 base", - "from": "system", - "setting_id": "eyNYjz24xQYyAQcv", - "instantiation": "true", - "compatible_printers": [ - "Snapmaker U1 (0.4 nozzle)" - ], - "filament_retract_length_toolchange": [ - "5" - ] -} diff --git a/scripts/filament_id_snapshot.json b/scripts/filament_id_snapshot.json index 34eb407ef5..5b45e5ca7e 100644 --- a/scripts/filament_id_snapshot.json +++ b/scripts/filament_id_snapshot.json @@ -4970,14 +4970,6 @@ "filament_type": "PETG", "filament_vendor": "QIDI" }, - "OFf52D4e": { - "filaments": [ - "Snapmaker/Snapmaker PLA-CF" - ], - "name": "Snapmaker PLA-CF", - "filament_type": "PLA-CF", - "filament_vendor": "Snapmaker" - }, "OFf5awy4": { "filaments": [ "OrcaFilamentLibrary/Eolas Prints PLA Matte" From 8740696e751ab615bb404be86b817f6446666686 Mon Sep 17 00:00:00 2001 From: yw4z Date: Mon, 7 Sep 2026 13:16:31 +0300 Subject: [PATCH 128/208] init --- resources/images/param_add.svg | 12 +-- src/slic3r/GUI/Field.cpp | 108 ++++++-------------------- src/slic3r/GUI/Field.hpp | 7 +- src/slic3r/GUI/OptionsGroup.cpp | 21 +++-- src/slic3r/GUI/PluginPickerDialog.cpp | 81 +++++++++++++------ src/slic3r/GUI/PluginPickerDialog.hpp | 9 ++- 6 files changed, 111 insertions(+), 127 deletions(-) diff --git a/resources/images/param_add.svg b/resources/images/param_add.svg index 71ea5092af..b00140b68a 100644 --- a/resources/images/param_add.svg +++ b/resources/images/param_add.svg @@ -1,8 +1,4 @@ - - - - Layer 1 - - - - + + + + \ No newline at end of file diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 142cf70522..d25106397e 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -2154,6 +2154,7 @@ void PrinterAgentChoice::msw_rescale() void PluginField::BUILD() { auto* panel = new wxPanel(m_parent, wxID_ANY); + panel->SetBackgroundColour(*wxWHITE); wxGetApp().UpdateDarkUI(panel); window = panel; @@ -2196,9 +2197,8 @@ void PluginField::rebuild_ui() m_rows.clear(); m_standalone_add_btn = nullptr; - if (m_values.empty()) { - add_empty_state_row(); - } else { + add_empty_state_row(); + if (!m_values.empty()) { for (size_t i = 0; i < m_values.size(); ++i) add_plugin_row(display_name_for_value(m_values[i]), i == m_values.size() - 1); } @@ -2215,94 +2215,43 @@ void PluginField::rebuild_ui() void PluginField::add_empty_state_row() { - const auto button_size = wxSize(def_width_thinner() * m_em_unit, -1); - auto row_sizer = new wxBoxSizer(wxHORIZONTAL); - - wxTextCtrl* display = new wxTextCtrl(window, wxID_ANY, _L("No plugin selected"), - wxDefaultPosition, wxSize(def_width_wider() * m_em_unit, wxDefaultCoord), - wxTE_READONLY); - display->SetEditable(false); - wxGetApp().UpdateDarkUI(display); - display->SetToolTip(_L("No plugin selected")); - - auto add_btn = new ScalableButton(window, wxID_ANY, "param_add", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(add_btn); - add_btn->SetToolTip(_L("Add plugin")); + auto add_btn = new Button(window, _L("Add plugin"), "param_add", 0, 16); + add_btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_add_clicked(); }); - row_sizer->Add(display, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - row_sizer->Add(add_btn, 0, wxALIGN_CENTER_VERTICAL); - m_main_sizer->Add(row_sizer, 0, wxEXPAND); - - PluginRow row; - row.display = display; - row.add_btn = add_btn; - row.sizer = row_sizer; - m_rows.push_back(row); + m_main_sizer->Add(add_btn, 0, wxEXPAND | wxBOTTOM, window->FromDIP(SidebarProps::ContentMarginV())); m_standalone_add_btn = add_btn; } void PluginField::add_plugin_row(const wxString& value, bool is_last) { - const auto button_size = wxSize(def_width_thinner() * m_em_unit, -1); auto row_sizer = new wxBoxSizer(wxHORIZONTAL); - ScalableButton* select_btn = new ScalableButton(window, wxID_ANY, "search", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(select_btn); - select_btn->SetToolTip(_L("Select plugin")); - - wxTextCtrl* display = new wxTextCtrl(window, wxID_ANY, value, - wxDefaultPosition, wxSize(def_width_wider() * m_em_unit, wxDefaultCoord), - wxTE_READONLY); - display->SetEditable(false); - wxGetApp().UpdateDarkUI(display); + ComboBox* display = new ComboBox(window, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY | CB_NO_DROP_ICON); + display->SetIcon("edit"); display->SetToolTip(get_tooltip_text(value)); - ScalableButton* remove_btn = nullptr; - if (!m_opt.readonly) { - remove_btn = new ScalableButton(window, wxID_ANY, "cross", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(remove_btn); - remove_btn->SetToolTip(_L("Remove plugin")); - } + ScalableButton* remove_btn = new ScalableButton(window, wxID_ANY, "cross", wxEmptyString, + wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); + remove_btn->SetToolTip(_L("Remove plugin")); - ScalableButton* add_btn = nullptr; - if (is_last && !m_opt.readonly) { - add_btn = new ScalableButton(window, wxID_ANY, "param_add", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(add_btn); - add_btn->SetToolTip(_L("Add plugin")); - add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_add_clicked(); }); - } + if (m_opt.readonly) + remove_btn->Disable(); const size_t row_index = m_rows.size(); - select_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_select_clicked(row_index); }); - if (remove_btn) - remove_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_remove_clicked(row_index); }); + display->Bind(wxEVT_LEFT_DOWN, [this, row_index](wxMouseEvent& ) { on_select_clicked(row_index); }); + remove_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_remove_clicked(row_index); }); - row_sizer->Add(select_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - row_sizer->Add(display, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - if (remove_btn) - row_sizer->Add(remove_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - if (add_btn) - row_sizer->Add(add_btn, 0, wxALIGN_CENTER_VERTICAL); - else if (!m_opt.readonly) { - // Reserve space equal to the add button so all rows align. - row_sizer->Add(button_size.GetWidth(), button_size.GetHeight(), 0, wxALIGN_CENTER_VERTICAL); - } + row_sizer->Add(display , 1, wxALIGN_CENTER_VERTICAL); + row_sizer->Add(remove_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, window->FromDIP(SidebarProps::ElementSpacing())); - const int bottom_gap = is_last ? 0 : 4; - m_main_sizer->Add(row_sizer, 0, wxEXPAND | (bottom_gap > 0 ? wxBOTTOM : 0), bottom_gap); + m_main_sizer->Add(row_sizer, 0, wxEXPAND | wxBOTTOM, window->FromDIP(is_last ? SidebarProps::ContentMarginV() : 4)); PluginRow row; - row.select_btn = select_btn; row.display = display; row.remove_btn = remove_btn; - row.add_btn = add_btn; row.sizer = row_sizer; m_rows.push_back(row); } @@ -2354,9 +2303,9 @@ void PluginField::on_add_clicked() m_values.push_back(selected); m_value = m_values; - rebuild_ui(); - - on_change_field(); + // Defer: don't destroy the clicked button from inside its own handler. + if(window) + window->CallAfter([this]() {rebuild_ui(); on_change_field();}); } void PluginField::on_remove_clicked(size_t index) @@ -2367,8 +2316,9 @@ void PluginField::on_remove_clicked(size_t index) m_values.erase(m_values.begin() + index); m_value = m_values; - rebuild_ui(); - on_change_field(); + // Defer: don't destroy the clicked button from inside its own handler. + if(window) + window->CallAfter([this]() {rebuild_ui(); on_change_field();}); } wxString PluginField::get_row_value(size_t index) const @@ -2382,7 +2332,7 @@ void PluginField::set_row_value(size_t index, const wxString& value) { if (index >= m_rows.size() || !m_rows[index].display) return; - m_rows[index].display->ChangeValue(value); + m_rows[index].display->SetValue(value); m_rows[index].display->SetToolTip(get_tooltip_text(value)); } @@ -2425,14 +2375,10 @@ boost::any& PluginField::get_value() void PluginField::enable() { for (auto& row : m_rows) { - if (row.select_btn) - row.select_btn->Enable(); if (row.display) row.display->Enable(); if (row.remove_btn) row.remove_btn->Enable(); - if (row.add_btn) - row.add_btn->Enable(); } if (m_standalone_add_btn) m_standalone_add_btn->Enable(); @@ -2441,14 +2387,10 @@ void PluginField::enable() void PluginField::disable() { for (auto& row : m_rows) { - if (row.select_btn) - row.select_btn->Disable(); if (row.display) row.display->Disable(); if (row.remove_btn) row.remove_btn->Disable(); - if (row.add_btn) - row.add_btn->Disable(); } if (m_standalone_add_btn) m_standalone_add_btn->Disable(); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 5d5d549427..6773d7a3f4 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -25,6 +25,7 @@ #include "wxExtensions.hpp" #include "Widgets/SpinInput.hpp" #include "Widgets/TextInput.hpp" +#include "Widgets/ComboBox.hpp" #ifdef __WXMSW__ #define wxMSW true @@ -532,10 +533,8 @@ public: private: struct PluginRow { - ScalableButton* select_btn { nullptr }; - wxTextCtrl* display { nullptr }; + ComboBox* display { nullptr }; ScalableButton* remove_btn { nullptr }; - ScalableButton* add_btn { nullptr }; wxBoxSizer* sizer { nullptr }; }; @@ -553,7 +552,7 @@ private: wxBoxSizer* m_main_sizer { nullptr }; std::vector m_rows; std::vector m_values; - ScalableButton* m_standalone_add_btn { nullptr }; + Button* m_standalone_add_btn { nullptr }; std::function m_selector; }; diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 25c13c4b8d..7d63556eff 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -698,10 +698,15 @@ std::string OptionsGroup::pick_plugin(const ConfigOptionDef& opt) Slic3r::PluginManager& manager = Slic3r::PluginManager::instance(); const Slic3r::PluginCapabilityType plugin_type = Slic3r::plugin_capability_type_from_string(opt.plugin_type); if (plugin_type == Slic3r::PluginCapabilityType::Unknown) { - const std::string message = opt.plugin_type.empty() - ? "This setting does not specify a plugin capability type." - : "This setting specifies an unrecognized plugin capability type: '" + opt.plugin_type + "'."; - wxMessageBox(from_u8(message), _L("Plugin Selection"), wxOK | wxICON_WARNING, m_parent); + MessageDialog dlg(m_parent, + opt.plugin_type.empty() ? _L("This setting does not specify a plugin capability type.") + : _L("This setting specifies an unrecognized plugin capability type: ") + "'" + opt.plugin_type + "'.", + _L("Plugin Selection"), + wxOK | wxICON_WARNING + ); + dlg.CenterOnParent(); + dlg.ShowModal(); + return {}; } @@ -714,7 +719,13 @@ std::string OptionsGroup::pick_plugin(const ConfigOptionDef& opt) }); if (caps.empty()) { - wxMessageBox(_L("No plugins capabilities available for this type.\nEnable or install some to use."), _L("Plugin Selection"), wxOK | wxICON_INFORMATION, m_parent); + MessageDialog dlg(m_parent, + _L("No plugins capabilities available for this type.\nEnable or install some to use."), + _L("Plugin Selection"), + wxOK | wxICON_INFORMATION + ); + dlg.CenterOnParent(); + dlg.ShowModal(); return {}; } diff --git a/src/slic3r/GUI/PluginPickerDialog.cpp b/src/slic3r/GUI/PluginPickerDialog.cpp index d0c387b0c0..6710b00d16 100644 --- a/src/slic3r/GUI/PluginPickerDialog.cpp +++ b/src/slic3r/GUI/PluginPickerDialog.cpp @@ -9,12 +9,16 @@ #include "GUI.hpp" #include "I18N.hpp" +#include "GUI_App.hpp" + +#include "Widgets/DialogButtons.hpp" + namespace Slic3r { namespace GUI { PluginPickerDialog::PluginPickerDialog(wxWindow* parent, const wxString& plugin_type_label, const std::vector& plugins) - : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) + : DPIDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_plugins(plugins) , m_capability_mode(false) { @@ -25,7 +29,7 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, PluginPickerDialog::PluginPickerDialog(wxWindow* parent, const wxString& plugin_type_label, std::vector capabilities) - : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) + : DPIDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_capabilities(std::move(capabilities)) , m_capability_mode(true) { @@ -35,12 +39,18 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, void PluginPickerDialog::build_ui(const wxString& plugin_type_label) { + SetBackgroundColour(*wxWHITE); + const bool has_plugins = !m_plugins.empty(); auto* top_sizer = new wxBoxSizer(wxVERTICAL); auto* info_text = new wxStaticText(this, wxID_ANY, wxString::Format(_L("Choose a %s plugin from the list below."), plugin_type_label)); - top_sizer->Add(info_text, 0, wxALL | wxEXPAND, 10); + info_text->SetFont(Label::Body_14); + info_text->SetForegroundColour(wxColour("#363636")); + top_sizer->Add(info_text, 0, wxALL | wxEXPAND, FromDIP(10)); + + top_sizer->AddSpacer(FromDIP(5)); wxArrayString choices; choices.reserve(m_plugins.size()); @@ -51,54 +61,69 @@ void PluginPickerDialog::build_ui(const wxString& plugin_type_label) choices.Add(label); } - m_choice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices); + m_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + for (const wxString &opt : choices) { m_choice->Append(opt); } + if (has_plugins) { m_choice->SetSelection(0); - m_choice->Bind(wxEVT_CHOICE, [this](wxCommandEvent& evt) { + m_choice->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { update_description(evt.GetSelection()); }); } else { m_choice->Enable(false); } - top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, 10); + top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(10)); m_description = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_description->SetFont(Label::Body_14); + m_description->SetForegroundColour(wxColour("#363636")); m_description->Wrap(400); - top_sizer->Add(m_description, 0, wxALL | wxEXPAND, 10); + top_sizer->Add(m_description, 0, wxALL | wxEXPAND, FromDIP(10)); if (has_plugins) update_description(0); else m_description->SetLabel(_L("No plugins found for this type.")); - auto* button_sizer = new wxStdDialogButtonSizer(); - auto* ok_button = new wxButton(this, wxID_OK); - ok_button->Enable(has_plugins); - button_sizer->AddButton(ok_button); - button_sizer->AddButton(new wxButton(this, wxID_CANCEL)); - button_sizer->Realize(); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); - top_sizer->Add(button_sizer, 0, wxALL | wxALIGN_RIGHT, 10); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_OK); }); + dlg_btns->GetOK()->Enable(has_plugins); + + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); + + top_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(top_sizer); + + wxGetApp().UpdateDlgDarkUI(this); } void PluginPickerDialog::build_capability_ui(const wxString& plugin_type_label) { + SetBackgroundColour(*wxWHITE); + const bool has_capabilities = !m_capabilities.empty(); auto* top_sizer = new wxBoxSizer(wxVERTICAL); auto* info_text = new wxStaticText(this, wxID_ANY, wxString::Format(_L("Choose a %s plugin from the list below."), plugin_type_label)); - top_sizer->Add(info_text, 0, wxALL | wxEXPAND, 10); + info_text->SetFont(Label::Body_14); + info_text->SetForegroundColour(wxColour("#363636")); + + top_sizer->Add(info_text, 0, wxALL | wxEXPAND, FromDIP(10)); + + top_sizer->AddSpacer(FromDIP(5)); wxArrayString choices; choices.reserve(m_capabilities.size()); for (const auto& cap : m_capabilities) choices.Add(cap.label); - m_choice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices); + m_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + for (const wxString &opt : choices) { m_choice->Append(opt); } + if (has_capabilities) { m_choice->SetSelection(0); m_choice->Bind(wxEVT_CHOICE, [this](wxCommandEvent& evt) { @@ -108,27 +133,31 @@ void PluginPickerDialog::build_capability_ui(const wxString& plugin_type_label) m_choice->Enable(false); } - top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, 10); + top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(10)); m_description = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_description->SetFont(Label::Body_14); + m_description->SetForegroundColour(wxColour("#363636")); m_description->Wrap(400); - top_sizer->Add(m_description, 0, wxALL | wxEXPAND, 10); + top_sizer->Add(m_description, 0, wxALL | wxEXPAND, FromDIP(10)); if (has_capabilities) update_capability_description(0); else m_description->SetLabel(_L("No plugins found for this type.")); - auto* button_sizer = new wxStdDialogButtonSizer(); - auto* ok_button = new wxButton(this, wxID_OK); - ok_button->Enable(has_capabilities); - button_sizer->AddButton(ok_button); - button_sizer->AddButton(new wxButton(this, wxID_CANCEL)); - button_sizer->Realize(); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); - top_sizer->Add(button_sizer, 0, wxALL | wxALIGN_RIGHT, 10); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_OK); }); + dlg_btns->GetOK()->Enable(has_capabilities); + + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); + + top_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(top_sizer); + + wxGetApp().UpdateDlgDarkUI(this); } PluginPickerDialog::CapabilityEntry PluginPickerDialog::selected_capability() const @@ -187,4 +216,6 @@ void PluginPickerDialog::update_description(int selection) Layout(); } +void PluginPickerDialog::on_dpi_changed(const wxRect &suggested_rect) {} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PluginPickerDialog.hpp b/src/slic3r/GUI/PluginPickerDialog.hpp index 0d676eb04d..ee0f64b818 100644 --- a/src/slic3r/GUI/PluginPickerDialog.hpp +++ b/src/slic3r/GUI/PluginPickerDialog.hpp @@ -11,9 +11,12 @@ #include "slic3r/plugin/PluginManager.hpp" +#include "GUI_Utils.hpp" +#include "Widgets/ComboBox.hpp" + namespace Slic3r { namespace GUI { -class PluginPickerDialog : public wxDialog +class PluginPickerDialog : public DPIDialog { public: // Entry for capability-level selection (plugin_type non-empty path). @@ -40,13 +43,15 @@ public: // Returns the {plugin_key, name} of the selected capability (capability path). CapabilityEntry selected_capability() const; + void on_dpi_changed(const wxRect &suggested_rect) override; + private: void build_ui(const wxString& plugin_type_label); void build_capability_ui(const wxString& plugin_type_label); void update_description(int selection); void update_capability_description(int selection); - wxChoice* m_choice { nullptr }; + ComboBox* m_choice { nullptr }; wxStaticText* m_description { nullptr }; std::vector m_plugins; std::vector m_capabilities; From fcb128c51b424976ca262fb6ed9af91129107171 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Mon, 7 Sep 2026 05:57:09 -0500 Subject: [PATCH 129/208] Fix Traditional Chinese language selection (#15567) Use the zh_TW-specific wxWidgets language enum so the packaged Traditional Chinese catalog passes the Preferences language filter.\n\nFixes #15561 --- src/slic3r/GUI/Preferences.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 355c4a26a8..08483f3100 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -347,7 +347,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS wxLanguage supported_languages[]{ wxLANGUAGE_ENGLISH, wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE, + wxLANGUAGE_CHINESE_TRADITIONAL, wxLANGUAGE_GERMAN, wxLANGUAGE_CZECH, wxLANGUAGE_FRENCH, @@ -407,7 +407,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE_SIMPLIFIED)) { language_name = wxString::FromUTF8("\xe4\xb8\xad\xe6\x96\x87\x28\xe7\xae\x80\xe4\xbd\x93\x29"); } - else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE)) { + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE_TRADITIONAL)) { language_name = wxString::FromUTF8("\xe4\xb8\xad\xe6\x96\x87\x28\xe7\xb9\x81\xe9\xab\x94\x29"); } else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_SPANISH)) { From 9e1b000e7f08531eabd9efb7a932a983a7421438 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 14:53:06 +0800 Subject: [PATCH 130/208] Hold every filament product to exactly one id, with no exceptions filament_id is the plain mint of the product triple (filament_vendor, filament_type, filament name), and nothing else feeds it. The tooling used to accept any salt iteration of a preset's own triple, and its minting policy stepped past ids that other products held in the tree or in the snapshot, so which id a product got could depend on history. Every "salt split" in the tree masked a redundant preset rather than a real need, and no shipped id is salted, so salting goes entirely: no salt parameter, no id policy object, and --generate no longer reads the snapshot. --check now holds every declared and every inherited id to that one value and lists each preset that misses it, variants under a wrong root included, instead of folding them into the root's error. Two products whose triples mint one id is reported as a collision naming both, and --generate refuses to write it; the remedy is a rename so the triples differ. The Bambu catalog map generator keys its rows by the same mint rather than by what the tree already ships. No id changes: all 913 ids in the tree are already the mint of their triple, so --generate is a no-op and the snapshot is untouched. --- docs/HLSD/filament_id.md | 56 +++-- scripts/orca_id_tool.py | 240 ++++++++----------- scripts/tests/test_filament_id.py | 330 ++++++++++++--------------- scripts/tests/test_setting_id.py | 7 +- scripts/update_bambu_filament_ids.py | 63 +---- 5 files changed, 277 insertions(+), 419 deletions(-) diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md index 92d75ca8ca..0aaf845909 100644 --- a/docs/HLSD/filament_id.md +++ b/docs/HLSD/filament_id.md @@ -129,7 +129,7 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame | Color | never a new id | | Second diameter of the same product (1.75 + 2.85) | sibling filament, 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) | +| "High-speed" selectable *alongside* the normal preset on one printer | new name, so a new id (it is a product line) | ## Structure rules @@ -149,7 +149,9 @@ key needed). Tuning a generic material → **join the OrcaFilamentLibrary filame are both the filament `MyBrand PLA`. 3. **Within one filament, variants' `compatible_printers` are pairwise disjoint** — per printer, at most one compatible instantiated preset per id, or AMS matching turns ambiguous. The - C++ validator's `-f` check enforces this. + C++ validator's `-f` check enforces this, tree-wide in CI. Since one product carries one id + and cannot be split onto two, this rule is the *only* remedy for such an ambiguity: narrow + the `compatible_printers`, or retire the preset that duplicates another. 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, and it is what makes its triple — and so its id — the library's) @@ -194,12 +196,17 @@ Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrz by 35 bundles — most by independent declarations converging on the same mint, the rest purely through inheritance from the OFL preset. -On the rare collision with an existing id, the minter salts the input (`…/1`, -`…/2`, …) until free, and the result is frozen in the profile file. Salting is also used -deliberately: a *salt split* keeps two presets of one product on distinct ids where a single -id would be AMS-ambiguous on the same printer — the "selectable alongside" situation from the -table above, resolved without inventing a second filament name. The tooling recognizes salt -iterations of a triple as conformant and preserves such splits across re-mints. +Nothing but the triple feeds the mint — not the rest of the tree, not the snapshot, not what +another preset of the product happens to carry. Determined triple, determined id: one product +carries one id and there is no second acceptable value for it, so any other value on a preset +is a mismatch `--check` reports and `--generate` pulls back. Two *different* products whose +triples mint the same base62 value would be a collision (a roughly 36-bit id space against a +few thousand products); nothing salts past it: `--check` reports it naming both products, +`--generate` refuses to write it, and the remedy is a rename so their triples differ. Where +two presets of one product would be AMS-ambiguous on a printer, the fix is likewise in the +profiles — make their `compatible_printers` disjoint (structure rule 3), retire the redundant +preset, or, if they really are different products, give them different names so their triples +differ. Never a second id for one triple. Workflow for a new filament: @@ -217,10 +224,10 @@ python scripts/orca_extra_profile_check.py # 6. ...and everything else CI `(filament_vendor, filament_type, filament name)` triple: it inserts one where an instantiated filament resolves none, and re-derives one that does not match. A preset that *inherits* a mismatching id is the one case left to the author — check 3b names it, and the fix is to inherit -a preset of the same filament or to give the preset its own key. It converges on an id the same -product already holds and salts only past ids *other* products hold, so an id already equal to a -salt iteration of its own triple is left alone and deliberate salt splits survive. The same run -assigns `generate_preset_setting_id(vendor, type, name)` to every instantiated filament, process +a preset of the same filament or to give the preset its own key. A declaration is left alone +exactly when it already equals the one id its triple mints, and a collision (check 3d) is +reported and left unwritten. The same run assigns +`generate_preset_setting_id(vendor, type, name)` to every instantiated filament, process and machine preset of every vendor except BBL, which keeps its authoritative `G*` ids, strips `setting_id` from base profiles, and fixes the misspelled `settings_id` key — dropped, or, for BBL, whose ids have no formula to fall back on, restored under the correct name. It is idempotent and @@ -231,9 +238,9 @@ check CI runs over both id kinds, of which `--check` is the `filament_id` half. - `--filament-id` limits the run to `filament_id`. - `--setting-id` limits the run to `setting_id`. The two exclude each other; pass neither to write both. -- `--vendor VENDOR` confines the run to that bundle; repeatable. The ids are still derived - tree-wide, so a narrowed run writes exactly what a full one would — and reports any duplicate - it was not allowed to clear, since only a run covering both bundles can. +- `--vendor VENDOR` confines the run to that bundle; repeatable. The id is a function of the + triple alone, so a narrowed run writes exactly what a full one would; `--check` reports + whatever it left outside. - `--dry-run` reports what `--generate` would do and writes nothing; with no mode of its own it implies `--generate`, so `--dry-run --vendor ` previews just that bundle. - `--profiles DIR` points the tooling at a different profile tree (default @@ -309,10 +316,10 @@ one-to-one in both directions. it from **BambuStudio's own shipped BBL bundle** — a sparse shallow clone of upstream `master`, or `--bambustudio-dir `. Our BBL bundle is a fork of Bambu's, tuned and extended independently, so it is not the source of truth for Bambu's ids. -A row's key is whatever id our tree already mints for that same -`(filament_vendor, filament_type, filament name)` triple; a product we do not ship gets a freshly -generated key and the row sits inert until some bundle claims that triple — `OFdyfQvU` / -`GFG03`, "Bambu PETG Matte", is such a row today. +A row's key is the id the product's `(filament_vendor, filament_type, filament name)` triple +mints — the same id any bundle of ours carries for it, since the id is a function of the triple +alone; the row of a product we do not ship sits inert until some bundle claims that triple — +`OFdyfQvU` / `GFG03`, "Bambu PETG Matte", is such a row today. **Regenerate it in the same commit as every BBL profile sync**, and read the drift report it prints. Two lines, both informational, neither blocking the write: @@ -437,11 +444,12 @@ The checks, in brief: its snapshot entry, both directions: any `filament_vendor`/`filament_type`/name change surfaces as a snapshot diff. - **Identity** — the id is a function of the triple alone. A declared `OF*` id must equal the - mint (or a low salt iteration) of its declarer's own triple; the id an instantiated preset - *inherits* must equal the mint of *its* own triple, however it inherits it (a root, a real - filament, a library preset — structure rule 1); and every instantiated system filament must - resolve an effective id at all (recall: an id-less one is a hard load error in C++ that - discards the whole vendor bundle). The errors print the expected id. + one id its declarer's own triple mints, with no second acceptable value; the id an + instantiated preset *inherits* must equal the mint of *its* own triple, however it inherits + it (a root, a real filament, a library preset — structure rule 1); and every instantiated + system filament must resolve an effective id at all (recall: an id-less one is a hard load + error in C++ that discards the whole vendor bundle); and no two products mint one id (a + base62 collision, resolved by renaming one of them). The errors print the expected id. - **Reserved namespaces** — `GF*`, `QD_*`, `P<7-hex>` or `"null"` claimed by any vendor, BBL and Qidi included. - **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and diff --git a/scripts/orca_id_tool.py b/scripts/orca_id_tool.py index 8d08bde4ab..956aec3569 100755 --- a/scripts/orca_id_tool.py +++ b/scripts/orca_id_tool.py @@ -24,8 +24,11 @@ filament_id policy (see docs/HLSD/filament_id.md): filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, "filament_product///") ) 8 chars total, which satisfies the AMS length limit. Nobody invents ids by - hand; on the astronomically rare collision with another product's id the - input is salted ("/1", "/2", ...) until free and the result is frozen in file. + hand, and nothing but the triple feeds the mint — not the rest of the tree, + not the snapshot. Two products whose triples mint one id (a base62 + collision; odds ~1e-5 over the whole tree) is an error --check reports and + --generate refuses to write; the remedy is a rename so the triples differ, + never a salted or hand-picked second id. Identity changes (a filament rename, a filament_vendor/filament_type fix) change the id BY DESIGN. * Reserved id spaces that are never minted into or altered: @@ -120,8 +123,6 @@ USER_CUSTOM_ID_RE = re.compile(r"^P[0-9A-Fa-f]{7}$", re.IGNORECASE) # Filament 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?@.*$") -# Salt iterations accepted by the identity check (check 3). -MAX_CHECK_SALT = 8 # A JSON string literal, for the byte-preserving key edits. _JSON_STR = r'"(?:[^"\\]|\\.)*"' @@ -190,43 +191,20 @@ def base_name(name): return BASE_NAME_RE.sub("", name, count=1) -def generate_filament_id(filament_vendor, filament_type, filament_name, salt=0): +def generate_filament_id(filament_vendor, filament_type, filament_name): """Deterministic "OF" + 6-char base62 filament_id for a filament product. - input = "filament_product///" - (+ "/" 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. + The triple is the only input: no salt, no state, no second value. + input = "filament_product///"; + 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_product/{filament_vendor}/{filament_type}/{filament_name}" - if salt: - key = f"{key}/{salt}" u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) return "OF" + _base62_tail(int.from_bytes(u.bytes, "big"), FILAMENT_ID_LENGTH) -def mint_filament_id(filament_vendor, filament_type, filament_name, taken): - """Mint the product's id: the first salt iteration not in `taken`. - - Bounded by MAX_CHECK_SALT, the last iteration the identity check accepts, so - the tool can never write an id its own --check would reject. Exhausting it - would take nine base62 collisions on one triple; it means something is wrong - with `taken`, not that a tenth salt is needed. - """ - for salt in range(MAX_CHECK_SALT + 1): - candidate = generate_filament_id(filament_vendor, filament_type, filament_name, salt) - if candidate not in taken: - return candidate - raise RuntimeError( - f"could not mint a free filament_id for {filament_vendor}/{filament_type}/" - f"{filament_name}: salts 0..{MAX_CHECK_SALT} are all taken") - - -def mint_iterations(triple): - """The ids that count as the mint of `triple`: salt 0..MAX_CHECK_SALT.""" - return {generate_filament_id(*triple, salt=s) for s in range(MAX_CHECK_SALT + 1)} - - # --------------------------------------------------------------------------- # Tree loading + loader-faithful effective-id resolution # --------------------------------------------------------------------------- @@ -439,12 +417,15 @@ def analyze_tree(profiles_dir): triples = {} # fid -> set of triples of its declarers declarer_triples = [] # (vendor, rec, fid, triple) per declarer filament_triples = {} # (vendor, filament_name) -> {triple: [declarers]} + mints = {} # minted id -> triples minting it (declarers + instantiated) for vendor, filaments in vendors.items(): occurring = vendor_ids.setdefault(vendor, set()) for rec in filaments.values(): triple = resolve_triple(rec["name"], filaments, ofl_filaments) rec["triple"] = triple + if rec.get("filament_id") or rec["instantiation"]: + mints.setdefault(generate_filament_id(*triple), set()).add(triple) if rec.get("filament_id"): fid = rec["filament_id"] occurring.add(fid) @@ -466,16 +447,6 @@ def analyze_tree(profiles_dir): if not rec.get("filament_id") and OF_ID_RE.match(eff): inherited.append((vendor, rec, eff, triple)) - # Identity (check 3b): an inherited id must be the mint of the preset's - # OWN triple. A declared id is held to the same rule as a declarer (3a), - # and an id whose declarer already fails 3a is reported there once, not - # again under every preset inheriting it. - unminted = {fid for _v, _r, fid, triple in declarer_triples - if OF_ID_RE.match(fid) and fid not in mint_iterations(triple)} - id_mismatches = [ - (vendor, rec, eff, triple) for vendor, rec, eff, triple in inherited - if eff not in unminted and eff not in mint_iterations(triple)] - # Cross-bundle triple divergence (check 5, warning only): the same filament # name declared in several bundles with different triples cannot converge # on one id until the divergence is fixed. @@ -495,12 +466,13 @@ def analyze_tree(profiles_dir): "vendor_ids": vendor_ids, "declared_ids": declared_ids, "missing_effective": sorted(missing_effective), - "id_mismatches": id_mismatches, + "inherited": inherited, "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, - "triple_sets": triples, "declarer_triples": declarer_triples, "filament_triples": filament_triples, "cross_bundle_triples": cross_bundle_triples, + # id -> the products (triples) minting it, where there is more than one + "collisions": {fid: sorted(ts) for fid, ts in mints.items() if len(ts) > 1}, } @@ -580,12 +552,14 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 2. Snapshot equality, both directions: every id in the tree, the filaments claiming it and the triple its declarers resolve must equal the snapshot entry exactly (the snapshot diff is the maintainer gate). - 3. Identity: the id is a function of the triple alone. (a) A declared id - must equal the mint of the declarer's own triple or a salted iteration; - (b) the id an instantiated preset inherits must equal the mint of ITS - own triple — how it inherits it (a root, a real filament, an OFL - preset) is irrelevant; (c) every instantiated filament resolves an - effective id at all (an id-less one is a hard load error in C++). + 3. Identity: the id is a function of the triple alone, and there is no + second acceptable value. (a) A declared id must equal the one id the + declarer's own triple mints; (b) the id an instantiated preset inherits + must equal the one ITS own triple mints — how it inherits it (a root, a + real filament, an OFL preset) is irrelevant; (c) every instantiated + filament resolves an effective id at all (an id-less one is a hard load + error in C++); (d) no two products mint one id (a base62 collision, + resolved by renaming one of them). 4. Reserved namespaces (GF*/QD_*/P-hex/"null", all ownerless) must not be claimed by any vendor. 5. Triple integrity: (a) every declarer resolves non-empty filament_vendor @@ -664,22 +638,36 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, errors += 1 # -- 3. identity: the id is a function of the triple alone --------------- + # One triple, one id: a declaration must carry exactly the mint of its + # triple, and there is no second acceptable value — not a salt, not a + # hand-picked one, not whatever another preset of the product carries. Two + # presets of one product that would be AMS-ambiguous on a printer are fixed + # in the profiles, by making their compatible_printers disjoint or by + # retiring the redundant one. for vendor, rec, fid, triple in sorted( analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): - if not OF_ID_RE.match(fid) or fid in mint_iterations(triple): - continue + want = generate_filament_id(*triple) + if not OF_ID_RE.match(fid) or fid == want: + continue # a non-OF id is check 1's error print_error( f'filament_id "{fid}" declared by "{rec["name"]}" ({rec["file"]}) does ' f'not match the mint of its triple "{"/".join(triple)}": expected ' - f'"{generate_filament_id(*triple)}" (or a salted iteration); paste the ' - f'expected id, or fix the triple and run "{GENERATE_CMD} --vendor {vendor}" ' - f"(preview with --dry-run), then --update-snapshot") + f'"{want}"; paste the expected id, or fix the triple and run ' + f'"{GENERATE_CMD} --vendor {vendor}" (preview with --dry-run), then ' + f"--update-snapshot") errors += 1 + # (3b) An inherited id is held to the same single value, and every preset + # missing it is listed — a variant under a wrong root as much as a preset + # riding another product's root. Nothing is folded into the declarer's + # error: the report names each preset whose id is wrong. for vendor, rec, eff, triple in sorted( - analysis["id_mismatches"], key=lambda x: (x[0], x[1]["file"])): + analysis["inherited"], key=lambda x: (x[0], x[1]["file"])): + want = generate_filament_id(*triple) + if eff == want: + continue print_error( f'preset "{rec["name"]}" ({rec["file"]}) inherits filament_id "{eff}" but ' - f'its own triple "{"/".join(triple)}" mints "{generate_filament_id(*triple)}"; ' + f'its own triple "{"/".join(triple)}" mints "{want}"; ' f"a preset carries the id of its own product: inherit a preset of the " f"same filament, or declare its own key") errors += 1 @@ -691,7 +679,15 @@ def check_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, 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 "{GENERATE_CMD}" (expected id for filament ' - f'"{vendor}/{base_name(name)}": "{expected}", salted if taken)') + f'"{vendor}/{base_name(name)}": "{expected}")') + errors += 1 + # (3d) The mint is injective over the tree's products, or two of them are + # indistinguishable to every device that matches on the id. + for fid, ts in sorted(analysis["collisions"].items()): + print_error( + f'filament_id "{fid}" is the mint of {len(ts)} different products ' + f'({"; ".join("/".join(t) for t in ts)}): a base62 collision; rename one ' + f"of them so their triples differ") errors += 1 # -- 4. reserved namespaces ---------------------------------------------- @@ -993,75 +989,36 @@ def rewrite_filament_id(path, old_id, new_id, dry_run=False): # --generate # --------------------------------------------------------------------------- -def make_want_id(analysis, snapshot=None): - """Build the id policy: want_id(triple) -> the id that triple must carry. - - A triple's id is its first mint iteration that no OTHER product holds. An id - is blocked when the tree or the snapshot records it under a triple set other - than exactly {triple}, or when this run already handed it to a different - triple. Same-triple reuse is therefore convergence — one product, one id in - every bundle — and salting only ever steps past another product's id. - - Only a CONFORMANT record holds an id: a declaration whose value is not a mint - iteration of its own triple is transient — this run rewrites it — so it must - not block the product that legitimately mints the id it is squatting on. That - also makes the policy independent of which vendors a run writes, so a - --vendor-narrowed run picks the same ids as a full one. - """ - holders = {} # id -> the set of triples that legitimately hold it - for fid, ts in analysis["triple_sets"].items(): - conformant = {t for t in ts if fid in mint_iterations(t)} - if conformant: - holders[fid] = conformant - for fid, entry in (snapshot or {}).get("ids", {}).items(): - triple = tuple(snapshot_triple(entry)) - if fid in mint_iterations(triple): - holders.setdefault(fid, set()).add(triple) - - assigned = {} # triple -> the id chosen for it this run - run_taken = {} # id -> the triple this run gave it to - - def want_id(triple): - if triple not in assigned: - blocked = {fid for fid, ts in holders.items() if ts != {triple}} - blocked |= {fid for fid, t in run_taken.items() if t != triple} - cand = mint_filament_id(*triple, taken=blocked) - assigned[triple] = cand - run_taken[cand] = triple - return assigned[triple] - - return want_id - - def _incomplete_triple(triple): """The name(s) of the empty mint-key fields, or "" when both are present.""" return " and ".join(k for k, v in (("filament_vendor", triple[0]), ("filament_type", triple[1])) if not v) -def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH, - vendors=None, dry_run=False, changed_paths=None): +def generate_filament_ids(profiles_dir=PROFILES_DIR, vendors=None, dry_run=False, + changed_paths=None): """Make every filament carry the id its own triple mints. One rule, applied to declarations and to id-less filaments alike: - * a declared id that is not a mint iteration of the declarer's own triple — - a wrong OF id, or a foreign one such as a Bambu "GF*" arriving with an - upstream sync — is replaced in place; + * a declared id that is not the one its own triple mints — a wrong OF id, + or a foreign one such as a Bambu "GF*" arriving with an upstream sync — + is replaced in place; * an instantiated filament that resolves no id at all gets one inserted into its root(s): the id-less presets of the SAME filament its members inherit, or the member itself (a parent of another filament cannot carry this filament's id — check 3). - An id already equal to ANY salt iteration of its own triple is conformant - (check 3) and left alone, so deliberate salt splits — distinct presets of one - product kept apart for per-printer AMS matching — survive. + A declaration is left alone exactly when it already equals the one id its + triple mints (check 3). Two products minting one id (check 3d) are reported + and left unwritten: nothing salts past a collision, a rename resolves it. - `vendors` restricts what is WRITTEN; the analysis and the id policy always - span the whole tree, so a narrowed run mints exactly what a full one would. - `changed_paths`, when a set is passed, collects the files that changed. A - file whose layout offers no anchor for the edit is reported and counted as an - error, so one odd profile cannot abort the pass over all the others. - Never touches the snapshot — run --update-snapshot afterwards and review the - diff. Returns (files_changed, errors). + `vendors` restricts what is WRITTEN; the id is a function of the triple + alone, so a narrowed run writes exactly what a full one would, and --check + reports whatever it was not allowed to touch. `changed_paths`, when a set is + passed, collects the files that changed. A file whose layout offers no + anchor for the edit is reported and counted as an error, so one odd profile + cannot abort the pass over all the others. Never reads or touches the + snapshot — run --update-snapshot afterwards and review the diff. Returns + (files_changed, errors). """ _utf8_console() analysis = analyze_tree(profiles_dir) @@ -1080,24 +1037,26 @@ def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH print_error(f'unknown vendor "{v}" in {profiles_dir}') return 0, errors + len(unknown) - want_id = make_want_id(analysis, load_snapshot(snapshot_path)) + colliding = set() # triples no run may write an id for + for fid, ts in sorted(analysis["collisions"].items()): + print_error( + f'cannot write filament_id "{fid}": it is the mint of {len(ts)} different ' + f'products ({"; ".join("/".join(t) for t in ts)}), a base62 collision; ' + f"rename one of them so their triples differ") + errors += 1 + colliding.update(ts) + verb = "would " if dry_run else "" files_changed = 0 reminted = 0 inserted = 0 - held_here = set() # ids the filaments this run may write legitimately hold - left_standing = {} # id -> files still declaring one non-conformantly # 1. Declarations that are not the mint of their own triple. for vendor, rec, fid, triple in sorted( analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): - in_scope = wanted is None or vendor in wanted - if fid in mint_iterations(triple): - if in_scope: - held_here.add(fid) - continue - if not in_scope: - left_standing.setdefault(fid, []).append(rec["file"]) + want = generate_filament_id(*triple) + if (fid == want or (wanted is not None and vendor not in wanted) + or triple in colliding): continue missing = _incomplete_triple(triple) if missing: @@ -1106,21 +1065,15 @@ def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH f'{missing}; the mint key needs both (generic materials use ' f'filament_vendor "Generic")') errors += 1 - left_standing.setdefault(fid, []).append(rec["file"]) - continue - want = want_id(triple) - if fid == want: continue try: rewrite_filament_id(rec["path"], fid, want, dry_run) except (OSError, RuntimeError, ValueError) as e: print_error(str(e)) errors += 1 - left_standing.setdefault(fid, []).append(rec["file"]) continue files_changed += 1 reminted += 1 - held_here.add(want) if changed_paths is not None: # Index sub_paths are "/"-joined even on Windows, where the # setting_id pass reaches the same file through os.walk: normalize @@ -1166,6 +1119,8 @@ def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH errors += 1 continue triple = (*next(iter(fields)), filament_name) + if triple in colliding: + continue # reported above missing = _incomplete_triple(triple) if missing: print_error( @@ -1174,7 +1129,7 @@ def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH f'filament_vendor "Generic")') errors += 1 continue - new_id = want_id(triple) + new_id = generate_filament_id(*triple) for name in sorted(roots): root = roots[name] try: @@ -1185,24 +1140,11 @@ def generate_filament_ids(profiles_dir=PROFILES_DIR, snapshot_path=SNAPSHOT_PATH continue files_changed += 1 inserted += 1 - held_here.add(new_id) if changed_paths is not None: changed_paths.add(os.path.normpath(root["path"])) print_info(f'{verb}insert filament "{vendor}/{filament_name}": filament_id ' f'"{new_id}" -> {root["file"]}') - # A declaration that is not the mint of its own triple holds no id, so it - # never blocks the product the id belongs to — that is what makes a narrowed - # run mint exactly what a full one would. When the run is not allowed to - # rewrite that declaration, though, it stays behind on an id just handed to - # its rightful owner, and only a run that covers both can clear it. - for fid in sorted(held_here & set(left_standing)): - print_error( - f'filament_id "{fid}" belongs to a filament this run covers but is also ' - f'declared by {", ".join(sorted(left_standing[fid]))}, which it did not ' - f'rewrite; run "{GENERATE_CMD}" over both to clear the duplicate') - errors += 1 - print_info(f"filament_ids inserted : {inserted}") print_info(f"filament_ids re-minted : {reminted}") return files_changed, errors @@ -1376,10 +1318,10 @@ def build_parser(): narrow.add_argument("--setting-id", action="store_true", help="write setting_id only, skipping filament_id") narrow.add_argument("--vendor", metavar="VENDOR", action="append", default=[], - help="write only in this vendor bundle; repeatable. The ids are " - "still derived tree-wide, so a narrowed run writes exactly " - "what a full one would, and reports what it was not allowed " - "to fix") + help="write only in this vendor bundle; repeatable. The id is a " + "function of the triple alone, so a narrowed run writes " + "exactly what a full one would; --check reports whatever " + "it left outside") parser.add_argument("--dry-run", "--dryrun", dest="dry_run", action="store_true", help="report what would change and write nothing; with no mode of " "its own it previews --generate") @@ -1462,7 +1404,7 @@ def main(argv=None): filament_files = errors = 0 if do_filament: filament_files, e = generate_filament_ids( - args.profiles, snapshot_path, vendors, args.dry_run, changed) + args.profiles, vendors, args.dry_run, changed) errors += e if do_setting: _n, e = generate_setting_ids(args.profiles, vendors, args.dry_run, changed) diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py index b7646c4b64..3e7a6d2aec 100644 --- a/scripts/tests/test_filament_id.py +++ b/scripts/tests/test_filament_id.py @@ -155,15 +155,13 @@ class SyntheticTree: def assign(self, vendors=None, dry_run=False): buf = io.StringIO() with contextlib.redirect_stdout(buf): - changed, errors = afi.generate_filament_ids( - self.profiles, self.snapshot, vendors, dry_run) + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) return changed, errors, buf.getvalue() def remint(self, vendors, dry_run=False): buf = io.StringIO() with contextlib.redirect_stdout(buf): - changed, errors = afi.generate_filament_ids( - self.profiles, self.snapshot, vendors, dry_run) + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) return changed, errors, buf.getvalue() def cli(self, *flags): @@ -240,8 +238,6 @@ class TestMint(unittest.TestCase): # layout ("filament_product///") and base62 tail. self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA"), "OF5CgdDq") - self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA", - salt=1), "OFD9mV8H") self.assertEqual(afi.generate_filament_id("Generic", "PLA", "Generic PLA"), "OFDSrzZ8") @@ -262,95 +258,6 @@ class TestMint(unittest.TestCase): self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PETG", "PolyLite PLA")) self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA Pro")) - def test_salt_changes_id(self): - base = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") - salted = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA", salt=1) - self.assertNotEqual(base, salted) - self.assertRegex(salted, r"^OF[0-9A-Za-z]{6}$") - - def test_mint_salt_iteration(self): - triple = ("Polymaker", "PLA", "PolyLite PLA") - taken = {afi.generate_filament_id(*triple, salt=s) for s in range(2)} - self.assertEqual(afi.mint_filament_id(*triple, taken), - afi.generate_filament_id(*triple, salt=2)) - self.assertEqual(afi.mint_filament_id(*triple, set()), - afi.generate_filament_id(*triple)) - - def test_mint_never_returns_a_salt_the_identity_check_rejects(self): - # mint_filament_id stops at MAX_CHECK_SALT, the last iteration check 3 - # accepts, so the tool can never write an id its own --check rejects. - triple = ("Polymaker", "PLA", "PolyLite PLA") - all_taken = afi.mint_iterations(triple) - self.assertEqual(len(all_taken), afi.MAX_CHECK_SALT + 1) - last = afi.mint_filament_id(*triple, all_taken - {afi.generate_filament_id( - *triple, salt=afi.MAX_CHECK_SALT)}) - self.assertIn(last, afi.mint_iterations(triple)) - with self.assertRaises(RuntimeError): - afi.mint_filament_id(*triple, all_taken) - - def test_want_id_policy(self): - # The whole id policy: a triple's id is its first mint iteration that no - # OTHER product holds, in the tree or in the snapshot. - triple = ("Polymaker", "PLA", "PolyLite PLA") - other = ("Elegoo", "PETG", "Rapid PETG") - salt0 = afi.generate_filament_id(*triple) - salt1 = afi.generate_filament_id(*triple, salt=1) - - def snapshot(**entries): - return {"ids": {fid: {"filaments": [], "name": t[2], - "filament_type": t[1], "filament_vendor": t[0]} - for fid, t in entries.items()}} - - # nobody holds it: salt 0 - self.assertEqual(afi.make_want_id({"triple_sets": {}})(triple), salt0) - # the tree holds it under this very triple: reuse is convergence - self.assertEqual( - afi.make_want_id({"triple_sets": {salt0: {triple}}})(triple), salt0) - # Another triple "holds" it, but salt0 is not a mint iteration of THAT - # triple, so the holder is a wrong declaration this very run rewrites. - # A transient squatter must not push a product off its own id. - self.assertEqual( - afi.make_want_id({"triple_sets": {salt0: {other}}})(triple), salt0) - self.assertEqual( - afi.make_want_id({"triple_sets": {salt0: {triple, other}}})(triple), salt0) - # The snapshot is read the same way: only a conformant record holds. - self.assertEqual( - afi.make_want_id({"triple_sets": {}}, snapshot(**{salt0: other}))(triple), - salt0) - # ... and the snapshot's own triple reuses it - self.assertEqual( - afi.make_want_id({"triple_sets": {}}, snapshot(**{salt0: triple}))(triple), - salt0) - # Unused here, but salting must still be reachable: see - # test_want_id_salts_past_a_genuine_collision. - self.assertNotEqual(salt0, salt1) - # memoized: one triple keeps one id for the whole run - want_id = afi.make_want_id({"triple_sets": {}}) - self.assertEqual(want_id(triple), want_id(triple)) - # ... and a second triple never gets the id this run already handed out - self.assertNotEqual(want_id(triple), want_id(other)) - - def test_want_id_salts_past_a_genuine_collision(self): - # Salting exists for one case only: two products whose triples mint the - # same id. That needs a base62 collision, so force one — salt 0 of every - # triple collapses to a single value while the salted iterations stay - # distinct. `other` then CONFORMANTLY holds the shared salt-0 id, and - # `triple` must step past it instead of stealing it. - triple = ("V", "PLA", "X") - other = ("W", "ABS", "Y") - real = afi.generate_filament_id - - def colliding(vendor, ftype, name, salt=0): - return "OFcolid" if salt == 0 else real(vendor, ftype, name, salt) - - afi.generate_filament_id = colliding - try: - self.assertIn("OFcolid", afi.mint_iterations(other)) # holder conforms - got = afi.make_want_id({"triple_sets": {"OFcolid": {other}}})(triple) - finally: - afi.generate_filament_id = real - self.assertEqual(got, real(*triple, salt=1)) - class TestBaseName(unittest.TestCase): def test_filament_name_derivation(self): @@ -589,12 +496,13 @@ class TestChecks(OfCleanTreeCase): self.assertIn('which records "AVendor/PLA/APLA"', out) # Sanctioning the new triple is not enough: the old id is no longer its # mint (check 3, nothing grandfathered) — the identity fix is a re-mint, - # reported once on the root, not again under the variant inheriting it. + # reported on the root and again under the variant inheriting it. rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() - self.assertEqual(errors, 1, out) + self.assertEqual(errors, 2, out) self.assertIn("does not match the mint of its triple", out) + self.assertIn('"APLA @P1" (VendorA/filament/APLA @P1.json) inherits filament_id', out) _changed, errors, out = self.t.remint(["VendorA"]) self.assertEqual(errors, 0, out) rc, _out = self.t.update_snapshot() @@ -613,16 +521,6 @@ class TestChecks(OfCleanTreeCase): self.assertIn("does not match the mint of its triple", out) self.assertIn(afi.generate_filament_id("BV", "PLA", "BNEW"), out) - def test_check3_salted_mint_is_accepted(self): - salted = afi.generate_filament_id("BV", "PLA", "BNEW", salt=3) - self.t.write_preset("VendorA", preset("BNEW @base", filament_id=salted, - instantiation=False, - filament_vendor="BV", filament_type="PLA")) - 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 the mint", out) - def test_check3_no_grandfathering_of_a_wrong_declaration(self): # Sanctioning the tree does not excuse a declaration from its mint. self.t.write_preset("VendorA", preset("CNEW @base", filament_id="OFZZZZZZ", @@ -633,8 +531,9 @@ class TestChecks(OfCleanTreeCase): rc, _out = self.t.update_snapshot() self.assertEqual(rc, 0) errors, out = self.t.check() - self.assertEqual(errors, 1, out) + self.assertEqual(errors, 2, out) # the declaration, and the variant inheriting it self.assertIn("does not match the mint of its triple", out) + self.assertIn('"CNEW @P1" (VendorA/filament/CNEW @P1.json) inherits filament_id', out) def test_check3_inherited_id_must_be_the_mint_of_own_triple(self): # A preset of another filament inheriting APLA's root takes APLA's id, @@ -654,6 +553,78 @@ class TestChecks(OfCleanTreeCase): errors, out = self.t.check() self.assertEqual(errors, 1, out) + def test_check3_lists_every_preset_inheriting_a_wrong_id(self): + # A wrong declaration is reported under every preset inheriting it, its + # own product's variant and another product alike: each one's effective + # id is not the mint of its own triple, and each is listed. Nothing is + # folded into the declarer's error. + self.t.write_preset("VendorA", preset("DNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="DV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("DNEW @P1", inherits="DNEW @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Other DNEW @P1", inherits="DNEW @base", + compatible_printers=["P1 0.4 nozzle"])) + errors, out = self.t.check() + self.assertIn("does not match the mint of its triple", out) + self.assertIn('"DNEW @P1" (VendorA/filament/DNEW @P1.json) inherits filament_id', out) + self.assertIn('"Other DNEW @P1" (VendorA/filament/Other DNEW @P1.json) inherits ' + 'filament_id', out) + # The unsanctioned id (check 2), the declaration (3a), and both presets + # inheriting it (3b). + self.assertEqual(errors, 4, out) + + def test_check3_reports_an_inherited_mismatch_even_when_its_own_product_misdeclares_the_id(self): + # "Tuned PLA @P1" inherits APLA's root, so it carries APLA's id: wrong + # for its own product however the declarations around it are fixed. + # That "Tuned PLA @base" — its own product — misdeclares that same id + # is a second error, not a reason to leave the first unreported. + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("Tuned PLA @base", filament_id=apla_id, + instantiation=False, + filament_vendor="AVendor", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="APLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertIn('"Tuned PLA @base" (VendorA/filament/Tuned PLA @base.json) does ' + 'not match the mint of its triple', out) + self.assertIn('"Tuned PLA @P1" (VendorA/filament/Tuned PLA @P1.json) inherits ' + 'filament_id', out) + # The unsanctioned claim and triple (check 2), the declaration (3a) and + # the inherited id (3b): four distinct errors, nothing folded away. + self.assertEqual(errors, 4, out) + + def test_check3_reports_a_collision_between_two_products(self): + # Two products whose triples mint one id is a base62 collision. There + # is no salted or hand-picked second id to fall back on: the check + # names both products, and the remedy is a rename so the triples differ. + collide = {("V", "PLA", "X"), ("W", "ABS", "Y")} + real = afi.generate_filament_id + + def colliding(vendor, ftype, name): + return "OFcolid0" if (vendor, ftype, name) in collide else real(vendor, ftype, name) + + afi.generate_filament_id = colliding + self.addCleanup(setattr, afi, "generate_filament_id", real) + for vendor, ftype, name in sorted(collide): + self.t.write_preset("VendorA", preset(f"{name} @base", filament_id="OFcolid0", + instantiation=False, + filament_vendor=vendor, + filament_type=ftype)) + self.t.write_preset("VendorA", preset(f"{name} @P1", inherits=f"{name} @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertIn("collision", out) + self.assertIn("V/PLA/X", out) + self.assertIn("W/ABS/Y", out) + # Each declaration is the mint of its own triple, so the collision is + # the only identity error — no product is pushed off its id — and the + # unsanctioned id (check 2) is the only other one. + self.assertNotIn("does not match the mint", out) + self.assertNotIn("inherits filament_id", out) + self.assertEqual(errors, 2, out) + def test_check3_renamed_tuned_generic_is_an_identity_error(self): # Riding the OFL generic under another base name: same rule, same error. self.t.write_preset("VendorA", preset("Tuned PLA @P1", @@ -1144,9 +1115,9 @@ class TestAssign(OfCleanTreeCase): self.assertEqual(b2["filament_id"], want) def test_converges_on_an_existing_tree_id_for_the_same_triple(self): - # BEHAVIOUR CHANGE: an id-less filament whose product is already shipped - # (with its conforming id) in another bundle converges on that id - # instead of salting past it. One product, one id, in every bundle. + # An id-less filament whose product is already shipped (with its + # conforming id) in another bundle converges on that id. One product, + # one id, in every bundle. want = afi.generate_filament_id("CV", "PLA", "CPLA") self.t.add_vendor("VendorB", [ preset("CPLA @base", filament_id=want, instantiation=False, @@ -1166,9 +1137,8 @@ class TestAssign(OfCleanTreeCase): def test_a_squatted_id_is_still_minted_for_its_own_product(self): # VendorB's "Other" declares the id that belongs to VendorA's "DPLA" — - # a copy-paste, not a real claim, since it is not the mint of Other's - # own triple. That declaration is transient (--generate rewrites it), so - # it must NOT push DPLA onto a salted id: DPLA gets its canonical one. + # a copy-paste, not a claim. The id is the mint of DPLA's triple and + # nothing else, so DPLA gets it whatever VendorB carries. want0 = afi.generate_filament_id("DV", "PLA", "DPLA") self.t.add_vendor("VendorB", [ preset("Other @base", filament_id=want0, instantiation=False, @@ -1180,27 +1150,51 @@ class TestAssign(OfCleanTreeCase): self.t.write_preset("VendorA", preset("DPLA @P1", inherits="DPLA @base", compatible_printers=["P1"])) changed, errors, out = self.t.assign(["VendorA"]) - # VendorB is outside the write set, so the id DPLA just took is still - # declared there: the run says so rather than leaving a silent duplicate. - self.assertEqual((changed, errors), (1, 1), out) - self.assertIn("declared by VendorB/filament/Other @base.json", out) - # ...and keeps saying so until a run that covers VendorB clears it. - self.assertEqual(self.t.assign(["VendorA"])[:2], (0, 1)) + self.assertEqual((changed, errors), (1, 0), out) root = load_json_file(self.t.preset_path("VendorA", "DPLA @base")) self.assertEqual(root["filament_id"], want0) - # A full run re-mints Other to its own triple and the duplicate is gone. - other = load_json_file(self.t.preset_path("VendorB", "Other @base")) - self.assertEqual(other["filament_id"], want0) - changed, errors, out = self.t.assign() + # VendorB's declaration is VendorB's own mismatch: a run not allowed to + # touch it leaves it to --check, and a run over VendorB re-mints it. + _errors, out = self.t.check() + self.assertIn('"Other @base" (VendorB/filament/Other @base.json) does not match ' + 'the mint of its triple', out) + changed, errors, out = self.t.assign(["VendorB"]) self.assertEqual((changed, errors), (1, 0), out) other = load_json_file(self.t.preset_path("VendorB", "Other @base")) self.assertEqual(other["filament_id"], afi.generate_filament_id("OV", "ABS", "Other")) + def test_generate_refuses_to_write_into_a_collision(self): + # "X" ships on the id its triple mints; a new product "Y" whose triple + # mints the very same id is a base62 collision. The run does not salt + # past it: it reports both products, writes nothing for "Y", and leaves + # the remedy — a rename, so the triples differ — to the author. + collide = {("V", "PLA", "X"), ("W", "ABS", "Y")} + real = afi.generate_filament_id + + def colliding(vendor, ftype, name): + return "OFcolid0" if (vendor, ftype, name) in collide else real(vendor, ftype, name) + + afi.generate_filament_id = colliding + self.addCleanup(setattr, afi, "generate_filament_id", real) + self.t.write_preset("VendorA", preset("X @base", filament_id="OFcolid0", + instantiation=False, + filament_vendor="V", filament_type="PLA")) + self.t.write_preset("VendorA", preset("X @P1", inherits="X @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Y @base", instantiation=False, + filament_vendor="W", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Y @P1", inherits="Y @base", + compatible_printers=["P1"])) + before = self.t.bytes_map() + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 1), out) + self.assertIn("V/PLA/X", out) + self.assertIn("W/ABS/Y", out) + self.assertEqual(self.t.bytes_map(), before) + def test_mismatching_of_declaration_is_re_derived(self): - # BEHAVIOUR CHANGE: the default run used to leave an OF-format id alone - # and needed a separate mode to fix it. One rule now: an id that is not - # a mint iteration of its own triple is rewritten. + # One rule: an id that is not the mint of its own triple is rewritten. self.t.write_preset("VendorA", preset("KNEW @base", filament_id="OFZZZZZZ", instantiation=False, filament_vendor="KV", @@ -1445,20 +1439,19 @@ class TestRemint(SyntheticTreeCase): changed, errors, _out = self.t.remint(["VendorA"]) self.assertEqual((changed, errors), (0, 0)) - def test_salted_declaration_survives_remint(self): - # A deliberate salt split (a second preset of one product kept on its - # own id for per-printer AMS disambiguation) is mint-conformant and - # must not be converged back onto salt 0. - salt1 = afi.generate_filament_id(*self.TRIPLE, salt=1) - self.t.write_preset("VendorA", preset("APLA @legacy", - filament_id=salt1, + def test_second_id_of_one_product_is_converged_by_remint(self): + # A second preset of one product kept on an id of its own is not a + # sanctioned split: the triple determines the id, so --generate pulls it + # back. An AMS ambiguity this exposes is fixed in the profiles instead. + want = afi.generate_filament_id(*self.TRIPLE) + self.t.write_preset("VendorA", preset("APLA @legacy", filament_id="OFlegac1", inherits="APLA @base", compatible_printers=["P2 0.4 nozzle"])) changed, errors, out = self.t.remint(["VendorA"]) self.assertEqual(errors, 0, out) - self.assertEqual(changed, 1) # only the non-conformant AX01 root + self.assertEqual(changed, 2) # the non-conformant AX01 root and @legacy legacy = load_json_file(self.t.preset_path("VendorA", "APLA @legacy")) - self.assertEqual(legacy["filament_id"], salt1) + self.assertEqual(legacy["filament_id"], want) def test_same_triple_converges_within_run(self): self.t.add_vendor("VendorB", [ @@ -1490,22 +1483,24 @@ class TestRemint(SyntheticTreeCase): self.assertEqual(a["filament_id"], want) def test_not_blocked_by_a_non_conformant_occurrence(self): - # VendorB carries APLA's id under a PETG triple of its own, so that - # declaration is wrong and this run's job is to rewrite it. It must not - # cost VendorA's APLA the id its triple actually mints. + # VendorB carries APLA's id under a PETG triple of its own: that + # declaration is wrong, and it costs VendorA's APLA nothing — the id is + # the mint of APLA's triple, whoever else is squatting on it. want0 = afi.generate_filament_id(*self.TRIPLE) self.t.add_vendor("VendorB", [ preset("BPLA @base", filament_id=want0, instantiation=False, filament_vendor="BV", filament_type="PETG"), ]) changed, errors, out = self.t.remint(["VendorA"]) - self.assertEqual((changed, errors), (1, 1), out) - self.assertIn("declared by VendorB/filament/BPLA @base.json", out) + self.assertEqual((changed, errors), (1, 0), out) root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) self.assertEqual(root["filament_id"], want0) - # Widening the run to both bundles clears it. - changed, errors, out = self.t.remint(["VendorA", "VendorB"]) + # A run over VendorB re-mints the squatter to its own triple. + changed, errors, out = self.t.remint(["VendorB"]) self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual( + load_json_file(self.t.preset_path("VendorB", "BPLA @base"))["filament_id"], + afi.generate_filament_id("BV", "PETG", "BPLA")) def test_bbl_is_reminted_like_any_vendor(self): self.t.add_vendor("BBL", [ @@ -1578,8 +1573,7 @@ class TestCli(unittest.TestCase): # Named explicitly, both modes run against that tree. rc, out = self.t.cli("--update-snapshot") self.assertEqual(rc, 0, out) - # --generate only reads the snapshot as a list of ids not to reuse, so - # it keeps working without one. + # --generate never reads the snapshot, so it keeps working without one. buf = io.StringIO() with contextlib.redirect_stdout(buf): rc = afi.main(["--dry-run", "--profiles", self.t.profiles]) @@ -1762,8 +1756,7 @@ class TestReviewFixes(OfCleanTreeCase): touched = set() buf = io.StringIO() with contextlib.redirect_stdout(buf): - afi.generate_filament_ids(self.t.profiles, self.t.snapshot, - None, False, touched) + afi.generate_filament_ids(self.t.profiles, None, False, touched) afi.generate_setting_ids(self.t.profiles, None, False, touched) for name in ("SoloPLA @P1", "WrongPLA @P1"): self.assertEqual([t for t in touched if t.endswith(name + ".json")], @@ -1841,58 +1834,21 @@ class TestBambuMap(unittest.TestCase): return filaments def test_one_row_per_filament(self): - rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")]), {}) + rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")])) self.assertEqual(rows, {afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS"): {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}}) def test_shared_bambu_id_is_an_error(self): with self.assertRaises(SystemExit): - ubfi.derive_rows(self._bs_tree([("A", "GFX00", "V", "PLA"), ("B", "GFX00", "V", "PLA")]), {}) - - def test_reuses_the_id_we_ship_for_that_triple(self): - rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")]), - {("Bambu Lab", "ABS", "Bambu ABS"): "OFsalted1"}) - self.assertIn("OFsalted1", rows) + ubfi.derive_rows(self._bs_tree([("A", "GFX00", "V", "PLA"), ("B", "GFX00", "V", "PLA")])) @unittest.skipUnless(os.path.isdir("/Users/lijiang/codes/BambuStudio/resources/profiles"), "no local clone") def test_local_clone_yields_the_catalog(self): - rows = ubfi.derive_rows(afi.load_vendor_filaments("/Users/lijiang/codes/BambuStudio/resources/profiles", "BBL")[0], {}) + rows = ubfi.derive_rows(afi.load_vendor_filaments("/Users/lijiang/codes/BambuStudio/resources/profiles", "BBL")[0]) self.assertEqual(len(rows), 100) self.assertEqual(len({r["bambu_id"] for r in rows.values()}), 100) -class TestOrcaTriplesFromAnalysis(unittest.TestCase): - def _tree(self): - t = SyntheticTree() - self.addCleanup(t.cleanup) - t.add_vendor("VendorA", [ - # Same triple declared under two different ids on purpose: mirrors - # a real, sanctioned case (Cubicon's xCeler line keeps its own id - # per printer instead of inheriting the filament's @base id). - # Ambiguous, but must stay harmless unless something needs it. - preset("Ambig PLA @base", filament_id="OF111111", instantiation=False, - filament_vendor="V", filament_type="PLA"), - preset("Ambig PLA @P1", filament_id="OF222222", inherits="Ambig PLA @base", - compatible_printers=["P1"]), - # An unambiguous filament elsewhere in the same tree. - preset("Needed PLA @base", filament_id="OF333333", instantiation=False, - filament_vendor="V2", filament_type="PLA"), - preset("Needed PLA @P1", inherits="Needed PLA @base", - compatible_printers=["P1"]), - ]) - return afi.analyze_tree(t.profiles) - - def test_ambiguity_outside_needed_triples_is_ignored(self): - analysis = self._tree() - result = ubfi.orca_triples_from_analysis(analysis, {("V2", "PLA", "Needed PLA")}) - self.assertEqual(result, {("V2", "PLA", "Needed PLA"): "OF333333"}) - - def test_ambiguity_inside_needed_triples_is_an_error(self): - analysis = self._tree() - with self.assertRaises(SystemExit): - ubfi.orca_triples_from_analysis(analysis, {("V", "PLA", "Ambig PLA")}) - - class TestWriteMap(unittest.TestCase): def test_format(self): d = tempfile.mkdtemp(prefix="bambu_map_test_") diff --git a/scripts/tests/test_setting_id.py b/scripts/tests/test_setting_id.py index ad9d06a2f0..95e447d03c 100644 --- a/scripts/tests/test_setting_id.py +++ b/scripts/tests/test_setting_id.py @@ -141,13 +141,10 @@ class SettingTree: return changed, errors, buf.getvalue() def run_filament_ids(self, vendors=None, dry_run=False): - """The OTHER half of --generate, against this tree's own (absent) - snapshot, so the id policy never consults the repo's real one.""" + """The OTHER half of --generate.""" buf = io.StringIO() with contextlib.redirect_stdout(buf): - changed, errors = afi.generate_filament_ids( - self.profiles, os.path.join(self.dir, "filament_id_snapshot.json"), - vendors, dry_run) + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) return changed, errors, buf.getvalue() diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py index 93047895e1..539376599e 100644 --- a/scripts/update_bambu_filament_ids.py +++ b/scripts/update_bambu_filament_ids.py @@ -15,9 +15,9 @@ has to be hand-maintained. See docs/HLSD/filament_id.md. One row per BambuStudio filament PRODUCT: one named spool product = one "@base"-declared filament_id, shared by every per-printer/per-nozzle instantiation of it (BambuStudio follows the same one-product-one-id shape -Orca's own filament_id policy does). A row's key reuses whatever OF id Orca -already ships for that same (filament_vendor, filament_type, filament) triple; -a triple Orca does not ship anywhere yet gets a freshly generated one. +Orca's own filament_id policy does). A row's key is the OF id that product's +(filament_vendor, filament_type, filament) triple mints — the id Orca carries +for it wherever it ships it, since the id is a function of the triple alone. Map format: { @@ -57,7 +57,6 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from orca_id_tool import ( # noqa: E402 BAMBU_MAP_PATH, OFL, - OF_ID_RE, PROFILES_DIR, analyze_tree, base_name, @@ -77,8 +76,8 @@ BAMBUSTUDIO_REPO = "https://github.com/bambulab/BambuStudio" # Row derivation # --------------------------------------------------------------------------- -def derive_rows(bs_filaments, orca_triples): - """orca_triples: {(vendor, type, name): orca_id} from analyze_tree()["triples"].""" +def derive_rows(bs_filaments): + """One row per BambuStudio product, keyed by the OF id its triple mints.""" by_filament = {} # filament_name -> (bambu_id, triple) for rec in bs_filaments.values(): if not rec["instantiation"]: @@ -98,50 +97,11 @@ def derive_rows(bs_filaments, orca_triples): raise SystemExit(f"Bambu id {bambu_id} is shared by " f"{seen[bambu_id]!r} and {filament_name!r}") seen[bambu_id] = filament_name - orca_id = orca_triples.get(triple) or generate_filament_id(*triple) # reuse a salted id if we ship one - rows[orca_id] = {"bambu_id": bambu_id, "vendor": triple[0], "type": triple[1], "name": triple[2]} + rows[generate_filament_id(*triple)] = { + "bambu_id": bambu_id, "vendor": triple[0], "type": triple[1], "name": triple[2]} return rows -def orca_triples_from_analysis(orca_analysis, needed_triples): - """{(vendor, type, name): orca_id}, inverted from analyze_tree()["triples"] - (id -> [[vendor, type, name], ...]) and restricted to `needed_triples` - (the triples BambuStudio's own bundle ships, i.e. the only ones derive_rows - will ever look up). - - Kept to ids matching the OF format: our own BBL bundle still declares - Bambu's GF ids today (analyze_tree already excludes those as BBL-island - declarations), but filtering here too means a future triple shipped under - a non-OF scheme can never key a map row, which must always be keyed by - the OF id the BBL bundle receives once it is re-minted onto the OF space. - - A needed triple owned by more than one OF id would make derive_rows's - reuse step a guess, so that is a hard error rather than a silent pick. - Restricting the scan to needed_triples matters for that check: elsewhere - in the tree one triple legitimately resolves two different ids on purpose - (e.g. Cubicon's xCeler line declares its own id per printer instead of - inheriting its root's, sanctioned in scripts/filament_id_snapshot.json) - and that pre-existing, Bambu-unrelated divergence must not block a map - that never reads it. - """ - needed_triples = set(needed_triples) - result = {} - for fid, triple_list in orca_analysis["triples"].items(): - if not OF_ID_RE.match(fid): - continue - for triple in triple_list: - triple = tuple(triple) - if triple not in needed_triples: - continue - owner = result.get(triple) - if owner and owner != fid: - raise SystemExit( - f"Orca triple {triple} resolves to more than one filament_id: " - f"{owner!r} and {fid!r}") - result[triple] = fid - return result - - # --------------------------------------------------------------------------- # Drift report (informational only) # --------------------------------------------------------------------------- @@ -269,16 +229,11 @@ def main(argv=None): print_error(e) raise SystemExit("unreadable BambuStudio filament profile(s)") - orca_analysis = analyze_tree(PROFILES_DIR) - needed_triples = {resolve_triple(rec["name"], bs_filaments, {}) - for rec in bs_filaments.values() if rec["instantiation"]} - orca_triples = orca_triples_from_analysis(orca_analysis, needed_triples) - - rows = derive_rows(bs_filaments, orca_triples) + rows = derive_rows(bs_filaments) write_map(args.output, rows, commit, datetime.date.today().isoformat()) print_success(f"wrote {len(rows)} row(s) to {args.output} (BambuStudio @ {commit})") - for line in drift_report(rows, orca_analysis): + for line in drift_report(rows, analyze_tree(PROFILES_DIR)): print_info(line) finally: if workdir: From 52ed9a8848db2e986bb95a23842085ac492302cc Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 7 Sep 2026 23:42:29 +0800 Subject: [PATCH 131/208] Optimize login user layout --- resources/web/homepage/css/dark.css | 33 +- resources/web/homepage/css/home.css | 440 ++++++++++++++------- resources/web/homepage/img/c.jpg | Bin 38788 -> 0 bytes resources/web/homepage/index.html | 91 +++-- resources/web/homepage/js/home.js | 229 ++++++----- src/slic3r/Utils/OrcaCloudServiceAgent.cpp | 8 +- 6 files changed, 508 insertions(+), 293 deletions(-) delete mode 100644 resources/web/homepage/img/c.jpg diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index d4950c9c80..9e72c4c2b7 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -39,7 +39,7 @@ body .BtnItem:hover { color: #efeff0; - background-color: #223C3C; + background-color: var(--row-hover); } .BtnItem:hover .LeftIcon @@ -50,7 +50,7 @@ body .BtnItemSelected { color: #efeff0; - background-color: #223C3C; + background-color: var(--row-hover); } .BtnItemSelected .LeftIcon @@ -129,12 +129,23 @@ body border: 1px solid rgba(129, 129, 131, 0.64); } -/*--- Account Sections ---*/ -.AccountSectionLabel { color: #818183; } -.OrcaAccountText { color: #efeff0; } -.AccountStatusText { color: #818183; } - -/*--- Bambu Cloud Section ---*/ -#BambuCloudHeader { color: #818183; } -#BambuCloudHeader:hover { color: #efeff0; } -.bambu-chevron svg path { stroke: currentColor; } +/*--- Account rows and account menu ---*/ +:root +{ + --row-hover : #223C3C; + --warn-color : #F07E4A; + --account-avatar-bg : #3A3A40; + --account-avatar-glyph : #7E8785; + --account-surface : #36363B; + --account-name : #EFEFF0; + --account-meta : #949494; + --account-border : #4A4A51; + --account-divider : #3A3A42; + --account-action : #26A69A; + --account-danger : #FF6A6A; + --account-danger-bg : rgba(225, 71, 71, 0.16); + --account-warn-bg : rgba(240, 126, 74, 0.16); /*----var(--warn-color) at 16%----*/ + --account-dot-off : #5A5A62; + --account-dot-on : #4CAF50; + --account-menu-shadow : 0 10px 28px rgba(0, 0, 0, 0.45); +} diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index e99d22ec64..2cf5742747 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -41,7 +41,7 @@ html, body { .RedFont { font-size:12px; - color: #F07E4A; + color: var(--warn-color); } .LinkBtn @@ -78,129 +78,267 @@ body height: 100%; } -#LoginArea +/*------Account rows and account menu------*/ + +/*----These shadow similar tokens in global.css on purpose: global.css themes on the OS + via prefers-color-scheme, while this page themes on the dark.css link that + SwitchDarkMode() injects from the app theme, so the two can disagree.----*/ +:root { - display: flex; - flex-direction: column; - align-items: center; - flex-wrap: nowrap; - position: relative; - width:262px; + --row-hover : #BFE1DE; + --warn-color : #F07E4A; + --account-avatar-bg : #E6EBEA; + --account-avatar-glyph : #9AA5A3; + --account-surface : #FFFFFF; + --account-name : #262E30; + --account-meta : #7C8282; + --account-border : #DBDBDB; + --account-divider : #E2E4E4; + --account-action : #00796B; + --account-danger : #D33B3B; + --account-danger-bg : rgba(211, 59, 59, 0.10); + --account-warn-bg : rgba(240, 126, 74, 0.12); /*----var(--warn-color) at 12%----*/ + --account-dot-off : #C4CBCA; + --account-dot-on : #34A853; + --account-menu-shadow : 0 10px 28px rgba(20, 30, 28, 0.18); + + --glyph-account: + url('data:image/svg+xml;utf8,'); + --glyph-logout: + url('data:image/svg+xml;utf8,'); } -.AccountSectionLabel +#LoginArea +{ + position: relative; + padding: 10px 8px; + box-sizing: border-box; + width: 262px; + border-bottom: 1px solid var(--account-divider); +} + +.AccountRow { display: flex; align-items: center; gap: 8px; - font-size: 13px; - font-weight: 600; - color: var(--fg-color-text); - padding: 16px 20px 6px; - width: 262px; - box-sizing: border-box; -} - -.AccountSectionIcon -{ - width: 18px; - height: 18px; - flex: 0 0 auto; -} - -.AccountStatusText -{ - font-size: 12px; - color: #A8A8A8; - margin-top: 8px; -} - -.OrcaAccountText -{ - font-weight: bold; -} - -#OrcaLoginSection -{ - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} - -#OrcaLogin1 -{ - display: flex; - flex-direction: column; /*ORCA*/ - align-items: center; /*Allow icon centered vertically*/ - justify-content: center; /*and use login button in new line*/ + padding: 8px 10px 8px 14px; /*----label column lines up with the navigation below----*/ + border-radius: 8px; + cursor: pointer; user-select: none; - padding: 10px 0; } -#OrcaLogin2 +.AccountRow:hover +{ + background-color: var(--row-hover); +} + +.AccountRow:focus-visible +{ + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +.AccountRow.Disabled +{ + cursor: default; + opacity: 0.5; +} + +.AccountRow.Disabled:hover +{ + background-color: transparent; +} + +.AccountRow.Disabled .AccountSignIn { display: none; - flex-direction: column; - align-items: center; - justify-content: center; - text-align: center; - padding: 14px 0 16px; - box-sizing: border-box; - width: 262px; } -/* --- Bambu Cloud Section --- */ +/*----Avatar----*/ +.AccountAvatar +{ + position: relative; + flex: 0 0 auto; + width: 36px; + height: 36px; + border-radius: 50%; + background-color: var(--account-avatar-bg); +} + +.AccountAvatar::before /* placeholder shown until an avatar image loads */ +{ + content: ""; + position: absolute; + inset: 0; + -webkit-mask-image: var(--glyph-account); + mask-image: var(--glyph-account); + -webkit-mask-size: 100% 100%; + mask-size: 100% 100%; + background-color: var(--account-avatar-glyph); +} + +.AccountAvatarImg +{ + position: absolute; + inset: 0; + width: 100%; + height: 100%; + border-radius: 50%; + object-fit: cover; + display: block; +} + +.AccountAvatarImg:not([src]) +{ + display: none; +} + +/*----Row labels----*/ +.AccountText +{ + display: flex; + flex-direction: column; + justify-content: center; + flex: 1 1 auto; + min-width: 0; +} + +.AccountName, +.AccountSecondary /*----the provider name, or the sign-in state where the row has no name yet----*/ +{ + font-size: 15px; + line-height: 20px; + color: var(--account-name); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.AccountName +{ + display: none; + font-weight: 600; +} + +.AccountSignIn +{ + flex: 0 0 auto; + font-size: 12px; + font-weight: 600; + color: var(--account-action); +} + +.AccountChevron +{ + display: none; + flex: 0 0 auto; + width: 12px; + height: 12px; + color: var(--account-meta); + transition: transform 0.15s ease; +} + +.AccountRow.SignedIn .AccountName { display: block; } +.AccountRow.SignedIn .AccountChevron { display: block; } +.AccountRow.SignedIn .AccountSignIn { display: none; } +.AccountRow.SignedIn .AccountSecondary +{ + font-size: 11px; + line-height: 14px; + color: var(--account-meta); +} + +.AccountRow.MenuOpen .AccountChevron { transform: rotate(180deg); } + +#NoPluginTip +{ + display: none; + margin: 4px 0 2px; + padding: 8px 10px; + border-radius: 6px; + background-color: var(--account-warn-bg); +} + +#NoPluginText +{ + line-height: 16px; +} + +#NoPluginTip .LinkBtn +{ + color: var(--warn-color); + text-decoration: underline; +} + +/*----Bambu Cloud, folded under the main account----*/ #BambuCloudSection { display: none; /* shown by cloud_providers_info from backend */ - border-top: 1px solid; - width: 262px; + margin-top: 8px; + padding-top: 6px; + border-top: 1px solid var(--account-divider); } #BambuCloudHeader { - height: 40px; display: flex; align-items: center; - padding: 0 20px; - cursor: pointer; - font-size: 13px; - color: #A8A8A8; gap: 8px; + height: 28px; + padding: 0 10px 0 14px; + border-radius: 6px; + font-size: 12px; + color: var(--account-meta); + cursor: pointer; + user-select: none; } #BambuCloudHeader:hover { - color: inherit; + color: var(--account-name); } -.bambu-chevron +#BambuCloudHeader:focus-visible { + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +.SectionChevron +{ + flex: 0 0 auto; width: 12px; height: 12px; transition: transform 0.2s ease; - transform: rotate(0deg); } -.bambu-chevron.expanded +#BambuCloudHeader.Expanded .SectionChevron { transform: rotate(90deg); } -.bambu-status-dot +.SectionLabel { - width: 8px; - height: 8px; - border-radius: 50%; - background-color: #A8A8A8; - margin-left: auto; + flex: 1 1 auto; + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -.bambu-status-dot.online +#BambuStatusDot { - background-color: #4CAF50; + flex: 0 0 auto; + width: 7px; + height: 7px; + border-radius: 50%; + background-color: var(--account-dot-off); +} + +#BambuStatusDot.Online +{ + background-color: var(--account-dot-on); } #BambuCloudBody @@ -208,99 +346,125 @@ body max-height: 0; overflow: hidden; transition: max-height 0.25s ease; - display: flex; - flex-direction: column; - align-items: center; } -#BambuCloudBody.expanded +#BambuCloudBody.Expanded { max-height: 200px; + padding-bottom: 2px; } -#NoPluginTip +.AccountRowCompact { - position: static; - display: none; - flex-direction: column; - padding: 5px 10px; - z-index: auto; + padding: 6px 10px 6px 24px; } -#BambuLogin1 +.AccountRowCompact .AccountAvatar { - padding: 10px 0; + width: 26px; + height: 26px; } -#BambuLogin2 +.AccountRowCompact .AccountName, +.AccountRowCompact .AccountSecondary { - display: none; - flex-direction: column; - align-items: center; - text-align: center; - padding: 8px 0; - width: 262px; -} - -#BambuAvatarIcon -{ - height: 40px; - border-radius: 50%; -} - -#BambuUserName -{ - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - width: 80%; - text-align: center; font-size: 13px; + line-height: 17px; } - -#DownloadBtn +.AccountRowCompact .AccountSecondary { - color:#00ffd9; + color: var(--account-meta); } - -#Icon1 +.AccountRowCompact.SignedIn .AccountSecondary /*----the section header already names this provider----*/ { - margin-right: 10px; + display: none; } -#BBLIcon +/*----Account menu----*/ +#AccountMenu { - height:96px; /*ORCA use bigger icon to fit logo size*/ + display: none; + position: absolute; + left: 8px; + right: 8px; + z-index: 20; + padding: 4px; + border-radius: 10px; + border: 1px solid var(--account-border); + background-color: var(--account-surface); + box-shadow: var(--account-menu-shadow); } -#UserAvatarIcon +#AccountMenu.Open { - width: 64px; - height: 64px; display: block; - margin: 2px auto 10px; - object-fit: cover; - border-radius: 50%; + animation: AccountMenuIn 0.12s ease-out; } -#UserName +@keyframes AccountMenuIn { + from { opacity: 0; transform: translateY(-4px); } + to { opacity: 1; transform: none; } +} + +@media (prefers-reduced-motion: reduce) +{ + #AccountMenu.Open { animation: none; } + .AccountChevron, + .SectionChevron, + #BambuCloudBody { transition: none; } +} + +#AccountMenuHandle +{ + display: none; + padding: 9px 10px; + border-bottom: 1px solid var(--account-border); + font-size: 12px; + line-height: 16px; + color: var(--account-meta); white-space: nowrap; + overflow: hidden; text-overflow: ellipsis; - text-align: center; - overflow: hidden; - width: 80%; - max-width: 190px; - line-height: 22px; } -#LogoutBtn +#AccountMenuLogout { - margin-top: 8px; + display: flex; + align-items: center; + gap: 8px; + height: 34px; + padding: 0 10px; + border-radius: 6px; + font-size: 13px; + color: var(--account-name); + cursor: pointer; } +#AccountMenuLogout:hover +{ + background-color: var(--account-danger-bg); + color: var(--account-danger); +} + +#AccountMenuLogout:focus-visible +{ + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +#AccountMenuLogoutIcon +{ + width: 15px; + height: 15px; + -webkit-mask: var(--glyph-logout) center / contain no-repeat; + mask: var(--glyph-logout) center / contain no-repeat; + background-color: currentColor; +} + + /*------------------*/ #BtnArea { @@ -320,12 +484,12 @@ body .BtnItem:hover { - background-color: #BFE1DE; /*ORCA color with %25 opacity*/ + background-color: var(--row-hover); } .BtnItemSelected { - background-color: #BFE1DE; /*ORCA color with %25 opacity*/ + background-color: var(--row-hover); } .BtnIcon diff --git a/resources/web/homepage/img/c.jpg b/resources/web/homepage/img/c.jpg deleted file mode 100644 index 50c5883ca05fdf86fb59b6d78ac787b349c99a8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38788 zcmcG$2Ut_xwl*3Br6~x~TTnnyM5Ia&s5B8GA|fC}0YyMSdQU_Yq=hD+v?#qtq}R|x z5h4VLw9urtgc=}(oA3PR+y6P=J!hZ2_dRz#&wN(a%3OIeGshV79q)K&PJW$C1J2*o z(boacP>*Xg*8qT%alq|=yZYnKzk2-fA^+;Le|zqv8NkMHO6!y^EzKpsDK;8fHky-m z01yD6IsJe70RH`;IYmo%`V2h-BNH>VL*;qEDH>YZQ*^YaPt(y+dk0b92hg#dX1^$- zb>@QcGx|$z9J0Z2Ul~Mhm9=m_7$Ats*|@)DWa8rH;pG#%EG}{7s=R{YO(kWO+jq2e zboKP_nmjapWcJwH!q)Ej3;UN2jvk&~-afv5{vq$)hlYI!kBCqBn3$CO>2peER(4Kq zUVcI0_wtI$s_L5By4JS#j!tw}ch4YpXm|woYjkX8cJBB5!s62M3UOhe;fM$8Q5RO#YP?1DLOh@I{H7xMRUrB+GyG6PG6Kc!>(ma|IF>eCD~vGj$3hG z%UT#kZQKW#xJ2b=#E5?k?cYZBj}7eYzcjMH4ebApYYcFfmWDccv}^znfI_H* z9WYG5#(~FdoG(U_kSBnP{4qziCxFaL#bW@8%!q%uU16jpp8%qzG%ZEX{n|A>{{8Ok z?~(>dv7yMQq?b=)0kUq*Qj+yPr*7fXD3X|2J>cgjharaSE@Ea$kOo<99;MFxQ;MJs zIoi>h#hxbVKqrzuL8N6YFGfR-e23uLdIC7(;9Y&wr%8l}`*2N7!RA@$pk+x?c#yn* zZeD=f*$2$(H}7C~r5qQY7CGhi%4oaJx9zo`077!1tR!~z+bxhXa9hy{08SC3^rI>& zNF_uI+(Uv{8#8~U(@y1(Cz4^jj)dwM(2}&|PBuwxiwtmP3UN$L&t3^-DPDhB?G?lx zREMARuUId6L#fG0QktpHu#EJ*SXOn@Cm!Q=_Qu$FbVpu>&ogIsVI90(`n{*L656UU z3$S(23E*_d3E-_iw42orD9G+Ru>_+Xez_DStuqi9y=T$#_Z8ZlIl&(flV(d zkv)s!WUnBXU+an)GNk$0NHDAU=M>JEACb)&bZ=KpeCf9IMG<5E^NkY)XYX8XKr&H4 zfzPND@c}lS2jt!GI#WjK`$}dVw7;YpL_b3x>}ja7atVeraGN~=u-~3te?$~}!u%-U z^srPj6Slcb^5%?fD=(ar_4aaWaIBF`+Ri3M-SKs*rV=2HU8`SD9fJ)%@K#t2y36DJ z@xiFYeo*D`OZ-N!+58J#HCLxe>%K|zo6f+MAUUGhUgdESRK>b4pKN`c2UQQ$aWE(v zC1uTG;Ca|84So1IAb5BO!IG22$ZU6bNhiYGCR{{Ja`Aoer5C<4!FKk3qKS_{vibr^ zJ}I}(#+R2}TQGb5qy3v`ybb(meQ^IoMtvyDjhe+=Wi5g!jhHK-aQeK1O)~i;YK1W!wjCs)ry?ML%(G*K> z8iu#JOrpN$qvO;fzNoerZg6t;zCLs3f|V|lWlkS1@dEn??7h2-ZXyBodegtt>Z@)5 z<~Vaid-Rl^_}isL+4=l-;pz14-Y=|;0@k@Dka-0bg*~F|^KQqKcn!zruukTb>~8Ed z6<8YV=4cx=ja0&p}1 zSKVQ=tsMuBiO@vm!(V6Eoc6w+BjD`*`04MVfJ`N(Ps#!Zb^#}V037F~nl?MaW4jA) zehIu~6cGBoDBzEie^TfQ9amM|`|eFf8NO^?ui7g&vm7nT*>~Dj9=ANCs!0W508UliG;vnk- zb$Wo?f!W#bD_)`p3C6CLlIDt~n|77njXOGW?IR0SNkIvf72B&thEqm$z-9X*l@mZq zE0Ayx1wR4&N^xl<%9$P`0*z-a<4!q1_|$IRe7A#Izrx3ZAE#U>k@5o4uWU>GSf+hq z2y>NGa)8(w#2ww7fpL*;qWL6<(r*JzXApcO=ky2C=SjLxuw?Mp-X@u=-yKr~`*!1l z`7b5}cG=pSzGmd4D0Ic=rOtC|*V5gK81$37^5ES>!DZ9fD_2W$8w-1Qnp4>6>sPlA5UWcibP@H6vfmyQ(~R}FRVG#k zHWRc2b=4()rJX&yi2F(G_iG{3m)?*hJv)wrO)sASBCXE{$+aS?d|E9b5qxY_m*!@1 zt^BI4%w$chs9u$*8U9pL;|bv1?GCIQjR>U0BUhf;N9)w%mdfL!6~nGD9(Q;sMuAt<@&>% zAi*jF!+48boPk2t_hJ2WZy0x$)OD>xs$EY2kGa3nod8&${er6;c}z|0$D9C44o?6X z4m02A=f*X{N_7uthfLhO>x}TpOQ}BJD@&8{cl`F;1}9TswzvTCErTBnv~T>-##74s z=zA~?kJeLe!Q;o7pnPB=fU8?nNEHEYw_Wkw&0deW=kMLUih#lHS~hxZFD1thj^Mfm z#ErP$xvW=vW~Kx<9yM01ewk&x1(T&;t~rE(98LDY;F--e>I`7!`(e@y_NQOGnE>DGr&-u!b;E0FAo48_9O}(6-beOC3xr z>efBiq(V`q{U#`Pxs_(QpB}0#G_`nu?hmS+o0yB0Iff;xV51(?JNClfqa^c4-c}ph zN|W`=E~|!hla_^)3J!r|#$%07KqS(7$o6Lfu9U-#0$Qw;;N_iDrbU(pr1_sEk_+0o zx|=s~J}4yMbx^3^LayoMh2ew^#h+Z9Q3QwClYtO&E~<|C`^|t zz$0pIbqE*;P45uO-d>(61>49_e821-)K2?gwnWH>i}Kk?bMU6N14Iem;SS0OKDO?H z8a}+zp>t(--xazCZ&c8C+UBoU*FQX)fiU?+LA}4*sB#Fq7_)r>Sk3R*^7lv>@}!&F zI#%76-+jPh#CifK4lwbqipj06I(%7od|a_&S9te9xqi_O_|9NGYBJANH6}CSs^O^! zi7)@Los)u4Zrud#p-%vJw9PAXsL-uTXO8mg1hDj>NbwDmMCL!xz7Q!e%&O*TIp6h= zD0@2M3b?nKRurLWD3iAMrmwrTlsR4*aONde>GTIb5gHod&x+ZI6d>XL34nB!b*=3L zKu09J@=tC*_J;A19}YX)B~t@?GwRgD?Vvdr7asHK1n{hWn8B-@ko?}Z?xk&VyU-;k zO9ycex<}X#dE+H25AxR%a8*bzEY@j!n|9}B2ULcD4koJ>lj=MDDG4(WCSUhaBw2eF ze13(iPUrp1x(4UAi|cOVgT2R6^1T6%Q2{sV5-)Fk@PuncP|Q%%nIM7(tPL4z>ZMPp@n(8!+Q%6>L0WwWbwo?gN;zE?d2MNzgX6%DZg^2qAq&k=P_O^7_3URQp z3)vodZz`T*#G28F>vz7_+B-0I+vtlYujv0yND_^A6r9mz(iPqj)a_kQv(5E?>Xr97 z>{gEoT=%}#V$*Biz5tGkM(LS@fpwO>t_bi z@~3|bvG}654*egB&^hx0141yoJG2{VcC76~eM(9#=eF&fyOtQ$gK7X#w0(Cteg_C- z@S|Kl@nEpnaR)1Xr4F$?$-$LLvtCQff?lKS-^Yudn_J((MgFdtzh2H9P?i^k8qY9b zaMj=Ps!Kh_>Dczm;i$!6(%I}XozC`Inj3UQR!nojfwjWUX5#2{rtZG4M_M!J`+FXcX^A0dJk0xP=g>eBf ze?&nX`}0LqOV=GP4OdkgrJ$C1w0kTkM@11xX`h7;A55Bg1lU!g{Goo`JF5`@jl~Sg zF$lTSoR=s}#7sk*-oX%EZ9-I+d^2~z)amBD?A?G*$q5jzDzZKSq~r6Xr4rLCzb{nR zm3SWMPht8lUpm~9K@5X){bAs{_v}kGvh79TtiTvtHAlVP?+kpD`Vnz_bu(%(UmW$? z-~J6h7T&lGpLDX6(5exg-x#&DFHH_u4zL;r-+qk0;^{>0Fzr{S3$SC!f@dHQbhezr z02=hcX2$0)XQ6hKz@x#T+~1|cskl5>>E+F#Yt@u`ip^7@FHp$h2>{o}BNVd5QDIWQ zc?{EMPEt>vT&C#VW7X1oDD>;lZ553bSK7@p*3aITe3qlNhdw}K$BCgVflTg;Zg2nuKQV1+BZPSp9T_6dOVbo`TLs1PZ}`OJazb?K->vnZE#Lsx;i zz8?c)y~i2QABf7ZX3#k6Ok-FFcoa7a38RSl+AQfvPh+J;!rC)<>c%6}Z+2wx)NJh{ zSR57I&%kG=j4R$Vi|~jhsh7gKoL)XPZLRxuG4ajSo;D}RGhM<_zZGwL3d31Z&^|=P zB3gQsf7Us$F)+e%w)Aw+E?KP&DIJtFKKGLMRgJUUe*CG}m! z;METDkq)9&dp_Qh^A%9eS5@2}H`0(B%U%Pcj_W>6kxlif9y)tQN1je*TL-|^o%8T% z0h;uZcu*JuI+g5bd**k%A{FKGrQs?#4@sC~l!Dp%tnylw;;GW9T=F-F$xCGf3Czn!>S=6#CQV zh4ul}%^TTK@3Xbhr|(l{=ashCvRzev$tF+mDEJLuIZ_Z4?-{I2KU{y2U^a!y6sRr9 zJpo8H!K5n14%x6uY6vKPDhw%amws69ZZJ}Xfm8p2lWSGkOylO#@b1HxSG=(#+v6O5n$ZZ<$|s3tn^ z08>jv1?ou=0IF>tJQ&bEr7u-MT|I-}Q@j4r{m;f{fg-;y2t_Q)B)VXXZ>G`&d{nKS|W+yHy^e1Pp6Fc=M7BrIZ63e?f@@p81a#_8uP9PO^= z-sWSpi)x7GQ$ce)TTFV8p;vHe}i1*Pkr0>U4q9_6WdKwmzcy;$|ZdH z(~oXfXUA0!H#N5uiX?2h8bpAANqX1FmPZ$%Z5avyK`aa74++&Bm@$w+gCaK(yufee z(+py$UO%UzzcWRTAD=`^EiJXpEL!V}uHj2AuNSVL0BD-t z1R<$h&3h_Y@umTIB$*D|^E-wkJz2v+6?Qr&fO|yg4u-z4a41h8M^h+&q-C`7gICMe zs-$Rp(baSKH{BjHK&B^BLm3zARaz&QVKXMPH#=Y-rnmwvXA$8r_J(Ij->F${cqMNo zij!2|&X+inRk+F*y@T}fag!Qej^EE{H^Yqb?kp<97rq1O&# zExN41-}NtxHYACN#(zvO{>YrVZ2G?Qt3*W5U8nK<5xZDrFcp5qEg9)yj6yPG;L4bx zXE)e#vtWLct~q%4_*zE&_ychTj@=QQf%P&qzQ}jBKHk8$XRsJ~?08>x(B~ zyx+38GbpR2rNRAvN4 zSh?|@gJelUWm0;I#d71+*AB)Z_duMF(?AL5Zd1gnlhsry`X0Ptj|!Z-Ku?a<2@b5H zUIJ_s*!2mDPPT-;T85D?^D+1YU>zMcl+hT5LVnDl;ZaMg>Ysyd&bf&@ zJ}@to@f+KWhQ+*PEbsneNQg;D>^beq7^DCTA{UGuf|^S30APq!a~%`!#+17_Y#kQb zhidB*PN{dqxo*8jU6$f7e)N)R(o|nSl_I_vYjd2vB}dW4HUezPF)&Sa7)HM0K8-fV ze{T0dQgG$2#XNdAWs+5CQP|C7$mo4zz}^#g{YCKum_}qgyMw;N(qzSVZ>!?a3a4SV zS5IeV$HeGlRo26^o_CoCcHQch>!@k4SGojX#Y zjQaSaVo>&}k~%--rK99l_~6w<=IN@8_+sxeQcLO6r2Sd(cfne20#h%Wh|;0!qITHq zNW;(oUQn`ci%vK1f#z!WnATbV1(9zK{?tb6swOL=Zw9(f%6{@`-uUyykKydfx76Z{ zB7UOI$T9PkeIFSs89~9iB^@a*8i<=D&@gZ8V{HklD*uWKkUs*=u zmG>6~Nps@D5hnmSSCZ%^nF}_%PreY)J_e=&>7V&sOuH-nn?C zer8|ooML!zTY&F6(!uMsf}vRpVeU53W_-fpwoqKYHS^91K$kTH$Oq*mLrGpUum}`G zgKehocC(NS)^>=jItyc+lT0ec;k7m;)5QU-v5 zwX?obzi}0=scyA!5QA~W+`=D|kEW16sDyb*`~Ms&wE+%}Cx9)sniD`3={I}#2Kjf|MJ0MF)gH5oE&)i{Pk1HMgvB!0s+yGHe?m%)lFjA9??b(~}r86r~B$JtvTiwrqENfng!jFAV039Q;B91BP zMH3KTNzKn|F2!GKhemwsUX%RH;`JS1sl!rS$rhvaMLx9iNRsqTGFSh8M+!O;WP|** z*qN-T!H4btIs+S%n-dRJ@QGM88pXKMYHaC`r8weqWg))>w2^4>PaEmaG$@e4AldE$7$Q6s3u}4|7$~ z0ygX!cUm9cEgp$xs5Ij;zV%j1;UkxOxB6sGp^_rDFEswn+tH_=7lPW^^&fD%e@K`& zWs3YTz_G4b*l*VNIXGozz9!z>?y!N2Mc$^QXtJt4e>KQ!*t@#xv#R*yq_p)kO?SUX zypa|l@KOM~4*frOCbxikWlhz8DT?(Zb@*|6eyf$cgP@4Uw0S*329dfaZ^ z7%gmYCx|6X=~!|o;kQu_4xY48>(w+qZeM*n+@lA2yz|JcesE-WJV<8|*~7ZH zoPeDgPdg-MK2+}NRHkGss+Um=M-Pjs>xe`N54k~IM9}SeA+!v@p#e8 zXR9g&X2q`}&F>I!(1{zz7&unJg4PZtGV`_m8tDGJYyIG~X?t9w6h{i!6On(uD>Z!P zgV)s~{YPUuJfe}|7u~bprO1lCFB82da0>JkG)+xP36C)05P~5jg4SRpdqmCeNSbtH z4R?(IGR>rzm+l1Aw^w6vv#f3WvQzeD#Lmx7JPBqMcewD%Slim_;mp*BAx0UXE{kxi z`**6x=o zSc%z_BpDOI%@BSHKk4S|RO{x2WorczY;K(e10hsL$n(xM3|3kx9*V^Q`^|5f<2A=i zD$glurz{#aMg$ntiqwSO5rXpzcr*js;0-=Xd&mA}2h>tj3oC3InX%N+a~L7`EjMpD`1TU(>3)*~;g==&ZN zU0fx{8@9A7>ME?yR$xM8;FH1q79J&WdL$41mN-4WM(6+Mh-IQ@|NKsi{Y5iTnwq$% zcunIKeKgYXNerxOZo5;mw@Hrtm>}JZdJk12wGnlnloL>Gs4yu15ZQbd#fG0ipXExi zj%KV4x_Z7}Ecp>pV0K*RXUUi74Hu-V5Wle3g*>!mgmZS{ zd?9bo9lqGgt@7gQk#3-!oG)ZLCag5?QL?^j#42^|QPZ-$JW@e80R+ch&dNH@VIoC# z3^>$1aZrfI$59-Gt`Y6S$sV)OJ{?WcI0aV@-((1`5_H}XFOHLj7~{Nx0!$i{j_wl` z*2xi}R<@7oeH!aNqJQ7nV)m8Fddo8h$wRq9#&6Gp)>n@VN&9=@q;L;4Z;IH^btw%X zNoBP+z%>lQ>MXs>O43mip_5Rn7_RWOuL-g_PO%(Sh)i9=Z@iRRZ$L%kwc>BIuUS8w z_HG9F!&DA`l%M^2`nu&^L#tg}Qr}t$$Nu2t+D^DZ(wNm|=?Jd;-glAvXNDQR(A~Lz zOXow4-q7=JarwW#l&Sisr48$I$LgvEi@w!Yn+D#$!FsU7=>Jp(0GtJOtY*OaRZM7X zWM97qbOBi01H2BWVPVJzvICvtB^#7uVB+D9a?#xf5ssD>#Z_bHn(7?a4p)a2V_6&5 zn%zCd4}(bod+GjA$RR_%w;d4br?ei7s}@x8LEruSZ+8n^CnH=oA5Cu7#jIo`{k+mc z)W^XKXQEc-wBN8+-BP0O-WIJ`^d${pT^m8Y_OSM~eTB7csvh_uDqtaBujYXNe zWOah$Vr8rMs5#Y{X;{nS>&`Cn5Ry0;4L)D>Rcy?D&x+_1p>R|b{@M9Uz@))+`(e(J zpV-ck{;rf+i{kZf4b?K3nS7U0n*^f>9BJfqTzg!(2vYaa)i&WGcU4YNpo?bLqDfnm zI8pkY!aA@$gMFk_O?g(DWz`=XF0T&l81*{GZBCfnvFJ?9U)B{eaoqE%8ZgW`E-s0! zH-!`57xf}QyrI#0qmn%%5J{_1$>q#}JZzaUDS7wj3E=r|v#P#SsHa%guldAQMN;{v zRN(~RMfY2BUncdYe1rH;0Jo6cRJu|GN9HiQM+K7+(4H|}xYt*wtUy!)DI=sf)vKT*9xR4aYWGJ?4mw24&@ zZb3U9TrKllz($%SOsXrC50@rmf4`za=l_g~|BJ=q%wL2AgTp6)-y&`&fLE}cJEp0B zOF92cJ^yyTsB|VN1s!A5)b@1~izNL#Z7$FbUy3i+DPEHmx*~Gt+JH7+ocOq?sm!=u zd-HWZ#YA)30*Ww|#$1GuB%Tsckqw|Dnn0-${AQcbsXA<+Igz;2yBofX5-PH?CP7*{ zpC_)lP7@xbjG2Y2Y1=b=z`zPy*n=|nb;}hY!+B&5=DijIWbMk4SfJT)7THWqy1>`u zo|W_r<-_)YEUA3f8pTlsr6o+(j8{ai``OkHJ@3Bp^3a(g65I3U1n^N8-e5Tk5+LC^ ztyPJS%KS=wv(QkHp$7BW62}9)L7!85%KA_WyuR>>TC`~4{#e@nh4bI9W;%vF=&nqYp|S>A%Ke+SafxS+$U)C0RRGd#$i|{Gr6PdAfK-W<$wt z`KZBek#Fs^XtnG5lNt1atQu2Yd=4+9a6HVNMsh<0UGUFicZV5w+1DOu;T-|nw~{N$ zB7Co-JRM~YUQOblQv|eX5%={+RZRtwC6A(~oK11=*X-2*tV*4JXlpRX^xwS`(V0;)U6Q zTfxf*KuEy}0F6z3;m=?~!=E<``g8(NUNUtty>AdJe;E8tIhtMzuV3K<9E?{x@a?1R$zV+T1ZhOjUNvU3*THX457(^`uyghE% zog#@N)&piRA65(Tw+R8WVv~rspqIdNI^V6MeOfFU3EOJ=Iim&(?}?D$%_pQRqqIz!jZ9^RKS@W+M6IC z)?u|uhp$z<=Y~uQ&*wb3(me)vwAu(gu%!%ki+)R+n}5&G+xY^S8i2yVKL1b9@?VV< zG)h$aSllg)PjeBDb-S$i7PD1!*F0chk^|3Bb7X6IPX4#my3;i|#J=TD3-S_al^D{B zD5oL=YHi^Jz(;oV+5<8LN)dD#=Yn1=r%2dZ2C@9YIJ+cF+^FWR_WxQI+R3ZMesAG^ z&n4k?orJ zVnONW3~0ky{9*m&ok>4GOB23=n%vY!POgf{lgCzU7n%KA$z9WKH6j^;u>?Nx*eRF3ir9FrMxfy zqND!JVT;eO1Zf}^$A4}qBO6fDpJ7!jUyqn5qmVPGmptS4?{|<~mL%}(L!Aw$$1Y6* zq#0>X7+0_Sl}LlEEUh5%NX04Wda8E3gz1KhZ8U{dWB0D!$m97?!@je@!#_{?Tx%Ym z2+X^>C6!&C8q|E?V|_0!wu{HjW?3cfqn}I4fb}G@3Kdq;6V{F@jXD9m5M(yR?lxX; zvly(Dp!%?Bb=8o3?~%hOEGk9i67HkP`=D& zm}$f;nap|gg$KB$E{7G3`MS8JL|W;_=Fg6-F9%g(tum5f?l_NUL&n;Ae_KKS1EKrp zy?>3^Rj5A!)J^q+0H;YPD%k)W zR-?(8D%prUQVUcduTW|JEo2Xfb%A@Q ztXow$o??K(_7Y_aBr4{9)HdRrik8I|NiOvls2t6Y*1r_3PyGwmbS{Vo^b6W%QvJ#p z+Zb4zlB!XV=I`MY2jjQ?(?Z!)O{M%uK~dhKGfEdno%=Ox<@(?r*$b5IN>aSA_ce8f zb-i~MGf@=kua+MF|1fkd#21@@`qIX3Bc?p#0uMER9NC* zFZ0O9E(-QlcjFtKX3Q;1YC^!SKOYk)lqZ}qOwmMrpXxL;*b6+)rqGdH2RB|+)RVwO z`<4ua3oSQCeqxnKFn1Qf{o6UEWxorSAlNQ2CjjV-TA3(>HVjXBhjWeNfwje(#l{ znRC^NMA1W<`-?y04$nP$E=y8GYy8t`K9W{J%X{x3hO~WE+>HA1FP}M`ir_o zpO(q*r8pkFST+|MeN3I2Gye#i@IUp@mX2p5Z#5Z+gzv{*=$630bVobpC0Tk1oPMA` zr$EU<5wt;YkvS@lEVpMte6_z?=!h32I8U{y`)~e;9<79gsdQ|<&wgtfp#$eFky;b3 zia&qp`PLS(C<(cRPm|=ydTo7WK85+?O4Dug9zBt~{;A6h!kf#>$Mdk3d>ALc<#8

^gJDrVkxz+$8nrIE~jwWqf&bTMyG~o18SM;#Y$zZ~z|r)F4UsdM}K>B+D#zOh$fXYdY*v0+^&0L78# zQ(Nfrvu*V8H_)!I4LJSlfTy^9szit0oYWzY8NIOQLU{FR{bnT0;c;ca2dsZ~l@Jes z1?5s!i%!BjZ-$p-+-R5Wc4)YaO`$N4zHSz}J8$HMXi`%5Tg(7g(R1z`xDuYP)bCYW zXQXcqeI`p6VofPx_RGh9)C@rK7rb`>s&i4B!{jfX{7;hye?CtGKf~-6H${sQbjx_R zzY$=zOAR__QhjHgKrvI5ur{#VkFfSBMzsrbN>bdLIheN%rUlC$`14P$L_0S;XYcyT z3|)|`f0K70>sklRs6j57QO<=E)9}=v`7Of1|CF3AcMOFl(2md$a+Wxyo=Gz4jHJ0= zDjeSlJOlQwW}TPRc9Z&kuTLhNT-?!QE+y4FyzXq;Q0cRU`uuuo{upL~SSsL?P2>eP zVxKrWb(SO$6+%|2!)|lfeLjv+m?$@SqLkmcmx( z*Z(3(r}_7L{}Ke(S&#YQz0>KhO}MHVb8>~$a% z?THR%KFzvMiX^5!01Cgj3FRfA-(;4lMtm=n>a4;)edS8`4EPL9lo%fkIZvbZO{srv zzR?f!#2!^Dc|;Xrh16z0CNmz<13!h#xsKh)NEaJ`vg)DQFg-ymnqA1*cE!gru#LH) zLj<@j54+;Ngna(o%g4TC4{TjGPP`0bu0oyL33}psuvtl&p+Y79-aE;*=l?&V(?8AT zk26h4ngC4A4N?UoxRe%%g^@XNd(SK2k0OukwMa*KdPRIF1Us3P2+#akdlmoSMO*(i zXO`;h7N6CeKd{LkY>&I@S*M+pa45x+G;3g#4~blR@b zA3+A7sF_t$*6_d+z-9U^8ftKGeEeC1jnbY{oZ>$@K1wzw_2noGgesr=h-;!DJa3mt zcCk6~tV)_W1uIVKW2Twc0TVC2VH5`F^ENLkwP4h>M1^j!1VzJwAOtVh5YZ9PGjK@8 zwFqTqU*KLE;YacXbZqQ$lLP@4?pgo!29MO@#OQJXds<#bT-WFoAy9BQ;B_fBja3<^%F$7exqwpoy9V2S_-NjUO)gH`J4dmMjujT>7I8bG8^UoS8au{8FN6f zK~dMw>51d3R$vO#cQ*T4ATPJ^12( zb5E85iEMSiugIlE$~jkp7djj?ot+_!o2#ylXQhGuI00}3-j>ImFV4N<1>_2pAr!N< zcRcQpuNvFS@}f=8kIB<}98PDt@IpaQ#oeJu!G3$*atDJ`tY%DUVO;N$aN;Uyn8Fjl_{=f%OzVI)XZ~Le?a%9f-rzVeb3l_5 zz?Tw@Pf)@k;+W3#_ACU{9ZZ5zt&ELC)8Ij6Y%-6(UN0H2-fm7ow}F6`ijBadDO%EZh`uLT`} z1FxlOK%yyU0<{OGM;U6phRtpV-M;NvEzO-`@}Ml5Tz<*^r4^Yx_1oOhMY}>j;MJbl z$d;jPfWt*wvBt@i)@ru&7T!dApYZ2n^-)Hr-j;GN-{73il9B~ zuH%q~AmXi!LDc|cG^D~leD_#o#^%?SuPs$m`@RAa`Yp6Zs_EsXSG2g<&_|vuHhr&a z#udwa_wYJSuovq&>pw~xR~4KmhwF0c>TxzR#K4&4Lb0bS`l5ngXfqgi&n4h!=XWvc z$^|jhWiM|_{>{@bK)j%OFh|}daNp#BkF+G39lumRwXXRGv|9R)G5kNiru~cb=`W@F z|0GiWTfX<1Y`X&6;mpH=qJqGbx0Uxv$(XIDvc6walrPnUi&v*8M$GbZ$Qm-A5{({0 ze70g1p^1r0O*sLGx{gz0f!F@p%+YJ;Fz}2Qk2S9vKQXJL%;DMe79ZrS(@o}C$hnC! z9(}G2j77@AC$(Gyu_+}uZa>DTg~`5cTT@!h_klxy=_duTB6KihX*`4)8$Kv{U#YV*J zx5#aLWwc_G_XGQbQNvgYqX*$4%$}7bKDCxZ$aI2~JMrnZs?$FqUP_FHP}rq;!qvh(7x9XX%_CZxy+ysGNH|o@`ZvU6DT!>F866}yp|u+ImOj*DNyr{)0LQ( zCV?TdcKmgxkG?tKukr?V!q*=dd{ivS*LOZUp14SC(kBNx}`_$JYny&0lW%lzCF561K(<2b@Oz zxpjP%l<74-&*h1WBn)}1_B&{Gi~nNzvV-|5UW0iymipFzF(Ei^6=S1fx3|RN*PM46 zod^BA8RM}`2_UKM9Hc!g-9Y9hdmBJf4!jfusgvOHC&K&d`CmeO@})*WEdF!fgfgaZ zODhsI(Xp(8G4A+D;_B+=7>X7&J%=3C+1`tx0$w*#TPKwNd(wUIZmW)8X&sli?&4YW(Efmvbu;TM00Zc0S$x#9TCW2noBp#5zkrY?q;D0IF+nEE5vFGu?%%D zI<20VP&ql0Tv_2d{3_|U(Un`vq8o`jO+?hpv9sUO7k8T7%zCcgg4q8J7c$|Ai?Ssi z2JdW65f(WPBXsTb#U6{+-jLMa^NrWPTw~Xk(;%Z650)>lIgb{saDSo(59fHGck5FD z)N-w&sp`o1So-(|sF;!ttG1u;-4LQ;GJP%_m-S-F@q#eRl>l;KHyDK&b^7`kF;^IfYDRr`~E( zx?(BRy$IhR)Z0E)I=yI$*g*1ZUWc@@ty6xW1CdEdO(#WQ3;pT0E5j0Q%sbpw^m(G4 z!RIc^@I~W8UuM^XnigR@+u&GwlO0at<2A$8{wvjkD|-&knUgL!o%AEle?y?0$OHDL zZfhQB!7_5e%glx)X}_EG`Y6j5nDvVmZ4R^lmO=d&zzJ0<%PA1S%an2Z%mcZoP#rp; z4da>YY!Q)d${qh0>zzN;GsxZFZzyuq(7(d^t2XB+NmpQHoYLn^uQ&nNG`$T-EeelkM|2cF4U_m`mFdPN>b`LP zJO&3up;KPp$obH%#=6IRoC!Vc%e?oAbdh*_TDtvMLtVFdii6Bw>Z@uMs`n#wP|9XF z31d}l%`g-wQ!utXMv1vfCaiE7-w+e>ou>kK%$UbsAaQ@KfVe-4SUVz0-bEM@!L3u= zD|nuajhCYD)eLMMR8Ii*zV%=h_e0$eYh!}CcX`fnMh$4rr1QoM%-3LiMoU!8>+$5m z$(_dH(t25Y0xEeShFt)lE|JRxc&%&Hrjh;~Bu&V9gjpRIl-US^0T(wVD-Z$xPujiy z3qt!(-1v{4&)Ej=3bTY1>{F==H4n%)5aBlHR|f02+1@eXOw8;Qt9~*05=r1ylYF3Y zUDC=1S|^dLTr{drIBGTXQ8ZJ$d6RXHRq&k9K*=@a*9-%GL(QJc-??velQu7PUyJMD zeeSpMwDJ*Lye3Y_?czDX2F-4d8+xBC#@f}!dvila)bwR-kEu-G^gGx$CQ3V^OgwC! zhzd*9C(RMJX4__A9hR2)Y|?5nP739qHcVLW>$9Z;B+EA3qGg?ye5%4GhvS1L9DLN7 z9Oxp|;-1%YxH4$zQs?QvTUp5rvE5tgp0Tt$+i52I66%`WYCBE9SY3jW`S>Xq@``&*fd(-f>%>}(t@pHlv zH<|$&)*S4H7N$Kjwd1jJzueGtZny%F#esjEQT9sji{X@Eifb9QZq#W| zx7A|~f4Nt|tbZ-Xc&w6605>1d#B2pM>hF-RIMHF#2fsTgES9Ky4g}%t)?pBy4(+}Q{j$YsJAz6;l9cl(j5w+e%VZ`gpcYeFh}T1MNO^6Cxc5{#+ktYCn!SDS?7OWuyd(Hx$dON{z_wr%lRM=w7Meor zJ@YlsamGI|W)O0$c@_NC{F*6v|aExe@ z(ud8lzQIez8H}}M>3ie+_uGob7nuc`BuKEpN1gokjBbS__8?VbHpPO|2as-_R1fxI zA=$q9E|mMrty}lrv7dE+`l+iYmPM6q_t(8wG8|tj9_Zi1e%~2I#UGUyI7y0DE|p+6 zmIpghB&ds2fyRQ?-yxR%3OoK^*T(e#m7V_AnoEpSzw{EU!*(}|k1vy6G(x87o2jzF z3S=iN40WpMyaOvT(14UaD+xa9YtcO3tzOxX`~y^}aBLdO=A7wkrfb<3U|t`~5e6E~3%v83K!sC)L=OA?ZA z?m22D$@fdy#4@~7)T4Wpc}avPfpaTwjr)i%Q1SRJwPc74gOyLUnQ%^6U%*DA!_}-u z+$cplZ4q4yw&bo>vgrnTbetwxlnW39(%a^g`s-G&_E|+3fALtgePUoqhi(Ih_Lo$AnhRsv-;fe0OoB%&fj6jNBbf3- zLx#jmWP1K{lZx_MjR~7*HuE;O0aT_ByQG_egBnH zzOQS$g=g#v-|0j2`K0FT%knp>HupHiyx#`UWTcl3x$sWAGho1X$r99WhJ&?SmPe8# zVp?A|JSWt(-Tn!4bbWv5wM6oor3a2Go&eZ(mP)R>n#{1mcX=MGF7NMaPz~~3gP}5z z@WHy<&57=^i38XkWK| zoE4qGKK`ZJP60#vRtr-_qXx*T20szS0G z+m57vbfNyg{oc)~6K)E43;afC0z?y;QOUI6r^Yw?sC1PB%UGmhO~$D z*eP?Z5z20f=hB$6v`q?Vhbnsyp)yC)ABoUT2$SU=oU}ai0OsHd&k+2%YhZQ3yyAI1 zNt!S-h&CA@U%U}_uMPqayzL?HkBE8tR&T@kg3(~$P04TAN)VZHSwp*tKg{0;Mz|V;?#m`$_w@%Ka`HwQf=9vL@~O6lL{hJ9XJpwrjd(o2T=l( zV*DkkhDGaMUaqLDswK`%st+^Uy7d&;SUQGO%A`pMYHDqL=|4sOayqx%tywe>t?|yg zUv*dAkLKhjqYO35Gc01QIQKerEt=l}Xgw)jZ#x*?; zDn(KmHVg&$EGq-XN?fDI3A~mW%r)M=uz}B*ih*tSKURz}A+fILkz4YvbZg9`tSYjK zQ=zVlZrfM-^d-fyLD--v=v-CI7B^X94Acc7>%mhn4@ASeZYo@d-c( zl^u%qKtc@=;(34f?tS;Z>zsAg+Iyd~|Huf*;LXTL@;uL+-}#-NNzIo; z$Fp#9NC!tY3t5`?&w_1l@$oQaEO{n4yrpF^8n;hSeG5Sx0sZs~2c_6^hDztt(ti9< zT|G<0O%<%0;9u&`$iT{RJ2q2$AGb^3Rjw4f{GlUYYYm@Y;oyeOSD@gwr#^YD|&2RKs;wyejC6&ZL1k zkbADisw!fH=mVl{2=F)`ea9}a2w}3qzc3*F?o|Cym9XWnhIsLJTtTmDO6SitBey@N zz4+)z@0g?`RWRr7>o!aoJl{LU7^S6U+ido95Y(KI*p+9f=5n+Kyvts|e8JMja^m+J zO%5b+T!<%}9DJ{@{hnqF56GJ81o73MIPpl+|&x?}=2VY8T;d z=l?!5e$7c4;S##8#bwrNb93L{U+>lS4$@$H*m)N;(t4RV;zc*FrtvI+pFfH0!0MgA z+k5nB}E=i!RW&vN!NonxvP6|+6zPsFVu)ZB(r=ivMy2Nb=;R8p6 zwhN369iJSC7Jf|Pr?tID6%l@CwPwj@%_Dg4YQD`sXkPrA=0+2XaI6UPagIOD`oLu` zZIKK6{FOru;3t7nyd&pQicJ&<=Nkt_llWpwT2tP}@mV=tYx$l#Hc$WR6E^WfR$Ob- zaLLizDVYIb&E2*XtI!5)Q(MwxaIjA44PWJt83FY;-S^oQ(cw;Kiep9%?#05(wnMTf?UUd z03yT#P!qDN<;L^7kA?cSJ;~ppjFr4qfe#OL=jzkZRnOHx~2x13y4=g`cg0 ze4KSST*!AT%kw;94cwkAHnpaFTyWe`#;vCukGWpuWBs zZ`!468V3|D=Q5Gx57?aDUrPyIp1)SnWg0r{<<>L4X*T5$E`olRYQ>g?0Jn0NA^ zIp;NuGq1}^_ov;e|A{N*2c+I?lbZMvz&ZsJ&do==c+?FLcKcd%+b75j#5j%@MNDI+040nA zWRKE^9E6h;&dk2Pll)fXe!hS@AF9_e6&=(U>{3G3AARYufF^lvs_LF~W|nob%pKB| zgvgr7Sg#*W-ErN!Wbv9)P7PM{(l627yKL@?xM*n+bE^Y#3!5$yrKdL$zM+gw6~AI} zHQi**3F|zOl;|yCD>>cT5X!rj4Uv`uS_jb*7YYmXVsiR9okX1cvLoZ1N?e{T-QX+H ze$`;X9hq4D;HuV*^5#$XKJo+EaQ^Oo$3E563xC~1v%Q@os``JTJjI&B{MUt)fKrXC z*7D9w61oyGn8Z)dQ?+kCzR~CL+`GBsanF6h&vCm3!rnI)1pZJ-F;KDn{7NnImKvda z#dC<2)@9$H!mth0_xw-40X!7m-b@S&6Up!J2b%iT_nK%s(jk#;Y;#T0Ua*9tv=nw0 zY3kaL9CN2M)1e18P-;jU!5zn>>zmDxvE}3ewJ=WHY9t>tLDX)$w9xF@FQU8L1w$+W zW&xRwu-d79l~@+v=31^Z75^@F=WjMxktvqfmQA*4Ocdgw`BwsTpiv}0(? zm7WHPnQa%fymIos-pZ33+Q0S>N9Y89I4nV;1S?YIa;R98$?8SqgJPriWjt#J+=5uO zV=pBHP11)lzs*RcegSGM4f-flskF*i{UpJ1)LZ3t`$X#`TJm^L-pf13PFgCrs&I4< zkFF5C9CTr>)gd?t{G^8t#sZq_<5n+PM;u*U{oXf^Pr@bT>>gwDAEq`R?`ELBCMHiUs?0|ZniI?`-W!21JFdTf{XI?C<81HHist3s>F1Z((^cMi zrnUk~d+2we*nBP+Cz+FwzM2G<3b{{k@3N!+eg9PpQ7lPSqm*Q?%OGg!*VsP!sxJC* z>baxRCZz2aQR}u<|8J9Gaf2f3^66GFm(r7<$dN? zPpE!1ZgWPnVLaq=3R#)-X6j;P4UbSS_)5YC_)6`GU8=>N`vp<*foxR02%RSxO&LQI zJfUQEZ!G*EBY6SB>y%#y3E%e&b_YcR64CpafVj>{z1o9LG={U)-5bLIP5q_G-xQ&b z+afsklaq^j`fyzWg|YNWwXE7_Lix3|_%%~v{!p>PWXU2VmEv3o zrl~uhnk<797(}5-huwF?qUQb1-Q|75J2BBP@v}-eG5%F#Nt#T=drxu*q{9~C1O?Xo zK~c@relyt&lgtVpbA9d^XiscC&?Gru84uC@GW%fFz+K2Dpb*)GriWeoeNSG(RSnjT zQEJn6e7<^KqC4wm>Q(rTG!`8vs7flToW-HpRP8bFn4sa&^p#2VD=x>;NxoXa;g-%< zA#B#KIWvHiP!IOW^@ZV3>X|QskdSaY;Yl5qfRUY@`;E4JxQd0x5Pjy^o?exF4&*5sRjHtjrQ?0Vns&4+2MY*>axF0H(^U zIz81U28c;M{#!QxZ;+9H|JCJkP%81v*lTwV-#H}rGMqgpk_xDE%$LMO6R7%a52MLYvGo)_!gJa58+~DL#|oZ zaaCjcVxr;WU#jR30l*I(O z<>-;9qt6@}?JzOp_d$EAx}Ws)vjnzXOpSBaC{RnpXOo zc%-3?^w_HYbra7O2$%Ni7QV53+QoM{^bb|(gvZ@umV4xx-1osOWS?Ue6FkM!7D8CX zICi1q^H|3ymqR3p(07!p0m2r>$L?{emoNfcJ-m`*AF&xCTtT9z8=AhVCVjHb$fKa* z8#dCFZ&s6ZxL_S;1zL5P(v@^+l_i!^ulXZrm9VLIy;I(5dJLw;wIg?$NIs;dR+la0 z_c2(~DGUtGUT+ckAwb3cm`3m}d8atkG~HbA&Mjt@FkLhqx=f9pE^l@<>C{C+Vt()x z51qdPqyo?WUiIW(pZ`x+QLcdO`T=M1uQN!V&V2`4hM|_;0-A`-kjrEpx^a6^YCk2` zS*3o_!kGTgy1iRGR#Z#;;j*`G>2MGa@m42(l%J3q&|3g;gBKuzbV-5EcWj_h1QL3{4gJ{pKY6)jyk$VH#KzQ zyG`;XI*&L^us4I3=d$RJl&a+%56ek$hvvrvEi&zjAucC2z*4*mvfuvge*gO<#Mv-u zo{1n>AbD;+Wud1vts8W)?XE7B(0MY5u&6HHaw{`ocH>TZz2&)hS%4nAk=V%O7QSi40kE$XFlLE!5DJjGAY-H$+4>UFxwoj4<$pZ0?K;s^p;>) z*j&uE@Di_it6MAQH+UP1{48R)xTdBQscsZxzPORBm1HAsl^twT;aWGjfwHkt3~p8V z{TC}QRQeaC67mL4y5op(Pj=l0F@U?^%$bXvkshUU>e6J(+OZHDBFoda+T3ZzqpDoz zdR8OI!UuCxv<%B|qE@e#$0y z%5nXLsFBFb)OPLu#wkbp!_tWi?QB-sS3d$MNVxM!>8sY(*3C(sUq7 zp^77#OgY=hn)HXN2=W+`tM(*I2Ce=9E)8z{(XhY&{*h2{pU&JsemhlG*--)%%oePY+b z^4ICmsOz&wyqO6wK|@d1vH>^yB$*J{`E32brK}f?Z13(u5{IiIdR6w+-}+(!0rl9# zR_5}|Z>nTi#U-6$tk>6()E~x9yUZ&(mPVIk8d7JLL^}yDZapcH(6p4U0t9)fiY7g{ zS|Fw|bAg=i>Pt@EC!FTPodIBjP=i^7q`C+Y2ym+M5ZybD!^y|d;rkV?`t_}~tt;Oq z>pxvfwk1qVe1A5@>mDnQzr8cSW9u%DIHD8Zj^TT0w}*k1=zHcS0tiH5aOkdd=6F7!hr3?)mR@P-T+Yd zQxEi-?KMJm)pN{wI*Yp82j6DbEgL_{Px^lwy3}`>>FUG0=W!TrN9_c^hh3h0A6UD* z+*FWXy5mRr#LjvBc4H7$=rE2iYb7fLm4NeF!5aE%`Fa#vTL|)|k#5QcNJh_s`Cl}o z|K+TJ|3pL9`)@*&8eGy!p&x=qs5@}rhv|UQ9`_LI1=?UQOZ`?!yJvK1E>zTSmSV6+ zTMj>jL>s}6CI|`7@{_=5bPca;}LK6sX%>6 zIPe#gC#q+!JQ@oq>VAq378&MlY^skGjRTXVE||KitmRcB^c(c5x8@IB@vm~4{oIF2 z5Nl`(qc%{Rk(pWB#n}NB^@Y4F*QBZ{i~0lJWIPuZXbT)xk1s)MOZ+%QGpW*j?QuIk z9&qSg)gUIvrAkU|-Q$=mi=I&$3xp>p$HTe75+Q!X#u}nFRxDXno2ZD9f?oOFN`xdT z=;eBw269Z}3nRDl%=cRP9K9rchQ)90otWNioFwiHFMEo=yI`L9r9FWE4flv4m4_1Q zFvzzN$yNqu>0xUpA@&)h?|l#9V0;`=yXs=*I5uT42|L`(9+eF(Hf}{O&76$w zYU*&ZUluXE7{c=)lg;{t--|KXVa06=?ywqea=s5+!6g~@oa=O7b5<{hx6|?4!va>P zXtSVog%^qw>IB;ZdxLiIVaYx`UgpHkB;~b-`(o;p&X#eGv}Iivf~vCt*Ct4 zxn&}J`bG|zJRwDUyK-{Mv-gE?bex{EhL@siucWhOQu*hNEVr7%4aFICXffJyBgmkt z#MZEEBj{<7;~i_u*Sx;?iXMgb<+jlt$%YPDwc^pLo|O7l+J&QlS^gU#cT`-x;_N$ej$mp@A2imaYvGdjyo8QGD8{ zif?Fx-r%-P#4)8c*8!>RmMF5lq?Mw&E!xd=*4Zrvsjr->7c*KIC-3~y>sKE~rT4tv zjV|}gpg|!r2a0lmZ&aPxu$qEEe|uF2G!pQTpCWzr&AQ;M>gogT?o}kQ#k?YW0esZw z&t%!y6)R~z(pJ~w$W(Xshnco?qr&0d%$5_l-x{E$Lo&w+g=r4EJyQ!n?a)*Z2Yo$j zlIO|oPokq_du)$I2#6?$eR5vTdi~3*ritt)1ZbCTs(31@OZ zFo{-=;b|dAJKUWFWc#E*ZeeTz=hM$wlD7vtXGL3f{C+Gg)zPdts(DfKxPI0$6pJ+0 zzBdEKyFbORqbTR}bs8PdH7l>W!yjEls`?*7U!)tXsD)rL?6-N^p@xEyk^{yKYL^>_WdnyG#t9VoirO~{Bbok$VZU!=>UgpG8Q+L zn-b37og#yd=bS4bfxgHAsS^pGHGFlMu)c1u;HgOC2y>gPzNY(PQx1%)m`|Z+fxKCbkE7C(C=hwS&J;oq)*h z1rXW2fGI&bl-dkS0$dBn!Ph81r!0ToiH-v^&D#!nUrP=R_Aq%&^zW>|_4yI{;#ZnJ zcBrR{rghG29f8rMlH;+SLQCL-87(@ZXIlNzp*m?OI4rNUz-foR@72uRljQo%6y<)O z5GApq>wVXnalaCuAoUjgLg5C8K&HWiP&|DQx(LP?G3K?O^#jHN54~bEt%Dku7_S)?|pgxHGxSlTjM;w3g2zgD{`Fv z@+nmX?O8T@9&W)S0pf4RZ%bxJ0^lA{6CIx8gqrMv1j|!KVB)SS<|(f7+kycqPcrT; zf;xse#x%wIvr4RI9&umyop|!KRtv2Q_O`OeI_-@+rj%5#MBM*NAd|vwCbC3>Q z@I?)*d*rSK$sJ=Bg|Cu?NrteD?^|gSGvBt|lc0apNYLqNuses#6fGuf$5&0dT)Hja zZn!x`hmYM=%3&{8lne|;4e3=)9IHVcHfOvhbV0ad+^H|!kqHWocKeGgNe2_Y38AS)LG31Ksxm0&%3LCt`M79*xe@Gm?Cr7V*tUg z4r2l<68+0aWBD4%L>Ieq~p_ac?~>@0JFY7c~OeR8!6*Gxt^|_3mZCIbF5mr9-8?9&SINkaC8F zO8SeM@|s$^X0YeuGQ$jB%Nb{6I?5mxP2pci%lWE&ZPvX6*%IW0FLc|OT&v#xd|i1v zhazM*nem<(Nc3U>=Uqm@ykafvz%CU=@dpCE{|UMM@73`C?BA^1Pn5vkk=AY^ege1T z_WKdG4R|{$xDzx1R6ErpO-ptr31B7d0low)nGeE$tOYI8hxNJyGKE65h+6qxnNPFe z5e-VJB;R3P49!dBPtu%9+lApPAbw%_n5wsCU#!FLgnRc7;PP_&?1#N4BeFbe>k>0E z(R!|pE&FCRaq&j}{xdTntqrICpm8}0g9-4%(kB7R+_{^i$I|uBOGp}6M3}sqG=&q` z1hV5Z>c%UpU&&ekc^PeJW8ljP3U5G`i&aIU(9_83q{J_mfB8+k45 zUySXb%O!#km+bk9+_P@aMz0vVkORPsAqj4V8U*{t#4IvkGEqihS%QSLP%C;({?k3^Su zDb>}rr>znLq#i6aJRIKt0OnJ(ZSoHi$@KqR>5vC>_&r70jZ(C6{mOvNrK)Lz)!>54rx2Slc}Y2waq_)# zi?txB%;F78SWWfoZFXL%8-6p z%W3C}Rq2N@Qu>YgB{OXpt60de6@?M-&7HF$0rtXkS4bV_8WJ087C_VRA9eH6U3O7_ zsN8i#r&2rbIXV)xdk-GZGDwl_RHFjV3f@DuG0;{xes-?2c`f8NE^>T{!sH9Qi1!4@ zeLHpr(E)mAHq(&5`I&$-eLsDvWe|sj#@2630&Qt=dDrTnMY*3vb*J51I4`&q+Bm-s zTD(fD;>RlVV?l=du`b&qk%c}2cK?$%IorWF=(+HnWBAGINiMw$B>ea7Twcpnieqk)Q@s?J+_BvC-Gg@n^ zz%4DEJ<63l(2ZxWMrc^+g}-gDC&~O?O<-h_bKn$HQc~)p!m0-Curx|cet0>O<*F%K z+BiS;5QT2iL)nmzcE`&DcD%LDY)n)Qhbq>xKRe?g*Z2K!?*K?#1$Hm!*md!2 zgi`J8Z+IxP#}$Nb`U)5Tv)|N|$;4Tc*jW#TK7sGJh&64yH#=$)FM}mE@VIr7fMccVWPr5#fd5P4#_Qd zPW5HqJ5bTEQuPVkQt`)h^qD0h!d;E5Y z5Rs{aw;fjDB5$y2Koos@BEpM^Y}0$C(=_3u7W}9_{!v>4Tvu|j33c<8Sb{=8zF36} z8Qxj+Qsm+k6qf>64MK7RwLGmS)`K4)ai#eO8xt1$4RHw{+&1Tj45r5aP(9fOIxooV z!He2tc9VsuT%z2M9n{*q{HWw-AVdn0{hpG~b&W^tR8CKJ-I5vOakKp`zcaAAB~ds;`h#(1?F7 zI$ZaMs@!g~>O_xx_4J!MU4S%pszc~fAI6<3V9GFSW5&WGYbx4zNSky13c)|F;DX># zcOK6~&q#8GxhiWz$Z3B=hS6t33dzswo`{ zU&x2lMaM2@8blg*9TX8qB79rW=6SMd79ke_Be%+^(C?eYZ7%4TnTbz%^T*oBiyL** z8%?`&U?7U>@PaRVnY8=HvU%jc0E%ka6h8P&LVteEE8P{ZWS?q5;V1dM%$l+xb$l6e zOIB!Wacx7c+n%p;jNE5oYj58#s?W0JBTtLvZBaI`#^X|su-5Udm2o#;rhzQXAF9Xg ztr@yo(Cr!P;RDpClB~ex?8D)kwQ_7fyHA>5@py|HDB4J+w)(AYH|$N^9t+ksYLylR zc9Wg~kzM#?|LS3)*i8*izoAqwbqfYD_gRsUuhd_%g{~=IX}_S%gAh>9e|r#lk5MK8 z`&|r*MV{t`zpuz~2#d(iltA%gt8dXCuD~+*zr`CRLVaPe3XTrx`#5N6OOC>eRf&q3 zb(G%gDYU!F`b!tLo|Ce&r!)z9x`J(9^y|pHr6+G4x1X(^z0|)!f9#Dc`-MsTZtaOK zIL?1`s8+X*mh5sY-$o2mxbZ-Z1d|p-fiD*}We(LeNQnA1IICyD%nvM8%Dzk~k6Z|( za#ZUWkxBYUDgMR1KN9RK;sI_Cg-E?NZW9bT4x1tf*+C4B&b(EoqR=4sSF@apt6XqU zir&=7&ym8M(wP=ZD;v&?AmR)B|7_^=&tAvcUvwpkMqE^vIBIJ$X8rBn%>RNOb2D3=9*i3IZ~A4sZugNv-AU#1KcqCfl$)jCG>Y z$hA^ke(m;29LkCWo^FG3tv`+UIaSY{F=#F=@_>d|17JNUS|!xCP@Nxq>5q75LFv;5 zv=7OjzkPr6<%S-$^~bD>{V=N!V`W#HbTnl|- z25A|VmauEILBLqhbpV!$rK6m$0aCVNNa1fFzlF)-YAoA}70XXVa9Jy5BAKa9MzIRH zRtxWrhsWxh7zupPOCg|^@mE5FNIt|e@xxN=*Fu)IO6Sc|L}2HUrC^UOtAJ8T*I(Q@;bdps80Vti}P z2!wCaBqcy)e+cw+820U*CR5mPp09<@LL3ExRw{lW?*UMrVB7ijH$TWGr{92~s)#tdMktxG(LNZ~k3Z$TXpB zsFhvr`;4s?^CtDppSsJjA~k0nQoRvXcWLilUZqMI;87aEuqZ2?U4=3l(lDiVpV3mJ z`O&cv9FYbbYAJSx8W+kt#U;E@`ZhD zzbGw&bCMuNxW{A6;W|nK2xV2QfZTeXdUV5iu_7A#u478g0-Dtcc8f4l5nLFM-#L?% zS?$ETmEv&_1k3zN0v}7-YqxxB)s8L7=rRtMs4&kna#;Kwh2b1<#xN5O z$?S>;286?8U!H$cfSc3Zk9)CUL*buB_-{hr<;C2J-H6gH1- z)#n=C%~9*g-AsjK=Ap<~5>o{0&Ba=AnT76kF?dK$!OMV!WNcC0ej5HhSPJ}O?SbEZr zUY})!_Ut*SmSX6HjbzJFmdR82&^~B0Mhz5&ynFBQ`_pk>iL{`*EcBS= zsK<-KIpyQdPV(-ul_ac`*jEMk_hfOVVO*Ka#{^!DHrU8ne~U0}9QSeNbnbHI8l5|Z zJ`xQ1**KQ&2)UkuEMEv!YqdwC$u7&5A6{N>a8VIM!*Xx#$pZ)q}VJ z_!l5-RYDjr1S;_ygUf_gk4+^iTJ==)T2ZK08}-4F-*f2KibzplypTQP;303~>Ca*Q zr;VH`Rmg*SYrY+J`kg!jhdgyp7xj8h|-?W815c_fu8y#VNA#(O+L-Iq(5T z168uKr>7}x8eapn&GaD2c3fspNx=kdJzZg|xog2yYzH>MeY;&iYi%w8nE4c3W&f~w zhcXb1IU=jQ+RtNyESs zY7dG1ObV0aiSN)!0C-05HZeb1!AXoHOqc}XfyL;K+-nm3)m`hhg5zcJ-Ga9Qh4UQR znuxva0wb-Zwpul)+gS&mRuT_l@JEWWGz~B!9sdGBSFrhzh9)f{42hE+WK2|d7Y4{%d?$&e8o*F3<*hw9()dwZZ? zs?2Q43s_)K^#z>~xwH|blD?^35Y{#=G(FS3m7HYWS8>?*`q0pIuE~EA<@`*5?iVmS z?CM`@{LFvjjlP&BN%q1$tZ>S&eg54JEEHV9)LSc|=g!gn@|WIORJip6y5Y0$!h4n3 z-#qVU)S~KR5f)~jD`3@DQts%zK#eWqKdiiA;@vVaC+UVSlQwu+;j+8?|D2xfEi*GX zlF(c-neVSE8LN97oNizGw;@Ko<}5{##OI)@Nw5tyASdeCk<^pL}k80_kfsHHA^=BP}%>?e@T>%-o)xCY%{+0>`uPfsD2g6h8fgJ=RVqf zu<-Jp5RM5z<9ZXM@uCF7MMxhgDwD7QW+as_4Ab=H@j2NcTm_xfjlrJr56h)?>o0nU3%%nRJ2g`9ybEJ9FUA=5$!Vnpq( ze1_MOB_Y!f7#9^*)`*M8L zkO+)H!%_#>1Dze>*txIi7VC_jS)LnGxe=MjQS7C|#4Dfh;Pp@VGEkd6*LeDU`LqEL z2GB9{!i1I5LpTGNc_5UavB-aJIr|}OR8^u}AHa4>$Gf^Z#?Ac%-y&MiMD7=7zSj&E zDE;(0siwE4B8UepgnDA!FmAJlE37@jtyj16x((t?b_|pUSm1fFk8!##OsEKKFF=(n7N>7lpzX=wI*sOkQ+FqF+P z)jtRlETFq!U!Y!;Y|VQ-^JMmNQG1J|YXh|K)EBOCeZnZqILK-LRI+f|ZrSUZm-)d> z&$R&lBtRv4&&&d}h1{{MEYDz{kcJ88efg#t!XA!*uLnr=xG8h;y0%v}#qBZa1&Y0y z4+x(VPT8C-BNipJoSGp|p^rl)rr?gyggoWb9Exg)1ZfwLXtMQ)(VYMT!O2!~Ow>Z) zMGK{`ImsoLZACtn{X261g%j0VRYjpeD660#Uxm^= zu<_}oQ^Nz=IRB7nY7Y~tyh=0Svlmv=pXn&~-WEbG@27uO!(S4w3 z-gmr!_Gt%rR@lH1?l?o)K7e%hH{-nqUTr8ZDZ1Ye&M!Mc3{?S`)PI{~%xQM9 zLZ|PIQ)*kPP%GQj{$Y`5lF{7`C9&YERC)TJ;km5p`syzgh309kj6Gp zjoBs-(WJYDv&7w*sE4W7Sjg|9*L&2GSQevx`S+ajOnz(?^Yt;5*t-zv+eH|a_-{ED zr|FkLP7{FcrAUTfi)mHuDE1E&Ny!SN{`4`mXT?i5RZHyfU0QQ&NbWRrU7K>j>9lf* zggtRu6QWj?tGXAwkUwqKnl*&_LKtrdz)aK&XQGy^p}Amphg&v{9@> zsh3V6clO=Jf<#JO8`tnfW4IMh-SPp;K@{o%a@kD3LUB|9xs-KXSXnTa0?S|BDI3+) zm?Drl;uD^jX0E|S{;K`3|Ep{Ezw=)4{YGf7dVvhNeSkyYr^`*Y&XWT@zCN)J8)-4c zd@pxIUQ`JDxDOuL8cdlDe6##S<`PR={x-{!^BDEFRJk4guyL%rAw(zY@W+V;jl|c(3!Wi$;oC>-|ENl5DN=ggRnmk z^GURJoO~s?y!+cVo9d_HSD3s~2851B$SOoAKu{owby#NMa)PD^Q-H(QuE->0Hty25FP<)Q(~QM|XjJfG@|`MQ}pat}yyTx>60~Y%Ecf`t)fl?0|N&`T!IO08&`nG>Op|NH-`UPd>vXnLEUYm>d)04Q<xGd+zUduIpShjj_(t{%Mr3Ek>369t)kq_2Eokn8uoNZC&Hg zenxw%DCtbvH>xv{k8jDueUvg_QKcDBFXE@+~CpA`vyTB8F8tTq3Omjq_hgDm7f2dUK^w!5~G})i#;^$ETeY0XoYDY^fgQ;;;Pj()~Sx__nNE~Hgzq6Q< zCHAcLYt6aB7aVHt@WIS3(rJ-g-Th}a5ty8`|V}c2au7DS}S4YnL9Zba)}9qP~~;JU3)&k zO$dKoodysrwL)YT&fA-|d?UEyr5B;BAveY)+05;c%fzuh&UV7KG0dX6AhywV{W!O{ zNrL@2;YF~OghIwl@H@e$_67zK>8%PAD6^8*`5B4|FLD%uniJB~-hxc7=dZISes>&q zTTdzmWM_l%Co=sX?l&cXr~sh zpwLPC*-Ms2=!)=J$Ddg`_Bus<*8R&ycb95-7R-(kAswM`XG!e?prR9=9pX_3a8Seu zLO*&(VGJb8?!`)nc0lNGE)R&et-HXh=L{tqeYHVt(6nY6Ve>Ej+(1En;anU3dBX4%y*k-Ilh^uGOAO5Fulf&T zkZZMT$ae+HM5RunTGx49Q0JUL?!KO0vZ-U!QBG$B^6W{T?tsWDQcMhLLV8kwg+8Mr z9MDYVH3R+PdrsVo6*`xtZNzW(!~8w?0wx(DB!^<6xH3KnnPG@y_WVDnm-U(rt(V7N!O~7{KIO zU7KiYnTFU+!~&2)#PCtz5%>zAq}X=+2jrCh3C;9hy!NcvjUOj0ZojucWjJItfhDN{ z9*JgEy+l;(GBcS8h*<24mlulRRc-8!j~Z9y3KfdI9Ccgyk%9bVT)?tf90rN!%vK$W ziQ55;vp^8MIlg9nB}@PFC)Z^kW^F#B>ALrZKf}gr_$34-cyW2ENyADzIFz1*-_!ZS z#-3i!cOuJW?d~?h?o(T!-|h>^J(9xM@e;ds`Y$l$d%(}STvb0m)L2SkWYAI7dg+<+Nx*?-2^67*>RCCOepHu z8Uhb4ywi%!jcDa4mB;70vG4I$`rmd8dW+cIX$eRgeIwnMF7 zBc0Xkih#C~t+uHV#8(?>GJhn|c6Bk6%(jhPNiUh#bNotvJ_!>f3q%D-X|{KolZv`| zttp~W3NvWuI0*BMou;pw)?{7Q`fLpLmC(xjcbQ&PcUNA~x5gFtJ3irGykBvS--A|Z z-3|pH*il3&+(UxlW+1^&Vlo`v3sxh2BFb(Ia-Bt&g{xjE2(bJ;uhor_kjUq%KN!=B zn-4x4_~<3p9V5UlPBY34jv!Mkpmx;v_r8o69G1~GzMf3VuCH>NYMmTeiL}p2IHo>Q z`a{K^C$sy_og27)+BvtDxY&BG2ZYPZRKA1$M38PLV?Njd13$vkr%Az2TAF#aySKyO zK;MICo57C(NU^mO3d zj7n8;3B7}UVtuuUy=kMm6?cR~Ht%zh1oZgW~WV+?4 z5qm$ohrB$Ot!M%YTcrM=bq*NESIc<;KKMIbmri&~WjO|LsWPL-1xuMXzl?d-ok-=_wnP1L@ke!*4fguJu4`5E z2k5~=pdG}o#OnguC>Llp#*$ZYGoS9!1&0kt1^KMe22-igfji?iJ*)>e?!aQ5s@q`O zhQgVj2GFJu(_jlUNQPa~!0DuGtf_?6z zGF{F^gm8{uUz6>84sxv^le@_;9q&GVqCsI;CW22E6!Bq%Oiam#$;ZQsK14vRG;IA| zTkkVT;RzV(s!Y{&XWoH98Y22wcRmcT>5PH52R}gLrk7(Uov3%;Q}7cjiCC%1q<#W| zrb3o2!GEEMqnDxZn~#YfaRv`{Xf@e-+bH zWS>C=7P$F_r^S^z`X)6U<6TC%glAYJ$TEla23yzS`kWY}ynXQg6AbL68gO1E8U}e8 zn>{ovIS9s;kWbbwt60Qt7?yhWUG@Sh6cyN}W74(bMP5#6iD4mwHn8!P0GO+qI~0G|&aAuLq=yuUrH& z3(4XCjfIcDb5g$x+wV|2fkZa+FyPv1~^qJ@&wh``*C8}+fi|6|r1YhzTFvs*U) z;5s@z=aP%L;N+>cA`fIHafwWsl=&Vwvhe4E{N?gLvfjX(=rliU|2v!iu>D^jJGJo7 zF8>*-;@AJX?4_}uTlbdzcWz+&tFhI;D;~HY;r6NH?}3x=vFx9`I(N-q`L84}-ck17 z`@dR>x{rb7yjIGWKv&N#WpUk~2CDfEZ{9nq-_`cg3$l~ diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 24eb8285a7..bc5f83311b 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -23,56 +23,65 @@

- -
- - Orca Cloud -
- -
-
-
-
login / register
-
Not signed in
-
- -
-
- -
-
-
log out
-
-
- - -
-
- - + + -
-
-
login
+ +
diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index f522c44bed..f07c6f10f5 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -1,7 +1,6 @@ //var TestData={"sequence_id":"0","command":"get_recent_projects","response":[{"path":"D:\\work\\Models\\Toy\\3d-puzzle-cube-model_files\\3d-puzzle-cube.3mf","time":"2022\/3\/24 20:33:10"},{"path":"D:\\work\\Models\\Art\\Carved Stone Vase - remeshed+drainage\\Carved Stone Vase.3mf","time":"2022\/3\/24 17:11:51"},{"path":"D:\\work\\Models\\Art\\Kity & Cat\\Cat.3mf","time":"2022\/3\/24 17:07:55"},{"path":"D:\\work\\Models\\Toy\\鐩村墤.3mf","time":"2022\/3\/24 17:06:02"},{"path":"D:\\work\\Models\\Toy\\minimalistic-dual-tone-whistle-model_files\\minimalistic-dual-tone-whistle.3mf","time":"2022\/3\/22 21:12:22"},{"path":"D:\\work\\Models\\Toy\\spiral-city-model_files\\spiral-city.3mf","time":"2022\/3\/22 18:58:37"},{"path":"D:\\work\\Models\\Toy\\impossible-dovetail-puzzle-box-model_files\\impossible-dovetail-puzzle-box.3mf","time":"2022\/3\/22 20:08:40"}]}; var m_HotModelList=null; -var bambuSectionExpanded = false; function OnInit() { @@ -12,6 +11,8 @@ function OnInit() SendMsg_GetBambuLoginInfo(); SendMsg_GetRecentFile(); SendMsg_GetStaffPick(); + + Set_AccountMenu_Event(); } //------最佳打开文件的右键菜单功能---------- @@ -89,7 +90,7 @@ function HandleStudio( pVal ) if (strCmd == "get_recent_projects") { ShowRecentFileList(pVal["response"]); } else if (strCmd == "orca_userlogin") { - SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"]); + SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"], pVal["data"]["account"]); } else if (strCmd == "orca_useroffline") { SetOrcaUserOffline(); } else if (strCmd == "studio_bambu_userlogin") { @@ -118,21 +119,12 @@ function HandleStudio( pVal ) $("#LeftBoard").hide(); } } else if (strCmd == "network_plugin_installtip") { - let nShow = pVal["show"] * 1; + // Bambu Cloud is unreachable without the network plugin, so its row only carries the tip. + let bMissing = pVal["show"] * 1 == 1; - if (nShow == 1) { - // Auto-expand Bambu section to show the tip - if (!bambuSectionExpanded) ToggleBambuSection(); - $("#BambuLogin1").hide(); - $("#NoPluginTip").show(); - $("#NoPluginTip").css("display", "flex"); - } else { - $("#NoPluginTip").hide(); - // Only restore login button if not already logged in - if ($("#BambuLogin2").is(":hidden")) { - $("#BambuLogin1").show(); - } - } + $("#NoPluginTip").css("display", bMissing ? "block" : "none"); + $("#BambuAccount").toggleClass("Disabled", bMissing).attr("aria-disabled", bMissing ? "true" : null); + if (bMissing) SetBambuSectionExpanded(true, false); } else if (strCmd == "modelmall_model_advise_get") { //alert('hot'); if (m_HotModelList != null) { @@ -170,34 +162,128 @@ function GotoMenu( strMenu ) } } -function SetOrcaLoginInfo( strAvatar, strName ) -{ - $("#OrcaLogin1").hide(); - $("#OrcaStatusText").hide(); +/*------Account rows------*/ - $("#UserName").text(strName); +/*----Everything that differs between the two cloud providers lives here----*/ +var AccountRows = { + orca: { row: "#OrcaAccount", name: "#UserName", avatar: "#UserAvatarIcon", dot: null, + loginCmd: "homepage_orca_login_or_register", logoutCmd: "homepage_orca_logout" }, + bambu: { row: "#BambuAccount", name: "#BambuUserName", avatar: "#BambuAvatarIcon", dot: "#BambuStatusDot", + loginCmd: "homepage_bambu_login_or_register", logoutCmd: "homepage_bambu_logout" } +}; - let OriginAvatar=$("#UserAvatarIcon").prop("src"); - if(strAvatar != null && strAvatar.trim() !== '' && strAvatar!=OriginAvatar) - $("#UserAvatarIcon").prop("src",strAvatar); - else - { - //alert('Avatar is Same'); - } +var BAMBU_FOLD_KEY = "OrcaHome_BambuCloudExpanded"; - $("#OrcaLogin2").show(); - $("#OrcaLogin2").css("display","flex"); +var m_OpenAccountMenu = null; + +function SetAccountAvatar(selector, strAvatar) { + if (strAvatar != null && strAvatar.trim() !== '') { + if ($(selector).attr("src") !== strAvatar) $(selector).attr("src", strAvatar); + } else { + $(selector).removeAttr("src"); + } } -function SetOrcaUserOffline() -{ - $("#UserAvatarIcon").prop("src","img/c.jpg"); - $("#UserName").text(''); - $("#OrcaLogin2").hide(); +function OnAvatarLoadError(img) { + img.removeAttribute("src"); // fall back to the placeholder glyph +} - $("#OrcaLogin1").show(); - $("#OrcaLogin1").css("display","flex"); - $("#OrcaStatusText").show(); +function SetAccountSignedIn(strProvider, strAvatar, strName, strHandle) { + var account = AccountRows[strProvider]; + + $(account.name).text(strName).attr("title", strName); /*----long names are ellipsized----*/ + SetAccountAvatar(account.avatar, strAvatar); + /*----the handle is the one thing the row does not already show----*/ + $(account.row).addClass("SignedIn").data("handle", strHandle !== strName ? strHandle : null); + $(account.dot).addClass("Online"); + + if (m_OpenAccountMenu === strProvider) OpenAccountMenu(strProvider); +} + +function SetAccountSignedOut(strProvider) { + var account = AccountRows[strProvider]; + + if (m_OpenAccountMenu === strProvider) CloseAccountMenu(); + $(account.name).text('').removeAttr("title"); + SetAccountAvatar(account.avatar, null); + $(account.row).removeClass("SignedIn").removeData("handle"); + $(account.dot).removeClass("Online"); +} + +function OnAccountRowClick(strProvider) { + var account = AccountRows[strProvider]; + var row = $(account.row); + if (row.hasClass("Disabled")) return; + + if (!row.hasClass("SignedIn")) { + CloseAccountMenu(); + SendSimpleCommand(account.loginCmd); + } else if (m_OpenAccountMenu === strProvider) { + CloseAccountMenu(); + } else { + OpenAccountMenu(strProvider); + } +} + +function OpenAccountMenu(strProvider) { + var account = AccountRows[strProvider]; + var row = $(account.row); + var top = row[0].offsetTop + row[0].offsetHeight + 6; /*----read the geometry before writing----*/ + var strHandle = row.data("handle") || ""; + + $("#AccountMenuHandle").text(strHandle).css("display", strHandle === "" ? "none" : "block"); + $("#AccountMenu").css("top", top + "px").addClass("Open"); + $(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false"); + row.addClass("MenuOpen").attr("aria-expanded", "true"); + m_OpenAccountMenu = strProvider; +} + +function CloseAccountMenu() { + $("#AccountMenu").removeClass("Open"); + $(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false"); + m_OpenAccountMenu = null; +} + +function OnAccountMenuLogout() { + var account = AccountRows[m_OpenAccountMenu]; + CloseAccountMenu(); + if (account) SendSimpleCommand(account.logoutCmd); +} + +/*----Bambu Cloud is secondary, so its account folds away under the main one----*/ +function SetBambuSectionExpanded(bExpanded, bPersist) { + $("#BambuCloudBody").toggleClass("Expanded", bExpanded); + $("#BambuAccount").attr("tabindex", bExpanded ? "0" : "-1"); /*----keep the folded row out of the tab order----*/ + $("#BambuCloudHeader").toggleClass("Expanded", bExpanded).attr("aria-expanded", bExpanded ? "true" : "false"); + if (!bExpanded && m_OpenAccountMenu === "bambu") CloseAccountMenu(); + // Best effort: the fold is a per-machine convenience, not a synced preference. + if (bPersist) { try { localStorage.setItem(BAMBU_FOLD_KEY, bExpanded ? "1" : "0"); } catch (e) {} } +} + +function ToggleBambuSection() { + SetBambuSectionExpanded(!$("#BambuCloudBody").hasClass("Expanded"), true); +} + +function Set_AccountMenu_Event() { + var bExpanded = false; + try { bExpanded = localStorage.getItem(BAMBU_FOLD_KEY) === "1"; } catch (e) {} + SetBambuSectionExpanded(bExpanded, false); + + $(document).mousedown(function (e) { + if (m_OpenAccountMenu === null) return; + if ($(e.target).closest("#AccountMenu, .AccountRow").length === 0) CloseAccountMenu(); + }); + + $(document).keydown(function (e) { + if (m_OpenAccountMenu !== null && e.key === "Escape") CloseAccountMenu(); + }); + + /*----Enter and Space activate the div-based buttons of this panel----*/ + $(document).on("keydown", "#LoginArea [role=button], #LoginArea [role=menuitem]", function (e) { + if (e.key !== "Enter" && e.key !== " " && e.key !== "Spacebar") return; + e.preventDefault(); + this.click(); + }); } function SetMallUrl( strUrl ) @@ -279,8 +365,6 @@ function SendSimpleCommand(command) { SendWXMessage(JSON.stringify(tSend)); } -function OnOrcaLoginOrRegister() { SendSimpleCommand("homepage_orca_login_or_register"); } -function OnOrcaLogOut() { SendSimpleCommand("homepage_orca_logout"); } function SendMsg_GetOrcaLoginInfo() { SendSimpleCommand("get_orca_login_info"); } @@ -294,15 +378,6 @@ function SendMsg_GetRecentFile() } -function OnLoginOrRegister() -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_login_or_register"; - - SendWXMessage( JSON.stringify(tSend) ); -} - function OnClickModelDepot() { var tSend={}; @@ -405,59 +480,13 @@ function OnExploreRecentFile( ) $("#recnet_context_menu").hide(); } -function OnLogOut() -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_logout"; +// --- Cloud providers --- - SendWXMessage( JSON.stringify(tSend) ); -} +function SetOrcaLoginInfo(strAvatar, strName, strAccount) { SetAccountSignedIn("orca", strAvatar, strName, strAccount); } +function SetOrcaUserOffline() { SetAccountSignedOut("orca"); } +function SetBambuLoginInfo(strAvatar, strName) { SetAccountSignedIn("bambu", strAvatar, strName, null); } +function SetBambuUserOffline() { SetAccountSignedOut("bambu"); } -// --- Bambu Cloud Section --- - -function ToggleBambuSection() { - var body = document.getElementById('BambuCloudBody'); - var chevron = document.querySelector('.bambu-chevron'); - if (!body || !chevron) return; - bambuSectionExpanded = !bambuSectionExpanded; - if (bambuSectionExpanded) { - body.classList.add('expanded'); - chevron.classList.add('expanded'); - } else { - body.classList.remove('expanded'); - chevron.classList.remove('expanded'); - } -} - -function SetBambuLoginInfo(strAvatar, strName) { - $("#BambuLogin1").hide(); - $("#BambuUserName").text(strName); - if (strAvatar && strAvatar.trim() !== '') { - $("#BambuAvatarIcon").prop("src", strAvatar); - } - $("#BambuLogin2").show(); - $("#BambuLogin2").css("display", "flex"); - $(".bambu-status-dot").addClass("online"); - $("#BambuStatusText").text("Connected"); - $("#BambuStatusText").attr("tid", "orca11"); -} - -function SetBambuUserOffline() { - $("#BambuAvatarIcon").prop("src", "img/c.jpg"); - $("#BambuUserName").text(''); - $("#BambuLogin2").hide(); - if ($("#NoPluginTip").is(":hidden")) { - $("#BambuLogin1").show(); - $("#BambuLogin1").css("display", "flex"); - } - $(".bambu-status-dot").removeClass("online"); - $("#BambuStatusText").text("Not connected"); - $("#BambuStatusText").attr("tid", "orca10"); -} - -function OnBambuLoginOrRegister() { SendSimpleCommand("homepage_bambu_login_or_register"); } -function OnBambuLogOut() { SendSimpleCommand("homepage_bambu_logout"); } function SendMsg_GetBambuLoginInfo() { SendSimpleCommand("get_bambu_login_info"); } function BeginDownloadNetworkPlugin() diff --git a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp index 4419395b4d..4bfe429cd3 100644 --- a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp +++ b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp @@ -859,9 +859,11 @@ std::string OrcaCloudServiceAgent::build_login_cmd() display_name = "unknown name"; } json cmd; - cmd["command"] = "orca_userlogin"; - cmd["data"]["name"] = display_name; - cmd["data"]["avatar"] = get_user_avatar(); + cmd["command"] = "orca_userlogin"; + cmd["data"]["name"] = display_name; + cmd["data"]["avatar"] = get_user_avatar(); + // The unique handle, shown under the display name in the homepage account menu. + cmd["data"]["account"] = get_user_name(); return cmd.dump(); } From 9b1e141aa9cd7dc9f5c374c8d3c2ebd5a4304853 Mon Sep 17 00:00:00 2001 From: yw4z Date: Mon, 7 Sep 2026 19:57:37 +0300 Subject: [PATCH 132/208] Allow saving preset without parent while it doesnt have parent profile (Detach from parent option for parentless profiles) (#15558) * Update SavePresetDialog.cpp * correct variable name --- src/slic3r/GUI/SavePresetDialog.cpp | 47 ++++++++++++----------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 65b75c3d92..04f98f06f9 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -114,7 +114,7 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox if (parent->m_mode == comDevelop) { // A new user copy of a system preset inherits from the selected system preset. const std::string parent_name = sel_preset.is_system ? sel_preset.name : sel_preset.inherits(); - const bool can_detach = !parent_name.empty(); + const bool has_parent = !parent_name.empty(); wxBoxSizer *detach_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -123,8 +123,9 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox auto detach_checkbox = new ::CheckBox(parent); detach_checkbox->SetToolTip(detach_tooltip); - auto detach_label = new wxStaticText(parent, wxID_ANY, _L("Detach from parent")); + auto detach_label = new wxStaticText(parent, wxID_ANY, has_parent ? _L("Detach from parent") : _L("Save without parent")); detach_label->SetFont(::Label::Body_14); + detach_label->SetForegroundColour(wxColour("#363636")); detach_label->SetToolTip(detach_tooltip); detach_sizer->Add(detach_checkbox, 0, wxALIGN_LEFT | wxLEFT, BORDER_W); @@ -132,39 +133,31 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox sizer->Add(detach_sizer, 0, wxEXPAND | wxTOP, BORDER_W); sizer->AddSpacer(FromDIP(5)); - const wxString parent_text = can_detach ? from_u8(parent_name) : _L("Unique preset"); + const wxString parent_text = has_parent ? from_u8(parent_name) : _L("Unique preset"); auto parent_label = new wxStaticText(parent, wxID_ANY, parent_text); parent_label->SetFont(::Label::Body_12); parent_label->SetForegroundColour(wxColour("#6B6B6B")); - parent_label->SetToolTip(can_detach ? _L("Parent preset") : _L("This preset does not inherit from another preset.")); + parent_label->SetToolTip(has_parent ? _L("Parent preset") : _L("This preset does not inherit from another preset.")); sizer->Add(parent_label, 0, wxEXPAND | wxLEFT, BORDER_W + FromDIP(24)); sizer->AddSpacer(FromDIP(5)); - if (!can_detach) { - detach_checkbox->Disable(); - detach_label->SetForegroundColour(wxColour("#6B6B6B")); - } - else { - // Set initial state (unchecked by default) - detach_checkbox->SetValue(m_detach); - // Bind the checkbox event to update the detach state for this item - detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent& event) { - m_detach = detach_checkbox->GetValue(); - event.Skip(); // Let CheckBox update its bitmap for the new state. - }); + // Set initial state (unchecked by default) + detach_checkbox->SetValue(m_detach); + // Bind the checkbox event to update the detach state for this item + detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent& event) { + m_detach = detach_checkbox->GetValue(); + event.Skip(); // Let CheckBox update its bitmap for the new state. + }); - detach_label->SetForegroundColour(wxColour("#363636")); - - auto on_toggle = [detach_checkbox]() { - detach_checkbox->SetValue(!detach_checkbox->GetValue()); - wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); - ev.SetEventObject(detach_checkbox); - detach_checkbox->GetEventHandler()->ProcessEvent(ev); - }; - detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); - detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); - } + auto on_toggle = [detach_checkbox]() { + detach_checkbox->SetValue(!detach_checkbox->GetValue()); + wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); + ev.SetEventObject(detach_checkbox); + detach_checkbox->GetEventHandler()->ProcessEvent(ev); + }; + detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); + detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); } m_radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, [this](wxCommandEvent &e) { From 40ce930e18a526016641e6e3170e367e37b2dbac Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 7 Sep 2026 15:54:54 -0500 Subject: [PATCH 133/208] build: share cached objects between build directories and worktrees (#15573) --- CMakeLists.txt | 16 +++++++++++++++- build_win.bat | 3 ++- scripts/test_build_win.ps1 | 6 ++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78dd2586da..5620875d4f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,6 +110,7 @@ option(SLIC3R_WARNINGS "Emit compiler warnings for OrcaSlicer sources" option(SLIC3R_BUNDLED_WARNINGS "Emit compiler warnings for bundled third-party sources" 0) option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1) +option(SLIC3R_RELATIVE_DEBUG_PATHS "Record a relative compilation directory in debug info (clang-cl)" 0) option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0) # Python stubgen module @@ -352,11 +353,14 @@ if (MSVC) add_compile_options(/Zc:lambda) endif () # /bigobj (Increase Number of Sections in .Obj file) + add_compile_options(-bigobj) # error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater # Generate symbols at every build target, even for the release. # -Zm520 fixes error C3859 but forces the compiler to pre-allocate that memory for every translation unit regardless # combining /Zi with /FS frees up a significant amount of memory pressure across all parallel compile jobs and makes /MP faster overall. - add_compile_options(-bigobj /Zi /FS) + if (SLIC3R_MSVC_PDB) + add_compile_options(/Zi /FS) + endif () # Disable STL4007: Many result_type typedefs and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17. #FIXME Remove this line after eigen library adapts to the new C++17 adaptor rules. add_compile_options(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) @@ -374,6 +378,16 @@ if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG") endif () +# Without this every object names its build directory and two worktrees never +# share cache entries. The linker still writes absolute paths into the PDB. +if (SLIC3R_RELATIVE_DEBUG_PATHS) + if (IS_CLANG_CL) + add_compile_options(-ffile-compilation-dir=.) + else () + message(WARNING "SLIC3R_RELATIVE_DEBUG_PATHS is only implemented for clang-cl") + endif () +endif () + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) add_compile_definitions(BOOST_NO_CXX98_FUNCTION_BASE _HAS_AUTO_PTR_ETC=0) endif() diff --git a/build_win.bat b/build_win.bat index 840279e4f3..dfb30e313b 100644 --- a/build_win.bat +++ b/build_win.bat @@ -699,7 +699,8 @@ if "%build_slicer%" == "ON" ( ) if not "!cache_args!" == "" ( - set "slicer_args=!slicer_args! !cache_args!" + REM Relative debug paths as well, so another tree can reuse the objects. + set "slicer_args=!slicer_args! !cache_args! -DSLIC3R_RELATIVE_DEBUG_PATHS=ON" ) REM Configuring against a tree that was never built fails deep inside diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 index 34f64117af..a8abfbc7bf 100644 --- a/scripts/test_build_win.ps1 +++ b/scripts/test_build_win.ps1 @@ -360,6 +360,12 @@ $cases = @( @{ Name = '--cache turns the precompiled header off'; Args = @('-s', '-l', '-x', '--cache', 'ccache') Env = @{ PATH = $ccacheOnPath } Contains = @('-DSLIC3R_PCH=OFF', 'COMPILER_LAUNCHER') } + # Without it the objects name the build directory and only that tree can use them. + @{ Name = '--cache asks for relative debug paths'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DSLIC3R_RELATIVE_DEBUG_PATHS=ON') } + @{ Name = 'no --cache leaves the debug paths alone'; Args = @('-s', '-l', '-x') + NotContains = @('SLIC3R_RELATIVE_DEBUG_PATHS') } # The resolved path, not the bare name, so PATH cannot change it later. @{ Name = '--cache names the resolved path in the banner'; Args = @('-s', '-l', '-x', '--cache', 'ccache') Env = @{ PATH = $ccacheOnPath } From 5779274e5bb226623949829b9d00ee1bd3949846 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 7 Sep 2026 16:02:14 -0500 Subject: [PATCH 134/208] test: cover support interface generation and tree support (#15575) --- tests/fff_print/CMakeLists.txt | 1 + tests/fff_print/test_support_material.cpp | 361 ++++++++++++++++++++++ tests/fff_print/test_tree_support.cpp | 125 ++++++++ 3 files changed, 487 insertions(+) create mode 100644 tests/fff_print/test_tree_support.cpp diff --git a/tests/fff_print/CMakeLists.txt b/tests/fff_print/CMakeLists.txt index fc46bb8fdc..3247bfda66 100644 --- a/tests/fff_print/CMakeLists.txt +++ b/tests/fff_print/CMakeLists.txt @@ -19,6 +19,7 @@ add_executable(${_TEST_NAME}_tests test_skirt_brim.cpp test_slicing_pipeline_hook.cpp test_support_material.cpp + test_tree_support.cpp test_trianglemesh.cpp test_wipe_tower.cpp ) diff --git a/tests/fff_print/test_support_material.cpp b/tests/fff_print/test_support_material.cpp index f854939c8c..4564c0b034 100644 --- a/tests/fff_print/test_support_material.cpp +++ b/tests/fff_print/test_support_material.cpp @@ -3,11 +3,103 @@ #include "libslic3r/GCodeReader.hpp" #include "libslic3r/Layer.hpp" +#include +#include +#include +#include + #include "test_helpers.hpp" // get access to init_print, etc +// Not self-contained: its inline constructor uses PrintObject, PrintRegion, SlicingParameters and +// Geometry, so it must follow the headers (pulled in via test_helpers.hpp) that define them. +#include "libslic3r/Support/SupportParameters.hpp" + using namespace Slic3r::Test; using namespace Slic3r; +// Distinct layer Z heights carrying support interface extrusion. +static size_t support_interface_layer_count(const std::string &gcode) +{ + return layers_with_role(gcode, "support material interface").size(); +} + +// Distinct layer Z heights carrying support base extrusion. The base G-code label "support material" +// is a substring of "support material interface", so a base line is a support line that is not an +// interface line. +static size_t support_base_layer_count(const std::string &gcode) +{ + std::set layers; + GCodeReader parser; + parser.parse_buffer(gcode, [&layers](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + const std::string_view comment = line.comment(); + if (comment.find("support material") != std::string_view::npos && + comment.find("interface") == std::string_view::npos) + layers.insert(self.z()); + }); + return layers.size(); +} + +// Dominant support-interface fill direction per interface layer, in radians [0, pi). Uses the +// length-weighted axial mean (each segment angle doubled so a line and its reverse agree, then +// halved): the parallel infill lines reinforce while the surrounding perimeter cancels. +static std::map interface_fill_angle_by_layer(const std::string &gcode) +{ + std::map> acc; // z -> summed length*(cos2a, sin2a) + GCodeReader parser; + parser.parse_buffer(gcode, [&acc](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + if (line.comment().find("support material interface") == std::string_view::npos) return; + const double dx = line.dist_X(self), dy = line.dist_Y(self); + const double len = std::hypot(dx, dy); + if (len < 1e-6) return; + const double a2 = 2.0 * std::atan2(dy, dx); + auto &p = acc[self.z()]; + p.first += len * std::cos(a2); + p.second += len * std::sin(a2); + }); + std::map out; + for (const auto &kv : acc) { + double a = 0.5 * std::atan2(kv.second.second, kv.second.first); + if (a < 0) a += M_PI; + out[kv.first] = a; + } + return out; +} + +// Acute angle (degrees) between two axial fill directions in [0, pi). +static double axial_angle_diff_deg(double a, double b) +{ + const double d = std::fmod(std::fabs(a - b), M_PI); + return std::min(d, M_PI - d) * 180.0 / M_PI; +} + +// Denser interface spacing yields more extruded length. +static double support_interface_extrusion_length(const std::string &gcode) +{ + double len = 0; + GCodeReader parser; + parser.parse_buffer(gcode, [&len](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + if (line.comment().find("support material interface") == std::string_view::npos) return; + len += std::hypot(line.dist_X(self), line.dist_Y(self)); + }); + return len; +} + +// A cap slab overhanging a base, joined by a central stem: the cap can only be supported by resting on the +// base, forcing a genuine bottom contact. A horizontal tunnel does not work here -- tree/organic can arch a +// branch in from the opening and avoid the floor entirely. +static TriangleMesh support_capital() +{ + TriangleMesh model = make_cube(40, 40, 2); // base [0,40]x[0,40]x[0,2] + TriangleMesh stem = make_cube(8, 8, 12); stem.translate(16, 16, 1); // stem centered, z 1..13 + TriangleMesh cap = make_cube(40, 40, 2); cap.translate(0, 0, 12); // cap z 12..14 + model.merge(stem); + model.merge(cap); + return model; +} + TEST_CASE("Three raft layers are created", "[SupportMaterial]") { Slic3r::Print print; @@ -104,3 +196,272 @@ TEST_CASE("Support G-code emission survives a second slice in the same process", const std::string second = slice({ TestMesh::overhang }, { { "enable_support", 1 } }); REQUIRE(! layers_with_role(second, "support").empty()); } + +// The contact layer counts toward the configured interface layer count, so N configured top +// interface layers produce exactly N interface layers, not N+1. +TEST_CASE("Support top interface layer count matches the configured value", "[SupportMaterial]") +{ + const int top = GENERATE(1, 2, 3, 4, 6); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 1 }, + { "support_interface_top_layers", top }, + { "support_interface_bottom_layers", 0 }, + }); + CAPTURE(top); + REQUIRE(support_base_layer_count(g) > 0); // support actually formed + REQUIRE(support_interface_layer_count(g) == size_t(top)); +} + +// A rotated cube-with-hole is a horizontal tunnel whose ceiling and floor both receive support, so top +// and bottom interfaces can be exercised independently (the floor is the bottom contact). +static TriangleMesh support_tunnel() +{ + TriangleMesh tunnel = Slic3r::Test::mesh(TestMesh::cube_with_hole); + tunnel.rotate_x(float(M_PI / 2)); + return tunnel; +} + +static size_t tunnel_interface_layers(const TriangleMesh &tunnel, int top, int bottom) +{ + const std::string g = slice({ tunnel }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 0 }, + { "support_interface_top_layers", top }, + { "support_interface_bottom_layers", bottom }, + }); + REQUIRE(support_base_layer_count(g) > 0); // support actually formed + return support_interface_layer_count(g); +} + +TEST_CASE("No support interface is generated when neither top nor bottom is configured", "[SupportMaterial]") +{ + REQUIRE(tunnel_interface_layers(support_tunnel(), 0, 0) == 0); +} + +TEST_CASE("Bottom interface layer count matches its setting with top interface off", "[SupportMaterial]") +{ + const int bottom = GENERATE(1, 3, 6); + CAPTURE(bottom); + REQUIRE(tunnel_interface_layers(support_tunnel(), 0, bottom) == size_t(bottom)); +} + +// support_interface_bottom_layers = -1 means "same as top". +TEST_CASE("Support interface bottom layers default to the top layer count", "[SupportMaterial]") +{ + const TriangleMesh tunnel = support_tunnel(); + REQUIRE(tunnel_interface_layers(tunnel, 0, -1) == tunnel_interface_layers(tunnel, 0, 0)); + REQUIRE(tunnel_interface_layers(tunnel, 3, -1) == tunnel_interface_layers(tunnel, 3, 3)); +} + +TEST_CASE("Default support still emits base and interface material", "[SupportMaterial][Regression]") +{ + const std::string g = slice({ TestMesh::overhang }, { { "enable_support", 1 } }); + REQUIRE(support_base_layer_count(g) > 0); + REQUIRE(support_interface_layer_count(g) > 0); +} + +// Organic runs TreeSupport3D + TreeModelVolumes, the others the classic TreeSupport.cpp path. +TEST_CASE("Every tree support style produces base and interface material", "[SupportMaterial]") +{ + const char *style = GENERATE("organic", "tree_slim", "tree_strong", "tree_hybrid"); + INFO("style=" << style); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_type", "tree(auto)" }, + { "support_style", style }, + { "support_interface_top_layers", 3 }, + }); + CHECK(support_base_layer_count(g) > 0); + CHECK(support_interface_layer_count(g) > 0); +} + +TEST_CASE("Raft interface angle alternates by 45 degrees per interface id", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { { "enable_support", 1 } }); + SupportParameters sp(*print.objects().front()); + sp.raft_angle_interface = 0.5f; + REQUIRE_THAT(sp.raft_interface_angle(0), Catch::Matchers::WithinAbs(0.5 + M_PI / 4., 1e-6)); + REQUIRE_THAT(sp.raft_interface_angle(1), Catch::Matchers::WithinAbs(0.5 - M_PI / 4., 1e-6)); +} + +// The angle inputs are overwritten directly, so the pattern-to-angle mapping is checked +// independently of the sliced object's configuration. +TEST_CASE("Support interface fill angle follows the configured interface pattern", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { { "enable_support", 1 } }); + SupportParameters sp(*print.objects().front()); + sp.interface_angle = 0.3f; + sp.base_angle = 1.1f; + const double tol = 1e-6; + + SECTION("Rectilinear shifts the interface angle by -45deg for snug support") { + sp.support_interface_pattern = smipRectilinear; + sp.support_style = smsSnug; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + REQUIRE_THAT(sp.support_interface_angle(3), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + } + SECTION("Rectilinear leaves the interface angle alone for the other styles") { + sp.support_interface_pattern = smipRectilinear; + sp.support_style = smsGrid; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + } + SECTION("Rectilinear interlaced alternates -/+45deg by interface id parity") { + sp.support_interface_pattern = smipRectilinearInterlaced; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + REQUIRE_THAT(sp.support_interface_angle(1), Catch::Matchers::WithinAbs(sp.interface_angle + M_PI_4, tol)); + } + SECTION("Grid uses the base angle") { + sp.support_interface_pattern = smipGrid; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.base_angle, tol)); + } + SECTION("Auto and concentric use the interface angle unchanged") { + sp.support_interface_pattern = smipAuto; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + sp.support_interface_pattern = smipConcentric; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + } +} + +// End-to-end that the pattern reaches the emitted fill, not just support_interface_angle(). +TEST_CASE("Interlaced support interface alternates fill angle while rectilinear does not", "[SupportMaterial]") +{ + auto interface_angles = [](const char *pattern) { + std::vector a; + for (const auto &kv : interface_fill_angle_by_layer(slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 1 }, + { "support_interface_top_layers", 6 }, + { "support_interface_pattern", pattern } }))) + a.push_back(kv.second); + return a; + }; + + const std::vector rectilinear = interface_angles("rectilinear"); + const std::vector interlaced = interface_angles("rectilinear_interlaced"); + REQUIRE(rectilinear.size() >= 3); + REQUIRE(interlaced.size() >= 3); + + for (size_t i = 1; i < rectilinear.size(); ++i) + REQUIRE(axial_angle_diff_deg(rectilinear[i], rectilinear[0]) < 15.0); + + for (size_t i = 1; i < interlaced.size(); ++i) + REQUIRE(axial_angle_diff_deg(interlaced[i], interlaced[i - 1]) > 60.0); +} + +// Normal and non-organic tree support share the same interface angle logic: with a rectilinear interface +// pattern both emit their interface fill at the same angle (both go through support_interface_angle()). +TEST_CASE("Normal and tree support use the same interface fill angle", "[SupportMaterial]") +{ + auto mean_interface_angle = [](const char *type, const char *style) { + const auto angles = interface_fill_angle_by_layer(slice({ TestMesh::overhang }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 1 }, + { "support_type", type }, { "support_style", style }, + { "support_interface_top_layers", 6 }, { "support_interface_pattern", "rectilinear" } })); + REQUIRE(angles.size() >= 3); + // Axial mean, as in interface_fill_angle_by_layer: a plain mean would split angles either + // side of the [0, pi) wrap. + double x = 0, y = 0; + for (const auto &kv : angles) { + x += std::cos(2.0 * kv.second); + y += std::sin(2.0 * kv.second); + } + double mean = 0.5 * std::atan2(y, x); + if (mean < 0) mean += M_PI; + return mean; + }; + REQUIRE(axial_angle_diff_deg(mean_interface_angle("normal(auto)", "default"), + mean_interface_angle("tree(auto)", "tree_slim")) < 10.0); +} + +// Every style, because the non-organic tree styles once emitted one more top interface layer than the rest. +TEST_CASE("Top interface layer count equals the configured value for every support style", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "grid" }, { "normal(auto)", "snug" }, + { "tree(auto)", "organic" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + })); + CAPTURE(style); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_type", type }, + { "support_style", style }, + { "support_interface_top_layers", 4 }, + }); + REQUIRE(support_interface_layer_count(g) == 4u); +} + +// The bottom interface was dropped in earlier versions when support started on the model rather +// than the plate. +TEST_CASE("Non-organic tree support generates a bottom interface on internal geometry", "[SupportMaterial]") +{ + const std::string g = slice({ support_tunnel() }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 0 }, + { "support_type", "tree(auto)" }, + { "support_style", "tree_slim" }, + { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, + }); + REQUIRE(support_base_layer_count(g) > 0); + REQUIRE(support_interface_layer_count(g) > 0); +} + +// The capital forces the model contact; on a horizontal tunnel organic can arch a branch in and make none. +TEST_CASE("A bottom interface is produced for every support style on a forced model contact", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "default" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + { "tree(auto)", "organic" }, + })); + CAPTURE(style); + REQUIRE(support_interface_layer_count(slice({ support_capital() }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 0 }, + { "support_type", type }, { "support_style", style }, + { "support_interface_top_layers", 0 }, { "support_interface_bottom_layers", 6 } })) > 0); +} + +TEST_CASE("Bottom interface spacing controls bottom interface density for every support style", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "default" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + { "tree(auto)", "organic" }, + })); + CAPTURE(style); + const TriangleMesh model = support_capital(); + auto len = [&model](const char *support_type, const char *support_style, double spacing) { + return support_interface_extrusion_length(slice({ model }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 0 }, + { "support_type", support_type }, { "support_style", support_style }, { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, { "support_bottom_interface_spacing", spacing } })); + }; + REQUIRE(len(type, style, 0.0) > len(type, style, 4.0) * 1.5); +} + +// Interface and base flows are identical in width and rate unless a separate support-interface +// filament is used, so density is the observable here, not flow. +TEST_CASE("Bottom-only support interface keeps the dense interface density", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { + { "enable_support", 1 }, + { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, + { "support_bottom_interface_spacing", 0.0 }, // solid: density resolves to 1.0 + { "support_base_pattern_spacing", 2.5 }, // sparse: density stays below 1.0 + }); + SupportParameters sp(*print.objects().front()); + REQUIRE(sp.bottom_interface_density > sp.support_density); +} + diff --git a/tests/fff_print/test_tree_support.cpp b/tests/fff_print/test_tree_support.cpp new file mode 100644 index 0000000000..362eb0ca56 --- /dev/null +++ b/tests/fff_print/test_tree_support.cpp @@ -0,0 +1,125 @@ +#include + +#include "libslic3r/Layer.hpp" +#include "libslic3r/TriangleMesh.hpp" + +#include "test_helpers.hpp" + +using namespace Slic3r::Test; +using namespace Slic3r; + +namespace { + +// The upper plate overhangs both the lower plate and open air, so branches land on the model and on +// the bed in the same slice. +TriangleMesh two_tier_mesh() +{ + TriangleMesh lower = make_cube(30, 30, 3); + TriangleMesh column = make_cube(8, 8, 15); + TriangleMesh upper = make_cube(50, 50, 3); + // Each part overlaps the one below rather than resting on it; a coplanar join slices ambiguously. + column.translate(11.f, 11.f, 2.f); + upper.translate(-10.f, -10.f, 16.f); + TriangleMesh mesh = lower; + mesh.merge(column); + mesh.merge(upper); + return mesh; +} + +TriangleMesh scaled(TestMesh id, float scale) +{ + TriangleMesh mesh = Slic3r::Test::mesh(id); + mesh.scale(scale); + return mesh; +} + +void slice_with_tree_support(const TriangleMesh &mesh, Slic3r::Print &print, const char *style, + int threshold_angle = 30, int build_plate_only = 0, int raft_layers = 0) +{ + Slic3r::Test::init_and_process_print({ mesh }, print, { + { "enable_support", 1 }, + { "support_type", "tree(auto)" }, + { "support_style", style }, + { "support_on_build_plate_only", build_plate_only }, + { "support_threshold_angle", threshold_angle }, + { "raft_layers", raft_layers }, + { "layer_height", 0.2 }, + }); +} + +Points support_points(const Slic3r::Print &print) +{ + Points points; + for (const SupportLayer *layer : print.objects().front()->support_layers()) + layer->support_fills.collect_points(points); + return points; +} + +size_t support_point_count(const TriangleMesh &mesh, const char *style, int threshold_angle = 30, + int build_plate_only = 0) +{ + Slic3r::Print print; + slice_with_tree_support(mesh, print, style, threshold_angle, build_plate_only); + return support_points(print).size(); +} + +} // namespace + +TEST_CASE("Tree support is generated for an overhang and not for a plain cube", "[TreeSupport]") +{ + REQUIRE(support_point_count(scaled(TestMesh::overhang, 2.f), "tree_slim") > 1000); + REQUIRE(support_point_count(Slic3r::Test::cube(20), "tree_slim") == 0); +} + +TEST_CASE("Restricting tree support to the build plate changes what is generated", "[TreeSupport]") +{ + const TriangleMesh mesh = two_tier_mesh(); + const size_t anywhere = support_point_count(mesh, "tree_slim", 30, 0); + const size_t plate_only = support_point_count(mesh, "tree_slim", 30, 1); + REQUIRE(anywhere > 1000); + REQUIRE(plate_only > 1000); + // The upper plate overhangs the lower one, so some branches would land on the model. + REQUIRE(plate_only != anywhere); +} + +TEST_CASE("Tree support layers rise monotonically within the layer height limits", "[TreeSupport]") +{ + Slic3r::Print print; + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), print, "tree_slim"); + const double nozzle = print.config().nozzle_diameter.values.front(); + + size_t checked = 0; + double previous = 0; + bool previous_was_adjacent = false; + for (const SupportLayer *layer : print.objects().front()->support_layers()) { + if (layer->print_z <= 0 || layer->height <= 0) { + // Layers with no nodes are left at zero. Skipping one leaves a hole, so the next pair + // spans more than one layer and its gap says nothing about the layer height limit. + previous_was_adjacent = false; + continue; + } + if (previous > 0) { + CAPTURE(previous, layer->print_z); + REQUIRE(layer->print_z > previous); + if (previous_was_adjacent) + REQUIRE(layer->print_z - previous <= nozzle + EPSILON); + } + previous = layer->print_z; + previous_was_adjacent = true; + ++checked; + } + REQUIRE(checked > 10); +} + +TEST_CASE("A raft is still generated under tree support", "[TreeSupport]") +{ + // The mesh supports itself, so a layer count alone passes with no raft at all. + Slic3r::Print rafted, unrafted; + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), rafted, "tree_slim", 30, 0, 3); + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), unrafted, "tree_slim", 30, 0, 0); + const PrintObject *rafted_object = rafted.objects().front(); + const PrintObject *unrafted_object = unrafted.objects().front(); + REQUIRE(rafted_object->support_layers().size() > unrafted_object->support_layers().size()); + // The raft goes under the object. + REQUIRE(rafted_object->layers().front()->print_z > unrafted_object->layers().front()->print_z); +} From c61d2fe5d1a2450651133578f248849ed82a4c2b Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Tue, 8 Sep 2026 11:11:54 +0800 Subject: [PATCH 135/208] Fix the Folgertech i3 0.6 nozzle printable area (#15577) The bed was declared as 0x0, 20x0, 200x200, 0x200 - a triangle - where the 0.4 nozzle profile and the printer have the 200 x 200 square. Found by the profile validator once it placed the prime tower beside the test cube: no tower fits inside that outline. --- resources/profiles/Folgertech.json | 2 +- .../profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index 125cba3d46..a20dc8992e 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json b/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json index 40cf5fbf82..59fb023448 100644 --- a/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json +++ b/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json @@ -12,7 +12,7 @@ "printer_variant": "0.6", "printable_area": [ "0x0", - "20x0", + "200x0", "200x200", "0x200" ], From bcb4f17d9ae5dd9c807550c92163389dcba66f28 Mon Sep 17 00:00:00 2001 From: Maximilian Ghazanfar <95306766+mazzanfar@users.noreply.github.com> Date: Tue, 8 Sep 2026 00:12:55 -0400 Subject: [PATCH 136/208] fix(cli): resolve inherited presets through vendor manifests (#15438) * fix(cli): resolve inherited presets through vendor manifests * fix(cli): resolve typeless inherited presets Probe the configured preset collections when a preset JSON omits its type. Reject missing, cross-type, and duplicate identities instead of silently selecting a candidate. * fix(cli): allow missing app config during preset resolution * fix(cli): tolerate malformed app config during preset resolution --- src/OrcaSlicer.cpp | 82 +++- src/libslic3r/AppConfig.cpp | 5 + src/libslic3r/AppConfig.hpp | 4 +- src/libslic3r/Preset.cpp | 22 +- src/libslic3r/Preset.hpp | 2 +- src/libslic3r/PresetBundle.cpp | 221 ++++++++-- src/libslic3r/PresetBundle.hpp | 31 +- .../libslic3r/test_preset_bundle_loading.cpp | 395 ++++++++++++++++++ 8 files changed, 718 insertions(+), 44 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 0a770e0d8a..31f39921f4 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1974,7 +1974,79 @@ int CLI::run(int argc, char **argv) } } - auto load_config_file = [](const std::string& file, DynamicPrintConfig& config, std::string& config_type, + std::unique_ptr cli_preset_bundle; + auto ensure_cli_preset_bundle = [&cli_preset_bundle, config_substitution_rule](std::string &error) -> PresetBundle * { + if (cli_preset_bundle) + return cli_preset_bundle.get(); + try { + AppConfig app_config; + const std::string app_config_error = app_config.load_if_exists(); + if (!app_config_error.empty()) { + BOOST_LOG_TRIVIAL(warning) << "Ignoring invalid app config during CLI preset resolution: " << app_config_error; + app_config.reset(); + } + + auto bundle = std::make_unique(); + std::string load_error; + bundle->load_presets(app_config, config_substitution_rule, + PresetBundle::PresetPreferences(), &load_error, true); + if (!load_error.empty()) { + error = "Failed to load presets for inheritance resolution: " + load_error; + return nullptr; + } + cli_preset_bundle = std::move(bundle); + return cli_preset_bundle.get(); + } catch (const std::exception &ex) { + error = ex.what(); + return nullptr; + } + }; + + auto resolve_preset = [&ensure_cli_preset_bundle, config_substitution_rule](const std::string &file, DynamicPrintConfig &config, + std::string &config_type, const std::string &config_from, + bool probe_type, std::string &error) { + const auto *inherits = config.option(BBL_JSON_KEY_INHERITS); + if (!probe_type && (inherits == nullptr || inherits->value.empty())) + return true; + + std::unique_ptr source_bundle; + PresetBundle *bundle = nullptr; + bool allow_source_manifest = false; + if (config_from == "system") { + source_bundle = std::make_unique(); + bundle = source_bundle.get(); + allow_source_manifest = true; + } else { + bundle = ensure_cli_preset_bundle(error); + if (bundle == nullptr) + return false; + } + + if (probe_type) { + Preset::Type preset_type; + if (!bundle->resolve_preset_config_type(config, preset_type, file, config_substitution_rule, + error, allow_source_manifest)) + return false; + config_type = Preset::get_type_string(preset_type); + return true; + } + + Preset::Type preset_type; + if (config_type == "process") + preset_type = Preset::TYPE_PRINT; + else if (config_type == "filament") + preset_type = Preset::TYPE_FILAMENT; + else if (config_type == "machine") + preset_type = Preset::TYPE_PRINTER; + else { + error = "Unsupported preset type: " + config_type; + return false; + } + return bundle->resolve_preset_config(config, preset_type, file, config_substitution_rule, + error, allow_source_manifest); + }; + + auto load_config_file = [config_substitution_rule, &resolve_preset](const std::string& file, DynamicPrintConfig& config, std::string& config_type, std::string& config_name, std::string& filament_id, std::string& config_from) { if (! boost::filesystem::exists(file)) { boost::nowide::cerr << __FUNCTION__<< ": can not find setting file: " << file << std::endl; @@ -2003,9 +2075,15 @@ int CLI::run(int argc, char **argv) } auto type_iter = key_values.find(BBL_JSON_KEY_TYPE); - if (type_iter != key_values.end()) { + const bool probe_type = type_iter == key_values.end(); + if (!probe_type) config_type = type_iter->second; + + if (!resolve_preset(file, config, config_type, config_from, probe_type, reason)) { + boost::nowide::cerr << __FUNCTION__ << boost::format(": can not resolve preset %1%: %2%") % file % reason << std::endl; + return CLI_CONFIG_FILE_ERROR; } + if (config_type == "machine") { //config.set("printer_settings_id", config_name, true); //printer_inherits = config.option("inherits", true)->value; diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 29eb96aa5b..d26296cd69 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -1823,4 +1823,9 @@ bool AppConfig::exists() return boost::filesystem::exists(config_path()); } +std::string AppConfig::load_if_exists() +{ + return boost::filesystem::exists(loading_path()) ? load() : std::string(); +} + }; // namespace Slic3r diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 0a278f4f1f..c799502993 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -113,8 +113,10 @@ public: void set_defaults(); // Load the slic3r.ini from a user profile directory (or a datadir, if configured). - // return error string or empty strinf + // Return an error string, or an empty string on success. std::string load(); + // Treat a missing config as default state; otherwise load it normally. + std::string load_if_exists(); // Store the slic3r.ini into a user profile directory (or a datadir, if configured). void save(); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index de17a678ce..279ad49d92 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1653,7 +1653,7 @@ std::string PresetCollection::canonical_preset_name(const std::string &name, con void PresetCollection::load_presets( const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule substitution_rule, - std::function preset_loaded_fn, const PresetOrigin &load_origin) + std::function preset_loaded_fn, const PresetOrigin &load_origin, bool read_only) { // Don't use boost::filesystem::canonical() on Windows, it is broken in regard to reparse points, // see https://github.com/prusa3d/PrusaSlicer/issues/732 @@ -1662,7 +1662,7 @@ void PresetCollection::load_presets( // Load custom roots first if (fs::exists(dir / "base")) { - load_presets(dir.string(), "base", substitutions, substitution_rule, nullptr, resolved_origin); + load_presets(dir.string(), "base", substitutions, substitution_rule, nullptr, resolved_origin, read_only); } //BBS: add config related logs @@ -1670,7 +1670,8 @@ void PresetCollection::load_presets( //BBS do not parse folder if not exists m_dir_path = dir.string(); if (!fs::exists(dir)) { - fs::create_directory(dir); + if (!read_only) + fs::create_directory(dir); return; } @@ -1720,10 +1721,10 @@ void PresetCollection::load_presets( substitutions.push_back({ preset.name, m_type, PresetConfigSubstitutions::Source::UserFile, preset.file, std::move(config_substitutions) }); if (!reason.empty()) { fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); BOOST_LOG_TRIVIAL(error) << boost::format("parse config %1% failed")%preset.file; ++m_errors; @@ -1794,7 +1795,8 @@ void PresetCollection::load_presets( size_t at_pos = name.find('@'); if (at_pos != std::string::npos && at_pos + 1 < name.length()) { compatible_printers->values.push_back(name.substr(at_pos + 1)); - preset.save(nullptr); + if (!read_only) + preset.save(nullptr); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " added compatible_printers for preset: " << name; } } @@ -1812,10 +1814,10 @@ void PresetCollection::load_presets( ++m_errors; BOOST_LOG_TRIVIAL(error) << boost::format("The user-config cannot be loaded: %1%. Reason: %2%")%preset.file %err.what(); fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); //throw Slic3r::RuntimeError(std::string("The selected preset cannot be loaded: ") + preset.file + "\n\tReason: " + err.what()); } catch (const std::runtime_error &err) { @@ -1823,10 +1825,10 @@ void PresetCollection::load_presets( BOOST_LOG_TRIVIAL(error) << boost::format("Failed loading the user-config file: %1%. Reason: %2%")%preset.file %err.what(); //throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + preset.file + "\n\tReason: " + err.what()); fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); } diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index e0728d7fa2..6a7871d07d 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -558,7 +558,7 @@ public: void add_default_preset(const std::vector &keys, const Slic3r::StaticPrintConfig &defaults, const std::string &preset_name); // Load ini files of the particular type from the provided directory path. - void load_presets(const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule rule, std::function preset_loaded_fn = nullptr, const PresetOrigin &load_origin = PresetOrigin()); + void load_presets(const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule rule, std::function preset_loaded_fn = nullptr, const PresetOrigin &load_origin = PresetOrigin(), bool read_only = false); //BBS: update user presets directory void update_user_presets_directory(const std::string& dir_path, const std::string& type); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 29bccf0966..6d4e77837a 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -453,6 +453,158 @@ PresetBundle::PresetBundle() this->project_config.apply_only(FullPrintConfig::defaults(), s_project_options); } +bool PresetBundle::resolve_preset_config(DynamicPrintConfig &config, Preset::Type type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest) +{ + if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) + compatibility_rule = ForwardCompatibilitySubstitutionRule::EnableSilent; + else if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem) + compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; + + auto collection_for_type = [](PresetBundle &bundle, Preset::Type preset_type) -> PresetCollection * { + switch (preset_type) { + case Preset::TYPE_PRINT: return &bundle.prints; + case Preset::TYPE_FILAMENT: return &bundle.filaments; + case Preset::TYPE_PRINTER: return &bundle.printers; + default: return nullptr; + } + }; + + PresetCollection *collection = collection_for_type(*this, type); + if (collection == nullptr) { + error = "Unsupported preset type"; + return false; + } + + const boost::filesystem::path source_path = boost::filesystem::absolute(source_file).lexically_normal(); + auto find_loaded = [&](PresetBundle &bundle) -> const Preset * { + PresetCollection *loaded_collection = collection_for_type(bundle, type); + const Preset *resolved = nullptr; + for (const Preset &preset : loaded_collection->get_presets()) { + if (preset.file.empty()) + continue; + + boost::system::error_code ec; + const bool same_file = boost::filesystem::equivalent(source_path, boost::filesystem::path(preset.file), ec); + if (ec || !same_file) + continue; + if (resolved != nullptr) { + error = "Preset identity is ambiguous"; + return nullptr; + } + resolved = &preset; + } + return resolved; + }; + + if (const Preset *resolved = find_loaded(*this)) { + config = resolved->config; + error.clear(); + return true; + } + if (error == "Preset identity is ambiguous") + return false; + if (!allow_source_manifest) { + error = "Preset was not found in the loaded bundle"; + return false; + } + + // A manifest-backed source file can be resolved without requiring the vendor + // to have been copied into data_dir()/system. Find the nearest ancestor whose + // sibling manifest names it, then let the canonical vendor loader flatten the + // complete tree (including nested sub_path entries and library inheritance). + for (boost::filesystem::path vendor_dir = source_path.parent_path(); !vendor_dir.empty(); vendor_dir = vendor_dir.parent_path()) { + const std::string vendor_id = vendor_dir.filename().string(); + if (vendor_id.empty()) + continue; + const boost::filesystem::path root_dir = vendor_dir.parent_path(); + const boost::filesystem::path manifest = root_dir / (vendor_id + ".json"); + if (!boost::filesystem::is_regular_file(manifest)) + continue; + const boost::filesystem::path manifest_relative = source_path.lexically_relative(vendor_dir); + if (manifest_relative.empty() || *manifest_relative.begin() == "..") + continue; + + try { + PresetBundle library_bundle; + const PresetBundle *base_bundle = nullptr; + if (vendor_id != ORCA_FILAMENT_LIBRARY && + boost::filesystem::is_regular_file(root_dir / (std::string(ORCA_FILAMENT_LIBRARY) + ".json"))) { + library_bundle.m_preserve_vendor_source_paths = true; + library_bundle.load_vendor_configs_from_json(root_dir.string(), ORCA_FILAMENT_LIBRARY, LoadSystem, + compatibility_rule, nullptr, false); + if (library_bundle.error_count() != 0) { + error = "OrcaFilamentLibrary contains invalid presets"; + return false; + } + base_bundle = &library_bundle; + } + + PresetBundle source_bundle; + source_bundle.m_preserve_vendor_source_paths = true; + source_bundle.load_vendor_configs_from_json(root_dir.string(), vendor_id, LoadSystem, + compatibility_rule, base_bundle, false); + if (source_bundle.error_count() != 0) { + error = "Vendor bundle contains invalid presets"; + return false; + } + + const Preset *resolved = find_loaded(source_bundle); + if (resolved == nullptr) { + if (error.empty()) + error = "Source file is not an instantiated preset in its vendor manifest"; + return false; + } + config = resolved->config; + error.clear(); + return true; + } catch (const std::exception &ex) { + error = ex.what(); + return false; + } + } + + error = "Preset was not found in the loaded bundle"; + return false; +} + +bool PresetBundle::resolve_preset_config_type(DynamicPrintConfig &config, Preset::Type &type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest) +{ + std::optional> resolved; + for (Preset::Type candidate_type : types_list(ptFFF)) { + DynamicPrintConfig candidate_config(config); + std::string candidate_error; + if (!resolve_preset_config(candidate_config, candidate_type, source_file, compatibility_rule, + candidate_error, allow_source_manifest)) { + if (candidate_error == "Preset identity is ambiguous") { + error = std::move(candidate_error); + return false; + } + continue; + } + if (resolved) { + error = "Preset type is ambiguous"; + return false; + } + resolved.emplace(candidate_type, std::move(candidate_config)); + } + + if (!resolved) { + error = "Preset type could not be resolved"; + return false; + } + + type = resolved->first; + config = std::move(resolved->second); + error.clear(); + return true; +} + PresetBundle::PresetBundle(const PresetBundle &rhs) { *this = rhs; @@ -574,7 +726,8 @@ void PresetBundle::copy_files(const std::string& from) } PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, ForwardCompatibilitySubstitutionRule substitution_rule, - const PresetPreferences& preferred_selection/* = PresetPreferences()*/) + const PresetPreferences& preferred_selection/* = PresetPreferences()*/, + std::string *errors, bool read_only) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; @@ -585,16 +738,20 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, Forward const auto startup_t0 = std::chrono::steady_clock::now(); //BBS: change system config to json - std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule); + std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule, !read_only); + if (errors != nullptr) + *errors = errors_cummulative; // BBS load preset from user's folder, load system default if // BBS: change directories by design std::string dir_user_presets = config.get("preset_folder"); if (dir_user_presets.empty()) { - load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule); + load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule, read_only); } else { - load_user_presets(dir_user_presets, substitution_rule); + load_user_presets(dir_user_presets, substitution_rule, read_only); } + if (errors != nullptr && errors->empty() && m_errors != 0) + *errors = "Preset loading reported " + std::to_string(m_errors) + " error(s)"; // Rewrite renamed compatible_printers / compatible_prints references before selection. Skipped // in validation mode so the profile validator (has_errors -> check_preset_references) sees the @@ -1010,18 +1167,26 @@ std::string PresetBundle::get_hotend_model_for_printer_model(std::string model_n return out; } -PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule substitution_rule) +PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule substitution_rule, bool read_only) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " entry and user is: " << user; PresetsConfigSubstitutions substitutions; std::string errors_cummulative; fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); - if (!fs::exists(user_folder)) fs::create_directory(user_folder); + if (!fs::exists(user_folder)) { + if (read_only) + return substitutions; + fs::create_directory(user_folder); + } std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + user; fs::path folder(user_folder / user); - if (!fs::exists(folder)) fs::create_directory(folder); + if (!fs::exists(folder)) { + if (read_only) + return substitutions; + fs::create_directory(folder); + } bundles.WriteLock(); bundles.m_bundles.clear(); @@ -1049,13 +1214,13 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.print_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); metadata.bundle_type = BundleType::Local; metadata.path = metadata_file.string(); @@ -1085,13 +1250,13 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.print_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); metadata.bundle_type = BundleType::Subscribed; metadata.path = metadata_file.string(); @@ -1110,17 +1275,20 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For const auto json_t0 = std::chrono::steady_clock::now(); try { std::string sel = prints.get_selected_preset().name; - this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); + this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); prints.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = filaments.get_selected_preset().name; - this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); + this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); filaments.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = printers.get_selected_preset().name; - this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); + this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); printers.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } if (!errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); @@ -2266,7 +2434,8 @@ void PresetBundle::clear_printer_hold_aliases() } //BBS: add json related logic, load system presets from json -std::pair PresetBundle::load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule) +std::pair PresetBundle::load_system_presets_from_json( + ForwardCompatibilitySubstitutionRule compatibility_rule, bool allow_cache) { //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%")%compatibility_rule; @@ -2288,7 +2457,7 @@ std::pair PresetBundle::load_system_pre // The vendors below are loaded whole and against each other — the filament // library first, then every other vendor with it as the base — so each parse // is complete enough to be worth caching. - m_generate_vendor_caches = m_generate_vendor_caches || ! validation_mode; + m_generate_vendor_caches = allow_cache && (m_generate_vendor_caches || !validation_mode); PresetsConfigSubstitutions substitutions; std::string errors_cummulative; @@ -2318,7 +2487,8 @@ std::pair PresetBundle::load_system_pre // state into this load. this->clear_printer_hold_aliases(); this->m_errors = 0; - append(substitutions, this->load_vendor_configs_from_json(dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule).first); + append(substitutions, this->load_vendor_configs_from_json( + dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule, nullptr, allow_cache).first); first = false; } catch (const std::runtime_error &err) { if (validation_mode) @@ -2343,7 +2513,7 @@ std::pair PresetBundle::load_system_pre bundle->set_generate_vendor_caches(m_generate_vendor_caches); try { auto result = bundle->load_vendor_configs_from_json( - dir.string(), other_vendors[i], PresetBundle::LoadSystem, compatibility_rule, this); + dir.string(), other_vendors[i], PresetBundle::LoadSystem, compatibility_rule, this, allow_cache); parallel_substitutions[i] = std::move(result.first); parallel_bundles[i] = std::move(bundle); } catch (const std::runtime_error &err) { @@ -5280,9 +5450,11 @@ std::string PresetBundle::load_vendor_preset( return reason; } - auto file_path = (boost::filesystem::path(data_dir()) /PRESET_SYSTEM_DIR/ vendor_name / entry.sub_path).make_preferred(); - if(validation_mode) + auto file_path = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR / vendor_name / entry.sub_path).make_preferred(); + if (validation_mode) file_path = (boost::filesystem::path(data_dir()) / vendor_name / entry.sub_path).make_preferred(); + if (m_preserve_vendor_source_paths) + file_path = (boost::filesystem::path(path) / vendor_name / entry.sub_path).make_preferred(); // Load the preset into the list of presets, save it to disk. Preset &loaded = presets_collection->load_preset(file_path.string(), preset_name, std::move(config), false); @@ -5348,7 +5520,8 @@ std::string PresetBundle::load_vendor_preset( //BBS: Load a config bundle file from json std::pair PresetBundle::load_vendor_configs_from_json( - const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle) + const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, + ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle, bool allow_cache) { // Enable substitutions for user config bundle, throw an exception when loading a system profile. ConfigSubstitutionContext substitution_context { compatibility_rule }; @@ -5366,7 +5539,7 @@ std::pair PresetBundle::load_vendor_configs_ // Orca: only a whole-vendor load has a cache — the vendor-only and filament-only // scans want a slice of one. Validation reads the JSONs whatever is cached. const boost::filesystem::path dir_path(dir); - const bool cacheable = flags.has(LoadConfigBundleAttribute::LoadSystem) && ! flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); + const bool cacheable = allow_cache && flags.has(LoadConfigBundleAttribute::LoadSystem) && ! flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); if (cacheable && ! validation_mode && this->load_vendor_cache(dir_path, vendor_name, base_bundle)) { size_t presets_loaded = 0; for (const PresetCollection* coll : std::initializer_list{ diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index b927c5ee6f..07e5444906 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -230,7 +230,22 @@ public: // Load selections (current print, current filaments, current printer) from config.ini // select preferred presets, if any exist PresetsConfigSubstitutions load_presets(AppConfig &config, ForwardCompatibilitySubstitutionRule rule, - const PresetPreferences& preferred_selection = PresetPreferences()); + const PresetPreferences& preferred_selection = PresetPreferences(), + std::string *errors = nullptr, bool read_only = false); + + // Resolve an explicitly named source file through a canonical flattened + // preset. Exact loaded-file identity is preferred; otherwise a manifest- + // backed vendor tree is loaded from that source root without using caches. + bool resolve_preset_config(DynamicPrintConfig &config, Preset::Type type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest = true); + // Resolve a source file whose JSON omits `type`. Succeeds only when exactly + // one FFF preset collection owns the file and returns that collection's type. + bool resolve_preset_config_type(DynamicPrintConfig &config, Preset::Type &type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest = true); // Load selections (current print, current filaments, current printer) from config.ini // This is done just once on application start up. @@ -238,7 +253,7 @@ public: void load_selections(AppConfig &config, const PresetPreferences& preferred_selection = PresetPreferences()); // BBS Load user presets - PresetsConfigSubstitutions load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule rule); + PresetsConfigSubstitutions load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule rule, bool read_only = false); PresetsConfigSubstitutions load_user_presets(AppConfig &config, std::map>& my_presets, ForwardCompatibilitySubstitutionRule rule); // Orca: Import subscribed bundle presets (load and save to disk in one operation), handles one bundle at a time PresetsConfigSubstitutions update_subscribed_presets(AppConfig& config, @@ -481,10 +496,13 @@ public: //Orca: load config bundle from json, pass the base bundle to support cross vendor inheritance // Orca: `dir` is where the vendor is looked for — its own directory, whether or // not the profile JSONs are still there. A whole-vendor load comes from the - // vendor's preset cache whenever one covers the profile on disk, and is parsed - // from the JSONs in `dir` only when none does. Nothing here reads resources. + // vendor's preset cache whenever one covers the profile on disk and allow_cache + // is true, and is parsed from the JSONs in `dir` otherwise. Nothing here reads + // resources implicitly. std::pair load_vendor_configs_from_json( - const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr); + const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, + ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr, + bool allow_cache = true); // Export a config bundle file containing all the presets and the names of the active presets. //void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false); @@ -606,6 +624,7 @@ private: // Whether to (re)write a per-vendor cache after a JSON parse. bool m_generate_vendor_caches { false }; + bool m_preserve_vendor_source_paths { false }; // Orca: validation only - flag any printer with two or more compatible // filament presets sharing one filament_id (ambiguous AMS subtype match). @@ -613,7 +632,7 @@ private: //std::pair load_system_presets(ForwardCompatibilitySubstitutionRule compatibility_rule); //BBS: add json related logic - std::pair load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule); + std::pair load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule, bool allow_cache = true); // Update the multicolor information for filaments. void update_filament_multi_color(); // Update renamed_from and alias maps of system profiles. diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 59aae221b5..26cbf387ec 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -554,6 +554,401 @@ struct LibraryFilamentTestCollection : public PresetCollection } // namespace +TEST_CASE("Missing app config is accepted as default CLI state", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + AppConfig app_config; + app_config.set_loading_path((dir.path() / "missing.conf").string()); + CHECK(app_config.load_if_exists().empty()); +} + +TEST_CASE("Read-only user preset loading does not create or delete files", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + PresetBundle bundle; + PresetsConfigSubstitutions substitutions; + + const fs::path missing_root = dir.path() / "missing-user"; + bundle.prints.load_presets(missing_root.string(), PRESET_PRINT_NAME, substitutions, + ForwardCompatibilitySubstitutionRule::EnableSilent, nullptr, + PresetOrigin(), true); + CHECK_FALSE(fs::exists(missing_root / PRESET_PRINT_NAME)); + + const fs::path malformed = dir.path() / "existing-user" / PRESET_PRINT_NAME / "malformed.json"; + fs::create_directories(malformed.parent_path()); + std::ofstream(malformed.string()) << "{not-json"; + bundle.prints.load_presets((dir.path() / "existing-user").string(), PRESET_PRINT_NAME, substitutions, + ForwardCompatibilitySubstitutionRule::EnableSilent, nullptr, + PresetOrigin(), true); + CHECK(fs::exists(malformed)); +} + +TEST_CASE("Typeless preset resolution probes loaded FFF collections", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "typeless-process.json"; + std::ofstream(source_file.string()) << R"({"name":"Typeless Process","from":"User"})"; + + PresetBundle bundle; + Preset &process = add_inmemory_preset(bundle.prints, "Typeless Process"); + process.file = source_file.string(); + process.config.option("travel_speed", true)->values = {321.0}; + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + REQUIRE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error.empty()); + CHECK(resolved_type == Preset::TYPE_PRINT); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); +} + +TEST_CASE("Typeless preset resolution preserves duplicate identity ambiguity", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "duplicate-process.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + add_inmemory_preset(bundle.prints, "First Process Identity").file = source_file.string(); + add_inmemory_preset(bundle.prints, "Second Process Identity").file = source_file.string(); + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset identity is ambiguous"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Typeless preset resolution rejects cross-type ambiguity", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "ambiguous.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + add_inmemory_preset(bundle.prints, "Process Identity").file = source_file.string(); + add_inmemory_preset(bundle.filaments, "Filament Identity").file = source_file.string(); + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset type is ambiguous"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Typeless preset resolution rejects a missing type candidate", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "unknown.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset type could not be resolved"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Exact file resolution rejects multiple preset identities", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "duplicate.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + Preset &first = add_inmemory_preset(bundle.prints, "First Identity"); + first.file = source_file.string(); + Preset &second = add_inmemory_preset(bundle.prints, "Second Identity"); + second.file = source_file.string(); + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Parent"; + + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset identity is ambiguous"); +} + +TEST_CASE("System preset resolution returns the canonical vendor configuration", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir source_dir; + PresetBundle bundle; + + VendorProfile vendor("VendorB"); + vendor.name = "Vendor B"; + auto [vendor_it, inserted] = bundle.vendors.emplace(vendor.id, std::move(vendor)); + REQUIRE(inserted); + + Preset &resolved = add_inmemory_preset(bundle.prints, "Vendor B Process", "fdm_process_common"); + resolved.is_system = true; + resolved.vendor = &vendor_it->second; + resolved.file = (source_dir.path() / "vendor-b-process.json").string(); + std::ofstream(resolved.file) << "{}"; + resolved.config.option("travel_speed", true)->values = {321.0}; + resolved.config.option("wall_loops", true)->value = 2; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + raw.option("wall_loops", true)->value = 5; + + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, resolved.file, + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); + CHECK(raw.option("wall_loops")->value == 2); +} + +TEST_CASE("Manifest-backed preset resolution loads the source vendor tree", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path vendor_dir = dir.path() / "Acme"; + const fs::path child_file = vendor_dir / "process" / "nested" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"fdm_process_common","sub_path":"process/base.json"},)" + << R"({"name":"Acme Process","sub_path":"process/nested/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream((vendor_dir / "process" / "base.json").string()) + << R"({"type":"process","name":"fdm_process_common","from":"system",)" + << R"("instantiation":"false","travel_speed":["321"]})"; + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common","wall_loops":"5"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + raw.option("wall_loops", true)->value = 5; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); + CHECK(raw.option("wall_loops")->value == 5); +} + +TEST_CASE("Manifest-backed resolution is scoped to the explicit source root", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + auto write_vendor = [&](const std::string &root_name, double travel_speed) { + const fs::path root = dir.path() / root_name; + const fs::path child_file = root / "Acme" / "process" / "child.json"; + fs::create_directories(child_file.parent_path()); + std::ofstream((root / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"fdm_process_common","sub_path":"process/base.json"},)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + std::ofstream((root / "Acme" / "process" / "base.json").string()) + << R"({"type":"process","name":"fdm_process_common","from":"system",)" + << R"("instantiation":"false","travel_speed":[")" << travel_speed << R"("]})"; + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common"})"; + return child_file; + }; + + const fs::path source_a = write_vendor("root-a", 111.0); + const fs::path source_b = write_vendor("root-b", 222.0); + REQUIRE(fs::exists(source_a)); + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "synthetic-parent-marker"; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_b.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(222.0, 1e-6)); +} + +TEST_CASE("Exact-only resolution rejects an unconfigured manifest-backed file", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "Acme" / "process" / "child.json"; + fs::create_directories(source_file.parent_path()); + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + std::ofstream(source_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Some Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset was not found in the loaded bundle"); +} + +TEST_CASE("Vendor filament resolution uses the shared Orca library base", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path library_dir = dir.path() / PresetBundle::ORCA_FILAMENT_LIBRARY; + const fs::path vendor_dir = dir.path() / "Acme"; + const fs::path child_file = vendor_dir / "filament" / "nested" / "petg.json"; + + std::ofstream((dir.path() / (std::string(PresetBundle::ORCA_FILAMENT_LIBRARY) + ".json")).string()) + << R"({"version":"1.0.0","name":"OrcaFilamentLibrary","filament_list":[)" + << R"({"name":"fdm_filament_pet","sub_path":"filament/pet.json","filament_id":"GFL99"}]})"; + fs::create_directories(library_dir / "filament"); + std::ofstream((library_dir / "filament" / "pet.json").string()) + << R"({"type":"filament","name":"fdm_filament_pet","from":"system",)" + << R"("filament_id":"GFL99","instantiation":"false",)" + << R"("filament_type":["PETG"],"filament_density":["1.27"]})"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","filament_list":[)" + << R"({"name":"Acme PETG","sub_path":"filament/nested/petg.json","filament_id":"GFA00"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"filament","name":"Acme PETG","from":"system",)" + << R"("filament_id":"GFA00","instantiation":"true","inherits":"fdm_filament_pet"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_pet"; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_FILAMENT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + CHECK(raw.opt_string("filament_type", 0u) == "PETG"); + REQUIRE(raw.option("filament_density")->values.size() == 1); + CHECK_THAT(raw.option("filament_density")->values.front(), Catch::Matchers::WithinAbs(1.27, 1e-6)); +} + +TEST_CASE("Manifest-backed resolution rejects a missing parent", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path child_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"Missing Parent","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Missing Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK_FALSE(error.empty()); +} + +TEST_CASE("Manifest-backed resolution rejects a vendor load with malformed entries", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path child_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[123,)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK_FALSE(error.empty()); +} + +TEST_CASE("Manifest-backed resolution rejects files absent from the vendor manifest", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path listed_file = dir.path() / "Acme" / "process" / "listed.json"; + const fs::path unlisted_file = dir.path() / "Acme" / "process" / "unlisted.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Listed Process","sub_path":"process/listed.json"}]})"; + fs::create_directories(listed_file.parent_path()); + std::ofstream(listed_file.string()) + << R"({"type":"process","name":"Listed Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + std::ofstream(unlisted_file.string()) + << R"({"type":"process","name":"Unlisted Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, unlisted_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Source file is not an instantiated preset in its vendor manifest"); +} + +TEST_CASE("Manifest-backed resolution rejects a mismatched preset type", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path process_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(process_file.parent_path()); + std::ofstream(process_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_FILAMENT, process_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Source file is not an instantiated preset in its vendor manifest"); +} + +TEST_CASE("Resolution terminates when no vendor manifest exists", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path detached_file = dir.path() / "detached.json"; + std::ofstream(detached_file.string()) << "{}"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Missing Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, detached_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Preset was not found in the loaded bundle"); +} + // Orca: a filament in the Orca Filament Library that names its compatible printers has to hide the generic // library filament sharing its alias, the same way a vendor owned filament does. Otherwise both are compatible // with that printer and the plater combo box lists the shared alias twice. From 01a03d6d32d482a28f667723541d4cb462ffc303 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 8 Sep 2026 14:45:34 +0800 Subject: [PATCH 137/208] delete plan docs --- ...6-07-23-wx-inspectable-on-dpiaware-plan.md | 111 --- .../2026-07-23-wx-inspector-plugins-plan.md | 753 ------------------ .../plans/2026-08-14-ffmpeg-player-macos.md | 376 --------- ...07-23-wx-inspectable-on-dpiaware-design.md | 102 --- .../2026-07-23-wx-inspector-plugins-design.md | 244 ------ .../2026-08-14-ffmpeg-player-macos-design.md | 110 --- 6 files changed, 1696 deletions(-) delete mode 100644 docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md delete mode 100644 docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md delete mode 100644 docs/superpowers/plans/2026-08-14-ffmpeg-player-macos.md delete mode 100644 docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md delete mode 100644 docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md delete mode 100644 docs/superpowers/specs/2026-08-14-ffmpeg-player-macos-design.md diff --git a/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md b/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md deleted file mode 100644 index 5b3669ace4..0000000000 --- a/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md +++ /dev/null @@ -1,111 +0,0 @@ -# Move `wxInspectable` into `DPIAware` — Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Move `wxInspector::wxInspectable` from individual leaf classes into the common `DPIAware

` template so every DPIAware widget is automatically inspectable and gets the inspector keyboard shortcut. - -**Architecture:** `DPIAware

` gains `wxInspector::wxInspectable` as a second base class and calls `SetupInspectorAccelerator(this)` in its constructor. `DPIDialog` and `MainFrame` drop their now-redundant `wxInspectable` inheritance and `SetupInspectorAccelerator` calls. - -**Tech Stack:** C++17, wxWidgets, wxInspector - -## Global Constraints - -- Build with `D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe` -- Use `--config RelWithDebInfo` for all builds -- Cross-platform: must compile on Windows, macOS, and Linux -- Match existing code style: PascalCase classes, `#pragma once` -- Do NOT commit files under `.superpowers/` -- Do NOT commit `task.md` - ---- - -### Task 1: Move `wxInspectable` and `SetupInspectorAccelerator` into `DPIAware

` - -**Files:** -- Modify: `src/slic3r/GUI/GUI_Utils.hpp:92` (DPIAware template — add wxInspectable base + SetupInspectorAccelerator call) -- Modify: `src/slic3r/GUI/GUI_Utils.hpp:276` (DPIDialog — drop wxInspectable + SetupInspectorAccelerator) -- Modify: `src/slic3r/GUI/MainFrame.hpp:96` (MainFrame — drop wxInspectable) -- Modify: `src/slic3r/GUI/MainFrame.cpp:304` (MainFrame constructor — drop SetupInspectorAccelerator) - -**Interfaces:** -- Consumes: Nothing (standalone refactor) -- Produces: All DPIAware widgets automatically inherit `wxInspector::wxInspectable` and get Ctrl+Shift+I accelerator - -- [ ] **Step 1: Add `wxInspectable` to `DPIAware

` and call `SetupInspectorAccelerator`** - -In `src/slic3r/GUI/GUI_Utils.hpp`, line 92, change the base class: - -```cpp -// Before: -template class DPIAware : public P -// After: -template class DPIAware : public P, public wxInspector::wxInspectable -``` - -In the constructor body of `DPIAware

`, after `this->CenterOnParent();` (currently line 110), add: - -```cpp -SetupInspectorAccelerator(this); -``` - -(`` is already included at line 23.) - -- [ ] **Step 2: Remove redundant `wxInspectable` and `SetupInspectorAccelerator` from `DPIDialog`** - -In `src/slic3r/GUI/GUI_Utils.hpp`, line 276, change: - -```cpp -// Before: -class DPIDialog : public DPIAware, public wxInspector::wxInspectable -// After: -class DPIDialog : public DPIAware -``` - -In the `DPIDialog` constructor body, remove the `SetupInspectorAccelerator(this);` line (currently line 286). The rest of the constructor stays. - -- [ ] **Step 3: Remove redundant `wxInspectable` from `MainFrame`** - -In `src/slic3r/GUI/MainFrame.hpp`, line 96, change: - -```cpp -// Before: -class MainFrame : public DPIFrame, public wxInspector::wxInspectable -// After: -class MainFrame : public DPIFrame -``` - -`MainFrame` now gets `wxInspectable` through `DPIFrame` → `DPIAware`. - -- [ ] **Step 4: Remove redundant `SetupInspectorAccelerator` from `MainFrame` constructor** - -In `src/slic3r/GUI/MainFrame.cpp`, line 304, remove the line: - -```cpp -SetupInspectorAccelerator(this); -``` - -It is now called automatically by the `DPIAware` constructor. - -- [ ] **Step 5: Build to verify compilation** - -```powershell -$cmakePath = "D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -& $cmakePath --build . --config RelWithDebInfo --target ALL_BUILD -- -m -``` - -Expected: Build succeeds with zero new errors or warnings. - -- [ ] **Step 6: Commit** - -```bash -git add src/slic3r/GUI/GUI_Utils.hpp src/slic3r/GUI/MainFrame.hpp src/slic3r/GUI/MainFrame.cpp -git commit -m "refactor: move wxInspectable and SetupInspectorAccelerator into DPIAware - -DPIAware

now inherits wxInspector::wxInspectable and calls -SetupInspectorAccelerator in its constructor, making all DPIAware -widgets automatically appear in the inspector tree with the -Ctrl+Shift+I shortcut. Remove redundant wxInspectable inheritance -and SetupInspectorAccelerator calls from DPIDialog and MainFrame. - -Co-Authored-By: Claude " -``` diff --git a/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md b/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md deleted file mode 100644 index c3061b223d..0000000000 --- a/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md +++ /dev/null @@ -1,753 +0,0 @@ -# wxInspector Plugins for OrcaSlicer — Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Build two wxInspector plugins (DPIAware + CustomWidgets) that expose OrcaSlicer custom control properties in the inspector's property grid. - -**Architecture:** Two plugins in a shared folder under `src/slic3r/Utils/wxInspectorPlugins/`. DPIAwarePlugin uses `dynamic_cast/` for detection; CustomWidgetsPlugin uses per-type `dynamic_cast`. Both registered as static singletons via a single inline function in `Registration.hpp`, called from `MainFrame` constructor. - -**Tech Stack:** C++17, wxWidgets, wxInspector plugin API (`wx/inspector/plugin.h`, `wx/inspector/inspector.h`), OrcaSlicer custom widget headers - -## Global Constraints - -- Plugins placed under `src/slic3r/Utils/wxInspectorPlugins/` -- Build with `D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe` -- Minimal source changes: only trivial (one-line) getters/setters added to existing classes -- Cross-platform: must compile on Windows, macOS, and Linux -- Match existing code style: PascalCase classes, snake_case functions, `#pragma once` - ---- - -### Task 1: Add getters/setters to existing Orca widget headers - -**Files:** -- Modify: `src/slic3r/GUI/GUI_Utils.hpp` (DPIAware template — add 4 methods) -- Modify: `src/slic3r/GUI/Widgets/Button.hpp` (add 3 getters) -- Modify: `src/slic3r/GUI/Widgets/CheckBox.hpp` (add 1 getter) -- Modify: `src/slic3r/GUI/Widgets/TextInput.hpp` (add 1 getter) -- Modify: `src/slic3r/GUI/Widgets/LabeledStaticBox.hpp` (add 4 getter declarations) -- Modify: `src/slic3r/GUI/Widgets/LabeledStaticBox.cpp` (add 4 getter implementations) - -**Interfaces:** -- Consumes: Nothing (prerequisite for all other tasks) -- Produces: - - `DPIAware

::set_scale_factor(float)`, `DPIAware

::set_prev_scale_factor(float)`, `DPIAware

::set_em_unit(int)`, `DPIAware

::force_rescale() const` - - `Button::GetStyle()`, `Button::GetType()`, `Button::IsSelected()` - - `CheckBox::IsHalfChecked()` - - `TextInput::GetCornerRadius()` - - `LabeledStaticBox::GetCornerRadius()`, `LabeledStaticBox::GetBorderWidth()`, `LabeledStaticBox::GetBorderColor()`, `LabeledStaticBox::GetScale()` - -- [ ] **Step 1: Add DPIAware setters/getter in GUI_Utils.hpp** - -After line 184 (`float prev_scale_factor() const { return m_prev_scale_factor; }`), add: - -```cpp -void set_scale_factor(float v) { m_scale_factor = v; } -void set_prev_scale_factor(float v) { m_prev_scale_factor = v; } -void set_em_unit(int v) { m_em_unit = v; } -bool force_rescale() const { return m_force_rescale; } -``` - -- [ ] **Step 2: Add Button getters in Button.hpp** - -After line 79 (`void SetSelected(bool selected = true) { m_selected = selected; }`), add: - -```cpp -ButtonStyle GetStyle() const { return m_style; } -ButtonType GetType() const { return m_type; } -bool IsSelected() const { return m_selected; } -``` - -- [ ] **Step 3: Add CheckBox getter in CheckBox.hpp** - -After line 16 (`void SetHalfChecked(bool value = true);`), add: - -```cpp -bool IsHalfChecked() const { return m_half_checked; } -``` - -- [ ] **Step 4: Add TextInput getter in TextInput.hpp** - -After line 44 (`void SetCornerRadius(double radius);`), add: - -```cpp -int GetCornerRadius() const { return static_cast(radius); } -``` - -(Note: `radius` is inherited from `StaticBox` which has it as a protected `double` member.) - -- [ ] **Step 5: Add LabeledStaticBox getter declarations in LabeledStaticBox.hpp** - -After line 46 (`bool Enable(bool enable) override;`), add: - -```cpp -int GetCornerRadius() const { return m_radius; } -int GetBorderWidth() const { return m_border_width; } -StateColor GetBorderColor() const { return border_color; } -float GetScale() const { return m_scale; } -``` - -(Note: all of `m_radius`, `m_border_width`, `border_color`, `m_scale` are protected members, accessible to inline methods.) - -- [ ] **Step 6: Commit** - -```bash -git add src/slic3r/GUI/GUI_Utils.hpp src/slic3r/GUI/Widgets/Button.hpp src/slic3r/GUI/Widgets/CheckBox.hpp src/slic3r/GUI/Widgets/TextInput.hpp src/slic3r/GUI/Widgets/LabeledStaticBox.hpp -git commit -m "feat: add getters/setters for wxInspector plugin access - -Add minimal public accessors to DPIAware (set_scale_factor, -set_prev_scale_factor, set_em_unit, force_rescale), Button -(GetStyle, GetType, IsSelected), CheckBox (IsHalfChecked), -TextInput (GetCornerRadius), and LabeledStaticBox -(GetCornerRadius, GetBorderWidth, GetBorderColor, GetScale)." -``` - ---- - -### Task 2: Create Registration helper header - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/Registration.hpp` - -**Interfaces:** -- Consumes: Nothing (forward-declares plugin classes) -- Produces: `RegisterOrcaInspectorPlugins()` - -- [ ] **Step 1: Create directory** - -```bash -mkdir -p src/slic3r/Utils/wxInspectorPlugins -``` - -- [ ] **Step 2: Write Registration.hpp** - -```cpp -#pragma once - -namespace wxInspector { -class wxInspectorPlugin; -void RegisterPlugin(wxInspectorPlugin* plugin); -} - -// Forward declare our plugins -class DPIAwarePlugin; -class CustomWidgetsPlugin; - -inline void RegisterOrcaInspectorPlugins() -{ - static DPIAwarePlugin dpiaware; - static CustomWidgetsPlugin customWidgets; - wxInspector::RegisterPlugin(&dpiaware); - wxInspector::RegisterPlugin(&customWidgets); -} -``` - -- [ ] **Step 3: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/Registration.hpp -git commit -m "feat: add wxInspector plugin registration helper - -Add RegisterOrcaInspectorPlugins() inline function that creates -and registers the DPIAwarePlugin and CustomWidgetsPlugin as -static instances (matching wxInspector's built-in pattern)." -``` - ---- - -### Task 3: Create DPIAwarePlugin - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.hpp` -- Create: `src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.cpp` - -**Interfaces:** -- Consumes: Task 1 (DPIAware getters/setters), Task 2 (registration pattern) -- Produces: `class DPIAwarePlugin : public wxInspector::wxInspectorPlugin` - -- [ ] **Step 1: Write DPIAwarePlugin.hpp** - -```cpp -#pragma once - -#include - -class DPIAwarePlugin : public wxInspector::wxInspectorPlugin -{ -public: - wxString GetName() const override; - - bool CanProvideProperties(wxClassInfo* info) override; - - wxVector GetProperties( - wxInspector::InspectableObject& obj) override; -}; -``` - -- [ ] **Step 2: Write DPIAwarePlugin.cpp** - -```cpp -#include "DPIAwarePlugin.hpp" - -#include "slic3r/GUI/GUI_Utils.hpp" // DPIFrame, DPIDialog, DPIAware

- -#include - -namespace { - -template -void addDPIProps(T* dpi, wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Scale Factor", "DPI Scaling", PropertyType::String, - wxString::Format("%.2f", dpi->scale_factor()), false, {}, - [dpi]() { return wxString::Format("%.2f", dpi->scale_factor()); }, - [dpi](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - dpi->set_scale_factor((float) val); - return true; - }}); - - props.push_back({"Prev Scale Factor", "DPI Scaling", PropertyType::String, - wxString::Format("%.2f", dpi->prev_scale_factor()), false, {}, - [dpi]() { return wxString::Format("%.2f", dpi->prev_scale_factor()); }, - [dpi](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - dpi->set_prev_scale_factor((float) val); - return true; - }}); - - props.push_back({"EM Unit", "DPI Scaling", PropertyType::Integer, - wxString::Format("%d", dpi->em_unit()), false, {}, - [dpi]() { return wxString::Format("%d", dpi->em_unit()); }, - [dpi](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - dpi->set_em_unit((int) val); - return true; - }}); - - props.push_back({"Normal Font", "DPI Scaling", PropertyType::ReadOnly, - dpi->normal_font().GetNativeFontInfoDesc(), true, {}, - [dpi]() { return dpi->normal_font().GetNativeFontInfoDesc(); }, - nullptr}); - - props.push_back({"Force Rescale", "DPI Scaling", PropertyType::Boolean, - dpi->force_rescale() ? "true" : "false", true, {}, - [dpi]() { return dpi->force_rescale() ? "true" : "false"; }, - nullptr}); -} - -} // anonymous namespace - -wxString DPIAwarePlugin::GetName() const -{ - return "OrcaDPIAware"; -} - -bool DPIAwarePlugin::CanProvideProperties(wxClassInfo* info) -{ - return info->IsKindOf(CLASSINFO(wxWindow)); -} - -wxVector DPIAwarePlugin::GetProperties( - wxInspector::InspectableObject& obj) -{ - wxVector props; - wxWindow* win = obj.AsWindow(); - if (!win) return props; - - if (auto* frame = dynamic_cast(win)) { - addDPIProps(frame, props); - } else if (auto* dlg = dynamic_cast(win)) { - addDPIProps(dlg, props); - } - - return props; -} -``` - -- [ ] **Step 3: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.hpp src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.cpp -git commit -m "feat: add DPIAware wxInspector plugin - -Exposes DPI scaling properties (scale_factor, prev_scale_factor, -em_unit, normal_font, force_rescale) on DPIFrame and DPIDialog -widgets. Uses dynamic_cast for detection and a template helper -to capture the correct static type for lambda accessors." -``` - ---- - -### Task 4: Create CustomWidgetsPlugin - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp` -- Create: `src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp` - -**Interfaces:** -- Consumes: Task 1 (all widget getters), Task 2 (registration pattern) -- Produces: `class CustomWidgetsPlugin : public wxInspector::wxInspectorPlugin` - -- [ ] **Step 1: Write CustomWidgetsPlugin.hpp** - -```cpp -#pragma once - -#include - -class CustomWidgetsPlugin : public wxInspector::wxInspectorPlugin -{ -public: - wxString GetName() const override; - - bool CanProvideProperties(wxClassInfo* info) override; - - wxVector GetProperties( - wxInspector::InspectableObject& obj) override; - -private: - void addButtonProps(class Button* btn, - wxVector& props); - void addCheckBoxProps(class CheckBox* cb, - wxVector& props); - void addTextInputProps(class TextInput* ti, - wxVector& props); - void addSwitchButtonProps(class SwitchButton* sb, - wxVector& props); - void addProgressBarProps(class ProgressBar* pb, - wxVector& props); - void addLabelProps(class Label* lbl, - wxVector& props); - void addLabeledStaticBoxProps(class LabeledStaticBox* lsb, - wxVector& props); -}; -``` - -- [ ] **Step 2: Write CustomWidgetsPlugin.cpp — includes and GetName/CanProvideProperties** - -```cpp -#include "CustomWidgetsPlugin.hpp" - -#include "slic3r/GUI/Widgets/Button.hpp" -#include "slic3r/GUI/Widgets/CheckBox.hpp" -#include "slic3r/GUI/Widgets/TextInput.hpp" -#include "slic3r/GUI/Widgets/SwitchButton.hpp" -#include "slic3r/GUI/Widgets/ProgressBar.hpp" -#include "slic3r/GUI/Widgets/Label.hpp" -#include "slic3r/GUI/Widgets/LabeledStaticBox.hpp" - -#include -#include - -wxString CustomWidgetsPlugin::GetName() const -{ - return "OrcaCustomWidgets"; -} - -bool CustomWidgetsPlugin::CanProvideProperties(wxClassInfo* info) -{ - return info->IsKindOf(CLASSINFO(wxWindow)); -} - -wxVector CustomWidgetsPlugin::GetProperties( - wxInspector::InspectableObject& obj) -{ - wxVector props; - wxWindow* win = obj.AsWindow(); - if (!win) return props; - - if (auto* btn = dynamic_cast(win)) - addButtonProps(btn, props); - if (auto* cb = dynamic_cast(win)) - addCheckBoxProps(cb, props); - if (auto* ti = dynamic_cast(win)) - addTextInputProps(ti, props); - if (auto* sb = dynamic_cast(win)) - addSwitchButtonProps(sb, props); - if (auto* pb = dynamic_cast(win)) - addProgressBarProps(pb, props); - if (auto* lbl = dynamic_cast(win)) - addLabelProps(lbl, props); - if (auto* lsb = dynamic_cast(win)) - addLabeledStaticBoxProps(lsb, props); - - return props; -} -``` - -- [ ] **Step 3: Write CustomWidgetsPlugin.cpp — addButtonProps** - -```cpp -void CustomWidgetsPlugin::addButtonProps(Button* btn, - wxVector& props) -{ - using namespace wxInspector; - - wxVector styleChoices; - styleChoices.push_back("Regular"); - styleChoices.push_back("Confirm"); - styleChoices.push_back("Alert"); - styleChoices.push_back("Disabled"); - - auto styleToStr = [](ButtonStyle s) -> wxString { - switch (s) { - case ButtonStyle::Regular: return "Regular"; - case ButtonStyle::Confirm: return "Confirm"; - case ButtonStyle::Alert: return "Alert"; - case ButtonStyle::Disabled: return "Disabled"; - } - return "Regular"; - }; - - props.push_back({"Button Style", "Orca Button", PropertyType::Choice, - styleToStr(btn->GetStyle()), false, styleChoices, - [btn, styleToStr]() { return styleToStr(btn->GetStyle()); }, - [btn](const wxString& v) { - ButtonStyle s = ButtonStyle::Regular; - if (v == "Confirm") s = ButtonStyle::Confirm; - else if (v == "Alert") s = ButtonStyle::Alert; - else if (v == "Disabled") s = ButtonStyle::Disabled; - btn->SetStyle(s, btn->GetType()); - return true; - }}); - - wxVector typeChoices; - typeChoices.push_back("Compact"); - typeChoices.push_back("Window"); - typeChoices.push_back("Choice"); - typeChoices.push_back("Parameter"); - typeChoices.push_back("Icon"); - typeChoices.push_back("Expanded"); - - auto typeToStr = [](ButtonType t) -> wxString { - switch (t) { - case ButtonType::Compact: return "Compact"; - case ButtonType::Window: return "Window"; - case ButtonType::Choice: return "Choice"; - case ButtonType::Parameter: return "Parameter"; - case ButtonType::Icon: return "Icon"; - case ButtonType::Expanded: return "Expanded"; - } - return "Compact"; - }; - - props.push_back({"Button Type", "Orca Button", PropertyType::Choice, - typeToStr(btn->GetType()), false, typeChoices, - [btn, typeToStr]() { return typeToStr(btn->GetType()); }, - [btn](const wxString& v) { - ButtonType t = ButtonType::Compact; - if (v == "Window") t = ButtonType::Window; - else if (v == "Choice") t = ButtonType::Choice; - else if (v == "Parameter") t = ButtonType::Parameter; - else if (v == "Icon") t = ButtonType::Icon; - else if (v == "Expanded") t = ButtonType::Expanded; - btn->SetStyle(btn->GetStyle(), t); - return true; - }}); - - props.push_back({"Selected", "Orca Button", PropertyType::Boolean, - btn->IsSelected() ? "true" : "false", false, {}, - [btn]() { return btn->IsSelected() ? "true" : "false"; }, - [btn](const wxString& v) { - btn->SetSelected(v == "true"); - btn->Refresh(); - return true; - }}); -} -``` - -- [ ] **Step 4: Write CustomWidgetsPlugin.cpp — addCheckBoxProps** - -```cpp -void CustomWidgetsPlugin::addCheckBoxProps(CheckBox* cb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Half Checked", "Orca CheckBox", PropertyType::Boolean, - cb->IsHalfChecked() ? "true" : "false", false, {}, - [cb]() { return cb->IsHalfChecked() ? "true" : "false"; }, - [cb](const wxString& v) { - cb->SetHalfChecked(v == "true"); - return true; - }}); -} -``` - -- [ ] **Step 5: Write CustomWidgetsPlugin.cpp — addTextInputProps** - -```cpp -void CustomWidgetsPlugin::addTextInputProps(TextInput* ti, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Label", "Orca TextInput", PropertyType::String, - ti->GetLabel(), false, {}, - [ti]() { return ti->GetLabel(); }, - [ti](const wxString& v) { ti->SetLabel(v); return true; }}); - - props.push_back({"Text Value", "Orca TextInput", PropertyType::String, - ti->GetTextCtrl()->GetValue(), false, {}, - [ti]() { return ti->GetTextCtrl()->GetValue(); }, - [ti](const wxString& v) { ti->GetTextCtrl()->SetValue(v); return true; }}); - - props.push_back({"Corner Radius", "Orca TextInput", PropertyType::Integer, - wxString::Format("%d", ti->GetCornerRadius()), false, {}, - [ti]() { return wxString::Format("%d", ti->GetCornerRadius()); }, - [ti](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - ti->SetCornerRadius((double) val); - ti->Refresh(); - return true; - }}); -} -``` - -- [ ] **Step 6: Write CustomWidgetsPlugin.cpp — addSwitchButtonProps** - -```cpp -void CustomWidgetsPlugin::addSwitchButtonProps(SwitchButton* sb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Value", "Orca SwitchButton", PropertyType::Boolean, - sb->GetValue() ? "true" : "false", false, {}, - [sb]() { return sb->GetValue() ? "true" : "false"; }, - [sb](const wxString& v) { - sb->SetValue(v == "true"); - return true; - }}); -} -``` - -(Note: `GetValue()` and `SetValue()` are inherited from `wxBitmapToggleButton` → `wxToggleButton`.) - -- [ ] **Step 7: Write CustomWidgetsPlugin.cpp — addProgressBarProps** - -```cpp -void CustomWidgetsPlugin::addProgressBarProps(ProgressBar* pb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Proportion", "Orca ProgressBar", PropertyType::String, - wxString::Format("%.2f", pb->m_proportion), false, {}, - [pb]() { return wxString::Format("%.2f", pb->m_proportion); }, - [pb](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - pb->m_proportion = val; - pb->Refresh(); - return true; - }}); - - props.push_back({"Show Number", "Orca ProgressBar", PropertyType::Boolean, - pb->m_shownumber ? "true" : "false", false, {}, - [pb]() { return pb->m_shownumber ? "true" : "false"; }, - [pb](const wxString& v) { - pb->m_shownumber = (v == "true"); - pb->Refresh(); - return true; - }}); -} -``` - -(Note: `m_proportion` and `m_shownumber` are public members on `ProgressBar`.) - -- [ ] **Step 8: Write CustomWidgetsPlugin.cpp — addLabelProps** - -```cpp -void CustomWidgetsPlugin::addLabelProps(Label* lbl, - wxVector& props) -{ - using namespace wxInspector; - - bool isHyperlink = (lbl->GetWindowStyleFlag() & 0x0020) != 0; // LB_HYPERLINK - - props.push_back({"Is Hyperlink", "Orca Label", PropertyType::Boolean, - isHyperlink ? "true" : "false", true, {}, - [lbl]() { - return (lbl->GetWindowStyleFlag() & 0x0020) ? "true" : "false"; - }, - nullptr}); - - props.push_back({"Font Point Size", "Orca Label", PropertyType::ReadOnly, - wxString::Format("%d", lbl->GetFont().GetPointSize()), true, {}, - [lbl]() { - return wxString::Format("%d", lbl->GetFont().GetPointSize()); - }, - nullptr}); -} -``` - -- [ ] **Step 9: Write CustomWidgetsPlugin.cpp — addLabeledStaticBoxProps** - -```cpp -void CustomWidgetsPlugin::addLabeledStaticBoxProps(LabeledStaticBox* lsb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Corner Radius", "LabeledStaticBox", PropertyType::Integer, - wxString::Format("%d", lsb->GetCornerRadius()), false, {}, - [lsb]() { return wxString::Format("%d", lsb->GetCornerRadius()); }, - [lsb](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - lsb->SetCornerRadius((int) val); - return true; - }}); - - props.push_back({"Border Width", "LabeledStaticBox", PropertyType::Integer, - wxString::Format("%d", lsb->GetBorderWidth()), false, {}, - [lsb]() { return wxString::Format("%d", lsb->GetBorderWidth()); }, - [lsb](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - lsb->SetBorderWidth((int) val); - return true; - }}); - - // Border Color: display as hex string - wxColour bc = lsb->GetBorderColor().colorForStates(0); - props.push_back({"Border Color", "LabeledStaticBox", PropertyType::String, - bc.GetAsString(wxC2S_HTML_SYNTAX), false, {}, - [lsb]() { - return lsb->GetBorderColor() - .colorForStates(0) - .GetAsString(wxC2S_HTML_SYNTAX); - }, - [lsb](const wxString& v) { - wxColour c(v); - if (!c.IsOk()) return false; - lsb->SetBorderColor(StateColor(c)); - return true; - }}); - - props.push_back({"Scale", "LabeledStaticBox", PropertyType::ReadOnly, - wxString::Format("%.2f", lsb->GetScale()), true, {}, - [lsb]() { return wxString::Format("%.2f", lsb->GetScale()); }, - nullptr}); -} -``` - -- [ ] **Step 10: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp -git commit -m "feat: add OrcaCustomWidgets wxInspector plugin - -Exposes Orca-specific properties on 7 widget types: -- Button: Style, Type, Selected -- CheckBox: Half Checked -- TextInput: Label, Text Value, Corner Radius -- SwitchButton: Value -- ProgressBar: Proportion, Show Number -- Label: Is Hyperlink, Font Point Size -- LabeledStaticBox: Corner Radius, Border Width, Border Color, Scale - -Each widget type uses dynamic_cast for safe detection." -``` - ---- - -### Task 5: Wire plugins into MainFrame and CMakeLists - -**Files:** -- Modify: `src/slic3r/GUI/MainFrame.cpp` (add include + registration call) -- Modify: `src/slic3r/CMakeLists.txt` (add 4 source files) - -**Interfaces:** -- Consumes: Tasks 1-4 (all plugins and registration helper) -- Produces: Registered plugins available at runtime, buildable project - -- [ ] **Step 1: Add include in MainFrame.cpp** - -After the existing includes (around line 30, near the other Utils includes), add: - -```cpp -#include "slic3r/Utils/wxInspectorPlugins/Registration.hpp" -``` - -- [ ] **Step 2: Add registration call in MainFrame constructor** - -After `SetupInspectorAccelerator(this);` (currently line ~303), add: - -```cpp -RegisterOrcaInspectorPlugins(); -``` - -- [ ] **Step 3: Add source files to CMakeLists.txt** - -Find the `SLIC3R_GUI_SOURCES` list in `src/slic3r/CMakeLists.txt`. After the existing `Utils/*.cpp` entries (around line 650-754), add: - -```cmake -Utils/wxInspectorPlugins/DPIAwarePlugin.hpp -Utils/wxInspectorPlugins/DPIAwarePlugin.cpp -Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp -Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp -Utils/wxInspectorPlugins/Registration.hpp -``` - -(Note: Add all 5 files — 2 .hpp + 2 .cpp + 1 Registration.hpp. wxWidgets cmake needs headers listed too for the resource system.) - -- [ ] **Step 4: Commit** - -```bash -git add src/slic3r/GUI/MainFrame.cpp src/slic3r/CMakeLists.txt -git commit -m "feat: wire wxInspector plugins into MainFrame and build - -- Call RegisterOrcaInspectorPlugins() after SetupInspectorAccelerator -- Add all plugin source files to SLIC3R_GUI_SOURCES" -``` - ---- - -### Task 6: Build and verify - -**Files:** -- None modified (verification only) - -- [ ] **Step 1: Configure the build** - -```powershell -$cmakePath = "D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -& $cmakePath --build . --config Debug --target ALL_BUILD -- -m -``` - -Expected: Build succeeds with zero errors and zero warnings from our new files. - -- [ ] **Step 2: Fix any compilation errors** - -If the build fails: -- Check that `#include` paths resolve (the `slic3r/GUI/…` relative paths use `src/` as the include root — verify this is set up in CMake via `include_directories`) -- Check that `ButtonStyle` and `ButtonType` enums are visible (they're defined in `Button.hpp`) -- Check that `StateColor` constructor from `wxColour` is valid (it has `StateColor(wxColour const&)`) -- Check that `LabeledStaticBox::GetBorderColor()` returns by value (StateColor copy is fine) -- On macOS: static box margin removal call needs `#ifdef __WXOSX__` guard - -- [ ] **Step 3: Launch OrcaSlicer and verify inspector** - -Launch the built OrcaSlicer, press Ctrl+Shift+I to open the inspector: -1. Select the MainFrame in the tree — verify "DPI Scaling" category appears with Scale Factor, Prev Scale Factor, EM Unit, Normal Font, Force Rescale -2. Select an Orca Button — verify "Orca Button" category appears -3. Select an Orca CheckBox — verify "Orca CheckBox" category appears -4. Edit a property value (e.g., Scale Factor) — verify the setter applies correctly -5. Select a LabeledStaticBox — verify corner radius, border width, border color, scale appear - -- [ ] **Step 5: Commit (if fixes were needed) or mark complete** - -```bash -git status -``` - -If clean: verification complete. If changes were made: `git add` and commit with fix message. diff --git a/docs/superpowers/plans/2026-08-14-ffmpeg-player-macos.md b/docs/superpowers/plans/2026-08-14-ffmpeg-player-macos.md deleted file mode 100644 index 811626fc8b..0000000000 --- a/docs/superpowers/plans/2026-08-14-ffmpeg-player-macos.md +++ /dev/null @@ -1,376 +0,0 @@ -# macOS FFmpeg Media Player Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Make macOS use the same FFmpeg-based media player (`wxMediaCtrl3` + `AVVideoDecoder`) as Windows/Linux, linking the static FFmpeg libraries from the deps build, and remove the old `wxMediaCtrl2.mm` BambuPlayer-based player. - -**Architecture:** The new player is platform-neutral C++ already used on Linux/Windows. Enabling it on macOS is pure build wiring: compile `wxMediaCtrl3.cpp` + `AVVideoDecoder.cpp` on macOS, drop the `__WXMAC__` alias that redirects `wxMediaCtrl3` to the old `wxMediaCtrl2`, and link static FFmpeg (`libavcodec.a`/`libswscale.a`/`libavutil.a`) from the deps install. The Bambu stream API is dlsym'd at runtime from the network plugin (`libBambuSource.dylib`), which already exports it — no plugin changes needed. Rendering reuses the existing `wxImage` → `DrawBitmap` paint path (same as Linux). - -**Tech Stack:** C++17, wxWidgets, CMake, FFmpeg 7.0.3 (libavcodec/libswscale/libavutil), macOS (Xcode generator), `deps/` ExternalProject build system. - -## Global Constraints - -- Branch: `dev/ffmpeg-player-macos`. Commit after every task. -- **Linux and Windows builds must not change** — the FFmpeg deps flag change is guarded by `APPLE`; Linux keeps `--enable-shared`, Windows keeps its prebuilt DLL zips. -- Static FFmpeg only on macOS: deps produce `libavcodec.a`/`libswscale.a`/`libavutil.a`; the app links those explicitly — the app binary must have **no** `libav*` dylib references (`otool -L` check). -- Follow existing code style: PascalCase classes, snake_case functions, C++17. -- No changes to `StatusPanel.cpp`, `MediaPlayCtrl.*`, or the BambuTunnel interface — the app already creates `wxMediaCtrl3` and uses only its public interface. -- The player cannot be unit-tested (hardware/plugin-dependent GUI code); verification is build-level, link-level, and manual runtime on a Mac. -- `localization/i18n/list.txt` references only `wxMediaCtrl2.cpp` (Win/Linux, stays) — no translation-list changes needed. -- Build dirs on the dev machine: main app = `build_arm64/` (Xcode generator, multi-config), deps = `deps/build/arm64/` (Unix Makefiles). App target name: `OrcaSlicer`. Substitute your own configured build dirs where noted. - ---- - -### Task 1: Enable wxMediaCtrl3 on macOS and link static FFmpeg - -**Files:** -- Modify: `src/slic3r/GUI/wxMediaCtrl3.h` (lines 18–22: the `#ifdef __WXMAC__` alias branch) -- Modify: `src/slic3r/GUI/wxMediaCtrl3.cpp:13` (uncomment the event define) -- Modify: `src/slic3r/GUI/wxMediaCtrl2.cpp:101` (remove the event define) -- Modify: `src/slic3r/CMakeLists.txt` (APPLE source list ~lines 779–792; FFmpeg link block ~lines 905–910) - -**Interfaces:** -- Consumes: nothing new (all classes already exist). -- Produces: `wxMediaCtrl3` class compiled on macOS with the same interface as Linux/Windows — `Load(wxURI)`, `Play()`, `Stop()`, `SetIdleImage(wxString)`, `GetState()`, `GetLastError()`, `GetVideoSize()`, event `EVT_MEDIA_CTRL_STAT` defined once in the lib (from `wxMediaCtrl3.cpp`). - -- [ ] **Step 1: Remove the macOS alias in wxMediaCtrl3.h** - -Current (lines 16–23 of `src/slic3r/GUI/wxMediaCtrl3.h`): - -```cpp -void wxMediaCtrl_OnSize(wxWindow * ctrl, wxSize const & videoSize, int width, int height); - -#ifdef __WXMAC__ - -#include "wxMediaCtrl2.h" -#define wxMediaCtrl3 wxMediaCtrl2 - -#else - -#define BAMBU_DYNAMIC -``` - -New: - -```cpp -void wxMediaCtrl_OnSize(wxWindow * ctrl, wxSize const & videoSize, int width, int height); - -#define BAMBU_DYNAMIC -``` - -Also remove the matching `#endif` that closed the `#else` branch (the one before the final `#endif /* wxMediaCtrl3_h */`), so the file's `#ifndef`/`#endif` guard pair stays balanced. - -- [ ] **Step 2: Move the EVT_MEDIA_CTRL_STAT definition into wxMediaCtrl3.cpp** - -In `src/slic3r/GUI/wxMediaCtrl3.cpp:13`, uncomment: - -```cpp -//wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); -``` - -becomes: - -```cpp -wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); -``` - -In `src/slic3r/GUI/wxMediaCtrl2.cpp:101`, delete: - -```cpp -wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); -``` - -(One definition total in the lib — `MediaPlayCtrl.cpp:59` binds this event on the media ctrl.) - -- [ ] **Step 3: Update the APPLE source list in CMakeLists.txt** - -In `src/slic3r/CMakeLists.txt`, the APPLE branch (currently compiles `wxMediaCtrl2.mm`, which becomes dead on macOS): - -```cmake - GUI/wxMediaCtrl2.mm - GUI/wxMediaCtrl2.h - GUI/wxMediaCtrl3.h - ) -``` - -becomes: - -```cmake - GUI/AVVideoDecoder.cpp - GUI/AVVideoDecoder.hpp - GUI/wxMediaCtrl3.cpp - GUI/wxMediaCtrl3.h - ) -``` - -(The `else ()` branch — Win/Linux — stays exactly as it is.) - -- [ ] **Step 4: Link static FFmpeg on macOS** - -In `src/slic3r/CMakeLists.txt`, the FFmpeg block (currently `if (NOT APPLE)`): - -```cmake -if (NOT APPLE) - pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET - libavcodec - libswscale - libavutil - ) - target_link_libraries(libslic3r_gui PkgConfig::LIBAV) -endif() -``` - -becomes: - -```cmake -if (APPLE) - # Static FFmpeg from the deps install: nothing to bundle into the .app, - # no rpath/install_name handling. Order matters: avcodec -> swscale -> avutil. - find_library(LIBAVCODEC_LIBRARY NAMES libavcodec.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - find_library(LIBSWSCALE_LIBRARY NAMES libswscale.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - find_library(LIBAVUTIL_LIBRARY NAMES libavutil.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) - target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY}) - target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include) -else () - pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET - libavcodec - libswscale - libavutil - ) - target_link_libraries(libslic3r_gui PkgConfig::LIBAV) -endif() -``` - -The deps install (`${CMAKE_PREFIX_PATH}/lib`) already contains the three `.a` files from the existing arm64 deps build — no deps rebuild needed for this task. - -- [ ] **Step 5: Reconfigure and build the app** - -Run (Xcode generator; `cmake` re-runs automatically on build): - -```bash -cmake --build build_arm64 --config RelWithDebInfo --target OrcaSlicer -``` - -Expected: configure succeeds (no `pkg_check_modules` errors on macOS, `find_library` finds all three `.a` files), compile succeeds (`wxMediaCtrl3.cpp` and `AVVideoDecoder.cpp` compile on macOS without changes), link succeeds. - -If CMake complains that `wxMediaCtrl3.h` is included but not in the source list or similar IDE-only warnings — ignore; headers in the list are cosmetic. - -- [ ] **Step 6: Verify no dynamic FFmpeg dependency** - -```bash -otool -L build_arm64/src/RelWithDebInfo/OrcaSlicer.app/Contents/MacOS/OrcaSlicer | grep -i "libav" || echo "OK: no dynamic FFmpeg" -``` - -Expected: prints `OK: no dynamic FFmpeg` (empty grep output). This is the whole point of static linking — nothing to bundle into the `.app`. - -- [ ] **Step 7: Quick sanity — macOS unit tests still pass** - -```bash -ctest --test-dir build_arm64/tests/libslic3r --output-on-failure -``` - -Expected: passes (add `-C RelWithDebInfo` if the multi-config generator requires it). If no tests were built in this build dir, build target `tests` first (`cmake --build build_arm64 --config RelWithDebInfo --target tests`). - -- [ ] **Step 8: Commit** - -```bash -git add src/slic3r/CMakeLists.txt src/slic3r/GUI/wxMediaCtrl3.h src/slic3r/GUI/wxMediaCtrl3.cpp src/slic3r/GUI/wxMediaCtrl2.cpp -git commit -m "feat: use FFmpeg media player on macOS with static FFmpeg" -``` - ---- - -### Task 2: Static-only FFmpeg in the macOS deps build - -**Files:** -- Modify: `deps/FFMPEG/FFMPEG.cmake` (non-MSVC branch, APPLE section and CONFIGURE_COMMAND) - -**Interfaces:** -- Consumes: nothing. -- Produces: a deps install on macOS containing only `libavcodec.a`, `libswscale.a`, `libavutil.a` (+ headers) — no `libav*` dylibs, so no bundling/rpath machinery is ever needed on macOS. Linux and Windows output are unchanged. - -- [ ] **Step 1: Add the static flag variable** - -In `deps/FFMPEG/FFMPEG.cmake`, inside the non-MSVC `else ()` branch, in the existing `if (APPLE)` block: - -```cmake - if (APPLE) - set(_minos_cmd - "CFLAGS=-mmacosx-version-min=${DEP_OSX_TARGET}" - "LDFLAGS=-mmacosx-version-min=${DEP_OSX_TARGET}" - ) -``` - -add after the `_minos_cmd` set: - -```cmake - # Static FFmpeg: nothing to bundle into the .app, no rpath handling. - # Shared flags must come AFTER --enable-shared below so they win. - set(_link_cmd --enable-static --disable-shared) -``` - -and add a matching `else ()` after the `if (IS_CROSS_COMPILE) ... endif()` block inside that `if (APPLE)`, so non-Apple Unix keeps shared: - -```cmake - else () - set(_link_cmd --enable-shared) - endif () -``` - -(If the existing `if (IS_CROSS_COMPILE)` block is the last thing inside `if (APPLE)`, the new `else ()` closes the `if (APPLE)` itself.) - -- [ ] **Step 2: Use the variable in CONFIGURE_COMMAND** - -In the `ExternalProject_Add(dep_FFMPEG ...)` configure command: - -```cmake - "--prefix=${DESTDIR}" - --enable-shared -``` - -becomes: - -```cmake - "--prefix=${DESTDIR}" - --enable-shared - ${_link_cmd} -``` - -Order matters: `--enable-shared` comes first, then `--enable-static --disable-shared` (APPLE) or `--enable-shared` (Linux) — the last flag wins in FFmpeg configure. - -- [ ] **Step 3: Rebuild the FFmpeg dep (slow — several minutes, run in background)** - -The changed CONFIGURE_COMMAND invalidates the ExternalProject stamp, so this re-configures and rebuilds FFmpeg: - -```bash -cmake --build deps/build/arm64 --target dep_FFMPEG -``` - -For a fully clean static-only check (removes the previous shared build tree, which can leave stale `.dylib` files behind in the in-source build): - -```bash -rm -rf deps/build/arm64/dep_FFMPEG-prefix -cmake --build deps/build/arm64 --target dep_FFMPEG -``` - -- [ ] **Step 4: Verify the artifacts** - -```bash -ls deps/build/arm64/dep_FFMPEG-prefix/src/dep_FFMPEG/libavcodec/*.a -ls deps/build/arm64/dep_FFMPEG-prefix/src/dep_FFMPEG/libavcodec/*.dylib 2>/dev/null || echo "OK: no dylibs" -``` - -Expected: `libavcodec.a` present, second command prints `OK: no dylibs`. Check `libavutil` and `libswscale` the same way. - -- [ ] **Step 5: Verify the app still links against the static libs** - -```bash -cmake --build build_arm64 --config RelWithDebInfo --target OrcaSlicer -otool -L build_arm64/src/RelWithDebInfo/OrcaSlicer.app/Contents/MacOS/OrcaSlicer | grep -i "libav" || echo "OK: no dynamic FFmpeg" -``` - -Expected: build succeeds, `OK: no dynamic FFmpeg`. - -- [ ] **Step 6: Commit** - -```bash -git add deps/FFMPEG/FFMPEG.cmake -git commit -m "build: build static-only FFmpeg for macOS deps" -``` - ---- - -### Task 3: Remove the old macOS player - -**Files:** -- Delete: `src/slic3r/GUI/wxMediaCtrl2.mm` -- Delete: `src/slic3r/GUI/BambuPlayer/BambuPlayer.h` (and the empty `BambuPlayer/` dir) -- Modify: `src/slic3r/GUI/wxMediaCtrl2.h` (remove the `#ifdef __WXMAC__` section, lines 22–60) - -**Interfaces:** -- Consumes: Task 1 (macOS no longer references `wxMediaCtrl2` — nothing includes `wxMediaCtrl2.h` on macOS anymore; `wxMediaCtrl2` is never instantiated on any platform). -- Produces: a clean tree where the old BambuPlayer-based player is gone from macOS. The `BambuPlayer` ObjC class itself remains inside the network plugin (external prebuilt binary) — only the GUI-side consumer is removed. - -- [ ] **Step 1: Delete the old player files** - -```bash -git rm src/slic3r/GUI/wxMediaCtrl2.mm -git rm src/slic3r/GUI/BambuPlayer/BambuPlayer.h -rmdir src/slic3r/GUI/BambuPlayer 2>/dev/null || true -``` - -- [ ] **Step 2: Strip the __WXMAC__ section from wxMediaCtrl2.h** - -In `src/slic3r/GUI/wxMediaCtrl2.h`, remove the entire macOS branch of the `#ifdef __WXMAC__` guard — from `#ifdef __WXMAC__` (line 22) through the closing `};` of the mac class (line 60), and the `#else` marker — leaving only the non-mac `class wxMediaCtrl2 : public wxMediaCtrl { ... };` definition followed by the final `#endif /* wxMediaCtrl2_h */`. The resulting file keeps its `#ifndef`/`#endif` include guard pair balanced. - -The file stays on disk because Win/Linux compile `wxMediaCtrl2.cpp`, which includes it. - -- [ ] **Step 3: Grep for leftover references** - -```bash -grep -rn "wxMediaCtrl2.mm\|BambuPlayer/BambuPlayer.h\|BambuPlayer" src/slic3r --include="*.cpp" --include="*.h" --include="*.mm" --include="*.txt" -``` - -Expected: no hits in `src/slic3r/GUI` (ignore `localization/i18n/list.txt:196`, which lists the Win/Linux `wxMediaCtrl2.cpp` and stays). - -- [ ] **Step 4: Rebuild the app** - -```bash -cmake --build build_arm64 --config RelWithDebInfo --target OrcaSlicer -``` - -Expected: configure + compile + link succeed with the deleted files gone. - -- [ ] **Step 5: Commit** - -```bash -git add -A src/slic3r/GUI -git commit -m "refactor: remove old BambuPlayer-based media player from macOS" -``` - ---- - -### Task 4: Runtime verification on hardware - -**Files:** none — manual verification. - -**Interfaces:** consumes all prior tasks. Final gate: the new player must actually stream on a Mac. - -- [ ] **Step 1: Launch the freshly built app** - -```bash -open build_arm64/src/RelWithDebInfo/OrcaSlicer.app -``` - -Expected: app launches normally; no crash in the network/device subsystem. - -- [ ] **Step 2: Load the network plugin and open the Device tab** - -Log in / ensure the network plugin (`libBambuSource.dylib`) loads, select a printer, open the Device tab (camera monitoring panel). - -Expected: the camera preview area shows the idle image initially (no crash — this exercises `wxMediaCtrl3::SetIdleImage` and the `wxImage` load path on macOS for the first time). - -- [ ] **Step 3: Start the stream and watch it render** - -Click play / wait for `MediaPlayCtrl` to start the stream. - -Expected: live video renders in the panel. Check the console/log output (`BOOST_LOG` goes to the terminal if run from it, or check the log file): -- `stat_log ...` lines appear (the `EVT_MEDIA_CTRL_STAT` path is live — proves the Bambu C API dlsym worked from `libBambuSource.dylib`); -- no repeated decode/error messages like `AVVideoDecoder: ...` or `can not find function ...` (proves `StaticBambuLib::get` resolved all Bambu functions); -- Stop/Play toggle works; idle image reappears on stop; -- window resize keeps aspect ratio (exercises `DoSetSize`/`adjust_frame_size`/`paintEvent`). - -- [ ] **Step 4: Confirm the old player is really gone** - -Expected: nothing in the logs references `BambuPlayer` (the ObjC class is no longer dlsym'd); the video path is entirely `wxMediaCtrl3` + `AVVideoDecoder`. - -If a printer is unavailable, at minimum verify Steps 1–2 (launch + idle image) and note in the PR that live-stream verification needs hardware. - -- [ ] **Step 5: Final review pass** - -```bash -git log --oneline -6 -git show --stat HEAD # and each of the three task commits -``` - -Expected: the last 4 commits are the design doc + the 3 implementation tasks (each task commit touches only its listed files). Review the diff for scope: no Linux/Windows changes beyond the two `EVT_MEDIA_CTRL_STAT` lines in Task 1, no `StatusPanel`/`MediaPlayCtrl` changes. diff --git a/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md b/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md deleted file mode 100644 index 3a4e873af6..0000000000 --- a/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md +++ /dev/null @@ -1,102 +0,0 @@ -# Move `wxInspectable` into `DPIAware` — Design Spec - -Date: 2026-07-23 -Branch: `dev/layout-inspector` - -## Overview - -Move the `wxInspector::wxInspectable` base class from individual leaf classes (`DPIDialog`, `MainFrame`) into the common `DPIAware

` template. This makes every DPIAware widget automatically visible in the inspector tree without requiring each subclass to opt in. - -## Motivation - -Currently, only `DPIDialog` and `MainFrame` explicitly inherit `wxInspectable`. `DPIFrame` (which `MainFrame` inherits from) does not — `MainFrame` adds it manually. This means: - -- Any `DPIAware` widget that isn't `DPIDialog` or `MainFrame` is invisible in the inspector tree -- `DPIFrame` subclasses (`BaseTransparentDPIFrame`, `ImageDPIFrame`, `ModelMallDialog`, `MediaFileFrame`, `SecondaryCheckDialog`, `PrintErrorDialog`, etc.) don't appear -- Adding a new DPIAware widget type requires remembering to also inherit `wxInspectable` - -Moving `wxInspectable` to `DPIAware` fixes this for all current and future DPIAware widgets at once. - -## Design - -### Change 1: `GUI_Utils.hpp` — `DPIAware

` - -Add `wxInspector::wxInspectable` as a second base class, and call `SetupInspectorAccelerator(this)` in the constructor (after `this->CenterOnParent()`): - -```cpp -// Before: -template class DPIAware : public P - -// After: -template class DPIAware : public P, public wxInspector::wxInspectable -``` - -Add in the constructor body (after `this->CenterOnParent()` at line 110): -```cpp -SetupInspectorAccelerator(this); -``` - -This gives every `DPIAware` widget both inspectability and the Ctrl+Shift+I keyboard shortcut automatically. `#include ` is already present in the file. - -### Change 2: `GUI_Utils.hpp` — `DPIDialog` - -Remove the now-redundant `wxInspector::wxInspectable` and the `SetupInspectorAccelerator(this)` call: - -```cpp -// Before: -class DPIDialog : public DPIAware, public wxInspector::wxInspectable -// ... - SetupInspectorAccelerator(this); - -// After: -class DPIDialog : public DPIAware -// (SetupInspectorAccelerator call removed — now done in DPIAware constructor) -``` - -`DPIDialog` gets `wxInspectable` and the accelerator through `DPIAware` now. - -### Change 3: `MainFrame.hpp` — `MainFrame` - -Remove the now-redundant `wxInspector::wxInspectable`: - -```cpp -// Before: -class MainFrame : public DPIFrame, public wxInspector::wxInspectable - -// After: -class MainFrame : public DPIFrame -``` - -`MainFrame` gets `wxInspectable` through `DPIFrame` → `DPIAware`. - -### Change 4: `MainFrame.cpp` — `MainFrame` constructor - -Remove the now-redundant `SetupInspectorAccelerator(this)` call (line 304). It will be called automatically by the `DPIAware` constructor. - -## Impact - -| Widget | Before | After | -|--------|--------|-------| -| `DPIDialog` subclasses (~80) | ✓ inspectable | ✓ inspectable (transitive) | -| `MainFrame` | ✓ inspectable | ✓ inspectable (transitive) | -| `DPIFrame` subclasses (8 others) | ✗ invisible | ✓ inspectable | -| Future `DPIAware` | ✗ invisible | ✓ inspectable | - -## Files Modified - -| File | Change | -|------|--------| -| `src/slic3r/GUI/GUI_Utils.hpp` | `DPIAware

` gains `wxInspector::wxInspectable` + `SetupInspectorAccelerator(this)` call; `DPIDialog` drops redundant `wxInspector::wxInspectable` and `SetupInspectorAccelerator(this)` | -| `src/slic3r/GUI/MainFrame.hpp` | `MainFrame` drops redundant `wxInspector::wxInspectable` | -| `src/slic3r/GUI/MainFrame.cpp` | Remove redundant `SetupInspectorAccelerator(this)` from MainFrame constructor | - -## Non-Goals - -- The `DPIAwarePlugin` detection logic (`dynamic_cast` / `dynamic_cast`) is unchanged -- No new DPI properties — this is purely about tree visibility and accelerator setup - -## Risk Assessment - -- **Multiple inheritance**: `DPIAware

` already has a vtable (virtual destructor). Adding `wxInspectable` adds a second base but no additional data members. The `wxInspector::wxInspectable` class is expected to be a lightweight marker interface. -- **Build**: No new includes needed; `` is already included in `GUI_Utils.hpp`. -- **Cross-platform**: The change is standard C++ multiple inheritance — no platform-specific concerns. diff --git a/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md b/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md deleted file mode 100644 index 5715635969..0000000000 --- a/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md +++ /dev/null @@ -1,244 +0,0 @@ -# wxInspector Plugins for OrcaSlicer Custom Controls — Design Spec - -Date: 2026-07-23 -Branch: `dev/layout-inspector` - -## Overview - -Create wxInspector plugins that expose OrcaSlicer's custom widget properties in the inspector's property grid. Without these plugins, the inspector shows only generic wxWidgets properties — missing all DPI-awareness data, custom styling, and Orca-specific control state. - -## Goals - -1. **DPIAware properties** — Inspect and update `scale_factor`, `prev_scale_factor`, `em_unit`, and `normal_font` on any DPIAware-derived widget -2. **Custom widget properties** — Surface Orca-specific properties on `Button`, `CheckBox`, `TextInput`, `SwitchButton`, `ProgressBar`, `Label`, and `LabeledStaticBox` -3. **Minimal source changes** — Only add trivial (one-line) getters/setters to existing classes; no architectural refactoring of Orca's widget hierarchy - -## Non-Goals - -- Custom inspector panels or AUI tabs (use the existing property grid and method invoker) -- Python-plugin integration (this is C++ wxInspector, not Orca's Python plugin system) -- Event logging customization (the built-in event logger already works) - -## Architecture - -### Two Plugins - -| Plugin | Class | Files | -|--------|-------|-------| -| DPIAware plugin | `DPIAwarePlugin` | `DPIAwarePlugin.hpp`, `DPIAwarePlugin.cpp` | -| Custom widgets plugin | `CustomWidgetsPlugin` | `CustomWidgetsPlugin.hpp`, `CustomWidgetsPlugin.cpp` | -| Registration helper | inline function | `Registration.hpp` | - -All files live under `src/slic3r/Utils/wxInspectorPlugins/`. - -### Plugin Detection Strategy - -**DPIAware plugin**: Uses `dynamic_cast` and `dynamic_cast` as detection gates. `DPIFrame` = `DPIAware`, `DPIDialog` = `DPIAware`. Since these are concrete typedefs, `dynamic_cast` works at runtime. This covers `MainFrame`, `SettingsDialog`, and all 8 calibration dialogs (which inherit `DPIDialog`). - -**Custom widgets plugin**: Gates broadly on `CLASSINFO(wxWindow)`, then uses per-type `dynamic_cast` inside `GetProperties` to check each Orca-specific type. Only matching types append properties. - -### Registration - -A single `RegisterOrcaInspectorPlugins()` inline function in `Registration.hpp` creates both plugins as function-local statics (matching the wxInspector built-in provider pattern) and registers them via `wxInspector::RegisterPlugin()`. - -Called once from `MainFrame::MainFrame()` after `SetupInspectorAccelerator(this)`. - -### Why Separate Plugins? - -- DPIAware is a C++ template concept (not a wxClassInfo-isKindOf check), so it needs its own detection logic -- Custom widgets use standard wxClassInfo-based detection, matching the built-in provider pattern -- Two focused files are easier to review and maintain than one monolithic plugin -- Compile-time failure isolation: if a widget header changes, only one plugin breaks - -## DPIAware Plugin — Property Specification - -### Source Changes (GUI_Utils.hpp) - -Four one-liner methods added to the `DPIAware

` template class (public section): - -```cpp -float scale_factor() const { return m_scale_factor; } // already exists -float prev_scale_factor() const { return m_prev_scale_factor; } // already exists -int em_unit() const { return m_em_unit; } // already exists -void set_scale_factor(float v) { m_scale_factor = v; } // NEW -void set_prev_scale_factor(float v) { m_prev_scale_factor = v; } // NEW -void set_em_unit(int v) { m_em_unit = v; } // NEW -bool force_rescale() const { return m_force_rescale; } // NEW -// m_normal_font getter already exists: normal_font() -``` - -### Detection - -```cpp -bool CanProvideProperties(wxClassInfo* info) override { - // Gated in GetProperties via dynamic_cast on the window itself - return info->IsKindOf(CLASSINFO(wxWindow)); -} -``` - -In `GetProperties`: -```cpp -auto* win = obj.AsWindow(); -bool isDPI = dynamic_cast(win) || dynamic_cast(win); -if (!isDPI) return props; -``` - -### Property Table (category: "DPI Scaling") - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Scale Factor | String (float) | Yes | `dpi->scale_factor()` | `dpi->set_scale_factor(v)` | -| Prev Scale Factor | String (float) | Yes | `dpi->prev_scale_factor()` | `dpi->set_prev_scale_factor(v)` | -| EM Unit | Integer | Yes | `dpi->em_unit()` | `dpi->set_em_unit(v)` | -| Normal Font | ReadOnly | No | `dpi->normal_font().GetNativeFontInfoDesc()` | — | -| Force Rescale | Boolean (ReadOnly) | No | `dpi->force_rescale()` | — | - -**Note on setters**: The setters simply store values. They do NOT trigger a widget rescale/layout. To see the effect of a changed scale factor, use the inspector's Methods panel to call `Layout()` or resize the window — which triggers the DPI_CHANGED event path naturally. - -## Custom Widgets Plugin — Property Specification - -All properties are appended to the built-in wxWindow properties. Each widget type is independently detected via `dynamic_cast`. - -### Detection gates (in `GetProperties`) - -```cpp -auto* win = obj.AsWindow(); -if (auto* btn = dynamic_cast(win)) { addButtonProperties(btn, props); } -if (auto* cb = dynamic_cast(win)) { addCheckBoxProperties(cb, props); } -if (auto* ti = dynamic_cast(win)) { addTextInputProperties(ti, props); } -if (auto* sb = dynamic_cast(win)) { addSwitchButtonProperties(sb, props); } -if (auto* pb = dynamic_cast(win)) { addProgressBarProperties(pb, props); } -if (auto* lbl = dynamic_cast(win)) { addLabelProperties(lbl, props); } -if (auto* lsb = dynamic_cast(win)) { addLabeledStaticBoxProperties(lsb, props); } -``` - -### Orca Button (`Button`) — category: "Orca Button" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Button Style | Choice | Yes | enum→string | string→enum | -| Button Type | Choice | Yes | enum→string | string→enum | -| Selected | Boolean | Yes | `m_selected` (needs getter) | `SetSelected(v)` | -| Active Icon | ReadOnly | No | icon name string | — | -| Inactive Icon | ReadOnly | No | icon name string | — | - -Choices for Button Style: `Regular`, `Confirm`, `Alert`, `Disabled` -Choices for Button Type: `Compact`, `Window`, `Choice`, `Parameter`, `Icon`, `Expanded` - -**Source changes needed**: Button's `m_selected` is private. Add one-liner getter: -```cpp -bool IsSelected() const { return m_selected; } -``` - -### Orca CheckBox (`CheckBox`) — category: "Orca CheckBox" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Half Checked | Boolean | Yes | `m_half_checked` (needs getter) | `SetHalfChecked(v)` | - -**Source changes needed**: `m_half_checked` is private. Add one-liner getter: -```cpp -bool IsHalfChecked() const { return m_half_checked; } -``` - -### Orca TextInput (`TextInput`) — category: "Orca TextInput" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Label | String | Yes | `GetLabel()` (inherited from wxWindow) | `SetLabel(v)` (exists) | -| Text Value | String | Yes | `GetTextCtrl()->GetValue()` (GetTextCtrl is public) | `GetTextCtrl()->SetValue(v)` | -| Corner Radius | Integer | Yes | `GetCornerRadius()` (NEW) | `SetCornerRadius(v)` (exists) | - -**Source changes needed**: Add one getter to `TextInput`: -```cpp -int GetCornerRadius() const { return static_cast(radius); } -``` -(`radius` is inherited from StaticBox. `SetCornerRadius(double)` already exists. `GetTextCtrl()` is already public.) - -### Orca SwitchButton (`SwitchButton`) — category: "Orca SwitchButton" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Value | Boolean | Yes | existing getter | existing setter | - -### Orca ProgressBar (`ProgressBar`) — category: "Orca ProgressBar" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Proportion | Float (0-1) | Yes | `pb->m_proportion` (public member) | `pb->m_proportion = v` | -| Show Number | Boolean | Yes | `pb->m_shownumber` (public member) | `pb->m_shownumber = v` | - -**No source changes needed**: `m_proportion` and `m_shownumber` are already public members. `SetValue(int)` and `SetProgress(int)` already exist as public methods. - -### Orca Label (`Label`) — category: "Orca Label" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Is Hyperlink | Boolean | No | existing flag check | — | -| Font Size | ReadOnly | No | `GetFont().GetPointSize()` | — | - -### LabeledStaticBox — category: "LabeledStaticBox" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Corner Radius | Integer | Yes | `GetCornerRadius()` (NEW) | `SetCornerRadius(v)` (exists) | -| Border Width | Integer | Yes | `GetBorderWidth()` (NEW) | `SetBorderWidth(v)` (exists) | -| Border Color | String (hex) | Yes | `GetBorderColor()` (NEW) | `SetBorderColor(v)` (exists) | -| Scale | Float (ReadOnly) | No | `m_scale` (protected, needs getter) | — | - -**Source changes needed**: Four one-liner getters added to `LabeledStaticBox`: -```cpp -int GetCornerRadius() const { return m_radius; } -int GetBorderWidth() const { return m_border_width; } -StateColor GetBorderColor() const { return border_color; } -float GetScale() const { return m_scale; } -``` - -## Files Modified (Existing Code) - -| File | Changes | -|------|---------| -| `src/slic3r/GUI/GUI_Utils.hpp` | +4 methods in `DPIAware

`: `set_scale_factor()`, `set_prev_scale_factor()`, `set_em_unit()`, `force_rescale()` | -| `src/slic3r/GUI/Widgets/LabeledStaticBox.hpp` | +4 getter declarations: `GetCornerRadius()`, `GetBorderWidth()`, `GetBorderColor()`, `GetScale()` | -| `src/slic3r/GUI/Widgets/LabeledStaticBox.cpp` | +4 getter implementations | -| `src/slic3r/GUI/Widgets/Button.hpp` | +1 getter: `IsSelected()` | -| `src/slic3r/GUI/Widgets/CheckBox.hpp` | +1 getter: `IsHalfChecked()` | -| `src/slic3r/GUI/Widgets/TextInput.hpp` | +1 getter: `GetCornerRadius()` | -| `src/slic3r/GUI/Widgets/ProgressBar.hpp` | None (public members are used directly) | -| `src/slic3r/GUI/MainFrame.cpp` | +1 `#include`, +1 call to `RegisterOrcaInspectorPlugins()` | -| `src/slic3r/CMakeLists.txt` | +4 entries in `SLIC3R_GUI_SOURCES` (the .cpp plugin files) | - -## Files Created - -``` -src/slic3r/Utils/wxInspectorPlugins/ -├── DPIAwarePlugin.hpp -├── DPIAwarePlugin.cpp -├── CustomWidgetsPlugin.hpp -├── CustomWidgetsPlugin.cpp -└── Registration.hpp -``` - -## Build & Linking - -The `wxInspector` dependency is already wired: -- `deps/wxInspector/wxInspector.cmake` fetches and builds wxInspector -- `src/CMakeLists.txt` lines 92-93 link `wxInspector::wxInspector` into `wxWidgets_LIBRARIES` -- The plugin files only need `#include ` and `#include ` — both available from the installed dependency - -No new CMake dependencies needed. Only the new source files need listing in `SLIC3R_GUI_SOURCES`. - -## Error Handling & Edge Cases - -- **Stale pointers**: Plugin lambdas capture raw pointers, regenerated on every `GetProperties` call (matching wxInspector's built-in provider pattern). Pointers live only until the next tree selection. -- **Widget destruction**: If a widget is destroyed while the inspector is showing its properties, `InspectableObject::IsValid()` returns false and properties are not displayed. The inspector won't show stale data. -- **Invalid property values**: Setters use `sscanf` / `ToLong` with validation (matching built-in patterns). Bogus input is rejected — setter returns `false`, property grid shows error state. -- **DPI drift**: Setting `scale_factor` without triggering rescale means displayed sizes don't match the new factor. This is acceptable — the inspector is a developer tool; operators know to call `Layout()` after making changes. -- **Missing widget type**: If a `dynamic_cast` fails for all types, only built-in wxWindow properties are shown. No crash, no error — just reduced info. - -## Future Work (Out of Scope) - -- **StateColor visualization**: `StateColor` is a multi-value type (maps bitmask states to colors). A full solution would need a custom property editor (e.g., a table showing each state→color pair). Keep it simple for now. -- **ScalableBitmap display**: Could show the bitmap as an inline thumbnail. Complex property editor work — deferred. -- **More widget types**: `SwitchBoard`, `MultiSwitchButton`, `StepCtrl`, `FanControl`, `DropDown`, `ComboBox`, `AMS*` widgets could all benefit. Add as needed. -- **Property refresh on tree selection**: Currently properties are static snapshots. A "refresh" button or auto-poll could keep values current for rapidly-changing widgets (progress bars, etc.). The built-in wxInspector already provides a tree-refresh button. diff --git a/docs/superpowers/specs/2026-08-14-ffmpeg-player-macos-design.md b/docs/superpowers/specs/2026-08-14-ffmpeg-player-macos-design.md deleted file mode 100644 index 812a7bf735..0000000000 --- a/docs/superpowers/specs/2026-08-14-ffmpeg-player-macos-design.md +++ /dev/null @@ -1,110 +0,0 @@ -# FFmpeg Media Player for macOS — Design - -Date: 2026-08-14 -Branch: `dev/ffmpeg-player-macos` - -## Problem - -The branch's new FFmpeg-based media player (`wxMediaCtrl3` + `AVVideoDecoder`) is used on -Windows and Linux, but macOS still runs the old player: `wxMediaCtrl2.mm`, an ObjC -`BambuPlayer` class dlsym'd from the Bambu network plugin that renders via CALayer. -On macOS, `wxMediaCtrl3` is currently aliased to `wxMediaCtrl2` and FFmpeg is not linked -into the app at all. - -Goal: make macOS use the same FFmpeg player as Windows/Linux, linking the **static** -FFmpeg libraries from the deps build instead of dynamic ones. - -## Current state (verified) - -- New player (Win/Linux): `GUI/wxMediaCtrl3.cpp` + `GUI/AVVideoDecoder.cpp`. Decodes with - FFmpeg (libavcodec/libswscale/libavutil), renders frames into `wxImage` (non-Windows) / - `wxBitmap` (Windows) drawn in a `paintEvent`, feeds via the `Bambu_*` C API - (`BambuTunnel.h`, `BAMBU_DYNAMIC`) dlsym'd from the network plugin through - `StaticBambuLib::get()` (`GUI/Printer/PrinterFileSystem.cpp`, compiled on all platforms). -- Old player (macOS): `GUI/wxMediaCtrl2.mm` uses the ObjC `BambuPlayer` class found via - `dlsym(module, "OBJC_CLASS_$_BambuPlayer")` in `libBambuSource.dylib`. -- The macOS network plugin `libBambuSource.dylib` already exports the full Bambu C API - (verified with `nm`), so the new player needs zero plugin changes. -- FFmpeg linking in `src/slic3r/CMakeLists.txt` is guarded by `if (NOT APPLE)` — - macOS currently does not link FFmpeg. -- `deps/FFMPEG/FFMPEG.cmake`: non-MSVC branch builds FFmpeg from source with - `--enable-shared`. The existing arm64 deps build on the dev machine happened to be - configured with both static and shared enabled, so `libavcodec.a` / `libswscale.a` / - `libavutil.a` are already present at - `deps/build/arm64/OrcaSlicer_dep/usr/local/lib/`. -- `EVT_MEDIA_CTRL_STAT` is `wxDEFINE_EVENT`'d in `wxMediaCtrl2.cpp` (Win/Linux) and - `wxMediaCtrl2.mm` (macOS); the define in `wxMediaCtrl3.cpp` is commented out. -- `wxMediaCtrl2` is never instantiated anywhere on any platform — dead code. -- `StatusPanel` already creates `wxMediaCtrl3`; `MediaPlayCtrl` only uses the - `wxMediaCtrl3` interface (`Load/Play/Stop/GetState/GetVideoSize/GetLastError/SetIdleImage`), - so no UI-side changes are needed. - -## Approach (approved) - -**Reuse the shared player on macOS.** Compile the existing `wxMediaCtrl3.cpp` + -`AVVideoDecoder.cpp` on macOS so all three platforms run one implementation. -Rendering uses the existing `wxImage` → `DrawBitmap` paint path, identical to Linux. -Known trade-off: frames are scaled to the widget's logical (1x) size, so Retina is -slightly soft compared to the old CALayer player. Accepted for now; a Retina-aware -scaling follow-up is possible later. - -Rejected alternative: a native CGImage/CALayer renderer for macOS — faster and -Retina-crisp, but adds a second render implementation to maintain. - -## Changes - -### 1. Enable the FFmpeg player on macOS (source) - -- `GUI/wxMediaCtrl3.h`: remove the `#ifdef __WXMAC__` branch (lines 18–22) that aliases - `wxMediaCtrl3` → `wxMediaCtrl2`. macOS then compiles the real `wxMediaCtrl3` class, - including the `BAMBU_DYNAMIC` BambuTunnel path used on Linux. -- Event symbol fix: move `wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent)` into - `wxMediaCtrl3.cpp` (uncomment the existing line) and remove it from - `wxMediaCtrl2.cpp`. One definition total in the lib; all three platforms resolve it. - -### 2. Static FFmpeg linking (deps + app) - -- `deps/FFMPEG/FFMPEG.cmake`: in the non-MSVC branch, pass - `--disable-shared --enable-static` when `APPLE`. Linux keeps `--enable-shared`; - Windows keeps its prebuilt shared DLL zips. Fresh macOS deps builds install only - `libavcodec.a` / `libswscale.a` / `libavutil.a` — no dylibs to bundle, no - rpath/install_name handling. (The existing local arm64 deps build already contains - the `.a` files, so no deps rebuild is strictly needed to try the change locally, - but a fresh CI deps build must produce them.) -- `src/slic3r/CMakeLists.txt`: - - APPLE branch of `SLIC3R_GUI_SOURCES`: add `GUI/wxMediaCtrl3.cpp`, - `GUI/wxMediaCtrl3.h`, `GUI/AVVideoDecoder.cpp`, `GUI/AVVideoDecoder.hpp`; - remove `GUI/wxMediaCtrl2.mm` and `GUI/wxMediaCtrl2.h` (the `.h` stays on - disk for the Win/Linux build of `wxMediaCtrl2.cpp`, but nothing on macOS - includes it after this change). - - Add an APPLE mirror of the `NOT APPLE` FFmpeg block: `find_library` for - `libavcodec.a`, `libswscale.a`, `libavutil.a` under `${CMAKE_PREFIX_PATH}/lib` - with `NO_DEFAULT_PATH`, link them (order avcodec → swscale → avutil), and add - `${CMAKE_PREFIX_PATH}/include` as a SYSTEM include directory. Deps are built with - `--disable-zlib` and no external codecs, so the three static libs link cleanly. - -### 3. Remove the old player - -- Delete `GUI/wxMediaCtrl2.mm` and `GUI/BambuPlayer/BambuPlayer.h` (header used only - by the `.mm`; the real `BambuPlayer` lives inside the network plugin). -- Remove the now-dead `__WXMAC__` section of `GUI/wxMediaCtrl2.h`. -- `wxMediaCtrl2.cpp` (Win/Linux) stays in the build as-is (dead but harmless; out of - scope to remove on this branch). - -### 4. Verification - -- Build on macOS: `cmake --build build_arm64` (or `build/arm64`). -- Confirm no dynamic FFmpeg dependency: `otool -L` on the app binary shows no `libav*` - dylib references. -- Runtime: with the network plugin loaded, the Device tab camera preview streams via - the FFmpeg player (check the device page / `MediaPlayCtrl`). -- macOS `ctest` still passes — static linking means no test-executable `.so` copying - hacks (unlike the Linux shared-lib setup). - -## Out of scope - -- Linux (shared libs, AppImage/flatpak bundling) and Windows (prebuilt DLL zips) - keep their current FFmpeg setup. -- Retina-aware frame scaling / native CGImage rendering (follow-up if visual quality - is judged insufficient). -- Audio streaming (neither player plays audio in this UI path). From 42d75e119ad8bbc685e4f807efedffcf9b4ca9f9 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 8 Sep 2026 14:45:37 +0800 Subject: [PATCH 138/208] update .gitignore to ignore docs/superpowers --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d994d922c1..a2a1520fd5 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ __pycache__/ *.pyc *.opc /.test/ +docs/superpowers/ \ No newline at end of file From fe29eadc34f702f6375ace6e71d90f6be9634eab Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 8 Sep 2026 14:59:45 +0800 Subject: [PATCH 139/208] docs: add documentation guidelines for subsystem design and updates --- AGENTS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 236aa54c05..4be195b40d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,13 @@ ctest --test-dir ./tests/libslic3r # individual suite ctest --test-dir ./tests/fff_print ``` +## Documentation + +- Docs live in `docs/`; the high-level design of a subsystem goes in `docs/HLSD/.md`. +- Describe the design as it stands — what the subsystem does, why it exists, and the constraints that shape it. Not the route that got there: no phases, task lists, status markers, or "before/after this PR" framing. +- Planning and investigation output (brainstorms, superpowers design and plan docs) stays in `docs/superpowers/`, which is gitignored. Never commit it. +- Write a doc only when the design is not evident from the code, and when a change invalidates an existing one, update it in the same PR. + ## Code Style - C++17, selective C++20. PascalCase classes, snake_case functions/variables From 8e064659ad1992d8a83227a6240b006f7165a752 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Tue, 8 Sep 2026 16:33:12 +0800 Subject: [PATCH 140/208] Fix Non-Deterministic Slicing - Order Per-Layer Intersection Lines Canonically (#15563) Fix nondeterministic slicing: order per-layer intersection lines canonically Facet processing in slice_make_lines() is parallel, so the per-layer line order depended on thread scheduling. make_loops() consumes that order for island order and loop start vertices, so the same model could slice to different G-code run to run. Sort each layer's lines by a topology-based key. edge_type and flags are appended to the key purely to break ties: two lines can share every id and endpoint (a Horizontal facet can emit such a pair) and std::sort is not stable, so without them that pair's order would stay thread-dependent. --- src/libslic3r/TriangleMeshSlicer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 417ca354d3..4ff18165cb 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -607,6 +608,17 @@ static inline std::vector slice_make_lines( } } ); + // Facet processing above is parallel, so per-layer line order depends on thread scheduling, + // and make_loops() derives island order and loop start vertices from it. Sort canonically; + // edge_type and flags only break ties, std::sort being unstable. + tbb::parallel_for(tbb::blocked_range(0, lines.size()), + [&lines](const tbb::blocked_range &range) { + for (size_t i = range.begin(); i < range.end(); ++ i) + std::sort(lines[i].begin(), lines[i].end(), [](const IntersectionLine &l, const IntersectionLine &r) { + return std::make_tuple(l.edge_a_id, l.edge_b_id, l.a_id, l.b_id, l.a.x(), l.a.y(), l.b.x(), l.b.y(), l.edge_type, l.flags) < + std::make_tuple(r.edge_a_id, r.edge_b_id, r.a_id, r.b_id, r.a.x(), r.a.y(), r.b.x(), r.b.y(), r.edge_type, r.flags); + }); + }); return lines; } From 58bf267fdd751ca73d8808f68e34742fae41bc84 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Tue, 8 Sep 2026 16:57:33 +0800 Subject: [PATCH 141/208] Scale Min Junction Width to Prevent Fuzzy Skin From Failing Slice (#15566) * Fix fuzzy skin failing the slice: the minimum junction width was unscaled * Unit Tests For Fuzzy Fix * Cover ridged multifractal noise in the fuzzy skin width floor test Its output is not bounded to [-1, 1], so it scales past the configured thickness and drives the junction width negative. The floor has to hold for any noise value, not just an in-range one. --- src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp | 17 +++-- src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp | 2 +- tests/libslic3r/test_arachne_walls.cpp | 70 +++++++++++++++++++ 3 files changed, 81 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp index 97f8f743fb..e5fbeb5cdb 100644 --- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp @@ -342,7 +342,7 @@ void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkin } // Thanks Cura developers for this function. -void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg, bool closed) +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, coordf_t layer_height, const FuzzySkinConfig& cfg, bool closed) { if (cfg.noise_type == NoiseType::Ripple) { @@ -356,7 +356,9 @@ void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value const double range_random_point_dist = cfg.point_distance / 2.; - const double min_extrusion_width = 0.01; // workaround for many print options. Need overwrite formula with the layer height parameter. The width must more than >>> layer_height * (1 - 0.25 * PI) * 1.05 <<< (last num is the coeff of overlay error case) + // ExtrusionJunction::w is a scaled coord_t, so this floor must be scaled too. + // Flow::rounded_rectangle_extrusion_spacing() requires width > height * (1 - 0.25 * PI); keep 5% above it. + const double min_extrusion_width = scaled(layer_height * (1. - 0.25 * M_PI) * 1.05); double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point auto* p0 = &ext_lines.front(); @@ -685,12 +687,13 @@ Polygon apply_fuzzy_skin(const Polygon& polygon, const PerimeterGenerator& perim void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerator& perimeter_generator, const bool is_contour, const bool closed) { const auto slice_z = perimeter_generator.slice_z; + const auto layer_height = perimeter_generator.layer_height; const auto& regions = perimeter_generator.regions_by_fuzzify; if (regions.size() == 1) { // optimization const auto& config = regions.begin()->first; const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion->junctions, slice_z, config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, config, closed); } else { // Merge regions that produce identical fuzzy effects (differ only in type). // When the style (e.g. External) and a painted region (All) both fuzzify this loop @@ -701,7 +704,7 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato // Fast path: single merged region — apply directly without splitting if (merged_regions.size() == 1 && merged_regions.front().expolygons.empty()) { - fuzzy_extrusion_line(extrusion->junctions, slice_z, *merged_regions.front().config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, *merged_regions.front().config, closed); return; } @@ -761,7 +764,7 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion->junctions, slice_z, *r.config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, *r.config, closed); continue; } else { const auto current_ext = extrusion->junctions; @@ -769,12 +772,12 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato segment.reserve(current_ext.size()); extrusion->junctions.clear(); - const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { + const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z, layer_height]() { // Orca: non fuzzy points to isolate fuzzy region const auto front = segment.front(); const auto back = segment.back(); - fuzzy_extrusion_line(segment, slice_z, *r.config, false); + fuzzy_extrusion_line(segment, slice_z, layer_height, *r.config, false); // Orca: only add non fuzzy point if it's not in the extrusion closing point. if (!extrusion->junctions.empty() && extrusion->junctions.front().p != front.p) { extrusion->junctions.push_back(front); diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp index 51d503a3c9..ab0c491b38 100644 --- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp @@ -9,7 +9,7 @@ namespace Slic3r::Feature::FuzzySkin { void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg); -void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg, bool closed = true); +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, coordf_t layer_height, const FuzzySkinConfig& cfg, bool closed = true); void group_region_by_fuzzify(PerimeterGenerator& g); diff --git a/tests/libslic3r/test_arachne_walls.cpp b/tests/libslic3r/test_arachne_walls.cpp index 4ca18400af..2b6580ed11 100644 --- a/tests/libslic3r/test_arachne_walls.cpp +++ b/tests/libslic3r/test_arachne_walls.cpp @@ -22,6 +22,8 @@ #include "libslic3r/Arachne/utils/ExtrusionLine.hpp" #include "libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp" #include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" +#include "libslic3r/Feature/FuzzySkin/FuzzySkin.hpp" +#include "libslic3r/Flow.hpp" #include "libslic3r/Polygon.hpp" #include "libslic3r/ExPolygon.hpp" #include "libslic3r/ClipperUtils.hpp" @@ -309,3 +311,71 @@ TEST_CASE("Beading interpolation tolerates a thicker side with fewer insets", "[ CHECK(result.bead_widths[i] == expected.bead_widths[i]); } } + +namespace { + +// Closed 20 mm square loop at a uniform width. +Arachne::ExtrusionJunctions square_loop(coord_t width) +{ + const coord_t s = scaled(20.); + return {{Point(0, 0), width, 0}, {Point(s, 0), width, 0}, {Point(s, s), width, 0}, {Point(0, s), width, 0}, {Point(0, 0), width, 0}}; +} + +FuzzySkinConfig thick_fuzzy_config(FuzzySkinMode mode, NoiseType noise_type, double thickness_mm) +{ + FuzzySkinConfig cfg{}; + cfg.type = FuzzySkinType::All; + cfg.thickness = scaled(thickness_mm); + cfg.point_distance = scaled(0.3); + cfg.fuzzy_first_layer = true; + cfg.noise_type = noise_type; + cfg.noise_scale = 1.0; + cfg.noise_octaves = 4; + cfg.noise_persistence = 0.5; + cfg.mode = mode; + cfg.layer_id = 5; + return cfg; +} + +} // namespace + +// Extrusion and Combined mode add noise to each junction's width. A junction narrower than +// height * (1 - PI/4) makes Flow::rounded_rectangle_extrusion_spacing() throw and fails the slice. +// The fuzz thickness is 3x the line width so the clamp is hit on every run regardless of RNG seed. +// Ridged multifractal is covered because its output is not bounded to [-1, 1], so it scales past +// the configured thickness; the floor has to hold for any noise value, not just an in-range one. +TEST_CASE("Fuzzy skin extrusion width is floored at the minimum the flow accepts", "[Arachne][FuzzySkin]") { + using namespace Slic3r::Feature::FuzzySkin; + + const double layer_height = GENERATE(0.08, 0.2, 0.28); + const auto mode = GENERATE(FuzzySkinMode::Extrusion, FuzzySkinMode::Combined); + const auto noise_type = GENERATE(NoiseType::Classic, NoiseType::Perlin, NoiseType::Billow, NoiseType::RidgedMulti, NoiseType::Voronoi); + CAPTURE(layer_height, int(mode), int(noise_type)); + + const double line_width_mm = 0.42; + auto loop = square_loop(scaled(line_width_mm)); + fuzzy_extrusion_line(loop, /*slice_z*/ 1.0, layer_height, thick_fuzzy_config(mode, noise_type, 3 * line_width_mm)); + + REQUIRE(loop.size() > 100); + + const auto narrowest = std::min_element(loop.begin(), loop.end(), [](const auto& a, const auto& b) { return a.w < b.w; }); + const double narrowest_mm = unscaled(narrowest->w); + const double floor_mm = layer_height * (1. - 0.25 * PI); + CAPTURE(narrowest_mm, floor_mm); + + CHECK(narrowest_mm < line_width_mm); // the clamp was exercised + CHECK(narrowest_mm > floor_mm); + CHECK_NOTHROW(Flow::rounded_rectangle_extrusion_spacing(float(narrowest_mm), float(layer_height))); +} + +// Displacement mode only moves points; widths must pass through unchanged. +TEST_CASE("Fuzzy skin displacement mode leaves widths untouched", "[Arachne][FuzzySkin]") { + using namespace Slic3r::Feature::FuzzySkin; + + const coord_t width = scaled(0.42); + auto loop = square_loop(width); + fuzzy_extrusion_line(loop, /*slice_z*/ 1.0, /*layer_height*/ 0.2, thick_fuzzy_config(FuzzySkinMode::Displacement, NoiseType::Classic, 1.26)); + + REQUIRE(loop.size() > 100); + CHECK(std::all_of(loop.begin(), loop.end(), [width](const auto& j) { return j.w == width; })); +} From 0f5891f25d76646a8689da5c65ff5b2c3a81a310 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Tue, 8 Sep 2026 16:36:48 -0500 Subject: [PATCH 142/208] build: clear 107 warnings - dead private fields (#15574) --- src/libslic3r/FlushVolCalc.cpp | 4 ++-- src/libslic3r/FlushVolCalc.hpp | 3 +-- src/libslic3r/GCode/FanMover.hpp | 3 ++- src/libslic3r/Support/SupportMaterial.cpp | 3 +-- src/libslic3r/Support/SupportMaterial.hpp | 1 - src/libslic3r/Support/TreeSupport.hpp | 1 - src/slic3r/GUI/AMSDryControl.hpp | 6 ------ src/slic3r/GUI/AmsMappingPopup.hpp | 1 - src/slic3r/GUI/BBLTopbar.hpp | 1 - src/slic3r/GUI/BindDialog.hpp | 9 --------- src/slic3r/GUI/CalibrationPanel.hpp | 4 ---- src/slic3r/GUI/CameraPopup.hpp | 2 ++ src/slic3r/GUI/CreatePresetsDialog.hpp | 1 - src/slic3r/GUI/DailyTips.cpp | 1 - src/slic3r/GUI/DailyTips.hpp | 1 - src/slic3r/GUI/DeviceCore/DevConfig.h | 2 +- src/slic3r/GUI/DeviceCore/DevExtensionTool.h | 2 +- src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h | 2 +- src/slic3r/GUI/DeviceCore/DevHMS.h | 2 +- src/slic3r/GUI/DeviceCore/DevInfo.h | 2 +- src/slic3r/GUI/DeviceCore/DevStatus.h | 2 +- src/slic3r/GUI/DeviceCore/DevStorage.h | 2 +- src/slic3r/GUI/GUI_ObjectTable.hpp | 7 ------- src/slic3r/GUI/Gizmos/GLGizmoCut.hpp | 1 - src/slic3r/GUI/HMSPanel.hpp | 1 - src/slic3r/GUI/IMSlider.hpp | 1 - src/slic3r/GUI/Jobs/BindJob.hpp | 1 - src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp | 1 - src/slic3r/GUI/MainFrame.cpp | 3 +-- src/slic3r/GUI/MainFrame.hpp | 1 - src/slic3r/GUI/MixedFilamentDialog.cpp | 2 -- src/slic3r/GUI/MixedFilamentDialog.hpp | 1 - src/slic3r/GUI/Monitor.hpp | 3 --- src/slic3r/GUI/MsgDialog.hpp | 2 -- src/slic3r/GUI/MultiMachineManagerPage.hpp | 3 --- src/slic3r/GUI/MultiMachinePage.hpp | 1 - src/slic3r/GUI/MultiTaskManagerPage.hpp | 6 ------ src/slic3r/GUI/ObjColorDialog.cpp | 2 -- src/slic3r/GUI/ObjColorDialog.hpp | 3 --- src/slic3r/GUI/PluginPickerDialog.cpp | 2 -- src/slic3r/GUI/PluginPickerDialog.hpp | 1 - src/slic3r/GUI/SelectMachine.hpp | 1 - src/slic3r/GUI/SelectMachinePop.hpp | 2 -- src/slic3r/GUI/SendToPrinter.hpp | 7 ------- src/slic3r/GUI/SliceInfoPanel.hpp | 1 - src/slic3r/GUI/SyncAmsInfoDialog.cpp | 1 - src/slic3r/GUI/SyncAmsInfoDialog.hpp | 4 ---- src/slic3r/GUI/Tab.hpp | 1 - src/slic3r/GUI/TextureImportDialog.cpp | 2 -- src/slic3r/GUI/UpdateDialogs.hpp | 1 - src/slic3r/GUI/WebViewDialog.hpp | 8 +++++--- src/slic3r/GUI/Widgets/AMSItem.hpp | 10 ---------- src/slic3r/GUI/Widgets/FanControl.hpp | 1 - src/slic3r/GUI/Widgets/MultiNozzleSync.hpp | 2 -- 54 files changed, 21 insertions(+), 117 deletions(-) diff --git a/src/libslic3r/FlushVolCalc.cpp b/src/libslic3r/FlushVolCalc.cpp index 9bdbc1737d..635328f5ab 100644 --- a/src/libslic3r/FlushVolCalc.cpp +++ b/src/libslic3r/FlushVolCalc.cpp @@ -40,8 +40,8 @@ static float DeltaHS_BBS(float h1, float s1, float v1, float h2, float s2, float return std::min(1.2f, dxy); } -FlushVolCalculator::FlushVolCalculator(int min, int max, int flush_dataset, float multiplier) - :m_min_flush_vol(min), m_max_flush_vol(max), m_multiplier(multiplier), m_flush_dataset(flush_dataset) +FlushVolCalculator::FlushVolCalculator(int min, int max, int flush_dataset) + :m_min_flush_vol(min), m_max_flush_vol(max), m_flush_dataset(flush_dataset) { } diff --git a/src/libslic3r/FlushVolCalc.hpp b/src/libslic3r/FlushVolCalc.hpp index 46d04d13ff..73baca5a89 100644 --- a/src/libslic3r/FlushVolCalc.hpp +++ b/src/libslic3r/FlushVolCalc.hpp @@ -15,7 +15,7 @@ extern const int g_max_flush_volume; class FlushVolCalculator { public: - FlushVolCalculator(int min, int max, int flush_dataset, float multiplier = 1.0f); + FlushVolCalculator(int min, int max, int flush_dataset); ~FlushVolCalculator() { } @@ -32,7 +32,6 @@ public: private: int m_min_flush_vol; int m_max_flush_vol; - float m_multiplier; int m_flush_dataset; }; diff --git a/src/libslic3r/GCode/FanMover.hpp b/src/libslic3r/GCode/FanMover.hpp index 3f803fbd23..17addd855c 100644 --- a/src/libslic3r/GCode/FanMover.hpp +++ b/src/libslic3r/GCode/FanMover.hpp @@ -32,7 +32,8 @@ class FanMover private: const std::regex regex_fan_speed; const float nb_seconds_delay; - const bool with_D_option; + // Set from fan_speedup_time at the call site, but nothing here reads it. + [[maybe_unused]] const bool with_D_option; const bool relative_e; const bool only_overhangs; const float kickstart; diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index 12ac275592..a955eb5ca7 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -333,8 +333,7 @@ PrintObjectSupportMaterial::PrintObjectSupportMaterial(const PrintObject *object m_print_config (&object->print()->config()), m_object_config (&object->config()), m_slicing_params (slicing_params), - m_support_params (*object), - m_object (object) + m_support_params (*object) { } diff --git a/src/libslic3r/Support/SupportMaterial.hpp b/src/libslic3r/Support/SupportMaterial.hpp index 50b8256c4a..6d5355dab1 100644 --- a/src/libslic3r/Support/SupportMaterial.hpp +++ b/src/libslic3r/Support/SupportMaterial.hpp @@ -86,7 +86,6 @@ private: */ // Following objects are not owned by SupportMaterial class. - const PrintObject *m_object; const PrintConfig *m_print_config; const PrintObjectConfig *m_object_config; // Pre-calculated parameters shared between the object slicer and the support generator, diff --git a/src/libslic3r/Support/TreeSupport.hpp b/src/libslic3r/Support/TreeSupport.hpp index 61e030ef86..bd5a154e26 100644 --- a/src/libslic3r/Support/TreeSupport.hpp +++ b/src/libslic3r/Support/TreeSupport.hpp @@ -432,7 +432,6 @@ private: size_t m_highest_overhang_layer = 0; std::vector> m_spanning_trees; std::vector< std::unordered_map> m_mst_line_x_layer_contour_caches; - float DO_NOT_MOVER_UNDER_MM = 0.0; coordf_t base_radius = 0.0; const coordf_t MAX_BRANCH_RADIUS = 10.0; const coordf_t MIN_BRANCH_RADIUS = 0.4; diff --git a/src/slic3r/GUI/AMSDryControl.hpp b/src/slic3r/GUI/AMSDryControl.hpp index 46699650d6..223fe137e2 100644 --- a/src/slic3r/GUI/AMSDryControl.hpp +++ b/src/slic3r/GUI/AMSDryControl.hpp @@ -97,12 +97,6 @@ private: wxSimplebook* m_main_simplebook{nullptr}; wxPanel* m_original_page{nullptr}; - wxWindow* m_amswin{nullptr}; - wxBoxSizer* m_sizer_ams_items{nullptr}; - wxScrolledWindow* m_panel_prv_left {nullptr}; - wxScrolledWindow* m_panel_prv_right{nullptr}; - wxBoxSizer* m_sizer_prv_left{nullptr}; - wxBoxSizer* m_sizer_prv_right{nullptr}; // left panel related members ScalableBitmap m_humidity_image; diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index fc3f89fa69..21a3e38080 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -457,7 +457,6 @@ private: ScalableBitmap close_img; wxStaticBitmap* curr_humidity_img; - wxStaticBitmap* m_img; Label* m_staticText;; Label* m_staticText_note; diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index e60a95f64f..2745490d00 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -93,7 +93,6 @@ private: CenteredTitle* m_title_ctrl { nullptr }; wxString m_titleText; - wxAuiToolBarItem* m_model_store_item; //wxAuiToolBarItem *m_publish_item; wxAuiToolBarItem* m_undo_item; diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp index b809bc523b..8d21c1be5e 100644 --- a/src/slic3r/GUI/BindDialog.hpp +++ b/src/slic3r/GUI/BindDialog.hpp @@ -65,18 +65,10 @@ private: wxPanel* request_bind_panel; wxPanel* binding_panel; - wxScrolledWindow* m_sw_bind_failed_info; - Label* m_bind_failed_info; - Label* m_st_txt_error_code{ nullptr }; - Label* m_st_txt_error_desc{ nullptr }; - Label* m_st_txt_extra_info{ nullptr }; - HyperLink* m_link_network_state{ nullptr }; wxString m_result_info; wxString m_result_extra; wxString m_ping_code_wiki; - bool m_show_error_info_state = true; - int m_result_code; std::shared_ptr m_status_bar; public: @@ -110,7 +102,6 @@ private: wxBitmap m_bitmap_show_error_close; wxBitmap m_bitmap_show_error_open; wxScrolledWindow* m_sw_bind_failed_info; - Label* m_bind_failed_info; Label* m_st_txt_error_code{ nullptr }; Label* m_st_txt_error_desc{ nullptr }; Label* m_st_txt_extra_info{ nullptr }; diff --git a/src/slic3r/GUI/CalibrationPanel.hpp b/src/slic3r/GUI/CalibrationPanel.hpp index eafb380c79..1f6b097af9 100644 --- a/src/slic3r/GUI/CalibrationPanel.hpp +++ b/src/slic3r/GUI/CalibrationPanel.hpp @@ -70,11 +70,7 @@ public: private: int m_my_devices_count{ 0 }; - int m_other_devices_count{ 0 }; bool m_dismiss{ false }; - wxWindow* m_placeholder_panel { nullptr }; - wxWindow* m_panel_body{ nullptr }; - wxBoxSizer* m_sizer_body{ nullptr }; wxBoxSizer* m_sizer_my_devices{ nullptr }; wxScrolledWindow* m_scrolledWindow{ nullptr }; wxTimer* m_refresh_timer{ nullptr }; diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index dbdb81a9cb..f45ebb6e42 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -72,8 +72,10 @@ private: SwitchButton* m_switch_recording; wxStaticText* m_text_vcamera; SwitchButton* m_switch_vcamera; +#if !BBL_RELEASE_TO_PUBLIC wxStaticText* m_text_liveview_retry; SwitchButton* m_switch_liveview_retry; +#endif //BBL_RELEASE_TO_PUBLIC wxStaticText* m_custom_camera_hint; TextInput* m_custom_camera_input; Button* m_custom_camera_input_confirm; diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 701779b1bf..07811aa144 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -74,7 +74,6 @@ private: std::unordered_set m_system_filament_types_set; std::set m_visible_printers; CreateType m_create_type; - Button * m_button_cancel = nullptr; ComboBox * m_filament_vendor_combobox = nullptr; ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; ComboBox * m_filament_type_combobox = nullptr; diff --git a/src/slic3r/GUI/DailyTips.cpp b/src/slic3r/GUI/DailyTips.cpp index f585425130..d2f758bf5f 100644 --- a/src/slic3r/GUI/DailyTips.cpp +++ b/src/slic3r/GUI/DailyTips.cpp @@ -245,7 +245,6 @@ DailyTipsPanel::DailyTipsPanel(bool can_expand, DailyTipsLayout layout) m_width(0), m_height(0), m_can_expand(can_expand), - m_layout(layout), m_uid(DailyTipsPanel::uid++), m_dailytips_renderer(std::make_unique(layout)) { diff --git a/src/slic3r/GUI/DailyTips.hpp b/src/slic3r/GUI/DailyTips.hpp index 508a8ad7e9..537fed4952 100644 --- a/src/slic3r/GUI/DailyTips.hpp +++ b/src/slic3r/GUI/DailyTips.hpp @@ -51,7 +51,6 @@ private: int m_uid; bool m_first_enter{ false }; bool m_is_dark{ false }; - DailyTipsLayout m_layout{ DailyTipsLayout::Vertical }; float m_fade_opacity{ 1.0f }; }; diff --git a/src/slic3r/GUI/DeviceCore/DevConfig.h b/src/slic3r/GUI/DeviceCore/DevConfig.h index 449b5a7253..b0cdcb936e 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfig.h +++ b/src/slic3r/GUI/DeviceCore/DevConfig.h @@ -54,7 +54,7 @@ public: void ParseCalibrationConfig(const json& print_json); //cali private: - MachineObject* m_obj; + [[maybe_unused]] MachineObject* m_obj; /*configure vals*/ // chamber diff --git a/src/slic3r/GUI/DeviceCore/DevExtensionTool.h b/src/slic3r/GUI/DeviceCore/DevExtensionTool.h index 02f0b6a213..c3b9c5b0b7 100644 --- a/src/slic3r/GUI/DeviceCore/DevExtensionTool.h +++ b/src/slic3r/GUI/DeviceCore/DevExtensionTool.h @@ -31,7 +31,7 @@ protected: DevExtensionTool(MachineObject* obj); private: - MachineObject* m_owner = nullptr; + [[maybe_unused]] MachineObject* m_owner = nullptr; enum MountState { diff --git a/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h b/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h index efdad308b2..ca59b9fd3e 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h +++ b/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h @@ -28,7 +28,7 @@ public: void SetAutoRefillEnabled(bool enable) { m_enable_auto_refill = enable; } private: - DevFilaSystem* m_owner = nullptr; + [[maybe_unused]] DevFilaSystem* m_owner = nullptr; std::optional m_enable_detect_on_insert = false; bool m_enable_detect_on_powerup = false; diff --git a/src/slic3r/GUI/DeviceCore/DevHMS.h b/src/slic3r/GUI/DeviceCore/DevHMS.h index 205cad77b3..f72d899187 100644 --- a/src/slic3r/GUI/DeviceCore/DevHMS.h +++ b/src/slic3r/GUI/DeviceCore/DevHMS.h @@ -21,7 +21,7 @@ public: const std::vector& GetHMSItems() const { return m_hms_list; }; private: - MachineObject* m_object = nullptr; + [[maybe_unused]] MachineObject* m_object = nullptr; // all hms for this machine std::vector m_hms_list; diff --git a/src/slic3r/GUI/DeviceCore/DevInfo.h b/src/slic3r/GUI/DeviceCore/DevInfo.h index 66224888e6..259c277e46 100644 --- a/src/slic3r/GUI/DeviceCore/DevInfo.h +++ b/src/slic3r/GUI/DeviceCore/DevInfo.h @@ -34,7 +34,7 @@ private: //std::string m_connect_type; //std::string m_bind_state; - MachineObject* m_owner = nullptr; + [[maybe_unused]] MachineObject* m_owner = nullptr; }; } // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceCore/DevStatus.h b/src/slic3r/GUI/DeviceCore/DevStatus.h index 45f76d2239..4ed0d5c416 100644 --- a/src/slic3r/GUI/DeviceCore/DevStatus.h +++ b/src/slic3r/GUI/DeviceCore/DevStatus.h @@ -36,7 +36,7 @@ public: void ParseStatus(const nlohmann::json& print_jj); private: - MachineObject *m_owner = nullptr; + [[maybe_unused]] MachineObject *m_owner = nullptr; std::optional m_job_state; // could be nullopt for some old firmware }; diff --git a/src/slic3r/GUI/DeviceCore/DevStorage.h b/src/slic3r/GUI/DeviceCore/DevStorage.h index 537665f778..8ac53b7fea 100644 --- a/src/slic3r/GUI/DeviceCore/DevStorage.h +++ b/src/slic3r/GUI/DeviceCore/DevStorage.h @@ -31,7 +31,7 @@ public: bool is_timelapse_storage_low(const std::string& storage) const; private: - MachineObject *m_owner; + [[maybe_unused]] MachineObject *m_owner; SdcardState m_sdcard_state { NO_SDCARD }; // timelapse storage space info (from device push cam data) int tl_internal_free_kb{-1}; diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index a5a0059e1b..0fbd432e02 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -591,16 +591,11 @@ private: wxColour m_hover_colour; wxBoxSizer* m_top_sizer{nullptr}; wxBoxSizer* m_page_sizer{nullptr}; - wxBoxSizer* m_page_top_sizer{nullptr}; - wxTextCtrl* m_search_line{ nullptr }; ObjectGrid* m_object_grid{nullptr}; ObjectGridTable* m_object_grid_table{nullptr}; - wxStaticText* m_page_text{nullptr}; - ScalableButton* m_global_reset{nullptr}; wxScrolledWindow* m_side_window{nullptr}; ObjectTableSettings* m_object_settings{ nullptr }; Model* m_model{nullptr}; - ModelConfig* m_config {nullptr}; Plater* m_plater{nullptr}; int m_cur_row { -1 }; @@ -625,8 +620,6 @@ class ObjectTableDialog : public GUI::DPIDialog const int POPUP_HEIGHT = FromDIP(1024); //wxPanel* m_panel{ nullptr }; - wxBoxSizer* m_top_sizer{ nullptr }; - wxStaticText* m_static_title{ nullptr }; //wxTimer* m_refresh_timer; ObjectTablePanel* m_obj_panel{ nullptr }; Model* m_model{ nullptr }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index e6cbb7d0ef..109e0fe5bc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -94,7 +94,6 @@ class GLGizmoCut3D : public GLGizmoBase GLModel m_reference_radius; GLModel m_angle_arc; - Vec3d m_old_center; Vec3d m_cut_normal; struct InvalidConnectorsStatistics diff --git a/src/slic3r/GUI/HMSPanel.hpp b/src/slic3r/GUI/HMSPanel.hpp index 49910590b8..25ac56de96 100644 --- a/src/slic3r/GUI/HMSPanel.hpp +++ b/src/slic3r/GUI/HMSPanel.hpp @@ -25,7 +25,6 @@ class HMSNotifyItem : public wxPanel wxStaticBitmap *m_bitmap_notify; wxStaticBitmap *m_bitmap_arrow; wxStaticText * m_hms_content; - wxHtmlWindow * m_html; wxPanel * m_staticline; wxBitmap m_img_notify_lv1; diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index 45e4d6ccb8..d28a65c1ff 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -216,7 +216,6 @@ private: long m_extra_style; float m_label_koef{1.0}; - float m_zero_layer_height = 0.0f; std::vector m_values; TickCodeInfo m_ticks; std::vector m_layers_times; diff --git a/src/slic3r/GUI/Jobs/BindJob.hpp b/src/slic3r/GUI/Jobs/BindJob.hpp index af89e2fc1b..1e8aa91d6f 100644 --- a/src/slic3r/GUI/Jobs/BindJob.hpp +++ b/src/slic3r/GUI/Jobs/BindJob.hpp @@ -20,7 +20,6 @@ class BindJob : public Job std::string m_sec_link; std::string m_ssdp_version; bool m_job_finished{ false }; - int m_print_job_completed_id = 0; bool m_improved{false}; public: diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp index 5a531065f3..3e634e0337 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp @@ -27,7 +27,6 @@ class UpgradeNetworkJob : public Job wxWindow * m_event_handle{nullptr}; std::function m_success_fun{nullptr}; bool m_job_finished{ false }; - int m_print_job_completed_id = 0; InstallProgressFn pro_fn { nullptr }; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 675bc8da27..aeed034b0f 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -4488,10 +4488,9 @@ std::string MainFrame::get_dir_name(const wxString &full_name) const // ---------------------------------------------------------------------------- SettingsDialog::SettingsDialog(MainFrame* mainframe) -:DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "settings_dialog"), +:DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "settings_dialog") //: DPIDialog(mainframe, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, // wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, "settings_dialog"), - m_main_frame(mainframe) { if (wxGetApp().is_gcode_viewer()) return; diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 2052860d80..b8b7ef2e7d 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -94,7 +94,6 @@ class SettingsDialog : public DPIDialog//DPIDialog { //wxNotebook* m_tabpanel { nullptr }; Notebook* m_tabpanel{ nullptr }; - MainFrame* m_main_frame { nullptr }; wxMenuBar* m_menubar{ nullptr }; public: SettingsDialog(MainFrame* mainframe); diff --git a/src/slic3r/GUI/MixedFilamentDialog.cpp b/src/slic3r/GUI/MixedFilamentDialog.cpp index 902c12d27b..a0e2eaeaf7 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.cpp +++ b/src/slic3r/GUI/MixedFilamentDialog.cpp @@ -126,7 +126,6 @@ MixedFilamentDialog::MixedFilamentDialog(wxWindow* parent, const std::vector& physical_types) : DPIDialog(parent, wxID_ANY, _L("Add Mixed Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) - , m_edit_mode(false) , m_physical_colors(physical_colors) , m_physical_names(physical_names) , m_physical_types(physical_types) @@ -157,7 +156,6 @@ MixedFilamentDialog::MixedFilamentDialog(wxWindow* parent, : DPIDialog(parent, wxID_ANY, _L("Edit Mixed Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_result(existing) - , m_edit_mode(true) , m_physical_colors(physical_colors) , m_physical_names(physical_names) , m_physical_types(physical_types) diff --git a/src/slic3r/GUI/MixedFilamentDialog.hpp b/src/slic3r/GUI/MixedFilamentDialog.hpp index ea8ac5ad16..45b297da4a 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.hpp +++ b/src/slic3r/GUI/MixedFilamentDialog.hpp @@ -115,7 +115,6 @@ private: wxColour comp_colour(size_t i) const; MixedFilamentResult m_result; - bool m_edit_mode{false}; std::vector m_physical_colors; std::vector m_physical_names; std::vector m_physical_types; diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index 13688d6526..9252b04559 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -78,7 +78,6 @@ private: Tabbook* m_tabpanel{ nullptr }; wxSizer* m_main_sizer{ nullptr }; - AddMachinePanel* m_status_add_machine_panel; StatusPanel* m_status_info_panel; MediaFilePanel* m_media_file_panel; UpgradePanel* m_upgrade_panel; @@ -86,8 +85,6 @@ private: /* side tools */ SideTools* m_side_tools{nullptr}; - wxStaticBitmap* m_bitmap_arrow; - wxStaticBitmap* m_bitmap_wifi_signal; SelectMachinePopup m_select_machine; /* images */ diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 90fd160310..ed8079d88c 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -177,7 +177,6 @@ public: // Generic rich message dialog, used intead of wxRichMessageDialog class RichMessageDialog : public MsgDialog { - wxCheckBox* m_checkBox{ nullptr }; wxString m_checkBoxText; bool m_checkBoxValue{ false }; @@ -416,7 +415,6 @@ private: wxString m_new_keys; Button * m_update_btn = nullptr; Button * m_later_btn = nullptr; - wxStaticText *m_msg_text = nullptr; }; diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp index 2576e36f12..9b5655a9ee 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.hpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -79,7 +79,6 @@ private: wxBoxSizer* m_main_sizer{nullptr}; wxBoxSizer* m_sizer_machine_list{nullptr}; wxScrolledWindow* m_machine_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // table head wxPanel* m_table_head_panel{ nullptr }; @@ -99,8 +98,6 @@ private: int m_total_count{ 0 }; int m_count_page_item{ 10 }; - bool prev{ false }; - bool next{ false }; Button* btn_last_page{ nullptr }; Button* btn_next_page{ nullptr }; wxStaticText* st_page_number{ nullptr }; diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp index 0572c30d1b..724eeed2a9 100644 --- a/src/slic3r/GUI/MultiMachinePage.hpp +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -81,7 +81,6 @@ private: AppConfig* app_config; Label* m_label{ nullptr }; wxScrolledWindow* scroll_macine_list{ nullptr }; - wxBoxSizer* m_sizer_body{ nullptr }; wxBoxSizer* sizer_machine_list{ nullptr }; std::map m_device_items; int m_selected_count{0}; diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp index 0f676d06b3..f1b35ca2aa 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.hpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -99,7 +99,6 @@ private: wxBoxSizer* page_sizer{ nullptr }; wxBoxSizer* m_sizer_task_list{ nullptr }; wxScrolledWindow* m_task_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // table head wxPanel* m_table_head_panel{ nullptr }; @@ -113,7 +112,6 @@ private: Button* m_action{ nullptr }; // ctrl button for all - int m_sel_number{0}; wxPanel* m_ctrl_btn_panel{ nullptr }; wxBoxSizer* m_btn_sizer{ nullptr }; Button* btn_stop_all{ nullptr }; @@ -160,15 +158,12 @@ private: wxBoxSizer* m_sizer_task_list{ nullptr }; wxBoxSizer* m_main_sizer{ nullptr }; wxScrolledWindow* m_task_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // Flipping pages int m_current_page{ 0 }; int m_total_page{0}; int m_total_count{ 0 }; int m_count_page_item{ 10 }; - bool prev{ false }; - bool next{ false }; Button* btn_last_page{ nullptr }; Button* btn_next_page{ nullptr }; wxStaticText* st_page_number{ nullptr }; @@ -191,7 +186,6 @@ private: Button* m_action{ nullptr }; // ctrl button for all - int m_sel_number; wxPanel* m_ctrl_btn_panel{ nullptr }; wxBoxSizer* m_btn_sizer{ nullptr }; Button* btn_pause_all{ nullptr }; diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index d5a37fc9a7..ef5d4ba9d2 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -86,8 +86,6 @@ ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE /* | wxRESIZE_BORDER*/) - , m_filament_ids(in_out.filament_ids) - , m_first_extruder_id(in_out.first_extruder_id) { auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); diff --git a/src/slic3r/GUI/ObjColorDialog.hpp b/src/slic3r/GUI/ObjColorDialog.hpp index 19ed1dcb24..34f9eb5de5 100644 --- a/src/slic3r/GUI/ObjColorDialog.hpp +++ b/src/slic3r/GUI/ObjColorDialog.hpp @@ -94,7 +94,6 @@ private: std::vector m_cluster_map_filaments;//show middle int m_max_filament_index = 0; std::vector m_cluster_colours;//from_algo and show left - bool m_can_add_filament{true}; bool m_deal_thumbnail_flag{false}; std::vector m_new_add_colors; std::vector m_new_add_final_colors; @@ -123,8 +122,6 @@ private: wxBoxSizer * m_main_sizer = nullptr; wxBoxSizer * m_buttons_sizer = nullptr; std::unordered_map m_button_list; - std::vector& m_filament_ids; - unsigned char & m_first_extruder_id; }; #endif // _WIPE_TOWER_DIALOG_H_ \ No newline at end of file diff --git a/src/slic3r/GUI/PluginPickerDialog.cpp b/src/slic3r/GUI/PluginPickerDialog.cpp index d0c387b0c0..194dbaaf07 100644 --- a/src/slic3r/GUI/PluginPickerDialog.cpp +++ b/src/slic3r/GUI/PluginPickerDialog.cpp @@ -16,7 +16,6 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, const std::vector& plugins) : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_plugins(plugins) - , m_capability_mode(false) { build_ui(plugin_type_label); CentreOnParent(); @@ -27,7 +26,6 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, std::vector capabilities) : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_capabilities(std::move(capabilities)) - , m_capability_mode(true) { build_capability_ui(plugin_type_label); CentreOnParent(); diff --git a/src/slic3r/GUI/PluginPickerDialog.hpp b/src/slic3r/GUI/PluginPickerDialog.hpp index 0d676eb04d..95f00689c3 100644 --- a/src/slic3r/GUI/PluginPickerDialog.hpp +++ b/src/slic3r/GUI/PluginPickerDialog.hpp @@ -50,7 +50,6 @@ private: wxStaticText* m_description { nullptr }; std::vector m_plugins; std::vector m_capabilities; - bool m_capability_mode { false }; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 46d6adf4f4..6a3acce54c 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -662,7 +662,6 @@ private: ScalableButton* m_button_question { nullptr }; wxStaticBitmap* m_bed_image{ nullptr }; - Label* m_text_bed_type; }; diff --git a/src/slic3r/GUI/SelectMachinePop.hpp b/src/slic3r/GUI/SelectMachinePop.hpp index 764ffd6af5..76d38be522 100644 --- a/src/slic3r/GUI/SelectMachinePop.hpp +++ b/src/slic3r/GUI/SelectMachinePop.hpp @@ -181,13 +181,11 @@ private: PinCodePanel* m_panel_direct_connection{nullptr}; wxWindow* m_placeholder_panel{nullptr}; HyperLink* m_hyperlink{nullptr}; // ORCA - wxBoxSizer * m_sizer_body{nullptr}; wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; wxBoxSizer * m_sizer_search_bar{nullptr}; wxSearchCtrl* m_search_bar{nullptr}; wxScrolledWindow * m_scrolledWindow{nullptr}; - wxWindow * m_panel_body{nullptr}; wxTimer * m_refresh_timer{nullptr}; std::vector m_user_list_machine_panel; std::vector m_other_list_machine_panel; diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index 93215c4e06..24e483ae33 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -55,7 +55,6 @@ private: void init_timer(); int m_print_plate_idx; - int m_current_filament_id; int m_print_error_code = 0; int timeout_count = 0; int m_connect_try_times = 0; @@ -77,7 +76,6 @@ private: TextInput* m_rename_input{ nullptr }; wxSimplebook* m_rename_switch_panel{ nullptr }; Plater* m_plater{ nullptr }; - wxStaticBitmap* m_staticbitmap{ nullptr }; ThumbnailPanel* m_thumbnailPanel{ nullptr }; ComboBox* m_comboBox_printer{ nullptr }; Button* m_rename_button{ nullptr }; @@ -97,8 +95,6 @@ private: wxPanel * m_connecting_panel{nullptr}; wxSimplebook* m_simplebook{ nullptr }; wxStaticText* m_statictext_finish{ nullptr }; - wxStaticText* m_stext_sending{ nullptr }; - wxStaticText* m_staticText_bed_title{ nullptr }; wxStaticText* m_statictext_printer_msg{ nullptr }; wxStaticText * m_connecting_printer_msg{nullptr}; wxStaticText* m_stext_printer_title{ nullptr }; @@ -115,7 +111,6 @@ private: wxBoxSizer* sizer_thumbnail; wxBoxSizer* m_sizer_scrollable_region; wxBoxSizer* m_sizer_main; - wxStaticText* m_file_name; PrintDialogStatus m_print_status{ PrintStatusInit }; AnimaIcon * m_animaicon{nullptr}; @@ -134,8 +129,6 @@ private: std::vector m_storage_radioBox; std::string m_selected_storage; bool m_if_has_sdcard; - bool m_waiting_support{ false }; - bool m_waiting_enable{ false }; std::vector m_ability_list; public: diff --git a/src/slic3r/GUI/SliceInfoPanel.hpp b/src/slic3r/GUI/SliceInfoPanel.hpp index 8f1710022b..09708d68e4 100644 --- a/src/slic3r/GUI/SliceInfoPanel.hpp +++ b/src/slic3r/GUI/SliceInfoPanel.hpp @@ -28,7 +28,6 @@ public: private: wxScrolledWindow *m_panel; - BBLSliceInfo *m_info { nullptr }; void OnMouse(wxMouseEvent &event); void OnSize(wxSizeEvent &event); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 7ae48008c8..92c3d218e5 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -631,7 +631,6 @@ void SyncAmsInfoDialog::updata_ui_when_priner_not_same() { SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Synchronize AMS Filament Information"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_input_info(info) - , m_export_3mf_cancel(false) , m_mapping_popup(AmsMapingPopup(this,true)) , m_mapping_tip_popup(AmsMapingTipPopup(this)) , m_mapping_tutorial_popup(AmsTutorialPopup(this)) diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.hpp b/src/slic3r/GUI/SyncAmsInfoDialog.hpp index b0868f8c58..6f86af6032 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.hpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.hpp @@ -21,15 +21,11 @@ class SyncAmsInfoDialog : public DPIDialog bool m_only_exist_ext_spool_flag{false}; int m_current_filament_id{0}; int m_print_plate_idx{0}; - int m_print_plate_total{0}; int m_timeout_count{0}; int m_print_error_code{0}; bool m_is_in_sending_mode{false}; bool m_ams_mapping_res{false}; bool m_ams_mapping_valid{false}; - bool m_export_3mf_cancel{false}; - bool m_is_canceled{false}; - bool m_is_rename_mode{false}; bool m_check_flag{false}; PrintPageMode m_print_page_mode{PrintPageMode::PrintPageModePrepare}; std::string m_print_error_msg; diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 5069b76417..4212c4a599 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -630,7 +630,6 @@ private: std::vector m_pages_fff; std::vector m_pages_sla; - wxBoxSizer* m_presets_sizer {nullptr}; public: ScalableButton* m_reset_to_filament_color = nullptr; diff --git a/src/slic3r/GUI/TextureImportDialog.cpp b/src/slic3r/GUI/TextureImportDialog.cpp index 1a24799a15..1bf52d792c 100644 --- a/src/slic3r/GUI/TextureImportDialog.cpp +++ b/src/slic3r/GUI/TextureImportDialog.cpp @@ -519,7 +519,6 @@ public: , m_entries(entries) , m_colors_rgba(colors_rgba) , m_names(names) - , m_existing_count(existing_count) , m_dialog_anchor(dialog_anchor) , m_on_select(std::move(on_select)) , m_on_add_filament(std::move(on_add_filament)) @@ -877,7 +876,6 @@ private: std::vector m_entries; std::vector> m_colors_rgba; std::vector m_names; - size_t m_existing_count = 0; wxWindow* m_dialog_anchor = nullptr; std::function m_on_select; std::function m_on_add_filament; diff --git a/src/slic3r/GUI/UpdateDialogs.hpp b/src/slic3r/GUI/UpdateDialogs.hpp index 04eb4ffb3c..784c10f09a 100644 --- a/src/slic3r/GUI/UpdateDialogs.hpp +++ b/src/slic3r/GUI/UpdateDialogs.hpp @@ -33,7 +33,6 @@ public: void on_hyperlink(wxHyperlinkEvent& evt); private: - wxCheckBox *cbox; }; diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 123025ef85..bad0192115 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -108,13 +108,16 @@ public: private: wxWebView* m_browser; + wxButton * m_button_stop; + wxTextCtrl *m_url; +#if !BBL_RELEASE_TO_PUBLIC + // Created only by the internal-build toolbar in the constructor. wxBoxSizer *bSizer_toolbar; wxButton * m_button_back; wxButton * m_button_forward; - wxButton * m_button_stop; wxButton * m_button_reload; - wxTextCtrl *m_url; wxButton * m_button_tools; +#endif //BBL_RELEASE_TO_PUBLIC wxMenu* m_tools_menu; wxMenuItem* m_tools_handle_navigation; @@ -143,7 +146,6 @@ private: wxMenuItem* m_dev_tools; wxInfoBar *m_info; - wxStaticText* m_info_text; long m_zoomFactor; diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index c43c71f580..ac4283b7e8 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -641,17 +641,11 @@ private: AMSRoadShowMode m_road_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSPassRoadSTEP m_load_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; - bool m_selected = {false}; - int m_passroad_width = {6}; - double m_radius = {4}; wxColour m_road_def_color; wxColour m_road_color; std::vector ams_humidity_img; - int m_humidity = {0}; - bool m_show_humidity = {false}; - bool m_vams_loading{false}; AMSModel m_ams_model; }; @@ -690,14 +684,10 @@ private: int m_left_road_length = {-1}; int m_right_road_length = {-1}; - int m_passroad_width = {6}; - double m_radius = {4}; AMSPassRoadSTEP m_pass_road_left_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; AMSPassRoadSTEP m_pass_road_right_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; std::map m_road_color; - bool m_vams_loading{false}; - AMSModel m_ams_model; }; /************************************************* diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index b13ce19d41..2badbf8594 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -212,7 +212,6 @@ private: wxGridSizer* m_sizer_fanControl { nullptr }; wxBoxSizer *m_mode_sizer{ nullptr }; - wxBoxSizer *m_bottom_sizer{ nullptr }; // mode switch buttons std::unordered_map m_mode_switch_btns; // diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp index 3baea061dc..3e2e41ccb7 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp @@ -89,8 +89,6 @@ private: bool m_right_on{ true }; wxStaticBitmap* badget; - Label* left; - Label* right; Label* left_diameter_desp; Label* right_diameter_desp; Label* left_flow_desp; From 4deadc9dcea073b44f70232cdaf15d49931170b1 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Wed, 9 Sep 2026 12:33:42 +0800 Subject: [PATCH 143/208] Make Tree-Support Deterministic (#15565) * Make tree support deterministic without giving up its parallelism * Break equal-distance ties in the tree support MST by coordinates * test: cover the determinism this PR fixes The MST unit tests here cover the tie-break, but the drop_nodes rework has no test. Adds two cases to the tree support suite. The thread-scheduling one slices five configs twice each and compares the support point sequence, which is what the node ordering moves. The MST tie one pins the branch diameter and line width that carry Prim's equal-distance ties into the toolpaths. slice_with_tree_support takes an optional config list so the second case can add the tree parameters it needs, and the double-slice comparison is shared rather than written twice. Both fail on main without this PR. The first passes from 60d1ceb580, the second from e148865dd6. --------- Co-authored-by: raistlin7447 --- src/libslic3r/MinimumSpanningTree.cpp | 7 +- src/libslic3r/Support/TreeSupport.cpp | 102 ++++++++++++++---- src/libslic3r/Support/TreeSupport3D.cpp | 11 +- tests/fff_print/test_tree_support.cpp | 69 +++++++++++- tests/libslic3r/CMakeLists.txt | 1 + .../libslic3r/test_minimum_spanning_tree.cpp | 66 ++++++++++++ 6 files changed, 223 insertions(+), 33 deletions(-) create mode 100644 tests/libslic3r/test_minimum_spanning_tree.cpp diff --git a/src/libslic3r/MinimumSpanningTree.cpp b/src/libslic3r/MinimumSpanningTree.cpp index ff8fe6e5dd..88555e70ee 100644 --- a/src/libslic3r/MinimumSpanningTree.cpp +++ b/src/libslic3r/MinimumSpanningTree.cpp @@ -60,10 +60,15 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr //This search is O(V) right now, which can be made down to O(log(V)). This reduces the overall time complexity from O(V*V) to O(V*log(E)). //However that requires an implementation of a heap that supports the decreaseKey operation, which is not in the std library. //TODO: Implement this? + // Break equal-distance ties on coordinates: the map is keyed by address, so its + // iteration order (and therefore the first minimum) would otherwise depend on where + // the vertices were allocated. using MapValue = std::pair; const auto closest = std::min_element(smallest_distance.begin(), smallest_distance.end(), [](const MapValue& a, const MapValue& b) { - return a.second < b.second; + if (a.second != b.second) + return a.second < b.second; + return *a.first < *b.first; }); //Add this point to the graph and remove it from the candidates. diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index 2b06f11244..519b6e826e 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -2846,7 +2846,9 @@ void TreeSupport::drop_nodes() const MinimumSpanningTree& mst = spanning_trees[group_index]; //In the first pass, merge all nodes that are close together. std::vector> nodes_vec(nodes_this_part.begin(), nodes_this_part.end()); - tbb::parallel_for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { + // Sequential: nodes merge into and invalidate each other in place, so parallel execution + // makes the merge order (and thus the result) depend on thread scheduling. + std::for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { SupportNode* p_node = entry.second; SupportNode& node = *p_node; if (!p_node->valid) @@ -2934,7 +2936,32 @@ void TreeSupport::drop_nodes() ); //In the second pass, move all middle nodes. - tbb::parallel_for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { + // Still parallel: this pass only reads other nodes. Side effects (invalidation, new + // nodes, contact_nodes/unsupported_branch_leaves updates) are recorded per node and + // applied afterwards in node order. Node creation must be deferred too, since + // SupportNode's constructor writes `parent->child = this` on other nodes. + struct PendingNode { + Point position; + int distance_to_top = 0; + int support_roof_layers_below = 0; + bool to_buildplate = false; + SupportNode *parent = nullptr; + bool zero_max_move = false; + bool has_overhang = false; + ExPolygon overhang; + bool clamp_radius = false; + coordf_t parent_radius = 0; + double dist_to_outer = 0; + }; + struct PassTwoResult { + bool invalidate = false; + bool unsupported_leaf = false; + std::vector pending; + }; + std::vector pass2_results(nodes_vec.size()); + auto pass2_body = [&](size_t node_idx) { + const std::pair& entry = nodes_vec[node_idx]; + PassTwoResult& pass2_out = pass2_results[node_idx]; SupportNode* p_node = entry.second; const SupportNode& node = *p_node; @@ -2949,14 +2976,16 @@ void TreeSupport::drop_nodes() ExPolygons overhangs_next = diff_clipped({ node.overhang }, get_collision(0, obj_layer_nr_next)); for(auto& overhang:overhangs_next) { Point next_pt = overhang.contour.centroid(); - SupportNode *next_node = m_ts_data->create_node(next_pt, p_node->distance_to_top + 1, obj_layer_nr_next, - p_node->support_roof_layers_below - (p_node->distance_to_top >= 0 ? 1 : 0), - to_buildplate, p_node, print_z_next, height_next); - next_node->max_move_dist = 0; - next_node->overhang = std::move(overhang); - m_ts_data->m_mutex.lock(); - contact_nodes[layer_nr_next].emplace_back(next_node); - m_ts_data->m_mutex.unlock(); + PendingNode pending; + pending.position = next_pt; + pending.distance_to_top = p_node->distance_to_top + 1; + pending.support_roof_layers_below = p_node->support_roof_layers_below - (p_node->distance_to_top >= 0 ? 1 : 0); + pending.to_buildplate = to_buildplate; + pending.parent = p_node; + pending.zero_max_move = true; + pending.has_overhang = true; + pending.overhang = std::move(overhang); + pass2_out.pending.emplace_back(std::move(pending)); } return; @@ -2973,17 +3002,17 @@ void TreeSupport::drop_nodes() { if (support_on_buildplate_only) { - unsupported_branch_leaves.push_front({ layer_nr, p_node }); + pass2_out.unsupported_leaf = true; } else { - p_node->valid = false; + pass2_out.invalidate = true; } return; } // if the link between parent and current is cut by contours, mark current as bottom contact node if (p_node->parent && intersection_ln({p_node->position, p_node->parent->position}, layer_contours).empty()==false) { - p_node->valid = false; + pass2_out.invalidate = true; return; } } @@ -3096,20 +3125,47 @@ void TreeSupport::drop_nodes() } auto next_collision = get_collision(0, obj_layer_nr_next); const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[obj_layer_nr_next], next_layer_vertex); - SupportNode * next_node = m_ts_data->create_node(next_layer_vertex, node.distance_to_top + 1, obj_layer_nr_next, - node.support_roof_layers_below - (node.distance_to_top >= 0 ? 1 : 0), - to_buildplate, p_node, print_z_next, height_next); // don't increase radius if next node will collide partially with the object (STUDIO-7883) - to_outside = projection_onto(next_collision, next_node->position); + to_outside = projection_onto(next_collision, next_layer_vertex); direction_to_outer = to_outside - node.position; double dist_to_outer = unscale_(direction_to_outer.cast().norm()); - next_node->radius = std::max(node.radius, std::min(next_node->radius, dist_to_outer)); - get_max_move_dist(next_node); - m_ts_data->m_mutex.lock(); - contact_nodes[layer_nr_next].push_back(next_node); - m_ts_data->m_mutex.unlock(); + PendingNode pending; + pending.position = next_layer_vertex; + pending.distance_to_top = node.distance_to_top + 1; + pending.support_roof_layers_below = node.support_roof_layers_below - (node.distance_to_top >= 0 ? 1 : 0); + pending.to_buildplate = to_buildplate; + pending.parent = p_node; + pending.clamp_radius = true; + pending.parent_radius = node.radius; + pending.dist_to_outer = dist_to_outer; + pass2_out.pending.emplace_back(std::move(pending)); + }; + tbb::parallel_for(tbb::blocked_range(0, nodes_vec.size()), + [&pass2_body](const tbb::blocked_range& node_range) { + for (size_t node_idx = node_range.begin(); node_idx < node_range.end(); ++ node_idx) + pass2_body(node_idx); + }); + // Apply the recorded side effects in node order. + for (size_t node_idx = 0; node_idx < nodes_vec.size(); ++ node_idx) { + PassTwoResult& pass2_out = pass2_results[node_idx]; + for (PendingNode& pending : pass2_out.pending) { + SupportNode* next_node = m_ts_data->create_node(pending.position, pending.distance_to_top, obj_layer_nr_next, + pending.support_roof_layers_below, pending.to_buildplate, pending.parent, print_z_next, height_next); + if (pending.zero_max_move) + next_node->max_move_dist = 0; + if (pending.has_overhang) + next_node->overhang = std::move(pending.overhang); + if (pending.clamp_radius) { + next_node->radius = std::max(pending.parent_radius, std::min(next_node->radius, pending.dist_to_outer)); + get_max_move_dist(next_node); + } + contact_nodes[layer_nr_next].push_back(next_node); + } + if (pass2_out.unsupported_leaf) + unsupported_branch_leaves.push_front({ layer_nr, nodes_vec[node_idx].second }); + if (pass2_out.invalidate) + nodes_vec[node_idx].second->valid = false; } - ); } #ifdef SUPPORT_TREE_DEBUG_TO_SVG diff --git a/src/libslic3r/Support/TreeSupport3D.cpp b/src/libslic3r/Support/TreeSupport3D.cpp index 29131502d2..3cd3f4110d 100644 --- a/src/libslic3r/Support/TreeSupport3D.cpp +++ b/src/libslic3r/Support/TreeSupport3D.cpp @@ -2382,13 +2382,10 @@ static void merge_influence_areas( size_t num_buckets_initial; { // How many buckets per first merge iteration? - const size_t num_threads = tbb::this_task_arena::max_concurrency(); - // 4 buckets per thread if possible, - const size_t num_buckets_min = (input_size + 2) / 4; - // 2 buckets per thread otherwise. - const size_t num_buckets_max = input_size / 2; - num_buckets_initial = num_buckets_min >= num_threads ? num_buckets_min : num_buckets_max; - const size_t bucket_size = num_buckets_min >= num_threads ? 4 : 2; + // Fixed at 4: merging is not associative, so sizing buckets off max_concurrency() made + // results depend on the core count of the slicing machine. + const size_t bucket_size = 4; + num_buckets_initial = (input_size + 2) / 4; // Fill in the buckets. SupportElementMerging *it = influence_areas.data(); // Reserve one more bucket to keep a single influence area which will not be merged in the first iteration. diff --git a/tests/fff_print/test_tree_support.cpp b/tests/fff_print/test_tree_support.cpp index 362eb0ca56..fbb40bb8f3 100644 --- a/tests/fff_print/test_tree_support.cpp +++ b/tests/fff_print/test_tree_support.cpp @@ -1,5 +1,7 @@ #include +#include + #include "libslic3r/Layer.hpp" #include "libslic3r/TriangleMesh.hpp" @@ -33,10 +35,13 @@ TriangleMesh scaled(TestMesh id, float scale) return mesh; } +// `extra` is applied last, so a caller can add or override any key. void slice_with_tree_support(const TriangleMesh &mesh, Slic3r::Print &print, const char *style, - int threshold_angle = 30, int build_plate_only = 0, int raft_layers = 0) + int threshold_angle = 30, int build_plate_only = 0, int raft_layers = 0, + std::initializer_list extra = {}) { - Slic3r::Test::init_and_process_print({ mesh }, print, { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ { "enable_support", 1 }, { "support_type", "tree(auto)" }, { "support_style", style }, @@ -45,6 +50,8 @@ void slice_with_tree_support(const TriangleMesh &mesh, Slic3r::Print &print, con { "raft_layers", raft_layers }, { "layer_height", 0.2 }, }); + config.set_deserialize_strict(extra); + Slic3r::Test::init_and_process_print({ mesh }, print, config); } Points support_points(const Slic3r::Print &print) @@ -63,6 +70,32 @@ size_t support_point_count(const TriangleMesh &mesh, const char *style, int thre return support_points(print).size(); } +// Index of the first differing point, or the common length when they match. An index keeps a +// failure readable; comparing the vectors themselves dumps thousands of points. +size_t first_difference(const Points &a, const Points &b) +{ + const size_t common = std::min(a.size(), b.size()); + for (size_t i = 0; i < common; ++i) + if (a[i] != b[i]) + return i; + return common; +} + +// Slice `mesh` twice and require an identical support point sequence. Point counts and total +// length are order insensitive, so the sequence is what a reordering shows up in. +void sliced_twice_matches(const TriangleMesh &mesh, int build_plate_only, const char *style = "tree_slim", + std::initializer_list extra = {}) +{ + Slic3r::Print first_print, second_print; + slice_with_tree_support(mesh, first_print, style, 30, build_plate_only, 0, extra); + slice_with_tree_support(mesh, second_print, style, 30, build_plate_only, 0, extra); + const Points first = support_points(first_print); + const Points second = support_points(second_print); + REQUIRE(first.size() > 1000); // without support the comparison below passes vacuously + REQUIRE(second.size() == first.size()); + REQUIRE(first_difference(first, second) == first.size()); +} + } // namespace TEST_CASE("Tree support is generated for an overhang and not for a plain cube", "[TreeSupport]") @@ -123,3 +156,35 @@ TEST_CASE("A raft is still generated under tree support", "[TreeSupport]") // The raft goes under the object. REQUIRE(rafted_object->layers().front()->print_z > unrafted_object->layers().front()->print_z); } + +// drop_nodes() decides the node merges and spawns the next layer's nodes in parallel. Every one of +// those decisions has to be applied in a fixed order, or the same model gives different branches on +// each slice. +TEST_CASE("Tree support toolpaths do not depend on thread scheduling", "[TreeSupport][Regression]") +{ + // Scaled up so that a layer holds enough nodes for the parallel range to be split. At stock + // size it stays in one chunk and the order never varies. + SECTION("overhang") { sliced_twice_matches(scaled(TestMesh::overhang, 2.f), 0); } + SECTION("bridge with hole") { sliced_twice_matches(scaled(TestMesh::bridge_with_hole, 3.f), 0); } + // Dropping every branch that cannot reach the bed leaves the survivors dense enough that the + // neighbour merge fires in bulk. + SECTION("on the build plate") { sliced_twice_matches(scaled(TestMesh::overhang, 4.f), 1); } + // Branches resting on the model are what put nodes in a part group other than 0, which is the + // only way to reach the prune in the second pass. tree_hybrid additionally builds polygon + // nodes, so it is the only style that exercises the overhang merge. + SECTION("resting on the model") { sliced_twice_matches(two_tier_mesh(), 0); } + SECTION("hybrid on the model") { sliced_twice_matches(two_tier_mesh(), 0, "tree_hybrid"); } +} + +// Prim breaks equal-distance ties by heap address. A 1 mm branch diameter puts neighbours close +// enough to tie, and an explicit line width pins max_move_dist, so the moved tie winner reaches +// the support toolpaths. +TEST_CASE("Tree support toolpaths do not depend on the MST tie order", "[TreeSupport][Regression]") +{ + sliced_twice_matches(two_tier_mesh(), 0, "tree_hybrid", { + { "tree_support_branch_diameter", 1.0 }, + { "tree_support_branch_distance", 5.0 }, + { "tree_support_branch_angle", 40 }, + { "support_line_width", 0.4 }, + }); +} diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 5d3e301ea7..0d29ea11ae 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -29,6 +29,7 @@ add_executable(${_TEST_NAME}_tests test_polygon.cpp test_mutable_polygon.cpp test_mutable_priority_queue.cpp + test_minimum_spanning_tree.cpp test_nozzle_volume_type.cpp test_step.cpp test_stl.cpp diff --git a/tests/libslic3r/test_minimum_spanning_tree.cpp b/tests/libslic3r/test_minimum_spanning_tree.cpp new file mode 100644 index 0000000000..5f9998171c --- /dev/null +++ b/tests/libslic3r/test_minimum_spanning_tree.cpp @@ -0,0 +1,66 @@ +#include + +#include + +#include "libslic3r/MinimumSpanningTree.hpp" +#include "libslic3r/Point.hpp" + +using namespace Slic3r; + +// A 5x5 lattice: at every step of Prim's algorithm several candidates sit at the same +// distance from the tree, so the tie-break decides the tree's shape. +static std::vector lattice() +{ + std::vector vertices; + for (int y = 0; y < 5; ++y) + for (int x = 0; x < 5; ++x) + vertices.emplace_back(Point::new_scale(x, y)); + return vertices; +} + +static std::vector sorted_neighbours(const MinimumSpanningTree &mst, const Point &vertex) +{ + std::vector neighbours = mst.adjacent_nodes(vertex); + std::sort(neighbours.begin(), neighbours.end()); + return neighbours; +} + +TEST_CASE("Minimum spanning tree connects every vertex", "[MinimumSpanningTree]") +{ + const std::vector vertices = lattice(); + const MinimumSpanningTree mst(vertices); + + REQUIRE(mst.vertices().size() == vertices.size()); + size_t adjacency_entries = 0; + for (const Point &vertex : vertices) { + const std::vector neighbours = mst.adjacent_nodes(vertex); + REQUIRE(! neighbours.empty()); + adjacency_entries += neighbours.size(); + } + // A tree on n vertices has n - 1 edges, each listed from both ends. + REQUIRE(adjacency_entries == 2 * (vertices.size() - 1)); +} + +TEST_CASE("Minimum spanning tree does not depend on the order of the non-root vertices", "[MinimumSpanningTree][Regression]") +{ + const std::vector vertices = lattice(); + const MinimumSpanningTree reference(vertices); + + // The root stays first: Prim's tree legitimately depends on where it starts. + // Every other order of the remaining vertices must give the same tree. + std::vector> orders; + orders.emplace_back(vertices); + std::reverse(orders.back().begin() + 1, orders.back().end()); + for (size_t shift = 1; shift + 1 < vertices.size(); ++shift) { + orders.emplace_back(vertices); + std::rotate(orders.back().begin() + 1, orders.back().begin() + 1 + shift, orders.back().end()); + } + + for (const std::vector &order : orders) { + const MinimumSpanningTree mst(order); + for (const Point &vertex : vertices) { + INFO("vertex " << vertex.x() << "," << vertex.y()); + REQUIRE(sorted_neighbours(mst, vertex) == sorted_neighbours(reference, vertex)); + } + } +} From 8a291f9d561d1ce718867da02eb2fe8e576d0c68 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:35:21 +0800 Subject: [PATCH 144/208] Confine config import to the preset directory (#15608) import_presets reduced each zip entry to a basename by stripping only '/', so on Windows an entry named with '\' separators kept its directory components and was extracted wherever they pointed. Strip both separators, and reject any entry whose name still escapes the extraction folder. The preset name from the JSON and the bundle id from bundle_structure.json were joined onto the preset directory unchecked as well, which let either of them write outside it on every platform. Both are now validated before anything is written. The check is the is_path_within_root helper the 3MF importer already had, moved to Utils so both importers share it. It treats '/' and '\' as separators on every platform, so a bundle that would escape on one OS is rejected on all of them. --- src/libslic3r/Format/bbs_3mf.cpp | 39 -------- src/libslic3r/PresetBundle.cpp | 16 +++- src/libslic3r/Utils.hpp | 4 + src/libslic3r/utils.cpp | 24 +++++ .../libslic3r/test_preset_bundle_loading.cpp | 90 +++++++++++++++++++ 5 files changed, 133 insertions(+), 40 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index b0cbb1fd50..b4f6dc1d45 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -102,45 +102,6 @@ struct ZipUnicodePathExtraField } }; -// Validate that a relative file path does not escape the root directory via path traversal. -static bool is_path_within_root(const std::string& file_path, const boost::filesystem::path& root) -{ - if (file_path.empty()) - return false; - - boost::filesystem::path p(file_path); - if (p.is_absolute()) - return false; - - // Reject any path component that is ".." - for (const auto& component : p) { - if (component == "..") - return false; - } - - // Resolve the full path and verify it starts with the canonical root (also catches symlink escapes) - try { - boost::filesystem::path full_path = root / p; - boost::filesystem::path canonical_root = boost::filesystem::weakly_canonical(root); - boost::filesystem::path canonical_full = boost::filesystem::weakly_canonical(full_path); - - auto root_str = canonical_root.string(); - auto full_str = canonical_full.string(); - if (full_str.length() < root_str.length()) - return false; - if (full_str.compare(0, root_str.length(), root_str) != 0) - return false; - // Ensure it's a proper prefix (not just a substring of a longer directory name) - if (full_str.length() > root_str.length() && - full_str[root_str.length()] != boost::filesystem::path::preferred_separator) - return false; - } catch (const boost::filesystem::filesystem_error&) { - return false; - } - - return true; -} - // VERSION NUMBERS // 0 : .3mf, files saved by older slic3r or other applications. No version definition in them. // 1 : Introduction of 3mf versioning. No other change in data saved into 3mf files. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 6d4e77837a..f17fd5c768 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1614,6 +1614,12 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector metadata.id = to_string(uuid); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " bundle_id was empty, so generating a UUID: " << metadata.id; } + if (has_bundle_structure && !is_path_within_root(metadata.id, user_folder / user_id / PRESET_LOCAL_DIR)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " bundle id escapes the bundle directory, not importing: " << metadata.id; + fclose(zipFile); + fs::remove_all(temp_folder, ec); + continue; + } // Build bundle directory path based on whether bundle_structure.json was present fs::path bundle_base_dir; @@ -1636,11 +1642,15 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector if (status) { std::string file_name = file_stat.m_filename; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " From zip file: " << file << ". Read file name: " << file_stat.m_filename; - size_t index = file_name.find_last_of('/'); + size_t index = file_name.find_last_of("/\\"); if (std::string::npos != index) { file_name = file_name.substr(index + 1); } if (BUNDLE_STRUCTURE_JSON_NAME == file_name) continue; + if (!is_path_within_root(file_name, temp_folder)) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " zip entry escapes the temp directory, skipping: " << file_stat.m_filename; + continue; + } // create target file path std::string target_file_path = boost::filesystem::path(temp_folder / file_name).make_preferred().string(); @@ -1729,6 +1739,10 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset type is unknown, not loading: " << name; return false; } + if (!is_path_within_root(name, fs::path(collection->m_dir_path))) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset name escapes the preset directory, not loading: " << name; + return false; + } const PresetOrigin load_origin = detect_origin_from_path(boost::filesystem::path(bundle_dir)); const std::string preset_name = get_preset_canonical_name(name, load_origin); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 55d9b716cf..797894442a 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -255,6 +255,10 @@ extern bool is_gallery_file(const std::string& path, char const* type); extern bool is_shapes_dir(const std::string& dir); //BBS: add json support extern bool is_json_file(const std::string& path); +// True if rel_path is relative, has no ".." component and, joined to root, still resolves inside it. +// Both '/' and '\\' are treated as separators on every platform, so an archive rejected on one OS +// is rejected on all of them. +extern bool is_path_within_root(const std::string &rel_path, const boost::filesystem::path &root); // Orca: custom protocal support utils inline bool is_orca_open(const std::string& url) { return boost::starts_with(url, "orcaslicer://open"); } diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 5f4baac951..875c90f6ab 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -1088,6 +1088,30 @@ bool is_json_file(const std::string& path) return boost::iends_with(path, ".json"); } +bool is_path_within_root(const std::string &rel_path, const boost::filesystem::path &root) +{ + auto is_separator = [](char c) { return c == '/' || c == '\\'; }; + if (rel_path.empty() || is_separator(rel_path.front()) || (rel_path.size() > 1 && rel_path[1] == ':')) + return false; + for (size_t start = 0; start <= rel_path.size();) { + size_t end = start; + while (end < rel_path.size() && !is_separator(rel_path[end])) + ++end; + if (rel_path.compare(start, end - start, "..") == 0) + return false; + start = end + 1; + } + // Resolve against the canonical root so a symlink inside it cannot lead back out. + try { + const std::string root_str = boost::filesystem::weakly_canonical(root).string(); + const std::string full_str = boost::filesystem::weakly_canonical(root / rel_path).string(); + return full_str.compare(0, root_str.size(), root_str) == 0 && + (full_str.size() == root_str.size() || full_str[root_str.size()] == boost::filesystem::path::preferred_separator); + } catch (const boost::filesystem::filesystem_error &) { + return false; + } +} + bool is_img_file(const std::string &path) { return boost::iends_with(path, ".png") || boost::iends_with(path, ".svg"); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 26cbf387ec..d01711000a 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -6,6 +6,8 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/AppConfig.hpp" +#include "libslic3r/Utils.hpp" +#include "libslic3r/miniz_extension.hpp" #include "test_utils.hpp" @@ -1406,3 +1408,91 @@ TEST_CASE("Sizing down to the nozzle count plus mixes is what eats the mixed tai CHECK(bundle.project_config.option("filament_mixed_components")->values[5] == "1,2"); } } + +namespace { + +// data_dir() is a process-wide global that import_presets extracts into; scope it to the test. +struct ScopedDataDir +{ + std::string previous = data_dir(); + explicit ScopedDataDir(const fs::path &dir) { set_data_dir(dir.string()); } + ~ScopedDataDir() { set_data_dir(previous); } +}; + +std::string read_file(const fs::path &file) +{ + std::ifstream in(file.string(), std::ios::binary); + return std::string(std::istreambuf_iterator(in), std::istreambuf_iterator()); +} + +void write_zip(const fs::path &zip_file, const std::vector> &entries) +{ + mz_zip_archive zip; + mz_zip_zero_struct(&zip); + REQUIRE(open_zip_writer(&zip, zip_file.string())); + for (const auto &[name, content] : entries) + REQUIRE(mz_zip_writer_add_mem(&zip, name.c_str(), content.data(), content.size(), MZ_DEFAULT_COMPRESSION)); + REQUIRE(mz_zip_writer_finalize_archive(&zip)); + REQUIRE(close_zip_writer(&zip)); +} + +bool any_filename_contains(const fs::path &root, const std::string &needle) +{ + for (fs::recursive_directory_iterator it(root), end; it != end; ++it) + if (it->path().filename().string().find(needle) != std::string::npos) + return true; + return false; +} + +} // namespace + +TEST_CASE("Config import confines zip entries, preset names and bundle ids to the preset directory", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir temp_dir; + const fs::path data_root = temp_dir.path() / "datadir"; + const fs::path src_dir = temp_dir.path() / "src"; + fs::create_directories(src_dir); + ScopedDataDir scoped_data_dir(data_root); + + PresetBundle bundle; + AppConfig app_config; + const auto confirm = [](std::string const &) { return 1; }; + const auto import = [&](const fs::path &file) { + std::vector files{file.string()}; + bundle.import_presets(files, confirm, ForwardCompatibilitySubstitutionRule::Disable, app_config); + return files; + }; + + const fs::path good_file = src_dir / "Good.json"; + write_print_preset(bundle.prints.default_preset().config, good_file, "Good"); + const std::string good_json = read_file(good_file); + + // Four levels up from where import_presets writes (/user/default/temp) is temp_dir + // itself, so anything that escapes lands where the scan below can see it. + const std::string up = "../../../../"; + const std::string up_win = "..\\..\\..\\..\\"; + + SECTION("zip entry names with either separator are reduced to a basename") { + const fs::path zip = src_dir / "bundle.zip"; + write_zip(zip, {{up + "zip-escape.json", "{}"}, {up_win + "zip-escape.json", "{}"}, {"presets/Good.json", good_json}}); + import(zip); + CHECK(bundle.prints.find_preset("Good") != nullptr); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "zip-escape")); + } + + SECTION("a preset name that walks out of the preset directory is rejected") { + for (const std::string &name : {up + "name-escape", up_win + "name-escape"}) { + const fs::path file = src_dir / "escape.json"; + write_print_preset(bundle.prints.default_preset().config, file, name); + CHECK(import(file).empty()); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "name-escape")); + } + } + + SECTION("a bundle id that walks out of the bundle directory is rejected") { + const fs::path zip = src_dir / "bundle.zip"; + write_zip(zip, {{BUNDLE_STRUCTURE_JSON_NAME, "{\"id\": \"" + up + "bundle-escape\"}"}, {"Good.json", good_json}}); + CHECK(import(zip).empty()); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "bundle-escape")); + } +} From 8df5e5e738aae791c2fac9cfa8b0534ed7639e5c Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Fri, 4 Sep 2026 17:15:19 +0800 Subject: [PATCH 145/208] Extract and Unify Wipe Tower Estimation --- src/OrcaSlicer.cpp | 43 ++-- src/libslic3r/CMakeLists.txt | 2 + src/libslic3r/GCode/WipeTowerEstimate.cpp | 109 ++++++++++ src/libslic3r/GCode/WipeTowerEstimate.hpp | 29 +++ src/libslic3r/Print.cpp | 100 +++------ src/libslic3r/Print.hpp | 4 + src/slic3r/GUI/GLCanvas3D.cpp | 12 +- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 3 +- src/slic3r/GUI/PartPlate.cpp | 214 +++++++++---------- src/slic3r/GUI/PartPlate.hpp | 10 +- tests/fff_print/test_wipe_tower.cpp | 83 +++++++ tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_wipe_tower_estimate.cpp | 206 ++++++++++++++++++ 13 files changed, 589 insertions(+), 227 deletions(-) create mode 100644 src/libslic3r/GCode/WipeTowerEstimate.cpp create mode 100644 src/libslic3r/GCode/WipeTowerEstimate.hpp create mode 100644 tests/libslic3r/test_wipe_tower_estimate.cpp diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 31f39921f4..5b1d2da1bf 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -4015,7 +4015,7 @@ int CLI::run(int argc, char **argv) } }; - auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse, new_extruder_count](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) { + auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) { plate_obj_size_info.obj_bbox= plate->get_objects_bounding_box(); BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, object bbox: min {%2%, %3%, %4%} - max {%5%, %6%, %7%}") %(plate_index+1) %plate_obj_size_info.obj_bbox.min.x() % plate_obj_size_info.obj_bbox.min.y() % plate_obj_size_info.obj_bbox.min.z() %plate_obj_size_info.obj_bbox.max.x() % plate_obj_size_info.obj_bbox.max.y() % plate_obj_size_info.obj_bbox.max.z(); @@ -4059,22 +4059,13 @@ int CLI::run(int argc, char **argv) plate_obj_size_info.wipe_x = wipe_x_option->get_at(plate_index); plate_obj_size_info.wipe_y = wipe_y_option->get_at(plate_index); - ConfigOptionFloat* width_option = print_config.option("prime_tower_width", true); - plate_obj_size_info.wipe_width = width_option->value; + // Body and brim from one estimate: resolving an auto (-1) brim against a different + // height would size the two halves of the same tower from two different objects. + const WipeTowerFootprint footprint = plate->estimate_wipe_tower_footprint(print_config, filaments_cnt); + float brim_width = float(footprint.brim_width); - ConfigOptionFloat* brim_width_option = print_config.option("prime_tower_brim_width", true); - float brim_width = brim_width_option->value; - if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float)plate_obj_size_info.obj_bbox.max.z()); - - ConfigOptionFloat* volume_option = print_config.option("prime_volume", true); - float wipe_volume = volume_option->value; - - const ConfigOptionBool * wrapping_detection = print_config.option("enable_wrapping_detection"); - bool enable_wrapping = (wrapping_detection != nullptr) && wrapping_detection->value; - - Vec3d wipe_tower_size = plate->estimate_wipe_tower_size(print_config, plate_obj_size_info.wipe_width, wipe_volume, new_extruder_count, filaments_cnt, false, enable_wrapping); - plate_obj_size_info.wipe_width = wipe_tower_size(0); - plate_obj_size_info.wipe_depth = wipe_tower_size(1); + plate_obj_size_info.wipe_width = footprint.width; + plate_obj_size_info.wipe_depth = footprint.depth; Vec3d origin = plate->get_origin(); Vec3d start(origin(0) + plate_obj_size_info.wipe_x - brim_width, origin(1) + plate_obj_size_info.wipe_y, 0.f); @@ -4875,7 +4866,7 @@ int CLI::run(int argc, char **argv) wipe_y_option->set_at(&wt_y_opt, i, 0); Vec3d wipe_tower_size, wipe_tower_pos; - ArrangePolygon wipe_tower_ap = cur_plate->estimate_wipe_tower_polygon(m_print_config, i, wipe_tower_pos, wipe_tower_size, new_extruder_count, assemble_plate.filaments_count, true); + ArrangePolygon wipe_tower_ap = cur_plate->estimate_wipe_tower_polygon(m_print_config, i, wipe_tower_pos, wipe_tower_size, assemble_plate.filaments_count, true); //update the new wp position wt_x_opt.value = wipe_tower_pos(0); @@ -5175,7 +5166,7 @@ int CLI::run(int argc, char **argv) } Vec3d wipe_tower_size, wipe_tower_pos; - ArrangePolygon wipe_tower_ap = partplate_list.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(m_print_config, plate_index_valid, wipe_tower_pos, wipe_tower_size, new_extruder_count, extruder_size, true); + ArrangePolygon wipe_tower_ap = partplate_list.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(m_print_config, plate_index_valid, wipe_tower_pos, wipe_tower_size, extruder_size, true); //update the new wp position if (bedid < plate_count) { @@ -5276,22 +5267,16 @@ int CLI::run(int argc, char **argv) //float depth = v * (filaments_cnt - 1) / (layer_height * w); - const ConfigOptionBool *wrapping_detection = m_print_config.option("enable_wrapping_detection"); - bool enable_wrapping = (wrapping_detection != nullptr) && wrapping_detection->value; - - Vec3d wipe_tower_size = cur_plate->estimate_wipe_tower_size(m_print_config, w, v, new_extruder_count, filaments_cnt, false, enable_wrapping); + const WipeTowerFootprint footprint = cur_plate->estimate_wipe_tower_footprint(m_print_config, filaments_cnt); + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); Vec3d plate_origin = cur_plate->get_origin(); int plate_width, plate_depth; double plate_height; partplate_list.get_plate_size(plate_width, plate_depth, plate_height); float depth = wipe_tower_size(1); - float margin = 15.f, wp_brim_width = 0.f; - ConfigOption *wipe_tower_brim_width_opt = m_print_config.option("prime_tower_brim_width"); - if (wipe_tower_brim_width_opt ) { - wp_brim_width = wipe_tower_brim_width_opt->getFloat(); - if (wp_brim_width < 0) wp_brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%")%wp_brim_width; - } + // Brim already resolved against the height the body was sized from. + float margin = 15.f, wp_brim_width = float(footprint.brim_width); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%")%wp_brim_width; w = wipe_tower_size(0); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: x=%1%, y=%2%, width=%3%, depth=%4%, angle=%5%, prime_volume=%6%, filaments_cnt=%7%, layer_height=%8%, plate_width=%9%, plate_depth=%10%") diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index d07c42d8f6..23b6decb2c 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -272,6 +272,8 @@ set(lisbslic3r_sources GCode/WipeTower2.hpp GCode/WipeTower.cpp GCode/WipeTower.hpp + GCode/WipeTowerEstimate.cpp + GCode/WipeTowerEstimate.hpp GCodeWriter.cpp GCodeWriter.hpp Geometry/ArcWelder.hpp diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp new file mode 100644 index 0000000000..9e9bb7de4b --- /dev/null +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -0,0 +1,109 @@ +#include "WipeTowerEstimate.hpp" + +#include "WipeTower.hpp" +#include "WipeTower2.hpp" +#include "../Config.hpp" +#include "../PrintConfig.hpp" +#include "../libslic3r.h" + +#include +#include + +namespace Slic3r { + +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height, bool any_raft) +{ + WipeTowerFootprint footprint; + footprint.height = max_object_height; + if (filaments_cnt == 0 || layer_height < EPSILON) + return footprint; + + // Every caller today declares all these keys, but the signature accepts any ConfigBase: + // fall back to the key's declared default, never to a hand-copied constant. + auto option_of = [&config](const char *key) -> const ConfigOption * { + if (const ConfigOption *opt = config.option(key); opt != nullptr) + return opt; + if (const ConfigDef *def = config.def(); def != nullptr) + if (const ConfigOptionDef *opt_def = def->get(key); opt_def != nullptr) + return opt_def->default_value.get(); + return nullptr; + }; + auto opt_float = [&option_of](const char *key) { + const ConfigOption *opt = option_of(key); + return opt != nullptr ? opt->getFloat() : 0.; + }; + auto opt_bool = [&option_of](const char *key) { + const ConfigOption *opt = option_of(key); + return opt != nullptr && opt->getBool(); + }; + // By value, not by concrete type: a static PrintConfig holds ConfigOptionEnum, a + // DynamicConfig built from presets holds ConfigOptionEnumGeneric, and both answer getInt(). + auto opt_enum = [&option_of](const char *key, int fallback) { + const ConfigOption *opt = option_of(key); + return opt != nullptr ? opt->getInt() : fallback; + }; + auto max_of = [&option_of](const char *key, double fallback) { + const auto *opt = dynamic_cast(option_of(key)); + return (opt != nullptr && !opt->values.empty()) ? *std::max_element(opt->values.begin(), opt->values.end()) : fallback; + }; + + const double width = opt_float("prime_tower_width"); + const double prime_volume = opt_float("prime_volume"); + const double extra_spacing = opt_float("prime_tower_infill_gap") / 100.; + double rib_width = opt_float("wipe_tower_rib_width"); + const double extra_rib_length = opt_float("wipe_tower_extra_rib_length"); + const auto *nozzle_opt = dynamic_cast(option_of("nozzle_diameter")); + const bool dual_nozzle = nozzle_opt != nullptr && nozzle_opt->values.size() == 2; + const bool rib_wall = opt_enum("wipe_tower_wall_type", int(WipeTowerWallType::wtwRectangle)) == int(WipeTowerWallType::wtwRib); + const bool smooth_timelapse = opt_enum("timelapse_type", int(TimelapseType::tlTraditional)) == int(TimelapseType::tlSmooth); + // Reasons a tower is printed with no tool change to purge for. + const bool need_wipe_tower = smooth_timelapse || opt_bool("enable_wrapping_detection") || any_raft; + + // No tool change, nothing to purge; smooth timelapse still primes once. + size_t purge_count = 0; + if (filaments_cnt > 1) + purge_count = dual_nozzle ? filaments_cnt : filaments_cnt - 1; + else if (smooth_timelapse) + purge_count = 1; + + double volume = prime_volume * double(purge_count); + if (dual_nozzle) { + // Dual-nozzle printers also purge the filament change length on the tower. + const double length = max_of("filament_change_length", 0.); + const double diameter = max_of("filament_diameter", 1.75); + volume += length * PI * diameter * diameter / 4. * double(filaments_cnt / 2); + } + // Single-extruder multi-material purges the flush matrix instead of the prime volume. + const bool semm_flush = opt_bool("purge_in_prime_tower") && opt_bool("single_extruder_multi_material"); + if (semm_flush) + volume = WipeTower2::estimate_semm_flush_volume(config, filaments_cnt); + + // Both wall types decide this together: over-reserving only wastes bed area, but + // reporting no tower for one that is built collapses the validation hull to a point. + if (volume < EPSILON && !need_wipe_tower) + return footprint; + + const double min_depth = WipeTower::get_limit_depth_by_height(float(max_object_height)); + if (rib_wall) { + // A rib wall squares the tower; the ribs run the diagonal and bulge past the body. + const double volume_depth = std::sqrt(volume / layer_height * extra_spacing); + double depth = std::max(min_depth, volume_depth); + rib_width = std::min(rib_width, depth / 2.); + depth = rib_width / std::sqrt(2.) + std::max(depth + extra_rib_length, volume_depth); + footprint.width = footprint.depth = depth; + } else { + double depth = volume / (layer_height * width); + // The flush volumes already hold the spacing between wipes. + if (!semm_flush) + depth *= extra_spacing; + footprint.width = width; + footprint.depth = std::max(min_depth, depth); + } + + footprint.brim_width = opt_float("prime_tower_brim_width"); + if (footprint.brim_width < 0) + footprint.brim_width = WipeTower::get_auto_brim_by_height(float(max_object_height)); + return footprint; +} + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTowerEstimate.hpp b/src/libslic3r/GCode/WipeTowerEstimate.hpp new file mode 100644 index 0000000000..911ca9560c --- /dev/null +++ b/src/libslic3r/GCode/WipeTowerEstimate.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include + +namespace Slic3r { + +class ConfigBase; + +// Pre-slice footprint of the wipe tower, shared by validation (Print), the GUI's placement +// clamp/preview/arrange and the CLI placement. The arithmetic is shared; the inputs below are +// not, so a change to how one caller derives them has to be mirrored in the others. +struct WipeTowerFootprint +{ + double width = 0.; // effective width: equals depth for a rib wall, which squares the tower + double depth = 0.; // 0 when these inputs imply no tower + double height = 0.; // tallest object; drives the stability floor and the auto brim + double brim_width = 0.; // configured width, auto (-1) resolved by height +}; + +// filaments_cnt: filaments purged on the plate. The config cannot see custom G-code tool +// changes, so a count derived from the model must include them +// (Print::extruders(true)) or a real tower is sized as if it were never built. +// layer_height: thinnest layer the tower will be planned at. +// any_raft: any object on the plate prints a raft, which puts the tower on every layer +// below it. Caller-resolved: raft_layers is a PrintObjectConfig key, absent +// from Print's config and overridable per object. +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height, bool any_raft); + +} // namespace Slic3r diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index aee50db534..7d362537ea 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -20,6 +20,7 @@ #include "GCode.hpp" #include "GCode/WipeTower.hpp" #include "GCode/WipeTower2.hpp" +#include "GCode/WipeTowerEstimate.hpp" #include "Utils.hpp" #include "PrintConfig.hpp" #include "MaterialType.hpp" @@ -1031,20 +1032,20 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, //BBS: add the wipe tower check logic const PrintConfig & config = print.config(); - int filaments_count = print.extruders().size(); + // Custom G-code tool changes (MultiAsSingle) build a real tower on a plate whose objects + // all use one filament, so they have to be counted or the hull below collapses to a point. + int filaments_count = print.extruders(true).size(); int plate_index = print.get_plate_index(); const Vec3d plate_origin = print.get_plate_origin(); float x = config.wipe_tower_x.get_at(plate_index) + plate_origin(0); float y = config.wipe_tower_y.get_at(plate_index) + plate_origin(1); - float width = config.prime_tower_width.value; float a = config.wipe_tower_rotation_angle.value; //float v = config.wiping_volume.value; - float depth = print.wipe_tower_data(filaments_count).depth; - //float brim_width = print.wipe_tower_data(filaments_count).brim_width; - - if (config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) - width = depth; + // The estimate resolves the effective width (a rib wall squares the tower). + const WipeTowerData &wipe_tower_estimate = print.wipe_tower_data(filaments_count); + float width = wipe_tower_estimate.width; + float depth = wipe_tower_estimate.depth; Polygons convex_hulls_temp; if (print.has_wipe_tower()) { @@ -3997,74 +3998,27 @@ bool Print::has_wipe_tower() const const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const { - // If the wipe tower wasn't created yet, make sure the depth and brim_width members are set to default. - double max_height = 0; - for (size_t obj_idx = 0; obj_idx < m_objects.size(); obj_idx++) { - double object_z = (double) m_objects[obj_idx]->size().z(); - max_height = std::max(unscale_(object_z), max_height); + // Until the tower is generated, size it with the estimate the GUI/CLI placement uses, so + // validation cannot reject a position the clamp just accepted. + if (is_step_done(psWipeTower) || filaments_cnt == 0) + return m_wipe_tower_data; + + double max_height = 0.; + double layer_height = std::numeric_limits::max(); + bool any_raft = false; + for (const PrintObject *object : m_objects) { + max_height = std::max(max_height, unscale_(double(object->size().z()))); + layer_height = std::min(layer_height, object->config().layer_height.value); + any_raft = any_raft || object->config().raft_layers.value > 0; } - if (max_height < EPSILON) return m_wipe_tower_data; + if (max_height < EPSILON) + return m_wipe_tower_data; - double layer_height = 0.08f; // hard code layer height - layer_height = m_objects.front()->config().layer_height.value; - - auto timelapse_type = config().option>("timelapse_type"); - bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib); - double extra_spacing = config().option("prime_tower_infill_gap")->getFloat() / 100.; - double rib_width = config().option("wipe_tower_rib_width")->getFloat(); - - double filament_change_volume = 0.; - { - std::vector filament_change_lengths; - auto filament_change_lengths_opt = config().option("filament_change_length"); - if (filament_change_lengths_opt) filament_change_lengths = filament_change_lengths_opt->values; - double length = filament_change_lengths.empty() ? 0 : *std::max_element(filament_change_lengths.begin(), filament_change_lengths.end()); - double diameter = 1.75; - std::vector diameters; - auto filament_diameter_opt = config().option("filament_diameter"); - if (filament_diameter_opt) diameters = filament_diameter_opt->values; - diameter = diameters.empty() ? diameter : *std::max_element(diameters.begin(), diameters.end()); - filament_change_volume = length * PI * diameter * diameter / 4.; - } - - - if (! is_step_done(psWipeTower) && filaments_cnt !=0) { - double wipe_volume = m_config.prime_volume; - int filament_depth_count = m_config.nozzle_diameter.values.size() == 2 ? filaments_cnt : filaments_cnt - 1; - if (filaments_cnt == 1 && enable_timelapse_print()) filament_depth_count = 1; - double volume = wipe_volume * filament_depth_count; - if (m_config.nozzle_diameter.values.size() == 2) volume += filament_change_volume * (int) (filaments_cnt / 2); - - // Sizing should take into account currently set wiping volumes. - // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) - // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. - const bool semm_flush = m_config.purge_in_prime_tower && m_config.single_extruder_multi_material; - if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(m_config, filaments_cnt); - - if (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) { - double depth = std::sqrt(volume / layer_height * extra_spacing); - if (need_wipe_tower || filaments_cnt > 1) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double) min_wipe_tower_depth, depth); - depth += rib_width / std::sqrt(2) + config().wipe_tower_extra_rib_length.value; - const_cast(this)->m_wipe_tower_data.depth = depth; - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - } - } - else { - double width = m_config.prime_tower_width; - double depth = volume / (layer_height * width); - // The flush volumes already hold the spacing between wipes. - if (!semm_flush) depth *= extra_spacing; - if (need_wipe_tower || depth > EPSILON) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double) min_wipe_tower_depth, depth); - } - const_cast(this)->m_wipe_tower_data.depth = depth; - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - } - if (m_config.prime_tower_brim_width < 0) const_cast(this)->m_wipe_tower_data.brim_width = WipeTower::get_auto_brim_by_height(max_height); - } + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, filaments_cnt, layer_height, max_height, any_raft); + WipeTowerData &data = const_cast(this)->m_wipe_tower_data; + data.depth = float(footprint.depth); + data.width = float(footprint.width); + data.brim_width = float(footprint.brim_width); return m_wipe_tower_data; } diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 9e20061501..964deb7a60 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -782,6 +782,9 @@ struct WipeTowerData // Depth of the wipe tower to pass to GLCanvas3D for exact bounding box: float depth; + // Effective width (a rib wall squares the tower). Pre-generation estimate only; once the + // tower exists its mesh is exact. + float width; std::vector> z_and_depth_pairs; float brim_width; float height; @@ -795,6 +798,7 @@ struct WipeTowerData used_filament.clear(); number_of_toolchanges = -1; depth = 0.f; + width = 0.f; brim_width = 0.f; height = 0.f; rib_offset = Vec2f::Zero(); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6cdc27ed65..e1f47061c1 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2891,20 +2891,18 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_id); float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); - float w = dynamic_cast(m_config->option("prime_tower_width"))->value; float a = dynamic_cast(m_config->option("wipe_tower_rotation_angle"))->value; - // BBS - float v = dynamic_cast(m_config->option("prime_volume"))->value; Vec3d plate_origin = ppl.get_plate(plate_id)->get_origin(); - const Print* print = m_process->fff_print(); const Print* current_print = part_plate->fff_print(); if (!need_wipe_tower && part_plate->get_extruders(true).size() < 2) continue; if (part_plate->get_objects_on_this_plate().empty()) continue; - float brim_width = print->wipe_tower_data(filaments_count).brim_width; - int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 0, false, dynamic_cast(dconfig.option("enable_wrapping_detection"))->value); + // Body and brim from this plate's own estimate: m_process->fff_print() is the + // selected plate's, so an auto brim drew every tower with that plate's brim. + const WipeTowerFootprint footprint = part_plate->estimate_wipe_tower_footprint(full_config); + float brim_width = float(footprint.brim_width); + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); // The stored position is already clamped onto the bed, by // set_default_wipe_tower_pos_for_plate and again on every drag. diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 6b74b71af1..c0cc7bdb5a 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -265,8 +265,7 @@ arrangement::ArrangePolygon estimate_wipe_tower_info(int plate_index, std::setget_printer_extruder_count(); - auto arrange_poly = ppl.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(full_config, plate_index, wipe_tower_pos, wipe_tower_size, nozzle_nums, extruder_size); + auto arrange_poly = ppl.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(full_config, plate_index, wipe_tower_pos, wipe_tower_size, extruder_size); arrange_poly.bed_idx = plate_index; return arrange_poly; } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 849aa4e31a..3f56e9a8de 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -20,6 +20,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Polygon.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/BoundingBox.hpp" #include "libslic3r/Geometry.hpp" @@ -1531,8 +1532,15 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const if (check_objects_empty_and_gcode3mf(plate_extruders)) { return plate_extruders; } - // if 3mf file - const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + return get_extruders(conside_custom_gcode, wxGetApp().preset_bundle->prints.get_edited_preset().config, wxGetApp().preset_bundle->project_config); +} + +// The plate's filaments, with the global keys read from the given configs rather than the +// application's presets: the wipe tower estimate is also called under the CLI, which has no +// application object. get_extruders(bool) passes the edited presets; a full config serves both. +std::vector PartPlate::get_extruders(bool conside_custom_gcode, const DynamicPrintConfig& glb_config, const DynamicPrintConfig& project_config) const +{ + std::vector plate_extruders; int glb_support_intf_extr = glb_config.opt_int("support_interface_filament"); int glb_support_extr = glb_config.opt_int("support_filament"); int glb_outer_wall_extr = glb_config.opt_int("outer_wall_filament_id"); @@ -1549,7 +1557,9 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const glb_support |= glb_config.opt_int("raft_layers") > 0; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!contain_instance_totally(obj_idx, 0)) + // Any instance on the plate counts, as PrintApply does: after an arrange, instance 0 + // can sit on a different plate. + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject* mo = m_model->objects[obj_idx]; @@ -1662,7 +1672,7 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const if (conside_custom_gcode) { //BBS int nums_extruders = 0; - if (const ConfigOptionStrings *color_option = dynamic_cast(wxGetApp().preset_bundle->project_config.option("filament_colour"))) { + if (const ConfigOptionStrings *color_option = dynamic_cast(project_config.option("filament_colour"))) { nums_extruders = color_option->values.size(); if (m_model->plates_custom_gcodes.find(m_plate_index) != m_model->plates_custom_gcodes.end()) { for (auto item : m_model->plates_custom_gcodes.at(m_plate_index).gcodes) { @@ -1681,9 +1691,8 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const // is never loaded into a tray, so callers (AMS mapping, filament checks) must see the // physical filaments it resolves to instead. { - auto& project_config = wxGetApp().preset_bundle->project_config; - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* comp_strs_opt = project_config.option("filament_mixed_components"); + const auto* is_mixed_opt = project_config.option("filament_is_mixed"); + const auto* comp_strs_opt = project_config.option("filament_mixed_components"); if (is_mixed_opt && comp_strs_opt && has_any_mixed_filament(is_mixed_opt->values)) { std::vector ext_0based; for (int e : plate_extruders) @@ -2311,113 +2320,86 @@ bool PartPlate::check_compatible_of_nozzle_and_filament(const DynamicPrintConfig return wipe_tower_size; }*/ -Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double wipe_volume, int extruder_count, int plate_extruder_size, bool use_global_objects, bool enable_wrapping_detection) const +WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintConfig &config, int plate_extruder_size, bool use_global_objects) const { - Vec3d wipe_tower_size; - double layer_height = 0.08f; // hard code layer height - double max_height = 0.f; - wipe_tower_size.setZero(); - - const ConfigOption* layer_height_opt = config.option("layer_height"); - if (layer_height_opt) - layer_height = layer_height_opt->getFloat(); - - // empty plate - if (plate_extruder_size == 0) - { - std::vector plate_extruders = get_extruders(true); - plate_extruder_size = plate_extruders.size(); + // The CLI calls this too, so the plate's filaments are derived from the passed config: + // get_extruders(bool) reads the same keys off wxGetApp()'s presets, which the CLI has none of. + std::vector plate_extruders; + if (plate_extruder_size == 0) { + plate_extruders = get_extruders(true, config, config); + plate_extruder_size = int(plate_extruders.size()); + } + // The wipe tower filament joins the tool ordering even when unused (Print::extruders), so + // validation counts it. An explicit count is the plate's painted filaments, which never do. + const ConfigOption *wipe_tower_filament_opt = config.option("wipe_tower_filament"); + const int wipe_tower_filament = wipe_tower_filament_opt != nullptr ? wipe_tower_filament_opt->getInt() : 0; + if (plate_extruder_size > 1 && wipe_tower_filament > 0) { + if (plate_extruders.empty()) + plate_extruders = get_extruders(true, config, config); + if (std::find(plate_extruders.begin(), plate_extruders.end(), wipe_tower_filament) == plate_extruders.end()) + ++plate_extruder_size; } if (plate_extruder_size == 0) - return wipe_tower_size; + return WipeTowerFootprint(); - for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!use_global_objects && !contain_instance_totally(obj_idx, 0)) + // Tallest object on this plate and the thinnest layer it is sliced at, resolved per object + // as PrintObject resolves them (override, else preset) and over this plate's objects only - + // seeding from the global value, or folding in an off-plate override, diverges from Print. + const ConfigOption *layer_height_opt = config.option("layer_height"); + const double global_layer_height = layer_height_opt != nullptr ? layer_height_opt->getFloat() : 0.08; + const ConfigOption *raft_layers_opt = config.option("raft_layers"); + const int global_raft_layers = raft_layers_opt != nullptr ? raft_layers_opt->getInt() : 0; + double max_height = 0.; + double layer_height = std::numeric_limits::max(); + bool any_raft = false; + for (int obj_idx = 0; obj_idx < int(m_model->objects.size()); ++obj_idx) { + const ModelObject *object = m_model->objects[obj_idx]; + if (!use_global_objects && !contain_any_instance_totally(obj_idx)) continue; - - BoundingBoxf3 bbox = m_model->objects[obj_idx]->bounding_box_exact(); - max_height = std::max(bbox.size().z(), max_height); - } - wipe_tower_size(2) = max_height; - //const DynamicPrintConfig &dconfig = wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto timelapse_type = config.option>("timelapse_type"); - bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | enable_wrapping_detection; - double extra_spacing = config.option("prime_tower_infill_gap")->getFloat() / 100.; - const ConfigOptionEnum* use_rib_wall_opt = config.option>("wipe_tower_wall_type"); - bool use_rib_wall = use_rib_wall_opt ? use_rib_wall_opt->value == WipeTowerWallType::wtwRib: false; - double rib_width = config.option("wipe_tower_rib_width")->getFloat(); - double depth; - double filament_change_volume=0.; - { - std::vector filament_change_lengths; - auto filament_change_lengths_opt = m_print->config().option("filament_change_length"); - if (filament_change_lengths_opt) filament_change_lengths = filament_change_lengths_opt->values; - double length = filament_change_lengths.empty() ? 0 : *std::max_element(filament_change_lengths.begin(), filament_change_lengths.end()); - double diameter = 1.75; - std::vector diameters; - auto filament_diameter_opt = m_print->config().option("filament_diameter"); - if (filament_diameter_opt) diameters = filament_diameter_opt->values; - diameter = diameters.empty() ? diameter : *std::max_element(diameters.begin(), diameters.end()); - filament_change_volume = length * PI * diameter * diameter / 4.; - } - double volume = wipe_volume * (extruder_count == 2 ? plate_extruder_size : (plate_extruder_size - 1)); - if (extruder_count == 2) volume += filament_change_volume * (int) (plate_extruder_size / 2); - // Read from the passed plate config — m_print may not have been applied yet - // (fresh plates, CLI), in which case its PrintConfig still holds defaults. - const auto *purge_opt = config.option("purge_in_prime_tower"); - const auto *semm_opt = config.option("single_extruder_multi_material"); - const bool semm_flush = purge_opt && purge_opt->value && semm_opt && semm_opt->value; - if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(config, plate_extruder_size); - if (use_rib_wall) { - depth = std::sqrt(volume / layer_height * extra_spacing); - if (need_wipe_tower || plate_extruder_size > 1) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - double volume_depth = depth; - depth = std::max((double) min_wipe_tower_depth, depth); - rib_width = std::min(rib_width, depth / 2); - depth = rib_width / std::sqrt(2) + std::max(depth + m_print->config().wipe_tower_extra_rib_length.value, volume_depth); - wipe_tower_size(0) = wipe_tower_size(1) = depth; + // Per instance, to match PrintObject::size(); the union over instances differs once + // they are rotated apart. + for (int inst_idx = 0; inst_idx < int(object->instances.size()); ++inst_idx) { + if (!use_global_objects && !contain_instance_totally(obj_idx, inst_idx)) + continue; + max_height = std::max(max_height, object->instance_bounding_box(inst_idx, true).size().z()); } + const ConfigOption *object_layer_height = object->config.option("layer_height"); + layer_height = std::min(layer_height, object_layer_height != nullptr ? object_layer_height->getFloat() : global_layer_height); + const ConfigOption *object_raft_layers = object->config.option("raft_layers"); + any_raft = any_raft || (object_raft_layers != nullptr ? object_raft_layers->getInt() : global_raft_layers) > 0; } - else { - depth = volume / (layer_height * w); - // The flush volumes already hold the spacing between wipes. - if (!semm_flush) depth *= extra_spacing; - if (need_wipe_tower || depth > EPSILON) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double)min_wipe_tower_depth, depth); - } - wipe_tower_size(0) = w; - wipe_tower_size(1) = depth; - } + if (layer_height == std::numeric_limits::max()) + layer_height = global_layer_height; - return wipe_tower_size; + return Slic3r::estimate_wipe_tower_footprint(config, size_t(plate_extruder_size), layer_height, max_height, any_raft); } -arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int extruder_count, int plate_extruder_size, bool use_global_objects) const +Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig &config, int plate_extruder_size, bool use_global_objects) const +{ + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(config, plate_extruder_size, use_global_objects); + return Vec3d(footprint.width, footprint.depth, footprint.height); +} + +arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size, bool use_global_objects) const { float x = dynamic_cast(config.option("wipe_tower_x"))->get_at(plate_index); float y = dynamic_cast(config.option("wipe_tower_y"))->get_at(plate_index); - float w = dynamic_cast(config.option("prime_tower_width"))->value; //float a = dynamic_cast(config.option("wipe_tower_rotation_angle"))->value; - float v = dynamic_cast(config.option("prime_volume"))->value; - float tower_brim_width = dynamic_cast(config.option("prime_tower_brim_width"))->value; - const ConfigOptionBool * wrapping_opt = dynamic_cast(config.option("enable_wrapping_detection")); - bool enable_wrapping = (wrapping_opt != nullptr) && wrapping_opt->value; - wt_size = estimate_wipe_tower_size(config, w, v, extruder_count, plate_extruder_size, use_global_objects, enable_wrapping); + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(config, plate_extruder_size, use_global_objects); + wt_size = Vec3d(footprint.width, footprint.depth, footprint.height); int plate_width=m_width, plate_depth=m_depth; - w = wt_size(0); // effective width; differs from prime_tower_width when the rib wall squares the tower + float w = wt_size(0); // effective width; differs from prime_tower_width when the rib wall squares the tower float depth = wt_size(1); - float margin = WIPE_TOWER_MARGIN + tower_brim_width, wp_brim_width = 0.f; - const ConfigOption* wipe_tower_brim_width_opt = config.option("prime_tower_brim_width"); - if (wipe_tower_brim_width_opt) { - wp_brim_width = wipe_tower_brim_width_opt->getFloat(); - if (wp_brim_width < 0) wp_brim_width = WipeTower::get_auto_brim_by_height((float) wt_size.z()); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; - } + // Resolved brim, not the raw option: "Auto" (-1) would yield a margin of 0 and let the + // clamp put the brim off the bed. Matches set_default_wipe_tower_pos_for_plate. + const float wp_brim_width = float(footprint.brim_width); + const float margin = WIPE_TOWER_MARGIN + wp_brim_width; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; - x = std::clamp(x, margin, (float)plate_width - w - margin - wp_brim_width); - y = std::clamp(y, margin, (float)plate_depth - depth - margin - wp_brim_width); + // A tower too deep for the plate leaves no valid position: clamping with hi < lo is UB and + // in release silently returns the negative hi. + x = std::clamp(x, margin, std::max(margin, (float)plate_width - w - margin)); + y = std::clamp(y, margin, std::max(margin, (float)plate_depth - depth - margin)); wt_pos(0) = x; wt_pos(1) = y; wt_pos(2) = 0.f; @@ -2755,6 +2737,20 @@ bool PartPlate::contain_instance_totally(int obj_id, int instance_id) const return result; } +//judge whether any of the object's instances is totally included in plate or not +bool PartPlate::contain_any_instance_totally(int obj_id) const +{ + if (obj_id < 0 || obj_id >= int(m_model->objects.size())) + return false; + + const ModelObject *object = m_model->objects[obj_id]; + for (int instance_id = 0; instance_id < int(object->instances.size()); ++instance_id) + if (contain_instance_totally(obj_id, instance_id)) + return true; + + return false; +} + //check whether instance is outside the plate or not bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* bounding_box) { @@ -4488,26 +4484,16 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini f_volume_maps = wxGetApp().preset_bundle->get_default_nozzle_volume_types_for_filaments(filament_maps); } DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(false, filament_maps, f_volume_maps); - float w = dynamic_cast(full_config.option("prime_tower_width"))->value; - float v = dynamic_cast(full_config.option("prime_volume"))->value; - bool enable_wrapping = false; - const ConfigOptionBool *wrapping_opt = dynamic_cast(full_config.option("enable_wrapping_detection")); - if (wrapping_opt) enable_wrapping = wrapping_opt->value; - int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, init_pos ? 2 : 0, false, enable_wrapping); + WipeTowerFootprint footprint = part_plate->estimate_wipe_tower_footprint(full_config, init_pos ? 2 : 0); - if (!init_pos && (is_approx(wipe_tower_size(0), 0.0) || is_approx(wipe_tower_size(1), 0.0))) { - wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 2, false, enable_wrapping); + if (!init_pos && (is_approx(footprint.width, 0.0) || is_approx(footprint.depth, 0.0))) { + footprint = part_plate->estimate_wipe_tower_footprint(full_config, 2); } + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); - // Compute brim-aware margin: brim extends outward from tower position - float brim_width = 0.f; - const ConfigOptionFloat *brim_opt = full_config.option("prime_tower_brim_width"); - if (brim_opt) { - brim_width = brim_opt->value; - if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); - } - const float margin = WIPE_TOWER_MARGIN + brim_width; + // Brim-aware margin: the brim extends outward from the tower position. + const float brim_width = float(footprint.brim_width); + const float margin = WIPE_TOWER_MARGIN + brim_width; // clamp wipe tower position within plate boundaries { diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 8ad2f4a7d1..1cd45f77fd 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -11,6 +11,7 @@ #include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/Slicing.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/Arrange.hpp" #include "Plater.hpp" #include "libslic3r/Model.hpp" @@ -339,11 +340,14 @@ public: Vec3d get_origin() { return m_origin; } //Vec3d calculate_wipe_tower_size(const DynamicPrintConfig &config, const double w, const double wipe_volume, int plate_extruder_size = 0, bool use_global_objects = false) const; - Vec3d estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double wipe_volume, int extruder_count = 1, int plate_extruder_size = 0, bool use_global_objects = false, bool enable_wrapping_detection = false) const; - arrangement::ArrangePolygon estimate_wipe_tower_polygon(const DynamicPrintConfig & config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int extruder_count = 1, int plate_extruder_size = 0, bool use_global_objects = false) const; + // plate_extruder_size: filaments purged on the plate; 0 derives it from the plate's objects. + WipeTowerFootprint estimate_wipe_tower_footprint(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; + Vec3d estimate_wipe_tower_size(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; + arrangement::ArrangePolygon estimate_wipe_tower_polygon(const DynamicPrintConfig & config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size = 0, bool use_global_objects = false) const; bool check_objects_empty_and_gcode3mf(std::vector &result) const; // get used filaments from config, 1 based idx std::vector get_extruders(bool conside_custom_gcode = false) const; + std::vector get_extruders(bool conside_custom_gcode, const DynamicPrintConfig& glb_config, const DynamicPrintConfig& project_config) const; std::vector get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config) const; std::vector get_extruders_without_support(bool conside_custom_gcode = false) const; // get used filaments from gcode result, 1 based idx @@ -366,6 +370,8 @@ public: bool contain_instance_totally(ModelObject* object, int instance_id) const; //judge whether instance is totally included in plate or not bool contain_instance_totally(int obj_id, int instance_id) const; + //judge whether any of the object's instances is totally included in plate or not + bool contain_any_instance_totally(int obj_id) const; //judge whether the plate's origin is at the left of instance or not bool is_left_top_of(int obj_id, int instance_id); diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index 2bd7ac4189..d5f56d3f6c 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -182,3 +182,86 @@ TEST_CASE("The wipe tower's toolchange planner flush follows the gcode flavor", CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring(unexpected)); } } + +// What Print feeds the shared estimate. The libslic3r WipeTowerEstimate cases cannot see this: +// they call the estimator directly. +static DynamicPrintConfig tower_estimate_config(const char *wall_type) +{ + // 100 mm3 per purge on a 50 mm wide tower: one purge is 100/(layer_height * 50) of depth. + return multifilament_config(2, { + { "enable_prime_tower", "1" }, + { "wipe_tower_wall_type", wall_type }, + { "prime_tower_width", "50" }, + { "prime_volume", "100" }, + { "prime_tower_infill_gap", "100%" }, + { "prime_tower_brim_width", "3" }, + { "purge_in_prime_tower", "0" }, + { "single_extruder_multi_material", "0" }, + { "timelapse_type", "0" }, + { "layer_height", "0.2" }, + { "raft_layers", "0" } }); +} + +TEST_CASE("The tower is sized for the thinnest layer any object on the plate is sliced at", "[WipeTower]") +{ + // The tower has to survive its thinnest layer, so an override finer than the preset drives + // the estimate even on the second object. Two 20 mm cubes, the second at 0.1 mm. + const DynamicPrintConfig config = tower_estimate_config("rectangle"); + const std::vector> overrides = { + {}, { { "layer_height", "0.1" } } }; + + Print print; + Model model; + init_print({ cube(20), cube(20) }, print, model, config, &overrides); + + // One purge at 0.1 mm: 100 / (0.1 * 50) = 20 mm, above the 20 mm-tall tower's stability + // floor. At the preset's 0.2 mm it would be half that, so the two are easy to tell apart. + const float floor_20mm = WipeTower::get_limit_depth_by_height(20.f); + REQUIRE(floor_20mm < 10.f); + CHECK_THAT(print.wipe_tower_data(2).depth, Catch::Matchers::WithinAbs(20., 1e-4)); +} + +TEST_CASE("Validation is given the tower's effective width, not the configured one", "[WipeTower]") +{ + // A rib wall squares the tower, so its width is its depth. Validation reads this rather + // than re-deriving the rule from the wall type. + Print print; + Model model; + + SECTION("a rectangle wall keeps the configured width") { + const DynamicPrintConfig config = tower_estimate_config("rectangle"); + init_print({ cube(20) }, print, model, config); + const WipeTowerData &data = print.wipe_tower_data(2); + CHECK_THAT(data.width, Catch::Matchers::WithinAbs(50., 1e-4)); + CHECK(data.depth < data.width); + } + + SECTION("a rib wall reports the squared footprint") { + const DynamicPrintConfig config = tower_estimate_config("rib"); + init_print({ cube(20) }, print, model, config); + const WipeTowerData &data = print.wipe_tower_data(2); + CHECK_THAT(data.width, Catch::Matchers::WithinAbs(data.depth, 1e-4)); + CHECK(data.width > 0.f); + } +} + +TEST_CASE("A single-filament plate reserves a tower only when one is actually printed", "[WipeTower]") +{ + // Reporting no tower for one that is built collapses the validation hull to a point, so + // the config-visible reasons for a single-filament tower have to be honoured. + Print print; + Model model; + + SECTION("no tool change and nothing else that prints one") { + const DynamicPrintConfig config = tower_estimate_config("rib"); + init_print({ cube(20) }, print, model, config); + CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); + } + + SECTION("a raft puts the tower on every layer below the object") { + DynamicPrintConfig config = tower_estimate_config("rib"); + config.set_deserialize_strict({ { "raft_layers", "3" } }); + init_print({ cube(20) }, print, model, config); + CHECK(print.wipe_tower_data(1).depth > 0.f); + } +} diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 0d29ea11ae..dc8508743e 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -40,6 +40,7 @@ add_executable(${_TEST_NAME}_tests test_utils.cpp test_timeutils.cpp test_voronoi.cpp + test_wipe_tower_estimate.cpp test_optimizers.cpp test_ordering_strategies.cpp # test_png_io.cpp diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp new file mode 100644 index 0000000000..753d872f29 --- /dev/null +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -0,0 +1,206 @@ +#include + +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include +#include + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +// Rectangle wall, one nozzle, 100 mm3 prime volume on a 50 mm wide tower at 0.2 mm layers: one +// purge is 10 mm of depth. The flush matrix is off here; the shipped-default case covers it. +// Built as PresetBundle::full_config builds the GUI's: apply() creates each enum as a +// ConfigOptionEnumGeneric, where full_print_config() would clone the static defaults' +// ConfigOptionEnum. The estimate has to read either. +static DynamicPrintConfig preset_shaped_defaults() +{ + DynamicPrintConfig config; + config.apply(FullPrintConfig::defaults()); + return config; +} + +static DynamicPrintConfig make_config(const char *wall_type = "rectangle") +{ + DynamicPrintConfig config = preset_shaped_defaults(); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(50.)); + config.set_key_value("prime_volume", new ConfigOptionFloat(100.)); + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(100.)); + config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(3.)); + config.set_deserialize_strict("wipe_tower_wall_type", wall_type); + config.set_key_value("wipe_tower_rib_width", new ConfigOptionFloat(8.)); + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4})); + config.set_deserialize_strict("timelapse_type", "0"); + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); + config.set_key_value("raft_layers", new ConfigOptionInt(0)); + config.set_key_value("purge_in_prime_tower", new ConfigOptionBool(false)); + config.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); + return config; +} + +TEST_CASE("A rectangle wall tower is sized by the purge volume", "[WipeTowerEstimate]") { + const DynamicPrintConfig config = make_config(); + // Three filaments purge twice per layer; a 5 mm object keeps the stability floor at 5 mm. + const WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5., false); + CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); + CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); + CHECK_THAT(fp.height, WithinAbs(5., 1e-9)); + CHECK_THAT(fp.brim_width, WithinAbs(3., 1e-9)); + // Thinner layers need more depth for the same volume. + CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.1, 5., false).depth, WithinAbs(40., 1e-9)); + // The infill gap spaces the purge lines. + DynamicPrintConfig spaced = config; + spaced.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); + CHECK_THAT(estimate_wipe_tower_footprint(spaced, 3, 0.2, 5., false).depth, WithinAbs(30., 1e-9)); +} + +TEST_CASE("Object height sets the stability floor and the auto brim", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + // Two filaments purge once: 10 mm, lifted to the 20 mm floor of a 100 mm tower. + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); + config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(-1.)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 50., false).brim_width, WithinAbs(WipeTower::get_auto_brim_by_height(50.f), 1e-6)); +} + +TEST_CASE("A single filament only gets a tower when one is printed anyway", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 0, 0.2, 100., false).width, WithinAbs(0., 1e-9)); + + // Wrapping detection prints a tower on the first layers whatever the filament count. + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(true)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); + + // So does a raft. raft_layers is a per-object key, so it arrives as a resolved flag and + // is deliberately not read off the config. + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., true).depth, WithinAbs(20., 1e-9)); + config.set_key_value("raft_layers", new ConfigOptionInt(3)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(0., 1e-9)); + config.set_key_value("raft_layers", new ConfigOptionInt(0)); + + config.set_deserialize_strict("timelapse_type", "1"); + // Smooth timelapse primes the single filament once: 10 mm, lifted to the floor. + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 5., false).depth, WithinAbs(10., 1e-9)); +} + +TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowerEstimate]") { + // A wall type may only change the shape of the tower, never whether one is reserved: + // reporting no tower for one that is built collapses the validation hull to a point. + const double height = GENERATE(5., 100.); + DynamicPrintConfig rect = make_config(); + DynamicPrintConfig rib = make_config("rib"); + + // No tool change and nothing else that prints a tower - neither wall type reserves one. + CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + + // Not even on a dual-nozzle printer, where a lone filament still needs no purge. + rect.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + rib.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + + // With a tool change both reserve one, and both respect the stability floor. + CHECK(estimate_wipe_tower_footprint(rect, 2, 0.2, height, false).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate_wipe_tower_footprint(rib, 2, 0.2, height, false).depth >= WipeTower::get_limit_depth_by_height(float(height))); +} + +TEST_CASE("A rib wall squares the tower and caps the rib width", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config("rib"); + // sqrt(200 / 0.2) = 31.62 mm square, plus the 8 mm rib bulge along the diagonal. + const double body = std::sqrt(1000.); + WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5., false); + CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + body, 1e-9)); + CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); + // The extra rib length grows the footprint. + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(4.)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.2, 5., false).depth, WithinAbs(8. / std::sqrt(2.) + body + 4., 1e-9)); + // A tiny tower caps the rib width at half its depth: 5 mm body, 2.5 mm rib. + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); + config.set_key_value("prime_volume", new ConfigOptionFloat(5.)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-9)); +} + +TEST_CASE("Every wall and tower type is read the same from a preset and a static config", "[WipeTowerEstimate]") { + // The GUI, arrange and the CLI pass a DynamicPrintConfig whose enums are + // ConfigOptionEnumGeneric; Print passes a static config whose enums are ConfigOptionEnum. + // The wall type is read by value, so both give the same shape, and the wipe tower + // implementation is not an input to the footprint at all. + const char *wall_type = GENERATE("rectangle", "cone", "rib"); + const char *tower_type = GENERATE("type1", "type2"); + DynamicPrintConfig preset = make_config(wall_type); + preset.set_deserialize_strict("wipe_tower_type", tower_type); + REQUIRE(dynamic_cast(preset.option("wipe_tower_wall_type")) != nullptr); + + FullPrintConfig static_config; + static_config.apply(preset, true); + REQUIRE(static_config.wipe_tower_wall_type.serialize() == wall_type); + REQUIRE(static_config.wipe_tower_type.serialize() == tower_type); + + // Three filaments purge twice per layer on a 5 mm object: a 50 x 20 rectangle, or a square. + const WipeTowerFootprint fp = estimate_wipe_tower_footprint(preset, 3, 0.2, 5., false); + if (std::string(wall_type) == "rib") { + CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); + CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + std::sqrt(1000.), 1e-9)); + } else { + CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); + CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); + } + + const WipeTowerFootprint from_static = estimate_wipe_tower_footprint(static_config, 3, 0.2, 5., false); + CHECK_THAT(from_static.width, WithinAbs(fp.width, 1e-9)); + CHECK_THAT(from_static.depth, WithinAbs(fp.depth, 1e-9)); + CHECK_THAT(from_static.brim_width, WithinAbs(fp.brim_width, 1e-9)); + + // Smooth timelapse is the other enum the estimate reads: a lone filament gets a tower + // through both storages too. + preset.set_deserialize_strict("timelapse_type", "1"); + static_config.apply(preset, true); + CHECK(estimate_wipe_tower_footprint(preset, 1, 0.2, 5., false).depth > 0.); + CHECK(estimate_wipe_tower_footprint(static_config, 1, 0.2, 5., false).depth > 0.); +} + +TEST_CASE("A dual nozzle purges every filament plus the filament change", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + config.set_key_value("filament_change_length", new ConfigOptionFloats({10., 10.})); + config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); + // Two purges of 100 mm3 plus one 10 mm filament change: (200 + 10 * pi * 1.75^2 / 4) / (0.2 * 50). + const double change_volume = 10. * PI * 1.75 * 1.75 / 4.; + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); +} + +TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTowerEstimate]") { + // Both keys default to true, so the shipped configuration purges the flush volumes rather + // than the prime volume, with no infill gap on top - the flush volumes already hold it. + DynamicPrintConfig config = preset_shaped_defaults(); + REQUIRE(config.opt_bool("purge_in_prime_tower")); + REQUIRE(config.opt_bool("single_extruder_multi_material")); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(50.)); + config.set_deserialize_strict("wipe_tower_wall_type", "rectangle"); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4})); + + const double flush_volume = WipeTower2::estimate_semm_flush_volume(config, 2); + const double expected = std::max(double(WipeTower::get_limit_depth_by_height(5.f)), flush_volume / (0.2 * 50.)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs(expected, 1e-6)); +} + +TEST_CASE("A config missing a tower key falls back to that key's default", "[WipeTowerEstimate]") { + // The signature takes any ConfigBase: an absent key must read as its declared default. + const DynamicPrintConfig full = make_config(); + DynamicPrintConfig partial = full; + partial.erase("prime_tower_infill_gap"); + REQUIRE(partial.option("prime_tower_infill_gap") == nullptr); + + DynamicPrintConfig defaulted = full; + defaulted.set_key_value("prime_tower_infill_gap", + print_config_def.get("prime_tower_infill_gap")->default_value->clone()); + CHECK_THAT(estimate_wipe_tower_footprint(partial, 3, 0.2, 5., false).depth, + WithinAbs(estimate_wipe_tower_footprint(defaulted, 3, 0.2, 5., false).depth, 1e-9)); +} From e1efec7d6ce537c2408fd6ada5aefac7a909a685 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Tue, 8 Sep 2026 14:43:23 +0800 Subject: [PATCH 146/208] Fix review findings in the shared wipe tower estimate A raft is not a reason to reserve a tower. Print::apply runs normalize_fdm_2, which clears enable_prime_tower for a plate that purges one filament unless smooth timelapse or wrapping detection is on, so a single-filament plate with a raft prints no tower at all and the estimate was reserving bed area for one. Drop the input; need_wipe_tower is now exactly the two exceptions normalize_fdm_2 honours, named there so the next reason added has to be checked against it. The GUI preview and the validation containment check each re-derived "is a tower printed here" from the filament count instead of reading the estimate, so both missed the towers printed with no tool change to purge for. They now take the answer from the footprint, which is the drift this shared estimate exists to remove. A tower that is not printed estimates to zero, so its hull is degenerate and every check on it passes trivially - the containment check needs no gate of its own. WipeTowerData::width was written only by the pre-generation estimate and left at zero for the whole post-generation life of the Print, while its neighbour depth held the real value. Set it from the generator in both branches. The plate's height scan transformed every model part's full mesh per instance on each scene reload, discarding all but the z extent. The cached convex hull has the same z extent. A plate loaded from a sliced .gcode.3mf holds no objects and its filaments live in slice_filaments_info; the config-taking get_extruders overload returned an empty list for it, which sized the tower for a placeholder two filaments. It now answers the way the wx overload does, without reaching the plater. Also drop estimate_wipe_tower_size, which has no callers. --- src/libslic3r/GCode/WipeTowerEstimate.cpp | 11 +-- src/libslic3r/GCode/WipeTowerEstimate.hpp | 8 +-- src/libslic3r/Print.cpp | 29 ++++---- src/libslic3r/Print.hpp | 4 +- src/slic3r/GUI/GLCanvas3D.cpp | 4 +- src/slic3r/GUI/PartPlate.cpp | 27 ++++--- src/slic3r/GUI/PartPlate.hpp | 5 +- tests/fff_print/test_wipe_tower.cpp | 67 ++++++++++++++++- tests/libslic3r/test_wipe_tower_estimate.cpp | 75 ++++++++++++-------- 9 files changed, 154 insertions(+), 76 deletions(-) diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp index 9e9bb7de4b..a8aeda28ef 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.cpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -11,7 +11,7 @@ namespace Slic3r { -WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height, bool any_raft) +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height) { WipeTowerFootprint footprint; footprint.height = max_object_height; @@ -56,8 +56,9 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_ const bool dual_nozzle = nozzle_opt != nullptr && nozzle_opt->values.size() == 2; const bool rib_wall = opt_enum("wipe_tower_wall_type", int(WipeTowerWallType::wtwRectangle)) == int(WipeTowerWallType::wtwRib); const bool smooth_timelapse = opt_enum("timelapse_type", int(TimelapseType::tlTraditional)) == int(TimelapseType::tlSmooth); - // Reasons a tower is printed with no tool change to purge for. - const bool need_wipe_tower = smooth_timelapse || opt_bool("enable_wrapping_detection") || any_raft; + // Reasons a tower is printed with no tool change to purge for: the ones that stop + // normalize_fdm_2 clearing enable_prime_tower. Its mixed-filament case is not modelled. + const bool need_wipe_tower = smooth_timelapse || opt_bool("enable_wrapping_detection"); // No tool change, nothing to purge; smooth timelapse still primes once. size_t purge_count = 0; @@ -80,7 +81,9 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_ // Both wall types decide this together: over-reserving only wastes bed area, but // reporting no tower for one that is built collapses the validation hull to a point. - if (volume < EPSILON && !need_wipe_tower) + // A tool change is a reason on its own: the generator floors the tower whatever the + // purge volumes resolve to. + if (volume < EPSILON && filaments_cnt < 2 && !need_wipe_tower) return footprint; const double min_depth = WipeTower::get_limit_depth_by_height(float(max_object_height)); diff --git a/src/libslic3r/GCode/WipeTowerEstimate.hpp b/src/libslic3r/GCode/WipeTowerEstimate.hpp index 911ca9560c..fe5c0b519c 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.hpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.hpp @@ -21,9 +21,9 @@ struct WipeTowerFootprint // changes, so a count derived from the model must include them // (Print::extruders(true)) or a real tower is sized as if it were never built. // layer_height: thinnest layer the tower will be planned at. -// any_raft: any object on the plate prints a raft, which puts the tower on every layer -// below it. Caller-resolved: raft_layers is a PrintObjectConfig key, absent -// from Print's config and overridable per object. -WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height, bool any_raft); +// +// A raft is deliberately not a reason: normalize_fdm_2 clears enable_prime_tower for a plate +// purging one filament unless smooth timelapse or wrapping detection is on. +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height); } // namespace Slic3r diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 7d362537ea..39410a8cef 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1081,22 +1081,21 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, convex_hulls_temp).empty()) { return {L("Prime Tower") + L(" is too close to clumping detection area, and collisions will be caused.\n")}; } - // Skip the containment check for towers that will never be printed (single-filament - // prints without smooth timelapse keep the config's tower position but emit nothing). + // No gate on "is there a tower": one that is not printed estimates to zero, so the hull + // is degenerate and every check passes. Re-deriving it here missed the wrapping-detection + // tower on a single-filament plate. // Pre-generation only the body square is tested — the auto-brim estimate can overshoot // the generated brim by several mm and must not hard-fail a print that physically fits. // Post-generation the mesh bottom already includes the real brim, so the exact // footprint is tested. - if (filaments_count > 1 || print.enable_timelapse_print()) { - // The shared printable polygon is plate-local, while the tower polygons above are - // already shifted by the plate origin. - Polygons printable_polys = print.get_extruder_shared_printable_polygon(); - const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); - for (Polygon &p : printable_polys) - p.translate(plate_shift); - if (!diff(convex_hulls_temp, printable_polys).empty()) - return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; - } + // The shared printable polygon is plate-local, while the tower polygons above are + // already shifted by the plate origin. + Polygons printable_polys = print.get_extruder_shared_printable_polygon(); + const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); + for (Polygon &p : printable_polys) + p.translate(plate_shift); + if (!diff(convex_hulls_temp, printable_polys).empty()) + return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; return {}; } @@ -4005,16 +4004,14 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const double max_height = 0.; double layer_height = std::numeric_limits::max(); - bool any_raft = false; for (const PrintObject *object : m_objects) { max_height = std::max(max_height, unscale_(double(object->size().z()))); layer_height = std::min(layer_height, object->config().layer_height.value); - any_raft = any_raft || object->config().raft_layers.value > 0; } if (max_height < EPSILON) return m_wipe_tower_data; - const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, filaments_cnt, layer_height, max_height, any_raft); + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, filaments_cnt, layer_height, max_height); WipeTowerData &data = const_cast(this)->m_wipe_tower_data; data.depth = float(footprint.depth); data.width = float(footprint.width); @@ -4244,6 +4241,7 @@ void Print::_make_wipe_tower() m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); wipe_tower.generate_new(m_wipe_tower_data.tool_changes); m_wipe_tower_data.depth = wipe_tower.get_depth(); + m_wipe_tower_data.width = wipe_tower.width(); m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); m_wipe_tower_data.bbx = wipe_tower.get_bbx(); m_wipe_tower_data.rib_offset = wipe_tower.get_rib_offset(); @@ -4357,6 +4355,7 @@ void Print::_make_wipe_tower() m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); wipe_tower.generate(m_wipe_tower_data.tool_changes); m_wipe_tower_data.depth = wipe_tower.get_depth(); + m_wipe_tower_data.width = wipe_tower.width(); m_wipe_tower_data.z_and_depth_pairs = wipe_tower.get_z_and_depth_pairs(); m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); m_wipe_tower_data.height = wipe_tower.get_wipe_tower_height(); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 964deb7a60..af1dc3af40 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -782,8 +782,8 @@ struct WipeTowerData // Depth of the wipe tower to pass to GLCanvas3D for exact bounding box: float depth; - // Effective width (a rib wall squares the tower). Pre-generation estimate only; once the - // tower exists its mesh is exact. + // Effective width (a rib wall squares the tower): the estimate until generation, then the + // generated width, so it never disagrees with depth. float width; std::vector> z_and_depth_pairs; float brim_width; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e1f47061c1..b0675360b8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2895,12 +2895,14 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re Vec3d plate_origin = ppl.get_plate(plate_id)->get_origin(); const Print* current_print = part_plate->fff_print(); - if (!need_wipe_tower && part_plate->get_extruders(true).size() < 2) continue; if (part_plate->get_objects_on_this_plate().empty()) continue; // Body and brim from this plate's own estimate: m_process->fff_print() is the // selected plate's, so an auto brim drew every tower with that plate's brim. const WipeTowerFootprint footprint = part_plate->estimate_wipe_tower_footprint(full_config); + // The estimate is also the answer to whether this plate prints a tower; + // deciding it here as well only gave the two room to drift. + if (footprint.depth <= 0.) continue; float brim_width = float(footprint.brim_width); Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 3f56e9a8de..09b8ff3068 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -1541,6 +1542,14 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const std::vector PartPlate::get_extruders(bool conside_custom_gcode, const DynamicPrintConfig& glb_config, const DynamicPrintConfig& project_config) const { std::vector plate_extruders; + // A plate from a sliced .gcode.3mf holds no objects, so report the filaments the G-code + // used. check_objects_empty_and_gcode3mf does this for get_extruders(bool), but reaches + // the plater, which the CLI has none of; slice_filaments_info is only filled for such a plate. + if (m_model->objects.empty()) { + for (const FilamentInfo &info : slice_filaments_info) + plate_extruders.push_back(info.id + 1); + return plate_extruders; + } int glb_support_intf_extr = glb_config.opt_int("support_interface_filament"); int glb_support_extr = glb_config.opt_int("support_filament"); int glb_outer_wall_extr = glb_config.opt_int("outer_wall_filament_id"); @@ -2347,37 +2356,27 @@ WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintCo // seeding from the global value, or folding in an off-plate override, diverges from Print. const ConfigOption *layer_height_opt = config.option("layer_height"); const double global_layer_height = layer_height_opt != nullptr ? layer_height_opt->getFloat() : 0.08; - const ConfigOption *raft_layers_opt = config.option("raft_layers"); - const int global_raft_layers = raft_layers_opt != nullptr ? raft_layers_opt->getInt() : 0; double max_height = 0.; double layer_height = std::numeric_limits::max(); - bool any_raft = false; for (int obj_idx = 0; obj_idx < int(m_model->objects.size()); ++obj_idx) { const ModelObject *object = m_model->objects[obj_idx]; if (!use_global_objects && !contain_any_instance_totally(obj_idx)) continue; // Per instance, to match PrintObject::size(); the union over instances differs once - // they are rotated apart. + // they are rotated apart. The cached convex hull has the mesh's z extent and is cheap + // enough for every scene reload. for (int inst_idx = 0; inst_idx < int(object->instances.size()); ++inst_idx) { if (!use_global_objects && !contain_instance_totally(obj_idx, inst_idx)) continue; - max_height = std::max(max_height, object->instance_bounding_box(inst_idx, true).size().z()); + max_height = std::max(max_height, object->instance_convex_hull_bounding_box(inst_idx, true).size().z()); } const ConfigOption *object_layer_height = object->config.option("layer_height"); layer_height = std::min(layer_height, object_layer_height != nullptr ? object_layer_height->getFloat() : global_layer_height); - const ConfigOption *object_raft_layers = object->config.option("raft_layers"); - any_raft = any_raft || (object_raft_layers != nullptr ? object_raft_layers->getInt() : global_raft_layers) > 0; } if (layer_height == std::numeric_limits::max()) layer_height = global_layer_height; - return Slic3r::estimate_wipe_tower_footprint(config, size_t(plate_extruder_size), layer_height, max_height, any_raft); -} - -Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig &config, int plate_extruder_size, bool use_global_objects) const -{ - const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(config, plate_extruder_size, use_global_objects); - return Vec3d(footprint.width, footprint.depth, footprint.height); + return Slic3r::estimate_wipe_tower_footprint(config, size_t(plate_extruder_size), layer_height, max_height); } arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size, bool use_global_objects) const diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 1cd45f77fd..829d417e04 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -340,9 +340,10 @@ public: Vec3d get_origin() { return m_origin; } //Vec3d calculate_wipe_tower_size(const DynamicPrintConfig &config, const double w, const double wipe_volume, int plate_extruder_size = 0, bool use_global_objects = false) const; - // plate_extruder_size: filaments purged on the plate; 0 derives it from the plate's objects. + // plate_extruder_size: filaments purged on the plate; 0 derives them from its objects. + // use_global_objects skips the containment test, which the CLI needs before objects are + // assigned to plates - the layer height is then the project's thinnest, which over-reserves. WipeTowerFootprint estimate_wipe_tower_footprint(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; - Vec3d estimate_wipe_tower_size(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; arrangement::ArrangePolygon estimate_wipe_tower_polygon(const DynamicPrintConfig & config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size = 0, bool use_global_objects = false) const; bool check_objects_empty_and_gcode3mf(std::vector &result) const; // get used filaments from config, 1 based idx diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index d5f56d3f6c..9a6c5aa686 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -199,6 +199,7 @@ static DynamicPrintConfig tower_estimate_config(const char *wall_type) { "single_extruder_multi_material", "0" }, { "timelapse_type", "0" }, { "layer_height", "0.2" }, + { "enable_wrapping_detection", "0" }, { "raft_layers", "0" } }); } @@ -245,23 +246,83 @@ TEST_CASE("Validation is given the tower's effective width, not the configured o } } +TEST_CASE("Generating the tower keeps its reported width current", "[WipeTower]") +{ + // width is handed out after the slice, so leaving it at the estimate reports a zero-width + // tower to every post-generation consumer. + const DynamicPrintConfig config = wipe_tower_toolchange_config("marlin"); + Print print; + Model model; + init_print({ cube(10) }, print, model, config); + print.apply(model, config); + REQUIRE(print.wipe_tower_data(2).width > 0.f); + + print.process(); + REQUIRE(print.is_step_done(psWipeTower)); + const WipeTowerData &data = print.wipe_tower_data(); + // A width the generator never wrote reads as zero. A rib wall squares the tower, so the + // generated width is the body square: under the configured 50 mm, and inside the depth. + CHECK(data.width > 0.f); + CHECK(data.width < 50.f); + CHECK(data.width <= data.depth + EPSILON); +} + TEST_CASE("A single-filament plate reserves a tower only when one is actually printed", "[WipeTower]") { - // Reporting no tower for one that is built collapses the validation hull to a point, so - // the config-visible reasons for a single-filament tower have to be honoured. + // The estimate has to answer this the way Print::apply does: reporting no tower for one + // that is built collapses the validation hull to a point, and reporting one for a tower + // that is not built takes that bed area away from the arranger and draws a preview box + // over nothing. Print print; Model model; SECTION("no tool change and nothing else that prints one") { const DynamicPrintConfig config = tower_estimate_config("rib"); init_print({ cube(20) }, print, model, config); + REQUIRE_FALSE(print.has_wipe_tower()); CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); } - SECTION("a raft puts the tower on every layer below the object") { + // A raft puts the tower on every layer below the object, but only where there is a tower: + // Print::apply runs normalize_fdm_2, which clears enable_prime_tower for a plate that + // purges one filament and has neither smooth timelapse nor wrapping detection on. + SECTION("a raft alone does not print one") { DynamicPrintConfig config = tower_estimate_config("rib"); config.set_deserialize_strict({ { "raft_layers", "3" } }); init_print({ cube(20) }, print, model, config); + REQUIRE_FALSE(print.config().enable_prime_tower.value); + REQUIRE_FALSE(print.has_wipe_tower()); + CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); + } + + SECTION("smooth timelapse prints one, and keeps enable_prime_tower on") { + DynamicPrintConfig config = tower_estimate_config("rib"); + config.set_deserialize_strict({ { "timelapse_type", "1" } }); + init_print({ cube(20) }, print, model, config); + REQUIRE(print.has_wipe_tower()); CHECK(print.wipe_tower_data(1).depth > 0.f); } } + +TEST_CASE("A tower printed without a tool change is still validated against the bed", "[WipeTower]") +{ + // Wrapping detection prints a tower on a plate that purges one filament. Neither the old + // estimate (which read the wall type and smooth timelapse) nor the old containment gate (the + // filament count or smooth timelapse) knew about it, so between them that tower was never + // checked against the bed. + Print print; + Model model; + DynamicPrintConfig config = tower_estimate_config("rectangle"); + // Relative E without a per-layer G92 is rejected before the tower is ever looked at, and + // has_wipe_tower() wants a real exclusion polygon before it honours wrapping detection. + config.set_deserialize_strict({ { "enable_wrapping_detection", "1" }, + { "wrapping_exclude_area", "180x180,190x180,190x190,180x190" }, + { "wipe_tower_x", "500" }, { "wipe_tower_y", "500" }, + { "use_relative_e_distances", "0" } }); + + init_print({ cube(20) }, print, model, config); + REQUIRE(print.extruders(true).size() == 1); + REQUIRE(print.has_wipe_tower()); + CHECK(print.wipe_tower_data(1).depth > 0.f); + CHECK_THAT(print.validate().string, Catch::Matchers::ContainsSubstring("printable area")); +} diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp index 753d872f29..00235bb2ff 100644 --- a/tests/libslic3r/test_wipe_tower_estimate.cpp +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -45,48 +45,61 @@ static DynamicPrintConfig make_config(const char *wall_type = "rectangle") TEST_CASE("A rectangle wall tower is sized by the purge volume", "[WipeTowerEstimate]") { const DynamicPrintConfig config = make_config(); // Three filaments purge twice per layer; a 5 mm object keeps the stability floor at 5 mm. - const WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5., false); + const WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5.); CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); CHECK_THAT(fp.height, WithinAbs(5., 1e-9)); CHECK_THAT(fp.brim_width, WithinAbs(3., 1e-9)); // Thinner layers need more depth for the same volume. - CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.1, 5., false).depth, WithinAbs(40., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.1, 5.).depth, WithinAbs(40., 1e-9)); // The infill gap spaces the purge lines. DynamicPrintConfig spaced = config; spaced.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); - CHECK_THAT(estimate_wipe_tower_footprint(spaced, 3, 0.2, 5., false).depth, WithinAbs(30., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(spaced, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); } TEST_CASE("Object height sets the stability floor and the auto brim", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config(); // Two filaments purge once: 10 mm, lifted to the 20 mm floor of a 100 mm tower. - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 100.).depth, WithinAbs(20., 1e-9)); config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(-1.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 50., false).brim_width, WithinAbs(WipeTower::get_auto_brim_by_height(50.f), 1e-6)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 50.).brim_width, WithinAbs(WipeTower::get_auto_brim_by_height(50.f), 1e-6)); } TEST_CASE("A single filament only gets a tower when one is printed anyway", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config(); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 0, 0.2, 100., false).width, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 0, 0.2, 100.).width, WithinAbs(0., 1e-9)); // Wrapping detection prints a tower on the first layers whatever the filament count. config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(true)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); - // So does a raft. raft_layers is a per-object key, so it arrives as a resolved flag and - // is deliberately not read off the config. - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., true).depth, WithinAbs(20., 1e-9)); + // A raft is not one of them: normalize_fdm_2 clears enable_prime_tower for a plate that + // purges one filament unless smooth timelapse or wrapping detection is on, so a raft + // alone leaves no tower to reserve for. config.set_key_value("raft_layers", new ConfigOptionInt(3)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); config.set_key_value("raft_layers", new ConfigOptionInt(0)); config.set_deserialize_strict("timelapse_type", "1"); // Smooth timelapse primes the single filament once: 10 mm, lifted to the floor. - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100., false).depth, WithinAbs(20., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 5., false).depth, WithinAbs(10., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 5.).depth, WithinAbs(10., 1e-9)); +} + +TEST_CASE("A tool change reserves the stability floor even with nothing to purge", "[WipeTowerEstimate]") { + // The purge volumes are configurable down to zero, but the tool changes are still printed on + // the tower and the generator still floors it, so the estimate has to floor it too. + const double height = GENERATE(5., 100.); + const float floor = WipeTower::get_limit_depth_by_height(float(height)); + DynamicPrintConfig config = make_config(GENERATE("rectangle", "rib")); + config.set_key_value("prime_volume", new ConfigOptionFloat(0.)); + + CHECK(estimate_wipe_tower_footprint(config, 3, 0.2, height).depth >= floor); + // Still nothing for a lone filament with no other reason. + CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); } TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowerEstimate]") { @@ -97,34 +110,34 @@ TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowe DynamicPrintConfig rib = make_config("rib"); // No tool change and nothing else that prints a tower - neither wall type reserves one. - CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); // Not even on a dual-nozzle printer, where a lone filament still needs no purge. rect.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); rib.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); - CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height, false).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); // With a tool change both reserve one, and both respect the stability floor. - CHECK(estimate_wipe_tower_footprint(rect, 2, 0.2, height, false).depth >= WipeTower::get_limit_depth_by_height(float(height))); - CHECK(estimate_wipe_tower_footprint(rib, 2, 0.2, height, false).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate_wipe_tower_footprint(rect, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate_wipe_tower_footprint(rib, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); } TEST_CASE("A rib wall squares the tower and caps the rib width", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config("rib"); // sqrt(200 / 0.2) = 31.62 mm square, plus the 8 mm rib bulge along the diagonal. const double body = std::sqrt(1000.); - WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5., false); + WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5.); CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + body, 1e-9)); CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); // The extra rib length grows the footprint. config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(4.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.2, 5., false).depth, WithinAbs(8. / std::sqrt(2.) + body + 4., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.2, 5.).depth, WithinAbs(8. / std::sqrt(2.) + body + 4., 1e-9)); // A tiny tower caps the rib width at half its depth: 5 mm body, 2.5 mm rib. config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); config.set_key_value("prime_volume", new ConfigOptionFloat(5.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-9)); } TEST_CASE("Every wall and tower type is read the same from a preset and a static config", "[WipeTowerEstimate]") { @@ -144,7 +157,7 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static REQUIRE(static_config.wipe_tower_type.serialize() == tower_type); // Three filaments purge twice per layer on a 5 mm object: a 50 x 20 rectangle, or a square. - const WipeTowerFootprint fp = estimate_wipe_tower_footprint(preset, 3, 0.2, 5., false); + const WipeTowerFootprint fp = estimate_wipe_tower_footprint(preset, 3, 0.2, 5.); if (std::string(wall_type) == "rib") { CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + std::sqrt(1000.), 1e-9)); @@ -153,7 +166,7 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); } - const WipeTowerFootprint from_static = estimate_wipe_tower_footprint(static_config, 3, 0.2, 5., false); + const WipeTowerFootprint from_static = estimate_wipe_tower_footprint(static_config, 3, 0.2, 5.); CHECK_THAT(from_static.width, WithinAbs(fp.width, 1e-9)); CHECK_THAT(from_static.depth, WithinAbs(fp.depth, 1e-9)); CHECK_THAT(from_static.brim_width, WithinAbs(fp.brim_width, 1e-9)); @@ -162,8 +175,8 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static // through both storages too. preset.set_deserialize_strict("timelapse_type", "1"); static_config.apply(preset, true); - CHECK(estimate_wipe_tower_footprint(preset, 1, 0.2, 5., false).depth > 0.); - CHECK(estimate_wipe_tower_footprint(static_config, 1, 0.2, 5., false).depth > 0.); + CHECK(estimate_wipe_tower_footprint(preset, 1, 0.2, 5.).depth > 0.); + CHECK(estimate_wipe_tower_footprint(static_config, 1, 0.2, 5.).depth > 0.); } TEST_CASE("A dual nozzle purges every filament plus the filament change", "[WipeTowerEstimate]") { @@ -173,7 +186,7 @@ TEST_CASE("A dual nozzle purges every filament plus the filament change", "[Wipe config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); // Two purges of 100 mm3 plus one 10 mm filament change: (200 + 10 * pi * 1.75^2 / 4) / (0.2 * 50). const double change_volume = 10. * PI * 1.75 * 1.75 / 4.; - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); } TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTowerEstimate]") { @@ -188,7 +201,7 @@ TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTow const double flush_volume = WipeTower2::estimate_semm_flush_volume(config, 2); const double expected = std::max(double(WipeTower::get_limit_depth_by_height(5.f)), flush_volume / (0.2 * 50.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5., false).depth, WithinAbs(expected, 1e-6)); + CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs(expected, 1e-6)); } TEST_CASE("A config missing a tower key falls back to that key's default", "[WipeTowerEstimate]") { @@ -201,6 +214,6 @@ TEST_CASE("A config missing a tower key falls back to that key's default", "[Wip DynamicPrintConfig defaulted = full; defaulted.set_key_value("prime_tower_infill_gap", print_config_def.get("prime_tower_infill_gap")->default_value->clone()); - CHECK_THAT(estimate_wipe_tower_footprint(partial, 3, 0.2, 5., false).depth, - WithinAbs(estimate_wipe_tower_footprint(defaulted, 3, 0.2, 5., false).depth, 1e-9)); + CHECK_THAT(estimate_wipe_tower_footprint(partial, 3, 0.2, 5.).depth, + WithinAbs(estimate_wipe_tower_footprint(defaulted, 3, 0.2, 5.).depth, 1e-9)); } From 98acd687f7c4792f105083b9287d514b1c272726 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Tue, 1 Sep 2026 20:30:56 +0800 Subject: [PATCH 147/208] Fixes for Wipe Tower Position Clamping Validation grows the estimated body by the brim before the tower is generated, so a tower whose brim leaves the bed is rejected up front instead of at export. The scene reload re-clamps the stored position, since set_default_wipe_tower_pos_for_plate does not rerun when painting changes the filament count. The rectangle-wall footprint polygon gets its two missing brim corners (it was a skewed quad), so the post-generation check covers the whole brim. --- src/libslic3r/Print.cpp | 17 ++++++++--------- src/slic3r/GUI/GLCanvas3D.cpp | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 39410a8cef..b014b0f299 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1046,6 +1046,7 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, const WipeTowerData &wipe_tower_estimate = print.wipe_tower_data(filaments_count); float width = wipe_tower_estimate.width; float depth = wipe_tower_estimate.depth; + float brim_width = wipe_tower_estimate.brim_width; Polygons convex_hulls_temp; if (print.has_wipe_tower()) { @@ -1084,17 +1085,15 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, // No gate on "is there a tower": one that is not printed estimates to zero, so the hull // is degenerate and every check passes. Re-deriving it here missed the wrapping-detection // tower on a single-filament plate. - // Pre-generation only the body square is tested — the auto-brim estimate can overshoot - // the generated brim by several mm and must not hard-fail a print that physically fits. - // Post-generation the mesh bottom already includes the real brim, so the exact - // footprint is tested. - // The shared printable polygon is plate-local, while the tower polygons above are - // already shifted by the plate origin. + // Pre-generation, grow the body by the brim to match what the generator draws; + // post-generation the mesh already includes it. Polygons printable_polys = print.get_extruder_shared_printable_polygon(); const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); for (Polygon &p : printable_polys) p.translate(plate_shift); - if (!diff(convex_hulls_temp, printable_polys).empty()) + Polygons tower_polys_with_brim = print.is_step_done(psWipeTower) ? + convex_hulls_temp : offset(convex_hulls_temp, float(scale_(brim_width))); + if (!diff(tower_polys_with_brim, printable_polys).empty()) return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; return {}; } @@ -5961,8 +5960,8 @@ void WipeTowerData::construct_mesh(float width, float depth, float height, float wipe_tower_mesh_data->real_wipe_tower_mesh = make_cube(width, depth, height); wipe_tower_mesh_data->real_brim_mesh = make_cube(width + 2 * brim_width, depth + 2 * brim_width, first_layer_height); wipe_tower_mesh_data->real_brim_mesh.translate({-brim_width, -brim_width, 0}); - wipe_tower_mesh_data->bottom = {scaled(Vec2f{-brim_width, -brim_width}), scaled(Vec2f{width + brim_width, 0}), scaled(Vec2f{width + brim_width, depth + brim_width}), - scaled(Vec2f{0, depth})}; + wipe_tower_mesh_data->bottom = {scaled(Vec2f{-brim_width, -brim_width}), scaled(Vec2f{width + brim_width, -brim_width}), + scaled(Vec2f{width + brim_width, depth + brim_width}), scaled(Vec2f{-brim_width, depth + brim_width})}; } else { wipe_tower_mesh_data->real_wipe_tower_mesh = WipeTower::its_make_rib_tower(width, depth, height, rib_length, rib_width, fillet_wall); wipe_tower_mesh_data->bottom = WipeTower::rib_section(width, depth, rib_length, rib_width, fillet_wall); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b0675360b8..5ad6151c68 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2906,8 +2906,20 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re float brim_width = float(footprint.brim_width); Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); - // The stored position is already clamped onto the bed, by - // set_default_wipe_tower_pos_for_plate and again on every drag. + // set_default_wipe_tower_pos_for_plate doesn't rerun when painting changes the + // filament count, so redo its clamp here on every reload. + { + Vec3d clamped_pos, clamped_size; + part_plate->estimate_wipe_tower_polygon(full_config, plate_id, clamped_pos, clamped_size); + if (std::abs(x - (float) clamped_pos(0)) > EPSILON || std::abs(y - (float) clamped_pos(1)) > EPSILON) { + x = (float) clamped_pos(0); + y = (float) clamped_pos(1); + ConfigOptionFloat wt_x_opt(x), wt_y_opt(y); + dynamic_cast(proj_cfg.option("wipe_tower_x"))->set_at(&wt_x_opt, plate_id, 0); + dynamic_cast(proj_cfg.option("wipe_tower_y"))->set_at(&wt_y_opt, plate_id, 0); + } + } + if (!current_print->is_step_done(psWipeTower) || !current_print->wipe_tower_data().wipe_tower_mesh_data) { // update for wipe tower position int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), From 99627c8e935b4bd0a167f6728949840d49a024a1 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 14:52:01 +0800 Subject: [PATCH 148/208] Size the Footprint Estimate from the Planners The shared estimate reserved every tower with one volume-per-purge rule and the stability floor. Both planners do more: WipeTower (Type1) wipes each filament's own prime volume in whole lines, one block per adhesiveness category sized by its worst layer, rams the leaving filament at every nozzle change, and squares a rib tower from the planned depth; WipeTower2 (Type2) spaces its lines by wipe_tower_extra_spacing, not the Type1-only infill gap, and its extra flow cancels out of the depth. Both extend the ribs rather than the body below the stability minimum, size every layer including a thinner first one, and lay the brim in whole loops, WipeTower reporting half a spacing of line width on top. All of that now lives in estimate_wipe_tower_footprint, fed the planner (resolve_wipe_tower_type mirrors Print::wipe_tower_type and the CLI's Bambu Lab detection) and the filament ids rather than a count. Print passes its own tool set; the PartPlate adapter derives the plate's ids from the passed config and treats an explicit count as a floor, so the CLI's count-only callers size per filament too. The placement clamp also reserves a Type2 cone's base bulge, which the body box does not cover. The planner-mirroring helpers sit beside the planners in WipeTower and WipeTower2 so the two stay in sync; the libslic3r cases pin them to footprints measured from generated G-code. --- src/libslic3r/GCode/WipeTower.cpp | 88 ++++++++ src/libslic3r/GCode/WipeTower.hpp | 27 +++ src/libslic3r/GCode/WipeTower2.cpp | 17 ++ src/libslic3r/GCode/WipeTower2.hpp | 4 + src/libslic3r/GCode/WipeTowerEstimate.cpp | 166 ++++++++++++---- src/libslic3r/GCode/WipeTowerEstimate.hpp | 22 +- src/libslic3r/Print.cpp | 2 +- src/slic3r/GUI/PartPlate.cpp | 44 ++-- src/slic3r/GUI/PartPlate.hpp | 3 +- tests/fff_print/test_wipe_tower.cpp | 19 +- tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_wipe_tower.cpp | 93 +++++++++ tests/libslic3r/test_wipe_tower_estimate.cpp | 199 ++++++++++++++----- 13 files changed, 559 insertions(+), 126 deletions(-) create mode 100644 tests/libslic3r/test_wipe_tower.cpp diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 8aff5f4a3f..bef3803c55 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1630,6 +1630,94 @@ float WipeTower::get_auto_brim_by_height(float max_height) { return 8.f; } +float WipeTower::estimate_brim_real_width(float brim_width, float nozzle_diameter, float first_layer_height, bool type2) +{ + if (brim_width <= 0.f) + return brim_width; + const float spacing = nozzle_diameter * 1.25f - first_layer_height * float(1. - M_PI_4); // Width_To_Nozzle_Ratio + if (spacing <= EPSILON) + return brim_width; + const int loops_num = int((brim_width + spacing / 2.f) / spacing); + return loops_num * spacing + (type2 ? 0.f : spacing / 2.f); +} + +float WipeTower::get_wrapping_detection_depth() +{ + return float(wrapping_wipe_tower_depth); +} + +float WipeTower::nozzle_change_perimeter_width(float nozzle_diameter) +{ + auto it = nozzle_diameter_to_nozzle_change_width.find(nozzle_diameter); + return it != nozzle_diameter_to_nozzle_change_width.end() ? it->second : 2.f * nozzle_diameter * 1.25f; +} + +float WipeTower::estimate_tower_blocks_depth(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing) +{ + if (purges.empty() || layer_height < EPSILON || nozzle_diameter < EPSILON) + return 0.f; + const float pw = nozzle_diameter * 1.25f; // Width_To_Nozzle_Ratio + const float ncpw = nozzle_change_perimeter_width(nozzle_diameter); + const float line_width = width - 2.f * pw; + if (line_width <= EPSILON) + return 0.f; + // Line cross-section as volume_to_length() sees it; the infill gap stretches the perimeter + // width by the configured ratio and nozzle-change lines keep their own width + // (calc_block_infill_gap). + auto line_area = [layer_height](float w) { return layer_height * (w - layer_height * float(1. - M_PI_4)); }; + const float extra_width = (extra_spacing - 1.f) * pw; + const float gap = pw + extra_width; + const float nc_gap = ncpw + extra_width; + // A layer purges into at most (filaments - 1) targets, so a category holding every filament + // never sees its smallest purge (the layer's first filament) in its worst layer. + struct Block { float depth = 0.f; float min_purge = 0.f; size_t filaments = 0; }; + std::map blocks; + for (const PurgeEstimate &purge : purges) { + Block &block = blocks[purge.category]; + const float purge_depth = std::ceil(purge.prime_volume / line_area(pw) / line_width) * gap; + block.min_purge = block.filaments == 0 ? purge_depth : std::min(block.min_purge, purge_depth); + block.depth += purge_depth; + ++block.filaments; + if (purge.filament_change_length > EPSILON) { + // The leaving filament is rammed over the nozzle-change flow, again in whole lines. + const float filament_area = float(M_PI) * purge.filament_diameter * purge.filament_diameter / 4.f; + const float nc_length = purge.filament_change_length * filament_area / line_area(ncpw); + block.depth += std::ceil(nc_length / (width - ncpw - pw)) * nc_gap; + } + } + float depth = pw; // plan_tower_new starts the first block one perimeter width in + for (const auto &[category, block] : blocks) + depth += block.filaments == purges.size() ? block.depth - block.min_purge : block.depth; + return depth; +} + +float WipeTower::rib_footprint_side(float width, float depth, float rib_width, float extra_rib_length, float max_height) +{ + if (width < EPSILON || depth < EPSILON) + return 0.f; + // Ribs run the diagonal; below the height-based minimum they are extended rather than the + // body, then by the extra length, never ending up shorter than the diagonal. + const float diagonal = std::sqrt(width * width + depth * depth); + float rib_length = diagonal; + if (depth + EPSILON < get_limit_depth_by_height(max_height)) + rib_length = std::max(rib_length, get_limit_depth_by_height(max_height) * float(std::sqrt(2.))); + rib_length = std::max(diagonal, rib_length + extra_rib_length); + // Half the extension at each end of the diagonal plus half the rib width, projected onto the axes. + const float rib_w = std::min(rib_width, std::min(width, depth) / 2.f); + const float per_side = ((rib_length - diagonal) / 2.f + rib_w / 2.f) / float(std::sqrt(2.)); + return std::max(width, depth) + 2.f * per_side; +} + +float WipeTower::estimate_rib_tower_bbox_side(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing, float rib_width, float extra_rib_length, float max_height) +{ + if (purges.empty() || width < EPSILON || layer_height < EPSILON || nozzle_diameter < EPSILON) + return 0.f; + const float pw = nozzle_diameter * 1.25f; // Width_To_Nozzle_Ratio + const float square = align_ceil(std::sqrt(estimate_tower_blocks_depth(purges, width, layer_height, nozzle_diameter, extra_spacing) * width), pw); + const float depth = estimate_tower_blocks_depth(purges, square, layer_height, nozzle_diameter, extra_spacing); + return rib_footprint_side(square, depth, rib_width, extra_rib_length, max_height); +} + Vec2f WipeTower::move_box_inside_polygon(const BoundingBox &box, const Polygons &polygons, coord_t offset) { if (polygons.empty()) return Vec2f{0.f, 0.f}; diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 045c82cbf3..9303f09691 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -42,9 +42,36 @@ public: static const std::map min_depth_per_height; static float get_limit_depth_by_height(float max_height); static float get_auto_brim_by_height(float max_height); + // Both generators lay the brim in whole loops one line spacing apart, so the printed width + // differs from the configured one. WipeTower reports it with half a spacing of line width + // added, WipeTower2 reports the loops alone; an estimate has to round like the generator + // whose G-code it stands in for. + static float estimate_brim_real_width(float brim_width, float nozzle_diameter, float first_layer_height, bool type2); + // Depth a Type1 tower reserves once nothing but wrapping detection asks for one. + static float get_wrapping_detection_depth(); + // Line width of the nozzle-change purge lines at this nozzle diameter. + static float nozzle_change_perimeter_width(float nozzle_diameter); static TriangleMesh its_make_rib_tower(float width, float depth, float height, float rib_length, float rib_width, bool fillet_wall); static TriangleMesh its_make_rib_brim(const Polygon& brim, float layer_height); static Polygon rib_section(float width, float depth, float rib_length, float rib_width, bool fillet_wall); + // One filament's share of a Type1 tower layer, as plan_tower_new() reserves it. + struct PurgeEstimate + { + float prime_volume = 0.f; // mm3 wiped after changing to this filament + int category = 0; // filament_adhesiveness_category; one purge block per category + float filament_change_length = 0.f; // mm of filament rammed when it leaves its nozzle; 0 when no nozzle change is planned + float filament_diameter = 1.75f; + }; + // Depth of the Type1 purge stack at the given width (also the rectangle-wall depth): each + // purge is whole lines at the block infill gap, one block per adhesiveness category sized by + // its worst layer, stacked behind one perimeter width. + static float estimate_tower_blocks_depth(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing); + // Side of the square bounding a rib-wall tower's first layer, brim excluded: the body plus the + // rib bulge, with the ribs extended to the height-based minimum as both generators do. + static float rib_footprint_side(float width, float depth, float rib_width, float extra_rib_length, float max_height); + // Type1 rib tower: plan_tower_new() squares the tower from the depth at the configured width, + // then re-plans the depth at the squared width. + static float estimate_rib_tower_bbox_side(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing, float rib_width, float extra_rib_length, float max_height); // Translation that brings a footprint inside the printable outline, padded by offset. The prime // tower is validated against the real outline (see layered_print_cleareance_valid), so clamping // against the bounding box alone would leave it off a delta or hexagonal bed. box and polygons diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index ee0f9c375a..4e752bd772 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -2129,6 +2129,23 @@ std::pair WipeTower2::get_wipe_tower_cone_base(double width, dou return std::make_pair(R, support_scale); } +Polygon WipeTower2::cone_base_polygon(double width, double depth, double height, double angle_deg) +{ + Polygon box({Point::new_scale(Vec2d(0., 0.)), Point::new_scale(Vec2d(width, 0.)), + Point::new_scale(Vec2d(width, depth)), Point::new_scale(Vec2d(0., depth))}); + if (angle_deg <= EPSILON || height <= EPSILON || width <= EPSILON || depth <= EPSILON) + return box; + const auto [R, x_scale] = get_wipe_tower_cone_base(width, height, depth, angle_deg); + if (R <= EPSILON) + return box; + const Vec2d center(width / 2., depth / 2.); + Polygon ellipse; + for (double alpha = 0.; alpha < 2. * M_PI; alpha += M_PI / 20.) + ellipse.points.push_back(Point::new_scale(center + R * Vec2d(std::cos(alpha) / x_scale, std::sin(alpha)))); + Polygons u = union_({box, ellipse}); + return u.empty() ? box : u.front(); +} + // Static method to extract wipe_volumes[from][to] from the configuration. // Takes a ConfigBase so the GUI's wipe tower size estimate can pass the plate's // DynamicPrintConfig directly instead of materializing a full PrintConfig per call. diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index 5b1a474b5d..232cad1a6b 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -27,6 +27,10 @@ public: // in WipeTowerIntegration::append_tcr2 does not strip it. static const std::string wait_for_temp_tag() { return ";_WAIT_FOR_TEMP_ON_WIPE_TOWER"; } static std::pair get_wipe_tower_cone_base(double width, double height, double depth, double angle_deg); + // First-layer outline of a cone-wall tower in tower-local (scaled) coordinates: body box + // unioned with the cone's base ellipse — the model first_layer_wipe_tower_corners uses, + // and generate_support_cone_wall stays within it. Brim not included. + static Polygon cone_base_polygon(double width, double depth, double height, double angle_deg); static std::vector> extract_wipe_volumes(const ConfigBase& config); // Estimated total flush volume of a SEMM print with the given number of filaments, // used to reserve wipe tower space before the tower is generated. diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp index a8aeda28ef..6fee774e9c 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.cpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -8,57 +8,93 @@ #include #include +#include namespace Slic3r { -WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height) +// Every caller today declares all these keys, but the signature accepts any ConfigBase: fall +// back to the key's declared default, never to a hand-copied constant. +static const ConfigOption *option_of(const ConfigBase &config, const char *key) +{ + if (const ConfigOption *opt = config.option(key); opt != nullptr) + return opt; + if (const ConfigDef *def = config.def(); def != nullptr) + if (const ConfigOptionDef *opt_def = def->get(key); opt_def != nullptr) + return opt_def->default_value.get(); + return nullptr; +} + +WipeTowerType resolve_wipe_tower_type(const ConfigBase &config) +{ + // printer_model is what the CLI keys its Bambu Lab detection on; the GUI's vendor flag + // agrees for every shipped profile. + if (const auto *model = dynamic_cast(config.option("printer_model")); + model != nullptr && model->value.compare(0, 9, "Bambu Lab") == 0) + return WipeTowerType::Type1; + // By value, not by concrete type: a static PrintConfig holds ConfigOptionEnum, a + // DynamicConfig built from presets holds ConfigOptionEnumGeneric, and both answer getInt(). + const ConfigOption *type = option_of(config, "wipe_tower_type"); + return type != nullptr ? WipeTowerType(type->getInt()) : WipeTowerType::Type2; +} + +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, WipeTowerType tower_type, const std::vector &filament_ids, double layer_height, double max_object_height) { WipeTowerFootprint footprint; footprint.height = max_object_height; + const size_t filaments_cnt = filament_ids.size(); if (filaments_cnt == 0 || layer_height < EPSILON) return footprint; - // Every caller today declares all these keys, but the signature accepts any ConfigBase: - // fall back to the key's declared default, never to a hand-copied constant. - auto option_of = [&config](const char *key) -> const ConfigOption * { - if (const ConfigOption *opt = config.option(key); opt != nullptr) - return opt; - if (const ConfigDef *def = config.def(); def != nullptr) - if (const ConfigOptionDef *opt_def = def->get(key); opt_def != nullptr) - return opt_def->default_value.get(); - return nullptr; - }; - auto opt_float = [&option_of](const char *key) { - const ConfigOption *opt = option_of(key); + auto opt_float = [&config](const char *key) { + const ConfigOption *opt = option_of(config, key); return opt != nullptr ? opt->getFloat() : 0.; }; - auto opt_bool = [&option_of](const char *key) { - const ConfigOption *opt = option_of(key); + auto opt_bool = [&config](const char *key) { + const ConfigOption *opt = option_of(config, key); return opt != nullptr && opt->getBool(); }; - // By value, not by concrete type: a static PrintConfig holds ConfigOptionEnum, a - // DynamicConfig built from presets holds ConfigOptionEnumGeneric, and both answer getInt(). - auto opt_enum = [&option_of](const char *key, int fallback) { - const ConfigOption *opt = option_of(key); + auto opt_enum = [&config](const char *key, int fallback) { + const ConfigOption *opt = option_of(config, key); return opt != nullptr ? opt->getInt() : fallback; }; - auto max_of = [&option_of](const char *key, double fallback) { - const auto *opt = dynamic_cast(option_of(key)); + auto floats_of = [&config](const char *key) { return dynamic_cast(option_of(config, key)); }; + auto max_of = [&floats_of](const char *key, double fallback) { + const auto *opt = floats_of(key); return (opt != nullptr && !opt->values.empty()) ? *std::max_element(opt->values.begin(), opt->values.end()) : fallback; }; + auto float_at = [&floats_of](const char *key, unsigned int id, double fallback) { + const auto *opt = floats_of(key); + return (opt != nullptr && !opt->values.empty()) ? opt->get_at(id) : fallback; + }; + auto int_at = [&config](const char *key, unsigned int id, int fallback) { + const auto *opt = dynamic_cast(option_of(config, key)); + return (opt != nullptr && !opt->values.empty()) ? opt->get_at(id) : fallback; + }; + // Both planners size every layer, so the tower has to fit its thinnest one: the first layer + // when it is printed thinner than the rest. + const double first_layer_height = opt_float("initial_layer_print_height"); + if (first_layer_height > EPSILON) + layer_height = std::min(layer_height, first_layer_height); + + const bool type1 = tower_type == WipeTowerType::Type1; const double width = opt_float("prime_tower_width"); const double prime_volume = opt_float("prime_volume"); - const double extra_spacing = opt_float("prime_tower_infill_gap") / 100.; - double rib_width = opt_float("wipe_tower_rib_width"); + // Type1 spaces its purge lines by prime_tower_infill_gap, Type2 by wipe_tower_extra_spacing. + // Type2's extra flow cancels out of the depth: the line length is divided by it and the row + // pitch multiplied by it (WipeTower2::get_wipe_depth). + const double extra_spacing = opt_float(type1 ? "prime_tower_infill_gap" : "wipe_tower_extra_spacing") / 100.; + const double rib_width = opt_float("wipe_tower_rib_width"); const double extra_rib_length = opt_float("wipe_tower_extra_rib_length"); - const auto *nozzle_opt = dynamic_cast(option_of("nozzle_diameter")); + const auto *nozzle_opt = floats_of("nozzle_diameter"); + const double nozzle_diameter = (nozzle_opt != nullptr && !nozzle_opt->values.empty()) ? nozzle_opt->values.front() : 0.4; const bool dual_nozzle = nozzle_opt != nullptr && nozzle_opt->values.size() == 2; const bool rib_wall = opt_enum("wipe_tower_wall_type", int(WipeTowerWallType::wtwRectangle)) == int(WipeTowerWallType::wtwRib); const bool smooth_timelapse = opt_enum("timelapse_type", int(TimelapseType::tlTraditional)) == int(TimelapseType::tlSmooth); + const bool wrapping = opt_bool("enable_wrapping_detection"); // Reasons a tower is printed with no tool change to purge for: the ones that stop // normalize_fdm_2 clearing enable_prime_tower. Its mixed-filament case is not modelled. - const bool need_wipe_tower = smooth_timelapse || opt_bool("enable_wrapping_detection"); + const bool need_wipe_tower = smooth_timelapse || wrapping; // No tool change, nothing to purge; smooth timelapse still primes once. size_t purge_count = 0; @@ -67,6 +103,8 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_ else if (smooth_timelapse) purge_count = 1; + // Type2 purges one volume per tool change. Type1 plans per filament below; here the volume + // only decides whether a tower exists. double volume = prime_volume * double(purge_count); if (dual_nozzle) { // Dual-nozzle printers also purge the filament change length on the tower. @@ -79,33 +117,77 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_ if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(config, filaments_cnt); - // Both wall types decide this together: over-reserving only wastes bed area, but - // reporting no tower for one that is built collapses the validation hull to a point. - // A tool change is a reason on its own: the generator floors the tower whatever the - // purge volumes resolve to. - if (volume < EPSILON && filaments_cnt < 2 && !need_wipe_tower) + // The Type1 planner wipes each filament's own prime volume after changing to it, in a block + // per adhesiveness category. On a two-nozzle printer the leaving filament is also rammed at + // every nozzle change; the tool order groups filaments by nozzle, so a layer crosses + // (nozzles used - 1) times, charged here to the longest ramming. + std::vector purges; + if (type1 && filaments_cnt > 1) { + const bool saving_mode = opt_enum("prime_volume_mode", int(PrimeVolumeMode::pvmDefault)) == int(PrimeVolumeMode::pvmSaving); + std::set nozzles; + size_t longest_ramming = 0; + for (size_t i = 0; i < filaments_cnt; ++i) { + const unsigned int id = filament_ids[i]; + WipeTower::PurgeEstimate purge; + purge.prime_volume = saving_mode ? 15.f : float(float_at("filament_prime_volume", id, prime_volume)); + purge.category = int_at("filament_adhesiveness_category", id, 0); + purge.filament_diameter = float(float_at("filament_diameter", id, 1.75)); + purges.push_back(purge); + if (dual_nozzle) { + nozzles.insert(int_at("filament_map", id, 1)); + if (float_at("filament_change_length", id, 0.) > float_at("filament_change_length", filament_ids[longest_ramming], 0.)) + longest_ramming = i; + } + } + if (nozzles.size() > 1) + purges[longest_ramming].filament_change_length = float(float_at("filament_change_length", filament_ids[longest_ramming], 0.) * double(nozzles.size() - 1)); + } + + // Both wall types decide this together: over-reserving only wastes bed area, but reporting + // no tower for one that is built collapses the validation hull to a point. + // A tool change is a reason on its own (see the base commit); Type1 already reserves + // per filament, Type2 has only the volume, which can resolve to zero. + const bool has_purge = type1 ? !purges.empty() : volume > EPSILON; + if (!has_purge && filaments_cnt < 2 && !need_wipe_tower) return footprint; - const double min_depth = WipeTower::get_limit_depth_by_height(float(max_object_height)); + const double min_depth = WipeTower::get_limit_depth_by_height(float(max_object_height)); + const float perimeter_width = float(nozzle_diameter) * 1.25f; // Width_To_Nozzle_Ratio + // With nothing to purge, plan_tower_new sizes the tower for wrapping detection or the + // stability minimum; WipeTower2 only knows the latter. + const double idle_depth = (type1 && wrapping && !smooth_timelapse) ? WipeTower::get_wrapping_detection_depth() : min_depth; if (rib_wall) { - // A rib wall squares the tower; the ribs run the diagonal and bulge past the body. - const double volume_depth = std::sqrt(volume / layer_height * extra_spacing); - double depth = std::max(min_depth, volume_depth); - rib_width = std::min(rib_width, depth / 2.); - depth = rib_width / std::sqrt(2.) + std::max(depth + extra_rib_length, volume_depth); - footprint.width = footprint.depth = depth; + // Both planners square the tower to the purge area and extend the ribs, not the body, + // below the stability minimum. + double side; + if (!purges.empty()) + side = WipeTower::estimate_rib_tower_bbox_side(purges, float(width), float(layer_height), float(nozzle_diameter), float(extra_spacing), float(rib_width), float(extra_rib_length), float(max_object_height)); + else { + const double square = has_purge ? std::sqrt(volume / layer_height * extra_spacing) : idle_depth; + side = WipeTower::rib_footprint_side(float(square), float(square), float(rib_width), float(extra_rib_length), float(max_object_height)); + } + footprint.width = footprint.depth = side; } else { - double depth = volume / (layer_height * width); - // The flush volumes already hold the spacing between wipes. - if (!semm_flush) - depth *= extra_spacing; + double depth; + if (type1) { + // plan_tower_new stretches a short purge stack to the stability minimum behind its + // leading perimeter width. + depth = purges.empty() ? idle_depth : std::max(min_depth + perimeter_width, double(WipeTower::estimate_tower_blocks_depth(purges, float(width), float(layer_height), float(nozzle_diameter), float(extra_spacing)))); + } else { + depth = volume / (layer_height * width); + // The flush volumes already hold the spacing between wipes. + if (!semm_flush) + depth *= extra_spacing; + depth = std::max(min_depth, depth); + } footprint.width = width; - footprint.depth = std::max(min_depth, depth); + footprint.depth = depth; } footprint.brim_width = opt_float("prime_tower_brim_width"); if (footprint.brim_width < 0) footprint.brim_width = WipeTower::get_auto_brim_by_height(float(max_object_height)); + footprint.brim_width = WipeTower::estimate_brim_real_width(float(footprint.brim_width), float(nozzle_diameter), float(first_layer_height > EPSILON ? first_layer_height : layer_height), !type1); return footprint; } diff --git a/src/libslic3r/GCode/WipeTowerEstimate.hpp b/src/libslic3r/GCode/WipeTowerEstimate.hpp index fe5c0b519c..5b333005e8 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.hpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.hpp @@ -1,10 +1,11 @@ #pragma once -#include +#include namespace Slic3r { class ConfigBase; +enum class WipeTowerType; // Pre-slice footprint of the wipe tower, shared by validation (Print), the GUI's placement // clamp/preview/arrange and the CLI placement. The arithmetic is shared; the inputs below are @@ -14,16 +15,25 @@ struct WipeTowerFootprint double width = 0.; // effective width: equals depth for a rib wall, which squares the tower double depth = 0.; // 0 when these inputs imply no tower double height = 0.; // tallest object; drives the stability floor and the auto brim - double brim_width = 0.; // configured width, auto (-1) resolved by height + double brim_width = 0.; // printed width: auto (-1) resolved by height, laid in whole loops }; -// filaments_cnt: filaments purged on the plate. The config cannot see custom G-code tool -// changes, so a count derived from the model must include them +// Which planner builds the tower: Bambu Lab printers always get Type1, the rest follow +// wipe_tower_type. The rule Print::wipe_tower_type() and the CLI apply, read off the config so +// the GUI and CLI placement can resolve it without a Print. +WipeTowerType resolve_wipe_tower_type(const ConfigBase &config); + +// filament_ids: 0-based filaments purged on the plate. The config cannot see custom G-code tool +// changes, so ids derived from the model must include them // (Print::extruders(true)) or a real tower is sized as if it were never built. -// layer_height: thinnest layer the tower will be planned at. +// layer_height: thinnest layer the objects are sliced at. The first layer is folded in here. // // A raft is deliberately not a reason: normalize_fdm_2 clears enable_prime_tower for a plate // purging one filament unless smooth timelapse or wrapping detection is on. -WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, size_t filaments_cnt, double layer_height, double max_object_height); +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, + WipeTowerType tower_type, + const std::vector &filament_ids, + double layer_height, + double max_object_height); } // namespace Slic3r diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index b014b0f299..271e410933 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -4010,7 +4010,7 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const if (max_height < EPSILON) return m_wipe_tower_data; - const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, filaments_cnt, layer_height, max_height); + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, this->wipe_tower_type(), this->extruders(true), layer_height, max_height); WipeTowerData &data = const_cast(this)->m_wipe_tower_data; data.depth = float(footprint.depth); data.width = float(footprint.width); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 09b8ff3068..beb244a39c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -22,6 +22,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Polygon.hpp" #include "libslic3r/GCode/WipeTowerEstimate.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/BoundingBox.hpp" #include "libslic3r/Geometry.hpp" @@ -2333,22 +2334,20 @@ WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintCo { // The CLI calls this too, so the plate's filaments are derived from the passed config: // get_extruders(bool) reads the same keys off wxGetApp()'s presets, which the CLI has none of. - std::vector plate_extruders; - if (plate_extruder_size == 0) { - plate_extruders = get_extruders(true, config, config); - plate_extruder_size = int(plate_extruders.size()); - } + // An explicit count is a floor: init-time and arrange estimates size an empty plate for that + // many generic filaments, the lowest ids not already on the plate. + std::vector plate_extruders = get_extruders(true, config, config); + for (int id = 1; int(plate_extruders.size()) < plate_extruder_size; ++id) + if (std::find(plate_extruders.begin(), plate_extruders.end(), id) == plate_extruders.end()) + plate_extruders.push_back(id); // The wipe tower filament joins the tool ordering even when unused (Print::extruders), so - // validation counts it. An explicit count is the plate's painted filaments, which never do. + // validation counts it. const ConfigOption *wipe_tower_filament_opt = config.option("wipe_tower_filament"); const int wipe_tower_filament = wipe_tower_filament_opt != nullptr ? wipe_tower_filament_opt->getInt() : 0; - if (plate_extruder_size > 1 && wipe_tower_filament > 0) { - if (plate_extruders.empty()) - plate_extruders = get_extruders(true, config, config); - if (std::find(plate_extruders.begin(), plate_extruders.end(), wipe_tower_filament) == plate_extruders.end()) - ++plate_extruder_size; - } - if (plate_extruder_size == 0) + if (plate_extruders.size() > 1 && wipe_tower_filament > 0 && + std::find(plate_extruders.begin(), plate_extruders.end(), wipe_tower_filament) == plate_extruders.end()) + plate_extruders.push_back(wipe_tower_filament); + if (plate_extruders.empty()) return WipeTowerFootprint(); // Tallest object on this plate and the thinnest layer it is sliced at, resolved per object @@ -2376,7 +2375,11 @@ WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintCo if (layer_height == std::numeric_limits::max()) layer_height = global_layer_height; - return Slic3r::estimate_wipe_tower_footprint(config, size_t(plate_extruder_size), layer_height, max_height); + std::vector filament_ids; + for (int id : plate_extruders) + if (id > 0) + filament_ids.push_back(static_cast(id - 1)); + return Slic3r::estimate_wipe_tower_footprint(config, resolve_wipe_tower_type(config), filament_ids, layer_height, max_height); } arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size, bool use_global_objects) const @@ -2391,8 +2394,17 @@ arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const Dynamic float depth = wt_size(1); // Resolved brim, not the raw option: "Auto" (-1) would yield a margin of 0 and let the // clamp put the brim off the bed. Matches set_default_wipe_tower_pos_for_plate. - const float wp_brim_width = float(footprint.brim_width); - const float margin = WIPE_TOWER_MARGIN + wp_brim_width; + float wp_brim_width = float(footprint.brim_width); + // A Type2 stabilization cone bulges past the body box like a brim does - fold its worst-axis + // bulge into the same margin (Type1 ignores the cone option). + const auto *cone_wall_opt = config.option("wipe_tower_wall_type"); + const auto *cone_angle_opt = config.option("wipe_tower_cone_angle"); + if (cone_wall_opt != nullptr && cone_wall_opt->getInt() == int(WipeTowerWallType::wtwCone) && cone_angle_opt != nullptr && + cone_angle_opt->getFloat() > EPSILON && resolve_wipe_tower_type(config) == WipeTowerType::Type2) { + const BoundingBox cb = get_extents(WipeTower2::cone_base_polygon(w, depth, wt_size.z(), cone_angle_opt->getFloat())); + wp_brim_width += float(std::max({0., unscaled(cb.max.x()) - w, unscaled(cb.max.y()) - depth, -unscaled(cb.min.x()), -unscaled(cb.min.y())})); + } + const float margin = WIPE_TOWER_MARGIN + wp_brim_width; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; // A tower too deep for the plate leaves no valid position: clamping with hi < lo is UB and diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 829d417e04..6d7eb18beb 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -340,7 +340,8 @@ public: Vec3d get_origin() { return m_origin; } //Vec3d calculate_wipe_tower_size(const DynamicPrintConfig &config, const double w, const double wipe_volume, int plate_extruder_size = 0, bool use_global_objects = false) const; - // plate_extruder_size: filaments purged on the plate; 0 derives them from its objects. + // plate_extruder_size: a floor on the filaments purged on the plate; its own are always + // counted, so 0 sizes for exactly those. // use_global_objects skips the containment test, which the CLI needs before objects are // assigned to plates - the layer height is then the project's thinnest, which over-reserves. WipeTowerFootprint estimate_wipe_tower_footprint(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index 9a6c5aa686..5a248075e4 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -184,11 +184,13 @@ TEST_CASE("The wipe tower's toolchange planner flush follows the gcode flavor", } // What Print feeds the shared estimate. The libslic3r WipeTowerEstimate cases cannot see this: -// they call the estimator directly. -static DynamicPrintConfig tower_estimate_config(const char *wall_type) +// they call the estimator directly. The estimate counts the filaments the print really uses, +// so the two-filament shape gives the outer wall the second one. +static DynamicPrintConfig tower_estimate_config(const char *wall_type, unsigned int filaments = 2) { // 100 mm3 per purge on a 50 mm wide tower: one purge is 100/(layer_height * 50) of depth. - return multifilament_config(2, { + return multifilament_config(filaments, { + { "outer_wall_filament_id", filaments == 2 ? "2" : "1" }, { "enable_prime_tower", "1" }, { "wipe_tower_wall_type", wall_type }, { "prime_tower_width", "50" }, @@ -277,7 +279,7 @@ TEST_CASE("A single-filament plate reserves a tower only when one is actually pr Model model; SECTION("no tool change and nothing else that prints one") { - const DynamicPrintConfig config = tower_estimate_config("rib"); + const DynamicPrintConfig config = tower_estimate_config("rib", 1); init_print({ cube(20) }, print, model, config); REQUIRE_FALSE(print.has_wipe_tower()); CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); @@ -287,7 +289,7 @@ TEST_CASE("A single-filament plate reserves a tower only when one is actually pr // Print::apply runs normalize_fdm_2, which clears enable_prime_tower for a plate that // purges one filament and has neither smooth timelapse nor wrapping detection on. SECTION("a raft alone does not print one") { - DynamicPrintConfig config = tower_estimate_config("rib"); + DynamicPrintConfig config = tower_estimate_config("rib", 1); config.set_deserialize_strict({ { "raft_layers", "3" } }); init_print({ cube(20) }, print, model, config); REQUIRE_FALSE(print.config().enable_prime_tower.value); @@ -296,7 +298,7 @@ TEST_CASE("A single-filament plate reserves a tower only when one is actually pr } SECTION("smooth timelapse prints one, and keeps enable_prime_tower on") { - DynamicPrintConfig config = tower_estimate_config("rib"); + DynamicPrintConfig config = tower_estimate_config("rib", 1); config.set_deserialize_strict({ { "timelapse_type", "1" } }); init_print({ cube(20) }, print, model, config); REQUIRE(print.has_wipe_tower()); @@ -312,13 +314,12 @@ TEST_CASE("A tower printed without a tool change is still validated against the // checked against the bed. Print print; Model model; - DynamicPrintConfig config = tower_estimate_config("rectangle"); + DynamicPrintConfig config = tower_estimate_config("rectangle", 1); // Relative E without a per-layer G92 is rejected before the tower is ever looked at, and // has_wipe_tower() wants a real exclusion polygon before it honours wrapping detection. config.set_deserialize_strict({ { "enable_wrapping_detection", "1" }, { "wrapping_exclude_area", "180x180,190x180,190x190,180x190" }, - { "wipe_tower_x", "500" }, { "wipe_tower_y", "500" }, - { "use_relative_e_distances", "0" } }); + { "wipe_tower_x", "500" }, { "wipe_tower_y", "500" }, { "use_relative_e_distances", "0" } }); init_print({ cube(20) }, print, model, config); REQUIRE(print.extruders(true).size() == 1); diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index dc8508743e..5c10ab1496 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -41,6 +41,7 @@ add_executable(${_TEST_NAME}_tests test_timeutils.cpp test_voronoi.cpp test_wipe_tower_estimate.cpp + test_wipe_tower.cpp test_optimizers.cpp test_ordering_strategies.cpp # test_png_io.cpp diff --git a/tests/libslic3r/test_wipe_tower.cpp b/tests/libslic3r/test_wipe_tower.cpp new file mode 100644 index 0000000000..2987dce9da --- /dev/null +++ b/tests/libslic3r/test_wipe_tower.cpp @@ -0,0 +1,93 @@ +#include + +#include + +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +// A Bambu P1S project that reproduced the off-plate brim: two PLAs priming 30 and 45 mm3 in +// separate adhesiveness categories on a 35 mm tower, 0.21 mm layers, 0.4 nozzle (0.5 mm lines), +// 150 % infill gap (0.75 mm line pitch), rib width 8, 16 mm tall. +static std::vector cube_purges(int first_category = 100) +{ + return {{30.f, first_category}, {45.f, 0}}; +} + +TEST_CASE("Cone base polygon bulges past the body box", "[WipeTower]") { + // Zero angle: plain body box. + const Polygon box = WipeTower2::cone_base_polygon(35., 20., 100., 0.); + CHECK(box.points.size() == 4); + CHECK(get_extents(box).size() == Point::new_scale(Vec2d(35., 20.))); + // A 25-degree cone on a 100 mm tower: base radius R = tan(12.5deg)*100 = 22.2 mm, + // which exceeds the body half-depth, so the footprint bulges to center +- R in y + // (support_scale keeps the x extent compressed near the body). + const Polygon base = WipeTower2::cone_base_polygon(35., 20., 100., 25.); + const BoundingBox bb = get_extents(base); + const double R = std::tan(25. / 2. * M_PI / 180.) * 100.; + CHECK_THAT(unscaled(bb.min.y()), WithinAbs(10. - R, 0.1)); + CHECK_THAT(unscaled(bb.max.y()), WithinAbs(10. + R, 0.1)); + // The footprint always contains the body box. + CHECK(diff(Polygons{box}, Polygons{base}).empty()); +} + +TEST_CASE("Type1 block-stack depth quantizes each purge to whole lines", "[WipeTower]") { + // A 0.5 mm line at 0.21 mm carries 0.0955 mm3 per mm, so across the 34 mm between the + // perimeters 30 mm3 is 10 lines and 45 mm3 is 14: 7.5 + 10.5 at the 0.75 mm pitch behind + // one perimeter width. The generated mesh of the project measured exactly this. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(cube_purges(), 35.f, 0.21f, 0.4f, 1.5f), WithinAbs(18.5f, 0.01f)); + // Sharing one category, a layer can never purge into every filament (one of them starts + // the layer), so the block is sized by its worst layer and the 10-line purge drops out. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(cube_purges(0), 35.f, 0.21f, 0.4f, 1.5f), WithinAbs(11.0f, 0.01f)); + CHECK_THAT(WipeTower::estimate_tower_blocks_depth({}, 35.f, 0.2f, 0.4f, 1.f), WithinAbs(0.f, 1e-6f)); + // A width narrower than two perimeter widths cannot hold purge lines. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth({{45.f, 0}}, 0.9f, 0.2f, 0.4f, 1.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("A nozzle change adds its ramming lines to the block", "[WipeTower]") { + // 10 mm of 1.75 mm filament (24.05 mm3) laid as 1.0 mm nozzle-change lines at 0.2 mm + // (0.1914 mm2 each) is 125.7 mm; across the 48.5 mm available that is 3 lines of 1.0 mm. + std::vector purges{{100.f, 0}, {100.f, 0}}; + const float without_change = WipeTower::estimate_tower_blocks_depth(purges, 50.f, 0.2f, 0.4f, 1.f); + purges.front().filament_change_length = 10.f; + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(purges, 50.f, 0.2f, 0.4f, 1.f) - without_change, WithinAbs(3.f, 1e-4f)); +} + +TEST_CASE("Rib tower footprint estimate covers the generated footprint", "[WipeTower]") { + // The generated first-layer wall bbox of the project measured 29.56 mm from the sliced + // G-code; the volume-only estimate said 23.585 mm. + const float side = WipeTower::estimate_rib_tower_bbox_side(cube_purges(), 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 16.f); + CHECK(side >= 29.56f); + CHECK(side <= 29.56f + 4.f); // without grossly over-reserving plate space + // Separate categories stack their blocks, so the footprint must not shrink when they differ. + CHECK(side >= WipeTower::estimate_rib_tower_bbox_side(cube_purges(0), 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 16.f)); + CHECK_THAT(WipeTower::estimate_rib_tower_bbox_side({}, 35.f, 0.2f, 0.4f, 1.f, 8.f, 0.f, 16.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("Rib footprint extends the ribs, not the body, below the stability minimum", "[WipeTower]") { + // A 10 mm body under a 90 mm print: the ribs stretch to the minimum depth's diagonal, and + // the rib width is capped at half the body, so the square grows to minimum + 5 / sqrt(2). + const float min_depth = WipeTower::get_limit_depth_by_height(90.f); + REQUIRE(min_depth > 10.f); + CHECK_THAT(WipeTower::rib_footprint_side(10.f, 10.f, 8.f, 0.f, 90.f), WithinAbs(min_depth + 5.f / std::sqrt(2.f), 1e-4f)); + // The extra rib length runs along the diagonal, so it shows as its projection on each axis. + const float plain = WipeTower::rib_footprint_side(30.f, 30.f, 8.f, 0.f, 5.f); + CHECK_THAT(plain, WithinAbs(30.f + 8.f / std::sqrt(2.f), 1e-4f)); + CHECK_THAT(WipeTower::rib_footprint_side(30.f, 30.f, 8.f, 4.f, 5.f) - plain, WithinAbs(4.f / std::sqrt(2.f), 1e-4f)); + // A negative extra length cannot pull the ribs inside the diagonal. + CHECK_THAT(WipeTower::rib_footprint_side(30.f, 30.f, 8.f, -4.f, 5.f), WithinAbs(plain, 1e-4f)); + CHECK_THAT(WipeTower::rib_footprint_side(0.f, 30.f, 8.f, 0.f, 5.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("Brim width estimate matches each generator's loop quantization", "[WipeTower]") { + // 3 mm configured, 0.4 nozzle, 0.2 first layer: 0.4571 mm spacing, 7 loops. WipeTower2 + // prints and reports the 7 loops; WipeTower reports half a spacing of line width on top. + const float spacing = 0.5f - 0.2f * float(1. - M_PI_4); + CHECK_THAT(WipeTower::estimate_brim_real_width(3.f, 0.4f, 0.2f, true), WithinAbs(7.f * spacing, 1e-4f)); + CHECK_THAT(WipeTower::estimate_brim_real_width(3.f, 0.4f, 0.2f, false), WithinAbs(7.5f * spacing, 1e-4f)); + CHECK_THAT(WipeTower::estimate_brim_real_width(0.f, 0.4f, 0.2f, true), WithinAbs(0.f, 1e-6f)); +} diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp index 00235bb2ff..ae0a92f40a 100644 --- a/tests/libslic3r/test_wipe_tower_estimate.cpp +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -6,6 +6,7 @@ #include "libslic3r/PrintConfig.hpp" #include +#include #include using namespace Slic3r; @@ -28,12 +29,16 @@ static DynamicPrintConfig make_config(const char *wall_type = "rectangle") DynamicPrintConfig config = preset_shaped_defaults(); config.set_key_value("prime_tower_width", new ConfigOptionFloat(50.)); config.set_key_value("prime_volume", new ConfigOptionFloat(100.)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({100.})); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({0})); config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(100.)); + config.set_key_value("wipe_tower_extra_spacing", new ConfigOptionPercent(100.)); config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(3.)); config.set_deserialize_strict("wipe_tower_wall_type", wall_type); config.set_key_value("wipe_tower_rib_width", new ConfigOptionFloat(8.)); config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4})); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2)); config.set_deserialize_strict("timelapse_type", "0"); config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); config.set_key_value("raft_layers", new ConfigOptionInt(0)); @@ -42,51 +47,133 @@ static DynamicPrintConfig make_config(const char *wall_type = "rectangle") return config; } +static std::vector filaments(size_t count) +{ + std::vector ids(count); + std::iota(ids.begin(), ids.end(), 0u); + return ids; +} + +// The first `count` filaments on the given planner; Type2 unless a case says otherwise. +static WipeTowerFootprint estimate(const ConfigBase &config, size_t count, double layer_height, double height, WipeTowerType type = WipeTowerType::Type2) +{ + return estimate_wipe_tower_footprint(config, type, filaments(count), layer_height, height); +} + +// What both planners print for a 3 mm brim at 0.4 nozzle and 0.2 first layer (0.4571 mm loops). +static double printed_brim(double configured, WipeTowerType type) +{ + return WipeTower::estimate_brim_real_width(float(configured), 0.4f, 0.2f, type == WipeTowerType::Type2); +} + TEST_CASE("A rectangle wall tower is sized by the purge volume", "[WipeTowerEstimate]") { const DynamicPrintConfig config = make_config(); // Three filaments purge twice per layer; a 5 mm object keeps the stability floor at 5 mm. - const WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5.); + const WipeTowerFootprint fp = estimate(config, 3, 0.2, 5.); CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); CHECK_THAT(fp.height, WithinAbs(5., 1e-9)); - CHECK_THAT(fp.brim_width, WithinAbs(3., 1e-9)); + CHECK_THAT(fp.brim_width, WithinAbs(printed_brim(3., WipeTowerType::Type2), 1e-6)); // Thinner layers need more depth for the same volume. - CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.1, 5.).depth, WithinAbs(40., 1e-9)); - // The infill gap spaces the purge lines. - DynamicPrintConfig spaced = config; - spaced.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); - CHECK_THAT(estimate_wipe_tower_footprint(spaced, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); + CHECK_THAT(estimate(config, 3, 0.1, 5.).depth, WithinAbs(40., 1e-9)); +} + +TEST_CASE("Each planner spaces its purge lines by its own option", "[WipeTowerEstimate]") { + // Type2 reads wipe_tower_extra_spacing and Type1 prime_tower_infill_gap; neither sees the + // other's key. Type2's extra flow cancels out of its depth. + DynamicPrintConfig config = make_config(); + config.set_key_value("wipe_tower_extra_flow", new ConfigOptionPercent(250.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(20., 1e-9)); + config.set_key_value("wipe_tower_extra_spacing", new ConfigOptionPercent(150.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); + const double type1_spaced = estimate(config, 3, 0.2, 5., WipeTowerType::Type1).depth; + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); + // Type1 stacks whole lines behind one 0.5 mm perimeter width, so only the stack scales. + CHECK_THAT(estimate(config, 3, 0.2, 5., WipeTowerType::Type1).depth - 0.5, WithinAbs(1.5 * (type1_spaced - 0.5), 1e-6)); +} + +TEST_CASE("Type1 sizes the tower from each filament's own prime volume", "[WipeTowerEstimate]") { + // The Bambu P1S project of the WipeTower cases: 30 and 45 mm3 in two categories on a 35 mm + // tower at 0.21 mm, 150 % gap, is 18.5 mm of stacked blocks (11 mm sharing one category). + DynamicPrintConfig config = make_config(); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(35.)); + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.21)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({30., 45.})); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({100, 0})); + const std::vector purges{{30.f, 100}, {45.f, 0}}; + const double blocks = WipeTower::estimate_tower_blocks_depth(purges, 35.f, 0.21f, 0.4f, 1.5f); + REQUIRE_THAT(blocks, WithinAbs(18.5, 0.01)); + CHECK_THAT(estimate(config, 2, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(blocks, 1e-4)); + // The ids pick the volumes, so their order does not matter and a lone filament has no purge. + CHECK_THAT(estimate_wipe_tower_footprint(config, WipeTowerType::Type1, {1, 0}, 0.21, 5.).depth, WithinAbs(blocks, 1e-4)); + CHECK_THAT(estimate(config, 1, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(0., 1e-9)); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({0, 0})); + CHECK_THAT(estimate(config, 2, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(11., 0.01)); + // A rib wall squares the same stack. + config.set_deserialize_strict("wipe_tower_wall_type", "rib"); + const WipeTowerFootprint rib = estimate(config, 2, 0.21, 5., WipeTowerType::Type1); + CHECK_THAT(rib.width, WithinAbs(rib.depth, 1e-9)); + CHECK_THAT(rib.depth, WithinAbs(WipeTower::estimate_rib_tower_bbox_side({{30.f, 0}, {45.f, 0}}, 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 5.f), 1e-4)); +} + +TEST_CASE("A second nozzle adds the ramming of one nozzle change per layer", "[WipeTowerEstimate]") { + // Two filaments on two nozzles: the tool order crosses once per layer, and Type1 rams 10 mm + // of filament as three 1.0 mm nozzle-change lines (see the WipeTower case). + DynamicPrintConfig config = make_config(); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + config.set_key_value("filament_change_length", new ConfigOptionFloats({10., 10.})); + config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); + config.set_key_value("filament_map", new ConfigOptionInts({1, 1})); + const double same_nozzle = estimate(config, 2, 0.2, 5., WipeTowerType::Type1).depth; + config.set_key_value("filament_map", new ConfigOptionInts({1, 2})); + CHECK_THAT(estimate(config, 2, 0.2, 5., WipeTowerType::Type1).depth - same_nozzle, WithinAbs(3., 1e-4)); +} + +TEST_CASE("The tower is sized for the first layer when it is the thinnest", "[WipeTowerEstimate]") { + // Both planners reserve the worst layer: a 0.28 mm print with a 0.2 mm first layer needs + // the 0.2 mm depth, while a thicker first layer changes nothing. + DynamicPrintConfig config = make_config(); + const double at_thinnest = estimate(config, 3, 0.2, 5.).depth; + CHECK_THAT(estimate(config, 3, 0.28, 5.).depth, WithinAbs(at_thinnest, 1e-9)); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.3)); + CHECK(estimate(config, 3, 0.28, 5.).depth < at_thinnest); } TEST_CASE("Object height sets the stability floor and the auto brim", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config(); // Two filaments purge once: 10 mm, lifted to the 20 mm floor of a 100 mm tower. - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 2, 0.2, 100.).depth, WithinAbs(20., 1e-9)); config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(-1.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 50.).brim_width, WithinAbs(WipeTower::get_auto_brim_by_height(50.f), 1e-6)); + const double auto_brim = WipeTower::get_auto_brim_by_height(50.f); + CHECK_THAT(estimate(config, 2, 0.2, 50.).brim_width, WithinAbs(printed_brim(auto_brim, WipeTowerType::Type2), 1e-6)); + CHECK_THAT(estimate(config, 2, 0.2, 50., WipeTowerType::Type1).brim_width, WithinAbs(printed_brim(auto_brim, WipeTowerType::Type1), 1e-6)); } TEST_CASE("A single filament only gets a tower when one is printed anyway", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config(); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 0, 0.2, 100.).width, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 0, 0.2, 100.).width, WithinAbs(0., 1e-9)); - // Wrapping detection prints a tower on the first layers whatever the filament count. + // Wrapping detection prints a tower on the first layers whatever the filament count: the + // Type1 planner's fixed 10 mm, the stability floor otherwise. config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(true)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100., WipeTowerType::Type1).depth, WithinAbs(WipeTower::get_wrapping_detection_depth(), 1e-9)); config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); // A raft is not one of them: normalize_fdm_2 clears enable_prime_tower for a plate that // purges one filament unless smooth timelapse or wrapping detection is on, so a raft // alone leaves no tower to reserve for. config.set_key_value("raft_layers", new ConfigOptionInt(3)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); config.set_key_value("raft_layers", new ConfigOptionInt(0)); config.set_deserialize_strict("timelapse_type", "1"); // Smooth timelapse primes the single filament once: 10 mm, lifted to the floor. - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, 5.).depth, WithinAbs(10., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 5.).depth, WithinAbs(10., 1e-9)); } TEST_CASE("A tool change reserves the stability floor even with nothing to purge", "[WipeTowerEstimate]") { @@ -97,9 +184,9 @@ TEST_CASE("A tool change reserves the stability floor even with nothing to purge DynamicPrintConfig config = make_config(GENERATE("rectangle", "rib")); config.set_key_value("prime_volume", new ConfigOptionFloat(0.)); - CHECK(estimate_wipe_tower_footprint(config, 3, 0.2, height).depth >= floor); + CHECK(estimate(config, 3, 0.2, height).depth >= floor); // Still nothing for a lone filament with no other reason. - CHECK_THAT(estimate_wipe_tower_footprint(config, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); } TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowerEstimate]") { @@ -110,41 +197,40 @@ TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowe DynamicPrintConfig rib = make_config("rib"); // No tool change and nothing else that prints a tower - neither wall type reserves one. - CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); // Not even on a dual-nozzle printer, where a lone filament still needs no purge. rect.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); rib.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); - CHECK_THAT(estimate_wipe_tower_footprint(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); - CHECK_THAT(estimate_wipe_tower_footprint(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); // With a tool change both reserve one, and both respect the stability floor. - CHECK(estimate_wipe_tower_footprint(rect, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); - CHECK(estimate_wipe_tower_footprint(rib, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate(rect, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate(rib, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); } TEST_CASE("A rib wall squares the tower and caps the rib width", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config("rib"); // sqrt(200 / 0.2) = 31.62 mm square, plus the 8 mm rib bulge along the diagonal. const double body = std::sqrt(1000.); - WipeTowerFootprint fp = estimate_wipe_tower_footprint(config, 3, 0.2, 5.); - CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + body, 1e-9)); + WipeTowerFootprint fp = estimate(config, 3, 0.2, 5.); + CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + body, 1e-5)); CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); - // The extra rib length grows the footprint. + // The extra rib length runs along the diagonal and grows the footprint by its projection. config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(4.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 3, 0.2, 5.).depth, WithinAbs(8. / std::sqrt(2.) + body + 4., 1e-9)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs((8. + 4.) / std::sqrt(2.) + body, 1e-5)); // A tiny tower caps the rib width at half its depth: 5 mm body, 2.5 mm rib. config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); config.set_key_value("prime_volume", new ConfigOptionFloat(5.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-9)); + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-5)); } TEST_CASE("Every wall and tower type is read the same from a preset and a static config", "[WipeTowerEstimate]") { // The GUI, arrange and the CLI pass a DynamicPrintConfig whose enums are // ConfigOptionEnumGeneric; Print passes a static config whose enums are ConfigOptionEnum. - // The wall type is read by value, so both give the same shape, and the wipe tower - // implementation is not an input to the footprint at all. + // Both the wall type and the planner selection are read by value, so both give the same shape. const char *wall_type = GENERATE("rectangle", "cone", "rib"); const char *tower_type = GENERATE("type1", "type2"); DynamicPrintConfig preset = make_config(wall_type); @@ -156,17 +242,18 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static REQUIRE(static_config.wipe_tower_wall_type.serialize() == wall_type); REQUIRE(static_config.wipe_tower_type.serialize() == tower_type); - // Three filaments purge twice per layer on a 5 mm object: a 50 x 20 rectangle, or a square. - const WipeTowerFootprint fp = estimate_wipe_tower_footprint(preset, 3, 0.2, 5.); - if (std::string(wall_type) == "rib") { - CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); - CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + std::sqrt(1000.), 1e-9)); - } else { - CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); - CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); - } + const WipeTowerType type = resolve_wipe_tower_type(preset); + CHECK(type == (std::string(tower_type) == "type1" ? WipeTowerType::Type1 : WipeTowerType::Type2)); + CHECK(resolve_wipe_tower_type(static_config) == type); - const WipeTowerFootprint from_static = estimate_wipe_tower_footprint(static_config, 3, 0.2, 5.); + // Three filaments purge twice per layer on a 5 mm object. + const WipeTowerFootprint fp = estimate(preset, 3, 0.2, 5., type); + const WipeTowerFootprint from_static = estimate(static_config, 3, 0.2, 5., type); + CHECK(fp.depth > 0.); + if (std::string(wall_type) == "rib") + CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); + else + CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); CHECK_THAT(from_static.width, WithinAbs(fp.width, 1e-9)); CHECK_THAT(from_static.depth, WithinAbs(fp.depth, 1e-9)); CHECK_THAT(from_static.brim_width, WithinAbs(fp.brim_width, 1e-9)); @@ -175,8 +262,19 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static // through both storages too. preset.set_deserialize_strict("timelapse_type", "1"); static_config.apply(preset, true); - CHECK(estimate_wipe_tower_footprint(preset, 1, 0.2, 5.).depth > 0.); - CHECK(estimate_wipe_tower_footprint(static_config, 1, 0.2, 5.).depth > 0.); + CHECK(estimate(preset, 1, 0.2, 5., type).depth > 0.); + CHECK(estimate(static_config, 1, 0.2, 5., type).depth > 0.); +} + +TEST_CASE("A Bambu Lab printer always gets the Type1 planner", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + config.set_deserialize_strict("wipe_tower_type", "type2"); + config.set_key_value("printer_model", new ConfigOptionString("Bambu Lab X1 Carbon")); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type1); + config.set_key_value("printer_model", new ConfigOptionString("Voron 2.4")); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type2); + config.erase("wipe_tower_type"); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type2); } TEST_CASE("A dual nozzle purges every filament plus the filament change", "[WipeTowerEstimate]") { @@ -186,7 +284,7 @@ TEST_CASE("A dual nozzle purges every filament plus the filament change", "[Wipe config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); // Two purges of 100 mm3 plus one 10 mm filament change: (200 + 10 * pi * 1.75^2 / 4) / (0.2 * 50). const double change_volume = 10. * PI * 1.75 * 1.75 / 4.; - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); } TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTowerEstimate]") { @@ -201,19 +299,18 @@ TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTow const double flush_volume = WipeTower2::estimate_semm_flush_volume(config, 2); const double expected = std::max(double(WipeTower::get_limit_depth_by_height(5.f)), flush_volume / (0.2 * 50.)); - CHECK_THAT(estimate_wipe_tower_footprint(config, 2, 0.2, 5.).depth, WithinAbs(expected, 1e-6)); + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs(expected, 1e-6)); } TEST_CASE("A config missing a tower key falls back to that key's default", "[WipeTowerEstimate]") { // The signature takes any ConfigBase: an absent key must read as its declared default. const DynamicPrintConfig full = make_config(); DynamicPrintConfig partial = full; - partial.erase("prime_tower_infill_gap"); - REQUIRE(partial.option("prime_tower_infill_gap") == nullptr); + partial.erase("wipe_tower_extra_spacing"); + REQUIRE(partial.option("wipe_tower_extra_spacing") == nullptr); DynamicPrintConfig defaulted = full; - defaulted.set_key_value("prime_tower_infill_gap", - print_config_def.get("prime_tower_infill_gap")->default_value->clone()); - CHECK_THAT(estimate_wipe_tower_footprint(partial, 3, 0.2, 5.).depth, - WithinAbs(estimate_wipe_tower_footprint(defaulted, 3, 0.2, 5.).depth, 1e-9)); + defaulted.set_key_value("wipe_tower_extra_spacing", + print_config_def.get("wipe_tower_extra_spacing")->default_value->clone()); + CHECK_THAT(estimate(partial, 3, 0.2, 5.).depth, WithinAbs(estimate(defaulted, 3, 0.2, 5.).depth, 1e-9)); } From e17965be53168549985551da55439d54cfe5272d Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 14:52:26 +0800 Subject: [PATCH 149/208] Brim and Cone Aware Preview --- src/slic3r/GUI/3DScene.cpp | 41 ++++++++++++++++++++++++++++++++--- src/slic3r/GUI/GLCanvas3D.cpp | 4 +++- src/slic3r/GUI/Selection.cpp | 7 +++--- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index f65c0e3532..a21deaf209 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -20,6 +20,9 @@ #include "libslic3r/AppConfig.hpp" #include "libslic3r/PresetBundle.hpp" #include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/Tesselate.hpp" #include "libslic3r/PrintConfig.hpp" @@ -919,6 +922,33 @@ int GLVolumeCollection::load_wipe_tower_preview( GUI::PartPlateList& ppl = GUI::wxGetApp().plater()->get_partplate_list(); std::vector plate_extruders = ppl.get_plate(plate_idx)->get_extruders(true); TriangleMesh wipe_tower_shell = make_cube(width, depth, height); + // The brim is part of the printed footprint: draw it and fold it into the shell so the + // outside-bed shader and the drag clamp react to the true first-layer extent. + const bool show_brim = brim_width > 0.f; + const float brim_height = 0.2f; // one first layer, visual only + TriangleMesh brim_slab; + if (show_brim) { + // A Type2 cone-wall tower's base bulges past the body box — follow the real base + // outline instead of the rectangle. Type1 ignores the cone option. + Polygon cone_base; + { + // Preset enums are ConfigOptionEnumGeneric, so read them by value; the planner is + // resolved as the estimate resolves it, off the printer preset. + const DynamicPrintConfig &print_cfg = GUI::wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig &printer_cfg = GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; + const ConfigOption *wall_opt = print_cfg.option("wipe_tower_wall_type"); + if (wall_opt != nullptr && wall_opt->getInt() == int(WipeTowerWallType::wtwCone) && resolve_wipe_tower_type(printer_cfg) == WipeTowerType::Type2) + cone_base = WipeTower2::cone_base_polygon(width, depth, height, print_cfg.opt_float("wipe_tower_cone_angle")); + } + if (!cone_base.empty()) { + Polygons brim_outline = offset(cone_base, scaled(brim_width)); + brim_slab = WipeTower::its_make_rib_brim(brim_outline.empty() ? cone_base : brim_outline.front(), brim_height); + } else { + brim_slab = make_cube(width + 2.f * brim_width, depth + 2.f * brim_width, brim_height); + brim_slab.translate({-brim_width, -brim_width, 0.f}); + } + wipe_tower_shell.merge(brim_slab); + } for (int extruder_id : plate_extruders) { if (extruder_id <= extruder_colors.size()) colors.push_back(extruder_colors[extruder_id - 1]); @@ -929,14 +959,19 @@ int GLVolumeCollection::load_wipe_tower_preview( // Orca: make it transparent for(auto& color : colors) color.a(0.66f); + const size_t slab_count = colors.size(); // per-filament body slabs; the brim part comes after + if (show_brim && !colors.empty()) + colors.push_back(colors.front()); volumes.emplace_back(new GLWipeTowerVolume(colors)); GLWipeTowerVolume& v = *dynamic_cast(volumes.back()); v.model_per_colors.resize(colors.size()); - for (int i = 0; i < colors.size(); i++) { - TriangleMesh color_part = make_cube(width, depth / colors.size(), height); - color_part.translate({ 0.f, depth * i / colors.size(), 0. }); + for (size_t i = 0; i < slab_count; i++) { + TriangleMesh color_part = make_cube(width, depth / slab_count, height); + color_part.translate({ 0.f, depth * i / slab_count, 0. }); v.model_per_colors[i].init_from(color_part); } + if (show_brim && !colors.empty()) + v.model_per_colors[slab_count].init_from(brim_slab); v.model.init_from(wipe_tower_shell); v.mesh_raycaster = std::make_unique(std::make_shared(wipe_tower_shell)); v.set_convex_hull(wipe_tower_shell); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 5ad6151c68..8d72405cdd 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2907,7 +2907,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); // set_default_wipe_tower_pos_for_plate doesn't rerun when painting changes the - // filament count, so redo its clamp here on every reload. + // filament count, so redo its clamp here on every reload — unconditionally: a + // paint-triggered reload can arrive before the background process invalidates + // psWipeTower, so gating on it would skip the clamp exactly when it is needed. { Vec3d clamped_pos, clamped_size; part_plate->estimate_wipe_tower_polygon(full_config, plate_id, clamped_pos, clamped_size); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index b6d7abde21..e74cc832a8 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1274,9 +1274,10 @@ void Selection::translate(const Vec3d &displacement, TransformationType transfor Vec3d tower_origin = m_cache.volumes_data[i].get_volume_position(); Vec3d actual_displacement = displacement; bool show_read_wipe_tower = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->fff_print()->is_step_done(psWipeTower); - float brim_width = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("prime_tower_brim_width"); - - const double margin = show_read_wipe_tower ? WIPE_TOWER_MARGIN : brim_width + 0.5; // 0.5 is the line width of wipe tower + // Both preview volumes carry the brim in their bounding box (the estimate + // preview merges a brim slab, the sliced preview the real brim mesh), so the + // drag clamp only pads by the wipe tower line width. + const double margin = show_read_wipe_tower ? WIPE_TOWER_MARGIN : 0.5; // 0.5 is the line width of wipe tower actual_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()) From 4c583212f58519fff74ff92ba767fb03e42e8e4b Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 15:51:31 +0800 Subject: [PATCH 150/208] Match Drag Margin to Release Clamp --- src/slic3r/GUI/Selection.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index e74cc832a8..84f4a0b836 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1273,11 +1273,9 @@ void Selection::translate(const Vec3d &displacement, TransformationType transfor const Polygons bed_polys{wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->get_shared_printable_polygon()}; Vec3d tower_origin = m_cache.volumes_data[i].get_volume_position(); Vec3d actual_displacement = displacement; - bool show_read_wipe_tower = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->fff_print()->is_step_done(psWipeTower); - // Both preview volumes carry the brim in their bounding box (the estimate - // preview merges a brim slab, the sliced preview the real brim mesh), so the - // drag clamp only pads by the wipe tower line width. - const double margin = show_read_wipe_tower ? WIPE_TOWER_MARGIN : 0.5; // 0.5 is the line width of wipe tower + // Both preview volumes carry the brim in their bounding box, and the release + // clamp holds it WIPE_TOWER_MARGIN inside — same margin, so drops don't snap. + const double margin = WIPE_TOWER_MARGIN; actual_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()) From 869805132ec1ec80f29a9a83f6bc9030b4873600 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 17:07:48 +0800 Subject: [PATCH 151/208] Add Separate Comfort Margin for Auto Placement --- src/libslic3r/libslic3r.h | 3 +++ src/slic3r/GUI/PartPlate.cpp | 25 +++++++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index 6584566f40..c339da566a 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -93,6 +93,9 @@ static constexpr double INSET_OVERLAP_TOLERANCE = 0.4; static constexpr double EXTERNAL_INFILL_MARGIN = 3; static constexpr double BRIDGE_INFILL_MARGIN = 1; static constexpr double WIPE_TOWER_MARGIN = 1.; +// Margin for system placement of the wipe tower (defaults, re-placement, CLI). Positions +// within WIPE_TOWER_MARGIN stay valid: a user drag down to that limit is respected. +static constexpr double WIPE_TOWER_AUTO_MARGIN = 15.; //FIXME Better to use an inline function with an explicit return type. //inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); } #define scale_(val) ((val) / SCALING_FACTOR) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index beb244a39c..bf511ec657 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2404,13 +2404,26 @@ arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const Dynamic const BoundingBox cb = get_extents(WipeTower2::cone_base_polygon(w, depth, wt_size.z(), cone_angle_opt->getFloat())); wp_brim_width += float(std::max({0., unscaled(cb.max.x()) - w, unscaled(cb.max.y()) - depth, -unscaled(cb.min.x()), -unscaled(cb.min.y())})); } + // A position valid by WIPE_TOWER_MARGIN is the user's choice and stays untouched; an + // invalid one is re-placed with the comfort margin (falling back to the validity bounds + // on cramped plates). std::clamp is UB if lo > hi, so keep every hi >= lo. const float margin = WIPE_TOWER_MARGIN + wp_brim_width; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; - - // A tower too deep for the plate leaves no valid position: clamping with hi < lo is UB and - // in release silently returns the negative hi. - x = std::clamp(x, margin, std::max(margin, (float)plate_width - w - margin)); - y = std::clamp(y, margin, std::max(margin, (float)plate_depth - depth - margin)); + const float x_hi = std::max(margin, (float) plate_width - w - margin); + const float y_hi = std::max(margin, (float) plate_depth - depth - margin); + const float margin_c = (float) WIPE_TOWER_AUTO_MARGIN + wp_brim_width; + float x_lo_c = margin_c, x_hi_c = (float) plate_width - w - margin_c; + if (x_lo_c > x_hi_c) { x_lo_c = margin; x_hi_c = x_hi; } + float y_lo_c = margin_c, y_hi_c = (float) plate_depth - depth - margin_c; + if (y_lo_c > y_hi_c) { y_lo_c = margin; y_hi_c = y_hi; } + // Drag clamps reach this limit through the volume's bounding box (post-slice: the real + // mesh, a couple of mm inside this reserved estimate), so a drop can land slightly out + // of bounds — snap it onto the bound; only far-out positions get the comfort re-place. + const float tol = 5.f; + if (x < margin - tol || x > x_hi + tol) x = std::clamp(x, x_lo_c, x_hi_c); + else x = std::clamp(x, margin, x_hi); + if (y < margin - tol || y > y_hi + tol) y = std::clamp(y, y_lo_c, y_hi_c); + else y = std::clamp(y, margin, y_hi); wt_pos(0) = x; wt_pos(1) = y; wt_pos(2) = 0.f; @@ -4504,7 +4517,7 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini // Brim-aware margin: the brim extends outward from the tower position. const float brim_width = float(footprint.brim_width); - const float margin = WIPE_TOWER_MARGIN + brim_width; + const float margin = WIPE_TOWER_AUTO_MARGIN + brim_width; // clamp wipe tower position within plate boundaries { From 2fdc16f9f28cdaf5951e0f2e29282dc1f749adeb Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Tue, 8 Sep 2026 14:43:34 +0800 Subject: [PATCH 152/208] Size a no-purge tower at the planners' idle depth Smooth timelapse no longer charges a prime volume it does not purge. A tower printed with no tool change is exactly the idle depth: the stability minimum for Type2, the wrapping detection depth for Type1. Charging a full prime_volume on top made the previewed and arranged tower deeper than the one that is printed. The Type2 half of "a tool change reserves a tower whatever the purge volumes resolve to" arrives with the base commit; here it only has to survive the planner split, since Type1 already reserves per filament. The wipe tower filament only joins the tool ordering when there is a tower to join, which is the has_wipe_tower() half of the guard Print::extruders applies. --- src/libslic3r/GCode/WipeTowerEstimate.cpp | 9 +++---- src/slic3r/GUI/PartPlate.cpp | 6 +++-- tests/libslic3r/test_wipe_tower_estimate.cpp | 26 ++++++++++++-------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp index 6fee774e9c..f40f2899fd 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.cpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -96,12 +96,9 @@ WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, WipeT // normalize_fdm_2 clearing enable_prime_tower. Its mixed-filament case is not modelled. const bool need_wipe_tower = smooth_timelapse || wrapping; - // No tool change, nothing to purge; smooth timelapse still primes once. - size_t purge_count = 0; - if (filaments_cnt > 1) - purge_count = dual_nozzle ? filaments_cnt : filaments_cnt - 1; - else if (smooth_timelapse) - purge_count = 1; + // A tower printed for one of the reasons above has no tool change to purge for; both + // planners give it the idle depth below and nothing more. + const size_t purge_count = filaments_cnt > 1 ? (dual_nozzle ? filaments_cnt : filaments_cnt - 1) : 0; // Type2 purges one volume per tool change. Type1 plans per filament below; here the volume // only decides whether a tower exists. diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index bf511ec657..e73d43b782 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2341,10 +2341,12 @@ WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintCo if (std::find(plate_extruders.begin(), plate_extruders.end(), id) == plate_extruders.end()) plate_extruders.push_back(id); // The wipe tower filament joins the tool ordering even when unused (Print::extruders), so - // validation counts it. + // validation counts it - but only where there is a tower to join, which is the + // has_wipe_tower() half of that guard. const ConfigOption *wipe_tower_filament_opt = config.option("wipe_tower_filament"); + const ConfigOption *enable_prime_tower_opt = config.option("enable_prime_tower"); const int wipe_tower_filament = wipe_tower_filament_opt != nullptr ? wipe_tower_filament_opt->getInt() : 0; - if (plate_extruders.size() > 1 && wipe_tower_filament > 0 && + if (enable_prime_tower_opt != nullptr && enable_prime_tower_opt->getBool() && plate_extruders.size() > 1 && wipe_tower_filament > 0 && std::find(plate_extruders.begin(), plate_extruders.end(), wipe_tower_filament) == plate_extruders.end()) plate_extruders.push_back(wipe_tower_filament); if (plate_extruders.empty()) diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp index ae0a92f40a..fee5c1f152 100644 --- a/tests/libslic3r/test_wipe_tower_estimate.cpp +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -171,22 +171,28 @@ TEST_CASE("A single filament only gets a tower when one is printed anyway", "[Wi config.set_key_value("raft_layers", new ConfigOptionInt(0)); config.set_deserialize_strict("timelapse_type", "1"); - // Smooth timelapse primes the single filament once: 10 mm, lifted to the floor. + // A tower printed with no tool change is exactly the planner's idle depth: there is + // nothing to purge, and WipeTower2 sizes it at the stability floor. CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); - CHECK_THAT(estimate(config, 1, 0.2, 5.).depth, WithinAbs(10., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 5.).depth, WithinAbs(WipeTower::get_limit_depth_by_height(5.f), 1e-9)); } -TEST_CASE("A tool change reserves the stability floor even with nothing to purge", "[WipeTowerEstimate]") { - // The purge volumes are configurable down to zero, but the tool changes are still printed on - // the tower and the generator still floors it, so the estimate has to floor it too. - const double height = GENERATE(5., 100.); - const float floor = WipeTower::get_limit_depth_by_height(float(height)); - DynamicPrintConfig config = make_config(GENERATE("rectangle", "rib")); +TEST_CASE("A tool change reserves a tower even with nothing to purge", "[WipeTowerEstimate]") { + // The purge volumes are configurable down to zero, but the tool changes are still printed + // on the tower and both planners still floor it - so the estimate has to floor it too. + // Type1 plans per filament and already reserves one; Type2 has only the volume to go on. + const double height = GENERATE(5., 100.); + const float floor = WipeTower::get_limit_depth_by_height(float(height)); + const char *wall = GENERATE("rectangle", "rib"); + DynamicPrintConfig config = make_config(wall); config.set_key_value("prime_volume", new ConfigOptionFloat(0.)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({0.})); - CHECK(estimate(config, 3, 0.2, height).depth >= floor); + CHECK(estimate(config, 3, 0.2, height, WipeTowerType::Type2).depth >= floor); + CHECK(estimate(config, 3, 0.2, height, WipeTowerType::Type1).depth >= floor); // Still nothing for a lone filament with no other reason. - CHECK_THAT(estimate(config, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, height, WipeTowerType::Type2).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, height, WipeTowerType::Type1).depth, WithinAbs(0., 1e-9)); } TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowerEstimate]") { From 81357695c518c090cf32d18777978dc880d89556 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 14:52:12 +0800 Subject: [PATCH 153/208] Verify WipeTower Footprint at Point of Generation The clamps and validation work from estimates. Once the tower is generated, _make_wipe_tower re-tests the exact first-layer footprint, brim and cone base included, against the printable area and the exclusion zone, so an off-plate tower fails with a clear error instead of exporting unprintable G-code. The rectangle-wall mesh footprint learns the Type2 cone base so that check and the post-generation validation see the real outline. Pre-generation, validation hard-checks the body plus an explicit brim and warns on the estimated auto brim and cone base with the existing "may collide" strings, so the user hears about a marginal position on the first slice rather than only at generation time. Two fff_print fixtures that print a tower at the default position move it onto the 200 mm test bed, as the multifilament fixtures already do: the shipped default y of 220 is off that bed, and the backstop now says so instead of exporting the tower. --- src/libslic3r/Print.cpp | 87 +++++++++++++++++++++++----- src/libslic3r/Print.hpp | 2 +- tests/fff_print/test_gcodewriter.cpp | 3 + tests/fff_print/test_wipe_tower.cpp | 2 + 4 files changed, 78 insertions(+), 16 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 271e410933..1b54a527ea 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1068,33 +1068,57 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, convex_hulls_temp.push_back(wipe_tower_polygon); } } + // Post-generation the mesh bottom already carries the brim. Pre-generation the body grows + // by the brim only when its width is explicit; the auto brim and a Type2 cone base depend on + // the tower height, exact only once generated, so they only warn here - the exact footprint + // is re-checked in _make_wipe_tower. + const bool exact_footprint = print.is_step_done(psWipeTower); + Polygons tower_polys_checked = (!exact_footprint && config.prime_tower_brim_width.value >= 0) ? + offset(convex_hulls_temp, float(scale_(brim_width))) : + convex_hulls_temp; + Polygons tower_polys_estimated; + if (!exact_footprint && !convex_hulls_temp.empty()) { + Polygon base = convex_hulls_temp.front(); + if (config.wipe_tower_wall_type.value == WipeTowerWallType::wtwCone && print.wipe_tower_type() == WipeTowerType::Type2) { + double max_height = 0.; + for (const PrintObject *object : print.objects()) + max_height = std::max(max_height, unscale_(object->size().z())); + base = WipeTower2::cone_base_polygon(width, depth, max_height, config.wipe_tower_cone_angle.value); + base.rotate(Geometry::deg2rad(a)); + base.translate(Point(scale_(x), scale_(y))); + } + tower_polys_estimated = offset(base, float(scale_(brim_width))); + } + // Object proximity stays a body-only warning: brim near-misses would newly warn on + // many setups that print fine. if (!intersection(convex_hulls_other, convex_hulls_temp).empty()) { if (warning) { warning->string += L("Prime Tower") + L(" is too close to others, and collisions may be caused.\n"); } } - if (!intersection(exclude_polys, convex_hulls_temp).empty()) { - /*if (warning) { - warning->string += L("Prime Tower is too close to exclusion area, there may be collisions when printing.\n"); - }*/ + if (!intersection(exclude_polys, tower_polys_checked).empty()) { return {L("Prime Tower") + L(" is too close to an exclusion area, and collisions will be caused.\n")}; } - if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, convex_hulls_temp).empty()) { + if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, tower_polys_checked).empty()) { return {L("Prime Tower") + L(" is too close to clumping detection area, and collisions will be caused.\n")}; } - // No gate on "is there a tower": one that is not printed estimates to zero, so the hull - // is degenerate and every check passes. Re-deriving it here missed the wrapping-detection + if (warning && !intersection(exclude_polys, tower_polys_estimated).empty()) { + warning->string += L("Prime Tower") + L(" is too close to exclusion area, there may be collisions when printing.") + "\n"; + } + if (warning && print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, tower_polys_estimated).empty()) { + warning->string += L("Prime Tower") + L(" is too close to clumping detection area, there may be collisions when printing.") + "\n"; + } + // No gate on "is there a tower": one that is not printed estimates to zero, so the hulls + // are degenerate and every check passes. Re-deriving it here missed the wrapping-detection // tower on a single-filament plate. - // Pre-generation, grow the body by the brim to match what the generator draws; - // post-generation the mesh already includes it. Polygons printable_polys = print.get_extruder_shared_printable_polygon(); const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); for (Polygon &p : printable_polys) p.translate(plate_shift); - Polygons tower_polys_with_brim = print.is_step_done(psWipeTower) ? - convex_hulls_temp : offset(convex_hulls_temp, float(scale_(brim_width))); - if (!diff(tower_polys_with_brim, printable_polys).empty()) + if (!diff(tower_polys_checked, printable_polys).empty()) return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; + if (warning && !diff(tower_polys_estimated, printable_polys).empty()) + warning->string += L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n"); return {}; } @@ -4390,7 +4414,9 @@ void Print::_make_wipe_tower() wipe_tower.get_wipe_tower_height(), wipe_tower.get_brim_width(), config().wipe_tower_wall_type.value == WipeTowerWallType::wtwRib, wipe_tower.get_rib_width(), wipe_tower.get_rib_length(), - config().wipe_tower_fillet_wall.value); + config().wipe_tower_fillet_wall.value, + config().wipe_tower_wall_type.value == WipeTowerWallType::wtwCone ? + (float) config().wipe_tower_cone_angle.value : 0.f); const Vec3d origin = Vec3d::Zero(); // FakeWipeTower::pos is a bed-frame translation applied after rotation // (getFakeExtrusionPathsFromWipeTower2 rotates about the local origin), so the @@ -4403,6 +4429,28 @@ void Print::_make_wipe_tower() config().wipe_tower_rotation_angle, config().wipe_tower_cone_angle, {scale_(origin.x()), scale_(origin.y())}); } + + // The clamps and checks above work from estimates; re-test the exact generated footprint + // so an off-plate tower fails with a clear error instead of exporting unprintable G-code + // (validate() only sees the mesh on its next run). + if (m_wipe_tower_data.wipe_tower_mesh_data) { + Polygon footprint = m_wipe_tower_data.wipe_tower_mesh_data->bottom; // includes brim and rib offset + footprint.rotate(Geometry::deg2rad(m_config.wipe_tower_rotation_angle.value)); + footprint.translate(Point(scale_(m_config.wipe_tower_x.get_at(m_plate_index)), + scale_(m_config.wipe_tower_y.get_at(m_plate_index)))); + const Polygons printable_polys = this->get_extruder_shared_printable_polygon(); + if (!printable_polys.empty() && !diff(Polygons{footprint}, printable_polys).empty()) { + const BoundingBox fp = get_extents(footprint); + const BoundingBox pr = get_extents(printable_polys); + BOOST_LOG_TRIVIAL(error) << boost::format("wipe tower footprint [%1%,%2%]-[%3%,%4%] leaves printable [%5%,%6%]-[%7%,%8%]") % + unscaled(fp.min.x()) % unscaled(fp.min.y()) % unscaled(fp.max.x()) % unscaled(fp.max.y()) % + unscaled(pr.min.x()) % unscaled(pr.min.y()) % unscaled(pr.max.x()) % unscaled(pr.max.y()); + throw Slic3r::SlicingError(L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")); + } + // The cutter/purge corner is a physical obstacle — the brim must stay out like the body. + if (!intersection(get_bed_excluded_area(m_config), Polygons{footprint}).empty()) + throw Slic3r::SlicingError(L("Prime Tower") + L(" is too close to an exclusion area, and collisions will be caused.\n")); + } } // Generate a recommended G-code output file name based on the format template, default extension, and template parameters @@ -5951,12 +5999,21 @@ ExtrusionLayers FakeWipeTower::getTrueExtrusionLayersFromWipeTower() const } return wtels; } -void WipeTowerData::construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length,bool fillet_wall) +void WipeTowerData::construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length,bool fillet_wall, float cone_angle) { wipe_tower_mesh_data = WipeTowerMeshData{}; float first_layer_height=0.08; //brim height if (width < EPSILON || depth < EPSILON || height < EPSILON) return; - if (!is_rib_wipe_tower || rib_length < EPSILON) { + if (cone_angle > EPSILON && (!is_rib_wipe_tower || rib_length < EPSILON)) { + // Cone tower: the base bulges past the body box; this bottom polygon feeds the + // containment checks, so it must carry the bulge and the brim (cone not lofted). + wipe_tower_mesh_data->real_wipe_tower_mesh = make_cube(width, depth, height); + wipe_tower_mesh_data->bottom = WipeTower2::cone_base_polygon(width, depth, height, cone_angle); + auto brim_bottom = offset(wipe_tower_mesh_data->bottom, scaled(brim_width)); + if (!brim_bottom.empty()) + wipe_tower_mesh_data->bottom = brim_bottom.front(); + wipe_tower_mesh_data->real_brim_mesh = WipeTower::its_make_rib_brim(wipe_tower_mesh_data->bottom, first_layer_height); + } else if (!is_rib_wipe_tower || rib_length < EPSILON) { wipe_tower_mesh_data->real_wipe_tower_mesh = make_cube(width, depth, height); wipe_tower_mesh_data->real_brim_mesh = make_cube(width + 2 * brim_width, depth + 2 * brim_width, first_layer_height); wipe_tower_mesh_data->real_brim_mesh.translate({-brim_width, -brim_width, 0}); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index af1dc3af40..9822c5520c 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -804,7 +804,7 @@ struct WipeTowerData rib_offset = Vec2f::Zero(); wipe_tower_mesh_data = std::nullopt; } - void construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length, bool fillet_wall); + void construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length, bool fillet_wall, float cone_angle = 0.f); private: // Only allow the WipeTowerData to be instantiated internally by Print, diff --git a/tests/fff_print/test_gcodewriter.cpp b/tests/fff_print/test_gcodewriter.cpp index b09b38e794..c0c9e794b9 100644 --- a/tests/fff_print/test_gcodewriter.cpp +++ b/tests/fff_print/test_gcodewriter.cpp @@ -574,6 +574,9 @@ static DynamicPrintConfig dual_extruder_toolchange_config() config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240})); config.set_key_value("flush_multiplier", new ConfigOptionFloats({1})); config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 140, 140, 0})); + // Inside the 200x200 test bed; the default y, 220, is not, and generation rejects that. + config.set_key_value("wipe_tower_x", new ConfigOptionFloats({50.})); + config.set_key_value("wipe_tower_y", new ConfigOptionFloats({50.})); return config; } diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index 5a248075e4..24d50d6e66 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -152,6 +152,8 @@ static DynamicPrintConfig wipe_tower_toolchange_config(const std::string &gcode_ { "outer_wall_filament_id", 2 }, { "inner_wall_filament_id", 2 }, { "enable_prime_tower", true }, + { "wipe_tower_x", 50 }, // inside the 200x200 test bed + { "wipe_tower_y", 50 }, // (the default y, 220, is not) { "layer_height", 0.3 }, { "gcode_flavor", gcode_flavor }, }); From fae77be3db53af3f87a8fdf561f77450f9ace0a6 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Mon, 7 Sep 2026 21:04:15 +0800 Subject: [PATCH 154/208] Place the Wipe Tower in the Profile Validator The validator forces a two-filament print with the prime tower on and slices it at the config default position (x 15, y 220), which lies off any bed shallower than the tower. It calls validate() but slices regardless, so the off-plate tower was exported silently; with the generation-time footprint check it is rejected instead, and 522 of the 1013 printer presets failed the slice check. The validator now positions the tower the way the GUI and CLI do before slicing: beside the centred cube, clear of the edge exclusion strips some beds carry, then pulled inside the printable outline by the tower's own estimated footprint. --- .../OrcaSlicer_profile_validator.cpp | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/dev-utils/OrcaSlicer_profile_validator.cpp b/src/dev-utils/OrcaSlicer_profile_validator.cpp index 67d0ba444d..56acbaa732 100644 --- a/src/dev-utils/OrcaSlicer_profile_validator.cpp +++ b/src/dev-utils/OrcaSlicer_profile_validator.cpp @@ -8,7 +8,11 @@ #define NANOSVGRAST_IMPLEMENTATION #include "nanosvg/nanosvgrast.h" +#include "libslic3r/BoundingBox.hpp" #include "libslic3r/GCode.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" +#include "libslic3r/Geometry.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/Config.hpp" #include "libslic3r/PresetBundle.hpp" @@ -116,15 +120,45 @@ Vec2d printable_area_center(const DynamicPrintConfig &cfg) return 0.5 * (lo + hi); } +// Put the prime tower where the GUI and CLI would before slicing. The config default (x 15, y 220) +// lies off any bed shallower than the tower, and generation rejects an off-plate tower instead of +// exporting it. Beside the centred cube, clear of the edge exclusion strips some beds carry, then +// pulled inside the printable outline by the tower's own estimated footprint, with a few mm of +// clearance so the conflict checker never sees the two touch. +void place_wipe_tower(DynamicPrintConfig &cfg, const Vec2d ¢er) +{ + const auto *area = cfg.option("printable_area"); + if (area == nullptr || area->values.size() < 3) + return; + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(cfg, resolve_wipe_tower_type(cfg), {0, 1}, cfg.opt_float("layer_height"), 10.); + if (footprint.depth < EPSILON) + return; + const double margin = WIPE_TOWER_MARGIN + footprint.brim_width; + // The position is the tower's own origin; a rotated tower extends from it in another + // direction, so place the rotated box's extents rather than the origin. + Slic3r::Polygon box({Point::new_scale(0., 0.), Point::new_scale(footprint.width, 0.), Point::new_scale(footprint.width, footprint.depth), Point::new_scale(0., footprint.depth)}); + box.rotate(Geometry::deg2rad(cfg.opt_float("wipe_tower_rotation_angle"))); + const BoundingBox local = get_extents(box); + const Vec2d lo = unscale(local.min); + const Vec2d size = unscale(local.max) - lo; + Vec2d pos(center.x() + 5. + margin + 5. - lo.x(), center.y() - size.y() / 2. - lo.y()); + box.translate(Point::new_scale(pos.x(), pos.y())); + const Vec2f move = WipeTower::move_box_inside_polygon(get_extents(box), Polygons{Polygon::new_scale(area->values)}, scaled(margin)); + pos += move.cast(); + cfg.option("wipe_tower_x", true)->values = {pos.x()}; + cfg.option("wipe_tower_y", true)->values = {pos.y()}; +} + // Slice one centered cube that switches from filament 1 to filament 2 partway up, so exactly one // filament change fires, then export. The change drives the printer's own change_filament_gcode: on a // single-nozzle machine it rides the AMS prime tower (append_tcr), on a multi-nozzle machine it routes // through the nozzle swap (set_extruder / append_tcr2) - the engine picks the path from the printer's // topology, so one model covers both. An undefined placeholder in any shipped custom g-code throws // Slic3r::PlaceholderParserError from export. -std::string slice_two_color_cube_and_export(const DynamicPrintConfig &cfg, bool is_bbl) +std::string slice_two_color_cube_and_export(DynamicPrintConfig cfg, bool is_bbl) { const Vec2d center = printable_area_center(cfg); + place_wipe_tower(cfg, center); TriangleMesh m = make_cube(10, 10, 10); m.translate(float(center.x() - 5.), float(center.y() - 5.), 0.f); From 2f2a6bc3b5039603d3b2b78fcd97104e7474a196 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Mon, 7 Sep 2026 19:41:01 +0800 Subject: [PATCH 155/208] Share the Estimated First-Layer Outline of the Wipe Tower The preview brim, the placement margin and the pre-generation validation warning each decided on their own whether the tower has a Type2 cone base, reading the wall type and cone angle three different ways. The preview's read cast the preset's enum to ConfigOptionEnum, which a preset-shaped config never holds, so the cone base was never previewed. estimate_wipe_tower_first_layer_outline now answers that question once, beside the footprint estimate, from the config and the resolved planner; all three sites take the outline from it. The libslic3r case reads the outline off a preset-shaped config, where the old cast came back empty. --- src/libslic3r/GCode/WipeTowerEstimate.cpp | 11 ++++++++ src/libslic3r/GCode/WipeTowerEstimate.hpp | 8 ++++++ src/libslic3r/Print.cpp | 15 ++++------ src/slic3r/GUI/3DScene.cpp | 27 +++++------------- src/slic3r/GUI/PartPlate.cpp | 12 ++------ tests/libslic3r/test_wipe_tower_estimate.cpp | 29 ++++++++++++++++++++ 6 files changed, 64 insertions(+), 38 deletions(-) diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp index f40f2899fd..d8cfe74527 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.cpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -37,6 +37,17 @@ WipeTowerType resolve_wipe_tower_type(const ConfigBase &config) return type != nullptr ? WipeTowerType(type->getInt()) : WipeTowerType::Type2; } +Polygon estimate_wipe_tower_first_layer_outline(const ConfigBase &config, WipeTowerType tower_type, double width, double depth, double height) +{ + // Type1 ignores the cone option. The wall type is read by value: a preset-shaped config + // holds it as ConfigOptionEnumGeneric, which a cast to ConfigOptionEnum cannot see. + const ConfigOption *wall_type = option_of(config, "wipe_tower_wall_type"); + const ConfigOption *cone_angle = option_of(config, "wipe_tower_cone_angle"); + const bool cone = tower_type == WipeTowerType::Type2 && wall_type != nullptr && + wall_type->getInt() == int(WipeTowerWallType::wtwCone) && cone_angle != nullptr; + return WipeTower2::cone_base_polygon(width, depth, height, cone ? cone_angle->getFloat() : 0.); +} + WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, WipeTowerType tower_type, const std::vector &filament_ids, double layer_height, double max_object_height) { WipeTowerFootprint footprint; diff --git a/src/libslic3r/GCode/WipeTowerEstimate.hpp b/src/libslic3r/GCode/WipeTowerEstimate.hpp index 5b333005e8..387028649b 100644 --- a/src/libslic3r/GCode/WipeTowerEstimate.hpp +++ b/src/libslic3r/GCode/WipeTowerEstimate.hpp @@ -2,6 +2,8 @@ #include +#include "../Polygon.hpp" + namespace Slic3r { class ConfigBase; @@ -23,6 +25,12 @@ struct WipeTowerFootprint // the GUI and CLI placement can resolve it without a Print. WipeTowerType resolve_wipe_tower_type(const ConfigBase &config); +// First-layer outline of an estimated tower in tower-local scaled coordinates, brim excluded: +// the body box, or for a Type2 cone wall the box unioned with the cone's base. The preview, +// the placement margin and validation all take the outline from here so they cannot disagree +// about whether a cone exists. +Polygon estimate_wipe_tower_first_layer_outline(const ConfigBase &config, WipeTowerType tower_type, double width, double depth, double height); + // filament_ids: 0-based filaments purged on the plate. The config cannot see custom G-code tool // changes, so ids derived from the model must include them // (Print::extruders(true)) or a real tower is sized as if it were never built. diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 1b54a527ea..60f747ce04 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1078,15 +1078,12 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, convex_hulls_temp; Polygons tower_polys_estimated; if (!exact_footprint && !convex_hulls_temp.empty()) { - Polygon base = convex_hulls_temp.front(); - if (config.wipe_tower_wall_type.value == WipeTowerWallType::wtwCone && print.wipe_tower_type() == WipeTowerType::Type2) { - double max_height = 0.; - for (const PrintObject *object : print.objects()) - max_height = std::max(max_height, unscale_(object->size().z())); - base = WipeTower2::cone_base_polygon(width, depth, max_height, config.wipe_tower_cone_angle.value); - base.rotate(Geometry::deg2rad(a)); - base.translate(Point(scale_(x), scale_(y))); - } + double max_height = 0.; + for (const PrintObject *object : print.objects()) + max_height = std::max(max_height, unscale_(object->size().z())); + Polygon base = estimate_wipe_tower_first_layer_outline(config, print.wipe_tower_type(), width, depth, max_height); + base.rotate(Geometry::deg2rad(a)); + base.translate(Point(scale_(x), scale_(y))); tower_polys_estimated = offset(base, float(scale_(brim_width))); } // Object proximity stays a body-only warning: brim near-misses would newly warn on diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index a21deaf209..6dbea1272a 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -21,7 +21,6 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/GCode/WipeTower.hpp" -#include "libslic3r/GCode/WipeTower2.hpp" #include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/Tesselate.hpp" #include "libslic3r/PrintConfig.hpp" @@ -928,25 +927,13 @@ int GLVolumeCollection::load_wipe_tower_preview( const float brim_height = 0.2f; // one first layer, visual only TriangleMesh brim_slab; if (show_brim) { - // A Type2 cone-wall tower's base bulges past the body box — follow the real base - // outline instead of the rectangle. Type1 ignores the cone option. - Polygon cone_base; - { - // Preset enums are ConfigOptionEnumGeneric, so read them by value; the planner is - // resolved as the estimate resolves it, off the printer preset. - const DynamicPrintConfig &print_cfg = GUI::wxGetApp().preset_bundle->prints.get_edited_preset().config; - const DynamicPrintConfig &printer_cfg = GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; - const ConfigOption *wall_opt = print_cfg.option("wipe_tower_wall_type"); - if (wall_opt != nullptr && wall_opt->getInt() == int(WipeTowerWallType::wtwCone) && resolve_wipe_tower_type(printer_cfg) == WipeTowerType::Type2) - cone_base = WipeTower2::cone_base_polygon(width, depth, height, print_cfg.opt_float("wipe_tower_cone_angle")); - } - if (!cone_base.empty()) { - Polygons brim_outline = offset(cone_base, scaled(brim_width)); - brim_slab = WipeTower::its_make_rib_brim(brim_outline.empty() ? cone_base : brim_outline.front(), brim_height); - } else { - brim_slab = make_cube(width + 2.f * brim_width, depth + 2.f * brim_width, brim_height); - brim_slab.translate({-brim_width, -brim_width, 0.f}); - } + // The brim follows the real first-layer outline: a Type2 cone-wall tower's base bulges + // past the body box. The wall type and angle are print settings, the planner a printer one. + const DynamicPrintConfig &print_cfg = GUI::wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig &printer_cfg = GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; + const Polygon outline = estimate_wipe_tower_first_layer_outline(print_cfg, resolve_wipe_tower_type(printer_cfg), width, depth, height); + const Polygons brim_outline = offset(outline, scaled(brim_width)); + brim_slab = WipeTower::its_make_rib_brim(brim_outline.empty() ? outline : brim_outline.front(), brim_height); wipe_tower_shell.merge(brim_slab); } for (int extruder_id : plate_extruders) { diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index e73d43b782..90e2c96ab6 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -22,7 +22,6 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/Polygon.hpp" #include "libslic3r/GCode/WipeTowerEstimate.hpp" -#include "libslic3r/GCode/WipeTower2.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/BoundingBox.hpp" #include "libslic3r/Geometry.hpp" @@ -2398,14 +2397,9 @@ arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const Dynamic // clamp put the brim off the bed. Matches set_default_wipe_tower_pos_for_plate. float wp_brim_width = float(footprint.brim_width); // A Type2 stabilization cone bulges past the body box like a brim does - fold its worst-axis - // bulge into the same margin (Type1 ignores the cone option). - const auto *cone_wall_opt = config.option("wipe_tower_wall_type"); - const auto *cone_angle_opt = config.option("wipe_tower_cone_angle"); - if (cone_wall_opt != nullptr && cone_wall_opt->getInt() == int(WipeTowerWallType::wtwCone) && cone_angle_opt != nullptr && - cone_angle_opt->getFloat() > EPSILON && resolve_wipe_tower_type(config) == WipeTowerType::Type2) { - const BoundingBox cb = get_extents(WipeTower2::cone_base_polygon(w, depth, wt_size.z(), cone_angle_opt->getFloat())); - wp_brim_width += float(std::max({0., unscaled(cb.max.x()) - w, unscaled(cb.max.y()) - depth, -unscaled(cb.min.x()), -unscaled(cb.min.y())})); - } + // bulge into the same margin. + const BoundingBox outline = get_extents(estimate_wipe_tower_first_layer_outline(config, resolve_wipe_tower_type(config), w, depth, wt_size.z())); + wp_brim_width += float(std::max({0., unscaled(outline.max.x()) - w, unscaled(outline.max.y()) - depth, -unscaled(outline.min.x()), -unscaled(outline.min.y())})); // A position valid by WIPE_TOWER_MARGIN is the user's choice and stays untouched; an // invalid one is re-placed with the comfort margin (falling back to the validity bounds // on cramped plates). std::clamp is UB if lo > hi, so keep every hi >= lo. diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp index fee5c1f152..20644200f3 100644 --- a/tests/libslic3r/test_wipe_tower_estimate.cpp +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -1,5 +1,7 @@ #include +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" #include "libslic3r/GCode/WipeTower.hpp" #include "libslic3r/GCode/WipeTower2.hpp" #include "libslic3r/GCode/WipeTowerEstimate.hpp" @@ -272,6 +274,33 @@ TEST_CASE("Every wall and tower type is read the same from a preset and a static CHECK(estimate(static_config, 1, 0.2, 5., type).depth > 0.); } +TEST_CASE("The first-layer outline bulges only for a Type2 cone wall", "[WipeTowerEstimate]") { + // Read off a preset-shaped config, whose enums are ConfigOptionEnumGeneric: a cast to + // ConfigOptionEnum sees no wall type there and would never find the cone. + DynamicPrintConfig config = make_config("cone"); + config.set_key_value("wipe_tower_cone_angle", new ConfigOptionFloat(25.)); + REQUIRE(dynamic_cast(config.option("wipe_tower_wall_type")) != nullptr); + const Polygon box = Polygon::new_scale({{0., 0.}, {35., 0.}, {35., 20.}, {0., 20.}}); + auto is_box = [&box](const Polygon &outline) { return diff(Polygons{outline}, Polygons{box}).empty(); }; + + // A 25-degree cone on a 100 mm tower has a 22 mm base radius, past the 10 mm half-depth. + const Polygon cone = estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type2, 35., 20., 100.); + CHECK(unscaled(get_extents(cone).max.y()) > 20. + 1.); + CHECK(diff(Polygons{box}, Polygons{cone}).empty()); + // Type1 ignores the cone option, and the other wall types have no cone. + CHECK(is_box(estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type1, 35., 20., 100.))); + for (const char *wall_type : {"rectangle", "rib"}) { + config.set_deserialize_strict("wipe_tower_wall_type", wall_type); + CHECK(is_box(estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type2, 35., 20., 100.))); + } + // The static config Print holds gives the same outline. + config.set_deserialize_strict("wipe_tower_wall_type", "cone"); + FullPrintConfig static_config; + static_config.apply(config, true); + const Polygon from_static = estimate_wipe_tower_first_layer_outline(static_config, WipeTowerType::Type2, 35., 20., 100.); + CHECK(from_static.points == cone.points); +} + TEST_CASE("A Bambu Lab printer always gets the Type1 planner", "[WipeTowerEstimate]") { DynamicPrintConfig config = make_config(); config.set_deserialize_strict("wipe_tower_type", "type2"); From 284539d76245243837848e18fafed595284177ef Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 3 Sep 2026 14:52:26 +0800 Subject: [PATCH 156/208] [CLI]: Place Wipe Tower before Slicing A plain CLI slice ran none of the placement sites, so a stored or default tower position that no longer fits the tower the plate needs went straight to the generation-time error. The slice loop now applies the same clamp the GUI applies on reload to every plate it is about to slice, skipping only plates that print no tower: by-object plates with more than one instance, and plates whose footprint estimate is empty (which covers single-filament plates without smooth timelapse, wrapping detection or a raft). The plate's filaments come from the same config-driven derivation the estimate uses everywhere else. The two arrange sites read the brim width from the right option when padding the default position; an auto brim uses its 8 mm cap there, since the object heights are unknown before the estimate runs. --- src/OrcaSlicer.cpp | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 5b1d2da1bf..1f85cf7358 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -4832,7 +4832,10 @@ int CLI::run(int argc, char **argv) int plate_count = partplate_list.get_plate_count(); auto printer_structure_opt = m_print_config.option>("printer_structure"); - const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + // This margin only pre-adjusts the default away from the near edges; + // estimate_wipe_tower_polygon below computes the real clamped position. + float tower_brim_width = m_print_config.option("prime_tower_brim_width", true)->value; + if (tower_brim_width < 0.f) tower_brim_width = 8.f; // auto: object heights unknown here, 8 mm is the auto cap const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; // set the default position, the same with print config(left top) @@ -5129,7 +5132,10 @@ int CLI::run(int argc, char **argv) int extruder_size = used_filament_set.size(); auto printer_structure_opt = m_print_config.option>("printer_structure"); - const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + // This margin only pre-adjusts the default away from the near edges; + // estimate_wipe_tower_polygon below computes the real clamped position. + float tower_brim_width = m_print_config.option("prime_tower_brim_width", true)->value; + if (tower_brim_width < 0.f) tower_brim_width = 8.f; // auto: object heights unknown here, 8 mm is the auto cap const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; // set the default position, the same with print config(left top) float x = WIPE_TOWER_DEFAULT_X_POS; @@ -5792,6 +5798,34 @@ int CLI::run(int argc, char **argv) //Print fff_print; std::vector plate_triangle_counts(partplate_list.get_plate_count(), 0); + // The stored (or default) tower position may not fit the tower these plates + // need, and no CLI placement site runs on a plain slice - mirror the GUI's + // reload clamp and fit every plate's tower into the printable area first. + if (m_print_config.option("enable_prime_tower", true)->value) { + for (int index = 0; index < partplate_list.get_plate_count(); index++) { + if ((plate_to_slice != 0) && (plate_to_slice != (index + 1))) + continue; + Slic3r::GUI::PartPlate *plate = partplate_list.get_plate(index); + // Printing by object disables the tower only with more than one instance. + bool is_seq_print = false; + get_print_sequence(plate, m_print_config, is_seq_print); + if (is_seq_print && plate->printable_instance_size() > 1) + continue; + // An empty estimate is a plate that prints no tower (one filament and + // neither smooth timelapse, wrapping detection nor a raft). + Vec3d wt_pos, wt_size; + plate->estimate_wipe_tower_polygon(m_print_config, index, wt_pos, wt_size); + if (wt_size(0) < EPSILON || wt_size(1) < EPSILON) + continue; + ConfigOptionFloat wt_x_opt((float) wt_pos(0)); + ConfigOptionFloat wt_y_opt((float) wt_pos(1)); + m_print_config.option("wipe_tower_x", true)->set_at(&wt_x_opt, index, 0); + m_print_config.option("wipe_tower_y", true)->set_at(&wt_y_opt, index, 0); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: wipe tower clamped to {%2%, %3%}, size {%4%, %5%}") + % (index + 1) % wt_pos(0) % wt_pos(1) % wt_size(0) % wt_size(1); + } + } + while(!finished) { //BBS: slice every partplate one by one From d112a0af290671599490678ef2a5cf7601209a16 Mon Sep 17 00:00:00 2001 From: MAVProxyUser Date: Wed, 9 Sep 2026 06:39:08 -0400 Subject: [PATCH 157/208] Fix two stack buffer overflows in ADMesh stl_read (unbounded solid name + MW metadata parse) (#15594) Fix two stack buffer overflows in ADMesh stl_read (solid name + MW parse) Bound the ASCII-STL solid-name fscanf scanset to the buffer size, and bound the OrcaSlicer-specific "MW" metadata sscanf %s conversions to their buffers: - fscanf(fp, " solid %[^\n]", solid_name) -> %255[^\n] (solid_name[256]) - sscanf(mw_position+3, "%s %s %s", ...) -> %15s %127s %15s (version_str[16], model_id_str[128], country_code_str[16]) Both are reachable by opening a crafted .stl and overwrite saved stack state (instruction-pointer control on the no-PAC arm64 macOS build). The solid-name defect is inherited from the shared ADMesh loader (bambulab/BambuStudio#12153); the MW parse is OrcaSlicer-specific. Co-authored-by: Kevin Finisterre Co-authored-by: Claude Opus 4.8 --- deps_src/admesh/stlinit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps_src/admesh/stlinit.cpp b/deps_src/admesh/stlinit.cpp index a69bd5497a..9d44cdf266 100644 --- a/deps_src/admesh/stlinit.cpp +++ b/deps_src/admesh/stlinit.cpp @@ -162,7 +162,7 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor rewind(fp); try{ char solid_name[256]; - int res_solid = fscanf(fp, " solid %[^\n]", solid_name); + int res_solid = fscanf(fp, " solid %255[^\n]", solid_name); if (res_solid == 1) { char* mw_position = strstr(solid_name, "MW"); if (mw_position != NULL) { @@ -170,7 +170,7 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor char version_str[16]; char model_id_str[128]; char country_code_str[16]; - int num_values = sscanf(mw_position + 3, "%s %s %s", version_str, model_id_str, country_code_str); + int num_values = sscanf(mw_position + 3, "%15s %127s %15s", version_str, model_id_str, country_code_str); if (num_values == 3) { if (strcmp(version_str, "1.0") == 0) { model_id = model_id_str; From 10c123f2aa4b815116e9f8f5c74708b04d096469 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 05:41:51 -0500 Subject: [PATCH 158/208] build: clear 6 warnings - data passed as ImGui format strings (#15585) ImGui::Text and ImGui::TextColored take a printf format, so these six sites passed data where a literal belonged. A % in that data reads a vararg that was never supplied. Three sites in GLCanvas3D's paint toolbar passed filament text, which comes from the filament preset config and is user-editable. Two more passed translated strings, where a % in any of the 23 catalogs does the same. GLGizmoSimplify passed its progress label. That label had been built with an escaped %% because it was being used as a format string. Passing it as an argument instead needs a single %, so it still renders as "42%". ToUTF8() returns a buffer class, which converts to const char* for a named parameter but not through varargs, so those two sites need .data(). GLGizmoSimplify.cpp:335 is unchanged, because _u8L("%d triangles") is passed with a real argument and has to stay a format string. --- src/slic3r/GUI/GLCanvas3D.cpp | 10 +++++----- src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 8d72405cdd..6921a72271 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -9780,18 +9780,18 @@ void GLCanvas3D::_render_paint_toolbar() const ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - number_label_size.x) / 2); - ImGui::TextColored(text_color, std::to_string(i + 1).c_str()); + ImGui::TextColored(text_color, "%s", std::to_string(i + 1).c_str()); imgui.pop_bold_font(); ImVec2 filament_first_line_label_size = ImGui::CalcTextSize(filament_text_first_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_first_line_label_size.x) / 2); - ImGui::TextColored(text_color, filament_text_first_line[i].c_str()); + ImGui::TextColored(text_color, "%s", filament_text_first_line[i].c_str()); ImVec2 filament_second_line_label_size = ImGui::CalcTextSize(filament_text_second_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y + filament_first_line_label_size.y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_second_line_label_size.x) / 2); - ImGui::TextColored(text_color, filament_text_second_line[i].c_str()); + ImGui::TextColored(text_color, "%s", filament_text_second_line[i].c_str()); } if (ImGui::GetWindowWidth() == constraint_window_width) { @@ -10018,9 +10018,9 @@ void GLCanvas3D::_render_assemble_info() const double size1 = m_selection.get_bounding_box().size()(1); double size2 = m_selection.get_bounding_box().size()(2); if (!m_selection.is_empty()) { - ImGui::Text(_L("Volume:").ToUTF8()); ImGui::SameLine(caption_max); + ImGui::Text("%s", _L("Volume:").ToUTF8().data()); ImGui::SameLine(caption_max); ImGui::Text("%.2f", size0 * size1 * size2); - ImGui::Text(_L("Size:").ToUTF8()); ImGui::SameLine(caption_max); + ImGui::Text("%s", _L("Size:").ToUTF8().data()); ImGui::SameLine(caption_max); ImGui::Text("%.2f x %.2f x %.2f", size0, size1, size2); } imgui->end(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index f4fa1fbbb9..6a08d5eff4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -343,12 +343,12 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing,ImVec2(10,20)); if (is_worker_running) { // apply or preview // draw progress bar - std::string progress_text = GUI::format("%1%", std::to_string(progress)) + "%%"; + std::string progress_text = GUI::format("%1%", std::to_string(progress)) + "%"; ImVec2 progress_size(bottom_left_width - space_size, 0.0f); ImGui::BBLProgressBar2(progress / 100., progress_size); ImGui::SameLine(); ImGui::AlignTextToFramePadding(); - ImGui::TextColored(ImVec4(0.42f, 0.42f, 0.42f, 1.00f), progress_text.c_str()); + ImGui::TextColored(ImVec4(0.42f, 0.42f, 0.42f, 1.00f), "%s", progress_text.c_str()); ImGui::SameLine(bottom_left_width + slider_width + m_imgui->scaled(1.0f)); } else { ImGui::Dummy(ImVec2(bottom_left_width - space_size, -1)); From c70a6135483f2e54826dbc4f2bb64b2b40a868c7 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 05:43:08 -0500 Subject: [PATCH 159/208] build: clear 8 warnings - && inside || without parentheses (#15587) Every edit makes the precedence the compiler already applies explicit. None of them regroups an expression, so behavior is unchanged at all eight sites. Strip parentheses and whitespace from the diff and the token stream matches. GCodeProcessor.cpp:1472 tests == where the symmetric clause below tests !=, which reads like a typo and is not one. A comment now explains why. OrcaSlicer.cpp:4760 was the only judgment call. Its leading !is_seq_print is bare while both operands are parenthesized, so the written form matches what the compiler does. Kept rather than guessed at. --- src/OrcaSlicer.cpp | 2 +- src/libslic3r/GCode/GCodeProcessor.cpp | 8 +++++--- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 4 ++-- src/slic3r/GUI/SelectMachine.cpp | 2 +- src/slic3r/GUI/UnsavedChangesDialog.cpp | 4 ++-- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 1f85cf7358..15e7f85c46 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -4826,7 +4826,7 @@ int CLI::run(int argc, char **argv) } } - if (!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1)||(enable_wrapping_detect && !current_wrapping_exclude_area.empty())) + if ((!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1))||(enable_wrapping_detect && !current_wrapping_exclude_area.empty())) { //prepare the wipe tower int plate_count = partplate_list.get_plate_count(); diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index cd6c494f33..0b3db0323b 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -1468,9 +1468,11 @@ void GCodeProcessor::run_post_process() // Append a per-filament usage block at a filament change. auto handle_filament_change = [&](int filament_id, int cur_line_id, int nozzle_id) { - // skip filament changes emitted inside the machine start / end gcode - if (m_machine_start_gcode_end_line_id == (unsigned int) (-1) && (unsigned int) (cur_line_id) < m_machine_start_gcode_end_line_id || - m_machine_end_gcode_start_line_id != (unsigned int) (-1) && (unsigned int) (cur_line_id) > m_machine_end_gcode_start_line_id) + // Skip filament changes emitted inside the machine start / end gcode. One forward pass assigns + // the tag ids and tests them in the same loop, so inside the start gcode the end tag is unseen + // and the id still holds the sentinel. That is why the first clause tests == and the second !=. + if ((m_machine_start_gcode_end_line_id == (unsigned int) (-1) && (unsigned int) (cur_line_id) < m_machine_start_gcode_end_line_id) || + (m_machine_end_gcode_start_line_id != (unsigned int) (-1) && (unsigned int) (cur_line_id) > m_machine_end_gcode_start_line_id)) return; if (!m_filament_blocks.empty()) m_filament_blocks.back().upper_gcode_id = cur_line_id; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 6921a72271..556faaa763 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2191,7 +2191,7 @@ void GLCanvas3D::render(bool only_init) // Negative coordinate means out of the window, likely because the window was deactivated. // In that case the tooltip should be hidden. - if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0. || has_mouse_capture()) { // ORCA continue to capture mouse pos mid drag + if ((m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) || has_mouse_capture()) { // ORCA continue to capture mouse pos mid drag if (tooltip.empty()) tooltip = m_layers_editing.get_tooltip(*this); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 2d8816960b..109d7b3c10 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3667,8 +3667,8 @@ void Sidebar::update_presets(Preset::Type preset_type) // so extruders without an explicit sub-nozzle count never offer Hybrid. A nullable-int // nil is INT_MAX (> 1) and would otherwise falsely pass the gate, so exclude it too. if (boost::algorithm::contains(extruder_variants->values[index], type + " " + nozzle_volumes_def->enum_labels[i]) || - extruder_max_nozzle_count->get_at(index) > 1 && extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && - nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid) { + (extruder_max_nozzle_count->get_at(index) > 1 && extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && + nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid)) { if (nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == NozzleVolumeType::nvtHighFlow &&(diameter == "0.2" || is_skip_high_flow_printer(printer_model))) continue; diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 41ee523fbe..629aef7296 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3073,7 +3073,7 @@ static bool _HasExt(const std::vector &ams_mapping_result) { }; for (const auto &info : ams_mapping_result) { - if (info.ams_id == VIRTUAL_AMS_MAIN_ID_STR || info.ams_id == VIRTUAL_AMS_DEPUTY_ID_STR && !info.ams_id.empty()) { + if (info.ams_id == VIRTUAL_AMS_MAIN_ID_STR || (info.ams_id == VIRTUAL_AMS_DEPUTY_ID_STR && !info.ams_id.empty())) { return true; } } diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 5c69466cfa..0cb35fb139 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1281,8 +1281,8 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& } auto opt_vector = dynamic_cast(option); - if (option->is_scalar() && config.option(opt_key)->is_nil() || - option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx)) + if ((option->is_scalar() && config.option(opt_key)->is_nil()) || + (option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx))) return _L("N/A"); wxString out; From a3c9041c10b23c2112a506d5cb857da0390d9f95 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 05:45:25 -0500 Subject: [PATCH 160/208] build: clear 2 warnings - sites GCC reports and Clang does not (#15597) Both are in our own code and neither shows up in a clang-cl or clang census, so the Windows and CI matrices have never reported them. FillRectilinear.cpp draws two trapezoid diagrams whose lines end in a backslash, which continues a // comment onto the next line. GCC calls that a multi-line comment. The diagrams are now block comments, where the rule does not apply, and the drawings are unchanged. CutObjectBase has a user-provided operator= and a virtual destructor, either of which deprecates its implicitly generated copy constructor. bbs_3mf.cpp copies the type through CutObjectInfo. The copy constructor is now declared and defaulted, leaving the class with no implicit copy member. Move operations were already suppressed by the user-provided operator=, so nothing changes there. --- src/libslic3r/Fill/FillRectilinear.cpp | 19 +++++++++++-------- src/libslic3r/ObjectID.hpp | 4 ++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index db340748ab..7edf350081 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3090,10 +3090,11 @@ bool FillRectilinear::fill_surface_trapezoidal( case 0: // Grid / Trapezoidal { // Generate a non-crossing trapezoidal pattern to avoid overextrusion at intersections when `multiline > 1`. - // P2--P3 - // / \ - // P0_P1/ \P4_ - // + /* + * P2--P3 + * / \ + * P0_P1/ \P4_ + */ // P0xP1x=P4xP0x=d1/2 // P2xP3x=d1 // P1yP2y=P2yP3y=d2 @@ -3171,10 +3172,12 @@ bool FillRectilinear::fill_surface_trapezoidal( case 1: // Triangular { // Generate a non-crossing trapezoidal pattern with a base line below. - // P1-P2 - // / \ - // P0/ \P3_P4 - // ---------------- + /* + * P1-P2 + * / \ + * P0/ \P3_P4 + * ---------------- + */ // P1xP2x=P3xP4x=d2 // P0yP1y=P2yP3y=h-2d1 // diff --git a/src/libslic3r/ObjectID.hpp b/src/libslic3r/ObjectID.hpp index f2697b74f5..56042bbaa3 100644 --- a/src/libslic3r/ObjectID.hpp +++ b/src/libslic3r/ObjectID.hpp @@ -170,6 +170,10 @@ public: this->m_check_sum = rhs.check_sum(); this->m_connectors_cnt = rhs.connectors_cnt(); } + // A user-declared copy assignment or destructor deprecates the implicitly generated + // copy constructor, and this class has both, so declare it rather than rely on it. + CutObjectBase(const CutObjectBase &) = default; + CutObjectBase &operator=(const CutObjectBase &other) { this->copy(other); From 46180c3f543964e5349fa0a2db10de0b37184930 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 05:51:10 -0500 Subject: [PATCH 161/208] build: clear 3 warnings - a precedence bug, an arm64-only pragma, and a CLI error label (#15601) * build: clear 2 warnings - a precedence bug and an arm64-only pragma Both were found by promoting every warning to an error across the CI matrix. Neither is reported by clang-cl on Windows x64, which is the configuration the #15374 inventory measures. LineSplit.hpp reserved with path.size() + closed ? 1 : 0. Addition binds tighter than ?:, so that parses as (path.size() + closed) ? 1 : 0, and the function returns early when path is empty, so the condition is always true and the reserve is always 1. The vector then grows by reallocation instead of reserving once. Output is unaffected, since reserve only sets capacity. Reported by Clang on Linux, macOS and Flatpak; GCC does not diagnose it. Int128.hpp declared #pragma intrinsic(_mul128) under _WIN64, which is defined on Windows arm64 as well, where that x64 intrinsic does not exist. The call site at line 190 is already guarded on _M_X64 and carries a comment saying ARM64 has no _mul128, so the pragma now uses the same guard. x64 is unchanged because _M_X64 is defined there. * build: clear 1 warning - CLI error label prints 1 instead of a name construct_assemble_list is a function, so streaming it converts the function pointer to bool. When that catch block fires the CLI prints "1: ". This line was already fixed in #5963 and came back in the wholesale revert of that PR two weeks later, which was reverting an auto-orientation regression somewhere in its 184 files. The string is restored exactly as it was merged then. --- src/OrcaSlicer.cpp | 2 +- src/libslic3r/Algorithm/LineSplit.hpp | 2 +- src/libslic3r/Int128.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 15e7f85c46..1cbf76ef5a 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1925,7 +1925,7 @@ int CLI::run(int argc, char **argv) } } catch (std::exception& e) { - boost::nowide::cerr << construct_assemble_list << ": " << e.what() << std::endl; + boost::nowide::cerr << "construct_assemble_list: " << e.what() << std::endl; record_exit_reson(outfile_dir, CLI_DATA_FILE_ERROR, 0, cli_errors[CLI_DATA_FILE_ERROR], sliced_info); flush_and_exit(CLI_DATA_FILE_ERROR); } diff --git a/src/libslic3r/Algorithm/LineSplit.hpp b/src/libslic3r/Algorithm/LineSplit.hpp index 58b9fdc34a..e12113fa6c 100644 --- a/src/libslic3r/Algorithm/LineSplit.hpp +++ b/src/libslic3r/Algorithm/LineSplit.hpp @@ -49,7 +49,7 @@ SplittedLine split_line(const PathType& path, const ExPolygons& clip, bool close // Convert the input path into an open ZPath ClipperZUtils::ZPath p; - p.reserve(path.size() + closed ? 1 : 0); + p.reserve(path.size() + (closed ? 1 : 0)); ClipperLib_Z::cInt z = 0; for (const auto& point : path) { p.emplace_back(point.x(), point.y(), z); diff --git a/src/libslic3r/Int128.hpp b/src/libslic3r/Int128.hpp index e7238ca745..e55ef64cfb 100644 --- a/src/libslic3r/Int128.hpp +++ b/src/libslic3r/Int128.hpp @@ -57,7 +57,7 @@ #define HAS_INTRINSIC_128_TYPE #endif -#if defined(_MSC_VER) && defined(_WIN64) +#if defined(_MSC_VER) && defined(_M_X64) #include #pragma intrinsic(_mul128) #endif From fa3dbfcc6f9a093f5aa33833121a16561e7cce3d Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 05:55:19 -0500 Subject: [PATCH 162/208] fix: clear 1 warning - report the real error when a Windows G-code export fails (#15582) fix: report the real error when a Windows G-code export fails copy_file built its failure message as "Error: " + errCode. Adding a DWORD to a string literal is pointer arithmetic, not concatenation, so the pointer lands errCode bytes into an 8-byte literal and runs past its end for any code above 7. std::string then calls strlen on it and throws length_error, and the catch(...) in BackgroundSlicingProcess::finalize_gcode replaces the diagnosis with "Unknown error occurred during exporting G-code." Every code a user is likely to hit is past the end: write-protected media is 19, no media 21, a full disk 112, and a destination held open by another program 32. Codes 1 to 7 stay inside the literal and produce a truncated message instead. So the "Maybe the SD card is write locked?" text has not been reachable on Windows since this path was added in #2923. Now that it is reachable, that guess only fits removable media, so it is conditional on m_export_path_on_removable_media. The existing string is untouched and keeps its 23 translations; the fixed-drive case adds one string. --- src/libslic3r/utils.cpp | 2 +- src/slic3r/GUI/BackgroundSlicingProcess.cpp | 4 ++- tests/libslic3r/test_utils.cpp | 36 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 875c90f6ab..58323b29ce 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -961,7 +961,7 @@ CopyFileResult copy_file(const std::string &from, const std::string &to, std::st BOOL result = CopyFileW(src_wstr, dst_wstr, FALSE); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 64c52c6e72..f795b41999 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -848,7 +848,9 @@ void BackgroundSlicingProcess::finalize_gcode() case CopyFileResult::SUCCESS: break; // no error case CopyFileResult::FAIL_COPY_FILE: throw Slic3r::ExportError(GUI::format( - _L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"), + m_export_path_on_removable_media ? + _L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%") : + _L("Copying of the temporary G-code to the output G-code failed.\nError message: %1%"), error_message)); break; case CopyFileResult::FAIL_FILES_DIFFERENT: diff --git a/tests/libslic3r/test_utils.cpp b/tests/libslic3r/test_utils.cpp index c039069b2a..484438127c 100644 --- a/tests/libslic3r/test_utils.cpp +++ b/tests/libslic3r/test_utils.cpp @@ -2,6 +2,13 @@ #include "libslic3r/Utils.hpp" +#include "test_utils.hpp" + +#include +#include +#include +#include + #ifndef _WIN32 #include // getuid #endif @@ -52,3 +59,32 @@ TEST_CASE("per-user temp root is unchanged on Windows, isolated elsewhere", "[ut REQUIRE_THAT(root, Catch::Matchers::StartsWith(base + "/orcaslicer_")); #endif } + +TEST_CASE("copy_file reports the OS error when the destination cannot be written", "[utils]") { + ScopedTemporaryFile source(".txt"); + { + std::ofstream ofs(source.string(), std::ios::binary); + ofs << "orca"; + } + REQUIRE(boost::filesystem::exists(source.path())); + + // A directory that was never created, so the copy fails on every platform. + const boost::filesystem::path destination = source.path().parent_path() / "orca-missing-dir" / "copy.txt"; + REQUIRE_FALSE(boost::filesystem::exists(destination.parent_path())); + + std::string error_message; + REQUIRE(copy_file(source.string(), destination.string(), error_message) == FAIL_COPY_FILE); + REQUIRE_FALSE(error_message.empty()); + +#ifdef _WIN32 + // The Windows branch formats GetLastError() itself. Writing that as + // "Error: " + errCode adds an integer to a string literal, which indexes into the + // literal instead of appending and runs off its end for any code above 7. + const std::string prefix = "Error: "; + REQUIRE(error_message.rfind(prefix, 0) == 0); + + const std::string code = error_message.substr(prefix.size()); + REQUIRE_FALSE(code.empty()); + REQUIRE(std::all_of(code.begin(), code.end(), [](unsigned char c) { return std::isdigit(c) != 0; })); +#endif // _WIN32 +} From 913afc51b7b7fe112b4fa4adb58a824ecc301c28 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 06:07:54 -0500 Subject: [PATCH 163/208] build: clear 3 warnings - lambda captures that are not required (#15596) config_substitution_rule is a const enum with a constant initializer, so a lambda can read it without capturing it. Capturing it explicitly is what -Wunused-lambda-capture reports. The category was taken to zero by #15417 and merged on 2026-09-02. These three sites arrived on 2026-09-08 in bcb4f17d9a, "fix(cli): resolve inherited presets through vendor manifests" (#15438). All three lambdas still read the value, which needs no capture and is unchanged. --- src/OrcaSlicer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 1cbf76ef5a..5463f55c20 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1975,7 +1975,7 @@ int CLI::run(int argc, char **argv) } std::unique_ptr cli_preset_bundle; - auto ensure_cli_preset_bundle = [&cli_preset_bundle, config_substitution_rule](std::string &error) -> PresetBundle * { + auto ensure_cli_preset_bundle = [&cli_preset_bundle](std::string &error) -> PresetBundle * { if (cli_preset_bundle) return cli_preset_bundle.get(); try { @@ -2002,7 +2002,7 @@ int CLI::run(int argc, char **argv) } }; - auto resolve_preset = [&ensure_cli_preset_bundle, config_substitution_rule](const std::string &file, DynamicPrintConfig &config, + auto resolve_preset = [&ensure_cli_preset_bundle](const std::string &file, DynamicPrintConfig &config, std::string &config_type, const std::string &config_from, bool probe_type, std::string &error) { const auto *inherits = config.option(BBL_JSON_KEY_INHERITS); @@ -2046,7 +2046,7 @@ int CLI::run(int argc, char **argv) error, allow_source_manifest); }; - auto load_config_file = [config_substitution_rule, &resolve_preset](const std::string& file, DynamicPrintConfig& config, std::string& config_type, + auto load_config_file = [&resolve_preset](const std::string& file, DynamicPrintConfig& config, std::string& config_type, std::string& config_name, std::string& filament_id, std::string& config_from) { if (! boost::filesystem::exists(file)) { boost::nowide::cerr << __FUNCTION__<< ": can not find setting file: " << file << std::endl; From f18eb21b82a5eedff91ee95aa9d6755a221f03e1 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 10:01:19 -0500 Subject: [PATCH 164/208] build: clear 11 single-site clang-cl warning categories (#15584) build: clear eleven single-site clang-cl warning categories Each of these is the last site left in its category, and every one is the compiler saying it cannot tell what the code meant. Nothing here changes defined behavior. - OrcaSlicer_app_msvc.cpp printed a DWORD with %d - StackWalker.cpp ran delete[] through an LPVOID - ToolOrdering.cpp used a bare ; as a deliberate skip loop's body - WipeTower.cpp had finish_block_tcr = finish_block_tcr, so the branch that reached it did nothing. Folding the condition into the enclosing if leaves the other branch untouched - GCodeProcessor.cpp had an else binding to the inner if while the outer if carried no braces - AmsMappingPopupUpdate.cpp wrote >= 1 || <= 3 where its own comment says && - CalibrationWizardPresetPage.cpp left max_decimal_length unset through a pair of conditions that cover every value but not visibly so - DevManager.cpp bound map elements to pair rather than pair, copying every one - SyncAmsInfoDialog.cpp had extraneous parentheses around a comparison - Http.cpp had if (speed > 0.01) speed = speed;. speed now starts at 0 as well, because curl_easy_getinfo leaves the target untouched when it fails and the value reaches Progress either way - SnapmakerPrinterAgent.cpp truncated npos into an unsigned int, so the != npos guard was always true. A colour with no # still yields 0, because the wrap produced 0 as well Nine categories go to zero. -Wtautological-overlap-compare and -Wsometimes-uninitialized reach zero when #15583 merges their second site. --- src/OrcaSlicer_app_msvc.cpp | 2 +- src/dev-utils/StackWalker.cpp | 2 +- src/libslic3r/GCode/GCodeProcessor.cpp | 3 ++- src/libslic3r/GCode/ToolOrdering.cpp | 2 +- src/libslic3r/GCode/WipeTower.cpp | 8 ++------ src/slic3r/GUI/AmsMappingPopupUpdate.cpp | 2 +- src/slic3r/GUI/CalibrationWizardPresetPage.cpp | 2 +- src/slic3r/GUI/DeviceCore/DevManager.cpp | 2 +- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 2 +- src/slic3r/Utils/Http.cpp | 4 +--- src/slic3r/Utils/SnapmakerPrinterAgent.cpp | 2 +- 11 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/OrcaSlicer_app_msvc.cpp b/src/OrcaSlicer_app_msvc.cpp index 35568a9cfa..265047fa34 100644 --- a/src/OrcaSlicer_app_msvc.cpp +++ b/src/OrcaSlicer_app_msvc.cpp @@ -297,7 +297,7 @@ int wmain(int argc, wchar_t **argv) // printf("Loading Slic3r library: %S\n", path_to_slic3r); HINSTANCE hInstance_Slic3r = LoadLibraryExW(path_to_slic3r, nullptr, 0); if (hInstance_Slic3r == nullptr) { - printf("OrcaSlicer.dll was not loaded, error=%d\n", GetLastError()); + printf("OrcaSlicer.dll was not loaded, error=%lu\n", GetLastError()); return -1; } diff --git a/src/dev-utils/StackWalker.cpp b/src/dev-utils/StackWalker.cpp index 468e8927a5..6038196cb0 100644 --- a/src/dev-utils/StackWalker.cpp +++ b/src/dev-utils/StackWalker.cpp @@ -364,7 +364,7 @@ void CStackWalker::GetModuleInformation(LPMODULE_INFO pmi) if (dwInfoSize > 0) { - LPVOID lpData = new byte[dwInfoSize]; + byte *lpData = new byte[dwInfoSize]; ZeroMemory(lpData, dwInfoSize * sizeof(byte)); if (GetFileVersionInfo(pmi->szModulePath, dwHandle, dwInfoSize, lpData) > 0 ) diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 0b3db0323b..e4da19cd73 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -2779,7 +2779,7 @@ bool GCodeProcessor::check_multi_extruder_gcode_valid(const int std::map> gcode_path_pos; // object_id, filament_id, pos for (const GCodeProcessorResult::MoveVertex &move : m_result.moves) { // sometimes, the start line extrude was outside the edge of plate a little, this is allowed, so do not include into the gcode_path_pos - if (move.type == EMoveType::Extrude /* && move.extrusion_role != ExtrusionRole::erFlush || move.type == EMoveType::Travel*/) + if (move.type == EMoveType::Extrude /* && move.extrusion_role != ExtrusionRole::erFlush || move.type == EMoveType::Travel*/) { if (move.extrusion_role == ExtrusionRole::erCustom) { /*if (move.is_arc_move_with_interpolation_points()) { for (int i = 0; i < move.interpolation_points.size(); i++) { @@ -2801,6 +2801,7 @@ bool GCodeProcessor::check_multi_extruder_gcode_valid(const int gcode_path_pos[move.object_label_id][int(move.extruder_id)].max_print_z = std::max(gcode_path_pos[move.object_label_id][int(move.extruder_id)].max_print_z, move.print_z); } + } } bool valid = true; diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 0a97e7ac41..c6517c6e65 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -3137,7 +3137,7 @@ void ToolOrdering::assign_custom_gcodes(const Print &print) // Skip all custom G-codes above this layer and skip all extruder switches. for (; custom_gcode_it != custom_gcode_per_print_z.gcodes.rend() && ( (print_z_above > lt.print_z && custom_gcode_it->print_z > 0.5 * (lt.print_z + print_z_above)) - || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it); + || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it) {} print_z_above = lt.print_z; if (custom_gcode_it == custom_gcode_per_print_z.gcodes.rend()) // Custom G-codes were processed. diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index bef3803c55..589ac14bad 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -4971,12 +4971,8 @@ void WipeTower::generate_new(std::vector= 1 || ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f + if (ams_type >= 1 && ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "AMS-1", 4); diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index 5267715439..c6d491a930 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -360,7 +360,7 @@ void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) int max_decimal_length; if (i <= 1) max_decimal_length = 3; - else if (i >= 2) + else max_decimal_length = 4; if (decimal_number > max_decimal_length) { int allowed_length = number.length() - decimal_number + max_decimal_length; diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index 8844303793..feb6301df3 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -872,7 +872,7 @@ namespace Slic3r obj->m_is_online = elem["dev_online"].get(); if (elem.contains("dev_model_name") && !elem["dev_model_name"].is_null()) { auto printer_type = elem["dev_model_name"].get(); - for (const std::pair> &pair : device_subseries) { + for (const auto &pair : device_subseries) { auto it = std::find(pair.second.begin(), pair.second.end(), printer_type); if (it != pair.second.end()) { diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 92c3d218e5..c6973649b1 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -1547,7 +1547,7 @@ bool SyncAmsInfoDialog::is_nozzle_type_match(DevExtderSystem data, wxString &err auto sai_nz_pt = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle); if (target_machine_nozzle_id == DEPUTY_EXTRUDER_ID) { pos = _L(DevPrinterConfigUtil::get_toolhead_display_name(sai_nz_pt, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)); - } else if ((target_machine_nozzle_id == MAIN_EXTRUDER_ID)) { + } else if (target_machine_nozzle_id == MAIN_EXTRUDER_ID) { pos = _L(DevPrinterConfigUtil::get_toolhead_display_name(sai_nz_pt, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)); } diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index f1ff056d10..4d34d60d04 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -254,10 +254,8 @@ int Http::priv::xfercb(void *userp, curl_off_t dltotal, curl_off_t dlnow, curl_o bool cb_cancel = false; if (self->progressfn) { - double speed; + double speed = 0.; curl_easy_getinfo(self->curl, CURLINFO_SPEED_UPLOAD, &speed); - if (speed > 0.01) - speed = speed; Progress progress(dltotal, dlnow, ultotal, ulnow, self->buffer, speed); self->progressfn(progress, cb_cancel); } diff --git a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp index 9b9a6809fd..ab7aa9bd52 100644 --- a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp +++ b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp @@ -39,7 +39,7 @@ std::string find_closest_color_preset_by_vendor_and_type(const PresetCollection& std::string p_color = p.config.opt_string("default_filament_colour", 0u); unsigned int p_color_value; if (!p_color.empty()) { - unsigned int hash_pos = p_color.find("#"); + size_t hash_pos = p_color.find("#"); p_color_value = std::stoul(p_color.substr(hash_pos != std::string::npos ? hash_pos + 1 : 0), nullptr, 16); } else { // Default to black if no color specified in profile. Assume other profiles might be a closer color match. From dbeef900ccf341f6b977417164b298e975e38b8f Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Wed, 9 Sep 2026 12:18:21 -0500 Subject: [PATCH 165/208] Fix Windows build test midnight race (#15616) --- scripts/test_build_win.ps1 | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 index a8abfbc7bf..65dec8ffa1 100644 --- a/scripts/test_build_win.ps1 +++ b/scripts/test_build_win.ps1 @@ -22,6 +22,7 @@ Match regexes; each must match at least one output line NotMatch regexes; none may match any output line NotExists paths that must not exist after the case runs + DateStampedZip require a bundle date from during this case's invocation .PARAMETER Name Run only the cases whose name matches this regex. Headings with no @@ -109,12 +110,6 @@ $slnDir = Join-Path $fixtures 'sln' New-Item -ItemType Directory -Force -Path $slnDir | Out-Null Set-Content -Path (Join-Path $slnDir 'OrcaSlicer.sln') -Value '' -Encoding ascii -# The pack stamp is checked against real dates, so a locale-dependent parse -# in the script cannot pass by looking date-shaped. Yesterday is accepted too, -# so a run that crosses midnight does not flake. -$dateStamps = @((Get-Date -Format 'yyyyMMdd'), (Get-Date).AddDays(-1).ToString('yyyyMMdd')) -$stampPattern = '_(' + ($dateStamps -join '|') + ')\.zip$' - $cases = @( 'argument handling' @{ Name = 'no arguments prints help'; Args = @(); DryRun = $false @@ -326,12 +321,12 @@ $cases = @( Contains = @('OrcaSlicer_dep_win-x64_') NotContains = @('-clang', '-Release') } @{ Name = 'the bundle is stamped with today, not a shuffled date'; Args = @('-p') - Match = @($stampPattern) } + DateStampedZip = $true } # powershell.exe is not in System32 itself, so a trimmed PATH used to # leave the stamp empty and the bundle named OrcaSlicer_dep_win-x64_.zip. @{ Name = 'the bundle is stamped even with a bare PATH'; Args = @('-p') Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } - Match = @($stampPattern) } + DateStampedZip = $true } @{ Name = '-p packs without rebuilding'; Args = @('-p') Match = @('^\+ .*(7z\.exe a|tar\.exe -a -c -f) ') NotContains = @('cmake -S deps') } @@ -861,7 +856,7 @@ function Invoke-BuildScript { $knownFields = @( 'Name', 'Args', 'ExpectExit', 'DryRun', 'First', 'Env', - 'Contains', 'NotContains', 'Match', 'NotMatch', 'NotExists' + 'Contains', 'NotContains', 'Match', 'NotMatch', 'NotExists', 'DateStampedZip' ) function Test-Case { @@ -876,7 +871,9 @@ function Test-Case { $expect = 0 if ($Case.ContainsKey('ExpectExit')) { $expect = $Case['ExpectExit'] } + $started = Get-Date $result = Invoke-BuildScript -Arguments $argv -Environment $Case['Env'] + $finished = Get-Date $problems = @() @@ -902,6 +899,15 @@ function Test-Case { $problems += "no line matching /$pattern/" } } + if ($Case['DateStampedZip']) { + # Bound the accepted dates to this invocation so crossing midnight is + # valid without allowing an unrelated past or future date. + $dateStamps = @($started.ToString('yyyyMMdd'), $finished.ToString('yyyyMMdd')) | Select-Object -Unique + $pattern = '_(' + ($dateStamps -join '|') + ')\.zip$' + if (@($lines | Where-Object { $_ -match $pattern }).Count -eq 0) { + $problems += "no line matching /$pattern/" + } + } foreach ($pattern in $Case['NotMatch']) { foreach ($line in @($lines | Where-Object { $_ -match $pattern })) { $problems += "line matches /$pattern/: $line" From e296d5daac1084babfc8988620383e9c02b76ed5 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Wed, 9 Sep 2026 17:13:05 -0500 Subject: [PATCH 166/208] build: fix 9 defects found by clang-cl warnings (#15583) --- src/slic3r/GUI/Field.cpp | 3 ++- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/GUI_Utils.cpp | 4 ++-- src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 2 +- src/slic3r/GUI/MediaPlayCtrl.cpp | 2 +- src/slic3r/GUI/Mouse3DController.cpp | 2 +- src/slic3r/GUI/SyncAmsInfoDialog.cpp | 2 +- src/slic3r/Utils/Http.cpp | 4 +++- 9 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 142cf70522..b7564551f8 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -2711,7 +2711,8 @@ void ColourPicker::set_value(const boost::any& value, bool change_event) auto field = dynamic_cast(window); #ifdef __WXMSW__ - wxColour clr = (clr_str.IsEmpty() || !clr.IsOk()) ? wxTransparentColour : clr_str; + const wxColour parsed_clr(clr_str); + wxColour clr = (clr_str.IsEmpty() || !parsed_clr.IsOk()) ? wxTransparentColour : parsed_clr; field->SetColour(clr); draw_bmp_btn(field, clr); #else diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 3500493329..99a829bdcc 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -6808,7 +6808,7 @@ bool GUI_App::check_preset_parent_available(const std::pair>& preset_data) { - Preset::Type type; + Preset::Type type = Preset::Type::TYPE_INVALID; if (preset_data.second.at(BBL_JSON_KEY_TYPE) == PRESET_IOT_PRINT_TYPE) type = Preset::Type::TYPE_PRINT; else if (preset_data.second.at(BBL_JSON_KEY_TYPE) == PRESET_IOT_PRINTER_TYPE) diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index cb8ba45c6b..bc66d90ffd 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -102,7 +102,7 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std result = ReadFile(handlesrc, buff, size, &dwRead, NULL); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } @@ -110,7 +110,7 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std result = WriteFile(handledst,buff,size,&dwWrite,NULL); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp index 709e7b5b21..904e7d0a07 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp @@ -342,7 +342,7 @@ bool GLGizmoBrimEars::on_mouse(const wxMouseEvent& mouse_event) // concludes that the event was not intended for it, it should return false. bool GLGizmoBrimEars::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down) { - if (action != SLAGizmoEventType::MouseWheelDown || action != SLAGizmoEventType::MouseWheelUp || action != SLAGizmoEventType::Moving) { + if (action != SLAGizmoEventType::MouseWheelDown && action != SLAGizmoEventType::MouseWheelUp && action != SLAGizmoEventType::Moving) { apply_radius_change(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index f190e1ad97..035fb895aa 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -122,7 +122,7 @@ bool GLGizmoFdmSupports::on_init() {ctrl + _L("Mouse wheel"), _L("Gap area")} }; - memset(&m_print_instance, 0, sizeof(m_print_instance)); + m_print_instance = PrintInstance(); return true; } diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 0d75c3770d..29c8c9f664 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -71,7 +71,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl3 *media_ctrl, const w auto ip = str.find(' ', ik); if (ip == wxString::npos) ip = str.Length(); auto v = str.Mid(ik, ip - ik); - if (k == "T:" && v.Length() == 8) { + if (strcmp(k, "T:") == 0 && v.Length() == 8) { long h = 0,m = 0,s = 0; v.Left(2).ToLong(&h); v.Mid(3, 2).ToLong(&m); diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index 11709501ac..8ed91d461f 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -498,7 +498,7 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 20.0f)); static ImVec2 last_win_size(0.0f, 0.0f); bool shown = true; - if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse || ImGuiWindowFlags_NoTitleBar)) { + if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar)) { if (shown) { ImVec2 win_size = ImGui::GetWindowSize(); if (last_win_size.x != win_size.x || last_win_size.y != win_size.y) { diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index c6973649b1..7f075dbbfa 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -678,7 +678,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : wxBoxSizer *loading_Sizer = new wxBoxSizer(wxHORIZONTAL); m_gif_ctrl = new wxAnimationCtrl(m_loading_page, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE); - auto gif_path = Slic3r::var("loading.gif").c_str(); + const wxString gif_path = from_u8(Slic3r::var("loading.gif")); if (m_gif_ctrl->LoadFile(gif_path)){ m_gif_ctrl->SetSize(m_gif_ctrl->GetAnimation().GetSize()); m_gif_ctrl->Play(); diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index 4d34d60d04..6f43df74e4 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -321,8 +321,10 @@ void Http::priv::form_add_file(const char *name, const fs::path &path, const cha // We can't use CURLFORM_FILECONTENT, because curl doesn't support Unicode filenames on Windows // and so we use CURLFORM_STREAM with boost ifstream to read the file. + std::string filename_str; if (filename == nullptr) { - filename = path.string().c_str(); + filename_str = path.string(); + filename = filename_str.c_str(); } form_files.emplace_back(path, offset, length); From a5d0d33df32e1af8b6084cfe2f4275b55c43ed70 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 10 Sep 2026 12:39:55 +0800 Subject: [PATCH 167/208] Register Instance Copies and Moves with Their Plate An instance added with "+" was never registered with the plate it landed on, and moving an instance only re-registered instance 0 of its object, so a copy dragged onto another plate stayed unknown to that plate's registry. The plate's filament list, its wipe tower preview and the position clamp all read that registry, so a multi-filament copy moved onto a single-filament plate drew no tower there and its tower position was never clamped. Register new copies at creation, notify exactly the instances a move changed (every instance of the object when one of its parts moved), and drop the registry entry when a copy is removed again. --- src/slic3r/GUI/GLCanvas3D.cpp | 16 +++++++++++++++- src/slic3r/GUI/Plater.cpp | 8 +++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 556faaa763..676d310f7b 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -5059,7 +5059,21 @@ void GLCanvas3D::do_move(const std::string& snapshot_type) } //BBS: notify instance updates to part plater list - m_selection.notify_instance_update(-1, 0); + // Only what moved: the selected instances, or every instance of an object one of whose + // parts moved. Notifying a plate about an instance that stayed put invalidates its slice + // result, and notifying instance 0 alone left a moved copy unregistered on its new plate. + { + std::set> notified; + for (unsigned int i : m_selection.get_volume_idxs()) { + const GLVolume* v = m_volumes.volumes[i]; + const int object_idx = v->object_idx(); + if (object_idx < 0 || object_idx >= static_cast(m_model->objects.size())) + continue; + const std::pair key(object_idx, selection_mode == Selection::Volume ? -1 : v->instance_idx()); + if (notified.insert(key).second) + m_selection.notify_instance_update(key.first, key.second); + } + } // Fixes sinking/flying instances (snaps object to buildplate) for (const std::pair& i : done) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 109d7b3c10..3aab1184c3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -17653,6 +17653,10 @@ void Plater::increase_instances(size_t num) model_object->add_instance(offset_vec, model_instance->get_scaling_factor(), model_instance->get_rotation(), model_instance->get_mirror()); // p->print.get_object(obj_idx)->add_copy(Slic3r::to_2d(offset_vec)); } + // Register the copies with the plate they land on before the scene reloads: the plate's + // filament list and wipe tower preview are read from that registry. + for (size_t i = model_object->instances.size() - num; i < model_object->instances.size(); ++i) + p->partplate_list.notify_instance_update(obj_idx, static_cast(i)); #ifdef SUPPORT_AUTO_CENTER if (p->get_config("autocenter") == "true") @@ -17683,8 +17687,10 @@ void Plater::decrease_instances(size_t num) ModelObject* model_object = p->model.objects[obj_idx]; if (model_object->instances.size() > num) { - for (size_t i = 0; i < num; ++ i) + for (size_t i = 0; i < num; ++ i) { + p->partplate_list.notify_instance_removed(obj_idx, static_cast(model_object->instances.size()) - 1); model_object->delete_last_instance(); + } p->update(); // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. sidebar().obj_list()->decrease_object_instances(obj_idx, num); From 8c8e6fd0695e390796d4102f36baaae2380d4aad Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 10 Sep 2026 12:39:55 +0800 Subject: [PATCH 168/208] Let the Remaining Per-Plate Object Scans See Every Instance get_extruders() and estimate_wipe_tower_size() already ask whether any instance of an object sits on the plate; the support-less extruder scan, the mixed-filament risk check and the nozzle/filament compatibility check still tested instance 0 only, so an object whose copy - not its original - was placed on the plate was skipped by all three. --- src/slic3r/GUI/PartPlate.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 90e2c96ab6..93730fdafb 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1917,7 +1917,7 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!contain_instance_totally(obj_idx, 0)) + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject* mo = m_model->objects[obj_idx]; @@ -2088,7 +2088,7 @@ bool PartPlate::check_single_extruder_mixed_filament_risk(const DynamicPrintConf "which may significantly increase waste and the risk of nozzle / waste-chute clogging."); for (int obj_idx = 0; obj_idx < (int)m_model->objects.size(); ++obj_idx) { - if (!contain_instance_totally(obj_idx, 0)) + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject *mo = m_model->objects[obj_idx]; int obj_ext = mo->config.has("extruder") ? mo->config.extruder() : 1; @@ -2307,7 +2307,7 @@ bool PartPlate::check_compatible_of_nozzle_and_filament(const DynamicPrintConfig return wipe_tower_size; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!use_global_objects && !contain_instance_totally(obj_idx, 0)) + if (!use_global_objects && !contain_any_instance_totally(obj_idx)) continue; BoundingBoxf3 bbox = m_model->objects[obj_idx]->bounding_box(); From 7888452666c31bab80d1dd0675a642f2e41c5d31 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Thu, 10 Sep 2026 05:39:14 -0500 Subject: [PATCH 169/208] build: clear 7 warning categories across 26 sites (#15615) * build: clear 2 warnings - cast the NSTextField the class check already proved mainframe_text_field is NSTextField* and was assigned a bare NSView*, which Clang reports as -Wincompatible-pointer-types. Both assignments sit inside if ([viewObject class] == [NSTextField self]), so the runtime type is already guaranteed, and the line above the second one casts the same variable the same way to call setTextColor. macOS only, since nothing else compiles this file. * build: clear 6 warning categories from the clang-cl inventory -Wmissing-braces (9). Aggregates whose first member is itself an aggregate. GUID's fourth member is BYTE[8], so the trailing eight bytes take their own braces. The others were reaching for zero-initialization with {0} and say {} now. bbs_3mf's backup Task ends in an anonymous union, which needs braces of its own; those braces initialize the union's first member rather than the one named at the call site, so the RemoveBackup site says so in a comment. -Wmacro-redefined (11). SendMultiMachinePage.hpp defines five names that Preferences.hpp, PresetBundleDialog.hpp, ExportPresetBundleDialog.hpp and TroubleshootDialog.hpp also define with different values, so the value in force depended on include order. All nine of this file's DESIGN_ macros take the SEND_ prefix it already uses for its own macros, values unchanged, so a DESIGN_ name added elsewhere later cannot collide with it again. They read as one page-local palette, a 900 to 400 gray ramp plus sizes, so the four with no current readers stay: dropping them would leave gaps in a named scale. test_marchingsquares.cpp defines NOMINMAX, which libslic3r already passes as a PUBLIC compile definition, so it takes the #ifndef guard the other suites use. -Wbraced-scalar-init (3). Two PushStyleVar calls resolve to the float overload, so the braces were initializing a scalar. ConfigOptionFloatsNullable already takes an initializer_list, so the inner braces did the same thing. -Wmicrosoft-goto (2). Both gotos in copy_file_gui jump forward over the initialization of size, dwRead and dwWrite, which only MSVC accepts. Those declarations move up to join the others at the top of the function. -Wunused-private-field (3). Every use of ColourPicker's m_clrData and m_picker_widget is behind !defined(__linux__), so on Linux they are written and never read; the members now carry the same guard. ParamsPanel's m_size_move is read nowhere. Tab has its own, which is the one Tab.cpp uses. -Wnonportable-include-path (2). BaseException.h asked for "stackwalker.h" and the file on disk is StackWalker.h. --- src/dev-utils/BaseException.h | 2 +- src/dev-utils/StackWalker.cpp | 2 +- src/libslic3r/Format/bbs_3mf.cpp | 8 ++++---- src/libslic3r/PrintConfig.cpp | 2 +- src/slic3r/GUI/Field.hpp | 2 ++ src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/GUI_Utils.cpp | 5 +++-- .../GUI/Gizmos/GizmoObjectManipulation.cpp | 2 +- src/slic3r/GUI/IMSlider.cpp | 2 +- src/slic3r/GUI/MainFrame.cpp | 4 ++-- src/slic3r/GUI/ParamsPanel.hpp | 1 - src/slic3r/GUI/PartPlate.cpp | 2 +- src/slic3r/GUI/SendMultiMachinePage.cpp | 14 +++++++------- src/slic3r/GUI/SendMultiMachinePage.hpp | 18 +++++++++--------- src/slic3r/Utils/MacDarkMode.mm | 4 ++-- tests/libslic3r/test_marchingsquares.cpp | 2 ++ 16 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/dev-utils/BaseException.h b/src/dev-utils/BaseException.h index 2cb65d945e..20b6fb0c89 100644 --- a/src/dev-utils/BaseException.h +++ b/src/dev-utils/BaseException.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include "stackwalker.h" +#include "StackWalker.h" #include class CBaseException : public CStackWalker diff --git a/src/dev-utils/StackWalker.cpp b/src/dev-utils/StackWalker.cpp index 6038196cb0..3ef983cd86 100644 --- a/src/dev-utils/StackWalker.cpp +++ b/src/dev-utils/StackWalker.cpp @@ -425,7 +425,7 @@ LPSTACKINFO CStackWalker::StackWalker(HANDLE hThread, const CONTEXT* context) else c = *context; - STACKFRAME64 sf = {0}; + STACKFRAME64 sf = {}; DWORD imageType; //intel X86 diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 96d98dbe9f..e2091da1db 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -8844,7 +8844,7 @@ public: auto model = object.get_model(); auto o = m_temp_model.add_object(object); int backup_id = model->get_object_backup_id(object); - push_task({ AddObject, (size_t) backup_id, object.get_model()->get_backup_path(), o, 1 }); + push_task({ AddObject, (size_t) backup_id, object.get_model()->get_backup_path(), o, { 1 } }); } void remove_object_mesh(ModelObject& object) { @@ -8854,7 +8854,7 @@ public: void backup_soon() { boost::lock_guard lock(m_mutex); m_other_changes_backup = true; - m_tasks.push_back({ Backup, 0, std::string(), nullptr, ++m_task_seq }); + m_tasks.push_back({ Backup, 0, std::string(), nullptr, { ++m_task_seq } }); m_cond.notify_all(); } @@ -8872,7 +8872,7 @@ public: m_ui_tasks.clear(); m_tasks.clear(); } - m_tasks.push_back({ RemoveBackup, model.id().id, model.get_backup_path(), nullptr, removeAll }); + m_tasks.push_back({ RemoveBackup, model.id().id, model.get_backup_path(), nullptr, { removeAll } }); ++m_task_seq; if (model.is_need_backup()) { m_other_changes = false; @@ -9087,7 +9087,7 @@ public: else m_cond.wait(lock); if (m_interval > 0 && boost::get_system_time() > m_next_backup) { - m_tasks.push_back({ Backup, 0, std::string(), nullptr, ++m_task_seq }); + m_tasks.push_back({ Backup, 0, std::string(), nullptr, { ++m_task_seq } }); m_next_backup += boost::posix_time::seconds(m_interval); // Maybe wakeup from power sleep if (m_next_backup < boost::get_system_time()) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 1db476eede..4c27995ba0 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -5430,7 +5430,7 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->readonly = false; def->nullable = true; - def->set_default_value(new ConfigOptionFloatsNullable { {0.0} }); + def->set_default_value(new ConfigOptionFloatsNullable { 0.0 }); def = this->add("cooling_tube_retraction", coFloat); def->label = L("Cooling tube position"); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 5d5d549427..74011983c6 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -628,8 +628,10 @@ private: void on_button_click(wxCommandEvent &WXUNUSED(ev)); void save_colors_to_config(); private: +#if !defined(__linux__) && !defined(__LINUX__) wxColourData* m_clrData{nullptr}; wxColourPickerWidget* m_picker_widget{nullptr}; +#endif }; class PointCtrl : public Field { diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 99a829bdcc..6d08f052da 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -598,7 +598,7 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension) static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } #ifdef WIN32 -static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; +static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; static void register_win32_device_notification_event() { diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index bc66d90ffd..10dd29c9c1 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -69,6 +69,8 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std HANDLE handlesrc = nullptr; HANDLE handledst = nullptr; CopyFileResult ret = SUCCESS; + DWORD size = 0; + DWORD dwRead = 0, dwWrite = 0; handlesrc = CreateFile(src.wc_str(), GENERIC_READ, @@ -96,9 +98,8 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std goto __finished; } - DWORD size=GetFileSize(handlesrc,NULL); + size = GetFileSize(handlesrc,NULL); buff = new char[size+1]; - DWORD dwRead=0,dwWrite; result = ReadFile(handlesrc, buff, size, &dwRead, NULL); if (!result) { DWORD errCode = GetLastError(); diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 7c4a2afd38..5d70fde833 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -702,7 +702,7 @@ bool GizmoObjectManipulation::reset_zero_button(ImGuiWrapper *imgui_wrapper, bo for (int i = 0; i < number; i++) { - char buf[3][64] = {0}; + char buf[3][64] = {}; float buf_size[3] = {0}; for (int j = 0; j < 3; j++) { ImGui::DataTypeFormatString(buf[j], IM_ARRAYSIZE(buf[j]), ImGuiDataType_Double, (void *) &vec[i][j], "%.2f"); diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index c008963646..0d0d6739f8 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -790,7 +790,7 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { void IMSlider::show_tooltip(const std::string tooltip) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 6 * m_scale, 3 * m_scale }); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, { 3 * m_scale }); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3 * m_scale); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 167b2b4cda..c734804c22 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1591,7 +1591,7 @@ void MainFrame::register_win32_callbacks() //static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED }; //static GUID GUID_DEVINTERFACE_DISK = { 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b }; //static GUID GUID_DEVINTERFACE_VOLUME = { 0x71a27cdd, 0x812a, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f }; - static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; + static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; // Register USB HID (Human Interface Devices) notifications to trigger the 3DConnexion enumeration. DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = { 0 }; @@ -1631,7 +1631,7 @@ void MainFrame::register_win32_callbacks() { static constexpr int device_count = 1; - RAWINPUTDEVICE devices[device_count] = { 0 }; + RAWINPUTDEVICE devices[device_count] = {}; // multi-axis mouse (SpaceNavigator, etc.) devices[0].usUsagePage = 0x01; devices[0].usUsage = 0x08; diff --git a/src/slic3r/GUI/ParamsPanel.hpp b/src/slic3r/GUI/ParamsPanel.hpp index 0726db91d3..91bf3d2a7e 100644 --- a/src/slic3r/GUI/ParamsPanel.hpp +++ b/src/slic3r/GUI/ParamsPanel.hpp @@ -66,7 +66,6 @@ class ParamsPanel : public wxPanel { #if __WXOSX__ wxWindow* m_tmp_panel; - int m_size_move = -1; #endif // __WXOSX__ private: diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 90e2c96ab6..9826498fbd 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1112,7 +1112,7 @@ void PartPlate::show_tooltip(const std::string tooltip) { const auto scale = m_plater->get_current_canvas3D()->get_scale(); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {6 * scale, 3 * scale}); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, {3 * scale}); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3 * scale); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, {0, 0, 0, 0}); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 3a52caec3f..2d1b713264 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -814,13 +814,13 @@ wxBoxSizer* SendMultiMachinePage::create_item_title(wxString title, wxWindow* pa wxBoxSizer* m_sizer_title = new wxBoxSizer(wxHORIZONTAL); auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_title->SetForegroundColour(SEND_DESIGN_GRAY800_COLOR); m_title->SetFont(::Label::Head_13); m_title->Wrap(-1); m_title->SetToolTip(tooltip); auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); - m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + m_line->SetBackgroundColour(SEND_DESIGN_GRAY400_COLOR); m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); m_sizer_title->Add(0, 0, 0, wxLEFT, 9); @@ -843,7 +843,7 @@ wxBoxSizer* SendMultiMachinePage::create_item_checkbox(wxString title, wxWindow* m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); checkbox_title->SetFont(::Label::Body_13); auto size = checkbox_title->GetTextExtent(title); @@ -867,12 +867,12 @@ wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxStrin { wxBoxSizer* sizer_input = new wxBoxSizer(wxHORIZONTAL); auto input_title = new wxStaticText(parent, wxID_ANY, str_before); - input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + input_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); input_title->SetFont(::Label::Body_13); input_title->SetToolTip(tooltip); input_title->Wrap(-1); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, SEND_DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); @@ -880,7 +880,7 @@ wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxStrin input->GetTextCtrl()->SetValidator(validator); auto second_title = new wxStaticText(parent, wxID_ANY, str_after, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + second_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); second_title->SetFont(::Label::Body_13); second_title->SetToolTip(tooltip); second_title->Wrap(-1); @@ -1337,7 +1337,7 @@ wxPanel* SendMultiMachinePage::create_page() m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); - m_tip_text->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_tip_text->SetForegroundColour(SEND_DESIGN_GRAY800_COLOR); m_tip_text->SetFont(::Label::Head_20); m_tip_text->Wrap(-1); diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index 7d77849bf3..a63bc51bb0 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -22,15 +22,15 @@ namespace GUI { #define SEND_LEFT_DEV_STATUS 250 #define SEND_LEFT_TAKS_STATUS 180 -#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) -#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) -#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) -#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) -#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) -#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) -#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) -#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) -#define DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) +#define SEND_DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) +#define SEND_DESIGN_GRAY900_COLOR wxColour(38, 46, 48) +#define SEND_DESIGN_GRAY800_COLOR wxColour(50, 58, 61) +#define SEND_DESIGN_GRAY600_COLOR wxColour(144, 144, 144) +#define SEND_DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define SEND_DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) +#define SEND_DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) +#define SEND_DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) +#define SEND_DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index cecd90044b..2bce7835e8 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -57,7 +57,7 @@ void set_miniaturizable(void * window) while(viewObject = (NSView *)[viewEnum nextObject]) { if([viewObject class] == [NSTextField self]) { //[(NSTextField*)viewObject setTextColor : NSColor.whiteColor]; - mainframe_text_field = viewObject; + mainframe_text_field = (NSTextField*)viewObject; } } } @@ -74,7 +74,7 @@ void set_title_colour_after_set_title(void * window) while(viewObject = (NSView *)[viewEnum nextObject]) { if([viewObject class] == [NSTextField self]) { [(NSTextField*)viewObject setTextColor : NSColor.whiteColor]; - mainframe_text_field = viewObject; + mainframe_text_field = (NSTextField*)viewObject; } } diff --git a/tests/libslic3r/test_marchingsquares.cpp b/tests/libslic3r/test_marchingsquares.cpp index 6844ecb6ac..9a11f49faa 100644 --- a/tests/libslic3r/test_marchingsquares.cpp +++ b/tests/libslic3r/test_marchingsquares.cpp @@ -1,4 +1,6 @@ +#ifndef NOMINMAX #define NOMINMAX +#endif #include #include "test_utils.hpp" From e8d35fadd45c537d578cedc4eacf548ad7a48920 Mon Sep 17 00:00:00 2001 From: Valerii Bokhan <80919135+valerii-bokhan@users.noreply.github.com> Date: Thu, 10 Sep 2026 13:03:50 +0200 Subject: [PATCH 170/208] Fix internal bridges over Hilbert Curve/Octagram Spiral sparse infill (#15206) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix internal bridges over Hilbert Curve/Octagram Spiral sparse infill For patterns with curved/turning anchor lines (Hilbert Curve, Octagram Spiral), the bridge_over_infill algorithm produced incorrect results: 1. determine_bridging_angle: sampling curved anchor orientations produced noise across all turning directions (0/90/180/270°) instead of a single dominant one, yielding unstable bridge angles with 180° spread. Fix: use the configured infill_direction + 90° directly, bypassing the noisy sampling. The old blind +0.25*PI (Hilbert) and +1/16*PI (Octagram) offsets are removed. 2. construct_anchored_polygon: curved Hilbert/Octagram anchors intersected each vertical scan line many times at wildly different Y positions, producing chaotic polygon sections — holes in random places, bridges over air, rotated bridges. Fix: replace the curved infill polylines with synthetic straight lines parallel to infill_direction, spaced at the real infill line spacing (flow_spacing / density). Lines are centered on the limiting_area bbox center so that after rotation they span the full bridged_area. Anchors are left at full bbox length (not clipped) to guarantee every scan line finds an anchor. Rectilinear and other straight-line patterns are unaffected. Known limitation: some bridge edges may still terminate over air in edge cases where the nearest synthetic anchor line is more than one infill spacing away from the bridge boundary. This will be addressed in a follow-up. * fix: anchor internal bridges to actual sparse infill Preserve real anchors across regions and align plane-path anchor origins with printed infill. Respect lower-layer rotation templates and model alignment, and sample curved bridge boundaries more finely. Add regression coverage for anchor alignment, bridge angles and region isolation, with Orca comments explaining the geometry constraints. Verified 175 FFF tests before the comment-only follow-up; preserve CRLF in modified files. * Fix internal bridge support contacts and separated infill origins Restore anchor contact after bridge smoothing and share per-body pattern origins between anchors and printed infill. Recompute origins when preparation settings change. Cover multiline counts 1, 2 and 3 and add regressions for printed bridge support, separated infill alignment and reslicing. * Add explicit standard headers to PrintObject tests * test: cover surface centering when infill settings change Verify top and bottom Archimedean Chords and Octagram Spiral paths after switching centering modes or toggling separated infills. Compare reslicing against fresh slicing and document dependent infill invalidation. * test: preserve directional surface infill when settings change * perf: index layer islands for connected-body detection * test: use public print pipeline for body centering checks --- src/libslic3r/Fill/Fill.cpp | 75 +++-- src/libslic3r/Fill/Fill.hpp | 6 + src/libslic3r/PrintObject.cpp | 304 +++++++++++------- tests/fff_print/test_fill.cpp | 66 ++++ tests/fff_print/test_printobject.cpp | 442 +++++++++++++++++++++++++++ 5 files changed, 736 insertions(+), 157 deletions(-) diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index dc772580ca..f5386b085c 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -11,7 +11,7 @@ #include "AABBTreeLines.hpp" #include "ExtrusionEntity.hpp" -#include "FillBase.hpp" +#include "Fill.hpp" #include "FillRectilinear.hpp" #include "FillLightning.hpp" #include "FillConcentricInternal.hpp" @@ -1234,6 +1234,33 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p return surface_fills; } +// Orca: Anchors and printed infill must share the same body origin. Keep the choice +// here so per-model surface centering and separated sparse infill cannot drift apart. +static BoundingBox infill_bounding_box(const Layer &layer, const SurfaceFill &fill, const ExPolygon &expoly, BoundingBox bbox) +{ + const auto ¶ms = fill.params; + const auto &config = layer.regions()[fill.region_id]->region().config(); + const bool external = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface; + const bool per_model = external && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && + (params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral); + const bool separate = !external && params.separated_infills && + (is_separable_infill_pattern(params.pattern) || !config.solid_infill_rotate_template.value.empty() || + !config.sparse_infill_rotate_template.value.empty()); + if (per_model || separate) { + double best_overlap = 0.; + for (size_t i = 0; i < layer.lslices.size() && i < layer.lslices_separated_component_bboxes.size(); ++i) { + const double overlap = area(intersection_ex(layer.lslices[i], expoly)); + if (overlap > best_overlap) { + best_overlap = overlap; + const Point center = layer.lslices_separated_component_bboxes[i].center(); + bbox = layer.object()->bounding_box(); + bbox.translate(center.x(), center.y()); + } + } + } + return bbox; +} + #ifdef SLIC3R_DEBUG_SLICE_PROCESSING void export_group_fills_to_svg(const char *path, const std::vector &fills) { @@ -1353,19 +1380,9 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: // Orca: Checking the filling of a centered surface by drawing for each model parts bool is_top_or_bottom = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface; - bool is_centered_infill = surface_fill.params.pattern == ipArchimedeanChords || surface_fill.params.pattern == ipOctagramSpiral; if (is_top_or_bottom) { params.center_of_surface_pattern = surface_fill.params.center_of_surface_pattern; // Orca: center of surface pattern } - // Orca: Each_Model centers the pattern on each model part's bbox; Each_Surface / Each_Assembly - // fall through to the default (whole-object) bounding box below. - bool is_per_model_center = is_top_or_bottom && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && is_centered_infill; - bool is_separate_infill = !is_top_or_bottom && surface_fill.params.separated_infills && - ( - is_separable_infill_pattern(surface_fill.params.pattern) || - params.config->solid_infill_rotate_template != "" || - params.config->sparse_infill_rotate_template != "" ); - if( surface_fill.params.pattern == ipLockedZag ) { params.locked_zag = true; params.infill_lock_depth = surface_fill.params.infill_lock_depth; @@ -1389,34 +1406,8 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.can_reverse = false; for (ExPolygon& expoly : surface_fill.expolygons) { - // Orca: separate infill / per-model pattern centering. - // - // Center the pattern on each connected body of the object independently, so every piece - // is filled exactly as if it were sliced on its own: touching/overlapping parts merge - // into one body sharing a center, while separate parts and disconnected islands (even - // interleaved-but-not-touching ones, e.g. chain links) each get their own. The body each - // island belongs to, and its full bounding box, were resolved in 3D by PrintObject:: - // infill() (lslices_separated_component_bboxes, aligned with this layer's lslices). We - // match this fill region to the island it overlaps most, then re-use the whole-object - // bounding box (origin-centered — identical extent to the default, so coverage and cost - // are unchanged) re-centered on that body. - if (is_per_model_center || is_separate_infill) { - double best_overlap = 0.; - BoundingBox best_component; - for (size_t r = 0; r < this->lslices.size() && r < this->lslices_separated_component_bboxes.size(); ++ r) { - const double overlap = area(intersection_ex(this->lslices[r], expoly)); - if (overlap > best_overlap) { - best_overlap = overlap; - best_component = this->lslices_separated_component_bboxes[r]; - } - } - if (best_component.defined) { - const Point c = best_component.center(); - BoundingBox part_bbox = bbox; // origin-centered, whole-object extent (from above) - part_bbox.translate(c.x(), c.y()); // re-center on this body - f->set_bounding_box(part_bbox); - } - } // - End: separate infill / per-model pattern centering + // Orca: Reuse the body origin used for bridge anchoring, resetting it for each surface. + f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox)); f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes); if (params.symmetric_infill_y_axis) { @@ -1583,8 +1574,14 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc params.multiline = surface_fill.params.multiline; params.gyroid_optimized = surface_fill.params.gyroid_optimized; params.smooth_factor = surface_fill.params.smooth_factor; + // Orca: Match make_fills() when choosing the origin of plane-path patterns. + // Without the sparse extrusion role, the filler uses each surface's bounds + // instead of the object's bounds, so bridge anchors shift away from printed infill. + params.extrusion_role = surface_fill.params.extrusion_role; for (ExPolygon &expoly : surface_fill.expolygons) { + // Orca: Match the per-body origin of make_fills() before generating physical anchors. + f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox)); // Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon. f->spacing = surface_fill.params.spacing; surface_fill.surface.expolygon = std::move(expoly); diff --git a/src/libslic3r/Fill/Fill.hpp b/src/libslic3r/Fill/Fill.hpp index e92ab2dee5..b183cf0253 100644 --- a/src/libslic3r/Fill/Fill.hpp +++ b/src/libslic3r/Fill/Fill.hpp @@ -14,6 +14,12 @@ namespace Slic3r { class ExtrusionEntityCollection; class LayerRegion; +class PrintObject; + +// Orca: Share the layer rotation calculation between infill generation and internal +// bridge angle selection so both interpret rotation templates in the same way. +double calculate_infill_rotation_angle(const PrintObject *object, size_t layer_id, + const double &fixed_infill_angle, const std::string &template_string); // An interface class to Perl, aggregating an instance of a Fill and a FillData. class Filler diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index a228bb7436..e147356ea6 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -21,9 +21,11 @@ #include "TriangleMeshSlicer.hpp" #include "Utils.hpp" #include "Fill/FillAdaptive.hpp" +#include "Fill/Fill.hpp" #include "Fill/FillLightning.hpp" #include "Format/STL.hpp" #include "format.hpp" +#include "AABBTreeIndirect.hpp" #include "AABBTreeLines.hpp" #include @@ -672,6 +674,98 @@ void PrintObject::prepare_infill() } // for each region #endif /* SLIC3R_DEBUG_SLICE_PROCESSING */ + // Orca: precompute the object's 3D connected bodies for separated infills / per-model + // centering. Two islands belong to the same body when their slices overlap on adjacent + // layers; islands that only overlap in top-down projection but never touch (e.g. interleaved + // chain links) stay separate, matching "split to objects". Each layer island then records + // the full bounding box of its body, so its infill is centered on that body as if it were + // sliced alone. Compute this before bridges so anchors and extrusion share the same origin. + bool needs_separated_components = false; + for (size_t i = 0; i < this->num_printing_regions(); ++ i) { + const PrintRegionConfig &rc = this->printing_region(i).config(); + if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) { + needs_separated_components = true; + break; + } + } + // Orca: Fast path: the feature only changes anything when the object is made of more than one + // connected body. Detect that cheaply the same way as "Split to objects" — more than one + // model part, or a single part whose mesh is splittable (is_splittable() is cached). A single + // body already shares the object center, i.e. the default, so skip the connectivity pass. + if (needs_separated_components) { + int parts = 0; + const ModelVolume *first_part = nullptr; + for (const ModelVolume *v : this->model_object()->volumes) + if (v->is_model_part()) { ++ parts; first_part = v; } + if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable())) + needs_separated_components = false; + } + for (Layer *layer : m_layers) + layer->lslices_separated_component_bboxes.clear(); + if (needs_separated_components) { + const size_t nl = m_layers.size(); + std::vector offset(nl + 1, 0); // Orca: flat index of the first island of each layer + for (size_t i = 0; i < nl; ++ i) + offset[i + 1] = offset[i] + m_layers[i]->lslices.size(); + const size_t nreg = offset[nl]; + // Orca: Union-find over every (layer, island). + std::vector parent(nreg); + for (size_t i = 0; i < nreg; ++ i) parent[i] = i; + auto find = [&parent](size_t x) { + while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } + return x; + }; + auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; }; + // Orca: Index the smaller of two consecutive layers instead of scanning every + // pair of islands. The tree prunes distant boxes on fragmented models; exact + // polygon intersections still decide connectivity for the remaining candidates. + for (size_t i = 0; i + 1 < nl; ++ i) { + m_print->throw_if_canceled(); + size_t layer_a = i, layer_b = i + 1; + if (m_layers[layer_a]->lslices.size() < m_layers[layer_b]->lslices.size()) + std::swap(layer_a, layer_b); + const Layer *la = m_layers[layer_a], *lb = m_layers[layer_b]; + if (lb->lslices.empty()) + continue; + + using IslandTree = AABBTreeIndirect::Tree<2, coord_t>; + std::vector bboxes; + bboxes.reserve(lb->lslices.size()); + for (size_t b = 0; b < lb->lslices.size(); ++ b) + bboxes.emplace_back(b, lb->lslices_bboxes[b]); + IslandTree tree; + tree.build_modify_input(bboxes); + for (size_t a = 0; a < la->lslices.size(); ++ a) { + const IslandTree::BoundingBox query(la->lslices_bboxes[a].min, la->lslices_bboxes[a].max); + AABBTreeIndirect::traverse(tree, + [&query](const IslandTree::Node &node) { return node.bbox.intersects(query); }, + [&](const IslandTree::Node &node) { + const size_t b = node.idx; + // Orca: Tree boxes include an epsilon, so retain the original box + // filter. Already-connected islands cannot change the partition + // and need no further polygon intersection. + if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) && + find(offset[layer_a] + a) != find(offset[layer_b] + b) && + ! intersection_ex(la->lslices[a], lb->lslices[b]).empty()) + unite(offset[layer_a] + a, offset[layer_b] + b); + return true; + }); + } + } + // Orca: Full bounding box of each body, indexed by its union-find root. + std::vector body_bbox(nreg); + for (size_t i = 0; i < nl; ++ i) + for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a) + body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]); + // Orca: Store the body bbox for every island. + for (size_t i = 0; i < nl; ++ i) { + Layer *layer = m_layers[i]; + layer->lslices_separated_component_bboxes.resize(layer->lslices.size()); + for (size_t a = 0; a < layer->lslices.size(); ++ a) + layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)]; + } + } + // the following step needs to be done before combination because it may need // to remove only half of the combined infill this->bridge_over_infill(); @@ -706,71 +800,6 @@ void PrintObject::infill() if (this->set_started(posInfill)) { m_print->set_status(35, L("Generating infill toolpath")); - // Orca: precompute the object's 3D connected bodies for separated infills / per-model - // centering. Two islands belong to the same body when their slices overlap on adjacent - // layers; islands that only overlap in top-down projection but never touch (e.g. interleaved - // chain links) stay separate, matching "split to objects". Each layer island then records - // the full bounding box of its body, so its infill is centered on that body as if it were - // sliced alone. Done once here, before the parallel fill, and only when a region needs it. - bool needs_separated_components = false; - for (size_t i = 0; i < this->num_printing_regions(); ++ i) { - const PrintRegionConfig &rc = this->printing_region(i).config(); - if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) { - needs_separated_components = true; - break; - } - } - // Fast path: the feature only changes anything when the object is made of more than one - // connected body. Detect that cheaply the same way as "Split to objects" — more than one - // model part, or a single part whose mesh is splittable (is_splittable() is cached). A single - // body already shares the object center, i.e. the default, so skip the connectivity pass. - if (needs_separated_components) { - int parts = 0; - const ModelVolume *first_part = nullptr; - for (const ModelVolume *v : this->model_object()->volumes) - if (v->is_model_part()) { ++ parts; first_part = v; } - if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable())) - needs_separated_components = false; - } - for (Layer *layer : m_layers) - layer->lslices_separated_component_bboxes.clear(); - if (needs_separated_components) { - const size_t nl = m_layers.size(); - std::vector offset(nl + 1, 0); // flat index of the first island of each layer - for (size_t i = 0; i < nl; ++ i) - offset[i + 1] = offset[i] + m_layers[i]->lslices.size(); - const size_t nreg = offset[nl]; - // Union-find over every (layer, island). - std::vector parent(nreg); - for (size_t i = 0; i < nreg; ++ i) parent[i] = i; - auto find = [&parent](size_t x) { - while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } - return x; - }; - auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; }; - // Join islands that overlap between two consecutive layers. - for (size_t i = 0; i + 1 < nl; ++ i) { - const Layer *la = m_layers[i], *lb = m_layers[i + 1]; - for (size_t a = 0; a < la->lslices.size(); ++ a) - for (size_t b = 0; b < lb->lslices.size(); ++ b) - if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) && - ! intersection_ex(la->lslices[a], lb->lslices[b]).empty()) - unite(offset[i] + a, offset[i + 1] + b); - } - // Full bounding box of each body, indexed by its union-find root. - std::vector body_bbox(nreg); - for (size_t i = 0; i < nl; ++ i) - for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a) - body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]); - // Store the body bbox for every island. - for (size_t i = 0; i < nl; ++ i) { - Layer *layer = m_layers[i]; - layer->lslices_separated_component_bboxes.resize(layer->lslices.size()); - for (size_t a = 0; a < layer->lslices.size(); ++ a) - layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)]; - } - } - const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first; const auto& support_fill_octree = this->m_adaptive_fill_octrees.second; @@ -1401,8 +1430,6 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "infill_anchor_max" || opt_key == "top_surface_line_width" || opt_key == "bottom_surface_density" - || opt_key == "center_of_surface_pattern" - || opt_key == "separated_infills" || opt_key == "initial_layer_line_width" || opt_key == "small_area_infill_flow_compensation" || opt_key == "lateral_lattice_angle_1" @@ -1410,6 +1437,10 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "infill_overhang_angle") { steps.emplace_back(posInfill); } else if (opt_key == "sparse_infill_pattern" + // Orca: Body centering now also determines bridge anchors during preparation. + // Invalidating preparation also invalidates infill, including top/bottom surfaces. + || opt_key == "center_of_surface_pattern" + || opt_key == "separated_infills" || opt_key == "sparse_infill_smooth_factor" || opt_key == "symmetric_infill_y_axis" || opt_key == "infill_shift_step" @@ -3009,21 +3040,12 @@ void PrintObject::bridge_over_infill() return diff(layers_sparse_infill, not_sparse_infill); }; - // LAMBDA do determine optimal bridging angle - auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern, double infill_direction) { + // Orca: Derive the fallback bridge direction from the supplied anchor geometry. + // Pattern-specific angle selection belongs at the call site, where the supporting + // layer and region are known; this helper must not override it with a base config angle. + auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors) { AABBTreeLines::LinesDistancer lines_tree(anchors); - // Orca: since 3D Honeycomb was "fixed" by forcing coordf_t layerHeight = scale_(1.0), this is no longer needed. - // CorssHatch also does not need fixed angle. - // - // Check it the infill that require a fixed infill angle. - //switch (dominant_pattern) { - //case ip3DHoneycomb: - //case ipCrossHatch: - // return (infill_direction + 45.0) * 2.0 * M_PI / 360.; - //default: break; - //} - std::map counted_directions; for (const Polygon &p : bridged_area) { double acc_distance = 0; @@ -3089,18 +3111,15 @@ void PrintObject::bridge_over_infill() if (bridging_angle == 0) { bridging_angle = 0.001; } - switch (dominant_pattern) { - case ipHilbertCurve: bridging_angle += 0.25 * PI; break; - case ipOctagramSpiral: bridging_angle += (1.0 / 16.0) * PI; break; - default: break; - } return bridging_angle; }; - // LAMBDA that will fill given polygons with lines, exapand the lines to the nearest anchor, and reconstruct polygons from the newly - // generated lines - auto construct_anchored_polygon = [](Polygons bridged_area, Lines anchors, const Flow &bridging_flow, double bridging_angle) { + // Orca: Extend scan sections to the nearest anchors and reconstruct the bridge area. + // scan_spacing controls boundary sampling independently of the extrusion spacing; + // anchoring overlap and smoothing thresholds still use the physical bridging flow. + auto construct_anchored_polygon = [](Polygons bridged_area, Lines anchors, const Flow &bridging_flow, double bridging_angle, + coord_t scan_spacing, bool restore_anchors = false) { auto lines_rotate = [](Lines &lines, double cos_angle, double sin_angle) { for (Line &l : lines) { double ax = double(l.a.x()); @@ -3127,12 +3146,12 @@ void PrintObject::bridge_over_infill() BoundingBox bb_x = get_extents(bridged_area); BoundingBox bb_y = get_extents(anchors); - const size_t n_vlines = (bb_x.max.x() - bb_x.min.x() + bridging_flow.scaled_spacing() - 1) / bridging_flow.scaled_spacing(); + const size_t n_vlines = (bb_x.max.x() - bb_x.min.x() + scan_spacing - 1) / scan_spacing; std::vector vertical_lines(n_vlines); for (size_t i = 0; i < n_vlines; i++) { - // Orca: Make sure the line is placed in the middle of the extrusion - // coord_t x = bb_x.min.x() + i * bridging_flow.scaled_spacing(); - coord_t x = bb_x.min.x() + (i + 0.5) * bridging_flow.scaled_spacing(); + // Orca: Sample the center of each reconstructed strip. Its edges lie + // half a scan step away, even when the sampling is finer than extrusion. + coord_t x = bb_x.min.x() + (i + 0.5) * scan_spacing; coord_t y_min = bb_y.min.y() - bridging_flow.scaled_spacing(); coord_t y_max = bb_y.max.y() + bridging_flow.scaled_spacing(); vertical_lines[i].a = Point{x, y_min}; @@ -3155,7 +3174,11 @@ void PrintObject::bridge_over_infill() auto anchors_intersections = anchors_and_walls_tree.intersections_with_line(vertical_lines[i]); for (Line §ion : polygon_sections[i]) { - auto maybe_below_anchor = std::upper_bound(anchors_intersections.rbegin(), anchors_intersections.rend(), section.a, + // Orca: A repaired boundary may already overlap its anchor by one flow width. + // Include that overlap in the search so restoring rounded corners does not + // extend every already anchored section into the next sparse infill cell. + const coord_t overlap = restore_anchors ? bridging_flow.scaled_width() + SCALED_EPSILON : 0; + auto maybe_below_anchor = std::upper_bound(anchors_intersections.rbegin(), anchors_intersections.rend(), section.a + Point{0, overlap}, [](const Point &a, const std::pair &b) { return a.y() > b.first.y(); }); @@ -3164,7 +3187,7 @@ void PrintObject::bridge_over_infill() section.a.y() -= bridging_flow.scaled_width() * (0.5 + 0.5); } - auto maybe_upper_anchor = std::upper_bound(anchors_intersections.begin(), anchors_intersections.end(), section.b, + auto maybe_upper_anchor = std::upper_bound(anchors_intersections.begin(), anchors_intersections.end(), section.b - Point{0, overlap}, [](const Point &a, const std::pair &b) { return a.y() < b.first.y(); }); @@ -3194,7 +3217,9 @@ void PrintObject::bridge_over_infill() }); } - // reconstruct polygon from polygon sections + // Orca: Reconstruct the polygon from scan sections. At discontinuities and + // strip starts/ends, use half the scan step for the X offsets; using half an + // extrusion spacing would overlap the finer strips and distort curved anchors. struct TracedPoly { Points lows; @@ -3220,8 +3245,8 @@ void PrintObject::bridge_over_infill() 36.0 * double(bridging_flow.scaled_spacing()) * bridging_flow.scaled_spacing()) { traced_poly.lows.push_back(candidate->a); } else { - traced_poly.lows.push_back(traced_poly.lows.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.lows.push_back(candidate->a - Point{bridging_flow.scaled_spacing() / 2, 0}); + traced_poly.lows.push_back(traced_poly.lows.back() + Point{scan_spacing / 2, 0}); + traced_poly.lows.push_back(candidate->a - Point{scan_spacing / 2, 0}); traced_poly.lows.push_back(candidate->a); } @@ -3229,8 +3254,8 @@ void PrintObject::bridge_over_infill() 36.0 * double(bridging_flow.scaled_spacing()) * bridging_flow.scaled_spacing()) { traced_poly.highs.push_back(candidate->b); } else { - traced_poly.highs.push_back(traced_poly.highs.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.highs.push_back(candidate->b - Point{bridging_flow.scaled_spacing() / 2, 0}); + traced_poly.highs.push_back(traced_poly.highs.back() + Point{scan_spacing / 2, 0}); + traced_poly.highs.push_back(candidate->b - Point{scan_spacing / 2, 0}); traced_poly.highs.push_back(candidate->b); } segment_added = true; @@ -3238,9 +3263,9 @@ void PrintObject::bridge_over_infill() } if (!segment_added) { - // Zero overlapping segments, we just close this polygon - traced_poly.lows.push_back(traced_poly.lows.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.highs.push_back(traced_poly.highs.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); + // Orca: No section continues this strip; close at its right edge. + traced_poly.lows.push_back(traced_poly.lows.back() + Point{scan_spacing / 2, 0}); + traced_poly.highs.push_back(traced_poly.highs.back() + Point{scan_spacing / 2, 0}); Polygon &new_poly = expanded_bridged_area.emplace_back(std::move(traced_poly.lows)); new_poly.points.insert(new_poly.points.end(), traced_poly.highs.rbegin(), traced_poly.highs.rend()); traced_poly.lows.clear(); @@ -3255,9 +3280,9 @@ void PrintObject::bridge_over_infill() for (const auto &segment : polygon_slice) { if (used_segments.find(&segment) == used_segments.end()) { TracedPoly &new_tp = current_traced_polys.emplace_back(); - new_tp.lows.push_back(segment.a - Point{bridging_flow.scaled_spacing() / 2, 0}); + new_tp.lows.push_back(segment.a - Point{scan_spacing / 2, 0}); new_tp.lows.push_back(segment.a); - new_tp.highs.push_back(segment.b - Point{bridging_flow.scaled_spacing() / 2, 0}); + new_tp.highs.push_back(segment.b - Point{scan_spacing / 2, 0}); new_tp.highs.push_back(segment.b); } } @@ -3364,7 +3389,10 @@ void PrintObject::bridge_over_infill() total_fill_area = closing(total_fill_area, float(SCALED_EPSILON)); expansion_area = closing(expansion_area, float(SCALED_EPSILON)); expansion_area = intersection(expansion_area, deep_infill_area); - Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing)); + // Orca: Preserve the real lower-layer anchors for every candidate in this + // layer. Replacing this shared set for one pattern also changes later regions, + // and synthetic straight lines can claim support where no infill is printed. + const Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing)); Polygons internal_unsupported_area = shrink(deep_infill_area, spacing * 4.5); #ifdef DEBUG_BRIDGE_OVER_INFILL @@ -3375,6 +3403,9 @@ void PrintObject::bridge_over_infill() std::vector expanded_surfaces; expanded_surfaces.reserve(surfaces_by_layer[lidx].size()); for (const CandidateSurface &candidate : surfaces_by_layer[lidx]) { + const auto ®ion_config = candidate.region->region().config(); + const bool turning_pattern = region_config.sparse_infill_pattern == ipHilbertCurve || + region_config.sparse_infill_pattern == ipOctagramSpiral; const Flow &flow = candidate.region->bridging_flow(frSolidInfill, true); Polygons area_to_be_bridge = expand(candidate.new_polys, flow.scaled_spacing()); area_to_be_bridge = intersection(area_to_be_bridge, deep_infill_area); @@ -3403,20 +3434,40 @@ void PrintObject::bridge_over_infill() to_lines(area_to_be_bridge), to_lines(boundary_plines), to_lines(anchors), to_lines(expansion_area)); #endif - double bridging_angle = 0; - if (!anchors.empty()) { - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors), - candidate.region->region().config().sparse_infill_pattern.value, - candidate.region->region().config().infill_direction.value); - } else { - // use expansion boundaries as anchors. - // Also, use Infill pattern that is neutral for angle determination, since there are no infill lines. - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine, 0); + double bridging_angle = -1.; + if (!anchors.empty() && turning_pattern) { + // Orca: Keep adjacent bridges over Hilbert/Octagram aligned despite + // their many local turning directions. Use the lower layer's rotation, + // since that is the infill supporting the bridge, not the current layer's. + for (const LayerRegion *lower_region : layer->lower_layer->regions()) { + // Orca: Apply the configured direction only if the same region has + // sparse infill below this bridge. A height modifier may put another + // pattern underneath, requiring the geometry-based fallback below. + if (&lower_region->region() != &candidate.region->region() || + intersection(area_to_be_bridge, to_polygons(lower_region->fill_surfaces.filter_by_type(stInternal))).empty()) + continue; + bridging_angle = calculate_infill_rotation_angle(po, layer->lower_layer->id(), region_config.infill_direction.value, + region_config.sparse_infill_rotate_template.value) + 0.5 * PI; + // Orca: Apply model alignment as infill generation does, then normalize + // the undirected bridge angle to [0, PI), including negative rotations. + if (region_config.align_infill_direction_to_model) { + const auto &m = po->trafo().matrix(); + bridging_angle += std::atan2(double(m(1, 0)), double(m(0, 0))); + } + bridging_angle = std::fmod(bridging_angle, PI); + if (bridging_angle < 0.) + bridging_angle += PI; + break; + } } + // Orca: A different region below (e.g. a height modifier) needs the actual anchor + // directions. When there are no sparse anchors, use the expansion boundaries. + if (bridging_angle < 0.) + bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors.empty() ? boundary_plines : anchors)); - // ORCA: Internal bridge angle override + // Orca: Preserve the user's absolute or relative internal bridge angle + // override after automatic direction selection. if (candidate.region->region().config().internal_bridge_angle.value > 0) { - const auto ®ion_config = candidate.region->region().config(); const double custom_angle_rad = Geometry::deg2rad(region_config.internal_bridge_angle.value); if (region_config.relative_bridge_angle.value) bridging_angle += custom_angle_rad; @@ -3429,11 +3480,19 @@ void PrintObject::bridge_over_infill() } } + // Orca: Changing the bridge direction must not change its physical supports. + // Extend to actual sparse infill or the existing boundary anchors, never to + // a synthetic grid that merely has the same nominal angle and spacing. boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end()); if (!lightning_area.empty() && !intersection(area_to_be_bridge, lightning_area).empty()) { boundary_plines = intersection_pl(boundary_plines, expand(area_to_be_bridge, scale_(10))); } - Polygons bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle); + // Orca: Use four samples per extrusion spacing for Hilbert/Octagram so the + // reconstructed boundary follows rounded anchors instead of cutting corners. + // Keep the original step for other patterns and at least one coordinate unit + // after integer division. This changes boundary accuracy, not infill density. + const coord_t scan_spacing = std::max(coord_t(1), flow.scaled_spacing() / (turning_pattern ? 4 : 1)); + Polygons bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle, scan_spacing); // Check collision with other expanded surfaces { @@ -3447,7 +3506,9 @@ void PrintObject::bridge_over_infill() } } if (reconstruct) { - bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle); + // Orca: Retain the same sampling accuracy when matching a nearby + // bridge's direction; rebuilding must not lose the curved supports. + bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle, scan_spacing); } } @@ -3455,6 +3516,13 @@ void PrintObject::bridge_over_infill() // bridging_area = opening(bridging_area, flow.scaled_spacing()); bridging_area = opening(bridging_area, flow.scaled_spacing() * 0.75); bridging_area = closing(bridging_area, flow.scaled_spacing()); + // Orca: Opening/closing can pull rounded bridge ends away from their real + // supports. Restore those contacts after smoothing, preserving the cleaned + // area and the selected angle; do not smooth the restored contacts again. + if (turning_pattern && !bridging_area.empty()) { + bridging_area = union_(bridging_area, construct_anchored_polygon(bridging_area, to_lines(boundary_plines), flow, + bridging_angle, scan_spacing, true)); + } bridging_area = intersection(bridging_area, limiting_area); bridging_area = intersection(bridging_area, total_fill_area); bridging_area = diff(bridging_area, total_top_area); diff --git a/tests/fff_print/test_fill.cpp b/tests/fff_print/test_fill.cpp index 04e5b61831..aa81570e56 100644 --- a/tests/fff_print/test_fill.cpp +++ b/tests/fff_print/test_fill.cpp @@ -9,6 +9,7 @@ #include #include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/AABBTreeLines.hpp" #include "libslic3r/Fill/Fill.hpp" #include "libslic3r/Flow.hpp" #include "libslic3r/Geometry.hpp" @@ -1229,3 +1230,68 @@ TEST_CASE("Smoothing multiline lightning infill keeps its outlines connected", " REQUIRE(smooth.point_count > sharp.point_count); REQUIRE(smooth.sharp_turns < sharp.sharp_turns); } + +TEST_CASE("Sparse plane-path anchors match the printed infill", "[Fill][InternalBridge][Regression]") +{ + // Orca: Compare generated anchors with actual extrusion across plane-path patterns, + // smoothing, multiline and rotations; an origin shift must not pass as valid support. + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral", "archimedeanchords"); + const std::string smoothing = GENERATE("0%", "100%"); + const int multiline = GENERATE(1, 2); + const bool rotated = GENERATE(false, true); + const bool separated = GENERATE(false, true); + CAPTURE(pattern, smoothing, multiline, rotated, separated); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"sparse_infill_pattern", pattern}, + {"sparse_infill_density", "15%"}, + {"sparse_infill_smooth_factor", smoothing}, + {"fill_multiline", multiline}, + {"infill_direction", 45}, + {"sparse_infill_rotate_template", rotated ? "0,25,50" : ""}, + {"align_infill_direction_to_model", rotated}, + {"separated_infills", separated}, + {"top_shell_layers", 0}, + {"bottom_shell_layers", 0}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"resolution", 0.012}}); + Print print; + Model model; + TriangleMesh mesh = make_cube(30, 24, 1); + if (separated) { + // Orca: Two disconnected bodies in one object must each use their own infill origin. + TriangleMesh second = make_cube(30, 24, 1); + second.translate(50, 0, 0); + mesh.merge(second); + } + Slic3r::Test::init_print({mesh}, print, model, config, nullptr, false); + if (rotated) { + model.objects.front()->instances.front()->set_rotation(Vec3d(0., 0., Geometry::deg2rad(23.))); + print.apply(model, config); + } + print.process(); + + const Layer &layer = *print.objects().front()->get_layer(4); + Polylines printed; + for (const LayerRegion *region : layer.regions()) + for (const ExtrusionEntity *entity : region->fills.flatten().entities) + if (entity->role() == erInternalInfill) + entity->collect_polylines(printed); + REQUIRE_FALSE(printed.empty()); + const AABBTreeLines::LinesDistancer printed_tree(to_lines(printed)); + + // Orca: Exclude perimeter connections: anchoring and extrusion can trim those differently. + const Polylines anchors = intersection_pl(layer.generate_sparse_infill_polylines_for_anchoring(nullptr, nullptr, nullptr), + shrink(to_polygons(layer.lslices), scale_(3.))); + REQUIRE_FALSE(anchors.empty()); + double max_distance = 0.; + for (const Polyline &path : anchors) + for (const Point &point : path.equally_spaced_points(scale_(0.25))) + max_distance = std::max(max_distance, printed_tree.distance_from_lines(point)); + // Orca: Allow only the configured simplification tolerance; infill-scale offsets + // would hide anchors that no longer coincide with printed lines. + CHECK(unscale(max_distance) <= config.opt_float("resolution")); +} diff --git a/tests/fff_print/test_printobject.cpp b/tests/fff_print/test_printobject.cpp index fb7fe2c1fd..a373a1ad39 100644 --- a/tests/fff_print/test_printobject.cpp +++ b/tests/fff_print/test_printobject.cpp @@ -4,11 +4,18 @@ #include "libslic3r/Print.hpp" #include "libslic3r/Layer.hpp" #include "libslic3r/GCodeReader.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/AABBTreeLines.hpp" #include "test_helpers.hpp" +#include #include +#include #include +#include +#include +#include using namespace Slic3r; using namespace Slic3r::Test; @@ -130,3 +137,438 @@ TEST_CASE("Initial layer height is honored", "[PrintObject]") REQUIRE_THAT(*layer_zs.begin(), Catch::Matchers::WithinAbs(0.3, 1e-4)); REQUIRE_THAT(*std::next(layer_zs.begin()), Catch::Matchers::WithinAbs(0.5, 1e-4)); } + +static TriangleMesh internal_bridge_step() +{ + // Orca: The smaller tower leaves a shoulder whose solid skin needs internal bridges + // over the sparse infill in the base, without relying on an external model file. + TriangleMesh mesh = make_cube(30, 24, 3); + TriangleMesh tower = make_cube(14, 10, 1); + tower.translate(8, 7, 3); + mesh.merge(tower); + return mesh; +} + +static DynamicPrintConfig internal_bridge_config(const std::string &pattern, int multiline) +{ + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"sparse_infill_pattern", pattern}, + {"fill_multiline", multiline}, + {"sparse_infill_density", "15%"}, + {"sparse_infill_smooth_factor", "100%"}, + {"infill_direction", 45}, + {"internal_bridge_angle", 0}, + {"thick_internal_bridges", true}, + {"top_shell_layers", 3}, + {"bottom_shell_layers", 2}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}}); + return config; +} + +TEST_CASE("Internal bridge angles follow the lower infill layer and model rotation", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral"); + // Orca: Cover both a central line (odd counts) and offset pairs (even counts). + const int multiline = GENERATE(1, 2, 3); + CAPTURE(multiline); + const double rotation = GENERATE(23., -123.); + const std::vector cycle{10., 30., 70.}; + auto config = internal_bridge_config(pattern, multiline); + config.set_deserialize_strict({{"sparse_infill_rotate_template", "10,30,70"}, + {"align_infill_direction_to_model", true}, + {"separated_infills", false}}); + Print print; + Model model; + init_print({internal_bridge_step()}, print, model, config, nullptr, false); + model.objects.front()->instances.front()->set_rotation(Vec3d(0., 0., Geometry::deg2rad(rotation))); + print.apply(model, config); + print.process(); + const PrintObject &object = *print.objects().front(); + size_t bridges = 0; + for (size_t i = 1; i < object.layer_count(); ++i) { + // Orca: The support is one layer below the bridge. Check the template and model + // rotation together, including normalization when the resulting angle is negative. + double expected = std::fmod(cycle[(i - 1) % cycle.size()] + 90. + rotation, 180.); + if (expected < 0.) expected += 180.; + for (const LayerRegion *region : object.get_layer(i)->regions()) + for (const Surface *surface : region->fill_surfaces.filter_by_type(stInternalBridge)) { + CAPTURE(pattern, rotation, i); + CHECK_THAT(Geometry::rad2deg(surface->bridge_angle), Catch::Matchers::WithinAbs(expected, 0.001)); + ++bridges; + } + } + REQUIRE(bridges > 0); +} + +TEST_CASE("Turning infill does not replace the anchors of another region", "[PrintObject][InternalBridge][Regression]") +{ + // Orca: Keep the right-hand region fixed while changing the left-hand pattern in the + // same object. Its bridge areas must be independent of a previous candidate's anchors. + const int multiline = GENERATE(1, 2, 3); + CAPTURE(multiline); + auto right_bridges = [multiline](const std::string &left_pattern) { + auto config = internal_bridge_config(left_pattern, multiline); + Print print; + Model model; + init_print({internal_bridge_step()}, print, model, config, nullptr, false); + TriangleMesh right = internal_bridge_step(); + right.translate(50, 0, 0); + ModelVolume *volume = model.objects.front()->add_volume(std::move(right)); + volume->config.set_key_value("sparse_infill_pattern", new ConfigOptionEnum(ipRectilinear)); + volume->config.set_key_value("infill_direction", new ConfigOptionFloat(17.)); + print.apply(model, config); + print.process(); + std::map result; + const PrintObject &object = *print.objects().front(); + for (size_t i = 0; i < object.layer_count(); ++i) + for (const LayerRegion *region : object.get_layer(i)->regions()) + if (region->region().config().infill_direction == 17.) + polygons_append(result[i], to_polygons(region->fill_surfaces.filter_by_type(stInternalBridge))); + return result; + }; + const auto baseline = right_bridges("rectilinear"); + const auto actual = right_bridges(GENERATE("hilbertcurve", "octagramspiral")); + REQUIRE(actual.size() == baseline.size()); + double total_area = 0.; + for (const auto &[layer, expected] : baseline) { + CAPTURE(layer); + const auto &polys = actual.at(layer); + CHECK(area(diff(expected, polys)) < scaled(1.) * scaled(1.) * 1e-6); + CHECK(area(diff(polys, expected)) < scaled(1.) * scaled(1.) * 1e-6); + total_area += area(expected); + } + REQUIRE(total_area > 0.); +} + +TEST_CASE("Rounded internal bridges end on printed support", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral"); + const bool separated = GENERATE(false, true); + CAPTURE(pattern, separated); + auto config = internal_bridge_config(pattern, 1); + config.set_deserialize_strict({{"infill_wall_overlap", "0%"}, {"separated_infills", separated}}); + TriangleMesh mesh = internal_bridge_step(); + if (separated) { + TriangleMesh second = internal_bridge_step(); + second.translate(50, 0, 0); + mesh.merge(second); + } + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + + // Orca: Check final extrusion endpoints after polygon cleanup and fill generation. + // A correct bridge angle and correct sparse anchors alone do not guarantee contact. + const PrintObject &object = *print.objects().front(); + size_t checked = 0; + for (size_t i = 1; i < object.layer_count(); ++i) { + Polygons support; + Polylines walls; + for (const LayerRegion *region : object.get_layer(i - 1)->regions()) { + region->perimeters.polygons_covered_by_width(support, 0.f); + region->fills.polygons_covered_by_width(support, 0.f); + region->perimeters.collect_polylines(walls); + } + REQUIRE_FALSE(support.empty()); + const AABBTreeLines::LinesDistancer support_tree(to_lines(union_(support))); + const AABBTreeLines::LinesDistancer wall_tree(to_lines(walls)); + for (const LayerRegion *region : object.get_layer(i)->regions()) + for (const ExtrusionEntity *entity : region->fills.flatten().entities) { + if (entity->role() != erInternalBridgeInfill) + continue; + const auto *path = dynamic_cast(entity); + REQUIRE(path != nullptr); + for (const Line &line : path->polyline.to_polyline().lines()) { + // Orca: Sample span ends, excluding short connectors and wall overlap. + if (line.length() < scale_(std::max(0.7, 3. * path->width))) + continue; + for (const Point &point : {line.a, line.b}) { + if (wall_tree.distance_from_lines(point) <= scale_(0.5)) + continue; + CAPTURE(i, point.x(), point.y()); + const double gap = unscale(support_tree.distance_from_lines(point)) - 0.5 * path->width; + CHECK(gap <= 0.1); + ++checked; + } + } + } + } + REQUIRE(checked > 0); +} + +TEST_CASE("Enabling separated infill recomputes body origins", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral", "archimedeanchords"); + CAPTURE(pattern); + auto footprint = [&](bool reslice) { + auto config = internal_bridge_config(pattern, 2); + config.set_deserialize_strict({{"separated_infills", !reslice}}); + TriangleMesh mesh = internal_bridge_step(); + TriangleMesh second = internal_bridge_step(); + second.translate(50, 0, 0); + mesh.merge(second); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + if (reslice) { + // Orca: Enabling centering after a completed slice must rebuild the body + // origins now shared by bridge preparation and printed infill. + config.set_deserialize_strict({{"separated_infills", true}}); + print.apply(model, config); + print.process(); + } + Polygons result; + for (const LayerRegion *region : print.objects().front()->get_layer(4)->regions()) + region->fills.polygons_covered_by_width(result, 0.f); + return union_(result); + }; + const Polygons fresh = footprint(false); + const Polygons resliced = footprint(true); + REQUIRE_FALSE(fresh.empty()); + CHECK(area(diff(fresh, resliced)) < scaled(1.) * scaled(1.) * 1e-6); + CHECK(area(diff(resliced, fresh)) < scaled(1.) * scaled(1.) * 1e-6); +} + +TEST_CASE("Surface centering survives changes to separated infill settings", "[PrintObject][SurfaceInfill][Regression]") +{ + const std::string pattern = GENERATE("archimedeanchords", "octagramspiral"); + const std::string initial_center = GENERATE("each_surface", "each_model", "each_assembly"); + const std::string final_center = GENERATE("each_surface", "each_model", "each_assembly"); + const bool separated = GENERATE(false, true); + const std::string top_order = GENERATE("default", "outward", "inward"); + const std::string bottom_order = top_order == "outward" ? "inward" : top_order == "inward" ? "outward" : "default"; + const std::string density = GENERATE("80%", "100%"); + const bool change_center = initial_center != final_center; + CAPTURE(pattern, initial_center, final_center, separated, top_order, bottom_order, density); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"top_surface_pattern", pattern}, + {"bottom_surface_pattern", pattern}, + {"top_surface_fill_order", top_order}, + {"bottom_surface_fill_order", bottom_order}, + {"top_surface_density", density}, + {"bottom_surface_density", density}, + {"center_of_surface_pattern", initial_center}, + {"separated_infills", change_center ? separated : !separated}, + {"sparse_infill_pattern", "rectilinear"}, + {"sparse_infill_density", "15%"}, + {"top_shell_layers", 2}, + {"bottom_shell_layers", 2}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}}); + + // Orca: Two disconnected bodies exercise per-body centering. The offset tower also + // makes each-surface and each-model centering differ on the top surfaces. + TriangleMesh mesh = make_cube(30, 24, 2); + TriangleMesh tower = make_cube(12, 10, 1); + tower.translate(4, 3, 2); + mesh.merge(tower); + TriangleMesh second = mesh; + second.translate(50, 0, 0); + mesh.merge(second); + + // Orca: Equal footprints can hide reordered or reversed paths. Retain their point + // sequences and ordering protection to cover the directional surface behavior too. + struct SurfaceFillSnapshot { + std::map> paths; + bool protected_order = true; + }; + auto surface_fills = [](const Print &print) { + std::map, SurfaceFillSnapshot> result; + const PrintObject &object = *print.objects().front(); + for (size_t i = 0; i < object.layer_count(); ++i) { + auto collect = [&](const auto &self, const ExtrusionEntity &entity, bool no_sort) -> void { + if (const auto *collection = dynamic_cast(&entity)) { + for (const ExtrusionEntity *child : collection->entities) + self(self, *child, no_sort || collection->no_sort); + } else if (entity.role() == erTopSolidInfill || entity.role() == erBottomSurface) { + const auto *path = dynamic_cast(&entity); + REQUIRE(path != nullptr); + auto &snapshot = result[{i, entity.role()}]; + // Orca: The centered test model has one body on either side of X=0. + // Their traversal order may vary; preserve path order within each body. + Points points = path->polyline.to_polyline().points; + REQUIRE_FALSE(points.empty()); + snapshot.paths[points.front().x() > 0].push_back(std::move(points)); + snapshot.protected_order &= no_sort && !path->can_reverse(); + } + }; + for (const LayerRegion *region : object.get_layer(i)->regions()) + collect(collect, region->fills, false); + } + return result; + }; + + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + const auto initial = surface_fills(print); + config.set_deserialize_strict({{"center_of_surface_pattern", final_center}, {"separated_infills", separated}}); + print.apply(model, config); + // Orca: Preparation owns the body origins, and its invalidation must also force + // regeneration of top/bottom extrusion paths, even when sparse infill is unchanged. + CHECK_FALSE(print.objects().front()->is_step_done(posPrepareInfill)); + CHECK_FALSE(print.objects().front()->is_step_done(posInfill)); + print.process(); + const auto resliced = surface_fills(print); + + Print fresh_print; + Model fresh_model; + init_print({mesh}, fresh_print, fresh_model, config, nullptr, false); + fresh_print.process(); + const auto fresh = surface_fills(fresh_print); + REQUIRE_FALSE(fresh.empty()); + REQUIRE(resliced.size() == fresh.size()); + std::set roles; + bool changed_paths = false; + for (const auto &entry : fresh) { + CAPTURE(entry.first.first, entry.first.second); + REQUIRE_FALSE(entry.second.paths.empty()); + roles.insert(entry.first.second); + REQUIRE(resliced.count(entry.first) == 1); + REQUIRE(initial.count(entry.first) == 1); + const auto &actual = resliced.at(entry.first); + const auto &expected = entry.second; + const auto &before = initial.at(entry.first); + CHECK((actual.paths == expected.paths)); + if (!change_center) + CHECK((actual.paths == before.paths)); + if (top_order != "default") { + CHECK(expected.protected_order); + CHECK(actual.protected_order); + CHECK(before.protected_order); + } + changed_paths |= expected.paths != before.paths; + } + CHECK(roles.count(erTopSolidInfill) == 1); + CHECK(roles.count(erBottomSurface) == 1); + // Orca: Guard against a vacuous comparison: changing surface centering must change + // the printed pattern, while toggling separated sparse infill must leave it alone. + CHECK(changed_paths == change_center); +} + +TEST_CASE("Separated infill keeps fragmented and nested bodies independent", "[PrintObject][SurfaceInfill][Regression]") +{ + constexpr size_t grid_size = 8; + TriangleMesh mesh; + auto add_box = [&](double x, double y, double width, double depth) { + TriangleMesh box = make_cube(width, depth, 0.6); + box.translate(x, y, 0); + mesh.merge(box); + }; + // Orca: Many small islands exercise spatial pruning and the tree's original + // island indices. A pillar inside a frame also overlaps its bounding box, + // but must remain a separate body because it lies entirely inside the hole. + for (size_t x = 0; x < grid_size; ++ x) + for (size_t y = 0; y < grid_size; ++ y) + add_box(6 * x, 6 * y, 3, 3); + add_box(54, 0, 20, 4); + add_box(54, 16, 20, 4); + add_box(54, 0, 4, 20); + add_box(70, 0, 4, 20); + add_box(62, 8, 4, 4); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"separated_infills", true}, + {"center_of_surface_pattern", "each_surface"}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"elefant_foot_compensation", 0}, + {"wall_loops", 1}}); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + // Orca: Prepare body bounds through the public pipeline, then inspect the object read-only. + print.process(); + const PrintObject &object = *print.objects().front(); + REQUIRE(object.layer_count() > 1); + for (const Layer *layer : object.layers()) { + REQUIRE(layer->lslices.size() == grid_size * grid_size + 2); + REQUIRE(layer->lslices_separated_component_bboxes.size() == layer->lslices.size()); + size_t holes = 0; + for (size_t i = 0; i < layer->lslices.size(); ++ i) { + const BoundingBox &body = layer->lslices_separated_component_bboxes[i]; + const BoundingBox &island = layer->lslices_bboxes[i]; + CHECK(body.min == island.min); + CHECK(body.max == island.max); + holes += layer->lslices[i].holes.size(); + } + CHECK(holes == 1); + } +} + +TEST_CASE("Body centering survives islands merging and splitting between layers", "[PrintObject][SurfaceInfill][Regression]") +{ + const bool separated = GENERATE(false, true); + CAPTURE(separated); + // Orca: Four posts join through horizontal then vertical rails, creating a + // cycle of overlaps before splitting into four islands again. This exercises + // redundant connections and indexing either adjacent layer. A fifth post + // stays separate at every height. + TriangleMesh mesh; + for (int x : {0, 8}) + for (int y : {0, 8}) { + TriangleMesh post = make_cube(4, 4, 1); + post.translate(x, y, 0); + mesh.merge(post); + } + for (int y : {0, 8}) { + TriangleMesh rail = make_cube(12, 4, 0.2); + rail.translate(0, y, 0.2); + mesh.merge(rail); + } + for (int x : {0, 8}) { + TriangleMesh rail = make_cube(4, 12, 0.2); + rail.translate(x, 0, 0.4); + mesh.merge(rail); + } + TriangleMesh isolated = make_cube(4, 4, 1); + isolated.translate(20, 0, 0); + mesh.merge(isolated); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"separated_infills", separated}, + {"center_of_surface_pattern", separated ? "each_surface" : "each_model"}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"elefant_foot_compensation", 0}, + {"wall_loops", 1}}); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + // Orca: Prepare body bounds through the public pipeline, then inspect the object read-only. + print.process(); + const PrintObject &object = *print.objects().front(); + REQUIRE(object.layer_count() == 5); + REQUIRE(object.get_layer(0)->lslices.size() == 5); + REQUIRE(object.get_layer(1)->lslices.size() == 3); + REQUIRE(object.get_layer(2)->lslices.size() == 3); + REQUIRE(object.get_layer(4)->lslices.size() == 5); + + BoundingBox isolated_bbox = object.get_layer(0)->lslices_bboxes.front(); + for (const BoundingBox &bbox : object.get_layer(0)->lslices_bboxes) + if (bbox.min.x() > isolated_bbox.min.x()) + isolated_bbox = bbox; + BoundingBox connected_bbox; + for (const Layer *layer : object.layers()) + for (const BoundingBox &bbox : layer->lslices_bboxes) + if (bbox.min.x() < isolated_bbox.min.x()) + connected_bbox.merge(bbox); + for (const Layer *layer : object.layers()) { + REQUIRE(layer->lslices_separated_component_bboxes.size() == layer->lslices.size()); + for (size_t i = 0; i < layer->lslices.size(); ++ i) { + const BoundingBox &expected = layer->lslices_bboxes[i].min.x() < isolated_bbox.min.x() ? connected_bbox : isolated_bbox; + const BoundingBox &actual = layer->lslices_separated_component_bboxes[i]; + CHECK(actual.min == expected.min); + CHECK(actual.max == expected.max); + } + } +} From a93c6ea67b11376ed27c80acea7878b9fbfbf270 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Thu, 10 Sep 2026 19:29:58 +0800 Subject: [PATCH 171/208] hotfix: system bundles being copied from resources folder on every startup --- src/slic3r/Utils/PresetUpdater.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index b328c43cca..23957f6500 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1106,8 +1106,8 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const const auto is_vendor_enabled = (vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) // always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE || (enabled_vendors.find(vendor_name) != enabled_vendors.end()); - if (enabled_config_update) { - if (is_vendor_installed(vendor_name)) { + if (is_vendor_installed(vendor_name)) { + if (enabled_config_update) { if (is_vendor_enabled) { // Orca: whichever form of the vendor resources ships at the newer // version is the one installing lays down, and the one to judge @@ -1122,17 +1122,12 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const << resource_ver.to_string() << " from resource, old version " << vendor_ver.to_string(); bundles.insert(vendor_name); } - } - else { - //need to be removed because not installed + } else { + // need to be removed because not installed remove_installed_vendor(vendor_name); } } - else if (is_vendor_enabled) { - bundles.insert(vendor_name); - } - } - else if (is_vendor_enabled) { + } else if (is_vendor_enabled) { bundles.insert(vendor_name); } } From 29b3282c8b73ca2518a8045369a938e666c3a8ac Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 10 Sep 2026 15:45:00 +0300 Subject: [PATCH 172/208] Update PluginPickerDialog.cpp --- src/slic3r/GUI/PluginPickerDialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/PluginPickerDialog.cpp b/src/slic3r/GUI/PluginPickerDialog.cpp index c0ff656fd1..5109b3b483 100644 --- a/src/slic3r/GUI/PluginPickerDialog.cpp +++ b/src/slic3r/GUI/PluginPickerDialog.cpp @@ -124,7 +124,7 @@ void PluginPickerDialog::build_capability_ui(const wxString& plugin_type_label) if (has_capabilities) { m_choice->SetSelection(0); - m_choice->Bind(wxEVT_CHOICE, [this](wxCommandEvent& evt) { + m_choice->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { update_capability_description(evt.GetSelection()); }); } else { From d09c3568c553c324fd2684193b8fe9dbd3142b67 Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 10 Sep 2026 17:02:29 +0300 Subject: [PATCH 173/208] match style of progress dialog --- src/slic3r/GUI/PluginsDialog.hpp | 6 +++--- src/slic3r/GUI/Widgets/ProgressDialog.cpp | 9 ++++++--- src/slic3r/GUI/Widgets/ProgressDialog.hpp | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/PluginsDialog.hpp b/src/slic3r/GUI/PluginsDialog.hpp index e663de79e4..98b46cf3e3 100644 --- a/src/slic3r/GUI/PluginsDialog.hpp +++ b/src/slic3r/GUI/PluginsDialog.hpp @@ -107,12 +107,12 @@ private: const wxString& title, const wxString& message, int maximum = 100, - int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE, + int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE, // | wxPD_CAN_ABORT for cancel button bool finish_after_dialog_destroyed = false) { const auto alive = m_alive; - wxProgressDialog* progress = new wxProgressDialog(title, message, maximum, this, style); - wxTimer* timer = new wxTimer(); + ProgressDialog* progress = new ProgressDialog(title, message, maximum, this, style); + wxTimer* timer = new wxTimer(); timer->Bind(wxEVT_TIMER, [alive, progress, message](wxTimerEvent&) { if (alive->load(std::memory_order_acquire) && progress) diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.cpp b/src/slic3r/GUI/Widgets/ProgressDialog.cpp index 53842ecaea..c16f3bcf1f 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.cpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.cpp @@ -178,7 +178,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int wxBoxSizer *sizer_1line = new wxBoxSizer(wxHORIZONTAL); m_msg = new wxStaticText(m_panel_1line, wxID_ANY, wxEmptyString, wxDefaultPosition, PROGRESSDIALOG_SIMPLEBOOK_SIZE, 0); m_msg->Wrap(-1); - m_msg->SetFont(::Label::Body_13); + m_msg->SetFont(::Label::Body_14); m_msg->SetForegroundColour(PROGRESSDIALOG_GREY_700); sizer_1line->Add(m_msg, 0, wxALIGN_CENTER, 0); m_panel_1line->SetSizer(sizer_1line); @@ -188,7 +188,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int wxBoxSizer *sizer_2line = new wxBoxSizer(wxVERTICAL); m_msg_2line = new wxStaticText(m_panel_2line, wxID_ANY, wxEmptyString, wxDefaultPosition, PROGRESSDIALOG_SIMPLEBOOK_SIZE, 0); m_msg_2line->Wrap(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x); - m_msg_2line->SetFont(::Label::Body_13); + m_msg_2line->SetFont(::Label::Body_14); m_msg_2line->SetForegroundColour(PROGRESSDIALOG_GREY_700); m_msg_2line->SetMaxSize(wxSize(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x, -1)); sizer_2line->Add(m_msg_2line, 1, wxALL, 0); @@ -204,7 +204,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int m_msg = new wxStaticText(m_msg_scrolledWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x, -1), 0); m_msg->Wrap(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x); - m_msg->SetFont(::Label::Body_13); + m_msg->SetFont(::Label::Body_14); m_msg->SetForegroundColour(PROGRESSDIALOG_GREY_700); m_msg_sizer->Add(m_msg, 0, wxEXPAND | wxALL, 0); @@ -228,6 +228,9 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int if (!HasPDFlag(wxPD_NO_PROGRESS)) { m_gauge = new wxGauge(this, wxID_ANY, maximum, wxDefaultPosition, PROGRESSDIALOG_GAUGE_SIZE, gauge_style); m_gauge->SetValue(0); + m_gauge->SetForegroundColour(wxColour("#009688")); + m_gauge->SetBackgroundColour(wxColour("#D9D9D9")); + wxGetApp().UpdateDarkUI(m_gauge); m_sizer_main->Add(m_gauge, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(28)); } diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.hpp b/src/slic3r/GUI/Widgets/ProgressDialog.hpp index bb770298a9..9ebf31b194 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.hpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.hpp @@ -18,7 +18,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowDisabler; #define PROGRESSDIALOG_GAUGE_SIZE wxSize(FromDIP(320), FromDIP(6)) #define PROGRESSDIALOG_CANCEL_BUTTON_SIZE wxSize(FromDIP(60), FromDIP(24)) #define PROGRESSDIALOG_DEF_BK wxColour(255,255,255) -#define PROGRESSDIALOG_GREY_700 wxColour(107,107,107) +#define PROGRESSDIALOG_GREY_700 wxColour(54,54,54) // #363636 label color #define wxPD_NO_PROGRESS 0x0100 From a640e32a19583378d68618efba5b44911a6b7cd2 Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 10 Sep 2026 17:29:25 +0300 Subject: [PATCH 174/208] fix build error --- src/slic3r/GUI/PluginsDialog.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/PluginsDialog.hpp b/src/slic3r/GUI/PluginsDialog.hpp index 98b46cf3e3..ec68d12969 100644 --- a/src/slic3r/GUI/PluginsDialog.hpp +++ b/src/slic3r/GUI/PluginsDialog.hpp @@ -2,6 +2,7 @@ #define slic3r_PluginsDialog_hpp_ #include "Widgets/WebViewHostDialog.hpp" +#include "Widgets/ProgressDialog.hpp" #include "PluginSource.hpp" #include "PluginStatus.hpp" #include "PluginSort.hpp" From d97dea2c41d554db3fd115886ce6b67e5beb146c Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Thu, 10 Sep 2026 16:08:54 -0500 Subject: [PATCH 175/208] build: clear 10 driver warnings from CGAL's fp flag pair under clang-cl (#15629) --- src/libslic3r/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index e860f50280..ffc6b5cee6 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -558,6 +558,12 @@ if (_opts) target_compile_options(libslic3r_cgal PRIVATE "${_opts_bad}") endif() +if (IS_CLANG_CL) + # CGAL passes /fp:strict /fp:except-. clang-cl reports the second as overriding part of + # the first; the settings cc1 receives are the same ones MSVC produces from that pair. + target_compile_options(libslic3r_cgal PRIVATE -Wno-overriding-option) +endif () + target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs) if (MSVC AND "${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") # 32 bit MSVC workaround From 0a630738f1e6467f7602b4948a901b8381daab78 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Fri, 11 Sep 2026 00:15:06 +0300 Subject: [PATCH 176/208] Fix untranslated language dialog captions (#15600) --- localization/i18n/OrcaSlicer.pot | 4 - localization/i18n/ca/OrcaSlicer_ca.po | 4 - localization/i18n/cs/OrcaSlicer_cs.po | 4 - localization/i18n/de/OrcaSlicer_de.po | 4 - localization/i18n/en/OrcaSlicer_en.po | 4 - localization/i18n/es/OrcaSlicer_es.po | 4 - localization/i18n/eu/OrcaSlicer_eu.po | 4 - localization/i18n/fr/OrcaSlicer_fr.po | 4 - localization/i18n/hu/OrcaSlicer_hu.po | 4 - localization/i18n/it/OrcaSlicer_it.po | 4 - localization/i18n/ja/OrcaSlicer_ja.po | 4 - localization/i18n/ko/OrcaSlicer_ko.po | 4 - localization/i18n/lt/OrcaSlicer_lt.po | 4 - localization/i18n/nl/OrcaSlicer_nl.po | 4 - localization/i18n/pl/OrcaSlicer_pl.po | 4 - localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 4 - localization/i18n/ru/OrcaSlicer_ru.po | 4 - localization/i18n/sv/OrcaSlicer_sv.po | 4 - localization/i18n/th/OrcaSlicer_th.po | 4 - localization/i18n/tr/OrcaSlicer_tr.po | 4 - localization/i18n/uk/OrcaSlicer_uk.po | 4 - localization/i18n/vi/OrcaSlicer_vi.po | 4 - localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 4 - localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 4 - src/slic3r/GUI/GUI_App.cpp | 221 -------------------- src/slic3r/GUI/GUI_App.hpp | 3 - src/slic3r/GUI/MainFrame.cpp | 89 -------- src/slic3r/GUI/Preferences.cpp | 23 +- src/slic3r/GUI/Widgets/FanControl.cpp | 2 +- 29 files changed, 4 insertions(+), 430 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 92b25f26c0..bbdc0e59be 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -2293,8 +2293,6 @@ msgstr "" msgid "%s has been removed." msgstr "" -msgid "Switching application language" -msgstr "" msgid "Select the language" msgstr "" @@ -8294,8 +8292,6 @@ msgstr "" msgid "Language selection" msgstr "" -msgid "Switching application language while some presets are modified." -msgstr "" msgid "Asia-Pacific" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 91ba0e2f2a..373eb6e9fd 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -2522,8 +2522,6 @@ msgstr "Hi ha una actualització disponible. Obriu el quadre de diàleg del paqu msgid "%s has been removed." msgstr "%s s'ha eliminat." -msgid "Switching application language" -msgstr "Canvi d'idioma de l'aplicació" msgid "Select the language" msgstr "Seleccioneu l'idioma" @@ -8924,8 +8922,6 @@ msgstr "Voleu continuar?" msgid "Language selection" msgstr "Selecció d'idiomes" -msgid "Switching application language while some presets are modified." -msgstr "Canviant l'idioma de l'aplicació mentre es modifiquen alguns perfils." msgid "Asia-Pacific" msgstr "Àsia-Pacífic" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 9884888723..b0d64c8005 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -2482,8 +2482,6 @@ msgstr "Je k dispozici aktualizace. Otevřete dialog balíčku předvoleb a prov msgid "%s has been removed." msgstr "%s bylo odstraněno." -msgid "Switching application language" -msgstr "Přepnutí jazyka aplikace" msgid "Select the language" msgstr "Zvolte jazyk" @@ -8882,8 +8880,6 @@ msgstr "Chcete pokračovat?" msgid "Language selection" msgstr "Výběr jazyka" -msgid "Switching application language while some presets are modified." -msgstr "Přepnutí jazyka aplikace, když jsou některé předvolby upraveny." msgid "Asia-Pacific" msgstr "Asie-Pacifik" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index bb096c0a23..bd25405cc3 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -2430,8 +2430,6 @@ msgstr "Es ist ein Update verfügbar. Öffnen Sie den Profilbündel-Dialog, um e msgid "%s has been removed." msgstr "%s wurde entfernt." -msgid "Switching application language" -msgstr "Wechsel der Sprache" msgid "Select the language" msgstr "Sprache wählen" @@ -8754,8 +8752,6 @@ msgstr "Möchten Sie fortfahren?" msgid "Language selection" msgstr "Sprachauswahl" -msgid "Switching application language while some presets are modified." -msgstr "Umschalten der Anwendungssprache, während einige Profile geändert werden." msgid "Asia-Pacific" msgstr "Asien-Pazifik" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index b949aea730..35c7f8a87a 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -2289,8 +2289,6 @@ msgstr "" msgid "%s has been removed." msgstr "" -msgid "Switching application language" -msgstr "" msgid "Select the language" msgstr "" @@ -8290,8 +8288,6 @@ msgstr "" msgid "Language selection" msgstr "" -msgid "Switching application language while some presets are modified." -msgstr "" msgid "Asia-Pacific" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index e1d86c2fe8..efe4c7dbcd 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -2356,8 +2356,6 @@ msgstr "Hay una actualización disponible. Abra el cuadro de diálogo del paquet msgid "%s has been removed." msgstr "Se ha eliminado %s." -msgid "Switching application language" -msgstr "Cambiando el idioma de la aplicación" msgid "Select the language" msgstr "Seleccionar el idioma" @@ -8529,8 +8527,6 @@ msgstr "¿Quieres continuar?" msgid "Language selection" msgstr "Selección de idiomas" -msgid "Switching application language while some presets are modified." -msgstr "Cambiando idioma de la aplicación mientras se modifican algunos perfiles." msgid "Asia-Pacific" msgstr "Asia-Pacífico" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index a475d76ab2..698941018e 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -2390,8 +2390,6 @@ msgstr "Eguneratze bat dago erabilgarri. Ireki aurrezarpen-paketeen elkarrizketa msgid "%s has been removed." msgstr "%s kendu da." -msgid "Switching application language" -msgstr "Aplikazioaren hizkuntza aldatzen" msgid "Select the language" msgstr "Hautatu hizkuntza" @@ -8610,8 +8608,6 @@ msgstr "Jarraitu nahi duzu?" msgid "Language selection" msgstr "Hizkuntza-hautaketa" -msgid "Switching application language while some presets are modified." -msgstr "Aplikazioaren hizkuntza aldatzen ari da aurrezarpen batzuk aldatuta dauden bitartean." msgid "Asia-Pacific" msgstr "Asia-Pazifikoa" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index de356edd7d..6344696234 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -2414,8 +2414,6 @@ msgstr "Une mise à jour est disponible. Ouvrez la boîte de dialogue du paquet msgid "%s has been removed." msgstr "%s a été supprimé." -msgid "Switching application language" -msgstr "Changer la langue de l'application" msgid "Select the language" msgstr "Sélectionner la langue" @@ -8678,8 +8676,6 @@ msgstr "Voulez-vous continuer ?" msgid "Language selection" msgstr "Sélection de la langue" -msgid "Switching application language while some presets are modified." -msgstr "Changement de langue de l’application alors que certains préréglages sont modifiés." msgid "Asia-Pacific" msgstr "Asie-Pacifique" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 2c00949e15..78c06dd4c0 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -2460,8 +2460,6 @@ msgstr "Frissítés érhető el. Nyisd meg a beállításcsomag párbeszédablak msgid "%s has been removed." msgstr "%s eltávolítva." -msgid "Switching application language" -msgstr "Alkalmazás nyelvének váltása" msgid "Select the language" msgstr "Válaszd ki a nyelvet" @@ -8806,8 +8804,6 @@ msgstr "Szeretnéd folytatni?" msgid "Language selection" msgstr "Nyelv kiválasztása" -msgid "Switching application language while some presets are modified." -msgstr "Alkalmazás nyelvének átváltása, miközben egyes beállítások módosultak." msgid "Asia-Pacific" msgstr "Ázsia-Csendes-óceáni térség" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 1aa2f15701..cf5099bca3 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -2466,8 +2466,6 @@ msgstr "È disponibile un aggiornamento. Apri la finestra di dialogo del bundle msgid "%s has been removed." msgstr "%s è stato rimosso." -msgid "Switching application language" -msgstr "Cambio lingua applicazione" msgid "Select the language" msgstr "Seleziona la lingua" @@ -8807,8 +8805,6 @@ msgstr "Vuoi continuare?" msgid "Language selection" msgstr "Selezione lingua" -msgid "Switching application language while some presets are modified." -msgstr "Cambio lingua applicazione durante la modifica di alcuni profili." msgid "Asia-Pacific" msgstr "Asia-Pacifico" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 9067928361..99cd0d0a83 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -2473,8 +2473,6 @@ msgstr "アップデートが利用可能です。プリセットバンドルの msgid "%s has been removed." msgstr "%sを削除しました。" -msgid "Switching application language" -msgstr "アプリケーション言語の切り替え" msgid "Select the language" msgstr "言語を選択" @@ -8825,8 +8823,6 @@ msgstr "続行しますか?" msgid "Language selection" msgstr "言語選択" -msgid "Switching application language while some presets are modified." -msgstr "アプリケーション言語を切り替える時に、プリセットの変更があります" msgid "Asia-Pacific" msgstr "アジア太平洋地域" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index fef0a09398..8d12c90228 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -2481,8 +2481,6 @@ msgstr "사용 가능한 업데이트가 있습니다. 사전 설정 번들 대 msgid "%s has been removed." msgstr "%s이(가) 제거되었습니다." -msgid "Switching application language" -msgstr "응용 프로그램 언어 전환" msgid "Select the language" msgstr "언어 선택" @@ -8860,8 +8858,6 @@ msgstr "계속하시겠습니까?" msgid "Language selection" msgstr "언어 선택" -msgid "Switching application language while some presets are modified." -msgstr "일부 사전 설정이 수정되는 동안 응용 프로그램 언어를 전환합니다." msgid "Asia-Pacific" msgstr "아시아 태평양" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 80273427f0..67d02bef6d 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -2449,8 +2449,6 @@ msgstr "Yra prieinamas atnaujinimas. Atidarykite profilių paketo dialogo langą msgid "%s has been removed." msgstr "%s buvo pašalintas." -msgid "Switching application language" -msgstr "Perjungiama programos kalba" msgid "Select the language" msgstr "Pasirinkite kalbą" @@ -8797,8 +8795,6 @@ msgstr "Ar norite tęsti?" msgid "Language selection" msgstr "Kalbos pasirinkimas" -msgid "Switching application language while some presets are modified." -msgstr "Keičiama programos kalba, kai yra pakeistų profilių." msgid "Asia-Pacific" msgstr "Azija-Ramusis vandenynas" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 720f4ba6f5..eff0fdc6b0 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -2679,8 +2679,6 @@ msgstr "Er is een update beschikbaar. Open het dialoogvenster voor de voorinstel msgid "%s has been removed." msgstr "%s is verwijderd." -msgid "Switching application language" -msgstr "De taal van de applicatie wordt aangepast" msgid "Select the language" msgstr "Kies de taal" @@ -9602,8 +9600,6 @@ msgstr "Wilt u doorgaan?" msgid "Language selection" msgstr "Taal selectie" -msgid "Switching application language while some presets are modified." -msgstr "De taal van de toepassing aanpaasen terwijl sommige voorinstellingen zijn aangepast." msgid "Asia-Pacific" msgstr "Azië-Pacific" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 3d7fb083ef..6f74f4b602 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -2512,8 +2512,6 @@ msgstr "Dostępna jest aktualizacja. Otwórz okno pakietu profili, aby ją zains msgid "%s has been removed." msgstr "%s został usunięty." -msgid "Switching application language" -msgstr "Zmiana języka aplikacji" msgid "Select the language" msgstr "Wybierz język" @@ -9016,8 +9014,6 @@ msgstr "Czy kontynuować?" msgid "Language selection" msgstr "Wybór języka" -msgid "Switching application language while some presets are modified." -msgstr "Zmiana języka aplikacji przy jednoczesnym istniejących zmodyfikowanych ustawieniach." msgid "Asia-Pacific" msgstr "Azja i Pacyfik" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 066b8b310b..6f7bf473c0 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -2356,8 +2356,6 @@ msgstr "Há uma atualização disponível. Abra a caixa de diálogo do pacote de msgid "%s has been removed." msgstr "%s foi removido." -msgid "Switching application language" -msgstr "Alternando o idioma do aplicativo" msgid "Select the language" msgstr "Selecione o idioma" @@ -8572,8 +8570,6 @@ msgstr "Você deseja continuar?" msgid "Language selection" msgstr "Seleção de idioma" -msgid "Switching application language while some presets are modified." -msgstr "Alternando idioma do aplicativo enquanto algumas predefinições são modificadas." msgid "Asia-Pacific" msgstr "Ásia-Pacífico" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index b5e6baffe0..2e33546ae8 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -2431,8 +2431,6 @@ msgstr "Доступно обновление. Проверьте меню па msgid "%s has been removed." msgstr "%s был удалён." -msgid "Switching application language" -msgstr "Изменение языка приложения" msgid "Select the language" msgstr "Выбор языка" @@ -8852,8 +8850,6 @@ msgstr "Хотите продолжить?" msgid "Language selection" msgstr "Выбор языка" -msgid "Switching application language while some presets are modified." -msgstr "Смена языка приложения при изменении некоторых профилей." msgid "Asia-Pacific" msgstr "Азиатско-Тихоокеанский" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index b4e3bf51bc..b9aa481d4c 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -2767,8 +2767,6 @@ msgstr "Det finns en uppdatering tillgänglig. Öppna dialogrutan för förinst msgid "%s has been removed." msgstr "%s har tagits bort." -msgid "Switching application language" -msgstr "Byt applikationsspråk" msgid "Select the language" msgstr "Välj språk" @@ -9694,8 +9692,6 @@ msgstr "Fortsätta?" msgid "Language selection" msgstr "Språkval" -msgid "Switching application language while some presets are modified." -msgstr "Byter språk medans inställningarna ändras." msgid "Asia-Pacific" msgstr "Asien-Stillahavsområdet" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 935bb83a3b..ee7430015e 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -2456,8 +2456,6 @@ msgstr "มีอัปเดตพร้อมใช้งาน เปิด msgid "%s has been removed." msgstr "ลบ %s แล้ว" -msgid "Switching application language" -msgstr "การเปลี่ยนภาษาของแอปพลิเคชัน" msgid "Select the language" msgstr "เลือกภาษา" @@ -8758,8 +8756,6 @@ msgstr "ต้องการดำเนินการต่อหรือไ msgid "Language selection" msgstr "การเลือกภาษา" -msgid "Switching application language while some presets are modified." -msgstr "การสลับภาษาของแอปพลิเคชันในขณะที่มีการแก้ไขค่าที่ตั้งไว้บางส่วน" msgid "Asia-Pacific" msgstr "เอเชียแปซิฟิก" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 02d54aa39f..0cf9d57412 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -2480,8 +2480,6 @@ msgstr "Kullanılabilir bir güncelleme var. Güncellemek için ön ayar paketi msgid "%s has been removed." msgstr "%s kaldırıldı." -msgid "Switching application language" -msgstr "Uygulama dilini değiştirme" msgid "Select the language" msgstr "Dili seçin" @@ -8860,8 +8858,6 @@ msgstr "Devam etmek istiyor musun?" msgid "Language selection" msgstr "Dil seçimi" -msgid "Switching application language while some presets are modified." -msgstr "Bazı ön ayarlar değiştirilirken uygulama dilinin değiştirilmesi." msgid "Asia-Pacific" msgstr "Asya Pasifik" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index d72a1f9792..ec9e97bae0 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -2424,8 +2424,6 @@ msgstr "Доступне оновлення. Відкрийте вікно на msgid "%s has been removed." msgstr "%s вилучено." -msgid "Switching application language" -msgstr "Зміна мови програми" msgid "Select the language" msgstr "Вибрати мову" @@ -8874,8 +8872,6 @@ msgstr "Ви хочете продовжувати?" msgid "Language selection" msgstr "Вибір мови" -msgid "Switching application language while some presets are modified." -msgstr "Зміна мови програми при зміні деяких профілів." msgid "Asia-Pacific" msgstr "Азіатсько-Тихоокеанський регіон" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index a0758d51ad..a80f47cfc1 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -2568,8 +2568,6 @@ msgstr "Có bản cập nhật khả dụng. Hãy mở hộp thoại gói cài msgid "%s has been removed." msgstr "%s đã bị xóa." -msgid "Switching application language" -msgstr "Đang chuyển ngôn ngữ ứng dụng" msgid "Select the language" msgstr "Chọn ngôn ngữ" @@ -9309,8 +9307,6 @@ msgstr "Bạn có muốn tiếp tục?" msgid "Language selection" msgstr "Chọn ngôn ngữ" -msgid "Switching application language while some presets are modified." -msgstr "Đang chuyển đổi ngôn ngữ ứng dụng trong khi một số preset đã được chỉnh sửa." msgid "Asia-Pacific" msgstr "Châu Á-Thái Bình Dương" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 7c474031c9..faa3419ae5 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -2361,8 +2361,6 @@ msgstr "有更新可用。打开预设包对话框进行更新。" msgid "%s has been removed." msgstr "%s 已被移除。" -msgid "Switching application language" -msgstr "切换应用程序语言" msgid "Select the language" msgstr "选择语言" @@ -8587,8 +8585,6 @@ msgstr "是否继续?" msgid "Language selection" msgstr "语言选择" -msgid "Switching application language while some presets are modified." -msgstr "在切换应用语言之前发现某些参数预设有更改。" msgid "Asia-Pacific" msgstr "亚太" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 83b22ca029..8f17cfdc5d 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -2425,8 +2425,6 @@ msgstr "有可用的更新。請開啟預設組合對話框進行更新。" msgid "%s has been removed." msgstr "%s 已移除。" -msgid "Switching application language" -msgstr "切換應用程式語言" msgid "Select the language" msgstr "選擇語言" @@ -8753,8 +8751,6 @@ msgstr "是否繼續?" msgid "Language selection" msgstr "語言選擇" -msgid "Switching application language while some presets are modified." -msgstr "在切換應用程式語言之前發現某些參數預設有更改。" msgid "Asia-Pacific" msgstr "亞太" diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6d08f052da..df2d1fccc0 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -7769,21 +7769,6 @@ void GUI_App::stop_http_server() m_http_server.stop(); } -void GUI_App::switch_staff_pick(bool on) -{ - mainframe->m_webview->SendDesignStaffpick(on); -} - -bool GUI_App::switch_language() -{ - if (select_language()) { - recreate_GUI(_L("Switching application language") + dots); - return true; - } else { - return false; - } -} - #ifdef __linux__ static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguageInfo* language, const wxLanguageInfo* system_language) @@ -7878,72 +7863,6 @@ int GUI_App::GetSingleChoiceIndex(const wxString& message, #endif } -// select language from the list of installed languages -bool GUI_App::select_language() -{ - wxArrayString translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); - std::vector language_infos; - language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); - for (size_t i = 0; i < translations.GetCount(); ++ i) { - const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); - if (langinfo != nullptr) - language_infos.emplace_back(langinfo); - } - sort_remove_duplicates(language_infos); - std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo* l, const wxLanguageInfo* r) { return l->Description < r->Description; }); - - wxArrayString names; - names.Alloc(language_infos.size()); - - // Some valid language should be selected since the application start up. - const wxString active_language_code = current_language_code(); - const wxLanguageInfo* active_language_info = wxLocale::FindLanguageInfo(active_language_code); - const wxLanguage current_language = active_language_info != nullptr ? wxLanguage(active_language_info->Language) : wxLanguage(m_wxLocale->GetLanguage()); - const wxString active_lang_prefix = active_language_code.BeforeFirst('_'); - int init_selection = -1; - int init_selection_alt = -1; - int init_selection_default = -1; - for (size_t i = 0; i < language_infos.size(); ++ i) { - if (wxLanguage(language_infos[i]->Language) == current_language) - // The dictionary matches the active language and country. - init_selection = i; - else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == active_lang_prefix) || - // if the active language is Slovak, mark the Czech language as active. - (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && active_lang_prefix == "sk")) - // The dictionary matches the active language, it does not necessarily match the country. - init_selection_alt = i; - if (language_infos[i]->CanonicalName.BeforeFirst('_') == "en") - // This will be the default selection if the active language does not match any dictionary. - init_selection_default = i; - names.Add(language_infos[i]->Description); - } - if (init_selection == -1) - // This is the dictionary matching the active language. - init_selection = init_selection_alt; - if (init_selection != -1) - // This is the language to highlight in the choice dialog initially. - init_selection_default = init_selection; - - const long index = GetSingleChoiceIndex(_L("Select the language"), _L("Language"), names, init_selection_default); - // Try to load a new language. - if (index != -1 && (init_selection == -1 || init_selection != index)) { - const wxLanguageInfo *new_language_info = language_infos[index]; - if (this->load_language(new_language_info->CanonicalName, false)) { - // Save language at application config. - // Which language to save as the selected dictionary language? - // 1) Hopefully the language set to wxTranslations by this->load_language(), but that API is weird and we don't want to rely on its - // stability in the future: - // wxTranslations::Get()->GetBestTranslation(SLIC3R_APP_KEY, wxLANGUAGE_ENGLISH); - // 2) Current locale language may not match the dictionary name, see GH issue #3901 - // m_wxLocale->GetCanonicalName() - // 3) new_language_info->CanonicalName is a safe bet. It points to a valid dictionary name. - app_config->set("language", new_language_info->CanonicalName.ToUTF8().data()); - return true; - } - } - - return false; -} // Load gettext translation files and activate them at the start of the application, // based on the "language" key stored in the application config. @@ -8330,146 +8249,6 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) show_modal_ip_address_enter_dialog(mode == -1?false:true, title); } -//void GUI_App::add_config_menu(wxMenuBar *menu) -//void GUI_App::add_config_menu(wxMenu *menu) -//{ -// auto local_menu = new wxMenu(); -// wxWindowID config_id_base = wxWindow::NewControlId(int(ConfigMenuCnt)); -// -// const auto config_wizard_name = _(ConfigWizard::name(true)); -// const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Open %s"))) % config_wizard_name).str()); -// // Cmd+, is standard on OS X - what about other operating systems? -// if (is_editor()) { -// local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); -// local_menu->Append(config_id_base + ConfigMenuUpdate, _L("Check for Configuration Updates"), _L("Check for configuration updates")); -// local_menu->AppendSeparator(); -// } -// local_menu->Append(config_id_base + ConfigMenuPreferences, _L("Preferences") + dots + -//#ifdef __APPLE__ -// "\tCtrl+,", -//#else -// "\tCtrl+P", -//#endif -// _L("Application preferences")); -// wxMenu* mode_menu = nullptr; -// if (is_editor()) { -// local_menu->AppendSeparator(); -// mode_menu = new wxMenu(); -// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _L("Simple"), _L("Simple Mode")); -// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _L("Advanced"), _L("Advanced Mode")); -// Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comSimple) evt.Check(true); }, config_id_base + ConfigMenuModeSimple); -// Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comAdvanced) evt.Check(true); }, config_id_base + ConfigMenuModeAdvanced); -// -// local_menu->AppendSubMenu(mode_menu, _L("Mode"), wxString::Format(_L("%s Mode"), SLIC3R_APP_NAME)); -// } -// local_menu->AppendSeparator(); -// local_menu->Append(config_id_base + ConfigMenuLanguage, _L("Language")); -// if (is_editor()) { -// local_menu->AppendSeparator(); -// } -// -// local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) { -// switch (event.GetId() - config_id_base) { -// case ConfigMenuWizard: -// run_wizard(ConfigWizard::RR_USER); -// break; -// case ConfigMenuUpdate: -// check_updates(true); -// break; -//#ifdef __linux__ -// case ConfigMenuDesktopIntegration: -// show_desktop_integration_dialog(); -// break; -//#endif -// case ConfigMenuSnapshots: -// //BBS do not support task snapshot -// break; -// case ConfigMenuPreferences: -// { -// //BBS GUI refactor: remove unuse layout logic -// //bool app_layout_changed = false; -// { -// // the dialog needs to be destroyed before the call to recreate_GUI() -// // or sometimes the application crashes into wxDialogBase() destructor -// // so we put it into an inner scope -// PreferencesDialog dlg(mainframe); -// dlg.ShowModal(); -// //BBS GUI refactor: remove unuse layout logic -// //app_layout_changed = dlg.settings_layout_changed(); -// if (dlg.seq_top_layer_only_changed()) -// this->plater_->refresh_print(); -// -// if (dlg.recreate_GUI()) { -// recreate_GUI(_L("Restart application") + dots); -// return; -// } -//#ifdef _WIN32 -// if (is_editor()) { -// if (app_config->get("associate_3mf") == "true") -// associate_3mf_files(); -// if (app_config->get("associate_stl") == "true") -// associate_stl_files(); -// } -// else { -// if (app_config->get("associate_gcode") == "true") -// associate_gcode_files(); -// } -//#endif // _WIN32 -// } -// //BBS GUI refactor: remove unuse layout logic -// /*if (app_layout_changed) { -// // hide full main_sizer for mainFrame -// mainframe->GetSizer()->Show(false); -// mainframe->update_layout(); -// mainframe->select_tab(size_t(0)); -// }*/ -// break; -// } -// case ConfigMenuLanguage: -// { -// /* Before change application language, let's check unsaved changes on 3D-Scene -// * and draw user's attention to the application restarting after a language change -// */ -// { -// // the dialog needs to be destroyed before the call to switch_language() -// // or sometimes the application crashes into wxDialogBase() destructor -// // so we put it into an inner scope -// wxString title = is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME); -// title += " - " + _L("Choose language"); -// //wxMessageDialog dialog(nullptr, -// MessageDialog dialog(nullptr, -// _L("Switching the language requires application restart.\n") + "\n\n" + -// _L("Do you want to continue?"), -// title, -// wxICON_QUESTION | wxOK | wxCANCEL); -// if (dialog.ShowModal() == wxID_CANCEL) -// return; -// } -// -// switch_language(); -// break; -// } -// case ConfigMenuFlashFirmware: -// //BBS FirmwareDialog::run(mainframe); -// break; -// default: -// break; -// } -// }); -// -// using std::placeholders::_1; -// -// if (mode_menu != nullptr) { -// auto modfn = [this](int mode, wxCommandEvent&) { if (get_mode() != mode) save_mode(mode); }; -// mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comSimple, _1), config_id_base + ConfigMenuModeSimple); -// mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comAdvanced, _1), config_id_base + ConfigMenuModeAdvanced); -// } -// -// // BBS -// //menu->Append(local_menu, _L("Configuration")); -// menu->AppendSubMenu(local_menu, _L("Configuration")); -//} - void GUI_App::open_presetbundledialog(size_t open_on_tab, const std::string& highlight_option) { bool app_layout_changed = false; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 8bf32df64c..2569e10271 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -569,7 +569,6 @@ public: void start_http_server(const std::string& provider = ORCA_CLOUD_PROVIDER); void start_http_server(int port, const std::string& provider = ORCA_CLOUD_PROVIDER); void stop_http_server(); - void switch_staff_pick(bool on); void on_show_check_privacy_dlg(int online_login = 0, const std::string& provider = ORCA_CLOUD_PROVIDER); void show_check_privacy_dlg(wxCommandEvent& evt); @@ -583,7 +582,6 @@ public: void persist_window_geometry(wxTopLevelWindow *window, bool default_maximized = false); void update_ui_from_settings(); - bool switch_language(); bool load_language(wxString language, bool initial); Tab* get_tab(Preset::Type type); @@ -801,7 +799,6 @@ private: bool window_pos_restore(wxTopLevelWindow* window, const std::string &name, bool default_maximized = false); void window_pos_sanitize(wxTopLevelWindow* window); void window_pos_center(wxTopLevelWindow *window); - bool select_language(); // Dynamic printer agent selection - internal helpers for switch_printer_agent // and the plugin load/unload callbacks (init_plugin_gui_wiring). diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index c734804c22..5f36323d6e 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -3275,98 +3275,9 @@ void MainFrame::init_menubar_as_editor() auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); #endif - //auto printer_item = new wxMenuItem(parent_menu, ConfigMenuPrinter + config_id_base, _L("Printer"), ""); - //auto language_item = new wxMenuItem(parent_menu, ConfigMenuLanguage + config_id_base, _L("Switch Language"), ""); -// parent_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) { -// switch (event.GetId() - config_id_base) { -// //case ConfigMenuLanguage: -// //{ -// // /* Before change application language, let's check unsaved changes on 3D-Scene -// // * and draw user's attention to the application restarting after a language change -// // */ -// // { -// // // the dialog needs to be destroyed before the call to switch_language() -// // // or sometimes the application crashes into wxDialogBase() destructor -// // // so we put it into an inner scope -// // wxString title = _L("Language selection"); -// // wxMessageDialog dialog(nullptr, -// // _L("Switching the language requires application restart.\n") + "\n\n" + -// // _L("Do you want to continue?"), -// // title, -// // wxICON_QUESTION | wxOK | wxCANCEL); -// // if (dialog.ShowModal() == wxID_CANCEL) -// // return; -// // } -// -// // wxGetApp().switch_language(); -// // break; -// //} -// //case ConfigMenuWizard: -// //{ -// // wxGetApp().run_wizard(ConfigWizard::RR_USER); -// // break; -// //} -// case ConfigMenuPrinter: -// { -// wxGetApp().params_dialog()->Popup(); -// wxGetApp().get_tab(Preset::TYPE_PRINTER)->restore_last_select_item(); -// break; -// } -// case ConfigMenuPreferences: -// { -// CallAfter([this] { -// PreferencesDialog dlg(this); -// dlg.ShowModal(); -//#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER -// if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -//#else -// if (dlg.seq_top_layer_only_changed()) -//#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER -// plater()->refresh_print(); -//#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN -//#ifdef _WIN32 -// /* -// if (wxGetApp().app_config()->get("associate_3mf") == "true") -// wxGetApp().associate_3mf_files(); -// if (wxGetApp().app_config()->get("associate_stl") == "true") -// wxGetApp().associate_stl_files(); -// /*if (wxGetApp().app_config()->get("associate_step") == "true") -// wxGetApp().associate_step_files();*/ -//#endif // _WIN32 -//#endif -// }); -// break; -// } -// default: -// break; -// } -// }); #ifdef __APPLE__ wxString about_title = wxString::Format(_L("&About %s"), SLIC3R_APP_FULL_NAME); - //auto about_item = new wxMenuItem(parent_menu, OrcaSlicerMenuAbout + bambu_studio_id_base, about_title, ""); - //parent_menu->Bind(wxEVT_MENU, [this, bambu_studio_id_base](wxEvent& event) { - // switch (event.GetId() - bambu_studio_id_base) { - // case OrcaSlicerMenuAbout: - // Slic3r::GUI::about(); - // break; - // case OrcaSlicerMenuPreferences: - // CallAfter([this] { - // PreferencesDialog dlg(this); - // dlg.ShowModal(); - //#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - // if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) - //#else - // if (dlg.seq_top_layer_only_changed()) - //#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - // plater()->refresh_print(); - // }); - // break; - // default: - // break; - // } - //}); - //parent_menu->Insert(0, about_item); append_menu_item( parent_menu, wxID_ANY, _L(about_title), "", [](wxCommandEvent &) { Slic3r::GUI::about();}, diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 08483f3100..7d80147efa 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -507,26 +507,14 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS } } - - // the dialog needs to be destroyed before the call to switch_language() - // or sometimes the application crashes into wxDialogBase() destructor - // so we put it into an inner scope - MessageDialog msg_wingow(nullptr, _L("Switching languages requires the application to restart.\n") + "\n" + _L("Do you want to continue?"), - L("Language selection"), wxICON_QUESTION | wxOK | wxCANCEL); - if (msg_wingow.ShowModal() == wxID_CANCEL) { + MessageDialog msg_window(nullptr, _L("Switching languages requires the application to restart.\n") + "\n" + _L("Do you want to continue?"), + _L("Language selection"), wxICON_QUESTION | wxOK | wxCANCEL); + if (msg_window.ShowModal() == wxID_CANCEL) { combobox->SetSelection(m_current_language_selected); return; } } - auto check = [](bool yes_or_no) { - // if (yes_or_no) - // return true; - int act_btns = ActionButtons::SAVE; - return wxGetApp().check_and_keep_current_preset_changes(_L("Switching application language"), - _L("Switching application language while some presets are modified."), act_btns); - }; - m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { m_pending_language = vlist[m_current_language_selected]->CanonicalName.ToUTF8().data(); @@ -1031,11 +1019,6 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxString too app_config->set_bool(param, checkbox->GetValue()); app_config->save(); - // if (param == "staff_pick_switch") { - // bool pbool = app_config->get("staff_pick_switch") == "true"; - // wxGetApp().switch_staff_pick(pbool); - // } - if (param == "sync_user_preset") { bool sync = app_config->get("sync_user_preset") == "true" ? true : false; if (sync) { diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index f10553814e..7efdfabf07 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -995,7 +995,7 @@ void FanControlPopupNew::init_names(MachineObject* obj) { radio_btn_name[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = _L("Heating"); radio_btn_name[AIR_DUCT::AIR_DUCT_EXHAUST] = _L("Exhaust"); radio_btn_name[AIR_DUCT::AIR_DUCT_FULL_COOLING] = _L("Full Cooling"); - radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = L("Init"); + radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = _L("Init"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_CHAMBER] = _L("Chamber"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_INNERLOOP] = _L("Innerloop"); From d127db4d9927021ade3bf9c122fd55aa6c01dac7 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Thu, 10 Sep 2026 16:15:39 -0500 Subject: [PATCH 177/208] build: clear 5 warning categories across 19 sites (#15628) --- src/libslic3r/Emboss.cpp | 10 +++++----- src/libslic3r/Fill/FillAdaptive.cpp | 4 ++-- src/libslic3r/GCode/ToolOrderUtils.cpp | 2 +- src/libslic3r/Line.cpp | 4 ++-- src/libslic3r/PrintObject.cpp | 4 +++- src/libslic3r/SLAPrint.cpp | 4 +++- src/slic3r/GUI/DeviceCore/DevMapping.cpp | 4 +++- src/slic3r/GUI/MeshUtils.cpp | 4 ++-- src/slic3r/GUI/Printer/PrinterFileSystem.cpp | 2 +- src/slic3r/Utils/BBLNetworkPlugin.cpp | 2 +- src/slic3r/Utils/BBLPrinterAgent.cpp | 21 +++++++++++++++----- src/slic3r/Utils/PresetUpdater.cpp | 2 +- 12 files changed, 40 insertions(+), 23 deletions(-) diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index ef144b48d3..34d9a93590 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -968,10 +968,10 @@ EmbossStyles Emboss::get_font_list_by_register() { } // TODO: Fix global function -bool CALLBACK EnumFamCallBack(LPLOGFONT lplf, - LPNEWTEXTMETRIC lpntm, - DWORD FontType, - LPVOID aFontList) +int CALLBACK EnumFamCallBack(const LOGFONT *lplf, + const TEXTMETRIC *lpntm, + DWORD FontType, + LPARAM aFontList) { std::vector *fontList = (std::vector *) (aFontList); @@ -988,7 +988,7 @@ EmbossStyles Emboss::get_font_list_by_enumeration() { HDC hDC = GetDC(NULL); std::vector font_names; - EnumFontFamilies(hDC, (LPCTSTR) NULL, (FONTENUMPROC) EnumFamCallBack, + EnumFontFamilies(hDC, (LPCTSTR) NULL, EnumFamCallBack, (LPARAM) &font_names); EmbossStyles font_list; diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp index 344bb529f0..dbaa1f2ac9 100644 --- a/src/libslic3r/Fill/FillAdaptive.cpp +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -1395,8 +1395,8 @@ void Filler::_fill_surface_single( } #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */ - const auto hook_length = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length))); - const auto hook_length_max = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length_max))); + const auto hook_length = coordf_t(scale_(params.anchor_length)); + const auto hook_length_max = coordf_t(scale_(params.anchor_length_max)); Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length, hook_length_max) : std::move(all_polylines); diff --git a/src/libslic3r/GCode/ToolOrderUtils.cpp b/src/libslic3r/GCode/ToolOrderUtils.cpp index 4e2934d967..4a67477d24 100644 --- a/src/libslic3r/GCode/ToolOrderUtils.cpp +++ b/src/libslic3r/GCode/ToolOrderUtils.cpp @@ -910,7 +910,7 @@ namespace Slic3r unsigned int iterations = (1 << all_extruders.size()); unsigned int final_state = iterations - 1; - std::vector>cache(iterations, std::vector(all_extruders.size(), 0x7fffffff)); + std::vector>cache(iterations, std::vector(all_extruders.size(), std::numeric_limits::max())); std::vector>prev(iterations, std::vector(all_extruders.size(), -1)); cache[1][0] = 0.; for (unsigned int state = 0; state < iterations; ++state) { diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index c74df3aa59..94453e18f7 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -30,8 +30,8 @@ bool Line::intersection_infinite(const Line &other, Point* point) const return false; double t1 = cross2(v12, v2) / denom; Vec2d result = (a1 + t1 * v1); - if (result.x() > std::numeric_limits::max() || result.x() < std::numeric_limits::lowest() || - result.y() > std::numeric_limits::max() || result.y() < std::numeric_limits::lowest()) { + if (result.x() > double(std::numeric_limits::max()) || result.x() < double(std::numeric_limits::lowest()) || + result.y() > double(std::numeric_limits::max()) || result.y() < double(std::numeric_limits::lowest())) { // Intersection has at least one of the coordinates much bigger (or smaller) than coord_t maximum value (or minimum). // So it can not be stored into the Point without integer overflows. That could mean that input lines are parallel or near parallel. return false; diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index e147356ea6..720a2cdade 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1635,7 +1635,9 @@ bool PrintObject::invalidate_step(PrintObjectStep step) bool PrintObject::invalidate_all_steps() { // First call the "invalidate" functions, which may cancel background processing. - bool result = Inherited::invalidate_all_steps() | m_print->invalidate_all_steps(); + const bool inherited_invalidated = Inherited::invalidate_all_steps(); + const bool print_invalidated = m_print->invalidate_all_steps(); + bool result = inherited_invalidated || print_invalidated; // Then reset some of the depending values. m_slicing_params.valid = false; return result; diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index cdefd3e10e..eb37ca578c 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -1007,7 +1007,9 @@ bool SLAPrintObject::invalidate_step(SLAPrintObjectStep step) bool SLAPrintObject::invalidate_all_steps() { - return Inherited::invalidate_all_steps() | m_print->invalidate_all_steps(); + const bool inherited_invalidated = Inherited::invalidate_all_steps(); + const bool print_invalidated = m_print->invalidate_all_steps(); + return inherited_invalidated || print_invalidated; } double SLAPrintObject::get_elevation() const { diff --git a/src/slic3r/GUI/DeviceCore/DevMapping.cpp b/src/slic3r/GUI/DeviceCore/DevMapping.cpp index 165492c9f6..0040bb05f2 100644 --- a/src/slic3r/GUI/DeviceCore/DevMapping.cpp +++ b/src/slic3r/GUI/DeviceCore/DevMapping.cpp @@ -1,3 +1,5 @@ +#include + #include #include "DevMapping.h" #include "DevFilaSystem.h" @@ -270,7 +272,7 @@ namespace Slic3r std::set picked_tar; for (int k = 0; k < distance_map.size(); k++) { - float min_val = INT_MAX; + float min_val = std::numeric_limits::max(); int picked_src_idx = -1; int picked_tar_idx = -1; for (int i = 0; i < distance_map.size(); i++) diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index bc6c60a360..173c5d2f13 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -297,7 +297,7 @@ void MeshClipper::recalculate_triangles() // it so it lies on our line. This will be the figure to subtract // from the cut. The coordinates must not overflow after the transform, // make the rectangle a bit smaller. - const coord_t size = (std::numeric_limits::max()/2 - scale_(std::max(std::abs(e * a), std::abs(e * b)))) / 4; + const coord_t size = (double(std::numeric_limits::max()/2) - scale_(std::max(std::abs(e * a), std::abs(e * b)))) / 4; Polygons ep {Polygon({Point(-size, 0), Point(size, 0), Point(size, 2*size), Point(-size, 2*size)})}; ep.front().rotate(angle); ep.front().translate(scale_(-e * a), scale_(-e * b)); @@ -352,7 +352,7 @@ void MeshClipper::recalculate_triangles() // To prevent overflow after scaling, downscale the input if needed: double extra_scale = 1.; - coord_t limit = coord_t(std::min(std::numeric_limits::max() / (2. * std::max(1., scale_x)), std::numeric_limits::max() / (2. * std::max(1., scale_y)))); + coord_t limit = coord_t(std::min(double(std::numeric_limits::max()) / (2. * std::max(1., scale_x)), double(std::numeric_limits::max()) / (2. * std::max(1., scale_y)))); coord_t max_coord = 0; for (const Point& pt : exp.contour) max_coord = std::max(max_coord, std::max(std::abs(pt.x()), std::abs(pt.y()))); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 8ec6909c8c..9aa35e2cff 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -1803,7 +1803,7 @@ static void* get_function(const char* name) return function; #if defined(_MSC_VER) || defined(_WIN32) - function = GetProcAddress(module, name); + function = reinterpret_cast(GetProcAddress(module, name)); #else function = dlsym(module, name); #endif diff --git a/src/slic3r/Utils/BBLNetworkPlugin.cpp b/src/slic3r/Utils/BBLNetworkPlugin.cpp index 607e7d16d1..d795abf354 100644 --- a/src/slic3r/Utils/BBLNetworkPlugin.cpp +++ b/src/slic3r/Utils/BBLNetworkPlugin.cpp @@ -349,7 +349,7 @@ void* BBLNetworkPlugin::get_function(const char* name) return function; #if defined(_MSC_VER) || defined(_WIN32) - function = GetProcAddress(m_networking_module, name); + function = reinterpret_cast(GetProcAddress(m_networking_module, name)); #else function = dlsym(m_networking_module, name); #endif diff --git a/src/slic3r/Utils/BBLPrinterAgent.cpp b/src/slic3r/Utils/BBLPrinterAgent.cpp index 5e73edf84c..0c6225cc55 100644 --- a/src/slic3r/Utils/BBLPrinterAgent.cpp +++ b/src/slic3r/Utils/BBLPrinterAgent.cpp @@ -8,6 +8,7 @@ #include using json = nlohmann::json; +#include #include namespace Slic3r { @@ -90,6 +91,16 @@ OnMessageFn to_orca_messages(OnMessageFn fn) return [fn = std::move(fn)](std::string dev_id, std::string msg) { fn(std::move(dev_id), BBLPrinterAgent::to_orca_payload(std::move(msg))); }; } +// Retypes a plug-in entry point for an older plug-in generation. The detour through the +// generic function pointer marks the signature change as deliberate, which a direct cast +// between two signatures does not. +template +To as_abi(From fn) +{ + static_assert(std::is_function_v>, "as_abi retypes a function pointer"); + return reinterpret_cast(reinterpret_cast(fn)); +} + } // namespace std::string BBLPrinterAgent::to_orca_filament_id(const std::string& printer_filament_id) const @@ -141,7 +152,7 @@ int BBLPrinterAgent::send_message(std::string dev_id, std::string json_str, int // series through the legacy form would silently drop MessageFlag sign/encrypt. switch (plugin.network_abi()) { case NetworkAbi::Legacy: { - auto legacy_func = reinterpret_cast(func); + auto legacy_func = as_abi(func); return legacy_func(agent, std::move(dev_id), std::move(json_str), qos); } case NetworkAbi::V0203: @@ -185,7 +196,7 @@ int BBLPrinterAgent::send_message_to_printer(std::string dev_id, std::string jso if (func && agent) { switch (plugin.network_abi()) { case NetworkAbi::Legacy: { - auto legacy_func = reinterpret_cast(func); + auto legacy_func = as_abi(func); return legacy_func(agent, std::move(dev_id), std::move(json_str), qos); } case NetworkAbi::V0203: @@ -275,7 +286,7 @@ int BBLPrinterAgent::bind(std::string dev_ip, std::string dev_id, std::string de switch (plugin.network_abi()) { case NetworkAbi::Legacy: case NetworkAbi::V0203: { - auto older_func = reinterpret_cast(func); + auto older_func = as_abi(func); return older_func(agent, dev_ip, dev_id, sec_link, timezone, improved, update_fn); } case NetworkAbi::Current: @@ -436,9 +447,9 @@ int dispatch_start(CurrentFn func, PrintParams& params, const CallbackFns&... ca params.ams_mapping_info = BBLPrinterAgent::from_orca_payload(std::move(params.ams_mapping_info)); switch (plugin.network_abi()) { case NetworkAbi::Legacy: - return reinterpret_cast(func)(agent, BBLNetworkPlugin::as_legacy(params), callbacks...); + return as_abi(func)(agent, BBLNetworkPlugin::as_legacy(params), callbacks...); case NetworkAbi::V0203: - return reinterpret_cast(func)(agent, BBLNetworkPlugin::as_0203(params), callbacks...); + return as_abi(func)(agent, BBLNetworkPlugin::as_0203(params), callbacks...); case NetworkAbi::Current: return func(agent, std::move(params), callbacks...); default: diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 23957f6500..032f9dbf7a 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1620,7 +1620,7 @@ void PresetUpdater::priv::check_new_vendors(const std::set& system_ Http::get(download_url_str) .timeout_connect(5) .on_progress(check_cancel) - .on_error([&vendor_id, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { + .on_error([&vendor_id, &retry_count](std::string body, std::string error, unsigned http_status) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] download failed for new vendor " << vendor_id << " (attempt " << retry_count << "/" << max_retries << "): " << error; }) From a49b8927088cde075c8ccfc7dcaf1bedc3b52af9 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Fri, 11 Sep 2026 00:23:31 +0300 Subject: [PATCH 178/208] Fix bridge flow invalidation for zero-gap supports (#15626) --- src/libslic3r/PrintObject.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 720a2cdade..54378b3b16 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1511,13 +1511,9 @@ bool PrintObject::invalidate_state_by_config_options( steps.emplace_back(posPerimeters); steps.emplace_back(posSupportMaterial); } else if (opt_key == "bridge_flow" || opt_key == "internal_bridge_flow") { - if (m_config.support_top_z_distance > 0.) { - // Only invalidate due to bridging if bridging is enabled. - // If later "support_top_z_distance" is modified, the complete PrintObject is invalidated anyway. - steps.emplace_back(posPerimeters); - steps.emplace_back(posInfill); - steps.emplace_back(posSupportMaterial); - } + steps.emplace_back(posPerimeters); + steps.emplace_back(posInfill); + steps.emplace_back(posSupportMaterial); } else if ( opt_key == "wall_generator" || opt_key == "wall_transition_length" From a6cf5cc1e3aecebda1eb9330f88540b58ac53d5c Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 10 Sep 2026 18:23:30 +0800 Subject: [PATCH 179/208] Add the includes the precompiled header was supplying on macOS A build without SLIC3R_PCH had never been tried on macOS. Three files used what pchheader.hpp happened to include: LocalesUtils.cpp needs and , and the two dialogs need . The GTK port's headers and libstdc++ pull these in transitively, the Cocoa port's headers and libc++ do not. --- src/libslic3r/LocalesUtils.cpp | 2 ++ src/slic3r/GUI/AmsMappingPopup.cpp | 1 + src/slic3r/GUI/PhysicalPrinterDialog.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/src/libslic3r/LocalesUtils.cpp b/src/libslic3r/LocalesUtils.cpp index 308752cc62..e727b29b09 100644 --- a/src/libslic3r/LocalesUtils.cpp +++ b/src/libslic3r/LocalesUtils.cpp @@ -3,6 +3,8 @@ #ifdef _WIN32 #include #endif +#include +#include #include #include diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 3e745b0a64..22ffaef034 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -11,6 +11,7 @@ #include "MainFrame.hpp" #include "format.hpp" #include "Widgets/ProgressDialog.hpp" +#include #include "Widgets/RoundedRectangle.hpp" #include "Widgets/StaticBox.hpp" diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 989cf204e1..04317ca46b 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include From 3331280b3467e06bde414c162662f92e8774108c Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes Date: Fri, 11 Sep 2026 05:36:59 -0300 Subject: [PATCH 180/208] Verify and improve AI pt_BR translations (#15621) --- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 150 ++++++-------------- 1 file changed, 40 insertions(+), 110 deletions(-) diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 6f7bf473c0..2a3e9a7f53 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -2128,7 +2128,7 @@ msgid "" "OrcaSlicer has attempted to recreate the configuration file.\n" "Please note, application settings will be lost, but printer profiles will not be affected." msgstr "" -"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser analisado.\n" +"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser processado.\n" "O OrcaSlicer tentou recriar o arquivo de configuração.\n" "Por favor, note que as configurações do aplicativo serão perdidas, mas os perfis de impressora não serão afetados." @@ -6675,7 +6675,7 @@ msgid "Failed to fetch model information from printer." msgstr "Falha ao obter informação do modelo da impressora." msgid "Failed to parse model information." -msgstr "Falha ao analisar a informação do modelo." +msgstr "Falha ao processar a informação do modelo." msgid "The .gcode.3mf file contains no G-code data. Please slice it with Orca Slicer and export a new .gcode.3mf file." msgstr "O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com Orca Slicer e exporte um novo arquivo .gcode.3mf." @@ -8637,7 +8637,7 @@ msgstr "" "\n" "Deseja baixar e instalar esta versão agora?\n" "\n" -"Observação: o aplicativo pode precisar ser reiniciado após a instalação." +"Nota: o aplicativo pode precisar ser reiniciado após a instalação." msgid "Download Network Plug-in" msgstr "Baixar Plug-in de Rede" @@ -9135,7 +9135,7 @@ msgid "" "Note: When Stealth Mode is enabled, your user profiles will not be backed up to Orca Cloud." msgstr "" "Isso desativa todos os recursos da nuvem, incluindo a sincronização de perfis do Orca Cloud. Usuários que preferem trabalhar totalmente offline podem ativar esta opção.\n" -"Observação: quando o Modo Furtivo está ativado, seus perfis de usuário não serão copiados para o Orca Cloud." +"Nota: quando o Modo Furtivo está ativado, seus perfis de usuário não serão copiados para o Orca Cloud." msgid "Hide login side panel" msgstr "Ocultar painel lateral de autenticação" @@ -9775,7 +9775,6 @@ msgstr "A impressora falhou ao gerar a tabela de mapeamento automático do bico msgid "The current nozzle mapping may produce an extra %0.2f g of waste." msgstr "O mapeamento de bicos atual pode gerar um desperdício adicional de %0.2f g." -# AI Translated #, c-format, boost-format msgid "Recommended filament arrangement saves %s->" msgstr "A disposição de filamento recomendada economiza %s->" @@ -9834,7 +9833,6 @@ msgstr "Este processo determina os valores de fluxo dinâmico para melhorar a qu msgid "Internal" msgstr "Interno" -# AI Translated #, c-format, boost-format msgid "%s space less than 20MB. Timelapse may not save properly. You can turn it off or" msgstr "%s com espaço inferior a 20MB. O timelapse pode não ser salvo corretamente. Você pode desativá-lo ou" @@ -9842,15 +9840,12 @@ msgstr "%s com espaço inferior a 20MB. O timelapse pode não ser salvo corretam msgid "Clean up files" msgstr "Limpar arquivos" -# AI Translated msgid "Low internal storage. This timelapse will overwrite the oldest video files." msgstr "Armazenamento interno baixo. Este timelapse substituirá os arquivos de vídeo mais antigos." -# AI Translated msgid "Low external storage. This timelapse will overwrite the oldest video files." msgstr "Armazenamento externo baixo. Este timelapse substituirá os arquivos de vídeo mais antigos." -# AI Translated msgid "Insufficient external storage for time-lapse photography. Connect to computer to delete files, or use a larger memory card." msgstr "Armazenamento externo insuficiente para fotografia time-lapse. Conecte ao computador para excluir arquivos ou use um cartão de memória maior." @@ -9886,7 +9881,6 @@ msgstr "Atualizando informações dos hotends (%d/%d)." msgid "There are not enough available hotends currently." msgstr "Não há hotends disponíveis em quantidade suficiente no momento." -# AI Translated msgid "Please complete the hotend rack setup and try again." msgstr "Por favor, conclua a configuração do rack de hotend e tente novamente." @@ -9903,11 +9897,9 @@ msgstr "As informações reportadas sobre o hotend podem não ser confiáveis." msgid "The printer has no nozzle matching the slicing file (%s)." msgstr "A impressora não possui um bico compatível com o arquivo de fatiamento (%s)." -# AI Translated msgid "Please install a matching nozzle in the hotend rack, or set the corresponding printer preset while slicing." msgstr "Por favor, instale um bico compatível no rack de hotend, ou defina a predefinição de impressora correspondente ao fatiar." -# AI Translated msgid "The toolhead and hotend rack are full. Please remove at least one hotend before printing." msgstr "A cabeça da ferramenta e o rack de hotend estão cheios. Por favor, remova pelo menos um hotend antes de imprimir." @@ -9933,24 +9925,19 @@ msgstr "ambas extrusoras" msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). Please verify the nozzle or material settings and try again." msgstr "A dureza do material atual (%s) excede a dureza de %s(%s). Verifique as configurações do bico ou do material e tente novamente." -# AI Translated msgid "Your current firmware version cannot start this print job. Please update to the latest version and try again." msgstr "Sua versão atual do firmware não pode iniciar este trabalho de impressão. Atualize para a versão mais recente e tente novamente." -# AI Translated #, c-format, boost-format msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). It may cause nozzle wear, leading to material leakage and unstable flow. Please exercise caution when using it." msgstr "A dureza do material atual (%s) excede a dureza de %s(%s). Isso pode causar desgaste do bico, levando a vazamento de material e fluxo instável. Tenha cuidado ao usá-lo." -# AI Translated msgid "Some filaments may switch between extruders during printing. Manual K-value calibration cannot be applied throughout the entire print, which may affect print quality. Enabling Flow Dynamics Calibration is recommended." msgstr "Alguns filamentos podem alternar entre extrusoras durante a impressão. A calibração manual do valor K não pode ser aplicada durante toda a impressão, o que pode afetar a qualidade da impressão. Recomenda-se ativar a Calibração de Dinâmica de Fluxo." -# AI Translated msgid "There is stringing-prone filament in this file. For best print quality, we recommend switching nozzle clumping detection to Auto mode." -msgstr "Há filamento propenso a fiapos neste arquivo. Para a melhor qualidade de impressão, recomendamos alternar a detecção de aglomeração no bico para o modo Automático." +msgstr "Há filamento propenso a criar fios neste arquivo. Para a melhor qualidade de impressão, recomendamos alternar a detecção de aglomeração no bico para o modo Automático." -# AI Translated msgid "If 'Dynamic Flow Calibration' is set to Auto/On, the system will use the manual calibration value or the default value and skip the flow calibration process. You can perform a manual flow calibration for TPU filament on the 'Calibration' page." msgstr "Se a 'Calibração de Fluxo Dinâmico' estiver definida como Automático/Ativado, o sistema usará o valor de calibração manual ou o valor padrão e ignorará o processo de calibração de fluxo. Você pode realizar uma calibração de fluxo manual para filamento TPU na página 'Calibração'." @@ -10057,7 +10044,6 @@ msgstr "Desative a calibração de fluxo dinâmico para habilitar o valor de flu msgid "This printer does not support printing all plates." msgstr "Esta impressora não suporta a imprimir todas as placas." -# AI Translated #, c-format, boost-format msgid "The current firmware supports a maximum of %s materials. You can either reduce the number of materials to %s or fewer on the Preparation Page, or try updating the firmware. If you are still restricted after the update, please wait for subsequent firmware support." msgstr "O firmware atual suporta no máximo %s materiais. Você pode reduzir o número de materiais para %s ou menos na Página de Preparação, ou tentar atualizar o firmware. Se ainda estiver restrito após a atualização, aguarde o suporte de firmware subsequente." @@ -10065,11 +10051,9 @@ msgstr "O firmware atual suporta no máximo %s materiais. Você pode reduzir o n msgid "The type of external filament is unknown or does not match with the filament type in the slicing file. Please make sure you have installed the correct filament in the external spool." msgstr "O tipo de filamento externo é desconhecido ou não corresponde ao tipo de filamento no arquivo de fatiamento. Certifique-se de ter instalado o filamento correto no carretel externo." -# AI Translated msgid "TPU 90A/TPU 85A are too soft. It is recommended to perform manual flow calibration on the 'Calibration' page. If 'Dynamic Flow Calibration' is set to auto/on, the system will use the previous calibration value and skip the flow calibration process." msgstr "TPU 90A/TPU 85A são muito macios. Recomenda-se realizar a calibração de fluxo manual na página 'Calibração'. Se a 'Calibração de Fluxo Dinâmico' estiver definida como automático/ativado, o sistema usará o valor de calibração anterior e ignorará o processo de calibração de fluxo." -# AI Translated msgid "The filament in the AMS may be insufficient for this print. Please refill or replace it." msgstr "O filamento no AMS pode ser insuficiente para esta impressão. Por favor, reabasteça ou substitua-o." @@ -10146,7 +10130,7 @@ msgid "Failed to post ticket to server" msgstr "Falha ao enviar o ticket para o servidor" msgid "Failed to parse login report reason" -msgstr "Falha ao analisar o motivo do relatório de login" +msgstr "Falha ao processar o motivo do relatório de login" msgid "Receive login report timeout" msgstr "Limite de tempo excedido ao receber o relatório de login" @@ -10242,11 +10226,9 @@ msgstr "Excluir esta predefinição" msgid "Search in preset" msgstr "Pesquisar nas predefinições" -# AI Translated msgid "Synchronization of different extruder drives or nozzle volume types is not supported." msgstr "A sincronização de diferentes acionamentos de extrusora ou tipos de volume do bico não é suportada." -# AI Translated msgid "Synchronize the modification of parameters to the corresponding parameters of another extruder." msgstr "Sincroniza a modificação de parâmetros com os parâmetros correspondentes de outra extrusora." @@ -10316,7 +10298,7 @@ msgid "Are you sure you want to enable this option?" msgstr "Tem certeza de que deseja habilitar esta opção?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" -msgstr "Padrões de preenchimento são projetados para lidar com a rotação automaticamente para garantir a impressão adequada e atingir os efeitos pretendidos (Ex. Giroide, Cúbico). Girar o padrão de preenchimento esparso atual pode causar suporte insuficiente. Prossiga com cautela e verifique cuidadosamente se há possíveis problemas de impressão. Tem certeza de que deseja habilitar esta opção?" +msgstr "Padrões de preenchimento são projetados para lidar com a rotação automaticamente para garantir a impressão adequada e atingir os efeitos pretendidos (ex.: Giroide, Cúbico). Girar o padrão de preenchimento esparso atual pode causar suporte insuficiente. Prossiga com cautela e verifique cuidadosamente se há possíveis problemas de impressão. Tem certeza de que deseja habilitar esta opção?" msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funcionalidade experimental: Retrair e cortar o filamento a uma distância maior durante mudanças de filamento para minimizar a purga. Embora possa reduzir notavelmente a purga, ele também pode elevar o risco de bolhas no bico ou outras complicações de impressão." @@ -10479,7 +10461,6 @@ msgstr "G-code de mudança de tipo de extrusão" msgid "Post-processing Scripts" msgstr "Scripts de pós-processamento" -# AI Translated msgid "Slicing Pipeline Plugin" msgstr "Plugin de Pipeline de Fatiamento" @@ -10533,9 +10514,8 @@ msgstr "Temperatura da câmara de impressão" msgid "Chamber temperature" msgstr "Temperatura da câmara" -# AI Translated msgid "Target chamber temperature, and the minimal chamber temperature at which printing should start" -msgstr "Temperatura da câmara alvo, e a temperatura mínima da câmara na qual a impressão deve começar" +msgstr "Temperatura alvo da câmara, e a temperatura mínima da câmara na qual a impressão deve começar" msgid "Target" msgstr "Alvo" @@ -10773,7 +10753,6 @@ msgstr "Limites de altura da camada" msgid "Z-Hop" msgstr "Z-Hop" -# AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -11081,7 +11060,6 @@ msgstr "Se ativo, este diálogo pode ser usado para transferir valores seleciona msgid "One of the presets does not exist" msgstr "Uma das predefinições não existe" -# AI Translated msgid "Compared presets has different printer technology" msgstr "As predefinições comparadas têm tecnologia de impressora diferente" @@ -11416,9 +11394,8 @@ msgstr "Entrar" msgid "Login failed. Please try again." msgstr "Falha no login. Tente novamente." -# AI Translated msgid "parse json failed" -msgstr "falha ao analisar o json" +msgstr "falha ao processar o json" msgid "[Action Required] " msgstr "[Ação Necessária] " @@ -11609,7 +11586,6 @@ msgctxt "Keyboard Shortcut" msgid "Space" msgstr "Espaço" -# AI Translated msgid "Open actions speed dial" msgstr "Abrir menu rápido de ações" @@ -11691,11 +11667,9 @@ msgstr "informações de atualização da versão %s:" msgid "Network plug-in update" msgstr "Atualização do plug-in de rede" -# AI Translated msgid "Click OK to update the Network plug-in now. If a file is in use, the update will be applied the next time Orca Slicer launches." msgstr "Clique em OK para atualizar o plug-in de Rede agora. Se um arquivo estiver em uso, a atualização será aplicada na próxima vez que o Orca Slicer for iniciado." -# AI Translated msgid "A new Network plug-in is available. Do you want to install it?" msgstr "Um novo plug-in de Rede está disponível. Deseja instalá-lo?" @@ -11755,7 +11729,6 @@ msgstr "Nome da impressora" msgid "Where to find your printer's IP and Access Code?" msgstr "Onde encontrar o IP e o Código de Acesso da sua impressora?" -# AI Translated msgid "How to trouble shooting" msgstr "Como solucionar problemas" @@ -11903,11 +11876,9 @@ msgstr "Objeto: %1%" msgid "Parts of the object at these heights may be too thin or the object may have a faulty mesh." msgstr "Partes do objeto nessas alturas podem ser muito finas, ou o objeto pode ter uma malha com falhas." -# AI Translated msgid "Process change extrusion role G-code" msgstr "G-code de mudança de tipo de extrusão do processo" -# AI Translated msgid "Filament change extrusion role G-code" msgstr "G-code de mudança de tipo de extrusão do filamento" @@ -12082,7 +12053,6 @@ msgstr " está muito perto de uma área de exclusão, e colisões vão ocorrer.\ msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " está muito perto da área de detecção de aglomeração, e ocorrerão colisões.\n" -# AI Translated msgid " is partially outside the printable area, and it cannot be printed.\n" msgstr " está parcialmente fora da área imprimível, e não pode ser impresso.\n" @@ -12098,7 +12068,6 @@ msgstr "Se ainda assim desejar imprimir, você pode ativar a opção em Preferê msgid "No extrusions under current settings." msgstr "Nenhuma extrusão com as configurações atuais." -# AI Translated msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." msgstr "Um filamento misto com gradiente está em uso, mas 'Subcamada de cor mista' está desativado. O gradiente não será impresso." @@ -12138,7 +12107,6 @@ msgstr "Você pode querer reduzir o tamanho do seu modelo ou alterar as configur msgid "Variable layer height is not supported with Organic supports." msgstr "A altura de camada variável não é suportada com suportes Orgânicos." -# AI Translated msgid "The wipe tower filament cannot be a mixed filament." msgstr "O filamento da torre de purga não pode ser um filamento misto." @@ -12775,7 +12743,6 @@ msgstr "" msgid "Internal bridge flow ratio" msgstr "Taxa de fluxo em ponte interna" -# AI Translated msgid "" "This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill so increasing it may increase strength and upper layer quality.\n" "Values above 1.0: Increase the amount of material while maintaining line spacing. This can improve line contact and strength.\n" @@ -13165,11 +13132,9 @@ msgstr "" "A geometria será decimada antes de detectar ângulos agudos. Este parâmetro indica o comprimento mínimo da divergência para a decimação.\n" "0 para desativar." -# AI Translated msgid "Brim ears outer only" -msgstr "Orelhas da borda apenas externas" +msgstr "Apenas orelhas da borda externas" -# AI Translated msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." msgstr "Gera orelhas de rato apenas no contorno externo do modelo, excluindo furos e seções fechadas." @@ -13197,7 +13162,6 @@ msgstr "Por objeto" msgid "Intra-layer order" msgstr "Ordem intra-camada" -# AI Translated msgid "" "Order in which object instances are visited within a single layer, which controls how much travel is spent moving between them.\n" "\n" @@ -13255,7 +13219,7 @@ msgid "mm/s² or %" msgstr "mm/s² ou %" msgid "Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration." -msgstr "Aceleração das pontes. Se o valor for expresso como uma porcentagem (por exemplo, 50%), será calculado com base na aceleração da parede externa." +msgstr "Aceleração das pontes. Se o valor for expresso como uma porcentagem (ex.: 50%), será calculado com base na aceleração da parede externa." msgid "Default filament profile" msgstr "Perfil de filamento padrão" @@ -13835,7 +13799,6 @@ msgstr "Tempo da camada" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "A ventoinha de resfriamento de peças será ativado para camadas cujo tempo estimado seja mais curto que esse valor. A velocidade da ventoinha é interpolada entre as velocidades mínima e máxima da ventoinha de acordo com o tempo de impressão da camada." -# AI Translated msgctxt "second" msgid "s" msgstr "s" @@ -14142,61 +14105,47 @@ msgstr "Material de suporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "O material de suporte é comumente usado para imprimir suportes e interfaces de suporte." -# AI Translated msgid "Is mixed filament" msgstr "É filamento misto" -# AI Translated msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" msgstr "Define se este slot de filamento é um filamento misto composto por vários filamentos físicos" -# AI Translated msgid "Mixed filament components" msgstr "Componentes do filamento misto" -# AI Translated msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" msgstr "Índices (começando em 1) dos filamentos componentes, separados por vírgulas; ex.: \"1,3\"" -# AI Translated msgid "Mixed filament sublayer ratios" msgstr "Proporções de subcamada do filamento misto" -# AI Translated msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" msgstr "Valores de proporção separados por vírgulas cuja soma seja 1.0; ex.: \"0.7,0.3\"" -# AI Translated msgid "Mixed filament gradient" msgstr "Gradiente do filamento misto" -# AI Translated msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." -msgstr "Ativa o modo de gradiente na direção Z para as subcamadas do filamento misto. Quando ativado, as proporções das subcamadas variam linearmente ao longo das camadas." +msgstr "Ativa o modo de gradiente na direção Z para as subcamadas do filamento misto. Quando ativo, as proporções das subcamadas variam linearmente ao longo das camadas." -# AI Translated msgid "Mixed filament gradient range" msgstr "Faixa do gradiente do filamento misto" -# AI Translated msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." msgstr "Proporções inicial e final do primeiro componente no modo de gradiente. Par separado por vírgula; ex.: \"0.10,0.90\" significa de 10% a 90%." -# AI Translated msgid "Mixed filament gradient curve" msgstr "Curva do gradiente do filamento misto" -# AI Translated msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." -msgstr "Curva personalizada opcional, no estilo do Photoshop, que mapeia o progresso em Z para a proporção do primeiro componente. Codificada como pontos de controle separados por barras verticais, no formato \"x,y\" (legado) ou \"x,y,m_in,m_out\" quando é necessário substituir a tangente (um valor vazio ou \"nan\" usa o padrão PCHIP). x está em [0,1]; y é limitado à faixa de proporção configurada; ex.: \"0,0.15|0.5,0.50|1,0.85\". Quando vazio, o gradient_range linear é usado." +msgstr "Curva personalizada opcional no estilo do Photoshop, mapeando o progresso em Z para a proporção do primeiro componente. Codificada como pontos de controle separados por barras verticais, no formato \"x,y\" (legado) ou \"x,y,m_in,m_out\" quando é necessário substituir a tangente (um valor vazio ou \"nan\" usa o padrão PCHIP). X em [0,1]; Y é limitado à faixa de proporção configurada; ex.: \"0,0.15|0.5,0.50|1,0.85\". Quando vazio, o gradient_range linear é usado no lugar." -# AI Translated msgid "Mixed filament per-part gradient" msgstr "Gradiente por peça do filamento misto" -# AI Translated msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." -msgstr "Quando o modo de gradiente está ativado, aplica o gradiente a cada peça de uma montagem de forma independente, em vez de tratar toda a montagem como uma única faixa Z." +msgstr "Quando o modo de gradiente está ativado, aplica o gradiente a cada peça de uma montagem de forma independente em vez de tratar toda a montagem como uma única faixa Z." msgid "Filament printable" msgstr "Filamento imprimível" @@ -14287,7 +14236,7 @@ msgid "Insert solid layers" msgstr "Inserir camadas sólidas" msgid "Insert solid infill at specific layers. Use N to insert every Nth layer, N#K to insert K consecutive solid layers every N layers (K is optional, e.g. '5#' equals '5#1'), or a comma-separated list (e.g. 1,7,9) to insert at explicit layers. Layers are 1-based." -msgstr "Insere preenchimento sólido em camadas específicas. Use N para inserir a cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada enésima camada (K é opcional, ou seja, '5#' é igual a '5#1'), ou uma lista separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas são baseadas em 1." +msgstr "Insere preenchimento sólido em camadas específicas. Use N para inserir a cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada enésima camada (K é opcional, ex.: '5#' é igual a '5#1'), ou uma lista separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas são baseadas em 1." msgid "Fill Multiline" msgstr "Multilinhas de Preenchimento" @@ -14365,11 +14314,9 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" -# AI Translated msgid "Sparse infill smooth factor" msgstr "Fator de suavização do preenchimento esparso" -# AI Translated msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original sharp path, while 100% produces the largest possible curves between adjacent infill lines." msgstr "Controla o quanto os cantos do preenchimento esparso são arredondados. 0% mantém o trajeto original com cantos vivos, enquanto 100% produz as maiores curvas possíveis entre linhas de preenchimento adjacentes." @@ -14383,10 +14330,10 @@ msgid "Acceleration of inner walls." msgstr "Aceleração das paredes internas." msgid "Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento esparso. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgstr "Aceleração do preenchimento esparso. Se o valor for expresso como uma porcentagem (ex.: 100%), será calculado com base na aceleração padrão." msgid "Acceleration of internal solid infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento sólido interno. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgstr "Aceleração do preenchimento sólido interno. Se o valor for expresso como uma porcentagem (ex.: 100%), será calculado com base na aceleração padrão." msgid "This is the printing acceleration for the first layer. Using limited acceleration can improve build plate adhesion." msgstr "Esta é a aceleração para a primeira camada. Usar aceleração limitada melhorar a adesão à placa de impressão." @@ -14490,7 +14437,7 @@ msgid "" "Only available when \"No cooling for the first\" is 0.\n" "Set to -1 to disable it." msgstr "" -"Define uma velocidade exata da ventoinha para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (por exemplo, dutos ABS/ASA no estilo Voron) de uma mesa aquecida. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" +"Define uma velocidade exata da ventoinha para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (ex.: dutos ABS/ASA no estilo Voron) de uma mesa aquecida. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" "A partir da segunda camada, o resfriamento normal é retomado.\n" "Se \"Velocidade total da ventoinha na camada\" também estiver definida, a ventoinha aumenta suavemente deste valor na primeira camada até o seu alvo na camada escolhida.\n" "Disponível apenas quando \"Sem resfriamento nas primeiras\" é 0.\n" @@ -14861,7 +14808,7 @@ msgid "" "Set to 0 to deactivate." msgstr "" "Algumas ventoinhas de resfriamento de componentes não conseguem iniciar a rotação quando comandadas abaixo de um determinado ciclo de trabalho PWM. Quando definido acima de 0, qualquer comando de ventoinha de resfriamento de componentes diferente de zero será elevado para pelo menos essa porcentagem, para que a ventoinha inicie de forma confiável. Um comando de ventoinha de 0 (ventoinha desligada) é sempre atendido exatamente. Essa limitação é aplicada após cada outro cálculo da ventoinha (rampa da primeira camada, interpolação do tempo da camada, substituições de saliência/ponte/interface de suporte/alisamento), para que o dimensionamento ainda opere dentro do intervalo [este valor, 100%].\n" -"Se o seu firmware já desativa a ventoinha abaixo de um limite (por exemplo, [fan] off_below: 0.10 do Klipper desliga a ventoinha sempre que o ciclo de trabalho comandado for inferior a 10%), esta opção e o limite do firmware devem idealmente ser definidos com o mesmo valor. A correspondência entre eles (por exemplo, off_below: 0.10 no Klipper e 10% aqui) garante que o fatiador nunca emita um valor diferente de zero que o firmware emitiria a velocidade cai silenciosamente e a ventoinha nunca recebe um valor abaixo daquele que você sabe que ela pode realmente atingir.\n" +"Se o seu firmware já desativa a ventoinha abaixo de um limite (por exemplo, [fan] off_below: 0.10 do Klipper desliga a ventoinha sempre que o ciclo de trabalho comandado for inferior a 10%), esta opção e o limite do firmware devem idealmente ser definidos com o mesmo valor. A correspondência entre eles (ex.: off_below: 0.10 no Klipper e 10% aqui) garante que o fatiador nunca emita um valor diferente de zero que o firmware emitiria a velocidade cai silenciosamente e a ventoinha nunca recebe um valor abaixo daquele que você sabe que ela pode realmente atingir.\n" "Defina como 0 para desativar." msgid "Time cost" @@ -14908,13 +14855,11 @@ msgstr "Com que tipo de G-code a impressora é compatível." msgid "Klipper" msgstr "Klipper" -# AI Translated msgid "Skip G-code config block" msgstr "Omitir o bloco de configuração do G-code" -# AI Translated msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." -msgstr "Não grava o CONFIG_BLOCK (os pares chave/valor da configuração do fatiador) no arquivo G-code. Isso pode ajudar com impressoras cujo firmware trava ao interpretar essas linhas de comentário (por exemplo, Anycubic go-klipper). Observação: o arquivo G-code não conterá mais as configurações do fatiador, então importá-lo de volta no OrcaSlicer não restaurará a configuração." +msgstr "Não grava o CONFIG_BLOCK (os pares chave/valor da configuração do fatiador) no arquivo G-code. Isso pode ajudar com impressoras cujo firmware trava ao interpretar essas linhas de comentário (ex.: Anycubic go-klipper). Nota: o arquivo G-code não conterá mais as configurações do fatiador, então importá-lo de volta no OrcaSlicer não restaurará a configuração." msgid "Pellet Modded Printer" msgstr "Impressora Modificada para Pellets" @@ -14962,13 +14907,13 @@ msgid "Sparse infill rotation template" msgstr "Gabarito de rotação de preenchimento esparso" msgid "Rotate the sparse infill direction per layer using a template of angles. Enter comma-separated degrees (e.g., '0,30,60,90'). Angles are applied in order by layer and repeat when the list ends. Advanced syntax is supported: '+5' rotates +5° every layer; '+5#5' rotates +5° every 5 layers. See the Wiki for details. When a template is set, the standard infill direction setting is ignored. Note: some infill patterns (e.g., Gyroid) control rotation themselves; use with care." -msgstr "Gira a direção do preenchimento esparso por camada usando um gabarito de ângulos. Insira graus separados por vírgula (por exemplo, '0, 30, 60, 90'). Os ângulos são aplicados em ordem por camada e repetidos quando a lista termina. Sintaxe avançada suportada: '+5' gira +5° a cada camada; '+5#5' gira +5° a cada 5 camadas. Consulte a Wiki para obter detalhes. Quando um modelo é definido, a configuração padrão de direção do preenchimento é ignorada. Observação: alguns padrões de preenchimento (por exemplo, Giróide) tem seu próprio controle de rotação, use com cuidado." +msgstr "Gira a direção do preenchimento esparso por camada usando um gabarito de ângulos. Insira graus separados por vírgula (ex.: '0,30,60,90'). Os ângulos são aplicados em ordem por camada e repetidos quando a lista termina. Sintaxe avançada suportada: '+5' gira +5° a cada camada; '+5#5' gira +5° a cada 5 camadas. Consulte a Wiki para obter detalhes. Quando um modelo é definido, a configuração padrão de direção do preenchimento é ignorada. Nota: alguns padrões de preenchimento (ex.: Giróide) tem seu próprio controle de rotação, use com cuidado." msgid "Solid infill rotation template" msgstr "Gabarito de rotação de preenchimento sólido" msgid "This parameter adds a rotation of solid infill direction to each layer according to the specified template. The template is a comma-separated list of angles in degrees, e.g. '0,90'. The first angle is applied to the first layer, the second angle to the second layer, and so on. If there are more layers than angles, the angles will be repeated. Note that not all solid infill patterns support rotation." -msgstr "Este parâmetro adiciona uma rotação da direção do preenchimento sólido a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, por exemplo, '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento sólido suportam rotação." +msgstr "Este parâmetro adiciona uma rotação da direção do preenchimento sólido a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, como '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento sólido suportam rotação." msgid "Skeleton infill density" msgstr "Densidade de preenchimento de esqueleto" @@ -15434,7 +15379,6 @@ msgstr "Força máxima do eixo Y" msgid "The allowed maximum output force of Y axis" msgstr "A força máxima de saída permitida do eixo Y" -# AI Translated msgctxt "Newton" msgid "N" msgstr "N" @@ -15445,7 +15389,6 @@ msgstr "Massa da mesa do eixo Y" msgid "The machine bed mass load of Y axis" msgstr "A carga de massa da mesa do equipamento no eixo Y" -# AI Translated msgctxt "gram" msgid "g" msgstr "g" @@ -15970,7 +15913,7 @@ msgid "Z-hop height" msgstr "Altura de Z-hop" msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." -msgstr "Sempre que há uma retração, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linhas em espiral para levantar Z pode evitar stringing." +msgstr "Sempre que há uma retração, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linhas em espiral para levantar Z pode evitar criação de fios." msgid "Z-hop lower boundary" msgstr "Limite inferior do Z-hop" @@ -16051,7 +15994,7 @@ msgid "Has filament switcher" msgstr "Tem trocador de filamentos" msgid "Printer has a filament switcher hardware (e.g., AMS)." -msgstr "A impressora tem um sistema de troca de filamentos (Ex.: AMS)." +msgstr "A impressora tem um sistema de troca de filamentos (ex.: AMS)." msgid "Extra length on restart" msgstr "Comprimento extra na retração" @@ -16168,7 +16111,7 @@ msgid "Scarf joint speed" msgstr "Velocidade da costura em bisel" msgid "This option sets the printing speed for scarf joints. It is recommended to print scarf joints at a slow speed (less than 100 mm/s). It's also advisable to enable 'Extrusion rate smoothing' if the set speed varies significantly from the speed of the outer or inner walls. If the speed specified here is higher than the speed of the outer or inner walls, the printer will default to the slower of the two speeds. When specified as a percentage (e.g., 80%), the speed is calculated based on the respective outer or inner wall speed. The default value is set to 100%." -msgstr "Esta opção define a velocidade de impressão para as costuras em bisel. É recomendável imprimir as costuras em bisel em uma velocidade baixa (menor que 100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a velocidade definida variar significativamente da velocidade das paredes externas ou internas. Se a velocidade especificada aqui for maior que a velocidade das paredes externas ou internas, a impressora utilizará a mais lenta das duas velocidades. Quando especificado como uma porcentagem (por exemplo, 80%), a velocidade é calculada com base na velocidade do perímetro externo ou interna respectiva. O valor padrão é definido como 100%." +msgstr "Esta opção define a velocidade de impressão para as costuras em bisel. É recomendável imprimir as costuras em bisel em uma velocidade baixa (menor que 100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a velocidade definida variar significativamente da velocidade das paredes externas ou internas. Se a velocidade especificada aqui for maior que a velocidade das paredes externas ou internas, a impressora utilizará a mais lenta das duas velocidades. Quando especificado como uma porcentagem (ex.: 80%), a velocidade é calculada com base na velocidade do perímetro externo ou interna respectiva. O valor padrão é definido como 100%." msgid "Scarf joint flow ratio" msgstr "Taxa de fluxo da costura em bisel" @@ -16238,7 +16181,7 @@ msgid "Wipe speed" msgstr "Velocidade de limpeza" msgid "The wipe speed is determined by the speed setting specified in this configuration. If the value is expressed as a percentage (e.g. 80%), it will be calculated based on the travel speed setting above. The default value for this parameter is 80%." -msgstr "A velocidade de limpeza é determinada pela velocidade especificada nesta configuração. Se o valor for expresso como uma porcentagem (por exemplo, 80%), será calculado com base na configuração de velocidade de deslocamento acima. O valor padrão para este parâmetro é 80%." +msgstr "A velocidade de limpeza é determinada pela velocidade especificada nesta configuração. Se o valor for expresso como uma porcentagem (ex.: 80%), será calculado com base na configuração de velocidade de deslocamento acima. O valor padrão para este parâmetro é 80%." msgid "Skirt distance" msgstr "Distância da saia" @@ -16276,7 +16219,7 @@ msgstr "" "Um escudo de ar é útil para proteger uma impressão ABS ou ASA de deformações e desprendimento da mesa de impressão devido à corrente de ar. Geralmente, ele é necessário apenas com impressoras de estrutura aberta, ou seja, sem um gabinete.\n" "\n" "Habilitado = a saia é tão alta quanto o objeto impresso mais alto. Caso contrário, 'Altura da saia' é usada.\n" -"Observação: com o escudo de ar ativo, a saia será impressa na distância da saia do objeto. Portanto, se as bordas estiverem ativas, ela pode se cruzar com elas. Para evitar isso, aumente o valor da distância da saia.\n" +"Nota: com o escudo de ar ativo, a saia será impressa na distância da saia do objeto. Portanto, se as bordas estiverem ativas, ela pode se cruzar com elas. Para evitar isso, aumente o valor da distância da saia.\n" msgid "Enabled" msgstr "Ativado" @@ -16417,10 +16360,10 @@ msgid "Preheat steps" msgstr "Passos de pré-aquecimento" msgid "Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For other printers, please set it to 1." -msgstr "Insire múltiplos comandos de pré-aquecimento (por exemplo, M104.1). Útil apenas para Prusa XL. Para outras impressoras, defina como 1." +msgstr "Insire múltiplos comandos de pré-aquecimento (ex.: M104.1). Útil apenas para Prusa XL. Para outras impressoras, defina como 1." msgid "G-code written at the very top of the output file, before any other content. Useful for adding metadata that printer firmware reads from the first lines of the file (e.g. estimated print time, filament usage). Supports placeholders like {print_time_sec} and {used_filament_length}." -msgstr "Código G escrito no início do arquivo de saída, antes de qualquer outro conteúdo. Útil para adicionar metadados que o firmware da impressora lê das primeiras linhas do arquivo (por exemplo, tempo estimado de impressão, consumo de filamento). Suporta marcadores como {print_time_sec} e {used_filament_length}." +msgstr "Código G escrito no início do arquivo de saída, antes de qualquer outro conteúdo. Útil para adicionar metadados que o firmware da impressora lê das primeiras linhas do arquivo (ex.: tempo estimado de impressão, consumo de filamento). Suporta marcadores como {print_time_sec} e {used_filament_length}." msgid "Start G-code" msgstr "G-code Inicial" @@ -16441,7 +16384,7 @@ msgid "Manual Filament Change" msgstr "Troca Manual de Filamento" msgid "Enable this option to omit the custom Change filament G-code only at the beginning of the print. The tool change command (e.g., T0) will be skipped throughout the entire print. This is useful for manual multi-material printing, where we use M600/PAUSE to trigger the manual filament change action." -msgstr "Ative esta opção para omitir o G-code de troca de filamento personalizado apenas no início da impressão. O comando de troca de ferramenta (por exemplo, T0) será ignorado durante toda a impressão. Isso é útil para impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a ação de troca manual de filamento." +msgstr "Ative esta opção para omitir o G-code de troca de filamento personalizado apenas no início da impressão. O comando de troca de ferramenta (ex.: T0) será ignorado durante toda a impressão. Isso é útil para impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a ação de troca manual de filamento." msgid "Wipe tower type" msgstr "Tipo de torre de purga" @@ -16997,11 +16940,9 @@ msgstr "" "\n" "Definir um valor na configuração de quantidade de retração antes da limpeza abaixo executará qualquer retração em excesso antes da limpeza, caso contrário, será realizada após." -# AI Translated msgid "Mixed color sublayer" msgstr "Subcamada de cor mista" -# AI Translated msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." msgstr "Ativa a divisão em subcamadas de cor mista. Quando ativado, as camadas que contêm filamentos de cor mista são divididas em subcamadas para obter efeitos de mistura de cores." @@ -18061,9 +18002,8 @@ msgstr "A geração da malha do arquivo do modelo falhou ou não há forma váli msgid "The supplied file couldn't be read because it's empty." msgstr "O arquivo fornecido não pôde ser lido porque está vazio." -# AI Translated msgid "The file format is incompatible and cannot be parsed." -msgstr "O formato do arquivo é incompatível e não pode ser lido." +msgstr "O formato do arquivo é incompatível e não pode ser processado." msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .stl, .obj, .amf(.xml)." @@ -18072,10 +18012,10 @@ msgid "Unknown file format: input file must have .3mf or .zip.amf extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .3mf ou .zip.amf." msgid "load_obj: failed to parse" -msgstr "load_obj: falha ao analisar" +msgstr "load_obj: falha ao processar" msgid "load mtl in obj: failed to parse" -msgstr "carregar mtl em obj: falha ao analisar" +msgstr "carregar mtl em obj: falha ao processsar" msgid "The file contains polygons with more than 4 vertices." msgstr "O arquivo contém polígonos com mais de 4 vértices." @@ -19189,7 +19129,7 @@ msgid "Serial" msgstr "Série" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "por exemplo, Básico, Fosco, Seda, Mármore" +msgstr "Ex.: Básico, Fosco, Seda, Mármore" msgid "Filament Preset" msgstr "Predefinição de Filamento" @@ -19870,7 +19810,7 @@ msgid "Error. Can't get API token for authorization" msgstr "Erro. ​​Não foi possível obter o token de API para autorização" msgid "Could not parse server response." -msgstr "Não foi possível decifrar a resposta do servidor." +msgstr "Não foi possível processar a resposta do servidor." msgid "Error saving session to file" msgstr "Erro salvando sessão para arquivo" @@ -19938,7 +19878,7 @@ msgstr "O host respondeu, mas não parece ser o Moonraker (falta o result.klippy #, c-format, boost-format msgid "Could not parse Moonraker server response: %s" -msgstr "Não foi possível analisar a resposta do servidor Moonraker: %s" +msgstr "Não foi possível processar a resposta do servidor Moonraker: %s" msgid "Connection to OctoPrint is working correctly." msgstr "A conexão com o OctoPrint funciona corretamente." @@ -20312,7 +20252,6 @@ msgstr "Removido" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Ativar atribuição inteligente de filamento: Atribui um filamento a vários bicos para maximizar a economia" -# AI Translated msgid "File Saving" msgstr "Salvamento de Arquivo" @@ -20499,7 +20438,7 @@ msgid "Connection timed out. Please check if the printer and computer network ar msgstr "Limite de tempo de conexão esgotado. Verifique se a impressora e a rede do computador estão funcionando corretamente e confirme se estão na mesma rede." msgid "The Hostname/IP/URL could not be parsed, please check it and try again." -msgstr "Não foi possível decifrar o Hostname/IP/URL; verifique-o e tente novamente." +msgstr "Não foi possível processar o Hostname/IP/URL; verifique-o e tente novamente." msgid "File/data transfer interrupted. Please check the printer and network, then try it again." msgstr "Transferência de arquivo/dados interrompida. Verifique a impressora e a rede e tente novamente." @@ -21282,15 +21221,6 @@ msgstr "" #~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" #~ msgstr "Seu sistema não possui codecs H.264 para o GStreamer, que são necessários para reproduzir vídeos. (Tente instalar os pacotes gstreamer1.0-plugins-bad ou gstreamer1.0-libav e depois reinicie o OrcaSlicer?)" -#~ msgid "N" -#~ msgstr "N" - -#~ msgid "g" -#~ msgstr "g" - -#~ msgid "Fila Saving" -#~ msgstr "Econo Filamento" - #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -21618,7 +21548,7 @@ msgstr "" #~ "Pontes externas de menor densidade podem ajudar a melhorar a confiabilidade, pois há mais espaço para o ar circular ao redor da ponte extrudada, melhorando sua velocidade de resfriamento. O mínimo é 10%.\n" #~ "\n" #~ "Densidades mais altas podem produzir superfícies de ponte mais lisas, pois as linhas sobrepostas fornecem suporte adicional durante a impressão. O máximo é 120%.\n" -#~ "Observação: Densidade de ponte muito alta pode causar deformação ou sobrextrusão." +#~ "Nota: Densidade de ponte muito alta pode causar deformação ou sobrextrusão." #~ msgid "" #~ "Controls the density (spacing) of internal bridge lines. 100% means solid bridge. Default is 100%.\n" @@ -21663,7 +21593,7 @@ msgstr "" #~ "\n" #~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu pressure advance esteja ajustado corretamente.\n" #~ "\n" -#~ "Observação: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." +#~ "Nota: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." #~ msgid "If enabled, bridges are more reliable, can bridge longer distances, but may look worse. If disabled, bridges look better but are reliable just for shorter bridged distances." #~ msgstr "Se ativado, as pontes são mais confiáveis, podem cobrir distâncias maiores, mas podem parecer piores. Se desativado, as pontes ficam melhores, mas são confiáveis apenas para distâncias de ponte mais curtas." @@ -22583,7 +22513,7 @@ msgstr "" #~ msgstr "Contagem máxima de projetos recentes" #~ msgid "This parameter adds a rotation of sparse infill direction to each layer according to the specified template. The template is a comma-separated list of angles in degrees, e.g. '0,90'. The first angle is applied to the first layer, the second angle to the second layer, and so on. If there are more layers than angles, the angles will be repeated. Note that not all sparse infill patterns support rotation." -#~ msgstr "Este parâmetro adiciona uma rotação na direção do preenchimento esparso a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, por exemplo, '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento esparso suportam rotação." +#~ msgstr "Este parâmetro adiciona uma rotação na direção do preenchimento esparso a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, como '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento esparso suportam rotação." #~ msgid "Set Position" #~ msgstr "Definir Posição" From 4ad3d11c7a27e70b5f7303ea3f2af6d835ae4434 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Fri, 11 Sep 2026 03:52:37 -0500 Subject: [PATCH 181/208] Fix Qidi X-Plus 5 chamber heating profiles (#15556) * Fix Qidi X-Plus 5 chamber heating profiles * Restore Qidi ABS Odorless chamber temperature --------- Co-authored-by: yw4z --- .../profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json | 3 +++ .../profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json | 6 ++++++ .../profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json | 6 ++++++ .../profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json | 6 ++++++ .../profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json | 4 ++-- .../Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json | 3 +++ 6 files changed, 26 insertions(+), 2 deletions(-) diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json index accf79987f..79a52578a4 100644 --- a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json @@ -8,6 +8,9 @@ "box_temperature_range_high": [ "45" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json index 6abc420237..d4af23e160 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json @@ -14,9 +14,15 @@ "box_temperature": [ "55" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "60" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json index ca5591813d..fec939caa8 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json @@ -14,9 +14,15 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json index 411ae26214..de72deb697 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json @@ -14,9 +14,15 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json index 615d895851..f973121e62 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json @@ -14,8 +14,8 @@ "box_temperature": [ "65" ], - "chamber_temperatures": [ - "0" + "chamber_temperature": [ + "55" ], "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json index 2ea27efa4b..82c261fbd5 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json @@ -14,6 +14,9 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], From 613dbcb21be6d2a91a3f92cbed12d4fe155bbbc0 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Fri, 11 Sep 2026 04:03:14 -0500 Subject: [PATCH 182/208] Add Flashforge Creator 5 and Creator 5 Pro 0.25 mm nozzle profiles (#15282) * Add Creator 5 0.25 mm nozzle profiles * Fix Creator 5 process profile load order * Bump Flashforge profile version --------- Co-authored-by: yw4z --- resources/profiles/Flashforge.json | 26 +- .../Flashforge Creator 5 0.25 nozzle.json | 311 ++++++++++++++++++ .../Flashforge Creator 5 Pro 0.25 nozzle.json | 311 ++++++++++++++++++ .../machine/Flashforge Creator 5 Pro.json | 2 +- .../machine/Flashforge Creator 5.json | 2 +- .../0.08mm Standard @FF C5 0.25 nozzle.json | 28 ++ .../0.10mm Standard @FF C5 0.25 nozzle.json | 27 ++ .../0.12mm Standard @FF C5 0.25 nozzle.json | 28 ++ .../0.14mm Standard @FF C5 0.25 nozzle.json | 28 ++ 9 files changed, 760 insertions(+), 3 deletions(-) create mode 100644 resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index f3923c435a..f348a4f329 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.05", + "version": "02.04.00.06", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -439,6 +439,22 @@ "name": "0.14mm Standard @FF AD5X 0.25 nozzle", "sub_path": "process/0.14mm Standard @FF AD5X 0.25 nozzle.json" }, + { + "name": "0.08mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.08mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.10mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.10mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.12mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.12mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.14mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.14mm Standard @FF C5 0.25 nozzle.json" + }, { "name": "0.14mm Standard @Flashforge AD5M 0.25 Nozzle", "sub_path": "process/0.14mm Standard @Flashforge AD5M 0.25 Nozzle.json" @@ -2903,6 +2919,10 @@ "name": "Flashforge AD5X 0.4 nozzle", "sub_path": "machine/Flashforge AD5X 0.4 nozzle.json" }, + { + "name": "Flashforge Creator 5 0.25 nozzle", + "sub_path": "machine/Flashforge Creator 5 0.25 nozzle.json" + }, { "name": "Flashforge Creator 5 0.4 nozzle", "sub_path": "machine/Flashforge Creator 5 0.4 nozzle.json" @@ -2915,6 +2935,10 @@ "name": "Flashforge Creator 5 0.8 nozzle", "sub_path": "machine/Flashforge Creator 5 0.8 nozzle.json" }, + { + "name": "Flashforge Creator 5 Pro 0.25 nozzle", + "sub_path": "machine/Flashforge Creator 5 Pro 0.25 nozzle.json" + }, { "name": "Flashforge Creator 5 Pro 0.4 nozzle", "sub_path": "machine/Flashforge Creator 5 Pro 0.4 nozzle.json" diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json new file mode 100644 index 0000000000..54be573cf7 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json @@ -0,0 +1,311 @@ +{ + "type": "machine", + "name": "Flashforge Creator 5 0.25 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "xp3cpTEGYdWjcrMM", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_bed_type": "", + "default_filament_profile": [ + "Flashforge Generic PLA" + ], + "default_print_profile": "0.12mm Standard @FF C5 0.25 nozzle", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "disable_m73": "1", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "360", + "extruder_clearance_height_to_rod": "60", + "extruder_clearance_radius": "92", + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";end_gcode\nG1 X150 Y150 E-1.2 F12000", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "30000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "30000", + "20000" + ], + "machine_max_acceleration_y": [ + "30000", + "20000" + ], + "machine_max_acceleration_z": [ + "300", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_junction_deviation": [ + "0", + "0" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M25", + "machine_start_gcode": ";start_gcode\nM140 S[bed_temperature_initial_layer_single]\nM106 P101 S0 ; L+R_PLA_Turbo_Fan_0-255\nM106 P2 S0 ; Center_Fresch_Air_Input_Fan_for_PLA30%_(80_0-255) \nM191 S0 ; Chamber temp. max65C\nM106 S0 ; Model_Fan_(Heat_Break_Cooler_80-255)100%=255\nM106 P3 S0 ; Filter_Unit_Fan_0-255(ABS=255)\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F2400\nT[initial_extruder]\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nG1 X256 Y0 Z0.2 F6000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\nG1 X216 E10 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n;start_gcode end", + "machine_tool_change_time": "7", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.14", + "0.14", + "0.14", + "0.14" + ], + "max_resonance_avoidance_speed": "120", + "min_layer_height": [ + "0.08", + "0.08", + "0.08", + "0.08" + ], + "min_resonance_avoidance_speed": "70", + "nozzle_diameter": [ + "0.25", + "0.25", + "0.25", + "0.25" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "0x0", + "256x0", + "256x256", + "0x256" + ], + "printable_height": "256", + "printer_model": "Flashforge Creator 5", + "printer_notes": "", + "printer_settings_id": "Flashforge Creator 5 0.25 nozzle", + "printer_structure": "corexy", + "printer_technology": "FFF", + "printer_variant": "0.25", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "resonance_avoidance": "0", + "retract_before_wipe": [ + "100%", + "100%", + "100%", + "100%" + ], + "retract_length_toolchange": [ + "3", + "3", + "3", + "3" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "-0.8", + "-0.8", + "-0.8", + "-0.8" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.8", + "0.8", + "0.8", + "0.8" + ], + "retraction_minimum_travel": [ + "2", + "2", + "2", + "2" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "0", + "support_chamber_temp_control": "0", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json new file mode 100644 index 0000000000..3eea1c58cf --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json @@ -0,0 +1,311 @@ +{ + "type": "machine", + "name": "Flashforge Creator 5 Pro 0.25 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "rpmib7bIKa85LNMR", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_bed_type": "", + "default_filament_profile": [ + "Flashforge Generic PLA" + ], + "default_print_profile": "0.12mm Standard @FF C5 0.25 nozzle", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "disable_m73": "1", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "360", + "extruder_clearance_height_to_rod": "60", + "extruder_clearance_radius": "92", + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";end_gcode\nG1 X150 Y150 E-1.2 F12000", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "30000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "30000", + "20000" + ], + "machine_max_acceleration_y": [ + "30000", + "20000" + ], + "machine_max_acceleration_z": [ + "300", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_junction_deviation": [ + "0", + "0" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M25", + "machine_start_gcode": ";start_gcode\nM140 S[bed_temperature_initial_layer_single]\nM106 P101 S0 ; L+R_PLA_Turbo_Fan_0-255\nM106 P2 S0 ; Center_Fresch_Air_Input_Fan_for_PLA30%_(80_0-255) \nM191 S0 ; Chamber temp. max65C\nM106 S0 ; Model_Fan_(Heat_Break_Cooler_80-255)100%=255\nM106 P3 S0 ; Filter_Unit_Fan_0-255(ABS=255)\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F2400\nT[initial_extruder]\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nG1 X256 Y0 Z0.2 F6000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\nG1 X216 E10 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n;start_gcode end", + "machine_tool_change_time": "7", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.14", + "0.14", + "0.14", + "0.14" + ], + "max_resonance_avoidance_speed": "120", + "min_layer_height": [ + "0.08", + "0.08", + "0.08", + "0.08" + ], + "min_resonance_avoidance_speed": "70", + "nozzle_diameter": [ + "0.25", + "0.25", + "0.25", + "0.25" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "0x0", + "256x0", + "256x256", + "0x256" + ], + "printable_height": "256", + "printer_model": "Flashforge Creator 5 Pro", + "printer_notes": "", + "printer_settings_id": "Flashforge Creator 5 Pro 0.25 nozzle", + "printer_structure": "corexy", + "printer_technology": "FFF", + "printer_variant": "0.25", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "resonance_avoidance": "0", + "retract_before_wipe": [ + "100%", + "100%", + "100%", + "100%" + ], + "retract_length_toolchange": [ + "3", + "3", + "3", + "3" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "-0.8", + "-0.8", + "-0.8", + "-0.8" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.8", + "0.8", + "0.8", + "0.8" + ], + "retraction_minimum_travel": [ + "2", + "2", + "2", + "2" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json index bf8cbf3702..4ef02628d1 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Flashforge Creator 5 Pro", "model_id": "Flashforge-Creator-5-Pro", - "nozzle_diameter": "0.4;0.6;0.8", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_c5_buildplate_model.stl", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5.json index 8d5ac253b7..7ef9c172c0 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Flashforge Creator 5", "model_id": "Flashforge-Creator-5", - "nozzle_diameter": "0.4;0.6;0.8", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_c5_buildplate_model.stl", diff --git a/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..09221f10b2 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.08mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "KrOSCGKyvNy9v08u", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.08", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.08mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..47ea8c6322 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "0.10mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "0Mep1gVTvD4RwK53", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.10mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..df33cdf344 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.12mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "rcKQBKZJvCfrfzqV", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.12", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.12mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..fd6f8f560d --- /dev/null +++ b/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.14mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "749mQY3CU2jk0MOd", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.14", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.14mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} From 0a3724ed2f106dd40b8a6b6f89c6a83a546cc81c Mon Sep 17 00:00:00 2001 From: mschfh <37435502+mschfh@users.noreply.github.com> Date: Fri, 11 Sep 2026 04:05:17 -0500 Subject: [PATCH 183/208] =?UTF-8?q?fix(profiles):=20set=20PETG=20SuperTack?= =?UTF-8?q?=20temperatures=20to=2060=C2=B0C=20(#15189)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: yw4z --- .../Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json | 6 ------ .../Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 6 ------ .../Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json | 6 ------ .../Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json | 6 ------ .../Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json | 6 ------ .../Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json | 6 ------ .../Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json | 6 ------ .../Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json | 6 ------ .../Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json | 6 ------ .../filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json | 6 ------ resources/profiles/Anycubic/filament/fdm_filament_pet.json | 6 ++++++ .../Flashforge/filament/Flashforge HS PETG @FF G4 HF.json | 6 ++++++ .../Flashforge/filament/Flashforge HS PETG @FF G4P HF.json | 6 ++++++ .../Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json | 6 ++++++ .../Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json | 6 ++++++ .../filament/Flashforge PETG Transparent @FF G4 HF.json | 6 ++++++ .../filament/Flashforge PETG Transparent @FF G4P HF.json | 6 ++++++ .../profiles/Flashforge/filament/fdm_filament_pet.json | 6 ++++++ 18 files changed, 48 insertions(+), 60 deletions(-) diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json index 7fb1d1f66c..4852093cda 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index 64ec8774b0..16d4b54568 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json index ea95c2b1c5..ebc7e8e514 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json index a2cd9ecc5e..978c51007e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json index b0c543cebf..e2c6e84c1b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -309,12 +309,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index bbe7575b49..0774881a2b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index d78fcc1d27..e3a405e192 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index cc3e8a15fc..e28e2d859e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "10" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index e025d0587c..b44b6ecc11 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json index 78925acad9..0f238e5a5b 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -309,12 +309,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/fdm_filament_pet.json b/resources/profiles/Anycubic/filament/fdm_filament_pet.json index 62af7c89ed..56671ade0d 100644 --- a/resources/profiles/Anycubic/filament/fdm_filament_pet.json +++ b/resources/profiles/Anycubic/filament/fdm_filament_pet.json @@ -25,6 +25,12 @@ "hot_plate_temp_initial_layer": [ "80" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "slow_down_for_layer_cooling": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index 955235b442..3534f1a60b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -87,6 +87,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index 82a8dc096a..263224a1ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -93,6 +93,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index d1c404cd19..8308064c52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -90,6 +90,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index 1385ac8454..d8bdc53caa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -96,6 +96,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 2736fea042..f38a075dea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -90,6 +90,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index bc6fbecdb4..c920f757e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -96,6 +96,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/fdm_filament_pet.json b/resources/profiles/Flashforge/filament/fdm_filament_pet.json index 678ab77822..a19e1faece 100644 --- a/resources/profiles/Flashforge/filament/fdm_filament_pet.json +++ b/resources/profiles/Flashforge/filament/fdm_filament_pet.json @@ -28,6 +28,12 @@ "textured_plate_temp_initial_layer": [ "85" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "slow_down_for_layer_cooling": [ "1" ], From 67f77e16c38519f8854b20dffd7caf38ace1f3c8 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Thu, 10 Sep 2026 18:23:58 +0800 Subject: [PATCH 184/208] ci: cache compiled objects between runs Every CI leg compiled the whole tree from scratch, 42 to 57 minutes of each build job. Objects are now cached with ccache, one entry per leg kept on the branch that built it: a push saves the cache and drops the previous entry, a pull request restores main's and keeps nothing. The precompiled header is turned off whenever the cache is on: Clang stamps it with the build time, so every file including it missed. With it off, a warm run hits 98.5 to 98.9 % of compiles and the compile steps take 1 to 4 minutes; a cold run costs 25 to 60 % more than before, and a change to a widely included header lands in between. --- .github/workflows/build_orca.yml | 79 ++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 8e1e28db13..f1fb29c46b 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -76,6 +76,56 @@ jobs: if (-not (Test-Path "$cmakeBin\cmake.exe")) { throw "cmake.exe not found at $cmakeBin" } Add-Content -Path $env:GITHUB_PATH -Value $cmakeBin + # Compiler cache. Pushes save it, so main keeps it warm; pull requests + # restore it and discard what they compiled. Objects are keyed on the + # preprocessed source, the compiler and the flags, so a leg only ever + # hits its own entries. A failed install costs the caching, not the build. + - name: Name the compiler cache leg + if: ${{ !inputs.macos-combine-only }} + shell: bash + run: | + leg="${{ runner.os }}-${{ inputs.arch || 'amd64' }}${{ runner.os == 'Windows' && format('-{0}', inputs.compiler) || '' }}" + echo "CCACHE_LEG=$leg" >> "$GITHUB_ENV" + echo "CCACHE_ENTRY=ccache-$leg-${{ github.run_id }}-${{ github.run_attempt }}" >> "$GITHUB_ENV" + + # The action only installs and configures ccache. Restore and save go + # through actions/cache with one path string, since the cache service + # only matches entries saved under the identical path and the action + # spells it differently on Windows. + - name: Compiler cache + id: ccache + if: ${{ !inputs.macos-combine-only }} + continue-on-error: true + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ env.CCACHE_LEG }} + max-size: 3G + restore: false + save: false + + - name: Restore compiler cache + if: ${{ steps.ccache.outcome == 'success' }} + uses: actions/cache/restore@v6 + with: + path: ${{ github.workspace }}/.ccache + key: ${{ env.CCACHE_ENTRY }} + restore-keys: ccache-${{ env.CCACHE_LEG }}- + + - name: Enable compiler cache + if: ${{ steps.ccache.outcome == 'success' }} + shell: bash + run: | + echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" + echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" + # Headers a fresh checkout has just written, and the few files that + # use __DATE__ or __TIME__. + echo "CCACHE_SLOPPINESS=time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV" + # Clang rebuilds the precompiled header with a fresh timestamp on + # every run, so everything that includes it would miss. + echo "ORCA_EXTRA_BUILD_ARGS=-DSLIC3R_PCH=OFF" >> "$GITHUB_ENV" + # The restored directory carries the previous run's counters. + ccache -z + - name: Get the version and date on Ubuntu and macOS if: runner.os != 'Windows' run: | @@ -670,3 +720,32 @@ jobs: asset_name: orca_custom_preset_tests.zip asset_content_type: application/octet-stream max_releases: 1 + + - name: Compiler cache statistics + if: ${{ always() && steps.ccache.outcome == 'success' }} + shell: bash + run: ccache -s -v || ccache -s + + # Entries are immutable, so the new one is saved first and the older + # ones for this leg on this ref are dropped afterwards: a failed save + # leaves the previous entry in place. + - name: Save compiler cache + id: ccache_save + if: ${{ steps.ccache.outcome == 'success' && github.event_name != 'pull_request' }} + uses: actions/cache/save@v6 + with: + path: ${{ github.workspace }}/.ccache + key: ${{ env.CCACHE_ENTRY }} + + - name: Drop older compiler cache entries + if: ${{ steps.ccache_save.outcome == 'success' }} + # A read-only token (fork PRs) cannot delete; that only costs storage. + continue-on-error: true + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + gh cache list --ref "$GITHUB_REF" --key "ccache-$CCACHE_LEG-" --limit 100 --json id,key \ + | jq -r --arg keep "$CCACHE_ENTRY" '.[] | select(.key != $keep) | .id' \ + | tr -d '\r' \ + | while read -r id; do gh cache delete "$id"; done From 6f90ff6e93fb8c00d6f343f4322a570c8dcc0c0b Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Fri, 11 Sep 2026 17:29:28 +0800 Subject: [PATCH 185/208] Allow ccache with PCH Clang records the modification time of every input in the precompiled header, so a fresh checkout produces a different header and every file that includes it misses the compiler cache. -fno-pch-timestamp makes the header reproducible, and pch_defines lets ccache cache the header itself. The precompiled header no longer has to be turned off when the cache is on. --- .github/workflows/build_orca.yml | 10 ++++------ cmake/modules/PrecompiledHeader.cmake | 7 +++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index f1fb29c46b..e51cb2e37a 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -117,12 +117,10 @@ jobs: run: | echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" - # Headers a fresh checkout has just written, and the few files that - # use __DATE__ or __TIME__. - echo "CCACHE_SLOPPINESS=time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV" - # Clang rebuilds the precompiled header with a fresh timestamp on - # every run, so everything that includes it would miss. - echo "ORCA_EXTRA_BUILD_ARGS=-DSLIC3R_PCH=OFF" >> "$GITHUB_ENV" + # Headers a fresh checkout has just written, the few files that + # use __DATE__ or __TIME__, and the precompiled header, whose + # macros ccache cannot see. + echo "CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV" # The restored directory carries the previous run's counters. ccache -z diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index 7ef80aacff..7d8b3a5603 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -256,6 +256,13 @@ function(add_precompiled_header _target _input) message(STATUS "Adding precompiled header ${_input} to target ${_target}.") target_precompile_headers(${_target} PRIVATE ${_input}) + # Clang records the modification time of every input in the precompiled + # header, which makes it differ between two checkouts of the same source + # and defeats a compiler cache. The build system already rebuilds the + # header when an input changes. + target_compile_options(${_target} PRIVATE + "$<$:SHELL:-Xclang -fno-pch-timestamp>") + get_target_property(_sources ${_target} SOURCES) list(FILTER _sources INCLUDE REGEX ".*\\.mm?") From 6a88f0790edaa79f4e09e25023403a32c20edf98 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Fri, 11 Sep 2026 23:02:31 +0800 Subject: [PATCH 186/208] Enable ccache Depend Mode A miss used to cost a preprocessor pass for the hash and then the real compile. With the depend mode ccache hashes the include list the compiler reports, so a miss costs only the compile. Ninja already asks every compiler here for that list. --- .github/workflows/build_orca.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index e51cb2e37a..1b7fd37a0f 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -121,6 +121,9 @@ jobs: # use __DATE__ or __TIME__, and the precompiled header, whose # macros ccache cannot see. echo "CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV" + # Hash the includes the compiler reports instead of preprocessing + # every miss before compiling it. + echo "CCACHE_DEPEND=1" >> "$GITHUB_ENV" # The restored directory carries the previous run's counters. ccache -z From 1e76e733b7e487db298da922779e09ca03178c7b Mon Sep 17 00:00:00 2001 From: packerlschupfer <83344883+packerlschupfer@users.noreply.github.com> Date: Fri, 11 Sep 2026 22:31:12 +0200 Subject: [PATCH 187/208] CLI: record user overrides in different_settings_to_system for 3MF export (#15595) * CLI: record user overrides in different_settings_to_system for 3MF export Three sites in CLI::run wrote an empty `different_settings_to_system` column and left a //todo: //todo: support user machine preset's different settings different_settings[filament_count+1] = ""; //todo: support system process preset different_settings[0] = ""; //todo: update different settings of filaments different_settings[filament_index] = ""; So a 3MF exported by the CLI does not record which keys the user actually overrode relative to the system parent. Re-opening such a project in the GUI then shows spurious "unsaved changes", and accepting that dialog can revert inherited process/filament/machine values to system defaults. The column could not be filled before because the CLI had no resolved view of the parent preset. It does now: #15438 builds a PresetBundle for inherits resolution, so the parent can be looked up by name and diffed against the resolved leaf. This adds no extra loading -- the bundle is the one already built, and the helper returns "" whenever it is unavailable or the parent cannot be found, which is the previous behaviour. Preset metadata is filtered out of the diff: `inherits`, the three `*_settings_id` keys, and `compatible_printers` / `compatible_prints` and their `_condition` variants, which have their own tracking columns (`inherits_group`, per-slot lists) and would otherwise double-count. A value already carried by the loaded JSON still wins for the process slot, so presets saved with a `different_settings_to_system` field behave as before; the computed value only fills the gap where that field is absent, which is the case for every user preset in my datadir (0 of 47 carry it). System presets keep an empty column: there are no user overrides to record. * CLI: diff the filament slot before load_default_gcodes_to_config The process and machine slots compute their different_settings_to_system column before load_default_gcodes_to_config(); the filament slot did it after. That call materialises absent gcode keys via option(..., true), and DynamicConfig::diff only compares keys present in both configs -- so a gcode key the resolved leaf did not carry would go from 'not compared' to 'compared as empty against the parent' and land in the column as an override the user never made. Hoisted into a local above the call, guarded by load_filament_count > 0 so the work is skipped exactly where it was before, and assigned at the original site. The diff now also runs before config.erase("filament_settings_id"), which is immaterial: cli_different_settings already filters filament_settings_id along with the other *_settings_id keys. This is a consistency fix rather than a demonstrated defect -- resolve_preset merges the parent config, so in practice the gcode keys are already present on both sides and the diff is unaffected. It removes the dependence on that invariant, which the other two slots never had. Reported by HanifKoh in review of #15595. --- src/OrcaSlicer.cpp | 75 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 5463f55c20..7c881047e7 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -2046,6 +2046,51 @@ int CLI::run(int argc, char **argv) error, allow_source_manifest); }; + //ORCA: list the keys a user preset overrides relative to its system parent, for the + // `different_settings_to_system` column of an exported 3MF. Without it the CLI + // writes an empty column, so re-opening a CLI-exported project in the GUI shows + // spurious "unsaved changes" and can revert inherited process/filament/machine + // values to system defaults. + // + // The parent comes from the preset bundle that inherits resolution already builds, + // so this adds no extra loading. Returns "" whenever the parent cannot be resolved, + // which is exactly the previous behaviour. + auto cli_different_settings = [&ensure_cli_preset_bundle](const DynamicPrintConfig &resolved, + const std::string &parent_name, + Preset::Type type) -> std::string { + if (parent_name.empty()) + return std::string(); + std::string error; + PresetBundle *bundle = ensure_cli_preset_bundle(error); + if (bundle == nullptr) { + BOOST_LOG_TRIVIAL(warning) << "CLI: no preset bundle for different_settings_to_system: " << error; + return std::string(); + } + const PresetCollection *collection = nullptr; + switch (type) { + case Preset::TYPE_PRINT: collection = &bundle->prints; break; + case Preset::TYPE_FILAMENT: collection = &bundle->filaments; break; + case Preset::TYPE_PRINTER: collection = &bundle->printers; break; + default: return std::string(); + } + const Preset *parent = collection->find_preset2(parent_name, true); + if (parent == nullptr) { + BOOST_LOG_TRIVIAL(warning) << boost::format("CLI: parent preset '%1%' not found; leaving different_settings_to_system empty")%parent_name; + return std::string(); + } + std::vector keys = resolved.diff(parent->config); + //ORCA: preset metadata, not user-tunable settings. compatible_printers / + // compatible_prints have their own tracking columns and would double-count. + keys.erase(std::remove_if(keys.begin(), keys.end(), [](const std::string &k) { + return k == "inherits" || k == "compatible_printers" || k == "compatible_prints" + || k == "compatible_printers_condition" || k == "compatible_prints_condition" + || k == "print_settings_id" || k == "filament_settings_id" || k == "printer_settings_id"; + }), + keys.end()); + BOOST_LOG_TRIVIAL(info) << boost::format("CLI: %1% overrides vs parent '%2%'")%keys.size()%parent_name; + return Slic3r::escape_strings_cstyle(keys); + }; + auto load_config_file = [&resolve_preset](const std::string& file, DynamicPrintConfig& config, std::string& config_type, std::string& config_name, std::string& filament_id, std::string& config_from) { if (! boost::filesystem::exists(file)) { @@ -2937,8 +2982,10 @@ int CLI::run(int argc, char **argv) } } else { - //todo: support user machine preset's different settings - different_settings[filament_count+1] = ""; + //ORCA: was a //todo — compute the user's overrides instead of writing an empty column. + different_settings[filament_count+1] = new_printer_config_is_system + ? std::string() + : cli_different_settings(load_machine_config, new_printer_system_name, Preset::TYPE_PRINTER); if (new_printer_config_is_system) inherits_group[filament_count+1] = ""; else @@ -3080,8 +3127,14 @@ int CLI::run(int argc, char **argv) print_compatible_printers = std::move(current_print_compatible_printers); } else { - //todo: support system process preset - different_settings[0] = ""; + //ORCA: was a //todo. Prefer a value the loaded JSON already carried, otherwise + // compute the overrides against the system parent. + if (!different_process_setting.empty()) + different_settings[0] = different_process_setting; + else + different_settings[0] = new_process_config_is_system + ? std::string() + : cli_different_settings(load_process_config, new_process_system_name, Preset::TYPE_PRINT); if (new_process_config_is_system) inherits_group[0] = ""; else @@ -3268,6 +3321,16 @@ int CLI::run(int argc, char **argv) int filament_index = load_filaments_index[index]; std::vector different_keys; + //ORCA: diff before load_default_gcodes_to_config, the way the process and machine + // slots above already do. That call materialises absent gcode keys via + // option(..., true), and DynamicConfig::diff only compares keys present in + // both configs -- so a gcode key the leaf did not carry would go from "not + // compared" to "compared as empty against the parent" and land in the column + // as an override the user never made. + std::string filament_different_settings; + if (load_filament_count > 0) + filament_different_settings = cli_different_settings(config, load_filaments_inherit[index], Preset::TYPE_FILAMENT); + load_default_gcodes_to_config(config, Preset::TYPE_FILAMENT); if (load_filament_count > 0) { @@ -3279,8 +3342,8 @@ int CLI::run(int argc, char **argv) opt_filament_settings->set_at(filament_name_setting, filament_index-1, 0); config.erase("filament_settings_id"); - //todo: update different settings of filaments - different_settings[filament_index] = ""; + //ORCA: was a //todo — same treatment as process/machine above. + different_settings[filament_index] = filament_different_settings; inherits_group[filament_index] = load_filaments_inherit[index]; } else { From 74cf1483841b0421282ee5eb9ff5f617d3e1a79d Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 11 Sep 2026 19:22:16 -0500 Subject: [PATCH 188/208] fix: sequential-print arrange settings are ignored and never persisted (#15425) --- src/slic3r/GUI/GLCanvas3D.cpp | 138 ++++++++++--------------------- src/slic3r/GUI/GLCanvas3D.hpp | 19 +---- src/slic3r/GUI/GUI_App.cpp | 2 +- tests/libslic3r/test_arrange.cpp | 98 +++++++++++++++++++++- tests/libslic3r/test_config.cpp | 70 ++++++++++++++++ 5 files changed, 213 insertions(+), 114 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 676d310f7b..e63501eec1 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1078,56 +1078,36 @@ const double GLCanvas3D::DefaultCameraZoomToPlateMarginFactor = 1.25; void GLCanvas3D::load_arrange_settings() { - std::string dist_fff_str = - wxGetApp().app_config->get("arrange", "min_object_distance_fff"); + // Each key must match what _render_arrange_menu writes, which appends a per-mode + // postfix to the base name. + auto load_float = [](const char *key, float &out) { + // The menu writes these with float_to_string_decimal_point, so parse them back + // the same way rather than with anything locale-dependent. + std::string value = wxGetApp().app_config->get("arrange", key); + size_t parsed = 0; + double number = string_to_double_decimal_point(value, &parsed); + if (parsed > 0) + out = float(number); + }; + auto load_bool = [](const char *key, bool &out) { + std::string value = wxGetApp().app_config->get("arrange", key); + if (!value.empty()) + out = (value == "1" || value == "true"); + }; - std::string dist_fff_seq_print_str = - wxGetApp().app_config->get("arrange", "min_object_distance_seq_print_fff"); + load_float("min_object_distance_fff", m_arrange_settings_fff.distance); + load_float("min_object_distance_fff_seq_print", m_arrange_settings_fff_seq_print.distance); + load_float("min_object_distance_sla", m_arrange_settings_sla.distance); - std::string dist_sla_str = - wxGetApp().app_config->get("arrange", "min_object_distance_sla"); + load_bool("enable_rotation_fff", m_arrange_settings_fff.enable_rotation); + load_bool("enable_rotation_fff_seq_print", m_arrange_settings_fff_seq_print.enable_rotation); + load_bool("enable_rotation_sla", m_arrange_settings_sla.enable_rotation); - std::string en_rot_fff_str = - wxGetApp().app_config->get("arrange", "enable_rotation_fff"); - - std::string en_rot_fff_seqp_str = - wxGetApp().app_config->get("arrange", "enable_rotation_seq_print"); - - std::string en_rot_sla_str = - wxGetApp().app_config->get("arrange", "enable_rotation_sla"); - - std::string en_allow_multiple_materials_str = - wxGetApp().app_config->get("arrange", "allow_multi_materials_on_same_plate"); - - std::string en_avoid_region_str = - wxGetApp().app_config->get("arrange", "avoid_extrusion_cali_region"); - - - - if (!dist_fff_str.empty()) - m_arrange_settings_fff.distance = std::stof(dist_fff_str); - - if (!dist_fff_seq_print_str.empty()) - m_arrange_settings_fff_seq_print.distance = std::stof(dist_fff_seq_print_str); - - if (!dist_sla_str.empty()) - m_arrange_settings_sla.distance = std::stof(dist_sla_str); - - if (!en_rot_fff_str.empty()) - m_arrange_settings_fff.enable_rotation = (en_rot_fff_str == "1" || en_rot_fff_str == "true"); - - if (!en_allow_multiple_materials_str.empty()) - m_arrange_settings_fff.allow_multi_materials_on_same_plate = (en_allow_multiple_materials_str == "1" || en_allow_multiple_materials_str == "true"); - - - if (!en_rot_fff_seqp_str.empty()) - m_arrange_settings_fff_seq_print.enable_rotation = (en_rot_fff_seqp_str == "1" || en_rot_fff_seqp_str == "true"); - - if(!en_avoid_region_str.empty()) - m_arrange_settings_fff.avoid_extrusion_cali_region = (en_avoid_region_str == "1" || en_avoid_region_str == "true"); - - if (!en_rot_sla_str.empty()) - m_arrange_settings_sla.enable_rotation = (en_rot_sla_str == "1" || en_rot_sla_str == "true"); + // These two keys carry no postfix, so the one stored value covers both FFF modes. + load_bool("allow_multi_materials_on_same_plate", m_arrange_settings_fff.allow_multi_materials_on_same_plate); + load_bool("allow_multi_materials_on_same_plate", m_arrange_settings_fff_seq_print.allow_multi_materials_on_same_plate); + load_bool("avoid_extrusion_cali_region", m_arrange_settings_fff.avoid_extrusion_cali_region); + load_bool("avoid_extrusion_cali_region", m_arrange_settings_fff_seq_print.avoid_extrusion_cali_region); //BBS: add specific arrange settings m_arrange_settings_fff_seq_print.is_seq_print = true; @@ -5959,7 +5939,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa } //BBS: GUI refactor: adjust main toolbar position -bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, float top) +void GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, float top) { ImGuiWrapper *imgui = wxGetApp().imgui(); @@ -5984,7 +5964,6 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); - ArrangeSettings settings = get_arrange_settings(); ArrangeSettings &settings_out = get_arrange_settings(); const float slider_icon_width = imgui->get_slider_icon_size().x; const float cursor_slider_left = imgui->calc_text_size(_L("Spacing")).x + imgui->scaled(1.5f); @@ -5993,13 +5972,9 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo auto &appcfg = wxGetApp().app_config; PrinterTechnology ptech = current_printer_technology(); - bool settings_changed = false; - float dist_min = 0.f; // 0 means auto std::string dist_key = "min_object_distance", rot_key = "enable_rotation"; - std::string bed_shrink_x_key = "bed_shrink_x", bed_shrink_y_key = "bed_shrink_y"; std::string multi_material_key = "allow_multi_materials_on_same_plate"; std::string avoid_extrusion_key = "avoid_extrusion_cali_region"; - std::string align_to_y_axis_key = "align_to_y_axis"; std::string postfix; //BBS: bool seq_print = false; @@ -6007,59 +5982,41 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo if (ptech == ptSLA) { postfix = "_sla"; } else if (ptech == ptFFF) { - seq_print = &settings == &m_arrange_settings_fff_seq_print; - if (seq_print) { - postfix = "_fff_seq_print"; - } else { - postfix = "_fff"; - } + seq_print = wxGetApp().global_print_sequence() == PrintSequence::ByObject; + postfix = seq_print ? "_fff_seq_print" : "_fff"; } dist_key += postfix; rot_key += postfix; - bed_shrink_x_key += postfix; - bed_shrink_y_key += postfix; ImGui::AlignTextToFramePadding(); imgui->text(_L("Spacing")); ImGui::SameLine(1.2 * cursor_slider_left); ImGui::PushItemWidth(window_width - slider_icon_width); - bool b_Spacing = imgui->bbl_slider_float_style("##Spacing", &settings.distance, dist_min, 100.0f, "%5.2f") || dist_min > settings.distance; + bool b_Spacing = imgui->bbl_slider_float_style("##Spacing", &settings_out.distance, 0.f, 100.0f, "%5.2f", 1.0f, /*clamp=*/false); ImGui::SameLine(window_width - slider_icon_width + 1.3 * cursor_slider_left); ImGui::PushItemWidth(1.5 * slider_icon_width); - bool b_spacing_input = ImGui::BBLDragFloat("##spacing_input", &settings.distance, 0.05f, 0.0f, 0.0f, "%.2f"); - if (b_Spacing || b_spacing_input) - { - settings.distance = std::max(dist_min, settings.distance); - settings_out.distance = settings.distance; + bool b_spacing_input = ImGui::BBLDragFloat("##spacing_input", &settings_out.distance, 0.05f, 0.0f, 0.0f, "%.2f"); + if (b_Spacing || b_spacing_input) { + settings_out.distance = std::max(0.f, settings_out.distance); appcfg->set("arrange", dist_key.c_str(), float_to_string_decimal_point(settings_out.distance)); - settings_changed = true; } imgui->text(_L("0 means auto spacing.")); ImGui::Separator(); - if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings.enable_rotation)) { - settings_out.enable_rotation = settings.enable_rotation; + if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings_out.enable_rotation)) appcfg->set("arrange", rot_key.c_str(), settings_out.enable_rotation); - settings_changed = true; - } - if (imgui->bbl_checkbox(_L("Allow multiple materials on same plate"), settings.allow_multi_materials_on_same_plate)) { - settings_out.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; - appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate ); - settings_changed = true; - } + if (imgui->bbl_checkbox(_L("Allow multiple materials on same plate"), settings_out.allow_multi_materials_on_same_plate)) + appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate); // only show this option if the printer has micro Lidar and can do first layer scan DynamicPrintConfig ¤t_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; const bool has_lidar = wxGetApp().preset_bundle->is_bbl_vendor(); auto op = current_config.option("scan_first_layer"); if (has_lidar && op && op->getBool()) { - if (imgui->bbl_checkbox(_L("Avoid extrusion calibration region"), settings.avoid_extrusion_cali_region)) { - settings_out.avoid_extrusion_cali_region = settings.avoid_extrusion_cali_region; - appcfg->set("arrange", avoid_extrusion_key.c_str(), settings_out.avoid_extrusion_cali_region ? "1" : "0"); - settings_changed = true; - } + if (imgui->bbl_checkbox(_L("Avoid extrusion calibration region"), settings_out.avoid_extrusion_cali_region)) + appcfg->set("arrange", avoid_extrusion_key.c_str(), settings_out.avoid_extrusion_cali_region); } else { settings_out.avoid_extrusion_cali_region = false; } @@ -6071,11 +6028,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo settings_out.align_to_y_axis = false; } - if (imgui->bbl_checkbox(_L("Align to Y axis"), settings.align_to_y_axis)) { - settings_out.align_to_y_axis = settings.align_to_y_axis; - appcfg->set("arrange", align_to_y_axis_key, settings_out.align_to_y_axis ? "1" : "0"); - settings_changed = true; - } + imgui->bbl_checkbox(_L("Align to Y axis"), settings_out.align_to_y_axis); if (settings_out.enable_rotation == true) { imgui->disabled_end(); } } @@ -6091,7 +6044,6 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo if (imgui->button(_L("Reset"))) { settings_out = ArrangeSettings{}; - settings_out.distance = std::max(dist_min, settings_out.distance); //BBS: add specific arrange settings if (seq_print) settings_out.is_seq_print = true; @@ -6101,18 +6053,16 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo else settings_out.align_to_y_axis = false; - appcfg->set("arrange", dist_key, float_to_string_decimal_point(settings_out.distance)); - appcfg->set("arrange", rot_key, settings_out.enable_rotation ? "1" : "0"); - appcfg->set("arrange", align_to_y_axis_key, settings_out.align_to_y_axis ? "1" : "0"); - settings_changed = true; + appcfg->erase("arrange", dist_key); + appcfg->erase("arrange", rot_key); + appcfg->erase("arrange", multi_material_key); + appcfg->erase("arrange", avoid_extrusion_key); } ImGui::PopStyleVar(1); imgui->end(); //BBS ImGuiWrapper::pop_toolbar_style(); - - return settings_changed; } static const float cameraProjection[16] = {1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 1.f}; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 84dbd5d652..b1dd674d96 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -656,11 +656,7 @@ public: } void load_arrange_settings(); - ArrangeSettings& get_arrange_settings();// { return get_arrange_settings(this); } - ArrangeSettings& get_arrange_settings(PrintSequence print_seq) { - return (print_seq == PrintSequence::ByObject) ? m_arrange_settings_fff_seq_print - : m_arrange_settings_fff; - } + ArrangeSettings& get_arrange_settings(); class SequentialPrintClearance { @@ -1163,17 +1159,6 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); - ArrangeSettings get_arrange_settings() const { - const ArrangeSettings &settings = get_arrange_settings(); - ArrangeSettings ret = settings; - if (&settings == &m_arrange_settings_fff_seq_print) { - ret.distance = std::max(ret.distance, - float(min_object_distance(*m_config))); - } - - return ret; - } - // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 @@ -1308,7 +1293,7 @@ private: void _render_selection_sidebar_hints() { m_selection.render_sidebar_hints(m_sidebar_field, m_gizmos.get_uniform_scaling()); } //BBS: GUI refactor: adjust main toolbar position bool _render_orient_menu(float left, float right, float bottom, float top); - bool _render_arrange_menu(float left, float right, float bottom, float top); + void _render_arrange_menu(float left, float right, float bottom, float top); void _render_3d_navigator(); void _update_volumes_hover_state(); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index df2d1fccc0..fee18b4799 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -9197,7 +9197,7 @@ int GUI_App::filaments_cnt() const PrintSequence GUI_App::global_print_sequence() const { PrintSequence global_print_seq = PrintSequence::ByDefault; - auto curr_preset_config = preset_bundle->prints.get_edited_preset().config; + const auto &curr_preset_config = preset_bundle->prints.get_edited_preset().config; if (curr_preset_config.has("print_sequence")) global_print_seq = curr_preset_config.option>("print_sequence")->value; return global_print_seq; diff --git a/tests/libslic3r/test_arrange.cpp b/tests/libslic3r/test_arrange.cpp index a9fb51e352..3906cba8ba 100644 --- a/tests/libslic3r/test_arrange.cpp +++ b/tests/libslic3r/test_arrange.cpp @@ -4,6 +4,8 @@ #include "libslic3r/BoundingBox.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/ExPolygon.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/PrintConfig.hpp" using namespace Slic3r; using namespace Slic3r::arrangement; @@ -24,11 +26,13 @@ ArrangePolygon make_square(coord_t side) return ap; } -ArrangePolygons squares(int n, double side_mm) +ArrangePolygons squares(int n, double side_mm, double height_mm = 0.) { ArrangePolygons items; - for (int i = 0; i < n; ++i) + for (int i = 0; i < n; ++i) { items.emplace_back(make_square(scaled(side_mm))); + items.back().height = height_mm; + } return items; } @@ -82,6 +86,38 @@ void require_no_overlap(const ArrangePolygons &items) REQUIRE(disjoint(placed_shapes(items))); } +// The sequential-print floor is chosen by comparing object height against the nozzle, +// so the two are defined together and every expectation is derived from them. +constexpr double NOZZLE_HEIGHT_MM = 2.5; +constexpr double CLEARANCE_MM = 30.; +constexpr double NOZZLE_FLOOR_MM = MAX_OUTER_NOZZLE_DIAMETER / 2.; + +ArrangeParams seq_print_params(coord_t min_dist) +{ + ArrangeParams p = quiet_params(min_dist); + p.is_seq_print = true; + p.clearance_radius = float(CLEARANCE_MM); + p.nozzle_height = float(NOZZLE_HEIGHT_MM); + p.object_skirt_offset = 0.f; + return p; +} + +// update_selected_items_inflation reads the bed out of the config to cap inflation. +DynamicPrintConfig bed_config() +{ + DynamicPrintConfig c; + c.set_key_value("printable_area", new ConfigOptionPoints{{0, 0}, {200, 0}, {200, 200}, {0, 200}}); + return c; +} + +ArrangePolygons squares_of_heights(const std::vector &heights_mm) +{ + ArrangePolygons items; + for (double height_mm : heights_mm) + items.push_back(squares(1, 20., height_mm).front()); + return items; +} + } // namespace // Prove the overlap check the other tests rely on actually detects overlap. @@ -222,3 +258,61 @@ TEST_CASE("Arrange aligns the pile to a custom center", "[Arrange]") REQUIRE(ap.bed_idx == 0); require_no_overlap(items); } + +TEST_CASE("Sequential print floors the object distance by object height", "[Arrange]") +{ + // The only place sequential-print clearance is enforced. The arrange menu offers + // no floor of its own, so a stored 0 has to be raised here or not at all. + struct Case + { + std::string description; + std::vector heights; + double skirt_offset_mm; + double expected_floor_mm; + }; + + auto c = GENERATE(values({ + {"objects taller than the nozzle need the full clearance", {NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}, 0., CLEARANCE_MM}, + {"an object exactly at the nozzle height counts as tall", {NOZZLE_HEIGHT_MM, NOZZLE_HEIGHT_MM}, 0., CLEARANCE_MM}, + {"one tall object among short ones is enough", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM * 2}, 0., CLEARANCE_MM}, + {"objects the nozzle clears keep only the nozzle-width floor", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM / 2}, 0., NOZZLE_FLOOR_MM}, + {"a wide skirt raises the floor for short objects", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM / 2}, 3., 6.}, + })); + + DYNAMIC_SECTION(c.description) + { + ArrangePolygons items = squares_of_heights(c.heights); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(0); + p.object_skirt_offset = float(c.skirt_offset_mm); + + update_selected_items_inflation(items, &cfg, p); + + CHECK(p.min_obj_distance >= scaled(c.expected_floor_mm)); + CHECK(p.min_obj_distance <= scaled(c.expected_floor_mm + 0.01)); + // Half each, so a pair ends up a full min_obj_distance apart. + CHECK(items.front().inflation == p.min_obj_distance / 2); + } +} + +TEST_CASE("Sequential print keeps an object distance already above the floor", "[Arrange]") +{ + const coord_t stored = scaled(CLEARANCE_MM * 2); + ArrangePolygons items = squares_of_heights({NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(stored); + + update_selected_items_inflation(items, &cfg, p); + CHECK(p.min_obj_distance == stored); +} + +TEST_CASE("Layered printing does not floor the object distance", "[Arrange]") +{ + ArrangePolygons items = squares_of_heights({NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(0); + p.is_seq_print = false; + + update_selected_items_inflation(items, &cfg, p); + CHECK(p.min_obj_distance == 0); +} diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp index bd147b5881..9a70ecbaeb 100644 --- a/tests/libslic3r/test_config.cpp +++ b/tests/libslic3r/test_config.cpp @@ -1091,3 +1091,73 @@ TEST_CASE("get_filament_type treats empty vector options as absent", "[Config][F REQUIRE(displayed == "Sup.PLA"); } } + +namespace { + +// min_object_distance reads exactly these three options. +DynamicPrintConfig spacing_config(PrinterTechnology tech, PrintSequence seq, double clearance_radius) +{ + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(tech)); + c.set_key_value("print_sequence", new ConfigOptionEnum(seq)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(clearance_radius)); + return c; +} + +} // namespace + +TEST_CASE("min_object_distance floors object spacing per print sequence", "[Config]") +{ + struct Case + { + std::string description; + PrinterTechnology tech; + PrintSequence sequence; + double clearance_radius; + double expected; + }; + + auto c = GENERATE(values({ + {"sequential FFF takes a clearance radius above the floor", ptFFF, PrintSequence::ByObject, 12., 12.}, + {"sequential FFF holds the floor at the radius", ptFFF, PrintSequence::ByObject, 6., 6.}, + {"sequential FFF holds the floor below the radius", ptFFF, PrintSequence::ByObject, 4., 6.}, + {"layered FFF ignores the clearance radius", ptFFF, PrintSequence::ByLayer, 12., 6.}, + {"SLA is a flat 6mm", ptSLA, PrintSequence::ByObject, 12., 6.}, + {"SLA ignores the print sequence too", ptSLA, PrintSequence::ByLayer, 12., 6.}, + })); + + DYNAMIC_SECTION(c.description) + { + CHECK_THAT(min_object_distance(spacing_config(c.tech, c.sequence, c.clearance_radius)), + Catch::Matchers::WithinAbs(c.expected, 1e-9)); + } +} + +TEST_CASE("min_object_distance yields no floor when an FFF config lacks the options", "[Config]") +{ + // Missing options yield 0 rather than an error, so a caller gets no floor at all. + SECTION("no clearance radius") { + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(ptFFF)); + c.set_key_value("print_sequence", new ConfigOptionEnum(PrintSequence::ByObject)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("no print sequence") { + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(ptFFF)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(12.)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("nothing at all") { + CHECK_THAT(min_object_distance(DynamicPrintConfig{}), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("an unset printer technology is treated as FFF") { + DynamicPrintConfig c; + c.set_key_value("print_sequence", new ConfigOptionEnum(PrintSequence::ByObject)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(12.)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(12., 1e-9)); + } +} From 75f5fe22e8913b686a19849332921341a70ae00c Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 11 Sep 2026 19:24:37 -0500 Subject: [PATCH 189/208] build: clear 12 platform-gated warnings the x64 census could not see (#15633) --- src/libslic3r/PresetBundle.cpp | 12 ++++++------ src/libslic3r/Thread.cpp | 9 +++++++-- src/slic3r/GUI/InstanceCheck.hpp | 1 - src/slic3r/GUI/SelectMachinePop.hpp | 2 ++ src/slic3r/GUI/TextureImportDialog.cpp | 2 ++ src/slic3r/Utils/Serial.cpp | 2 ++ 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index c90ebc756b..4b8fb03a02 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4981,7 +4981,7 @@ static void apply_mixed_config_relocations(DynamicPrintConfig& case coBools: { auto* live = static_cast(opt); const auto* frozen = static_cast(snapshot.get()); - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const unsigned char cell = from < frozen->values.size() ? frozen->values[from] : 0; if (live->values.size() <= to) live->values.resize(to + 1, 0); @@ -4992,7 +4992,7 @@ static void apply_mixed_config_relocations(DynamicPrintConfig& case coStrings: { auto* live = static_cast(opt); const auto* frozen = static_cast(snapshot.get()); - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); if (live->values.size() <= to) live->values.resize(to + 1, std::string{}); @@ -5028,7 +5028,7 @@ static void apply_receiver_mix_relocations(DynamicPrintConfig& auto* live = static_cast(opt); std::unique_ptr snapshot(opt->clone()); const auto* frozen = static_cast(snapshot.get()); - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const bool cell = from < frozen->values.size() ? frozen->values[from] : false; if (live->values.size() <= to) live->values.resize(to + 1, false); @@ -5044,7 +5044,7 @@ static void apply_receiver_mix_relocations(DynamicPrintConfig& auto* live = static_cast(opt); std::unique_ptr snapshot(opt->clone()); const auto* frozen = static_cast(snapshot.get()); - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); if (live->values.size() <= to) live->values.resize(to + 1, std::string{}); @@ -5060,7 +5060,7 @@ static void apply_receiver_mix_relocations(DynamicPrintConfig& auto* live = static_cast(opt); std::unique_ptr snapshot(opt->clone()); const auto* frozen = static_cast(snapshot.get()); - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const int cell = from < frozen->values.size() ? frozen->values[from] : 0; if (live->values.size() <= to) live->values.resize(to + 1, 0); @@ -5087,7 +5087,7 @@ static void apply_receiver_mix_relocations(DynamicPrintConfig& move_ints("filament_volume_map"); { const std::vector> frozen = ams_multi_color_filment; - for (const auto [from, to] : moves) { + for (const auto& [from, to] : moves) { const std::vector cell = from < frozen.size() ? frozen[from] : std::vector(); if (ams_multi_color_filment.size() <= to) ams_multi_color_filment.resize(to + 1, std::vector{}); diff --git a/src/libslic3r/Thread.cpp b/src/libslic3r/Thread.cpp index 3030b6d194..edd7c2a3d0 100644 --- a/src/libslic3r/Thread.cpp +++ b/src/libslic3r/Thread.cpp @@ -30,6 +30,11 @@ static HMODULE s_hKernel32 = nullptr; static SetThreadDescriptionType s_fnSetThreadDescription = nullptr; static GetThreadDescriptionType s_fnGetThreadDescription = nullptr; +// Convert the FARPROC from GetProcAddress to Fn through a generic function pointer. +template static Fn load_proc(HMODULE module, const char* name) { + return reinterpret_cast(reinterpret_cast(::GetProcAddress(module, name))); +} + static bool WindowsGetSetThreadNameAPIInitialize() { if (! s_SetGetThreadDescriptionInitialized) { @@ -37,8 +42,8 @@ static bool WindowsGetSetThreadNameAPIInitialize() // to initialize s_hKernel32 = LoadLibraryW(L"Kernel32.dll"); if (s_hKernel32) { - s_fnSetThreadDescription = (SetThreadDescriptionType)::GetProcAddress(s_hKernel32, "SetThreadDescription"); - s_fnGetThreadDescription = (GetThreadDescriptionType)::GetProcAddress(s_hKernel32, "GetThreadDescription"); + s_fnSetThreadDescription = load_proc(s_hKernel32, "SetThreadDescription"); + s_fnGetThreadDescription = load_proc(s_hKernel32, "GetThreadDescription"); } s_SetGetThreadDescriptionInitialized = true; } diff --git a/src/slic3r/GUI/InstanceCheck.hpp b/src/slic3r/GUI/InstanceCheck.hpp index 5f26f1e48f..9bfb3e2500 100644 --- a/src/slic3r/GUI/InstanceCheck.hpp +++ b/src/slic3r/GUI/InstanceCheck.hpp @@ -87,7 +87,6 @@ private: std::condition_variable m_thread_stop_condition; mutable std::mutex m_thread_stop_mutex; bool m_stop{ false }; - bool m_start{ true }; // background thread method void listen(); diff --git a/src/slic3r/GUI/SelectMachinePop.hpp b/src/slic3r/GUI/SelectMachinePop.hpp index 76d38be522..e34a23708c 100644 --- a/src/slic3r/GUI/SelectMachinePop.hpp +++ b/src/slic3r/GUI/SelectMachinePop.hpp @@ -183,7 +183,9 @@ private: HyperLink* m_hyperlink{nullptr}; // ORCA wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; +#if defined(__WINDOWS__) wxBoxSizer * m_sizer_search_bar{nullptr}; +#endif wxSearchCtrl* m_search_bar{nullptr}; wxScrolledWindow * m_scrolledWindow{nullptr}; wxTimer * m_refresh_timer{nullptr}; diff --git a/src/slic3r/GUI/TextureImportDialog.cpp b/src/slic3r/GUI/TextureImportDialog.cpp index 1bf52d792c..2e5c1145e1 100644 --- a/src/slic3r/GUI/TextureImportDialog.cpp +++ b/src/slic3r/GUI/TextureImportDialog.cpp @@ -134,7 +134,9 @@ public: } private: +#if defined(__WXMSW__) || defined(__APPLE__) int m_suspended_count = 0; +#endif }; static bool needs_filament_swatch_border(const wxColour& colour) diff --git a/src/slic3r/Utils/Serial.cpp b/src/slic3r/Utils/Serial.cpp index 4db1acc6b6..f8c03ceb26 100644 --- a/src/slic3r/Utils/Serial.cpp +++ b/src/slic3r/Utils/Serial.cpp @@ -331,7 +331,9 @@ void Serial::set_baud_rate(unsigned baud_rate) speed_t c_ispeed; speed_t c_ospeed; }; +#ifndef BOTHER #define BOTHER CBAUDEX +#endif termios2 ios; handle_errno(::ioctl(handle, TCGETS2, &ios)); From 081bb9a7035795e78d0381f8a67cff898b3b9c33 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 11 Sep 2026 19:27:30 -0500 Subject: [PATCH 190/208] build: clear 41 -Woverloaded-virtual warnings, the last of the category (#15637) Co-authored-by: Raoul Rubien --- src/libslic3r/Config.hpp | 12 ++++++++++++ src/slic3r/GUI/Field.cpp | 10 +++++----- src/slic3r/GUI/Field.hpp | 2 +- src/slic3r/GUI/GUI_ObjectTable.cpp | 4 ++-- src/slic3r/GUI/GUI_ObjectTableSettings.cpp | 2 +- src/slic3r/GUI/GUI_ObjectTableSettings.hpp | 2 +- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 9e4344820d..ea85cda1e7 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -1006,6 +1006,7 @@ public: int getInt() const override { return this->value; } void setInt(int val) override { this->value = val; } ConfigOption* clone() const override { return new ConfigOptionInt(*this); } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionInt &rhs) const throw() { return this->value == rhs.value; } std::string serialize() const override @@ -1048,6 +1049,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionIntsTempl(*this); } ConfigOptionIntsTempl& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionIntsTempl &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionIntsTempl &rhs) const throw() { return this->values < rhs.values; } // Could a special "nil" value be stored inside the vector, indicating undefined value? @@ -1137,6 +1139,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionString(*this); } ConfigOptionString& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionString &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionString &rhs) const throw() { return this->value < rhs.value; } bool empty() const { return this->value.empty(); } @@ -1171,6 +1174,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionStrings(*this); } ConfigOptionStrings& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionStrings &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionStrings &rhs) const throw() { return this->values < rhs.values; } bool is_nil(size_t) const override { return false; } @@ -1215,6 +1219,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPercent(*this); } ConfigOptionPercent& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionFloat::operator==; bool operator==(const ConfigOptionPercent &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPercent &rhs) const throw() { return this->value < rhs.value; } @@ -1257,6 +1262,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPercentsTempl(*this); } ConfigOptionPercentsTempl& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionFloatsTempl::operator==; bool operator==(const ConfigOptionPercentsTempl &rhs) const throw() { return ConfigOptionFloatsTempl::vectors_equal(this->values, rhs.values); } bool operator< (const ConfigOptionPercentsTempl &rhs) const throw() { return ConfigOptionFloatsTempl::vectors_lower(this->values, rhs.values); } @@ -1502,6 +1508,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoint(*this); } ConfigOptionPoint& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionPoint &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPoint &rhs) const throw() { return this->value < rhs.value; } @@ -1539,6 +1546,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoints(*this); } ConfigOptionPoints& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionPoints &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionPoints &rhs) const throw() { return std::lexicographical_compare(this->values.begin(), this->values.end(), rhs.values.begin(), rhs.values.end(), [](const auto &l, const auto &r){ return l < r; }); } @@ -1617,6 +1625,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoint3(*this); } ConfigOptionPoint3& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionPoint3 &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPoint3 &rhs) const throw() { return this->value.x() < rhs.value.x() || (this->value.x() == rhs.value.x() && (this->value.y() < rhs.value.y() || (this->value.y() == rhs.value.y() && this->value.z() < rhs.value.z()))); } @@ -1860,6 +1869,7 @@ public: bool getBool() const override { return this->value; } ConfigOption* clone() const override { return new ConfigOptionBool(*this); } ConfigOptionBool& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionBool &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionBool &rhs) const throw() { return int(this->value) < int(rhs.value); } @@ -1911,6 +1921,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionBoolsTempl(*this); } ConfigOptionBoolsTempl& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionBoolsTempl &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionBoolsTempl &rhs) const throw() { return this->values < rhs.values; } // Could a special "nil" value be stored inside the vector, indicating undefined value? @@ -2163,6 +2174,7 @@ public: ConfigOptionEnumsGenericTempl& operator= (const ConfigOption* opt) { this->set(opt); return *this; } bool operator< (const ConfigOptionInts& rhs) const throw() { return this->values < rhs.values; } + using ConfigOptionInts::operator==; bool operator==(const ConfigOptionInts& rhs) const { if (rhs.type() != this->type()) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index b8cb698ff9..43ece4e10b 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -2805,11 +2805,11 @@ void PointCtrl::BUILD() //temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); temp->Add(y_input); - x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(x_textctrl); }), x_textctrl->GetId()); - y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(y_textctrl); }), y_textctrl->GetId()); + x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_input_value(x_textctrl); }), x_textctrl->GetId()); + y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_input_value(y_textctrl); }), y_textctrl->GetId()); - x_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_value(x_textctrl); }), x_textctrl->GetId()); - y_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_value(y_textctrl); }), y_textctrl->GetId()); + x_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_input_value(x_textctrl); }), x_textctrl->GetId()); + y_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_input_value(y_textctrl); }), y_textctrl->GetId()); // // recast as a wxWindow to fit the calling convention window = dynamic_cast(x_input); @@ -2858,7 +2858,7 @@ bool PointCtrl::value_was_changed(wxTextCtrl* win) return boost::any_cast(m_value) != boost::any_cast(val); } -void PointCtrl::propagate_value(wxTextCtrl* win) +void PointCtrl::propagate_input_value(wxTextCtrl* win) { if (win->GetValue().empty()) on_kill_focus(); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 6219921202..3f55bf5c5a 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -650,7 +650,7 @@ public: void BUILD() override; bool value_was_changed(wxTextCtrl* win); // Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER - void propagate_value(wxTextCtrl* win); + void propagate_input_value(wxTextCtrl* win); void set_value(const Vec2d& value, bool change_event = false); void set_value(const boost::any& value, bool change_event = false) override; boost::any& get_value() override; diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 35508c6113..a496eca6d3 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -2578,7 +2578,7 @@ void ObjectGridTable::OnSelectCell(int row, int col) return; m_panel->m_side_window->Freeze(); if (row == 0 || col == col_filaments) { - m_panel->m_object_settings->UpdateAndShow(row, false, false, false, nullptr, nullptr, std::string()); + m_panel->m_object_settings->UpdateAndShowRow(row, false, false, false, nullptr, nullptr, std::string()); } else { ObjectGridRow* grid_row = m_grid_data[row - 1]; @@ -2588,7 +2588,7 @@ void ObjectGridTable::OnSelectCell(int row, int col) //m_panel->m_object_settings->get_og()->set_name(GUI::from_u8(grid_row->name.value)); //m_panel->m_page_text->SetLabel(GUI::from_u8(grid_row->name.value)); - m_panel->m_object_settings->UpdateAndShow(row, true, is_object, false, object, grid_row->config, grid_col->category); + m_panel->m_object_settings->UpdateAndShowRow(row, true, is_object, false, object, grid_row->config, grid_col->category); std::vector object_volume_ids; ObjectVolumeID object_volume_id; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 2290018419..4cd272840f 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -463,7 +463,7 @@ void ObjectTableSettings::update_config_values(bool is_object, ModelObject* obje m_table->reload_cell_data(m_current_row, category); } -void ObjectTableSettings::UpdateAndShow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category) +void ObjectTableSettings::UpdateAndShowRow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category) { m_current_row = row; m_current_category = category; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp index 39e7e514e2..24e3d427a9 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp @@ -71,7 +71,7 @@ public: //return visible count int update_extra_column_visible_status(ConfigOptionsGroup* option_group, const std::vector& option_keys, ModelConfig* config); void update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& changed_opt_key = ""); - void UpdateAndShow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category); + void UpdateAndShowRow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category); void ValueChanged(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& key); void resetAllValues(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category); void msw_rescale(); From e998ad968aed65ec7e51897ccc15ad84a15978f2 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 11 Sep 2026 20:43:48 -0500 Subject: [PATCH 191/208] ci: cache the Flatpak job's compiled objects with ccache (#15650) --- .github/workflows/build_all.yml | 88 +++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 0ab9cfe41d..570d3203ed 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -283,21 +283,41 @@ jobs: id: fp_cache_key run: echo "key=flatpak-builder-${{ matrix.variant.arch }}-${{ hashFiles('deps/**', 'scripts/flatpak/com.orcaslicer.OrcaSlicer.yml', 'scripts/flatpak/make_deps_tar.sh') }}" >> "$GITHUB_OUTPUT" shell: bash - # Manage flatpak-builder cache externally so PRs restore but never upload + # Manage flatpak-builder cache externally so PRs restore but never upload. + # The compiler cache under it is keyed per run below, so it is left out. - name: Restore flatpak-builder cache if: github.event_name == 'pull_request' uses: actions/cache/restore@v6 with: - path: .flatpak-builder + path: | + .flatpak-builder/* + !.flatpak-builder/ccache key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Save/restore flatpak-builder cache if: github.event_name != 'pull_request' uses: actions/cache@v6 with: - path: .flatpak-builder + path: | + .flatpak-builder/* + !.flatpak-builder/ccache key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- + # Compiler cache for the OrcaSlicer module, as in build_orca.yml. Pull + # requests only restore it; every other run (main, release branches, the + # nightly, a dispatch) saves it. orca_deps stays on the state cache above. + - name: Name the compiler cache leg + run: | + leg="Flatpak-${{ matrix.variant.arch }}" + echo "CCACHE_LEG=$leg" >> "$GITHUB_ENV" + echo "CCACHE_ENTRY=ccache-$leg-${{ github.run_id }}-${{ github.run_attempt }}" >> "$GITHUB_ENV" + shell: bash + - name: Restore compiler cache + uses: actions/cache/restore@v6 + with: + path: .flatpak-builder/ccache + key: ${{ env.CCACHE_ENTRY }} + restore-keys: ccache-${{ env.CCACHE_LEG }}- - name: Disable debug info for faster CI builds run: | sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \ @@ -308,6 +328,33 @@ jobs: sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/com.orcaslicer.OrcaSlicer.yml shell: bash + # flatpak-builder's --ccache only wraps cc and gcc, and the manifest builds + # with clang, so CMake's launcher runs ccache instead; --ccache is still what + # mounts the cache directory into the sandbox. The settings go into that + # directory's own config file, which the sandbox reads too. + - name: Enable compiler cache + run: | + printf ' %s\n' \ + 'CMAKE_C_COMPILER_LAUNCHER: ccache' \ + 'CMAKE_CXX_COMPILER_LAUNCHER: ccache' > "$RUNNER_TEMP/ccache-env.yml" + sed -i "/^ git_commit_hash: /r $RUNNER_TEMP/ccache-env.yml" \ + scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + grep -q '^ CMAKE_CXX_COMPILER_LAUNCHER: ccache$' scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + mkdir -p .flatpak-builder/ccache + export CCACHE_DIR=$PWD/.flatpak-builder/ccache + ccache --set-config=max_size=3G + # The compiler is reinstalled every run, so its mtime means nothing. + ccache --set-config=compiler_check=content + # Headers a fresh checkout has just written, the few files that use + # __DATE__ or __TIME__, and the precompiled header, whose macros ccache + # cannot see. + ccache --set-config=sloppiness=pch_defines,time_macros,include_file_mtime,include_file_ctime + # Hash the includes the compiler reports instead of preprocessing every + # miss before compiling it. + ccache --set-config=depend_mode=true + # The restored directory carries the previous run's counters. + ccache -z + shell: bash - name: Check the manifest keeps orca_deps cacheable run: ./scripts/flatpak/check_manifest_cacheable.sh shell: bash @@ -318,9 +365,42 @@ jobs: with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak manifest-path: scripts/flatpak/com.orcaslicer.OrcaSlicer.yml - cache: false + # cache only turns on flatpak-builder --ccache; the caching itself is above. + cache: true + restore-cache: false + save-cache: false arch: ${{ matrix.variant.arch }} upload-artifact: false + - name: Compiler cache statistics + if: always() + run: | + export CCACHE_DIR=$PWD/.flatpak-builder/ccache + ccache -s -v || ccache -s + shell: bash + # Save the new entry first, then drop the older ones for this leg on this + # ref, so a failed save leaves the previous entry in place. + - name: Save compiler cache + id: ccache_save + if: github.event_name != 'pull_request' + uses: actions/cache/save@v6 + with: + path: .flatpak-builder/ccache + key: ${{ env.CCACHE_ENTRY }} + - name: Drop older compiler cache entries + if: ${{ steps.ccache_save.outcome == 'success' }} + # The container has no gh, so this is the list and delete over the REST API. + continue-on-error: true + env: + GH_TOKEN: ${{ github.token }} + run: | + api="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/caches" + curl -sSf -H "Authorization: Bearer $GH_TOKEN" \ + "$api?ref=$GITHUB_REF&key=ccache-$CCACHE_LEG-&per_page=100" \ + | jq -r --arg keep "$CCACHE_ENTRY" '.actions_caches[] | select(.key != $keep) | .id' \ + | while read -r id; do + curl -sSf -X DELETE -H "Authorization: Bearer $GH_TOKEN" "$api/$id" + done + shell: bash - name: Upload artifacts Flatpak uses: actions/upload-artifact@v7 with: From ccd608678732c801e76cc211d3084ed239989462 Mon Sep 17 00:00:00 2001 From: packerlschupfer <83344883+packerlschupfer@users.noreply.github.com> Date: Sat, 12 Sep 2026 05:17:10 +0200 Subject: [PATCH 192/208] CLI: evaluate compatible_printers_condition in the compat checks (#15449) * CLI: evaluate compatible_printers_condition in the compat checks Slicing from the CLI with --load-settings exits with CLI_PROCESS_NOT_COMPATIBLE (-17), "The selected printer is not compatible with the process preset in the 3mf.", for process/printer pairs the GUI accepts. Reproducible with stock, unmodified Prusa system profiles: orca-slicer --datadir \ --load-settings "/system/Prusa/process/0.20mm SPEED @CORE One HF 0.4.json;/system/Prusa/machine/Prusa CORE One HF 0.4 nozzle.json" \ --load-filaments "/system/Prusa/filament/Prusament PETG @CORE One HF 0.4.json" \ --slice 0 --outputdir /tmp/out model.stl The four compat checks in CLI::run did a literal name match against the `compatible_printers` list only: for (index ...) if (new_print_compatible_printers[index] == new_printer_system_name) process_compatible = true; Process profiles that declare compatibility through `compatible_printers_condition` and leave `compatible_printers` empty are therefore always reported incompatible -- the condition is never consulted. For 0.20mm SPEED @CORE One HF 0.4 that condition is: printer_notes=~/.*PRINTER_MODEL_COREONE[^_a-zA-Z0-9].*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*HF_NOZZLE.*/ The GUI does not have this bug: is_compatible_with_printer() in Preset.cpp treats an empty list as "no explicit constraint" and evaluates the condition in that case. Fix: replace the four loops with a check_compat lambda that calls is_compatible_with_printer() -- the same helper the GUI uses -- wrapping the already-loaded DynamicPrintConfigs in lightweight Preset / PresetWithVendorProfile shells. The 3MF-embedded process/printer full configs are kept in current_process_full_config / current_printer_full_config so the condition can be evaluated for the reprocess paths too; those fall back to the previous literal match when the full config was not preserved. Behaviour is unchanged where an explicit compatible_printers list exists: is_compatible_with_printer() performs the same name match, and returns true when both list and condition are empty, matching the existing "old 3mf, no compatible printers, set to compatible" path. Split out of #13731 (section 1) as a standalone, single-purpose change. Orthogonal to the inherits-chain resolution work in #14718 / #15302 / #15438; those decide which values a preset resolves to, this decides whether the resulting pair is considered compatible. * CLI: translate the 3MF's renamed compatibility keys before the compat check The 3MF fallback fed the project config to is_compatible_with_printer() as-is, but a project config does not carry compatible_printers or compatible_printers_condition. PresetBundle::construct_full_config() erases both and re-emits them as print_compatible_printers and compatible_machine_expression_group; they are renamed back only on the PresetBundle load path, which the CLI does not take. The check therefore saw no list and no condition, read that as 'no constraint' and accepted every printer. That is not just a wrong accept. An early true skips the !process_compatible block that sets machine_switch, so the new printer is never appended to print_compatible_printers and the exported 3MF stays marked compatible only with the printer it came from -- which is exactly what that block exists to prevent. Translate the two keys back before the check. Index 0 of the expression group is the print preset; the group is filled print, filaments, printer. Also note in the comment that profiles/BBL/{process,machine}_full/ are gitignored and generated by nothing in-tree, so current_*_full_config is always empty and this fallback is the only live path -- not the rare non-BBL case the original comment implied. Reported with measurements by HanifKoh in review of #15449. Preset: add a config-level is_compatible_with_printer() overload The CLI holds resolved DynamicPrintConfigs, not Presets, so it wrapped them in throwaway Preset shells at the call site. Moving that into Preset.cpp puts the compatibility policy -- including the documented fail-open on a malformed compatible_printers_condition -- in one place for the GUI and the CLI, rather than leaving a second copy of the plumbing in OrcaSlicer.cpp to drift. Purely additive: neither existing overload changes, so no GUI behaviour moves. Requested by HanifKoh in review of #15449. (cherry picked from commit 14ca1972ef4d3c7d90935d159423013a40a6bd70) * CLI: never overwrite a real compat key with an empty renamed one 7e7f0e3 translated compatible_machine_expression_group[0] into compatible_printers_condition whenever the group vector was non-empty. A project the CLI exported itself carries the real compatible_printers_condition AND an all-empty group, ["", "", ""], so the valid condition was overwritten with "", the check saw no constraint, and every printer was accepted. That fixed GUI-shaped projects and broke CLI-shaped ones. Bisected across six builds re-slicing one CLI-exported CORE One project with an MK4S: every build before 7e7f0e3 gives 'compatible 0' and takes the machine-switch path; with it, 'compatible 1' and no switch. The raw keys now win whenever they carry something; the renamed ones are only a fallback, and an empty value is never written over a real one. Same for the list: print_compatible_printers is used only when compatible_printers is absent or empty and it itself is not. Found by a peer session re-testing the installed build. --- src/OrcaSlicer.cpp | 97 ++++++++++++++++++++++++++++++---------- src/libslic3r/Preset.cpp | 14 ++++++ src/libslic3r/Preset.hpp | 5 +++ 3 files changed, 93 insertions(+), 23 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 7c881047e7..bebd1aad5c 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -53,6 +53,7 @@ using namespace nlohmann; #include "libslic3r/libslic3r.h" #include "libslic3r/Config.hpp" +#include "libslic3r/Preset.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/GCode.hpp" #include "libslic3r/Model.hpp" @@ -1466,6 +1467,10 @@ int CLI::run(int argc, char **argv) std::vector upward_compatible_printers, new_print_compatible_printers, current_print_compatible_printers, current_different_settings; std::vector current_filaments_name, current_filaments_system_name, current_inherits_group, current_extruder_variants, new_extruder_variants, current_print_extruder_variants, new_printer_extruder_variants; DynamicPrintConfig load_process_config, load_machine_config; + //ORCA: full configs of the "current" (3MF-embedded) process/printer presets, kept so that + // compatible_printers_condition can be evaluated for them below. Previously only the + // literal compatible_printers list was extracted. + DynamicPrintConfig current_process_full_config, current_printer_full_config; bool new_process_config_is_system = true, new_printer_config_is_system = true; std::string pipe_name, makerlab_name, makerlab_version, different_process_setting; const std::vector &metadata_name = m_config.option("metadata_name", true)->values; @@ -2680,6 +2685,8 @@ int CLI::run(int argc, char **argv) flush_and_exit(ret); } upward_compatible_printers = config.option("upward_compatible_machine", true)->values; + //ORCA: keep the full config so compatible_printers_condition can be evaluated against it below + current_printer_full_config = std::move(config); } } } @@ -2702,6 +2709,8 @@ int CLI::run(int argc, char **argv) flush_and_exit(ret); } current_print_compatible_printers = config.option("compatible_printers", true)->values; + //ORCA: keep the full config so compatible_printers_condition can be evaluated against it below + current_process_full_config = std::move(config); } } } @@ -2720,46 +2729,88 @@ int CLI::run(int argc, char **argv) for (int index = 0; index < upward_compatible_printers.size(); index++) { BOOST_LOG_TRIVIAL(info) << boost::format("index %1%, upward_compatible_printers %2%")%index %upward_compatible_printers[index]; } + //ORCA: Replace the four manual equality-loop checks below with is_compatible_with_printer(), the + // same helper the GUI uses, which also evaluates compatible_printers_condition. Process + // profiles that declare compatibility via condition only -- leaving compatible_printers + // empty -- were always reported incompatible by the literal-name match, so a CLI slice with + // such a preset exited with CLI_PROCESS_NOT_COMPATIBLE (-17) even though the GUI accepts the + // same pair. Behaviour is unchanged where an explicit list exists: is_compatible_with_printer + // does the same name match, and returns true when both list and condition are empty (which + // matches the "old 3mf, no compatible printers" path below). + auto check_compat = [](const DynamicPrintConfig &process_cfg, + const DynamicPrintConfig &printer_cfg, + const std::string &printer_name) -> bool { + return is_compatible_with_printer(process_cfg, Preset::TYPE_PRINT, printer_cfg, printer_name); + }; + + //ORCA: a 3MF's project config does not carry compatible_printers / compatible_printers_condition. + // PresetBundle::construct_full_config() erases both and re-emits them as + // print_compatible_printers and compatible_machine_expression_group; they are renamed back + // only on the PresetBundle load path, which the CLI does not take. Feeding the project config + // to the check as-is therefore presents no list and no condition, and + // is_compatible_with_printer() reads that as "no constraint" and accepts every printer. + // Translate the two keys back. Index 0 of the expression group is the print preset -- the + // group is filled print, filaments, printer (PresetBundle.cpp). + // The raw keys win whenever they carry something. A project the CLI exported itself has the + // real compatible_printers_condition AND an all-empty compatible_machine_expression_group, + // so copying the group's first entry unconditionally would overwrite a valid condition with + // "" and accept every printer. The renamed keys are only a fallback, and an empty value is + // never written over a real one. + auto cli_process_compat_config = [](const DynamicPrintConfig &project_cfg) -> DynamicPrintConfig { + DynamicPrintConfig cfg = project_cfg; + const auto *raw_list = project_cfg.option("compatible_printers"); + const auto *list = project_cfg.option("print_compatible_printers"); + if ((raw_list == nullptr || raw_list->values.empty()) && list != nullptr && !list->values.empty()) + cfg.set_key_value("compatible_printers", new ConfigOptionStrings(list->values)); + const auto *raw_cond = project_cfg.option("compatible_printers_condition"); + const auto *group = project_cfg.option("compatible_machine_expression_group"); + if ((raw_cond == nullptr || raw_cond->value.empty()) && group != nullptr && !group->values.empty() && + !group->values.front().empty()) + cfg.set_key_value("compatible_printers_condition", new ConfigOptionString(group->values.front())); + return cfg; + }; if (!new_printer_name.empty()) { if (!new_process_name.empty()) { - for (int index = 0; index < new_print_compatible_printers.size(); index++) { - if (new_print_compatible_printers[index] == new_printer_system_name) { - process_compatible = true; - break; - } - } + //new process + new printer: both configs came from --load-settings + process_compatible = check_compat(load_process_config, load_machine_config, new_printer_system_name); BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") %new_printer_name %new_printer_system_name %new_process_name %new_process_system_name %process_compatible; } else { - for (int index = 0; index < current_print_compatible_printers.size(); index++) { - if (current_print_compatible_printers[index] == new_printer_system_name) { - process_compatible = true; - break; - } + //3MF-embedded process vs new printer. current_process_full_config is only populated from + //profiles/BBL/process_full/, so for every other vendor fall back to the 3MF's own project + //config in m_print_config, with its renamed compatibility keys translated back (see + //cli_process_compat_config above). Without this a 3MF built from a condition-only process + //is rejected when re-sliced with the very printer it was made for. + { + //ORCA: profiles/BBL/{process,machine}_full/ are gitignored and not generated in-tree, + // so current_*_full_config is always empty and this fallback is the only live path. + const DynamicPrintConfig process_cfg = current_process_full_config.empty() + ? cli_process_compat_config(m_print_config) + : current_process_full_config; + process_compatible = check_compat(process_cfg, load_machine_config, new_printer_system_name); } BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, old process %3%, inherited from %4% ,compatible %5%") %new_printer_name %new_printer_system_name %current_process_name %current_process_system_name %process_compatible; } } else if (!new_process_name.empty()) { - for (int index = 0; index < new_print_compatible_printers.size(); index++) { - if (new_print_compatible_printers[index] == current_printer_system_name) { - process_compatible = true; - break; - } + //new process vs 3MF-embedded printer. As above, current_printer_full_config only resolves for + //BBL profiles; otherwise evaluate against the 3MF's own project config in m_print_config, which + //holds the embedded printer's printer_notes / nozzle_diameter. + { + const DynamicPrintConfig &printer_cfg = current_printer_full_config.empty() ? m_print_config : current_printer_full_config; + process_compatible = check_compat(load_process_config, printer_cfg, current_printer_system_name); } BOOST_LOG_TRIVIAL(info) << boost::format("old printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") %current_printer_name %current_printer_system_name %new_process_name %new_process_system_name %process_compatible; } else { - //check the compatible of old printer&&process - for (int index = 0; index < current_print_compatible_printers.size(); index++) { - if (current_print_compatible_printers[index] == current_printer_system_name) { - process_compatible = true; - break; - } - } + //both sides 3MF-embedded (pure reprocess) + if (!current_process_full_config.empty() && !current_printer_full_config.empty()) + process_compatible = check_compat(current_process_full_config, current_printer_full_config, current_printer_system_name); + else + process_compatible = std::find(current_print_compatible_printers.begin(), current_print_compatible_printers.end(), current_printer_system_name) != current_print_compatible_printers.end(); if (!process_compatible && current_print_compatible_printers.empty()) { BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf, no compatible printers, set to compatible"); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 3cf85e8054..e974ffd7f8 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -867,6 +867,20 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre return is_compatible_with_printer(preset, active_printer, &config); } +// ORCA: see the header. The CLI resolves --load-settings into bare DynamicPrintConfigs and has no +// Preset objects to hand; without this it would have to reimplement the policy or build the shells +// at every call site. +bool is_compatible_with_printer(const DynamicPrintConfig &preset_config, Preset::Type preset_type, + const DynamicPrintConfig &printer_config, const std::string &printer_name) +{ + Preset preset(preset_type, std::string("__compat_check")); + preset.config = preset_config; + Preset printer(Preset::TYPE_PRINTER, printer_name); + printer.config = printer_config; + return is_compatible_with_printer(PresetWithVendorProfile(preset, nullptr), + PresetWithVendorProfile(printer, nullptr)); +} + void Preset::set_visible_from_appconfig(const AppConfig &app_config) { //BBS: add config related log diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 2653628ead..73052678e8 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -459,6 +459,11 @@ protected: bool is_compatible_with_print (const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer); bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config); bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer); +// ORCA: same check for callers that hold raw configs rather than Presets (the CLI). Wraps them in +// throwaway Preset shells and delegates, so the compatibility policy -- including the fail-open on a +// malformed compatible_printers_condition -- lives in one place for the GUI and the CLI alike. +bool is_compatible_with_printer(const DynamicPrintConfig &preset_config, Preset::Type preset_type, + const DynamicPrintConfig &printer_config, const std::string &printer_name); // Where a preset is being loaded from. `Auto` lets load_presets() infer from the directory path. struct PresetOrigin { From 0888e331b51bf17c23f38df3d1361c12b89a1edb Mon Sep 17 00:00:00 2001 From: Valerii Bokhan <80919135+valerii-bokhan@users.noreply.github.com> Date: Sat, 12 Sep 2026 15:59:13 +0200 Subject: [PATCH 193/208] fix: validate float-or-percent input ranges (#15392) --- localization/i18n/OrcaSlicer.pot | 4 +- localization/i18n/ca/OrcaSlicer_ca.po | 8 +- localization/i18n/cs/OrcaSlicer_cs.po | 8 +- localization/i18n/de/OrcaSlicer_de.po | 8 +- localization/i18n/en/OrcaSlicer_en.po | 4 +- localization/i18n/es/OrcaSlicer_es.po | 8 +- localization/i18n/eu/OrcaSlicer_eu.po | 8 +- localization/i18n/fr/OrcaSlicer_fr.po | 8 +- localization/i18n/hu/OrcaSlicer_hu.po | 8 +- localization/i18n/it/OrcaSlicer_it.po | 8 +- localization/i18n/ja/OrcaSlicer_ja.po | 7 +- localization/i18n/ko/OrcaSlicer_ko.po | 8 +- localization/i18n/lt/OrcaSlicer_lt.po | 8 +- localization/i18n/nl/OrcaSlicer_nl.po | 8 +- localization/i18n/pl/OrcaSlicer_pl.po | 17 +-- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 8 +- localization/i18n/ru/OrcaSlicer_ru.po | 8 +- localization/i18n/sv/OrcaSlicer_sv.po | 8 +- localization/i18n/th/OrcaSlicer_th.po | 8 +- localization/i18n/tr/OrcaSlicer_tr.po | 8 +- localization/i18n/uk/OrcaSlicer_uk.po | 8 +- localization/i18n/vi/OrcaSlicer_vi.po | 8 +- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 8 +- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 8 +- src/slic3r/GUI/Field.cpp | 113 ++++++++++++++------ 25 files changed, 125 insertions(+), 180 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index bbdc0e59be..a063ab0484 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -4995,9 +4995,7 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" #, possible-boost-format diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 373eb6e9fd..4fee47786f 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -5429,13 +5429,9 @@ msgstr "El valor %s està fora de rang. El rang vàlid és de %d a %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"És %s%% or %s %s?\n" -"SÍ per %s%%.\n" -"NO per %s %s." +"És %s%% or %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index b0d64c8005..f79c90bcd1 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -5386,13 +5386,9 @@ msgstr "Hodnota %s je mimo rozsah. Platný rozsah je od %d do %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Je to %s%% nebo %s %s?\n" -"ANO pro %s%%,\n" -"NE pro %s %s." +"Je to %s%% nebo %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index bd25405cc3..2a3e4e19d6 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -5291,13 +5291,9 @@ msgstr "Wert %s ist außerhalb des Bereichs. Der gültige Bereich liegt zwischen #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Heißt es %s%% oder %s %s?\n" -"Ja für %s%%, \n" -"Nein für %s %s." +"Heißt es %s%% oder %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 35c7f8a87a..37485ba662 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -4991,9 +4991,7 @@ msgstr "" #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" #, boost-format diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index efe4c7dbcd..9dfcde53e5 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -5155,13 +5155,9 @@ msgstr "El valor %s está fuera de rango. El rango válido es de %d a %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"¿Es %s%% o %s %s?\n" -"SÍ para %s%%, \n" -"NO para %s %s." +"¿Es %s%% o %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 698941018e..b966a124cb 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -5203,13 +5203,9 @@ msgstr "%s balioa tartetik kanpo dago. Baliozko tartea %d eta %d artekoa da." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%% edo %s %s da?\n" -"BAI %s%%-(r)entzat,\n" -"EZ %s %s-(r)entzat." +"%s%% edo %s %s da?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 6344696234..9d8739babe 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -5241,13 +5241,9 @@ msgstr "La valeur %s est hors plage. La plage valide est comprise entre %d et %d #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Est-ce %s%% ou %s %s ?\n" -"OUI pour %s%%, \n" -"NON pour %s %s." +"Est-ce %s%% ou %s %s ?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 78c06dd4c0..198d3decac 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -5338,13 +5338,9 @@ msgstr "%s érték tartományon kívül van. Az érvényes tartomány: %d - %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%% vagy %s %s?\n" -"IGEN %s%%, \n" -"NEM %s %s." +"%s%% vagy %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index cf5099bca3..bc9a0980f2 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -5339,13 +5339,9 @@ msgstr "Il valore %s è fuori intervallo. L'intervallo valido è da %d a %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"È %s%% o %s %s?\n" -"Sì per %s%%, \n" -"NO per %s %s." +"È %s%% o %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 99cd0d0a83..ed9960bb8a 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -5353,12 +5353,9 @@ msgstr "値%sは範囲外です。有効な範囲は%dから%dです。" #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%% か、それとも %s %sですか?\n" -"%s%% の場合ははい、 %s %s はいいえ。" +"%s%% か、それとも %s %sですか?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 8d12c90228..16dc582437 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -5364,13 +5364,9 @@ msgstr "값 %s이 범위를 벗어났습니다. 유효한 범위는 %d에서 %d #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%% 또는 %s %s입니까?\n" -"%s%%에 대해 예,\n" -"%s %s에 대해 아니요." +"%s%% 또는 %s %s입니까?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 67d02bef6d..0141917d77 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -5325,13 +5325,9 @@ msgstr "Reikšmė %s yra už ribų. Galimas diapazonas yra nuo %d iki %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Ar tai %s%% ar %s %s?\n" -"TAIP %s%%, \n" -"NE %s %s." +"Ar tai %s%% ar %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index eff0fdc6b0..a767093bb8 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -5831,13 +5831,9 @@ msgstr "Waarde %s valt buiten het bereik. Het geldige bereik loopt van %d tot %d #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Is het %s%% or %s %s?\n" -"JA voor %s%%, \n" -"NEE voor %s %s." +"Is het %s%% or %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 6f74f4b602..39b0c71d89 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -5452,13 +5452,9 @@ msgstr "Wartość %s jest spoza zakresu. Poprawny zakres wynosi od %d do %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Czy to %s%% czy %s %s?\n" -"TAK dla %s%%,\n" -"NIE dla %s %s." +"Czy to %s%% czy %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -25436,15 +25432,6 @@ msgstr "" #~ msgid "Low-temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order to avoid extruder clogging, it is not allowed to set the chamber temperature above 45℃." #~ msgstr "W ekstruzorze jest załadowany filament o niskiej temperaturze (PLA/PETG/TPU). Aby uniknąć zatkania ekstruzora, nie wolno ustawiać temperatury komory powyżej 45℃." -#~ msgid "" -#~ "Is it %s%% or %s %s?\n" -#~ "YES for %s%%,\n" -#~ "NO for %s %s." -#~ msgstr "" -#~ "Czy to %s%% czy %s %s?\n" -#~ "TAK dla %s%%,\n" -#~ "NIE dla %s %s." - #~ msgid "Allow multiple materials on the same plate" #~ msgstr "Pozwól na kilka filamentów na tej samej płycie" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 2a3e9a7f53..ca92c4c09e 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -5169,13 +5169,9 @@ msgstr "Valor %s está fora do intervalo. O intervalo válido é de %d para %d." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"É %s%% ou %s %s?\n" -"SIM para %s%%, \n" -"NÃO para %s %s." +"É %s%% ou %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 2e33546ae8..972f853df4 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -5335,13 +5335,9 @@ msgstr "Значение %s выходит за пределы допустим #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Имелось ввиду %s%%? (введено %s %s)\n" -"Да – изменить на %s%%\n" -"Нет – оставить %s %s." +"Имелось ввиду %s%% или %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index b9aa481d4c..472b105744 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -5905,13 +5905,9 @@ msgstr "Värdet %s ligger utanför intervallet. Giltigt intervall är från %d t #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Det är %s%% eller %s %s?\n" -"JA för %s%%, \n" -"NEJ för %s %s." +"Det är %s%% eller %s %s?" # AI Translated #, boost-format diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index ee7430015e..2865914d23 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -5319,13 +5319,9 @@ msgstr "ค่า %s อยู่นอกช่วง ช่วงที่ถ #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"มันคือ %s%% หรือ %s %s?\n" -"ใช่สำหรับ %s%% \n" -"ไม่ สำหรับ %s %s" +"มันคือ %s%% หรือ %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 0cf9d57412..a5c11f5300 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -5382,13 +5382,9 @@ msgstr "Değer %s aralık dışında. Geçerli aralık %d ile %d arasındadır." #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%% mi yoksa %s %s mi?\n" -"%s%% için EVET,\n" -"%s %s için HAYIR." +"%s%% mi yoksa %s %s mi?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index ec9e97bae0..c3ac201896 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -5330,13 +5330,9 @@ msgstr "Значення %s знаходиться за межами діапа #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Це %s%% або %s %s?\n" -"ТАК для %s%%, \n" -"НІ для %s %s." +"Це %s%% або %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index a80f47cfc1..4504b5c95c 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -5635,13 +5635,9 @@ msgstr "Giá trị %s nằm ngoài phạm vi. Phạm vi hợp lệ từ %d đế #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"Là %s%% hay %s %s?\n" -"YES cho %s%%, \n" -"NO cho %s %s." +"Là %s%% hay %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index faa3419ae5..ff2e0fd940 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -5175,13 +5175,9 @@ msgstr "值 %s 超出了范围,有效的范围是从 %d 到 %d 。" #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"%s%%还是%s %s?\n" -"是:%s%%\n" -"否:%s %s" +"%s%%还是%s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 8f17cfdc5d..e0e468fccf 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -5304,13 +5304,9 @@ msgstr "數值 %s 超出範圍。有效範圍是從 %d 到 %d。" #, c-format, boost-format msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +"Is it %s%% or %s %s?" msgstr "" -"是 %s%% 還是 %s %s?\n" -"選『是』代表 %s%%,\n" -"選『否』代表 %s %s。" +"是 %s%% 還是 %s %s?" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 43ece4e10b..74ef3f87c8 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -11,6 +11,7 @@ #include "libslic3r/PrintConfig.hpp" #include +#include #include #include #include @@ -540,51 +541,95 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true case coStrings: case coFloatOrPercent: case coFloatsOrPercents: { - if ((m_opt.type == coFloatOrPercent || m_opt.type == coFloatsOrPercents) && !str.IsEmpty() && str.Last() != '%') - { + if ((m_opt.type == coFloatOrPercent || m_opt.type == coFloatsOrPercents) && !str.IsEmpty() && + !(m_opt.nullable && str == m_na_value)) { + bool update_control = false; + wxString numeric_str = str; double val = 0.; + const char dec_sep = is_decimal_separator_point() ? '.' : ','; const char dec_sep_alt = dec_sep == '.' ? ',' : '.'; - // Replace the first incorrect separator in decimal number. - if (str.Replace(dec_sep_alt, dec_sep, false) != 0) - set_value(str, false); + // Orca: normalize the decimal separator and optional unit before + // detecting the percentage suffix and parsing the numeric part. + update_control |= numeric_str.Replace(dec_sep_alt, dec_sep, false) != 0; + update_control |= numeric_str.Replace(" ", "", true) != 0; + const bool has_literal_unit = numeric_str.EndsWith("mm"); + if (has_literal_unit) { + numeric_str.RemoveLast(2); + update_control = true; + } + bool is_percent = !numeric_str.IsEmpty() && numeric_str.Last() == '%'; + if (is_percent) + numeric_str.RemoveLast(); - - // remove space and "mm" substring, if any exists - str.Replace(" ", "", true); - str.Replace("m", "", true); - - if (!str.ToDouble(&val)) - { + if ((has_literal_unit && is_percent) || !numeric_str.ToDouble(&val) || !std::isfinite(val)) { if (!check_value) { m_value.clear(); break; } show_error(m_parent, _L("Invalid numeric.")); - set_value(double_to_string(val), true); - } - else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) || - (m_opt.sidetext.rfind("mm ") != std::string::npos && val > /*1*/m_opt.max_literal)) && - (m_value.empty() || into_u8(str) != boost::any_cast(m_value))) - { - if (!check_value) { - m_value.clear(); - break; + numeric_str = double_to_string(std::clamp(0., double(m_opt.min), double(m_opt.max))); + is_percent = false; + update_control = true; + } else { + const bool looks_like_missing_percent = !is_percent && !has_literal_unit && + ((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) || + (m_opt.sidetext.rfind("mm ") != std::string::npos && val > m_opt.max_literal)); + // Orca: validate explicit percentages and literal values before + // asking whether an otherwise valid literal was meant as a percentage. + const bool out_of_range = !m_opt.is_value_valid(val); + if (out_of_range) { + if (!check_value) { + m_value.clear(); + break; + } + show_error(m_parent, _L("Value is out of range.")); + val = std::clamp(val, double(m_opt.min), double(m_opt.max)); + // Orca: retain the inferred percent unit when clamping a + // suspicious unitless value, so 2000 becomes 100%, not 100 mm. + is_percent |= looks_like_missing_percent; + numeric_str = double_to_string(val); + update_control = true; + } else { + const bool value_changed = m_value.empty() || into_u8(str) != boost::any_cast(m_value); + if (looks_like_missing_percent && value_changed) { + if (!check_value) { + m_value.clear(); + break; + } + + const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm"; + const wxString stVal = numeric_str; + const wxString msg_text = from_u8((boost::format(_utf8(L("Is it %s%% or %s %s?"))) % + stVal % stVal % sidetext).str()); + WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO); + dialog.SetButtonLabel(wxID_YES, stVal + _L("%")); + dialog.SetButtonLabel(wxID_NO, stVal + " " + _L(sidetext)); + dialog.GetSizer()->SetSizeHints(&dialog); + dialog.Fit(); + dialog.CenterOnParent(); + is_percent = dialog.ShowModal() == wxID_YES; + update_control = true; + } } - const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm"; - const wxString stVal = double_to_string(val, 2); - const wxString msg_text = from_u8((boost::format(_utf8(L("Is it %s%% or %s %s?\n" - "YES for %s%%, \n" - "NO for %s %s."))) % - stVal % stVal % sidetext % stVal % stVal % sidetext) - .str()); - WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO); - if ((val > 100) && dialog.ShowModal() == wxID_YES) { - set_value(from_u8((boost::format("%s%%") % stVal).str()), false /*true*/); - str += "%%"; - } else - set_value(stVal, false); // it's no needed but can be helpful, when inputted value contained "," instead of "." + // Orca: also enforce the literal limit after clamping an explicit mm input. + if (!is_percent && m_opt.sidetext.rfind("mm ") != std::string::npos && val > m_opt.max_literal) { + if (!check_value) { + m_value.clear(); + break; + } + if (!out_of_range) + show_error(m_parent, _L("Value is out of range.")); + val = m_opt.max_literal; + numeric_str = double_to_string(val); + update_control = true; + } + } + + if (update_control) { + str = numeric_str + (is_percent ? "%" : ""); + set_value(str, true); } } if (m_opt.opt_key == "thumbnails") { From e7ca4fb87e479e4fa280253e0ad48ee375bdc8f1 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 12 Sep 2026 10:09:39 -0500 Subject: [PATCH 194/208] build: trim GUI_App.hpp includes so edits stop rebuilding the whole GUI (#15644) --- src/OrcaSlicer.cpp | 3 ++- src/slic3r/GUI/AMSDryControl.cpp | 1 + src/slic3r/GUI/AMSDryControl.hpp | 1 + src/slic3r/GUI/AMSMaterialsSetting.cpp | 2 ++ src/slic3r/GUI/BaseTransparentDPIFrame.hpp | 2 ++ src/slic3r/GUI/CalibrationWizard.cpp | 1 + .../GUI/CalibrationWizardPresetPage.cpp | 2 ++ src/slic3r/GUI/CalibrationWizardSavePage.cpp | 1 + src/slic3r/GUI/CapsuleButton.cpp | 1 + src/slic3r/GUI/ColorDecomposeSupport.cpp | 1 + src/slic3r/GUI/ConfigManipulation.cpp | 1 + src/slic3r/GUI/DailyTips.cpp | 1 + src/slic3r/GUI/DeviceCore/DevCalib.cpp | 2 ++ .../GUI/DeviceCore/DevFilaBlackList.cpp | 2 ++ src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp | 1 + src/slic3r/GUI/DeviceManager.cpp | 2 ++ src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp | 1 + src/slic3r/GUI/DragCanvas.cpp | 1 + src/slic3r/GUI/EncodedFilament.cpp | 3 +++ src/slic3r/GUI/ExportPresetBundleDialog.cpp | 5 +++++ src/slic3r/GUI/ExtraRenderers.cpp | 1 + src/slic3r/GUI/ExtrusionCalibration.cpp | 1 + src/slic3r/GUI/FilamentMapPanel.cpp | 1 + src/slic3r/GUI/GLTexture.cpp | 2 ++ src/slic3r/GUI/GUI_App.cpp | 8 ++++++++ src/slic3r/GUI/GUI_App.hpp | 19 ++++++++++--------- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 2 ++ src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp | 1 + src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp | 1 + src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp | 1 + src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp | 2 ++ src/slic3r/GUI/HttpServer.cpp | 4 ++++ src/slic3r/GUI/IMSlider.cpp | 1 + src/slic3r/GUI/ImageDPIFrame.hpp | 2 ++ src/slic3r/GUI/ImageGrid.cpp | 2 +- src/slic3r/GUI/Jobs/BindJob.cpp | 4 ++++ src/slic3r/GUI/Jobs/SendJob.cpp | 2 ++ src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp | 1 + src/slic3r/GUI/MainFrame.hpp | 1 + src/slic3r/GUI/MediaFilePanel.cpp | 3 +++ src/slic3r/GUI/MediaPlayCtrl.cpp | 6 ++++++ src/slic3r/GUI/Mouse3DController.cpp | 1 + src/slic3r/GUI/PartPlate.cpp | 1 + src/slic3r/GUI/PartSkipDialog.cpp | 1 + src/slic3r/GUI/Plater.hpp | 1 + src/slic3r/GUI/PluginsConfigDialog.cpp | 1 + src/slic3r/GUI/PluginsDialog.cpp | 1 + src/slic3r/GUI/Preferences.cpp | 1 + src/slic3r/GUI/PrivacyUpdateDialog.cpp | 1 + src/slic3r/GUI/RammingChart.cpp | 1 + src/slic3r/GUI/ReleaseNote.hpp | 1 + src/slic3r/GUI/SendMultiMachinePage.cpp | 1 + src/slic3r/GUI/SendMultiMachinePage.hpp | 3 +++ src/slic3r/GUI/TroubleshootDialog.cpp | 2 ++ src/slic3r/GUI/UserManager.cpp | 2 ++ src/slic3r/GUI/WebGuideDialog.hpp | 2 ++ src/slic3r/GUI/Widgets/CheckList.cpp | 1 + src/slic3r/GUI/Widgets/MultiNozzleSync.cpp | 2 ++ src/slic3r/GUI/Widgets/WebView.cpp | 8 +++++++- src/slic3r/GUI/WipeTowerDialog.cpp | 1 + src/slic3r/Utils/3DPrinterOS.cpp | 3 +++ src/slic3r/Utils/BBLCloudServiceAgent.cpp | 3 +++ src/slic3r/Utils/CalibUtils.cpp | 1 + src/slic3r/Utils/CloudProvider.hpp | 11 +++++++++++ src/slic3r/Utils/CrealityPrintAgent.cpp | 2 ++ src/slic3r/Utils/ICloudServiceAgent.hpp | 4 +--- src/slic3r/Utils/MoonrakerPrinterAgent.cpp | 1 + src/slic3r/Utils/OrcaCloudServiceAgent.cpp | 1 + src/slic3r/Utils/PresetUpdater.cpp | 1 + src/slic3r/Utils/Process.cpp | 1 + src/slic3r/Utils/QidiPrinterAgent.cpp | 2 ++ src/slic3r/Utils/SnapmakerPrinterAgent.cpp | 2 ++ src/slic3r/plugin/PluginResolver.cpp | 1 + 73 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 src/slic3r/Utils/CloudProvider.hpp diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index bebd1aad5c..d3e24437fb 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -78,8 +78,9 @@ using namespace nlohmann; #include "libslic3r/ObjColorUtils.hpp" #include "OrcaSlicer.hpp" -//BBS: add exception handler for win32 +#include #include +//BBS: add exception handler for win32 #ifdef WIN32 #include "dev-utils/BaseException.h" #endif diff --git a/src/slic3r/GUI/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index c191e24eac..eb5ddb5d4e 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -1,6 +1,7 @@ #include "AMSDryControl.hpp" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "slic3r/GUI/DeviceCore/DevExtruderSystem.h" diff --git a/src/slic3r/GUI/AMSDryControl.hpp b/src/slic3r/GUI/AMSDryControl.hpp index 223fe137e2..6c5df86849 100644 --- a/src/slic3r/GUI/AMSDryControl.hpp +++ b/src/slic3r/GUI/AMSDryControl.hpp @@ -14,6 +14,7 @@ //Previous defintions class wxGrid; +class ProgressBar; namespace Slic3r { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 68f1b44212..f0fdf950a0 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -2,6 +2,8 @@ #include "ExtrusionCalibration.hpp" #include "MsgDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "libslic3r/Preset.hpp" #include "I18N.hpp" #include diff --git a/src/slic3r/GUI/BaseTransparentDPIFrame.hpp b/src/slic3r/GUI/BaseTransparentDPIFrame.hpp index 35ed51ddfe..7dc83b4d46 100644 --- a/src/slic3r/GUI/BaseTransparentDPIFrame.hpp +++ b/src/slic3r/GUI/BaseTransparentDPIFrame.hpp @@ -5,8 +5,10 @@ #include #include "GUI_App.hpp" #include "GUI_Utils.hpp" +#include class Button; +class Label; class CheckBox; namespace Slic3r { namespace GUI { class CapsuleButton; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index 7496d59a51..f80562578d 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1,6 +1,7 @@ #include "CalibrationWizard.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "MsgDialog.hpp" #include "CalibrationWizardPage.hpp" #include "../../libslic3r/calib.hpp" diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index c6d491a930..7a83d39dd3 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1,5 +1,7 @@ #include #include "CalibrationWizardPresetPage.hpp" +#include "GUI.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" #include "MsgDialog.hpp" diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp index f7699cfab0..427f022d1c 100644 --- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -1,4 +1,5 @@ #include "CalibrationWizardSavePage.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" #include "MsgDialog.hpp" diff --git a/src/slic3r/GUI/CapsuleButton.cpp b/src/slic3r/GUI/CapsuleButton.cpp index 8afe39889e..8d71f9911e 100644 --- a/src/slic3r/GUI/CapsuleButton.cpp +++ b/src/slic3r/GUI/CapsuleButton.cpp @@ -1,5 +1,6 @@ #include "GUI_App.hpp" #include "CapsuleButton.hpp" +#include "Widgets/StateColor.hpp" #include #include "wx/graphics.h" #include "Widgets/Label.hpp" diff --git a/src/slic3r/GUI/ColorDecomposeSupport.cpp b/src/slic3r/GUI/ColorDecomposeSupport.cpp index 6621b97059..ea67564208 100644 --- a/src/slic3r/GUI/ColorDecomposeSupport.cpp +++ b/src/slic3r/GUI/ColorDecomposeSupport.cpp @@ -1,4 +1,5 @@ #include "ColorDecomposeSupport.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "MixedFilamentDialog.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 8eab1c785c..5bd74e107d 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -2,6 +2,7 @@ #include "ConfigManipulation.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "DeviceCore/DevConfigUtil.h" #include "format.hpp" #include "libslic3r/Config.hpp" #include "libslic3r/Model.hpp" diff --git a/src/slic3r/GUI/DailyTips.cpp b/src/slic3r/GUI/DailyTips.cpp index d2f758bf5f..894c0316bb 100644 --- a/src/slic3r/GUI/DailyTips.cpp +++ b/src/slic3r/GUI/DailyTips.cpp @@ -1,4 +1,5 @@ #include "DailyTips.hpp" +#include "slic3r/GUI/Widgets/Label.hpp" #ifndef IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS diff --git a/src/slic3r/GUI/DeviceCore/DevCalib.cpp b/src/slic3r/GUI/DeviceCore/DevCalib.cpp index cf7ee1d90e..ddf71e0c62 100644 --- a/src/slic3r/GUI/DeviceCore/DevCalib.cpp +++ b/src/slic3r/GUI/DeviceCore/DevCalib.cpp @@ -1,5 +1,7 @@ #include #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/UserNotification.hpp" #include "libslic3r/PrintConfig.hpp" diff --git a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp index b59499d9d9..7ae990730a 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp @@ -4,6 +4,8 @@ #include #include "DevFilaBlackList.h" +#include "slic3r/Utils/NetworkAgent.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "DevFilaSystem.h" #include "DevManager.h" #include "DevConfigUtil.h" diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp index e0a230969b..881aa75d20 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp @@ -1,5 +1,6 @@ #include #include "DevFilaSystem.h" +#include "slic3r/Utils/NetworkAgent.hpp" #include "DevNozzleSystem.h" // DevNozzle / DevNozzleSystem for GetNozzleFlowStringByAmsId // TODO: remove this include diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 782574c220..fd60f80d25 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1,5 +1,7 @@ #include "libslic3r/libslic3r.h" #include "DeviceManager.hpp" +#include "HMS.hpp" +#include "I18N.hpp" #include "libslic3r/Time.hpp" #include "libslic3r/Thread.hpp" #include "slic3r/Utils/NetworkAgent.hpp" diff --git a/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp b/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp index 64195d97a8..16ae8812be 100644 --- a/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp @@ -1,6 +1,7 @@ #include "wgtMsgPanel.h" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/Widgets/Label.hpp" #include "slic3r/GUI/Widgets/StateColor.hpp" #include "slic3r/GUI/wxExtensions.hpp" diff --git a/src/slic3r/GUI/DragCanvas.cpp b/src/slic3r/GUI/DragCanvas.cpp index 04d51c0861..66a9acecbc 100644 --- a/src/slic3r/GUI/DragCanvas.cpp +++ b/src/slic3r/GUI/DragCanvas.cpp @@ -1,6 +1,7 @@ #include "DragCanvas.hpp" #include "wxExtensions.hpp" #include "GUI_App.hpp" +#include "Widgets/StateColor.hpp" namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/EncodedFilament.cpp b/src/slic3r/GUI/EncodedFilament.cpp index f9054e7f6d..0cab200386 100644 --- a/src/slic3r/GUI/EncodedFilament.cpp +++ b/src/slic3r/GUI/EncodedFilament.cpp @@ -1,7 +1,10 @@ #include "EncodedFilament.hpp" +#include #include "GUI_App.hpp" +using json = nlohmann::json; + namespace Slic3r { diff --git a/src/slic3r/GUI/ExportPresetBundleDialog.cpp b/src/slic3r/GUI/ExportPresetBundleDialog.cpp index 6d642ee1c1..9d2f26bf6a 100644 --- a/src/slic3r/GUI/ExportPresetBundleDialog.cpp +++ b/src/slic3r/GUI/ExportPresetBundleDialog.cpp @@ -1,4 +1,5 @@ #include "ExportPresetBundleDialog.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "GUI_App.hpp" #include "ConfigWizard.hpp" #include "I18N.hpp" @@ -12,7 +13,11 @@ #include #include #include +#include #include + +using json = nlohmann::json; + namespace Slic3r { namespace GUI { ExportPresetBundleDialog::ExportPresetBundleDialog( diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 18811ef241..3abfdb82ff 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -1,6 +1,7 @@ #include "ExtraRenderers.hpp" #include "wxExtensions.hpp" #include "GUI.hpp" +#include "I18N.hpp" #include "BitmapComboBox.hpp" #include "Plater.hpp" #include "Widgets/ComboBox.hpp" diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index 933e2ac211..1f07823d61 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -1,5 +1,6 @@ #include "ExtrusionCalibration.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "MsgDialog.hpp" #include "libslic3r/Preset.hpp" #include diff --git a/src/slic3r/GUI/FilamentMapPanel.cpp b/src/slic3r/GUI/FilamentMapPanel.cpp index 81117bc2a6..0f3cc7217d 100644 --- a/src/slic3r/GUI/FilamentMapPanel.cpp +++ b/src/slic3r/GUI/FilamentMapPanel.cpp @@ -1,5 +1,6 @@ #include "FilamentMapPanel.hpp" #include "GUI_App.hpp" +#include "I18N.hpp" #include "Plater.hpp" #include "Widgets/MultiNozzleSync.hpp" // manuallySetNozzleCount producer for extruder_nozzle_stats #include diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index d670181b1b..fbdb308c56 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -9,6 +9,7 @@ #include "3DScene.hpp" #include "OpenGLManager.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "GLModel.hpp" #include @@ -31,6 +32,7 @@ #include "GUI_App.hpp" #include #include +#include namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index fee18b4799..966cf49013 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,6 +3,14 @@ #include "libslic3r/Technologies.hpp" #include "libslic3r/Platform.hpp" #include "GUI_App.hpp" +#include "BindDialog.hpp" +#include "DeviceManager.hpp" +#include "HMS.hpp" +#include "PresetBundleDialog.hpp" +#include "WebUserLoginDialog.hpp" +#include "WebViewDialog.hpp" +#include "slic3r/Utils/BBLCloudServiceAgent.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "slic3r/GUI/UserManager.hpp" diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 2569e10271..f6f0b81c92 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -1,23 +1,17 @@ #ifndef slic3r_GUI_App_hpp_ #define slic3r_GUI_App_hpp_ +#include #include #include #include "ActionRegistry.hpp" #include "ImGuiWrapper.hpp" #include "ConfigWizard.hpp" #include "OpenGLManager.hpp" -#include "PresetBundleDialog.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" -#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/UserNotification.hpp" -#include "slic3r/Utils/NetworkAgent.hpp" -#include "slic3r/Utils/BBLCloudServiceAgent.hpp" -#include "slic3r/GUI/WebViewDialog.hpp" -#include "slic3r/GUI/WebUserLoginDialog.hpp" -#include "slic3r/GUI/BindDialog.hpp" -#include "slic3r/GUI/HMS.hpp" +#include "slic3r/Utils/CloudProvider.hpp" #include "slic3r/GUI/Jobs/UpgradeNetworkJob.hpp" #include "slic3r/GUI/HttpServer.hpp" #include "../Utils/PrintHost.hpp" @@ -64,9 +58,14 @@ class ModelObject; class Model; class UserManager; class DeviceManager; +class MachineObject; class NetworkAgent; +class IPrinterAgent; class TaskManager; +// Same typedef as in bambu_networking.hpp, so this header need not include it. +typedef std::function WasCancelledFn; + namespace GUI{ class RemovableDriveManager; @@ -85,6 +84,8 @@ class ParamsDialog; class HMSQuery; class ModelMallDialog; class PingCodeBindDialog; +class PresetBundleDialog; +class ZUserLogin; class NetworkErrorDialog; class PluginsDialog; class SpeedDialWebDialog; @@ -829,7 +830,7 @@ wxDECLARE_EVENT(EVT_UPDATE_BUNDLE_COMPLETE, wxCommandEvent); bool is_support_filament(int extruder_id, bool strict_check = true); bool is_soluble_filament(int extruder_id); // check if the filament for model is in the list -bool has_filaments(const std::vector& model_filaments); +bool has_filaments(const std::vector& model_filaments); } // namespace GUI } // Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 012e62b2bc..99ad00fe55 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -1,5 +1,7 @@ // Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoAdvancedCut.hpp" +#include "slic3r/GUI/Widgets/ProgressDialog.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp index 904e7d0a07..6d9e810815 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp @@ -1,6 +1,7 @@ #include "GLGizmoBrimEars.hpp" #include #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" #include "slic3r/GUI/GUI_App.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp index 6689fcdcea..d807e466c8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp @@ -4,6 +4,7 @@ #include "libslic3r/Print.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index e21498163a..6f7d6fed58 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -1,4 +1,5 @@ #include "GLGizmoMeasure.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp b/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp index 00d608b80a..75dca0855d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp @@ -32,6 +32,8 @@ */ +using namespace std::string_view_literals; + namespace Slic3r::GUI::GLGizmoUtils { void render_tooltip_button( diff --git a/src/slic3r/GUI/HttpServer.cpp b/src/slic3r/GUI/HttpServer.cpp index afdc46e9f0..ef26f20173 100644 --- a/src/slic3r/GUI/HttpServer.cpp +++ b/src/slic3r/GUI/HttpServer.cpp @@ -4,6 +4,10 @@ #include "slic3r/Utils/Http.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/Utils/BBLNetworkPlugin.hpp" +#include "libslic3r/Thread.hpp" +#include + +using json = nlohmann::json; namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 0d0d6739f8..fa777b6a37 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1,6 +1,7 @@ #include "IMSlider.hpp" #include "libslic3r/GCode.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "NotificationManager.hpp" #include "Widgets/StateColor.hpp" #ifndef IMGUI_DEFINE_MATH_OPERATORS diff --git a/src/slic3r/GUI/ImageDPIFrame.hpp b/src/slic3r/GUI/ImageDPIFrame.hpp index 817ef6be18..c22d296492 100644 --- a/src/slic3r/GUI/ImageDPIFrame.hpp +++ b/src/slic3r/GUI/ImageDPIFrame.hpp @@ -3,6 +3,8 @@ #include "GUI_App.hpp" #include "GUI_Utils.hpp" +#include +#include class wxStaticBitmap; namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index abef6f0f12..f6bf25d77c 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -521,7 +521,7 @@ void ImageGrid::render(wxDC& dc) if (!m_status_msg.IsEmpty()) { auto si = m_status_icon.GetBmpSize(); auto st = dc.GetMultiLineTextExtent(m_status_msg); - auto rect = wxRect{0, 0, max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size)); + auto rect = wxRect{0, 0, std::max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size)); dc.DrawBitmap(m_status_icon.bmp(), rect.x + (rect.width - si.x) / 2, rect.y); dc.SetTextForeground(wxColor(0x909090)); dc.DrawText(m_status_msg, rect.x + (rect.width - st.x) / 2, rect.GetBottom() - st.y); diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 61c430c6e6..76af712f63 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -3,6 +3,10 @@ #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/DeviceManager.hpp" +#include "slic3r/GUI/HMS.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/GUI/DeviceCore/DevManager.h" diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 67ce02b476..d27b18f24b 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -1,4 +1,6 @@ #include "SendJob.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "libslic3r/MTUtils.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/PresetBundle.hpp" diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp index 6cd88ac5d3..7090f0e2e0 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp @@ -2,6 +2,7 @@ #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" #include "slic3r/Utils/Http.hpp" namespace Slic3r { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 44e0547f50..5340115609 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -66,6 +66,7 @@ class Tab; class PrintHostQueueDialog; class Plater; class MainFrame; +class WebViewPanel; class ParamsDialog; #ifdef __WXGTK__ class ResizeEdgePanel; diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 36316f8ff5..e9e1f56b03 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -2,6 +2,9 @@ #include "ImageGrid.h" #include "I18N.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "DeviceManager.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "Plater.hpp" #include "Widgets/Button.hpp" #include "Widgets/SwitchButton.hpp" diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 29c8c9f664..557d859cf7 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -3,6 +3,11 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/Label.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "DeviceManager.hpp" +#include "DeviceCore/DevConfigUtil.h" +#include "slic3r/Utils/NetworkAgent.hpp" +#include "libslic3r/Thread.hpp" #include "libslic3r/AppConfig.hpp" #include "I18N.hpp" #include "MsgDialog.hpp" @@ -13,6 +18,7 @@ #include #include #include +#include #include #undef pid_t #include diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index 8ed91d461f..0317342412 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -1,6 +1,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/PresetBundle.hpp" #include "Mouse3DController.hpp" +#include "GUI.hpp" #include "Camera.hpp" #include "GUI_App.hpp" diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index d38ab5e0ac..c9370cc282 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "libslic3r/libslic3r.h" diff --git a/src/slic3r/GUI/PartSkipDialog.cpp b/src/slic3r/GUI/PartSkipDialog.cpp index b9dd7d5007..9bd6687757 100644 --- a/src/slic3r/GUI/PartSkipDialog.cpp +++ b/src/slic3r/GUI/PartSkipDialog.cpp @@ -1,5 +1,6 @@ #include "GUI_Utils.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include #include #include diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 26cd06978b..84e64acea0 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -42,6 +42,7 @@ class Button; namespace Slic3r { class BuildVolume; +class MachineObject; enum class BuildVolume_Type : char; class Model; class ModelObject; diff --git a/src/slic3r/GUI/PluginsConfigDialog.cpp b/src/slic3r/GUI/PluginsConfigDialog.cpp index 0241b47b8c..9a79588af1 100644 --- a/src/slic3r/GUI/PluginsConfigDialog.cpp +++ b/src/slic3r/GUI/PluginsConfigDialog.cpp @@ -1,6 +1,7 @@ #include "PluginsConfigDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "format.hpp" diff --git a/src/slic3r/GUI/PluginsDialog.cpp b/src/slic3r/GUI/PluginsDialog.cpp index a39fcbc535..2bac7eddca 100644 --- a/src/slic3r/GUI/PluginsDialog.cpp +++ b/src/slic3r/GUI/PluginsDialog.cpp @@ -2,6 +2,7 @@ #include "GUI.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "OrcaCloudServiceAgent.hpp" #include "slic3r/plugin/PluginConfig.hpp" diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 7d80147efa..73f3a2c90a 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -2,6 +2,7 @@ #include "OptionsGroup.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" +#include "WebViewDialog.hpp" #include "Plater.hpp" #include "GLCanvas3D.hpp" // ORCA: for live preview refresh when toggling "Dim lower layers" #include "MsgDialog.hpp" diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index 92d6d6c8c7..c417767a42 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -1,5 +1,6 @@ #include "PrivacyUpdateDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "BitmapCache.hpp" #include #include diff --git a/src/slic3r/GUI/RammingChart.cpp b/src/slic3r/GUI/RammingChart.cpp index 96cd3b65a7..29116b12cb 100644 --- a/src/slic3r/GUI/RammingChart.cpp +++ b/src/slic3r/GUI/RammingChart.cpp @@ -7,6 +7,7 @@ #include "GUI.hpp" #include "GUI_App.hpp" #include "I18N.hpp" +#include "Widgets/StateColor.hpp" wxDEFINE_EVENT(EVT_WIPE_TOWER_CHART_CHANGED, wxCommandEvent); diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 0c11dc2f58..cfd372bc97 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -35,6 +35,7 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" #include "Widgets/ScrolledWindow.hpp" +#include "Widgets/HyperLink.hpp" #include #include diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 2d1b713264..cafbb360e6 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -3,6 +3,7 @@ #include "I18N.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/bambu_networking.hpp" #include "MainFrame.hpp" #include "Widgets/RadioBox.hpp" #include diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index a63bc51bb0..eadd78eb0a 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -15,6 +15,9 @@ #include "SelectMachine.hpp" namespace Slic3r { + +struct PrintParams; + namespace GUI { #define SEND_LEFT_PADDING_LEFT 15 #define SEND_LEFT_PRINTABLE 40 diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index 5acb75c6ea..7cbb00b5d8 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -6,6 +6,8 @@ #include "GUI_App.hpp" #include "MainFrame.hpp" +#include +#include #include #include #include "wx/clipbrd.h" diff --git a/src/slic3r/GUI/UserManager.cpp b/src/slic3r/GUI/UserManager.cpp index 456582e896..e874c2158d 100644 --- a/src/slic3r/GUI/UserManager.cpp +++ b/src/slic3r/GUI/UserManager.cpp @@ -1,9 +1,11 @@ #include "libslic3r/libslic3r.h" #include "UserManager.hpp" #include "DeviceManager.hpp" +#include "BindDialog.hpp" #include "NetworkAgent.hpp" #include "GUI.hpp" #include "GUI_App.hpp" +#include "I18N.hpp" #include "MsgDialog.hpp" #include "DeviceCore/DevManager.h" diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index c4cfc8bf6d..1ad60175ae 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -43,6 +43,8 @@ namespace Slic3r { namespace GUI { class GuideFrame : public DPIDialog { public: + using json = nlohmann::json; + GuideFrame(GUI_App *pGUI, long style = wxCAPTION | wxCLOSE_BOX | wxSYSTEM_MENU); virtual ~GuideFrame(); diff --git a/src/slic3r/GUI/Widgets/CheckList.cpp b/src/slic3r/GUI/Widgets/CheckList.cpp index cd0dcebff3..c0101441ff 100644 --- a/src/slic3r/GUI/Widgets/CheckList.cpp +++ b/src/slic3r/GUI/Widgets/CheckList.cpp @@ -1,6 +1,7 @@ #include "CheckList.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" CheckList::CheckList( wxWindow* parent, diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp index 20944df553..9278565c47 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index e281d97407..a29a3cb725 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -1,9 +1,13 @@ #include "WebView.hpp" +#include "slic3r/GUI/Widgets/StateColor.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/Utils/MacDarkMode.hpp" #include +#include +#include + #include #include #if wxUSE_WEBVIEW_EDGE @@ -12,6 +16,8 @@ #include #endif #include +#include +#include #if defined(__WIN32__) || defined(__WXMAC__) #include "wx/private/jsscriptwrapper.h" #endif @@ -73,7 +79,7 @@ DWORD DownloadAndInstallWV2RT() { }) .perform_sync(); // Sleep for 1 second to wait for the buffer writen into disk - std::this_thread::sleep_for(1000ms); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); if (downloaded) { // Either Package the WebView2 Bootstrapper with your app or download it using fwlink // Then invoke install at Runtime. diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index d4fbcc6fe3..9a473c7c8a 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -6,6 +6,7 @@ #include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "WebViewDialog.hpp" #include "MsgDialog.hpp" #include "format.hpp" #include "libslic3r/Color.hpp" diff --git a/src/slic3r/Utils/3DPrinterOS.cpp b/src/slic3r/Utils/3DPrinterOS.cpp index 61fcc80d5b..503dbe63e3 100755 --- a/src/slic3r/Utils/3DPrinterOS.cpp +++ b/src/slic3r/Utils/3DPrinterOS.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -30,6 +31,8 @@ #include +using json = nlohmann::json; + namespace fs = boost::filesystem; namespace pt = boost::property_tree; diff --git a/src/slic3r/Utils/BBLCloudServiceAgent.cpp b/src/slic3r/Utils/BBLCloudServiceAgent.cpp index 846e4ce509..801ad1cf57 100644 --- a/src/slic3r/Utils/BBLCloudServiceAgent.cpp +++ b/src/slic3r/Utils/BBLCloudServiceAgent.cpp @@ -8,6 +8,9 @@ #include #include #include + +using json = nlohmann::json; + namespace Slic3r { diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 499228d13c..25aad85d2f 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -3,6 +3,7 @@ #include "../GUI/GUI_App.hpp" #include "../GUI/DeviceCore/DevStorage.h" #include "../GUI/DeviceManager.hpp" +#include "NetworkAgent.hpp" #include "../GUI/Jobs/ProgressIndicator.hpp" #include "../GUI/PartPlate.hpp" #include "libslic3r/CutUtils.hpp" diff --git a/src/slic3r/Utils/CloudProvider.hpp b/src/slic3r/Utils/CloudProvider.hpp new file mode 100644 index 0000000000..0f03683222 --- /dev/null +++ b/src/slic3r/Utils/CloudProvider.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include + +namespace Slic3r { + +// Identifiers of the cloud services an ICloudServiceAgent can stand for. +static const std::string ORCA_CLOUD_PROVIDER("orca"); +static const std::string BBL_CLOUD_PROVIDER("bbl"); + +} // namespace Slic3r diff --git a/src/slic3r/Utils/CrealityPrintAgent.cpp b/src/slic3r/Utils/CrealityPrintAgent.cpp index 9b3bd5843e..f340a61267 100644 --- a/src/slic3r/Utils/CrealityPrintAgent.cpp +++ b/src/slic3r/Utils/CrealityPrintAgent.cpp @@ -12,6 +12,8 @@ #include #include +using json = nlohmann::json; + namespace Slic3r { namespace { diff --git a/src/slic3r/Utils/ICloudServiceAgent.hpp b/src/slic3r/Utils/ICloudServiceAgent.hpp index 556c253641..7d326eb4c6 100644 --- a/src/slic3r/Utils/ICloudServiceAgent.hpp +++ b/src/slic3r/Utils/ICloudServiceAgent.hpp @@ -2,6 +2,7 @@ #define __I_CLOUD_SERVICE_AGENT_HPP__ #include "bambu_networking.hpp" +#include "CloudProvider.hpp" #include "../../libslic3r/ProjectTask.hpp" #include #include @@ -37,9 +38,6 @@ namespace Slic3r { * implementation. */ -static const std::string ORCA_CLOUD_PROVIDER("orca"); -static const std::string BBL_CLOUD_PROVIDER("bbl"); - struct CloudEvent { std::string provider; // ORCA_CLOUD_PROVIDER or BBL_CLOUD_PROVIDER }; diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index 571d707a9f..384a69d51e 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -3,6 +3,7 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h" #include "slic3r/GUI/DeviceCore/DevManager.h" #include "../GUI/DeviceCore/DevStorage.h" diff --git a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp index 4bfe429cd3..5d129a490e 100644 --- a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp +++ b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 032f9dbf7a..69bfa4217e 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -42,6 +42,7 @@ #include "slic3r/GUI/format.hpp" #include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/Utils/Http.hpp" +#include "slic3r/Utils/bambu_networking.hpp" #include "slic3r/Config/Version.hpp" #include "slic3r/Config/Snapshot.hpp" #include "slic3r/GUI/MarkdownTip.hpp" diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp index 518462bbc9..96da521114 100644 --- a/src/slic3r/Utils/Process.cpp +++ b/src/slic3r/Utils/Process.cpp @@ -21,6 +21,7 @@ #include #endif +#include #include namespace Slic3r { diff --git a/src/slic3r/Utils/QidiPrinterAgent.cpp b/src/slic3r/Utils/QidiPrinterAgent.cpp index 6b05480194..1f437853ba 100644 --- a/src/slic3r/Utils/QidiPrinterAgent.cpp +++ b/src/slic3r/Utils/QidiPrinterAgent.cpp @@ -9,6 +9,8 @@ #include #include +using json = nlohmann::json; + namespace Slic3r { namespace { diff --git a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp index ab7aa9bd52..5783738af7 100644 --- a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp +++ b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp @@ -6,6 +6,8 @@ #include "nlohmann/json.hpp" #include +using json = nlohmann::json; + namespace Slic3r { namespace { diff --git a/src/slic3r/plugin/PluginResolver.cpp b/src/slic3r/plugin/PluginResolver.cpp index 4ba58ee550..6e72929c63 100644 --- a/src/slic3r/plugin/PluginResolver.cpp +++ b/src/slic3r/plugin/PluginResolver.cpp @@ -3,6 +3,7 @@ #include "PluginManager.hpp" #include "../Utils/Http.hpp" #include "../Utils/OrcaCloudServiceAgent.hpp" +#include "../Utils/NetworkAgent.hpp" #include "../GUI/GUI.hpp" #include "../GUI/GUI_App.hpp" #include "../GUI/I18N.hpp" From db9163ec34cdd4080f64ff8bcde24eff0d9c9072 Mon Sep 17 00:00:00 2001 From: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Date: Sat, 12 Sep 2026 13:26:11 -0300 Subject: [PATCH 195/208] Set the CMake policy CMP0177 (#15657) Update CMakeLists.txt --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5620875d4f..85ee9c4232 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,10 @@ endif() cmake_minimum_required(VERSION 3.13) +if(POLICY CMP0177) + cmake_policy(SET CMP0177 NEW) +endif() + # The following line used to be in tests/CMakeLists.txt # Having it there causes rebuilds of all targets on any CMakeLists.txt change under tests/ From c5965fa4d9edc9cfebdaba4dfbdfb3a551f3a888 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Sat, 12 Sep 2026 20:31:28 +0300 Subject: [PATCH 196/208] Fix: clear stale paths when merging perimeter regions (#15662) --- src/libslic3r/Layer.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 1d6c2b0703..b7ec08f856 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -187,6 +187,12 @@ void Layer::make_perimeters() { BOOST_LOG_TRIVIAL(trace) << "Generating perimeters for layer " << this->id(); + const auto clear_generated_extrusions = [](LayerRegion *layer_region) { + layer_region->perimeters.clear(); + layer_region->fills.clear(); + layer_region->thin_fills.clear(); + }; + // keep track of regions whose perimeters we have already generated std::vector done(m_regions.size(), false); @@ -217,13 +223,11 @@ void Layer::make_perimeters() if (this_region.gradient_volume_id() != other_region.gradient_volume_id()) continue; if (is_perimeter_compatible(*m_object->print(), this_region, other_region)) - { - other_layerm->perimeters.clear(); - other_layerm->fills.clear(); - other_layerm->thin_fills.clear(); - layerms.push_back(other_layerm); - done[it - m_regions.begin()] = true; - } + { + clear_generated_extrusions(other_layerm); + layerms.push_back(other_layerm); + done[it - m_regions.begin()] = true; + } } if (layerms.size() == 1) { // optimization @@ -231,6 +235,10 @@ void Layer::make_perimeters() (*layerm)->make_perimeters((*layerm)->slices, {*layerm}, &(*layerm)->fill_surfaces, &(*layerm)->fill_no_overlap_expolygons); (*layerm)->fill_expolygons = to_expolygons((*layerm)->fill_surfaces.surfaces); } else { + // Orca: Unlike the compatible regions above, the initiating region has not + // been cleared yet and may contain paths from a previous incompatible run. + clear_generated_extrusions(*layerm); + SurfaceCollection new_slices; // Use the region with highest infill rate, as the make_perimeters() function below decides on the gap fill based on the infill existence. LayerRegion *layerm_config = layerms.front(); From fe0d47c7a340362d57ed90911cb732d55b50bce0 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 12 Sep 2026 13:04:44 -0500 Subject: [PATCH 197/208] feat(issues): add a crash report template (#15524) --- .github/ISSUE_TEMPLATE/bug_report.yml | 39 +++-- .github/ISSUE_TEMPLATE/crash_report.yml | 183 ++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 22 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/crash_report.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 63f74a069e..6019c2bc8b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,5 +1,5 @@ name: 🐞 Bug Report -description: File a bug report +description: Something behaves incorrectly while Orca Slicer keeps running labels: ["bug"] body: - type: markdown @@ -10,6 +10,8 @@ body: Please note that this is not the place to make feature requests or ask for help. For this, please use the [Feature request](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=feature_request.yml) issue type or you can discuss your idea on our [Discord server](https://discord.gg/P4VE9UY9gJ) with others. + If Orca Slicer closes on its own, freezes or stops responding, please use the [Crash report](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=crash_report.yml) form instead. It asks for the logs a crash needs. + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. - type: checkboxes attributes: @@ -47,7 +49,7 @@ body: id: os_type attributes: label: "Operating System (OS)" - description: "What OSes are you are experiencing issues on?" + description: "What OSes are you experiencing issues on?" multiple: true options: - Linux @@ -86,7 +88,7 @@ body: id: reproduce_steps attributes: label: How to reproduce - description: Please described the detailed steps to reproduce this issue + description: Please describe the detailed steps to reproduce this issue placeholder: | 1. Go to '...' 2. Click on '...' @@ -108,28 +110,23 @@ body: description: What should happen after the above steps? validations: required: true - - type: markdown - id: file_required - attributes: - value: | - Please be sure to add the following files: - * Please upload a ZIP archive containing the **project file** used when the problem arise. Please export it just before or after the problem occurs. Even if you did nothing and/or there is no object, export it! (We need the configurations in project file). - You can export the project file from the application menu in `File`->`Save project as...`, then zip it - * A **log file** for crashes and similar issues. - You can find your log file here: - Windows: `%APPDATA%\OrcaSlicer\log` or usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` - MacOS: `$HOME/Library/Application Support/OrcaSlicer/log` - Linux: `$HOME/.config/OrcaSlicer/log` - If Orca Slicer still starts, you can also reach this directory from the application menu in `Help` -> `Show Configuration Folder` - You can zip the log directory, or just select the newest logs when this issue happens, and zip them - type: textarea id: file_uploads attributes: label: Project file & Debug log uploads - description: Drop the project file and debug log here + description: | + Attach the files with the **Paste, drop, or click to add files** control directly underneath this box. Zip anything that is not a `.log`, `.txt` or image, since GitHub rejects other file types, and keep each file under 25 MB. + + * The **project file** used when the problem happened, zipped. Export it just before or after the problem occurs. Even if you did nothing and there is no object on the plate, export it, since we need the configuration it carries. `File` -> `Save project as...` + * The **log folder**, zipped. `Help` -> `Show Configuration Folder` opens it, or find it at: + * Windows: `%APPDATA%\OrcaSlicer\log`, usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` + * macOS: `$HOME/Library/Application Support/OrcaSlicer/log` + * Linux: `$HOME/.config/OrcaSlicer/log` + * Flatpak: `$HOME/.var/app/com.orcaslicer.OrcaSlicer/config/OrcaSlicer/log` + * If the zip comes out over 25 MB, attach the newest logs from that folder on their own instead. placeholder: | - Project File: `File` -> `Save project as...` then zip it & drop it here - Log File: `Help` -> `Show Configuration Folder`, then zip the log directory, or just select the newest logs in `log` when this issue happens and zip them, then drop the zip file here + Zipped project file + Zipped log folder validations: required: true - type: checkboxes @@ -144,7 +141,5 @@ body: label: Anything else? description: | Screenshots? References? Anything that will give us more context about the issue you are encountering! - - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. validations: required: false diff --git a/.github/ISSUE_TEMPLATE/crash_report.yml b/.github/ISSUE_TEMPLATE/crash_report.yml new file mode 100644 index 0000000000..bcbee11d36 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/crash_report.yml @@ -0,0 +1,183 @@ +name: 💥 Crash Report +description: Orca Slicer closes on its own, freezes or stops responding +labels: ["crash"] +body: + - type: markdown + attributes: + value: | + **Thank you for taking the time to report a crash.** + + Use this form when Orca Slicer closes on its own, freezes, or stops responding. + If the application stays open and only produces a wrong result, please use the [Bug report](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=bug_report.yml) form instead. + A printer whose toolhead collides with the print is also a bug report rather than a crash, since the application itself did not stop. + + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. + - type: checkboxes + attributes: + label: Is this crash reproducible in the latest nightly build? + description: > + Please verify this crash still happens in the latest nightly build first. It may already be fixed there: + [Nightly builds](https://github.com/OrcaSlicer/OrcaSlicer/releases/tag/nightly-builds). + options: + - label: I have checked the latest nightly build and the crash is still reproducible + required: true + - type: checkboxes + attributes: + label: Is there an existing issue for this crash? + description: Please search to see if an issue already exists for the crash you encountered. + options: + - label: I have searched the existing issues + required: true + - type: input + id: version + attributes: + label: OrcaSlicer Version + description: Which version of Orca Slicer are you running? You can see the full version in `Help` -> `About Orca Slicer`. + placeholder: e.g. 2.5.0 + validations: + required: true + - type: input + id: working_version + attributes: + label: Regression compared to a previous version + description: Did it work in a previous version? + placeholder: e.g. 2.3.2 + validations: + required: false + - type: dropdown + id: os_type + attributes: + label: "Operating System (OS)" + description: "What OSes are you seeing the crash on?" + multiple: true + options: + - Linux + - macOS + - Windows + validations: + required: true + - type: input + id: os_version + attributes: + label: "OS Version" + description: "What OS version does this relate to?" + placeholder: "i.e. OS: Windows 7/8/10/11 ..., Ubuntu 22.04/Fedora 36 ..., macOS 10.15/11.1/12.3 ..." + validations: + required: true + - type: input + id: printer + attributes: + label: Printer + description: Which printer was selected + placeholder: Voron 2.4/VzBot/Prusa MK4/Bambu Lab X1 series/Bambu Lab P1P/... + validations: + required: true + - type: dropdown + id: crash_moment + attributes: + label: When does the crash happen? + description: Pick the point where Orca Slicer stops working. + options: + - Not sure + - On startup, before the main window appears + - When opening or importing a project or model + - While changing printer, filament or process settings + - While slicing + - In the 3D view, Preview or Assembly view + - When exporting G-code or sending a print to the printer + - On the Device tab, or connecting to a printer (camera, sync, login) + - While using a specific tool, dialog or calibration + - After resuming from sleep or changing monitors + - When closing the application + - No clear pattern + validations: + required: true + - type: dropdown + id: crash_frequency + attributes: + label: How often does it happen? + options: + - Not sure + - Every time + - Often, but not every time + - Rarely + - It only happened once + validations: + required: true + - type: dropdown + id: fresh_config + attributes: + label: Does it still crash with a fresh configuration? + description: > + Close Orca Slicer and rename your configuration folder (`%APPDATA%\OrcaSlicer` on Windows, + `$HOME/Library/Application Support/OrcaSlicer` on macOS, `$HOME/.config/OrcaSlicer` on Linux), + then start it again. Renaming keeps your settings, so you can put the folder back afterwards. + options: + - I have not tried this + - Yes, it still crashes + - No, the crash goes away + validations: + required: true + - type: textarea + id: reproduce_steps + attributes: + label: How to reproduce + description: Please describe the detailed steps that lead to the crash. + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. Scroll down to '...' + 4. Orca Slicer closes + validations: + required: true + - type: textarea + id: system_info + attributes: + label: Additional system information + description: > + Display card and driver version are worth adding for crashes on startup or in the 3D view. + CPU and memory are worth adding for crashes while slicing. + placeholder: | + CPU: 11th gen Intel r core tm i7-1185g7/AMD Ryzen 7 6800h/... + Memory: 32/16 GB... + Display Card: NVIDIA Quadro P400/... + validations: + required: false + - type: textarea + id: file_uploads + attributes: + label: Project file, logs and crash report uploads + description: | + A crash report without logs usually cannot be acted on. Attach the files with the **Paste, drop, or click to add files** control directly underneath this box. Zip anything that is not a `.log`, `.txt` or image, since GitHub rejects other file types, and keep each file under 25 MB. + + * The **project file** used when the crash happened, zipped. Export it just before or after the crash, even if the plate is empty, since we need the configuration it carries. `File` -> `Save project as...` + * The whole **log folder**, zipped rather than single files picked out of it. `Help` -> `Show Configuration Folder` opens it, or find it at: + * Windows: `%APPDATA%\OrcaSlicer\log`, usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` + * macOS: `$HOME/Library/Application Support/OrcaSlicer/log` + * Linux: `$HOME/.config/OrcaSlicer/log` + * Flatpak: `$HOME/.var/app/com.orcaslicer.OrcaSlicer/config/OrcaSlicer/log` + * On Windows the crash itself is written to a separate `crash_*.log` in there, and that is the file we need most. If the zip comes out over 25 MB GitHub will refuse it, so attach the newest log and any `crash_*.log` on their own instead. + * The **operating system crash report**, on macOS and Linux, where Orca Slicer cannot write its own crash log. It is often the only record of where it died: + * macOS: Console.app -> Crash Reports, or `$HOME/Library/Logs/DiagnosticReports/`. The file starts with `OrcaSlicer` and ends in `.ips`. Zip it before attaching, GitHub does not accept `.ips` files. + * Linux: run `orca-slicer` from a terminal (Flatpak: `flatpak run com.orcaslicer.OrcaSlicer`) and paste everything it prints when it dies. On systemd systems `coredumpctl info orca-slicer` gives a backtrace. + placeholder: | + Zipped project file + Zipped log folder + Zipped macOS .ips crash report, or the terminal output on Linux + validations: + required: true + - type: checkboxes + id: file_checklist + attributes: + label: Checklist of files to include + options: + - label: Log folder + - label: Project file + - label: Operating system crash report (macOS and Linux) + - type: textarea + attributes: + label: Anything else? + description: | + Screenshots? References? Anything that will give us more context about the crash you are encountering! + validations: + required: false From bb8c2ae5ce9db94a6262455a89112442e92991cb Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sat, 12 Sep 2026 13:52:05 -0500 Subject: [PATCH 198/208] build: enable -Werror with a documented exception list (#15660) --- CMakeLists.txt | 143 +++++++++++++++++++++++++++++++------------------ 1 file changed, 91 insertions(+), 52 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 85ee9c4232..d2880a7d4b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -557,59 +557,101 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR elseif (NOT MINGW) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) endif () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder" ) - # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. - add_compile_options(-Werror=return-type) + # Every warning is an error unless it appears in one of the two lists below. + # disabled - never wanted. Off everywhere, so it never warns or errors. + # demoted - wanted, not cleared yet. Still warns, does not error. - # Since some portions of code are just commented out or put under conditional compilation, there are - # a bunch of warning related to unused functions and variables. Suppress those warnings to not pollute - # compilers diagnostics output with warnings we not going to look at - add_compile_options(-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-label -Wno-unused-local-typedefs) + # Disabled. + set(warnings_disabled + reorder # members initialised in an order we chose + sign-compare # signed/unsigned comparisons throughout + misleading-indentation # false positives on mixed tabs and spaces + switch # unhandled enum value in a switch + unused-function # commented-out or conditionally compiled code + unused-variable # commented-out or conditionally compiled code + unused-but-set-variable # commented-out or conditionally compiled code + unused-label # commented-out or conditionally compiled code + unused-local-typedefs # commented-out or conditionally compiled code + ) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND warnings_disabled deprecated-declarations) # legacy OpenGL calls + endif () + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) + list(APPEND warnings_disabled ignored-attributes) # from Eigen headers marked SYSTEM + endif () + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + list(APPEND warnings_disabled unknown-pragmas) # igl pragmas, GCC bug 66943 + endif () + foreach (w IN LISTS warnings_disabled) + add_compile_options(-Wno-${w}) + endforeach () - # Ignore signed/unsigned comparison warnings - add_compile_options(-Wno-sign-compare) + # Turn everything else into an error. Dependency headers are exempt because the SYSTEM + # include flag (-imsvc on clang-cl, -isystem elsewhere) keeps their diagnostics out, + # apart from GCC's maybe-uninitialized, demoted below. + add_compile_options(-Werror) - # The mismatch of tabs and spaces throughout the project can sometimes - # cause this warning to appear even though the indentation is fine. - # Some includes also cause the warning - add_compile_options(-Wno-misleading-indentation) + # Demoted. Remove a name once its category is cleared on every compiler. + set(warnings_demoted) + if (APPLE) + list(APPEND warnings_demoted + # MacDarkMode.mm makes two calls to AppKit's private titlebarViewController + # and one to a wxWidgets category on NSTableColumn whose header is not + # imported. Clearing it means declaring the private selectors ourselves, which + # needs a macOS build to verify. + objc-method-access + ) + endif () + if (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") + list(APPEND warnings_demoted + # About two dozen GetProcAddress casts, most in the vendored dark_mode.hpp, + # retype FARPROC to a real signature. The __stdcall typedefs are identical to + # FARPROC on x64, so only arm64 reports them. Clearing them is a separate + # sweep. + cast-function-type-mismatch + ) + endif () + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + list(APPEND warnings_demoted + # maybe-uninitialized runs after inlining and reports inside boost/variant, + # boost/tuple and the bundled clipper header even with -isystem. + maybe-uninitialized - # Disable warning if enum value does not have a corresponding case in switch statement - add_compile_options(-Wno-switch) + # array-bounds is reported once, where ConfigOptionVector::set_at inlines + # into OrcaSlicer.cpp on a branch the preceding type test rules out. + array-bounds - # removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1) - # https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221 - if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) - add_compile_options(-Wno-ignored-attributes) # Tamas: Eigen include dirs are marked as SYSTEM - endif() + # template-id-cdtor is a GCC 14+ warning in the bundled Clipper2 headers. + template-id-cdtor + ) + endif () + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND warnings_demoted + # enum-constexpr-conversion is a Clang warning that defaults to an error, + # present through clang 20 and gone in clang 21. + enum-constexpr-conversion + ) + endif () - # Clang reports legacy OpenGL calls as deprecated. Turn off the warning for now - # to reduce the clutter, we know about this one. It should be reenabled after - # we finally get rid of the deprecated code. - if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - add_compile_options(-Wno-deprecated-declarations) - endif() - - if((${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang") AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag(-Wno-error=enum-constexpr-conversion HAS_WNO_ERROR_ENUM_CONSTEXPR_CONV) - if(HAS_WNO_ERROR_ENUM_CONSTEXPR_CONV) - add_compile_options(-Wno-error=enum-constexpr-conversion) - endif() - endif() - - #GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - # We will turn the warning of for GCC for now: - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - # We will turn the warning of for GCC for now: - add_compile_options(-Wno-unknown-pragmas) - endif() + # The list mixes names not every compiler has, so add each exception only where the + # compiler knows the warning. Probe with the positive -W, which an unknown + # warning fails on both compilers (GCC errors, Clang reports unknown-warning-option). + # An option that takes a =N argument rejects the bare -W, so fall back to + # -W=1 and demote with the trailing =. + include(CheckCXXCompilerFlag) + foreach (category IN LISTS warnings_demoted) + string(MAKE_C_IDENTIFIER "ORCA_HAS_W_${category}" _orca_has_w) + check_cxx_compiler_flag("-W${category}" ${_orca_has_w}) + if (${_orca_has_w}) + add_compile_options(-Wno-error=${category}) + else () + check_cxx_compiler_flag("-W${category}=1" ${_orca_has_w}_arg) + if (${${_orca_has_w}_arg}) + add_compile_options(-Wno-error=${category}=) + endif () + endif () + endforeach () # Compress the debug info with zstd to save space in Flatpak CI builds if(FLATPAK) @@ -619,10 +661,6 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR endif() endif() - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 14) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=template-id-cdtor" ) - endif() - endif() if (SLIC3R_ASAN) @@ -1212,8 +1250,9 @@ endif () if (NOT SLIC3R_WARNINGS) add_compile_options(-w) elseif (MSVC AND NOT IS_CLANG_CL) - # /we4715 is C4715, no return from a non-void function, matching the - # -Werror=return-type the GNU/Clang builds apply. + # /we4715 is C4715, no return from a non-void function, an error on the GNU/Clang + # builds under -Werror. MSVC is not in that model, so this stays a single promoted + # warning. add_compile_options(/W3 /we4715) endif () From c21e48450c44fbf9b08d4ed2647d7921899f47dd Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Sat, 12 Sep 2026 22:21:14 +0300 Subject: [PATCH 199/208] Fix single-instance activation maximizing OrcaSlicer (#15665) --- src/slic3r/GUI/InstanceCheck.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp index bc68a3f788..28c5176cb1 100644 --- a/src/slic3r/GUI/InstanceCheck.cpp +++ b/src/slic3r/GUI/InstanceCheck.cpp @@ -114,7 +114,10 @@ namespace instance_check_internal if (my_instance_hash == other_instance_hash) { BOOST_LOG_TRIVIAL(debug) << "win enum - found correct instance"; orca_slicer_hwnd = hwnd; - ShowWindow(hwnd, SW_SHOWMAXIMIZED); + // Do not alter the window state when opening a file in the existing instance. + // A minimized window still needs restoring before it can receive focus. + if (IsIconic(hwnd)) + ShowWindow(hwnd, SW_RESTORE); SetForegroundWindow(hwnd); return false; } From a7775296b0861a6755f023db4cd550d5095bddeb Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Sun, 13 Sep 2026 05:29:35 -0500 Subject: [PATCH 200/208] Fix macOS custom color accuracy (#15283) * Fix macOS custom color accuracy * Fix wxWidgets dependency patch command * Apply macOS color patch to current wxWidgets branch --- ...001-macos-use-srgb-colour-components.patch | 29 +++++++++++++++++++ deps/wxWidgets/wxWidgets.cmake | 10 +++++++ 2 files changed, 39 insertions(+) create mode 100644 deps/wxWidgets/0001-macos-use-srgb-colour-components.patch diff --git a/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch b/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch new file mode 100644 index 0000000000..decbee0ad9 --- /dev/null +++ b/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch @@ -0,0 +1,29 @@ +diff --git a/src/osx/cocoa/colour.mm b/src/osx/cocoa/colour.mm +index 31515d146f..86b33e94a2 100644 +--- a/src/osx/cocoa/colour.mm ++++ b/src/osx/cocoa/colour.mm +@@ -125,3 +125,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA redComponent]; +@@ -134,3 +134,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA greenComponent]; +@@ -143,3 +143,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA blueComponent]; +@@ -152,3 +152,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA alphaComponent]; +@@ -160,3 +160,3 @@ + { +- return [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] != nil; ++ return [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] != nil; + } diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index 1e2cc85f78..e57e82f3e9 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -21,12 +21,22 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () +set(_wx_patch_command "") +if (APPLE) + set(_wx_patch_command + ${GIT_EXECUTABLE} checkout -f -- src/osx/cocoa/colour.mm + COMMAND ${GIT_EXECUTABLE} apply --verbose + ${CMAKE_CURRENT_LIST_DIR}/0001-macos-use-srgb-colour-components.patch + ) +endif () + orcaslicer_add_cmake_project( wxWidgets GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" GIT_TAG v3.3.2 GIT_SHALLOW ON GIT_SUBMODULES 3rdparty/catch 3rdparty/pcre 3rdparty/libwebp + PATCH_COMMAND ${_wx_patch_command} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG} CMAKE_ARGS -DwxBUILD_PRECOMP=ON From 15ebdc379918be1e6302920ebbb24565ed5f11de Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 13 Sep 2026 14:41:27 +0300 Subject: [PATCH 201/208] enable menu icons on macOS and Linux for plate / background menus (#15620) Update GUI_Factories.cpp --- src/slic3r/GUI/GUI_Factories.cpp | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index d8e54978fa..05248c38df 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1392,7 +1392,7 @@ void MenuFactory::create_default_menu() { wxMenu* sub_menu_primitives = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); wxMenu* sub_menu_handy = append_submenu_add_handy_model(&m_default_menu, ModelVolumeType::INVALID); -#ifdef __WINDOWS__ + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", []() {return true; }, m_parent); append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", @@ -1400,15 +1400,6 @@ void MenuFactory::create_default_menu() append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", &m_default_menu, []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#else - append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", - []() {return true; }, m_parent); - append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", - []() {return true; }, m_parent); - append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models - [](wxCommandEvent&) { plater()->add_file(); }, "", &m_default_menu, - []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#endif m_default_menu.AppendSeparator(); @@ -1789,7 +1780,6 @@ void MenuFactory::create_plate_menu() wxMenu* sub_menu_primitives = append_submenu_add_generic(menu, ModelVolumeType::INVALID); wxMenu* sub_menu_handy = append_submenu_add_handy_model(menu, ModelVolumeType::INVALID); -#ifdef __WINDOWS__ append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", []() {return true; }, m_parent); append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", @@ -1797,15 +1787,7 @@ void MenuFactory::create_plate_menu() append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", menu, []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#else - append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", - []() {return true; }, m_parent); - append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", - []() {return true; }, m_parent); - append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models - [](wxCommandEvent&) { plater()->add_file(); }, "", menu, - []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#endif + append_menu_item_replace_all_with_stl(menu); From 9e8fbc17dde6699650d9fd88e48bd53419b2d2bd Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 13 Sep 2026 14:39:55 -0500 Subject: [PATCH 202/208] ci: clear the per-run annotations and revive the weekly doxygen job (#15659) --- .github/workflows/build_all.yml | 4 ++-- .github/workflows/build_orca.yml | 4 +++- .github/workflows/doxygen-docs.yml | 17 ++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 570d3203ed..ae5231e784 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -100,7 +100,7 @@ jobs: matrix: include: ${{ fromJSON(vars.SELF_HOSTED && '[{"arch":"x64","os":"orca-win-server","compiler":"clang"}]' - || '[{"arch":"x64","os":"windows-latest","compiler":"clang"},{"arch":"arm64","os":"windows-11-arm","compiler":"clang"}]') }} + || '[{"arch":"x64","os":"windows-latest","compiler":"clang"},{"arch":"arm64","os":"windows-11-vs2026-arm","compiler":"clang"}]') }} needs: check_build_script # Don't run scheduled builds on forks: if: ${{ !cancelled() && needs.check_build_script.result == 'success' && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} @@ -169,7 +169,7 @@ jobs: if: ${{ !cancelled() && success() && !vars.SELF_HOSTED }} uses: ./.github/workflows/unit_tests.yml with: - os: windows-11-arm + os: windows-11-vs2026-arm artifact: ${{ github.sha }}-tests-windows-arm64 test-dir: build-arm64/tests unit_tests_macos_arm64: diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 1b7fd37a0f..4b53767d4f 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -96,12 +96,14 @@ jobs: id: ccache if: ${{ !inputs.macos-combine-only }} continue-on-error: true - uses: hendrikmuhs/ccache-action@v1.2 + uses: hendrikmuhs/ccache-action@v1.2.24 with: key: ${{ env.CCACHE_LEG }} max-size: 3G restore: false save: false + # ccache -s runs as its own step; no summary table per job. + job-summary: '' - name: Restore compiler cache if: ${{ steps.ccache.outcome == 'success' }} diff --git a/.github/workflows/doxygen-docs.yml b/.github/workflows/doxygen-docs.yml index 6af7255fa3..d7d2f982e7 100644 --- a/.github/workflows/doxygen-docs.yml +++ b/.github/workflows/doxygen-docs.yml @@ -19,11 +19,18 @@ jobs: permissions: contents: read steps: - - uses: thejerrybao/setup-swap-space@v1 - with: - swap-space-path: /swapfile - swap-size-gb: 8 - remove-existing-swap-files: true + # Doxygen with call graphs over all of src/ outgrows the runner's RAM; + # replace the runner's swapfile with an 8 GB one. + - name: Grow swap space + run: | + set -euo pipefail + sudo swapoff -a + sudo rm -f /swapfile + sudo fallocate -l 8G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + free -h - name: Checkout repository uses: actions/checkout@v7 From d643b10ac4495e81192136dbe69f55a80949ce23 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 13 Sep 2026 15:46:03 -0500 Subject: [PATCH 203/208] build: expand PrintConfig.hpp option lists twice per class instead of five times (#15658) --- src/libslic3r/PrintConfig.hpp | 84 +++++++++++++++++---------------- tests/libslic3r/test_config.cpp | 55 +++++++++++++++++++++ 2 files changed, 98 insertions(+), 41 deletions(-) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f7cbe8b2e5..18e66adb34 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1011,41 +1011,46 @@ public: \ { PrintConfigDef::handle_legacy(opt_key, value); } #define PRINT_CONFIG_CLASS_ELEMENT_DEFINITION(r, data, elem) BOOST_PP_TUPLE_ELEM(0, elem) BOOST_PP_TUPLE_ELEM(1, elem); -#define PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2(KEY) cache.opt_add(BOOST_PP_STRINGIZE(KEY), base_ptr, this->KEY); -#define PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION(r, data, elem) PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2(BOOST_PP_TUPLE_ELEM(1, elem)) -#define PRINT_CONFIG_CLASS_ELEMENT_HASH(r, data, elem) boost::hash_combine(seed, BOOST_PP_TUPLE_ELEM(1, elem).hash()); -#define PRINT_CONFIG_CLASS_ELEMENT_EQUAL(r, data, elem) if (! (BOOST_PP_TUPLE_ELEM(1, elem) == rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return false; -#define PRINT_CONFIG_CLASS_ELEMENT_LOWER(r, data, elem) \ - if (BOOST_PP_TUPLE_ELEM(1, elem) < rhs.BOOST_PP_TUPLE_ELEM(1, elem)) return true; \ - if (! (BOOST_PP_TUPLE_ELEM(1, elem) == rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return false; +#define PRINT_CONFIG_CLASS_ELEMENT_VISIT(r, data, elem) if (! f(BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(1, elem)), this->BOOST_PP_TUPLE_ELEM(1, elem), rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return; +// Each option list is expanded into the members and again into for_each_option_pair(), which calls +// f(key, this->option, rhs.option) in declaration order and stops when f returns false. hash(), +// operator==, operator< and initialize() iterate the options through that visitor. +#define PRINT_CONFIG_CLASS_COMMON_BODY(CLASS_NAME) \ + size_t hash() const throw() \ + { \ + size_t seed = 0; \ + this->for_each_option_pair(*this, [&seed](const char*, const auto &a, const auto&) { boost::hash_combine(seed, a.hash()); return true; }); \ + return seed; \ + } \ + bool operator==(const CLASS_NAME &rhs) const throw() \ + { \ + bool eq = true; \ + this->for_each_option_pair(rhs, [&eq](const char*, const auto &a, const auto &b) { eq = (a == b); return eq; }); \ + return eq; \ + } \ + bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ + bool operator<(const CLASS_NAME &rhs) const throw() \ + { \ + int c = 0; \ + this->for_each_option_pair(rhs, [&c](const char*, const auto &a, const auto &b) { if (a < b) c = -1; else if (! (a == b)) c = 1; return c == 0; }); \ + return c < 0; \ + } \ +protected: \ + void initialize(StaticCacheBase &cache, const char *base_ptr) \ + { \ + this->for_each_option_pair(*this, [&cache, base_ptr](const char *key, const auto &a, const auto&) { cache.opt_add(key, base_ptr, a); return true; }); \ + } #define PRINT_CONFIG_CLASS_DEFINE(CLASS_NAME, PARAMETER_DEFINITION_SEQ) \ class CLASS_NAME : public StaticPrintConfig { \ STATIC_PRINT_CONFIG_CACHE(CLASS_NAME) \ public: \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_DEFINITION, _, PARAMETER_DEFINITION_SEQ) \ - size_t hash() const throw() \ + template void for_each_option_pair(const CLASS_NAME &rhs, F &&f) const \ { \ - size_t seed = 0; \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_HASH, _, PARAMETER_DEFINITION_SEQ) \ - return seed; \ - } \ - bool operator==(const CLASS_NAME &rhs) const throw() \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_EQUAL, _, PARAMETER_DEFINITION_SEQ) \ - return true; \ - } \ - bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ - bool operator<(const CLASS_NAME &rhs) const throw() \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_LOWER, _, PARAMETER_DEFINITION_SEQ) \ - return false; \ - } \ -protected: \ - void initialize(StaticCacheBase &cache, const char *base_ptr) \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION, _, PARAMETER_DEFINITION_SEQ) \ + BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_VISIT, _, PARAMETER_DEFINITION_SEQ) \ } \ + PRINT_CONFIG_CLASS_COMMON_BODY(CLASS_NAME) \ }; #define PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST_ITEM(r, data, i, elem) BOOST_PP_COMMA_IF(i) public elem @@ -1059,43 +1064,43 @@ protected: \ if (! (*static_cast(this) == static_cast(rhs))) return false; // Generic version, with or without new parameters. Don't use this directly. -#define PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION, PARAMETER_REGISTRATION, PARAMETER_HASHES, PARAMETER_EQUALS) \ +#define PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION, PARAMETER_VISIT) \ class CLASS_NAME : PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST(CLASSES_PARENTS_TUPLE) { \ STATIC_PRINT_CONFIG_CACHE_DERIVED(CLASS_NAME) \ CLASS_NAME() : PRINT_CONFIG_CLASS_DERIVED_INITIALIZER(CLASSES_PARENTS_TUPLE, 0) { assert(s_cache_##CLASS_NAME.initialized()); *this = s_cache_##CLASS_NAME.defaults(); } \ public: \ PARAMETER_DEFINITION \ + template void for_each_option_pair(const CLASS_NAME &rhs, F &&f) const { PARAMETER_VISIT } \ size_t hash() const throw() \ { \ size_t seed = 0; \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_DERIVED_HASH, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_PARENTS_TUPLE)) \ - PARAMETER_HASHES \ + this->for_each_option_pair(*this, [&seed](const char*, const auto &a, const auto&) { boost::hash_combine(seed, a.hash()); return true; }); \ return seed; \ } \ bool operator==(const CLASS_NAME &rhs) const throw() \ { \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_DERIVED_EQUAL, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_PARENTS_TUPLE)) \ - PARAMETER_EQUALS \ - return true; \ + bool eq = true; \ + this->for_each_option_pair(rhs, [&eq](const char*, const auto &a, const auto &b) { eq = (a == b); return eq; }); \ + return eq; \ } \ bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ protected: \ CLASS_NAME(int) : PRINT_CONFIG_CLASS_DERIVED_INITIALIZER(CLASSES_PARENTS_TUPLE, 1) {} \ void initialize(StaticCacheBase &cache, const char* base_ptr) { \ PRINT_CONFIG_CLASS_DERIVED_INITCACHE(CLASSES_PARENTS_TUPLE) \ - PARAMETER_REGISTRATION \ + this->for_each_option_pair(*this, [&cache, base_ptr](const char *key, const auto &a, const auto&) { cache.opt_add(key, base_ptr, a); return true; }); \ } \ }; // Variant without adding new parameters. #define PRINT_CONFIG_CLASS_DERIVED_DEFINE0(CLASS_NAME, CLASSES_PARENTS_TUPLE) \ - PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, BOOST_PP_EMPTY(), BOOST_PP_EMPTY(), BOOST_PP_EMPTY(), BOOST_PP_EMPTY()) + PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, BOOST_PP_EMPTY(), BOOST_PP_EMPTY()) // Variant with adding new parameters. #define PRINT_CONFIG_CLASS_DERIVED_DEFINE(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION_SEQ) \ PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_DEFINITION, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_HASH, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_EQUAL, _, PARAMETER_DEFINITION_SEQ)) + BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_VISIT, _, PARAMETER_DEFINITION_SEQ)) // This object is mapped to Perl as Slic3r::Config::PrintObject. PRINT_CONFIG_CLASS_DEFINE( @@ -2148,11 +2153,8 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE0( #undef STATIC_PRINT_CONFIG_CACHE_BASE #undef STATIC_PRINT_CONFIG_CACHE_DERIVED #undef PRINT_CONFIG_CLASS_ELEMENT_DEFINITION -#undef PRINT_CONFIG_CLASS_ELEMENT_EQUAL -#undef PRINT_CONFIG_CLASS_ELEMENT_LOWER -#undef PRINT_CONFIG_CLASS_ELEMENT_HASH -#undef PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION -#undef PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2 +#undef PRINT_CONFIG_CLASS_ELEMENT_VISIT +#undef PRINT_CONFIG_CLASS_COMMON_BODY #undef PRINT_CONFIG_CLASS_DEFINE #undef PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST #undef PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST_ITEM diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp index 9a70ecbaeb..3813e2df3f 100644 --- a/tests/libslic3r/test_config.cpp +++ b/tests/libslic3r/test_config.cpp @@ -1161,3 +1161,58 @@ TEST_CASE("min_object_distance yields no floor when an FFF config lacks the opti CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(12., 1e-9)); } } + +TEST_CASE("Static print configs compare, order and hash by their option values", "[Config]") +{ + // PrintObjectConfig comes from PRINT_CONFIG_CLASS_DEFINE; PrintConfig combines MachineEnvelopeConfig + // and GCodeConfig through PRINT_CONFIG_CLASS_DERIVED_DEFINE. Both generate hash(), operator==, + // operator< and the option registration from the same option list. The hash inequalities use fixed + // inputs, so they are deterministic; they check that hash() covers the changed option. + SECTION("default-constructed configs are equal and find their options by key") + { + PrintObjectConfig a, b; + REQUIRE(a == b); + REQUIRE(a.hash() == b.hash()); + REQUIRE_FALSE(a < b); + REQUIRE_FALSE(b < a); + REQUIRE(a.optptr("layer_height") == &a.layer_height); + REQUIRE(a.optptr("brim_object_gap") == &a.brim_object_gap); + } + + SECTION("one differing option makes the configs unequal and orders them") + { + PrintObjectConfig a, b; + b.layer_height.value = a.layer_height.value + 0.05; + REQUIRE(a != b); + REQUIRE(a.hash() != b.hash()); + REQUIRE(a < b); + REQUIRE_FALSE(b < a); + } + + SECTION("ordering is decided by the first option in declaration order that differs") + { + PrintObjectConfig a, b; + a.brim_object_gap.value = b.brim_object_gap.value + 1.0; // declared first + a.layer_height.value = b.layer_height.value - 0.05; // declared later, points the other way + REQUIRE(b < a); + REQUIRE_FALSE(a < b); + } + + SECTION("a derived config sees differences in its parents and in its own options") + { + PrintConfig a, b; + REQUIRE(a == b); + REQUIRE(a.hash() == b.hash()); + + b.gcode_flavor.value = b.gcode_flavor.value == gcfMarlinLegacy ? gcfKlipper : gcfMarlinLegacy; // GCodeConfig parent + REQUIRE(a != b); + REQUIRE(a.hash() != b.hash()); + + PrintConfig c, d; + d.skirt_distance.value = c.skirt_distance.value + 1.0; // PrintConfig's own list + REQUIRE(c != d); + REQUIRE(c.hash() != d.hash()); + REQUIRE(c.optptr("skirt_distance") == &c.skirt_distance); + REQUIRE(c.optptr("gcode_flavor") == &c.gcode_flavor); + } +} From 636b623cb7a9cefe6194e367354876531d1cb581 Mon Sep 17 00:00:00 2001 From: Daniel Williams <35799546+danielwoz@users.noreply.github.com> Date: Mon, 14 Sep 2026 04:55:42 +0800 Subject: [PATCH 204/208] tests: regression test that every PrintRegion/Object field is in a preset key list (#13466) Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_preset_options.cpp | 70 +++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 tests/libslic3r/test_preset_options.cpp diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index 5c10ab1496..2f859f46fe 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -19,6 +19,7 @@ add_executable(${_TEST_NAME}_tests test_preset_setting_id.cpp test_preset_diff.cpp test_vendor_cache.cpp + test_preset_options.cpp test_elephant_foot_compensation.cpp test_fill_corner_smoothing.cpp test_filament_mixer.cpp diff --git a/tests/libslic3r/test_preset_options.cpp b/tests/libslic3r/test_preset_options.cpp new file mode 100644 index 0000000000..1763f5fbc7 --- /dev/null +++ b/tests/libslic3r/test_preset_options.cpp @@ -0,0 +1,70 @@ +// Regression test for the "option in def + UI but missing from preset key list" +// crash class. +// +// The print preset's DynamicPrintConfig is seeded with only the keys returned by +// Preset::print_options() (PresetBundle.cpp). A field added to PrintRegionConfig +// or PrintObjectConfig and registered via print_config_def plus a TabPrint +// optgroup, but left out of print_options(), still gets its control built; on tab +// activation reload_config -> get_config_value dispatches to opt_bool/opt_int on a +// DynamicPrintConfig with no entry for the key, and the accessor null-derefs the +// result of option(key). +// +// The invariant asserted here is the inverse: every key declared on +// PrintRegionConfig and PrintObjectConfig appears in Preset::print_options() or +// Preset::filament_options(), the two preset key lists that seed a print preset's +// DynamicConfig. + +#include + +#include "libslic3r/Preset.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include + +using namespace Slic3r; + +namespace { + +// Deprecated keys renamed in handle_legacy() (ironing_direction -> +// ironing_angle, wall_infill_order -> wall_sequence); neither is in a +// preset list. Register new options in a preset list, not here. +const std::set kDeprecatedRegionFields = { + "ironing_direction", + "wall_infill_order", +}; + +void check_keys_are_in_a_preset(const t_config_option_keys& keys, const std::string& class_name) +{ + REQUIRE_FALSE(keys.empty()); + const auto& print_options = Preset::print_options(); + const auto& filament_options = Preset::filament_options(); + const std::set in_print(print_options.begin(), print_options.end()); + const std::set in_filament(filament_options.begin(), filament_options.end()); + for (const std::string& key : keys) { + DYNAMIC_SECTION(class_name << "::" << key) + { + INFO("'" << key << "' on " << class_name + << " is missing from " + "Preset::print_options()/filament_options(); add it to " + "s_Preset_print_options (or s_Preset_filament_options) in Preset.cpp."); + const bool registered = in_print.count(key) || in_filament.count(key) || kDeprecatedRegionFields.count(key); + REQUIRE(registered); + } + } +} + +} // namespace + +// Bodies are laid out like the rest of the test suite rather than collapsed +// onto the brace line. +// clang-format off +TEST_CASE("Every PrintRegionConfig field is registered in a preset key list", "[Preset][Config]") +{ + check_keys_are_in_a_preset(PrintRegionConfig::defaults().keys(), "PrintRegionConfig"); +} + +TEST_CASE("Every PrintObjectConfig field is registered in a preset key list", "[Preset][Config]") +{ + check_keys_are_in_a_preset(PrintObjectConfig::defaults().keys(), "PrintObjectConfig"); +} +// clang-format on From 26fa1694d962a557d6681c9b74466069e279be4d Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Sun, 13 Sep 2026 17:08:08 -0500 Subject: [PATCH 205/208] ci: save the compiler cache from cancelled and failed builds too (#15668) --- .github/workflows/build_all.yml | 17 +++++++++++++---- .github/workflows/build_orca.yml | 20 +++++++++++++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index ae5231e784..10edec5aaa 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -313,6 +313,7 @@ jobs: echo "CCACHE_ENTRY=ccache-$leg-${{ github.run_id }}-${{ github.run_attempt }}" >> "$GITHUB_ENV" shell: bash - name: Restore compiler cache + id: ccache_restore uses: actions/cache/restore@v6 with: path: .flatpak-builder/ccache @@ -371,24 +372,31 @@ jobs: save-cache: false arch: ${{ matrix.variant.arch }} upload-artifact: false + # The build has just touched everything it can use, so an object untouched + # for a week is dead, usually orphaned by a flag change. - name: Compiler cache statistics if: always() run: | export CCACHE_DIR=$PWD/.flatpak-builder/ccache + ccache --evict-older-than 7d ccache -s -v || ccache -s shell: bash # Save the new entry first, then drop the older ones for this leg on this - # ref, so a failed save leaves the previous entry in place. + # ref, so a failed save leaves the previous entry in place. A cancelled or + # failed build saves too, since what it compiled is still valid; a restore + # that did not finish does not, since the directory may be a truncated copy. - name: Save compiler cache id: ccache_save - if: github.event_name != 'pull_request' + if: ${{ always() && steps.ccache_restore.outcome == 'success' && github.event_name != 'pull_request' }} uses: actions/cache/save@v6 with: path: .flatpak-builder/ccache key: ${{ env.CCACHE_ENTRY }} - name: Drop older compiler cache entries - if: ${{ steps.ccache_save.outcome == 'success' }} + if: ${{ always() && steps.ccache_save.outcome == 'success' }} # The container has no gh, so this is the list and delete over the REST API. + # Older means a lower run id, so two runs finishing close together keep + # the newer entry whichever of them cleans up last. continue-on-error: true env: GH_TOKEN: ${{ github.token }} @@ -396,7 +404,8 @@ jobs: api="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/caches" curl -sSf -H "Authorization: Bearer $GH_TOKEN" \ "$api?ref=$GITHUB_REF&key=ccache-$CCACHE_LEG-&per_page=100" \ - | jq -r --arg keep "$CCACHE_ENTRY" '.actions_caches[] | select(.key != $keep) | .id' \ + | jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \ + '.actions_caches[] | select((.key | ltrimstr($prefix) | split("-")[0] | tonumber?) < $run) | .id' \ | while read -r id; do curl -sSf -X DELETE -H "Authorization: Bearer $GH_TOKEN" "$api/$id" done diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 4b53767d4f..95ec52a65d 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -106,6 +106,7 @@ jobs: job-summary: '' - name: Restore compiler cache + id: ccache_restore if: ${{ steps.ccache.outcome == 'success' }} uses: actions/cache/restore@v6 with: @@ -724,31 +725,40 @@ jobs: asset_content_type: application/octet-stream max_releases: 1 + # The build has just touched everything it can use, so an object + # untouched for a week is dead, usually orphaned by a flag change. - name: Compiler cache statistics if: ${{ always() && steps.ccache.outcome == 'success' }} shell: bash - run: ccache -s -v || ccache -s + run: | + ccache --evict-older-than 7d + ccache -s -v || ccache -s # Entries are immutable, so the new one is saved first and the older # ones for this leg on this ref are dropped afterwards: a failed save - # leaves the previous entry in place. + # leaves the previous entry in place. A cancelled or failed build saves + # too, since what it compiled is still valid; a restore that did not + # finish does not, since the directory may be a truncated copy. - name: Save compiler cache id: ccache_save - if: ${{ steps.ccache.outcome == 'success' && github.event_name != 'pull_request' }} + if: ${{ always() && steps.ccache_restore.outcome == 'success' && github.event_name != 'pull_request' }} uses: actions/cache/save@v6 with: path: ${{ github.workspace }}/.ccache key: ${{ env.CCACHE_ENTRY }} - name: Drop older compiler cache entries - if: ${{ steps.ccache_save.outcome == 'success' }} + if: ${{ always() && steps.ccache_save.outcome == 'success' }} # A read-only token (fork PRs) cannot delete; that only costs storage. + # Older means a lower run id, so two runs finishing close together keep + # the newer entry whichever of them cleans up last. continue-on-error: true shell: bash env: GH_TOKEN: ${{ github.token }} run: | gh cache list --ref "$GITHUB_REF" --key "ccache-$CCACHE_LEG-" --limit 100 --json id,key \ - | jq -r --arg keep "$CCACHE_ENTRY" '.[] | select(.key != $keep) | .id' \ + | jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \ + '.[] | select((.key | ltrimstr($prefix) | split("-")[0] | tonumber?) < $run) | .id' \ | tr -d '\r' \ | while read -r id; do gh cache delete "$id"; done From aef9ca2efb54df9a8ae020fc53d5a7bec359c229 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Mon, 14 Sep 2026 01:42:49 +0300 Subject: [PATCH 206/208] Fix label object error for toolchanges without object instances (#15666) --- src/libslic3r/GCode.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e9cdb620e0..4aa45a60ed 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -6308,8 +6308,13 @@ LayerResult GCode::process_layer( all_label_ids.insert(inst.label_object_id); break; } - std::vector filament_instances_id(all_label_ids.begin(), all_label_ids.end()); - m_filament_instances_code = _encode_label_ids_to_base64(filament_instances_id); + // Orca: A scheduled extruder may have no object instances on this layer. + // Clear any pending mask so it cannot be emitted for the wrong toolchange. + m_filament_instances_code.clear(); + if (!all_label_ids.empty()) { + std::vector filament_instances_id(all_label_ids.begin(), all_label_ids.end()); + m_filament_instances_code = _encode_label_ids_to_base64(filament_instances_id); + } } // The inline _extrude hook may already have taken the snapshot mid-extrusion on a From fd63164268bf6835612ee719cc77e124c687c974 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Mon, 14 Sep 2026 03:03:45 +0300 Subject: [PATCH 207/208] Fix Printer Agent preset undo (#15645) Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- src/slic3r/GUI/OptionsGroup.cpp | 8 +++--- src/slic3r/GUI/Tab.cpp | 44 ++++----------------------------- 2 files changed, 8 insertions(+), 44 deletions(-) diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 7d63556eff..99151ca599 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -798,11 +798,9 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, #endif else if (opt_key == "printer_agent") { - // why: printer_agent is a coString kept out of m_opt_map. The generic non-opt_map revert - // below restores the edited config from get_value(), but a deregistered/"(missing)" saved - // id has no selectable row, so the field yields no value and the edited config keeps the - // user's interim pick -> stuck dirty. Restore the SAVED id straight into the edited config - // (displayable or not; config is the saved or system baseline), then repaint and notify. + // A deregistered/"(missing)" saved id has no selectable row, so the field yields no + // value. Restore the saved id directly instead of letting the generic revert path read + // the field value back into the edited config. const std::string saved_id = config.opt_string("printer_agent"); set_value(opt_key, saved_id); this->change_opt_value(opt_key, saved_id); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 2dedb23365..914e4cc7bb 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5029,28 +5029,12 @@ void TabPrinter::build_fff() auto registered_printer_agents = NetworkAgentFactory::get_registered_printer_agents(); if (!registered_printer_agents.empty()) { - ConfigOptionDef def; - def.type = coString; - def.gui_type = ConfigOptionDef::GUIType::printer_agent_select; - def.width = 3 * Field::def_width_wider() / 2; - def.label = L("Printer Agent"); - def.tooltip = L("Select the network agent implementation for printer communication. " + option = optgroup->get_option("printer_agent"); + option.opt.gui_type = ConfigOptionDef::GUIType::printer_agent_select; + option.opt.width = 3 * Field::def_width_wider() / 2; + option.opt.tooltip = L("Select the network agent implementation for printer communication. " "Available agents are registered at startup."); - def.mode = comAdvanced; - - // Create the field without get_option() so it is not registered in m_opt_map. - // ConfigOptionsGroup handles printer_agent before the generic mapped write path. - Line agent_line = optgroup->create_single_option_line(Option(def, "printer_agent")); - optgroup->append_line(agent_line); - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - choice->set_value(m_config->opt_string("printer_agent"), false); - } - - // Register by hand so the UnsavedChanges dialog can render a row for it. - wxGetApp().sidebar().get_searcher().add_key("printer_agent", m_type, optgroup->title, - optgroup->config_category()); + optgroup->append_single_option_line(option); } } @@ -5912,15 +5896,6 @@ void TabPrinter::reload_config() if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); - // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - { - const std::string selected_agent = m_config->opt_string("printer_agent"); - choice->set_value(selected_agent, false); - } - } } void TabPrinter::activate_selected_page(std::function throw_if_canceled) @@ -5932,15 +5907,6 @@ void TabPrinter::activate_selected_page(std::function throw_if_canceled) if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); - // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - { - const std::string selected_agent = m_config->opt_string("printer_agent"); - choice->set_value(selected_agent, false); - } - } } void TabPrinter::clear_pages() From c5b152b722245f96d6baad88830b38f4c4a3e167 Mon Sep 17 00:00:00 2001 From: packerlschupfer <83344883+packerlschupfer@users.noreply.github.com> Date: Mon, 14 Sep 2026 05:37:05 +0200 Subject: [PATCH 208/208] CLI: record command-line overrides in different_settings_to_system (#15642) * CLI: record command-line overrides in different_settings_to_system Settings passed on the command line (--sparse-infill-density 25% ...) override the loaded presets when m_extra_config is applied to m_print_config, but nothing recorded them in different_settings_to_system. The exported project therefore carried the new value with no mark that it was modified, and re-opening it in the GUI reverted it to the system preset's value -- the same failure the preset-leaf diff fixes for user presets, via a different source of override. The key set comes from m_config, not m_extra_config. read_cli() puts only what the user typed into m_config and setup() adds nothing but CLI-own defaults (none of the keys run() materialises there is a preset option), whereas the CLI writes its own values into m_extra_config (has_filament_switcher, filament_colour, filament_map ...), which must not be reported as user overrides. Values are snapshotted just before the apply and only keys the override actually changed are recorded: a typed value equal to the loaded one modifies nothing, and listing it would read as a spurious difference against what the GUI writes. Each key lands in the column(s) whose preset type owns it -- process, every filament, printer -- and a key already present is not duplicated. Keys no preset owns (curr_bed_type, a project setting) land nowhere, as in the GUI. Follow-up to #15595, split out at review. * CLI: judge command-line overrides the way the value is read Review follow-ups on the override recording: - Lists were compared as whole serialized strings. read_cli() builds a fresh one-entry list, so --nozzle-temperature 245 against 245,245,245 on a three-filament project was recorded in every filament column although nothing changed. Lists are now compared entry by entry with a missing entry read as the first, as get_at() reads it (and as resize() pads). - The log line fired for every changed key, including ones no preset owns (curr_bed_type) and which therefore land in no column. It now fires only when a column took the key. - m_print_config.has(key) straight after apply(m_extra_config, true) was always true, both configs sharing print_config_def; removed. columns.size() >= 2 also always holds after the resize to filament_count + 2 -- different_settings_to_system is not a CLI option, so nothing in between can shrink it -- but that rests on code far away, so it stays a plain check rather than an assert: release builds compile asserts out, and a _GLIBCXX_ASSERTIONS build would abort on columns[0]. Deliberately NOT done: comparing a key the loaded config lacks against its built-in default. On reopen the GUI restores an unlisted key from the SYSTEM preset, not the default. A 3MF written before an option existed leaves it absent here, so --sparse-infill-density 20% (the default) against a Prusa system 15% would go unrecorded and be reverted to 15%. Absent keys stay always-recorded: over-recording is cosmetic, under-recording loses the value. Verified that such a key really is absent at this point, rather than filled from the system preset. Reported by HanifKoh and raistlin7447 in review of #15642. --- src/OrcaSlicer.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index d3e24437fb..499e73d073 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -3846,9 +3846,94 @@ int CLI::run(int argc, char **argv) } } + //ORCA: settings passed on the command line (--sparse-infill-density 25% ...) override the loaded + // presets right here, so they belong in different_settings_to_system just as a preset + // override does. Without them re-opening the exported project in the GUI shows nothing + // modified and reverts those values to the system presets'. + // + // The keys come from m_config, not m_extra_config: read_cli() puts only what the user typed + // into m_config (setup() adds nothing but CLI-own defaults), whereas the CLI writes its own + // values into m_extra_config. Only keys whose value the override actually changed are + // recorded -- a typed value equal to the loaded one modifies nothing -- and each lands in + // the column(s) whose preset type owns it: [0] process, [1..n-2] filaments, [n-1] printer. + // + // "Changed" is judged the way the value is read: a list is compared entry by entry with a + // missing entry read as the first, as get_at() does -- so --nozzle-temperature 245 against + // 245,245,245 is no change, although the two serialize differently. + // + // A key the loaded config does not carry at all is always recorded, even if the typed value + // equals the built-in default. On reopen the GUI restores an unlisted key from the SYSTEM + // preset, which need not match that default: a 3MF written before an option existed leaves + // it absent here, and --sparse-infill-density 20% (the default) against a Prusa system 15% + // would otherwise go unrecorded and be reverted. Over-recording is cosmetic; under-recording + // loses the value. + std::map> cli_override_before; + for (const std::string &key : m_config.keys()) { + if (!m_extra_config.has(key)) + continue; + const ConfigOption *loaded = m_print_config.option(key); + cli_override_before[key].reset(loaded != nullptr ? loaded->clone() : nullptr); // null: always recorded + } + // Apply command line options to a more specific DynamicPrintConfig which provides normalize() // (command line options override --load files) m_print_config.apply(m_extra_config, true); + + if (!cli_override_before.empty()) { + std::vector &columns = m_print_config.option("different_settings_to_system", true)->values; + auto owned_by = [](const std::vector &options, const std::string &key) { + return std::find(options.begin(), options.end(), key) != options.end(); + }; + auto add_to_column = [&columns](size_t index, const std::string &key) { + std::vector keys; + Slic3r::unescape_strings_cstyle(columns[index], keys); + if (std::find(keys.begin(), keys.end(), key) == keys.end()) { + keys.push_back(key); + columns[index] = Slic3r::escape_strings_cstyle(keys); + } + }; + auto same_value = [](const ConfigOption *a, const ConfigOption *b) { + if (a == nullptr || b == nullptr) + return false; + const auto *va = dynamic_cast(a); + const auto *vb = dynamic_cast(b); + if (va == nullptr || vb == nullptr) + return va == vb && a->serialize() == b->serialize(); + const std::vector ea = va->vserialize(), eb = vb->vserialize(); + if (ea.empty() || eb.empty()) + return ea.empty() && eb.empty(); + for (size_t i = 0; i < std::max(ea.size(), eb.size()); ++i) + if (ea[i < ea.size() ? i : 0] != eb[i < eb.size() ? i : 0]) + return false; + return true; + }; + //ORCA: always true after the resize to filament_count + 2 above, and nothing in between can + // shrink the column vector -- different_settings_to_system is not a CLI option. Kept as + // a check rather than an assert: release builds compile asserts out, so an assert would + // protect nothing, while a build with _GLIBCXX_ASSERTIONS would abort on columns[0]. + if (columns.size() >= 2) { + for (const auto &[key, before] : cli_override_before) { + if (same_value(before.get(), m_print_config.option(key))) + continue; + bool recorded = false; + if (owned_by(Preset::print_options(), key)) { + add_to_column(0, key); + recorded = true; + } + if (owned_by(Preset::filament_options(), key)) { + for (size_t i = 1; i + 1 < columns.size(); ++i) + add_to_column(i, key); + recorded = true; + } + if (owned_by(Preset::printer_options(), key)) { + add_to_column(columns.size() - 1, key); + recorded = true; + } + if (recorded) + BOOST_LOG_TRIVIAL(info) << boost::format("CLI: override %1% recorded in different_settings_to_system") % key; + } + } + } // Normalizing after importing the 3MFs / AMFs m_print_config.normalize_fdm();